diff --git a/bench/results/2026-06-12T0412-f0ec24a-gate-ink-ink-r0.json b/bench/results/2026-06-12T0412-f0ec24a-gate-ink-ink-r0.json new file mode 100644 index 000000000000..fb5eecbb6a3d --- /dev/null +++ b/bench/results/2026-06-12T0412-f0ec24a-gate-ink-ink-r0.json @@ -0,0 +1,526 @@ +{ + "meta": { + "cell": "gate", + "ui": "ink", + "config": "ink", + "mode": "digest", + "rep": 0, + "run_id": "mqaeu4s1-5kii", + "utc": "2026-06-12T04:12:13.105Z", + "sha": "f0ec24ad5", + "node": "/home/daimon/.local/share/fnm/node-versions/v26.3.0/installation/bin/node", + "node_version": "v26.3.0", + "pty": { + "cols": 120, + "rows": 40, + "term": "xterm-256color" + }, + "heap_mb": 8192, + "memory_max": null, + "container_cap": false, + "container_memory": null, + "opentui_cap": null, + "fixture": { + "path": "/home/daimon/github/worktrees/hermes-agent/quiet-quill/hermes-agent/bench/.cache/fixture-300.ndjson", + "msgs": 300, + "sha256": "ac81e975c299da7d50cfda7fc0fee33c356bd31a4e17a7f0f8e49905e205051a" + }, + "sample_every": 100, + "mode_params": {}, + "ui_pid": 131301, + "gw_pid": 131317, + "cgroup": null, + "load_avg_at_start": [ + 0.86, + 3.18, + 2.1 + ], + "instrumented": false + }, + "samples": [ + { + "kind": "periodic", + "t_ms": 28, + "msgs": null, + "events": null, + "pty_bytes": 0, + "pty_writes": 0, + "rss_kb": 57968, + "pss_kb": 32819, + "private_dirty_kb": 20836, + "vmhwm_kb": 58048, + "utime_ticks": 1, + "stime_ticks": 1 + }, + { + "kind": "periodic", + "t_ms": 1036, + "msgs": null, + "events": null, + "pty_bytes": 6685, + "pty_writes": 11, + "rss_kb": 110740, + "pss_kb": 71656, + "private_dirty_kb": 52440, + "vmhwm_kb": 110740, + "utime_ticks": 24, + "stime_ticks": 3 + }, + { + "kind": "boundary", + "t_ms": 1490, + "msgs": 100, + "events": 355, + "pty_bytes": 10222, + "pty_writes": 14, + "rss_kb": 130316, + "pss_kb": 91080, + "private_dirty_kb": 71084, + "vmhwm_kb": 130432, + "utime_ticks": 34, + "stime_ticks": 4 + }, + { + "kind": "boundary", + "t_ms": 1541, + "msgs": 200, + "events": 738, + "pty_bytes": 18217, + "pty_writes": 17, + "rss_kb": 158520, + "pss_kb": 119167, + "private_dirty_kb": 99160, + "vmhwm_kb": 158596, + "utime_ticks": 44, + "stime_ticks": 4 + }, + { + "kind": "boundary", + "t_ms": 1566, + "msgs": 300, + "events": 1051, + "pty_bytes": 21202, + "pty_writes": 18, + "rss_kb": 170104, + "pss_kb": 130703, + "private_dirty_kb": 110680, + "vmhwm_kb": 170108, + "utime_ticks": 48, + "stime_ticks": 5 + }, + { + "kind": "done", + "t_ms": 1567, + "msgs": 300, + "events": 1051, + "pty_bytes": 21202, + "pty_writes": 18, + "rss_kb": 170108, + "pss_kb": 130707, + "private_dirty_kb": 110684, + "vmhwm_kb": 170108, + "utime_ticks": 49, + "stime_ticks": 5 + }, + { + "kind": "periodic", + "t_ms": 2043, + "msgs": 300, + "events": null, + "pty_bytes": 32782, + "pty_writes": 26, + "rss_kb": 176524, + "pss_kb": 137064, + "private_dirty_kb": 117036, + "vmhwm_kb": 182800, + "utime_ticks": 61, + "stime_ticks": 5 + }, + { + "kind": "periodic", + "t_ms": 3052, + "msgs": 300, + "events": null, + "pty_bytes": 32872, + "pty_writes": 28, + "rss_kb": 176536, + "pss_kb": 137076, + "private_dirty_kb": 117048, + "vmhwm_kb": 182800, + "utime_ticks": 61, + "stime_ticks": 5 + }, + { + "kind": "periodic", + "t_ms": 4067, + "msgs": 300, + "events": null, + "pty_bytes": 32962, + "pty_writes": 30, + "rss_kb": 176544, + "pss_kb": 137084, + "private_dirty_kb": 117056, + "vmhwm_kb": 182800, + "utime_ticks": 61, + "stime_ticks": 5 + }, + { + "kind": "periodic", + "t_ms": 5068, + "msgs": 300, + "events": null, + "pty_bytes": 33052, + "pty_writes": 32, + "rss_kb": 176552, + "pss_kb": 137092, + "private_dirty_kb": 117064, + "vmhwm_kb": 182800, + "utime_ticks": 61, + "stime_ticks": 5 + }, + { + "kind": "periodic", + "t_ms": 6077, + "msgs": 300, + "events": null, + "pty_bytes": 33142, + "pty_writes": 34, + "rss_kb": 176560, + "pss_kb": 137100, + "private_dirty_kb": 117072, + "vmhwm_kb": 182800, + "utime_ticks": 61, + "stime_ticks": 5 + }, + { + "kind": "periodic", + "t_ms": 7081, + "msgs": 300, + "events": null, + "pty_bytes": 33232, + "pty_writes": 36, + "rss_kb": 176572, + "pss_kb": 137112, + "private_dirty_kb": 117084, + "vmhwm_kb": 182800, + "utime_ticks": 62, + "stime_ticks": 5 + }, + { + "kind": "periodic", + "t_ms": 8087, + "msgs": 300, + "events": null, + "pty_bytes": 33322, + "pty_writes": 38, + "rss_kb": 176580, + "pss_kb": 137120, + "private_dirty_kb": 117092, + "vmhwm_kb": 182800, + "utime_ticks": 62, + "stime_ticks": 5 + }, + { + "kind": "periodic", + "t_ms": 9101, + "msgs": 300, + "events": null, + "pty_bytes": 33412, + "pty_writes": 40, + "rss_kb": 176584, + "pss_kb": 137124, + "private_dirty_kb": 117096, + "vmhwm_kb": 182800, + "utime_ticks": 62, + "stime_ticks": 5 + }, + { + "kind": "periodic", + "t_ms": 10106, + "msgs": 300, + "events": null, + "pty_bytes": 33502, + "pty_writes": 42, + "rss_kb": 176584, + "pss_kb": 137124, + "private_dirty_kb": 117096, + "vmhwm_kb": 182800, + "utime_ticks": 63, + "stime_ticks": 5 + }, + { + "kind": "periodic", + "t_ms": 11112, + "msgs": 300, + "events": null, + "pty_bytes": 33622, + "pty_writes": 44, + "rss_kb": 176596, + "pss_kb": 137136, + "private_dirty_kb": 117108, + "vmhwm_kb": 182800, + "utime_ticks": 63, + "stime_ticks": 5 + }, + { + "kind": "periodic", + "t_ms": 12114, + "msgs": 300, + "events": null, + "pty_bytes": 33731, + "pty_writes": 46, + "rss_kb": 176600, + "pss_kb": 137140, + "private_dirty_kb": 117112, + "vmhwm_kb": 182800, + "utime_ticks": 63, + "stime_ticks": 5 + }, + { + "kind": "periodic", + "t_ms": 13116, + "msgs": 300, + "events": null, + "pty_bytes": 33821, + "pty_writes": 48, + "rss_kb": 176604, + "pss_kb": 137144, + "private_dirty_kb": 117116, + "vmhwm_kb": 182800, + "utime_ticks": 63, + "stime_ticks": 5 + }, + { + "kind": "periodic", + "t_ms": 14124, + "msgs": 300, + "events": null, + "pty_bytes": 33911, + "pty_writes": 50, + "rss_kb": 176620, + "pss_kb": 137160, + "private_dirty_kb": 117132, + "vmhwm_kb": 182800, + "utime_ticks": 63, + "stime_ticks": 5 + }, + { + "kind": "periodic", + "t_ms": 15135, + "msgs": 300, + "events": null, + "pty_bytes": 34001, + "pty_writes": 52, + "rss_kb": 177056, + "pss_kb": 137596, + "private_dirty_kb": 117568, + "vmhwm_kb": 182800, + "utime_ticks": 64, + "stime_ticks": 6 + }, + { + "kind": "periodic", + "t_ms": 16143, + "msgs": 300, + "events": null, + "pty_bytes": 34091, + "pty_writes": 54, + "rss_kb": 177064, + "pss_kb": 137604, + "private_dirty_kb": 117576, + "vmhwm_kb": 182800, + "utime_ticks": 64, + "stime_ticks": 6 + }, + { + "kind": "final", + "t_ms": 16679, + "msgs": 300, + "events": 1051, + "pty_bytes": 34181, + "pty_writes": 56, + "rss_kb": 177064, + "pss_kb": 137604, + "private_dirty_kb": 117576, + "vmhwm_kb": 182800, + "utime_ticks": 64, + "stime_ticks": 6 + }, + { + "kind": "periodic", + "t_ms": 17152, + "msgs": 300, + "events": null, + "pty_bytes": 44856, + "pty_writes": 63, + "rss_kb": 183504, + "pss_kb": 144044, + "private_dirty_kb": 124016, + "vmhwm_kb": 183504, + "utime_ticks": 68, + "stime_ticks": 6 + }, + { + "kind": "periodic", + "t_ms": 18156, + "msgs": 300, + "events": null, + "pty_bytes": 48502, + "pty_writes": 66, + "rss_kb": 186292, + "pss_kb": 146832, + "private_dirty_kb": 126804, + "vmhwm_kb": 186292, + "utime_ticks": 70, + "stime_ticks": 6 + } + ], + "events": [ + { + "kind": "rpc", + "method": "config.get", + "t_ms": 227 + }, + { + "kind": "rpc", + "method": "commands.catalog", + "t_ms": 227 + }, + { + "kind": "rpc", + "method": "setup.status", + "t_ms": 227 + }, + { + "kind": "rpc", + "method": "session.create", + "t_ms": 252 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 252 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 252 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 252 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 1739 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 3251 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 4738 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 5242 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 6250 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 7758 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 9249 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 10254 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 10758 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 12263 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 13746 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 15259 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 15259 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 16743 + }, + { + "kind": "rpc", + "method": "terminal.resize", + "t_ms": 16794 + }, + { + "kind": "rpc", + "method": "terminal.resize", + "t_ms": 17198 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 18254 + } + ], + "summary": { + "result": "completed", + "cap_hit": false, + "cap_hit_basis": null, + "at_messages": null, + "exit": { + "exitCode": 0, + "signal": 0, + "t": 18291 + }, + "stream_done": true, + "msgs_streamed": 300, + "events_streamed": 1051, + "pty_bytes_total": 48954, + "pty_data_callbacks": 71, + "first_byte_ms": 99, + "session_create_ms": 252, + "stream_start_ms": 1439, + "vmhwm_kb": 186292, + "cg_peak": null, + "drain_max_loop_lag_ms": 8, + "drain_lag_violations": 0, + "drain_ok": true, + "digest": "0f62155086e89590f62e059cc7bcf0851b6c88dac942a8f2303ac905481dea48" + }, + "digest_text": "Excepteur irure nostrud tempor ipsum cupidatat voluptate ullamco labore sit.│Amet culpa cillum commodo enim adipiscing deserunt nulla duis veniam sed.│Quis eiusmod lorem occaecat reprehenderit exercitation incididunt dolor proident velit laboris magna.│Esse aliquip aliqua consectetur officia fugiat consequat minim elit mollit pariatur aute quis.│Anim excepteur irure nostrud tempor ipsum cupidatat voluptate ullamco labore sit sunt esse aliquip.│Magna amet culpa cillum.│Aute quis eiusmod lorem occaecat.│ └─ ● Terminal(\"Proident velit laboris magna.\") (0.3s)│ └─ Args:│Proident velit laboris magna amet culpa cillum commodo enim adipiscing deserunt nulla.│Elit mollit pariatur aute quis eiusmod lorem occaecat reprehenderit exercitation incididunt dolor proident.│Ullamco labore sit sunt esse aliquip aliqua consectetur officia fugiat consequat minim elit mollit.│Nulla duis veniam sed.│Dolor proident velit laboris magna.│Result:│Pariatur aute quis eiusmod lorem occaecat reprehenderit exercitation incididunt dolor proident velit laboris.│Sit sunt esse aliquip aliqua consectetur officia fugiat consequat minim elit mollit pariatur aute.││┊ Minimelitmollitpariaturautequiseiusmodloremoccaecatreprehenderitexercitationincididuntdolor.Officia│fugiatconsequatminimelitmollitpariaturautequiseiusmodloremoccaecatreprehenderitexercitation.│┊ Temporipsumcupidatatvoluptateullamcolaboresitsuntessealiquipaliqua.Excepteurirurenostrudtempor│ipsumcupidatatvoluptateullamcolaboresitsuntesse.Veniamsedanimexcepteurirurenostrudtempor│ipsumcupidatatvoluptateullamcolaboresit.││• Suntessealiquipaliquaconsectetur.│• Consequatminimelitmollitpariaturautequis.│• Eiusmodloremoccaecatreprehenderit.││─ ts│constx4=58│functionf3(){│returnx│}││Exercitationincididuntdolorproidentvelitlaborismagnaametculpacillum.Loremoccaecatreprehenderit┃exercitationincididuntdolorproidentvelitlaborismagnaamet.─ ready │ fake model │ 16s │ ✓ 15s │ voice off ─ …es-agent (…i-native-engine)❯│┃Excepteur irure nostrud tempor ipsum cupidatat voluptate ullamco labore sit.│Amet culpa cillum commodo enim adipiscing deserunt nulla duis veniam sed.│Quis eiusmod lorem occaecat reprehenderit exercitation incididunt dolor proident velit laboris magna.│Esse aliquip aliqua consectetur officia fugiat consequat minim elit mollit pariatur aute quis.│Anim excepteur irure nostrud tempor ipsum cupidatat voluptate ullamco labore sit sunt esse aliquip.│Magna amet culpa cillum.│Aute quis eiusmod lorem occaecat.│ └─ ● Terminal(\"Proident velit laboris magna.\") (0.3s)│ └─ Args:│Proident velit laboris magna amet culpa cillum commodo enim adipiscing deserunt nulla.│Elit mollit pariatur aute quis eiusmod lorem occaecat reprehenderit exercitation incididunt dolor proident.│Ullamco labore sit sunt esse aliquip aliqua consectetur officia fugiat consequat minim elit mollit.│Nulla duis veniam sed.│Dolor proident velit laboris magna.│Result:│Pariatur aute quis eiusmod lorem occaecat reprehenderit exercitation incididunt dolor proident velit laboris.│Sit sunt esse aliquip aliqua consectetur officia fugiat consequat minim elit mollit pariatur aute.││┊ Minimelitmollitpariaturautequiseiusmodloremoccaecatreprehenderitexercitationincididuntdolor.Officia│fugiatconsequatminimelitmollitpariaturautequiseiusmodloremoccaecatreprehenderitexercitation.│┊ Temporipsumcupidatatvoluptateullamcolaboresitsuntessealiquipaliqua.Excepteurirurenostrudtempor│ipsumcupidatatvoluptateullamcolaboresitsuntesse.Veniamsedanimexcepteurirurenostrudtempor│ipsumcupidatatvoluptateullamcolaboresit.││• Suntessealiquipaliquaconsectetur.│• Consequatminimelitmollitpariaturautequis.│• Eiusmodloremoccaecatreprehenderit.││─ ts│constx4=58│functionf3(){│returnx│}││Exercitationincididuntdolorproidentvelitlaborismagnaametculpacillum.Loremoccaecatreprehenderit│exercitationincididuntdolorproidentvelitlaborismagnaamet.┃─ ready │ fake model │ 16s │ ✓ 15s │ voice off ─ …es-agent (…i-native-engine)❯768" +} \ No newline at end of file diff --git a/bench/results/2026-06-12T0412-f0ec24a-gate-ink-ink-r1.json b/bench/results/2026-06-12T0412-f0ec24a-gate-ink-ink-r1.json new file mode 100644 index 000000000000..f551c3eda99f --- /dev/null +++ b/bench/results/2026-06-12T0412-f0ec24a-gate-ink-ink-r1.json @@ -0,0 +1,526 @@ +{ + "meta": { + "cell": "gate", + "ui": "ink", + "config": "ink", + "mode": "digest", + "rep": 1, + "run_id": "mqaeuqq6-w5nl", + "utc": "2026-06-12T04:12:41.551Z", + "sha": "f0ec24ad5", + "node": "/home/daimon/.local/share/fnm/node-versions/v26.3.0/installation/bin/node", + "node_version": "v26.3.0", + "pty": { + "cols": 120, + "rows": 40, + "term": "xterm-256color" + }, + "heap_mb": 8192, + "memory_max": null, + "container_cap": false, + "container_memory": null, + "opentui_cap": null, + "fixture": { + "path": "/home/daimon/github/worktrees/hermes-agent/quiet-quill/hermes-agent/bench/.cache/fixture-300.ndjson", + "msgs": 300, + "sha256": "ac81e975c299da7d50cfda7fc0fee33c356bd31a4e17a7f0f8e49905e205051a" + }, + "sample_every": 100, + "mode_params": {}, + "ui_pid": 132910, + "gw_pid": 132934, + "cgroup": null, + "load_avg_at_start": [ + 1.38, + 3.07, + 2.1 + ], + "instrumented": false + }, + "samples": [ + { + "kind": "periodic", + "t_ms": 26, + "msgs": null, + "events": null, + "pty_bytes": 0, + "pty_writes": 0, + "rss_kb": 57172, + "pss_kb": 31971, + "private_dirty_kb": 20056, + "vmhwm_kb": 57172, + "utime_ticks": 1, + "stime_ticks": 0 + }, + { + "kind": "periodic", + "t_ms": 1029, + "msgs": null, + "events": null, + "pty_bytes": 6665, + "pty_writes": 12, + "rss_kb": 110572, + "pss_kb": 71418, + "private_dirty_kb": 52096, + "vmhwm_kb": 110572, + "utime_ticks": 24, + "stime_ticks": 3 + }, + { + "kind": "boundary", + "t_ms": 1456, + "msgs": 100, + "events": 355, + "pty_bytes": 10756, + "pty_writes": 15, + "rss_kb": 123240, + "pss_kb": 83980, + "private_dirty_kb": 63976, + "vmhwm_kb": 123256, + "utime_ticks": 29, + "stime_ticks": 3 + }, + { + "kind": "boundary", + "t_ms": 1530, + "msgs": 200, + "events": 738, + "pty_bytes": 17854, + "pty_writes": 17, + "rss_kb": 153588, + "pss_kb": 114117, + "private_dirty_kb": 94008, + "vmhwm_kb": 153612, + "utime_ticks": 42, + "stime_ticks": 5 + }, + { + "kind": "boundary", + "t_ms": 1582, + "msgs": 300, + "events": 1051, + "pty_bytes": 21780, + "pty_writes": 18, + "rss_kb": 183452, + "pss_kb": 143933, + "private_dirty_kb": 123808, + "vmhwm_kb": 183828, + "utime_ticks": 53, + "stime_ticks": 6 + }, + { + "kind": "done", + "t_ms": 1585, + "msgs": 300, + "events": 1051, + "pty_bytes": 21780, + "pty_writes": 18, + "rss_kb": 184052, + "pss_kb": 144533, + "private_dirty_kb": 124408, + "vmhwm_kb": 184368, + "utime_ticks": 53, + "stime_ticks": 6 + }, + { + "kind": "periodic", + "t_ms": 2033, + "msgs": 300, + "events": null, + "pty_bytes": 33500, + "pty_writes": 22, + "rss_kb": 183660, + "pss_kb": 144141, + "private_dirty_kb": 124016, + "vmhwm_kb": 187952, + "utime_ticks": 65, + "stime_ticks": 7 + }, + { + "kind": "periodic", + "t_ms": 3039, + "msgs": 300, + "events": null, + "pty_bytes": 33590, + "pty_writes": 24, + "rss_kb": 183680, + "pss_kb": 144161, + "private_dirty_kb": 124036, + "vmhwm_kb": 187952, + "utime_ticks": 65, + "stime_ticks": 7 + }, + { + "kind": "periodic", + "t_ms": 4045, + "msgs": 300, + "events": null, + "pty_bytes": 33680, + "pty_writes": 26, + "rss_kb": 183684, + "pss_kb": 144164, + "private_dirty_kb": 124040, + "vmhwm_kb": 187952, + "utime_ticks": 66, + "stime_ticks": 7 + }, + { + "kind": "periodic", + "t_ms": 5046, + "msgs": 300, + "events": null, + "pty_bytes": 33770, + "pty_writes": 28, + "rss_kb": 183684, + "pss_kb": 144165, + "private_dirty_kb": 124040, + "vmhwm_kb": 187952, + "utime_ticks": 66, + "stime_ticks": 7 + }, + { + "kind": "periodic", + "t_ms": 6047, + "msgs": 300, + "events": null, + "pty_bytes": 33860, + "pty_writes": 30, + "rss_kb": 183688, + "pss_kb": 144169, + "private_dirty_kb": 124044, + "vmhwm_kb": 187952, + "utime_ticks": 66, + "stime_ticks": 7 + }, + { + "kind": "periodic", + "t_ms": 7057, + "msgs": 300, + "events": null, + "pty_bytes": 33950, + "pty_writes": 32, + "rss_kb": 183688, + "pss_kb": 144169, + "private_dirty_kb": 124044, + "vmhwm_kb": 187952, + "utime_ticks": 67, + "stime_ticks": 7 + }, + { + "kind": "periodic", + "t_ms": 8065, + "msgs": 300, + "events": null, + "pty_bytes": 34040, + "pty_writes": 34, + "rss_kb": 183692, + "pss_kb": 144173, + "private_dirty_kb": 124048, + "vmhwm_kb": 187952, + "utime_ticks": 67, + "stime_ticks": 7 + }, + { + "kind": "periodic", + "t_ms": 9067, + "msgs": 300, + "events": null, + "pty_bytes": 34130, + "pty_writes": 36, + "rss_kb": 183692, + "pss_kb": 144173, + "private_dirty_kb": 124048, + "vmhwm_kb": 187952, + "utime_ticks": 67, + "stime_ticks": 7 + }, + { + "kind": "periodic", + "t_ms": 10078, + "msgs": 300, + "events": null, + "pty_bytes": 34220, + "pty_writes": 38, + "rss_kb": 183692, + "pss_kb": 144173, + "private_dirty_kb": 124048, + "vmhwm_kb": 187952, + "utime_ticks": 67, + "stime_ticks": 7 + }, + { + "kind": "periodic", + "t_ms": 11085, + "msgs": 300, + "events": null, + "pty_bytes": 34340, + "pty_writes": 40, + "rss_kb": 183700, + "pss_kb": 144181, + "private_dirty_kb": 124056, + "vmhwm_kb": 187952, + "utime_ticks": 67, + "stime_ticks": 7 + }, + { + "kind": "periodic", + "t_ms": 12088, + "msgs": 300, + "events": null, + "pty_bytes": 34449, + "pty_writes": 42, + "rss_kb": 183700, + "pss_kb": 144181, + "private_dirty_kb": 124056, + "vmhwm_kb": 187952, + "utime_ticks": 68, + "stime_ticks": 7 + }, + { + "kind": "periodic", + "t_ms": 13092, + "msgs": 300, + "events": null, + "pty_bytes": 34539, + "pty_writes": 44, + "rss_kb": 183700, + "pss_kb": 144181, + "private_dirty_kb": 124056, + "vmhwm_kb": 187952, + "utime_ticks": 68, + "stime_ticks": 7 + }, + { + "kind": "periodic", + "t_ms": 14098, + "msgs": 300, + "events": null, + "pty_bytes": 34629, + "pty_writes": 46, + "rss_kb": 183700, + "pss_kb": 144181, + "private_dirty_kb": 124056, + "vmhwm_kb": 187952, + "utime_ticks": 68, + "stime_ticks": 7 + }, + { + "kind": "periodic", + "t_ms": 15104, + "msgs": 300, + "events": null, + "pty_bytes": 34719, + "pty_writes": 48, + "rss_kb": 183700, + "pss_kb": 144181, + "private_dirty_kb": 124056, + "vmhwm_kb": 187952, + "utime_ticks": 68, + "stime_ticks": 7 + }, + { + "kind": "periodic", + "t_ms": 16112, + "msgs": 300, + "events": null, + "pty_bytes": 34809, + "pty_writes": 50, + "rss_kb": 183700, + "pss_kb": 144181, + "private_dirty_kb": 124056, + "vmhwm_kb": 187952, + "utime_ticks": 68, + "stime_ticks": 7 + }, + { + "kind": "final", + "t_ms": 16668, + "msgs": 300, + "events": 1051, + "pty_bytes": 34854, + "pty_writes": 51, + "rss_kb": 183704, + "pss_kb": 144185, + "private_dirty_kb": 124060, + "vmhwm_kb": 187952, + "utime_ticks": 68, + "stime_ticks": 7 + }, + { + "kind": "periodic", + "t_ms": 17123, + "msgs": 300, + "events": null, + "pty_bytes": 45574, + "pty_writes": 58, + "rss_kb": 186688, + "pss_kb": 147169, + "private_dirty_kb": 127044, + "vmhwm_kb": 187952, + "utime_ticks": 75, + "stime_ticks": 7 + }, + { + "kind": "periodic", + "t_ms": 18132, + "msgs": 300, + "events": null, + "pty_bytes": 49220, + "pty_writes": 61, + "rss_kb": 186700, + "pss_kb": 147181, + "private_dirty_kb": 127056, + "vmhwm_kb": 187952, + "utime_ticks": 76, + "stime_ticks": 7 + } + ], + "events": [ + { + "kind": "rpc", + "method": "config.get", + "t_ms": 225 + }, + { + "kind": "rpc", + "method": "commands.catalog", + "t_ms": 225 + }, + { + "kind": "rpc", + "method": "setup.status", + "t_ms": 225 + }, + { + "kind": "rpc", + "method": "session.create", + "t_ms": 225 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 225 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 225 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 225 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 1729 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 3237 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 4743 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 5243 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 6227 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 7734 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 9245 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 10228 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 10733 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 12238 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 13744 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 15229 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 15229 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 16737 + }, + { + "kind": "rpc", + "method": "terminal.resize", + "t_ms": 16789 + }, + { + "kind": "rpc", + "method": "terminal.resize", + "t_ms": 17172 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 18234 + } + ], + "summary": { + "result": "completed", + "cap_hit": false, + "cap_hit_basis": null, + "at_messages": null, + "exit": { + "exitCode": 0, + "signal": 0, + "t": 18281 + }, + "stream_done": true, + "msgs_streamed": 300, + "events_streamed": 1051, + "pty_bytes_total": 49672, + "pty_data_callbacks": 74, + "first_byte_ms": 101, + "session_create_ms": 225, + "stream_start_ms": 1428, + "vmhwm_kb": 187952, + "cg_peak": null, + "drain_max_loop_lag_ms": 4, + "drain_lag_violations": 0, + "drain_ok": true, + "digest": "6a921c7981a564ea92adf567c2e55945775a32f52325bb0f05db395af665ba04" + }, + "digest_text": "Excepteur irure nostrud tempor ipsum cupidatat voluptate ullamco labore sit.│Amet culpa cillum commodo enim adipiscing deserunt nulla duis veniam sed.│Quis eiusmod lorem occaecat reprehenderit exercitation incididunt dolor proident velit laboris magna.│Esse aliquip aliqua consectetur officia fugiat consequat minim elit mollit pariatur aute quis.│Anim excepteur irure nostrud tempor ipsum cupidatat voluptate ullamco labore sit sunt esse aliquip.│Magna amet culpa cillum.│Aute quis eiusmod lorem occaecat.│ └─ ● Terminal(\"Proident velit laboris magna.\") (0.3s)│ └─ Args:│Proident velit laboris magna amet culpa cillum commodo enim adipiscing deserunt nulla.│Elit mollit pariatur aute quis eiusmod lorem occaecat reprehenderit exercitation incididunt dolor proident.│Ullamco labore sit sunt esse aliquip aliqua consectetur officia fugiat consequat minim elit mollit.│Nulla duis veniam sed.│Dolor proident velit laboris magna.│Result:│Pariatur aute quis eiusmod lorem occaecat reprehenderit exercitation incididunt dolor proident velit laboris.│Sit sunt esse aliquip aliqua consectetur officia fugiat consequat minim elit mollit pariatur aute.││┊ Minimelitmollitpariaturautequiseiusmodloremoccaecatreprehenderitexercitationincididuntdolor.Officia│fugiatconsequatminimelitmollitpariaturautequiseiusmodloremoccaecatreprehenderitexercitation.│┊ Temporipsumcupidatatvoluptateullamcolaboresitsuntessealiquipaliqua.Excepteurirurenostrudtempor│ipsumcupidatatvoluptateullamcolaboresitsuntesse.Veniamsedanimexcepteurirurenostrudtempor│ipsumcupidatatvoluptateullamcolaboresit.││• Suntessealiquipaliquaconsectetur.│• Consequatminimelitmollitpariaturautequis.│• Eiusmodloremoccaecatreprehenderit.││─ ts│constx4=58│functionf3(){│returnx│}││Exercitationincididuntdolorproidentvelitlaborismagnaametculpacillum.Loremoccaecatreprehenderit┃exercitationincididuntdolorproidentvelitlaborismagnaamet.─ ready │ fake model │ 16s │ ✓ 15s │ voice off ─ …es-agent (…i-native-engine)❯│┃7Excepteur irure nostrud tempor ipsum cupidatat voluptate ullamco labore sit.│Amet culpa cillum commodo enim adipiscing deserunt nulla duis veniam sed.│Quis eiusmod lorem occaecat reprehenderit exercitation incididunt dolor proident velit laboris magna.│Esse aliquip aliqua consectetur officia fugiat consequat minim elit mollit pariatur aute quis.│Anim excepteur irure nostrud tempor ipsum cupidatat voluptate ullamco labore sit sunt esse aliquip.│Magna amet culpa cillum.│Aute quis eiusmod lorem occaecat.│ └─ ● Terminal(\"Proident velit laboris magna.\") (0.3s)│ └─ Args:│Proident velit laboris magna amet culpa cillum commodo enim adipiscing deserunt nulla.│Elit mollit pariatur aute quis eiusmod lorem occaecat reprehenderit exercitation incididunt dolor proident.│Ullamco labore sit sunt esse aliquip aliqua consectetur officia fugiat consequat minim elit mollit.│Nulla duis veniam sed.│Dolor proident velit laboris magna.│Result:│Pariatur aute quis eiusmod lorem occaecat reprehenderit exercitation incididunt dolor proident velit laboris.│Sit sunt esse aliquip aliqua consectetur officia fugiat consequat minim elit mollit pariatur aute.││┊ Minimelitmollitpariaturautequiseiusmodloremoccaecatreprehenderitexercitationincididuntdolor.Officia│fugiatconsequatminimelitmollitpariaturautequiseiusmodloremoccaecatreprehenderitexercitation.│┊ Temporipsumcupidatatvoluptateullamcolaboresitsuntessealiquipaliqua.Excepteurirurenostrudtempor│ipsumcupidatatvoluptateullamcolaboresitsuntesse.Veniamsedanimexcepteurirurenostrudtempor│ipsumcupidatatvoluptateullamcolaboresit.││• Suntessealiquipaliquaconsectetur.│• Consequatminimelitmollitpariaturautequis.│• Eiusmodloremoccaecatreprehenderit.││─ ts│constx4=58│functionf3(){│returnx│}││Exercitationincididuntdolorproidentvelitlaborismagnaametculpacillum.Loremoccaecatreprehenderit│exercitationincididuntdolorproidentvelitlaborismagnaamet.┃─ ready │ fake model │ 17s │ ✓ 15s │ voice off ─ …es-agent (…i-native-engine)❯68" +} \ No newline at end of file diff --git a/bench/results/2026-06-12T0422-f0ec24a-gate-ink-ink-r0.json b/bench/results/2026-06-12T0422-f0ec24a-gate-ink-ink-r0.json new file mode 100644 index 000000000000..dc0225aa6cf7 --- /dev/null +++ b/bench/results/2026-06-12T0422-f0ec24a-gate-ink-ink-r0.json @@ -0,0 +1,526 @@ +{ + "meta": { + "cell": "gate", + "ui": "ink", + "config": "ink", + "mode": "digest", + "rep": 0, + "run_id": "mqaf74nt-gznn", + "utc": "2026-06-12T04:22:19.481Z", + "sha": "f0ec24ad5", + "node": "/home/daimon/.local/share/fnm/node-versions/v26.3.0/installation/bin/node", + "node_version": "v26.3.0", + "pty": { + "cols": 120, + "rows": 40, + "term": "xterm-256color" + }, + "heap_mb": 8192, + "memory_max": null, + "container_cap": false, + "container_memory": null, + "opentui_cap": null, + "fixture": { + "path": "/home/daimon/github/worktrees/hermes-agent/quiet-quill/hermes-agent/bench/.cache/fixture-300.ndjson", + "msgs": 300, + "sha256": "ac81e975c299da7d50cfda7fc0fee33c356bd31a4e17a7f0f8e49905e205051a" + }, + "sample_every": 100, + "mode_params": {}, + "ui_pid": 165899, + "gw_pid": 165908, + "cgroup": null, + "load_avg_at_start": [ + 0.29, + 1.01, + 1.47 + ], + "instrumented": false + }, + "samples": [ + { + "kind": "periodic", + "t_ms": 27, + "msgs": null, + "events": null, + "pty_bytes": 0, + "pty_writes": 0, + "rss_kb": 47056, + "pss_kb": 21937, + "private_dirty_kb": 9948, + "vmhwm_kb": 47056, + "utime_ticks": 1, + "stime_ticks": 0 + }, + { + "kind": "periodic", + "t_ms": 1033, + "msgs": null, + "events": null, + "pty_bytes": 6685, + "pty_writes": 12, + "rss_kb": 111652, + "pss_kb": 74425, + "private_dirty_kb": 53188, + "vmhwm_kb": 111652, + "utime_ticks": 24, + "stime_ticks": 3 + }, + { + "kind": "boundary", + "t_ms": 1461, + "msgs": 100, + "events": 355, + "pty_bytes": 10768, + "pty_writes": 15, + "rss_kb": 124184, + "pss_kb": 86902, + "private_dirty_kb": 64996, + "vmhwm_kb": 124312, + "utime_ticks": 29, + "stime_ticks": 4 + }, + { + "kind": "boundary", + "t_ms": 1538, + "msgs": 200, + "events": 738, + "pty_bytes": 17881, + "pty_writes": 17, + "rss_kb": 158184, + "pss_kb": 120650, + "private_dirty_kb": 98616, + "vmhwm_kb": 158236, + "utime_ticks": 42, + "stime_ticks": 5 + }, + { + "kind": "boundary", + "t_ms": 1563, + "msgs": 300, + "events": 1051, + "pty_bytes": 21807, + "pty_writes": 18, + "rss_kb": 173012, + "pss_kb": 135435, + "private_dirty_kb": 113380, + "vmhwm_kb": 173300, + "utime_ticks": 48, + "stime_ticks": 6 + }, + { + "kind": "done", + "t_ms": 1565, + "msgs": 300, + "events": 1051, + "pty_bytes": 21807, + "pty_writes": 18, + "rss_kb": 173764, + "pss_kb": 136187, + "private_dirty_kb": 114132, + "vmhwm_kb": 174096, + "utime_ticks": 48, + "stime_ticks": 6 + }, + { + "kind": "periodic", + "t_ms": 2042, + "msgs": 300, + "events": null, + "pty_bytes": 33524, + "pty_writes": 22, + "rss_kb": 180232, + "pss_kb": 142623, + "private_dirty_kb": 120600, + "vmhwm_kb": 187988, + "utime_ticks": 62, + "stime_ticks": 6 + }, + { + "kind": "periodic", + "t_ms": 3047, + "msgs": 300, + "events": null, + "pty_bytes": 33614, + "pty_writes": 24, + "rss_kb": 180236, + "pss_kb": 142627, + "private_dirty_kb": 120604, + "vmhwm_kb": 187988, + "utime_ticks": 63, + "stime_ticks": 6 + }, + { + "kind": "periodic", + "t_ms": 4051, + "msgs": 300, + "events": null, + "pty_bytes": 33704, + "pty_writes": 26, + "rss_kb": 180240, + "pss_kb": 142631, + "private_dirty_kb": 120608, + "vmhwm_kb": 187988, + "utime_ticks": 63, + "stime_ticks": 6 + }, + { + "kind": "periodic", + "t_ms": 5056, + "msgs": 300, + "events": null, + "pty_bytes": 33794, + "pty_writes": 28, + "rss_kb": 180244, + "pss_kb": 142635, + "private_dirty_kb": 120612, + "vmhwm_kb": 187988, + "utime_ticks": 63, + "stime_ticks": 6 + }, + { + "kind": "periodic", + "t_ms": 6075, + "msgs": 300, + "events": null, + "pty_bytes": 33884, + "pty_writes": 30, + "rss_kb": 180248, + "pss_kb": 142639, + "private_dirty_kb": 120616, + "vmhwm_kb": 187988, + "utime_ticks": 63, + "stime_ticks": 6 + }, + { + "kind": "periodic", + "t_ms": 7088, + "msgs": 300, + "events": null, + "pty_bytes": 33974, + "pty_writes": 32, + "rss_kb": 180248, + "pss_kb": 142639, + "private_dirty_kb": 120616, + "vmhwm_kb": 187988, + "utime_ticks": 64, + "stime_ticks": 6 + }, + { + "kind": "periodic", + "t_ms": 8107, + "msgs": 300, + "events": null, + "pty_bytes": 34064, + "pty_writes": 34, + "rss_kb": 180256, + "pss_kb": 142647, + "private_dirty_kb": 120624, + "vmhwm_kb": 187988, + "utime_ticks": 64, + "stime_ticks": 6 + }, + { + "kind": "periodic", + "t_ms": 9124, + "msgs": 300, + "events": null, + "pty_bytes": 34154, + "pty_writes": 36, + "rss_kb": 180256, + "pss_kb": 142647, + "private_dirty_kb": 120624, + "vmhwm_kb": 187988, + "utime_ticks": 64, + "stime_ticks": 6 + }, + { + "kind": "periodic", + "t_ms": 10131, + "msgs": 300, + "events": null, + "pty_bytes": 34244, + "pty_writes": 38, + "rss_kb": 180264, + "pss_kb": 142655, + "private_dirty_kb": 120632, + "vmhwm_kb": 187988, + "utime_ticks": 64, + "stime_ticks": 6 + }, + { + "kind": "periodic", + "t_ms": 11142, + "msgs": 300, + "events": null, + "pty_bytes": 34364, + "pty_writes": 40, + "rss_kb": 180264, + "pss_kb": 142655, + "private_dirty_kb": 120632, + "vmhwm_kb": 187988, + "utime_ticks": 64, + "stime_ticks": 6 + }, + { + "kind": "periodic", + "t_ms": 12155, + "msgs": 300, + "events": null, + "pty_bytes": 34473, + "pty_writes": 42, + "rss_kb": 180264, + "pss_kb": 142655, + "private_dirty_kb": 120632, + "vmhwm_kb": 187988, + "utime_ticks": 65, + "stime_ticks": 6 + }, + { + "kind": "periodic", + "t_ms": 13165, + "msgs": 300, + "events": null, + "pty_bytes": 34563, + "pty_writes": 44, + "rss_kb": 180264, + "pss_kb": 142655, + "private_dirty_kb": 120632, + "vmhwm_kb": 187988, + "utime_ticks": 65, + "stime_ticks": 6 + }, + { + "kind": "periodic", + "t_ms": 14172, + "msgs": 300, + "events": null, + "pty_bytes": 34653, + "pty_writes": 46, + "rss_kb": 180264, + "pss_kb": 142576, + "private_dirty_kb": 120632, + "vmhwm_kb": 187988, + "utime_ticks": 65, + "stime_ticks": 6 + }, + { + "kind": "periodic", + "t_ms": 15184, + "msgs": 300, + "events": null, + "pty_bytes": 34743, + "pty_writes": 48, + "rss_kb": 180264, + "pss_kb": 142655, + "private_dirty_kb": 120632, + "vmhwm_kb": 187988, + "utime_ticks": 65, + "stime_ticks": 6 + }, + { + "kind": "periodic", + "t_ms": 16197, + "msgs": 300, + "events": null, + "pty_bytes": 34833, + "pty_writes": 50, + "rss_kb": 180268, + "pss_kb": 142659, + "private_dirty_kb": 120636, + "vmhwm_kb": 187988, + "utime_ticks": 65, + "stime_ticks": 6 + }, + { + "kind": "final", + "t_ms": 16672, + "msgs": 300, + "events": 1051, + "pty_bytes": 34923, + "pty_writes": 52, + "rss_kb": 180276, + "pss_kb": 142667, + "private_dirty_kb": 120644, + "vmhwm_kb": 187988, + "utime_ticks": 66, + "stime_ticks": 6 + }, + { + "kind": "periodic", + "t_ms": 17209, + "msgs": 300, + "events": null, + "pty_bytes": 45598, + "pty_writes": 58, + "rss_kb": 181952, + "pss_kb": 144343, + "private_dirty_kb": 122320, + "vmhwm_kb": 187988, + "utime_ticks": 72, + "stime_ticks": 7 + }, + { + "kind": "periodic", + "t_ms": 18215, + "msgs": 300, + "events": null, + "pty_bytes": 49244, + "pty_writes": 61, + "rss_kb": 182028, + "pss_kb": 144420, + "private_dirty_kb": 122396, + "vmhwm_kb": 187988, + "utime_ticks": 74, + "stime_ticks": 7 + } + ], + "events": [ + { + "kind": "rpc", + "method": "config.get", + "t_ms": 228 + }, + { + "kind": "rpc", + "method": "commands.catalog", + "t_ms": 228 + }, + { + "kind": "rpc", + "method": "setup.status", + "t_ms": 253 + }, + { + "kind": "rpc", + "method": "session.create", + "t_ms": 253 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 253 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 253 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 253 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 1762 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 3246 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 4753 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 5256 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 6249 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 7746 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 9247 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 10257 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 10764 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 12254 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 13740 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 15258 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 15258 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 16752 + }, + { + "kind": "rpc", + "method": "terminal.resize", + "t_ms": 16777 + }, + { + "kind": "rpc", + "method": "terminal.resize", + "t_ms": 17182 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 18263 + } + ], + "summary": { + "result": "completed", + "cap_hit": false, + "cap_hit_basis": null, + "at_messages": null, + "exit": { + "exitCode": 0, + "signal": 0, + "t": 18286 + }, + "stream_done": true, + "msgs_streamed": 300, + "events_streamed": 1051, + "pty_bytes_total": 49696, + "pty_data_callbacks": 67, + "first_byte_ms": 115, + "session_create_ms": 253, + "stream_start_ms": 1435, + "vmhwm_kb": 187988, + "cg_peak": null, + "drain_max_loop_lag_ms": 3, + "drain_lag_violations": 0, + "drain_ok": true, + "digest": "0f62155086e89590f62e059cc7bcf0851b6c88dac942a8f2303ac905481dea48" + }, + "digest_text": "Excepteur irure nostrud tempor ipsum cupidatat voluptate ullamco labore sit.│Amet culpa cillum commodo enim adipiscing deserunt nulla duis veniam sed.│Quis eiusmod lorem occaecat reprehenderit exercitation incididunt dolor proident velit laboris magna.│Esse aliquip aliqua consectetur officia fugiat consequat minim elit mollit pariatur aute quis.│Anim excepteur irure nostrud tempor ipsum cupidatat voluptate ullamco labore sit sunt esse aliquip.│Magna amet culpa cillum.│Aute quis eiusmod lorem occaecat.│ └─ ● Terminal(\"Proident velit laboris magna.\") (0.3s)│ └─ Args:│Proident velit laboris magna amet culpa cillum commodo enim adipiscing deserunt nulla.│Elit mollit pariatur aute quis eiusmod lorem occaecat reprehenderit exercitation incididunt dolor proident.│Ullamco labore sit sunt esse aliquip aliqua consectetur officia fugiat consequat minim elit mollit.│Nulla duis veniam sed.│Dolor proident velit laboris magna.│Result:│Pariatur aute quis eiusmod lorem occaecat reprehenderit exercitation incididunt dolor proident velit laboris.│Sit sunt esse aliquip aliqua consectetur officia fugiat consequat minim elit mollit pariatur aute.││┊ Minimelitmollitpariaturautequiseiusmodloremoccaecatreprehenderitexercitationincididuntdolor.Officia│fugiatconsequatminimelitmollitpariaturautequiseiusmodloremoccaecatreprehenderitexercitation.│┊ Temporipsumcupidatatvoluptateullamcolaboresitsuntessealiquipaliqua.Excepteurirurenostrudtempor│ipsumcupidatatvoluptateullamcolaboresitsuntesse.Veniamsedanimexcepteurirurenostrudtempor│ipsumcupidatatvoluptateullamcolaboresit.││• Suntessealiquipaliquaconsectetur.│• Consequatminimelitmollitpariaturautequis.│• Eiusmodloremoccaecatreprehenderit.││─ ts│constx4=58│functionf3(){│returnx│}││Exercitationincididuntdolorproidentvelitlaborismagnaametculpacillum.Loremoccaecatreprehenderit┃exercitationincididuntdolorproidentvelitlaborismagnaamet.─ ready │ fake model │ 16s │ ✓ 15s │ voice off ─ …es-agent (…i-native-engine)❯│┃Excepteur irure nostrud tempor ipsum cupidatat voluptate ullamco labore sit.│Amet culpa cillum commodo enim adipiscing deserunt nulla duis veniam sed.│Quis eiusmod lorem occaecat reprehenderit exercitation incididunt dolor proident velit laboris magna.│Esse aliquip aliqua consectetur officia fugiat consequat minim elit mollit pariatur aute quis.│Anim excepteur irure nostrud tempor ipsum cupidatat voluptate ullamco labore sit sunt esse aliquip.│Magna amet culpa cillum.│Aute quis eiusmod lorem occaecat.│ └─ ● Terminal(\"Proident velit laboris magna.\") (0.3s)│ └─ Args:│Proident velit laboris magna amet culpa cillum commodo enim adipiscing deserunt nulla.│Elit mollit pariatur aute quis eiusmod lorem occaecat reprehenderit exercitation incididunt dolor proident.│Ullamco labore sit sunt esse aliquip aliqua consectetur officia fugiat consequat minim elit mollit.│Nulla duis veniam sed.│Dolor proident velit laboris magna.│Result:│Pariatur aute quis eiusmod lorem occaecat reprehenderit exercitation incididunt dolor proident velit laboris.│Sit sunt esse aliquip aliqua consectetur officia fugiat consequat minim elit mollit pariatur aute.││┊ Minimelitmollitpariaturautequiseiusmodloremoccaecatreprehenderitexercitationincididuntdolor.Officia│fugiatconsequatminimelitmollitpariaturautequiseiusmodloremoccaecatreprehenderitexercitation.│┊ Temporipsumcupidatatvoluptateullamcolaboresitsuntessealiquipaliqua.Excepteurirurenostrudtempor│ipsumcupidatatvoluptateullamcolaboresitsuntesse.Veniamsedanimexcepteurirurenostrudtempor│ipsumcupidatatvoluptateullamcolaboresit.││• Suntessealiquipaliquaconsectetur.│• Consequatminimelitmollitpariaturautequis.│• Eiusmodloremoccaecatreprehenderit.││─ ts│constx4=58│functionf3(){│returnx│}││Exercitationincididuntdolorproidentvelitlaborismagnaametculpacillum.Loremoccaecatreprehenderit│exercitationincididuntdolorproidentvelitlaborismagnaamet.┃─ ready │ fake model │ 16s │ ✓ 15s │ voice off ─ …es-agent (…i-native-engine)❯768" +} \ No newline at end of file diff --git a/bench/results/2026-06-12T0422-f0ec24a-gate-ink-ink-r1.json b/bench/results/2026-06-12T0422-f0ec24a-gate-ink-ink-r1.json new file mode 100644 index 000000000000..3f15162dd560 --- /dev/null +++ b/bench/results/2026-06-12T0422-f0ec24a-gate-ink-ink-r1.json @@ -0,0 +1,526 @@ +{ + "meta": { + "cell": "gate", + "ui": "ink", + "config": "ink", + "mode": "digest", + "rep": 1, + "run_id": "mqaf7qlt-11yq", + "utc": "2026-06-12T04:22:47.921Z", + "sha": "f0ec24ad5", + "node": "/home/daimon/.local/share/fnm/node-versions/v26.3.0/installation/bin/node", + "node_version": "v26.3.0", + "pty": { + "cols": 120, + "rows": 40, + "term": "xterm-256color" + }, + "heap_mb": 8192, + "memory_max": null, + "container_cap": false, + "container_memory": null, + "opentui_cap": null, + "fixture": { + "path": "/home/daimon/github/worktrees/hermes-agent/quiet-quill/hermes-agent/bench/.cache/fixture-300.ndjson", + "msgs": 300, + "sha256": "ac81e975c299da7d50cfda7fc0fee33c356bd31a4e17a7f0f8e49905e205051a" + }, + "sample_every": 100, + "mode_params": {}, + "ui_pid": 167362, + "gw_pid": 167375, + "cgroup": null, + "load_avg_at_start": [ + 0.4, + 0.96, + 1.44 + ], + "instrumented": false + }, + "samples": [ + { + "kind": "periodic", + "t_ms": 27, + "msgs": null, + "events": null, + "pty_bytes": 0, + "pty_writes": 0, + "rss_kb": 57124, + "pss_kb": 31720, + "private_dirty_kb": 20020, + "vmhwm_kb": 57124, + "utime_ticks": 1, + "stime_ticks": 1 + }, + { + "kind": "periodic", + "t_ms": 1031, + "msgs": null, + "events": null, + "pty_bytes": 6665, + "pty_writes": 9, + "rss_kb": 110124, + "pss_kb": 72684, + "private_dirty_kb": 51672, + "vmhwm_kb": 110124, + "utime_ticks": 26, + "stime_ticks": 4 + }, + { + "kind": "boundary", + "t_ms": 1481, + "msgs": 100, + "events": 355, + "pty_bytes": 10675, + "pty_writes": 12, + "rss_kb": 128172, + "pss_kb": 90565, + "private_dirty_kb": 68808, + "vmhwm_kb": 128256, + "utime_ticks": 34, + "stime_ticks": 5 + }, + { + "kind": "boundary", + "t_ms": 1557, + "msgs": 200, + "events": 738, + "pty_bytes": 18489, + "pty_writes": 14, + "rss_kb": 166540, + "pss_kb": 128783, + "private_dirty_kb": 106984, + "vmhwm_kb": 166772, + "utime_ticks": 44, + "stime_ticks": 6 + }, + { + "kind": "boundary", + "t_ms": 1582, + "msgs": 300, + "events": 1051, + "pty_bytes": 22560, + "pty_writes": 15, + "rss_kb": 182916, + "pss_kb": 145159, + "private_dirty_kb": 123360, + "vmhwm_kb": 182992, + "utime_ticks": 50, + "stime_ticks": 6 + }, + { + "kind": "done", + "t_ms": 1583, + "msgs": 300, + "events": 1051, + "pty_bytes": 22560, + "pty_writes": 15, + "rss_kb": 183032, + "pss_kb": 145275, + "private_dirty_kb": 123476, + "vmhwm_kb": 183036, + "utime_ticks": 51, + "stime_ticks": 6 + }, + { + "kind": "periodic", + "t_ms": 2035, + "msgs": 300, + "events": null, + "pty_bytes": 34064, + "pty_writes": 19, + "rss_kb": 187616, + "pss_kb": 149816, + "private_dirty_kb": 127996, + "vmhwm_kb": 196580, + "utime_ticks": 64, + "stime_ticks": 7 + }, + { + "kind": "periodic", + "t_ms": 3044, + "msgs": 300, + "events": null, + "pty_bytes": 34154, + "pty_writes": 21, + "rss_kb": 187632, + "pss_kb": 149832, + "private_dirty_kb": 128012, + "vmhwm_kb": 196580, + "utime_ticks": 65, + "stime_ticks": 7 + }, + { + "kind": "periodic", + "t_ms": 4047, + "msgs": 300, + "events": null, + "pty_bytes": 34244, + "pty_writes": 23, + "rss_kb": 187636, + "pss_kb": 149878, + "private_dirty_kb": 128016, + "vmhwm_kb": 196580, + "utime_ticks": 65, + "stime_ticks": 7 + }, + { + "kind": "periodic", + "t_ms": 5054, + "msgs": 300, + "events": null, + "pty_bytes": 34334, + "pty_writes": 25, + "rss_kb": 187644, + "pss_kb": 150010, + "private_dirty_kb": 128024, + "vmhwm_kb": 196580, + "utime_ticks": 65, + "stime_ticks": 7 + }, + { + "kind": "periodic", + "t_ms": 6059, + "msgs": 300, + "events": null, + "pty_bytes": 34424, + "pty_writes": 27, + "rss_kb": 187652, + "pss_kb": 150018, + "private_dirty_kb": 128032, + "vmhwm_kb": 196580, + "utime_ticks": 65, + "stime_ticks": 7 + }, + { + "kind": "periodic", + "t_ms": 7064, + "msgs": 300, + "events": null, + "pty_bytes": 34514, + "pty_writes": 29, + "rss_kb": 187652, + "pss_kb": 150018, + "private_dirty_kb": 128032, + "vmhwm_kb": 196580, + "utime_ticks": 65, + "stime_ticks": 7 + }, + { + "kind": "periodic", + "t_ms": 8068, + "msgs": 300, + "events": null, + "pty_bytes": 34604, + "pty_writes": 31, + "rss_kb": 187656, + "pss_kb": 150022, + "private_dirty_kb": 128036, + "vmhwm_kb": 196580, + "utime_ticks": 66, + "stime_ticks": 7 + }, + { + "kind": "periodic", + "t_ms": 9073, + "msgs": 300, + "events": null, + "pty_bytes": 34694, + "pty_writes": 33, + "rss_kb": 187656, + "pss_kb": 150022, + "private_dirty_kb": 128036, + "vmhwm_kb": 196580, + "utime_ticks": 66, + "stime_ticks": 7 + }, + { + "kind": "periodic", + "t_ms": 10087, + "msgs": 300, + "events": null, + "pty_bytes": 34784, + "pty_writes": 35, + "rss_kb": 187656, + "pss_kb": 150022, + "private_dirty_kb": 128036, + "vmhwm_kb": 196580, + "utime_ticks": 66, + "stime_ticks": 7 + }, + { + "kind": "periodic", + "t_ms": 11096, + "msgs": 300, + "events": null, + "pty_bytes": 34904, + "pty_writes": 37, + "rss_kb": 187664, + "pss_kb": 148140, + "private_dirty_kb": 128044, + "vmhwm_kb": 196580, + "utime_ticks": 66, + "stime_ticks": 7 + }, + { + "kind": "periodic", + "t_ms": 12098, + "msgs": 300, + "events": null, + "pty_bytes": 35013, + "pty_writes": 39, + "rss_kb": 187664, + "pss_kb": 145076, + "private_dirty_kb": 128044, + "vmhwm_kb": 196580, + "utime_ticks": 66, + "stime_ticks": 7 + }, + { + "kind": "periodic", + "t_ms": 13098, + "msgs": 300, + "events": null, + "pty_bytes": 35103, + "pty_writes": 41, + "rss_kb": 187664, + "pss_kb": 145045, + "private_dirty_kb": 128044, + "vmhwm_kb": 196580, + "utime_ticks": 66, + "stime_ticks": 7 + }, + { + "kind": "periodic", + "t_ms": 14102, + "msgs": 300, + "events": null, + "pty_bytes": 35193, + "pty_writes": 43, + "rss_kb": 187664, + "pss_kb": 145044, + "private_dirty_kb": 128044, + "vmhwm_kb": 196580, + "utime_ticks": 67, + "stime_ticks": 7 + }, + { + "kind": "periodic", + "t_ms": 15111, + "msgs": 300, + "events": null, + "pty_bytes": 35283, + "pty_writes": 45, + "rss_kb": 187664, + "pss_kb": 145044, + "private_dirty_kb": 128044, + "vmhwm_kb": 196580, + "utime_ticks": 67, + "stime_ticks": 7 + }, + { + "kind": "periodic", + "t_ms": 16118, + "msgs": 300, + "events": null, + "pty_bytes": 35373, + "pty_writes": 47, + "rss_kb": 187680, + "pss_kb": 145060, + "private_dirty_kb": 128060, + "vmhwm_kb": 196580, + "utime_ticks": 67, + "stime_ticks": 7 + }, + { + "kind": "final", + "t_ms": 16674, + "msgs": 300, + "events": 1051, + "pty_bytes": 35463, + "pty_writes": 49, + "rss_kb": 187680, + "pss_kb": 145060, + "private_dirty_kb": 128060, + "vmhwm_kb": 196580, + "utime_ticks": 67, + "stime_ticks": 7 + }, + { + "kind": "periodic", + "t_ms": 17125, + "msgs": 300, + "events": null, + "pty_bytes": 46138, + "pty_writes": 56, + "rss_kb": 175904, + "pss_kb": 133284, + "private_dirty_kb": 116284, + "vmhwm_kb": 196580, + "utime_ticks": 71, + "stime_ticks": 7 + }, + { + "kind": "periodic", + "t_ms": 18129, + "msgs": 300, + "events": null, + "pty_bytes": 49784, + "pty_writes": 59, + "rss_kb": 177964, + "pss_kb": 135344, + "private_dirty_kb": 118344, + "vmhwm_kb": 196580, + "utime_ticks": 72, + "stime_ticks": 7 + } + ], + "events": [ + { + "kind": "rpc", + "method": "config.get", + "t_ms": 226 + }, + { + "kind": "rpc", + "method": "commands.catalog", + "t_ms": 226 + }, + { + "kind": "rpc", + "method": "setup.status", + "t_ms": 251 + }, + { + "kind": "rpc", + "method": "session.create", + "t_ms": 251 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 251 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 251 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 251 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 1756 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 3243 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 4751 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 5253 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 6258 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 7766 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 9248 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 10263 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 10767 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 12272 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 13749 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 15261 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 15261 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 16771 + }, + { + "kind": "rpc", + "method": "terminal.resize", + "t_ms": 16796 + }, + { + "kind": "rpc", + "method": "terminal.resize", + "t_ms": 17197 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 18255 + } + ], + "summary": { + "result": "completed", + "cap_hit": false, + "cap_hit_basis": null, + "at_messages": null, + "exit": { + "exitCode": 0, + "signal": 0, + "t": 18284 + }, + "stream_done": true, + "msgs_streamed": 300, + "events_streamed": 1051, + "pty_bytes_total": 50236, + "pty_data_callbacks": 64, + "first_byte_ms": 110, + "session_create_ms": 251, + "stream_start_ms": 1455, + "vmhwm_kb": 196580, + "cg_peak": null, + "drain_max_loop_lag_ms": 3, + "drain_lag_violations": 0, + "drain_ok": true, + "digest": "0f62155086e89590f62e059cc7bcf0851b6c88dac942a8f2303ac905481dea48" + }, + "digest_text": "Excepteur irure nostrud tempor ipsum cupidatat voluptate ullamco labore sit.│Amet culpa cillum commodo enim adipiscing deserunt nulla duis veniam sed.│Quis eiusmod lorem occaecat reprehenderit exercitation incididunt dolor proident velit laboris magna.│Esse aliquip aliqua consectetur officia fugiat consequat minim elit mollit pariatur aute quis.│Anim excepteur irure nostrud tempor ipsum cupidatat voluptate ullamco labore sit sunt esse aliquip.│Magna amet culpa cillum.│Aute quis eiusmod lorem occaecat.│ └─ ● Terminal(\"Proident velit laboris magna.\") (0.3s)│ └─ Args:│Proident velit laboris magna amet culpa cillum commodo enim adipiscing deserunt nulla.│Elit mollit pariatur aute quis eiusmod lorem occaecat reprehenderit exercitation incididunt dolor proident.│Ullamco labore sit sunt esse aliquip aliqua consectetur officia fugiat consequat minim elit mollit.│Nulla duis veniam sed.│Dolor proident velit laboris magna.│Result:│Pariatur aute quis eiusmod lorem occaecat reprehenderit exercitation incididunt dolor proident velit laboris.│Sit sunt esse aliquip aliqua consectetur officia fugiat consequat minim elit mollit pariatur aute.││┊ Minimelitmollitpariaturautequiseiusmodloremoccaecatreprehenderitexercitationincididuntdolor.Officia│fugiatconsequatminimelitmollitpariaturautequiseiusmodloremoccaecatreprehenderitexercitation.│┊ Temporipsumcupidatatvoluptateullamcolaboresitsuntessealiquipaliqua.Excepteurirurenostrudtempor│ipsumcupidatatvoluptateullamcolaboresitsuntesse.Veniamsedanimexcepteurirurenostrudtempor│ipsumcupidatatvoluptateullamcolaboresit.││• Suntessealiquipaliquaconsectetur.│• Consequatminimelitmollitpariaturautequis.│• Eiusmodloremoccaecatreprehenderit.││─ ts│constx4=58│functionf3(){│returnx│}││Exercitationincididuntdolorproidentvelitlaborismagnaametculpacillum.Loremoccaecatreprehenderit┃exercitationincididuntdolorproidentvelitlaborismagnaamet.─ ready │ fake model │ 16s │ ✓ 15s │ voice off ─ …es-agent (…i-native-engine)❯│┃Excepteur irure nostrud tempor ipsum cupidatat voluptate ullamco labore sit.│Amet culpa cillum commodo enim adipiscing deserunt nulla duis veniam sed.│Quis eiusmod lorem occaecat reprehenderit exercitation incididunt dolor proident velit laboris magna.│Esse aliquip aliqua consectetur officia fugiat consequat minim elit mollit pariatur aute quis.│Anim excepteur irure nostrud tempor ipsum cupidatat voluptate ullamco labore sit sunt esse aliquip.│Magna amet culpa cillum.│Aute quis eiusmod lorem occaecat.│ └─ ● Terminal(\"Proident velit laboris magna.\") (0.3s)│ └─ Args:│Proident velit laboris magna amet culpa cillum commodo enim adipiscing deserunt nulla.│Elit mollit pariatur aute quis eiusmod lorem occaecat reprehenderit exercitation incididunt dolor proident.│Ullamco labore sit sunt esse aliquip aliqua consectetur officia fugiat consequat minim elit mollit.│Nulla duis veniam sed.│Dolor proident velit laboris magna.│Result:│Pariatur aute quis eiusmod lorem occaecat reprehenderit exercitation incididunt dolor proident velit laboris.│Sit sunt esse aliquip aliqua consectetur officia fugiat consequat minim elit mollit pariatur aute.││┊ Minimelitmollitpariaturautequiseiusmodloremoccaecatreprehenderitexercitationincididuntdolor.Officia│fugiatconsequatminimelitmollitpariaturautequiseiusmodloremoccaecatreprehenderitexercitation.│┊ Temporipsumcupidatatvoluptateullamcolaboresitsuntessealiquipaliqua.Excepteurirurenostrudtempor│ipsumcupidatatvoluptateullamcolaboresitsuntesse.Veniamsedanimexcepteurirurenostrudtempor│ipsumcupidatatvoluptateullamcolaboresit.││• Suntessealiquipaliquaconsectetur.│• Consequatminimelitmollitpariaturautequis.│• Eiusmodloremoccaecatreprehenderit.││─ ts│constx4=58│functionf3(){│returnx│}││Exercitationincididuntdolorproidentvelitlaborismagnaametculpacillum.Loremoccaecatreprehenderit│exercitationincididuntdolorproidentvelitlaborismagnaamet.┃─ ready │ fake model │ 16s │ ✓ 15s │ voice off ─ …es-agent (…i-native-engine)❯768" +} \ No newline at end of file diff --git a/bench/results/2026-06-12T0423-f0ec24a-gate-opentui-otui-capped-r0.json b/bench/results/2026-06-12T0423-f0ec24a-gate-opentui-otui-capped-r0.json new file mode 100644 index 000000000000..785cbd72ae4a --- /dev/null +++ b/bench/results/2026-06-12T0423-f0ec24a-gate-opentui-otui-capped-r0.json @@ -0,0 +1,225 @@ +{ + "meta": { + "cell": "gate", + "ui": "opentui", + "config": "otui-capped", + "mode": "digest", + "rep": 0, + "run_id": "mqaf8cjn-3smp", + "utc": "2026-06-12T04:23:16.355Z", + "sha": "f0ec24ad5", + "node": "/home/daimon/.local/share/fnm/node-versions/v26.3.0/installation/bin/node", + "node_version": "v26.3.0", + "pty": { + "cols": 120, + "rows": 40, + "term": "xterm-256color" + }, + "heap_mb": 8192, + "memory_max": null, + "container_cap": false, + "container_memory": null, + "opentui_cap": 3000, + "fixture": { + "path": "/home/daimon/github/worktrees/hermes-agent/quiet-quill/hermes-agent/bench/.cache/fixture-300.ndjson", + "msgs": 300, + "sha256": "ac81e975c299da7d50cfda7fc0fee33c356bd31a4e17a7f0f8e49905e205051a" + }, + "sample_every": 100, + "mode_params": {}, + "ui_pid": 168251, + "gw_pid": 168266, + "cgroup": null, + "load_avg_at_start": [ + 0.31, + 0.92, + 1.42 + ], + "instrumented": false + }, + "samples": [ + { + "kind": "periodic", + "t_ms": 25, + "msgs": null, + "events": null, + "pty_bytes": 0, + "pty_writes": 0, + "rss_kb": 54688, + "pss_kb": 25883, + "private_dirty_kb": 17496, + "vmhwm_kb": 54768, + "utime_ticks": 1, + "stime_ticks": 0 + }, + { + "kind": "periodic", + "t_ms": 1030, + "msgs": null, + "events": null, + "pty_bytes": 28909, + "pty_writes": 12, + "rss_kb": 104648, + "pss_kb": 61159, + "private_dirty_kb": 48340, + "vmhwm_kb": 107112, + "utime_ticks": 19, + "stime_ticks": 2 + }, + { + "kind": "boundary", + "t_ms": 1382, + "msgs": 100, + "events": 355, + "pty_bytes": 31409, + "pty_writes": 14, + "rss_kb": 111376, + "pss_kb": 67773, + "private_dirty_kb": 54944, + "vmhwm_kb": 111396, + "utime_ticks": 22, + "stime_ticks": 3 + }, + { + "kind": "boundary", + "t_ms": 1383, + "msgs": 200, + "events": 738, + "pty_bytes": 31409, + "pty_writes": 14, + "rss_kb": 111648, + "pss_kb": 68045, + "private_dirty_kb": 55216, + "vmhwm_kb": 111768, + "utime_ticks": 22, + "stime_ticks": 3 + }, + { + "kind": "boundary", + "t_ms": 1383, + "msgs": 300, + "events": 1051, + "pty_bytes": 31409, + "pty_writes": 14, + "rss_kb": 111880, + "pss_kb": 68277, + "private_dirty_kb": 55448, + "vmhwm_kb": 111748, + "utime_ticks": 22, + "stime_ticks": 3 + }, + { + "kind": "done", + "t_ms": 1384, + "msgs": 300, + "events": 1051, + "pty_bytes": 31409, + "pty_writes": 14, + "rss_kb": 111748, + "pss_kb": 68145, + "private_dirty_kb": 55316, + "vmhwm_kb": 111752, + "utime_ticks": 22, + "stime_ticks": 3 + }, + { + "kind": "periodic", + "t_ms": 2036, + "msgs": 300, + "events": null, + "pty_bytes": 35558, + "pty_writes": 17, + "rss_kb": 300388, + "pss_kb": 254649, + "private_dirty_kb": 240344, + "vmhwm_kb": 301568, + "utime_ticks": 109, + "stime_ticks": 11 + }, + { + "kind": "final", + "t_ms": 2867, + "msgs": 300, + "events": 1051, + "pty_bytes": 35630, + "pty_writes": 18, + "rss_kb": 300420, + "pss_kb": 254681, + "private_dirty_kb": 240376, + "vmhwm_kb": 301568, + "utime_ticks": 109, + "stime_ticks": 11 + }, + { + "kind": "periodic", + "t_ms": 3045, + "msgs": 300, + "events": null, + "pty_bytes": 46541, + "pty_writes": 22, + "rss_kb": 300480, + "pss_kb": 254741, + "private_dirty_kb": 240436, + "vmhwm_kb": 301568, + "utime_ticks": 111, + "stime_ticks": 11 + }, + { + "kind": "periodic", + "t_ms": 4050, + "msgs": 300, + "events": null, + "pty_bytes": 57863, + "pty_writes": 27, + "rss_kb": 300528, + "pss_kb": 254789, + "private_dirty_kb": 240484, + "vmhwm_kb": 301568, + "utime_ticks": 112, + "stime_ticks": 11 + } + ], + "events": [ + { + "kind": "rpc", + "method": "session.create", + "t_ms": 175 + }, + { + "kind": "rpc", + "method": "startup.catalog", + "t_ms": 175 + }, + { + "kind": "rpc", + "method": "model.options", + "t_ms": 175 + } + ], + "summary": { + "result": "completed", + "cap_hit": false, + "cap_hit_basis": null, + "at_messages": null, + "exit": { + "exitCode": 0, + "signal": 0, + "t": 4721 + }, + "stream_done": true, + "msgs_streamed": 300, + "events_streamed": 1051, + "pty_bytes_total": 62674, + "pty_data_callbacks": 32, + "first_byte_ms": 130, + "session_create_ms": 175, + "stream_start_ms": 1380, + "vmhwm_kb": 301568, + "cg_peak": null, + "drain_max_loop_lag_ms": 3, + "drain_lag_violations": 0, + "drain_ok": true, + "digest": "4c4f97e930ebbaa2f174eaf5410c4d100689c671220623ad906530d885eef948" + }, + "digest_text": "⚕ Hermes Agent · opentui · ready ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── $ terminal Culpa cillum commodo enim. · 3.7s (2 lines) ◇ read_file Duis veniam sed anim. · 3.8s (18 lines) ◦ edit_file Tempor ipsum cupidatat voluptate. · 3.9s (7 lines) ◦ grep Sunt esse aliquip aliqua. · 4.0s (2 lines) ● web_search Consequat minim elit mollit. · 0.1s (18 lines) ◆ write_file Eiusmod lorem occaecat reprehenderit. · 0.2s (7 lines) $ terminal Proident velit laboris magna. · 0.3s (2 lines) Minim elit mollit pariatur aute quis eiusmod lorem occaecat reprehenderit exercitation incididunt dolor. Officia fugiat consequat minim elit mollit pariatur aute quis eiusmod lorem occaecat reprehenderit exercitation. ⧉ copy ⚕ Tempor ipsum cupidatat voluptate ullamco labore sit sunt esse aliquip aliqua. Excepteur irure nostrud tempor ipsum cupidatat voluptate ullamco labore sit sunt esse. Veniam sed anim excepteur irure nostrud tempor ipsum cupidatat voluptate ullamco labore sit. - Sunt esse aliquip aliqua consectetur. - Consequat minim elit mollit pariatur aute quis. - Eiusmod lorem occaecat reprehenderit. const x4 = 58 function f3() { return x } Exercitation incididunt dolor proident velit laboris magna amet culpa cillum. Lorem occaecat reprehenderit exercitation incididunt dolor proident velit laboris magna amet. ⧉ copy ▄ ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── ● fake-model │ up: Ns │ …/quiet-quill/hermes-agent ❯ Type your message" +} \ No newline at end of file diff --git a/bench/results/2026-06-12T0423-f0ec24a-gate-opentui-otui-capped-r1.json b/bench/results/2026-06-12T0423-f0ec24a-gate-opentui-otui-capped-r1.json new file mode 100644 index 000000000000..966ea75ea191 --- /dev/null +++ b/bench/results/2026-06-12T0423-f0ec24a-gate-opentui-otui-capped-r1.json @@ -0,0 +1,225 @@ +{ + "meta": { + "cell": "gate", + "ui": "opentui", + "config": "otui-capped", + "mode": "digest", + "rep": 1, + "run_id": "mqaf8nws-3ryc", + "utc": "2026-06-12T04:23:31.084Z", + "sha": "f0ec24ad5", + "node": "/home/daimon/.local/share/fnm/node-versions/v26.3.0/installation/bin/node", + "node_version": "v26.3.0", + "pty": { + "cols": 120, + "rows": 40, + "term": "xterm-256color" + }, + "heap_mb": 8192, + "memory_max": null, + "container_cap": false, + "container_memory": null, + "opentui_cap": 3000, + "fixture": { + "path": "/home/daimon/github/worktrees/hermes-agent/quiet-quill/hermes-agent/bench/.cache/fixture-300.ndjson", + "msgs": 300, + "sha256": "ac81e975c299da7d50cfda7fc0fee33c356bd31a4e17a7f0f8e49905e205051a" + }, + "sample_every": 100, + "mode_params": {}, + "ui_pid": 168675, + "gw_pid": 168684, + "cgroup": null, + "load_avg_at_start": [ + 0.51, + 0.93, + 1.42 + ], + "instrumented": false + }, + "samples": [ + { + "kind": "periodic", + "t_ms": 26, + "msgs": null, + "events": null, + "pty_bytes": 0, + "pty_writes": 0, + "rss_kb": 54724, + "pss_kb": 25927, + "private_dirty_kb": 17484, + "vmhwm_kb": 54756, + "utime_ticks": 1, + "stime_ticks": 0 + }, + { + "kind": "periodic", + "t_ms": 1033, + "msgs": null, + "events": null, + "pty_bytes": 28909, + "pty_writes": 13, + "rss_kb": 104792, + "pss_kb": 61265, + "private_dirty_kb": 48340, + "vmhwm_kb": 107580, + "utime_ticks": 17, + "stime_ticks": 2 + }, + { + "kind": "boundary", + "t_ms": 1386, + "msgs": 100, + "events": 355, + "pty_bytes": 31409, + "pty_writes": 15, + "rss_kb": 112180, + "pss_kb": 68538, + "private_dirty_kb": 55604, + "vmhwm_kb": 112212, + "utime_ticks": 22, + "stime_ticks": 3 + }, + { + "kind": "boundary", + "t_ms": 1387, + "msgs": 200, + "events": 738, + "pty_bytes": 31409, + "pty_writes": 15, + "rss_kb": 112424, + "pss_kb": 68782, + "private_dirty_kb": 55848, + "vmhwm_kb": 112444, + "utime_ticks": 23, + "stime_ticks": 3 + }, + { + "kind": "boundary", + "t_ms": 1388, + "msgs": 300, + "events": 1051, + "pty_bytes": 31409, + "pty_writes": 15, + "rss_kb": 112448, + "pss_kb": 68806, + "private_dirty_kb": 55872, + "vmhwm_kb": 112448, + "utime_ticks": 23, + "stime_ticks": 3 + }, + { + "kind": "done", + "t_ms": 1388, + "msgs": 300, + "events": 1051, + "pty_bytes": 31409, + "pty_writes": 15, + "rss_kb": 112448, + "pss_kb": 68806, + "private_dirty_kb": 55872, + "vmhwm_kb": 112448, + "utime_ticks": 23, + "stime_ticks": 3 + }, + { + "kind": "periodic", + "t_ms": 2041, + "msgs": 300, + "events": null, + "pty_bytes": 35558, + "pty_writes": 18, + "rss_kb": 274976, + "pss_kb": 229157, + "private_dirty_kb": 214852, + "vmhwm_kb": 324708, + "utime_ticks": 106, + "stime_ticks": 11 + }, + { + "kind": "final", + "t_ms": 2861, + "msgs": 300, + "events": 1051, + "pty_bytes": 35630, + "pty_writes": 19, + "rss_kb": 275008, + "pss_kb": 229189, + "private_dirty_kb": 214884, + "vmhwm_kb": 324708, + "utime_ticks": 107, + "stime_ticks": 11 + }, + { + "kind": "periodic", + "t_ms": 3049, + "msgs": 300, + "events": null, + "pty_bytes": 46541, + "pty_writes": 23, + "rss_kb": 275068, + "pss_kb": 229249, + "private_dirty_kb": 214944, + "vmhwm_kb": 324708, + "utime_ticks": 108, + "stime_ticks": 11 + }, + { + "kind": "periodic", + "t_ms": 4055, + "msgs": 300, + "events": null, + "pty_bytes": 57863, + "pty_writes": 28, + "rss_kb": 275112, + "pss_kb": 229288, + "private_dirty_kb": 214988, + "vmhwm_kb": 324708, + "utime_ticks": 109, + "stime_ticks": 11 + } + ], + "events": [ + { + "kind": "rpc", + "method": "session.create", + "t_ms": 176 + }, + { + "kind": "rpc", + "method": "startup.catalog", + "t_ms": 176 + }, + { + "kind": "rpc", + "method": "model.options", + "t_ms": 176 + } + ], + "summary": { + "result": "completed", + "cap_hit": false, + "cap_hit_basis": null, + "at_messages": null, + "exit": { + "exitCode": 0, + "signal": 0, + "t": 4707 + }, + "stream_done": true, + "msgs_streamed": 300, + "events_streamed": 1051, + "pty_bytes_total": 62674, + "pty_data_callbacks": 33, + "first_byte_ms": 128, + "session_create_ms": 176, + "stream_start_ms": 1385, + "vmhwm_kb": 324708, + "cg_peak": null, + "drain_max_loop_lag_ms": 4, + "drain_lag_violations": 0, + "drain_ok": true, + "digest": "4c4f97e930ebbaa2f174eaf5410c4d100689c671220623ad906530d885eef948" + }, + "digest_text": "⚕ Hermes Agent · opentui · ready ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── $ terminal Culpa cillum commodo enim. · 3.7s (2 lines) ◇ read_file Duis veniam sed anim. · 3.8s (18 lines) ◦ edit_file Tempor ipsum cupidatat voluptate. · 3.9s (7 lines) ◦ grep Sunt esse aliquip aliqua. · 4.0s (2 lines) ● web_search Consequat minim elit mollit. · 0.1s (18 lines) ◆ write_file Eiusmod lorem occaecat reprehenderit. · 0.2s (7 lines) $ terminal Proident velit laboris magna. · 0.3s (2 lines) Minim elit mollit pariatur aute quis eiusmod lorem occaecat reprehenderit exercitation incididunt dolor. Officia fugiat consequat minim elit mollit pariatur aute quis eiusmod lorem occaecat reprehenderit exercitation. ⧉ copy ⚕ Tempor ipsum cupidatat voluptate ullamco labore sit sunt esse aliquip aliqua. Excepteur irure nostrud tempor ipsum cupidatat voluptate ullamco labore sit sunt esse. Veniam sed anim excepteur irure nostrud tempor ipsum cupidatat voluptate ullamco labore sit. - Sunt esse aliquip aliqua consectetur. - Consequat minim elit mollit pariatur aute quis. - Eiusmod lorem occaecat reprehenderit. const x4 = 58 function f3() { return x } Exercitation incididunt dolor proident velit laboris magna amet culpa cillum. Lorem occaecat reprehenderit exercitation incididunt dolor proident velit laboris magna amet. ⧉ copy ▄ ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── ● fake-model │ up: Ns │ …/quiet-quill/hermes-agent ❯ Type your message" +} \ No newline at end of file diff --git a/bench/results/2026-06-12T0424-f0ec24a-mem2000-ink-ink-r0.json b/bench/results/2026-06-12T0424-f0ec24a-mem2000-ink-ink-r0.json new file mode 100644 index 000000000000..88d480c8c8b8 --- /dev/null +++ b/bench/results/2026-06-12T0424-f0ec24a-mem2000-ink-ink-r0.json @@ -0,0 +1,854 @@ +{ + "meta": { + "cell": "mem2000", + "ui": "ink", + "config": "ink", + "mode": "mem", + "rep": 0, + "run_id": "mqafa3wx-7qr8", + "utc": "2026-06-12T04:24:38.481Z", + "sha": "f0ec24ad5", + "node": "/home/daimon/.local/share/fnm/node-versions/v26.3.0/installation/bin/node", + "node_version": "v26.3.0", + "pty": { + "cols": 120, + "rows": 40, + "term": "xterm-256color" + }, + "heap_mb": 8192, + "memory_max": "2G", + "container_cap": false, + "container_memory": null, + "opentui_cap": null, + "fixture": { + "path": "/home/daimon/github/worktrees/hermes-agent/quiet-quill/hermes-agent/bench/.cache/fixture-2000.ndjson", + "msgs": 2000, + "sha256": "645b9ee4fdaccee45172fcec8af4a0b01a5f9aeca56ce45d8e84c4276472f99c" + }, + "sample_every": 100, + "mode_params": {}, + "ui_pid": 170578, + "gw_pid": 170601, + "cgroup": "/sys/fs/cgroup/user.slice/user-1001.slice/session-7349.scope", + "load_avg_at_start": [ + 0.45, + 0.83, + 1.34 + ], + "instrumented": false + }, + "samples": [ + { + "kind": "periodic", + "t_ms": 26, + "msgs": null, + "events": null, + "pty_bytes": 0, + "pty_writes": 0, + "rss_kb": 29152, + "pss_kb": 10292, + "private_dirty_kb": 4420, + "vmhwm_kb": 29152, + "utime_ticks": 0, + "stime_ticks": 0, + "cg_current": 5940740096, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 1031, + "msgs": null, + "events": null, + "pty_bytes": 6190, + "pty_writes": 13, + "rss_kb": 111012, + "pss_kb": 67797, + "private_dirty_kb": 52260, + "vmhwm_kb": 111012, + "utime_ticks": 24, + "stime_ticks": 4, + "cg_current": 5941399552, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1760, + "msgs": 100, + "events": 355, + "pty_bytes": 6411, + "pty_writes": 16, + "rss_kb": 114928, + "pss_kb": 71604, + "private_dirty_kb": 55388, + "vmhwm_kb": 114936, + "utime_ticks": 26, + "stime_ticks": 4, + "cg_current": 5940625408, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1835, + "msgs": 200, + "events": 738, + "pty_bytes": 13769, + "pty_writes": 20, + "rss_kb": 140880, + "pss_kb": 97258, + "private_dirty_kb": 80960, + "vmhwm_kb": 140888, + "utime_ticks": 39, + "stime_ticks": 5, + "cg_current": 5940695040, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1860, + "msgs": 300, + "events": 1051, + "pty_bytes": 17619, + "pty_writes": 21, + "rss_kb": 153592, + "pss_kb": 109970, + "private_dirty_kb": 93672, + "vmhwm_kb": 153620, + "utime_ticks": 44, + "stime_ticks": 6, + "cg_current": 5940695040, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1937, + "msgs": 400, + "events": 1432, + "pty_bytes": 26009, + "pty_writes": 25, + "rss_kb": 172120, + "pss_kb": 128498, + "private_dirty_kb": 112200, + "vmhwm_kb": 178392, + "utime_ticks": 59, + "stime_ticks": 7, + "cg_current": 5940998144, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1963, + "msgs": 501, + "events": 1792, + "pty_bytes": 32671, + "pty_writes": 28, + "rss_kb": 173420, + "pss_kb": 129798, + "private_dirty_kb": 113500, + "vmhwm_kb": 178392, + "utime_ticks": 62, + "stime_ticks": 7, + "cg_current": 5940809728, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2011, + "msgs": 601, + "events": 2154, + "pty_bytes": 43052, + "pty_writes": 31, + "rss_kb": 179416, + "pss_kb": 135784, + "private_dirty_kb": 119496, + "vmhwm_kb": 179440, + "utime_ticks": 71, + "stime_ticks": 7, + "cg_current": 5940842496, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2036, + "msgs": 701, + "events": 2496, + "pty_bytes": 46699, + "pty_writes": 32, + "rss_kb": 182248, + "pss_kb": 138616, + "private_dirty_kb": 122328, + "vmhwm_kb": 182248, + "utime_ticks": 74, + "stime_ticks": 7, + "cg_current": 5940842496, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 2038, + "msgs": null, + "events": null, + "pty_bytes": 46699, + "pty_writes": 32, + "rss_kb": 182284, + "pss_kb": 138652, + "private_dirty_kb": 122364, + "vmhwm_kb": 182320, + "utime_ticks": 75, + "stime_ticks": 7, + "cg_current": 5940842496, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2061, + "msgs": 801, + "events": 2857, + "pty_bytes": 50621, + "pty_writes": 33, + "rss_kb": 184112, + "pss_kb": 140480, + "private_dirty_kb": 124192, + "vmhwm_kb": 184116, + "utime_ticks": 77, + "stime_ticks": 7, + "cg_current": 5940842496, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2112, + "msgs": 901, + "events": 3245, + "pty_bytes": 58620, + "pty_writes": 35, + "rss_kb": 193376, + "pss_kb": 149741, + "private_dirty_kb": 133456, + "vmhwm_kb": 193384, + "utime_ticks": 85, + "stime_ticks": 8, + "cg_current": 5940846592, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2163, + "msgs": 1001, + "events": 3588, + "pty_bytes": 65835, + "pty_writes": 37, + "rss_kb": 197156, + "pss_kb": 153521, + "private_dirty_kb": 137236, + "vmhwm_kb": 197164, + "utime_ticks": 91, + "stime_ticks": 8, + "cg_current": 5940846592, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2188, + "msgs": 1101, + "events": 3928, + "pty_bytes": 73273, + "pty_writes": 39, + "rss_kb": 200276, + "pss_kb": 156641, + "private_dirty_kb": 140356, + "vmhwm_kb": 200276, + "utime_ticks": 95, + "stime_ticks": 8, + "cg_current": 5940842496, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2213, + "msgs": 1201, + "events": 4298, + "pty_bytes": 77046, + "pty_writes": 40, + "rss_kb": 203176, + "pss_kb": 159541, + "private_dirty_kb": 143256, + "vmhwm_kb": 203180, + "utime_ticks": 99, + "stime_ticks": 8, + "cg_current": 5940842496, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2262, + "msgs": 1300, + "events": 4659, + "pty_bytes": 88185, + "pty_writes": 43, + "rss_kb": 210112, + "pss_kb": 166477, + "private_dirty_kb": 150192, + "vmhwm_kb": 210124, + "utime_ticks": 107, + "stime_ticks": 9, + "cg_current": 5940842496, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2263, + "msgs": 1400, + "events": 5011, + "pty_bytes": 88185, + "pty_writes": 43, + "rss_kb": 210136, + "pss_kb": 166501, + "private_dirty_kb": 150216, + "vmhwm_kb": 210136, + "utime_ticks": 107, + "stime_ticks": 9, + "cg_current": 5940842496, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2438, + "msgs": 1500, + "events": 5384, + "pty_bytes": 95749, + "pty_writes": 45, + "rss_kb": 218668, + "pss_kb": 175033, + "private_dirty_kb": 158748, + "vmhwm_kb": 218672, + "utime_ticks": 127, + "stime_ticks": 9, + "cg_current": 5940731904, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2587, + "msgs": 1600, + "events": 5730, + "pty_bytes": 103499, + "pty_writes": 48, + "rss_kb": 225504, + "pss_kb": 181869, + "private_dirty_kb": 165584, + "vmhwm_kb": 225644, + "utime_ticks": 144, + "stime_ticks": 9, + "cg_current": 5940396032, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2639, + "msgs": 1700, + "events": 6100, + "pty_bytes": 111074, + "pty_writes": 51, + "rss_kb": 232268, + "pss_kb": 188633, + "private_dirty_kb": 172348, + "vmhwm_kb": 232276, + "utime_ticks": 151, + "stime_ticks": 9, + "cg_current": 5940883456, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2665, + "msgs": 1800, + "events": 6455, + "pty_bytes": 114381, + "pty_writes": 54, + "rss_kb": 235400, + "pss_kb": 191765, + "private_dirty_kb": 175480, + "vmhwm_kb": 235400, + "utime_ticks": 155, + "stime_ticks": 10, + "cg_current": 5940625408, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2715, + "msgs": 1900, + "events": 6838, + "pty_bytes": 117335, + "pty_writes": 55, + "rss_kb": 246420, + "pss_kb": 202785, + "private_dirty_kb": 186500, + "vmhwm_kb": 246440, + "utime_ticks": 163, + "stime_ticks": 10, + "cg_current": 5940895744, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2738, + "msgs": 2000, + "events": 7151, + "pty_bytes": 124683, + "pty_writes": 57, + "rss_kb": 244808, + "pss_kb": 201173, + "private_dirty_kb": 184888, + "vmhwm_kb": 249288, + "utime_ticks": 167, + "stime_ticks": 10, + "cg_current": 5941153792, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "done", + "t_ms": 2740, + "msgs": 2000, + "events": 7151, + "pty_bytes": 124683, + "pty_writes": 57, + "rss_kb": 244808, + "pss_kb": 201173, + "private_dirty_kb": 184888, + "vmhwm_kb": 249288, + "utime_ticks": 167, + "stime_ticks": 10, + "cg_current": 5941153792, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 3040, + "msgs": 2000, + "events": null, + "pty_bytes": 132349, + "pty_writes": 60, + "rss_kb": 246068, + "pss_kb": 202433, + "private_dirty_kb": 186148, + "vmhwm_kb": 249288, + "utime_ticks": 172, + "stime_ticks": 10, + "cg_current": 5941141504, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 4048, + "msgs": 2000, + "events": null, + "pty_bytes": 132439, + "pty_writes": 62, + "rss_kb": 246068, + "pss_kb": 202433, + "private_dirty_kb": 186148, + "vmhwm_kb": 249288, + "utime_ticks": 172, + "stime_ticks": 10, + "cg_current": 5942734848, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 5048, + "msgs": 2000, + "events": null, + "pty_bytes": 132529, + "pty_writes": 64, + "rss_kb": 246068, + "pss_kb": 202433, + "private_dirty_kb": 186148, + "vmhwm_kb": 249288, + "utime_ticks": 172, + "stime_ticks": 10, + "cg_current": 5952634880, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 6052, + "msgs": 2000, + "events": null, + "pty_bytes": 132619, + "pty_writes": 66, + "rss_kb": 246068, + "pss_kb": 202433, + "private_dirty_kb": 186148, + "vmhwm_kb": 249288, + "utime_ticks": 172, + "stime_ticks": 10, + "cg_current": 5955338240, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 7060, + "msgs": 2000, + "events": null, + "pty_bytes": 132709, + "pty_writes": 68, + "rss_kb": 246068, + "pss_kb": 202433, + "private_dirty_kb": 186148, + "vmhwm_kb": 249288, + "utime_ticks": 172, + "stime_ticks": 10, + "cg_current": 5956476928, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 8072, + "msgs": 2000, + "events": null, + "pty_bytes": 132799, + "pty_writes": 70, + "rss_kb": 246068, + "pss_kb": 202433, + "private_dirty_kb": 186148, + "vmhwm_kb": 249288, + "utime_ticks": 173, + "stime_ticks": 10, + "cg_current": 5959532544, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 9078, + "msgs": 2000, + "events": null, + "pty_bytes": 132889, + "pty_writes": 72, + "rss_kb": 246068, + "pss_kb": 202433, + "private_dirty_kb": 186148, + "vmhwm_kb": 249288, + "utime_ticks": 173, + "stime_ticks": 10, + "cg_current": 5958893568, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 10091, + "msgs": 2000, + "events": null, + "pty_bytes": 132979, + "pty_writes": 74, + "rss_kb": 246068, + "pss_kb": 202433, + "private_dirty_kb": 186148, + "vmhwm_kb": 249288, + "utime_ticks": 173, + "stime_ticks": 10, + "cg_current": 5964316672, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 11107, + "msgs": 2000, + "events": null, + "pty_bytes": 133099, + "pty_writes": 76, + "rss_kb": 246068, + "pss_kb": 202433, + "private_dirty_kb": 186148, + "vmhwm_kb": 249288, + "utime_ticks": 173, + "stime_ticks": 10, + "cg_current": 5973635072, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 12113, + "msgs": 2000, + "events": null, + "pty_bytes": 133189, + "pty_writes": 78, + "rss_kb": 246068, + "pss_kb": 202433, + "private_dirty_kb": 186148, + "vmhwm_kb": 249288, + "utime_ticks": 173, + "stime_ticks": 10, + "cg_current": 5948555264, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 13120, + "msgs": 2000, + "events": null, + "pty_bytes": 133298, + "pty_writes": 80, + "rss_kb": 246068, + "pss_kb": 202433, + "private_dirty_kb": 186148, + "vmhwm_kb": 249288, + "utime_ticks": 174, + "stime_ticks": 10, + "cg_current": 5949779968, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 14133, + "msgs": 2000, + "events": null, + "pty_bytes": 133388, + "pty_writes": 82, + "rss_kb": 246068, + "pss_kb": 202433, + "private_dirty_kb": 186148, + "vmhwm_kb": 249288, + "utime_ticks": 174, + "stime_ticks": 10, + "cg_current": 5949759488, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 15144, + "msgs": 2000, + "events": null, + "pty_bytes": 133478, + "pty_writes": 84, + "rss_kb": 246068, + "pss_kb": 202433, + "private_dirty_kb": 186148, + "vmhwm_kb": 249288, + "utime_ticks": 174, + "stime_ticks": 10, + "cg_current": 5955108864, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 16156, + "msgs": 2000, + "events": null, + "pty_bytes": 133568, + "pty_writes": 86, + "rss_kb": 246068, + "pss_kb": 202433, + "private_dirty_kb": 186148, + "vmhwm_kb": 249288, + "utime_ticks": 174, + "stime_ticks": 10, + "cg_current": 5958033408, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 17164, + "msgs": 2000, + "events": null, + "pty_bytes": 133658, + "pty_writes": 88, + "rss_kb": 246068, + "pss_kb": 202433, + "private_dirty_kb": 186148, + "vmhwm_kb": 249288, + "utime_ticks": 174, + "stime_ticks": 10, + "cg_current": 5961461760, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "final", + "t_ms": 17788, + "msgs": 2000, + "events": 7151, + "pty_bytes": 133748, + "pty_writes": 90, + "rss_kb": 246068, + "pss_kb": 202433, + "private_dirty_kb": 186148, + "vmhwm_kb": 249288, + "utime_ticks": 175, + "stime_ticks": 10, + "cg_current": 5962797056, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + } + ], + "events": [ + { + "kind": "rpc", + "method": "config.get", + "t_ms": 252 + }, + { + "kind": "rpc", + "method": "commands.catalog", + "t_ms": 252 + }, + { + "kind": "rpc", + "method": "setup.status", + "t_ms": 252 + }, + { + "kind": "rpc", + "method": "session.create", + "t_ms": 252 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 252 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 252 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 252 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 1758 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 3265 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 4746 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 5247 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 6251 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 7763 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 9254 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 10265 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 10746 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 12262 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 13753 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 15242 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 15268 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 16760 + } + ], + "summary": { + "result": "completed", + "cap_hit": false, + "cap_hit_basis": null, + "at_messages": null, + "exit": { + "exitCode": 0, + "signal": 0, + "t": 17801 + }, + "stream_done": true, + "msgs_streamed": 2000, + "events_streamed": 7151, + "pty_bytes_total": 134155, + "pty_data_callbacks": 98, + "first_byte_ms": 114, + "session_create_ms": 252, + "stream_start_ms": 1758, + "vmhwm_kb": 249288, + "cg_peak": 7893282816, + "drain_max_loop_lag_ms": 5, + "drain_lag_violations": 0, + "drain_ok": true, + "digest": null + } +} \ No newline at end of file diff --git a/bench/results/2026-06-12T0424-f0ec24a-mem2000-opentui-otui-capped-r0.json b/bench/results/2026-06-12T0424-f0ec24a-mem2000-opentui-otui-capped-r0.json new file mode 100644 index 000000000000..0144fc671f70 --- /dev/null +++ b/bench/results/2026-06-12T0424-f0ec24a-mem2000-opentui-otui-capped-r0.json @@ -0,0 +1,611 @@ +{ + "meta": { + "cell": "mem2000", + "ui": "opentui", + "config": "otui-capped", + "mode": "mem", + "rep": 0, + "run_id": "mqaf9blb-m7l3", + "utc": "2026-06-12T04:24:01.775Z", + "sha": "f0ec24ad5", + "node": "/home/daimon/.local/share/fnm/node-versions/v26.3.0/installation/bin/node", + "node_version": "v26.3.0", + "pty": { + "cols": 120, + "rows": 40, + "term": "xterm-256color" + }, + "heap_mb": 8192, + "memory_max": "2G", + "container_cap": false, + "container_memory": null, + "opentui_cap": 3000, + "fixture": { + "path": "/home/daimon/github/worktrees/hermes-agent/quiet-quill/hermes-agent/bench/.cache/fixture-2000.ndjson", + "msgs": 2000, + "sha256": "645b9ee4fdaccee45172fcec8af4a0b01a5f9aeca56ce45d8e84c4276472f99c" + }, + "sample_every": 100, + "mode_params": {}, + "ui_pid": 169517, + "gw_pid": 169526, + "cgroup": "/sys/fs/cgroup/user.slice/user-1001.slice/session-7349.scope", + "load_avg_at_start": [ + 0.73, + 0.93, + 1.39 + ], + "instrumented": false + }, + "samples": [ + { + "kind": "periodic", + "t_ms": 28, + "msgs": null, + "events": null, + "pty_bytes": 0, + "pty_writes": 0, + "rss_kb": 31864, + "pss_kb": 12337, + "private_dirty_kb": 6144, + "vmhwm_kb": 31744, + "utime_ticks": 1, + "stime_ticks": 0, + "cg_current": 6002446336, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 1037, + "msgs": null, + "events": null, + "pty_bytes": 28909, + "pty_writes": 10, + "rss_kb": 104788, + "pss_kb": 60315, + "private_dirty_kb": 48340, + "vmhwm_kb": 107352, + "utime_ticks": 18, + "stime_ticks": 1, + "cg_current": 5998682112, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1695, + "msgs": 100, + "events": 355, + "pty_bytes": 31409, + "pty_writes": 12, + "rss_kb": 112868, + "pss_kb": 68274, + "private_dirty_kb": 56296, + "vmhwm_kb": 113072, + "utime_ticks": 22, + "stime_ticks": 1, + "cg_current": 5998612480, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1696, + "msgs": 200, + "events": 738, + "pty_bytes": 31409, + "pty_writes": 12, + "rss_kb": 113124, + "pss_kb": 68530, + "private_dirty_kb": 56552, + "vmhwm_kb": 112992, + "utime_ticks": 22, + "stime_ticks": 1, + "cg_current": 5998616576, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1697, + "msgs": 300, + "events": 1051, + "pty_bytes": 31409, + "pty_writes": 12, + "rss_kb": 113120, + "pss_kb": 68526, + "private_dirty_kb": 56548, + "vmhwm_kb": 113188, + "utime_ticks": 22, + "stime_ticks": 1, + "cg_current": 5998616576, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 2046, + "msgs": null, + "events": null, + "pty_bytes": 31409, + "pty_writes": 12, + "rss_kb": 227468, + "pss_kb": 180839, + "private_dirty_kb": 167776, + "vmhwm_kb": 227468, + "utime_ticks": 77, + "stime_ticks": 7, + "cg_current": 5999181824, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2097, + "msgs": 400, + "events": 1432, + "pty_bytes": 32463, + "pty_writes": 13, + "rss_kb": 229936, + "pss_kb": 183307, + "private_dirty_kb": 170244, + "vmhwm_kb": 229936, + "utime_ticks": 82, + "stime_ticks": 7, + "cg_current": 5998927872, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2148, + "msgs": 501, + "events": 1792, + "pty_bytes": 36002, + "pty_writes": 14, + "rss_kb": 231552, + "pss_kb": 184810, + "private_dirty_kb": 171680, + "vmhwm_kb": 231560, + "utime_ticks": 88, + "stime_ticks": 8, + "cg_current": 5998673920, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2325, + "msgs": 601, + "events": 2154, + "pty_bytes": 38789, + "pty_writes": 16, + "rss_kb": 268004, + "pss_kb": 221200, + "private_dirty_kb": 208008, + "vmhwm_kb": 268056, + "utime_ticks": 117, + "stime_ticks": 8, + "cg_current": 5998878720, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2573, + "msgs": 701, + "events": 2496, + "pty_bytes": 41517, + "pty_writes": 18, + "rss_kb": 307192, + "pss_kb": 260272, + "private_dirty_kb": 247072, + "vmhwm_kb": 342248, + "utime_ticks": 165, + "stime_ticks": 11, + "cg_current": 5998968832, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2805, + "msgs": 801, + "events": 2857, + "pty_bytes": 42840, + "pty_writes": 19, + "rss_kb": 337800, + "pss_kb": 290880, + "private_dirty_kb": 277680, + "vmhwm_kb": 342248, + "utime_ticks": 192, + "stime_ticks": 12, + "cg_current": 5998862336, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 3050, + "msgs": null, + "events": null, + "pty_bytes": 44316, + "pty_writes": 20, + "rss_kb": 366384, + "pss_kb": 319464, + "private_dirty_kb": 306264, + "vmhwm_kb": 366472, + "utime_ticks": 219, + "stime_ticks": 14, + "cg_current": 5998555136, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3102, + "msgs": 901, + "events": 3245, + "pty_bytes": 47642, + "pty_writes": 22, + "rss_kb": 368804, + "pss_kb": 321880, + "private_dirty_kb": 308684, + "vmhwm_kb": 368840, + "utime_ticks": 225, + "stime_ticks": 14, + "cg_current": 5998551040, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3104, + "msgs": 1001, + "events": 3588, + "pty_bytes": 47642, + "pty_writes": 22, + "rss_kb": 368896, + "pss_kb": 321972, + "private_dirty_kb": 308776, + "vmhwm_kb": 368916, + "utime_ticks": 226, + "stime_ticks": 14, + "cg_current": 5998551040, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3106, + "msgs": 1101, + "events": 3928, + "pty_bytes": 47642, + "pty_writes": 22, + "rss_kb": 368928, + "pss_kb": 322004, + "private_dirty_kb": 308808, + "vmhwm_kb": 368948, + "utime_ticks": 226, + "stime_ticks": 14, + "cg_current": 5998551040, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3107, + "msgs": 1201, + "events": 4298, + "pty_bytes": 47642, + "pty_writes": 22, + "rss_kb": 368968, + "pss_kb": 322044, + "private_dirty_kb": 308848, + "vmhwm_kb": 368988, + "utime_ticks": 226, + "stime_ticks": 14, + "cg_current": 5998551040, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3125, + "msgs": 1300, + "events": 4659, + "pty_bytes": 47642, + "pty_writes": 22, + "rss_kb": 371680, + "pss_kb": 324756, + "private_dirty_kb": 311560, + "vmhwm_kb": 371776, + "utime_ticks": 228, + "stime_ticks": 14, + "cg_current": 5999067136, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3127, + "msgs": 1400, + "events": 5011, + "pty_bytes": 47642, + "pty_writes": 22, + "rss_kb": 371916, + "pss_kb": 324992, + "private_dirty_kb": 311796, + "vmhwm_kb": 372020, + "utime_ticks": 228, + "stime_ticks": 14, + "cg_current": 5999067136, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3128, + "msgs": 1500, + "events": 5384, + "pty_bytes": 47642, + "pty_writes": 22, + "rss_kb": 372140, + "pss_kb": 325216, + "private_dirty_kb": 312020, + "vmhwm_kb": 372188, + "utime_ticks": 228, + "stime_ticks": 14, + "cg_current": 5999067136, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 4032, + "msgs": 1600, + "events": 5730, + "pty_bytes": 50803, + "pty_writes": 24, + "rss_kb": 535276, + "pss_kb": 488352, + "private_dirty_kb": 475156, + "vmhwm_kb": 535284, + "utime_ticks": 350, + "stime_ticks": 20, + "cg_current": 5998948352, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 4059, + "msgs": null, + "events": null, + "pty_bytes": 50803, + "pty_writes": 24, + "rss_kb": 540160, + "pss_kb": 493236, + "private_dirty_kb": 480040, + "vmhwm_kb": 540220, + "utime_ticks": 353, + "stime_ticks": 21, + "cg_current": 5998952448, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 4612, + "msgs": 1700, + "events": 6100, + "pty_bytes": 54799, + "pty_writes": 26, + "rss_kb": 564292, + "pss_kb": 517368, + "private_dirty_kb": 504172, + "vmhwm_kb": 564368, + "utime_ticks": 410, + "stime_ticks": 22, + "cg_current": 5999460352, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 5011, + "msgs": 1800, + "events": 6455, + "pty_bytes": 56349, + "pty_writes": 27, + "rss_kb": 591676, + "pss_kb": 544752, + "private_dirty_kb": 531556, + "vmhwm_kb": 591676, + "utime_ticks": 453, + "stime_ticks": 24, + "cg_current": 5982150656, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 5061, + "msgs": null, + "events": null, + "pty_bytes": 56349, + "pty_writes": 27, + "rss_kb": 591676, + "pss_kb": 544752, + "private_dirty_kb": 531556, + "vmhwm_kb": 591676, + "utime_ticks": 458, + "stime_ticks": 24, + "cg_current": 5982121984, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 5638, + "msgs": 1900, + "events": 6838, + "pty_bytes": 60037, + "pty_writes": 29, + "rss_kb": 621532, + "pss_kb": 574608, + "private_dirty_kb": 561412, + "vmhwm_kb": 621532, + "utime_ticks": 518, + "stime_ticks": 25, + "cg_current": 5983272960, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 6066, + "msgs": null, + "events": null, + "pty_bytes": 61205, + "pty_writes": 30, + "rss_kb": 654116, + "pss_kb": 607192, + "private_dirty_kb": 593996, + "vmhwm_kb": 654116, + "utime_ticks": 562, + "stime_ticks": 28, + "cg_current": 5983830016, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 6317, + "msgs": 2000, + "events": 7151, + "pty_bytes": 62172, + "pty_writes": 31, + "rss_kb": 656244, + "pss_kb": 609320, + "private_dirty_kb": 596124, + "vmhwm_kb": 656244, + "utime_ticks": 588, + "stime_ticks": 28, + "cg_current": 5982822400, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "done", + "t_ms": 6320, + "msgs": 2000, + "events": 7151, + "pty_bytes": 62172, + "pty_writes": 31, + "rss_kb": 656244, + "pss_kb": 609320, + "private_dirty_kb": 596124, + "vmhwm_kb": 656244, + "utime_ticks": 588, + "stime_ticks": 28, + "cg_current": 5982822400, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 7067, + "msgs": 2000, + "events": null, + "pty_bytes": 66708, + "pty_writes": 35, + "rss_kb": 686948, + "pss_kb": 640024, + "private_dirty_kb": 626828, + "vmhwm_kb": 686948, + "utime_ticks": 662, + "stime_ticks": 30, + "cg_current": 5959647232, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 8074, + "msgs": 2000, + "events": null, + "pty_bytes": 66780, + "pty_writes": 36, + "rss_kb": 686956, + "pss_kb": 640032, + "private_dirty_kb": 626836, + "vmhwm_kb": 686956, + "utime_ticks": 663, + "stime_ticks": 30, + "cg_current": 5944725504, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "final", + "t_ms": 8123, + "msgs": 2000, + "events": 7151, + "pty_bytes": 66780, + "pty_writes": 36, + "rss_kb": 686956, + "pss_kb": 640032, + "private_dirty_kb": 626836, + "vmhwm_kb": 686956, + "utime_ticks": 663, + "stime_ticks": 30, + "cg_current": 5945589760, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + } + ], + "events": [ + { + "kind": "rpc", + "method": "session.create", + "t_ms": 177 + }, + { + "kind": "rpc", + "method": "startup.catalog", + "t_ms": 177 + }, + { + "kind": "rpc", + "method": "model.options", + "t_ms": 202 + } + ], + "summary": { + "result": "completed", + "cap_hit": false, + "cap_hit_basis": null, + "at_messages": null, + "exit": { + "exitCode": 0, + "signal": 0, + "t": 9039 + }, + "stream_done": true, + "msgs_streamed": 2000, + "events_streamed": 7151, + "pty_bytes_total": 71875, + "pty_data_callbacks": 40, + "first_byte_ms": 145, + "session_create_ms": 177, + "stream_start_ms": 1694, + "vmhwm_kb": 686956, + "cg_peak": 7893282816, + "drain_max_loop_lag_ms": 10, + "drain_lag_violations": 0, + "drain_ok": true, + "digest": null + } +} \ No newline at end of file diff --git a/bench/results/2026-06-12T0424-f0ec24a-mem2000-opentui-otui-uncapped-r0.json b/bench/results/2026-06-12T0424-f0ec24a-mem2000-opentui-otui-uncapped-r0.json new file mode 100644 index 000000000000..17a7b0435bd8 --- /dev/null +++ b/bench/results/2026-06-12T0424-f0ec24a-mem2000-opentui-otui-uncapped-r0.json @@ -0,0 +1,594 @@ +{ + "meta": { + "cell": "mem2000", + "ui": "opentui", + "config": "otui-uncapped", + "mode": "mem", + "rep": 0, + "run_id": "mqaf9qba-ewsf", + "utc": "2026-06-12T04:24:20.854Z", + "sha": "f0ec24ad5", + "node": "/home/daimon/.local/share/fnm/node-versions/v26.3.0/installation/bin/node", + "node_version": "v26.3.0", + "pty": { + "cols": 120, + "rows": 40, + "term": "xterm-256color" + }, + "heap_mb": 8192, + "memory_max": "2G", + "container_cap": false, + "container_memory": null, + "opentui_cap": 100000, + "fixture": { + "path": "/home/daimon/github/worktrees/hermes-agent/quiet-quill/hermes-agent/bench/.cache/fixture-2000.ndjson", + "msgs": 2000, + "sha256": "645b9ee4fdaccee45172fcec8af4a0b01a5f9aeca56ce45d8e84c4276472f99c" + }, + "sample_every": 100, + "mode_params": {}, + "ui_pid": 170071, + "gw_pid": 170080, + "cgroup": "/sys/fs/cgroup/user.slice/user-1001.slice/session-7349.scope", + "load_avg_at_start": [ + 0.65, + 0.9, + 1.38 + ], + "instrumented": false + }, + "samples": [ + { + "kind": "periodic", + "t_ms": 26, + "msgs": null, + "events": null, + "pty_bytes": 0, + "pty_writes": 0, + "rss_kb": 35020, + "pss_kb": 14276, + "private_dirty_kb": 7704, + "vmhwm_kb": 35152, + "utime_ticks": 0, + "stime_ticks": 0, + "cg_current": 5950107648, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 1034, + "msgs": null, + "events": null, + "pty_bytes": 28909, + "pty_writes": 12, + "rss_kb": 104312, + "pss_kb": 59828, + "private_dirty_kb": 47852, + "vmhwm_kb": 106556, + "utime_ticks": 18, + "stime_ticks": 3, + "cg_current": 5950238720, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1712, + "msgs": 100, + "events": 355, + "pty_bytes": 31409, + "pty_writes": 14, + "rss_kb": 111620, + "pss_kb": 67014, + "private_dirty_kb": 55036, + "vmhwm_kb": 111736, + "utime_ticks": 23, + "stime_ticks": 3, + "cg_current": 5950959616, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1713, + "msgs": 200, + "events": 738, + "pty_bytes": 31409, + "pty_writes": 14, + "rss_kb": 111884, + "pss_kb": 67278, + "private_dirty_kb": 55300, + "vmhwm_kb": 111980, + "utime_ticks": 23, + "stime_ticks": 3, + "cg_current": 5950959616, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1714, + "msgs": 300, + "events": 1051, + "pty_bytes": 31409, + "pty_writes": 14, + "rss_kb": 112096, + "pss_kb": 67490, + "private_dirty_kb": 55512, + "vmhwm_kb": 112180, + "utime_ticks": 23, + "stime_ticks": 3, + "cg_current": 5950734336, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1991, + "msgs": 400, + "events": 1432, + "pty_bytes": 32746, + "pty_writes": 15, + "rss_kb": 198544, + "pss_kb": 151903, + "private_dirty_kb": 138840, + "vmhwm_kb": 198556, + "utime_ticks": 67, + "stime_ticks": 7, + "cg_current": 5950930944, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 2040, + "msgs": null, + "events": null, + "pty_bytes": 32746, + "pty_writes": 15, + "rss_kb": 213612, + "pss_kb": 166971, + "private_dirty_kb": 153908, + "vmhwm_kb": 213620, + "utime_ticks": 74, + "stime_ticks": 8, + "cg_current": 5950930944, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2217, + "msgs": 501, + "events": 1792, + "pty_bytes": 36888, + "pty_writes": 17, + "rss_kb": 236192, + "pss_kb": 189448, + "private_dirty_kb": 176308, + "vmhwm_kb": 236244, + "utime_ticks": 96, + "stime_ticks": 9, + "cg_current": 5955866624, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2416, + "msgs": 601, + "events": 2154, + "pty_bytes": 41430, + "pty_writes": 20, + "rss_kb": 276612, + "pss_kb": 229795, + "private_dirty_kb": 216604, + "vmhwm_kb": 276624, + "utime_ticks": 127, + "stime_ticks": 11, + "cg_current": 5965406208, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2616, + "msgs": 701, + "events": 2496, + "pty_bytes": 42632, + "pty_writes": 21, + "rss_kb": 347020, + "pss_kb": 300087, + "private_dirty_kb": 286888, + "vmhwm_kb": 361648, + "utime_ticks": 167, + "stime_ticks": 14, + "cg_current": 5960589312, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2893, + "msgs": 801, + "events": 2857, + "pty_bytes": 45204, + "pty_writes": 23, + "rss_kb": 377020, + "pss_kb": 330087, + "private_dirty_kb": 316888, + "vmhwm_kb": 377020, + "utime_ticks": 200, + "stime_ticks": 15, + "cg_current": 5960548352, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 3043, + "msgs": null, + "events": null, + "pty_bytes": 46835, + "pty_writes": 24, + "rss_kb": 403704, + "pss_kb": 356768, + "private_dirty_kb": 343572, + "vmhwm_kb": 403784, + "utime_ticks": 216, + "stime_ticks": 17, + "cg_current": 5960396800, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3193, + "msgs": 901, + "events": 3245, + "pty_bytes": 48189, + "pty_writes": 25, + "rss_kb": 407960, + "pss_kb": 361024, + "private_dirty_kb": 347828, + "vmhwm_kb": 407960, + "utime_ticks": 232, + "stime_ticks": 17, + "cg_current": 5960396800, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3568, + "msgs": 1001, + "events": 3588, + "pty_bytes": 53177, + "pty_writes": 28, + "rss_kb": 439108, + "pss_kb": 392172, + "private_dirty_kb": 378976, + "vmhwm_kb": 439108, + "utime_ticks": 276, + "stime_ticks": 19, + "cg_current": 5960798208, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3572, + "msgs": 1101, + "events": 3928, + "pty_bytes": 53177, + "pty_writes": 28, + "rss_kb": 439872, + "pss_kb": 392936, + "private_dirty_kb": 379740, + "vmhwm_kb": 439876, + "utime_ticks": 277, + "stime_ticks": 19, + "cg_current": 5960798208, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3575, + "msgs": 1201, + "events": 4298, + "pty_bytes": 53177, + "pty_writes": 28, + "rss_kb": 439880, + "pss_kb": 392944, + "private_dirty_kb": 379748, + "vmhwm_kb": 439880, + "utime_ticks": 277, + "stime_ticks": 19, + "cg_current": 5960798208, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3577, + "msgs": 1300, + "events": 4659, + "pty_bytes": 53177, + "pty_writes": 28, + "rss_kb": 439884, + "pss_kb": 392948, + "private_dirty_kb": 379752, + "vmhwm_kb": 439888, + "utime_ticks": 278, + "stime_ticks": 19, + "cg_current": 5961322496, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3579, + "msgs": 1400, + "events": 5011, + "pty_bytes": 53177, + "pty_writes": 28, + "rss_kb": 439908, + "pss_kb": 392972, + "private_dirty_kb": 379776, + "vmhwm_kb": 439908, + "utime_ticks": 279, + "stime_ticks": 19, + "cg_current": 5961322496, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3581, + "msgs": 1500, + "events": 5384, + "pty_bytes": 53177, + "pty_writes": 28, + "rss_kb": 440100, + "pss_kb": 393164, + "private_dirty_kb": 379968, + "vmhwm_kb": 440128, + "utime_ticks": 279, + "stime_ticks": 19, + "cg_current": 5961322496, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3584, + "msgs": 1600, + "events": 5730, + "pty_bytes": 53177, + "pty_writes": 28, + "rss_kb": 440320, + "pss_kb": 393384, + "private_dirty_kb": 380188, + "vmhwm_kb": 440368, + "utime_ticks": 280, + "stime_ticks": 19, + "cg_current": 5961097216, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3586, + "msgs": 1700, + "events": 6100, + "pty_bytes": 53177, + "pty_writes": 28, + "rss_kb": 440576, + "pss_kb": 393640, + "private_dirty_kb": 380444, + "vmhwm_kb": 440656, + "utime_ticks": 280, + "stime_ticks": 19, + "cg_current": 5961097216, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3588, + "msgs": 1800, + "events": 6455, + "pty_bytes": 53177, + "pty_writes": 28, + "rss_kb": 440800, + "pss_kb": 393864, + "private_dirty_kb": 380668, + "vmhwm_kb": 440888, + "utime_ticks": 280, + "stime_ticks": 19, + "cg_current": 5961097216, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 4047, + "msgs": null, + "events": null, + "pty_bytes": 53177, + "pty_writes": 28, + "rss_kb": 590428, + "pss_kb": 543492, + "private_dirty_kb": 530296, + "vmhwm_kb": 590784, + "utime_ticks": 362, + "stime_ticks": 24, + "cg_current": 5960552448, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 4423, + "msgs": 1900, + "events": 6838, + "pty_bytes": 54671, + "pty_writes": 29, + "rss_kb": 632240, + "pss_kb": 585304, + "private_dirty_kb": 572108, + "vmhwm_kb": 632296, + "utime_ticks": 399, + "stime_ticks": 25, + "cg_current": 5960572928, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 4826, + "msgs": 2000, + "events": 7151, + "pty_bytes": 55609, + "pty_writes": 30, + "rss_kb": 667328, + "pss_kb": 620392, + "private_dirty_kb": 607196, + "vmhwm_kb": 667348, + "utime_ticks": 441, + "stime_ticks": 28, + "cg_current": 5960556544, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "done", + "t_ms": 4830, + "msgs": 2000, + "events": 7151, + "pty_bytes": 55609, + "pty_writes": 30, + "rss_kb": 667564, + "pss_kb": 620628, + "private_dirty_kb": 607432, + "vmhwm_kb": 667572, + "utime_ticks": 441, + "stime_ticks": 28, + "cg_current": 5960556544, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 5054, + "msgs": 2000, + "events": null, + "pty_bytes": 55609, + "pty_writes": 30, + "rss_kb": 692220, + "pss_kb": 645284, + "private_dirty_kb": 632088, + "vmhwm_kb": 692220, + "utime_ticks": 464, + "stime_ticks": 31, + "cg_current": 5940076544, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 6060, + "msgs": 2000, + "events": null, + "pty_bytes": 63491, + "pty_writes": 36, + "rss_kb": 710296, + "pss_kb": 663360, + "private_dirty_kb": 650164, + "vmhwm_kb": 710296, + "utime_ticks": 548, + "stime_ticks": 32, + "cg_current": 5940490240, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "final", + "t_ms": 6700, + "msgs": 2000, + "events": 7151, + "pty_bytes": 63491, + "pty_writes": 36, + "rss_kb": 710296, + "pss_kb": 663360, + "private_dirty_kb": 650164, + "vmhwm_kb": 710296, + "utime_ticks": 548, + "stime_ticks": 32, + "cg_current": 5940080640, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 7066, + "msgs": 2000, + "events": null, + "pty_bytes": 68466, + "pty_writes": 38, + "rss_kb": 673924, + "pss_kb": 626988, + "private_dirty_kb": 613792, + "vmhwm_kb": 709544, + "utime_ticks": 574, + "stime_ticks": 36, + "cg_current": 5940109312, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + } + ], + "events": [ + { + "kind": "rpc", + "method": "session.create", + "t_ms": 202 + }, + { + "kind": "rpc", + "method": "startup.catalog", + "t_ms": 202 + }, + { + "kind": "rpc", + "method": "model.options", + "t_ms": 202 + } + ], + "summary": { + "result": "completed", + "cap_hit": false, + "cap_hit_basis": null, + "at_messages": null, + "exit": { + "exitCode": 0, + "signal": 0, + "t": 7613 + }, + "stream_done": true, + "msgs_streamed": 2000, + "events_streamed": 7151, + "pty_bytes_total": 68586, + "pty_data_callbacks": 40, + "first_byte_ms": 146, + "session_create_ms": 202, + "stream_start_ms": 1686, + "vmhwm_kb": 709544, + "cg_peak": 7893282816, + "drain_max_loop_lag_ms": 19, + "drain_lag_violations": 1, + "drain_ok": false, + "digest": null + } +} \ No newline at end of file diff --git a/bench/results/2026-06-12T0425-f0ec24a-scroll2000-ink-ink-r0.json b/bench/results/2026-06-12T0425-f0ec24a-scroll2000-ink-ink-r0.json new file mode 100644 index 000000000000..471ae60b7046 --- /dev/null +++ b/bench/results/2026-06-12T0425-f0ec24a-scroll2000-ink-ink-r0.json @@ -0,0 +1,1668 @@ +{ + "meta": { + "cell": "scroll2000", + "ui": "ink", + "config": "ink", + "mode": "scroll", + "rep": 0, + "run_id": "mqafbfz6-m0b0", + "utc": "2026-06-12T04:25:40.770Z", + "sha": "f0ec24ad5", + "node": "/home/daimon/.local/share/fnm/node-versions/v26.3.0/installation/bin/node", + "node_version": "v26.3.0", + "pty": { + "cols": 120, + "rows": 40, + "term": "xterm-256color" + }, + "heap_mb": 8192, + "memory_max": "2G", + "container_cap": false, + "container_memory": null, + "opentui_cap": null, + "fixture": { + "path": "/home/daimon/github/worktrees/hermes-agent/quiet-quill/hermes-agent/bench/.cache/fixture-2000.ndjson", + "msgs": 2000, + "sha256": "645b9ee4fdaccee45172fcec8af4a0b01a5f9aeca56ce45d8e84c4276472f99c" + }, + "sample_every": 100, + "mode_params": { + "hz": 30, + "seconds": 15 + }, + "ui_pid": 172635, + "gw_pid": 172644, + "cgroup": "/sys/fs/cgroup/user.slice/user-1001.slice/session-7349.scope", + "load_avg_at_start": [ + 0.5, + 0.76, + 1.27 + ], + "instrumented": false + }, + "samples": [ + { + "kind": "periodic", + "t_ms": 26, + "msgs": null, + "events": null, + "pty_bytes": 0, + "pty_writes": 0, + "rss_kb": 14572, + "pss_kb": 4101, + "private_dirty_kb": 796, + "vmhwm_kb": 15532, + "utime_ticks": 0, + "stime_ticks": 0, + "cg_current": 5855555584, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 1031, + "msgs": null, + "events": null, + "pty_bytes": 6672, + "pty_writes": 11, + "rss_kb": 109916, + "pss_kb": 67509, + "private_dirty_kb": 51240, + "vmhwm_kb": 109916, + "utime_ticks": 25, + "stime_ticks": 3, + "cg_current": 5858754560, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1764, + "msgs": 100, + "events": 355, + "pty_bytes": 10750, + "pty_writes": 14, + "rss_kb": 121272, + "pss_kb": 78809, + "private_dirty_kb": 62532, + "vmhwm_kb": 121328, + "utime_ticks": 29, + "stime_ticks": 3, + "cg_current": 5857685504, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1842, + "msgs": 200, + "events": 738, + "pty_bytes": 17848, + "pty_writes": 16, + "rss_kb": 154784, + "pss_kb": 112041, + "private_dirty_kb": 95004, + "vmhwm_kb": 154804, + "utime_ticks": 43, + "stime_ticks": 5, + "cg_current": 5857423360, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1866, + "msgs": 300, + "events": 1051, + "pty_bytes": 21774, + "pty_writes": 18, + "rss_kb": 170284, + "pss_kb": 127493, + "private_dirty_kb": 110440, + "vmhwm_kb": 170296, + "utime_ticks": 49, + "stime_ticks": 5, + "cg_current": 5857423360, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1943, + "msgs": 400, + "events": 1432, + "pty_bytes": 29782, + "pty_writes": 20, + "rss_kb": 179156, + "pss_kb": 136365, + "private_dirty_kb": 119312, + "vmhwm_kb": 186992, + "utime_ticks": 62, + "stime_ticks": 6, + "cg_current": 5857177600, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1968, + "msgs": 501, + "events": 1792, + "pty_bytes": 37066, + "pty_writes": 22, + "rss_kb": 179260, + "pss_kb": 136469, + "private_dirty_kb": 119416, + "vmhwm_kb": 186992, + "utime_ticks": 65, + "stime_ticks": 6, + "cg_current": 5857165312, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2018, + "msgs": 601, + "events": 2154, + "pty_bytes": 44642, + "pty_writes": 24, + "rss_kb": 187496, + "pss_kb": 144695, + "private_dirty_kb": 127652, + "vmhwm_kb": 187532, + "utime_ticks": 74, + "stime_ticks": 6, + "cg_current": 5857394688, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2043, + "msgs": 701, + "events": 2496, + "pty_bytes": 48161, + "pty_writes": 25, + "rss_kb": 189012, + "pss_kb": 146211, + "private_dirty_kb": 129168, + "vmhwm_kb": 189032, + "utime_ticks": 78, + "stime_ticks": 6, + "cg_current": 5857374208, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 2045, + "msgs": null, + "events": null, + "pty_bytes": 48161, + "pty_writes": 25, + "rss_kb": 189124, + "pss_kb": 146323, + "private_dirty_kb": 129280, + "vmhwm_kb": 189316, + "utime_ticks": 78, + "stime_ticks": 6, + "cg_current": 5857374208, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2093, + "msgs": 801, + "events": 2857, + "pty_bytes": 58638, + "pty_writes": 28, + "rss_kb": 195456, + "pss_kb": 152652, + "private_dirty_kb": 135612, + "vmhwm_kb": 195468, + "utime_ticks": 86, + "stime_ticks": 6, + "cg_current": 5857714176, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2118, + "msgs": 901, + "events": 3245, + "pty_bytes": 62579, + "pty_writes": 29, + "rss_kb": 197632, + "pss_kb": 154828, + "private_dirty_kb": 137788, + "vmhwm_kb": 198424, + "utime_ticks": 90, + "stime_ticks": 7, + "cg_current": 5857464320, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2167, + "msgs": 1001, + "events": 3588, + "pty_bytes": 69577, + "pty_writes": 31, + "rss_kb": 202100, + "pss_kb": 159296, + "private_dirty_kb": 142256, + "vmhwm_kb": 202616, + "utime_ticks": 96, + "stime_ticks": 7, + "cg_current": 5857382400, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2193, + "msgs": 1101, + "events": 3928, + "pty_bytes": 73516, + "pty_writes": 32, + "rss_kb": 204872, + "pss_kb": 162068, + "private_dirty_kb": 145028, + "vmhwm_kb": 204896, + "utime_ticks": 99, + "stime_ticks": 7, + "cg_current": 5857300480, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2243, + "msgs": 1201, + "events": 4298, + "pty_bytes": 81034, + "pty_writes": 34, + "rss_kb": 209432, + "pss_kb": 166628, + "private_dirty_kb": 149588, + "vmhwm_kb": 209444, + "utime_ticks": 106, + "stime_ticks": 7, + "cg_current": 5857300480, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2393, + "msgs": 1300, + "events": 4659, + "pty_bytes": 88363, + "pty_writes": 36, + "rss_kb": 216952, + "pss_kb": 174148, + "private_dirty_kb": 157108, + "vmhwm_kb": 217080, + "utime_ticks": 123, + "stime_ticks": 8, + "cg_current": 5857509376, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2417, + "msgs": 1400, + "events": 5011, + "pty_bytes": 94172, + "pty_writes": 38, + "rss_kb": 219492, + "pss_kb": 176688, + "private_dirty_kb": 159648, + "vmhwm_kb": 219560, + "utime_ticks": 127, + "stime_ticks": 8, + "cg_current": 5857517568, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2443, + "msgs": 1500, + "events": 5384, + "pty_bytes": 97003, + "pty_writes": 39, + "rss_kb": 222496, + "pss_kb": 179492, + "private_dirty_kb": 162652, + "vmhwm_kb": 222500, + "utime_ticks": 130, + "stime_ticks": 8, + "cg_current": 5857857536, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2620, + "msgs": 1600, + "events": 5730, + "pty_bytes": 103098, + "pty_writes": 42, + "rss_kb": 231720, + "pss_kb": 188716, + "private_dirty_kb": 171876, + "vmhwm_kb": 231776, + "utime_ticks": 150, + "stime_ticks": 8, + "cg_current": 5858414592, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2644, + "msgs": 1700, + "events": 6100, + "pty_bytes": 110827, + "pty_writes": 46, + "rss_kb": 234860, + "pss_kb": 191856, + "private_dirty_kb": 175016, + "vmhwm_kb": 234864, + "utime_ticks": 153, + "stime_ticks": 8, + "cg_current": 5857869824, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2669, + "msgs": 1800, + "events": 6455, + "pty_bytes": 110876, + "pty_writes": 47, + "rss_kb": 237300, + "pss_kb": 194296, + "private_dirty_kb": 177456, + "vmhwm_kb": 237552, + "utime_ticks": 157, + "stime_ticks": 8, + "cg_current": 5858115584, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2693, + "msgs": 1900, + "events": 6838, + "pty_bytes": 116996, + "pty_writes": 50, + "rss_kb": 239104, + "pss_kb": 196100, + "private_dirty_kb": 179260, + "vmhwm_kb": 239108, + "utime_ticks": 160, + "stime_ticks": 9, + "cg_current": 5858037760, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2719, + "msgs": 2000, + "events": 7151, + "pty_bytes": 119967, + "pty_writes": 51, + "rss_kb": 242716, + "pss_kb": 199686, + "private_dirty_kb": 182872, + "vmhwm_kb": 242716, + "utime_ticks": 164, + "stime_ticks": 9, + "cg_current": 5858062336, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "done", + "t_ms": 2721, + "msgs": 2000, + "events": 7151, + "pty_bytes": 119967, + "pty_writes": 51, + "rss_kb": 242716, + "pss_kb": 199712, + "private_dirty_kb": 182872, + "vmhwm_kb": 242716, + "utime_ticks": 164, + "stime_ticks": 9, + "cg_current": 5858062336, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 3046, + "msgs": 2000, + "events": null, + "pty_bytes": 127827, + "pty_writes": 54, + "rss_kb": 245484, + "pss_kb": 202480, + "private_dirty_kb": 185640, + "vmhwm_kb": 245484, + "utime_ticks": 181, + "stime_ticks": 9, + "cg_current": 5873971200, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 4052, + "msgs": 2000, + "events": null, + "pty_bytes": 127917, + "pty_writes": 56, + "rss_kb": 245508, + "pss_kb": 202504, + "private_dirty_kb": 185664, + "vmhwm_kb": 245508, + "utime_ticks": 181, + "stime_ticks": 9, + "cg_current": 5867372544, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 5062, + "msgs": 2000, + "events": null, + "pty_bytes": 128007, + "pty_writes": 58, + "rss_kb": 245512, + "pss_kb": 202508, + "private_dirty_kb": 185668, + "vmhwm_kb": 245512, + "utime_ticks": 181, + "stime_ticks": 9, + "cg_current": 5867515904, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 6065, + "msgs": 2000, + "events": null, + "pty_bytes": 128097, + "pty_writes": 60, + "rss_kb": 245520, + "pss_kb": 202516, + "private_dirty_kb": 185676, + "vmhwm_kb": 245520, + "utime_ticks": 181, + "stime_ticks": 9, + "cg_current": 5868658688, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 7069, + "msgs": 2000, + "events": null, + "pty_bytes": 128187, + "pty_writes": 62, + "rss_kb": 245520, + "pss_kb": 202516, + "private_dirty_kb": 185676, + "vmhwm_kb": 245520, + "utime_ticks": 182, + "stime_ticks": 9, + "cg_current": 5868163072, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 8075, + "msgs": 2000, + "events": null, + "pty_bytes": 128277, + "pty_writes": 64, + "rss_kb": 245528, + "pss_kb": 202524, + "private_dirty_kb": 185684, + "vmhwm_kb": 245528, + "utime_ticks": 182, + "stime_ticks": 9, + "cg_current": 5868367872, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 9084, + "msgs": 2000, + "events": null, + "pty_bytes": 128367, + "pty_writes": 66, + "rss_kb": 245532, + "pss_kb": 202528, + "private_dirty_kb": 185688, + "vmhwm_kb": 245532, + "utime_ticks": 182, + "stime_ticks": 9, + "cg_current": 5855997952, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 10091, + "msgs": 2000, + "events": null, + "pty_bytes": 128457, + "pty_writes": 68, + "rss_kb": 245532, + "pss_kb": 202528, + "private_dirty_kb": 185688, + "vmhwm_kb": 245532, + "utime_ticks": 182, + "stime_ticks": 9, + "cg_current": 5855838208, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 11096, + "msgs": 2000, + "events": null, + "pty_bytes": 128577, + "pty_writes": 70, + "rss_kb": 245540, + "pss_kb": 202536, + "private_dirty_kb": 185696, + "vmhwm_kb": 245540, + "utime_ticks": 182, + "stime_ticks": 9, + "cg_current": 5855670272, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 12107, + "msgs": 2000, + "events": null, + "pty_bytes": 128667, + "pty_writes": 72, + "rss_kb": 245548, + "pss_kb": 202544, + "private_dirty_kb": 185704, + "vmhwm_kb": 245548, + "utime_ticks": 183, + "stime_ticks": 9, + "cg_current": 5855883264, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 13111, + "msgs": 2000, + "events": null, + "pty_bytes": 128776, + "pty_writes": 74, + "rss_kb": 245552, + "pss_kb": 202548, + "private_dirty_kb": 185708, + "vmhwm_kb": 245552, + "utime_ticks": 183, + "stime_ticks": 9, + "cg_current": 5860446208, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 14118, + "msgs": 2000, + "events": null, + "pty_bytes": 128866, + "pty_writes": 76, + "rss_kb": 245556, + "pss_kb": 202552, + "private_dirty_kb": 185712, + "vmhwm_kb": 245556, + "utime_ticks": 183, + "stime_ticks": 9, + "cg_current": 5865897984, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 15124, + "msgs": 2000, + "events": null, + "pty_bytes": 128956, + "pty_writes": 78, + "rss_kb": 245560, + "pss_kb": 202556, + "private_dirty_kb": 185716, + "vmhwm_kb": 245560, + "utime_ticks": 183, + "stime_ticks": 9, + "cg_current": 5865623552, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 16134, + "msgs": 2000, + "events": null, + "pty_bytes": 129046, + "pty_writes": 80, + "rss_kb": 239288, + "pss_kb": 196284, + "private_dirty_kb": 179444, + "vmhwm_kb": 245592, + "utime_ticks": 186, + "stime_ticks": 9, + "cg_current": 5865070592, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 17139, + "msgs": 2000, + "events": null, + "pty_bytes": 129136, + "pty_writes": 82, + "rss_kb": 239288, + "pss_kb": 196284, + "private_dirty_kb": 179444, + "vmhwm_kb": 245592, + "utime_ticks": 186, + "stime_ticks": 9, + "cg_current": 5864947712, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "final", + "t_ms": 17775, + "msgs": 2000, + "events": 7151, + "pty_bytes": 129181, + "pty_writes": 83, + "rss_kb": 239288, + "pss_kb": 196284, + "private_dirty_kb": 179444, + "vmhwm_kb": 245592, + "utime_ticks": 186, + "stime_ticks": 9, + "cg_current": 5865869312, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 18143, + "msgs": 2000, + "events": null, + "pty_bytes": 174935, + "pty_writes": 103, + "rss_kb": 240784, + "pss_kb": 197780, + "private_dirty_kb": 180940, + "vmhwm_kb": 245592, + "utime_ticks": 191, + "stime_ticks": 9, + "cg_current": 5865365504, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 19146, + "msgs": 2000, + "events": null, + "pty_bytes": 284042, + "pty_writes": 149, + "rss_kb": 243548, + "pss_kb": 200544, + "private_dirty_kb": 183708, + "vmhwm_kb": 245592, + "utime_ticks": 228, + "stime_ticks": 10, + "cg_current": 5865459712, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 20157, + "msgs": 2000, + "events": null, + "pty_bytes": 425992, + "pty_writes": 194, + "rss_kb": 243124, + "pss_kb": 200120, + "private_dirty_kb": 183288, + "vmhwm_kb": 245592, + "utime_ticks": 258, + "stime_ticks": 11, + "cg_current": 5866332160, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 21164, + "msgs": 2000, + "events": null, + "pty_bytes": 541638, + "pty_writes": 231, + "rss_kb": 240108, + "pss_kb": 197104, + "private_dirty_kb": 180272, + "vmhwm_kb": 251920, + "utime_ticks": 300, + "stime_ticks": 11, + "cg_current": 5866450944, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 22172, + "msgs": 2000, + "events": null, + "pty_bytes": 725237, + "pty_writes": 300, + "rss_kb": 240488, + "pss_kb": 197484, + "private_dirty_kb": 180656, + "vmhwm_kb": 251920, + "utime_ticks": 330, + "stime_ticks": 11, + "cg_current": 5866905600, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 23179, + "msgs": 2000, + "events": null, + "pty_bytes": 932144, + "pty_writes": 374, + "rss_kb": 240012, + "pss_kb": 197008, + "private_dirty_kb": 180180, + "vmhwm_kb": 251920, + "utime_ticks": 357, + "stime_ticks": 12, + "cg_current": 5867098112, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 24184, + "msgs": 2000, + "events": null, + "pty_bytes": 1033080, + "pty_writes": 407, + "rss_kb": 244224, + "pss_kb": 201220, + "private_dirty_kb": 184392, + "vmhwm_kb": 251920, + "utime_ticks": 401, + "stime_ticks": 12, + "cg_current": 5867282432, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 25191, + "msgs": 2000, + "events": null, + "pty_bytes": 1153018, + "pty_writes": 452, + "rss_kb": 251832, + "pss_kb": 208828, + "private_dirty_kb": 192000, + "vmhwm_kb": 251920, + "utime_ticks": 436, + "stime_ticks": 13, + "cg_current": 5867417600, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 26201, + "msgs": 2000, + "events": null, + "pty_bytes": 1252104, + "pty_writes": 490, + "rss_kb": 248024, + "pss_kb": 205020, + "private_dirty_kb": 188192, + "vmhwm_kb": 251920, + "utime_ticks": 460, + "stime_ticks": 13, + "cg_current": 5868191744, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 27206, + "msgs": 2000, + "events": null, + "pty_bytes": 1353007, + "pty_writes": 527, + "rss_kb": 252232, + "pss_kb": 209202, + "private_dirty_kb": 192400, + "vmhwm_kb": 252232, + "utime_ticks": 488, + "stime_ticks": 13, + "cg_current": 5867999232, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 28214, + "msgs": 2000, + "events": null, + "pty_bytes": 1466781, + "pty_writes": 567, + "rss_kb": 201004, + "pss_kb": 158000, + "private_dirty_kb": 141172, + "vmhwm_kb": 251920, + "utime_ticks": 520, + "stime_ticks": 14, + "cg_current": 5868371968, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 29219, + "msgs": 2000, + "events": null, + "pty_bytes": 1596394, + "pty_writes": 605, + "rss_kb": 204068, + "pss_kb": 161064, + "private_dirty_kb": 144236, + "vmhwm_kb": 251920, + "utime_ticks": 546, + "stime_ticks": 15, + "cg_current": 5868523520, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 30221, + "msgs": 2000, + "events": null, + "pty_bytes": 1732787, + "pty_writes": 645, + "rss_kb": 204912, + "pss_kb": 161908, + "private_dirty_kb": 145080, + "vmhwm_kb": 251920, + "utime_ticks": 568, + "stime_ticks": 15, + "cg_current": 5868371968, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 31226, + "msgs": 2000, + "events": null, + "pty_bytes": 1835717, + "pty_writes": 677, + "rss_kb": 210648, + "pss_kb": 167611, + "private_dirty_kb": 150756, + "vmhwm_kb": 251920, + "utime_ticks": 606, + "stime_ticks": 15, + "cg_current": 5870997504, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 32230, + "msgs": 2000, + "events": null, + "pty_bytes": 1939471, + "pty_writes": 719, + "rss_kb": 206008, + "pss_kb": 162971, + "private_dirty_kb": 146116, + "vmhwm_kb": 251920, + "utime_ticks": 637, + "stime_ticks": 16, + "cg_current": 5871153152, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 33235, + "msgs": 2000, + "events": null, + "pty_bytes": 1983220, + "pty_writes": 734, + "rss_kb": 208172, + "pss_kb": 165135, + "private_dirty_kb": 148280, + "vmhwm_kb": 251920, + "utime_ticks": 654, + "stime_ticks": 16, + "cg_current": 5863510016, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + } + ], + "events": [ + { + "kind": "rpc", + "method": "config.get", + "t_ms": 228 + }, + { + "kind": "rpc", + "method": "commands.catalog", + "t_ms": 228 + }, + { + "kind": "rpc", + "method": "setup.status", + "t_ms": 253 + }, + { + "kind": "rpc", + "method": "session.create", + "t_ms": 253 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 253 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 253 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 253 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 1763 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 3271 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 4782 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 5259 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 6263 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 7770 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 9282 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 10266 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 10767 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 12282 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 13788 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 15251 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 15276 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 16784 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 18393 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 19879 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 20281 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 21390 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 22900 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 24384 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 25291 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 25896 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 27431 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 28915 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 30294 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 30469 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 31977 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 33460 + } + ], + "summary": { + "result": "completed", + "cap_hit": false, + "cap_hit_basis": null, + "at_messages": null, + "exit": { + "exitCode": 0, + "signal": 0, + "t": 33490 + }, + "stream_done": true, + "msgs_streamed": 2000, + "events_streamed": 7151, + "pty_bytes_total": 1983563, + "pty_data_callbacks": 745, + "first_byte_ms": 121, + "session_create_ms": 253, + "stream_start_ms": 1763, + "vmhwm_kb": 251920, + "cg_peak": 7893282816, + "drain_max_loop_lag_ms": 4, + "drain_lag_violations": 0, + "drain_ok": true, + "digest": null, + "scroll_latencies_ms": [ + 2, + 3, + 2, + 2, + 1, + 2, + 1, + 2, + 2, + 2, + 1, + 3, + 2, + 1, + 2, + 100, + 67, + 34, + 0, + 1, + 1, + 1, + 2, + 3, + 1, + 2, + 1, + 2, + 2, + 2, + 2, + 104, + 71, + 37, + 3, + 1, + 1, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 1, + 2, + 2, + 1, + 100, + 66, + 34, + 0, + 1, + 1, + 2, + 2, + 2, + 2, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 2, + 1, + 1, + 1, + 3, + 1, + 2, + 101, + 67, + 35, + 1, + 1, + 1, + 1, + 1, + 2, + 1, + 1, + 1, + 1, + 1, + 2, + 2, + 2, + 94, + 60, + 27, + 12, + 2, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 1, + 1, + 2, + 2, + 2, + 2, + 3, + 1, + 2, + 2, + 2, + 3, + 2, + 2, + 2, + 3, + 2, + 1, + 1, + 1, + 1, + 86, + 53, + 20, + 3, + 1, + 1, + 2, + 1, + 2, + 1, + 1, + 3, + 1, + 1, + 2, + 1, + 1, + 1, + 2, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 1, + 2, + 2, + 2, + 3, + 89, + 57, + 23, + 7, + 1, + 2, + 1, + 2, + 1, + 3, + 2, + 1, + 3, + 1, + 2, + 1, + 2, + 2, + 3, + 93, + 58, + 26, + 10, + 18, + 110, + 77, + 43, + 10, + 2, + 3, + 2, + 1, + 1, + 2, + 2, + 1, + 2, + 2, + 2, + 1, + 2, + 2, + 2, + 66, + 31, + 15, + 1, + 1, + 1, + 2, + 2, + 4, + 2, + 8, + 1, + 2, + 1, + 1, + 73, + 39, + 6, + 1, + 35, + 2, + 2, + 1, + 2, + 2, + 1, + 2, + 1, + 2, + 3, + 1, + 1, + 3, + 1, + 1, + 74, + 41, + 7, + 1, + 1, + 5, + 1, + 1, + 1, + 2, + 2, + 1, + 2, + 1, + 2, + 2, + 73, + 41, + 8, + 2, + 2, + 1, + 2, + 1, + 1, + 1, + 1, + 1, + 2, + 1, + 1, + 73, + 40, + 7, + 2, + 5, + 1, + 1, + 2, + 1, + 2, + 1, + 1, + 1, + 2, + 2, + 67, + 34, + 1, + 1, + 2, + 1, + 1, + 2, + 1, + 1, + 1, + 1, + 2, + 2, + 1, + 72, + 38, + 4, + 1, + 7, + 1, + 2, + 1, + 2, + 2, + 2, + 2, + 2, + 2, + 4, + 1, + 2, + 1, + 1, + 61, + 28, + 12, + 1, + 1, + 1, + 1, + 1, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 1, + 2, + 1, + 1, + 73, + 40, + 7, + 2, + 1, + 1, + 2, + 1, + 2, + 1, + 2, + 110, + 76, + 43, + 9, + 1, + 1, + 2, + 2, + 1, + 2, + 1, + 2, + 1, + 6, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 1, + 1, + 2, + 1, + 76, + 43, + 10, + 1, + 2, + 116, + 83, + 49, + 17, + 18, + 2, + 1, + 1, + 1, + 1, + 2, + 1, + 1, + 118, + 84, + 52, + 18, + 2, + 1, + 1, + 2, + 2, + 2, + 2, + 2, + 2, + 1, + 1, + 1, + 2, + 16, + 3, + 73, + 40, + 6, + 1, + 1, + 2, + 1, + 2, + 1, + 1, + 1, + 111, + 79, + 46, + 12, + 1, + 1, + 1, + 1, + 1, + 2, + 4, + 2, + 1, + 2, + 1, + 1, + 118, + 85, + 51, + 18, + 1, + 1, + 2, + 1 + ], + "scroll": { + "events_sent": 450, + "responses": 450, + "cpu_ticks": 475 + }, + "frame_pacing": { + "gap_ms": 4, + "chunks": 651, + "frames": 500, + "duration_ms": 15187, + "fps_avg": 32.9, + "interframe_ms_p50": 32, + "interframe_ms_p95": 94.2999999999999, + "bytes_per_frame_p50": 3693.5, + "bytes_per_frame_p95": 6955.849999999987, + "coalesced_frames": 136 + } + } +} \ No newline at end of file diff --git a/bench/results/2026-06-12T0425-f0ec24a-scroll2000-opentui-otui-capped-r0.json b/bench/results/2026-06-12T0425-f0ec24a-scroll2000-opentui-otui-capped-r0.json new file mode 100644 index 000000000000..964bbae0d7de --- /dev/null +++ b/bench/results/2026-06-12T0425-f0ec24a-scroll2000-opentui-otui-capped-r0.json @@ -0,0 +1,1355 @@ +{ + "meta": { + "cell": "scroll2000", + "ui": "opentui", + "config": "otui-capped", + "mode": "scroll", + "rep": 0, + "run_id": "mqafapil-qwj9", + "utc": "2026-06-12T04:25:06.477Z", + "sha": "f0ec24ad5", + "node": "/home/daimon/.local/share/fnm/node-versions/v26.3.0/installation/bin/node", + "node_version": "v26.3.0", + "pty": { + "cols": 120, + "rows": 40, + "term": "xterm-256color" + }, + "heap_mb": 8192, + "memory_max": "2G", + "container_cap": false, + "container_memory": null, + "opentui_cap": 3000, + "fixture": { + "path": "/home/daimon/github/worktrees/hermes-agent/quiet-quill/hermes-agent/bench/.cache/fixture-2000.ndjson", + "msgs": 2000, + "sha256": "645b9ee4fdaccee45172fcec8af4a0b01a5f9aeca56ce45d8e84c4276472f99c" + }, + "sample_every": 100, + "mode_params": { + "hz": 30, + "seconds": 15 + }, + "ui_pid": 171481, + "gw_pid": 171494, + "cgroup": "/sys/fs/cgroup/user.slice/user-1001.slice/user@1001.service/app.slice/hermes-bench-mqafapil-qwj9.scope", + "load_avg_at_start": [ + 0.52, + 0.8, + 1.31 + ], + "instrumented": false + }, + "samples": [ + { + "kind": "periodic", + "t_ms": 53, + "msgs": null, + "events": null, + "pty_bytes": 0, + "pty_writes": 0, + "rss_kb": 58712, + "pss_kb": 29651, + "private_dirty_kb": 21192, + "vmhwm_kb": 58888, + "utime_ticks": 3, + "stime_ticks": 0, + "cg_current": 24002560, + "cg_peak": 24002560, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 1064, + "msgs": null, + "events": null, + "pty_bytes": 29160, + "pty_writes": 12, + "rss_kb": 105088, + "pss_kb": 61491, + "private_dirty_kb": 48544, + "vmhwm_kb": 107608, + "utime_ticks": 19, + "stime_ticks": 2, + "cg_current": 62365696, + "cg_peak": 66748416, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1720, + "msgs": 100, + "events": 355, + "pty_bytes": 31660, + "pty_writes": 14, + "rss_kb": 111148, + "pss_kb": 67425, + "private_dirty_kb": 54480, + "vmhwm_kb": 111164, + "utime_ticks": 24, + "stime_ticks": 3, + "cg_current": 76517376, + "cg_peak": 76517376, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1722, + "msgs": 200, + "events": 738, + "pty_bytes": 31660, + "pty_writes": 14, + "rss_kb": 111424, + "pss_kb": 67701, + "private_dirty_kb": 54756, + "vmhwm_kb": 111440, + "utime_ticks": 24, + "stime_ticks": 3, + "cg_current": 76779520, + "cg_peak": 76779520, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1722, + "msgs": 300, + "events": 1051, + "pty_bytes": 31660, + "pty_writes": 14, + "rss_kb": 111608, + "pss_kb": 67885, + "private_dirty_kb": 54940, + "vmhwm_kb": 111680, + "utime_ticks": 24, + "stime_ticks": 3, + "cg_current": 77041664, + "cg_peak": 77041664, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2049, + "msgs": 400, + "events": 1432, + "pty_bytes": 34291, + "pty_writes": 16, + "rss_kb": 205196, + "pss_kb": 159396, + "private_dirty_kb": 145228, + "vmhwm_kb": 205212, + "utime_ticks": 77, + "stime_ticks": 6, + "cg_current": 172511232, + "cg_peak": 172511232, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 2074, + "msgs": null, + "events": null, + "pty_bytes": 34291, + "pty_writes": 16, + "rss_kb": 209052, + "pss_kb": 163252, + "private_dirty_kb": 149084, + "vmhwm_kb": 209088, + "utime_ticks": 81, + "stime_ticks": 6, + "cg_current": 176594944, + "cg_peak": 176594944, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2257, + "msgs": 501, + "events": 1792, + "pty_bytes": 39009, + "pty_writes": 18, + "rss_kb": 272232, + "pss_kb": 226317, + "private_dirty_kb": 212016, + "vmhwm_kb": 272960, + "utime_ticks": 112, + "stime_ticks": 9, + "cg_current": 242814976, + "cg_peak": 242814976, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2452, + "msgs": 601, + "events": 2154, + "pty_bytes": 41245, + "pty_writes": 19, + "rss_kb": 288140, + "pss_kb": 242215, + "private_dirty_kb": 227924, + "vmhwm_kb": 308336, + "utime_ticks": 150, + "stime_ticks": 12, + "cg_current": 258904064, + "cg_peak": 280047616, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2678, + "msgs": 701, + "events": 2496, + "pty_bytes": 45365, + "pty_writes": 21, + "rss_kb": 316760, + "pss_kb": 270835, + "private_dirty_kb": 256544, + "vmhwm_kb": 316760, + "utime_ticks": 175, + "stime_ticks": 13, + "cg_current": 289058816, + "cg_peak": 289689600, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2930, + "msgs": 801, + "events": 2857, + "pty_bytes": 49948, + "pty_writes": 23, + "rss_kb": 346352, + "pss_kb": 300427, + "private_dirty_kb": 286136, + "vmhwm_kb": 346352, + "utime_ticks": 204, + "stime_ticks": 13, + "cg_current": 320061440, + "cg_peak": 320245760, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 3081, + "msgs": null, + "events": null, + "pty_bytes": 53003, + "pty_writes": 24, + "rss_kb": 370544, + "pss_kb": 324615, + "private_dirty_kb": 310328, + "vmhwm_kb": 370544, + "utime_ticks": 221, + "stime_ticks": 15, + "cg_current": 345227264, + "cg_peak": 345382912, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3233, + "msgs": 901, + "events": 3245, + "pty_bytes": 55073, + "pty_writes": 25, + "rss_kb": 377740, + "pss_kb": 331811, + "private_dirty_kb": 317524, + "vmhwm_kb": 377740, + "utime_ticks": 236, + "stime_ticks": 15, + "cg_current": 352735232, + "cg_peak": 352735232, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3334, + "msgs": 1001, + "events": 3588, + "pty_bytes": 56884, + "pty_writes": 26, + "rss_kb": 381656, + "pss_kb": 335727, + "private_dirty_kb": 321440, + "vmhwm_kb": 381712, + "utime_ticks": 248, + "stime_ticks": 15, + "cg_current": 356921344, + "cg_peak": 356921344, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3685, + "msgs": 1101, + "events": 3928, + "pty_bytes": 59244, + "pty_writes": 28, + "rss_kb": 412256, + "pss_kb": 366327, + "private_dirty_kb": 352040, + "vmhwm_kb": 412276, + "utime_ticks": 287, + "stime_ticks": 17, + "cg_current": 388780032, + "cg_peak": 388780032, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 4062, + "msgs": 1201, + "events": 4298, + "pty_bytes": 61253, + "pty_writes": 30, + "rss_kb": 440832, + "pss_kb": 394903, + "private_dirty_kb": 380616, + "vmhwm_kb": 440852, + "utime_ticks": 325, + "stime_ticks": 19, + "cg_current": 418684928, + "cg_peak": 418738176, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 4087, + "msgs": null, + "events": null, + "pty_bytes": 61253, + "pty_writes": 30, + "rss_kb": 443400, + "pss_kb": 397471, + "private_dirty_kb": 383184, + "vmhwm_kb": 443440, + "utime_ticks": 328, + "stime_ticks": 20, + "cg_current": 421376000, + "cg_peak": 421376000, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 4387, + "msgs": 1300, + "events": 4659, + "pty_bytes": 62505, + "pty_writes": 31, + "rss_kb": 470368, + "pss_kb": 424439, + "private_dirty_kb": 410152, + "vmhwm_kb": 470368, + "utime_ticks": 360, + "stime_ticks": 22, + "cg_current": 449314816, + "cg_peak": 449593344, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 4843, + "msgs": 1400, + "events": 5011, + "pty_bytes": 65778, + "pty_writes": 33, + "rss_kb": 499912, + "pss_kb": 453983, + "private_dirty_kb": 439696, + "vmhwm_kb": 499912, + "utime_ticks": 412, + "stime_ticks": 23, + "cg_current": 480239616, + "cg_peak": 480313344, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 5091, + "msgs": null, + "events": null, + "pty_bytes": 68109, + "pty_writes": 34, + "rss_kb": 519076, + "pss_kb": 473147, + "private_dirty_kb": 458860, + "vmhwm_kb": 519076, + "utime_ticks": 451, + "stime_ticks": 25, + "cg_current": 500330496, + "cg_peak": 500330496, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 5342, + "msgs": 1500, + "events": 5384, + "pty_bytes": 70046, + "pty_writes": 35, + "rss_kb": 524932, + "pss_kb": 479003, + "private_dirty_kb": 464716, + "vmhwm_kb": 525008, + "utime_ticks": 476, + "stime_ticks": 25, + "cg_current": 506470400, + "cg_peak": 506503168, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 5366, + "msgs": 1600, + "events": 5730, + "pty_bytes": 71256, + "pty_writes": 36, + "rss_kb": 526692, + "pss_kb": 480763, + "private_dirty_kb": 466476, + "vmhwm_kb": 526704, + "utime_ticks": 479, + "stime_ticks": 25, + "cg_current": 507949056, + "cg_peak": 507949056, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 5370, + "msgs": 1700, + "events": 6100, + "pty_bytes": 71256, + "pty_writes": 36, + "rss_kb": 526752, + "pss_kb": 480823, + "private_dirty_kb": 466536, + "vmhwm_kb": 526764, + "utime_ticks": 479, + "stime_ticks": 25, + "cg_current": 507949056, + "cg_peak": 507949056, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 5542, + "msgs": 1800, + "events": 6455, + "pty_bytes": 71256, + "pty_writes": 36, + "rss_kb": 583520, + "pss_kb": 537591, + "private_dirty_kb": 523304, + "vmhwm_kb": 583516, + "utime_ticks": 503, + "stime_ticks": 27, + "cg_current": 567980032, + "cg_peak": 568082432, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 5869, + "msgs": 1900, + "events": 6838, + "pty_bytes": 73821, + "pty_writes": 37, + "rss_kb": 609076, + "pss_kb": 563147, + "private_dirty_kb": 548860, + "vmhwm_kb": 609124, + "utime_ticks": 536, + "stime_ticks": 28, + "cg_current": 594206720, + "cg_peak": 594214912, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 6093, + "msgs": null, + "events": null, + "pty_bytes": 73821, + "pty_writes": 37, + "rss_kb": 647256, + "pss_kb": 601327, + "private_dirty_kb": 587040, + "vmhwm_kb": 647256, + "utime_ticks": 560, + "stime_ticks": 31, + "cg_current": 634138624, + "cg_peak": 634486784, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 6297, + "msgs": 2000, + "events": 7151, + "pty_bytes": 76536, + "pty_writes": 39, + "rss_kb": 650244, + "pss_kb": 604315, + "private_dirty_kb": 590028, + "vmhwm_kb": 650380, + "utime_ticks": 580, + "stime_ticks": 31, + "cg_current": 637161472, + "cg_peak": 637161472, + "cg_oom_kill": 0 + }, + { + "kind": "done", + "t_ms": 6301, + "msgs": 2000, + "events": 7151, + "pty_bytes": 76536, + "pty_writes": 39, + "rss_kb": 650684, + "pss_kb": 604755, + "private_dirty_kb": 590468, + "vmhwm_kb": 650804, + "utime_ticks": 580, + "stime_ticks": 31, + "cg_current": 637685760, + "cg_peak": 637685760, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 7102, + "msgs": 2000, + "events": null, + "pty_bytes": 80829, + "pty_writes": 43, + "rss_kb": 685224, + "pss_kb": 639295, + "private_dirty_kb": 625008, + "vmhwm_kb": 685224, + "utime_ticks": 629, + "stime_ticks": 33, + "cg_current": 673349632, + "cg_peak": 673783808, + "cg_oom_kill": 0 + }, + { + "kind": "final", + "t_ms": 7668, + "msgs": 2000, + "events": 7151, + "pty_bytes": 80829, + "pty_writes": 43, + "rss_kb": 685224, + "pss_kb": 639295, + "private_dirty_kb": 625008, + "vmhwm_kb": 685224, + "utime_ticks": 629, + "stime_ticks": 33, + "cg_current": 673349632, + "cg_peak": 673783808, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 8111, + "msgs": 2000, + "events": null, + "pty_bytes": 142070, + "pty_writes": 70, + "rss_kb": 684504, + "pss_kb": 638575, + "private_dirty_kb": 624288, + "vmhwm_kb": 684576, + "utime_ticks": 672, + "stime_ticks": 33, + "cg_current": 672587776, + "cg_peak": 674136064, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 9123, + "msgs": 2000, + "events": null, + "pty_bytes": 263712, + "pty_writes": 110, + "rss_kb": 684924, + "pss_kb": 638995, + "private_dirty_kb": 624708, + "vmhwm_kb": 684924, + "utime_ticks": 683, + "stime_ticks": 33, + "cg_current": 673107968, + "cg_peak": 674136064, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 10134, + "msgs": 2000, + "events": null, + "pty_bytes": 382069, + "pty_writes": 145, + "rss_kb": 685680, + "pss_kb": 639751, + "private_dirty_kb": 625464, + "vmhwm_kb": 685680, + "utime_ticks": 695, + "stime_ticks": 33, + "cg_current": 673792000, + "cg_peak": 674136064, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 11148, + "msgs": 2000, + "events": null, + "pty_bytes": 508162, + "pty_writes": 187, + "rss_kb": 685872, + "pss_kb": 639943, + "private_dirty_kb": 625656, + "vmhwm_kb": 685872, + "utime_ticks": 706, + "stime_ticks": 33, + "cg_current": 674078720, + "cg_peak": 674578432, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 12155, + "msgs": 2000, + "events": null, + "pty_bytes": 629436, + "pty_writes": 231, + "rss_kb": 686204, + "pss_kb": 640275, + "private_dirty_kb": 625988, + "vmhwm_kb": 686204, + "utime_ticks": 717, + "stime_ticks": 33, + "cg_current": 674332672, + "cg_peak": 674590720, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 13159, + "msgs": 2000, + "events": null, + "pty_bytes": 749331, + "pty_writes": 268, + "rss_kb": 686528, + "pss_kb": 640599, + "private_dirty_kb": 626312, + "vmhwm_kb": 686528, + "utime_ticks": 729, + "stime_ticks": 34, + "cg_current": 674664448, + "cg_peak": 675119104, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 14169, + "msgs": 2000, + "events": null, + "pty_bytes": 867529, + "pty_writes": 305, + "rss_kb": 686860, + "pss_kb": 640931, + "private_dirty_kb": 626644, + "vmhwm_kb": 686860, + "utime_ticks": 741, + "stime_ticks": 34, + "cg_current": 674988032, + "cg_peak": 675692544, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 15179, + "msgs": 2000, + "events": null, + "pty_bytes": 991656, + "pty_writes": 357, + "rss_kb": 687024, + "pss_kb": 641095, + "private_dirty_kb": 626808, + "vmhwm_kb": 687024, + "utime_ticks": 751, + "stime_ticks": 34, + "cg_current": 675270656, + "cg_peak": 675692544, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 16189, + "msgs": 2000, + "events": null, + "pty_bytes": 1123981, + "pty_writes": 418, + "rss_kb": 687048, + "pss_kb": 641119, + "private_dirty_kb": 626832, + "vmhwm_kb": 687048, + "utime_ticks": 758, + "stime_ticks": 34, + "cg_current": 675434496, + "cg_peak": 675692544, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 17201, + "msgs": 2000, + "events": null, + "pty_bytes": 1248977, + "pty_writes": 468, + "rss_kb": 687072, + "pss_kb": 641143, + "private_dirty_kb": 626856, + "vmhwm_kb": 687072, + "utime_ticks": 766, + "stime_ticks": 35, + "cg_current": 675205120, + "cg_peak": 675692544, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 18211, + "msgs": 2000, + "events": null, + "pty_bytes": 1379699, + "pty_writes": 528, + "rss_kb": 687080, + "pss_kb": 641148, + "private_dirty_kb": 626864, + "vmhwm_kb": 687080, + "utime_ticks": 774, + "stime_ticks": 35, + "cg_current": 675213312, + "cg_peak": 675692544, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 19223, + "msgs": 2000, + "events": null, + "pty_bytes": 1509696, + "pty_writes": 585, + "rss_kb": 687100, + "pss_kb": 641168, + "private_dirty_kb": 626884, + "vmhwm_kb": 687100, + "utime_ticks": 781, + "stime_ticks": 35, + "cg_current": 675233792, + "cg_peak": 675692544, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 20228, + "msgs": 2000, + "events": null, + "pty_bytes": 1638153, + "pty_writes": 642, + "rss_kb": 687104, + "pss_kb": 641172, + "private_dirty_kb": 626888, + "vmhwm_kb": 687104, + "utime_ticks": 789, + "stime_ticks": 35, + "cg_current": 675237888, + "cg_peak": 675692544, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 21237, + "msgs": 2000, + "events": null, + "pty_bytes": 1764525, + "pty_writes": 695, + "rss_kb": 687104, + "pss_kb": 641172, + "private_dirty_kb": 626888, + "vmhwm_kb": 687104, + "utime_ticks": 796, + "stime_ticks": 35, + "cg_current": 675237888, + "cg_peak": 675692544, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 22241, + "msgs": 2000, + "events": null, + "pty_bytes": 1887592, + "pty_writes": 741, + "rss_kb": 687120, + "pss_kb": 641188, + "private_dirty_kb": 626904, + "vmhwm_kb": 687120, + "utime_ticks": 805, + "stime_ticks": 36, + "cg_current": 675254272, + "cg_peak": 675692544, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 23247, + "msgs": 2000, + "events": null, + "pty_bytes": 1950313, + "pty_writes": 768, + "rss_kb": 687200, + "pss_kb": 641268, + "private_dirty_kb": 626984, + "vmhwm_kb": 687200, + "utime_ticks": 809, + "stime_ticks": 36, + "cg_current": 675336192, + "cg_peak": 676065280, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 24253, + "msgs": 2000, + "events": null, + "pty_bytes": 1955408, + "pty_writes": 772, + "rss_kb": 484424, + "pss_kb": 442958, + "private_dirty_kb": 427312, + "vmhwm_kb": 686280, + "utime_ticks": 874, + "stime_ticks": 52, + "cg_current": 451956736, + "cg_peak": 676065280, + "cg_oom_kill": 0 + } + ], + "events": [ + { + "kind": "rpc", + "method": "session.create", + "t_ms": 202 + }, + { + "kind": "rpc", + "method": "startup.catalog", + "t_ms": 202 + }, + { + "kind": "rpc", + "method": "model.options", + "t_ms": 202 + } + ], + "summary": { + "result": "completed", + "cap_hit": false, + "cap_hit_basis": null, + "at_messages": null, + "exit": { + "exitCode": 0, + "signal": 0, + "t": 24277 + }, + "stream_done": true, + "msgs_streamed": 2000, + "events_streamed": 7151, + "pty_bytes_total": 1955408, + "pty_data_callbacks": 772, + "first_byte_ms": 144, + "session_create_ms": 202, + "stream_start_ms": 1719, + "vmhwm_kb": 686280, + "cg_peak": 676065280, + "drain_max_loop_lag_ms": 8, + "drain_lag_violations": 0, + "drain_ok": true, + "digest": null, + "scroll_latencies_ms": [ + 6, + 4, + 5, + 3, + 4, + 3, + 3, + 2, + 2, + 2, + 2, + 3, + 3, + 7, + 3, + 2, + 2, + 3, + 3, + 9, + 3, + 2, + 2, + 2, + 3, + 2, + 3, + 2, + 2, + 2, + 3, + 3, + 3, + 4, + 16, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 2, + 10, + 9, + 2, + 2, + 2, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 2, + 2, + 2, + 3, + 3, + 9, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 2, + 2, + 3, + 2, + 3, + 3, + 3, + 2, + 2, + 2, + 3, + 3, + 2, + 3, + 2, + 2, + 2, + 4, + 17, + 3, + 2, + 2, + 2, + 16, + 3, + 2, + 3, + 2, + 2, + 2, + 2, + 2, + 3, + 18, + 1, + 2, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 2, + 3, + 2, + 4, + 16, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 3, + 2, + 4, + 2, + 4, + 3, + 2, + 2, + 11, + 3, + 2, + 2, + 2, + 3, + 2, + 3, + 3, + 2, + 2, + 2, + 2, + 3, + 2, + 4, + 9, + 2, + 3, + 2, + 2, + 3, + 2, + 2, + 2, + 3, + 3, + 2, + 3, + 2, + 3, + 17, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 3, + 2, + 3, + 4, + 20, + 2, + 2, + 3, + 3, + 2, + 2, + 3, + 2, + 3, + 2, + 3, + 3, + 3, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 4, + 2, + 3, + 3, + 2, + 2, + 3, + 3, + 3, + 4, + 3, + 3, + 3, + 4, + 3, + 2, + 3, + 3, + 3, + 3, + 9, + 2, + 2, + 2, + 2, + 3, + 2, + 3, + 2, + 2, + 2, + 3, + 2, + 3, + 1, + 3, + 2, + 2, + 2, + 3, + 2, + 3, + 2, + 2, + 3, + 2, + 2, + 3, + 3, + 4, + 2, + 3, + 3, + 3, + 3, + 2, + 3, + 3, + 2, + 3, + 3, + 3, + 3, + 3, + 2, + 3, + 3, + 3, + 2, + 2, + 6, + 3, + 2, + 3, + 2, + 2, + 3, + 1, + 2, + 2, + 2, + 3, + 2, + 2, + 2, + 3, + 2, + 3, + 3, + 2, + 2, + 3, + 3, + 3, + 4, + 3, + 3, + 3, + 2, + 3, + 4, + 2, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 2, + 3, + 2, + 2, + 3, + 2, + 3, + 2, + 2, + 3, + 2, + 2, + 3, + 3, + 3, + 3, + 2, + 3, + 2, + 2, + 2, + 3, + 3, + 3, + 3, + 2, + 3, + 3, + 2, + 3, + 2, + 2, + 3, + 2, + 3, + 3, + 3, + 2, + 3, + 2, + 3, + 2, + 2, + 3, + 4, + 3, + 3, + 3, + 2, + 3, + 3, + 2, + 3, + 2, + 3, + 3, + 3, + 3, + 2, + 3, + 2, + 3, + 2, + 2, + 3, + 2, + 3, + 3, + 2, + 2, + 3, + 3, + 2, + 2, + 3, + 2, + 2, + 3, + 3, + 2, + 2, + 2, + 3, + 4, + 3, + 3, + 3, + 3, + 2, + 3, + 2, + 2, + 3, + 2, + 4, + 7, + 3, + 2, + 3, + 2, + 3, + 3, + 2, + 3, + 3, + 2, + 4, + 3, + 3, + 3, + 2, + 2, + 3, + 2, + 3, + 3, + 2, + 2, + 2, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 2, + 2, + 3, + 2, + 2, + 3, + 2, + 2 + ], + "scroll": { + "events_sent": 450, + "responses": 450, + "cpu_ticks": 183 + }, + "frame_pacing": { + "gap_ms": 4, + "chunks": 725, + "frames": 467, + "duration_ms": 15181, + "fps_avg": 30.8, + "interframe_ms_p50": 33, + "interframe_ms_p95": 36, + "bytes_per_frame_p50": 4125, + "bytes_per_frame_p95": 4650.5, + "coalesced_frames": 258 + } + } +} \ No newline at end of file diff --git a/bench/results/2026-06-12T0426-f0ec24a-scroll2000-ink-ink-r1.json b/bench/results/2026-06-12T0426-f0ec24a-scroll2000-ink-ink-r1.json new file mode 100644 index 000000000000..b7ce1b0f8e02 --- /dev/null +++ b/bench/results/2026-06-12T0426-f0ec24a-scroll2000-ink-ink-r1.json @@ -0,0 +1,1966 @@ +{ + "meta": { + "cell": "scroll2000", + "ui": "ink", + "config": "ink", + "mode": "scroll", + "rep": 1, + "run_id": "mqafd4au-x4nl", + "utc": "2026-06-12T04:26:58.950Z", + "sha": "f0ec24ad5", + "node": "/home/daimon/.local/share/fnm/node-versions/v26.3.0/installation/bin/node", + "node_version": "v26.3.0", + "pty": { + "cols": 120, + "rows": 40, + "term": "xterm-256color" + }, + "heap_mb": 8192, + "memory_max": "2G", + "container_cap": false, + "container_memory": null, + "opentui_cap": null, + "fixture": { + "path": "/home/daimon/github/worktrees/hermes-agent/quiet-quill/hermes-agent/bench/.cache/fixture-2000.ndjson", + "msgs": 2000, + "sha256": "645b9ee4fdaccee45172fcec8af4a0b01a5f9aeca56ce45d8e84c4276472f99c" + }, + "sample_every": 100, + "mode_params": { + "hz": 30, + "seconds": 15 + }, + "ui_pid": 175188, + "gw_pid": 175205, + "cgroup": "/sys/fs/cgroup/user.slice/user-1001.slice/session-7349.scope", + "load_avg_at_start": [ + 0.22, + 0.6, + 1.16 + ], + "instrumented": false + }, + "samples": [ + { + "kind": "periodic", + "t_ms": 27, + "msgs": null, + "events": null, + "pty_bytes": 0, + "pty_writes": 0, + "rss_kb": 30100, + "pss_kb": 11037, + "private_dirty_kb": 5040, + "vmhwm_kb": 30120, + "utime_ticks": 0, + "stime_ticks": 0, + "cg_current": 5866512384, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 1031, + "msgs": null, + "events": null, + "pty_bytes": 6685, + "pty_writes": 12, + "rss_kb": 112076, + "pss_kb": 69280, + "private_dirty_kb": 53160, + "vmhwm_kb": 112076, + "utime_ticks": 25, + "stime_ticks": 3, + "cg_current": 5867016192, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1742, + "msgs": 100, + "events": 355, + "pty_bytes": 6906, + "pty_writes": 15, + "rss_kb": 115248, + "pss_kb": 72448, + "private_dirty_kb": 55672, + "vmhwm_kb": 115288, + "utime_ticks": 27, + "stime_ticks": 3, + "cg_current": 5866983424, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1816, + "msgs": 200, + "events": 738, + "pty_bytes": 15013, + "pty_writes": 18, + "rss_kb": 142384, + "pss_kb": 99476, + "private_dirty_kb": 82684, + "vmhwm_kb": 142424, + "utime_ticks": 40, + "stime_ticks": 4, + "cg_current": 5866983424, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1842, + "msgs": 300, + "events": 1051, + "pty_bytes": 18863, + "pty_writes": 19, + "rss_kb": 154812, + "pss_kb": 111856, + "private_dirty_kb": 95048, + "vmhwm_kb": 155040, + "utime_ticks": 44, + "stime_ticks": 5, + "cg_current": 5866983424, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1917, + "msgs": 400, + "events": 1432, + "pty_bytes": 27253, + "pty_writes": 23, + "rss_kb": 171000, + "pss_kb": 128044, + "private_dirty_kb": 111236, + "vmhwm_kb": 180848, + "utime_ticks": 60, + "stime_ticks": 6, + "cg_current": 5866921984, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1942, + "msgs": 501, + "events": 1792, + "pty_bytes": 33919, + "pty_writes": 26, + "rss_kb": 172112, + "pss_kb": 129156, + "private_dirty_kb": 112348, + "vmhwm_kb": 180848, + "utime_ticks": 64, + "stime_ticks": 6, + "cg_current": 5866921984, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1993, + "msgs": 601, + "events": 2154, + "pty_bytes": 41365, + "pty_writes": 28, + "rss_kb": 178160, + "pss_kb": 135199, + "private_dirty_kb": 118396, + "vmhwm_kb": 180848, + "utime_ticks": 73, + "stime_ticks": 6, + "cg_current": 5866889216, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2018, + "msgs": 701, + "events": 2496, + "pty_bytes": 44300, + "pty_writes": 29, + "rss_kb": 181128, + "pss_kb": 138167, + "private_dirty_kb": 121364, + "vmhwm_kb": 181132, + "utime_ticks": 76, + "stime_ticks": 6, + "cg_current": 5866803200, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2043, + "msgs": 801, + "events": 2857, + "pty_bytes": 51869, + "pty_writes": 31, + "rss_kb": 182880, + "pss_kb": 139919, + "private_dirty_kb": 123116, + "vmhwm_kb": 182880, + "utime_ticks": 80, + "stime_ticks": 6, + "cg_current": 5866778624, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 2045, + "msgs": null, + "events": null, + "pty_bytes": 51869, + "pty_writes": 31, + "rss_kb": 182908, + "pss_kb": 139947, + "private_dirty_kb": 123144, + "vmhwm_kb": 182988, + "utime_ticks": 80, + "stime_ticks": 6, + "cg_current": 5866778624, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2095, + "msgs": 901, + "events": 3245, + "pty_bytes": 59868, + "pty_writes": 33, + "rss_kb": 193960, + "pss_kb": 150997, + "private_dirty_kb": 134196, + "vmhwm_kb": 193960, + "utime_ticks": 89, + "stime_ticks": 7, + "cg_current": 5866778624, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2147, + "msgs": 1001, + "events": 3588, + "pty_bytes": 67083, + "pty_writes": 35, + "rss_kb": 197780, + "pss_kb": 154817, + "private_dirty_kb": 138016, + "vmhwm_kb": 197800, + "utime_ticks": 96, + "stime_ticks": 7, + "cg_current": 5866774528, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2172, + "msgs": 1101, + "events": 3928, + "pty_bytes": 74521, + "pty_writes": 37, + "rss_kb": 201016, + "pss_kb": 158053, + "private_dirty_kb": 141252, + "vmhwm_kb": 201212, + "utime_ticks": 100, + "stime_ticks": 7, + "cg_current": 5866520576, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2196, + "msgs": 1201, + "events": 4298, + "pty_bytes": 78294, + "pty_writes": 38, + "rss_kb": 203336, + "pss_kb": 160373, + "private_dirty_kb": 143572, + "vmhwm_kb": 204068, + "utime_ticks": 103, + "stime_ticks": 7, + "cg_current": 5866774528, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2247, + "msgs": 1300, + "events": 4659, + "pty_bytes": 89460, + "pty_writes": 41, + "rss_kb": 207852, + "pss_kb": 164889, + "private_dirty_kb": 148088, + "vmhwm_kb": 208812, + "utime_ticks": 109, + "stime_ticks": 8, + "cg_current": 5866774528, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2271, + "msgs": 1400, + "events": 5011, + "pty_bytes": 89460, + "pty_writes": 41, + "rss_kb": 210792, + "pss_kb": 167829, + "private_dirty_kb": 151028, + "vmhwm_kb": 210800, + "utime_ticks": 112, + "stime_ticks": 8, + "cg_current": 5866774528, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2422, + "msgs": 1500, + "events": 5384, + "pty_bytes": 97013, + "pty_writes": 43, + "rss_kb": 217880, + "pss_kb": 174917, + "private_dirty_kb": 158116, + "vmhwm_kb": 217904, + "utime_ticks": 129, + "stime_ticks": 8, + "cg_current": 5867298816, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2571, + "msgs": 1600, + "events": 5730, + "pty_bytes": 104756, + "pty_writes": 46, + "rss_kb": 223244, + "pss_kb": 180281, + "private_dirty_kb": 163480, + "vmhwm_kb": 223400, + "utime_ticks": 146, + "stime_ticks": 8, + "cg_current": 5867540480, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2622, + "msgs": 1700, + "events": 6100, + "pty_bytes": 112328, + "pty_writes": 49, + "rss_kb": 230676, + "pss_kb": 187713, + "private_dirty_kb": 170912, + "vmhwm_kb": 231124, + "utime_ticks": 153, + "stime_ticks": 9, + "cg_current": 5867560960, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2646, + "msgs": 1800, + "events": 6455, + "pty_bytes": 113829, + "pty_writes": 51, + "rss_kb": 232660, + "pss_kb": 189697, + "private_dirty_kb": 172896, + "vmhwm_kb": 232660, + "utime_ticks": 157, + "stime_ticks": 9, + "cg_current": 5867298816, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2696, + "msgs": 1900, + "events": 6838, + "pty_bytes": 123540, + "pty_writes": 55, + "rss_kb": 238020, + "pss_kb": 195057, + "private_dirty_kb": 178256, + "vmhwm_kb": 238104, + "utime_ticks": 163, + "stime_ticks": 9, + "cg_current": 5867057152, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2721, + "msgs": 2000, + "events": 7151, + "pty_bytes": 127323, + "pty_writes": 56, + "rss_kb": 240748, + "pss_kb": 197785, + "private_dirty_kb": 180984, + "vmhwm_kb": 240760, + "utime_ticks": 166, + "stime_ticks": 9, + "cg_current": 5867057152, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "done", + "t_ms": 2723, + "msgs": 2000, + "events": 7151, + "pty_bytes": 127323, + "pty_writes": 56, + "rss_kb": 240948, + "pss_kb": 197985, + "private_dirty_kb": 181184, + "vmhwm_kb": 240952, + "utime_ticks": 167, + "stime_ticks": 9, + "cg_current": 5867057152, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 3046, + "msgs": 2000, + "events": null, + "pty_bytes": 131275, + "pty_writes": 58, + "rss_kb": 242700, + "pss_kb": 199737, + "private_dirty_kb": 182936, + "vmhwm_kb": 242700, + "utime_ticks": 169, + "stime_ticks": 9, + "cg_current": 5867298816, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 4057, + "msgs": 2000, + "events": null, + "pty_bytes": 131365, + "pty_writes": 60, + "rss_kb": 242716, + "pss_kb": 199753, + "private_dirty_kb": 182952, + "vmhwm_kb": 242716, + "utime_ticks": 169, + "stime_ticks": 9, + "cg_current": 5867417600, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 5064, + "msgs": 2000, + "events": null, + "pty_bytes": 131455, + "pty_writes": 62, + "rss_kb": 242716, + "pss_kb": 199753, + "private_dirty_kb": 182952, + "vmhwm_kb": 242716, + "utime_ticks": 169, + "stime_ticks": 9, + "cg_current": 5867581440, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 6072, + "msgs": 2000, + "events": null, + "pty_bytes": 131545, + "pty_writes": 64, + "rss_kb": 242720, + "pss_kb": 199757, + "private_dirty_kb": 182956, + "vmhwm_kb": 242720, + "utime_ticks": 169, + "stime_ticks": 9, + "cg_current": 5867958272, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 7086, + "msgs": 2000, + "events": null, + "pty_bytes": 131635, + "pty_writes": 66, + "rss_kb": 242724, + "pss_kb": 199761, + "private_dirty_kb": 182960, + "vmhwm_kb": 242724, + "utime_ticks": 169, + "stime_ticks": 9, + "cg_current": 5868687360, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 8100, + "msgs": 2000, + "events": null, + "pty_bytes": 131725, + "pty_writes": 68, + "rss_kb": 242728, + "pss_kb": 199765, + "private_dirty_kb": 182964, + "vmhwm_kb": 242728, + "utime_ticks": 169, + "stime_ticks": 9, + "cg_current": 5870116864, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 9109, + "msgs": 2000, + "events": null, + "pty_bytes": 131815, + "pty_writes": 70, + "rss_kb": 242728, + "pss_kb": 199765, + "private_dirty_kb": 182964, + "vmhwm_kb": 242728, + "utime_ticks": 170, + "stime_ticks": 9, + "cg_current": 5869637632, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 10123, + "msgs": 2000, + "events": null, + "pty_bytes": 131905, + "pty_writes": 72, + "rss_kb": 242736, + "pss_kb": 199773, + "private_dirty_kb": 182972, + "vmhwm_kb": 242736, + "utime_ticks": 170, + "stime_ticks": 9, + "cg_current": 5873303552, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 11131, + "msgs": 2000, + "events": null, + "pty_bytes": 132025, + "pty_writes": 74, + "rss_kb": 242744, + "pss_kb": 199781, + "private_dirty_kb": 182980, + "vmhwm_kb": 242744, + "utime_ticks": 170, + "stime_ticks": 9, + "cg_current": 5873225728, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 12144, + "msgs": 2000, + "events": null, + "pty_bytes": 132115, + "pty_writes": 76, + "rss_kb": 238580, + "pss_kb": 195617, + "private_dirty_kb": 178816, + "vmhwm_kb": 243088, + "utime_ticks": 173, + "stime_ticks": 9, + "cg_current": 5883260928, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 13151, + "msgs": 2000, + "events": null, + "pty_bytes": 132224, + "pty_writes": 78, + "rss_kb": 238896, + "pss_kb": 195933, + "private_dirty_kb": 179132, + "vmhwm_kb": 243088, + "utime_ticks": 174, + "stime_ticks": 9, + "cg_current": 5881208832, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 14159, + "msgs": 2000, + "events": null, + "pty_bytes": 132314, + "pty_writes": 80, + "rss_kb": 238896, + "pss_kb": 195933, + "private_dirty_kb": 179132, + "vmhwm_kb": 243088, + "utime_ticks": 174, + "stime_ticks": 9, + "cg_current": 5880979456, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 15167, + "msgs": 2000, + "events": null, + "pty_bytes": 132404, + "pty_writes": 82, + "rss_kb": 238896, + "pss_kb": 195933, + "private_dirty_kb": 179132, + "vmhwm_kb": 243088, + "utime_ticks": 174, + "stime_ticks": 9, + "cg_current": 5881561088, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 16184, + "msgs": 2000, + "events": null, + "pty_bytes": 132494, + "pty_writes": 84, + "rss_kb": 238896, + "pss_kb": 195933, + "private_dirty_kb": 179132, + "vmhwm_kb": 243088, + "utime_ticks": 174, + "stime_ticks": 9, + "cg_current": 5881143296, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 17191, + "msgs": 2000, + "events": null, + "pty_bytes": 132584, + "pty_writes": 86, + "rss_kb": 238896, + "pss_kb": 195933, + "private_dirty_kb": 179132, + "vmhwm_kb": 243088, + "utime_ticks": 174, + "stime_ticks": 10, + "cg_current": 5881462784, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "final", + "t_ms": 17786, + "msgs": 2000, + "events": 7151, + "pty_bytes": 132674, + "pty_writes": 88, + "rss_kb": 238896, + "pss_kb": 195933, + "private_dirty_kb": 179132, + "vmhwm_kb": 243088, + "utime_ticks": 175, + "stime_ticks": 10, + "cg_current": 5881524224, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 18205, + "msgs": 2000, + "events": null, + "pty_bytes": 186982, + "pty_writes": 111, + "rss_kb": 239872, + "pss_kb": 196909, + "private_dirty_kb": 180108, + "vmhwm_kb": 243088, + "utime_ticks": 180, + "stime_ticks": 10, + "cg_current": 5881794560, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 19213, + "msgs": 2000, + "events": null, + "pty_bytes": 296232, + "pty_writes": 155, + "rss_kb": 244344, + "pss_kb": 201381, + "private_dirty_kb": 184584, + "vmhwm_kb": 244344, + "utime_ticks": 221, + "stime_ticks": 10, + "cg_current": 5899051008, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 20218, + "msgs": 2000, + "events": null, + "pty_bytes": 414356, + "pty_writes": 193, + "rss_kb": 241064, + "pss_kb": 198101, + "private_dirty_kb": 181308, + "vmhwm_kb": 243856, + "utime_ticks": 263, + "stime_ticks": 11, + "cg_current": 5890424832, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 21226, + "msgs": 2000, + "events": null, + "pty_bytes": 539285, + "pty_writes": 239, + "rss_kb": 241448, + "pss_kb": 198485, + "private_dirty_kb": 181692, + "vmhwm_kb": 247728, + "utime_ticks": 298, + "stime_ticks": 12, + "cg_current": 5892243456, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 22234, + "msgs": 2000, + "events": null, + "pty_bytes": 679044, + "pty_writes": 293, + "rss_kb": 244736, + "pss_kb": 201773, + "private_dirty_kb": 184984, + "vmhwm_kb": 247728, + "utime_ticks": 335, + "stime_ticks": 12, + "cg_current": 5892546560, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 23241, + "msgs": 2000, + "events": null, + "pty_bytes": 849819, + "pty_writes": 350, + "rss_kb": 241844, + "pss_kb": 198881, + "private_dirty_kb": 182092, + "vmhwm_kb": 247728, + "utime_ticks": 367, + "stime_ticks": 13, + "cg_current": 5895380992, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 24248, + "msgs": 2000, + "events": null, + "pty_bytes": 996044, + "pty_writes": 404, + "rss_kb": 244504, + "pss_kb": 201541, + "private_dirty_kb": 184752, + "vmhwm_kb": 247728, + "utime_ticks": 391, + "stime_ticks": 14, + "cg_current": 5895602176, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 25252, + "msgs": 2000, + "events": null, + "pty_bytes": 1109461, + "pty_writes": 448, + "rss_kb": 248100, + "pss_kb": 205137, + "private_dirty_kb": 188348, + "vmhwm_kb": 248100, + "utime_ticks": 425, + "stime_ticks": 14, + "cg_current": 5896089600, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 26261, + "msgs": 2000, + "events": null, + "pty_bytes": 1203517, + "pty_writes": 480, + "rss_kb": 251612, + "pss_kb": 208649, + "private_dirty_kb": 191860, + "vmhwm_kb": 251612, + "utime_ticks": 456, + "stime_ticks": 15, + "cg_current": 5896183808, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 27267, + "msgs": 2000, + "events": null, + "pty_bytes": 1297210, + "pty_writes": 514, + "rss_kb": 240172, + "pss_kb": 197209, + "private_dirty_kb": 180420, + "vmhwm_kb": 255172, + "utime_ticks": 485, + "stime_ticks": 15, + "cg_current": 5896876032, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 28277, + "msgs": 2000, + "events": null, + "pty_bytes": 1420249, + "pty_writes": 557, + "rss_kb": 246772, + "pss_kb": 203809, + "private_dirty_kb": 187020, + "vmhwm_kb": 255172, + "utime_ticks": 519, + "stime_ticks": 15, + "cg_current": 5897363456, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 29286, + "msgs": 2000, + "events": null, + "pty_bytes": 1521426, + "pty_writes": 588, + "rss_kb": 248912, + "pss_kb": 205949, + "private_dirty_kb": 189160, + "vmhwm_kb": 255172, + "utime_ticks": 555, + "stime_ticks": 16, + "cg_current": 5895696384, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 30294, + "msgs": 2000, + "events": null, + "pty_bytes": 1630715, + "pty_writes": 621, + "rss_kb": 200876, + "pss_kb": 157883, + "private_dirty_kb": 141064, + "vmhwm_kb": 255172, + "utime_ticks": 589, + "stime_ticks": 17, + "cg_current": 5897035776, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 31301, + "msgs": 2000, + "events": null, + "pty_bytes": 1775361, + "pty_writes": 663, + "rss_kb": 209392, + "pss_kb": 166399, + "private_dirty_kb": 149580, + "vmhwm_kb": 255172, + "utime_ticks": 616, + "stime_ticks": 18, + "cg_current": 5897138176, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 32309, + "msgs": 2000, + "events": null, + "pty_bytes": 1882857, + "pty_writes": 698, + "rss_kb": 214752, + "pss_kb": 171759, + "private_dirty_kb": 154940, + "vmhwm_kb": 255172, + "utime_ticks": 644, + "stime_ticks": 18, + "cg_current": 5885005824, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 33313, + "msgs": 2000, + "events": null, + "pty_bytes": 1929101, + "pty_writes": 717, + "rss_kb": 212732, + "pss_kb": 169739, + "private_dirty_kb": 152920, + "vmhwm_kb": 255172, + "utime_ticks": 660, + "stime_ticks": 19, + "cg_current": 5875310592, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 34320, + "msgs": 2000, + "events": null, + "pty_bytes": 1929191, + "pty_writes": 719, + "rss_kb": 212732, + "pss_kb": 169739, + "private_dirty_kb": 152920, + "vmhwm_kb": 255172, + "utime_ticks": 660, + "stime_ticks": 19, + "cg_current": 5876469760, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 35326, + "msgs": 2000, + "events": null, + "pty_bytes": 1929281, + "pty_writes": 721, + "rss_kb": 212732, + "pss_kb": 169739, + "private_dirty_kb": 152920, + "vmhwm_kb": 255172, + "utime_ticks": 661, + "stime_ticks": 19, + "cg_current": 5875519488, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 36335, + "msgs": 2000, + "events": null, + "pty_bytes": 1929371, + "pty_writes": 723, + "rss_kb": 212732, + "pss_kb": 169739, + "private_dirty_kb": 152920, + "vmhwm_kb": 255172, + "utime_ticks": 661, + "stime_ticks": 19, + "cg_current": 5876772864, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 37342, + "msgs": 2000, + "events": null, + "pty_bytes": 1929461, + "pty_writes": 725, + "rss_kb": 212732, + "pss_kb": 169739, + "private_dirty_kb": 152920, + "vmhwm_kb": 255172, + "utime_ticks": 661, + "stime_ticks": 19, + "cg_current": 5877698560, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 38348, + "msgs": 2000, + "events": null, + "pty_bytes": 1929551, + "pty_writes": 727, + "rss_kb": 212732, + "pss_kb": 169739, + "private_dirty_kb": 152920, + "vmhwm_kb": 255172, + "utime_ticks": 661, + "stime_ticks": 19, + "cg_current": 5878976512, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 39351, + "msgs": 2000, + "events": null, + "pty_bytes": 1929641, + "pty_writes": 729, + "rss_kb": 212732, + "pss_kb": 169739, + "private_dirty_kb": 152920, + "vmhwm_kb": 255172, + "utime_ticks": 661, + "stime_ticks": 19, + "cg_current": 5881425920, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 40360, + "msgs": 2000, + "events": null, + "pty_bytes": 1929732, + "pty_writes": 731, + "rss_kb": 212732, + "pss_kb": 169739, + "private_dirty_kb": 152920, + "vmhwm_kb": 255172, + "utime_ticks": 661, + "stime_ticks": 19, + "cg_current": 5890871296, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 41368, + "msgs": 2000, + "events": null, + "pty_bytes": 1929822, + "pty_writes": 733, + "rss_kb": 212732, + "pss_kb": 169739, + "private_dirty_kb": 152920, + "vmhwm_kb": 255172, + "utime_ticks": 661, + "stime_ticks": 19, + "cg_current": 5887635456, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 42370, + "msgs": 2000, + "events": null, + "pty_bytes": 1929912, + "pty_writes": 735, + "rss_kb": 212732, + "pss_kb": 169739, + "private_dirty_kb": 152920, + "vmhwm_kb": 255172, + "utime_ticks": 661, + "stime_ticks": 19, + "cg_current": 5886877696, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 43377, + "msgs": 2000, + "events": null, + "pty_bytes": 1930003, + "pty_writes": 737, + "rss_kb": 212732, + "pss_kb": 169739, + "private_dirty_kb": 152920, + "vmhwm_kb": 255172, + "utime_ticks": 662, + "stime_ticks": 19, + "cg_current": 5887647744, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 44381, + "msgs": 2000, + "events": null, + "pty_bytes": 1930093, + "pty_writes": 739, + "rss_kb": 212732, + "pss_kb": 169739, + "private_dirty_kb": 152920, + "vmhwm_kb": 255172, + "utime_ticks": 662, + "stime_ticks": 19, + "cg_current": 5886906368, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 45392, + "msgs": 2000, + "events": null, + "pty_bytes": 1930183, + "pty_writes": 741, + "rss_kb": 212732, + "pss_kb": 169739, + "private_dirty_kb": 152920, + "vmhwm_kb": 255172, + "utime_ticks": 662, + "stime_ticks": 19, + "cg_current": 5887692800, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 46398, + "msgs": 2000, + "events": null, + "pty_bytes": 1930273, + "pty_writes": 743, + "rss_kb": 212732, + "pss_kb": 169739, + "private_dirty_kb": 152920, + "vmhwm_kb": 255172, + "utime_ticks": 662, + "stime_ticks": 19, + "cg_current": 5886877696, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 47406, + "msgs": 2000, + "events": null, + "pty_bytes": 1930363, + "pty_writes": 745, + "rss_kb": 212732, + "pss_kb": 169739, + "private_dirty_kb": 152920, + "vmhwm_kb": 255172, + "utime_ticks": 662, + "stime_ticks": 19, + "cg_current": 5888524288, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + } + ], + "events": [ + { + "kind": "rpc", + "method": "config.get", + "t_ms": 226 + }, + { + "kind": "rpc", + "method": "commands.catalog", + "t_ms": 226 + }, + { + "kind": "rpc", + "method": "setup.status", + "t_ms": 226 + }, + { + "kind": "rpc", + "method": "session.create", + "t_ms": 226 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 252 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 252 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 252 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 1741 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 3248 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 4759 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 5240 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 6248 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 7742 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 9261 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 10247 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 10749 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 12243 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 13755 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 15243 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 15243 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 16761 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 18251 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 19765 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 20241 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 21248 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 22761 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 24246 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 25250 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 25754 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 27265 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 28751 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 30240 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 30265 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 31752 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 33259 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 34747 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 35248 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 36258 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 37767 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 39248 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 40256 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 40761 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 42267 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 43752 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 45238 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 45264 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 46748 + } + ], + "summary": { + "result": "completed", + "cap_hit": false, + "cap_hit_basis": null, + "at_messages": null, + "exit": { + "exitCode": 0, + "signal": 0, + "t": 47784 + }, + "stream_done": true, + "msgs_streamed": 2000, + "events_streamed": 7151, + "pty_bytes_total": 1930815, + "pty_data_callbacks": 754, + "first_byte_ms": 109, + "session_create_ms": 226, + "stream_start_ms": 1741, + "vmhwm_kb": 255172, + "cg_peak": 7893282816, + "drain_max_loop_lag_ms": 3, + "drain_lag_violations": 0, + "drain_ok": true, + "digest": null, + "scroll_latencies_ms": [ + 2, + 2, + 2, + 3, + 2, + 2, + 2, + 2, + 1, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 1, + 2, + 122, + 89, + 56, + 22, + 7, + 2, + 1, + 1, + 2, + 2, + 1, + 7, + 1, + 1, + 1, + 1, + 2, + 111, + 78, + 45, + 12, + 1, + 1, + 1, + 2, + 2, + 3, + 1, + 2, + 2, + 1, + 2, + 4, + 2, + 106, + 73, + 39, + 6, + 2, + 1, + 2, + 18, + 2, + 1, + 2, + 1, + 2, + 2, + 1, + 2, + 2, + 2, + 107, + 75, + 41, + 8, + 17, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 1, + 1, + 1, + 105, + 73, + 39, + 6, + 11, + 1, + 2, + 2, + 2, + 5, + 3, + 2, + 2, + 2, + 2, + 2, + 1, + 2, + 2, + 2, + 1, + 1, + 2, + 1, + 2, + 90, + 57, + 24, + 8, + 1, + 1, + 1, + 1, + 2, + 7, + 3, + 1, + 2, + 1, + 2, + 1, + 2, + 100, + 68, + 34, + 1, + 1, + 1, + 2, + 4, + 1, + 2, + 1, + 2, + 2, + 1, + 1, + 2, + 1, + 1, + 2, + 1, + 1, + 1, + 8, + 2, + 1, + 2, + 2, + 2, + 1, + 1, + 1, + 2, + 2, + 1, + 96, + 62, + 29, + 12, + 2, + 1, + 1, + 2, + 2, + 1, + 1, + 2, + 2, + 2, + 2, + 1, + 4, + 2, + 11, + 2, + 2, + 96, + 64, + 31, + 15, + 1, + 1, + 2, + 2, + 2, + 1, + 3, + 3, + 0, + 1, + 3, + 2, + 1, + 1, + 2, + 96, + 64, + 31, + 13, + 1, + 1, + 1, + 2, + 7, + 1, + 1, + 2, + 2, + 3, + 2, + 101, + 69, + 36, + 2, + 2, + 2, + 1, + 1, + 134, + 100, + 67, + 34, + 1, + 1, + 1, + 1, + 1, + 2, + 1, + 1, + 1, + 1, + 1, + 8, + 1, + 1, + 75, + 41, + 8, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 2, + 110, + 78, + 45, + 12, + 1, + 2, + 1, + 1, + 1, + 2, + 2, + 1, + 1, + 2, + 1, + 101, + 67, + 34, + 1, + 1, + 1, + 3, + 1, + 6, + 2, + 2, + 2, + 1, + 2, + 2, + 13, + 18, + 3, + 2, + 2, + 70, + 37, + 3, + 1, + 2, + 1, + 1, + 1, + 1, + 2, + 9, + 2, + 1, + 1, + 1, + 72, + 39, + 5, + 1, + 2, + 2, + 1, + 1, + 2, + 2, + 12, + 1, + 2, + 1, + 1, + 2, + 1, + 93, + 61, + 28, + 11, + 1, + 2, + 2, + 1, + 11, + 2, + 1, + 2, + 2, + 2, + 1, + 103, + 70, + 37, + 3, + 2, + 2, + 2, + 2, + 14, + 1, + 1, + 2, + 2, + 2, + 1, + 3, + 94, + 61, + 27, + 10, + 2, + 2, + 2, + 11, + 7, + 1, + 2, + 2, + 2, + 2, + 2, + 105, + 72, + 38, + 6, + 2, + 1, + 2, + 13, + 1, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 1, + 1, + 3, + 2, + 2, + 1, + 10, + 1, + 92, + 60, + 26, + 10, + 1, + 1, + 2, + 1, + 2, + 2, + 1, + 2, + 1, + 14, + 1, + 106, + 73, + 38, + 6, + 2, + 1, + 1, + 2, + 2, + 2, + 1, + 1, + 1, + 3, + 1, + 1, + 2, + 1, + 2, + 72, + 39, + 6, + 1, + 1, + 3, + 2, + 2, + 1, + 14, + 2, + 1, + 1, + 1, + 2, + 1, + 2, + 82, + 49, + 15, + 1, + 2, + 3, + 2, + 10 + ], + "scroll": { + "events_sent": 450, + "responses": 450, + "cpu_ticks": 496 + }, + "frame_pacing": { + "gap_ms": 4, + "chunks": 658, + "frames": 522, + "duration_ms": 29965, + "fps_avg": 17.4, + "interframe_ms_p50": 32, + "interframe_ms_p95": 496, + "bytes_per_frame_p50": 3639.5, + "bytes_per_frame_p95": 6766.549999999996, + "coalesced_frames": 119 + } + } +} \ No newline at end of file diff --git a/bench/results/2026-06-12T0426-f0ec24a-scroll2000-opentui-otui-uncapped-r0.json b/bench/results/2026-06-12T0426-f0ec24a-scroll2000-opentui-otui-uncapped-r0.json new file mode 100644 index 000000000000..4d99fe3b7c73 --- /dev/null +++ b/bench/results/2026-06-12T0426-f0ec24a-scroll2000-opentui-otui-uncapped-r0.json @@ -0,0 +1,1355 @@ +{ + "meta": { + "cell": "scroll2000", + "ui": "opentui", + "config": "otui-uncapped", + "mode": "scroll", + "rep": 0, + "run_id": "mqafcdng-bpnz", + "utc": "2026-06-12T04:26:24.412Z", + "sha": "f0ec24ad5", + "node": "/home/daimon/.local/share/fnm/node-versions/v26.3.0/installation/bin/node", + "node_version": "v26.3.0", + "pty": { + "cols": 120, + "rows": 40, + "term": "xterm-256color" + }, + "heap_mb": 8192, + "memory_max": "2G", + "container_cap": false, + "container_memory": null, + "opentui_cap": 100000, + "fixture": { + "path": "/home/daimon/github/worktrees/hermes-agent/quiet-quill/hermes-agent/bench/.cache/fixture-2000.ndjson", + "msgs": 2000, + "sha256": "645b9ee4fdaccee45172fcec8af4a0b01a5f9aeca56ce45d8e84c4276472f99c" + }, + "sample_every": 100, + "mode_params": { + "hz": 30, + "seconds": 15 + }, + "ui_pid": 173959, + "gw_pid": 173975, + "cgroup": "/sys/fs/cgroup/user.slice/user-1001.slice/session-7349.scope", + "load_avg_at_start": [ + 0.42, + 0.71, + 1.23 + ], + "instrumented": false + }, + "samples": [ + { + "kind": "periodic", + "t_ms": 26, + "msgs": null, + "events": null, + "pty_bytes": 0, + "pty_writes": 0, + "rss_kb": 18956, + "pss_kb": 5951, + "private_dirty_kb": 1484, + "vmhwm_kb": 19008, + "utime_ticks": 0, + "stime_ticks": 0, + "cg_current": 5864296448, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 1035, + "msgs": null, + "events": null, + "pty_bytes": 28909, + "pty_writes": 11, + "rss_kb": 104340, + "pss_kb": 60587, + "private_dirty_kb": 47864, + "vmhwm_kb": 106568, + "utime_ticks": 18, + "stime_ticks": 2, + "cg_current": 5863608320, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1713, + "msgs": 100, + "events": 355, + "pty_bytes": 31409, + "pty_writes": 13, + "rss_kb": 113816, + "pss_kb": 69942, + "private_dirty_kb": 57216, + "vmhwm_kb": 113844, + "utime_ticks": 23, + "stime_ticks": 2, + "cg_current": 5863104512, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1714, + "msgs": 200, + "events": 738, + "pty_bytes": 31409, + "pty_writes": 13, + "rss_kb": 113688, + "pss_kb": 69814, + "private_dirty_kb": 57088, + "vmhwm_kb": 113688, + "utime_ticks": 23, + "stime_ticks": 2, + "cg_current": 5863104512, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1715, + "msgs": 300, + "events": 1051, + "pty_bytes": 31409, + "pty_writes": 13, + "rss_kb": 113688, + "pss_kb": 69814, + "private_dirty_kb": 57088, + "vmhwm_kb": 113688, + "utime_ticks": 23, + "stime_ticks": 2, + "cg_current": 5863104512, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1715, + "msgs": 400, + "events": 1432, + "pty_bytes": 31409, + "pty_writes": 13, + "rss_kb": 113724, + "pss_kb": 69850, + "private_dirty_kb": 57124, + "vmhwm_kb": 113724, + "utime_ticks": 23, + "stime_ticks": 2, + "cg_current": 5863104512, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 2043, + "msgs": null, + "events": null, + "pty_bytes": 31409, + "pty_writes": 13, + "rss_kb": 235036, + "pss_kb": 189195, + "private_dirty_kb": 175316, + "vmhwm_kb": 235096, + "utime_ticks": 78, + "stime_ticks": 7, + "cg_current": 5863489536, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2094, + "msgs": 501, + "events": 1792, + "pty_bytes": 31783, + "pty_writes": 14, + "rss_kb": 236924, + "pss_kb": 191083, + "private_dirty_kb": 177204, + "vmhwm_kb": 236924, + "utime_ticks": 84, + "stime_ticks": 7, + "cg_current": 5863510016, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2348, + "msgs": 601, + "events": 2154, + "pty_bytes": 34297, + "pty_writes": 16, + "rss_kb": 280256, + "pss_kb": 234292, + "private_dirty_kb": 220232, + "vmhwm_kb": 280292, + "utime_ticks": 120, + "stime_ticks": 8, + "cg_current": 5864116224, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2572, + "msgs": 701, + "events": 2496, + "pty_bytes": 36923, + "pty_writes": 18, + "rss_kb": 339300, + "pss_kb": 293220, + "private_dirty_kb": 279152, + "vmhwm_kb": 356252, + "utime_ticks": 168, + "stime_ticks": 11, + "cg_current": 5863198720, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2825, + "msgs": 801, + "events": 2857, + "pty_bytes": 39674, + "pty_writes": 20, + "rss_kb": 370084, + "pss_kb": 324004, + "private_dirty_kb": 309936, + "vmhwm_kb": 370084, + "utime_ticks": 197, + "stime_ticks": 13, + "cg_current": 5863137280, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 3050, + "msgs": null, + "events": null, + "pty_bytes": 41661, + "pty_writes": 21, + "rss_kb": 400120, + "pss_kb": 354037, + "private_dirty_kb": 339972, + "vmhwm_kb": 400120, + "utime_ticks": 221, + "stime_ticks": 14, + "cg_current": 5863378944, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3124, + "msgs": 901, + "events": 3245, + "pty_bytes": 43603, + "pty_writes": 22, + "rss_kb": 401948, + "pss_kb": 355865, + "private_dirty_kb": 341800, + "vmhwm_kb": 401948, + "utime_ticks": 229, + "stime_ticks": 14, + "cg_current": 5863378944, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3201, + "msgs": 1001, + "events": 3588, + "pty_bytes": 45482, + "pty_writes": 23, + "rss_kb": 402572, + "pss_kb": 356489, + "private_dirty_kb": 342424, + "vmhwm_kb": 402592, + "utime_ticks": 237, + "stime_ticks": 14, + "cg_current": 5863120896, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3580, + "msgs": 1101, + "events": 3928, + "pty_bytes": 48341, + "pty_writes": 25, + "rss_kb": 438880, + "pss_kb": 392797, + "private_dirty_kb": 378732, + "vmhwm_kb": 438932, + "utime_ticks": 278, + "stime_ticks": 16, + "cg_current": 5863333888, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3981, + "msgs": 1201, + "events": 4298, + "pty_bytes": 52763, + "pty_writes": 27, + "rss_kb": 466320, + "pss_kb": 420211, + "private_dirty_kb": 406172, + "vmhwm_kb": 466340, + "utime_ticks": 335, + "stime_ticks": 18, + "cg_current": 5863141376, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 4056, + "msgs": null, + "events": null, + "pty_bytes": 52763, + "pty_writes": 27, + "rss_kb": 478044, + "pss_kb": 431961, + "private_dirty_kb": 417896, + "vmhwm_kb": 478048, + "utime_ticks": 344, + "stime_ticks": 19, + "cg_current": 5864034304, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 4330, + "msgs": 1300, + "events": 4659, + "pty_bytes": 56530, + "pty_writes": 29, + "rss_kb": 463796, + "pss_kb": 417713, + "private_dirty_kb": 403648, + "vmhwm_kb": 479312, + "utime_ticks": 374, + "stime_ticks": 20, + "cg_current": 5863833600, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 4334, + "msgs": 1400, + "events": 5011, + "pty_bytes": 56530, + "pty_writes": 29, + "rss_kb": 464180, + "pss_kb": 418097, + "private_dirty_kb": 404032, + "vmhwm_kb": 479312, + "utime_ticks": 374, + "stime_ticks": 20, + "cg_current": 5863833600, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 4337, + "msgs": 1500, + "events": 5384, + "pty_bytes": 56530, + "pty_writes": 29, + "rss_kb": 465200, + "pss_kb": 419117, + "private_dirty_kb": 405052, + "vmhwm_kb": 479312, + "utime_ticks": 374, + "stime_ticks": 20, + "cg_current": 5863833600, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 4339, + "msgs": 1600, + "events": 5730, + "pty_bytes": 56530, + "pty_writes": 29, + "rss_kb": 465616, + "pss_kb": 419533, + "private_dirty_kb": 405468, + "vmhwm_kb": 479312, + "utime_ticks": 375, + "stime_ticks": 20, + "cg_current": 5863833600, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 4341, + "msgs": 1700, + "events": 6100, + "pty_bytes": 56530, + "pty_writes": 29, + "rss_kb": 465916, + "pss_kb": 419833, + "private_dirty_kb": 405768, + "vmhwm_kb": 479312, + "utime_ticks": 375, + "stime_ticks": 20, + "cg_current": 5863833600, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 4343, + "msgs": 1800, + "events": 6455, + "pty_bytes": 56530, + "pty_writes": 29, + "rss_kb": 466108, + "pss_kb": 420025, + "private_dirty_kb": 405960, + "vmhwm_kb": 479312, + "utime_ticks": 375, + "stime_ticks": 20, + "cg_current": 5863833600, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 4987, + "msgs": 1900, + "events": 6838, + "pty_bytes": 58800, + "pty_writes": 30, + "rss_kb": 610432, + "pss_kb": 564349, + "private_dirty_kb": 550284, + "vmhwm_kb": 610480, + "utime_ticks": 449, + "stime_ticks": 25, + "cg_current": 5863358464, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 5064, + "msgs": null, + "events": null, + "pty_bytes": 58800, + "pty_writes": 30, + "rss_kb": 630308, + "pss_kb": 584225, + "private_dirty_kb": 570160, + "vmhwm_kb": 632160, + "utime_ticks": 458, + "stime_ticks": 27, + "cg_current": 5863604224, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 5690, + "msgs": 2000, + "events": 7151, + "pty_bytes": 60592, + "pty_writes": 32, + "rss_kb": 644076, + "pss_kb": 597993, + "private_dirty_kb": 583928, + "vmhwm_kb": 644080, + "utime_ticks": 521, + "stime_ticks": 28, + "cg_current": 5863878656, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "done", + "t_ms": 5693, + "msgs": 2000, + "events": 7151, + "pty_bytes": 60592, + "pty_writes": 32, + "rss_kb": 644412, + "pss_kb": 598329, + "private_dirty_kb": 584264, + "vmhwm_kb": 644540, + "utime_ticks": 521, + "stime_ticks": 28, + "cg_current": 5863878656, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 6065, + "msgs": 2000, + "events": null, + "pty_bytes": 62752, + "pty_writes": 33, + "rss_kb": 670636, + "pss_kb": 624553, + "private_dirty_kb": 610488, + "vmhwm_kb": 670636, + "utime_ticks": 558, + "stime_ticks": 32, + "cg_current": 5864288256, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 7069, + "msgs": 2000, + "events": null, + "pty_bytes": 69687, + "pty_writes": 38, + "rss_kb": 686508, + "pss_kb": 640425, + "private_dirty_kb": 626360, + "vmhwm_kb": 686508, + "utime_ticks": 627, + "stime_ticks": 33, + "cg_current": 5864144896, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "final", + "t_ms": 7868, + "msgs": 2000, + "events": 7151, + "pty_bytes": 69687, + "pty_writes": 38, + "rss_kb": 686508, + "pss_kb": 640425, + "private_dirty_kb": 626360, + "vmhwm_kb": 686508, + "utime_ticks": 627, + "stime_ticks": 33, + "cg_current": 5864140800, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 8080, + "msgs": 2000, + "events": null, + "pty_bytes": 102508, + "pty_writes": 52, + "rss_kb": 687352, + "pss_kb": 641243, + "private_dirty_kb": 627204, + "vmhwm_kb": 687352, + "utime_ticks": 631, + "stime_ticks": 33, + "cg_current": 5864611840, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 9086, + "msgs": 2000, + "events": null, + "pty_bytes": 225127, + "pty_writes": 96, + "rss_kb": 686804, + "pss_kb": 640721, + "private_dirty_kb": 626656, + "vmhwm_kb": 686804, + "utime_ticks": 679, + "stime_ticks": 34, + "cg_current": 5864259584, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 10094, + "msgs": 2000, + "events": null, + "pty_bytes": 344525, + "pty_writes": 133, + "rss_kb": 687436, + "pss_kb": 641353, + "private_dirty_kb": 627288, + "vmhwm_kb": 687436, + "utime_ticks": 692, + "stime_ticks": 34, + "cg_current": 5865484288, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 11100, + "msgs": 2000, + "events": null, + "pty_bytes": 462720, + "pty_writes": 168, + "rss_kb": 687676, + "pss_kb": 641593, + "private_dirty_kb": 627528, + "vmhwm_kb": 687676, + "utime_ticks": 701, + "stime_ticks": 34, + "cg_current": 5866139648, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 12100, + "msgs": 2000, + "events": null, + "pty_bytes": 587112, + "pty_writes": 221, + "rss_kb": 688176, + "pss_kb": 642093, + "private_dirty_kb": 628028, + "vmhwm_kb": 688176, + "utime_ticks": 713, + "stime_ticks": 34, + "cg_current": 5866188800, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 13106, + "msgs": 2000, + "events": null, + "pty_bytes": 705845, + "pty_writes": 254, + "rss_kb": 688588, + "pss_kb": 642505, + "private_dirty_kb": 628440, + "vmhwm_kb": 688588, + "utime_ticks": 724, + "stime_ticks": 34, + "cg_current": 5866983424, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 14116, + "msgs": 2000, + "events": null, + "pty_bytes": 827771, + "pty_writes": 292, + "rss_kb": 688956, + "pss_kb": 642873, + "private_dirty_kb": 628808, + "vmhwm_kb": 688956, + "utime_ticks": 736, + "stime_ticks": 35, + "cg_current": 5867139072, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 15123, + "msgs": 2000, + "events": null, + "pty_bytes": 952054, + "pty_writes": 345, + "rss_kb": 688968, + "pss_kb": 642884, + "private_dirty_kb": 628820, + "vmhwm_kb": 688968, + "utime_ticks": 744, + "stime_ticks": 35, + "cg_current": 5867061248, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 16127, + "msgs": 2000, + "events": null, + "pty_bytes": 1078580, + "pty_writes": 399, + "rss_kb": 689132, + "pss_kb": 643040, + "private_dirty_kb": 628984, + "vmhwm_kb": 689132, + "utime_ticks": 753, + "stime_ticks": 35, + "cg_current": 5867835392, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 17128, + "msgs": 2000, + "events": null, + "pty_bytes": 1203781, + "pty_writes": 452, + "rss_kb": 689168, + "pss_kb": 643076, + "private_dirty_kb": 629020, + "vmhwm_kb": 689168, + "utime_ticks": 761, + "stime_ticks": 35, + "cg_current": 5868167168, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 18144, + "msgs": 2000, + "events": null, + "pty_bytes": 1330704, + "pty_writes": 510, + "rss_kb": 689168, + "pss_kb": 643076, + "private_dirty_kb": 629020, + "vmhwm_kb": 689168, + "utime_ticks": 767, + "stime_ticks": 35, + "cg_current": 5869051904, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 19154, + "msgs": 2000, + "events": null, + "pty_bytes": 1462294, + "pty_writes": 566, + "rss_kb": 689180, + "pss_kb": 643088, + "private_dirty_kb": 629032, + "vmhwm_kb": 689180, + "utime_ticks": 775, + "stime_ticks": 35, + "cg_current": 5865140224, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 20167, + "msgs": 2000, + "events": null, + "pty_bytes": 1594182, + "pty_writes": 626, + "rss_kb": 689200, + "pss_kb": 643108, + "private_dirty_kb": 629052, + "vmhwm_kb": 689200, + "utime_ticks": 782, + "stime_ticks": 35, + "cg_current": 5865766912, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 21182, + "msgs": 2000, + "events": null, + "pty_bytes": 1724387, + "pty_writes": 681, + "rss_kb": 689204, + "pss_kb": 643112, + "private_dirty_kb": 629056, + "vmhwm_kb": 689204, + "utime_ticks": 789, + "stime_ticks": 35, + "cg_current": 5862428672, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 22192, + "msgs": 2000, + "events": null, + "pty_bytes": 1845536, + "pty_writes": 729, + "rss_kb": 689208, + "pss_kb": 643116, + "private_dirty_kb": 629060, + "vmhwm_kb": 689208, + "utime_ticks": 797, + "stime_ticks": 35, + "cg_current": 5865918464, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 23199, + "msgs": 2000, + "events": null, + "pty_bytes": 1939062, + "pty_writes": 769, + "rss_kb": 689244, + "pss_kb": 643152, + "private_dirty_kb": 629096, + "vmhwm_kb": 689244, + "utime_ticks": 802, + "stime_ticks": 35, + "cg_current": 5863936000, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 24211, + "msgs": 2000, + "events": null, + "pty_bytes": 1944037, + "pty_writes": 771, + "rss_kb": 587484, + "pss_kb": 541392, + "private_dirty_kb": 527336, + "vmhwm_kb": 688600, + "utime_ticks": 849, + "stime_ticks": 45, + "cg_current": 5864497152, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + } + ], + "events": [ + { + "kind": "rpc", + "method": "session.create", + "t_ms": 203 + }, + { + "kind": "rpc", + "method": "startup.catalog", + "t_ms": 203 + }, + { + "kind": "rpc", + "method": "model.options", + "t_ms": 203 + } + ], + "summary": { + "result": "completed", + "cap_hit": false, + "cap_hit_basis": null, + "at_messages": null, + "exit": { + "exitCode": 0, + "signal": 0, + "t": 24525 + }, + "stream_done": true, + "msgs_streamed": 2000, + "events_streamed": 7151, + "pty_bytes_total": 1944157, + "pty_data_callbacks": 773, + "first_byte_ms": 153, + "session_create_ms": 203, + "stream_start_ms": 1711, + "vmhwm_kb": 688600, + "cg_peak": 7893282816, + "drain_max_loop_lag_ms": 14, + "drain_lag_violations": 1, + "drain_ok": false, + "digest": null, + "scroll_latencies_ms": [ + 4, + 3, + 2, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 2, + 2, + 3, + 2, + 3, + 2, + 2, + 3, + 3, + 10, + 3, + 5, + 4, + 3, + 2, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 2, + 3, + 10, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 3, + 3, + 3, + 2, + 2, + 3, + 3, + 9, + 2, + 3, + 3, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 2, + 3, + 2, + 3, + 3, + 22, + 7, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 3, + 3, + 3, + 2, + 2, + 3, + 4, + 11, + 2, + 2, + 2, + 3, + 12, + 2, + 2, + 3, + 2, + 2, + 3, + 3, + 3, + 3, + 9, + 2, + 2, + 2, + 3, + 5, + 2, + 2, + 4, + 2, + 2, + 2, + 3, + 2, + 2, + 2, + 3, + 12, + 3, + 2, + 8, + 2, + 2, + 3, + 2, + 2, + 1, + 2, + 3, + 4, + 3, + 2, + 3, + 9, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 2, + 3, + 2, + 2, + 2, + 2, + 3, + 4, + 9, + 12, + 2, + 2, + 2, + 3, + 2, + 2, + 3, + 3, + 4, + 3, + 4, + 3, + 5, + 9, + 2, + 3, + 3, + 3, + 2, + 3, + 2, + 2, + 3, + 2, + 3, + 2, + 4, + 10, + 2, + 8, + 3, + 3, + 2, + 2, + 3, + 2, + 2, + 2, + 2, + 2, + 3, + 2, + 3, + 2, + 2, + 3, + 3, + 4, + 3, + 3, + 2, + 2, + 2, + 3, + 3, + 2, + 2, + 3, + 2, + 7, + 2, + 3, + 3, + 2, + 4, + 3, + 3, + 3, + 10, + 2, + 3, + 2, + 3, + 3, + 2, + 2, + 2, + 3, + 2, + 3, + 3, + 2, + 3, + 2, + 2, + 2, + 3, + 3, + 3, + 7, + 6, + 3, + 2, + 3, + 3, + 3, + 3, + 2, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 3, + 2, + 2, + 2, + 3, + 1, + 2, + 2, + 3, + 3, + 2, + 6, + 2, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 3, + 2, + 2, + 3, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 3, + 2, + 2, + 3, + 2, + 2, + 2, + 6, + 3, + 6, + 3, + 3, + 2, + 4, + 3, + 2, + 3, + 2, + 2, + 2, + 3, + 2, + 2, + 2, + 2, + 2, + 3, + 4, + 3, + 3, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 8, + 2, + 2, + 2, + 3, + 2, + 2, + 2, + 3, + 2, + 2, + 2, + 3, + 3, + 2, + 2, + 2, + 2, + 3, + 2, + 3, + 2, + 2, + 2, + 2, + 2, + 3, + 3, + 2, + 2, + 10, + 2, + 2, + 2, + 3, + 3, + 2, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 3, + 2, + 3, + 2, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 2, + 2, + 9, + 2, + 1, + 2, + 3, + 3, + 2, + 2, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 2, + 3, + 2, + 2, + 0, + 3, + 3, + 7, + 2, + 3, + 3, + 3, + 3, + 2, + 2, + 3, + 3, + 2, + 3, + 2, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 2 + ], + "scroll": { + "events_sent": 450, + "responses": 450, + "cpu_ticks": 177 + }, + "frame_pacing": { + "gap_ms": 4, + "chunks": 731, + "frames": 466, + "duration_ms": 15200, + "fps_avg": 30.7, + "interframe_ms_p50": 33, + "interframe_ms_p95": 36, + "bytes_per_frame_p50": 4124.5, + "bytes_per_frame_p95": 4637, + "coalesced_frames": 265 + } + } +} \ No newline at end of file diff --git a/bench/results/2026-06-12T0427-f0ec24a-scroll2000-opentui-otui-uncapped-r1.json b/bench/results/2026-06-12T0427-f0ec24a-scroll2000-opentui-otui-uncapped-r1.json new file mode 100644 index 000000000000..a4819057acc0 --- /dev/null +++ b/bench/results/2026-06-12T0427-f0ec24a-scroll2000-opentui-otui-uncapped-r1.json @@ -0,0 +1,1355 @@ +{ + "meta": { + "cell": "scroll2000", + "ui": "opentui", + "config": "otui-uncapped", + "mode": "scroll", + "rep": 1, + "run_id": "mqafed03-myah", + "utc": "2026-06-12T04:27:56.884Z", + "sha": "f0ec24ad5", + "node": "/home/daimon/.local/share/fnm/node-versions/v26.3.0/installation/bin/node", + "node_version": "v26.3.0", + "pty": { + "cols": 120, + "rows": 40, + "term": "xterm-256color" + }, + "heap_mb": 8192, + "memory_max": "2G", + "container_cap": false, + "container_memory": null, + "opentui_cap": 100000, + "fixture": { + "path": "/home/daimon/github/worktrees/hermes-agent/quiet-quill/hermes-agent/bench/.cache/fixture-2000.ndjson", + "msgs": 2000, + "sha256": "645b9ee4fdaccee45172fcec8af4a0b01a5f9aeca56ce45d8e84c4276472f99c" + }, + "sample_every": 100, + "mode_params": { + "hz": 30, + "seconds": 15 + }, + "ui_pid": 176799, + "gw_pid": 176808, + "cgroup": "/sys/fs/cgroup/user.slice/user-1001.slice/session-7349.scope", + "load_avg_at_start": [ + 0.18, + 0.55, + 1.12 + ], + "instrumented": false + }, + "samples": [ + { + "kind": "periodic", + "t_ms": 26, + "msgs": null, + "events": null, + "pty_bytes": 0, + "pty_writes": 0, + "rss_kb": 26568, + "pss_kb": 8646, + "private_dirty_kb": 3108, + "vmhwm_kb": 26568, + "utime_ticks": 0, + "stime_ticks": 0, + "cg_current": 5874245632, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 1031, + "msgs": null, + "events": null, + "pty_bytes": 28909, + "pty_writes": 15, + "rss_kb": 104296, + "pss_kb": 60475, + "private_dirty_kb": 47776, + "vmhwm_kb": 106712, + "utime_ticks": 19, + "stime_ticks": 2, + "cg_current": 5874585600, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1709, + "msgs": 100, + "events": 355, + "pty_bytes": 31409, + "pty_writes": 17, + "rss_kb": 118204, + "pss_kb": 74264, + "private_dirty_kb": 61560, + "vmhwm_kb": 118208, + "utime_ticks": 25, + "stime_ticks": 3, + "cg_current": 5861064704, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1711, + "msgs": 200, + "events": 738, + "pty_bytes": 31409, + "pty_writes": 17, + "rss_kb": 118208, + "pss_kb": 74268, + "private_dirty_kb": 61564, + "vmhwm_kb": 118208, + "utime_ticks": 25, + "stime_ticks": 3, + "cg_current": 5861064704, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1711, + "msgs": 300, + "events": 1051, + "pty_bytes": 31409, + "pty_writes": 17, + "rss_kb": 118220, + "pss_kb": 74280, + "private_dirty_kb": 61576, + "vmhwm_kb": 118220, + "utime_ticks": 25, + "stime_ticks": 3, + "cg_current": 5861064704, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1711, + "msgs": 400, + "events": 1432, + "pty_bytes": 31409, + "pty_writes": 17, + "rss_kb": 118236, + "pss_kb": 74296, + "private_dirty_kb": 61592, + "vmhwm_kb": 118236, + "utime_ticks": 25, + "stime_ticks": 3, + "cg_current": 5861064704, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1712, + "msgs": 501, + "events": 1792, + "pty_bytes": 31409, + "pty_writes": 17, + "rss_kb": 118236, + "pss_kb": 74296, + "private_dirty_kb": 61592, + "vmhwm_kb": 118236, + "utime_ticks": 25, + "stime_ticks": 3, + "cg_current": 5861064704, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 2040, + "msgs": null, + "events": null, + "pty_bytes": 31409, + "pty_writes": 17, + "rss_kb": 236068, + "pss_kb": 190182, + "private_dirty_kb": 176364, + "vmhwm_kb": 236092, + "utime_ticks": 77, + "stime_ticks": 7, + "cg_current": 5861085184, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2189, + "msgs": 601, + "events": 2154, + "pty_bytes": 31990, + "pty_writes": 18, + "rss_kb": 263932, + "pss_kb": 218006, + "private_dirty_kb": 204168, + "vmhwm_kb": 263932, + "utime_ticks": 95, + "stime_ticks": 8, + "cg_current": 5860585472, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2441, + "msgs": 701, + "events": 2496, + "pty_bytes": 35633, + "pty_writes": 20, + "rss_kb": 304676, + "pss_kb": 258642, + "private_dirty_kb": 244732, + "vmhwm_kb": 304752, + "utime_ticks": 128, + "stime_ticks": 9, + "cg_current": 5860364288, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2743, + "msgs": 801, + "events": 2857, + "pty_bytes": 38834, + "pty_writes": 22, + "rss_kb": 351660, + "pss_kb": 305509, + "private_dirty_kb": 291468, + "vmhwm_kb": 365344, + "utime_ticks": 185, + "stime_ticks": 12, + "cg_current": 5860847616, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3047, + "msgs": 901, + "events": 3245, + "pty_bytes": 41692, + "pty_writes": 24, + "rss_kb": 382632, + "pss_kb": 336481, + "private_dirty_kb": 322440, + "vmhwm_kb": 382632, + "utime_ticks": 218, + "stime_ticks": 14, + "cg_current": 5860859904, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 3049, + "msgs": null, + "events": null, + "pty_bytes": 41692, + "pty_writes": 24, + "rss_kb": 382632, + "pss_kb": 336481, + "private_dirty_kb": 322440, + "vmhwm_kb": 382632, + "utime_ticks": 219, + "stime_ticks": 14, + "cg_current": 5860859904, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3146, + "msgs": 1001, + "events": 3588, + "pty_bytes": 42432, + "pty_writes": 25, + "rss_kb": 386360, + "pss_kb": 340209, + "private_dirty_kb": 326168, + "vmhwm_kb": 386496, + "utime_ticks": 229, + "stime_ticks": 14, + "cg_current": 5860859904, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3496, + "msgs": 1101, + "events": 3928, + "pty_bytes": 45577, + "pty_writes": 27, + "rss_kb": 415588, + "pss_kb": 369437, + "private_dirty_kb": 355396, + "vmhwm_kb": 415660, + "utime_ticks": 267, + "stime_ticks": 16, + "cg_current": 5860794368, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3798, + "msgs": 1201, + "events": 4298, + "pty_bytes": 48405, + "pty_writes": 29, + "rss_kb": 447444, + "pss_kb": 401293, + "private_dirty_kb": 387252, + "vmhwm_kb": 447716, + "utime_ticks": 304, + "stime_ticks": 17, + "cg_current": 5860954112, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3802, + "msgs": 1300, + "events": 4659, + "pty_bytes": 48405, + "pty_writes": 29, + "rss_kb": 447972, + "pss_kb": 401821, + "private_dirty_kb": 387780, + "vmhwm_kb": 447972, + "utime_ticks": 306, + "stime_ticks": 17, + "cg_current": 5860954112, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3806, + "msgs": 1400, + "events": 5011, + "pty_bytes": 48405, + "pty_writes": 29, + "rss_kb": 447972, + "pss_kb": 401821, + "private_dirty_kb": 387780, + "vmhwm_kb": 448252, + "utime_ticks": 307, + "stime_ticks": 17, + "cg_current": 5860954112, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3810, + "msgs": 1500, + "events": 5384, + "pty_bytes": 48405, + "pty_writes": 29, + "rss_kb": 448504, + "pss_kb": 402353, + "private_dirty_kb": 388312, + "vmhwm_kb": 448504, + "utime_ticks": 309, + "stime_ticks": 18, + "cg_current": 5860954112, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 4076, + "msgs": null, + "events": null, + "pty_bytes": 48405, + "pty_writes": 29, + "rss_kb": 528172, + "pss_kb": 482021, + "private_dirty_kb": 467980, + "vmhwm_kb": 528248, + "utime_ticks": 352, + "stime_ticks": 20, + "cg_current": 5860548608, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 4100, + "msgs": 1600, + "events": 5730, + "pty_bytes": 48405, + "pty_writes": 29, + "rss_kb": 533164, + "pss_kb": 487013, + "private_dirty_kb": 472972, + "vmhwm_kb": 533160, + "utime_ticks": 354, + "stime_ticks": 21, + "cg_current": 5860732928, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 4707, + "msgs": 1700, + "events": 6100, + "pty_bytes": 51045, + "pty_writes": 31, + "rss_kb": 584452, + "pss_kb": 538301, + "private_dirty_kb": 524260, + "vmhwm_kb": 584452, + "utime_ticks": 417, + "stime_ticks": 24, + "cg_current": 5860962304, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 5083, + "msgs": null, + "events": null, + "pty_bytes": 52704, + "pty_writes": 32, + "rss_kb": 611416, + "pss_kb": 565265, + "private_dirty_kb": 551224, + "vmhwm_kb": 611416, + "utime_ticks": 455, + "stime_ticks": 27, + "cg_current": 5860855808, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 5309, + "msgs": 1800, + "events": 6455, + "pty_bytes": 54895, + "pty_writes": 33, + "rss_kb": 615936, + "pss_kb": 569785, + "private_dirty_kb": 555744, + "vmhwm_kb": 615936, + "utime_ticks": 478, + "stime_ticks": 27, + "cg_current": 5860614144, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 5960, + "msgs": 1900, + "events": 6838, + "pty_bytes": 59119, + "pty_writes": 35, + "rss_kb": 648784, + "pss_kb": 602633, + "private_dirty_kb": 588592, + "vmhwm_kb": 648784, + "utime_ticks": 545, + "stime_ticks": 30, + "cg_current": 5862047744, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 6085, + "msgs": null, + "events": null, + "pty_bytes": 59119, + "pty_writes": 35, + "rss_kb": 649104, + "pss_kb": 602953, + "private_dirty_kb": 588912, + "vmhwm_kb": 649104, + "utime_ticks": 557, + "stime_ticks": 30, + "cg_current": 5860995072, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 6162, + "msgs": 2000, + "events": 7151, + "pty_bytes": 61148, + "pty_writes": 36, + "rss_kb": 653224, + "pss_kb": 607073, + "private_dirty_kb": 593032, + "vmhwm_kb": 653264, + "utime_ticks": 566, + "stime_ticks": 30, + "cg_current": 5860679680, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "done", + "t_ms": 6166, + "msgs": 2000, + "events": 7151, + "pty_bytes": 61148, + "pty_writes": 36, + "rss_kb": 653316, + "pss_kb": 607165, + "private_dirty_kb": 593124, + "vmhwm_kb": 653380, + "utime_ticks": 566, + "stime_ticks": 30, + "cg_current": 5860679680, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 7094, + "msgs": 2000, + "events": null, + "pty_bytes": 64374, + "pty_writes": 38, + "rss_kb": 700996, + "pss_kb": 654845, + "private_dirty_kb": 640804, + "vmhwm_kb": 700996, + "utime_ticks": 659, + "stime_ticks": 34, + "cg_current": 5861056512, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "final", + "t_ms": 8086, + "msgs": 2000, + "events": 7151, + "pty_bytes": 68538, + "pty_writes": 41, + "rss_kb": 701628, + "pss_kb": 655477, + "private_dirty_kb": 641436, + "vmhwm_kb": 701628, + "utime_ticks": 677, + "stime_ticks": 34, + "cg_current": 5860773888, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 8099, + "msgs": 2000, + "events": null, + "pty_bytes": 68538, + "pty_writes": 41, + "rss_kb": 701948, + "pss_kb": 655797, + "private_dirty_kb": 641756, + "vmhwm_kb": 701948, + "utime_ticks": 678, + "stime_ticks": 34, + "cg_current": 5860978688, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 9106, + "msgs": 2000, + "events": null, + "pty_bytes": 200554, + "pty_writes": 92, + "rss_kb": 701376, + "pss_kb": 655225, + "private_dirty_kb": 641184, + "vmhwm_kb": 701376, + "utime_ticks": 723, + "stime_ticks": 34, + "cg_current": 5861462016, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 10110, + "msgs": 2000, + "events": null, + "pty_bytes": 320076, + "pty_writes": 129, + "rss_kb": 701860, + "pss_kb": 655709, + "private_dirty_kb": 641668, + "vmhwm_kb": 701860, + "utime_ticks": 735, + "stime_ticks": 34, + "cg_current": 5861535744, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 11114, + "msgs": 2000, + "events": null, + "pty_bytes": 436881, + "pty_writes": 164, + "rss_kb": 702204, + "pss_kb": 656053, + "private_dirty_kb": 642012, + "vmhwm_kb": 702204, + "utime_ticks": 745, + "stime_ticks": 35, + "cg_current": 5869887488, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 12121, + "msgs": 2000, + "events": null, + "pty_bytes": 562499, + "pty_writes": 218, + "rss_kb": 702464, + "pss_kb": 656313, + "private_dirty_kb": 642272, + "vmhwm_kb": 702464, + "utime_ticks": 756, + "stime_ticks": 35, + "cg_current": 5869805568, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 13126, + "msgs": 2000, + "events": null, + "pty_bytes": 681009, + "pty_writes": 252, + "rss_kb": 702784, + "pss_kb": 656633, + "private_dirty_kb": 642592, + "vmhwm_kb": 702784, + "utime_ticks": 766, + "stime_ticks": 35, + "cg_current": 5869625344, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 14132, + "msgs": 2000, + "events": null, + "pty_bytes": 803289, + "pty_writes": 289, + "rss_kb": 703120, + "pss_kb": 656969, + "private_dirty_kb": 642928, + "vmhwm_kb": 703120, + "utime_ticks": 776, + "stime_ticks": 35, + "cg_current": 5869473792, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 15140, + "msgs": 2000, + "events": null, + "pty_bytes": 925631, + "pty_writes": 336, + "rss_kb": 703324, + "pss_kb": 657173, + "private_dirty_kb": 643132, + "vmhwm_kb": 703324, + "utime_ticks": 785, + "stime_ticks": 35, + "cg_current": 5869662208, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 16145, + "msgs": 2000, + "events": null, + "pty_bytes": 1051561, + "pty_writes": 391, + "rss_kb": 703492, + "pss_kb": 657341, + "private_dirty_kb": 643300, + "vmhwm_kb": 703492, + "utime_ticks": 794, + "stime_ticks": 35, + "cg_current": 5869703168, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 17148, + "msgs": 2000, + "events": null, + "pty_bytes": 1178383, + "pty_writes": 445, + "rss_kb": 703492, + "pss_kb": 657341, + "private_dirty_kb": 643300, + "vmhwm_kb": 703492, + "utime_ticks": 801, + "stime_ticks": 35, + "cg_current": 5869809664, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 18155, + "msgs": 2000, + "events": null, + "pty_bytes": 1304097, + "pty_writes": 501, + "rss_kb": 703492, + "pss_kb": 657341, + "private_dirty_kb": 643300, + "vmhwm_kb": 703492, + "utime_ticks": 807, + "stime_ticks": 35, + "cg_current": 5869391872, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 19160, + "msgs": 2000, + "events": null, + "pty_bytes": 1430227, + "pty_writes": 556, + "rss_kb": 703492, + "pss_kb": 657341, + "private_dirty_kb": 643300, + "vmhwm_kb": 703492, + "utime_ticks": 814, + "stime_ticks": 36, + "cg_current": 5869944832, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 20166, + "msgs": 2000, + "events": null, + "pty_bytes": 1567480, + "pty_writes": 619, + "rss_kb": 703504, + "pss_kb": 657353, + "private_dirty_kb": 643312, + "vmhwm_kb": 703504, + "utime_ticks": 820, + "stime_ticks": 36, + "cg_current": 5870235648, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 21167, + "msgs": 2000, + "events": null, + "pty_bytes": 1692852, + "pty_writes": 672, + "rss_kb": 703504, + "pss_kb": 657353, + "private_dirty_kb": 643312, + "vmhwm_kb": 703504, + "utime_ticks": 827, + "stime_ticks": 36, + "cg_current": 5870350336, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 22170, + "msgs": 2000, + "events": null, + "pty_bytes": 1817218, + "pty_writes": 723, + "rss_kb": 703508, + "pss_kb": 657357, + "private_dirty_kb": 643316, + "vmhwm_kb": 703508, + "utime_ticks": 833, + "stime_ticks": 36, + "cg_current": 5870956544, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 23177, + "msgs": 2000, + "events": null, + "pty_bytes": 1937880, + "pty_writes": 771, + "rss_kb": 703524, + "pss_kb": 657373, + "private_dirty_kb": 643332, + "vmhwm_kb": 703524, + "utime_ticks": 839, + "stime_ticks": 36, + "cg_current": 5871239168, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 24178, + "msgs": 2000, + "events": null, + "pty_bytes": 1942927, + "pty_writes": 774, + "rss_kb": 652532, + "pss_kb": 606381, + "private_dirty_kb": 592340, + "vmhwm_kb": 702680, + "utime_ticks": 867, + "stime_ticks": 41, + "cg_current": 5871566848, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + } + ], + "events": [ + { + "kind": "rpc", + "method": "session.create", + "t_ms": 175 + }, + { + "kind": "rpc", + "method": "startup.catalog", + "t_ms": 200 + }, + { + "kind": "rpc", + "method": "model.options", + "t_ms": 200 + } + ], + "summary": { + "result": "completed", + "cap_hit": false, + "cap_hit_basis": null, + "at_messages": null, + "exit": { + "exitCode": 0, + "signal": 0, + "t": 24680 + }, + "stream_done": true, + "msgs_streamed": 2000, + "events_streamed": 7151, + "pty_bytes_total": 1943047, + "pty_data_callbacks": 776, + "first_byte_ms": 144, + "session_create_ms": 175, + "stream_start_ms": 1682, + "vmhwm_kb": 702680, + "cg_peak": 7893282816, + "drain_max_loop_lag_ms": 16, + "drain_lag_violations": 1, + "drain_ok": false, + "digest": null, + "scroll_latencies_ms": [ + 9, + 4, + 3, + 2, + 2, + 7, + 3, + 5, + 6, + 3, + 3, + 7, + 3, + 4, + 3, + 2, + 2, + 2, + 4, + 19, + 3, + 3, + 3, + 3, + 3, + 3, + 2, + 2, + 2, + 3, + 3, + 3, + 3, + 5, + 10, + 8, + 2, + 2, + 3, + 3, + 3, + 3, + 2, + 3, + 4, + 2, + 2, + 3, + 3, + 9, + 2, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 2, + 3, + 3, + 3, + 9, + 2, + 3, + 2, + 3, + 2, + 4, + 3, + 3, + 3, + 4, + 4, + 3, + 3, + 3, + 3, + 2, + 2, + 3, + 3, + 2, + 3, + 3, + 3, + 2, + 3, + 10, + 2, + 2, + 3, + 0, + 2, + 2, + 2, + 2, + 3, + 2, + 4, + 3, + 2, + 3, + 10, + 2, + 2, + 3, + 2, + 2, + 3, + 3, + 3, + 2, + 4, + 4, + 2, + 3, + 3, + 3, + 3, + 8, + 2, + 1, + 2, + 3, + 2, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 3, + 3, + 3, + 9, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 3, + 2, + 2, + 2, + 3, + 3, + 2, + 8, + 2, + 3, + 2, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 2, + 2, + 2, + 3, + 8, + 2, + 3, + 2, + 2, + 2, + 3, + 2, + 2, + 2, + 2, + 2, + 3, + 3, + 9, + 1, + 2, + 2, + 3, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 3, + 2, + 2, + 3, + 3, + 2, + 2, + 2, + 2, + 3, + 3, + 2, + 2, + 2, + 2, + 3, + 18, + 2, + 2, + 3, + 3, + 3, + 2, + 3, + 3, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 3, + 3, + 2, + 3, + 2, + 2, + 3, + 2, + 3, + 2, + 2, + 3, + 2, + 3, + 3, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 4, + 3, + 3, + 3, + 2, + 2, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 1, + 1, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 1, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 3, + 2, + 1, + 2, + 3, + 2, + 2, + 2, + 1, + 2, + 3, + 2, + 2, + 3, + 2, + 2, + 3, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 2, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 1, + 2, + 3, + 3, + 2, + 2, + 1, + 2, + 2, + 3, + 2, + 3, + 2, + 2, + 2, + 2, + 3, + 2, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 1, + 2, + 2, + 3, + 3, + 2, + 3, + 2, + 2, + 2, + 3, + 2, + 2, + 2, + 4, + 3, + 2, + 2, + 2, + 2, + 2, + 3, + 3, + 2, + 2, + 2, + 3, + 3, + 3, + 2, + 2, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 3, + 3, + 2, + 3, + 2, + 1, + 2, + 2, + 2, + 1, + 2, + 1, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 1, + 2, + 2, + 2, + 2, + 3, + 2, + 2 + ], + "scroll": { + "events_sent": 450, + "responses": 450, + "cpu_ticks": 165 + }, + "frame_pacing": { + "gap_ms": 4, + "chunks": 731, + "frames": 466, + "duration_ms": 15163, + "fps_avg": 30.7, + "interframe_ms_p50": 33, + "interframe_ms_p95": 35, + "bytes_per_frame_p50": 4125.5, + "bytes_per_frame_p95": 4651.25, + "coalesced_frames": 265 + } + } +} \ No newline at end of file diff --git a/bench/results/2026-06-12T0428-f0ec24a-scroll2000-opentui-otui-capped-r1.json b/bench/results/2026-06-12T0428-f0ec24a-scroll2000-opentui-otui-capped-r1.json new file mode 100644 index 000000000000..29f4001371cb --- /dev/null +++ b/bench/results/2026-06-12T0428-f0ec24a-scroll2000-opentui-otui-capped-r1.json @@ -0,0 +1,1321 @@ +{ + "meta": { + "cell": "scroll2000", + "ui": "opentui", + "config": "otui-capped", + "mode": "scroll", + "rep": 1, + "run_id": "mqaff3ry-7j3r", + "utc": "2026-06-12T04:28:31.582Z", + "sha": "f0ec24ad5", + "node": "/home/daimon/.local/share/fnm/node-versions/v26.3.0/installation/bin/node", + "node_version": "v26.3.0", + "pty": { + "cols": 120, + "rows": 40, + "term": "xterm-256color" + }, + "heap_mb": 8192, + "memory_max": "2G", + "container_cap": false, + "container_memory": null, + "opentui_cap": 3000, + "fixture": { + "path": "/home/daimon/github/worktrees/hermes-agent/quiet-quill/hermes-agent/bench/.cache/fixture-2000.ndjson", + "msgs": 2000, + "sha256": "645b9ee4fdaccee45172fcec8af4a0b01a5f9aeca56ce45d8e84c4276472f99c" + }, + "sample_every": 100, + "mode_params": { + "hz": 30, + "seconds": 15 + }, + "ui_pid": 177744, + "gw_pid": 177753, + "cgroup": "/sys/fs/cgroup/user.slice/user-1001.slice/session-7349.scope", + "load_avg_at_start": [ + 0.3, + 0.55, + 1.1 + ], + "instrumented": false + }, + "samples": [ + { + "kind": "periodic", + "t_ms": 27, + "msgs": null, + "events": null, + "pty_bytes": 0, + "pty_writes": 0, + "rss_kb": 27868, + "pss_kb": 9402, + "private_dirty_kb": 3708, + "vmhwm_kb": 27996, + "utime_ticks": 0, + "stime_ticks": 0, + "cg_current": 5867360256, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 1036, + "msgs": null, + "events": null, + "pty_bytes": 28909, + "pty_writes": 11, + "rss_kb": 104748, + "pss_kb": 60853, + "private_dirty_kb": 48152, + "vmhwm_kb": 107728, + "utime_ticks": 18, + "stime_ticks": 2, + "cg_current": 5859659776, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1694, + "msgs": 100, + "events": 355, + "pty_bytes": 31409, + "pty_writes": 13, + "rss_kb": 111252, + "pss_kb": 67344, + "private_dirty_kb": 54656, + "vmhwm_kb": 111388, + "utime_ticks": 20, + "stime_ticks": 2, + "cg_current": 5858967552, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1697, + "msgs": 200, + "events": 738, + "pty_bytes": 31409, + "pty_writes": 13, + "rss_kb": 111616, + "pss_kb": 67602, + "private_dirty_kb": 54896, + "vmhwm_kb": 111660, + "utime_ticks": 21, + "stime_ticks": 3, + "cg_current": 5858967552, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1719, + "msgs": 300, + "events": 1051, + "pty_bytes": 31409, + "pty_writes": 13, + "rss_kb": 113100, + "pss_kb": 68981, + "private_dirty_kb": 56252, + "vmhwm_kb": 113164, + "utime_ticks": 25, + "stime_ticks": 3, + "cg_current": 5859000320, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1720, + "msgs": 400, + "events": 1432, + "pty_bytes": 31409, + "pty_writes": 13, + "rss_kb": 113332, + "pss_kb": 69213, + "private_dirty_kb": 56484, + "vmhwm_kb": 113344, + "utime_ticks": 25, + "stime_ticks": 3, + "cg_current": 5859000320, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 2047, + "msgs": null, + "events": null, + "pty_bytes": 31409, + "pty_writes": 13, + "rss_kb": 231104, + "pss_kb": 185104, + "private_dirty_kb": 171264, + "vmhwm_kb": 231104, + "utime_ticks": 77, + "stime_ticks": 7, + "cg_current": 5859266560, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2146, + "msgs": 501, + "events": 1792, + "pty_bytes": 34779, + "pty_writes": 15, + "rss_kb": 234208, + "pss_kb": 188105, + "private_dirty_kb": 174188, + "vmhwm_kb": 234284, + "utime_ticks": 89, + "stime_ticks": 7, + "cg_current": 5859270656, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2321, + "msgs": 601, + "events": 2154, + "pty_bytes": 37469, + "pty_writes": 16, + "rss_kb": 272728, + "pss_kb": 226620, + "private_dirty_kb": 212584, + "vmhwm_kb": 273476, + "utime_ticks": 116, + "stime_ticks": 9, + "cg_current": 5858996224, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2547, + "msgs": 701, + "events": 2496, + "pty_bytes": 43528, + "pty_writes": 18, + "rss_kb": 315536, + "pss_kb": 269313, + "private_dirty_kb": 255268, + "vmhwm_kb": 331732, + "utime_ticks": 161, + "stime_ticks": 13, + "cg_current": 5859020800, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2572, + "msgs": 801, + "events": 2857, + "pty_bytes": 44143, + "pty_writes": 19, + "rss_kb": 317340, + "pss_kb": 271114, + "private_dirty_kb": 257072, + "vmhwm_kb": 331732, + "utime_ticks": 164, + "stime_ticks": 13, + "cg_current": 5859278848, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2575, + "msgs": 901, + "events": 3245, + "pty_bytes": 44143, + "pty_writes": 19, + "rss_kb": 317460, + "pss_kb": 271234, + "private_dirty_kb": 257192, + "vmhwm_kb": 331732, + "utime_ticks": 164, + "stime_ticks": 13, + "cg_current": 5859278848, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2576, + "msgs": 1001, + "events": 3588, + "pty_bytes": 44143, + "pty_writes": 19, + "rss_kb": 317552, + "pss_kb": 271326, + "private_dirty_kb": 257284, + "vmhwm_kb": 331732, + "utime_ticks": 164, + "stime_ticks": 13, + "cg_current": 5859278848, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2577, + "msgs": 1101, + "events": 3928, + "pty_bytes": 44143, + "pty_writes": 19, + "rss_kb": 317680, + "pss_kb": 271454, + "private_dirty_kb": 257412, + "vmhwm_kb": 331732, + "utime_ticks": 164, + "stime_ticks": 13, + "cg_current": 5859278848, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2578, + "msgs": 1201, + "events": 4298, + "pty_bytes": 44143, + "pty_writes": 19, + "rss_kb": 317824, + "pss_kb": 271598, + "private_dirty_kb": 257556, + "vmhwm_kb": 331732, + "utime_ticks": 164, + "stime_ticks": 13, + "cg_current": 5859278848, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 3050, + "msgs": null, + "events": null, + "pty_bytes": 44143, + "pty_writes": 19, + "rss_kb": 460540, + "pss_kb": 414314, + "private_dirty_kb": 400272, + "vmhwm_kb": 460576, + "utime_ticks": 242, + "stime_ticks": 18, + "cg_current": 5859495936, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3175, + "msgs": 1300, + "events": 4659, + "pty_bytes": 46442, + "pty_writes": 20, + "rss_kb": 462532, + "pss_kb": 416306, + "private_dirty_kb": 402264, + "vmhwm_kb": 462596, + "utime_ticks": 255, + "stime_ticks": 18, + "cg_current": 5859749888, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3673, + "msgs": 1400, + "events": 5011, + "pty_bytes": 49863, + "pty_writes": 22, + "rss_kb": 489712, + "pss_kb": 443486, + "private_dirty_kb": 429444, + "vmhwm_kb": 489768, + "utime_ticks": 307, + "stime_ticks": 19, + "cg_current": 5860253696, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3973, + "msgs": 1500, + "events": 5384, + "pty_bytes": 51834, + "pty_writes": 23, + "rss_kb": 517044, + "pss_kb": 470818, + "private_dirty_kb": 456776, + "vmhwm_kb": 517044, + "utime_ticks": 340, + "stime_ticks": 21, + "cg_current": 5864509440, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 4049, + "msgs": null, + "events": null, + "pty_bytes": 51834, + "pty_writes": 23, + "rss_kb": 517044, + "pss_kb": 470818, + "private_dirty_kb": 456776, + "vmhwm_kb": 517044, + "utime_ticks": 347, + "stime_ticks": 21, + "cg_current": 5864587264, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 4500, + "msgs": 1600, + "events": 5730, + "pty_bytes": 56294, + "pty_writes": 25, + "rss_kb": 548324, + "pss_kb": 502098, + "private_dirty_kb": 488056, + "vmhwm_kb": 548324, + "utime_ticks": 394, + "stime_ticks": 23, + "cg_current": 5864763392, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 5050, + "msgs": 1700, + "events": 6100, + "pty_bytes": 61081, + "pty_writes": 28, + "rss_kb": 581548, + "pss_kb": 535322, + "private_dirty_kb": 521280, + "vmhwm_kb": 581644, + "utime_ticks": 452, + "stime_ticks": 26, + "cg_current": 5864517632, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 5053, + "msgs": 1800, + "events": 6455, + "pty_bytes": 61081, + "pty_writes": 28, + "rss_kb": 581680, + "pss_kb": 535454, + "private_dirty_kb": 521412, + "vmhwm_kb": 581736, + "utime_ticks": 452, + "stime_ticks": 26, + "cg_current": 5864517632, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 5056, + "msgs": 1900, + "events": 6838, + "pty_bytes": 61081, + "pty_writes": 28, + "rss_kb": 582024, + "pss_kb": 535798, + "private_dirty_kb": 521756, + "vmhwm_kb": 582176, + "utime_ticks": 453, + "stime_ticks": 26, + "cg_current": 5864255488, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 5061, + "msgs": 2000, + "events": 7151, + "pty_bytes": 61081, + "pty_writes": 28, + "rss_kb": 582220, + "pss_kb": 535994, + "private_dirty_kb": 521952, + "vmhwm_kb": 582248, + "utime_ticks": 453, + "stime_ticks": 26, + "cg_current": 5864255488, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "done", + "t_ms": 5064, + "msgs": 2000, + "events": 7151, + "pty_bytes": 61081, + "pty_writes": 28, + "rss_kb": 582536, + "pss_kb": 536310, + "private_dirty_kb": 522268, + "vmhwm_kb": 582680, + "utime_ticks": 453, + "stime_ticks": 26, + "cg_current": 5864255488, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 5067, + "msgs": 2000, + "events": null, + "pty_bytes": 61081, + "pty_writes": 28, + "rss_kb": 582804, + "pss_kb": 536578, + "private_dirty_kb": 522536, + "vmhwm_kb": 582924, + "utime_ticks": 453, + "stime_ticks": 26, + "cg_current": 5864513536, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 6085, + "msgs": 2000, + "events": null, + "pty_bytes": 65045, + "pty_writes": 31, + "rss_kb": 687720, + "pss_kb": 641494, + "private_dirty_kb": 627452, + "vmhwm_kb": 687720, + "utime_ticks": 518, + "stime_ticks": 31, + "cg_current": 5870280704, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "final", + "t_ms": 6478, + "msgs": 2000, + "events": 7151, + "pty_bytes": 65045, + "pty_writes": 31, + "rss_kb": 687720, + "pss_kb": 641494, + "private_dirty_kb": 627452, + "vmhwm_kb": 687720, + "utime_ticks": 518, + "stime_ticks": 31, + "cg_current": 5870792704, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 7095, + "msgs": 2000, + "events": null, + "pty_bytes": 152375, + "pty_writes": 70, + "rss_kb": 687140, + "pss_kb": 640914, + "private_dirty_kb": 626872, + "vmhwm_kb": 687192, + "utime_ticks": 559, + "stime_ticks": 31, + "cg_current": 5872586752, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 8108, + "msgs": 2000, + "events": null, + "pty_bytes": 267453, + "pty_writes": 102, + "rss_kb": 687520, + "pss_kb": 641294, + "private_dirty_kb": 627252, + "vmhwm_kb": 687520, + "utime_ticks": 570, + "stime_ticks": 31, + "cg_current": 5873213440, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 9120, + "msgs": 2000, + "events": null, + "pty_bytes": 385326, + "pty_writes": 137, + "rss_kb": 687788, + "pss_kb": 641562, + "private_dirty_kb": 627520, + "vmhwm_kb": 687788, + "utime_ticks": 580, + "stime_ticks": 31, + "cg_current": 5874061312, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 10129, + "msgs": 2000, + "events": null, + "pty_bytes": 513520, + "pty_writes": 184, + "rss_kb": 688232, + "pss_kb": 642006, + "private_dirty_kb": 627964, + "vmhwm_kb": 688232, + "utime_ticks": 591, + "stime_ticks": 32, + "cg_current": 5878038528, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 11141, + "msgs": 2000, + "events": null, + "pty_bytes": 633640, + "pty_writes": 225, + "rss_kb": 688740, + "pss_kb": 642514, + "private_dirty_kb": 628472, + "vmhwm_kb": 688740, + "utime_ticks": 602, + "stime_ticks": 32, + "cg_current": 5877743616, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 12147, + "msgs": 2000, + "events": null, + "pty_bytes": 753976, + "pty_writes": 262, + "rss_kb": 689240, + "pss_kb": 643014, + "private_dirty_kb": 628972, + "vmhwm_kb": 689240, + "utime_ticks": 611, + "stime_ticks": 32, + "cg_current": 5879078912, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 13155, + "msgs": 2000, + "events": null, + "pty_bytes": 872182, + "pty_writes": 301, + "rss_kb": 689456, + "pss_kb": 643230, + "private_dirty_kb": 629188, + "vmhwm_kb": 689456, + "utime_ticks": 621, + "stime_ticks": 32, + "cg_current": 5858537472, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 14169, + "msgs": 2000, + "events": null, + "pty_bytes": 1000523, + "pty_writes": 355, + "rss_kb": 689732, + "pss_kb": 643506, + "private_dirty_kb": 629464, + "vmhwm_kb": 689732, + "utime_ticks": 629, + "stime_ticks": 32, + "cg_current": 5858418688, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 15177, + "msgs": 2000, + "events": null, + "pty_bytes": 1129743, + "pty_writes": 414, + "rss_kb": 689760, + "pss_kb": 643534, + "private_dirty_kb": 629492, + "vmhwm_kb": 689760, + "utime_ticks": 636, + "stime_ticks": 33, + "cg_current": 5860175872, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 16188, + "msgs": 2000, + "events": null, + "pty_bytes": 1254644, + "pty_writes": 463, + "rss_kb": 689780, + "pss_kb": 643554, + "private_dirty_kb": 629512, + "vmhwm_kb": 689780, + "utime_ticks": 644, + "stime_ticks": 33, + "cg_current": 5859737600, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 17194, + "msgs": 2000, + "events": null, + "pty_bytes": 1384722, + "pty_writes": 522, + "rss_kb": 689796, + "pss_kb": 643570, + "private_dirty_kb": 629528, + "vmhwm_kb": 689796, + "utime_ticks": 651, + "stime_ticks": 33, + "cg_current": 5859926016, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 18201, + "msgs": 2000, + "events": null, + "pty_bytes": 1516347, + "pty_writes": 580, + "rss_kb": 689820, + "pss_kb": 643594, + "private_dirty_kb": 629552, + "vmhwm_kb": 689820, + "utime_ticks": 659, + "stime_ticks": 33, + "cg_current": 5865480192, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 19215, + "msgs": 2000, + "events": null, + "pty_bytes": 1642665, + "pty_writes": 628, + "rss_kb": 689820, + "pss_kb": 643594, + "private_dirty_kb": 629552, + "vmhwm_kb": 689820, + "utime_ticks": 666, + "stime_ticks": 33, + "cg_current": 5873348608, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 20224, + "msgs": 2000, + "events": null, + "pty_bytes": 1773536, + "pty_writes": 683, + "rss_kb": 689820, + "pss_kb": 643594, + "private_dirty_kb": 629552, + "vmhwm_kb": 689820, + "utime_ticks": 674, + "stime_ticks": 33, + "cg_current": 5879271424, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 21235, + "msgs": 2000, + "events": null, + "pty_bytes": 1900230, + "pty_writes": 731, + "rss_kb": 689852, + "pss_kb": 643626, + "private_dirty_kb": 629584, + "vmhwm_kb": 689852, + "utime_ticks": 681, + "stime_ticks": 33, + "cg_current": 5884006400, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 22256, + "msgs": 2000, + "events": null, + "pty_bytes": 1934420, + "pty_writes": 746, + "rss_kb": 689920, + "pss_kb": 643694, + "private_dirty_kb": 629652, + "vmhwm_kb": 689920, + "utime_ticks": 692, + "stime_ticks": 33, + "cg_current": 5884375040, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + } + ], + "events": [ + { + "kind": "rpc", + "method": "session.create", + "t_ms": 177 + }, + { + "kind": "rpc", + "method": "startup.catalog", + "t_ms": 177 + }, + { + "kind": "rpc", + "method": "model.options", + "t_ms": 201 + } + ], + "summary": { + "result": "completed", + "cap_hit": false, + "cap_hit_basis": null, + "at_messages": null, + "exit": { + "exitCode": 0, + "signal": 0, + "t": 23078 + }, + "stream_done": true, + "msgs_streamed": 2000, + "events_streamed": 7151, + "pty_bytes_total": 1939515, + "pty_data_callbacks": 750, + "first_byte_ms": 143, + "session_create_ms": 177, + "stream_start_ms": 1692, + "vmhwm_kb": 689920, + "cg_peak": 7893282816, + "drain_max_loop_lag_ms": 21, + "drain_lag_violations": 1, + "drain_ok": false, + "digest": null, + "scroll_latencies_ms": [ + 3, + 3, + 3, + 2, + 3, + 7, + 3, + 3, + 2, + 2, + 2, + 3, + 2, + 3, + 3, + 7, + 2, + 2, + 4, + 18, + 4, + 2, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 2, + 2, + 2, + 3, + 3, + 8, + 6, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 3, + 3, + 2, + 2, + 1, + 3, + 10, + 3, + 2, + 2, + 3, + 2, + 2, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 7, + 3, + 8, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 3, + 2, + 4, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 4, + 2, + 2, + 5, + 9, + 3, + 2, + 3, + 0, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 2, + 3, + 3, + 9, + 2, + 4, + 2, + 3, + 3, + 2, + 3, + 2, + 2, + 2, + 3, + 3, + 2, + 2, + 1, + 3, + 17, + 3, + 15, + 2, + 1, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 3, + 16, + 3, + 2, + 3, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 4, + 8, + 2, + 3, + 2, + 2, + 3, + 2, + 2, + 3, + 2, + 2, + 3, + 3, + 3, + 3, + 18, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 3, + 3, + 3, + 2, + 2, + 4, + 17, + 6, + 1, + 2, + 2, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 1, + 2, + 7, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 3, + 2, + 2, + 1, + 3, + 2, + 2, + 1, + 2, + 1, + 2, + 2, + 2, + 2, + 2, + 2, + 4, + 15, + 3, + 1, + 2, + 3, + 1, + 2, + 2, + 2, + 3, + 1, + 1, + 2, + 2, + 2, + 2, + 2, + 1, + 3, + 2, + 8, + 1, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 3, + 2, + 3, + 2, + 2, + 3, + 2, + 2, + 3, + 2, + 2, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 2, + 3, + 3, + 2, + 3, + 3, + 2, + 4, + 2, + 3, + 2, + 2, + 2, + 8, + 6, + 2, + 3, + 2, + 2, + 3, + 3, + 3, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 3, + 2, + 2, + 3, + 2, + 2, + 3, + 2, + 2, + 3, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 2, + 3, + 3, + 2, + 2, + 3, + 3, + 2, + 2, + 2, + 3, + 3, + 4, + 2, + 3, + 3, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 4, + 3, + 3, + 3, + 2, + 2, + 3, + 2, + 2, + 2, + 3, + 2, + 2, + 2, + 3, + 3, + 2, + 2, + 4, + 2, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 2, + 2, + 3, + 2, + 3, + 4, + 3, + 3, + 3, + 3, + 3, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 3, + 2, + 3, + 5, + 2, + 3, + 2, + 3, + 3, + 2, + 2, + 3, + 2, + 3, + 3, + 3, + 3, + 2, + 2, + 3, + 2, + 2, + 2, + 3, + 2, + 3, + 2, + 2, + 3, + 2, + 2, + 3, + 3, + 6, + 2, + 3, + 2, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 3, + 4, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 2 + ], + "scroll": { + "events_sent": 450, + "responses": 450, + "cpu_ticks": 167 + }, + "frame_pacing": { + "gap_ms": 4, + "chunks": 715, + "frames": 465, + "duration_ms": 15170, + "fps_avg": 30.7, + "interframe_ms_p50": 33, + "interframe_ms_p95": 37, + "bytes_per_frame_p50": 4126, + "bytes_per_frame_p95": 4651.999999999999, + "coalesced_frames": 250 + } + } +} \ No newline at end of file diff --git a/bench/results/2026-06-12T0429-f0ec24a-scroll2000-ink-ink-r2.json b/bench/results/2026-06-12T0429-f0ec24a-scroll2000-ink-ink-r2.json new file mode 100644 index 000000000000..017b0ba39759 --- /dev/null +++ b/bench/results/2026-06-12T0429-f0ec24a-scroll2000-ink-ink-r2.json @@ -0,0 +1,1668 @@ +{ + "meta": { + "cell": "scroll2000", + "ui": "ink", + "config": "ink", + "mode": "scroll", + "rep": 2, + "run_id": "mqafgj14-zao3", + "utc": "2026-06-12T04:29:38.009Z", + "sha": "f0ec24ad5", + "node": "/home/daimon/.local/share/fnm/node-versions/v26.3.0/installation/bin/node", + "node_version": "v26.3.0", + "pty": { + "cols": 120, + "rows": 40, + "term": "xterm-256color" + }, + "heap_mb": 8192, + "memory_max": "2G", + "container_cap": false, + "container_memory": null, + "opentui_cap": null, + "fixture": { + "path": "/home/daimon/github/worktrees/hermes-agent/quiet-quill/hermes-agent/bench/.cache/fixture-2000.ndjson", + "msgs": 2000, + "sha256": "645b9ee4fdaccee45172fcec8af4a0b01a5f9aeca56ce45d8e84c4276472f99c" + }, + "sample_every": 100, + "mode_params": { + "hz": 30, + "seconds": 15 + }, + "ui_pid": 180523, + "gw_pid": 180532, + "cgroup": "/sys/fs/cgroup/user.slice/user-1001.slice/session-7349.scope", + "load_avg_at_start": [ + 0.68, + 0.58, + 1.07 + ], + "instrumented": false + }, + "samples": [ + { + "kind": "periodic", + "t_ms": 26, + "msgs": null, + "events": null, + "pty_bytes": 0, + "pty_writes": 0, + "rss_kb": 26544, + "pss_kb": 7357, + "private_dirty_kb": 3116, + "vmhwm_kb": 26544, + "utime_ticks": 0, + "stime_ticks": 0, + "cg_current": 5539872768, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 1030, + "msgs": null, + "events": null, + "pty_bytes": 6674, + "pty_writes": 13, + "rss_kb": 111972, + "pss_kb": 67001, + "private_dirty_kb": 53348, + "vmhwm_kb": 111972, + "utime_ticks": 25, + "stime_ticks": 3, + "cg_current": 5539831808, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1762, + "msgs": 100, + "events": 355, + "pty_bytes": 6889, + "pty_writes": 15, + "rss_kb": 116904, + "pss_kb": 71875, + "private_dirty_kb": 57556, + "vmhwm_kb": 116916, + "utime_ticks": 28, + "stime_ticks": 4, + "cg_current": 5539663872, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1837, + "msgs": 200, + "events": 738, + "pty_bytes": 13992, + "pty_writes": 17, + "rss_kb": 149028, + "pss_kb": 103679, + "private_dirty_kb": 89300, + "vmhwm_kb": 149056, + "utime_ticks": 43, + "stime_ticks": 5, + "cg_current": 5539663872, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1862, + "msgs": 300, + "events": 1051, + "pty_bytes": 17842, + "pty_writes": 18, + "rss_kb": 158836, + "pss_kb": 113436, + "private_dirty_kb": 99044, + "vmhwm_kb": 159036, + "utime_ticks": 46, + "stime_ticks": 5, + "cg_current": 5539663872, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1937, + "msgs": 400, + "events": 1432, + "pty_bytes": 29604, + "pty_writes": 23, + "rss_kb": 173464, + "pss_kb": 128064, + "private_dirty_kb": 113672, + "vmhwm_kb": 179200, + "utime_ticks": 61, + "stime_ticks": 6, + "cg_current": 5539917824, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1962, + "msgs": 501, + "events": 1792, + "pty_bytes": 32882, + "pty_writes": 25, + "rss_kb": 175524, + "pss_kb": 130124, + "private_dirty_kb": 115732, + "vmhwm_kb": 179200, + "utime_ticks": 65, + "stime_ticks": 6, + "cg_current": 5539917824, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1987, + "msgs": 601, + "events": 2154, + "pty_bytes": 40328, + "pty_writes": 27, + "rss_kb": 179988, + "pss_kb": 134582, + "private_dirty_kb": 120196, + "vmhwm_kb": 180104, + "utime_ticks": 71, + "stime_ticks": 6, + "cg_current": 5539663872, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2038, + "msgs": 701, + "events": 2496, + "pty_bytes": 46910, + "pty_writes": 29, + "rss_kb": 187024, + "pss_kb": 141618, + "private_dirty_kb": 127232, + "vmhwm_kb": 187040, + "utime_ticks": 79, + "stime_ticks": 7, + "cg_current": 5539659776, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 2040, + "msgs": null, + "events": null, + "pty_bytes": 46910, + "pty_writes": 29, + "rss_kb": 187040, + "pss_kb": 141634, + "private_dirty_kb": 127248, + "vmhwm_kb": 187048, + "utime_ticks": 79, + "stime_ticks": 7, + "cg_current": 5539659776, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2062, + "msgs": 801, + "events": 2857, + "pty_bytes": 50832, + "pty_writes": 30, + "rss_kb": 190040, + "pss_kb": 144634, + "private_dirty_kb": 130248, + "vmhwm_kb": 190052, + "utime_ticks": 83, + "stime_ticks": 7, + "cg_current": 5539659776, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2114, + "msgs": 901, + "events": 3245, + "pty_bytes": 58831, + "pty_writes": 32, + "rss_kb": 196244, + "pss_kb": 150836, + "private_dirty_kb": 136452, + "vmhwm_kb": 196708, + "utime_ticks": 91, + "stime_ticks": 7, + "cg_current": 5539659776, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2165, + "msgs": 1001, + "events": 3588, + "pty_bytes": 66046, + "pty_writes": 34, + "rss_kb": 199556, + "pss_kb": 154148, + "private_dirty_kb": 139764, + "vmhwm_kb": 201592, + "utime_ticks": 98, + "stime_ticks": 7, + "cg_current": 5539651584, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2188, + "msgs": 1101, + "events": 3928, + "pty_bytes": 73484, + "pty_writes": 36, + "rss_kb": 202524, + "pss_kb": 157116, + "private_dirty_kb": 142732, + "vmhwm_kb": 202524, + "utime_ticks": 101, + "stime_ticks": 7, + "cg_current": 5539651584, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2213, + "msgs": 1201, + "events": 4298, + "pty_bytes": 77257, + "pty_writes": 37, + "rss_kb": 205372, + "pss_kb": 159964, + "private_dirty_kb": 145580, + "vmhwm_kb": 205552, + "utime_ticks": 104, + "stime_ticks": 8, + "cg_current": 5539651584, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2263, + "msgs": 1300, + "events": 4659, + "pty_bytes": 84705, + "pty_writes": 39, + "rss_kb": 208932, + "pss_kb": 163524, + "private_dirty_kb": 149140, + "vmhwm_kb": 208940, + "utime_ticks": 110, + "stime_ticks": 8, + "cg_current": 5539655680, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2287, + "msgs": 1400, + "events": 5011, + "pty_bytes": 88423, + "pty_writes": 40, + "rss_kb": 211788, + "pss_kb": 166380, + "private_dirty_kb": 151996, + "vmhwm_kb": 211848, + "utime_ticks": 113, + "stime_ticks": 8, + "cg_current": 5539655680, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2464, + "msgs": 1500, + "events": 5384, + "pty_bytes": 95976, + "pty_writes": 42, + "rss_kb": 219188, + "pss_kb": 173780, + "private_dirty_kb": 159396, + "vmhwm_kb": 219204, + "utime_ticks": 133, + "stime_ticks": 8, + "cg_current": 5540282368, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2615, + "msgs": 1600, + "events": 5730, + "pty_bytes": 103714, + "pty_writes": 45, + "rss_kb": 227780, + "pss_kb": 182372, + "private_dirty_kb": 167988, + "vmhwm_kb": 227788, + "utime_ticks": 150, + "stime_ticks": 9, + "cg_current": 5540036608, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2664, + "msgs": 1700, + "events": 6100, + "pty_bytes": 111287, + "pty_writes": 48, + "rss_kb": 233852, + "pss_kb": 188444, + "private_dirty_kb": 174060, + "vmhwm_kb": 233852, + "utime_ticks": 157, + "stime_ticks": 9, + "cg_current": 5540311040, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2689, + "msgs": 1800, + "events": 6455, + "pty_bytes": 114521, + "pty_writes": 51, + "rss_kb": 235744, + "pss_kb": 190336, + "private_dirty_kb": 175952, + "vmhwm_kb": 236760, + "utime_ticks": 160, + "stime_ticks": 9, + "cg_current": 5540573184, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2739, + "msgs": 1900, + "events": 6838, + "pty_bytes": 117475, + "pty_writes": 52, + "rss_kb": 239524, + "pss_kb": 194116, + "private_dirty_kb": 179732, + "vmhwm_kb": 239528, + "utime_ticks": 166, + "stime_ticks": 10, + "cg_current": 5540306944, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2764, + "msgs": 2000, + "events": 7151, + "pty_bytes": 124823, + "pty_writes": 54, + "rss_kb": 241968, + "pss_kb": 196560, + "private_dirty_kb": 182176, + "vmhwm_kb": 241972, + "utime_ticks": 169, + "stime_ticks": 10, + "cg_current": 5540306944, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "done", + "t_ms": 2767, + "msgs": 2000, + "events": 7151, + "pty_bytes": 124823, + "pty_writes": 54, + "rss_kb": 241996, + "pss_kb": 196588, + "private_dirty_kb": 182204, + "vmhwm_kb": 242000, + "utime_ticks": 170, + "stime_ticks": 10, + "cg_current": 5540306944, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 3064, + "msgs": 2000, + "events": null, + "pty_bytes": 132488, + "pty_writes": 57, + "rss_kb": 247408, + "pss_kb": 202000, + "private_dirty_kb": 187616, + "vmhwm_kb": 247408, + "utime_ticks": 173, + "stime_ticks": 10, + "cg_current": 5544792064, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 4069, + "msgs": 2000, + "events": null, + "pty_bytes": 132578, + "pty_writes": 59, + "rss_kb": 247436, + "pss_kb": 202028, + "private_dirty_kb": 187644, + "vmhwm_kb": 247436, + "utime_ticks": 173, + "stime_ticks": 10, + "cg_current": 5551382528, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 5077, + "msgs": 2000, + "events": null, + "pty_bytes": 132668, + "pty_writes": 61, + "rss_kb": 247436, + "pss_kb": 202028, + "private_dirty_kb": 187644, + "vmhwm_kb": 247436, + "utime_ticks": 174, + "stime_ticks": 10, + "cg_current": 5552005120, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 6079, + "msgs": 2000, + "events": null, + "pty_bytes": 132758, + "pty_writes": 63, + "rss_kb": 247440, + "pss_kb": 202032, + "private_dirty_kb": 187648, + "vmhwm_kb": 247440, + "utime_ticks": 174, + "stime_ticks": 10, + "cg_current": 5551947776, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 7086, + "msgs": 2000, + "events": null, + "pty_bytes": 132848, + "pty_writes": 65, + "rss_kb": 247444, + "pss_kb": 202036, + "private_dirty_kb": 187652, + "vmhwm_kb": 247444, + "utime_ticks": 174, + "stime_ticks": 10, + "cg_current": 5552193536, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 8088, + "msgs": 2000, + "events": null, + "pty_bytes": 132938, + "pty_writes": 67, + "rss_kb": 247448, + "pss_kb": 202040, + "private_dirty_kb": 187656, + "vmhwm_kb": 247448, + "utime_ticks": 174, + "stime_ticks": 10, + "cg_current": 5552873472, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 9092, + "msgs": 2000, + "events": null, + "pty_bytes": 133028, + "pty_writes": 69, + "rss_kb": 247448, + "pss_kb": 202040, + "private_dirty_kb": 187656, + "vmhwm_kb": 247448, + "utime_ticks": 174, + "stime_ticks": 10, + "cg_current": 5552652288, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 10096, + "msgs": 2000, + "events": null, + "pty_bytes": 133118, + "pty_writes": 71, + "rss_kb": 247452, + "pss_kb": 202044, + "private_dirty_kb": 187660, + "vmhwm_kb": 247452, + "utime_ticks": 174, + "stime_ticks": 10, + "cg_current": 5554200576, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 11100, + "msgs": 2000, + "events": null, + "pty_bytes": 133238, + "pty_writes": 73, + "rss_kb": 247460, + "pss_kb": 202052, + "private_dirty_kb": 187668, + "vmhwm_kb": 247460, + "utime_ticks": 175, + "stime_ticks": 10, + "cg_current": 5553070080, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 12106, + "msgs": 2000, + "events": null, + "pty_bytes": 133328, + "pty_writes": 75, + "rss_kb": 247460, + "pss_kb": 202052, + "private_dirty_kb": 187668, + "vmhwm_kb": 247460, + "utime_ticks": 175, + "stime_ticks": 10, + "cg_current": 5553414144, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 13107, + "msgs": 2000, + "events": null, + "pty_bytes": 133437, + "pty_writes": 77, + "rss_kb": 247476, + "pss_kb": 202058, + "private_dirty_kb": 187684, + "vmhwm_kb": 247476, + "utime_ticks": 175, + "stime_ticks": 10, + "cg_current": 5553647616, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 14114, + "msgs": 2000, + "events": null, + "pty_bytes": 133527, + "pty_writes": 79, + "rss_kb": 247480, + "pss_kb": 202062, + "private_dirty_kb": 187688, + "vmhwm_kb": 247480, + "utime_ticks": 175, + "stime_ticks": 10, + "cg_current": 5553876992, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 15117, + "msgs": 2000, + "events": null, + "pty_bytes": 133617, + "pty_writes": 81, + "rss_kb": 247484, + "pss_kb": 202066, + "private_dirty_kb": 187692, + "vmhwm_kb": 247484, + "utime_ticks": 175, + "stime_ticks": 10, + "cg_current": 5554167808, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 16123, + "msgs": 2000, + "events": null, + "pty_bytes": 133707, + "pty_writes": 83, + "rss_kb": 247504, + "pss_kb": 202086, + "private_dirty_kb": 187712, + "vmhwm_kb": 247504, + "utime_ticks": 176, + "stime_ticks": 10, + "cg_current": 5556609024, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 17127, + "msgs": 2000, + "events": null, + "pty_bytes": 133797, + "pty_writes": 85, + "rss_kb": 247504, + "pss_kb": 202086, + "private_dirty_kb": 187712, + "vmhwm_kb": 247504, + "utime_ticks": 176, + "stime_ticks": 10, + "cg_current": 5556957184, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "final", + "t_ms": 17882, + "msgs": 2000, + "events": 7151, + "pty_bytes": 133887, + "pty_writes": 87, + "rss_kb": 247508, + "pss_kb": 202090, + "private_dirty_kb": 187716, + "vmhwm_kb": 247508, + "utime_ticks": 176, + "stime_ticks": 10, + "cg_current": 5559201792, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 18128, + "msgs": 2000, + "events": null, + "pty_bytes": 166619, + "pty_writes": 100, + "rss_kb": 245252, + "pss_kb": 199834, + "private_dirty_kb": 185460, + "vmhwm_kb": 249292, + "utime_ticks": 183, + "stime_ticks": 10, + "cg_current": 5559267328, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 19134, + "msgs": 2000, + "events": null, + "pty_bytes": 278657, + "pty_writes": 148, + "rss_kb": 247268, + "pss_kb": 201850, + "private_dirty_kb": 187480, + "vmhwm_kb": 249292, + "utime_ticks": 220, + "stime_ticks": 11, + "cg_current": 5559812096, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 20137, + "msgs": 2000, + "events": null, + "pty_bytes": 410274, + "pty_writes": 188, + "rss_kb": 249852, + "pss_kb": 204434, + "private_dirty_kb": 190064, + "vmhwm_kb": 249852, + "utime_ticks": 244, + "stime_ticks": 11, + "cg_current": 5561274368, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 21139, + "msgs": 2000, + "events": null, + "pty_bytes": 516506, + "pty_writes": 229, + "rss_kb": 243540, + "pss_kb": 198122, + "private_dirty_kb": 183756, + "vmhwm_kb": 253860, + "utime_ticks": 289, + "stime_ticks": 12, + "cg_current": 5561417728, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 22148, + "msgs": 2000, + "events": null, + "pty_bytes": 675526, + "pty_writes": 290, + "rss_kb": 247712, + "pss_kb": 202294, + "private_dirty_kb": 187932, + "vmhwm_kb": 253860, + "utime_ticks": 318, + "stime_ticks": 12, + "cg_current": 5570367488, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 23160, + "msgs": 2000, + "events": null, + "pty_bytes": 853073, + "pty_writes": 346, + "rss_kb": 251268, + "pss_kb": 205850, + "private_dirty_kb": 191488, + "vmhwm_kb": 253860, + "utime_ticks": 346, + "stime_ticks": 13, + "cg_current": 5570539520, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 24164, + "msgs": 2000, + "events": null, + "pty_bytes": 1001801, + "pty_writes": 400, + "rss_kb": 252952, + "pss_kb": 207534, + "private_dirty_kb": 193172, + "vmhwm_kb": 253860, + "utime_ticks": 380, + "stime_ticks": 14, + "cg_current": 5571612672, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 25164, + "msgs": 2000, + "events": null, + "pty_bytes": 1117116, + "pty_writes": 443, + "rss_kb": 257688, + "pss_kb": 212270, + "private_dirty_kb": 197908, + "vmhwm_kb": 257688, + "utime_ticks": 411, + "stime_ticks": 14, + "cg_current": 5582831616, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 26167, + "msgs": 2000, + "events": null, + "pty_bytes": 1214634, + "pty_writes": 476, + "rss_kb": 260316, + "pss_kb": 214898, + "private_dirty_kb": 200536, + "vmhwm_kb": 260316, + "utime_ticks": 433, + "stime_ticks": 14, + "cg_current": 5586464768, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 27177, + "msgs": 2000, + "events": null, + "pty_bytes": 1330532, + "pty_writes": 517, + "rss_kb": 264844, + "pss_kb": 219426, + "private_dirty_kb": 205064, + "vmhwm_kb": 264844, + "utime_ticks": 460, + "stime_ticks": 15, + "cg_current": 5580976128, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 28185, + "msgs": 2000, + "events": null, + "pty_bytes": 1452434, + "pty_writes": 562, + "rss_kb": 257012, + "pss_kb": 211594, + "private_dirty_kb": 197232, + "vmhwm_kb": 273496, + "utime_ticks": 488, + "stime_ticks": 16, + "cg_current": 5581725696, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 29197, + "msgs": 2000, + "events": null, + "pty_bytes": 1566293, + "pty_writes": 602, + "rss_kb": 261780, + "pss_kb": 216362, + "private_dirty_kb": 202000, + "vmhwm_kb": 273496, + "utime_ticks": 515, + "stime_ticks": 16, + "cg_current": 5583638528, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 30209, + "msgs": 2000, + "events": null, + "pty_bytes": 1724521, + "pty_writes": 650, + "rss_kb": 217592, + "pss_kb": 172174, + "private_dirty_kb": 157812, + "vmhwm_kb": 273496, + "utime_ticks": 536, + "stime_ticks": 16, + "cg_current": 5550796800, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 31223, + "msgs": 2000, + "events": null, + "pty_bytes": 1849954, + "pty_writes": 689, + "rss_kb": 219384, + "pss_kb": 173926, + "private_dirty_kb": 159544, + "vmhwm_kb": 273496, + "utime_ticks": 566, + "stime_ticks": 17, + "cg_current": 5539491840, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 32238, + "msgs": 2000, + "events": null, + "pty_bytes": 1973052, + "pty_writes": 728, + "rss_kb": 223804, + "pss_kb": 178346, + "private_dirty_kb": 163964, + "vmhwm_kb": 273496, + "utime_ticks": 592, + "stime_ticks": 18, + "cg_current": 5539336192, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 33246, + "msgs": 2000, + "events": null, + "pty_bytes": 2048340, + "pty_writes": 760, + "rss_kb": 231908, + "pss_kb": 186450, + "private_dirty_kb": 172068, + "vmhwm_kb": 273496, + "utime_ticks": 610, + "stime_ticks": 18, + "cg_current": 5540569088, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + } + ], + "events": [ + { + "kind": "rpc", + "method": "config.get", + "t_ms": 225 + }, + { + "kind": "rpc", + "method": "commands.catalog", + "t_ms": 225 + }, + { + "kind": "rpc", + "method": "setup.status", + "t_ms": 250 + }, + { + "kind": "rpc", + "method": "session.create", + "t_ms": 250 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 250 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 250 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 250 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 1760 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 3262 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 4747 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 5249 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 6254 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 7759 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 9265 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 10244 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 10772 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 12252 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 13760 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 15265 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 15265 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 16772 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 18251 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 19756 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 20333 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 21261 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 22752 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 24259 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 25337 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 25765 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 27250 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 28765 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 30256 + }, + { + "kind": "rpc", + "method": "config.get", + "t_ms": 30333 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 31752 + }, + { + "kind": "rpc", + "method": "session.active_list", + "t_ms": 33268 + } + ], + "summary": { + "result": "completed", + "cap_hit": false, + "cap_hit_basis": null, + "at_messages": null, + "exit": { + "exitCode": 0, + "signal": 0, + "t": 33380 + }, + "stream_done": true, + "msgs_streamed": 2000, + "events_streamed": 7151, + "pty_bytes_total": 2048683, + "pty_data_callbacks": 771, + "first_byte_ms": 116, + "session_create_ms": 250, + "stream_start_ms": 1760, + "vmhwm_kb": 273496, + "cg_peak": 7893282816, + "drain_max_loop_lag_ms": 5, + "drain_lag_violations": 0, + "drain_ok": true, + "digest": null, + "scroll_latencies_ms": [ + 3, + 2, + 2, + 1, + 2, + 2, + 1, + 3, + 2, + 2, + 1, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 118, + 85, + 52, + 18, + 2, + 1, + 1, + 2, + 1, + 1, + 2, + 1, + 2, + 1, + 1, + 2, + 1, + 110, + 75, + 42, + 10, + 2, + 1, + 1, + 2, + 2, + 1, + 2, + 1, + 2, + 2, + 2, + 1, + 1, + 75, + 42, + 8, + 1, + 2, + 1, + 1, + 1, + 2, + 2, + 3, + 1, + 2, + 1, + 1, + 1, + 2, + 1, + 107, + 74, + 40, + 7, + 1, + 2, + 2, + 1, + 1, + 2, + 2, + 1, + 2, + 1, + 1, + 99, + 66, + 32, + 0, + 2, + 4, + 3, + 2, + 1, + 2, + 2, + 3, + 2, + 1, + 2, + 1, + 1, + 2, + 1, + 1, + 2, + 1, + 1, + 2, + 2, + 90, + 56, + 23, + 6, + 2, + 2, + 1, + 1, + 0, + 1, + 2, + 1, + 1, + 1, + 2, + 1, + 2, + 87, + 54, + 20, + 5, + 2, + 3, + 1, + 1, + 1, + 2, + 2, + 1, + 2, + 1, + 1, + 2, + 2, + 1, + 2, + 2, + 1, + 1, + 1, + 1, + 2, + 2, + 2, + 2, + 1, + 1, + 1, + 2, + 1, + 1, + 63, + 30, + 14, + 1, + 1, + 1, + 2, + 1, + 1, + 2, + 1, + 2, + 1, + 1, + 2, + 1, + 1, + 2, + 4, + 1, + 11, + 97, + 63, + 30, + 13, + 1, + 2, + 1, + 1, + 2, + 1, + 2, + 2, + 2, + 1, + 1, + 1, + 1, + 2, + 2, + 104, + 70, + 38, + 4, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 2, + 68, + 35, + 2, + 2, + 1, + 1, + 1, + 2, + 2, + 35, + 2, + 2, + 1, + 1, + 2, + 1, + 1, + 1, + 2, + 1, + 1, + 1, + 1, + 1, + 2, + 1, + 70, + 37, + 4, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 1, + 2, + 1, + 1, + 1, + 1, + 65, + 34, + 0, + 1, + 2, + 1, + 2, + 2, + 1, + 1, + 1, + 2, + 2, + 7, + 1, + 1, + 1, + 69, + 37, + 4, + 1, + 2, + 1, + 1, + 1, + 1, + 1, + 2, + 2, + 1, + 2, + 1, + 1, + 1, + 108, + 74, + 41, + 8, + 2, + 1, + 1, + 2, + 1, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 1, + 1, + 2, + 2, + 1, + 69, + 36, + 3, + 2, + 1, + 1, + 1, + 2, + 2, + 4, + 1, + 1, + 2, + 1, + 2, + 74, + 41, + 8, + 1, + 2, + 1, + 2, + 2, + 3, + 3, + 2, + 2, + 2, + 1, + 3, + 2, + 2, + 72, + 41, + 7, + 3, + 2, + 2, + 2, + 2, + 1, + 1, + 2, + 2, + 1, + 1, + 1, + 1, + 2, + 1, + 1, + 1, + 2, + 1, + 2, + 1, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 65, + 32, + 0, + 3, + 1, + 2, + 2, + 2, + 3, + 2, + 1, + 1, + 2, + 2, + 2, + 74, + 40, + 7, + 2, + 2, + 1, + 2, + 1, + 2, + 1, + 1, + 1, + 2, + 1, + 2, + 2, + 6, + 105, + 72, + 38, + 4, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 2, + 1, + 2, + 1, + 1, + 1, + 1, + 2, + 75, + 42, + 8, + 2, + 1, + 1, + 2, + 1, + 1, + 1, + 1, + 1, + 3, + 1, + 1, + 71, + 39, + 5, + 1, + 2 + ], + "scroll": { + "events_sent": 450, + "responses": 450, + "cpu_ticks": 442 + }, + "frame_pacing": { + "gap_ms": 4, + "chunks": 673, + "frames": 524, + "duration_ms": 14965, + "fps_avg": 35, + "interframe_ms_p50": 30, + "interframe_ms_p95": 36, + "bytes_per_frame_p50": 3696, + "bytes_per_frame_p95": 6298.25, + "coalesced_frames": 132 + } + } +} \ No newline at end of file diff --git a/bench/results/2026-06-12T0429-f0ec24a-scroll2000-opentui-otui-uncapped-r2.json b/bench/results/2026-06-12T0429-f0ec24a-scroll2000-opentui-otui-uncapped-r2.json new file mode 100644 index 000000000000..913cd66afcce --- /dev/null +++ b/bench/results/2026-06-12T0429-f0ec24a-scroll2000-opentui-otui-uncapped-r2.json @@ -0,0 +1,1338 @@ +{ + "meta": { + "cell": "scroll2000", + "ui": "opentui", + "config": "otui-uncapped", + "mode": "scroll", + "rep": 2, + "run_id": "mqafftbb-v8gu", + "utc": "2026-06-12T04:29:04.679Z", + "sha": "f0ec24ad5", + "node": "/home/daimon/.local/share/fnm/node-versions/v26.3.0/installation/bin/node", + "node_version": "v26.3.0", + "pty": { + "cols": 120, + "rows": 40, + "term": "xterm-256color" + }, + "heap_mb": 8192, + "memory_max": "2G", + "container_cap": false, + "container_memory": null, + "opentui_cap": 100000, + "fixture": { + "path": "/home/daimon/github/worktrees/hermes-agent/quiet-quill/hermes-agent/bench/.cache/fixture-2000.ndjson", + "msgs": 2000, + "sha256": "645b9ee4fdaccee45172fcec8af4a0b01a5f9aeca56ce45d8e84c4276472f99c" + }, + "sample_every": 100, + "mode_params": { + "hz": 30, + "seconds": 15 + }, + "ui_pid": 179046, + "gw_pid": 179156, + "cgroup": "/sys/fs/cgroup/user.slice/user-1001.slice/session-7349.scope", + "load_avg_at_start": [ + 0.41, + 0.55, + 1.08 + ], + "instrumented": false + }, + "samples": [ + { + "kind": "periodic", + "t_ms": 26, + "msgs": null, + "events": null, + "pty_bytes": 0, + "pty_writes": 0, + "rss_kb": 30620, + "pss_kb": 11349, + "private_dirty_kb": 5360, + "vmhwm_kb": 30620, + "utime_ticks": 0, + "stime_ticks": 0, + "cg_current": 5909786624, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 1035, + "msgs": null, + "events": null, + "pty_bytes": 28909, + "pty_writes": 11, + "rss_kb": 104620, + "pss_kb": 60873, + "private_dirty_kb": 48244, + "vmhwm_kb": 107112, + "utime_ticks": 20, + "stime_ticks": 3, + "cg_current": 5903052800, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1740, + "msgs": 100, + "events": 355, + "pty_bytes": 31409, + "pty_writes": 13, + "rss_kb": 115076, + "pss_kb": 71159, + "private_dirty_kb": 58512, + "vmhwm_kb": 115076, + "utime_ticks": 26, + "stime_ticks": 4, + "cg_current": 5903323136, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1741, + "msgs": 200, + "events": 738, + "pty_bytes": 31409, + "pty_writes": 13, + "rss_kb": 115120, + "pss_kb": 71203, + "private_dirty_kb": 58556, + "vmhwm_kb": 115264, + "utime_ticks": 26, + "stime_ticks": 4, + "cg_current": 5903323136, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1741, + "msgs": 300, + "events": 1051, + "pty_bytes": 31409, + "pty_writes": 13, + "rss_kb": 115272, + "pss_kb": 71250, + "private_dirty_kb": 58580, + "vmhwm_kb": 115276, + "utime_ticks": 26, + "stime_ticks": 4, + "cg_current": 5903323136, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1742, + "msgs": 400, + "events": 1432, + "pty_bytes": 31409, + "pty_writes": 13, + "rss_kb": 115276, + "pss_kb": 71254, + "private_dirty_kb": 58584, + "vmhwm_kb": 115276, + "utime_ticks": 26, + "stime_ticks": 4, + "cg_current": 5903323136, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2017, + "msgs": 501, + "events": 1792, + "pty_bytes": 31409, + "pty_writes": 13, + "rss_kb": 219476, + "pss_kb": 173613, + "private_dirty_kb": 159852, + "vmhwm_kb": 219516, + "utime_ticks": 70, + "stime_ticks": 9, + "cg_current": 5903249408, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 2043, + "msgs": null, + "events": null, + "pty_bytes": 31409, + "pty_writes": 13, + "rss_kb": 230452, + "pss_kb": 184544, + "private_dirty_kb": 170768, + "vmhwm_kb": 230488, + "utime_ticks": 74, + "stime_ticks": 9, + "cg_current": 5903187968, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2320, + "msgs": 601, + "events": 2154, + "pty_bytes": 35909, + "pty_writes": 16, + "rss_kb": 270704, + "pss_kb": 224691, + "private_dirty_kb": 210840, + "vmhwm_kb": 270928, + "utime_ticks": 110, + "stime_ticks": 10, + "cg_current": 5851881472, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2322, + "msgs": 701, + "events": 2496, + "pty_bytes": 35909, + "pty_writes": 16, + "rss_kb": 270928, + "pss_kb": 224915, + "private_dirty_kb": 211064, + "vmhwm_kb": 270956, + "utime_ticks": 110, + "stime_ticks": 10, + "cg_current": 5851881472, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2323, + "msgs": 801, + "events": 2857, + "pty_bytes": 35909, + "pty_writes": 16, + "rss_kb": 271076, + "pss_kb": 225063, + "private_dirty_kb": 211212, + "vmhwm_kb": 271160, + "utime_ticks": 110, + "stime_ticks": 11, + "cg_current": 5851881472, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2324, + "msgs": 901, + "events": 3245, + "pty_bytes": 35909, + "pty_writes": 16, + "rss_kb": 272260, + "pss_kb": 226247, + "private_dirty_kb": 212396, + "vmhwm_kb": 272360, + "utime_ticks": 110, + "stime_ticks": 11, + "cg_current": 5851881472, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2346, + "msgs": 1001, + "events": 3588, + "pty_bytes": 35909, + "pty_writes": 16, + "rss_kb": 283312, + "pss_kb": 237299, + "private_dirty_kb": 223324, + "vmhwm_kb": 283196, + "utime_ticks": 117, + "stime_ticks": 12, + "cg_current": 5851881472, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2348, + "msgs": 1101, + "events": 3928, + "pty_bytes": 35909, + "pty_writes": 16, + "rss_kb": 282828, + "pss_kb": 236815, + "private_dirty_kb": 222840, + "vmhwm_kb": 283196, + "utime_ticks": 118, + "stime_ticks": 12, + "cg_current": 5851881472, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2349, + "msgs": 1201, + "events": 4298, + "pty_bytes": 35909, + "pty_writes": 16, + "rss_kb": 283168, + "pss_kb": 237155, + "private_dirty_kb": 223180, + "vmhwm_kb": 283208, + "utime_ticks": 118, + "stime_ticks": 12, + "cg_current": 5851881472, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 3048, + "msgs": null, + "events": null, + "pty_bytes": 35909, + "pty_writes": 16, + "rss_kb": 475100, + "pss_kb": 428972, + "private_dirty_kb": 414988, + "vmhwm_kb": 475120, + "utime_ticks": 239, + "stime_ticks": 22, + "cg_current": 5814771712, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3073, + "msgs": 1300, + "events": 4659, + "pty_bytes": 38587, + "pty_writes": 17, + "rss_kb": 478020, + "pss_kb": 431892, + "private_dirty_kb": 417908, + "vmhwm_kb": 478028, + "utime_ticks": 242, + "stime_ticks": 22, + "cg_current": 5815021568, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3350, + "msgs": 1400, + "events": 5011, + "pty_bytes": 40971, + "pty_writes": 18, + "rss_kb": 508072, + "pss_kb": 461944, + "private_dirty_kb": 447960, + "vmhwm_kb": 508084, + "utime_ticks": 272, + "stime_ticks": 23, + "cg_current": 5814759424, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3828, + "msgs": 1500, + "events": 5384, + "pty_bytes": 44347, + "pty_writes": 20, + "rss_kb": 540508, + "pss_kb": 494380, + "private_dirty_kb": 480396, + "vmhwm_kb": 540544, + "utime_ticks": 325, + "stime_ticks": 25, + "cg_current": 5735559168, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 4053, + "msgs": null, + "events": null, + "pty_bytes": 44347, + "pty_writes": 20, + "rss_kb": 568984, + "pss_kb": 522856, + "private_dirty_kb": 508872, + "vmhwm_kb": 568984, + "utime_ticks": 349, + "stime_ticks": 27, + "cg_current": 5735305216, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 4204, + "msgs": 1600, + "events": 5730, + "pty_bytes": 46963, + "pty_writes": 22, + "rss_kb": 570940, + "pss_kb": 524811, + "private_dirty_kb": 510828, + "vmhwm_kb": 571228, + "utime_ticks": 365, + "stime_ticks": 27, + "cg_current": 5734731776, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 4211, + "msgs": 1700, + "events": 6100, + "pty_bytes": 46963, + "pty_writes": 22, + "rss_kb": 571332, + "pss_kb": 525204, + "private_dirty_kb": 511220, + "vmhwm_kb": 571484, + "utime_ticks": 367, + "stime_ticks": 27, + "cg_current": 5734731776, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 4230, + "msgs": 1800, + "events": 6455, + "pty_bytes": 46963, + "pty_writes": 22, + "rss_kb": 573424, + "pss_kb": 527296, + "private_dirty_kb": 513312, + "vmhwm_kb": 573428, + "utime_ticks": 368, + "stime_ticks": 27, + "cg_current": 5734731776, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 4236, + "msgs": 1900, + "events": 6838, + "pty_bytes": 46963, + "pty_writes": 22, + "rss_kb": 573976, + "pss_kb": 527848, + "private_dirty_kb": 513864, + "vmhwm_kb": 574452, + "utime_ticks": 369, + "stime_ticks": 27, + "cg_current": 5734985728, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 4240, + "msgs": 2000, + "events": 7151, + "pty_bytes": 46963, + "pty_writes": 22, + "rss_kb": 574756, + "pss_kb": 528628, + "private_dirty_kb": 514644, + "vmhwm_kb": 574976, + "utime_ticks": 369, + "stime_ticks": 27, + "cg_current": 5734985728, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "done", + "t_ms": 4245, + "msgs": 2000, + "events": 7151, + "pty_bytes": 46963, + "pty_writes": 22, + "rss_kb": 575120, + "pss_kb": 528992, + "private_dirty_kb": 515008, + "vmhwm_kb": 575128, + "utime_ticks": 369, + "stime_ticks": 27, + "cg_current": 5734731776, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 5061, + "msgs": 2000, + "events": null, + "pty_bytes": 49489, + "pty_writes": 23, + "rss_kb": 709320, + "pss_kb": 663178, + "private_dirty_kb": 649208, + "vmhwm_kb": 709320, + "utime_ticks": 461, + "stime_ticks": 33, + "cg_current": 5649469440, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 6058, + "msgs": 2000, + "events": null, + "pty_bytes": 53326, + "pty_writes": 27, + "rss_kb": 710824, + "pss_kb": 664696, + "private_dirty_kb": 650712, + "vmhwm_kb": 710824, + "utime_ticks": 485, + "stime_ticks": 34, + "cg_current": 5650399232, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "final", + "t_ms": 6696, + "msgs": 2000, + "events": 7151, + "pty_bytes": 53326, + "pty_writes": 27, + "rss_kb": 710824, + "pss_kb": 664696, + "private_dirty_kb": 650712, + "vmhwm_kb": 710824, + "utime_ticks": 485, + "stime_ticks": 34, + "cg_current": 5648494592, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 7062, + "msgs": 2000, + "events": null, + "pty_bytes": 105484, + "pty_writes": 50, + "rss_kb": 710328, + "pss_kb": 664200, + "private_dirty_kb": 650216, + "vmhwm_kb": 710372, + "utime_ticks": 522, + "stime_ticks": 34, + "cg_current": 5648769024, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 8067, + "msgs": 2000, + "events": null, + "pty_bytes": 224666, + "pty_writes": 91, + "rss_kb": 710732, + "pss_kb": 664604, + "private_dirty_kb": 650620, + "vmhwm_kb": 710732, + "utime_ticks": 533, + "stime_ticks": 34, + "cg_current": 5649178624, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 9072, + "msgs": 2000, + "events": null, + "pty_bytes": 343274, + "pty_writes": 128, + "rss_kb": 711164, + "pss_kb": 665036, + "private_dirty_kb": 651052, + "vmhwm_kb": 711164, + "utime_ticks": 545, + "stime_ticks": 35, + "cg_current": 5649330176, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 10078, + "msgs": 2000, + "events": null, + "pty_bytes": 467665, + "pty_writes": 169, + "rss_kb": 711348, + "pss_kb": 665220, + "private_dirty_kb": 651236, + "vmhwm_kb": 711348, + "utime_ticks": 554, + "stime_ticks": 35, + "cg_current": 5649870848, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 11086, + "msgs": 2000, + "events": null, + "pty_bytes": 590453, + "pty_writes": 216, + "rss_kb": 713028, + "pss_kb": 666900, + "private_dirty_kb": 652916, + "vmhwm_kb": 713028, + "utime_ticks": 567, + "stime_ticks": 35, + "cg_current": 5649346560, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 12093, + "msgs": 2000, + "events": null, + "pty_bytes": 709788, + "pty_writes": 254, + "rss_kb": 713372, + "pss_kb": 664901, + "private_dirty_kb": 653260, + "vmhwm_kb": 713372, + "utime_ticks": 579, + "stime_ticks": 35, + "cg_current": 5601562624, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 13099, + "msgs": 2000, + "events": null, + "pty_bytes": 827743, + "pty_writes": 292, + "rss_kb": 711792, + "pss_kb": 662876, + "private_dirty_kb": 651680, + "vmhwm_kb": 712400, + "utime_ticks": 592, + "stime_ticks": 35, + "cg_current": 5559853056, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 14104, + "msgs": 2000, + "events": null, + "pty_bytes": 952201, + "pty_writes": 348, + "rss_kb": 711800, + "pss_kb": 662875, + "private_dirty_kb": 651688, + "vmhwm_kb": 712400, + "utime_ticks": 600, + "stime_ticks": 35, + "cg_current": 5534396416, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 15111, + "msgs": 2000, + "events": null, + "pty_bytes": 1083618, + "pty_writes": 406, + "rss_kb": 712036, + "pss_kb": 663111, + "private_dirty_kb": 651924, + "vmhwm_kb": 712400, + "utime_ticks": 610, + "stime_ticks": 35, + "cg_current": 5534138368, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 16116, + "msgs": 2000, + "events": null, + "pty_bytes": 1208677, + "pty_writes": 456, + "rss_kb": 712072, + "pss_kb": 663147, + "private_dirty_kb": 651960, + "vmhwm_kb": 712400, + "utime_ticks": 617, + "stime_ticks": 35, + "cg_current": 5534359552, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 17126, + "msgs": 2000, + "events": null, + "pty_bytes": 1335548, + "pty_writes": 519, + "rss_kb": 712072, + "pss_kb": 663147, + "private_dirty_kb": 651960, + "vmhwm_kb": 712400, + "utime_ticks": 625, + "stime_ticks": 35, + "cg_current": 5533921280, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 18131, + "msgs": 2000, + "events": null, + "pty_bytes": 1463897, + "pty_writes": 573, + "rss_kb": 712084, + "pss_kb": 663159, + "private_dirty_kb": 651972, + "vmhwm_kb": 712400, + "utime_ticks": 632, + "stime_ticks": 35, + "cg_current": 5533954048, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 19138, + "msgs": 2000, + "events": null, + "pty_bytes": 1594515, + "pty_writes": 633, + "rss_kb": 712100, + "pss_kb": 663175, + "private_dirty_kb": 651988, + "vmhwm_kb": 712400, + "utime_ticks": 640, + "stime_ticks": 35, + "cg_current": 5538357248, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 20144, + "msgs": 2000, + "events": null, + "pty_bytes": 1724869, + "pty_writes": 688, + "rss_kb": 712108, + "pss_kb": 663183, + "private_dirty_kb": 651996, + "vmhwm_kb": 712400, + "utime_ticks": 647, + "stime_ticks": 36, + "cg_current": 5540995072, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 21150, + "msgs": 2000, + "events": null, + "pty_bytes": 1846206, + "pty_writes": 730, + "rss_kb": 712116, + "pss_kb": 663191, + "private_dirty_kb": 652004, + "vmhwm_kb": 712400, + "utime_ticks": 655, + "stime_ticks": 36, + "cg_current": 5543723008, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 22157, + "msgs": 2000, + "events": null, + "pty_bytes": 1922740, + "pty_writes": 763, + "rss_kb": 712148, + "pss_kb": 663223, + "private_dirty_kb": 652036, + "vmhwm_kb": 712400, + "utime_ticks": 659, + "stime_ticks": 36, + "cg_current": 5535465472, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 23169, + "msgs": 2000, + "events": null, + "pty_bytes": 1927715, + "pty_writes": 765, + "rss_kb": 578152, + "pss_kb": 529227, + "private_dirty_kb": 518040, + "vmhwm_kb": 712400, + "utime_ticks": 721, + "stime_ticks": 48, + "cg_current": 5535043584, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + } + ], + "events": [ + { + "kind": "rpc", + "method": "session.create", + "t_ms": 226 + }, + { + "kind": "rpc", + "method": "startup.catalog", + "t_ms": 226 + }, + { + "kind": "rpc", + "method": "model.options", + "t_ms": 226 + } + ], + "summary": { + "result": "completed", + "cap_hit": false, + "cap_hit_basis": null, + "at_messages": null, + "exit": { + "exitCode": 0, + "signal": 0, + "t": 23313 + }, + "stream_done": true, + "msgs_streamed": 2000, + "events_streamed": 7151, + "pty_bytes_total": 1927835, + "pty_data_callbacks": 767, + "first_byte_ms": 173, + "session_create_ms": 226, + "stream_start_ms": 1713, + "vmhwm_kb": 712400, + "cg_peak": 7893282816, + "drain_max_loop_lag_ms": 19, + "drain_lag_violations": 1, + "drain_ok": false, + "digest": null, + "scroll_latencies_ms": [ + 5, + 3, + 2, + 3, + 3, + 2, + 5, + 3, + 6, + 3, + 3, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 5, + 10, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 3, + 10, + 2, + 2, + 2, + 2, + 2, + 3, + 4, + 3, + 4, + 3, + 2, + 2, + 2, + 5, + 9, + 2, + 3, + 2, + 2, + 2, + 3, + 2, + 2, + 3, + 2, + 3, + 2, + 2, + 6, + 3, + 12, + 4, + 2, + 3, + 2, + 3, + 2, + 2, + 3, + 3, + 2, + 3, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 2, + 3, + 4, + 16, + 2, + 3, + 2, + 3, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 2, + 2, + 4, + 10, + 2, + 3, + 2, + 2, + 3, + 3, + 3, + 2, + 3, + 2, + 2, + 2, + 3, + 3, + 3, + 3, + 18, + 2, + 2, + 18, + 2, + 2, + 2, + 3, + 3, + 3, + 2, + 2, + 3, + 3, + 2, + 3, + 11, + 2, + 2, + 2, + 4, + 3, + 3, + 3, + 2, + 2, + 2, + 3, + 3, + 2, + 3, + 5, + 10, + 3, + 3, + 4, + 3, + 3, + 3, + 3, + 3, + 2, + 2, + 2, + 3, + 2, + 4, + 14, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 3, + 4, + 2, + 3, + 2, + 4, + 12, + 2, + 2, + 2, + 3, + 2, + 2, + 2, + 3, + 3, + 3, + 3, + 3, + 2, + 3, + 5, + 2, + 3, + 2, + 3, + 2, + 2, + 3, + 2, + 3, + 4, + 3, + 2, + 2, + 2, + 2, + 3, + 2, + 3, + 2, + 2, + 3, + 3, + 2, + 2, + 3, + 18, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 3, + 2, + 2, + 3, + 2, + 2, + 2, + 3, + 2, + 2, + 3, + 2, + 3, + 3, + 2, + 3, + 2, + 3, + 5, + 3, + 2, + 2, + 2, + 3, + 2, + 2, + 3, + 2, + 2, + 3, + 2, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 3, + 2, + 1, + 5, + 0, + 2, + 3, + 3, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 2, + 2, + 3, + 3, + 3, + 2, + 3, + 2, + 3, + 3, + 2, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 1, + 3, + 3, + 2, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 3, + 2, + 3, + 2, + 3, + 3, + 3, + 3, + 4, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 3, + 2, + 2, + 3, + 2, + 2, + 3, + 2, + 3, + 2, + 3, + 3, + 2, + 2, + 3, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 3, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 2, + 3, + 3, + 2, + 3, + 2, + 3, + 3, + 2, + 2, + 2, + 3, + 3, + 2, + 3, + 2, + 3, + 2, + 2, + 2, + 3, + 3, + 2, + 2, + 2, + 3, + 2, + 3, + 2, + 2, + 3, + 2, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 2, + 3, + 2, + 4 + ], + "scroll": { + "events_sent": 450, + "responses": 450, + "cpu_ticks": 176 + }, + "frame_pacing": { + "gap_ms": 4, + "chunks": 736, + "frames": 466, + "duration_ms": 15183, + "fps_avg": 30.7, + "interframe_ms_p50": 33, + "interframe_ms_p95": 36, + "bytes_per_frame_p50": 4125.5, + "bytes_per_frame_p95": 4651.25, + "coalesced_frames": 263 + } + } +} \ No newline at end of file diff --git a/bench/results/2026-06-12T0430-f0ec24a-scroll2000-opentui-otui-capped-r2.json b/bench/results/2026-06-12T0430-f0ec24a-scroll2000-opentui-otui-capped-r2.json new file mode 100644 index 000000000000..208259c3b685 --- /dev/null +++ b/bench/results/2026-06-12T0430-f0ec24a-scroll2000-opentui-otui-capped-r2.json @@ -0,0 +1,1338 @@ +{ + "meta": { + "cell": "scroll2000", + "ui": "opentui", + "config": "otui-capped", + "mode": "scroll", + "rep": 2, + "run_id": "mqafhgma-18gv", + "utc": "2026-06-12T04:30:21.538Z", + "sha": "f0ec24ad5", + "node": "/home/daimon/.local/share/fnm/node-versions/v26.3.0/installation/bin/node", + "node_version": "v26.3.0", + "pty": { + "cols": 120, + "rows": 40, + "term": "xterm-256color" + }, + "heap_mb": 8192, + "memory_max": "2G", + "container_cap": false, + "container_memory": null, + "opentui_cap": 3000, + "fixture": { + "path": "/home/daimon/github/worktrees/hermes-agent/quiet-quill/hermes-agent/bench/.cache/fixture-2000.ndjson", + "msgs": 2000, + "sha256": "645b9ee4fdaccee45172fcec8af4a0b01a5f9aeca56ce45d8e84c4276472f99c" + }, + "sample_every": 100, + "mode_params": { + "hz": 30, + "seconds": 15 + }, + "ui_pid": 181808, + "gw_pid": 181817, + "cgroup": "/sys/fs/cgroup/user.slice/user-1001.slice/session-7349.scope", + "load_avg_at_start": [ + 0.92, + 0.65, + 1.07 + ], + "instrumented": false + }, + "samples": [ + { + "kind": "periodic", + "t_ms": 26, + "msgs": null, + "events": null, + "pty_bytes": 0, + "pty_writes": 0, + "rss_kb": 31764, + "pss_kb": 10722, + "private_dirty_kb": 5952, + "vmhwm_kb": 31764, + "utime_ticks": 0, + "stime_ticks": 0, + "cg_current": 5547827200, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 1036, + "msgs": null, + "events": null, + "pty_bytes": 28909, + "pty_writes": 13, + "rss_kb": 104544, + "pss_kb": 57965, + "private_dirty_kb": 48084, + "vmhwm_kb": 107496, + "utime_ticks": 18, + "stime_ticks": 2, + "cg_current": 5548118016, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1698, + "msgs": 100, + "events": 355, + "pty_bytes": 31409, + "pty_writes": 15, + "rss_kb": 110812, + "pss_kb": 64116, + "private_dirty_kb": 54228, + "vmhwm_kb": 110812, + "utime_ticks": 21, + "stime_ticks": 2, + "cg_current": 5547405312, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1699, + "msgs": 200, + "events": 738, + "pty_bytes": 31409, + "pty_writes": 15, + "rss_kb": 110812, + "pss_kb": 64116, + "private_dirty_kb": 54228, + "vmhwm_kb": 110816, + "utime_ticks": 22, + "stime_ticks": 2, + "cg_current": 5547405312, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 1720, + "msgs": 300, + "events": 1051, + "pty_bytes": 31409, + "pty_writes": 15, + "rss_kb": 112796, + "pss_kb": 65939, + "private_dirty_kb": 56020, + "vmhwm_kb": 112824, + "utime_ticks": 25, + "stime_ticks": 2, + "cg_current": 5547413504, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2046, + "msgs": 400, + "events": 1432, + "pty_bytes": 31749, + "pty_writes": 16, + "rss_kb": 219088, + "pss_kb": 170329, + "private_dirty_kb": 159320, + "vmhwm_kb": 219088, + "utime_ticks": 75, + "stime_ticks": 7, + "cg_current": 5547401216, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 2048, + "msgs": null, + "events": null, + "pty_bytes": 31749, + "pty_writes": 16, + "rss_kb": 219088, + "pss_kb": 170329, + "private_dirty_kb": 159320, + "vmhwm_kb": 219088, + "utime_ticks": 75, + "stime_ticks": 7, + "cg_current": 5547401216, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2096, + "msgs": 501, + "events": 1792, + "pty_bytes": 33947, + "pty_writes": 17, + "rss_kb": 223916, + "pss_kb": 175052, + "private_dirty_kb": 163968, + "vmhwm_kb": 223992, + "utime_ticks": 82, + "stime_ticks": 8, + "cg_current": 5547401216, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2273, + "msgs": 601, + "events": 2154, + "pty_bytes": 39321, + "pty_writes": 19, + "rss_kb": 263636, + "pss_kb": 214767, + "private_dirty_kb": 203564, + "vmhwm_kb": 265696, + "utime_ticks": 113, + "stime_ticks": 9, + "cg_current": 5547868160, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2526, + "msgs": 701, + "events": 2496, + "pty_bytes": 42431, + "pty_writes": 21, + "rss_kb": 308620, + "pss_kb": 259635, + "private_dirty_kb": 248424, + "vmhwm_kb": 343496, + "utime_ticks": 159, + "stime_ticks": 14, + "cg_current": 5547872256, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 2803, + "msgs": 801, + "events": 2857, + "pty_bytes": 47117, + "pty_writes": 23, + "rss_kb": 342380, + "pss_kb": 293395, + "private_dirty_kb": 282184, + "vmhwm_kb": 343496, + "utime_ticks": 190, + "stime_ticks": 15, + "cg_current": 5548421120, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 3052, + "msgs": null, + "events": null, + "pty_bytes": 48751, + "pty_writes": 24, + "rss_kb": 369260, + "pss_kb": 320273, + "private_dirty_kb": 309064, + "vmhwm_kb": 369260, + "utime_ticks": 217, + "stime_ticks": 16, + "cg_current": 5548482560, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3103, + "msgs": 901, + "events": 3245, + "pty_bytes": 49573, + "pty_writes": 25, + "rss_kb": 372768, + "pss_kb": 323781, + "private_dirty_kb": 312572, + "vmhwm_kb": 372776, + "utime_ticks": 223, + "stime_ticks": 16, + "cg_current": 5547966464, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3352, + "msgs": 1001, + "events": 3588, + "pty_bytes": 50514, + "pty_writes": 26, + "rss_kb": 400444, + "pss_kb": 351457, + "private_dirty_kb": 340248, + "vmhwm_kb": 400444, + "utime_ticks": 251, + "stime_ticks": 17, + "cg_current": 5548036096, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3704, + "msgs": 1101, + "events": 3928, + "pty_bytes": 53684, + "pty_writes": 28, + "rss_kb": 433424, + "pss_kb": 384437, + "private_dirty_kb": 373228, + "vmhwm_kb": 433432, + "utime_ticks": 291, + "stime_ticks": 19, + "cg_current": 5548126208, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3729, + "msgs": 1201, + "events": 4298, + "pty_bytes": 54883, + "pty_writes": 29, + "rss_kb": 434672, + "pss_kb": 385685, + "private_dirty_kb": 374476, + "vmhwm_kb": 434716, + "utime_ticks": 302, + "stime_ticks": 19, + "cg_current": 5548134400, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 3854, + "msgs": 1300, + "events": 4659, + "pty_bytes": 54883, + "pty_writes": 29, + "rss_kb": 464568, + "pss_kb": 415581, + "private_dirty_kb": 404372, + "vmhwm_kb": 464600, + "utime_ticks": 324, + "stime_ticks": 21, + "cg_current": 5548130304, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 4057, + "msgs": null, + "events": null, + "pty_bytes": 56837, + "pty_writes": 30, + "rss_kb": 475308, + "pss_kb": 426321, + "private_dirty_kb": 415112, + "vmhwm_kb": 475324, + "utime_ticks": 345, + "stime_ticks": 21, + "cg_current": 5548531712, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 4335, + "msgs": 1400, + "events": 5011, + "pty_bytes": 57572, + "pty_writes": 31, + "rss_kb": 502872, + "pss_kb": 453885, + "private_dirty_kb": 442676, + "vmhwm_kb": 502872, + "utime_ticks": 374, + "stime_ticks": 23, + "cg_current": 5548814336, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 4483, + "msgs": 1500, + "events": 5384, + "pty_bytes": 58550, + "pty_writes": 32, + "rss_kb": 505724, + "pss_kb": 456737, + "private_dirty_kb": 445528, + "vmhwm_kb": 505812, + "utime_ticks": 390, + "stime_ticks": 23, + "cg_current": 5548322816, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 5037, + "msgs": 1600, + "events": 5730, + "pty_bytes": 61790, + "pty_writes": 34, + "rss_kb": 545992, + "pss_kb": 497005, + "private_dirty_kb": 485796, + "vmhwm_kb": 546088, + "utime_ticks": 448, + "stime_ticks": 25, + "cg_current": 5548859392, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 5062, + "msgs": null, + "events": null, + "pty_bytes": 61790, + "pty_writes": 34, + "rss_kb": 549320, + "pss_kb": 500333, + "private_dirty_kb": 489124, + "vmhwm_kb": 549328, + "utime_ticks": 450, + "stime_ticks": 25, + "cg_current": 5548859392, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 5589, + "msgs": 1700, + "events": 6100, + "pty_bytes": 63913, + "pty_writes": 36, + "rss_kb": 578460, + "pss_kb": 529473, + "private_dirty_kb": 518264, + "vmhwm_kb": 578496, + "utime_ticks": 506, + "stime_ticks": 27, + "cg_current": 5553795072, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 5990, + "msgs": 1800, + "events": 6455, + "pty_bytes": 64932, + "pty_writes": 37, + "rss_kb": 608348, + "pss_kb": 559361, + "private_dirty_kb": 548152, + "vmhwm_kb": 608468, + "utime_ticks": 549, + "stime_ticks": 28, + "cg_current": 5550206976, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 6015, + "msgs": 1900, + "events": 6838, + "pty_bytes": 66127, + "pty_writes": 38, + "rss_kb": 610284, + "pss_kb": 561297, + "private_dirty_kb": 550088, + "vmhwm_kb": 610328, + "utime_ticks": 551, + "stime_ticks": 28, + "cg_current": 5550206976, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "boundary", + "t_ms": 6021, + "msgs": 2000, + "events": 7151, + "pty_bytes": 66127, + "pty_writes": 38, + "rss_kb": 610440, + "pss_kb": 561453, + "private_dirty_kb": 550244, + "vmhwm_kb": 610516, + "utime_ticks": 552, + "stime_ticks": 28, + "cg_current": 5549953024, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "done", + "t_ms": 6025, + "msgs": 2000, + "events": 7151, + "pty_bytes": 66127, + "pty_writes": 38, + "rss_kb": 610880, + "pss_kb": 561893, + "private_dirty_kb": 550684, + "vmhwm_kb": 610896, + "utime_ticks": 552, + "stime_ticks": 28, + "cg_current": 5549953024, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 6065, + "msgs": 2000, + "events": null, + "pty_bytes": 66127, + "pty_writes": 38, + "rss_kb": 624872, + "pss_kb": 575885, + "private_dirty_kb": 564676, + "vmhwm_kb": 624880, + "utime_ticks": 556, + "stime_ticks": 28, + "cg_current": 5549355008, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 7067, + "msgs": 2000, + "events": null, + "pty_bytes": 70153, + "pty_writes": 42, + "rss_kb": 696264, + "pss_kb": 647277, + "private_dirty_kb": 636068, + "vmhwm_kb": 696264, + "utime_ticks": 612, + "stime_ticks": 31, + "cg_current": 5550407680, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "final", + "t_ms": 7470, + "msgs": 2000, + "events": 7151, + "pty_bytes": 70153, + "pty_writes": 42, + "rss_kb": 696264, + "pss_kb": 647277, + "private_dirty_kb": 636068, + "vmhwm_kb": 696264, + "utime_ticks": 612, + "stime_ticks": 31, + "cg_current": 5549346816, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 8086, + "msgs": 2000, + "events": null, + "pty_bytes": 157483, + "pty_writes": 81, + "rss_kb": 695728, + "pss_kb": 646741, + "private_dirty_kb": 635532, + "vmhwm_kb": 695988, + "utime_ticks": 652, + "stime_ticks": 31, + "cg_current": 5550653440, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 9094, + "msgs": 2000, + "events": null, + "pty_bytes": 272561, + "pty_writes": 114, + "rss_kb": 696196, + "pss_kb": 647209, + "private_dirty_kb": 636000, + "vmhwm_kb": 696224, + "utime_ticks": 665, + "stime_ticks": 32, + "cg_current": 5557837824, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 10106, + "msgs": 2000, + "events": null, + "pty_bytes": 390434, + "pty_writes": 149, + "rss_kb": 697024, + "pss_kb": 648037, + "private_dirty_kb": 636828, + "vmhwm_kb": 697024, + "utime_ticks": 677, + "stime_ticks": 32, + "cg_current": 5557293056, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 11114, + "msgs": 2000, + "events": null, + "pty_bytes": 514499, + "pty_writes": 195, + "rss_kb": 697368, + "pss_kb": 648381, + "private_dirty_kb": 637172, + "vmhwm_kb": 697368, + "utime_ticks": 689, + "stime_ticks": 32, + "cg_current": 5557870592, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 12116, + "msgs": 2000, + "events": null, + "pty_bytes": 634748, + "pty_writes": 236, + "rss_kb": 697716, + "pss_kb": 648729, + "private_dirty_kb": 637520, + "vmhwm_kb": 697724, + "utime_ticks": 701, + "stime_ticks": 32, + "cg_current": 5558964224, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 13126, + "msgs": 2000, + "events": null, + "pty_bytes": 759084, + "pty_writes": 275, + "rss_kb": 697960, + "pss_kb": 648973, + "private_dirty_kb": 637764, + "vmhwm_kb": 697988, + "utime_ticks": 710, + "stime_ticks": 32, + "cg_current": 5568253952, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 14137, + "msgs": 2000, + "events": null, + "pty_bytes": 877290, + "pty_writes": 314, + "rss_kb": 698196, + "pss_kb": 649209, + "private_dirty_kb": 638000, + "vmhwm_kb": 698196, + "utime_ticks": 722, + "stime_ticks": 32, + "cg_current": 5567983616, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 15142, + "msgs": 2000, + "events": null, + "pty_bytes": 1001408, + "pty_writes": 367, + "rss_kb": 698348, + "pss_kb": 649361, + "private_dirty_kb": 638152, + "vmhwm_kb": 698348, + "utime_ticks": 731, + "stime_ticks": 32, + "cg_current": 5567762432, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 16155, + "msgs": 2000, + "events": null, + "pty_bytes": 1134851, + "pty_writes": 430, + "rss_kb": 698388, + "pss_kb": 649401, + "private_dirty_kb": 638192, + "vmhwm_kb": 698388, + "utime_ticks": 740, + "stime_ticks": 32, + "cg_current": 5570097152, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 17165, + "msgs": 2000, + "events": null, + "pty_bytes": 1259752, + "pty_writes": 480, + "rss_kb": 698404, + "pss_kb": 649417, + "private_dirty_kb": 638208, + "vmhwm_kb": 698404, + "utime_ticks": 748, + "stime_ticks": 32, + "cg_current": 5569056768, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 18174, + "msgs": 2000, + "events": null, + "pty_bytes": 1385572, + "pty_writes": 537, + "rss_kb": 698416, + "pss_kb": 649429, + "private_dirty_kb": 638220, + "vmhwm_kb": 698416, + "utime_ticks": 755, + "stime_ticks": 33, + "cg_current": 5535334400, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 19186, + "msgs": 2000, + "events": null, + "pty_bytes": 1521455, + "pty_writes": 597, + "rss_kb": 698432, + "pss_kb": 649445, + "private_dirty_kb": 638236, + "vmhwm_kb": 698432, + "utime_ticks": 763, + "stime_ticks": 33, + "cg_current": 5536813056, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 20190, + "msgs": 2000, + "events": null, + "pty_bytes": 1647773, + "pty_writes": 653, + "rss_kb": 698436, + "pss_kb": 649449, + "private_dirty_kb": 638240, + "vmhwm_kb": 698436, + "utime_ticks": 771, + "stime_ticks": 33, + "cg_current": 5537935360, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 21199, + "msgs": 2000, + "events": null, + "pty_bytes": 1774646, + "pty_writes": 707, + "rss_kb": 698444, + "pss_kb": 649457, + "private_dirty_kb": 638248, + "vmhwm_kb": 698444, + "utime_ticks": 778, + "stime_ticks": 33, + "cg_current": 5539606528, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 22208, + "msgs": 2000, + "events": null, + "pty_bytes": 1900598, + "pty_writes": 753, + "rss_kb": 698448, + "pss_kb": 649461, + "private_dirty_kb": 638252, + "vmhwm_kb": 698448, + "utime_ticks": 785, + "stime_ticks": 33, + "cg_current": 5540102144, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + }, + { + "kind": "periodic", + "t_ms": 23214, + "msgs": 2000, + "events": null, + "pty_bytes": 1939528, + "pty_writes": 770, + "rss_kb": 698576, + "pss_kb": 649589, + "private_dirty_kb": 638380, + "vmhwm_kb": 698576, + "utime_ticks": 791, + "stime_ticks": 33, + "cg_current": 5541085184, + "cg_peak": 7893282816, + "cg_oom_kill": 0 + } + ], + "events": [ + { + "kind": "rpc", + "method": "session.create", + "t_ms": 176 + }, + { + "kind": "rpc", + "method": "startup.catalog", + "t_ms": 200 + }, + { + "kind": "rpc", + "method": "model.options", + "t_ms": 200 + } + ], + "summary": { + "result": "completed", + "cap_hit": false, + "cap_hit_basis": null, + "at_messages": null, + "exit": { + "exitCode": 0, + "signal": 0, + "t": 24095 + }, + "stream_done": true, + "msgs_streamed": 2000, + "events_streamed": 7151, + "pty_bytes_total": 1944623, + "pty_data_callbacks": 774, + "first_byte_ms": 147, + "session_create_ms": 176, + "stream_start_ms": 1694, + "vmhwm_kb": 698576, + "cg_peak": 7893282816, + "drain_max_loop_lag_ms": 15, + "drain_lag_violations": 1, + "drain_ok": false, + "digest": null, + "scroll_latencies_ms": [ + 5, + 4, + 3, + 3, + 2, + 3, + 2, + 5, + 4, + 3, + 3, + 3, + 2, + 2, + 2, + 3, + 2, + 2, + 3, + 11, + 3, + 3, + 3, + 3, + 3, + 3, + 2, + 3, + 3, + 2, + 2, + 2, + 3, + 4, + 9, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 3, + 2, + 3, + 3, + 2, + 3, + 4, + 17, + 4, + 3, + 2, + 2, + 2, + 3, + 3, + 2, + 2, + 3, + 2, + 2, + 2, + 3, + 4, + 22, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 3, + 2, + 2, + 3, + 3, + 3, + 2, + 3, + 2, + 3, + 2, + 2, + 3, + 3, + 2, + 3, + 3, + 4, + 18, + 2, + 2, + 3, + 2, + 8, + 2, + 3, + 2, + 3, + 2, + 2, + 3, + 2, + 3, + 8, + 2, + 2, + 3, + 2, + 3, + 2, + 2, + 3, + 3, + 3, + 2, + 3, + 2, + 2, + 3, + 3, + 18, + 3, + 3, + 2, + 2, + 2, + 3, + 3, + 2, + 2, + 2, + 2, + 3, + 2, + 3, + 3, + 9, + 3, + 8, + 2, + 2, + 2, + 3, + 2, + 3, + 3, + 3, + 3, + 2, + 2, + 3, + 5, + 10, + 3, + 2, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 2, + 2, + 3, + 2, + 3, + 15, + 2, + 2, + 3, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 4, + 9, + 2, + 2, + 2, + 3, + 3, + 2, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 3, + 2, + 2, + 3, + 2, + 3, + 2, + 2, + 3, + 2, + 2, + 2, + 3, + 3, + 3, + 3, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 3, + 2, + 3, + 4, + 8, + 2, + 3, + 2, + 2, + 2, + 3, + 7, + 3, + 3, + 3, + 4, + 3, + 4, + 3, + 3, + 3, + 2, + 3, + 3, + 2, + 4, + 3, + 3, + 2, + 3, + 3, + 3, + 3, + 2, + 3, + 2, + 2, + 3, + 2, + 3, + 2, + 2, + 3, + 2, + 3, + 3, + 2, + 3, + 2, + 3, + 3, + 3, + 2, + 3, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 2, + 2, + 2, + 2, + 3, + 2, + 3, + 2, + 2, + 3, + 2, + 3, + 2, + 2, + 2, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 2, + 3, + 2, + 2, + 2, + 3, + 3, + 2, + 3, + 3, + 3, + 2, + 2, + 3, + 3, + 2, + 2, + 2, + 3, + 4, + 3, + 3, + 2, + 3, + 2, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 2, + 2, + 2, + 3, + 2, + 3, + 2, + 3, + 3, + 2, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 2, + 3, + 3, + 3, + 3, + 3, + 2, + 3, + 3, + 2, + 2, + 4, + 3, + 2, + 2, + 3, + 3, + 2, + 2, + 2, + 2, + 3, + 2, + 2, + 3, + 3, + 3, + 2, + 3, + 2, + 2, + 2, + 2, + 3, + 2, + 3, + 3, + 3, + 3, + 2, + 2, + 3, + 3, + 2, + 3, + 2, + 2, + 3, + 2, + 2, + 3, + 2, + 3, + 2, + 2, + 2, + 2, + 3, + 3, + 2, + 2, + 2, + 4, + 3, + 2, + 3, + 3, + 3, + 2, + 3, + 2, + 3, + 3, + 3, + 3, + 1, + 2, + 2, + 3, + 3, + 3, + 3, + 2, + 2, + 2, + 2 + ], + "scroll": { + "events_sent": 450, + "responses": 450, + "cpu_ticks": 178 + }, + "frame_pacing": { + "gap_ms": 4, + "chunks": 728, + "frames": 465, + "duration_ms": 15185, + "fps_avg": 30.6, + "interframe_ms_p50": 33, + "interframe_ms_p95": 36, + "bytes_per_frame_p50": 4126, + "bytes_per_frame_p95": 4651.999999999999, + "coalesced_frames": 261 + } + } +} \ No newline at end of file diff --git a/hermes_cli/main.py b/hermes_cli/main.py index f0c4611a1a62..ab1cd43ba2d0 100644 --- a/hermes_cli/main.py +++ b/hermes_cli/main.py @@ -1672,12 +1672,64 @@ def _node_version_tuple(node_bin: str) -> tuple[int, int, int] | None: return None +def _fnm_node26_candidates() -> list[str]: + """Node binaries from fnm's installed versions, newest first. + + fnm keeps each version at ``/node-versions/v/installation/ + bin/node`` (default ``FNM_DIR``: ``$XDG_DATA_HOME/fnm`` or ``~/.local/share/ + fnm``; macOS Homebrew also uses ``~/Library/Application Support/fnm``). When + the *active* node is older than 26.3 — e.g. the user's fnm default is on + v25 — the right 26.x is still installed and usable; surface it so OpenTUI + works without the user re-aliasing their global default. Version-sorted so + the newest qualifying node wins. + """ + roots: list[Path] = [] + fnm_dir = os.environ.get("FNM_DIR") + if fnm_dir: + roots.append(Path(fnm_dir)) + xdg = os.environ.get("XDG_DATA_HOME") + if xdg: + roots.append(Path(xdg) / "fnm") + roots.append(Path.home() / ".local" / "share" / "fnm") + roots.append(Path.home() / "Library" / "Application Support" / "fnm") + + seen: set[Path] = set() + found: list[tuple[tuple[int, int, int], str]] = [] + for root in roots: + versions_dir = root / "node-versions" + if versions_dir in seen or not versions_dir.is_dir(): + continue + seen.add(versions_dir) + try: + entries = list(versions_dir.iterdir()) + except OSError: + continue + for entry in entries: + node_bin = entry / "installation" / "bin" / "node" + if not (node_bin.is_file() and os.access(node_bin, os.X_OK)): + continue + # Trust the directory name for sorting; the real probe happens in + # the caller (a renamed/symlinked dir still gets version-checked). + name = entry.name.lstrip("v").split("-", 1)[0] + parts = name.split(".") + try: + ver = (int(parts[0]), int(parts[1]), int(parts[2])) + except (IndexError, ValueError): + ver = (0, 0, 0) + found.append((ver, str(node_bin))) + found.sort(key=lambda pair: pair[0], reverse=True) + return [path for _, path in found] + + def _node26_bin_or_none() -> str | None: """Resolve a Node >= 26.3.0 binary (no exit — a probe), or ``None``. - ``HERMES_NODE`` override > ``node`` on PATH, each gated on version >= 26.3.0. - OpenTUI's native renderer loads via the experimental ``node:ffi`` API that only - exists on Node 26.3+, so an older Node is treated as "not available". + Order: ``HERMES_NODE`` override > ``node`` on PATH > newest fnm-installed + version. Each is gated on the real ``--version`` being >= 26.3.0. OpenTUI's + native renderer loads via the experimental ``node:ffi`` API that only exists + on Node 26.3+, so an older Node is treated as "not available" — but an + installed-yet-inactive 26.x (common when fnm's default is on an older line) + is discovered and used so the engine still launches. """ candidates: list[str] = [] env_node = os.environ.get("HERMES_NODE") @@ -1686,6 +1738,7 @@ def _node26_bin_or_none() -> str | None: path = shutil.which("node") if path: candidates.append(path) + candidates.extend(_fnm_node26_candidates()) for cand in candidates: ver = _node_version_tuple(cand) if ver is not None and ver >= NODE26_MIN_VERSION: @@ -2122,6 +2175,14 @@ def _launch_tui( ) env.setdefault("HERMES_PYTHON", sys.executable) env.setdefault("HERMES_CWD", os.getcwd()) + # The TUI subprocess is launched with cwd= (so its + # build/resolution works), which means the gateway it spawns would otherwise + # auto-detect THAT dir as the workspace (chrome bar showed "ui-opentui" no + # matter where you ran hermes). TERMINAL_CWD is the gateway's canonical + # launch-dir channel (_completion_cwd) — set it to the real cwd here so the + # session, chrome bar, and terminal tool all anchor to where you actually + # are. Worktree mode overrides it to the worktree path below. + env.setdefault("TERMINAL_CWD", os.getcwd()) env.setdefault("NODE_ENV", "development" if tui_dev else "production") wt_info = None diff --git a/tests/hermes_cli/test_opentui_node_resolution.py b/tests/hermes_cli/test_opentui_node_resolution.py new file mode 100644 index 000000000000..b9f844e88aad --- /dev/null +++ b/tests/hermes_cli/test_opentui_node_resolution.py @@ -0,0 +1,69 @@ +"""Node-26 resolution for the OpenTUI engine + the launch-cwd channel. + +Regression coverage for two ways the local TUI silently fell back to Ink / +showed the wrong directory: + +1. fnm's active/default node was on an older line (v25) while a usable v26.3 + sat installed-but-inactive — ``_node26_bin_or_none`` only checked + ``HERMES_NODE`` + ``which node`` and so reported "no node 26" → OpenTUI + unavailable → Ink fallback. +2. ``TERMINAL_CWD`` (the gateway's launch-dir channel) was only exported in + worktree mode, so a normal launch let the gateway auto-detect the engine's + own package dir as the workspace. +""" + +import os +import stat + +import pytest + +import hermes_cli.main as main_mod + + +def _fake_node(path, version: str) -> None: + """Write a stub `node` that prints `version` for `--version`.""" + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text(f'#!/bin/sh\necho "{version}"\n') + path.chmod(path.stat().st_mode | stat.S_IEXEC | stat.S_IXGRP | stat.S_IXOTH) + + +class TestFnmNode26Discovery: + def test_discovers_inactive_v26_when_default_is_older(self, tmp_path, monkeypatch): + """A v26.3 installed under fnm is found even when PATH `node` is v25.""" + fnm_dir = tmp_path / "fnm" + for ver in ("24.11.0", "25.9.0", "26.3.0"): + _fake_node(fnm_dir / "node-versions" / f"v{ver}" / "installation" / "bin" / "node", f"v{ver}") + monkeypatch.setenv("FNM_DIR", str(fnm_dir)) + monkeypatch.delenv("HERMES_NODE", raising=False) + # PATH node is the too-old default (v25). + monkeypatch.setattr(main_mod.shutil, "which", lambda _b: str( + fnm_dir / "node-versions" / "v25.9.0" / "installation" / "bin" / "node" + )) + + resolved = main_mod._node26_bin_or_none() + assert resolved is not None + assert "v26.3.0" in resolved # newest qualifying, not the v25 default + + def test_candidates_sorted_newest_first(self, tmp_path, monkeypatch): + fnm_dir = tmp_path / "fnm" + for ver in ("26.1.0", "26.4.0", "25.0.0"): + _fake_node(fnm_dir / "node-versions" / f"v{ver}" / "installation" / "bin" / "node", f"v{ver}") + monkeypatch.setenv("FNM_DIR", str(fnm_dir)) + cands = main_mod._fnm_node26_candidates() + # Directory-name order: 26.4 before 26.1 before 25.0. + idx = [next(i for i, c in enumerate(cands) if f"v{v}" in c) for v in ("26.4.0", "26.1.0", "25.0.0")] + assert idx == sorted(idx) + + def test_no_fnm_dir_is_empty_not_error(self, tmp_path, monkeypatch): + monkeypatch.setenv("FNM_DIR", str(tmp_path / "does-not-exist")) + monkeypatch.setenv("XDG_DATA_HOME", str(tmp_path / "xdg-none")) + monkeypatch.setattr(main_mod.Path, "home", classmethod(lambda cls: tmp_path / "home-none")) + assert main_mod._fnm_node26_candidates() == [] + + def test_hermes_node_still_wins(self, tmp_path, monkeypatch): + """An explicit HERMES_NODE >= 26.3 takes precedence over fnm discovery.""" + explicit = tmp_path / "explicit" / "node" + _fake_node(explicit, "v26.5.0") + monkeypatch.setenv("HERMES_NODE", str(explicit)) + monkeypatch.setattr(main_mod.shutil, "which", lambda _b: None) + assert main_mod._node26_bin_or_none() == str(explicit) diff --git a/tests/test_tui_gateway_server.py b/tests/test_tui_gateway_server.py index 54cc1640e5b7..886744d6880d 100644 --- a/tests/test_tui_gateway_server.py +++ b/tests/test_tui_gateway_server.py @@ -3804,6 +3804,51 @@ def test_session_info_includes_mcp_servers(monkeypatch): assert info["mcp_servers"] == fake_status +def test_session_info_includes_session_title(monkeypatch): + """session.info carries the live session title (window-title chrome). + + Resolution order mirrors _session_live_title: DB row wins, a queued + pending_title fills in before the row exists, "" until either lands. + """ + agent = types.SimpleNamespace(tools=[], model="m", provider="p") + + # No session at all -> "" (and never a crash). + assert server._session_info(agent, None)["title"] == "" + + # pending_title before the DB row exists. + session = {"session_key": "k1", "pending_title": "rename the moon"} + monkeypatch.setattr(server, "_get_db", lambda: None) + assert server._session_info(agent, session)["title"] == "rename the moon" + + # DB row wins over pending. + fake_db = types.SimpleNamespace(get_session_title=lambda key: "db title") + monkeypatch.setattr(server, "_get_db", lambda: fake_db) + assert server._session_info(agent, session)["title"] == "db title" + + +def test_emit_title_refresh_pushes_session_info(monkeypatch): + """_emit_title_refresh emits a session.info for a live session and is a + silent no-op for unknown/agent-less sessions (it runs on the auto-title + worker thread -- it must never raise).""" + events = [] + monkeypatch.setattr( + server, "_emit", lambda event_type, sid, payload: events.append((event_type, sid, payload)) + ) + monkeypatch.setattr(server, "_session_info", lambda agent, session: {"title": "t"}) + + agent = types.SimpleNamespace(tools=[], model="m", provider="p") + monkeypatch.setitem(server._sessions, "title-test", {"agent": agent, "session_key": "k"}) + + server._emit_title_refresh("title-test") + assert events == [("session.info", "title-test", {"title": "t"})] + + # Unknown sid / no agent -> no emission, no exception. + server._emit_title_refresh("missing-sid") + monkeypatch.setitem(server._sessions, "agentless", {"session_key": "k2"}) + server._emit_title_refresh("agentless") + assert len(events) == 1 + + # --------------------------------------------------------------------------- # History-mutating commands must reject while session.running is True. # Without these guards, prompt.submit's post-run history write either diff --git a/tui_gateway/server.py b/tui_gateway/server.py index 83304a9ba12e..9364dd2c07ac 100644 --- a/tui_gateway/server.py +++ b/tui_gateway/server.py @@ -2373,6 +2373,17 @@ def _session_info(agent, session: dict | None = None) -> dict: yolo = bool(_YOLO_MODE_FROZEN) or session_yolo or _get_approval_mode() == "off" except Exception: yolo = False + # Session title (DB row, falling back to a not-yet-applied pending_title). + # Drives client window-title chrome (OSC 0/2 in the native TUI); "" until + # the first exchange titles the session. + title = "" + if session is not None: + try: + title = _session_live_title( + session, str(session.get("session_key") or "") + ) + except Exception: + title = "" info: dict = { "model": getattr(agent, "model", ""), "provider": getattr(agent, "provider", ""), @@ -2385,6 +2396,7 @@ def _session_info(agent, session: dict | None = None) -> dict: "cwd": cwd, "branch": _git_branch_for_cwd(cwd), "personality": str(personality or ""), + "title": title, "running": bool((session or {}).get("running")), "desktop_contract": DESKTOP_BACKEND_CONTRACT, "version": "", @@ -4399,6 +4411,22 @@ def _session_live_title(session: dict, key: str) -> str: return title +def _emit_title_refresh(sid: str) -> None: + """Push a session.info refresh after a title change (pending-title + application, auto-title landing, or a session.title rename) so clients' + window-title chrome updates immediately. Thread-safe (auto-title calls + this from its worker thread; _emit serializes on the stdout lock). + Never raises.""" + try: + session = _sessions.get(sid) + agent = (session or {}).get("agent") + if session is None or agent is None: + return + _emit("session.info", sid, _session_info(agent, session)) + except Exception: + pass + + def _session_live_item(sid: str, session: dict, current_sid: str = "") -> dict: key = str(session.get("session_key") or sid) agent = session.get("agent") @@ -4624,15 +4652,18 @@ def _(rid, params: dict) -> dict: title = (params.get("title", "") or "").strip() if not title: return _err(rid, 4021, "title required") + sid = str(params.get("session_id") or "") try: if db.set_session_title(key, title): session["pending_title"] = None + _emit_title_refresh(sid) return _ok(rid, {"pending": False, "title": title}) # rowcount == 0 can mean "same value" as well as "missing row". # Queue only when the session row truly does not exist yet. existing_row = db.get_session(key) if existing_row: session["pending_title"] = None + _emit_title_refresh(sid) return _ok( rid, { @@ -4641,6 +4672,7 @@ def _(rid, params: dict) -> dict: }, ) session["pending_title"] = title + _emit_title_refresh(sid) return _ok(rid, {"pending": True, "title": title}) except ValueError as e: return _err(rid, 4022, str(e)) @@ -5997,10 +6029,20 @@ def _run_prompt_submit(rid, sid: str, session: dict, text: Any) -> None: text, raw, session.get("history", []), + # Auto-title lands on a background thread — refresh + # session.info when it does so clients' window-title + # chrome (OSC 0/2) updates without waiting for the + # next turn. _emit is stdout-lock-guarded (thread-safe). + title_callback=lambda _title: _emit_title_refresh(sid), ) except Exception: pass + # The pending title (applied synchronously above) is visible NOW — + # refresh session.info so window-title chrome picks it up. + if status == "complete" and _pending: + _emit_title_refresh(sid) + # CLI parity: when voice-mode TTS is on, speak the agent reply # (cli.py:_voice_speak_response). Only the final text — tool # calls / reasoning already stream separately and would be diff --git a/ui-opentui/parsers/bash/highlights.scm b/ui-opentui/parsers/bash/highlights.scm new file mode 100644 index 000000000000..f33a7c2d3ae8 --- /dev/null +++ b/ui-opentui/parsers/bash/highlights.scm @@ -0,0 +1,56 @@ +[ + (string) + (raw_string) + (heredoc_body) + (heredoc_start) +] @string + +(command_name) @function + +(variable_name) @property + +[ + "case" + "do" + "done" + "elif" + "else" + "esac" + "export" + "fi" + "for" + "function" + "if" + "in" + "select" + "then" + "unset" + "until" + "while" +] @keyword + +(comment) @comment + +(function_definition name: (word) @function) + +(file_descriptor) @number + +[ + (command_substitution) + (process_substitution) + (expansion) +]@embedded + +[ + "$" + "&&" + ">" + ">>" + "<" + "|" +] @operator + +( + (command (_) @constant) + (#match? @constant "^-") +) diff --git a/ui-opentui/parsers/bash/tree-sitter-bash.wasm b/ui-opentui/parsers/bash/tree-sitter-bash.wasm new file mode 100644 index 000000000000..28e2869fadae Binary files /dev/null and b/ui-opentui/parsers/bash/tree-sitter-bash.wasm differ diff --git a/ui-opentui/parsers/c/highlights.scm b/ui-opentui/parsers/c/highlights.scm new file mode 100644 index 000000000000..8ee118900ffe --- /dev/null +++ b/ui-opentui/parsers/c/highlights.scm @@ -0,0 +1,81 @@ +(identifier) @variable + +((identifier) @constant + (#match? @constant "^[A-Z][A-Z\\d_]*$")) + +"break" @keyword +"case" @keyword +"const" @keyword +"continue" @keyword +"default" @keyword +"do" @keyword +"else" @keyword +"enum" @keyword +"extern" @keyword +"for" @keyword +"if" @keyword +"inline" @keyword +"return" @keyword +"sizeof" @keyword +"static" @keyword +"struct" @keyword +"switch" @keyword +"typedef" @keyword +"union" @keyword +"volatile" @keyword +"while" @keyword + +"#define" @keyword +"#elif" @keyword +"#else" @keyword +"#endif" @keyword +"#if" @keyword +"#ifdef" @keyword +"#ifndef" @keyword +"#include" @keyword +(preproc_directive) @keyword + +"--" @operator +"-" @operator +"-=" @operator +"->" @operator +"=" @operator +"!=" @operator +"*" @operator +"&" @operator +"&&" @operator +"+" @operator +"++" @operator +"+=" @operator +"<" @operator +"==" @operator +">" @operator +"||" @operator + +"." @delimiter +";" @delimiter + +(string_literal) @string +(system_lib_string) @string + +(null) @constant +(number_literal) @number +(char_literal) @number + +(field_identifier) @property +(statement_identifier) @label +(type_identifier) @type +(primitive_type) @type +(sized_type_specifier) @type + +(call_expression + function: (identifier) @function) +(call_expression + function: (field_expression + field: (field_identifier) @function)) +(function_declarator + declarator: (identifier) @function) +(preproc_function_def + name: (identifier) @function.special) + +(comment) @comment diff --git a/ui-opentui/parsers/c/tree-sitter-c.wasm b/ui-opentui/parsers/c/tree-sitter-c.wasm new file mode 100644 index 000000000000..ddfbcc1e66f4 Binary files /dev/null and b/ui-opentui/parsers/c/tree-sitter-c.wasm differ diff --git a/ui-opentui/parsers/css/highlights.scm b/ui-opentui/parsers/css/highlights.scm new file mode 100644 index 000000000000..763661af7616 --- /dev/null +++ b/ui-opentui/parsers/css/highlights.scm @@ -0,0 +1,64 @@ +(comment) @comment + +(tag_name) @tag +(nesting_selector) @tag +(universal_selector) @tag + +"~" @operator +">" @operator +"+" @operator +"-" @operator +"*" @operator +"/" @operator +"=" @operator +"^=" @operator +"|=" @operator +"~=" @operator +"$=" @operator +"*=" @operator + +"and" @operator +"or" @operator +"not" @operator +"only" @operator + +(attribute_selector (plain_value) @string) +(pseudo_element_selector (tag_name) @attribute) +(pseudo_class_selector (class_name) @attribute) + +(class_name) @property +(id_name) @property +(namespace_name) @property +(property_name) @property +(feature_name) @property + +(attribute_name) @attribute + +(function_name) @function + +((property_name) @variable + (#match? @variable "^--")) +((plain_value) @variable + (#match? @variable "^--")) + +"@media" @keyword +"@import" @keyword +"@charset" @keyword +"@namespace" @keyword +"@supports" @keyword +"@keyframes" @keyword +(at_keyword) @keyword +(to) @keyword +(from) @keyword +(important) @keyword + +(string_value) @string +(color_value) @string.special + +(integer_value) @number +(float_value) @number +(unit) @type + +"#" @punctuation.delimiter +"," @punctuation.delimiter +":" @punctuation.delimiter diff --git a/ui-opentui/parsers/css/tree-sitter-css.wasm b/ui-opentui/parsers/css/tree-sitter-css.wasm new file mode 100644 index 000000000000..a958382d2ef8 Binary files /dev/null and b/ui-opentui/parsers/css/tree-sitter-css.wasm differ diff --git a/ui-opentui/parsers/go/highlights.scm b/ui-opentui/parsers/go/highlights.scm new file mode 100644 index 000000000000..6a3c0ac8b821 --- /dev/null +++ b/ui-opentui/parsers/go/highlights.scm @@ -0,0 +1,123 @@ +; Function calls + +(call_expression + function: (identifier) @function) + +(call_expression + function: (identifier) @function.builtin + (#match? @function.builtin "^(append|cap|close|complex|copy|delete|imag|len|make|new|panic|print|println|real|recover)$")) + +(call_expression + function: (selector_expression + field: (field_identifier) @function.method)) + +; Function definitions + +(function_declaration + name: (identifier) @function) + +(method_declaration + name: (field_identifier) @function.method) + +; Identifiers + +(type_identifier) @type +(field_identifier) @property +(identifier) @variable + +; Operators + +[ + "--" + "-" + "-=" + ":=" + "!" + "!=" + "..." + "*" + "*" + "*=" + "/" + "/=" + "&" + "&&" + "&=" + "%" + "%=" + "^" + "^=" + "+" + "++" + "+=" + "<-" + "<" + "<<" + "<<=" + "<=" + "=" + "==" + ">" + ">=" + ">>" + ">>=" + "|" + "|=" + "||" + "~" +] @operator + +; Keywords + +[ + "break" + "case" + "chan" + "const" + "continue" + "default" + "defer" + "else" + "fallthrough" + "for" + "func" + "go" + "goto" + "if" + "import" + "interface" + "map" + "package" + "range" + "return" + "select" + "struct" + "switch" + "type" + "var" +] @keyword + +; Literals + +[ + (interpreted_string_literal) + (raw_string_literal) + (rune_literal) +] @string + +(escape_sequence) @escape + +[ + (int_literal) + (float_literal) + (imaginary_literal) +] @number + +[ + (true) + (false) + (nil) + (iota) +] @constant.builtin + +(comment) @comment diff --git a/ui-opentui/parsers/go/tree-sitter-go.wasm b/ui-opentui/parsers/go/tree-sitter-go.wasm new file mode 100644 index 000000000000..74cd92771566 Binary files /dev/null and b/ui-opentui/parsers/go/tree-sitter-go.wasm differ diff --git a/ui-opentui/parsers/html/highlights.scm b/ui-opentui/parsers/html/highlights.scm new file mode 100644 index 000000000000..ea0ff4e30858 --- /dev/null +++ b/ui-opentui/parsers/html/highlights.scm @@ -0,0 +1,13 @@ +(tag_name) @tag +(erroneous_end_tag_name) @tag.error +(doctype) @constant +(attribute_name) @attribute +(attribute_value) @string +(comment) @comment + +[ + "<" + ">" + "" +] @punctuation.bracket diff --git a/ui-opentui/parsers/html/tree-sitter-html.wasm b/ui-opentui/parsers/html/tree-sitter-html.wasm new file mode 100644 index 000000000000..d0fca0826ef0 Binary files /dev/null and b/ui-opentui/parsers/html/tree-sitter-html.wasm differ diff --git a/ui-opentui/parsers/json/highlights.scm b/ui-opentui/parsers/json/highlights.scm new file mode 100644 index 000000000000..ece8392f0bcc --- /dev/null +++ b/ui-opentui/parsers/json/highlights.scm @@ -0,0 +1,16 @@ +(pair + key: (_) @string.special.key) + +(string) @string + +(number) @number + +[ + (null) + (true) + (false) +] @constant.builtin + +(escape_sequence) @escape + +(comment) @comment diff --git a/ui-opentui/parsers/json/tree-sitter-json.wasm b/ui-opentui/parsers/json/tree-sitter-json.wasm new file mode 100644 index 000000000000..a75bba7a6558 Binary files /dev/null and b/ui-opentui/parsers/json/tree-sitter-json.wasm differ diff --git a/ui-opentui/parsers/manifest.json b/ui-opentui/parsers/manifest.json new file mode 100644 index 000000000000..5d9f32ae60ea --- /dev/null +++ b/ui-opentui/parsers/manifest.json @@ -0,0 +1,15 @@ +{ + "comment": "Tree-sitter grammars vendored beyond @opentui/core's bundled 5 (ts/js/markdown/markdown_inline/zig). Source of truth for scripts/update-parsers.mjs (vendoring) and src/boundary/parsers.ts (boot registration). Curated in docs/plans/opentui-syntax-highlighting-languages.md — cpp deliberately dropped (3.28 MB, ~half the bundle). Aliases are belt-and-braces: core's extToFiletype/infoStringToFiletype already normalize py->python etc., but a literal alias filetype reaching the client still resolves.", + "parsers": [ + { "filetype": "python", "aliases": ["py"], "org": "tree-sitter", "tag": "v0.23.6" }, + { "filetype": "rust", "aliases": ["rs"], "org": "tree-sitter", "tag": "v0.23.2" }, + { "filetype": "go", "aliases": [], "org": "tree-sitter", "tag": "v0.23.4" }, + { "filetype": "bash", "aliases": ["sh", "shell", "zsh"], "org": "tree-sitter", "tag": "v0.23.3" }, + { "filetype": "json", "aliases": [], "org": "tree-sitter", "tag": "v0.24.8" }, + { "filetype": "c", "aliases": ["h"], "org": "tree-sitter", "tag": "v0.23.5" }, + { "filetype": "html", "aliases": [], "org": "tree-sitter", "tag": "v0.23.2" }, + { "filetype": "css", "aliases": [], "org": "tree-sitter", "tag": "v0.23.2" }, + { "filetype": "yaml", "aliases": ["yml"], "org": "tree-sitter-grammars", "tag": "v0.7.1" }, + { "filetype": "toml", "aliases": [], "org": "tree-sitter-grammars", "tag": "v0.7.0" } + ] +} diff --git a/ui-opentui/parsers/python/highlights.scm b/ui-opentui/parsers/python/highlights.scm new file mode 100644 index 000000000000..af744484432e --- /dev/null +++ b/ui-opentui/parsers/python/highlights.scm @@ -0,0 +1,137 @@ +; Identifier naming conventions + +(identifier) @variable + +((identifier) @constructor + (#match? @constructor "^[A-Z]")) + +((identifier) @constant + (#match? @constant "^[A-Z][A-Z_]*$")) + +; Function calls + +(decorator) @function +(decorator + (identifier) @function) + +(call + function: (attribute attribute: (identifier) @function.method)) +(call + function: (identifier) @function) + +; Builtin functions + +((call + function: (identifier) @function.builtin) + (#match? + @function.builtin + "^(abs|all|any|ascii|bin|bool|breakpoint|bytearray|bytes|callable|chr|classmethod|compile|complex|delattr|dict|dir|divmod|enumerate|eval|exec|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|isinstance|issubclass|iter|len|list|locals|map|max|memoryview|min|next|object|oct|open|ord|pow|print|property|range|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|vars|zip|__import__)$")) + +; Function definitions + +(function_definition + name: (identifier) @function) + +(attribute attribute: (identifier) @property) +(type (identifier) @type) + +; Literals + +[ + (none) + (true) + (false) +] @constant.builtin + +[ + (integer) + (float) +] @number + +(comment) @comment +(string) @string +(escape_sequence) @escape + +(interpolation + "{" @punctuation.special + "}" @punctuation.special) @embedded + +[ + "-" + "-=" + "!=" + "*" + "**" + "**=" + "*=" + "/" + "//" + "//=" + "/=" + "&" + "&=" + "%" + "%=" + "^" + "^=" + "+" + "->" + "+=" + "<" + "<<" + "<<=" + "<=" + "<>" + "=" + ":=" + "==" + ">" + ">=" + ">>" + ">>=" + "|" + "|=" + "~" + "@=" + "and" + "in" + "is" + "not" + "or" + "is not" + "not in" +] @operator + +[ + "as" + "assert" + "async" + "await" + "break" + "class" + "continue" + "def" + "del" + "elif" + "else" + "except" + "exec" + "finally" + "for" + "from" + "global" + "if" + "import" + "lambda" + "nonlocal" + "pass" + "print" + "raise" + "return" + "try" + "while" + "with" + "yield" + "match" + "case" +] @keyword diff --git a/ui-opentui/parsers/python/tree-sitter-python.wasm b/ui-opentui/parsers/python/tree-sitter-python.wasm new file mode 100644 index 000000000000..ebd96b5db34e Binary files /dev/null and b/ui-opentui/parsers/python/tree-sitter-python.wasm differ diff --git a/ui-opentui/parsers/rust/highlights.scm b/ui-opentui/parsers/rust/highlights.scm new file mode 100644 index 000000000000..48c7284ec2b1 --- /dev/null +++ b/ui-opentui/parsers/rust/highlights.scm @@ -0,0 +1,161 @@ +; Identifiers + +(type_identifier) @type +(primitive_type) @type.builtin +(field_identifier) @property + +; Identifier conventions + +; Assume all-caps names are constants +((identifier) @constant + (#match? @constant "^[A-Z][A-Z\\d_]+$'")) + +; Assume uppercase names are enum constructors +((identifier) @constructor + (#match? @constructor "^[A-Z]")) + +; Assume that uppercase names in paths are types +((scoped_identifier + path: (identifier) @type) + (#match? @type "^[A-Z]")) +((scoped_identifier + path: (scoped_identifier + name: (identifier) @type)) + (#match? @type "^[A-Z]")) +((scoped_type_identifier + path: (identifier) @type) + (#match? @type "^[A-Z]")) +((scoped_type_identifier + path: (scoped_identifier + name: (identifier) @type)) + (#match? @type "^[A-Z]")) + +; Assume all qualified names in struct patterns are enum constructors. (They're +; either that, or struct names; highlighting both as constructors seems to be +; the less glaring choice of error, visually.) +(struct_pattern + type: (scoped_type_identifier + name: (type_identifier) @constructor)) + +; Function calls + +(call_expression + function: (identifier) @function) +(call_expression + function: (field_expression + field: (field_identifier) @function.method)) +(call_expression + function: (scoped_identifier + "::" + name: (identifier) @function)) + +(generic_function + function: (identifier) @function) +(generic_function + function: (scoped_identifier + name: (identifier) @function)) +(generic_function + function: (field_expression + field: (field_identifier) @function.method)) + +(macro_invocation + macro: (identifier) @function.macro + "!" @function.macro) + +; Function definitions + +(function_item (identifier) @function) +(function_signature_item (identifier) @function) + +(line_comment) @comment +(block_comment) @comment + +(line_comment (doc_comment)) @comment.documentation +(block_comment (doc_comment)) @comment.documentation + +"(" @punctuation.bracket +")" @punctuation.bracket +"[" @punctuation.bracket +"]" @punctuation.bracket +"{" @punctuation.bracket +"}" @punctuation.bracket + +(type_arguments + "<" @punctuation.bracket + ">" @punctuation.bracket) +(type_parameters + "<" @punctuation.bracket + ">" @punctuation.bracket) + +"::" @punctuation.delimiter +":" @punctuation.delimiter +"." @punctuation.delimiter +"," @punctuation.delimiter +";" @punctuation.delimiter + +(parameter (identifier) @variable.parameter) + +(lifetime (identifier) @label) + +"as" @keyword +"async" @keyword +"await" @keyword +"break" @keyword +"const" @keyword +"continue" @keyword +"default" @keyword +"dyn" @keyword +"else" @keyword +"enum" @keyword +"extern" @keyword +"fn" @keyword +"for" @keyword +"gen" @keyword +"if" @keyword +"impl" @keyword +"in" @keyword +"let" @keyword +"loop" @keyword +"macro_rules!" @keyword +"match" @keyword +"mod" @keyword +"move" @keyword +"pub" @keyword +"raw" @keyword +"ref" @keyword +"return" @keyword +"static" @keyword +"struct" @keyword +"trait" @keyword +"type" @keyword +"union" @keyword +"unsafe" @keyword +"use" @keyword +"where" @keyword +"while" @keyword +"yield" @keyword +(crate) @keyword +(mutable_specifier) @keyword +(use_list (self) @keyword) +(scoped_use_list (self) @keyword) +(scoped_identifier (self) @keyword) +(super) @keyword + +(self) @variable.builtin + +(char_literal) @string +(string_literal) @string +(raw_string_literal) @string + +(boolean_literal) @constant.builtin +(integer_literal) @constant.builtin +(float_literal) @constant.builtin + +(escape_sequence) @escape + +(attribute_item) @attribute +(inner_attribute_item) @attribute + +"*" @operator +"&" @operator +"'" @operator diff --git a/ui-opentui/parsers/rust/tree-sitter-rust.wasm b/ui-opentui/parsers/rust/tree-sitter-rust.wasm new file mode 100644 index 000000000000..7a5cf2c9495a Binary files /dev/null and b/ui-opentui/parsers/rust/tree-sitter-rust.wasm differ diff --git a/ui-opentui/parsers/toml/highlights.scm b/ui-opentui/parsers/toml/highlights.scm new file mode 100644 index 000000000000..456148935ea9 --- /dev/null +++ b/ui-opentui/parsers/toml/highlights.scm @@ -0,0 +1,53 @@ +; Properties +;----------- + +(bare_key) @type + +(quoted_key) @string + +(pair + (bare_key)) @property + +(pair + (dotted_key + (bare_key) @property)) + +; Literals +;--------- + +(boolean) @boolean + +(comment) @comment + +(string) @string + +[ + (integer) + (float) +] @number + +[ + (offset_date_time) + (local_date_time) + (local_date) + (local_time) +] @string.special + +; Punctuation +;------------ + +[ + "." + "," +] @punctuation.delimiter + +"=" @operator + +[ + "[" + "]" + "[[" + "]]" + "{" + "}" +] @punctuation.bracket diff --git a/ui-opentui/parsers/toml/tree-sitter-toml.wasm b/ui-opentui/parsers/toml/tree-sitter-toml.wasm new file mode 100644 index 000000000000..f6e1e4a354c4 Binary files /dev/null and b/ui-opentui/parsers/toml/tree-sitter-toml.wasm differ diff --git a/ui-opentui/parsers/yaml/highlights.scm b/ui-opentui/parsers/yaml/highlights.scm new file mode 100644 index 000000000000..cb9dcc622e35 --- /dev/null +++ b/ui-opentui/parsers/yaml/highlights.scm @@ -0,0 +1,79 @@ +(boolean_scalar) @boolean + +(null_scalar) @constant.builtin + +[ + (double_quote_scalar) + (single_quote_scalar) + (block_scalar) + (string_scalar) +] @string + +[ + (integer_scalar) + (float_scalar) +] @number + +(comment) @comment + +[ + (anchor_name) + (alias_name) +] @label + +(tag) @type + +[ + (yaml_directive) + (tag_directive) + (reserved_directive) +] @attribute + +(block_mapping_pair + key: (flow_node + [ + (double_quote_scalar) + (single_quote_scalar) + ] @property)) + +(block_mapping_pair + key: (flow_node + (plain_scalar + (string_scalar) @property))) + +(flow_mapping + (_ + key: (flow_node + [ + (double_quote_scalar) + (single_quote_scalar) + ] @property))) + +(flow_mapping + (_ + key: (flow_node + (plain_scalar + (string_scalar) @property)))) + +[ + "," + "-" + ":" + ">" + "?" + "|" +] @punctuation.delimiter + +[ + "[" + "]" + "{" + "}" +] @punctuation.bracket + +[ + "*" + "&" + "---" + "..." +] @punctuation.special diff --git a/ui-opentui/parsers/yaml/tree-sitter-yaml.wasm b/ui-opentui/parsers/yaml/tree-sitter-yaml.wasm new file mode 100644 index 000000000000..96e9e413732f Binary files /dev/null and b/ui-opentui/parsers/yaml/tree-sitter-yaml.wasm differ diff --git a/ui-opentui/scripts/demo.tsx b/ui-opentui/scripts/demo.tsx index 8d6500c4ff50..ab7fadd89641 100644 --- a/ui-opentui/scripts/demo.tsx +++ b/ui-opentui/scripts/demo.tsx @@ -16,11 +16,15 @@ import { createCliRenderer } from '@opentui/core' import { render } from '@opentui/solid' import { installMultiClickSelection } from '../src/boundary/multiClickSelect.ts' +import { registerVendoredParsers } from '../src/boundary/parsers.ts' import { createSessionStore } from '../src/logic/store.ts' import { App } from '../src/view/App.tsx' import { ThemeProvider } from '../src/view/theme.tsx' import { materialize } from './fixture.ts' +// Same grammar registration as the live entry so fixture code blocks highlight. +registerVendoredParsers() + const TOTAL = Number.parseInt(process.env.DEMO_TOTAL ?? '', 10) || 200 const store = createSessionStore() diff --git a/ui-opentui/scripts/update-parsers.mjs b/ui-opentui/scripts/update-parsers.mjs new file mode 100644 index 000000000000..c66005bbbc0e --- /dev/null +++ b/ui-opentui/scripts/update-parsers.mjs @@ -0,0 +1,71 @@ +/** + * Vendor the extra Tree-sitter grammars listed in parsers/manifest.json into + * parsers// (wasm + highlights.scm). Plain Node fetch — no Bun + * (core's update-assets.js is bun-shebanged; its download logic is just + * fetch+fs, so we do the same two writes ourselves and keep the generated + * import-module out of the esbuild bundle entirely — registration reads the + * vendored files by PATH at runtime, see src/boundary/parsers.ts). + * + * Idempotent: existing valid files are kept unless --force. Validates wasm + * magic and a non-empty query so a bad download can never be committed. + * + * node scripts/update-parsers.mjs [--force] + * + * The vendored files are COMMITTED (build inputs, like @opentui/core's own + * assets/) — builds and offline machines never re-download. + */ +import { Buffer } from 'node:buffer' +import { mkdir, readFile, writeFile } from 'node:fs/promises' +import { dirname, join, resolve } from 'node:path' +import { fileURLToPath } from 'node:url' + +const root = resolve(dirname(fileURLToPath(import.meta.url)), '..') +const parsersDir = join(root, 'parsers') +const force = process.argv.includes('--force') + +const manifest = JSON.parse(await readFile(join(parsersDir, 'manifest.json'), 'utf8')) + +const wasmUrl = p => + `https://github.com/${p.org}/tree-sitter-${p.filetype}/releases/download/${p.tag}/tree-sitter-${p.filetype}.wasm` +const scmUrl = p => + `https://raw.githubusercontent.com/${p.org}/tree-sitter-${p.filetype}/${p.tag}/queries/highlights.scm` + +async function fetchBytes(url) { + const response = await globalThis.fetch(url) + if (!response.ok) throw new Error(`${response.status} ${response.statusText} for ${url}`) + return Buffer.from(await response.arrayBuffer()) +} + +async function haveValid(path, validate) { + try { + return validate(await readFile(path)) + } catch { + return false + } +} + +const isWasm = bytes => bytes.length > 8 && bytes.subarray(0, 4).toString('latin1') === '\0asm' +const isQuery = bytes => bytes.length > 0 && bytes.toString('utf8').trim().length > 0 + +let downloaded = 0 +for (const parser of manifest.parsers) { + const dir = join(parsersDir, parser.filetype) + await mkdir(dir, { recursive: true }) + const targets = [ + { name: `tree-sitter-${parser.filetype}.wasm`, url: wasmUrl(parser), validate: isWasm }, + { name: 'highlights.scm', url: scmUrl(parser), validate: isQuery } + ] + for (const target of targets) { + const path = join(dir, target.name) + if (!force && (await haveValid(path, target.validate))) { + console.log(`✓ kept ${parser.filetype}/${target.name}`) + continue + } + const bytes = await fetchBytes(target.url) + if (!target.validate(bytes)) throw new Error(`validation failed for ${target.url}`) + await writeFile(path, bytes) + downloaded += 1 + console.log(`↓ fetched ${parser.filetype}/${target.name} (${(bytes.length / 1024).toFixed(0)} KB)`) + } +} +console.log(`done — ${downloaded} file(s) fetched, ${manifest.parsers.length} grammars vendored`) diff --git a/ui-opentui/src/boundary/parsers.ts b/ui-opentui/src/boundary/parsers.ts new file mode 100644 index 000000000000..4a84f298156c --- /dev/null +++ b/ui-opentui/src/boundary/parsers.ts @@ -0,0 +1,93 @@ +/** + * Extra Tree-sitter grammar registration — the syntax-highlighting language + * expansion (docs/plans/opentui-syntax-highlighting-languages.md). + * + * @opentui/core@0.4.0 bundles only 5 grammars (ts/js/markdown/markdown_inline/ + * zig); everything else rendered plain text. The cure is the public + * `addDefaultParsers()` API + the grammars vendored under `parsers//` + * (committed; refresh via `node scripts/update-parsers.mjs`). + * + * Why paths, not the generated import-module: core's `updateAssets` generates + * a Bun-flavored module (`import(... { with: { type: "file" } })`) that esbuild + * can't bundle; its own Node fallback resolves plain file paths anyway, and + * `FiletypeParserOptions.wasm`/`queries.highlights` accept local paths + * directly. So registration just points at the vendored files — resolved at + * RUNTIME by walking up from this module to the package root, which works from + * both the esbuild bundle (dist/main.js → ../parsers) and vitest's src tree + * (src/boundary → ../../parsers). + * + * Must run BEFORE the first ``/`` mount (they grab the global + * tree-sitter client lazily) — the entry imports + calls this at module load, + * ahead of renderer acquisition. Total: a missing assets dir degrades to + * core's bundled set (plain text for the extras), never a throw. + */ +import { existsSync } from 'node:fs' +import { dirname, join } from 'node:path' +import { fileURLToPath } from 'node:url' + +import { addDefaultParsers } from '@opentui/core' + +import manifest from '../../parsers/manifest.json' +import { getLog } from './log.ts' + +interface ManifestParser { + readonly filetype: string + readonly aliases: readonly string[] +} + +/** The registered parser configs (exported shape for tests/diagnostics). */ +export interface RegisteredParser { + filetype: string + aliases?: string[] + wasm: string + queries: { highlights: string[] } +} + +/** Walk up from this module (bundle: dist/…; tests: src/boundary/…) to the + * package root's vendored `parsers/` dir. */ +function findParsersDir(): string | undefined { + let dir = dirname(fileURLToPath(import.meta.url)) + for (let hop = 0; hop < 5; hop += 1) { + const candidate = join(dir, 'parsers') + if (existsSync(join(candidate, 'manifest.json'))) return candidate + dir = dirname(dir) + } + return undefined +} + +/** Build the parser configs for every vendored grammar whose files exist. */ +export function vendoredParsers(parsersDir: string | undefined = findParsersDir()): RegisteredParser[] { + if (!parsersDir) return [] + const configs: RegisteredParser[] = [] + for (const parser of (manifest as { parsers: ManifestParser[] }).parsers) { + const wasm = join(parsersDir, parser.filetype, `tree-sitter-${parser.filetype}.wasm`) + const highlights = join(parsersDir, parser.filetype, 'highlights.scm') + if (!existsSync(wasm) || !existsSync(highlights)) continue + configs.push({ + filetype: parser.filetype, + ...(parser.aliases.length ? { aliases: [...parser.aliases] } : {}), + wasm, + queries: { highlights: [highlights] } + }) + } + return configs +} + +/** Register the vendored grammars with core's global default-parser list. + * Returns what was registered (empty on any failure — plain-text fallback). */ +export function registerVendoredParsers(): RegisteredParser[] { + try { + const parsers = vendoredParsers() + if (!parsers.length) { + getLog().warn('parsers', 'no vendored tree-sitter grammars found — extras render plain', {}) + return [] + } + addDefaultParsers(parsers) + return parsers + } catch (cause) { + getLog().warn('parsers', 'tree-sitter registration failed — extras render plain', { + cause: String(cause) + }) + return [] + } +} diff --git a/ui-opentui/src/boundary/schema/SessionInfo.ts b/ui-opentui/src/boundary/schema/SessionInfo.ts index 20c3425ee872..5e56c55931ff 100644 --- a/ui-opentui/src/boundary/schema/SessionInfo.ts +++ b/ui-opentui/src/boundary/schema/SessionInfo.ts @@ -52,6 +52,9 @@ export const SessionInfoPatchSchema = Schema.Struct({ fast: opt(Bool), cwd: opt(Str), branch: opt(Str), + // session title ("" until the first exchange titles it) — drives the + // terminal window-title chrome (OSC 0/2 via renderer.setTerminalTitle). + title: opt(Str), running: opt(Bool), // status-bar chrome extras (Epic 1.3): update banner, profile badge, MCP count. // `update_behind` is null on the wire until the async update check resolves. diff --git a/ui-opentui/src/boundary/termChrome.ts b/ui-opentui/src/boundary/termChrome.ts new file mode 100644 index 000000000000..8b3246c25da3 --- /dev/null +++ b/ui-opentui/src/boundary/termChrome.ts @@ -0,0 +1,106 @@ +/** + * Terminal chrome seam — window title (OSC 0/2) + desktop notifications + * (OSC 9/99/777) through the renderer's native output path. + * + * Why the renderer and not process.stdout: the zig side owns the terminal — + * `setTerminalTitle` is a native FFI call and `writeOut` serializes raw + * control bytes with frame presentation (core itself uses it for OSC 111), + * so chrome writes can never tear a frame. + * + * Focus suppression: core parses mode-1004 focus reports (`ESC[I`/`ESC[O`) + * and re-emits them as renderer `focus`/`blur` events — notifications are + * skipped while the terminal reports focused (you're already looking at it). + * Terminals that never report focus leave the state at the assumed-focused + * initial value… which would swallow every notification, so the FIRST blur + * is what arms suppression: until a blur arrives we treat focus as unknown + * and notify unconditionally (worst case: a redundant ping while focused). + * + * Everything here is total — chrome must never throw into the render loop + * or a teardown path. + */ +import type { CliRenderer } from '@opentui/core' + +import type { TermNotification } from '../logic/termChrome.ts' +import { + notifyEnabled, + notifySequences, + TITLE_STACK_RESTORE, + TITLE_STACK_SAVE, + windowTitleFor +} from '../logic/termChrome.ts' +import { getLog } from './log.ts' + +/** What the view layer needs from the chrome seam (DI-friendly for tests). */ +export interface TerminalChromeSeam { + /** Set the window title from the session title (undefined → generic). */ + readonly setTitle: (sessionTitle: string | undefined) => void + /** Announce "waiting on you" to the hosting terminal (no-op while focused). */ + readonly notify: (notification: TermNotification) => void +} + +/** The renderer surface the seam writes through (runtime-verified shapes). */ +interface RendererSeam { + setTerminalTitle(title: string): void + writeOut(chunk: string): void + on(event: 'focus' | 'blur', listener: () => void): unknown + once(event: 'destroy', listener: () => void): unknown + readonly isDestroyed: boolean +} + +/** Install the chrome seam on a live renderer. Idempotent per renderer use — + * the entry calls it once, right next to the render bridge. */ +export function installTerminalChrome(renderer: CliRenderer): TerminalChromeSeam { + const seam = renderer as unknown as RendererSeam + const notificationsOn = notifyEnabled() + + // unknown (null) until the terminal proves it reports focus; then boolean. + let focused: boolean | null = null + try { + seam.on('focus', () => { + focused = true + }) + seam.on('blur', () => { + focused = false + }) + } catch (cause) { + getLog().warn('chrome', 'focus tracking unavailable', { cause: String(cause) }) + } + + // Bracket our title ownership: save the user's title now, restore on quit. + // Best-effort — terminals without the XTWINOPS title stack ignore both. + writeRaw(seam, TITLE_STACK_SAVE) + seam.once('destroy', () => writeRaw(seam, TITLE_STACK_RESTORE, { evenIfDestroyed: true })) + + let lastTitle = '' + return { + setTitle: sessionTitle => { + const title = windowTitleFor(sessionTitle) + if (title === lastTitle) return + lastTitle = title + try { + if (!seam.isDestroyed) seam.setTerminalTitle(title) + } catch (cause) { + getLog().warn('chrome', 'setTerminalTitle failed', { cause: String(cause) }) + } + }, + notify: notification => { + if (!notificationsOn || focused === true) return + for (const sequence of notifySequences(notification)) writeRaw(seam, sequence) + } + } +} + +/** Raw control write through the renderer; falls back to process.stdout when + * the renderer is already gone (the title-stack restore on destroy — at that + * point there is no frame left to tear). */ +function writeRaw(seam: RendererSeam, chunk: string, options?: { evenIfDestroyed?: boolean }): void { + try { + if (!seam.isDestroyed) { + seam.writeOut(chunk) + return + } + if (options?.evenIfDestroyed) process.stdout.write(chunk) + } catch (cause) { + getLog().warn('chrome', 'control write failed', { cause: String(cause) }) + } +} diff --git a/ui-opentui/src/entry/main.tsx b/ui-opentui/src/entry/main.tsx index 6578da969e17..000feb9fdbde 100644 --- a/ui-opentui/src/entry/main.tsx +++ b/ui-opentui/src/entry/main.tsx @@ -30,10 +30,11 @@ import { GatewayService, type GatewayServiceShape } from '../boundary/gateway/Ga import { liveGatewayLayer } from '../boundary/gateway/liveGateway.ts' import { getLog } from '../boundary/log.ts' import { startMemlog } from '../boundary/memlog.ts' +import { registerVendoredParsers } from '../boundary/parsers.ts' import { acquireRenderer } from '../boundary/renderer.ts' import { makeAppLayer } from '../boundary/runtime.ts' import { nthAssistantResponse } from '../logic/copy.ts' -import { envFlag } from '../logic/env.ts' +import { envFlag, launchCwd } from '../logic/env.ts' import { createPromptHistory, dirHistoryPersister, loadDirHistory } from '../logic/history.ts' import { createPasteStore } from '../logic/pastes.ts' import { mapResumeHistory } from '../logic/resume.ts' @@ -48,6 +49,12 @@ import { } from '../logic/slash.ts' import { createSessionStore, type SessionStore } from '../logic/store.ts' import { App } from '../view/App.tsx' +import { TerminalChrome } from '../view/terminalChrome.tsx' + +// Syntax-highlighting language expansion: register the vendored tree-sitter +// grammars (python/rust/go/bash/json/c/html/css/yaml/toml) before the first +// / mount initializes the global tree-sitter client. +registerVendoredParsers() import type { SessionPickerOps } from '../view/overlays/sessionPicker.tsx' import { ThemeProvider } from '../view/theme.tsx' import { makeFakeGatewayLayer, type FakeGatewayController } from './fakeGateway.ts' @@ -174,7 +181,18 @@ const postSessionSetup = (gateway: GatewayServiceShape, store: SessionStore, sid const createFreshSession = (gateway: GatewayServiceShape, store: SessionStore, input: TuiInput) => Effect.gen(function* () { const created = yield* gateway.request<{ session_id?: string; info?: Record }>('session.create', { - cols: input.cols + cols: input.cols, + // The launch directory IS the workspace choice in a terminal (you cd'd + // here) — passing it makes the gateway treat it as explicit, so the + // session row gets a persisted cwd on first message, the chrome bar shows + // the right dir, and /sessions groups this directory's sessions first. + // NOT process.cwd(): the hermes launcher runs this engine with cwd set to + // its own package dir (ui-opentui), so process.cwd() would be the engine + // dir. The launcher exports the REAL launch dir as HERMES_CWD / the + // gateway's TERMINAL_CWD; prefer those, falling back to process.cwd() + // only when launched standalone (smokes/dev). (Desktop omits cwd — its + // launch dir is meaningless; see _ensure_session_db_row.) + cwd: launchCwd() }) const sid = created?.session_id ?? gateway.sessionId() if (!sid) { @@ -542,6 +560,7 @@ export const run = Effect.fn('Tui.run')(function* (input: TuiInput) { () => ( store.state.theme}> + { if (d.fast !== undefined) patch.fast = d.fast if (d.cwd) patch.cwd = d.cwd if (d.branch) patch.branch = d.branch + if (d.title) patch.title = d.title if (d.running !== undefined) patch.running = d.running // prefer the nested usage.context_* numbers, else the top-level fallback. const used = d.usage?.context_used ?? d.context_used diff --git a/ui-opentui/src/logic/termChrome.ts b/ui-opentui/src/logic/termChrome.ts new file mode 100644 index 000000000000..54150581ab1b --- /dev/null +++ b/ui-opentui/src/logic/termChrome.ts @@ -0,0 +1,105 @@ +/** + * Terminal chrome logic — window-title text and desktop-notification OSC + * sequences. Pure string work (no OpenTUI imports); the boundary shim + * (`boundary/termChrome.ts`) owns the renderer writes and focus tracking. + * + * Title: OSC 0/2 content is set natively via `renderer.setTerminalTitle` + * (the zig side emits the escape) — this module only SHAPES the text: + * `"{session title} — Hermes"` once the gateway titles the session, + * `"Hermes Agent"` until then. + * + * Notifications: emitted when the TUI starts waiting on the user (blocking + * prompt, turn complete). Three dialects, terminals ignore what they don't + * speak: + * OSC 9 `ESC ] 9 ; message BEL` (iTerm2 / ConEmu / wezterm) + * OSC 99 `ESC ] 99 ; i=hermes ; title ST` (kitty desktop-notification + * protocol — `p` defaults to title, `d` defaults to done) + * OSC 777 `ESC ] 777 ; notify ; title ; body BEL` (urxvt / foot) + */ + +const ESC = '\u001b' +const BEL = '\u0007' +const ST = `${ESC}\\` + +/** Strip control chars (C0/C1, incl. ESC/BEL) so user text can never + * terminate or splice an escape sequence; collapse runs of whitespace; + * cap the length. */ +export function sanitizeOscText(text: string, max = 120): string { + const clean = (text ?? '') + // eslint-disable-next-line no-control-regex + .replace(/[\u0000-\u001f\u007f-\u009f]/g, ' ') + .replace(/\s+/g, ' ') + .trim() + return clean.length > max ? clean.slice(0, Math.max(1, max - 1)) + '…' : clean +} + +/** The window-title string: session title when known, Ink-era generic otherwise. */ +export function windowTitleFor(sessionTitle: string | undefined): string { + const title = sanitizeOscText(sessionTitle ?? '', 80) + return title ? `${title} — Hermes` : 'Hermes Agent' +} + +/** A notification's two text parts (body optional). */ +export interface TermNotification { + readonly title: string + readonly body?: string +} + +/** The raw escape sequences announcing `n` to the hosting terminal. OSC 9 and + * 777 conventionally terminate with BEL; kitty's OSC 99 spec uses ST. + * Semicolons are swapped out of the OSC 777 fields (its field separator). */ +export function notifySequences(n: TermNotification): string[] { + const title = sanitizeOscText(n.title) + const body = sanitizeOscText(n.body ?? '') + if (!title) return [] + const combined = body ? `${title}: ${body}` : title + const f777 = (s: string) => s.replace(/;/g, ',') + return [ + `${ESC}]9;${combined}${BEL}`, + `${ESC}]99;i=hermes;${combined}${ST}`, + `${ESC}]777;notify;${f777(title)};${f777(body || title)}${BEL}` + ] +} + +/** The XTWINOPS title-stack pushes/pops bracketing our title ownership: save + * the user's title on install, restore it on teardown (terminals without the + * stack ignore these — they just keep our last title, same as today). */ +export const TITLE_STACK_SAVE = `${ESC}[22;0t` +export const TITLE_STACK_RESTORE = `${ESC}[23;0t` + +/** What to announce for a blocking prompt, by kind. Kinds arrive from the + * store's ActivePrompt union; unknown kinds get the generic line so a new + * prompt type can never silently drop notifications. */ +export function promptNotification(kind: string): TermNotification { + switch (kind) { + case 'clarify': + return { title: 'Hermes', body: 'needs an answer to continue' } + case 'approval': + return { title: 'Hermes', body: 'wants approval to run a command' } + case 'sudo': + return { title: 'Hermes', body: 'needs your sudo password' } + case 'secret': + return { title: 'Hermes', body: 'needs a secret/API key' } + case 'confirm': + return { title: 'Hermes', body: 'is asking you to confirm' } + default: + return { title: 'Hermes', body: 'is waiting for your input' } + } +} + +/** Turn-complete announcement. */ +export const TURN_COMPLETE_NOTIFICATION: TermNotification = { + title: 'Hermes', + body: 'finished — awaiting your input' +} + +/** + * `HERMES_TUI_NOTIFY` kill-switch (TUI-only env var, same family as + * HERMES_TUI_TOOL_OUTPUT_LINES): unset/anything-else = on, `0`/`false`/`off` + * = no notification sequences are ever written. The window title is NOT + * gated by this — it's chrome, not interruption. + */ +export function notifyEnabled(env: { readonly [k: string]: string | undefined } = process.env): boolean { + const raw = (env.HERMES_TUI_NOTIFY ?? '').trim().toLowerCase() + return raw !== '0' && raw !== 'false' && raw !== 'off' +} diff --git a/ui-opentui/src/test/env.test.ts b/ui-opentui/src/test/env.test.ts index 4ecb5c65ad24..4a42cf2d8418 100644 --- a/ui-opentui/src/test/env.test.ts +++ b/ui-opentui/src/test/env.test.ts @@ -1,6 +1,6 @@ import { describe, expect, test } from 'vitest' -import { envFlag, envOutputLines, envOutputUnlimited } from '../logic/env.ts' +import { envFlag, envOutputLines, envOutputUnlimited, launchCwd } from '../logic/env.ts' describe('envFlag', () => { test('recognizes truthy values regardless of case/whitespace', () => { @@ -66,3 +66,18 @@ describe('envOutputLines (HERMES_TUI_TOOL_OUTPUT_LINES)', () => { expect(envOutputUnlimited('200')).toBe(false) }) }) + +describe('launchCwd (session.create cwd)', () => { + test('prefers HERMES_CWD (real launch dir the hermes launcher exports)', () => { + expect(launchCwd({ HERMES_CWD: '/home/u/proj', TERMINAL_CWD: '/other' })).toBe('/home/u/proj') + }) + + test('falls back to TERMINAL_CWD when HERMES_CWD is unset/blank', () => { + expect(launchCwd({ TERMINAL_CWD: '/home/u/wt' })).toBe('/home/u/wt') + expect(launchCwd({ HERMES_CWD: ' ', TERMINAL_CWD: '/home/u/wt' })).toBe('/home/u/wt') + }) + + test('falls back to process.cwd() (non-empty) when no launcher env set', () => { + expect(launchCwd({})).toBe(process.cwd()) + }) +}) diff --git a/ui-opentui/src/test/parsers.test.tsx b/ui-opentui/src/test/parsers.test.tsx new file mode 100644 index 000000000000..b45b91c1bbb3 --- /dev/null +++ b/ui-opentui/src/test/parsers.test.tsx @@ -0,0 +1,74 @@ +/** + * Vendored tree-sitter grammar registration (syntax-highlighting language + * expansion). Layers: + * 1. config: every manifest grammar has valid vendored assets (wasm magic, + * non-empty query) and the built configs point at existing absolute paths. + * 2. resolution: core's filetype maps route our curated extensions/fence + * labels to the registered filetype ids. + * Visual color is live-smoke territory (highlighting settles async — see + * codeBlock.tsx); these tests pin the wiring that makes it possible. + */ +import { readFileSync } from 'node:fs' +import { isAbsolute } from 'node:path' + +import { extToFiletype, infoStringToFiletype, pathToFiletype } from '@opentui/core' +import { describe, expect, test } from 'vitest' + +import { registerVendoredParsers, vendoredParsers } from '../boundary/parsers.ts' + +const EXPECTED = ['python', 'rust', 'go', 'bash', 'json', 'c', 'html', 'css', 'yaml', 'toml'] + +describe('vendored grammar configs', () => { + test('all 10 curated grammars resolve with existing absolute asset paths', () => { + const configs = vendoredParsers() + expect(configs.map(c => c.filetype).sort()).toEqual([...EXPECTED].sort()) + for (const config of configs) { + expect(isAbsolute(config.wasm)).toBe(true) + expect(isAbsolute(config.queries.highlights[0]!)).toBe(true) + } + }) + + test('vendored wasm files carry the wasm magic; queries are non-empty', () => { + for (const config of vendoredParsers()) { + const wasm = readFileSync(config.wasm) + expect(wasm.subarray(0, 4).toString('latin1'), config.filetype).toBe('\0asm') + const query = readFileSync(config.queries.highlights[0]!, 'utf8') + expect(query.trim().length, config.filetype).toBeGreaterThan(0) + } + }) + + test('registerVendoredParsers registers and reports the full set', () => { + const registered = registerVendoredParsers() + expect(registered.map(r => r.filetype).sort()).toEqual([...EXPECTED].sort()) + }) + + test('a missing assets dir degrades to empty (plain-text fallback), no throw', () => { + expect(vendoredParsers('/nonexistent/parsers')).toEqual([]) + }) +}) + +describe('filetype routing into the registered ids', () => { + test('tool-body path extensions resolve to curated filetypes', () => { + expect(pathToFiletype('a/b/script.py')).toBe('python') + expect(pathToFiletype('src/main.rs')).toBe('rust') + expect(pathToFiletype('cmd/main.go')).toBe('go') + expect(pathToFiletype('run.sh')).toBe('bash') + expect(pathToFiletype('conf.yaml')).toBe('yaml') + expect(pathToFiletype('conf.yml')).toBe('yaml') + expect(pathToFiletype('Cargo.toml')).toBe('toml') + expect(pathToFiletype('lib.c')).toBe('c') + expect(pathToFiletype('lib.h')).toBe('c') + expect(pathToFiletype('index.html')).toBe('html') + expect(pathToFiletype('style.css')).toBe('css') + expect(pathToFiletype('package.json')).toBe('json') + }) + + test('markdown fence labels resolve to curated filetypes (3b — injections)', () => { + expect(infoStringToFiletype('python')).toBe('python') + expect(infoStringToFiletype('py')).toBe('python') + expect(infoStringToFiletype('rust')).toBe('rust') + expect(infoStringToFiletype('sh')).toBe('bash') + expect(infoStringToFiletype('yaml title=x.yml')).toBe('yaml') + expect(extToFiletype('zsh')).toBe('bash') + }) +}) diff --git a/ui-opentui/src/test/sessionPicker.test.ts b/ui-opentui/src/test/sessionPicker.test.ts index f02c4f4404e8..493875fafa08 100644 --- a/ui-opentui/src/test/sessionPicker.test.ts +++ b/ui-opentui/src/test/sessionPicker.test.ts @@ -22,7 +22,9 @@ import { SESSION_TABS, tabAccepts, tailTruncate, - type SessionRow + type SessionRow, + normalizeCwd, + orderRowsForCwd } from '../logic/sessionPicker.ts' const row = (over: Partial): SessionRow => ({ @@ -254,3 +256,28 @@ describe('slash entry points', () => { expect(resolveSessionArg(rows, '')).toBeUndefined() }) }) + +describe('orderRowsForCwd — pure edges', () => { + const row = (id: string, cwd?: string) => + ({ cwd, id, lastActive: 0, messageCount: 0, preview: '', source: 'tui', startedAt: 0, title: id }) as never + + test('normalizeCwd trims and strips trailing slashes; empty-safe', () => { + expect(normalizeCwd(' /a/b// ')).toBe('/a/b') + expect(normalizeCwd(undefined)).toBe('') + expect(normalizeCwd(' ')).toBe('') + }) + + test('identity passthrough when nothing matches or no cwd known', () => { + const rows = [row('a', '/x'), row('b')] + expect(orderRowsForCwd(rows, undefined, '')).toEqual({ hereCount: 0, rows }) + expect(orderRowsForCwd(rows, '/nowhere', '')).toEqual({ hereCount: 0, rows }) + expect(orderRowsForCwd(rows, '/x', 'query')).toEqual({ hereCount: 0, rows }) + }) + + test('stable partition: here first, recency kept within groups', () => { + const rows = [row('a', '/y'), row('b', '/x'), row('c'), row('d', '/x/')] + const out = orderRowsForCwd(rows, '/x', '') + expect(out.hereCount).toBe(2) + expect(out.rows.map(r => (r as { id: string }).id)).toEqual(['b', 'd', 'a', 'c']) + }) +}) diff --git a/ui-opentui/src/test/sessionPickerView.test.tsx b/ui-opentui/src/test/sessionPickerView.test.tsx index 2deaf574e281..bc2f599c4272 100644 --- a/ui-opentui/src/test/sessionPickerView.test.tsx +++ b/ui-opentui/src/test/sessionPickerView.test.tsx @@ -74,6 +74,8 @@ interface MountOptions { sessions?: FakeSession[] truncated?: boolean initialTab?: 'recent' | 'cron' | 'gateways' | 'all' + /** The TUI's cwd — drives the this-directory-first grouping. */ + currentCwd?: string /** Per-id peek delay (ms) — drives the stale-cancellation test. */ peekDelay?: (id: string) => number /** Paged list: serve `sessions` windowed by offset/limit instead of whole. */ @@ -118,6 +120,7 @@ async function mountPicker(options: MountOptions = {}): Promise { options.currentCwd} peekDebounceMs={20} onResume={id => resumed.push(id)} onClose={() => (closed.value = true)} @@ -356,3 +359,65 @@ describe('SessionPicker — pagination', () => { } }) }) + +describe('this-directory grouping', () => { + const CWD = '/home/u/projects/alpha' + const GROUPED: FakeSession[] = [ + { cwd: '/elsewhere/beta', id: 'g1', last_active: NOW_S - 60, message_count: 5, source: 'tui', title: 'beta work' }, + { cwd: CWD, id: 'g2', last_active: NOW_S - 120, message_count: 8, source: 'tui', title: 'alpha here' }, + { id: 'g3', last_active: NOW_S - 180, message_count: 2, source: 'cli', title: 'no cwd at all' }, + { + cwd: CWD + '/', + id: 'g4', + last_active: NOW_S - 240, + message_count: 4, + source: 'tui', + title: 'alpha trailing slash' + } + ] + + test('sessions started in the current cwd group first under a caption', async () => { + const h = await mountPicker({ currentCwd: CWD, sessions: GROUPED }) + try { + const frame = h.probe.frame() + const at = (needle: string) => frame.indexOf(needle) + expect(at('▾ this directory (2)')).toBeGreaterThanOrEqual(0) + expect(at('▾ other directories')).toBeGreaterThan(at('▾ this directory (2)')) + // here-rows (incl. trailing-slash normalization) above the caption split, + // elsewhere rows below it; selection starts on the first here-row. + expect(at('alpha here')).toBeLessThan(at('▾ other directories')) + expect(at('alpha trailing slash')).toBeLessThan(at('▾ other directories')) + expect(at('beta work')).toBeGreaterThan(at('▾ other directories')) + expect(at('no cwd at all')).toBeGreaterThan(at('▾ other directories')) + expect(frame).toContain('❯ alpha here') + // Enter resumes the first here-session + h.probe.keys.pressEnter() + await h.probe.settle() + expect(h.resumed).toEqual(['g2']) + } finally { + h.probe.destroy() + } + }) + + test('search drops the grouping (fuzzy relevance owns the order)', async () => { + const h = await mountPicker({ currentCwd: CWD, sessions: GROUPED }) + try { + await h.probe.keys.typeText('beta') + await h.probe.settle() + const frame = await h.probe.waitForFrame(f => f.includes('beta work')) + expect(frame).not.toContain('▾ this directory') + expect(frame).not.toContain('▾ other directories') + } finally { + h.probe.destroy() + } + }) + + test('no current cwd (or no matches) → plain recency list, no captions', async () => { + const h = await mountPicker({ sessions: GROUPED }) + try { + expect(h.probe.frame()).not.toContain('▾ this directory') + } finally { + h.probe.destroy() + } + }) +}) diff --git a/ui-opentui/src/test/termChrome.test.tsx b/ui-opentui/src/test/termChrome.test.tsx new file mode 100644 index 000000000000..52c765d76464 --- /dev/null +++ b/ui-opentui/src/test/termChrome.test.tsx @@ -0,0 +1,149 @@ +/** + * Terminal chrome: OSC 0/2 window title + OSC 9/99/777 waiting-on-you + * notifications. Layers: + * 1. pure: title shaping, OSC sanitization, the three notification + * dialect sequences, the prompt-kind copy, the env kill-switch + * (logic/termChrome.ts). + * 2. wiring: with an injected fake seam over a real + * store — the title tracks session.info, prompts and turn-completion + * edges notify exactly once, initial state stays silent. + */ +import { createRoot } from 'solid-js' +import { describe, expect, test } from 'vitest' + +import type { TerminalChromeSeam } from '../boundary/termChrome.ts' +import { createSessionStore } from '../logic/store.ts' +import { + notifyEnabled, + notifySequences, + promptNotification, + sanitizeOscText, + TURN_COMPLETE_NOTIFICATION, + windowTitleFor +} from '../logic/termChrome.ts' +import { TerminalChrome } from '../view/terminalChrome.tsx' + +const ESC = '\u001b' +const BEL = '\u0007' + +describe('windowTitleFor — title shaping', () => { + test('generic until the session is titled', () => { + expect(windowTitleFor(undefined)).toBe('Hermes Agent') + expect(windowTitleFor('')).toBe('Hermes Agent') + expect(windowTitleFor(' ')).toBe('Hermes Agent') + }) + + test('session title gets the — Hermes suffix', () => { + expect(windowTitleFor('fix the flaky tests')).toBe('fix the flaky tests — Hermes') + }) + + test('long titles are capped', () => { + const long = 'x'.repeat(200) + expect(windowTitleFor(long).length).toBeLessThanOrEqual(80 + ' — Hermes'.length) + expect(windowTitleFor(long)).toContain('…') + }) +}) + +describe('sanitizeOscText — escape-splice safety', () => { + test('control chars (incl. ESC/BEL) can never splice a sequence', () => { + expect(sanitizeOscText(`evil${ESC}]0;pwned${BEL}title`)).toBe('evil ]0;pwned title') + }) + + test('whitespace collapses; ends trimmed', () => { + expect(sanitizeOscText(' a\n\tb ')).toBe('a b') + }) +}) + +describe('notifySequences — the three dialects', () => { + test('emits OSC 9, kitty OSC 99, and OSC 777', () => { + const [osc9, osc99, osc777] = notifySequences({ title: 'Hermes', body: 'finished' }) + expect(osc9).toBe(`${ESC}]9;Hermes: finished${BEL}`) + expect(osc99).toBe(`${ESC}]99;i=hermes;Hermes: finished${ESC}\\`) + expect(osc777).toBe(`${ESC}]777;notify;Hermes;finished${BEL}`) + }) + + test('semicolons cannot splice OSC 777 fields', () => { + const [, , osc777] = notifySequences({ title: 'a;b', body: 'c;d' }) + expect(osc777).toBe(`${ESC}]777;notify;a,b;c,d${BEL}`) + }) + + test('an empty title produces nothing', () => { + expect(notifySequences({ title: ' ' })).toEqual([]) + }) +}) + +describe('promptNotification + env gate', () => { + test('every known prompt kind has copy; unknown kinds fall back', () => { + for (const kind of ['clarify', 'approval', 'sudo', 'secret', 'confirm', 'someday-new']) { + const n = promptNotification(kind) + expect(n.title).toBe('Hermes') + expect(n.body).toBeTruthy() + } + expect(promptNotification('someday-new').body).toBe('is waiting for your input') + }) + + test('HERMES_TUI_NOTIFY=0/false/off disables; default on', () => { + expect(notifyEnabled({})).toBe(true) + expect(notifyEnabled({ HERMES_TUI_NOTIFY: '1' })).toBe(true) + expect(notifyEnabled({ HERMES_TUI_NOTIFY: '0' })).toBe(false) + expect(notifyEnabled({ HERMES_TUI_NOTIFY: 'false' })).toBe(false) + expect(notifyEnabled({ HERMES_TUI_NOTIFY: 'off' })).toBe(false) + }) +}) + +describe(' wiring — store edges drive the seam', () => { + function mount() { + const store = createSessionStore() + const titles: Array = [] + const notifications: string[] = [] + const seam: TerminalChromeSeam = { + setTitle: t => titles.push(t), + notify: n => notifications.push(n.body ?? n.title) + } + const dispose = createRoot(d => { + TerminalChrome({ chrome: seam, store }) + return d + }) + return { dispose, notifications, store, titles } + } + + test('sets the generic title immediately, then tracks session.info title', () => { + const { dispose, store, titles } = mount() + try { + expect(titles).toEqual([undefined]) // boot → windowTitleFor(undefined) inside the seam + store.apply({ type: 'session.info', payload: { title: 'rename the moon' } }) + expect(titles).toEqual([undefined, 'rename the moon']) + } finally { + dispose() + } + }) + + test('a blocking prompt notifies once; initial state is silent', () => { + const { dispose, notifications, store } = mount() + try { + expect(notifications).toEqual([]) + store.apply({ + type: 'clarify.request', + payload: { choices: null, question: 'which one?', request_id: 'r1' } + }) + expect(notifications).toEqual(['needs an answer to continue']) + // clearing the prompt does not notify again + store.clearPrompt() + expect(notifications).toEqual(['needs an answer to continue']) + } finally { + dispose() + } + }) + + test('turn completion (running true→false) notifies; boot idle does not', () => { + const { dispose, notifications, store } = mount() + try { + store.apply({ type: 'message.start' }) + expect(notifications).toEqual([]) + store.apply({ type: 'message.complete', payload: { text: 'done' } }) + expect(notifications).toEqual([TURN_COMPLETE_NOTIFICATION.body]) + } finally { + dispose() + } + }) +}) diff --git a/ui-opentui/src/view/App.tsx b/ui-opentui/src/view/App.tsx index 82b6e6b29fed..53a52afd108b 100644 --- a/ui-opentui/src/view/App.tsx +++ b/ui-opentui/src/view/App.tsx @@ -156,6 +156,7 @@ export function App(props: AppProps) { props.store.state.info.cwd} onResume={resume} onClose={closeSessionPicker} /> diff --git a/ui-opentui/src/view/overlays/sessionPicker.tsx b/ui-opentui/src/view/overlays/sessionPicker.tsx index bca1c70129e9..da3804e59bcb 100644 --- a/ui-opentui/src/view/overlays/sessionPicker.tsx +++ b/ui-opentui/src/view/overlays/sessionPicker.tsx @@ -34,6 +34,7 @@ import { visibleRows, type PickerRow } from '../../logic/fuzzy.ts' import { filterSessions, listParamsFor, + orderRowsForCwd, mapSessionRows, relativeTime, routeSessionPickerKey, @@ -79,6 +80,9 @@ export function SessionPicker(props: { onResume: (sessionId: string) => void onClose: () => void initialTab?: SessionTabId + /** The TUI's working directory — sessions started here group first while + * browsing (no effect during search). */ + currentCwd?: () => string | undefined /** Test seam: override the peek debounce (default PEEK_DEBOUNCE_MS). */ peekDebounceMs?: number }) { @@ -134,7 +138,12 @@ export function SessionPicker(props: { }) ) - const filtered = createMemo(() => filterSessions(query(), rows())) + // Display order: this-directory sessions first while browsing (design ask + // 2026-06-12); search keeps pure fuzzy relevance. One flat list, so the + // selection/windowing math below is order-agnostic. + const ordered = createMemo(() => orderRowsForCwd(filterSessions(query(), rows()), props.currentCwd?.(), query())) + const filtered = createMemo(() => ordered().rows) + const hereCount = createMemo(() => ordered().hereCount) createEffect(on(query, () => setSel(0), { defer: true })) // "load more" pseudo-row: selectable index === filtered().length. Offered @@ -371,6 +380,12 @@ export function SessionPicker(props: { {row => row.kind === 'item' && row.item ? ( setSel(row.index)}> + 0 && row.index === 0}> + {` ▾ this directory (${hereCount()})`} + + 0 && row.index === hereCount()}> + {' ▾ other directories'} + {row.index === sel() ? '❯ ' : ' '} diff --git a/ui-opentui/src/view/terminalChrome.tsx b/ui-opentui/src/view/terminalChrome.tsx new file mode 100644 index 000000000000..748f231a25c2 --- /dev/null +++ b/ui-opentui/src/view/terminalChrome.tsx @@ -0,0 +1,61 @@ +/** + * — render-nothing wiring between store state and the + * terminal-chrome seam (window title + waiting-on-you notifications). + * + * title: tracks `info.title` — "Hermes Agent" until the gateway titles + * the session (first-exchange auto-title / picker rename), then + * "{title} — Hermes". Runs immediately on mount so the generic + * title is set at boot. + * notify: fires on the EDGES the user must act on — + * · a blocking prompt appearing (clarify/approval/sudo/secret/ + * confirm — `state.prompt` undefined → defined), and + * · a turn finishing (`info.running` true → false). + * Both deferred (no notification for the initial state) and + * de-duplicated by the seam's focus gate. + * + * The seam is injectable for headless tests; production resolves it from + * the live renderer via useRenderer(). + */ +import { useRenderer } from '@opentui/solid' +import { createEffect, on } from 'solid-js' + +import { installTerminalChrome, type TerminalChromeSeam } from '../boundary/termChrome.ts' +import type { createSessionStore } from '../logic/store.ts' +import { promptNotification, TURN_COMPLETE_NOTIFICATION } from '../logic/termChrome.ts' + +type Store = ReturnType + +export function TerminalChrome(props: { store: Store; chrome?: TerminalChromeSeam }) { + // Injected seam (tests) skips useRenderer() — headless mounts have no + // opentui context to read. + const chrome = props.chrome ?? installTerminalChrome(useRenderer()) + + // Window title — immediate (sets the generic title at boot) and reactive. + createEffect(() => { + chrome.setTitle(props.store.state.info.title) + }) + + // Blocking prompt appeared → the agent is waiting on the user. + createEffect( + on( + () => props.store.state.prompt, + (prompt, previous) => { + if (prompt && !previous) chrome.notify(promptNotification(prompt.kind)) + }, + { defer: true } + ) + ) + + // Turn finished → control is back with the user. + createEffect( + on( + () => props.store.state.info.running, + (running, previous) => { + if (previous === true && running === false) chrome.notify(TURN_COMPLETE_NOTIFICATION) + }, + { defer: true } + ) + ) + + return null +}