diff --git a/package.json b/package.json index ff45f43e8..b1dc15cc3 100644 --- a/package.json +++ b/package.json @@ -111,6 +111,7 @@ }, "devDependencies": { "@eslint/js": "^9.39.4", + "@lydell/node-pty": "1.2.0-beta.18", "@modelcontextprotocol/server": "2.0.0", "@qduc/agent-wire": "file:vendor/qduc-agent-wire-0.2.1.tgz", "@types/better-sqlite3": "^9.6.0", @@ -120,6 +121,7 @@ "@types/ssh2": "^1.15.5", "@types/ws": "^8.18.1", "@vitest/coverage-v8": "^4.1.9", + "@xterm/xterm": "^6.0.0", "chalk": "^5.2.0", "cross-env": "^10.1.0", "eslint": "^9.39.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ac2580b4d..28eb83488 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -314,6 +314,9 @@ importers: '@eslint/js': specifier: ^9.39.4 version: 9.39.4 + '@lydell/node-pty': + specifier: 1.2.0-beta.18 + version: 1.2.0-beta.18 '@modelcontextprotocol/server': specifier: 2.0.0 version: 2.0.0 @@ -341,6 +344,9 @@ importers: '@vitest/coverage-v8': specifier: ^4.1.9 version: 4.1.9(vitest@4.1.9) + '@xterm/xterm': + specifier: ^6.0.0 + version: 6.0.0 chalk: specifier: ^5.2.0 version: 5.6.2 @@ -1025,6 +1031,39 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@lydell/node-pty-darwin-arm64@1.2.0-beta.18': + resolution: {integrity: sha512-gJizeNHkkKCoggtj5Q0yf4btK6dPfr7E063SrOh1jHXp3IyjiErU4KwT7Cn29qb/OY5pBo/Utctenl03MyBtAg==} + cpu: [arm64] + os: [darwin] + + '@lydell/node-pty-darwin-x64@1.2.0-beta.18': + resolution: {integrity: sha512-xnJQz+i5v7pkR1xo14ffTwvMm2DoK3KqPACQaJqxtMVkM7ojv14/KmkaV2jte7Q0BIzfU+VbKVUL9Zmf23G8VQ==} + cpu: [x64] + os: [darwin] + + '@lydell/node-pty-linux-arm64@1.2.0-beta.18': + resolution: {integrity: sha512-fM8jRcZDZwG7ihEOx/R7N1aGHdT4Fd6IQj1d6Jp7Qb9FeDWlIwLuVlxUkJOsW4V1ZmJe1xZl2+WR0RjqMvb2+Q==} + cpu: [arm64] + os: [linux] + + '@lydell/node-pty-linux-x64@1.2.0-beta.18': + resolution: {integrity: sha512-LGikvfcvoPrxXO7o1gCsd5ErrRWnQFYLxjJfX0uwBpi0oGPiTERUBLzKspzZs7wjXZqF30mnNB/C09uotu5vRA==} + cpu: [x64] + os: [linux] + + '@lydell/node-pty-win32-arm64@1.2.0-beta.18': + resolution: {integrity: sha512-S6h4G3zYGe+pPQxhlNxg+MvJNUIwXFxhnUufx1QT45TgratKMxQfoGPidvnwoLwuXQ3hqQ7SsI93rH8RUoL09g==} + cpu: [arm64] + os: [win32] + + '@lydell/node-pty-win32-x64@1.2.0-beta.18': + resolution: {integrity: sha512-wBSMeAwEL04t694ln+QbLnc98YeF3mAwWm/NP8acYDAobPw/WK7KKpk8z07iyxv0gRH2Z2/L/f6vgtnBgxE0Bg==} + cpu: [x64] + os: [win32] + + '@lydell/node-pty@1.2.0-beta.18': + resolution: {integrity: sha512-ryy4liRcw6QBBKWDIbJgTW7Pw8NI2xjri/5s/LZg/jJ8ZVg8MgA1xI/vjpT5qTvDvPjUpU5NybJBrKRgK/QvlA==} + '@mixmark-io/domino@2.2.0': resolution: {integrity: sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==} @@ -1635,6 +1674,9 @@ packages: '@vitest/utils@4.1.9': resolution: {integrity: sha512-A51o8ymO5PpqlWNnBP9ZHPXDIpuMtTLlGSjN7la4US+LJzoUMyhwjA5QXlm39JexgwHKW4Xjs8Z2d3dLCXOeuA==} + '@xterm/xterm@6.0.0': + resolution: {integrity: sha512-TQwDdQGtwwDt+2cgKDLn0IRaSxYu1tSUjgKarSDkUM0ZNiSRXFpjxEsvc/Zgc5kq5omJ+V0a8/kIM2WD3sMOYg==} + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -4732,6 +4774,33 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 + '@lydell/node-pty-darwin-arm64@1.2.0-beta.18': + optional: true + + '@lydell/node-pty-darwin-x64@1.2.0-beta.18': + optional: true + + '@lydell/node-pty-linux-arm64@1.2.0-beta.18': + optional: true + + '@lydell/node-pty-linux-x64@1.2.0-beta.18': + optional: true + + '@lydell/node-pty-win32-arm64@1.2.0-beta.18': + optional: true + + '@lydell/node-pty-win32-x64@1.2.0-beta.18': + optional: true + + '@lydell/node-pty@1.2.0-beta.18': + optionalDependencies: + '@lydell/node-pty-darwin-arm64': 1.2.0-beta.18 + '@lydell/node-pty-darwin-x64': 1.2.0-beta.18 + '@lydell/node-pty-linux-arm64': 1.2.0-beta.18 + '@lydell/node-pty-linux-x64': 1.2.0-beta.18 + '@lydell/node-pty-win32-arm64': 1.2.0-beta.18 + '@lydell/node-pty-win32-x64': 1.2.0-beta.18 + '@mixmark-io/domino@2.2.0': {} '@modelcontextprotocol/client@2.0.0': @@ -5240,6 +5309,8 @@ snapshots: convert-source-map: 2.0.0 tinyrainbow: 3.1.0 + '@xterm/xterm@6.0.0': {} + acorn-jsx@5.3.2(acorn@8.17.0): dependencies: acorn: 8.17.0 diff --git a/rewrite/parity/real-terminal/README.md b/rewrite/parity/real-terminal/README.md new file mode 100644 index 000000000..a780ff475 --- /dev/null +++ b/rewrite/parity/real-terminal/README.md @@ -0,0 +1,115 @@ +# Real-terminal check + +Flip gate item 5 of #65 (issue #140): run legacy term2 (`dist/cli.js`, the spec) and term2-next +(`rewrite/dist/rewrite/src/app/cli.js`) side by side in a real terminal emulator and show whether a user could +tell them apart, by what they see or by how fast they react. The pyte/pty captures and headless goldens in +`rewrite/parity/` compare text; this check compares the rendered terminal and the time to paint. + +This is a tool you run by hand or as a queued job. It is not a CI test (a full run takes about 30 minutes), it +adds no unit tests, and it does not change product code. It uses only the loopback fake provider. + +## One command + +```sh +node rewrite/parity/real-terminal/run.mjs --out [--store ] +``` + +On a fresh checkout it installs dependencies and builds whichever CLI is missing, generates a synthetic store +into `/store` when `--store` is omitted, and writes `/report.html` (side-by-side screenshots, diffs, +latency tables, gate verdicts) and `/results.json` (every sample). + +| Option | Meaning | +| --- | --- | +| `--store ` | Conversation store. Legacy reads `/conversations`, term2-next reads `/conversations-next`, the same names both CLIs use under their data directory, so a team member can pass their own term2 data dir (on Linux `~/.local/share/term2-nodejs`). Every CLI run works on a private copy; the given store is never written. | +| `--workspace ` | The CLIs' working directory. Default `/workspace` when present (generated stores put most sessions there), otherwise a scratch project. With a real store, pass the project your sessions belong to. | +| `--sizes 100x34,80x24` | Terminal sizes. | +| `--quick` | A quarter of the samples. A smoke run, not gate evidence. | +| `--only latency\|walk` | One half of the run. | +| `--soak ` | JSON array of soak differences to list in the report. | +| `--report-only` | Re-render `/report.html` from `/results.json` without measuring; with `--soak`, adds the soak list to a finished run. | +| `--store-mb ` | Size of a generated store, per format (default 420). | + +Check the load average the report prints; rerun any measurement taken above load 9. + +## What it does + +**Terminal** (`lib/terminal.mjs`, `lib/page.html`). Each CLI runs in a pty (node-pty; this environment has no +sshd, so the ssh-to-localhost path is not used). Its bytes stream over SSE into xterm.js (DOM renderer) in +headless Chromium. Everything the harness judges is read back from xterm.js: buffer text, rendered pixels. +`calibrate()` measures the harness floor with `cat` (raw echo) through the same path; it is about 3 ms. + +**Isolation** (`lib/env.mjs`, `lib/session.mjs`). Each CLI gets its own scratch `HOME`, `XDG_*` dirs, settings +pointing at its own fake provider, and a copy of the store. Both CLIs get the same scripted model +(`scriptedModel`), so the same prompt gets the same reply. Keys are typed one per write, as a person types: +both CLIs treat a multi-character write ending in CR as a paste, and legacy then inserts a newline instead of +submitting. + +**Store** (`generate-store.mjs`, `lib/record-templates.mjs`). The generator first drives each CLI in a pty +against the fake provider to record a template conversation (a small and a large shell output, a 40-delta +streamed reply, a plain turn and a manual `/compact`). It then clones those blocks with fresh ids, timestamps +and `seq` numbers, so every line has exactly the shape that CLI writes, including how each caps a large tool +output and term2-next's `refs` that point at earlier `seq`s by offset. Both formats are written in lockstep from +one seeded plan (the same sessions, projects, times and turns), and generation stops when both reach the size +floor. A generated store holds about 1,400 sessions and one long session with large tool outputs, a compaction +every 40 blocks and one reply of 200,000 deltas. Nothing comes from a real conversation. term2-next refuses a +conversations directory with foreign entries, which is why the two formats live in separate directories. + +**Latency** (`lib/latency.mjs`). For each class (typed character, backspace, Enter on the composer, an arrow in +the model menu and in the resume list, Ctrl+O, Shift+Tab, opening `/model` and `/settings`, paging the resume +list), idle and while a reply streams: the page timestamps the key, posts it to the pty, and stops at the first +xterm.js render whose screen satisfies the class predicate. Typing classes look at the composer row; the others +look at the rows below the streamed text (status row and elapsed-time rows excluded), with the baseline taken on +the page at the instant of injection. CPU per key is the CLI process tree's utime+stime and bytes per key is pty +output, both over injection to paint + 100 ms. Every sample starts from the empty composer with no menu open. A +key whose expected change never paints within 5 s is a miss, and the screen at the timeout is kept for the +report. Separately, **store timings** record startup and the first and second `/resume` until the list paints. + +**One timeout: 5 s** (`PAINT_TIMEOUT_MS`). Every expected screen (a key's paint, the resume list, a walk step) +either appears within 5 s or fails; the harness never waits longer to find out how slow it was. A failure must +not leak into later samples, so when a CLI no longer gets back to the empty composer (a frozen UI that may still +paint later), the harness replaces it with a fresh CLI on the same home and store copy and goes on. A resume list +that does not paint fails all of that phase's resume-list keys without sending them. Startup alone may take a +minute: it is reported, not gated. + +**Walk** (`lib/walk.mjs`). The same 30 steps for both CLIs: startup, a markdown turn, a tool call, an approval +prompt and approval, the slash and path menus, `/model`, `/settings`, Ctrl+O, Shift+Tab, `/help`, `/resume` +with a preview, a resize and back, the Ctrl+C confirmation, and exit. Before each screenshot, cells matching the +masks are painted grey: version, ids, paths, ports, durations (including wall-clock times and relative ages) +and spinner frames. Nothing else is masked. + +**Report** (`lib/report.mjs`). Pixel diff of each pair in Chromium (canvas, exact RGB compare), the differing +text rows, and the gate: + +- latency per class within 1.2x legacy or 5 ms of it, at p50 and p95, and no key over 200 ms; +- screenshots identical apart from the masks; +- every soak difference fails unless it is on the accepted-differences list (there is none yet), and is + listed as unexplained. + +**Soak** (`soak.mjs`, `SOAK-BRIEF.md`). Two live terminals, A and B (randomly assigned, mapping kept from the +agent), and a small command for a context-free agent to type, read screens, take screenshots and resize. + +## Debugging traps found while building it + +- A whole string in one pty write is a paste. Legacy turns a trailing CR in a paste into a newline. +- Escape while a reply streams arms "Press Esc again to interrupt"; a second Escape cancels the reply. The + harness never sends Escape when the composer is already home. +- Legacy lists queued steers between the separator and the input row; the composer is the last `❯` row below + the separator, not the row right after it. +- Manual `/compact` needs `agent.contextCompaction.compactThresholdTokens` and `agent.maxRequestInputTokens` + for an uncatalogued model, and term2-next's local compaction request is recognised by `# Historical + transcript chunk`, not the `[Host context-compaction request]` marker. +- A rewrite that changes the length of text inside a term2-next tool output breaks its `refs` (offsets into + that text); the generator keeps every rewrite inside referenced text length-preserving. +- Regexes inside predicate source built from template literals need doubled backslashes. +- While a reply streams, a menu outlives the reply. Restarting the reply must not type into the open menu (its + filter takes the text, and legacy then picks a "model" named after the prompt): the harness closes the menu, + starts another reply and reopens the menu. +- term2-next truncates resume rows at 80 columns before their message count, so "N msgs" alone never matches + there; the list predicate also accepts its Preview pane. A first full run waited 30 minutes on this. +- term2-next builds its catalogue on the first `/resume` of a fresh store copy and does not answer keys meanwhile + (153 s on the 420 MB store at 100x34 in the first full run). Under the 5 s rule that is a failure plus a CLI + restart; the restarted CLI may rebuild, so later resume-list keys can fail too. +- A single screen read can catch a redraw half done (legacy erases and repaints while a reply streams). "Not at + the composer" counts only after it lasts 300 ms (before sending Escape) or 2 s (before restarting a CLI); an + instant check restarted legacy four times in the second full run. +- Legacy refuses `/resume` while a reply streams ("cannot run while the agent is working"); term2-next opens it. diff --git a/rewrite/parity/real-terminal/SOAK-BRIEF.md b/rewrite/parity/real-terminal/SOAK-BRIEF.md new file mode 100644 index 000000000..820086cda --- /dev/null +++ b/rewrite/parity/real-terminal/SOAK-BRIEF.md @@ -0,0 +1,98 @@ +# Soak brief: two terminals, 30 minutes + +Part of the real-terminal check (issue #140, flip gate item 5). A context-free agent uses legacy term2 and +term2-next side by side for 30 minutes of normal work and lists every difference it notices. Every difference +fails the gate unless it is on the accepted-differences list; the report marks each one **unexplained** for the +owner's team to triage. The soak does not fix anything. + +## Operator notes (not given to the agent) + +1. Build both CLIs and have a store (`run.mjs` does both, or `generate-store.mjs --out `). +2. Start the terminals and leave the server running: + + ```sh + node rewrite/parity/real-terminal/soak.mjs serve --state /tmp/soak --store + ``` + + Which CLI is A and which is B is random and written to `/tmp/soak/mapping.json`. Do not give that file + to the agent. + +3. The server writes the agent's only command, `/tmp/soak/t` (`t type both "hi{enter}"`, `t screen A`, ...). +4. Start a fresh agent with no repository context, no tools beyond a shell and an image viewer, and the brief + below as its whole prompt (replace `` with `/tmp/soak/t`). It must not read the repository. +5. When it finishes, map A/B back with `mapping.json`, save the list as a JSON array of strings and add it to + a finished run with `run.mjs --out --report-only --soak `. Stop the server with ` stop`. + +The fake model behind both terminals is the harness's scripted model (`lib/session.mjs`, `scriptedModel`): it +answers deterministically, so both terminals get the same replies to the same prompts. + +--- + +## Brief (give the agent everything below this line) + +You are testing two builds of the same terminal AI assistant. They are running right now in two real +terminal emulators, labelled **A** and **B**. They are supposed to be indistinguishable to a user: the same +screens, the same wording, the same colours and layout, the same keys, and the same speed. Your job is to use +both, side by side, for **30 minutes of normal work**, and to list **every difference you notice**, however +small. + +You have no other context, and you need none. Do not read any files except the screenshots this tool gives +you, and do not look for the programs' source code. Judge only what a user would see and feel. + +### Your controls + +Everything goes through one command, ``: + +| Command | What it does | +| --- | --- | +| ` type both "text{enter}"` | Types into both terminals at once, like a person (one key at a time). Use this most of the time, so both get identical input. | +| ` type A "..."` / ` type B "..."` | Types into one terminal. | +| ` screen A` / ` screen B` | Prints the visible screen as text. | +| ` shot both` | Saves screenshots of both screens and prints their paths. Open them to compare colours, highlighting and layout. | +| ` resize 80 24` | Resizes both terminals. | +| ` restart both` | Starts the program again (for example after you exit it). | + +Keys inside the text: `{enter}` `{esc}` `{tab}` `{shift+tab}` `{backspace}` `{up}` `{down}` `{left}` `{right}` +`{pgup}` `{pgdn}` `{ctrl+c}` `{ctrl+o}` `{ctrl+t}` `{ctrl+g}` `{alt+enter}`, and `{wait:500}` to pause 500 ms. +After typing, wait a moment and look at both screens before you judge. + +### The assistant + +It is a chat assistant for programming work in a project folder. The model behind both terminals is a +deterministic stand-in, so the same prompt gets the same reply in both. It understands a few requests: + +- anything containing **stream** gets a long streamed reply (about 25 seconds), useful for trying keys while a + reply is arriving; +- **list the files** makes it run a shell command; +- **create a file** makes it run a command that asks for your approval first; +- **markdown** gets a formatted reply with a heading, a list and a code block; +- anything else gets a short plain answer. + +The program has commands that start with `/` (type `/` to see them), file mentions that start with `@`, a +shell mode with `!`, a model picker, settings, a list of past conversations (`/resume`), keyboard shortcuts +shown in its footer, and approval prompts. The past-conversation list holds over a thousand old sessions. + +### What to do + +Work like a user would for 30 minutes (check the time with `date` at the start and keep going until 30 minutes +have passed). Cover at least: the start screen; several ordinary turns; a tool call; an approval (approve once, +deny once); every `/` command that opens a menu or view; moving around inside menus; `/resume` and opening an +old conversation; the footer shortcuts; typing, editing and deleting text in the input; pressing keys while a +reply streams (typing, Enter, Escape, the shortcuts); cancelling a reply; a resize to 80x24 and back to 100x34; +and exiting with Ctrl+C. Repeat anything that felt slow in one terminal to see if it is consistent. + +For every difference, note it right away, before you forget, with: what you did, what A showed or did, what +B showed or did, and whether it is about **content** (text, wording, missing or extra information), +**appearance** (colour, spacing, alignment, highlighting), **behaviour** (a key does something different), or +**speed** (one reacts noticeably slower, freezes, or flickers). + +### Report + +When the 30 minutes are up, reply with: + +1. The start and end time. +2. A numbered list of every difference, one per line, in the form + `[content|appearance|behaviour|speed] : A <...>; B <...>`. +3. Anything you could not try, and why. + +Do not guess which terminal is the "right" one, and do not try to explain the differences. Just report them. diff --git a/rewrite/parity/real-terminal/generate-store.mjs b/rewrite/parity/real-terminal/generate-store.mjs new file mode 100644 index 000000000..dc6c5a137 --- /dev/null +++ b/rewrite/parity/real-terminal/generate-store.mjs @@ -0,0 +1,412 @@ +#!/usr/bin/env node +// Synthetic conversation store for the real-terminal check. Nothing here is copied from a real conversation: +// each CLI first writes small template conversations against the loopback fake provider (lib/record-templates), +// and this script clones those blocks with fresh ids, times and seq numbers, so every line keeps the exact shape +// that CLI writes (including how each CLI caps and references a large tool output). +// +// node rewrite/parity/real-terminal/generate-store.mjs --out [--size-mb 420] [--seed 7] +// +// Both formats are written in lockstep from one seeded plan (same session ids, projects, times and turns), so +// each CLI sees the same conversations; generation stops once every format has at least --size-mb. +// +// Output: +// /conversations/ legacy logs (*.jsonl, *.queue.json, last.json) +// /conversations-next/ term2-next logs (conv_*.jsonl, conv_locks/) +// the same names both CLIs use under their data dir; each reaches --size-mb on its own +// /workspace/ the project most sessions belong to; run.mjs uses it as the CLIs' cwd +// /manifest.json what was generated +// +// The store holds many sessions of mixed length plus one long session with large tool outputs, repeated +// compactions and one reply of 200,000 streamed deltas. +import crypto from 'node:crypto'; +import fs from 'node:fs'; +import os from 'node:os'; +import path from 'node:path'; +import { parseArgs } from 'node:util'; +import { recordTemplates, SMALL_FILE, LARGE_FILE, DELTA_COUNT, deltaToken } from './lib/record-templates.mjs'; + +const MB = 1024 * 1024; +const LONG_DELTAS = 200_000; + +const UUID = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/g; +const ISO = /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z/g; +const TURN = /turn-(\d+)/g; +const CALL = /call_(\d+)_(\d+)/g; + +/** Per-format knowledge, all of it read off the recorded templates. */ +const FORMATS = { + legacy: { + payload: (record) => record.event, + sessionId: (header) => header.event.id, + blockStart: (type) => type === 'user_message' || type === 'context_checkpoint_created', + isCompaction: (block) => block.types.includes('context_checkpoint_created'), + fileName: (id) => `${id}.jsonl`, + }, + next: { + payload: (record) => record.fact, + sessionId: (header) => header.fact.id.replace(/^conv_/, ''), + blockStart: (type) => type === 'queue_submitted' || type === 'command_started', + isCompaction: (block) => block.types.includes('history_replaced'), + fileName: (id) => `conv_${id}.jsonl`, + }, +}; + +function rng(seed) { + let state = seed >>> 0 || 1; + return () => { + state ^= state << 13; + state ^= state >>> 17; + state ^= state << 5; + return (state >>> 0) / 4294967296; + }; +} + +function uuidFrom(random) { + const hex = Array.from({ length: 32 }, () => Math.floor(random() * 16).toString(16)).join(''); + return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-4${hex.slice(13, 16)}-a${hex.slice(17, 20)}-${hex.slice(20)}`; +} + +const WORDS = ( + 'buffer render session cache index stream token module export import value handler request response ' + + 'config parser layout widget terminal provider compact history append fsync worker queue retry approval' +).split(' '); + +function loadTemplate(dir, format) { + dir = typeof dir === 'string' ? dir : dir.long; + const file = fs.readdirSync(dir).find((name) => name.endsWith('.jsonl')); + if (!file) throw new Error(`template recording wrote no conversation log in ${dir}`); + const lines = fs.readFileSync(path.join(dir, file), 'utf8').trim().split('\n'); + const records = lines.map((raw) => ({ raw, json: JSON.parse(raw) })); + const header = records[0]; + const sessionId = FORMATS[format].sessionId(header.json); + const blocks = []; + for (const record of records.slice(1)) { + const type = FORMATS[format].payload(record.json).type; + if (FORMATS[format].blockStart(type) || blocks.length === 0) blocks.push({ records: [], types: [] }); + blocks.at(-1).records.push(record); + blocks.at(-1).types.push(type); + } + for (const block of blocks) { + const raw = block.records.map((record) => record.raw).join('\n'); + block.kind = FORMATS[format].isCompaction(block) + ? 'compaction' + : raw.includes(`cat ${LARGE_FILE}`) + ? 'tool-large' + : raw.includes(`cat ${SMALL_FILE}`) + ? 'tool-small' + : raw.includes(deltaToken(DELTA_COUNT - 1).trim()) + ? 'delta' + : 'plain'; + } + const sidecars = fs + .readdirSync(dir) + .filter((name) => name !== file && name !== 'last.json' && fs.statSync(path.join(dir, name)).isFile()); + const root = path.dirname(dir); + const startMs = Date.parse(header.json.ts ?? header.json.at); + return { format, dir, header, blocks, sessionId, root, workspace: path.join(root, 'work'), startMs, sidecars }; +} + +/** Writes one session file by replaying template blocks with fresh identities, times and sizes. */ +class SessionWriter { + constructor({ format, template, file, sessionId, project, startMs, random }) { + Object.assign(this, { format, template, sessionId, project, random }); + // Same length as the recording root: term2-next references slices of tool output by offset, and that output + // names the CLI's saved full-output file under the recording home. + const len = template.root.length; + this.homeStandIn = `/home/rt-user${'/r'.repeat(len)}`.slice(0, len); + this.fd = fs.openSync(file, 'w'); + this.bytes = 0; + this.seq = 0; + this.turn = 0; + this.block = 0; + this.timeMs = startMs; + this.chunks = []; + this.pending = 0; + this.emit([template.header], { header: true }); + } + + rewrite(raw, ctx) { + const t = this.template; + // Paths become placeholders first: a recording path can itself contain a UUID-shaped segment. + return raw + .replaceAll(t.workspace, '\u0001W') + .replaceAll(t.root, '\u0001R') + .replaceAll(t.sessionId, this.sessionId) + .replace(UUID, (id) => { + if (id === this.sessionId) return id; + if (!ctx.uuids.has(id)) ctx.uuids.set(id, uuidFrom(this.random)); + return ctx.uuids.get(id); + }) + .replace(TURN, (_, n) => `turn-${ctx.turnBase + Number(n)}`) + .replace(CALL, (_, n, i) => `call_${this.block}_${n}_${i}`) + .replace(ISO, (stamp) => new Date(Date.parse(stamp) - ctx.templateMs + this.timeMs).toISOString()) + .replaceAll('\u0001W', this.project) + .replaceAll('\u0001R', this.homeStandIn); + } + + emit(records, { header = false, deltas = 0 } = {}) { + const ctx = { + uuids: new Map(), + turnBase: this.turn, + templateMs: Date.parse(records[0].json.ts ?? records[0].json.at), + }; + if (header) { + this.write(this.rewrite(records[0].raw, ctx)); + this.seq = records[0].json.seq; + return; + } + // Pass 1: new seq for every template seq. Gaps inside a block are kept (legacy spends seqs on records it + // never writes); a block starts right after the previous one. Expanded deltas push later records down. + const firstSeq = records[0].json.seq; + const seqMap = new Map(); + let shift = 0; + const plan = []; + for (const record of records) { + const seq = this.seq + 1 + (record.json.seq - firstSeq) + shift; + seqMap.set(record.json.seq, seq); + if (deltas && isSingleDelta(record.raw)) { + if (!record.raw.includes(deltaToken(0))) { + shift -= 1; // the first template delta stands for all of them + continue; + } + plan.push({ record, seq, expand: deltas }); + shift += deltas - 1; + continue; + } + const joined = deltas && record.raw.includes(joinedTemplate()); + if (joined && this.format === 'legacy') { + // Legacy keeps no per-delta records but still spends one seq per delta. + shift += deltas - DELTA_COUNT; + seqMap.set(record.json.seq, seq + deltas - DELTA_COUNT); + plan.push({ record, seq: seq + deltas - DELTA_COUNT, joined }); + continue; + } + plan.push({ record, seq, joined }); + } + // Pass 2: write, pointing same-turn references (term2-next `refs[].source.seq`) at the new seqs. + let maxTurn = 0; + for (const { record, seq, expand, joined } of plan) { + for (const match of record.raw.matchAll(TURN)) maxTurn = Math.max(maxTurn, Number(match[1])); + let raw = withSeq(this.rewrite(record.raw, ctx), seq).replace( + /"source":\{"seq":(\d+)/g, + (whole, old) => (seqMap.has(Number(old)) ? `"source":{"seq":${seqMap.get(Number(old))}` : whole), + ); + if (joined) raw = raw.replace(joinedTemplate(), joinedTokens(deltas)); + if (expand) { + for (let i = 0; i < expand; i++) this.write(withSeq(raw.replace(deltaToken(0), deltaToken(i)), seq + i)); + } else { + this.write(raw); + } + } + this.seq = this.seq + 1 + (records.at(-1).json.seq - firstSeq) + shift; + this.turn += maxTurn; + this.block += 1; + this.timeMs += 40_000 + Math.floor(this.random() * 400_000); + } + + write(line) { + this.chunks.push(line, '\n'); + this.pending += line.length + 1; + this.bytes += Buffer.byteLength(line) + 1; + if (this.pending > 4 * MB) this.flush(); + } + + flush() { + if (this.chunks.length) fs.writeSync(this.fd, this.chunks.join('')); + this.chunks = []; + this.pending = 0; + } + + close() { + this.flush(); + fs.closeSync(this.fd); + return { bytes: this.bytes, updatedMs: this.timeMs }; + } +} + +const joinedTemplate = () => Array.from({ length: DELTA_COUNT }, (_, i) => deltaToken(i)).join(''); +const joinedTokens = (n) => { + const parts = new Array(n); + for (let i = 0; i < n; i++) parts[i] = deltaToken(i); + return parts.join(''); +}; +const isSingleDelta = (raw) => (raw.match(/rtd\d{6} /g) ?? []).length === 1; +const withSeq = (raw, seq) => raw.replace(/^\{"v":(\d+),"seq":\d+,/, `{"v":$1,"seq":${seq},`); + +/** One session in every format at once, from one seeded plan: same id, project, times and block sequence. */ +function writeSessions(ctx, { templates, project, startMs, seed, kind, steps }) { + const id = uuidFrom(rng(seed)); + const writers = Object.fromEntries( + Object.entries(templates).map(([format, template]) => [ + format, + new SessionWriter({ + format, + template, + file: path.join(ctx.dirs[format], FORMATS[format].fileName(id)), + sessionId: id, + project, + startMs, + random: rng(seed + 1), + }), + ]), + ); + for (const step of steps(Object.values(writers))) { + for (const [format, writer] of Object.entries(writers)) { + writer.emit(templates[format].blocks[step.kind].records, step); + } + } + const out = {}; + for (const [format, writer] of Object.entries(writers)) { + const { bytes, updatedMs } = writer.close(); + const template = templates[format]; + for (const sidecar of template.sidecars) { + fs.copyFileSync(path.join(template.dir, sidecar), path.join(ctx.dirs[format], sidecar.replace(template.sessionId, id))); + } + if (format === 'next') { + fs.mkdirSync(path.join(ctx.dirs.next, 'conv_locks'), { recursive: true }); + fs.writeFileSync(path.join(ctx.dirs.next, 'conv_locks', `${FORMATS.next.fileName(id)}.sqlite`), ''); + } + out[format] = { id: format === 'next' ? `conv_${id}` : id, bytes, updatedMs, project, kind }; + } + return out; +} + +function byKind(template) { + const blocks = {}; + for (const kind of ['tool-small', 'tool-large', 'plain', 'delta', 'compaction']) { + const found = template.blocks.find((block) => block.kind === kind); + if (!found) throw new Error(`${template.format} template has no ${kind} block (kinds: ${template.blocks.map((b) => b.kind)})`); + blocks[kind] = found; + } + return { ...template, blocks }; +} + +function generate(ctx, templates) { + const budget = ctx.sizeMb * MB; + const sessions = Object.fromEntries(Object.keys(templates).map((format) => [format, []])); + const totals = Object.fromEntries(Object.keys(templates).map((format) => [format, 0])); + const add = (written) => { + for (const [format, session] of Object.entries(written)) { + sessions[format].push(session); + totals[format] += session.bytes; + } + }; + const smallest = () => Math.min(...Object.values(totals)); + const now = Date.parse('2026-10-30T12:00:00.000Z'); + + // The long session: ~30% of the budget in the most compact format, mostly capped-large tool outputs, a + // compaction every 40 blocks, and one reply of 200k streamed deltas. + const longTarget = Math.floor(budget * 0.3); + add( + writeSessions(ctx, { + templates, + project: ctx.workspace, + startMs: now - 20 * 86_400_000, + seed: Math.floor(ctx.random() * 2 ** 31), + kind: 'long', + steps: function* (writers) { + for (let n = 1; Math.min(...writers.map((w) => w.bytes)) < longTarget; n++) { + if (n === 60) yield { kind: 'delta', deltas: LONG_DELTAS }; + else if (n % 40 === 0) yield { kind: 'compaction' }; + else if (n % 3 === 0) yield { kind: 'plain' }; + else yield { kind: ctx.random() < 0.8 ? 'tool-large' : 'tool-small' }; + } + }, + }), + ); + + // Many ordinary sessions: 1-40 blocks, 40% in other (possibly deleted) projects, until every format has + // reached the budget. + while (smallest() < budget) { + const blocks = 1 + Math.floor(ctx.random() ** 2 * 40); + const project = + ctx.random() < 0.6 ? ctx.workspace : `/home/rt-user/projects/${WORDS[Math.floor(ctx.random() * WORDS.length)]}-app`; + const kinds = Array.from({ length: blocks }, () => { + const roll = ctx.random(); + return roll < 0.35 ? 'tool-small' : roll < 0.5 ? 'tool-large' : roll < 0.97 ? 'plain' : 'compaction'; + }); + add( + writeSessions(ctx, { + templates, + project, + startMs: now - Math.floor(ctx.random() * 180 * 86_400_000), + seed: Math.floor(ctx.random() * 2 ** 31), + kind: 'ordinary', + steps: function* () { + for (const kind of kinds) yield { kind }; + }, + }), + ); + } + return { sessions, totals }; +} + +async function main() { + const { values } = parseArgs({ + options: { + out: { type: 'string' }, + 'size-mb': { type: 'string', default: '420' }, + seed: { type: 'string', default: '7' }, + only: { type: 'string' }, + }, + }); + if (!values.out) throw new Error('usage: generate-store.mjs --out [--size-mb 420] [--seed 7]'); + const out = path.resolve(values.out); + if (fs.existsSync(out) && fs.readdirSync(out).length) throw new Error(`${out} is not empty`); + const dirs = { legacy: path.join(out, 'conversations'), next: path.join(out, 'conversations-next') }; + const workspace = path.join(out, 'workspace'); + for (const dir of Object.values(dirs)) fs.mkdirSync(dir, { recursive: true }); + fs.mkdirSync(workspace, { recursive: true }); + const scratch = fs.mkdtempSync(path.join(os.tmpdir(), 'rt-templates-')); + const ctx = { dirs, workspace, sizeMb: Number(values['size-mb']), random: rng(Number(values.seed)) }; + const manifest = { generatedAt: new Date().toISOString(), seed: Number(values.seed), minimumMbPerFormat: ctx.sizeMb, formats: {} }; + try { + const templates = {}; + for (const format of values.only ? [values.only] : ['legacy', 'next']) { + process.stderr.write(`[store] recording ${format} templates\n`); + const recorded = await recordTemplates(format, scratch); + templates[format] = byKind(loadTemplate(recorded, format)); + } + process.stderr.write('[store] generating\n'); + const { sessions, totals } = generate(ctx, templates); + if (sessions.legacy) { + // The legacy CLI's own index of recent sessions, newest first. + const entries = [...sessions.legacy] + .sort((a, b) => b.updatedMs - a.updatedMs) + .map((s) => ({ id: s.id, updatedAt: new Date(s.updatedMs).toISOString(), projectPath: s.project })); + fs.writeFileSync(path.join(dirs.legacy, 'last.json'), JSON.stringify({ entries }, null, 2)); + } + for (const [format, list] of Object.entries(sessions)) { + const long = list.find((s) => s.kind === 'long'); + manifest.formats[format] = { + directory: path.basename(dirs[format]), + sessions: list.length, + bytes: totals[format], + longSession: { id: long.id, bytes: long.bytes, deltas: LONG_DELTAS }, + }; + process.stderr.write(`[store] ${format}: ${list.length} sessions, ${(totals[format] / MB).toFixed(0)} MB\n`); + } + } finally { + fs.rmSync(scratch, { recursive: true, force: true }); + } + seedWorkspace(workspace); + fs.writeFileSync(path.join(out, 'manifest.json'), JSON.stringify(manifest, null, 2)); + console.log(JSON.stringify(manifest, null, 2)); +} + +function seedWorkspace(workspace) { + fs.writeFileSync(path.join(workspace, 'README.md'), '# demo project\n\nA small workspace for the parity walk.\n'); + fs.writeFileSync( + path.join(workspace, 'notes.txt'), + Array.from({ length: 40 }, (_, i) => `line ${i + 1}: the quick brown fox`).join('\n') + '\n', + ); + fs.mkdirSync(path.join(workspace, 'src'), { recursive: true }); + fs.writeFileSync(path.join(workspace, 'src', 'main.js'), "export function main() {\n return 'hello';\n}\n"); +} + +if (import.meta.url === `file://${process.argv[1]}`) { + main().catch((error) => { + console.error(error); + process.exit(1); + }); +} diff --git a/rewrite/parity/real-terminal/lib/env.mjs b/rewrite/parity/real-terminal/lib/env.mjs new file mode 100644 index 000000000..faa2385ce --- /dev/null +++ b/rewrite/parity/real-terminal/lib/env.mjs @@ -0,0 +1,109 @@ +// One isolated home per CLI run: scratch HOME / XDG dirs, settings pointing at the loopback provider, and a +// private copy of the conversation store so a run never writes into the store it was given. +import fs from 'node:fs'; +import os from 'node:os'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const here = path.dirname(fileURLToPath(import.meta.url)); +export const repo = path.resolve(here, '..', '..', '..', '..'); + +export const CLIS = { + legacy: { name: 'legacy term2', cli: path.join(repo, 'dist', 'cli.js') }, + next: { name: 'term2-next', cli: path.join(repo, 'rewrite', 'dist', 'rewrite', 'src', 'app', 'cli.js') }, +}; + +/** + * Both CLIs get roots of the same length (`.../rt-legacy-xxxx` vs `.../rt-next-xxxxxx`), so paths that reach the + * screen have identical widths and only differ inside masked spans. + */ +export function makeRoot(scratch, which) { + const tag = which === 'legacy' ? 'L' : 'N'; + const root = fs.mkdtempSync(path.join(scratch, `rt${tag}-`)); + return fs.realpathSync(root); +} + +export function prepareHome({ root, baseUrl, store, settings = {}, reuse = false }) { + const home = path.join(root, 'home'); + const workspace = path.join(root, 'work'); + const conversations = path.join(root, 'conversations'); + fs.mkdirSync(home, { recursive: true }); + fs.mkdirSync(workspace, { recursive: true }); + fs.mkdirSync(path.join(root, 'runtime'), { recursive: true, mode: 0o700 }); + fs.mkdirSync(path.join(root, 'tmp'), { recursive: true }); + if (store) { + copyStore(store, conversations); + } else { + fs.mkdirSync(conversations, { recursive: true }); + } + if (!reuse) seedWorkspace(workspace); + const env = { + PATH: process.env.PATH, + SHELL: '/bin/bash', + LANG: 'C.UTF-8', + TZ: 'UTC', + TERM: 'xterm-256color', + COLORTERM: 'truecolor', + FORCE_COLOR: '1', + HOME: home, + XDG_CONFIG_HOME: path.join(home, '.config'), + XDG_STATE_HOME: path.join(home, '.local', 'state'), + XDG_CACHE_HOME: path.join(home, '.cache'), + XDG_DATA_HOME: path.join(home, '.local', 'share'), + XDG_RUNTIME_DIR: path.join(root, 'runtime'), + TMPDIR: path.join(root, 'tmp'), + TERM2_CONFIG_DIR: path.join(home, '.term2'), + TERM2_CACHE_DIR: path.join(home, '.cache', 'term2'), + TERM2_CONVERSATIONS_DIR: conversations, + DISABLE_LOGGING: '1', + CI: 'false', + }; + const settingsDir = path.join(env.XDG_STATE_HOME, 'term2-nodejs'); + fs.mkdirSync(settingsDir, { recursive: true }); + fs.writeFileSync( + path.join(settingsDir, 'settings.json'), + JSON.stringify( + merge( + { + agent: { retryAttempts: 0, modelSelection: { model: 'mock-alpha', provider: 'mockprov' } }, + providers: [{ name: 'mockprov', type: 'openai-compatible', baseUrl, apiKey: 'test-key' }], + sandbox: { enabled: false }, + }, + settings, + ), + null, + 2, + ), + ); + return { root, home, workspace, conversations, env }; +} + +/** Full copy (not hard links): a resumed session appends to its file, which must never reach the source store. */ +function copyStore(store, target) { + fs.cpSync(store, target, { recursive: true, dereference: false, preserveTimestamps: true }); +} + +function seedWorkspace(workspace) { + fs.writeFileSync(path.join(workspace, 'README.md'), '# demo project\n\nA small workspace for the parity walk.\n'); + fs.writeFileSync( + path.join(workspace, 'notes.txt'), + Array.from({ length: 40 }, (_, i) => `line ${i + 1}: the quick brown fox`).join('\n') + '\n', + ); + fs.mkdirSync(path.join(workspace, 'src'), { recursive: true }); + fs.writeFileSync(path.join(workspace, 'src', 'main.js'), "export function main() {\n return 'hello';\n}\n"); +} + +function merge(base, extra) { + if (!extra || typeof extra !== 'object' || Array.isArray(extra)) return extra ?? base; + const out = { ...base }; + for (const [key, value] of Object.entries(extra)) { + out[key] = value && typeof value === 'object' && !Array.isArray(value) ? merge(base?.[key] ?? {}, value) : value; + } + return out; +} + +export function scratchDir(preferred) { + const dir = preferred ?? fs.mkdtempSync(path.join(os.tmpdir(), 'term2-rt-')); + fs.mkdirSync(dir, { recursive: true }); + return dir; +} diff --git a/rewrite/parity/real-terminal/lib/latency.mjs b/rewrite/parity/real-terminal/lib/latency.mjs new file mode 100644 index 000000000..d68d29800 --- /dev/null +++ b/rewrite/parity/real-terminal/lib/latency.mjs @@ -0,0 +1,386 @@ +// Key-to-paint latency per keystroke class, idle and while a reply streams. +// +// Every sample: setup (unmeasured) -> one key injected from the page -> stop at the first xterm.js render whose +// screen satisfies the class predicate. CPU is the CLI process tree's utime+stime and bytes are pty output, +// both over [injection, paint + 100 ms]. While streaming, both include the stream's own rendering. +import { sleep, treeCpuMs } from './terminal.mjs'; +import { PRELUDE, AT_HOME, typeText, STREAM_ROW } from './session.mjs'; + +const KEYS = { + enter: '\r', + backspace: '\x7f', + escape: '\x1b', + down: '\x1b[B', + up: '\x1b[A', + pageDown: '\x1b[6~', + pageUp: '\x1b[5~', + ctrlO: '\x0f', + shiftTab: '\x1b[Z', +}; + +export const CLASSES = [ + 'type char', + 'backspace', + 'enter (composer)', + 'arrow (model menu)', + 'arrow (resume menu)', + 'ctrl+o', + 'shift+tab', + 'open /model', + 'open /settings', + 'scroll (resume page down/up)', +]; + +const fn = (body) => `fn:${PRELUDE}${body}`; +const composerHas = (text) => fn(`return composer.includes(${JSON.stringify(text)});`); +const composerLacks = (text) => fn(`return !composer.includes(${JSON.stringify(text)});`); +const backspaced = (kept, removed) => + fn(`return composer.includes(${JSON.stringify(kept)}) && !composer.includes(${JSON.stringify(kept + removed)});`); +const tailChangedFrom = (before) => fn(`return tail() !== ${JSON.stringify(before)};`); +// For measured keys the baseline tail is taken on the page at the instant of injection. +const TAIL_CHANGED = fn('return tail() !== base;'); +const TAIL_NOW = fn('return tail();'); + +async function tailOf(term) { + return term.page.evaluate(new Function(`const lines = window.screenLines(); ${PRELUDE} return tail();`)); +} + +/** How long any expected paint may take. Longer is a failure; waiting longer would only measure how bad. */ +export const PAINT_TIMEOUT_MS = 5_000; + +/** + * `restart` (optional) replaces a CLI that stopped answering keys with a fresh one on the same home, so a paint + * that arrives late cannot land in a later sample. It returns the new session. + */ +export async function runLatency(session, { phase, samples = {}, log = () => {}, misses = [], restart = null }) { + let current = session; + let term = session.term; + const results = Object.fromEntries(CLASSES.map((name) => [name, []])); + const n = (name, fallback) => samples[name] ?? fallback; + const streaming = phase === 'streaming'; + + const settle = async () => { + if (streaming) await sleep(120); + else await term.quiet(120, 4_000); + }; + + /** Keep a reply streaming during the streaming phase (re-prompt when the previous stream ended). */ + let openMenu = null; // the slash menu openSlash opened, while it is open + const ensureStream = async () => { + if (!streaming) return; + if (current.provider.activeStreams() > 0) return; + // Never type the prompt into an open menu (its filter would take it): back to the empty composer first. + await ensureHome(); + await typeText(term, 'stream a long reply please'); + await sleep(80); + term.write(KEYS.enter); + const started = Date.now(); + while (current.provider.activeStreams() === 0 && Date.now() - started < PAINT_TIMEOUT_MS) await sleep(20); + await term.waitFor(STREAM_ROW, PAINT_TIMEOUT_MS); + await sleep(300); + }; + + // A redraw can show a partial screen for a frame (legacy erases and repaints while a reply streams), so "not + // home" counts only once it has lasted `graceMs`. + const atHome = (graceMs = 300) => term.waitFor(`fn:${AT_HOME}`, graceMs).then(() => true, () => false); + /** Back to the empty composer: Escape out of menus, clear typed text. Never sends Escape while home. */ + const ensureHome = async () => { + for (let attempt = 0; attempt < 4 && !(await atHome()); attempt++) { + const typed = await term.page.evaluate(new Function(`const lines = window.screenLines(); ${PRELUDE} return /^\\s*❯\\s*\\S/.test(composer) ? composer.replace(/^\\s*❯\\s*/, '').length : 0;`)); + if (typed > 0) await clearComposer(typed + 2); + else { + term.write(KEYS.escape); + await term.waitFor(`fn:${AT_HOME}`, 2_000).catch(() => {}); + await settle(); + } + } + // Still not home: the CLI stopped answering (a frozen UI). Replace it so a late paint cannot land in a + // later sample. + if (restart && !(await atHome(2_000))) { + const screen = await term.screenText(); + log(` CLI not answering keys, restarting it; screen:\n${screen.split('\n').map((l) => ` | ${l}`).join('\n')}`); + misses.push({ phase, name: 'restart', index: 0, screen: `(not back at the empty composer after Escapes; CLI restarted)\n${screen}` }); + openMenu = null; + current = await restart(current); + term = current.term; + } + }; + const recover = async () => { + openMenu = null; + await ensureHome(); + }; + + const measure = async (name, key, predicate, timeoutMs = PAINT_TIMEOUT_MS, { typed = false } = {}) => { + if (streaming && openMenu && current.provider.activeStreams() === 0) { + // The reply ended while a menu is open: close it, start another reply, reopen the same menu. + const command = openMenu; + await closeMenu(); + await ensureStream(); + await openSlash(command); + if (command === '/resume') await term.waitFor(RESUME_LIST, PAINT_TIMEOUT_MS).catch(() => {}); + await settle(); + } + // With a command already typed, restarting the reply would clear it; the caller started one just before. + if (!typed) await ensureStream(); + const cpu0 = treeCpuMs(term.pid); + const bytes0 = term.bytes; + const base = predicate === TAIL_CHANGED ? TAIL_NOW : null; + const result = await term.measureKey(key, predicate, timeoutMs, base); + await sleep(100); + const sample = { + ok: result.ok, + pre: result.pre ?? false, + ms: result.ms, + parseMs: result.parseMs, + cpuMs: treeCpuMs(term.pid) - cpu0, + bytes: term.bytes - bytes0, + streaming: streaming && current.provider.activeStreams() > 0, + }; + results[name].push(sample); + if (!result.ok) { + log(` ${name}: no matching paint within ${timeoutMs} ms`); + misses.push({ phase, name, index: results[name].length - 1, screen: await term.screenText() }); + } + return sample; + }; + + const clearComposer = async (count) => { + for (let i = 0; i < count; i++) { + term.write(KEYS.backspace); + await sleep(8); + } + await settle(); + }; + + /** Open a slash menu by typing it and pressing Enter (unmeasured). */ + const openSlash = async (command) => { + openMenu = command; + await typeText(term, command); + await term.waitFor(composerHas(command), 5_000).catch(() => {}); + const before = await tailOf(term); + term.write(KEYS.enter); + await term.waitFor(tailChangedFrom(before), 8_000).catch(() => {}); + await settle(); + await sleep(300); + }; + + const closeMenu = async () => { + openMenu = null; + term.write(KEYS.escape); + await sleep(200); + await settle(); + await ensureHome(); + }; + + // --- typing and backspace: cycles of a unique prefix, then measured characters, then measured backspaces. + const letters = 'abcdefghijkl'; + const cycles = Math.ceil(Math.max(n('type char', 48), n('backspace', 48)) / letters.length); + for (let cycle = 0; cycle < cycles; cycle++) { + await ensureStream(); + await ensureHome(); + const prefix = `q${cycle}z`; + await typeText(term, prefix, 15); + await term.waitFor(composerHas(prefix), 5_000).catch(() => log(` typing prefix ${prefix} did not appear`)); + await settle(); + let typed = prefix; + for (const ch of letters) { + typed += ch; + await measure('type char', ch, composerHas(typed), PAINT_TIMEOUT_MS, { typed: true }); + await settle(); + } + for (let i = letters.length - 1; i >= 0; i--) { + const kept = typed.slice(0, -1); + await measure('backspace', KEYS.backspace, backspaced(kept, typed.at(-1)), PAINT_TIMEOUT_MS, { typed: true }); + typed = kept; + await settle(); + } + await clearComposer(prefix.length); + } + log(` typing done`); + + // --- Enter on the composer: a short prompt each time. Idle waits for the reply to finish. + for (let i = 0; i < n('enter (composer)', 10); i++) { + await ensureStream(); + await ensureHome(); + const text = `ping ${phase} ${i}`; + await typeText(term, text); + await term.waitFor(composerHas(text), 5_000).catch(() => log(` prompt ${text} did not appear`)); + await settle(); + await measure('enter (composer)', KEYS.enter, composerLacks(text), PAINT_TIMEOUT_MS, { typed: true }); + if (streaming) { + await settle(); + } else { + await term.waitFor(`Sure. This is a short answer to: ${text}`, 30_000).catch(() => {}); + await term.quiet(300, 10_000); + } + } + log(` enter done`); + + // --- Arrow keys in the model menu. + await ensureStream(); + await openSlash('/model'); + for (let i = 0; i < n('arrow (model menu)', 20); i++) { + await measure('arrow (model menu)', i % 2 === 0 ? KEYS.down : KEYS.up, TAIL_CHANGED); + await settle(); + } + await closeMenu(); + log(` model menu arrows done`); + + // --- Arrow keys and paging in the resume menu (the list a large store fills). Wait for the list first: the + // first open's load time is reported by measureStoreTimings, not here. + await ensureStream(); + await openSlash('/resume'); + // A list that has not painted within the timeout fails every resume-list key (legacy does not open it while a + // reply streams): they are recorded as misses without being sent, and the CLI is recovered. + const listed = await term.waitFor(RESUME_LIST, PAINT_TIMEOUT_MS).then(() => true, () => false); + if (listed) { + await settle(); + for (let i = 0; i < n('arrow (resume menu)', 20); i++) { + await measure('arrow (resume menu)', i % 4 < 2 ? KEYS.down : KEYS.up, TAIL_CHANGED); + await settle(); + } + for (let i = 0; i < n('scroll (resume page down/up)', 10); i++) { + await measure('scroll (resume page down/up)', i % 2 === 0 ? KEYS.pageDown : KEYS.pageUp, TAIL_CHANGED); + await settle(); + } + await closeMenu(); + } else { + log(` resume list did not render within ${PAINT_TIMEOUT_MS} ms`); + const screen = await term.screenText(); + for (const [name, count] of [['arrow (resume menu)', n('arrow (resume menu)', 20)], ['scroll (resume page down/up)', n('scroll (resume page down/up)', 10)]]) { + for (let i = 0; i < count; i++) results[name].push({ ok: false, pre: false, ms: null, unsent: true, streaming }); + misses.push({ phase, name, index: 0, screen: `(list not painted within ${PAINT_TIMEOUT_MS} ms; ${count} keys not sent)\n${screen}` }); + } + await recover(); + } + log(` resume menu done`); + + // --- Ctrl+O and Shift+Tab: whatever each CLI paints in response; restored after each sample. + for (let i = 0; i < n('ctrl+o', 10); i++) { + await ensureHome(); + const sample = await measure('ctrl+o', KEYS.ctrlO, TAIL_CHANGED); + await settle(); + // Legacy opens the model menu; term2-next toggles tool output. Undo whichever happened. + if (!(await atHome())) await ensureHome(); + else if (sample.ok) { + term.write(KEYS.ctrlO); + await settle(); + } + } + for (let i = 0; i < n('shift+tab', 10); i++) { + await ensureHome(); + await measure('shift+tab', KEYS.shiftTab, TAIL_CHANGED); + await settle(); + // term2-next asks to clear the session first (declined by Escape); legacy switched mode and the next press + // switches back. + await ensureHome(); + } + log(` ctrl+o / shift+tab done`); + + // --- Opening /model and /settings: Enter on the typed command. + for (const [name, command] of [ + ['open /model', '/model'], + ['open /settings', '/settings'], + ]) { + for (let i = 0; i < n(name, 8); i++) { + await ensureStream(); + await ensureHome(); + await typeText(term, command); + await term.waitFor(composerHas(command), 5_000).catch(() => {}); + await sleep(200); + await settle(); + await measure(name, KEYS.enter, TAIL_CHANGED, PAINT_TIMEOUT_MS, { typed: true }); + await settle(); + await sleep(200); + await closeMenu(); + } + } + log(` menus done`); + return results; +} + +/** + * The resume list has painted with entries. Legacy rows end in "N msgs"; term2-next shows a Preview pane beside + * the selected row, and at 80 columns it truncates rows before their message count. + */ +export const RESUME_LIST = /\d+ msgs?\b|❯ [^\n]+\bPreview\b/; + +/** + * Time from Enter on `/resume` to the first paint of the session list, twice (the first open may build an index), + * plus whether keys were answered while it loaded. Run right after startup, before anything else. + */ +export async function measureStoreTimings(session, { timeoutMs = PAINT_TIMEOUT_MS } = {}) { + const { term } = session; + const out = {}; + for (const label of ['firstResumeMs', 'secondResumeMs']) { + await typeText(term, '/resume'); + await sleep(300); + await term.quiet(200, 3_000); + // The list must appear after the key: the screen differs from the one at injection and shows session rows. + const listed = `fn:return lines.join('\\n') !== base && /Resume Conversation/.test(lines.join('\\n')) && ${RESUME_LIST}.test(lines.join('\\n'));`; + const result = await term.measureKey('\r', listed, timeoutMs, 'fn:return lines.join("\\n");'); + out[label] = result.ok ? result.ms : null; + if (!result.ok) { + // Over the timeout is a failure. Leave the CLI to the caller to replace (`needsRestart`): it may still be + // loading, and a list that paints later would land in the next measurement. + out.failed = `${label === 'firstResumeMs' ? 'first' : 'second'} /resume: no list within ${timeoutMs} ms`; + out.needsRestart = true; + break; + } + await sleep(300); + // Escape until home is verified: never type the next command into a list that is still open (Enter there + // resumes a session). + let home = false; + for (let attempt = 0; attempt < 5 && !home; attempt++) { + term.write('\x1b'); + home = await term.waitFor(`fn:${AT_HOME}`, 3_000).then(() => true, () => false); + if (!home) out.escapeRetries = (out.escapeRetries ?? 0) + 1; + } + if (!home) throw new Error('resume list did not close after 5 Escapes'); + await term.quiet(300, 5_000); + } + // After a failed first open the second is not a cached reopen; it is not measured. + out.secondResumeMs ??= null; + return out; +} + +/** p50/p95/max of the successful samples, plus mean CPU and bytes per key. */ +export function summarize(samples) { + const ok = samples.filter((s) => s.ok && !s.pre); + const ms = ok.map((s) => s.ms).sort((a, b) => a - b); + const q = (p) => (ms.length ? ms[Math.min(ms.length - 1, Math.ceil(p * ms.length) - 1)] : null); + const mean = (values) => (values.length ? values.reduce((a, b) => a + b, 0) / values.length : null); + return { + n: samples.length, + ok: ok.length, + missed: samples.filter((s) => !s.ok).length, + pre: samples.filter((s) => s.pre).length, + p50: q(0.5), + p95: q(0.95), + max: ms.length ? ms.at(-1) : null, + parseP50: (() => { + const p = ok.map((s) => s.parseMs).sort((a, b) => a - b); + return p.length ? p[Math.ceil(0.5 * p.length) - 1] : null; + })(), + cpuMsPerKey: mean(samples.map((s) => s.cpuMs)), + bytesPerKey: mean(samples.map((s) => s.bytes)), + }; +} + +/** + * Gate for one class: next within 1.2x or 5 ms of legacy at p50 and p95, no key over 200 ms, and no more + * keys without the expected paint than legacy had. A class where neither CLI painted anything is n/a. + */ +export function gate(legacy, next) { + if (legacy.ok === 0 && next.ok === 0) return { pass: true, na: true, reasons: ['neither CLI painted a change'] }; + const within = (l, n) => l !== null && n !== null && (n <= l * 1.2 || n - l <= 5); + const reasons = []; + if (next.ok === 0) reasons.push('no matching paint (legacy painted)'); + if (next.missed > legacy.missed) reasons.push(`${next.missed} key(s) never painted the change (legacy ${legacy.missed})`); + if (next.ok > 0 && legacy.ok > 0) { + if (!within(legacy.p50, next.p50)) reasons.push('p50 over 1.2x / +5 ms'); + if (!within(legacy.p95, next.p95)) reasons.push('p95 over 1.2x / +5 ms'); + } + if (next.max !== null && next.max > 200) reasons.push(`input stall ${next.max.toFixed(0)} ms > 200 ms`); + return { pass: reasons.length === 0, reasons }; +} diff --git a/rewrite/parity/real-terminal/lib/page.html b/rewrite/parity/real-terminal/lib/page.html new file mode 100644 index 000000000..2d5e98a2c --- /dev/null +++ b/rewrite/parity/real-terminal/lib/page.html @@ -0,0 +1,188 @@ + + + + + + + +
+ + + + diff --git a/rewrite/parity/real-terminal/lib/provider.mjs b/rewrite/parity/real-terminal/lib/provider.mjs new file mode 100644 index 000000000..710bf72cd --- /dev/null +++ b/rewrite/parity/real-terminal/lib/provider.mjs @@ -0,0 +1,120 @@ +// Loopback fake provider: OpenAI-compatible chat completions over SSE. No real provider, no network. +// A responder decides each reply from the request body, so the same script drives both CLIs identically. +import http from 'node:http'; + +/** + * A reply is one of: + * { text } one delta, then stop + * { deltas: string[], everyMs } streamed deltas with a delay between them (a reply "streaming") + * { toolCalls: [{ name, arguments }] } + */ +export async function startProvider(responder) { + const requests = []; + const open = new Set(); + let streaming = 0; + const server = http.createServer((req, res) => { + if (req.method === 'GET') { + res.writeHead(200, { 'content-type': 'application/json' }); + res.end(JSON.stringify({ object: 'list', data: [{ id: 'mock-alpha' }, { id: 'mock-beta' }] })); + return; + } + let raw = ''; + req.on('data', (chunk) => (raw += chunk)); + req.on('end', async () => { + let body = null; + try { + body = JSON.parse(raw); + } catch { + // keep null + } + requests.push(body); + const n = requests.length; + const reply = (await responder(body, n, raw)) ?? { text: 'done' }; + const id = `chatcmpl-${n}`; + res.writeHead(200, { 'content-type': 'text/event-stream' }); + req.socket.setNoDelay(true); + open.add(res); + res.on('close', () => open.delete(res)); + const send = (frame) => !res.writableEnded && res.write(`data: ${JSON.stringify(frame)}\n\n`); + const end = (usage = true) => { + send({ + id, + choices: [{ delta: {}, finish_reason: reply.toolCalls ? 'tool_calls' : 'stop' }], + ...(usage ? { usage: { prompt_tokens: 1200, completion_tokens: 80, total_tokens: 1280 } } : {}), + }); + if (!res.writableEnded) res.end('data: [DONE]\n\n'); + }; + if (reply.toolCalls) { + send({ + id, + choices: [ + { + delta: { + role: 'assistant', + tool_calls: reply.toolCalls.map((call, index) => ({ + index, + id: `call_${n}_${index}`, + type: 'function', + function: { name: call.name, arguments: JSON.stringify(call.arguments ?? {}) }, + })), + }, + }, + ], + }); + end(); + return; + } + if (reply.deltas) { + streaming += 1; + try { + send({ id, choices: [{ delta: { role: 'assistant', content: '' } }] }); + for (const delta of reply.deltas) { + if (res.writableEnded || res.destroyed) return; + send({ id, choices: [{ delta: { content: delta } }] }); + if (reply.everyMs) await new Promise((resolve) => setTimeout(resolve, reply.everyMs)); + } + end(); + } finally { + streaming -= 1; + } + return; + } + send({ id, choices: [{ delta: { role: 'assistant', content: reply.text ?? 'done' } }] }); + end(); + }); + }); + await new Promise((resolve) => server.listen(0, '127.0.0.1', resolve)); + return { + baseUrl: `http://127.0.0.1:${server.address().port}/v1`, + requests, + /** Replies currently streaming deltas (the client has not cancelled them). */ + activeStreams: () => streaming, + async close() { + for (const res of open) res.destroy(); + server.closeAllConnections(); + await new Promise((resolve) => server.close(resolve)); + }, + }; +} + +/** Text of the last user message in a chat-completions request. */ +export function lastUserText(body) { + const messages = body?.messages ?? []; + for (let i = messages.length - 1; i >= 0; i--) { + const message = messages[i]; + if (message.role !== 'user') continue; + if (typeof message.content === 'string') return message.content; + if (Array.isArray(message.content)) return message.content.map((part) => part.text ?? '').join(''); + } + return ''; +} + +/** True when the last message is a tool result (the model is being asked to continue after a tool). */ +export function afterToolResult(body) { + const messages = body?.messages ?? []; + return messages.at(-1)?.role === 'tool'; +} + +export function isCompactionRequest(raw) { + return raw.includes('[Host context-compaction request]') || raw.includes('# Historical transcript chunk') || /summar(y|ize) (the|this) conversation/i.test(raw); +} diff --git a/rewrite/parity/real-terminal/lib/record-templates.mjs b/rewrite/parity/real-terminal/lib/record-templates.mjs new file mode 100644 index 000000000..dfbe06b86 --- /dev/null +++ b/rewrite/parity/real-terminal/lib/record-templates.mjs @@ -0,0 +1,125 @@ +// Records template conversations by driving each CLI in a pty against the fake provider. The store generator +// only clones these blocks (fresh ids, times, seq), so every line it writes has a shape the CLI itself wrote, +// including how each CLI caps and references a large tool output. +import fs from 'node:fs'; +import path from 'node:path'; +import { createRequire } from 'node:module'; +import { stripVTControlCharacters } from 'node:util'; +import { startProvider, lastUserText, afterToolResult, isCompactionRequest } from './provider.mjs'; +import { prepareHome, makeRoot, CLIS } from './env.mjs'; + +const require = createRequire(import.meta.url); +const pty = require('@lydell/node-pty'); + +// Markers the generator looks for: which file a tool block read, and the streamed reply's delta tokens +// (a line with one token is a per-delta record, a line with all of them is the joined reply). +export const SMALL_FILE = 'small.txt'; +export const LARGE_FILE = 'large.txt'; +export const DELTA_COUNT = 40; +export const deltaToken = (i) => `rtd${String(i).padStart(6, '0')} `; +export const PROMPT_MARK = 'RT-PROMPT'; +// Manual /compact needs an explicit threshold for an uncatalogued model in both CLIs. +export const COMPACTION_SETTINGS = { + agent: { + contextCompaction: { enabled: false, mode: 'local', compactThresholdTokens: 100_000 }, + maxRequestInputTokens: 200_000, + }, +}; + +function responder(body, n, raw) { + if (isCompactionRequest(raw)) return { text: 'RT-SUMMARY compacted summary of the earlier work.' }; + if (afterToolResult(body)) return { text: 'RT-AFTER-TOOL I read the file; it holds generated rows.' }; + const prompt = lastUserText(body); + if (prompt.includes('read the small file')) { + return { toolCalls: [{ name: 'shell', arguments: { command: `cat ${SMALL_FILE}` } }] }; + } + if (prompt.includes('read the large file')) { + return { toolCalls: [{ name: 'shell', arguments: { command: `cat ${LARGE_FILE}` } }] }; + } + if (prompt.includes('stream')) { + return { deltas: Array.from({ length: DELTA_COUNT }, (_, i) => deltaToken(i)), everyMs: 2 }; + } + return { text: `RT-REPLY ${n} plain answer.` }; +} + +const WORDS = 'buffer render session cache index stream token module export value handler request config parser layout'.split(' '); + +/** Build-log style lines; the large file is far past both CLIs' output caps, so each applies its own. */ +function generatedFile(lines) { + let seed = lines; + const next = () => (seed = (seed * 1103515245 + 12345) % 2147483648) / 2147483648; + const pickWord = () => WORDS[Math.floor(next() * WORDS.length)]; + return ( + Array.from( + { length: lines }, + (_, i) => `src/${pickWord()}/${pickWord()}.ts:${i + 1}: ${Array.from({ length: 8 }, pickWord).join(' ')}`, + ).join('\n') + '\n' + ); +} + +async function drive(cli, env, cwd, steps) { + const child = pty.spawn(process.execPath, [cli], { name: 'xterm-256color', cols: 160, rows: 50, cwd, env }); + let out = ''; + child.onData((data) => (out += data)); + let exited = false; + child.onExit(() => (exited = true)); + const seen = () => stripVTControlCharacters(out); + const waitFor = async (needle, from, timeoutMs = 60_000) => { + const started = Date.now(); + while (!seen().slice(from).includes(needle)) { + if (exited || Date.now() - started > timeoutMs) { + throw new Error(`template recording: waiting for ${needle}\n${seen().slice(-1500)}`); + } + await new Promise((resolve) => setTimeout(resolve, 25)); + } + }; + const pause = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); + await waitFor('❯', 0); + await pause(800); + for (const step of steps) { + const from = seen().length; + for (const ch of step.type) { + child.write(ch); + await pause(4); + } + await pause(150); + child.write('\r'); + await waitFor(step.until, from); + await pause(step.settleMs ?? 1500); + } + child.write('\x03'); + await pause(300); + child.write('\x03'); + const started = Date.now(); + while (!exited && Date.now() - started < 15_000) await pause(50); + if (!exited) child.kill('SIGKILL'); +} + +/** Record the template conversation for one CLI; returns its conversation directory. */ +export async function recordTemplates(which, scratch) { + const provider = await startProvider(responder); + try { + const record = async (steps) => { + const home = prepareHome({ + root: makeRoot(scratch, which), + baseUrl: provider.baseUrl, + settings: COMPACTION_SETTINGS, + }); + fs.writeFileSync(path.join(home.workspace, SMALL_FILE), generatedFile(30)); + fs.writeFileSync(path.join(home.workspace, LARGE_FILE), generatedFile(20_000)); + await drive(CLIS[which].cli, home.env, home.workspace, steps); + return home.conversations; + }; + const long = await record([ + { type: `${PROMPT_MARK} please read the small file`, until: 'RT-AFTER-TOOL' }, + { type: `${PROMPT_MARK} please read the large file`, until: 'RT-AFTER-TOOL' }, + { type: `${PROMPT_MARK} now stream the reply`, until: deltaToken(DELTA_COUNT - 1).trim() }, + { type: `${PROMPT_MARK} one more question`, until: 'plain answer', settleMs: 2500 }, + { type: '/compact', until: 'ompact', settleMs: 4000 }, + { type: `${PROMPT_MARK} after the compaction`, until: 'plain answer' }, + ]); + return { long }; + } finally { + await provider.close(); + } +} diff --git a/rewrite/parity/real-terminal/lib/report.mjs b/rewrite/parity/real-terminal/lib/report.mjs new file mode 100644 index 000000000..4bab34cc3 --- /dev/null +++ b/rewrite/parity/real-terminal/lib/report.mjs @@ -0,0 +1,166 @@ +// Pixel diff (in Chromium, on canvases) and the HTML report. +import fs from 'node:fs'; +import path from 'node:path'; +import { CLASSES } from './latency.mjs'; + +/** Compare two PNGs pixel by pixel. Writes a diff PNG (red = differs) and returns the count. */ +export async function diffImages(stage, a, b, diffFile) { + const page = await stage.browser.newPage(); + try { + const toUrl = (file) => `data:image/png;base64,${fs.readFileSync(file).toString('base64')}`; + const result = await page.evaluate( + async ({ a, b }) => { + const load = (src) => + new Promise((resolve, reject) => { + const img = new Image(); + img.onload = () => resolve(img); + img.onerror = reject; + img.src = src; + }); + const [ia, ib] = await Promise.all([load(a), load(b)]); + const w = Math.max(ia.width, ib.width); + const h = Math.max(ia.height, ib.height); + const read = (img) => { + const c = new OffscreenCanvas(w, h); + const x = c.getContext('2d'); + x.fillStyle = '#ff00ff'; + x.fillRect(0, 0, w, h); + x.drawImage(img, 0, 0); + return x.getImageData(0, 0, w, h).data; + }; + const pa = read(ia); + const pb = read(ib); + const out = new OffscreenCanvas(w, h); + const ox = out.getContext('2d'); + const diff = ox.createImageData(w, h); + let count = 0; + for (let i = 0; i < pa.length; i += 4) { + const same = pa[i] === pb[i] && pa[i + 1] === pb[i + 1] && pa[i + 2] === pb[i + 2]; + if (!same) count++; + const grey = (pa[i] + pa[i + 1] + pa[i + 2]) / 12; + diff.data[i] = same ? grey : 255; + diff.data[i + 1] = same ? grey : 30; + diff.data[i + 2] = same ? grey : 30; + diff.data[i + 3] = 255; + } + ox.putImageData(diff, 0, 0); + const blob = await out.convertToBlob({ type: 'image/png' }); + const bytes = new Uint8Array(await blob.arrayBuffer()); + let binary = ''; + for (let i = 0; i < bytes.length; i += 0x8000) binary += String.fromCharCode(...bytes.subarray(i, i + 0x8000)); + return { count, total: w * h, sizeA: [ia.width, ia.height], sizeB: [ib.width, ib.height], png: btoa(binary) }; + }, + { a: toUrl(a), b: toUrl(b) }, + ); + fs.writeFileSync(diffFile, Buffer.from(result.png, 'base64')); + delete result.png; + return result; + } finally { + await page.close(); + } +} + +/** Rows whose text differs (after masking the same spans in text). */ +export function textDiff(a, b, masks) { + const mask = (line) => masks.reduce((s, m) => s.replace(new RegExp(m.re.source, 'g'), (x) => '▒'.repeat(x.length)), line); + const la = a.split('\n').map(mask); + const lb = b.split('\n').map(mask); + const rows = []; + for (let i = 0; i < Math.max(la.length, lb.length); i++) { + if ((la[i] ?? '') !== (lb[i] ?? '')) rows.push({ row: i, legacy: la[i] ?? '', next: lb[i] ?? '' }); + } + return rows; +} + +const esc = (s) => String(s).replace(/[&<>"]/g, (c) => ({ '&': '&', '<': '<', '>': '>', '"': '"' })[c]); +const fmt = (v, d = 1) => (v === null || v === undefined ? '—' : Number(v).toFixed(d)); + +export function writeReport(file, results) { + const rel = (p) => path.relative(path.dirname(file), p); + const env = results.environment; + const parts = []; + parts.push(`Real-terminal check + +`); + parts.push(`

term2 vs term2-next — real-terminal check

+

Generated ${esc(results.generatedAt)} · issue #140 (flip gate item 5). Legacy is the spec.

+

Verdict

    +
  • Latency gate: ${results.verdict.latency ? 'pass' : 'FAIL'}
  • +
  • Screenshot gate: ${results.verdict.screenshots ? 'pass' : 'FAIL'} (${results.verdict.identicalShots}/${results.verdict.totalShots} pairs identical after masks)
  • +
  • Soak: ${esc(results.verdict.soak)}
+

Environment

+${Object.entries(env) + .map(([k, v]) => ``) + .join('')} +
${esc(k)}${esc(typeof v === 'object' ? JSON.stringify(v) : v)}
`); + + for (const size of results.sizes) { + parts.push(`

${size.cols}×${size.rows}

`); + if (size.errors?.length) { + parts.push(`

Parts of this size could not run:

${esc(size.errors.join('\n\n'))}
`); + } + parts.push(`

Store timings

+${['legacy', 'next'] + .map((w) => { + const t = size.store[w] ?? {}; + const stall = (v) => (v !== null && v !== undefined && v > 200 ? 'bad' : ''); + // null after a failure: no list within the paint timeout (the first) or not measured (the second). + const cell = (v, first) => + v === null && t.failed + ? `` + : ``; + return `${cell(t.firstResumeMs, true)}${cell(t.secondResumeMs, false)}`; + }) + .join('')}
startup → composer (ms)first /resume → list (ms)second /resume → list (ms)
${first ? 'FAIL (no list within 5 s)' : 'not measured'}${fmt(v, 0)}
${w}${fmt(t.startupMs, 0)}
`); + for (const phase of ['idle', 'streaming']) { + parts.push(`

Key-to-paint latency — ${phase}

+ +${CLASSES.map((c) => { + const l = size.latency[phase].legacy[c]; + const n = size.latency[phase].next[c]; + const g = size.latency[phase].gate[c]; + return ``; +}).join('')}
classlegacy p50p95maxnext p50p95maxlegacy CPU/key msnext CPU/key mslegacy bytes/keynext bytes/keynext missedgate
${esc(c)}${fmt(l.p50)}${fmt(l.p95)}${fmt(l.max)}${fmt(n.p50)}${fmt(n.p95)}${fmt(n.max)}${fmt(l.cpuMsPerKey)}${fmt(n.cpuMsPerKey)}${fmt(l.bytesPerKey, 0)}${fmt(n.bytesPerKey, 0)}${n.missed}/${n.n}${g.na ? 'n/a (neither painted)' : g.pass ? 'pass' : esc(g.reasons.join('; '))}
`); + const misses = size.misses?.[phase] ?? []; + if (misses.length) { + parts.push(`
${misses.length} missed key(s) in ${phase} — screens at the timeout${misses + .slice(0, 12) + .map((m) => `

${esc(m.cli)} · ${esc(m.name)} #${m.index}

${esc(m.screen)}
`) + .join('')}
`); + } + } + parts.push(`

Screenshots

Masks (grey boxes): version, ids, paths, ports, durations/times, spinner frames. Left legacy, middle term2-next, right pixel diff (red).

`); + for (const shot of size.shots) { + const pct = shot.diff ? ((100 * shot.diff.count) / shot.diff.total).toFixed(2) : '—'; + parts.push(`
${esc(shot.step)} — ${shot.identical ? 'identical' : `${pct}% pixels differ`} +${shot.notes.length ? ` · ${esc(shot.notes.join('; '))}` : ''} +
legacy
+
term2-next
+
diff
+${shot.rows.length ? `
${shot.rows.length} text row(s) differ
${shot.rows
+        .slice(0, 40)
+        .map((r) => `row ${String(r.row).padStart(2)}  L │${esc(r.legacy)}\n        N │${esc(r.next)}`)
+        .join('\n')}
` : ''}
`); + } + } + if (results.soak?.length) { + parts.push(`

Soak differences

Reported by the context-free soak agent; every item is unexplained until the owner's team triages it.

    ${results.soak + .map((d) => `
  1. unexplained — ${esc(d)}
  2. `) + .join('')}
`); + } + parts.push(''); + fs.writeFileSync(file, parts.join('\n')); +} diff --git a/rewrite/parity/real-terminal/lib/session.mjs b/rewrite/parity/real-terminal/lib/session.mjs new file mode 100644 index 000000000..d8d3a03c7 --- /dev/null +++ b/rewrite/parity/real-terminal/lib/session.mjs @@ -0,0 +1,144 @@ +// Start one CLI in a real terminal with its own home, store copy and fake provider, and the small helpers the +// latency run, the screenshot walk and the soak share. +import fs from 'node:fs'; +import path from 'node:path'; +import { openTerminal, sleep } from './terminal.mjs'; +import { startProvider, lastUserText, afterToolResult, isCompactionRequest } from './provider.mjs'; +import { prepareHome, makeRoot, CLIS } from './env.mjs'; + +/** Words streamed by the fake model while "a reply streams"; predicates skip rows made of them. */ +export const STREAM_WORD = 'sw'; +export const STREAM_ROW = /\bsw\d+\b/; + +/** + * The scripted model both CLIs talk to. Deterministic per prompt so both CLIs get identical replies. + * "stream ..." a long streamed reply (STREAM_WORD tokens, ~25 s) + * "list the files ..." shell `ls` (auto-approved read), then a short summary + * "create a file ..." shell `touch` (needs approval), then a short summary + * "show markdown ..." a markdown reply (heading, list, code block) + * anything else a short plain reply + */ +export function scriptedModel({ streamDeltas = 2500, streamEveryMs = 10 } = {}) { + return (body, n, raw) => { + if (isCompactionRequest(raw)) return { text: 'Summary: the user explored the demo project and asked questions.' }; + if (afterToolResult(body)) return { text: 'Done. The command finished; the workspace has README.md, notes.txt and src/.' }; + const prompt = lastUserText(body).toLowerCase(); + if (prompt.includes('stream')) { + return { + deltas: Array.from({ length: streamDeltas }, (_, i) => `${i % 12 === 11 ? '\n' : ''}${STREAM_WORD}${i} `), + everyMs: streamEveryMs, + }; + } + if (prompt.includes('list the files')) return { toolCalls: [{ name: 'shell', arguments: { command: 'ls' } }] }; + if (prompt.includes('create a file')) { + return { toolCalls: [{ name: 'shell', arguments: { command: 'touch created-by-walk.txt' } }] }; + } + if (prompt.includes('markdown')) { + return { + text: '## Plan\n\n1. Read `notes.txt`\n2. Summarise it\n\n```js\nexport function main() {\n return 42;\n}\n```\n\nThat is **all**.', + }; + } + return { text: `Sure. This is a short answer to: ${prompt.slice(0, 40)}` }; + }; +} + +/** + * Resolve the store layout: a generated store (`/conversations` + `/conversations-next`) or a real + * term2 data dir with the same two names. Returns the per-CLI source directory (or null) and a workspace. + */ +export function resolveStore(store) { + if (!store) return { legacy: null, next: null, workspace: null }; + const dir = path.resolve(store); + const pick = (name) => (fs.existsSync(path.join(dir, name)) ? path.join(dir, name) : null); + const legacy = pick('conversations'); + const next = pick('conversations-next'); + if (!legacy && !next) throw new Error(`--store ${dir} has neither conversations/ nor conversations-next/`); + return { legacy, next, workspace: pick('workspace') }; +} + +/** + * `home` (optional) reuses a previous session's home and store copy (its settings are re-pointed at this + * session's provider); `keep` leaves the home on disk after close() so a later session can reuse it. + */ +export async function startCli(stage, { which, scratch, cols, rows, store, workspace, model, settings, home: reuse, keep = false }) { + const provider = await startProvider(model ?? scriptedModel()); + const home = reuse + ? prepareHome({ root: reuse.root, baseUrl: provider.baseUrl, store: null, settings, reuse: true }) + : prepareHome({ root: makeRoot(scratch, which), baseUrl: provider.baseUrl, store, settings }); + const cwd = workspace ?? home.workspace; + const term = await openTerminal(stage, { + command: process.execPath, + args: [CLIS[which].cli], + env: home.env, + cwd, + cols, + rows, + label: which, + }); + const session = { + which, + term, + provider, + home, + cwd, + async ready(timeoutMs = 60_000) { + await term.waitFor(`fn:${COMPOSER_READY}`, timeoutMs); + await term.quiet(400, 10_000); + }, + async close() { + if (!term.exited) { + term.write('\x03'); + await sleep(150); + term.write('\x03'); + await Promise.race([term.exit, sleep(5_000)]); + } + term.dispose(); + await provider.close(); + if (!keep) fs.rmSync(home.root, { recursive: true, force: true, maxRetries: 5 }); + }, + }; + return session; +} + +/** Type like a person: one key per write. A whole string in one write is a paste to both CLIs. */ +export async function typeText(term, text, gapMs = 12) { + for (const ch of text) { + term.write(ch); + await sleep(gapMs); + } +} + +/** + * Predicate prelude shared by every screen test. `lines` is the visible xterm.js viewport. + * sep index of the last composer separator row (a row of ─) + * composer the input row: the last ❯ row below it (legacy lists queued steers between the two) + * tail() rows after the last streamed row, minus the status row and elapsed-time/spinner rows: the part of + * the screen a key can change while a reply streams above it + */ +export const PRELUDE = ` + let sep = -1; + for (let i = lines.length - 1; i >= 0; i--) if (/^\\s*─{20,}\\s*$/.test(lines[i])) { sep = i; break; } + let composer = sep >= 0 ? (lines[sep + 1] ?? '') : ''; + for (let i = lines.length - 1; i > sep && sep >= 0; i--) if (/^\\s*❯/.test(lines[i])) { composer = lines[i]; break; } + const tail = () => { + let start = 0; + for (let i = 0; i < lines.length; i++) if (${STREAM_ROW}.test(lines[i])) start = i + 1; + const rows = lines.slice(start).filter((l) => l.trim() !== ''); + rows.pop(); + return rows.filter((l) => !/\\d+(\\.\\d+)?s\\b|tok\\/s|[\\u2800-\\u28ff]/.test(l)).join('\\n'); + }; +`; +export const COMPOSER_READY = `${PRELUDE} return sep >= 0 && /❯/.test(composer);`; +/** + * Home: the composer is empty and nothing is open. term2-next draws menus and dialogs as a box that closes right + * above the separator (a resume list can be taller than half the screen); legacy draws them below it. + */ +export const DIALOG_OPEN = ` + // term2-next draws dialogs right above the separator (the nearest non-blank row is the box's bottom edge; a + // markdown code box in the transcript has text after it); legacy draws menus below it. + let above = sep - 1; + while (above >= 0 && !lines[above].trim()) above--; + const dialogOpen = sep >= 0 && ((above >= 0 && /^\\s*╰/.test(lines[above])) || lines.slice(sep + 1).some((l) => /^\\s*[╭╰]|Filter:/.test(l)));`; +export const AT_HOME = `${PRELUDE}${DIALOG_OPEN} + if (sep < 0 || !/^\\s*❯\\s*$/.test(composer)) return false; + return !dialogOpen;`; diff --git a/rewrite/parity/real-terminal/lib/terminal.mjs b/rewrite/parity/real-terminal/lib/terminal.mjs new file mode 100644 index 000000000..e9ef5ee15 --- /dev/null +++ b/rewrite/parity/real-terminal/lib/terminal.mjs @@ -0,0 +1,280 @@ +// A real terminal for one CLI: node-pty runs the program, its bytes stream over SSE into xterm.js in headless +// Chromium, and everything a user would see is read back from xterm.js (buffer text, rendered pixels). +// +// Path: CLI <-> pty (node-pty) <-> this process <-> SSE / POST <-> xterm.js (DOM renderer) in Chromium. +// Key-to-paint timing is measured entirely on the page clock: the page timestamps the key, posts it to the pty, +// and stops the clock at the first xterm.js render whose screen satisfies the key's predicate. +import fs from 'node:fs'; +import http from 'node:http'; +import path from 'node:path'; +import { createRequire } from 'node:module'; +import { fileURLToPath } from 'node:url'; + +const require = createRequire(import.meta.url); +const here = path.dirname(fileURLToPath(import.meta.url)); +const repo = path.resolve(here, '..', '..', '..', '..'); +const pty = require('@lydell/node-pty'); +const { chromium } = require('playwright'); + +export const TRANSPORT = 'node-pty bridge (no sshd in this environment) -> SSE -> xterm.js DOM renderer, headless Chromium'; +export const FONT = { family: "'DejaVu Sans Mono', monospace", size: 14 }; + +const xtermJs = fs.readFileSync(path.join(repo, 'node_modules/@xterm/xterm/lib/xterm.js'), 'utf8'); +const xtermCss = fs.readFileSync(path.join(repo, 'node_modules/@xterm/xterm/css/xterm.css'), 'utf8'); +const pageHtml = fs.readFileSync(path.join(here, 'page.html'), 'utf8'); + +export function xtermVersion() { + return JSON.parse(fs.readFileSync(path.join(repo, 'node_modules/@xterm/xterm/package.json'), 'utf8')).version; +} + +/** One Chromium and one local bridge server shared by every terminal of a run. */ +export async function startStage() { + const terminals = new Map(); + const server = http.createServer((req, res) => { + const url = new URL(req.url, 'http://x'); + const [, kind, id] = url.pathname.split('/'); + if (kind === '' || kind === 'page') { + res.writeHead(200, { 'content-type': 'text/html' }); + res.end(pageHtml.replace('/*XTERM_CSS*/', xtermCss).replace('/*XTERM_JS*/', () => xtermJs)); + return; + } + const term = terminals.get(id); + if (!term) { + res.writeHead(404).end(); + return; + } + if (kind === 'out') { + req.socket.setNoDelay(true); + res.writeHead(200, { 'content-type': 'text/event-stream', 'cache-control': 'no-cache', connection: 'keep-alive' }); + res.write(': open\n\n'); + term.attach(res); + req.on('close', () => term.detach(res)); + return; + } + if (kind === 'in' && req.method === 'POST') { + req.socket.setNoDelay(true); + let body = ''; + req.setEncoding('utf8'); + req.on('data', (chunk) => (body += chunk)); + req.on('end', () => { + term.input(JSON.parse(body).data); + res.writeHead(204).end(); + }); + return; + } + res.writeHead(404).end(); + }); + await new Promise((resolve) => server.listen(0, '127.0.0.1', resolve)); + const origin = `http://127.0.0.1:${server.address().port}`; + const browser = await chromium.launch({ + args: ['--disable-frame-rate-limit', '--disable-gpu-vsync', '--font-render-hinting=none'], + }); + return { + origin, + browser, + chromiumVersion: browser.version(), + terminals, + async close() { + for (const term of terminals.values()) term.dispose(); + await browser.close(); + server.closeAllConnections(); + await new Promise((resolve) => server.close(resolve)); + }, + }; +} + +let nextId = 0; + +/** + * Start `command args` in a pty of cols x rows and attach it to a fresh xterm.js page. + * Returns the handle the harness drives. + */ +export async function openTerminal(stage, { command, args = [], env, cwd, cols, rows, label = 'term' }) { + const id = `${label}-${++nextId}`; + const listeners = new Set(); + const backlog = []; + let bytes = 0; + let lastOutputAt = Date.now(); + let exited = null; + let resolveExit; + const exit = new Promise((resolve) => (resolveExit = resolve)); + + const child = pty.spawn(command, args, { name: 'xterm-256color', cols, rows, cwd, env }); + const rawLog = process.env.RT_RAW_LOG ? `${process.env.RT_RAW_LOG}.${label}.${child.pid}` : null; + child.onData((data) => { + if (rawLog) fs.appendFileSync(rawLog, data); + bytes += Buffer.byteLength(data, 'utf8'); + lastOutputAt = Date.now(); + const frame = `data: ${JSON.stringify(data)}\n\n`; + if (listeners.size === 0) backlog.push(frame); + for (const res of listeners) res.write(frame); + }); + child.onExit((event) => { + exited = event; + resolveExit(event); + }); + + const handle = { + id, + label, + pid: child.pid, + cols, + rows, + attach(res) { + listeners.add(res); + for (const frame of backlog.splice(0)) res.write(frame); + }, + detach(res) { + listeners.delete(res); + }, + input(data) { + if (rawLog) fs.appendFileSync(rawLog, `\n<<>>\n`); + if (!exited) child.write(data); + }, + dispose() { + try { + if (!exited) child.kill('SIGKILL'); + } catch { + // already gone + } + void page.close().catch(() => {}); + }, + }; + stage.terminals.set(id, handle); + + const page = await stage.browser.newPage({ viewport: { width: 1600, height: 1000 }, deviceScaleFactor: 1 }); + await page.goto(`${stage.origin}/page`); + await page.evaluate( + ({ id, cols, rows, font }) => window.boot(id, cols, rows, font), + { id, cols, rows, font: FONT }, + ); + + Object.defineProperties(handle, { + exited: { get: () => exited }, + bytes: { get: () => bytes }, + lastOutputAt: { get: () => lastOutputAt }, + }); + Object.assign(handle, { + page, + exit, + /** Write straight into the pty (walk and setup; not timed). */ + write(data) { + handle.input(data); + }, + /** Visible rows of the xterm.js viewport, right-trimmed. */ + async screen() { + return page.evaluate(() => window.screenLines()); + }, + async screenText() { + return (await handle.screen()).join('\n'); + }, + /** Wait until the xterm.js screen satisfies `test` (RegExp or string, or function source over `lines`). */ + async waitFor(test, timeoutMs = 30_000) { + const source = predicateSource(test); + const ok = await page.evaluate(({ source, timeoutMs }) => window.waitScreen(source, timeoutMs), { + source, + timeoutMs, + }); + if (!ok) { + const text = await handle.screenText(); + throw new Error(`[${label}] timed out waiting for ${String(test)}\n--- screen ---\n${text}`); + } + }, + /** Resolve once no pty output arrived for quietMs (or after maxMs). */ + async quiet(quietMs = 250, maxMs = 5_000) { + const started = Date.now(); + while (Date.now() - started < maxMs) { + if (Date.now() - lastOutputAt >= quietMs) break; + await sleep(20); + } + // Let xterm.js parse and render whatever arrived. + await page.evaluate(() => window.flush()); + }, + /** + * Time one keystroke on the page clock: injection -> first render satisfying `test`. + * `base` (optional, same forms as `test`) is evaluated on the page at injection; `test` sees it as `base`. + * Returns { ms, parseMs, ok }. + */ + async measureKey(data, test, timeoutMs = 5_000, base = null) { + return page.evaluate( + ({ data, source, timeoutMs, baseSource }) => window.measureKey(data, source, timeoutMs, baseSource), + { data, source: predicateSource(test), timeoutMs, baseSource: base ? predicateSource(base) : null }, + ); + }, + async resize(newCols, newRows) { + child.resize(newCols, newRows); + handle.cols = newCols; + handle.rows = newRows; + await page.evaluate(({ c, r }) => window.resizeTerm(c, r), { c: newCols, r: newRows }); + }, + /** Rectangles (in px, relative to the screen element) of cells matching each mask regex. */ + async screenshot(file, masks = []) { + await page.evaluate(() => window.flush()); + const rects = await page.evaluate((masks) => window.maskRects(masks), masks.map((m) => [m.source, m.flags])); + await page.evaluate((rects) => window.paintMasks(rects), rects); + const element = await page.$('#screen'); + await element.screenshot({ path: file }); + await page.evaluate(() => window.paintMasks([])); + return rects; + }, + }); + return handle; +} + +function predicateSource(test) { + if (test instanceof RegExp) return `return new RegExp(${JSON.stringify(test.source)}, ${JSON.stringify(test.flags)}).test(lines.join('\\n'));`; + if (typeof test === 'string' && test.startsWith('fn:')) return test.slice(3); + if (typeof test === 'string') return `return lines.join('\\n').includes(${JSON.stringify(test)});`; + if (typeof test === 'function') return `return (${test.toString()})(lines);`; + throw new Error(`unsupported predicate ${test}`); +} + +export const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); + +/** utime+stime (ms) of pid and all its descendants, from /proc. */ +export function treeCpuMs(rootPid) { + const ticks = 100; // USER_HZ on Linux + const stats = new Map(); + for (const entry of fs.readdirSync('/proc')) { + if (!/^\d+$/.test(entry)) continue; + try { + const raw = fs.readFileSync(`/proc/${entry}/stat`, 'utf8'); + const fields = raw.slice(raw.lastIndexOf(')') + 2).split(' '); + stats.set(Number(entry), { ppid: Number(fields[1]), cpu: Number(fields[11]) + Number(fields[12]) }); + } catch { + // process exited while scanning + } + } + let total = 0; + const queue = [rootPid]; + const seen = new Set(); + while (queue.length) { + const pid = queue.pop(); + if (seen.has(pid)) continue; + seen.add(pid); + const stat = stats.get(pid); + if (stat) total += stat.cpu; + for (const [child, s] of stats) if (s.ppid === pid) queue.push(child); + } + return (total * 1000) / ticks; +} + +/** Harness floor: key-to-paint for raw pty echo (`cat`) through the same pty -> SSE -> xterm.js path. */ +export async function calibrate(stage, keys = 40) { + const term = await openTerminal(stage, { command: '/bin/cat', args: [], env: { PATH: process.env.PATH }, cwd: '/', cols: 100, rows: 34, label: 'cat' }); + try { + await sleep(300); + let typed = ''; + const ms = []; + for (let i = 0; i < keys; i++) { + typed += 'abcdefghij'[i % 10]; + const result = await term.measureKey(typed.at(-1), typed); + if (result.ok) ms.push(result.ms); + await sleep(40); + } + ms.sort((a, b) => a - b); + return { p50: ms[Math.ceil(ms.length / 2) - 1], max: ms.at(-1), n: ms.length }; + } finally { + term.dispose(); + } +} diff --git a/rewrite/parity/real-terminal/lib/walk.mjs b/rewrite/parity/real-terminal/lib/walk.mjs new file mode 100644 index 000000000..55a9be6ff --- /dev/null +++ b/rewrite/parity/real-terminal/lib/walk.mjs @@ -0,0 +1,172 @@ +// The scripted screenshot walk: the same keys, at a person's pace, for both CLIs. Each step ends with a +// screenshot of the xterm.js screen (masks painted over) and the screen text. +import fs from 'node:fs'; +import path from 'node:path'; +import { sleep } from './terminal.mjs'; +import { typeText, PRELUDE, COMPOSER_READY, AT_HOME, DIALOG_OPEN } from './session.mjs'; +import { RESUME_LIST, PAINT_TIMEOUT_MS } from './latency.mjs'; + +/** + * The only things masked before pixels are compared (issue #140): version, ids, paths, ports, durations + * (including wall-clock times and relative ages, which move between runs) and spinner frames. + */ +export const MASKS = [ + { name: 'version', re: /\bv\d+\.\d+\.\d+[-+\w.]*/ }, + { name: 'id', re: /\bconv_[0-9a-f-]{36}\b|\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b|\bnon-interactive-[0-9a-f-]+/ }, + { name: 'path', re: /(?:~|\/(?:tmp|home|root|var|Users|private|opt))(?:\/[\w.@+-]+)+\/?/ }, + { name: 'port', re: /\b(?:127\.0\.0\.1|localhost):\d+\b/ }, + { + name: 'duration', + re: /\b\d+(?:\.\d+)?\s?(?:ms|s|m|h)\b|\b\d+ (?:seconds?|minutes?|hours?|days?|months?) ago\b|\b\d+(?:\.\d+)? ?(?:tok\/s|t\/s)|\b\d{1,2}\/\d{1,2}\/\d{4},? \d{1,2}:\d{2}(?::\d{2})?\s?(?:AM|PM)?/, + }, + { name: 'spinner', re: /[⠀-⣿]/ }, +]; + +const KEYS = { enter: '\r', escape: '\x1b', down: '\x1b[B', ctrlC: '\x03', ctrlO: '\x0f', shiftTab: '\x1b[Z' }; +const READY = `fn:${COMPOSER_READY}`; +const NOT_READY_OR_MENU = `fn:return !(() => { ${AT_HOME} })();`; + +/** + * Each step: what to do, what to wait for (soft: a timeout is recorded, the screenshot is still taken), and a + * name. `resize` steps change both the pty and xterm.js. + */ +export function walkSteps({ resizeTo }) { + return [ + { name: '01-startup', do: async () => {}, until: READY }, + { name: '02-composer-typed', do: (t) => typeText(t, 'show markdown please'), until: 'show markdown please' }, + { name: '03-turn-markdown', do: (t) => t.write(KEYS.enter), until: /That is all|That is \*\*all\*\*/, then: READY }, + { name: '04-turn-tool-call', do: (t) => send(t, 'list the files please'), until: /Done\. The command finished/, then: READY }, + { name: '05-approval-prompt', do: (t) => send(t, 'create a file please'), until: /Allow once/ }, + { name: '06-approval-approved', do: (t) => t.write(KEYS.enter), until: /touch created-by-walk|Shell command/, then: READY }, + { name: '07-slash-menu', do: (t) => typeText(t, '/'), until: /\/model|\/resume|Commands/ }, + { name: '08-slash-menu-closed', do: (t) => escapeHome(t), until: READY }, + { name: '09-path-menu', do: (t) => typeText(t, '@'), until: /README\.md|notes\.txt|src/ }, + { name: '10-path-menu-closed', do: (t) => escapeHome(t), until: READY }, + { name: '11-menu-model', do: (t) => send(t, '/model'), until: NOT_READY_OR_MENU }, + { name: '12-menu-model-arrow', do: (t) => t.write(KEYS.down), until: NOT_READY_OR_MENU }, + { name: '13-menu-model-closed', do: (t) => escapeHome(t), until: READY }, + { name: '14-menu-settings', do: (t) => send(t, '/settings'), until: NOT_READY_OR_MENU }, + { name: '15-menu-settings-arrow', do: (t) => t.write(KEYS.down), until: NOT_READY_OR_MENU }, + { name: '16-menu-settings-closed', do: (t) => escapeHome(t), until: READY }, + { name: '17-ctrl-o', do: (t) => t.write(KEYS.ctrlO), until: null }, + { name: '18-ctrl-o-closed', do: (t) => escapeHome(t, KEYS.ctrlO), until: READY }, + { name: '19-shift-tab', do: (t) => t.write(KEYS.shiftTab), until: null }, + { name: '20-shift-tab-restored', do: (t) => restoreMode(t), until: READY }, + { name: '21-help', do: (t) => send(t, '/help'), until: null }, + { name: '22-help-closed', do: (t) => escapeHome(t), until: READY }, + { name: '23-resume-list', do: (t) => send(t, '/resume'), until: RESUME_LIST }, + { name: '24-resume-preview', do: (t) => t.write(KEYS.down), until: /Preview|Initial Prompt|ID: / }, + { name: '25-resume-closed', do: (t) => escapeHome(t), until: READY }, + { name: '26-resize', resize: resizeTo, until: READY }, + { name: '27-resize-typed', do: (t) => typeText(t, 'typed after resize'), until: 'typed after resize' }, + { name: '28-resize-back', resize: 'original', until: READY }, + { name: '29-exit-confirm', do: (t) => clearThen(t, KEYS.ctrlC), until: /Ctrl\+C again/ }, + { name: '30-exited', do: (t) => t.write(KEYS.ctrlC), until: null, exit: true }, + ]; +} + +async function send(t, text) { + await typeText(t, text); + await sleep(250); + t.write(KEYS.enter); +} + +async function clearThen(t, key) { + for (let i = 0; i < 24; i++) { + t.write('\x7f'); + await sleep(8); + } + await sleep(200); + t.write(key); +} + +/** Leave whatever is open (or undo a toggle key) until the empty composer is back. */ +async function escapeHome(t, undoKey = null) { + const home = async () => t.page.evaluate(new Function(`const lines = window.screenLines(); ${AT_HOME}`)); + if (undoKey && (await home())) { + // The key toggled something without opening a view (term2-next's tool output): press it again. + t.write(undoKey); + await sleep(400); + return; + } + for (let i = 0; i < 5 && !(await home()); i++) { + // Escape closes a menu but can leave its trigger text (the `@` of a path menu) in the composer. + const typed = await t.page.evaluate( + new Function(`const lines = window.screenLines(); ${PRELUDE} return /^\\s*❯\\s*\\S/.test(composer) && sep >= 0 ? composer.replace(/^\\s*❯\\s*/, '').length : 0;`), + ); + if (typed > 0 && i > 0) { + for (let k = 0; k < typed + 2; k++) { + t.write('\x7f'); + await sleep(10); + } + await sleep(300); + continue; + } + t.write(KEYS.escape); + await t.waitFor(`fn:${AT_HOME}`, 2_000).catch(() => {}); + } +} + +/** Shift+Tab switched mode (legacy) or opened a confirmation (term2-next): get back to the starting state. */ +async function restoreMode(t) { + const text = (await t.screen()).join('\n'); + if (/Clear session and switch/.test(text)) { + t.write(KEYS.escape); + return; + } + t.write(KEYS.shiftTab); +} + +/** + * Every wait is PAINT_TIMEOUT_MS: a screen that has not appeared by then is recorded as timed out and the + * screenshot shows what was there. When a step that should end on the empty composer cannot get there (the CLI + * stopped answering), `restart` (optional) replaces the CLI so a late paint cannot land in a later step. + */ +export async function runWalk(session, { outDir, label, originalSize, resizeTo, log = () => {}, restart = null }) { + let term = session.term; + let current = session; + const steps = walkSteps({ resizeTo }); + const shots = []; + fs.mkdirSync(outDir, { recursive: true }); + for (const step of steps) { + const note = []; + const startedAt = Date.now(); + if (step.resize) { + const [cols, rows] = step.resize === 'original' ? originalSize : step.resize; + await term.resize(cols, rows); + } else { + await step.do(term); + } + if (step.until) { + await term.waitFor(step.until, PAINT_TIMEOUT_MS).catch(() => note.push(`no matching screen within ${PAINT_TIMEOUT_MS} ms`)); + } + if (step.then) await term.waitFor(step.then, PAINT_TIMEOUT_MS).catch(() => note.push('composer did not come back')); + if (step.exit) await Promise.race([term.exit, sleep(5_000)]); + await sleep(250); + await term.quiet(400, 8_000); + const file = path.join(outDir, `${label}-${step.name}.png`); + const masks = await term.screenshot(file, MASKS.map((m) => m.re)); + shots.push({ + step: step.name, + file, + text: (await term.screen()).join('\n'), + masks: masks.length, + ms: Date.now() - startedAt, + note, + size: [term.cols, term.rows], + }); + log(` ${step.name}${note.length ? ` (${note.join('; ')})` : ''}`); + // A step meant to end on the composer that still shows a dialog: the CLI ignored the keys that close it + // (term2-next's "Loading conversations…" box sits above an empty composer). The composer row alone does not + // show this, and a blank or partly drawn screen is a finding to keep, not a reason to restart. + const meantHome = step.until === READY || step.then === READY; + const dialog = async () => term.page.evaluate(new Function(`const lines = window.screenLines(); ${PRELUDE}${DIALOG_OPEN} return dialogOpen;`)); + if (restart && meantHome && !step.exit && (await dialog())) { + log(` ${step.name}: CLI not back at the composer, restarting it`); + current = await restart(current); + term = current.term; + if (step.name !== '01-startup') shots.at(-1).note.push('CLI restarted after this step'); + } + } + return shots; +} diff --git a/rewrite/parity/real-terminal/report/report.html b/rewrite/parity/real-terminal/report/report.html new file mode 100644 index 000000000..67d8ba53a --- /dev/null +++ b/rewrite/parity/real-terminal/report/report.html @@ -0,0 +1,4269 @@ +Real-terminal check + + +

term2 vs term2-next — real-terminal check

+

Generated 2026-11-04T06:45:31.820Z · issue #140 (flip gate item 5). Legacy is the spec.

+

Verdict

    +
  • Latency gate: FAIL
  • +
  • Screenshot gate: FAIL (0/60 pairs identical after masks)
  • +
  • Soak: 78 difference(s), all unexplained — fails the gate unless accepted
+

Environment

+ +
commandnode rewrite/parity/real-terminal/run.mjs --out <scratch>/full --store <scratch>/store
revisionc21e8e0f0a7ccfb695b5efe311d48be8d23594af
terminalnode-pty bridge (no sshd in this environment) -> SSE -> xterm.js DOM renderer, headless Chromium
xterm@xterm/xterm 6.0.0
chromium153.0.8010.12
nodev22.23.4
osLinux 6.18.44-fc-v233 x64
cpuIntel(R) Xeon(R) Processor × 4
memory16 GiB
store<scratch>/store
storeBytes{"legacy":1169723476,"next":440501340}
storeManifest{"legacy":{"directory":"conversations","sessions":1392,"bytes":1169378536,"longSession":{"id":"07301a85-df32-44c5-a10f-737de02d14ec","bytes":325086773,"deltas":200000}},"next":{"directory":"conversations-next","sessions":1392,"bytes":440501340,"longSession":{"id":"conv_07301a85-df32-44c5-a10f-737de02d14ec","bytes":132184505,"deltas":200000}}}
workspace<scratch>/store/workspace
samplesfull
harnessFloorraw pty echo (cat) key-to-paint p50 2.6 ms, max 6.3 ms (n=40)
loadAverage1mmin 0.08 · mean 0.63 · max 2.26
+

100×34

+

Store timings

+
startup → composer (ms)first /resume → list (ms)second /resume → list (ms)
legacy1909842163
next1682FAIL (no list within 5 s)not measured
+

Key-to-paint latency — idle

+ +
classlegacy p50p95maxnext p50p95maxlegacy CPU/key msnext CPU/key mslegacy bytes/keynext bytes/keynext missedgate
type char15.115.615.714.915.415.57.39.24895860/48pass
backspace15.215.715.814.915.515.67.56.74885850/48pass
enter (composer)14.815.415.414.615.115.170.050.0198419790/10pass
arrow (model menu)15.316.182.0———8.524.51965020/20no matching paint (legacy painted); 20 key(s) never painted the change (legacy 0)
arrow (resume menu)15.315.815.8———7.0—3101—20/20no matching paint (legacy painted); 20 key(s) never painted the change (legacy 0)
ctrl+o10.712.012.0———12.055.02113010/10no matching paint (legacy painted); 10 key(s) never painted the change (legacy 0)
shift+tab10.716.616.627.547.747.76.059.019926270/10p50 over 1.2x / +5 ms; p95 over 1.2x / +5 ms
open /model14.415.115.114.615.715.720.012.5261618700/8pass
open /settings14.815.315.314.815.815.881.312.5693928270/8pass
scroll (resume page down/up)15.215.715.7———8.0—3101—10/10no matching paint (legacy painted); 10 key(s) never painted the change (legacy 0)
+
33 missed key(s) in idle — screens at the timeout

next · arrow (model menu) #0

  Sure. This is a short answer to: ping idle 4
+
+ ❯ ping idle 5 
+
+  Sure. This is a short answer to: ping idle 5
+
+ ❯ ping idle 6 
+
+  Sure. This is a short answer to: ping idle 6
+
+ ❯ ping idle 7 
+
+  Sure. This is a short answer to: ping idle 7
+
+ ❯ ping idle 8 
+
+  Sure. This is a short answer to: ping idle 8
+
+ ❯ ping idle 9 
+
+  Sure. This is a short answer to: ping idle 9
+╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                                                   │
+│  Favorites  │  Nicknames  │  All                                                                 │
+│ Filter: type to filter                                                                           │
+│ No matching models.                                                                              │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel                         │
+╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k
+
+

next · arrow (model menu) #1

  Sure. This is a short answer to: ping idle 4
+
+ ❯ ping idle 5 
+
+  Sure. This is a short answer to: ping idle 5
+
+ ❯ ping idle 6 
+
+  Sure. This is a short answer to: ping idle 6
+
+ ❯ ping idle 7 
+
+  Sure. This is a short answer to: ping idle 7
+
+ ❯ ping idle 8 
+
+  Sure. This is a short answer to: ping idle 8
+
+ ❯ ping idle 9 
+
+  Sure. This is a short answer to: ping idle 9
+╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                                                   │
+│  Favorites  │  Nicknames  │  All                                                                 │
+│ Filter: type to filter                                                                           │
+│ No matching models.                                                                              │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel                         │
+╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k
+
+

next · arrow (model menu) #2

  Sure. This is a short answer to: ping idle 4
+
+ ❯ ping idle 5 
+
+  Sure. This is a short answer to: ping idle 5
+
+ ❯ ping idle 6 
+
+  Sure. This is a short answer to: ping idle 6
+
+ ❯ ping idle 7 
+
+  Sure. This is a short answer to: ping idle 7
+
+ ❯ ping idle 8 
+
+  Sure. This is a short answer to: ping idle 8
+
+ ❯ ping idle 9 
+
+  Sure. This is a short answer to: ping idle 9
+╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                                                   │
+│  Favorites  │  Nicknames  │  All                                                                 │
+│ Filter: type to filter                                                                           │
+│ No matching models.                                                                              │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel                         │
+╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k
+
+

next · arrow (model menu) #3

  Sure. This is a short answer to: ping idle 4
+
+ ❯ ping idle 5 
+
+  Sure. This is a short answer to: ping idle 5
+
+ ❯ ping idle 6 
+
+  Sure. This is a short answer to: ping idle 6
+
+ ❯ ping idle 7 
+
+  Sure. This is a short answer to: ping idle 7
+
+ ❯ ping idle 8 
+
+  Sure. This is a short answer to: ping idle 8
+
+ ❯ ping idle 9 
+
+  Sure. This is a short answer to: ping idle 9
+╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                                                   │
+│  Favorites  │  Nicknames  │  All                                                                 │
+│ Filter: type to filter                                                                           │
+│ No matching models.                                                                              │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel                         │
+╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k
+
+

next · arrow (model menu) #4

  Sure. This is a short answer to: ping idle 4
+
+ ❯ ping idle 5 
+
+  Sure. This is a short answer to: ping idle 5
+
+ ❯ ping idle 6 
+
+  Sure. This is a short answer to: ping idle 6
+
+ ❯ ping idle 7 
+
+  Sure. This is a short answer to: ping idle 7
+
+ ❯ ping idle 8 
+
+  Sure. This is a short answer to: ping idle 8
+
+ ❯ ping idle 9 
+
+  Sure. This is a short answer to: ping idle 9
+╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                                                   │
+│  Favorites  │  Nicknames  │  All                                                                 │
+│ Filter: type to filter                                                                           │
+│ No matching models.                                                                              │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel                         │
+╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k
+
+

next · arrow (model menu) #5

  Sure. This is a short answer to: ping idle 4
+
+ ❯ ping idle 5 
+
+  Sure. This is a short answer to: ping idle 5
+
+ ❯ ping idle 6 
+
+  Sure. This is a short answer to: ping idle 6
+
+ ❯ ping idle 7 
+
+  Sure. This is a short answer to: ping idle 7
+
+ ❯ ping idle 8 
+
+  Sure. This is a short answer to: ping idle 8
+
+ ❯ ping idle 9 
+
+  Sure. This is a short answer to: ping idle 9
+╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                                                   │
+│  Favorites  │  Nicknames  │  All                                                                 │
+│ Filter: type to filter                                                                           │
+│ No matching models.                                                                              │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel                         │
+╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k
+
+

next · arrow (model menu) #6

  Sure. This is a short answer to: ping idle 4
+
+ ❯ ping idle 5 
+
+  Sure. This is a short answer to: ping idle 5
+
+ ❯ ping idle 6 
+
+  Sure. This is a short answer to: ping idle 6
+
+ ❯ ping idle 7 
+
+  Sure. This is a short answer to: ping idle 7
+
+ ❯ ping idle 8 
+
+  Sure. This is a short answer to: ping idle 8
+
+ ❯ ping idle 9 
+
+  Sure. This is a short answer to: ping idle 9
+╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                                                   │
+│  Favorites  │  Nicknames  │  All                                                                 │
+│ Filter: type to filter                                                                           │
+│ No matching models.                                                                              │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel                         │
+╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k
+
+

next · arrow (model menu) #7

  Sure. This is a short answer to: ping idle 4
+
+ ❯ ping idle 5 
+
+  Sure. This is a short answer to: ping idle 5
+
+ ❯ ping idle 6 
+
+  Sure. This is a short answer to: ping idle 6
+
+ ❯ ping idle 7 
+
+  Sure. This is a short answer to: ping idle 7
+
+ ❯ ping idle 8 
+
+  Sure. This is a short answer to: ping idle 8
+
+ ❯ ping idle 9 
+
+  Sure. This is a short answer to: ping idle 9
+╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                                                   │
+│  Favorites  │  Nicknames  │  All                                                                 │
+│ Filter: type to filter                                                                           │
+│ No matching models.                                                                              │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel                         │
+╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k
+
+

next · arrow (model menu) #8

  Sure. This is a short answer to: ping idle 4
+
+ ❯ ping idle 5 
+
+  Sure. This is a short answer to: ping idle 5
+
+ ❯ ping idle 6 
+
+  Sure. This is a short answer to: ping idle 6
+
+ ❯ ping idle 7 
+
+  Sure. This is a short answer to: ping idle 7
+
+ ❯ ping idle 8 
+
+  Sure. This is a short answer to: ping idle 8
+
+ ❯ ping idle 9 
+
+  Sure. This is a short answer to: ping idle 9
+╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                                                   │
+│  Favorites  │  Nicknames  │  All                                                                 │
+│ Filter: type to filter                                                                           │
+│ No matching models.                                                                              │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel                         │
+╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k
+
+

next · arrow (model menu) #9

  Sure. This is a short answer to: ping idle 4
+
+ ❯ ping idle 5 
+
+  Sure. This is a short answer to: ping idle 5
+
+ ❯ ping idle 6 
+
+  Sure. This is a short answer to: ping idle 6
+
+ ❯ ping idle 7 
+
+  Sure. This is a short answer to: ping idle 7
+
+ ❯ ping idle 8 
+
+  Sure. This is a short answer to: ping idle 8
+
+ ❯ ping idle 9 
+
+  Sure. This is a short answer to: ping idle 9
+╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                                                   │
+│  Favorites  │  Nicknames  │  All                                                                 │
+│ Filter: type to filter                                                                           │
+│ No matching models.                                                                              │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel                         │
+╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k
+
+

next · arrow (model menu) #10

  Sure. This is a short answer to: ping idle 4
+
+ ❯ ping idle 5 
+
+  Sure. This is a short answer to: ping idle 5
+
+ ❯ ping idle 6 
+
+  Sure. This is a short answer to: ping idle 6
+
+ ❯ ping idle 7 
+
+  Sure. This is a short answer to: ping idle 7
+
+ ❯ ping idle 8 
+
+  Sure. This is a short answer to: ping idle 8
+
+ ❯ ping idle 9 
+
+  Sure. This is a short answer to: ping idle 9
+╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                                                   │
+│  Favorites  │  Nicknames  │  All                                                                 │
+│ Filter: type to filter                                                                           │
+│ No matching models.                                                                              │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel                         │
+╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k
+
+

next · arrow (model menu) #11

  Sure. This is a short answer to: ping idle 4
+
+ ❯ ping idle 5 
+
+  Sure. This is a short answer to: ping idle 5
+
+ ❯ ping idle 6 
+
+  Sure. This is a short answer to: ping idle 6
+
+ ❯ ping idle 7 
+
+  Sure. This is a short answer to: ping idle 7
+
+ ❯ ping idle 8 
+
+  Sure. This is a short answer to: ping idle 8
+
+ ❯ ping idle 9 
+
+  Sure. This is a short answer to: ping idle 9
+╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                                                   │
+│  Favorites  │  Nicknames  │  All                                                                 │
+│ Filter: type to filter                                                                           │
+│ No matching models.                                                                              │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel                         │
+╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k
+
+
+

Key-to-paint latency — streaming

+ +
classlegacy p50p95maxnext p50p95maxlegacy CPU/key msnext CPU/key mslegacy bytes/keynext bytes/keynext missedgate
type char27.247.254.119.934.640.783.346.03417466340/48pass
backspace29.345.060.219.530.133.977.552.13956470890/48pass
enter (composer)35.841.341.332.140.840.855.057.06011423840/10pass
arrow (model menu)28.947.559.8———78.51781.510581143863520/20no matching paint (legacy painted); 20 key(s) never painted the change (legacy 0)
arrow (resume menu)——————————20/20n/a (neither painted)
ctrl+o32.054.554.516.6138.7138.764.045.017555544450/10p95 over 1.2x / +5 ms
shift+tab22.849.249.215.573.973.990.01288.01920962151527/107 key(s) never painted the change (legacy 0); p95 over 1.2x / +5 ms
open /model33.059.859.833.545.245.292.561.3239240300510/8pass
open /settings47.872.472.439.648.848.8131.346.34246111028100/8pass
scroll (resume page down/up)——————————10/10n/a (neither painted)
+
32 missed key(s) in streaming — screens at the timeout

legacy · arrow (resume menu) #0

(list not painted within 5000 ms; 20 keys not sent)
+  sw35 sw36 sw37 sw38 sw39 sw40 sw41 sw42 sw43 sw44 sw45 sw46
+  sw47 sw48 sw49 sw50 sw51 sw52 sw53 sw54 sw55 sw56 sw57 sw58
+  sw59 sw60 sw61 sw62 sw63 sw64 sw65 sw66 sw67 sw68 sw69 sw70
+  sw71 sw72 sw73 sw74 sw75 sw76 sw77 sw78 sw79 sw80 sw81 sw82
+  sw83 sw84 sw85 sw86 sw87 sw88 sw89 sw90 sw91 sw92 sw93 sw94
+  sw95 sw96 sw97 sw98 sw99 sw100 sw101 sw102 sw103 sw104 sw105 sw106
+  sw107 sw108 sw109 sw110 sw111 sw112 sw113 sw114 sw115 sw116 sw117 sw118
+  sw119 sw120 sw121 sw122 sw123 sw124 sw125 sw126 sw127 sw128 sw129 sw130
+  sw131 sw132 sw133 sw134 sw135 sw136 sw137 sw138 sw139 sw140 sw141 sw142
+  sw143 sw144 sw145 sw146 sw147 sw148 sw149 sw150 sw151 sw152 sw153 sw154
+  sw155 sw156 sw157 sw158 sw159 sw160 sw161 sw162 sw163 sw164 sw165 sw166
+  sw167 sw168 sw169 sw170 sw171 sw172 sw173 sw174 sw175 sw176 sw177 sw178
+  sw179 sw180 sw181 sw182 sw183 sw184 sw185 sw186 sw187 sw188 sw189 sw190
+  sw191 sw192 sw193 sw194 sw195 sw196 sw197 sw198 sw199 sw200 sw201 sw202
+  sw203 sw204 sw205 sw206 sw207 sw208 sw209 sw210 sw211 sw212 sw213 sw214
+  sw215 sw216 sw217 sw218 sw219 sw220 sw221 sw222
+
+
+  Generating · 2s (55.5 tok/s)
+  ────────────────────────────────────────────────────────────────────────────────────────────────
+  │ queued · after this turn
+  │   ping streaming 1
+  │   ping streaming 2
+  │   ping streaming 3
+  │   ping streaming 4
+  │   ping streaming 5
+  │   ping streaming 6
+  │   ping streaming 7
+  │   ping streaming 8
+  │   ping streaming 9
+  ❯  
+  ↑ select queued │ ⏎ steer │ Alt+⏎ queue │ Ctrl+O model │ Ctrl+T effort
+
+   Bare │ [Q:9] │ mockprov/mock-alpha │ ↑1.2k ↓80 · (3.1t/s) · Ctx 1k

legacy · scroll (resume page down/up) #0

(list not painted within 5000 ms; 10 keys not sent)
+  sw35 sw36 sw37 sw38 sw39 sw40 sw41 sw42 sw43 sw44 sw45 sw46
+  sw47 sw48 sw49 sw50 sw51 sw52 sw53 sw54 sw55 sw56 sw57 sw58
+  sw59 sw60 sw61 sw62 sw63 sw64 sw65 sw66 sw67 sw68 sw69 sw70
+  sw71 sw72 sw73 sw74 sw75 sw76 sw77 sw78 sw79 sw80 sw81 sw82
+  sw83 sw84 sw85 sw86 sw87 sw88 sw89 sw90 sw91 sw92 sw93 sw94
+  sw95 sw96 sw97 sw98 sw99 sw100 sw101 sw102 sw103 sw104 sw105 sw106
+  sw107 sw108 sw109 sw110 sw111 sw112 sw113 sw114 sw115 sw116 sw117 sw118
+  sw119 sw120 sw121 sw122 sw123 sw124 sw125 sw126 sw127 sw128 sw129 sw130
+  sw131 sw132 sw133 sw134 sw135 sw136 sw137 sw138 sw139 sw140 sw141 sw142
+  sw143 sw144 sw145 sw146 sw147 sw148 sw149 sw150 sw151 sw152 sw153 sw154
+  sw155 sw156 sw157 sw158 sw159 sw160 sw161 sw162 sw163 sw164 sw165 sw166
+  sw167 sw168 sw169 sw170 sw171 sw172 sw173 sw174 sw175 sw176 sw177 sw178
+  sw179 sw180 sw181 sw182 sw183 sw184 sw185 sw186 sw187 sw188 sw189 sw190
+  sw191 sw192 sw193 sw194 sw195 sw196 sw197 sw198 sw199 sw200 sw201 sw202
+  sw203 sw204 sw205 sw206 sw207 sw208 sw209 sw210 sw211 sw212 sw213 sw214
+  sw215 sw216 sw217 sw218 sw219 sw220 sw221 sw222
+
+
+  Generating · 2s (55.5 tok/s)
+  ────────────────────────────────────────────────────────────────────────────────────────────────
+  │ queued · after this turn
+  │   ping streaming 1
+  │   ping streaming 2
+  │   ping streaming 3
+  │   ping streaming 4
+  │   ping streaming 5
+  │   ping streaming 6
+  │   ping streaming 7
+  │   ping streaming 8
+  │   ping streaming 9
+  ❯  
+  ↑ select queued │ ⏎ steer │ Alt+⏎ queue │ Ctrl+O model │ Ctrl+T effort
+
+   Bare │ [Q:9] │ mockprov/mock-alpha │ ↑1.2k ↓80 · (3.1t/s) · Ctx 1k

next · arrow (model menu) #0

  sw335 sw336 sw337 sw338 sw339 sw340 sw341 sw342 sw343 sw344 sw345 sw346
+  sw347 sw348 sw349 sw350 sw351 sw352 sw353 sw354 sw355 sw356 sw357 sw358
+  sw359 sw360 sw361 sw362 sw363 sw364 sw365 sw366 sw367 sw368 sw369 sw370
+  sw371 sw372 sw373 sw374 sw375 sw376 sw377 sw378 sw379 sw380 sw381 sw382
+  sw383 sw384 sw385 sw386 sw387 sw388 sw389 sw390 sw391 sw392 sw393 sw394
+  sw395 sw396 sw397 sw398 sw399 sw400 sw401 sw402 sw403 sw404 sw405 sw406
+  sw407 sw408 sw409 sw410 sw411 sw412 sw413 sw414 sw415 sw416 sw417 sw418
+  sw419 sw420 sw421 sw422 sw423 sw424 sw425 sw426 sw427 sw428 sw429 sw430
+  sw431 sw432 sw433 sw434 sw435 sw436 sw437 sw438 sw439 sw440 sw441 sw442
+  sw443 sw444 sw445 sw446 sw447 sw448 sw449 sw450 sw451 sw452 sw453 sw454
+  sw455 sw456 sw457 sw458 sw459 sw460 sw461 sw462 sw463 sw464 sw465 sw466
+  sw467 sw468 sw469 sw470 sw471 sw472 sw473 sw474 sw475 sw476 sw477 sw478
+  sw479 sw480 sw481 sw482 sw483 sw484 sw485 sw486 sw487 sw488 sw489 sw490
+  sw491 sw492 sw493 sw494 sw495 sw496 sw497 sw498 sw499 sw500 sw501 sw502
+  sw503 sw504 sw505 sw506 sw507 sw508 sw509 sw510 sw511 sw512 sw513 sw514
+  sw515 sw516 sw517 sw518 sw519 sw520 sw521 sw522 sw523 sw524 sw525 sw526
+  sw527 sw528 sw529 sw530 sw531 sw532 sw533 sw534 sw535 sw536 sw537 sw538
+  sw539 sw540 sw541 sw542 sw543 sw544 sw545 sw546 sw547 sw548 sw549 sw550
+  sw551 sw552 sw553 sw554 sw555 sw556 sw557 sw558 sw559 sw560 sw561 sw562
+  sw563 sw564 sw565 sw566 sw567 sw568 sw569 sw570 sw571
+
+Generating · 11s (~163.3 tok/s)
+╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                                                   │
+│  Favorites  │  Nicknames  │  All                                                                 │
+│ Filter: type to filter                                                                           │
+│ No matching models.                                                                              │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel                         │
+╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · 3.2t/s · 0% cached · Ctx last 1k
+

next · arrow (model menu) #1

  sw863 sw864 sw865 sw866 sw867 sw868 sw869 sw870 sw871 sw872 sw873 sw874
+  sw875 sw876 sw877 sw878 sw879 sw880 sw881 sw882 sw883 sw884 sw885 sw886
+  sw887 sw888 sw889 sw890 sw891 sw892 sw893 sw894 sw895 sw896 sw897 sw898
+  sw899 sw900 sw901 sw902 sw903 sw904 sw905 sw906 sw907 sw908 sw909 sw910
+  sw911 sw912 sw913 sw914 sw915 sw916 sw917 sw918 sw919 sw920 sw921 sw922
+  sw923 sw924 sw925 sw926 sw927 sw928 sw929 sw930 sw931 sw932 sw933 sw934
+  sw935 sw936 sw937 sw938 sw939 sw940 sw941 sw942 sw943 sw944 sw945 sw946
+  sw947 sw948 sw949 sw950 sw951 sw952 sw953 sw954 sw955 sw956 sw957 sw958
+  sw959 sw960 sw961 sw962 sw963 sw964 sw965 sw966 sw967 sw968 sw969 sw970
+  sw971 sw972 sw973 sw974 sw975 sw976 sw977 sw978 sw979 sw980 sw981 sw982
+  sw983 sw984 sw985 sw986 sw987 sw988 sw989 sw990 sw991 sw992 sw993 sw994
+  sw995 sw996 sw997 sw998 sw999 sw1000 sw1001 sw1002 sw1003 sw1004 sw1005 sw1006
+  sw1007 sw1008 sw1009 sw1010 sw1011 sw1012 sw1013 sw1014 sw1015 sw1016 sw1017 sw1018
+  sw1019 sw1020 sw1021 sw1022 sw1023 sw1024 sw1025 sw1026 sw1027 sw1028 sw1029 sw1030
+  sw1031 sw1032 sw1033 sw1034 sw1035 sw1036 sw1037 sw1038 sw1039 sw1040 sw1041 sw1042
+  sw1043 sw1044 sw1045 sw1046 sw1047 sw1048 sw1049 sw1050 sw1051 sw1052 sw1053 sw1054
+  sw1055 sw1056 sw1057 sw1058 sw1059 sw1060 sw1061 sw1062 sw1063 sw1064 sw1065 sw1066
+  sw1067 sw1068 sw1069 sw1070 sw1071 sw1072 sw1073 sw1074 sw1075 sw1076 sw1077 sw1078
+  sw1079 sw1080 sw1081 sw1082 sw1083 sw1084 sw1085 sw1086 sw1087 sw1088 sw1089 sw1090
+  sw1091 sw1092 sw1093 sw1094
+
+Generating · 16s (~185.8 tok/s)
+╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                                                   │
+│  Favorites  │  Nicknames  │  All                                                                 │
+│ Filter: type to filter                                                                           │
+│ No matching models.                                                                              │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel                         │
+╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · 3.2t/s · 0% cached · Ctx last 1k
+

next · arrow (model menu) #2

  sw1367 sw1368 sw1369 sw1370 sw1371 sw1372 sw1373 sw1374 sw1375 sw1376 sw1377 sw1378
+  sw1379 sw1380 sw1381 sw1382 sw1383 sw1384 sw1385 sw1386 sw1387 sw1388 sw1389 sw1390
+  sw1391 sw1392 sw1393 sw1394 sw1395 sw1396 sw1397 sw1398 sw1399 sw1400 sw1401 sw1402
+  sw1403 sw1404 sw1405 sw1406 sw1407 sw1408 sw1409 sw1410 sw1411 sw1412 sw1413 sw1414
+  sw1415 sw1416 sw1417 sw1418 sw1419 sw1420 sw1421 sw1422 sw1423 sw1424 sw1425 sw1426
+  sw1427 sw1428 sw1429 sw1430 sw1431 sw1432 sw1433 sw1434 sw1435 sw1436 sw1437 sw1438
+  sw1439 sw1440 sw1441 sw1442 sw1443 sw1444 sw1445 sw1446 sw1447 sw1448 sw1449 sw1450
+  sw1451 sw1452 sw1453 sw1454 sw1455 sw1456 sw1457 sw1458 sw1459 sw1460 sw1461 sw1462
+  sw1463 sw1464 sw1465 sw1466 sw1467 sw1468 sw1469 sw1470 sw1471 sw1472 sw1473 sw1474
+  sw1475 sw1476 sw1477 sw1478 sw1479 sw1480 sw1481 sw1482 sw1483 sw1484 sw1485 sw1486
+  sw1487 sw1488 sw1489 sw1490 sw1491 sw1492 sw1493 sw1494 sw1495 sw1496 sw1497 sw1498
+  sw1499 sw1500 sw1501 sw1502 sw1503 sw1504 sw1505 sw1506 sw1507 sw1508 sw1509 sw1510
+  sw1511 sw1512 sw1513 sw1514 sw1515 sw1516 sw1517 sw1518 sw1519 sw1520 sw1521 sw1522
+  sw1523 sw1524 sw1525 sw1526 sw1527 sw1528 sw1529 sw1530 sw1531 sw1532 sw1533 sw1534
+  sw1535 sw1536 sw1537 sw1538 sw1539 sw1540 sw1541 sw1542 sw1543 sw1544 sw1545 sw1546
+  sw1547 sw1548 sw1549 sw1550 sw1551 sw1552 sw1553 sw1554 sw1555 sw1556 sw1557 sw1558
+  sw1559 sw1560 sw1561 sw1562 sw1563 sw1564 sw1565 sw1566 sw1567 sw1568 sw1569 sw1570
+  sw1571 sw1572 sw1573 sw1574 sw1575 sw1576 sw1577 sw1578 sw1579 sw1580 sw1581 sw1582
+  sw1583 sw1584 sw1585 sw1586 sw1587 sw1588 sw1589 sw1590 sw1591 sw1592 sw1593 sw1594
+  sw1595 sw1596
+
+Generating · 21s (~217.5 tok/s)
+╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                                                   │
+│  Favorites  │  Nicknames  │  All                                                                 │
+│ Filter: type to filter                                                                           │
+│ No matching models.                                                                              │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel                         │
+╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · 3.2t/s · 0% cached · Ctx last 1k
+

next · arrow (model menu) #3

  sw1883 sw1884 sw1885 sw1886 sw1887 sw1888 sw1889 sw1890 sw1891 sw1892 sw1893 sw1894
+  sw1895 sw1896 sw1897 sw1898 sw1899 sw1900 sw1901 sw1902 sw1903 sw1904 sw1905 sw1906
+  sw1907 sw1908 sw1909 sw1910 sw1911 sw1912 sw1913 sw1914 sw1915 sw1916 sw1917 sw1918
+  sw1919 sw1920 sw1921 sw1922 sw1923 sw1924 sw1925 sw1926 sw1927 sw1928 sw1929 sw1930
+  sw1931 sw1932 sw1933 sw1934 sw1935 sw1936 sw1937 sw1938 sw1939 sw1940 sw1941 sw1942
+  sw1943 sw1944 sw1945 sw1946 sw1947 sw1948 sw1949 sw1950 sw1951 sw1952 sw1953 sw1954
+  sw1955 sw1956 sw1957 sw1958 sw1959 sw1960 sw1961 sw1962 sw1963 sw1964 sw1965 sw1966
+  sw1967 sw1968 sw1969 sw1970 sw1971 sw1972 sw1973 sw1974 sw1975 sw1976 sw1977 sw1978
+  sw1979 sw1980 sw1981 sw1982 sw1983 sw1984 sw1985 sw1986 sw1987 sw1988 sw1989 sw1990
+  sw1991 sw1992 sw1993 sw1994 sw1995 sw1996 sw1997 sw1998 sw1999 sw2000 sw2001 sw2002
+  sw2003 sw2004 sw2005 sw2006 sw2007 sw2008 sw2009 sw2010 sw2011 sw2012 sw2013 sw2014
+  sw2015 sw2016 sw2017 sw2018 sw2019 sw2020 sw2021 sw2022 sw2023 sw2024 sw2025 sw2026
+  sw2027 sw2028 sw2029 sw2030 sw2031 sw2032 sw2033 sw2034 sw2035 sw2036 sw2037 sw2038
+  sw2039 sw2040 sw2041 sw2042 sw2043 sw2044 sw2045 sw2046 sw2047 sw2048 sw2049 sw2050
+  sw2051 sw2052 sw2053 sw2054 sw2055 sw2056 sw2057 sw2058 sw2059 sw2060 sw2061 sw2062
+  sw2063 sw2064 sw2065 sw2066 sw2067 sw2068 sw2069 sw2070 sw2071 sw2072 sw2073 sw2074
+  sw2075 sw2076 sw2077 sw2078 sw2079 sw2080 sw2081 sw2082 sw2083 sw2084 sw2085 sw2086
+  sw2087 sw2088 sw2089 sw2090 sw2091 sw2092 sw2093 sw2094 sw2095 sw2096 sw2097 sw2098
+  sw2099 sw2100 sw2101 sw2102 sw2103 sw2104 sw2105 sw2106 sw2107 sw2108 sw2109 sw2110
+  sw2111 sw2112 sw2113 sw2114 sw2115 sw2116 sw2117 sw2118 sw2119 sw2120 sw2121
+
+Generating · 26s (~232.4 tok/s)
+╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                                                   │
+│  Favorites  │  Nicknames  │  All                                                                 │
+│ Filter: type to filter                                                                           │
+│ No matching models.                                                                              │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel                         │
+╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · 3.2t/s · 0% cached · Ctx last 1k
+

next · arrow (model menu) #4

  sw2243 sw2244 sw2245 sw2246 sw2247 sw2248 sw2249 sw2250 sw2251 sw2252 sw2253 sw2254
+  sw2255 sw2256 sw2257 sw2258 sw2259 sw2260 sw2261 sw2262 sw2263 sw2264 sw2265 sw2266
+  sw2267 sw2268 sw2269 sw2270 sw2271 sw2272 sw2273 sw2274 sw2275 sw2276 sw2277 sw2278
+  sw2279 sw2280 sw2281 sw2282 sw2283 sw2284 sw2285 sw2286 sw2287 sw2288 sw2289 sw2290
+  sw2291 sw2292 sw2293 sw2294 sw2295 sw2296 sw2297 sw2298 sw2299 sw2300 sw2301 sw2302
+  sw2303 sw2304 sw2305 sw2306 sw2307 sw2308 sw2309 sw2310 sw2311 sw2312 sw2313 sw2314
+  sw2315 sw2316 sw2317 sw2318 sw2319 sw2320 sw2321 sw2322 sw2323 sw2324 sw2325 sw2326
+  sw2327 sw2328 sw2329 sw2330 sw2331 sw2332 sw2333 sw2334 sw2335 sw2336 sw2337 sw2338
+  sw2339 sw2340 sw2341 sw2342 sw2343 sw2344 sw2345 sw2346 sw2347 sw2348 sw2349 sw2350
+  sw2351 sw2352 sw2353 sw2354 sw2355 sw2356 sw2357 sw2358 sw2359 sw2360 sw2361 sw2362
+  sw2363 sw2364 sw2365 sw2366 sw2367 sw2368 sw2369 sw2370 sw2371 sw2372 sw2373 sw2374
+  sw2375 sw2376 sw2377 sw2378 sw2379 sw2380 sw2381 sw2382 sw2383 sw2384 sw2385 sw2386
+  sw2387 sw2388 sw2389 sw2390 sw2391 sw2392 sw2393 sw2394 sw2395 sw2396 sw2397 sw2398
+  sw2399 sw2400 sw2401 sw2402 sw2403 sw2404 sw2405 sw2406 sw2407 sw2408 sw2409 sw2410
+  sw2411 sw2412 sw2413 sw2414 sw2415 sw2416 sw2417 sw2418 sw2419 sw2420 sw2421 sw2422
+  sw2423 sw2424 sw2425 sw2426 sw2427 sw2428 sw2429 sw2430 sw2431 sw2432 sw2433 sw2434
+  sw2435 sw2436 sw2437 sw2438 sw2439 sw2440 sw2441 sw2442 sw2443 sw2444 sw2445 sw2446
+  sw2447 sw2448 sw2449 sw2450 sw2451 sw2452 sw2453 sw2454 sw2455 sw2456 sw2457 sw2458
+  sw2459 sw2460 sw2461 sw2462 sw2463 sw2464 sw2465 sw2466 sw2467 sw2468 sw2469 sw2470
+  sw2471 sw2472 sw2473 sw2474 sw2475 sw2476 sw2477 sw2478 sw2479 sw2480 sw2481 sw2482
+  sw2483 sw2484 sw2485 sw2486 sw2487 sw2488 sw2489 sw2490 sw2491 sw2492 sw2493 sw2494
+  sw2495 sw2496 sw2497 sw2498 sw2499
+╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                                                   │
+│  Favorites  │  Nicknames  │  All                                                                 │
+│ Filter: type to filter                                                                           │
+│ No matching models.                                                                              │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel                         │
+╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑2.4k ↓160 · 3.2t/s · 0% cached · Ctx last 1k
+

next · arrow (model menu) #5

  sw359 sw360 sw361 sw362 sw363 sw364 sw365 sw366 sw367 sw368 sw369 sw370
+  sw371 sw372 sw373 sw374 sw375 sw376 sw377 sw378 sw379 sw380 sw381 sw382
+  sw383 sw384 sw385 sw386 sw387 sw388 sw389 sw390 sw391 sw392 sw393 sw394
+  sw395 sw396 sw397 sw398 sw399 sw400 sw401 sw402 sw403 sw404 sw405 sw406
+  sw407 sw408 sw409 sw410 sw411 sw412 sw413 sw414 sw415 sw416 sw417 sw418
+  sw419 sw420 sw421 sw422 sw423 sw424 sw425 sw426 sw427 sw428 sw429 sw430
+  sw431 sw432 sw433 sw434 sw435 sw436 sw437 sw438 sw439 sw440 sw441 sw442
+  sw443 sw444 sw445 sw446 sw447 sw448 sw449 sw450 sw451 sw452 sw453 sw454
+  sw455 sw456 sw457 sw458 sw459 sw460 sw461 sw462 sw463 sw464 sw465 sw466
+  sw467 sw468 sw469 sw470 sw471 sw472 sw473 sw474 sw475 sw476 sw477 sw478
+  sw479 sw480 sw481 sw482 sw483 sw484 sw485 sw486 sw487 sw488 sw489 sw490
+  sw491 sw492 sw493 sw494 sw495 sw496 sw497 sw498 sw499 sw500 sw501 sw502
+  sw503 sw504 sw505 sw506 sw507 sw508 sw509 sw510 sw511 sw512 sw513 sw514
+  sw515 sw516 sw517 sw518 sw519 sw520 sw521 sw522 sw523 sw524 sw525 sw526
+  sw527 sw528 sw529 sw530 sw531 sw532 sw533 sw534 sw535 sw536 sw537 sw538
+  sw539 sw540 sw541 sw542 sw543 sw544 sw545 sw546 sw547 sw548 sw549 sw550
+  sw551 sw552 sw553 sw554 sw555 sw556 sw557 sw558 sw559 sw560 sw561 sw562
+  sw563 sw564 sw565 sw566 sw567 sw568 sw569 sw570 sw571 sw572 sw573 sw574
+  sw575 sw576 sw577 sw578 sw579 sw580 sw581 sw582 sw583 sw584 sw585 sw586
+  sw587 sw588 sw589 sw590 sw591 sw592 sw593 sw594 sw595 sw596
+
+Generating · 6s (~161.1 tok/s)
+╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                                                   │
+│  Favorites  │  Nicknames  │  All                                                                 │
+│ Filter: type to filter                                                                           │
+│ No matching models.                                                                              │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel                         │
+╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑2.4k ↓160 · 3.2t/s · 0% cached · Ctx last 1k
+

next · arrow (model menu) #6

  sw875 sw876 sw877 sw878 sw879 sw880 sw881 sw882 sw883 sw884 sw885 sw886
+  sw887 sw888 sw889 sw890 sw891 sw892 sw893 sw894 sw895 sw896 sw897 sw898
+  sw899 sw900 sw901 sw902 sw903 sw904 sw905 sw906 sw907 sw908 sw909 sw910
+  sw911 sw912 sw913 sw914 sw915 sw916 sw917 sw918 sw919 sw920 sw921 sw922
+  sw923 sw924 sw925 sw926 sw927 sw928 sw929 sw930 sw931 sw932 sw933 sw934
+  sw935 sw936 sw937 sw938 sw939 sw940 sw941 sw942 sw943 sw944 sw945 sw946
+  sw947 sw948 sw949 sw950 sw951 sw952 sw953 sw954 sw955 sw956 sw957 sw958
+  sw959 sw960 sw961 sw962 sw963 sw964 sw965 sw966 sw967 sw968 sw969 sw970
+  sw971 sw972 sw973 sw974 sw975 sw976 sw977 sw978 sw979 sw980 sw981 sw982
+  sw983 sw984 sw985 sw986 sw987 sw988 sw989 sw990 sw991 sw992 sw993 sw994
+  sw995 sw996 sw997 sw998 sw999 sw1000 sw1001 sw1002 sw1003 sw1004 sw1005 sw1006
+  sw1007 sw1008 sw1009 sw1010 sw1011 sw1012 sw1013 sw1014 sw1015 sw1016 sw1017 sw1018
+  sw1019 sw1020 sw1021 sw1022 sw1023 sw1024 sw1025 sw1026 sw1027 sw1028 sw1029 sw1030
+  sw1031 sw1032 sw1033 sw1034 sw1035 sw1036 sw1037 sw1038 sw1039 sw1040 sw1041 sw1042
+  sw1043 sw1044 sw1045 sw1046 sw1047 sw1048 sw1049 sw1050 sw1051 sw1052 sw1053 sw1054
+  sw1055 sw1056 sw1057 sw1058 sw1059 sw1060 sw1061 sw1062 sw1063 sw1064 sw1065 sw1066
+  sw1067 sw1068 sw1069 sw1070 sw1071 sw1072 sw1073 sw1074 sw1075 sw1076 sw1077 sw1078
+  sw1079 sw1080 sw1081 sw1082 sw1083 sw1084 sw1085 sw1086 sw1087 sw1088 sw1089 sw1090
+  sw1091 sw1092 sw1093 sw1094 sw1095 sw1096 sw1097 sw1098 sw1099 sw1100 sw1101 sw1102
+  sw1103 sw1104 sw1105 sw1106 sw1107 sw1108 sw1109 sw1110 sw1111
+
+Generating · 11s (~182.2 tok/s)
+╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                                                   │
+│  Favorites  │  Nicknames  │  All                                                                 │
+│ Filter: type to filter                                                                           │
+│ No matching models.                                                                              │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel                         │
+╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑2.4k ↓160 · 3.2t/s · 0% cached · Ctx last 1k
+

next · arrow (model menu) #7

  sw1391 sw1392 sw1393 sw1394 sw1395 sw1396 sw1397 sw1398 sw1399 sw1400 sw1401 sw1402
+  sw1403 sw1404 sw1405 sw1406 sw1407 sw1408 sw1409 sw1410 sw1411 sw1412 sw1413 sw1414
+  sw1415 sw1416 sw1417 sw1418 sw1419 sw1420 sw1421 sw1422 sw1423 sw1424 sw1425 sw1426
+  sw1427 sw1428 sw1429 sw1430 sw1431 sw1432 sw1433 sw1434 sw1435 sw1436 sw1437 sw1438
+  sw1439 sw1440 sw1441 sw1442 sw1443 sw1444 sw1445 sw1446 sw1447 sw1448 sw1449 sw1450
+  sw1451 sw1452 sw1453 sw1454 sw1455 sw1456 sw1457 sw1458 sw1459 sw1460 sw1461 sw1462
+  sw1463 sw1464 sw1465 sw1466 sw1467 sw1468 sw1469 sw1470 sw1471 sw1472 sw1473 sw1474
+  sw1475 sw1476 sw1477 sw1478 sw1479 sw1480 sw1481 sw1482 sw1483 sw1484 sw1485 sw1486
+  sw1487 sw1488 sw1489 sw1490 sw1491 sw1492 sw1493 sw1494 sw1495 sw1496 sw1497 sw1498
+  sw1499 sw1500 sw1501 sw1502 sw1503 sw1504 sw1505 sw1506 sw1507 sw1508 sw1509 sw1510
+  sw1511 sw1512 sw1513 sw1514 sw1515 sw1516 sw1517 sw1518 sw1519 sw1520 sw1521 sw1522
+  sw1523 sw1524 sw1525 sw1526 sw1527 sw1528 sw1529 sw1530 sw1531 sw1532 sw1533 sw1534
+  sw1535 sw1536 sw1537 sw1538 sw1539 sw1540 sw1541 sw1542 sw1543 sw1544 sw1545 sw1546
+  sw1547 sw1548 sw1549 sw1550 sw1551 sw1552 sw1553 sw1554 sw1555 sw1556 sw1557 sw1558
+  sw1559 sw1560 sw1561 sw1562 sw1563 sw1564 sw1565 sw1566 sw1567 sw1568 sw1569 sw1570
+  sw1571 sw1572 sw1573 sw1574 sw1575 sw1576 sw1577 sw1578 sw1579 sw1580 sw1581 sw1582
+  sw1583 sw1584 sw1585 sw1586 sw1587 sw1588 sw1589 sw1590 sw1591 sw1592 sw1593 sw1594
+  sw1595 sw1596 sw1597 sw1598 sw1599 sw1600 sw1601 sw1602 sw1603 sw1604 sw1605 sw1606
+  sw1607 sw1608 sw1609 sw1610 sw1611 sw1612 sw1613 sw1614 sw1615 sw1616 sw1617 sw1618
+  sw1619 sw1620 sw1621 sw1622 sw1623 sw1624
+
+Generating · 16s (~212.2 tok/s)
+╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                                                   │
+│  Favorites  │  Nicknames  │  All                                                                 │
+│ Filter: type to filter                                                                           │
+│ No matching models.                                                                              │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel                         │
+╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑2.4k ↓160 · 3.2t/s · 0% cached · Ctx last 1k
+

next · arrow (model menu) #8

  sw1907 sw1908 sw1909 sw1910 sw1911 sw1912 sw1913 sw1914 sw1915 sw1916 sw1917 sw1918
+  sw1919 sw1920 sw1921 sw1922 sw1923 sw1924 sw1925 sw1926 sw1927 sw1928 sw1929 sw1930
+  sw1931 sw1932 sw1933 sw1934 sw1935 sw1936 sw1937 sw1938 sw1939 sw1940 sw1941 sw1942
+  sw1943 sw1944 sw1945 sw1946 sw1947 sw1948 sw1949 sw1950 sw1951 sw1952 sw1953 sw1954
+  sw1955 sw1956 sw1957 sw1958 sw1959 sw1960 sw1961 sw1962 sw1963 sw1964 sw1965 sw1966
+  sw1967 sw1968 sw1969 sw1970 sw1971 sw1972 sw1973 sw1974 sw1975 sw1976 sw1977 sw1978
+  sw1979 sw1980 sw1981 sw1982 sw1983 sw1984 sw1985 sw1986 sw1987 sw1988 sw1989 sw1990
+  sw1991 sw1992 sw1993 sw1994 sw1995 sw1996 sw1997 sw1998 sw1999 sw2000 sw2001 sw2002
+  sw2003 sw2004 sw2005 sw2006 sw2007 sw2008 sw2009 sw2010 sw2011 sw2012 sw2013 sw2014
+  sw2015 sw2016 sw2017 sw2018 sw2019 sw2020 sw2021 sw2022 sw2023 sw2024 sw2025 sw2026
+  sw2027 sw2028 sw2029 sw2030 sw2031 sw2032 sw2033 sw2034 sw2035 sw2036 sw2037 sw2038
+  sw2039 sw2040 sw2041 sw2042 sw2043 sw2044 sw2045 sw2046 sw2047 sw2048 sw2049 sw2050
+  sw2051 sw2052 sw2053 sw2054 sw2055 sw2056 sw2057 sw2058 sw2059 sw2060 sw2061 sw2062
+  sw2063 sw2064 sw2065 sw2066 sw2067 sw2068 sw2069 sw2070 sw2071 sw2072 sw2073 sw2074
+  sw2075 sw2076 sw2077 sw2078 sw2079 sw2080 sw2081 sw2082 sw2083 sw2084 sw2085 sw2086
+  sw2087 sw2088 sw2089 sw2090 sw2091 sw2092 sw2093 sw2094 sw2095 sw2096 sw2097 sw2098
+  sw2099 sw2100 sw2101 sw2102 sw2103 sw2104 sw2105 sw2106 sw2107 sw2108 sw2109 sw2110
+  sw2111 sw2112 sw2113 sw2114 sw2115 sw2116 sw2117 sw2118 sw2119 sw2120 sw2121 sw2122
+  sw2123 sw2124 sw2125 sw2126 sw2127 sw2128 sw2129 sw2130 sw2131 sw2132 sw2133 sw2134
+  sw2135 sw2136 sw2137
+
+Generating · 21s (~227.9 tok/s)
+╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                                                   │
+│  Favorites  │  Nicknames  │  All                                                                 │
+│ Filter: type to filter                                                                           │
+│ No matching models.                                                                              │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel                         │
+╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑2.4k ↓160 · 3.2t/s · 0% cached · Ctx last 1k
+

next · arrow (model menu) #9

  sw2243 sw2244 sw2245 sw2246 sw2247 sw2248 sw2249 sw2250 sw2251 sw2252 sw2253 sw2254
+  sw2255 sw2256 sw2257 sw2258 sw2259 sw2260 sw2261 sw2262 sw2263 sw2264 sw2265 sw2266
+  sw2267 sw2268 sw2269 sw2270 sw2271 sw2272 sw2273 sw2274 sw2275 sw2276 sw2277 sw2278
+  sw2279 sw2280 sw2281 sw2282 sw2283 sw2284 sw2285 sw2286 sw2287 sw2288 sw2289 sw2290
+  sw2291 sw2292 sw2293 sw2294 sw2295 sw2296 sw2297 sw2298 sw2299 sw2300 sw2301 sw2302
+  sw2303 sw2304 sw2305 sw2306 sw2307 sw2308 sw2309 sw2310 sw2311 sw2312 sw2313 sw2314
+  sw2315 sw2316 sw2317 sw2318 sw2319 sw2320 sw2321 sw2322 sw2323 sw2324 sw2325 sw2326
+  sw2327 sw2328 sw2329 sw2330 sw2331 sw2332 sw2333 sw2334 sw2335 sw2336 sw2337 sw2338
+  sw2339 sw2340 sw2341 sw2342 sw2343 sw2344 sw2345 sw2346 sw2347 sw2348 sw2349 sw2350
+  sw2351 sw2352 sw2353 sw2354 sw2355 sw2356 sw2357 sw2358 sw2359 sw2360 sw2361 sw2362
+  sw2363 sw2364 sw2365 sw2366 sw2367 sw2368 sw2369 sw2370 sw2371 sw2372 sw2373 sw2374
+  sw2375 sw2376 sw2377 sw2378 sw2379 sw2380 sw2381 sw2382 sw2383 sw2384 sw2385 sw2386
+  sw2387 sw2388 sw2389 sw2390 sw2391 sw2392 sw2393 sw2394 sw2395 sw2396 sw2397 sw2398
+  sw2399 sw2400 sw2401 sw2402 sw2403 sw2404 sw2405 sw2406 sw2407 sw2408 sw2409 sw2410
+  sw2411 sw2412 sw2413 sw2414 sw2415 sw2416 sw2417 sw2418 sw2419 sw2420 sw2421 sw2422
+  sw2423 sw2424 sw2425 sw2426 sw2427 sw2428 sw2429 sw2430 sw2431 sw2432 sw2433 sw2434
+  sw2435 sw2436 sw2437 sw2438 sw2439 sw2440 sw2441 sw2442 sw2443 sw2444 sw2445 sw2446
+  sw2447 sw2448 sw2449 sw2450 sw2451 sw2452 sw2453 sw2454 sw2455 sw2456 sw2457 sw2458
+  sw2459 sw2460 sw2461 sw2462 sw2463 sw2464 sw2465 sw2466 sw2467 sw2468 sw2469 sw2470
+  sw2471 sw2472 sw2473 sw2474 sw2475 sw2476 sw2477 sw2478 sw2479 sw2480 sw2481 sw2482
+  sw2483 sw2484 sw2485 sw2486 sw2487 sw2488 sw2489 sw2490 sw2491 sw2492 sw2493 sw2494
+  sw2495 sw2496 sw2497 sw2498 sw2499
+╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                                                   │
+│  Favorites  │  Nicknames  │  All                                                                 │
+│ Filter: type to filter                                                                           │
+│ No matching models.                                                                              │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel                         │
+╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑3.6k ↓240 · 3.2t/s · 0% cached · Ctx last 1k
+
+

Screenshots

Masks (grey boxes): version, ids, paths, ports, durations/times, spinner frames. Left legacy, middle term2-next, right pixel diff (red).

+
01-startup — 3.02% pixels differ + +
legacy
+
term2-next
+
diff
+
10 text row(s) differ
row  0  L │Profile: bare
+        N │Profile: BARE
+row  2  L │  ▌ term²  BARE  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
+        N │▌ term²  BARE  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
+row  3  L │    mockprov/mock-alpha (default)
+        N │  mockprov/mock-alpha (default)
+row  5  L │
+        N │────────────────────────────────────────────────────────────────────────────────────────────────────
+row  6  L │
+        N │❯  
+row  7  L │
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output
+row  8  L │  ────────────────────────────────────────────────────────────────────────────────────────────────
+        N │
+row  9  L │  ❯  
+        N │ Bare │ mockprov/mock-alpha
+row 10  L │  / commands │ @ paths │ ! shell │ Shift+Tab plan
+        N │
+row 12  L │   Bare │ mockprov/mock-alpha
+        N │
+
02-composer-typed — 2.96% pixels differ + +
legacy
+
term2-next
+
diff
+
9 text row(s) differ
row  0  L │Profile: bare
+        N │Profile: BARE
+row  2  L │  ▌ term²  BARE  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
+        N │▌ term²  BARE  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
+row  3  L │    mockprov/mock-alpha (default)
+        N │  mockprov/mock-alpha (default)
+row  5  L │
+        N │────────────────────────────────────────────────────────────────────────────────────────────────────
+row  6  L │
+        N │❯ show markdown please 
+row  7  L │
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output
+row  8  L │  ────────────────────────────────────────────────────────────────────────────────────────────────
+        N │
+row  9  L │  ❯ show markdown please 
+        N │ Bare │ mockprov/mock-alpha
+row 11  L │   Bare │ mockprov/mock-alpha
+        N │
+
03-turn-markdown — 7.81% pixels differ + +
legacy
+
term2-next
+
diff
+
24 text row(s) differ
row  0  L │Profile: bare
+        N │Profile: BARE
+row  2  L │  ▌ term²  BARE  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
+        N │▌ term²  BARE  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
+row  3  L │    mockprov/mock-alpha (default)
+        N │  mockprov/mock-alpha (default)
+row  6  L │
+        N │ ❯ show markdown please 
+row  7  L │   ❯ show markdown please 
+        N │
+row  8  L │
+        N │  ## Plan
+row  9  L │  ## Plan
+        N │
+row 10  L │
+        N │  • Read notes.txt
+row 11  L │  • Read notes.txt
+        N │  • Summarise it
+row 12  L │  • Summarise it
+        N │
+row 13  L │
+        N │  ╭──────────────────────────────────────────────────────────────────────────────────────────────╮
+row 14  L │  ╭──────────────────────────────────────────────────────────────────────────────────────────────╮
+        N │  │ export function main() {                                                                     │
+row 15  L │  │ export function main() {                                                                     │
+        N │  │   return 42;                                                                                 │
+row 16  L │  │   return 42;                                                                                 │
+        N │  │ }                                                                                            │
+row 17  L │  │ }                                                                                            │
+        N │  ╰──────────────────────────────────────────────────────────────────────────────────────────────╯
+row 18  L │  ╰──────────────────────────────────────────────────────────────────────────────────────────────╯
+        N │
+row 19  L │
+        N │  That is all.
+row 20  L │  That is all.
+        N │────────────────────────────────────────────────────────────────────────────────────────────────────
+row 21  L │
+        N │❯  
+row 22  L │
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output
+row 23  L │  ────────────────────────────────────────────────────────────────────────────────────────────────
+        N │
+row 24  L │  ❯  
+        N │ Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · 0% cached · Ctx last 1k
+row 25  L │  / commands │ @ paths │ ! shell │ Shift+Tab plan
+        N │
+row 27  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
04-turn-tool-call — 11.24% pixels differ + +
legacy
+
term2-next
+
diff
+
23 text row(s) differ
row  0  L │
+        N │Profile: BARE
+row  2  L │
+        N │▌ term²  BARE  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
+row  3  L │   ❯ show markdown please 
+        N │  mockprov/mock-alpha (default)
+row  5  L │  ## Plan
+        N │
+row  6  L │
+        N │ ❯ show markdown please 
+row  7  L │  • Read notes.txt
+        N │
+row  8  L │  • Summarise it
+        N │  ## Plan
+row 10  L │  ╭──────────────────────────────────────────────────────────────────────────────────────────────╮
+        N │  • Read notes.txt
+row 11  L │  │ export function main() {                                                                     │
+        N │  • Summarise it
+row 12  L │  │   return 42;                                                                                 │
+        N │
+row 13  L │  │ }                                                                                            │
+        N │  ╭──────────────────────────────────────────────────────────────────────────────────────────────╮
+row 14  L │  ╰──────────────────────────────────────────────────────────────────────────────────────────────╯
+        N │  │ export function main() {                                                                     │
+row 15  L │
+        N │  │   return 42;                                                                                 │
+row 16  L │  That is all.
+        N │  │ }                                                                                            │
+row 17  L │
+        N │  ╰──────────────────────────────────────────────────────────────────────────────────────────────╯
+row 19  L │   ❯ list the files please 
+        N │  That is all.
+row 21  L │  ✓ ls (▒▒▒▒)
+        N │ ❯ list the files please 
+row 23  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │  ✓ Shell command (▒▒▒▒)
+row 25  L │
+        N │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+row 26  L │  ────────────────────────────────────────────────────────────────────────────────────────────────
+        N │────────────────────────────────────────────────────────────────────────────────────────────────────
+row 27  L │  ❯  
+        N │❯  
+row 28  L │  / commands │ @ paths │ ! shell │ Shift+Tab plan
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output
+row 30  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │ Bare │ mockprov/mock-alpha │ ↑3.6k ↓240 · 0% cached · Ctx last 1k
+
05-approval-prompt — 10.46% pixels differ + +
legacy
+
term2-next
+
diff
+
30 text row(s) differ
row  0  L │  │   return 42;                                                                                 │
+        N │
+row  1  L │  │ }                                                                                            │
+        N │ ❯ list the files please 
+row  2  L │  ╰──────────────────────────────────────────────────────────────────────────────────────────────╯
+        N │
+row  3  L │
+        N │  ✓ Shell command (▒▒▒▒)
+row  4  L │  That is all.
+        N │
+row  5  L │
+        N │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+row  7  L │   ❯ list the files please 
+        N │ ❯ create a file please 
+row  9  L │  ✓ ls (▒▒▒▒)
+        N │  ○ Shell command
+row 10  L │
+        N │    touch created-by-walk.txt
+row 11  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │
+row 12  L │
+        N │Running tools · ▒▒
+row 13  L │
+        N │╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
+row 14  L │   ❯ create a file please 
+        N ││ Allow this action?                                                                               │
+row 15  L │
+        N ││ shell (this call only)                                                                           │
+row 16  L │
+        N ││ Owner: turn-3                                                                                    │
+row 17  L │
+        N ││ {"command":"touch created-by-walk.txt","sandbox":"default","background":false}                   │
+row 18  L │  ────────────────────────────────────────────────────────────────────────────────────────────────
+        N ││ {                                                                                                │
+row 19  L │  Agent wants to run: shell
+        N ││   "command": "touch created-by-walk.txt",                                                        │
+row 20  L │
+        N ││   "sandbox": "default",                                                                          │
+row 21  L │    touch created-by-walk.txt
+        N ││   "background": false                                                                            │
+row 22  L │
+        N ││ }                                                                                                │
+row 23  L │  Allow this action?
+        N ││ ❯ 1. Allow once                                                                                  │
+row 24  L │
+        N ││   2. Deny                                                                                        │
+row 25  L │  ❯ 1. Allow once                                 │  Allow once
+        N ││   3. Deny without reason                                                                         │
+row 26  L │    2. Deny                                       │
+        N ││ Ctrl+G return to composer                                                                        │
+row 27  L │                                                  │  Allow this tool call.
+        N ││ y allow once · n deny · ↑/↓ select · Enter choose · Esc cancel                                   │
+row 28  L │
+        N │╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
+row 29  L │   ↑↓ navigate │ 1 allow once │ y/n answer │ ⏎ select │ Esc interrupts the turn
+        N │────────────────────────────────────────────────────────────────────────────────────────────────────
+row 30  L │
+        N │❯  
+row 32  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │ Bare │ mockprov/mock-alpha │ ↑4.8k ↓320 · 0% cached · Ctx last 1k
+
06-approval-approved — 6.91% pixels differ + +
legacy
+
term2-next
+
diff
+
17 text row(s) differ
row  0  L │  │   return 42;                                                                                 │
+        N │
+row  1  L │  │ }                                                                                            │
+        N │ ❯ list the files please 
+row  2  L │  ╰──────────────────────────────────────────────────────────────────────────────────────────────╯
+        N │
+row  3  L │
+        N │  ✓ Shell command (▒▒▒▒)
+row  4  L │  That is all.
+        N │
+row  5  L │
+        N │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+row  7  L │   ❯ list the files please 
+        N │ ❯ create a file please 
+row  9  L │  ✓ ls (▒▒▒▒)
+        N │  ✓ Shell command (▒▒▒)
+row 12  L │
+        N │────────────────────────────────────────────────────────────────────────────────────────────────────
+row 13  L │
+        N │❯  
+row 14  L │   ❯ create a file please 
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output
+row 16  L │  ✓ touch created-by-walk.txt (▒▒▒)
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+row 18  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │
+row 21  L │  ────────────────────────────────────────────────────────────────────────────────────────────────
+        N │
+row 22  L │  ❯  
+        N │
+row 23  L │  / commands │ @ paths │ ! shell │ Shift+Tab plan
+        N │
+row 25  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
07-slash-menu — 16.63% pixels differ + +
legacy
+
term2-next
+
diff
+
29 text row(s) differ
row  1  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │ ❯ list the files please 
+row  3  L │
+        N │  ✓ Shell command (▒▒▒▒)
+row  4  L │   ❯ create a file please 
+        N │
+row  5  L │
+        N │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+row  6  L │  ✓ touch created-by-walk.txt (▒▒▒)
+        N │
+row  7  L │
+        N │ ❯ create a file please 
+row  8  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │
+row  9  L │
+        N │  ✓ Shell command (▒▒▒)
+row 11  L │  ────────────────────────────────────────────────────────────────────────────────────────────────
+        N │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+row 12  L │  Filter: 
+        N │╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
+row 13  L │  ╭──────────────────────────────────────────────────────────────────────────────────────────────╮
+        N ││ Commands                                                                                         │
+row 14  L │  │ Commands                                                                                     │
+        N ││ › /help           Show commands and keyboard shortcuts                                           │
+row 15  L │  │ ❯ /model        - Choose or set the AI model (Ctrl+O; use /model <model-id>)               ┃ │
+        N ││   /providers      List configured providers and their status                                     │
+row 16  L │  │   /effort       - Choose the model reasoning effort (Ctrl+T)                               ┃ │
+        N ││   /model          Choose or set the model (/model <provider>/<model>)                            │
+row 17  L │  │   /clear        - Start a new conversation                                                 ┃ │
+        N ││   /effort         Set the reasoning effort                                                       │
+row 18  L │  │   /goal         - Inspect or update the durable session goal; /clear retains it            ┃ │
+        N ││   /profile        Switch the active profile                                                      │
+row 19  L │  │   /copy         - Copy an assistant response (latest by default; use /copy N to count      │ │
+        N ││   /settings       Show or change settings                                                        │
+row 20  L │  │                   backward)                                                                │ │
+        N ││   /auto-approve   Set tool auto-approval (off, advisory, auto, always)                           │
+row 21  L │  │   /usage        - Show token usage for the current session                                 │ │
+        N ││   /sandbox        Toggle shell sandboxing (preference only here)                                 │
+row 22  L │  │   /resume       - Browse saved conversations or resume one by ID                           │ │
+        N ││   /resume         List saved conversations or resume one by ID                                   │
+row 23  L │  │   /rewind       - Rewind to a user turn and put it back in the input box                   │ │
+        N ││   /clear          Start a new conversation                                                       │
+row 24  L │  │   /undo         - Choose a user turn to remove and return to the input (same options as    │ │
+        N ││                                                                                                  │
+row 25  L │  │                   /rewind)                                                                 │ │
+        N ││ ──────────────────────────────────────────────────────────────────────────────────────────────── │
+row 26  L │  │   /retry        - Resend the last user turn, or choose a turn to resend                    │ │
+        N ││ ↑/↓ select · Enter run · Tab complete · Esc dismiss                                              │
+row 27  L │  │                                                                                              │
+        N │╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
+row 28  L │  │ ──────────────────────────────────────────────────────────────────────────────────────────── │
+        N │────────────────────────────────────────────────────────────────────────────────────────────────────
+row 29  L │  │ ↑↓ navigate │ ⏎ run │ Tab complete │ Esc cancel                                              │
+        N │❯ / 
+row 30  L │  ╰──────────────────────────────────────────────────────────────────────────────────────────────╯
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output
+row 32  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+
08-slash-menu-closed — 7.85% pixels differ + +
legacy
+
term2-next
+
diff
+
14 text row(s) differ
row  1  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │ ❯ list the files please 
+row  3  L │
+        N │  ✓ Shell command (▒▒▒▒)
+row  4  L │   ❯ create a file please 
+        N │
+row  5  L │
+        N │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+row  6  L │  ✓ touch created-by-walk.txt (▒▒▒)
+        N │
+row  7  L │
+        N │ ❯ create a file please 
+row  8  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │
+row  9  L │
+        N │  ✓ Shell command (▒▒▒)
+row 11  L │  ────────────────────────────────────────────────────────────────────────────────────────────────
+        N │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+row 12  L │  ❯  
+        N │────────────────────────────────────────────────────────────────────────────────────────────────────
+row 13  L │  / commands │ @ paths │ ! shell │ Shift+Tab plan
+        N │❯  
+row 14  L │
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output
+row 15  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+row 16  L │
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+
09-path-menu — 9.46% pixels differ + +
legacy
+
term2-next
+
diff
+
20 text row(s) differ
row  1  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │ ❯ list the files please 
+row  3  L │
+        N │  ✓ Shell command (▒▒▒▒)
+row  4  L │   ❯ create a file please 
+        N │
+row  5  L │
+        N │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+row  6  L │  ✓ touch created-by-walk.txt (▒▒▒)
+        N │
+row  7  L │
+        N │ ❯ create a file please 
+row  8  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │
+row  9  L │
+        N │  ✓ Shell command (▒▒▒)
+row 11  L │  ────────────────────────────────────────────────────────────────────────────────────────────────
+        N │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+row 12  L │  Filter: 
+        N │› created-by-walk.txt
+row 13  L │  ╭──────────────────────────────────────────────────────────────────────────────────────────────╮
+        N │  notes.txt
+row 14  L │  │ ❯ src/                                                                                       │
+        N │  README.md
+row 15  L │  │   notes.txt                                                                                  │
+        N │  src/
+row 16  L │  │   README.md                                                                                  │
+        N │  src/main.js
+row 17  L │  │   src/main.js                                                                                │
+        N │↑/↓ select · Enter insert · Tab insert without space · Esc dismiss
+row 18  L │  ╰──────────────────────────────────────────────────────────────────────────────────────────────╯
+        N │────────────────────────────────────────────────────────────────────────────────────────────────────
+row 19  L │  ↑↓ navigate │ ⏎ insert │ Tab insert w/o space │ Esc cancel
+        N │❯ @ 
+row 20  L │
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output
+row 21  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+row 22  L │
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+
10-path-menu-closed — 7.85% pixels differ + +
legacy
+
term2-next
+
diff
+
14 text row(s) differ
row  1  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │ ❯ list the files please 
+row  3  L │
+        N │  ✓ Shell command (▒▒▒▒)
+row  4  L │   ❯ create a file please 
+        N │
+row  5  L │
+        N │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+row  6  L │  ✓ touch created-by-walk.txt (▒▒▒)
+        N │
+row  7  L │
+        N │ ❯ create a file please 
+row  8  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │
+row  9  L │
+        N │  ✓ Shell command (▒▒▒)
+row 11  L │  ────────────────────────────────────────────────────────────────────────────────────────────────
+        N │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+row 12  L │  ❯  
+        N │────────────────────────────────────────────────────────────────────────────────────────────────────
+row 13  L │  / commands │ @ paths │ ! shell │ Shift+Tab plan
+        N │❯  
+row 14  L │
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output
+row 15  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+row 16  L │
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+
11-menu-model — 10.44% pixels differ + +
legacy
+
term2-next
+
diff
+
19 text row(s) differ
row  1  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │ ❯ list the files please 
+row  3  L │
+        N │  ✓ Shell command (▒▒▒▒)
+row  4  L │   ❯ create a file please 
+        N │
+row  5  L │
+        N │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+row  6  L │  ✓ touch created-by-walk.txt (▒▒▒)
+        N │
+row  7  L │
+        N │ ❯ create a file please 
+row  8  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │
+row  9  L │
+        N │  ✓ Shell command (▒▒▒)
+row 11  L │  ────────────────────────────────────────────────────────────────────────────────────────────────
+        N │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+row 12  L │  Filter: 
+        N │╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
+row 13  L │   Favorites  │  Nicknames  │  All 
+        N ││ Choose a model                                                                                   │
+row 14  L │  ╭──────────────────────────────────────────────────────────────────────────────────────────────╮
+        N ││  Favorites  │  Nicknames  │  All                                                                 │
+row 15  L │  │ Select model                                                                                 │
+        N ││ Filter: type to filter                                                                           │
+row 16  L │  │ mockprov │ ❯ mock-alpha (current)                                                            │
+        N ││ No matching models.                                                                              │
+row 17  L │  │          │   mock-beta                                                                       │
+        N ││ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel                         │
+row 18  L │  ╰──────────────────────────────────────────────────────────────────────────────────────────────╯
+        N │╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
+row 19  L │  ↑↓ navigate │ ⏎ select │ Tab/←→ tab │ ctrl+n nickname │ ctrl+f favorite │ ctrl+r refresh model 
+        N │────────────────────────────────────────────────────────────────────────────────────────────────────
+row 20  L │  list │ Esc cancel
+        N │❯  
+row 22  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+
12-menu-model-arrow — 10.44% pixels differ + +
legacy
+
term2-next
+
diff
+
19 text row(s) differ
row  1  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │ ❯ list the files please 
+row  3  L │
+        N │  ✓ Shell command (▒▒▒▒)
+row  4  L │   ❯ create a file please 
+        N │
+row  5  L │
+        N │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+row  6  L │  ✓ touch created-by-walk.txt (▒▒▒)
+        N │
+row  7  L │
+        N │ ❯ create a file please 
+row  8  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │
+row  9  L │
+        N │  ✓ Shell command (▒▒▒)
+row 11  L │  ────────────────────────────────────────────────────────────────────────────────────────────────
+        N │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+row 12  L │  Filter: 
+        N │╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
+row 13  L │   Favorites  │  Nicknames  │  All 
+        N ││ Choose a model                                                                                   │
+row 14  L │  ╭──────────────────────────────────────────────────────────────────────────────────────────────╮
+        N ││  Favorites  │  Nicknames  │  All                                                                 │
+row 15  L │  │ Select model                                                                                 │
+        N ││ Filter: type to filter                                                                           │
+row 16  L │  │ mockprov │   mock-alpha (current)                                                            │
+        N ││ No matching models.                                                                              │
+row 17  L │  │          │ ❯ mock-beta                                                                       │
+        N ││ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel                         │
+row 18  L │  ╰──────────────────────────────────────────────────────────────────────────────────────────────╯
+        N │╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
+row 19  L │  ↑↓ navigate │ ⏎ select │ Tab/←→ tab │ ctrl+n nickname │ ctrl+f favorite │ ctrl+r refresh model 
+        N │────────────────────────────────────────────────────────────────────────────────────────────────────
+row 20  L │  list │ Esc cancel
+        N │❯  
+row 22  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+
13-menu-model-closed — 7.85% pixels differ + +
legacy
+
term2-next
+
diff
+
14 text row(s) differ
row  1  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │ ❯ list the files please 
+row  3  L │
+        N │  ✓ Shell command (▒▒▒▒)
+row  4  L │   ❯ create a file please 
+        N │
+row  5  L │
+        N │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+row  6  L │  ✓ touch created-by-walk.txt (▒▒▒)
+        N │
+row  7  L │
+        N │ ❯ create a file please 
+row  8  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │
+row  9  L │
+        N │  ✓ Shell command (▒▒▒)
+row 11  L │  ────────────────────────────────────────────────────────────────────────────────────────────────
+        N │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+row 12  L │  ❯  
+        N │────────────────────────────────────────────────────────────────────────────────────────────────────
+row 13  L │  / commands │ @ paths │ ! shell │ Shift+Tab plan
+        N │❯  
+row 14  L │
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output
+row 15  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+row 16  L │
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+
14-menu-settings — 16.59% pixels differ + +
legacy
+
term2-next
+
diff
+
32 text row(s) differ
row  0  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │
+row  1  L │
+        N │ ❯ list the files please 
+row  3  L │  ────────────────────────────────────────────────────────────────────────────────────────────────
+        N │  ✓ Shell command (▒▒▒▒)
+row  4  L │  Filter: 
+        N │
+row  5  L │   Models  │  Providers  │  Context  │  Safety  │  Tools  │  UI  │  Hooks 
+        N │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+row  6  L │  ╭──────────────────────────────────────────────────────────────────────────────────────────────╮
+        N │
+row  7  L │  │ ❯ Model                      ● mockprov/mock-alpha                                           │
+        N │ ❯ create a file please 
+row  8  L │  │   Verifier model               (unset)                                                       │
+        N │
+row  9  L │  │   Reasoning effort             default                                                       │
+        N │  ✓ Shell command (▒▒▒)
+row 10  L │  │   Temperature                  (unset)                                                       │
+        N │
+row 11  L │  │   Favorite models              (none)                                                        │
+        N │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+row 12  L │  │   Model nicknames              (none)                                                        │
+        N │╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
+row 13  L │  │   Smart model                  (inherits agent.modelSelection)                               │
+        N ││ Settings · [Models]  Providers  Context  Safety  Tools  UI  Hooks                                │
+row 14  L │  │   Smart reasoning effort       (default)                                                     │
+        N ││ Search: (type to search all categories)                                                          │
+row 15  L │  │   Balanced model               (inherits agent.modelSelection)                               │
+        N ││ ❯ Model · agent.modelSelection: mockprov/mock-alpha                                              │
+row 16  L │  │   Balanced reasoning effort    (default)                                                     │
+        N ││   Verifier model · verifier.model:                                                               │
+row 17  L │  │   Cheap model                  (inherits agent.modelSelection)                               │
+        N ││   Reasoning effort · agent.reasoningEffort: default                                              │
+row 18  L │  │   Cheap reasoning effort       (default)                                                     │
+        N ││   Temperature · agent.temperature: unset                                                         │
+row 19  L │  │   Chore model                  (inherits agent.modelSelection)                               │
+        N ││   Favorite models · agent.favoriteModels: [0 entries]                                            │
+row 20  L │  │   Mentor models                (none)                                                        │
+        N ││   Model nicknames · agent.modelNicknames: [configured]                                           │
+row 21  L │  │   Disabled providers           (none)                                                        │
+        N ││   Smart model · agent.smartModel: unset                                                          │
+row 22  L │  │   Flex service tier            OFF                                                           │
+        N ││ Bound provider and model selection for the main agent                                            │
+row 23  L │  │                                                                                              │
+        N ││ Current: mockprov/mock-alpha · Default: openai/gpt-5.1                                           │
+row 24  L │  │ ──────────────────────────────────────────────────────────────────────────────────────────── │
+        N ││ Use /model <provider>/<model>.                                                                   │
+row 25  L │  │ Model · agent.modelSelection                                                                 │
+        N ││ Type search · Tab category · ↑/↓ select · Enter edit · Esc close                                 │
+row 26  L │  │                                                                                              │
+        N │╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
+row 27  L │  │ Bound provider and model selection for the main agent                                        │
+        N │────────────────────────────────────────────────────────────────────────────────────────────────────
+row 28  L │  │ default: openai/gpt-5.1                                                                      │
+        N │❯  
+row 29  L │  │                                                                                              │
+        N │
+row 30  L │  │ type search │ ↑↓ move │ Tab section │ ⏎ edit │ Esc close │ ● changed                         │
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+row 31  L │  ╰──────────────────────────────────────────────────────────────────────────────────────────────╯
+        N │
+row 33  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
15-menu-settings-arrow — 16.37% pixels differ + +
legacy
+
term2-next
+
diff
+
31 text row(s) differ
row  1  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │ ❯ list the files please 
+row  3  L │
+        N │  ✓ Shell command (▒▒▒▒)
+row  4  L │  ────────────────────────────────────────────────────────────────────────────────────────────────
+        N │
+row  5  L │  Filter: 
+        N │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+row  6  L │   Models  │  Providers  │  Context  │  Safety  │  Tools  │  UI  │  Hooks 
+        N │
+row  7  L │  ╭──────────────────────────────────────────────────────────────────────────────────────────────╮
+        N │ ❯ create a file please 
+row  8  L │  │   Model                      ● mockprov/mock-alpha                                           │
+        N │
+row  9  L │  │ ❯ Verifier model               (unset)                                                       │
+        N │  ✓ Shell command (▒▒▒)
+row 10  L │  │   Reasoning effort             default                                                       │
+        N │
+row 11  L │  │   Temperature                  (unset)                                                       │
+        N │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+row 12  L │  │   Favorite models              (none)                                                        │
+        N │╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
+row 13  L │  │   Model nicknames              (none)                                                        │
+        N ││ Settings · [Models]  Providers  Context  Safety  Tools  UI  Hooks                                │
+row 14  L │  │   Smart model                  (inherits agent.modelSelection)                               │
+        N ││ Search: (type to search all categories)                                                          │
+row 15  L │  │   Smart reasoning effort       (default)                                                     │
+        N ││ ❯ Verifier model · verifier.model:                                                               │
+row 16  L │  │   Balanced model               (inherits agent.modelSelection)                               │
+        N ││   Reasoning effort · agent.reasoningEffort: default                                              │
+row 17  L │  │   Balanced reasoning effort    (default)                                                     │
+        N ││   Temperature · agent.temperature: unset                                                         │
+row 18  L │  │   Cheap model                  (inherits agent.modelSelection)                               │
+        N ││   Favorite models · agent.favoriteModels: [0 entries]                                            │
+row 19  L │  │   Cheap reasoning effort       (default)                                                     │
+        N ││   Model nicknames · agent.modelNicknames: [configured]                                           │
+row 20  L │  │   Chore model                  (inherits agent.modelSelection)                               │
+        N ││   Smart model · agent.smartModel: unset                                                          │
+row 21  L │  │   Mentor models                (none)                                                        │
+        N ││   Smart reasoning effort · agent.smartReasoningEffort: default                                   │
+row 22  L │  │   Disabled providers           (none)                                                        │
+        N ││ Independent verifier model ID; empty uses the session model and provider                         │
+row 23  L │  │   Flex service tier            OFF                                                           │
+        N ││ Current:  · Default:                                                                             │
+row 24  L │  │                                                                                              │
+        N ││ Type search · Tab category · ↑/↓ select · Enter edit · Esc close                                 │
+row 25  L │  │ ──────────────────────────────────────────────────────────────────────────────────────────── │
+        N │╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
+row 26  L │  │ Verifier model · verifier.model                                                              │
+        N │────────────────────────────────────────────────────────────────────────────────────────────────────
+row 27  L │  │                                                                                              │
+        N │❯  
+row 28  L │  │ Independent verifier model ID; empty uses the session model and provider                     │
+        N │
+row 29  L │  │                                                                                              │
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+row 30  L │  │ type search │ ↑↓ move │ Tab section │ ⏎ edit │ Esc close │ ● changed                         │
+        N │
+row 31  L │  ╰──────────────────────────────────────────────────────────────────────────────────────────────╯
+        N │
+row 33  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
16-menu-settings-closed — 10.54% pixels differ + +
legacy
+
term2-next
+
diff
+
24 text row(s) differ
row  1  L │  ## Plan
+        N │ ❯ list the files please 
+row  3  L │  • Read notes.txt
+        N │  ✓ Shell command (▒▒▒▒)
+row  4  L │  • Summarise it
+        N │
+row  5  L │
+        N │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+row  6  L │  ╭──────────────────────────────────────────────────────────────────────────────────────────────╮
+        N │
+row  7  L │  │ export function main() {                                                                     │
+        N │ ❯ create a file please 
+row  8  L │  │   return 42;                                                                                 │
+        N │
+row  9  L │  │ }                                                                                            │
+        N │  ✓ Shell command (▒▒▒)
+row 10  L │  ╰──────────────────────────────────────────────────────────────────────────────────────────────╯
+        N │
+row 11  L │
+        N │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+row 12  L │  That is all.
+        N │────────────────────────────────────────────────────────────────────────────────────────────────────
+row 13  L │
+        N │❯  
+row 14  L │
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output
+row 15  L │   ❯ list the files please 
+        N │
+row 16  L │
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+row 17  L │  ✓ ls (▒▒▒▒)
+        N │
+row 19  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │
+row 22  L │   ❯ create a file please 
+        N │
+row 24  L │  ✓ touch created-by-walk.txt (▒▒▒)
+        N │
+row 26  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │
+row 29  L │  ────────────────────────────────────────────────────────────────────────────────────────────────
+        N │
+row 30  L │  ❯  
+        N │
+row 31  L │  / commands │ @ paths │ ! shell │ Shift+Tab plan
+        N │
+row 33  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
17-ctrl-o — 12.36% pixels differ + +
legacy
+
term2-next
+
diff
+
28 text row(s) differ
row  0  L │  │ export function main() {                                                                     │
+        N │
+row  1  L │  │   return 42;                                                                                 │
+        N │ ❯ create a file please 
+row  2  L │  │ }                                                                                            │
+        N │
+row  3  L │  ╰──────────────────────────────────────────────────────────────────────────────────────────────╯
+        N │  ✓ Shell command (▒▒▒)
+row  5  L │  That is all.
+        N │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+row  7  L │
+        N │  ✓ Shell command (▒▒▒▒)
+row  8  L │   ❯ list the files please 
+        N │    exit 0
+row  9  L │
+        N │    Runtime: ▒▒▒▒
+row 10  L │  ✓ ls (▒▒▒▒)
+        N │    README.md
+row 11  L │
+        N │    notes.txt
+row 12  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │    src
+row 13  L │
+        N │    ls
+row 15  L │   ❯ create a file please 
+        N │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+row 17  L │
+        N │ ❯ create a file please 
+row 18  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │
+row 19  L │
+        N │  ✓ Shell command (▒▒▒)
+row 20  L │
+        N │    exit 0
+row 21  L │  ────────────────────────────────────────────────────────────────────────────────────────────────
+        N │    Runtime: ▒▒▒
+row 22  L │  Filter: 
+        N │    (No output)
+row 23  L │   Favorites  │  Nicknames  │  All 
+        N │    touch created-by-walk.txt
+row 24  L │  ╭──────────────────────────────────────────────────────────────────────────────────────────────╮
+        N │
+row 25  L │  │ Select model                                                                                 │
+        N │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+row 26  L │  │ mockprov │ ❯ mock-alpha (current)                                                            │
+        N │
+row 27  L │  │          │   mock-beta                                                                       │
+        N │Lines 18–38 of 38 · PgUp/PgDn or Ctrl+↑/↓
+row 28  L │  ╰──────────────────────────────────────────────────────────────────────────────────────────────╯
+        N │────────────────────────────────────────────────────────────────────────────────────────────────────
+row 29  L │  ↑↓ navigate │ ⏎ select │ Tab/←→ tab │ ctrl+n nickname │ ctrl+f favorite │ ctrl+r refresh model 
+        N │❯  
+row 30  L │  list │ Esc cancel
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output
+row 32  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+
18-ctrl-o-closed — 7.57% pixels differ + +
legacy
+
term2-next
+
diff
+
16 text row(s) differ
row  0  L │  │ export function main() {                                                                     │
+        N │
+row  1  L │  │   return 42;                                                                                 │
+        N │ ❯ create a file please 
+row  2  L │  │ }                                                                                            │
+        N │
+row  3  L │  ╰──────────────────────────────────────────────────────────────────────────────────────────────╯
+        N │  ✓ Shell command (▒▒▒)
+row  5  L │  That is all.
+        N │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+row  6  L │
+        N │────────────────────────────────────────────────────────────────────────────────────────────────────
+row  7  L │
+        N │❯  
+row  8  L │   ❯ list the files please 
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output
+row 10  L │  ✓ ls (▒▒▒▒)
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+row 12  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │
+row 15  L │   ❯ create a file please 
+        N │
+row 18  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │
+row 21  L │  ────────────────────────────────────────────────────────────────────────────────────────────────
+        N │
+row 22  L │  ❯  
+        N │
+row 23  L │  / commands │ @ paths │ ! shell │ Shift+Tab plan
+        N │
+row 25  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
19-shift-tab — 10.41% pixels differ + +
legacy
+
term2-next
+
diff
+
27 text row(s) differ
row  0  L │  │ export function main() {                                                                     │
+        N │
+row  1  L │  │   return 42;                                                                                 │
+        N │ ❯ create a file please 
+row  2  L │  │ }                                                                                            │
+        N │
+row  3  L │  ╰──────────────────────────────────────────────────────────────────────────────────────────────╯
+        N │  ✓ Shell command (▒▒▒)
+row  5  L │  That is all.
+        N │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+row  6  L │
+        N │╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
+row  7  L │
+        N ││ ⚠ Switching modes requires clearing the current session.                                         │
+row  8  L │   ❯ list the files please 
+        N ││ Clear session and switch mode?                                                                   │
+row  9  L │
+        N ││   Yes                                                                                            │
+row 10  L │  ✓ ls (▒▒▒▒)
+        N ││ › No                                                                                             │
+row 11  L │
+        N ││ ↑/↓ select · Enter choose · y/n answer · Esc cancel                                              │
+row 12  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
+row 13  L │
+        N │────────────────────────────────────────────────────────────────────────────────────────────────────
+row 14  L │
+        N │❯  
+row 15  L │   ❯ create a file please 
+        N │
+row 16  L │
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+row 18  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │
+row 21  L │  ────────────────────────────────────────────────────────────────────────────────────────────────
+        N │
+row 22  L │  ╭──────────────────────────────────────────────────────────────────────────────────────────────╮
+        N │
+row 23  L │  │ ▲ Switching to Plan mode requires clearing the current session.                              │
+        N │
+row 24  L │  │ Clear session and switch to Plan mode?                                                       │
+        N │
+row 25  L │  │                                                                                              │
+        N │
+row 26  L │  │   Yes                                                                                        │
+        N │
+row 27  L │  │ ❯ No                                                                                         │
+        N │
+row 28  L │  │ ↑↓ navigate │ ⏎ select │ y/n answer │ Esc cancel                                             │
+        N │
+row 29  L │  ╰──────────────────────────────────────────────────────────────────────────────────────────────╯
+        N │
+row 31  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
20-shift-tab-restored — 7.57% pixels differ + +
legacy
+
term2-next
+
diff
+
16 text row(s) differ
row  0  L │  │ export function main() {                                                                     │
+        N │
+row  1  L │  │   return 42;                                                                                 │
+        N │ ❯ create a file please 
+row  2  L │  │ }                                                                                            │
+        N │
+row  3  L │  ╰──────────────────────────────────────────────────────────────────────────────────────────────╯
+        N │  ✓ Shell command (▒▒▒)
+row  5  L │  That is all.
+        N │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+row  6  L │
+        N │────────────────────────────────────────────────────────────────────────────────────────────────────
+row  7  L │
+        N │❯  
+row  8  L │   ❯ list the files please 
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output
+row 10  L │  ✓ ls (▒▒▒▒)
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+row 12  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │
+row 15  L │   ❯ create a file please 
+        N │
+row 18  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │
+row 21  L │  ────────────────────────────────────────────────────────────────────────────────────────────────
+        N │
+row 22  L │  ❯  
+        N │
+row 23  L │  / commands │ @ paths │ ! shell │ Shift+Tab plan
+        N │
+row 25  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
21-help — 19.80% pixels differ + +
legacy
+
term2-next
+
diff
+
34 text row(s) differ
row  0  L │  /retry — Resend the last user turn, or choose a turn to resend
+        N │/usage — Show token usage for this session
+row  1  L │  /retry-tool — Retry the last tool call
+        N │/copy — Copy an assistant response (/copy N counts back)
+row  2  L │  /retry-turn — Regenerate the latest user turn from its original prompt
+        N │/skills — Activate a skill for a request
+row  3  L │  /compact — Compact older conversation turns into a local summary
+        N │/goal — Inspect or update the durable session goal
+row  4  L │  /bare — Toggle the Bare profile (minimal prompt)
+        N │/handoff — Send the last response to another model for review
+row  5  L │  /lite — Toggle the Bare profile (Lite was merged into Bare)
+        N │/tasks — Manage background tasks
+row  6  L │  /mentor — Toggle mentor mode (collaborative mode with mentor model)
+        N │/queue — Resume, discard, retract or edit queued messages
+row  7  L │  /orchestrator — Toggle orchestrator mode (delegate all tool-backed work)
+        N │/steer — Send a message into the running turn
+row  8  L │  /auto-approve — Set tool auto-approval mode (off, advisory, auto, always)
+        N │/followup — Queue a message for after the running turn
+row  9  L │  /plan — Toggle plan mode (read-only research/planning mode)
+        N │/cancel — Stop the running turn
+row 10  L │  /profile — Switch the active profile
+        N │/answer — Answer a pending approval or question
+row 11  L │  /handoff — Send the last assistant response to another model for review
+        N │/bridge — Attach or detach this session's control socket
+row 12  L │  /settings — View or modify settings
+        N │/restart — Reload this executable (/restart stop also stops background work)
+row 13  L │  /sandbox — Toggle shell sandboxing; disabling it gives shell commands unrestricted access
+        N │/quit — Exit the application
+row 14  L │  /mcp — Show configured MCP servers and their connection state
+        N │/exit — Exit the application
+row 15  L │  /mcp-login — Authenticate with an OAuth-protected MCP server
+        N │/command-status — Show the outcome of a command by ID
+row 16  L │  /bridge — Attach or detach this local session for Discord bridge input
+        N │/command-apply — Apply a finished command result by ID
+row 17  L │  /providers — Manage API providers (list, add, edit, delete)
+        N │/mcp — Show configured MCP servers and their state
+row 18  L │  /skills — Activate a skill for the next request
+        N │/mcp-login — Authenticate with an OAuth-protected MCP server
+row 19  L │  /restart — Reload the built CLI in place; /restart stop consents to stopping background work
+        N │/plan — Toggle the plan profile
+row 20  L │  /quit — Exit the application
+        N │/bare — Switch to the bare profile
+row 21  L │  /help — Show commands and keyboard shortcuts
+        N │/mentor — Toggle the mentor profile
+row 22  L │
+        N │/orchestrator — Toggle the orchestrator profile
+row 23  L │  Keyboard shortcuts
+        N │Keyboard shortcuts
+row 24  L │  Ctrl+C: clear draft or interrupt; press again to exit
+        N │Enter send/steer · Alt+Enter follow-up · ↑/↓ history · PgUp/PgDn scroll · Ctrl+O tool output · 
+row 25  L │  Ctrl+O: choose model · Ctrl+T: choose reasoning effort
+        N │Ctrl+T reasoning effort
+row 26  L │  Shift+Tab: switch Standard/Plan · @: complete paths · !: shell
+        N │Ctrl+G approvals/tasks · Ctrl+B budget · Ctrl+C stop turn / clear input / exit
+row 27  L │
+        N │Shift+Tab plan mode
+row 28  L │
+        N │────────────────────────────────────────────────────────────────────────────────────────────────────
+row 29  L │  ────────────────────────────────────────────────────────────────────────────────────────────────
+        N │❯  
+row 30  L │  ❯  
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output
+row 31  L │  / commands │ @ paths │ ! shell │ Shift+Tab plan
+        N │
+row 32  L │
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+row 33  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
22-help-closed — 19.80% pixels differ + +
legacy
+
term2-next
+
diff
+
34 text row(s) differ
row  0  L │  /retry — Resend the last user turn, or choose a turn to resend
+        N │/usage — Show token usage for this session
+row  1  L │  /retry-tool — Retry the last tool call
+        N │/copy — Copy an assistant response (/copy N counts back)
+row  2  L │  /retry-turn — Regenerate the latest user turn from its original prompt
+        N │/skills — Activate a skill for a request
+row  3  L │  /compact — Compact older conversation turns into a local summary
+        N │/goal — Inspect or update the durable session goal
+row  4  L │  /bare — Toggle the Bare profile (minimal prompt)
+        N │/handoff — Send the last response to another model for review
+row  5  L │  /lite — Toggle the Bare profile (Lite was merged into Bare)
+        N │/tasks — Manage background tasks
+row  6  L │  /mentor — Toggle mentor mode (collaborative mode with mentor model)
+        N │/queue — Resume, discard, retract or edit queued messages
+row  7  L │  /orchestrator — Toggle orchestrator mode (delegate all tool-backed work)
+        N │/steer — Send a message into the running turn
+row  8  L │  /auto-approve — Set tool auto-approval mode (off, advisory, auto, always)
+        N │/followup — Queue a message for after the running turn
+row  9  L │  /plan — Toggle plan mode (read-only research/planning mode)
+        N │/cancel — Stop the running turn
+row 10  L │  /profile — Switch the active profile
+        N │/answer — Answer a pending approval or question
+row 11  L │  /handoff — Send the last assistant response to another model for review
+        N │/bridge — Attach or detach this session's control socket
+row 12  L │  /settings — View or modify settings
+        N │/restart — Reload this executable (/restart stop also stops background work)
+row 13  L │  /sandbox — Toggle shell sandboxing; disabling it gives shell commands unrestricted access
+        N │/quit — Exit the application
+row 14  L │  /mcp — Show configured MCP servers and their connection state
+        N │/exit — Exit the application
+row 15  L │  /mcp-login — Authenticate with an OAuth-protected MCP server
+        N │/command-status — Show the outcome of a command by ID
+row 16  L │  /bridge — Attach or detach this local session for Discord bridge input
+        N │/command-apply — Apply a finished command result by ID
+row 17  L │  /providers — Manage API providers (list, add, edit, delete)
+        N │/mcp — Show configured MCP servers and their state
+row 18  L │  /skills — Activate a skill for the next request
+        N │/mcp-login — Authenticate with an OAuth-protected MCP server
+row 19  L │  /restart — Reload the built CLI in place; /restart stop consents to stopping background work
+        N │/plan — Toggle the plan profile
+row 20  L │  /quit — Exit the application
+        N │/bare — Switch to the bare profile
+row 21  L │  /help — Show commands and keyboard shortcuts
+        N │/mentor — Toggle the mentor profile
+row 22  L │
+        N │/orchestrator — Toggle the orchestrator profile
+row 23  L │  Keyboard shortcuts
+        N │Keyboard shortcuts
+row 24  L │  Ctrl+C: clear draft or interrupt; press again to exit
+        N │Enter send/steer · Alt+Enter follow-up · ↑/↓ history · PgUp/PgDn scroll · Ctrl+O tool output · 
+row 25  L │  Ctrl+O: choose model · Ctrl+T: choose reasoning effort
+        N │Ctrl+T reasoning effort
+row 26  L │  Shift+Tab: switch Standard/Plan · @: complete paths · !: shell
+        N │Ctrl+G approvals/tasks · Ctrl+B budget · Ctrl+C stop turn / clear input / exit
+row 27  L │
+        N │Shift+Tab plan mode
+row 28  L │
+        N │────────────────────────────────────────────────────────────────────────────────────────────────────
+row 29  L │  ────────────────────────────────────────────────────────────────────────────────────────────────
+        N │❯  
+row 30  L │  ❯  
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output
+row 31  L │  / commands │ @ paths │ ! shell │ Shift+Tab plan
+        N │
+row 32  L │
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+row 33  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
23-resume-list — 20.43% pixels differ + · next: no matching screen within 5000 ms +
legacy
+
term2-next
+
diff
+
33 text row(s) differ
row  0  L │  /settings — View or modify settings
+        N │/followup — Queue a message for after the running turn
+row  1  L │  /sandbox — Toggle shell sandboxing; disabling it gives shell commands unrestricted access
+        N │/cancel — Stop the running turn
+row  2  L │  /mcp — Show configured MCP servers and their connection state
+        N │/answer — Answer a pending approval or question
+row  3  L │  /mcp-login — Authenticate with an OAuth-protected MCP server
+        N │/bridge — Attach or detach this session's control socket
+row  4  L │  /bridge — Attach or detach this local session for Discord bridge input
+        N │/restart — Reload this executable (/restart stop also stops background work)
+row  5  L │  /providers — Manage API providers (list, add, edit, delete)
+        N │/quit — Exit the application
+row  6  L │  /skills — Activate a skill for the next request
+        N │/exit — Exit the application
+row  7  L │  /restart — Reload the built CLI in place; /restart stop consents to stopping background work
+        N │/command-status — Show the outcome of a command by ID
+row  8  L │  /quit — Exit the application
+        N │/command-apply — Apply a finished command result by ID
+row  9  L │  /help — Show commands and keyboard shortcuts
+        N │/mcp — Show configured MCP servers and their state
+row 10  L │
+        N │/mcp-login — Authenticate with an OAuth-protected MCP server
+row 11  L │  Keyboard shortcuts
+        N │/plan — Toggle the plan profile
+row 12  L │  Ctrl+C: clear draft or interrupt; press again to exit
+        N │/bare — Switch to the bare profile
+row 13  L │  Ctrl+O: choose model · Ctrl+T: choose reasoning effort
+        N │/mentor — Toggle the mentor profile
+row 14  L │  Shift+Tab: switch Standard/Plan · @: complete paths · !: shell
+        N │/orchestrator — Toggle the orchestrator profile
+row 15  L │
+        N │Keyboard shortcuts
+row 16  L │
+        N │Enter send/steer · Alt+Enter follow-up · ↑/↓ history · PgUp/PgDn scroll · Ctrl+O tool output · 
+row 17  L │  ────────────────────────────────────────────────────────────────────────────────────────────────
+        N │Ctrl+T reasoning effort
+row 18  L │  ╭──────────────────────────────────────────────────────────────────────────────────────────────╮
+        N │Ctrl+G approvals/tasks · Ctrl+B budget · Ctrl+C stop turn / clear input / exit
+row 19  L │  │ Resume Conversation                                                                          │
+        N │Shift+Tab plan mode
+row 20  L │  │ ❯ show markdown please · ▒▒▒▒▒▒▒▒▒▒▒▒▒▒ · 6… │  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒         │
+        N │╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
+row 21  L │  │   ping idle 0 · ▒▒▒▒▒▒▒▒▒▒▒▒▒▒ · 38 msgs     │  Updated: 2026-11-04 06:51:06                 │
+        N ││ Resume Conversation                                                                              │
+row 22  L │  │   RT-PROMPT please read the small file · 5 … │  Local • 6 msgs • mock-alpha • mode: bare     │
+        N ││ Loading conversations…                                                                           │
+row 23  L │  │   RT-PROMPT please read the small file · 5 … │                                               │
+        N ││ ↑/↓ select · Enter resume · Esc cancel                                                           │
+row 24  L │  │   RT-PROMPT one more question · ▒▒▒▒▒▒▒▒▒▒▒… │  Initial Prompt:                              │
+        N │╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
+row 25  L │  │   RT-PROMPT one more question · ▒▒▒▒▒▒▒▒▒▒▒… │  "show markdown please"                       │
+        N │────────────────────────────────────────────────────────────────────────────────────────────────────
+row 26  L │  │   RT-PROMPT one more question · ▒▒▒▒▒▒▒▒▒▒▒… │                                               │
+        N │❯  
+row 27  L │  │   RT-PROMPT please read the large file · 5 … │                                               │
+        N │
+row 28  L │  │   RT-PROMPT please read the small file · 5 … │                                               │
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+row 29  L │  │   RT-PROMPT please read the small file · 5 … │                                               │
+        N │
+row 30  L │  ╰──────────────────────────────────────────────────────────────────────────────────────────────╯
+        N │
+row 31  L │  ↑↓ navigate │ ⏎ resume │ Esc cancel
+        N │
+row 33  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
24-resume-preview — 20.36% pixels differ + · next: no matching screen within 5000 ms +
legacy
+
term2-next
+
diff
+
33 text row(s) differ
row  0  L │  /settings — View or modify settings
+        N │/followup — Queue a message for after the running turn
+row  1  L │  /sandbox — Toggle shell sandboxing; disabling it gives shell commands unrestricted access
+        N │/cancel — Stop the running turn
+row  2  L │  /mcp — Show configured MCP servers and their connection state
+        N │/answer — Answer a pending approval or question
+row  3  L │  /mcp-login — Authenticate with an OAuth-protected MCP server
+        N │/bridge — Attach or detach this session's control socket
+row  4  L │  /bridge — Attach or detach this local session for Discord bridge input
+        N │/restart — Reload this executable (/restart stop also stops background work)
+row  5  L │  /providers — Manage API providers (list, add, edit, delete)
+        N │/quit — Exit the application
+row  6  L │  /skills — Activate a skill for the next request
+        N │/exit — Exit the application
+row  7  L │  /restart — Reload the built CLI in place; /restart stop consents to stopping background work
+        N │/command-status — Show the outcome of a command by ID
+row  8  L │  /quit — Exit the application
+        N │/command-apply — Apply a finished command result by ID
+row  9  L │  /help — Show commands and keyboard shortcuts
+        N │/mcp — Show configured MCP servers and their state
+row 10  L │
+        N │/mcp-login — Authenticate with an OAuth-protected MCP server
+row 11  L │  Keyboard shortcuts
+        N │/plan — Toggle the plan profile
+row 12  L │  Ctrl+C: clear draft or interrupt; press again to exit
+        N │/bare — Switch to the bare profile
+row 13  L │  Ctrl+O: choose model · Ctrl+T: choose reasoning effort
+        N │/mentor — Toggle the mentor profile
+row 14  L │  Shift+Tab: switch Standard/Plan · @: complete paths · !: shell
+        N │/orchestrator — Toggle the orchestrator profile
+row 15  L │
+        N │Keyboard shortcuts
+row 16  L │
+        N │Enter send/steer · Alt+Enter follow-up · ↑/↓ history · PgUp/PgDn scroll · Ctrl+O tool output · 
+row 17  L │  ────────────────────────────────────────────────────────────────────────────────────────────────
+        N │Ctrl+T reasoning effort
+row 18  L │  ╭──────────────────────────────────────────────────────────────────────────────────────────────╮
+        N │Ctrl+G approvals/tasks · Ctrl+B budget · Ctrl+C stop turn / clear input / exit
+row 19  L │  │ Resume Conversation                                                                          │
+        N │Shift+Tab plan mode
+row 20  L │  │   show markdown please · ▒▒▒▒▒▒▒▒▒▒▒▒▒▒ · 6… │  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒         │
+        N │╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
+row 21  L │  │ ❯ ping idle 0 · ▒▒▒▒▒▒▒▒▒▒▒▒▒▒ · 38 msgs     │  Updated: 2026-11-04 06:50:41                 │
+        N ││ Resume Conversation                                                                              │
+row 22  L │  │   RT-PROMPT please read the small file · 5 … │  Local • 38 msgs • mock-alpha • mode: bare    │
+        N ││ Loading conversations…                                                                           │
+row 23  L │  │   RT-PROMPT please read the small file · 5 … │                                               │
+        N ││ ↑/↓ select · Enter resume · Esc cancel                                                           │
+row 24  L │  │   RT-PROMPT one more question · ▒▒▒▒▒▒▒▒▒▒▒… │  Initial Prompt:                              │
+        N │╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
+row 25  L │  │   RT-PROMPT one more question · ▒▒▒▒▒▒▒▒▒▒▒… │  "ping idle 0"                                │
+        N │────────────────────────────────────────────────────────────────────────────────────────────────────
+row 26  L │  │   RT-PROMPT one more question · ▒▒▒▒▒▒▒▒▒▒▒… │                                               │
+        N │❯  
+row 27  L │  │   RT-PROMPT please read the large file · 5 … │                                               │
+        N │
+row 28  L │  │   RT-PROMPT please read the small file · 5 … │                                               │
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+row 29  L │  │   RT-PROMPT please read the small file · 5 … │                                               │
+        N │
+row 30  L │  ╰──────────────────────────────────────────────────────────────────────────────────────────────╯
+        N │
+row 31  L │  ↑↓ navigate │ ⏎ resume │ Esc cancel
+        N │
+row 33  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
25-resume-closed — 18.19% pixels differ + · next: CLI restarted after this step +
legacy
+
term2-next
+
diff
+
32 text row(s) differ
row  0  L │  /retry — Resend the last user turn, or choose a turn to resend
+        N │/followup — Queue a message for after the running turn
+row  1  L │  /retry-tool — Retry the last tool call
+        N │/cancel — Stop the running turn
+row  2  L │  /retry-turn — Regenerate the latest user turn from its original prompt
+        N │/answer — Answer a pending approval or question
+row  3  L │  /compact — Compact older conversation turns into a local summary
+        N │/bridge — Attach or detach this session's control socket
+row  4  L │  /bare — Toggle the Bare profile (minimal prompt)
+        N │/restart — Reload this executable (/restart stop also stops background work)
+row  5  L │  /lite — Toggle the Bare profile (Lite was merged into Bare)
+        N │/quit — Exit the application
+row  6  L │  /mentor — Toggle mentor mode (collaborative mode with mentor model)
+        N │/exit — Exit the application
+row  7  L │  /orchestrator — Toggle orchestrator mode (delegate all tool-backed work)
+        N │/command-status — Show the outcome of a command by ID
+row  8  L │  /auto-approve — Set tool auto-approval mode (off, advisory, auto, always)
+        N │/command-apply — Apply a finished command result by ID
+row  9  L │  /plan — Toggle plan mode (read-only research/planning mode)
+        N │/mcp — Show configured MCP servers and their state
+row 10  L │  /profile — Switch the active profile
+        N │/mcp-login — Authenticate with an OAuth-protected MCP server
+row 11  L │  /handoff — Send the last assistant response to another model for review
+        N │/plan — Toggle the plan profile
+row 12  L │  /settings — View or modify settings
+        N │/bare — Switch to the bare profile
+row 13  L │  /sandbox — Toggle shell sandboxing; disabling it gives shell commands unrestricted access
+        N │/mentor — Toggle the mentor profile
+row 14  L │  /mcp — Show configured MCP servers and their connection state
+        N │/orchestrator — Toggle the orchestrator profile
+row 15  L │  /mcp-login — Authenticate with an OAuth-protected MCP server
+        N │Keyboard shortcuts
+row 16  L │  /bridge — Attach or detach this local session for Discord bridge input
+        N │Enter send/steer · Alt+Enter follow-up · ↑/↓ history · PgUp/PgDn scroll · Ctrl+O tool output · 
+row 17  L │  /providers — Manage API providers (list, add, edit, delete)
+        N │Ctrl+T reasoning effort
+row 18  L │  /skills — Activate a skill for the next request
+        N │Ctrl+G approvals/tasks · Ctrl+B budget · Ctrl+C stop turn / clear input / exit
+row 19  L │  /restart — Reload the built CLI in place; /restart stop consents to stopping background work
+        N │Shift+Tab plan mode
+row 20  L │  /quit — Exit the application
+        N │╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
+row 21  L │  /help — Show commands and keyboard shortcuts
+        N ││ Resume Conversation                                                                              │
+row 22  L │
+        N ││ Loading conversations…                                                                           │
+row 23  L │  Keyboard shortcuts
+        N ││ ↑/↓ select · Enter resume · Esc cancel                                                           │
+row 24  L │  Ctrl+C: clear draft or interrupt; press again to exit
+        N │╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
+row 25  L │  Ctrl+O: choose model · Ctrl+T: choose reasoning effort
+        N │────────────────────────────────────────────────────────────────────────────────────────────────────
+row 26  L │  Shift+Tab: switch Standard/Plan · @: complete paths · !: shell
+        N │❯  
+row 28  L │
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+row 29  L │  ────────────────────────────────────────────────────────────────────────────────────────────────
+        N │
+row 30  L │  ❯  
+        N │
+row 31  L │  / commands │ @ paths │ ! shell │ Shift+Tab plan
+        N │
+row 33  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
26-resize — 15.14% pixels differ + +
legacy
+
term2-next
+
diff
+
20 text row(s) differ
row  0  L │  /settings — View or modify settings
+        N │
+row  1  L │  /sandbox — Toggle shell sandboxing; disabling it gives shell commands 
+        N │▌ term²  BARE  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
+row  2  L │  unrestricted access
+        N │  mockprov/mock-alpha (default)
+row  3  L │  /mcp — Show configured MCP servers and their connection state
+        N │
+row  4  L │  /mcp-login — Authenticate with an OAuth-protected MCP server
+        N │────────────────────────────────────────────────────────────────────────────────
+row  5  L │  /bridge — Attach or detach this local session for Discord bridge input
+        N │❯  
+row  6  L │  /providers — Manage API providers (list, add, edit, delete)
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history
+row  7  L │  /skills — Activate a skill for the next request
+        N │
+row  8  L │  /restart — Reload the built CLI in place; /restart stop consents to stopping
+        N │ Bare │ mockprov/mock-alpha
+row  9  L │   background work
+        N │
+row 10  L │  /quit — Exit the application
+        N │
+row 11  L │  /help — Show commands and keyboard shortcuts
+        N │
+row 13  L │  Keyboard shortcuts
+        N │
+row 14  L │  Ctrl+C: clear draft or interrupt; press again to exit
+        N │
+row 15  L │  Ctrl+O: choose model · Ctrl+T: choose reasoning effort
+        N │
+row 16  L │  Shift+Tab: switch Standard/Plan · @: complete paths · !: shell
+        N │
+row 19  L │  ────────────────────────────────────────────────────────────────────────────
+        N │
+row 20  L │  ❯  
+        N │
+row 21  L │  / commands │ @ paths │ ! shell │ Shift+Tab plan
+        N │
+row 23  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
27-resize-typed — 15.85% pixels differ + +
legacy
+
term2-next
+
diff
+
20 text row(s) differ
row  0  L │  /handoff — Send the last assistant response to another model for review
+        N │
+row  1  L │  /settings — View or modify settings
+        N │▌ term²  BARE  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
+row  2  L │  /sandbox — Toggle shell sandboxing; disabling it gives shell commands 
+        N │  mockprov/mock-alpha (default)
+row  3  L │  unrestricted access
+        N │
+row  4  L │  /mcp — Show configured MCP servers and their connection state
+        N │────────────────────────────────────────────────────────────────────────────────
+row  5  L │  /mcp-login — Authenticate with an OAuth-protected MCP server
+        N │❯ typed after resize 
+row  6  L │  /bridge — Attach or detach this local session for Discord bridge input
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history
+row  7  L │  /providers — Manage API providers (list, add, edit, delete)
+        N │
+row  8  L │  /skills — Activate a skill for the next request
+        N │ Bare │ mockprov/mock-alpha
+row  9  L │  /restart — Reload the built CLI in place; /restart stop consents to stopping
+        N │
+row 10  L │   background work
+        N │
+row 11  L │  /quit — Exit the application
+        N │
+row 12  L │  /help — Show commands and keyboard shortcuts
+        N │
+row 14  L │  Keyboard shortcuts
+        N │
+row 15  L │  Ctrl+C: clear draft or interrupt; press again to exit
+        N │
+row 16  L │  Ctrl+O: choose model · Ctrl+T: choose reasoning effort
+        N │
+row 17  L │  Shift+Tab: switch Standard/Plan · @: complete paths · !: shell
+        N │
+row 20  L │  ────────────────────────────────────────────────────────────────────────────
+        N │
+row 21  L │  ❯ typed after resize 
+        N │
+row 23  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
28-resize-back — 15.08% pixels differ + +
legacy
+
term2-next
+
diff
+
30 text row(s) differ
row  0  L │  /rewind — Rewind to a user turn and put it back in the input box
+        N │
+row  1  L │  /retry — Resend the last user turn, or choose a turn to resend
+        N │▌ term²  BARE  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
+row  2  L │  /retry-tool — Retry the last tool call
+        N │  mockprov/mock-alpha (default)
+row  3  L │  /retry-turn — Regenerate the latest user turn from its original prompt
+        N │
+row  4  L │  /compact — Compact older conversation turns into a local summary
+        N │────────────────────────────────────────────────────────────────────────────────────────────────────
+row  5  L │  /bare — Toggle the Bare profile (minimal prompt)
+        N │❯ typed after resize 
+row  6  L │  /lite — Toggle the Bare profile (Lite was merged into Bare)
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output
+row  7  L │  /mentor — Toggle mentor mode (collaborative mode with mentor model)
+        N │
+row  8  L │  /orchestrator — Toggle orchestrator mode (delegate all tool-backed work)
+        N │ Bare │ mockprov/mock-alpha
+row  9  L │  /auto-approve — Set tool auto-approval mode (off, advisory, auto, always)
+        N │
+row 10  L │  /plan — Toggle plan mode (read-only research/planning mode)
+        N │
+row 11  L │  /profile — Switch the active profile
+        N │
+row 12  L │  /handoff — Send the last assistant response to another model for review
+        N │
+row 13  L │  /settings — View or modify settings
+        N │
+row 14  L │  /sandbox — Toggle shell sandboxing; disabling it gives shell commands unrestricted access
+        N │
+row 15  L │  /mcp — Show configured MCP servers and their connection state
+        N │
+row 16  L │  /mcp-login — Authenticate with an OAuth-protected MCP server
+        N │
+row 17  L │  /bridge — Attach or detach this local session for Discord bridge input
+        N │
+row 18  L │  /providers — Manage API providers (list, add, edit, delete)
+        N │
+row 19  L │  /skills — Activate a skill for the next request
+        N │
+row 20  L │  /restart — Reload the built CLI in place; /restart stop consents to stopping background work
+        N │
+row 21  L │  /quit — Exit the application
+        N │
+row 22  L │  /help — Show commands and keyboard shortcuts
+        N │
+row 24  L │  Keyboard shortcuts
+        N │
+row 25  L │  Ctrl+C: clear draft or interrupt; press again to exit
+        N │
+row 26  L │  Ctrl+O: choose model · Ctrl+T: choose reasoning effort
+        N │
+row 27  L │  Shift+Tab: switch Standard/Plan · @: complete paths · !: shell
+        N │
+row 30  L │  ────────────────────────────────────────────────────────────────────────────────────────────────
+        N │
+row 31  L │  ❯ typed after resize 
+        N │
+row 33  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
29-exit-confirm — 14.27% pixels differ + +
legacy
+
term2-next
+
diff
+
29 text row(s) differ
row  0  L │  /retry-turn — Regenerate the latest user turn from its original prompt
+        N │
+row  1  L │  /compact — Compact older conversation turns into a local summary
+        N │▌ term²  BARE  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
+row  2  L │  /bare — Toggle the Bare profile (minimal prompt)
+        N │  mockprov/mock-alpha (default)
+row  3  L │  /lite — Toggle the Bare profile (Lite was merged into Bare)
+        N │
+row  4  L │  /mentor — Toggle mentor mode (collaborative mode with mentor model)
+        N │Press Ctrl+C again to exit
+row  5  L │  /orchestrator — Toggle orchestrator mode (delegate all tool-backed work)
+        N │────────────────────────────────────────────────────────────────────────────────────────────────────
+row  6  L │  /auto-approve — Set tool auto-approval mode (off, advisory, auto, always)
+        N │❯  
+row  7  L │  /plan — Toggle plan mode (read-only research/planning mode)
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output
+row  8  L │  /profile — Switch the active profile
+        N │
+row  9  L │  /handoff — Send the last assistant response to another model for review
+        N │ Bare │ mockprov/mock-alpha
+row 10  L │  /settings — View or modify settings
+        N │
+row 11  L │  /sandbox — Toggle shell sandboxing; disabling it gives shell commands unrestricted access
+        N │
+row 12  L │  /mcp — Show configured MCP servers and their connection state
+        N │
+row 13  L │  /mcp-login — Authenticate with an OAuth-protected MCP server
+        N │
+row 14  L │  /bridge — Attach or detach this local session for Discord bridge input
+        N │
+row 15  L │  /providers — Manage API providers (list, add, edit, delete)
+        N │
+row 16  L │  /skills — Activate a skill for the next request
+        N │
+row 17  L │  /restart — Reload the built CLI in place; /restart stop consents to stopping background work
+        N │
+row 18  L │  /quit — Exit the application
+        N │
+row 19  L │  /help — Show commands and keyboard shortcuts
+        N │
+row 21  L │  Keyboard shortcuts
+        N │
+row 22  L │  Ctrl+C: clear draft or interrupt; press again to exit
+        N │
+row 23  L │  Ctrl+O: choose model · Ctrl+T: choose reasoning effort
+        N │
+row 24  L │  Shift+Tab: switch Standard/Plan · @: complete paths · !: shell
+        N │
+row 26  L │  Press Ctrl+C again to exit
+        N │
+row 29  L │  ────────────────────────────────────────────────────────────────────────────────────────────────
+        N │
+row 30  L │  ❯  
+        N │
+row 31  L │  / commands │ @ paths │ ! shell │ Shift+Tab plan
+        N │
+row 33  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
30-exited — 14.05% pixels differ + +
legacy
+
term2-next
+
diff
+
27 text row(s) differ
row  0  L │  /plan — Toggle plan mode (read-only research/planning mode)
+        N │
+row  1  L │  /profile — Switch the active profile
+        N │▌ term²  BARE  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
+row  2  L │  /handoff — Send the last assistant response to another model for review
+        N │  mockprov/mock-alpha (default)
+row  3  L │  /settings — View or modify settings
+        N │
+row  4  L │  /sandbox — Toggle shell sandboxing; disabling it gives shell commands unrestricted access
+        N │Press Ctrl+C again to exit
+row  5  L │  /mcp — Show configured MCP servers and their connection state
+        N │────────────────────────────────────────────────────────────────────────────────────────────────────
+row  6  L │  /mcp-login — Authenticate with an OAuth-protected MCP server
+        N │❯  
+row  7  L │  /bridge — Attach or detach this local session for Discord bridge input
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output
+row  8  L │  /providers — Manage API providers (list, add, edit, delete)
+        N │
+row  9  L │  /skills — Activate a skill for the next request
+        N │ Bare │ mockprov/mock-alpha
+row 10  L │  /restart — Reload the built CLI in place; /restart stop consents to stopping background work
+        N │
+row 11  L │  /quit — Exit the application
+        N │
+row 12  L │  /help — Show commands and keyboard shortcuts
+        N │
+row 14  L │  Keyboard shortcuts
+        N │
+row 15  L │  Ctrl+C: clear draft or interrupt; press again to exit
+        N │
+row 16  L │  Ctrl+O: choose model · Ctrl+T: choose reasoning effort
+        N │
+row 17  L │  Shift+Tab: switch Standard/Plan · @: complete paths · !: shell
+        N │
+row 19  L │  Press Ctrl+C again to exit
+        N │
+row 22  L │  ────────────────────────────────────────────────────────────────────────────────────────────────
+        N │
+row 23  L │  ❯  
+        N │
+row 24  L │  / commands │ @ paths │ ! shell │ Shift+Tab plan
+        N │
+row 26  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+row 27  L │Token usage: 6,000 input, 400 output
+        N │
+row 28  L │By model:
+        N │
+row 29  L │  mockprov/mock-alpha: 6,000 input, 400 output; Cost unavailable
+        N │
+row 31  L │Session: ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
+        N │
+row 32  L │To resume this conversation: term2 --resume ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
+        N │
+

80×24

+

Store timings

+
startup → composer (ms)first /resume → list (ms)second /resume → list (ms)
legacy2175800171
next1893FAIL (no list within 5 s)not measured
+

Key-to-paint latency — idle

+ +
classlegacy p50p95maxnext p50p95maxlegacy CPU/key msnext CPU/key mslegacy bytes/keynext bytes/keynext missedgate
type char14.915.723.515.115.815.97.37.74295030/48pass
backspace15.115.751.615.215.715.87.56.54285020/48pass
enter (composer)14.715.515.514.615.115.159.055.0174716220/10pass
arrow (model menu)15.315.915.9———8.525.01727020/20no matching paint (legacy painted); 20 key(s) never painted the change (legacy 0)
arrow (resume menu)15.315.815.9———6.5—2728—20/20no matching paint (legacy painted); 20 key(s) never painted the change (legacy 0)
ctrl+o11.111.911.9———14.045.01676010/10no matching paint (legacy painted); 10 key(s) never painted the change (legacy 0)
shift+tab11.512.312.325.143.743.75.056.016925440/10p50 over 1.2x / +5 ms; p95 over 1.2x / +5 ms
open /model14.915.215.214.616.116.111.313.8231615900/8pass
open /settings14.915.215.214.718.318.343.87.5547123870/8pass
scroll (resume page down/up)15.115.715.7———10.0—2727—10/10no matching paint (legacy painted); 10 key(s) never painted the change (legacy 0)
+
33 missed key(s) in idle — screens at the timeout

next · arrow (model menu) #0

 ❯ ping idle 7 
+
+  Sure. This is a short answer to: ping idle 7
+
+ ❯ ping idle 8 
+
+  Sure. This is a short answer to: ping idle 8
+
+ ❯ ping idle 9 
+
+  Sure. This is a short answer to: ping idle 9
+╭──────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                               │
+│  Favorites  │  Nicknames  │  All                                             │
+│ Filter: type to filter                                                       │
+│ No matching models.                                                          │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel     │
+╰──────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k
+
+

next · arrow (model menu) #1

 ❯ ping idle 7 
+
+  Sure. This is a short answer to: ping idle 7
+
+ ❯ ping idle 8 
+
+  Sure. This is a short answer to: ping idle 8
+
+ ❯ ping idle 9 
+
+  Sure. This is a short answer to: ping idle 9
+╭──────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                               │
+│  Favorites  │  Nicknames  │  All                                             │
+│ Filter: type to filter                                                       │
+│ No matching models.                                                          │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel     │
+╰──────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k
+
+

next · arrow (model menu) #2

 ❯ ping idle 7 
+
+  Sure. This is a short answer to: ping idle 7
+
+ ❯ ping idle 8 
+
+  Sure. This is a short answer to: ping idle 8
+
+ ❯ ping idle 9 
+
+  Sure. This is a short answer to: ping idle 9
+╭──────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                               │
+│  Favorites  │  Nicknames  │  All                                             │
+│ Filter: type to filter                                                       │
+│ No matching models.                                                          │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel     │
+╰──────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k
+
+

next · arrow (model menu) #3

 ❯ ping idle 7 
+
+  Sure. This is a short answer to: ping idle 7
+
+ ❯ ping idle 8 
+
+  Sure. This is a short answer to: ping idle 8
+
+ ❯ ping idle 9 
+
+  Sure. This is a short answer to: ping idle 9
+╭──────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                               │
+│  Favorites  │  Nicknames  │  All                                             │
+│ Filter: type to filter                                                       │
+│ No matching models.                                                          │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel     │
+╰──────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k
+
+

next · arrow (model menu) #4

 ❯ ping idle 7 
+
+  Sure. This is a short answer to: ping idle 7
+
+ ❯ ping idle 8 
+
+  Sure. This is a short answer to: ping idle 8
+
+ ❯ ping idle 9 
+
+  Sure. This is a short answer to: ping idle 9
+╭──────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                               │
+│  Favorites  │  Nicknames  │  All                                             │
+│ Filter: type to filter                                                       │
+│ No matching models.                                                          │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel     │
+╰──────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k
+
+

next · arrow (model menu) #5

 ❯ ping idle 7 
+
+  Sure. This is a short answer to: ping idle 7
+
+ ❯ ping idle 8 
+
+  Sure. This is a short answer to: ping idle 8
+
+ ❯ ping idle 9 
+
+  Sure. This is a short answer to: ping idle 9
+╭──────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                               │
+│  Favorites  │  Nicknames  │  All                                             │
+│ Filter: type to filter                                                       │
+│ No matching models.                                                          │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel     │
+╰──────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k
+
+

next · arrow (model menu) #6

 ❯ ping idle 7 
+
+  Sure. This is a short answer to: ping idle 7
+
+ ❯ ping idle 8 
+
+  Sure. This is a short answer to: ping idle 8
+
+ ❯ ping idle 9 
+
+  Sure. This is a short answer to: ping idle 9
+╭──────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                               │
+│  Favorites  │  Nicknames  │  All                                             │
+│ Filter: type to filter                                                       │
+│ No matching models.                                                          │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel     │
+╰──────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k
+
+

next · arrow (model menu) #7

 ❯ ping idle 7 
+
+  Sure. This is a short answer to: ping idle 7
+
+ ❯ ping idle 8 
+
+  Sure. This is a short answer to: ping idle 8
+
+ ❯ ping idle 9 
+
+  Sure. This is a short answer to: ping idle 9
+╭──────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                               │
+│  Favorites  │  Nicknames  │  All                                             │
+│ Filter: type to filter                                                       │
+│ No matching models.                                                          │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel     │
+╰──────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k
+
+

next · arrow (model menu) #8

 ❯ ping idle 7 
+
+  Sure. This is a short answer to: ping idle 7
+
+ ❯ ping idle 8 
+
+  Sure. This is a short answer to: ping idle 8
+
+ ❯ ping idle 9 
+
+  Sure. This is a short answer to: ping idle 9
+╭──────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                               │
+│  Favorites  │  Nicknames  │  All                                             │
+│ Filter: type to filter                                                       │
+│ No matching models.                                                          │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel     │
+╰──────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k
+
+

next · arrow (model menu) #9

 ❯ ping idle 7 
+
+  Sure. This is a short answer to: ping idle 7
+
+ ❯ ping idle 8 
+
+  Sure. This is a short answer to: ping idle 8
+
+ ❯ ping idle 9 
+
+  Sure. This is a short answer to: ping idle 9
+╭──────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                               │
+│  Favorites  │  Nicknames  │  All                                             │
+│ Filter: type to filter                                                       │
+│ No matching models.                                                          │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel     │
+╰──────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k
+
+

next · arrow (model menu) #10

 ❯ ping idle 7 
+
+  Sure. This is a short answer to: ping idle 7
+
+ ❯ ping idle 8 
+
+  Sure. This is a short answer to: ping idle 8
+
+ ❯ ping idle 9 
+
+  Sure. This is a short answer to: ping idle 9
+╭──────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                               │
+│  Favorites  │  Nicknames  │  All                                             │
+│ Filter: type to filter                                                       │
+│ No matching models.                                                          │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel     │
+╰──────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k
+
+

next · arrow (model menu) #11

 ❯ ping idle 7 
+
+  Sure. This is a short answer to: ping idle 7
+
+ ❯ ping idle 8 
+
+  Sure. This is a short answer to: ping idle 8
+
+ ❯ ping idle 9 
+
+  Sure. This is a short answer to: ping idle 9
+╭──────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                               │
+│  Favorites  │  Nicknames  │  All                                             │
+│ Filter: type to filter                                                       │
+│ No matching models.                                                          │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel     │
+╰──────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k
+
+
+

Key-to-paint latency — streaming

+ +
classlegacy p50p95maxnext p50p95maxlegacy CPU/key msnext CPU/key mslegacy bytes/keynext bytes/keynext missedgate
type char28.068.081.118.835.739.989.448.13569234450/48pass
backspace30.468.685.817.235.641.978.353.13340634310/48pass
enter (composer)34.439.639.629.139.839.857.066.07395317790/10pass
arrow (model menu)28.439.846.0———85.01869.510708127420920/20no matching paint (legacy painted); 20 key(s) never painted the change (legacy 0)
arrow (resume menu)——————————20/20n/a (neither painted)
ctrl+o31.562.262.222.1145.4145.468.064.017380342380/10p95 over 1.2x / +5 ms
shift+tab22.971.671.640.24855.44855.4107.01607.01834801281527/107 key(s) never painted the change (legacy 0); p50 over 1.2x / +5 ms; p95 over 1.2x / +5 ms; input stall 4855 ms > 200 ms
open /model40.574.374.336.039.439.492.553.8273963257270/8pass
open /settings20.677.577.541.052.052.093.855.03598841156010/8p50 over 1.2x / +5 ms
scroll (resume page down/up)——————————10/10n/a (neither painted)
+
32 missed key(s) in streaming — screens at the timeout

legacy · arrow (resume menu) #0

(list not painted within 5000 ms; 20 keys not sent)
+  sw143 sw144 sw145 sw146 sw147 sw148 sw149 sw150 sw151 sw152 sw153 sw154
+  sw155 sw156 sw157 sw158 sw159 sw160 sw161 sw162 sw163 sw164 sw165 sw166
+  sw167 sw168 sw169 sw170 sw171 sw172 sw173 sw174 sw175 sw176 sw177 sw178
+  sw179 sw180 sw181 sw182 sw183 sw184 sw185 sw186 sw187 sw188 sw189 sw190
+  sw191 sw192 sw193 sw194 sw195 sw196 sw197 sw198 sw199 sw200 sw201 sw202
+  sw203 sw204 sw205 sw206 sw207
+
+
+  Generating · 1s (55.0 tok/s)
+  ────────────────────────────────────────────────────────────────────────────
+  │ queued · after this turn
+  │   ping streaming 1
+  │   ping streaming 2
+  │   ping streaming 3
+  │   ping streaming 4
+  │   ping streaming 5
+  │   ping streaming 6
+  │   ping streaming 7
+  │   ping streaming 8
+  │   ping streaming 9
+  ❯  
+  ↑ select queued │ ⏎ steer │ Alt+⏎ queue │ Ctrl+O model │ Ctrl+T effort
+
+   Bare │ [Q:9] │ mockprov/mock-alpha │ ↑1.2k ↓80 · (3.1t/s) · Ctx 1k

legacy · scroll (resume page down/up) #0

(list not painted within 5000 ms; 10 keys not sent)
+  sw143 sw144 sw145 sw146 sw147 sw148 sw149 sw150 sw151 sw152 sw153 sw154
+  sw155 sw156 sw157 sw158 sw159 sw160 sw161 sw162 sw163 sw164 sw165 sw166
+  sw167 sw168 sw169 sw170 sw171 sw172 sw173 sw174 sw175 sw176 sw177 sw178
+  sw179 sw180 sw181 sw182 sw183 sw184 sw185 sw186 sw187 sw188 sw189 sw190
+  sw191 sw192 sw193 sw194 sw195 sw196 sw197 sw198 sw199 sw200 sw201 sw202
+  sw203 sw204 sw205 sw206 sw207
+
+
+  Generating · 1s (55.0 tok/s)
+  ────────────────────────────────────────────────────────────────────────────
+  │ queued · after this turn
+  │   ping streaming 1
+  │   ping streaming 2
+  │   ping streaming 3
+  │   ping streaming 4
+  │   ping streaming 5
+  │   ping streaming 6
+  │   ping streaming 7
+  │   ping streaming 8
+  │   ping streaming 9
+  ❯  
+  ↑ select queued │ ⏎ steer │ Alt+⏎ queue │ Ctrl+O model │ Ctrl+T effort
+
+   Bare │ [Q:9] │ mockprov/mock-alpha │ ↑1.2k ↓80 · (3.1t/s) · Ctx 1k

next · arrow (model menu) #0

  sw455 sw456 sw457 sw458 sw459 sw460 sw461 sw462 sw463 sw464 sw465 sw466
+  sw467 sw468 sw469 sw470 sw471 sw472 sw473 sw474 sw475 sw476 sw477 sw478
+  sw479 sw480 sw481 sw482 sw483 sw484 sw485 sw486 sw487 sw488 sw489 sw490
+  sw491 sw492 sw493 sw494 sw495 sw496 sw497 sw498 sw499 sw500 sw501 sw502
+  sw503 sw504 sw505 sw506 sw507 sw508 sw509 sw510 sw511 sw512 sw513 sw514
+  sw515 sw516 sw517 sw518 sw519 sw520 sw521 sw522 sw523 sw524 sw525 sw526
+  sw527 sw528 sw529 sw530 sw531 sw532 sw533 sw534 sw535 sw536 sw537 sw538
+  sw539 sw540 sw541 sw542 sw543 sw544 sw545 sw546 sw547 sw548 sw549 sw550
+  sw551 sw552 sw553 sw554 sw555 sw556 sw557 sw558 sw559 sw560 sw561 sw562
+  sw563 sw564 sw565 sw566 sw567 sw568 sw569 sw570 sw571
+
+Generating · 11s (~202.7 tok/s)
+╭──────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                               │
+│  Favorites  │  Nicknames  │  All                                             │
+│ Filter: type to filter                                                       │
+│ No matching models.                                                          │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel     │
+╰──────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · 3.2t/s · 0% cached · Ctx last 1k
+

next · arrow (model menu) #1

  sw1030
+  sw1031 sw1032 sw1033 sw1034 sw1035 sw1036 sw1037 sw1038 sw1039 sw1040 sw1041
+  sw1042
+  sw1043 sw1044 sw1045 sw1046 sw1047 sw1048 sw1049 sw1050 sw1051 sw1052 sw1053
+  sw1054
+  sw1055 sw1056 sw1057 sw1058 sw1059 sw1060 sw1061 sw1062 sw1063 sw1064 sw1065
+  sw1066
+  sw1067 sw1068 sw1069 sw1070 sw1071 sw1072 sw1073 sw1074 sw1075 sw1076 sw1077
+  sw1078
+  sw1079 sw1080 sw1081 sw1082 sw1083 sw1084
+
+Generating · 17s (~168.8 tok/s)
+╭──────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                               │
+│  Favorites  │  Nicknames  │  All                                             │
+│ Filter: type to filter                                                       │
+│ No matching models.                                                          │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel     │
+╰──────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · 3.2t/s · 0% cached · Ctx last 1k
+

next · arrow (model menu) #2

  sw1558
+  sw1559 sw1560 sw1561 sw1562 sw1563 sw1564 sw1565 sw1566 sw1567 sw1568 sw1569
+  sw1570
+  sw1571 sw1572 sw1573 sw1574 sw1575 sw1576 sw1577 sw1578 sw1579 sw1580 sw1581
+  sw1582
+  sw1583 sw1584 sw1585 sw1586 sw1587 sw1588 sw1589 sw1590 sw1591 sw1592 sw1593
+  sw1594
+  sw1595 sw1596 sw1597 sw1598 sw1599 sw1600 sw1601 sw1602 sw1603 sw1604 sw1605
+  sw1606
+  sw1607
+
+Generating · 22s (~201.7 tok/s)
+╭──────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                               │
+│  Favorites  │  Nicknames  │  All                                             │
+│ Filter: type to filter                                                       │
+│ No matching models.                                                          │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel     │
+╰──────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · 3.2t/s · 0% cached · Ctx last 1k
+

next · arrow (model menu) #3

  sw2074
+  sw2075 sw2076 sw2077 sw2078 sw2079 sw2080 sw2081 sw2082 sw2083 sw2084 sw2085
+  sw2086
+  sw2087 sw2088 sw2089 sw2090 sw2091 sw2092 sw2093 sw2094 sw2095 sw2096 sw2097
+  sw2098
+  sw2099 sw2100 sw2101 sw2102 sw2103 sw2104 sw2105 sw2106 sw2107 sw2108 sw2109
+  sw2110
+  sw2111 sw2112 sw2113 sw2114 sw2115 sw2116 sw2117 sw2118 sw2119 sw2120 sw2121
+  sw2122
+  sw2123 sw2124 sw2125 sw2126 sw2127 sw2128 sw2129
+
+Generating · 27s (~214.5 tok/s)
+╭──────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                               │
+│  Favorites  │  Nicknames  │  All                                             │
+│ Filter: type to filter                                                       │
+│ No matching models.                                                          │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel     │
+╰──────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · 3.2t/s · 0% cached · Ctx last 1k
+

next · arrow (model menu) #4

  sw2434
+  sw2435 sw2436 sw2437 sw2438 sw2439 sw2440 sw2441 sw2442 sw2443 sw2444 sw2445
+  sw2446
+  sw2447 sw2448 sw2449 sw2450 sw2451 sw2452 sw2453 sw2454 sw2455 sw2456 sw2457
+  sw2458
+  sw2459 sw2460 sw2461 sw2462 sw2463 sw2464 sw2465 sw2466 sw2467 sw2468 sw2469
+  sw2470
+  sw2471 sw2472 sw2473 sw2474 sw2475 sw2476 sw2477 sw2478 sw2479 sw2480 sw2481
+  sw2482
+  sw2483 sw2484 sw2485 sw2486 sw2487 sw2488 sw2489 sw2490 sw2491 sw2492 sw2493
+  sw2494
+  sw2495 sw2496 sw2497 sw2498 sw2499
+╭──────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                               │
+│  Favorites  │  Nicknames  │  All                                             │
+│ Filter: type to filter                                                       │
+│ No matching models.                                                          │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel     │
+╰──────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑2.4k ↓160 · 3.2t/s · 0% cached · Ctx last 1k
+

next · arrow (model menu) #5

  sw467 sw468 sw469 sw470 sw471 sw472 sw473 sw474 sw475 sw476 sw477 sw478
+  sw479 sw480 sw481 sw482 sw483 sw484 sw485 sw486 sw487 sw488 sw489 sw490
+  sw491 sw492 sw493 sw494 sw495 sw496 sw497 sw498 sw499 sw500 sw501 sw502
+  sw503 sw504 sw505 sw506 sw507 sw508 sw509 sw510 sw511 sw512 sw513 sw514
+  sw515 sw516 sw517 sw518 sw519 sw520 sw521 sw522 sw523 sw524 sw525 sw526
+  sw527 sw528 sw529 sw530 sw531 sw532 sw533 sw534 sw535 sw536 sw537 sw538
+  sw539 sw540 sw541 sw542 sw543 sw544 sw545 sw546 sw547 sw548 sw549 sw550
+  sw551 sw552 sw553 sw554 sw555 sw556 sw557 sw558 sw559 sw560 sw561 sw562
+  sw563 sw564 sw565 sw566 sw567 sw568 sw569 sw570 sw571 sw572 sw573 sw574
+  sw575 sw576 sw577 sw578 sw579 sw580 sw581 sw582 sw583 sw584 sw585 sw586
+
+Generating · 6s (~160.5 tok/s)
+╭──────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                               │
+│  Favorites  │  Nicknames  │  All                                             │
+│ Filter: type to filter                                                       │
+│ No matching models.                                                          │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel     │
+╰──────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑2.4k ↓160 · 3.2t/s · 0% cached · Ctx last 1k
+

next · arrow (model menu) #6

  sw1054
+  sw1055 sw1056 sw1057 sw1058 sw1059 sw1060 sw1061 sw1062 sw1063 sw1064 sw1065
+  sw1066
+  sw1067 sw1068 sw1069 sw1070 sw1071 sw1072 sw1073 sw1074 sw1075 sw1076 sw1077
+  sw1078
+  sw1079 sw1080 sw1081 sw1082 sw1083 sw1084 sw1085 sw1086 sw1087 sw1088 sw1089
+  sw1090
+  sw1091 sw1092 sw1093 sw1094 sw1095 sw1096 sw1097 sw1098 sw1099 sw1100 sw1101
+  sw1102
+  sw1103 sw1104 sw1105 sw1106 sw1107 sw1108
+
+Generating · 11s (~181.1 tok/s)
+╭──────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                               │
+│  Favorites  │  Nicknames  │  All                                             │
+│ Filter: type to filter                                                       │
+│ No matching models.                                                          │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel     │
+╰──────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑2.4k ↓160 · 3.2t/s · 0% cached · Ctx last 1k
+

next · arrow (model menu) #7

  sw1558
+  sw1559 sw1560 sw1561 sw1562 sw1563 sw1564 sw1565 sw1566 sw1567 sw1568 sw1569
+  sw1570
+  sw1571 sw1572 sw1573 sw1574 sw1575 sw1576 sw1577 sw1578 sw1579 sw1580 sw1581
+  sw1582
+  sw1583 sw1584 sw1585 sw1586 sw1587 sw1588 sw1589 sw1590 sw1591 sw1592 sw1593
+  sw1594
+  sw1595 sw1596 sw1597 sw1598 sw1599 sw1600 sw1601 sw1602 sw1603 sw1604 sw1605
+  sw1606
+  sw1607 sw1608 sw1609 sw1610 sw1611 sw1612 sw1613 sw1614 sw1615 sw1616
+
+Generating · 16s (~212.4 tok/s)
+╭──────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                               │
+│  Favorites  │  Nicknames  │  All                                             │
+│ Filter: type to filter                                                       │
+│ No matching models.                                                          │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel     │
+╰──────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑2.4k ↓160 · 3.2t/s · 0% cached · Ctx last 1k
+

next · arrow (model menu) #8

  sw2086
+  sw2087 sw2088 sw2089 sw2090 sw2091 sw2092 sw2093 sw2094 sw2095 sw2096 sw2097
+  sw2098
+  sw2099 sw2100 sw2101 sw2102 sw2103 sw2104 sw2105 sw2106 sw2107 sw2108 sw2109
+  sw2110
+  sw2111 sw2112 sw2113 sw2114 sw2115 sw2116 sw2117 sw2118 sw2119 sw2120 sw2121
+  sw2122
+  sw2123 sw2124 sw2125 sw2126 sw2127 sw2128 sw2129 sw2130 sw2131 sw2132 sw2133
+  sw2134
+  sw2135 sw2136
+
+Generating · 21s (~226.8 tok/s)
+╭──────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                               │
+│  Favorites  │  Nicknames  │  All                                             │
+│ Filter: type to filter                                                       │
+│ No matching models.                                                          │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel     │
+╰──────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑2.4k ↓160 · 3.2t/s · 0% cached · Ctx last 1k
+

next · arrow (model menu) #9

  sw2434
+  sw2435 sw2436 sw2437 sw2438 sw2439 sw2440 sw2441 sw2442 sw2443 sw2444 sw2445
+  sw2446
+  sw2447 sw2448 sw2449 sw2450 sw2451 sw2452 sw2453 sw2454 sw2455 sw2456 sw2457
+  sw2458
+  sw2459 sw2460 sw2461 sw2462 sw2463 sw2464 sw2465 sw2466 sw2467 sw2468 sw2469
+  sw2470
+  sw2471 sw2472 sw2473 sw2474 sw2475 sw2476 sw2477 sw2478 sw2479 sw2480 sw2481
+  sw2482
+  sw2483 sw2484 sw2485 sw2486 sw2487 sw2488 sw2489 sw2490 sw2491 sw2492 sw2493
+  sw2494
+  sw2495 sw2496 sw2497 sw2498 sw2499
+╭──────────────────────────────────────────────────────────────────────────────╮
+│ Choose a model                                                               │
+│  Favorites  │  Nicknames  │  All                                             │
+│ Filter: type to filter                                                       │
+│ No matching models.                                                          │
+│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel     │
+╰──────────────────────────────────────────────────────────────────────────────╯
+────────────────────────────────────────────────────────────────────────────────
+❯  
+
+ Bare │ mockprov/mock-alpha │ ↑3.6k ↓240 · 3.2t/s · 0% cached · Ctx last 1k
+
+

Screenshots

Masks (grey boxes): version, ids, paths, ports, durations/times, spinner frames. Left legacy, middle term2-next, right pixel diff (red).

+
01-startup — 4.81% pixels differ + +
legacy
+
term2-next
+
diff
+
10 text row(s) differ
row  0  L │Profile: bare
+        N │Profile: BARE
+row  2  L │  ▌ term²  BARE  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
+        N │▌ term²  BARE  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
+row  3  L │    mockprov/mock-alpha (default)
+        N │  mockprov/mock-alpha (default)
+row  5  L │
+        N │────────────────────────────────────────────────────────────────────────────────
+row  6  L │
+        N │❯  
+row  7  L │
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history
+row  8  L │  ────────────────────────────────────────────────────────────────────────────
+        N │
+row  9  L │  ❯  
+        N │ Bare │ mockprov/mock-alpha
+row 10  L │  / commands │ @ paths │ ! shell │ Shift+Tab plan
+        N │
+row 12  L │   Bare │ mockprov/mock-alpha
+        N │
+
02-composer-typed — 4.69% pixels differ + +
legacy
+
term2-next
+
diff
+
9 text row(s) differ
row  0  L │Profile: bare
+        N │Profile: BARE
+row  2  L │  ▌ term²  BARE  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
+        N │▌ term²  BARE  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
+row  3  L │    mockprov/mock-alpha (default)
+        N │  mockprov/mock-alpha (default)
+row  5  L │
+        N │────────────────────────────────────────────────────────────────────────────────
+row  6  L │
+        N │❯ show markdown please 
+row  7  L │
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history
+row  8  L │  ────────────────────────────────────────────────────────────────────────────
+        N │
+row  9  L │  ❯ show markdown please 
+        N │ Bare │ mockprov/mock-alpha
+row 11  L │   Bare │ mockprov/mock-alpha
+        N │
+
03-turn-markdown — 11.91% pixels differ + +
legacy
+
term2-next
+
diff
+
19 text row(s) differ
row  0  L │
+        N │▌ term²  BARE  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
+row  1  L │
+        N │  mockprov/mock-alpha (default)
+row  2  L │   ❯ show markdown please 
+        N │
+row  4  L │  ## Plan
+        N │ ❯ show markdown please 
+row  6  L │  • Read notes.txt
+        N │  ## Plan
+row  7  L │  • Summarise it
+        N │
+row  8  L │
+        N │  • Read notes.txt
+row  9  L │  ╭──────────────────────────────────────────────────────────────────────────╮
+        N │  • Summarise it
+row 10  L │  │ export function main() {                                                 │
+        N │
+row 11  L │  │   return 42;                                                             │
+        N │  ╭──────────────────────────────────────────────────────────────────────────╮
+row 12  L │  │ }                                                                        │
+        N │  │ export function main() {                                                 │
+row 13  L │  ╰──────────────────────────────────────────────────────────────────────────╯
+        N │  │   return 42;                                                             │
+row 14  L │
+        N │  │ }                                                                        │
+row 15  L │  That is all.
+        N │  ╰──────────────────────────────────────────────────────────────────────────╯
+row 17  L │
+        N │  That is all.
+row 18  L │  ────────────────────────────────────────────────────────────────────────────
+        N │────────────────────────────────────────────────────────────────────────────────
+row 19  L │  ❯  
+        N │❯  
+row 20  L │  / commands │ @ paths │ ! shell │ Shift+Tab plan
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history
+row 22  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │ Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · 0% cached · Ctx last 1k
+
04-turn-tool-call — 12.95% pixels differ + +
legacy
+
term2-next
+
diff
+
19 text row(s) differ
row  0  L │  ╭──────────────────────────────────────────────────────────────────────────╮
+        N │  ## Plan
+row  1  L │  │ export function main() {                                                 │
+        N │
+row  2  L │  │   return 42;                                                             │
+        N │  • Read notes.txt
+row  3  L │  │ }                                                                        │
+        N │  • Summarise it
+row  4  L │  ╰──────────────────────────────────────────────────────────────────────────╯
+        N │
+row  5  L │
+        N │  ╭──────────────────────────────────────────────────────────────────────────╮
+row  6  L │  That is all.
+        N │  │ export function main() {                                                 │
+row  7  L │
+        N │  │   return 42;                                                             │
+row  8  L │
+        N │  │ }                                                                        │
+row  9  L │   ❯ list the files please 
+        N │  ╰──────────────────────────────────────────────────────────────────────────╯
+row 11  L │  ✓ ls (▒▒▒▒)
+        N │  That is all.
+row 13  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │ ❯ list the files please 
+row 15  L │
+        N │  ✓ Shell command (▒▒▒▒)
+row 16  L │  ────────────────────────────────────────────────────────────────────────────
+        N │
+row 17  L │  ❯  
+        N │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+row 18  L │  / commands │ @ paths │ ! shell │ Shift+Tab plan
+        N │────────────────────────────────────────────────────────────────────────────────
+row 19  L │
+        N │❯  
+row 20  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history
+row 22  L │
+        N │ Bare │ mockprov/mock-alpha │ ↑3.6k ↓240 · 0% cached · Ctx last 1k
+
05-approval-prompt — 11.93% pixels differ + +
legacy
+
term2-next
+
diff
+
23 text row(s) differ
row  0  L │   ❯ create a file please 
+        N │    touch created-by-walk.txt
+row  2  L │
+        N │Running tools · ▒▒
+row  3  L │
+        N │╭──────────────────────────────────────────────────────────────────────────────╮
+row  4  L │  ────────────────────────────────────────────────────────────────────────────
+        N ││ Allow this action?                                                           │
+row  5  L │  Agent wants to run: shell
+        N ││ shell (this call only)                                                       │
+row  6  L │
+        N ││ Owner: turn-3                                                                │
+row  7  L │    touch created-by-walk.txt
+        N ││ {"command":"touch                                                            │
+row  8  L │
+        N ││ created-by-walk.txt","sandbox":"default","background":false}                 │
+row  9  L │  Allow this action?
+        N ││ {                                                                            │
+row 10  L │
+        N ││   "command": "touch created-by-walk.txt",                                    │
+row 11  L │  ❯ 1. Allow once
+        N ││   "sandbox": "default",                                                      │
+row 12  L │    2. Deny
+        N ││   "background": false                                                        │
+row 13  L │
+        N ││ }                                                                            │
+row 14  L │  Allow once
+        N ││ ❯ 1. Allow once                                                              │
+row 15  L │
+        N ││   2. Deny                                                                    │
+row 16  L │  Allow this tool call.
+        N ││   3. Deny without reason                                                     │
+row 17  L │
+        N ││ Ctrl+G return to composer                                                    │
+row 18  L │   ↑↓ navigate │ 1 allow once │ y/n answer │ ⏎ select │ Esc interrupts the 
+        N ││ y allow once · n deny · ↑/↓ select · Enter choose · Esc cancel               │
+row 19  L │   turn
+        N │╰──────────────────────────────────────────────────────────────────────────────╯
+row 20  L │
+        N │────────────────────────────────────────────────────────────────────────────────
+row 21  L │
+        N │❯  
+row 22  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+row 23  L │
+        N │ Bare │ mockprov/mock-alpha │ ↑4.8k ↓320 · 0% cached · Ctx last 1k
+
06-approval-approved — 14.26% pixels differ + +
legacy
+
term2-next
+
diff
+
19 text row(s) differ
row  0  L │   ❯ create a file please 
+        N │  ╭──────────────────────────────────────────────────────────────────────────╮
+row  1  L │
+        N │  │ export function main() {                                                 │
+row  2  L │  ✓ touch created-by-walk.txt (▒▒▒)
+        N │  │   return 42;                                                             │
+row  3  L │
+        N │  │ }                                                                        │
+row  4  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │  ╰──────────────────────────────────────────────────────────────────────────╯
+row  6  L │
+        N │  That is all.
+row  7  L │  ────────────────────────────────────────────────────────────────────────────
+        N │
+row  8  L │  ❯  
+        N │ ❯ list the files please 
+row  9  L │  / commands │ @ paths │ ! shell │ Shift+Tab plan
+        N │
+row 10  L │
+        N │  ✓ Shell command (▒▒▒▒)
+row 11  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+row 12  L │
+        N │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+row 14  L │
+        N │ ❯ create a file please 
+row 16  L │
+        N │  ✓ Shell command (▒▒▒)
+row 18  L │
+        N │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+row 19  L │
+        N │────────────────────────────────────────────────────────────────────────────────
+row 20  L │
+        N │❯  
+row 21  L │
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history
+row 23  L │
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+
07-slash-menu — 20.31% pixels differ + +
legacy
+
term2-next
+
diff
+
24 text row(s) differ
row  0  L │  Filter: 
+        N │  ✓ Shell command (▒▒▒)
+row  1  L │  ╭──────────────────────────────────────────────────────────────────────────╮
+        N │
+row  2  L │  │ Commands                                                                 │
+        N │╭──────────────────────────────────────────────────────────────────────────────╮
+row  3  L │  │ ❯ /model        - Choose or set the AI model (Ctrl+O; use /model       ┃ │
+        N ││ Commands                                                                     │
+row  4  L │  │                   <model-id>)                                          ┃ │
+        N ││ › /help           Show commands and keyboard shortcuts                       │
+row  5  L │  │   /effort       - Choose the model reasoning effort (Ctrl+T)           ┃ │
+        N ││   /providers      List configured providers and their status                 │
+row  6  L │  │   /clear        - Start a new conversation                             ┃ │
+        N ││   /model          Choose or set the model (/model <provider>/<model>)        │
+row  7  L │  │   /goal         - Inspect or update the durable session goal; /clear   ┃ │
+        N ││   /effort         Set the reasoning effort                                   │
+row  8  L │  │                   retains it                                           │ │
+        N ││   /profile        Switch the active profile                                  │
+row  9  L │  │   /copy         - Copy an assistant response (latest by default; use   │ │
+        N ││   /settings       Show or change settings                                    │
+row 10  L │  │                   /copy N to count backward)                           │ │
+        N ││   /auto-approve   Set tool auto-approval (off, advisory, auto, always)       │
+row 11  L │  │   /usage        - Show token usage for the current session             │ │
+        N ││   /sandbox        Toggle shell sandboxing (preference only here)             │
+row 12  L │  │   /resume       - Browse saved conversations or resume one by ID       │ │
+        N ││   /resume         List saved conversations or resume one by ID               │
+row 13  L │  │   /rewind       - Rewind to a user turn and put it back in the input   │ │
+        N ││   /clear          Start a new conversation                                   │
+row 14  L │  │                   box                                                  │ │
+        N ││                                                                              │
+row 15  L │  │   /undo         - Choose a user turn to remove and return to the input │ │
+        N ││ ──────────────────────────────────────────────────────────────────────────── │
+row 16  L │  │                   (same options as /rewind)                            │ │
+        N ││ ↑/↓ select · Enter run · Tab complete · Esc dismiss                          │
+row 17  L │  │   /retry        - Resend the last user turn, or choose a turn to resend│ │
+        N │╰──────────────────────────────────────────────────────────────────────────────╯
+row 18  L │  │                                                                          │
+        N │────────────────────────────────────────────────────────────────────────────────
+row 19  L │  │ ──────────────────────────────────────────────────────────────────────── │
+        N │❯ / 
+row 20  L │  │ ↑↓ navigate │ ⏎ run │ Tab complete │ Esc cancel                          │
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history
+row 21  L │  ╰──────────────────────────────────────────────────────────────────────────╯
+        N │
+row 22  L │
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+row 23  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
08-slash-menu-closed — 10.92% pixels differ + +
legacy
+
term2-next
+
diff
+
15 text row(s) differ
row  0  L │  ╰──────────────────────────────────────────────────────────────────────────╯
+        N │  ✓ Shell command (▒▒▒)
+row  2  L │  That is all.
+        N │────────────────────────────────────────────────────────────────────────────────
+row  3  L │
+        N │❯  
+row  4  L │
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history
+row  5  L │   ❯ list the files please 
+        N │
+row  6  L │
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+row  7  L │  ✓ ls (▒▒▒▒)
+        N │
+row  9  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │
+row 12  L │   ❯ create a file please 
+        N │
+row 14  L │  ✓ touch created-by-walk.txt (▒▒▒)
+        N │
+row 16  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │
+row 19  L │  ────────────────────────────────────────────────────────────────────────────
+        N │
+row 20  L │  ❯  
+        N │
+row 21  L │  / commands │ @ paths │ ! shell │ Shift+Tab plan
+        N │
+row 23  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
09-path-menu — 11.26% pixels differ + +
legacy
+
term2-next
+
diff
+
21 text row(s) differ
row  0  L │
+        N │  ✓ Shell command (▒▒▒)
+row  1  L │  ✓ ls (▒▒▒▒)
+        N │
+row  2  L │
+        N │› created-by-walk.txt
+row  3  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │  notes.txt
+row  4  L │
+        N │  README.md
+row  5  L │
+        N │  src/
+row  6  L │   ❯ create a file please 
+        N │  src/main.js
+row  7  L │
+        N │↑/↓ select · Enter insert · Tab insert without space · Esc dismiss
+row  8  L │
+        N │────────────────────────────────────────────────────────────────────────────────
+row  9  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │❯ @ 
+row 10  L │
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history
+row 12  L │  ────────────────────────────────────────────────────────────────────────────
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+row 13  L │  Filter: 
+        N │
+row 14  L │  ╭──────────────────────────────────────────────────────────────────────────╮
+        N │
+row 15  L │  │ ❯ src/                                                                   │
+        N │
+row 16  L │  │   notes.txt                                                              │
+        N │
+row 17  L │  │   README.md                                                              │
+        N │
+row 18  L │  │   src/main.js                                                            │
+        N │
+row 19  L │  ╰──────────────────────────────────────────────────────────────────────────╯
+        N │
+row 20  L │  ↑↓ navigate │ ⏎ insert │ Tab insert w/o space │ Esc cancel
+        N │
+row 22  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
10-path-menu-closed — 7.89% pixels differ + +
legacy
+
term2-next
+
diff
+
11 text row(s) differ
row  0  L │
+        N │  ✓ Shell command (▒▒▒)
+row  1  L │  ✓ ls (▒▒▒▒)
+        N │
+row  2  L │
+        N │────────────────────────────────────────────────────────────────────────────────
+row  3  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │❯  
+row  4  L │
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history
+row  6  L │   ❯ create a file please 
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+row  9  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │
+row 12  L │  ────────────────────────────────────────────────────────────────────────────
+        N │
+row 13  L │  ❯  
+        N │
+row 14  L │  / commands │ @ paths │ ! shell │ Shift+Tab plan
+        N │
+row 16  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
11-menu-model — 13.52% pixels differ + +
legacy
+
term2-next
+
diff
+
21 text row(s) differ
row  0  L │  ✓ ls (▒▒▒▒)
+        N │  ✓ Shell command (▒▒▒)
+row  2  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │╭──────────────────────────────────────────────────────────────────────────────╮
+row  3  L │
+        N ││ Choose a model                                                               │
+row  4  L │
+        N ││  Favorites  │  Nicknames  │  All                                             │
+row  5  L │   ❯ create a file please 
+        N ││ Filter: type to filter                                                       │
+row  6  L │
+        N ││ No matching models.                                                          │
+row  7  L │
+        N ││ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel     │
+row  8  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │╰──────────────────────────────────────────────────────────────────────────────╯
+row  9  L │
+        N │────────────────────────────────────────────────────────────────────────────────
+row 10  L │
+        N │❯  
+row 11  L │  ────────────────────────────────────────────────────────────────────────────
+        N │
+row 12  L │  Filter: 
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+row 13  L │   Favorites  │  Nicknames  │  All 
+        N │
+row 14  L │  ╭──────────────────────────────────────────────────────────────────────────╮
+        N │
+row 15  L │  │ Select model                                                             │
+        N │
+row 16  L │  │ mockprov │ ❯ mock-alpha (current)                                        │
+        N │
+row 17  L │  │          │   mock-beta                                                   │
+        N │
+row 18  L │  ╰──────────────────────────────────────────────────────────────────────────╯
+        N │
+row 19  L │  ↑↓ navigate │ ⏎ select │ Tab/←→ tab │ ctrl+n nickname │ ctrl+f favorite │ 
+        N │
+row 20  L │  ctrl+r refresh model list │ Esc cancel
+        N │
+row 22  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
12-menu-model-arrow — 13.52% pixels differ + +
legacy
+
term2-next
+
diff
+
21 text row(s) differ
row  0  L │  ✓ ls (▒▒▒▒)
+        N │  ✓ Shell command (▒▒▒)
+row  2  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │╭──────────────────────────────────────────────────────────────────────────────╮
+row  3  L │
+        N ││ Choose a model                                                               │
+row  4  L │
+        N ││  Favorites  │  Nicknames  │  All                                             │
+row  5  L │   ❯ create a file please 
+        N ││ Filter: type to filter                                                       │
+row  6  L │
+        N ││ No matching models.                                                          │
+row  7  L │
+        N ││ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel     │
+row  8  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │╰──────────────────────────────────────────────────────────────────────────────╯
+row  9  L │
+        N │────────────────────────────────────────────────────────────────────────────────
+row 10  L │
+        N │❯  
+row 11  L │  ────────────────────────────────────────────────────────────────────────────
+        N │
+row 12  L │  Filter: 
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+row 13  L │   Favorites  │  Nicknames  │  All 
+        N │
+row 14  L │  ╭──────────────────────────────────────────────────────────────────────────╮
+        N │
+row 15  L │  │ Select model                                                             │
+        N │
+row 16  L │  │ mockprov │   mock-alpha (current)                                        │
+        N │
+row 17  L │  │          │ ❯ mock-beta                                                   │
+        N │
+row 18  L │  ╰──────────────────────────────────────────────────────────────────────────╯
+        N │
+row 19  L │  ↑↓ navigate │ ⏎ select │ Tab/←→ tab │ ctrl+n nickname │ ctrl+f favorite │ 
+        N │
+row 20  L │  ctrl+r refresh model list │ Esc cancel
+        N │
+row 22  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
13-menu-model-closed — 7.97% pixels differ + +
legacy
+
term2-next
+
diff
+
11 text row(s) differ
row  0  L │  ✓ ls (▒▒▒▒)
+        N │  ✓ Shell command (▒▒▒)
+row  2  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │────────────────────────────────────────────────────────────────────────────────
+row  3  L │
+        N │❯  
+row  4  L │
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history
+row  5  L │   ❯ create a file please 
+        N │
+row  6  L │
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+row  8  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │
+row 11  L │  ────────────────────────────────────────────────────────────────────────────
+        N │
+row 12  L │  ❯  
+        N │
+row 13  L │  / commands │ @ paths │ ! shell │ Shift+Tab plan
+        N │
+row 15  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
14-menu-settings — 19.07% pixels differ + +
legacy
+
term2-next
+
diff
+
23 text row(s) differ
row  0  L │  Filter: 
+        N │  ✓ Shell command (▒▒▒)
+row  1  L │   Models  │  Providers  │  Context  │  Safety  │  Tools  │  UI  │  Hooks 
+        N │
+row  2  L │  ╭──────────────────────────────────────────────────────────────────────────╮
+        N │╭──────────────────────────────────────────────────────────────────────────────╮
+row  3  L │  │ ❯ Model                      ● mockprov/mock-alpha                     ┃ │
+        N ││ Settings · [Models]  Providers  Context  Safety  Tools  UI  Hooks            │
+row  4  L │  │   Verifier model               (unset)                                 ┃ │
+        N ││ Search: (type to search all categories)                                      │
+row  5  L │  │   Reasoning effort             default                                 ┃ │
+        N ││ ❯ Model · agent.modelSelection: mockprov/mock-alpha                          │
+row  6  L │  │   Temperature                  (unset)                                 ┃ │
+        N ││   Verifier model · verifier.model:                                           │
+row  7  L │  │   Favorite models              (none)                                  ┃ │
+        N ││   Reasoning effort · agent.reasoningEffort: default                          │
+row  8  L │  │   Model nicknames              (none)                                  ┃ │
+        N ││   Temperature · agent.temperature: unset                                     │
+row  9  L │  │   Smart model                  (inherits agent.modelSelection)         │ │
+        N ││   Favorite models · agent.favoriteModels: [0 entries]                        │
+row 10  L │  │   Smart reasoning effort       (default)                               │ │
+        N ││   Model nicknames · agent.modelNicknames: [configured]                       │
+row 11  L │  │   Balanced model               (inherits agent.modelSelection)         │ │
+        N ││   Smart model · agent.smartModel: unset                                      │
+row 12  L │  │   Balanced reasoning effort    (default)                               │ │
+        N ││ Bound provider and model selection for the main agent                        │
+row 13  L │  │                                                                          │
+        N ││ Current: mockprov/mock-alpha · Default: openai/gpt-5.1                       │
+row 14  L │  │ ──────────────────────────────────────────────────────────────────────── │
+        N ││ Use /model <provider>/<model>.                                               │
+row 15  L │  │ Model · agent.modelSelection                                             │
+        N ││ Type search · Tab category · ↑/↓ select · Enter edit · Esc close             │
+row 16  L │  │                                                                          │
+        N │╰──────────────────────────────────────────────────────────────────────────────╯
+row 17  L │  │ Bound provider and model selection for the main agent                    │
+        N │────────────────────────────────────────────────────────────────────────────────
+row 18  L │  │ default: openai/gpt-5.1                                                  │
+        N │❯  
+row 19  L │  │                                                                          │
+        N │
+row 20  L │  │ type search │ ↑↓ move │ Tab section │ ⏎ edit │ Esc close │ ● changed     │
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+row 21  L │  ╰──────────────────────────────────────────────────────────────────────────╯
+        N │
+row 23  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
15-menu-settings-arrow — 19.89% pixels differ + +
legacy
+
term2-next
+
diff
+
23 text row(s) differ
row  0  L │  ────────────────────────────────────────────────────────────────────────────
+        N │  ✓ Shell command (▒▒▒)
+row  1  L │  Filter: 
+        N │
+row  2  L │   Models  │  Providers  │  Context  │  Safety  │  Tools  │  UI  │  Hooks 
+        N │╭──────────────────────────────────────────────────────────────────────────────╮
+row  3  L │  ╭──────────────────────────────────────────────────────────────────────────╮
+        N ││ Settings · [Models]  Providers  Context  Safety  Tools  UI  Hooks            │
+row  4  L │  │   Model                      ● mockprov/mock-alpha                     ┃ │
+        N ││ Search: (type to search all categories)                                      │
+row  5  L │  │ ❯ Verifier model               (unset)                                 ┃ │
+        N ││ ❯ Verifier model · verifier.model:                                           │
+row  6  L │  │   Reasoning effort             default                                 ┃ │
+        N ││   Reasoning effort · agent.reasoningEffort: default                          │
+row  7  L │  │   Temperature                  (unset)                                 ┃ │
+        N ││   Temperature · agent.temperature: unset                                     │
+row  8  L │  │   Favorite models              (none)                                  ┃ │
+        N ││   Favorite models · agent.favoriteModels: [0 entries]                        │
+row  9  L │  │   Model nicknames              (none)                                  ┃ │
+        N ││   Model nicknames · agent.modelNicknames: [configured]                       │
+row 10  L │  │   Smart model                  (inherits agent.modelSelection)         │ │
+        N ││   Smart model · agent.smartModel: unset                                      │
+row 11  L │  │   Smart reasoning effort       (default)                               │ │
+        N ││   Smart reasoning effort · agent.smartReasoningEffort: default               │
+row 12  L │  │   Balanced model               (inherits agent.modelSelection)         │ │
+        N ││ Independent verifier model ID; empty uses the session model and provider     │
+row 13  L │  │   Balanced reasoning effort    (default)                               │ │
+        N ││ Current:  · Default:                                                         │
+row 14  L │  │                                                                          │
+        N ││ Type search · Tab category · ↑/↓ select · Enter edit · Esc close             │
+row 15  L │  │ ──────────────────────────────────────────────────────────────────────── │
+        N │╰──────────────────────────────────────────────────────────────────────────────╯
+row 16  L │  │ Verifier model · verifier.model                                          │
+        N │────────────────────────────────────────────────────────────────────────────────
+row 17  L │  │                                                                          │
+        N │❯  
+row 18  L │  │ Independent verifier model ID; empty uses the session model and provider │
+        N │
+row 19  L │  │                                                                          │
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+row 20  L │  │ type search │ ↑↓ move │ Tab section │ ⏎ edit │ Esc close │ ● changed     │
+        N │
+row 21  L │  ╰──────────────────────────────────────────────────────────────────────────╯
+        N │
+row 23  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
16-menu-settings-closed — 10.92% pixels differ + +
legacy
+
term2-next
+
diff
+
15 text row(s) differ
row  0  L │  ╰──────────────────────────────────────────────────────────────────────────╯
+        N │  ✓ Shell command (▒▒▒)
+row  2  L │  That is all.
+        N │────────────────────────────────────────────────────────────────────────────────
+row  3  L │
+        N │❯  
+row  4  L │
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history
+row  5  L │   ❯ list the files please 
+        N │
+row  6  L │
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+row  7  L │  ✓ ls (▒▒▒▒)
+        N │
+row  9  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │
+row 12  L │   ❯ create a file please 
+        N │
+row 14  L │  ✓ touch created-by-walk.txt (▒▒▒)
+        N │
+row 16  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │
+row 19  L │  ────────────────────────────────────────────────────────────────────────────
+        N │
+row 20  L │  ❯  
+        N │
+row 21  L │  / commands │ @ paths │ ! shell │ Shift+Tab plan
+        N │
+row 23  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
17-ctrl-o — 13.86% pixels differ + +
legacy
+
term2-next
+
diff
+
19 text row(s) differ
row  0  L │  ✓ ls (▒▒▒▒)
+        N │  ✓ Shell command (▒▒▒)
+row  2  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │
+row  3  L │
+        N │ ❯ create a file please 
+row  5  L │   ❯ create a file please 
+        N │  ✓ Shell command (▒▒▒)
+row  6  L │
+        N │    exit 0
+row  7  L │
+        N │    Runtime: ▒▒▒
+row  8  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │    (No output)
+row  9  L │
+        N │    touch created-by-walk.txt
+row 11  L │  ────────────────────────────────────────────────────────────────────────────
+        N │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+row 12  L │  Filter: 
+        N │
+row 13  L │   Favorites  │  Nicknames  │  All 
+        N │Lines 28–38 of 38 · PgUp/PgDn or Ctrl+↑/↓
+row 14  L │  ╭──────────────────────────────────────────────────────────────────────────╮
+        N │────────────────────────────────────────────────────────────────────────────────
+row 15  L │  │ Select model                                                             │
+        N │❯  
+row 16  L │  │ mockprov │ ❯ mock-alpha (current)                                        │
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history
+row 17  L │  │          │   mock-beta                                                   │
+        N │
+row 18  L │  ╰──────────────────────────────────────────────────────────────────────────╯
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+row 19  L │  ↑↓ navigate │ ⏎ select │ Tab/←→ tab │ ctrl+n nickname │ ctrl+f favorite │ 
+        N │
+row 20  L │  ctrl+r refresh model list │ Esc cancel
+        N │
+row 22  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
18-ctrl-o-closed — 7.97% pixels differ + +
legacy
+
term2-next
+
diff
+
11 text row(s) differ
row  0  L │  ✓ ls (▒▒▒▒)
+        N │  ✓ Shell command (▒▒▒)
+row  2  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │────────────────────────────────────────────────────────────────────────────────
+row  3  L │
+        N │❯  
+row  4  L │
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history
+row  5  L │   ❯ create a file please 
+        N │
+row  6  L │
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+row  8  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │
+row 11  L │  ────────────────────────────────────────────────────────────────────────────
+        N │
+row 12  L │  ❯  
+        N │
+row 13  L │  / commands │ @ paths │ ! shell │ Shift+Tab plan
+        N │
+row 15  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
19-shift-tab — 12.61% pixels differ + +
legacy
+
term2-next
+
diff
+
20 text row(s) differ
row  0  L │  ✓ ls (▒▒▒▒)
+        N │  ✓ Shell command (▒▒▒)
+row  2  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │╭──────────────────────────────────────────────────────────────────────────────╮
+row  3  L │
+        N ││ ⚠ Switching modes requires clearing the current session.                     │
+row  4  L │
+        N ││ Clear session and switch mode?                                               │
+row  5  L │   ❯ create a file please 
+        N ││   Yes                                                                        │
+row  6  L │
+        N ││ › No                                                                         │
+row  7  L │
+        N ││ ↑/↓ select · Enter choose · y/n answer · Esc cancel                          │
+row  8  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │╰──────────────────────────────────────────────────────────────────────────────╯
+row  9  L │
+        N │────────────────────────────────────────────────────────────────────────────────
+row 10  L │
+        N │❯  
+row 11  L │  ────────────────────────────────────────────────────────────────────────────
+        N │
+row 12  L │  ╭──────────────────────────────────────────────────────────────────────────╮
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+row 13  L │  │ ▲ Switching to Plan mode requires clearing the current session.          │
+        N │
+row 14  L │  │ Clear session and switch to Plan mode?                                   │
+        N │
+row 15  L │  │                                                                          │
+        N │
+row 16  L │  │   Yes                                                                    │
+        N │
+row 17  L │  │ ❯ No                                                                     │
+        N │
+row 18  L │  │ ↑↓ navigate │ ⏎ select │ y/n answer │ Esc cancel                         │
+        N │
+row 19  L │  ╰──────────────────────────────────────────────────────────────────────────╯
+        N │
+row 21  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
20-shift-tab-restored — 7.97% pixels differ + +
legacy
+
term2-next
+
diff
+
11 text row(s) differ
row  0  L │  ✓ ls (▒▒▒▒)
+        N │  ✓ Shell command (▒▒▒)
+row  2  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │────────────────────────────────────────────────────────────────────────────────
+row  3  L │
+        N │❯  
+row  4  L │
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history
+row  5  L │   ❯ create a file please 
+        N │
+row  6  L │
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+row  8  L │  Done. The command finished; the workspace has README.md, notes.txt and src/.
+        N │
+row 11  L │  ────────────────────────────────────────────────────────────────────────────
+        N │
+row 12  L │  ❯  
+        N │
+row 13  L │  / commands │ @ paths │ ! shell │ Shift+Tab plan
+        N │
+row 15  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
21-help — 21.53% pixels differ + +
legacy
+
term2-next
+
diff
+
24 text row(s) differ
row  0  L │  /settings — View or modify settings
+        N │/answer — Answer a pending approval or question
+row  1  L │  /sandbox — Toggle shell sandboxing; disabling it gives shell commands 
+        N │/bridge — Attach or detach this session's control socket
+row  2  L │  unrestricted access
+        N │/restart — Reload this executable (/restart stop also stops background work)
+row  3  L │  /mcp — Show configured MCP servers and their connection state
+        N │/quit — Exit the application
+row  4  L │  /mcp-login — Authenticate with an OAuth-protected MCP server
+        N │/exit — Exit the application
+row  5  L │  /bridge — Attach or detach this local session for Discord bridge input
+        N │/command-status — Show the outcome of a command by ID
+row  6  L │  /providers — Manage API providers (list, add, edit, delete)
+        N │/command-apply — Apply a finished command result by ID
+row  7  L │  /skills — Activate a skill for the next request
+        N │/mcp — Show configured MCP servers and their state
+row  8  L │  /restart — Reload the built CLI in place; /restart stop consents to stopping
+        N │/mcp-login — Authenticate with an OAuth-protected MCP server
+row  9  L │   background work
+        N │/plan — Toggle the plan profile
+row 10  L │  /quit — Exit the application
+        N │/bare — Switch to the bare profile
+row 11  L │  /help — Show commands and keyboard shortcuts
+        N │/mentor — Toggle the mentor profile
+row 12  L │
+        N │/orchestrator — Toggle the orchestrator profile
+row 13  L │  Keyboard shortcuts
+        N │Keyboard shortcuts
+row 14  L │  Ctrl+C: clear draft or interrupt; press again to exit
+        N │Enter send/steer · Alt+Enter follow-up · ↑/↓ history · PgUp/PgDn scroll · Ctrl+O
+row 15  L │  Ctrl+O: choose model · Ctrl+T: choose reasoning effort
+        N │ tool output · Ctrl+T reasoning effort
+row 16  L │  Shift+Tab: switch Standard/Plan · @: complete paths · !: shell
+        N │Ctrl+G approvals/tasks · Ctrl+B budget · Ctrl+C stop turn / clear input / exit
+row 17  L │
+        N │Shift+Tab plan mode
+row 18  L │
+        N │────────────────────────────────────────────────────────────────────────────────
+row 19  L │  ────────────────────────────────────────────────────────────────────────────
+        N │❯  
+row 20  L │  ❯  
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history
+row 21  L │  / commands │ @ paths │ ! shell │ Shift+Tab plan
+        N │
+row 22  L │
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+row 23  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
22-help-closed — 21.53% pixels differ + +
legacy
+
term2-next
+
diff
+
24 text row(s) differ
row  0  L │  /settings — View or modify settings
+        N │/answer — Answer a pending approval or question
+row  1  L │  /sandbox — Toggle shell sandboxing; disabling it gives shell commands 
+        N │/bridge — Attach or detach this session's control socket
+row  2  L │  unrestricted access
+        N │/restart — Reload this executable (/restart stop also stops background work)
+row  3  L │  /mcp — Show configured MCP servers and their connection state
+        N │/quit — Exit the application
+row  4  L │  /mcp-login — Authenticate with an OAuth-protected MCP server
+        N │/exit — Exit the application
+row  5  L │  /bridge — Attach or detach this local session for Discord bridge input
+        N │/command-status — Show the outcome of a command by ID
+row  6  L │  /providers — Manage API providers (list, add, edit, delete)
+        N │/command-apply — Apply a finished command result by ID
+row  7  L │  /skills — Activate a skill for the next request
+        N │/mcp — Show configured MCP servers and their state
+row  8  L │  /restart — Reload the built CLI in place; /restart stop consents to stopping
+        N │/mcp-login — Authenticate with an OAuth-protected MCP server
+row  9  L │   background work
+        N │/plan — Toggle the plan profile
+row 10  L │  /quit — Exit the application
+        N │/bare — Switch to the bare profile
+row 11  L │  /help — Show commands and keyboard shortcuts
+        N │/mentor — Toggle the mentor profile
+row 12  L │
+        N │/orchestrator — Toggle the orchestrator profile
+row 13  L │  Keyboard shortcuts
+        N │Keyboard shortcuts
+row 14  L │  Ctrl+C: clear draft or interrupt; press again to exit
+        N │Enter send/steer · Alt+Enter follow-up · ↑/↓ history · PgUp/PgDn scroll · Ctrl+O
+row 15  L │  Ctrl+O: choose model · Ctrl+T: choose reasoning effort
+        N │ tool output · Ctrl+T reasoning effort
+row 16  L │  Shift+Tab: switch Standard/Plan · @: complete paths · !: shell
+        N │Ctrl+G approvals/tasks · Ctrl+B budget · Ctrl+C stop turn / clear input / exit
+row 17  L │
+        N │Shift+Tab plan mode
+row 18  L │
+        N │────────────────────────────────────────────────────────────────────────────────
+row 19  L │  ────────────────────────────────────────────────────────────────────────────
+        N │❯  
+row 20  L │  ❯  
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history
+row 21  L │  / commands │ @ paths │ ! shell │ Shift+Tab plan
+        N │
+row 22  L │
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+row 23  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
23-resume-list — 20.34% pixels differ + · next: no matching screen within 5000 ms +
legacy
+
term2-next
+
diff
+
23 text row(s) differ
row  0  L │
+        N │/mcp-login — Authenticate with an OAuth-protected MCP server
+row  1  L │  Keyboard shortcuts
+        N │/plan — Toggle the plan profile
+row  2  L │  Ctrl+C: clear draft or interrupt; press again to exit
+        N │/bare — Switch to the bare profile
+row  3  L │  Ctrl+O: choose model · Ctrl+T: choose reasoning effort
+        N │/mentor — Toggle the mentor profile
+row  4  L │  Shift+Tab: switch Standard/Plan · @: complete paths · !: shell
+        N │/orchestrator — Toggle the orchestrator profile
+row  5  L │
+        N │Keyboard shortcuts
+row  6  L │
+        N │Enter send/steer · Alt+Enter follow-up · ↑/↓ history · PgUp/PgDn scroll · Ctrl+O
+row  7  L │  ────────────────────────────────────────────────────────────────────────────
+        N │ tool output · Ctrl+T reasoning effort
+row  8  L │  ╭──────────────────────────────────────────────────────────────────────────╮
+        N │Ctrl+G approvals/tasks · Ctrl+B budget · Ctrl+C stop turn / clear input / exit
+row  9  L │  │ Resume Conversation                                                      │
+        N │Shift+Tab plan mode
+row 10  L │  │ ❯ show markdown please · 13 secon… │  4257dac3-3ee2-4b4f-b172-30560cc9ae │
+        N │╭──────────────────────────────────────────────────────────────────────────────╮
+row 11  L │  │   ping idle 0 · ▒▒▒▒▒▒▒▒▒▒▒▒▒▒ · … │  73                                 │
+        N ││ Resume Conversation                                                          │
+row 12  L │  │   RT-PROMPT please read the small… │  Updated: 2026-11-04 07:05:47       │
+        N ││ Loading conversations…                                                       │
+row 13  L │  │   RT-PROMPT please read the small… │  Local • 6 msgs • mock-alpha •      │
+        N ││ ↑/↓ select · Enter resume · Esc cancel                                       │
+row 14  L │  │   RT-PROMPT one more question · 5… │  mode: bare                         │
+        N │╰──────────────────────────────────────────────────────────────────────────────╯
+row 15  L │  │   RT-PROMPT one more question · 5… │                                     │
+        N │────────────────────────────────────────────────────────────────────────────────
+row 16  L │  │   RT-PROMPT one more question · 5… │  Initial Prompt:                    │
+        N │❯  
+row 17  L │  │   RT-PROMPT please read the large… │  "show markdown please"             │
+        N │
+row 18  L │  │   RT-PROMPT please read the small… │                                     │
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+row 19  L │  │   RT-PROMPT please read the small… │                                     │
+        N │
+row 20  L │  ╰──────────────────────────────────────────────────────────────────────────╯
+        N │
+row 21  L │  ↑↓ navigate │ ⏎ resume │ Esc cancel
+        N │
+row 23  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
24-resume-preview — 20.19% pixels differ + · next: no matching screen within 5000 ms +
legacy
+
term2-next
+
diff
+
23 text row(s) differ
row  0  L │
+        N │/mcp-login — Authenticate with an OAuth-protected MCP server
+row  1  L │  Keyboard shortcuts
+        N │/plan — Toggle the plan profile
+row  2  L │  Ctrl+C: clear draft or interrupt; press again to exit
+        N │/bare — Switch to the bare profile
+row  3  L │  Ctrl+O: choose model · Ctrl+T: choose reasoning effort
+        N │/mentor — Toggle the mentor profile
+row  4  L │  Shift+Tab: switch Standard/Plan · @: complete paths · !: shell
+        N │/orchestrator — Toggle the orchestrator profile
+row  5  L │
+        N │Keyboard shortcuts
+row  6  L │
+        N │Enter send/steer · Alt+Enter follow-up · ↑/↓ history · PgUp/PgDn scroll · Ctrl+O
+row  7  L │  ────────────────────────────────────────────────────────────────────────────
+        N │ tool output · Ctrl+T reasoning effort
+row  8  L │  ╭──────────────────────────────────────────────────────────────────────────╮
+        N │Ctrl+G approvals/tasks · Ctrl+B budget · Ctrl+C stop turn / clear input / exit
+row  9  L │  │ Resume Conversation                                                      │
+        N │Shift+Tab plan mode
+row 10  L │  │   show markdown please · 13 secon… │  8328e816-3344-4e5c-a487-2a527c934d │
+        N │╭──────────────────────────────────────────────────────────────────────────────╮
+row 11  L │  │ ❯ ping idle 0 · ▒▒▒▒▒▒▒▒▒▒▒▒▒▒ · … │  ae                                 │
+        N ││ Resume Conversation                                                          │
+row 12  L │  │   RT-PROMPT please read the small… │  Updated: 2026-11-04 07:05:23       │
+        N ││ Loading conversations…                                                       │
+row 13  L │  │   RT-PROMPT please read the small… │  Local • 38 msgs • mock-alpha •     │
+        N ││ ↑/↓ select · Enter resume · Esc cancel                                       │
+row 14  L │  │   RT-PROMPT one more question · 5… │  mode: bare                         │
+        N │╰──────────────────────────────────────────────────────────────────────────────╯
+row 15  L │  │   RT-PROMPT one more question · 5… │                                     │
+        N │────────────────────────────────────────────────────────────────────────────────
+row 16  L │  │   RT-PROMPT one more question · 5… │  Initial Prompt:                    │
+        N │❯  
+row 17  L │  │   RT-PROMPT please read the large… │  "ping idle 0"                      │
+        N │
+row 18  L │  │   RT-PROMPT please read the small… │                                     │
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+row 19  L │  │   RT-PROMPT please read the small… │                                     │
+        N │
+row 20  L │  ╰──────────────────────────────────────────────────────────────────────────╯
+        N │
+row 21  L │  ↑↓ navigate │ ⏎ resume │ Esc cancel
+        N │
+row 23  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
25-resume-closed — 18.86% pixels differ + · next: CLI restarted after this step +
legacy
+
term2-next
+
diff
+
22 text row(s) differ
row  0  L │  /settings — View or modify settings
+        N │/mcp-login — Authenticate with an OAuth-protected MCP server
+row  1  L │  /sandbox — Toggle shell sandboxing; disabling it gives shell commands 
+        N │/plan — Toggle the plan profile
+row  2  L │  unrestricted access
+        N │/bare — Switch to the bare profile
+row  3  L │  /mcp — Show configured MCP servers and their connection state
+        N │/mentor — Toggle the mentor profile
+row  4  L │  /mcp-login — Authenticate with an OAuth-protected MCP server
+        N │/orchestrator — Toggle the orchestrator profile
+row  5  L │  /bridge — Attach or detach this local session for Discord bridge input
+        N │Keyboard shortcuts
+row  6  L │  /providers — Manage API providers (list, add, edit, delete)
+        N │Enter send/steer · Alt+Enter follow-up · ↑/↓ history · PgUp/PgDn scroll · Ctrl+O
+row  7  L │  /skills — Activate a skill for the next request
+        N │ tool output · Ctrl+T reasoning effort
+row  8  L │  /restart — Reload the built CLI in place; /restart stop consents to stopping
+        N │Ctrl+G approvals/tasks · Ctrl+B budget · Ctrl+C stop turn / clear input / exit
+row  9  L │   background work
+        N │Shift+Tab plan mode
+row 10  L │  /quit — Exit the application
+        N │╭──────────────────────────────────────────────────────────────────────────────╮
+row 11  L │  /help — Show commands and keyboard shortcuts
+        N ││ Resume Conversation                                                          │
+row 12  L │
+        N ││ Loading conversations…                                                       │
+row 13  L │  Keyboard shortcuts
+        N ││ ↑/↓ select · Enter resume · Esc cancel                                       │
+row 14  L │  Ctrl+C: clear draft or interrupt; press again to exit
+        N │╰──────────────────────────────────────────────────────────────────────────────╯
+row 15  L │  Ctrl+O: choose model · Ctrl+T: choose reasoning effort
+        N │────────────────────────────────────────────────────────────────────────────────
+row 16  L │  Shift+Tab: switch Standard/Plan · @: complete paths · !: shell
+        N │❯  
+row 18  L │
+        N │ Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k
+row 19  L │  ────────────────────────────────────────────────────────────────────────────
+        N │
+row 20  L │  ❯  
+        N │
+row 21  L │  / commands │ @ paths │ ! shell │ Shift+Tab plan
+        N │
+row 23  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
26-resize — 14.75% pixels differ + +
legacy
+
term2-next
+
diff
+
30 text row(s) differ
row  0  L │  /retry — Resend the last user turn, or choose a turn to resend
+        N │
+row  1  L │  /retry-tool — Retry the last tool call
+        N │▌ term²  BARE  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
+row  2  L │  /retry-turn — Regenerate the latest user turn from its original prompt
+        N │  mockprov/mock-alpha (default)
+row  3  L │  /compact — Compact older conversation turns into a local summary
+        N │
+row  4  L │  /bare — Toggle the Bare profile (minimal prompt)
+        N │────────────────────────────────────────────────────────────────────────────────────────────────────
+row  5  L │  /lite — Toggle the Bare profile (Lite was merged into Bare)
+        N │❯  
+row  6  L │  /mentor — Toggle mentor mode (collaborative mode with mentor model)
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output
+row  7  L │  /orchestrator — Toggle orchestrator mode (delegate all tool-backed work)
+        N │
+row  8  L │  /auto-approve — Set tool auto-approval mode (off, advisory, auto, always)
+        N │ Bare │ mockprov/mock-alpha
+row  9  L │  /plan — Toggle plan mode (read-only research/planning mode)
+        N │
+row 10  L │  /profile — Switch the active profile
+        N │
+row 11  L │  /handoff — Send the last assistant response to another model for review
+        N │
+row 12  L │  /settings — View or modify settings
+        N │
+row 13  L │  /sandbox — Toggle shell sandboxing; disabling it gives shell commands unrestricted access
+        N │
+row 14  L │  /mcp — Show configured MCP servers and their connection state
+        N │
+row 15  L │  /mcp-login — Authenticate with an OAuth-protected MCP server
+        N │
+row 16  L │  /bridge — Attach or detach this local session for Discord bridge input
+        N │
+row 17  L │  /providers — Manage API providers (list, add, edit, delete)
+        N │
+row 18  L │  /skills — Activate a skill for the next request
+        N │
+row 19  L │  /restart — Reload the built CLI in place; /restart stop consents to stopping background work
+        N │
+row 20  L │  /quit — Exit the application
+        N │
+row 21  L │  /help — Show commands and keyboard shortcuts
+        N │
+row 23  L │  Keyboard shortcuts
+        N │
+row 24  L │  Ctrl+C: clear draft or interrupt; press again to exit
+        N │
+row 25  L │  Ctrl+O: choose model · Ctrl+T: choose reasoning effort
+        N │
+row 26  L │  Shift+Tab: switch Standard/Plan · @: complete paths · !: shell
+        N │
+row 29  L │  ────────────────────────────────────────────────────────────────────────────────────────────────
+        N │
+row 30  L │  ❯  
+        N │
+row 31  L │  / commands │ @ paths │ ! shell │ Shift+Tab plan
+        N │
+row 33  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
27-resize-typed — 15.10% pixels differ + +
legacy
+
term2-next
+
diff
+
30 text row(s) differ
row  0  L │  /rewind — Rewind to a user turn and put it back in the input box
+        N │
+row  1  L │  /retry — Resend the last user turn, or choose a turn to resend
+        N │▌ term²  BARE  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
+row  2  L │  /retry-tool — Retry the last tool call
+        N │  mockprov/mock-alpha (default)
+row  3  L │  /retry-turn — Regenerate the latest user turn from its original prompt
+        N │
+row  4  L │  /compact — Compact older conversation turns into a local summary
+        N │────────────────────────────────────────────────────────────────────────────────────────────────────
+row  5  L │  /bare — Toggle the Bare profile (minimal prompt)
+        N │❯ typed after resize 
+row  6  L │  /lite — Toggle the Bare profile (Lite was merged into Bare)
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output
+row  7  L │  /mentor — Toggle mentor mode (collaborative mode with mentor model)
+        N │
+row  8  L │  /orchestrator — Toggle orchestrator mode (delegate all tool-backed work)
+        N │ Bare │ mockprov/mock-alpha
+row  9  L │  /auto-approve — Set tool auto-approval mode (off, advisory, auto, always)
+        N │
+row 10  L │  /plan — Toggle plan mode (read-only research/planning mode)
+        N │
+row 11  L │  /profile — Switch the active profile
+        N │
+row 12  L │  /handoff — Send the last assistant response to another model for review
+        N │
+row 13  L │  /settings — View or modify settings
+        N │
+row 14  L │  /sandbox — Toggle shell sandboxing; disabling it gives shell commands unrestricted access
+        N │
+row 15  L │  /mcp — Show configured MCP servers and their connection state
+        N │
+row 16  L │  /mcp-login — Authenticate with an OAuth-protected MCP server
+        N │
+row 17  L │  /bridge — Attach or detach this local session for Discord bridge input
+        N │
+row 18  L │  /providers — Manage API providers (list, add, edit, delete)
+        N │
+row 19  L │  /skills — Activate a skill for the next request
+        N │
+row 20  L │  /restart — Reload the built CLI in place; /restart stop consents to stopping background work
+        N │
+row 21  L │  /quit — Exit the application
+        N │
+row 22  L │  /help — Show commands and keyboard shortcuts
+        N │
+row 24  L │  Keyboard shortcuts
+        N │
+row 25  L │  Ctrl+C: clear draft or interrupt; press again to exit
+        N │
+row 26  L │  Ctrl+O: choose model · Ctrl+T: choose reasoning effort
+        N │
+row 27  L │  Shift+Tab: switch Standard/Plan · @: complete paths · !: shell
+        N │
+row 30  L │  ────────────────────────────────────────────────────────────────────────────────────────────────
+        N │
+row 31  L │  ❯ typed after resize 
+        N │
+row 33  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
28-resize-back — 15.85% pixels differ + +
legacy
+
term2-next
+
diff
+
20 text row(s) differ
row  0  L │  /handoff — Send the last assistant response to another model for review
+        N │
+row  1  L │  /settings — View or modify settings
+        N │▌ term²  BARE  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
+row  2  L │  /sandbox — Toggle shell sandboxing; disabling it gives shell commands 
+        N │  mockprov/mock-alpha (default)
+row  3  L │  unrestricted access
+        N │
+row  4  L │  /mcp — Show configured MCP servers and their connection state
+        N │────────────────────────────────────────────────────────────────────────────────
+row  5  L │  /mcp-login — Authenticate with an OAuth-protected MCP server
+        N │❯ typed after resize 
+row  6  L │  /bridge — Attach or detach this local session for Discord bridge input
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history
+row  7  L │  /providers — Manage API providers (list, add, edit, delete)
+        N │
+row  8  L │  /skills — Activate a skill for the next request
+        N │ Bare │ mockprov/mock-alpha
+row  9  L │  /restart — Reload the built CLI in place; /restart stop consents to stopping
+        N │
+row 10  L │   background work
+        N │
+row 11  L │  /quit — Exit the application
+        N │
+row 12  L │  /help — Show commands and keyboard shortcuts
+        N │
+row 14  L │  Keyboard shortcuts
+        N │
+row 15  L │  Ctrl+C: clear draft or interrupt; press again to exit
+        N │
+row 16  L │  Ctrl+O: choose model · Ctrl+T: choose reasoning effort
+        N │
+row 17  L │  Shift+Tab: switch Standard/Plan · @: complete paths · !: shell
+        N │
+row 20  L │  ────────────────────────────────────────────────────────────────────────────
+        N │
+row 21  L │  ❯ typed after resize 
+        N │
+row 23  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
29-exit-confirm — 14.42% pixels differ + +
legacy
+
term2-next
+
diff
+
19 text row(s) differ
row  0  L │  unrestricted access
+        N │
+row  1  L │  /mcp — Show configured MCP servers and their connection state
+        N │▌ term²  BARE  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
+row  2  L │  /mcp-login — Authenticate with an OAuth-protected MCP server
+        N │  mockprov/mock-alpha (default)
+row  3  L │  /bridge — Attach or detach this local session for Discord bridge input
+        N │
+row  4  L │  /providers — Manage API providers (list, add, edit, delete)
+        N │Press Ctrl+C again to exit
+row  5  L │  /skills — Activate a skill for the next request
+        N │────────────────────────────────────────────────────────────────────────────────
+row  6  L │  /restart — Reload the built CLI in place; /restart stop consents to stopping
+        N │❯  
+row  7  L │   background work
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history
+row  8  L │  /quit — Exit the application
+        N │
+row  9  L │  /help — Show commands and keyboard shortcuts
+        N │ Bare │ mockprov/mock-alpha
+row 11  L │  Keyboard shortcuts
+        N │
+row 12  L │  Ctrl+C: clear draft or interrupt; press again to exit
+        N │
+row 13  L │  Ctrl+O: choose model · Ctrl+T: choose reasoning effort
+        N │
+row 14  L │  Shift+Tab: switch Standard/Plan · @: complete paths · !: shell
+        N │
+row 16  L │  Press Ctrl+C again to exit
+        N │
+row 19  L │  ────────────────────────────────────────────────────────────────────────────
+        N │
+row 20  L │  ❯  
+        N │
+row 21  L │  / commands │ @ paths │ ! shell │ Shift+Tab plan
+        N │
+row 23  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+
30-exited — 14.86% pixels differ + +
legacy
+
term2-next
+
diff
+
17 text row(s) differ
row  0  L │   background work
+        N │
+row  1  L │  /quit — Exit the application
+        N │▌ term²  BARE  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
+row  2  L │  /help — Show commands and keyboard shortcuts
+        N │  mockprov/mock-alpha (default)
+row  4  L │  Keyboard shortcuts
+        N │Press Ctrl+C again to exit
+row  5  L │  Ctrl+C: clear draft or interrupt; press again to exit
+        N │────────────────────────────────────────────────────────────────────────────────
+row  6  L │  Ctrl+O: choose model · Ctrl+T: choose reasoning effort
+        N │❯  
+row  7  L │  Shift+Tab: switch Standard/Plan · @: complete paths · !: shell
+        N │/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history
+row  9  L │  Press Ctrl+C again to exit
+        N │ Bare │ mockprov/mock-alpha
+row 12  L │  ────────────────────────────────────────────────────────────────────────────
+        N │
+row 13  L │  ❯  
+        N │
+row 14  L │  / commands │ @ paths │ ! shell │ Shift+Tab plan
+        N │
+row 16  L │   Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k
+        N │
+row 17  L │Token usage: 6,000 input, 400 output
+        N │
+row 18  L │By model:
+        N │
+row 19  L │  mockprov/mock-alpha: 6,000 input, 400 output; Cost unavailable
+        N │
+row 21  L │Session: ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
+        N │
+row 22  L │To resume this conversation: term2 --resume ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
+        N │
+

Soak differences

Reported by the context-free soak agent; every item is unexplained until the owner's team triages it.

  1. unexplained — [content] Start screen, top line: legacy `Profile: bare`; next `Profile: BARE`.
  2. unexplained — [appearance] Whole UI: legacy is indented 2 columns, so its divider is shorter than the terminal width; next starts at column 0 and the divider spans the full width.
  3. unexplained — [appearance] Start screen: legacy has 4 blank lines between the header and the input divider; next has 1.
  4. unexplained — [content] Footer hint, idle at 100 columns: legacy `/ commands │ @ paths │ ! shell │ Shift+Tab plan` (cut off); next `... Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output`.
  5. unexplained — [behaviour] Footer while typing: legacy hides the hint line whenever the input has text; next always shows it.
  6. unexplained — [appearance] After each reply: legacy leaves 2 blank lines before the divider and between turns; next has no blank line, and the divider sits right under the reply.
  7. unexplained — [appearance] Reply indent: legacy's reply starts at the same column as the user bubble; next's is indented 2 columns more than the bubble.
  8. unexplained — [content] Status bar after a turn: legacy `↑1.2k ↓80 · Ctx 1k`; next `↑1.2k ↓80 · 0% cached · Ctx last 1k`.
  9. unexplained — [content] Status bar over several turns: legacy stays at `↑1.2k ↓80`; next adds up (2.4k, 4.8k … 31.2k). next drops `Ctx last 1k` after a model switch.
  10. unexplained — [content] Status bar during streaming: legacy shows `(583.3t/s)`; next shows nothing. After the stream: legacy `(3.1t/s)`; next `3.1t/s` (no brackets).
  11. unexplained — [content/appearance] "list the files" tool row: legacy `✓ ls (34ms)` with `ls` bold white and the duration grey; next `✓ Shell command (12ms)`, all cyan.
  12. unexplained — [behaviour] Ctrl+O: legacy opens the model picker; next expands the tool output in place (exit 0, runtime, file list) with a `Lines x–y of N · PgUp/PgDn` viewer.
  13. unexplained — [appearance] Ctrl+O expand in next (seen twice): a stale copy of the latest turn is drawn above older content. Collapsing leaves only the last turn at the top and the rest of the screen blank.
  14. unexplained — [content/appearance] Approval prompt: legacy has a plain `Agent wants to run: shell` / `touch created-by-walk.txt` layout with options on the left and a description pane on the right. next has a boxed `Allow this action?` panel with `Owner: turn-4`, the call's arguments as one-line JSON and as pretty-printed JSON, and `○ Shell command … Running tools · 4s` above it.
  15. unexplained — [content] Approval options: legacy `1. Allow once / 2. Deny`; next adds `3. Deny without reason` and `Ctrl+G return to composer`. Key hints: legacy `… Esc interrupts the turn`; next `… Esc cancel`.
  16. unexplained — [content] Approved tool row: legacy `✓ touch created-by-walk.txt (9ms)`; next `✓ Shell command (9ms)`.
  17. unexplained — [content] Deny reason prompt: legacy `Why?` then `(or Esc to cancel)` on the next line; next `Why? (or Esc to cancel) · Enter without a reason` inside the box, later `(or Esc to go back)`.
  18. unexplained — [content] Denied tool row: legacy `✗ touch created-by-walk.txt` / `→ DENIED: Tool execution was not approved. User's reason: not now`; next `✗ Shell command` / `Full tool output: Ctrl+O`, without the reason.
  19. unexplained — [behaviour] Ctrl+G during an approval: legacy nothing; next moves to the composer with a text summary (`/answer 1 <choice number> [text]`), and again opens a "Pending interactions" list.
  20. unexplained — [behaviour] Esc on an approval: legacy interrupts the turn (`Stopped`); next goes back to the "Pending interactions" list and the turn keeps waiting.
  21. unexplained — [content] Ctrl+C on a waiting approval in next: the user message `❯ create a file please` disappears from the transcript and no `Stopped` appears.
  22. unexplained — [behaviour/appearance] Typing `/`: legacy replaces the input line with `Filter:` and a bordered list with a scrollbar; next keeps `❯ /` in the input and shows the list above it.
  23. unexplained — [content] `/` menu contents and order: legacy starts `/model, /effort, /clear, /goal, /copy…` with `- description` and wrapped descriptions; next starts `/help, /providers, /model, /effort, /profile…` and adds `/tasks /queue /steer /followup /cancel /answer /command-status /command-apply /exit /rollover`. legacy has `/lite` and `/retry` that next lacks or words differently. Many descriptions are worded differently.
  24. unexplained — [appearance] Selected command: legacy `❯` with the row white/bold; next `›` with no row highlight.
  25. unexplained — [behaviour] Filtering `/re`: legacy also matches `/bare` and puts `/restart` first; next puts `/resume` first, no `/bare`. At 80 columns legacy's wrapped line is indented one space too far.
  26. unexplained — [behaviour] Tab in the `/` menu: legacy runs the highlighted command (opened `/resume`); next completes it into the input (`/retry `).
  27. unexplained — [content] `/help`: command lists differ. legacy shortcuts `Ctrl+C: clear draft or interrupt; press again to exit / Ctrl+O: choose model · Ctrl+T … / Shift+Tab: switch Standard/Plan…`; next `Enter send/steer · Alt+Enter follow-up · ↑/↓ history · PgUp/PgDn scroll · Ctrl+O tool output · Ctrl+T … / Ctrl+G approvals/tasks · Ctrl+B budget …`, with no blank lines.
  28. unexplained — [behaviour] Escaping some command menus (`/mcp`, `/profile`, `/tasks` that did not open): legacy leaves the command text in the input, so the next command was appended and sent as chat (`/mcp/skills`, `/tasks/copy`), with the error `Missing parent or Profile 'builtin:/providers'`; next leaves the input empty.
  29. unexplained — [behaviour] Status messages: next keeps only the latest one or two (the `/providers` output vanished after the next command); legacy keeps all of them.
  30. unexplained — [behaviour] `/model` opening tab: legacy opens on All with the models listed; next opens on an empty tab with `No matching models.`. legacy's empty tabs say `No favorites yet — press Ctrl+F…` / `No nicknames yet — …`.
  31. unexplained — [appearance/content] Model picker: legacy cyan border, `Filter:` above, `Select model`, hints incl. `ctrl+n nickname … ctrl+r refresh model list`; next grey border, bold `Choose a model`, `Filter: type to filter` inside, fewer hints, extra spaces before model names.
  32. unexplained — [content] Model chosen: legacy `Set model to mock-beta (mockprov)`; next `Model set to mockprov/mock-beta.`
  33. unexplained — [content] Effort picker: legacy `Reasoning effort =` input and `Current: default ·` above the box, `Enter will set: default`, `Tab use value │ Ctrl+D reset`; next `Current: default` inside, `default (current)`, shorter hints. After choosing: legacy no message; next `Reasoning effort set to high.`
  34. unexplained — [appearance/content] `/settings`: legacy tab bar with highlighted tab, aligned name/value columns, `● changed` markers, detail pane, `⏎ edit │ ● changed`; next `Settings · [Models] Providers…`, rows `Name · key: value`, 7 visible rows, `Current: … · Default: …`.
  35. unexplained — [content] `/settings` values: nicknames legacy `(none)`, next `[configured]`; API keys legacy `<empty>`, next `[hidden]`; booleans legacy `ON/OFF`, next `true/false`; legacy shows `↻` markers.
  36. unexplained — [behaviour] Enter on a boolean setting: legacy toggles it (● OFF, `default: ON`); next opens a text editor (`Editing app.notifications: ▏`).
  37. unexplained — [content] Settings search: legacy adds `Searching all settings, including advanced ones` and a `UI` tag per row; next adds `(true|false)` to the description.
  38. unexplained — [content] `/effort low`, `/auto-approve auto/off`: legacy prints no confirmation and no `Auto` in the status bar; next prints `Tool auto-approval set to auto.` and shows `│ Auto │`.
  39. unexplained — [behaviour] `/profile`: legacy opens a profile picker (Bare, Plan, Pair, Mentor, Orchestrator); next prints `Use /profile <name or full profile ID>.`
  40. unexplained — [behaviour] `/providers`: legacy opens a "Your Providers" menu; next prints `Configured providers: mockprov (mockprov) — configured · active`.
  41. unexplained — [behaviour] `/auto-approve`: legacy opens a picker (off/advisory/auto/always); next prints `Tool auto-approval is off. Use /auto-approve <mode>…`.
  42. unexplained — [behaviour] `/mcp`: legacy opens "MCP Server Management" (+ Add user server); next prints instructions with the mcp.json path.
  43. unexplained — [behaviour] `/tasks`: legacy has no such command (the text stays in the input); next opens a "Manage background tasks" box.
  44. unexplained — [content] `/sandbox`: legacy `Shell sandbox mode enabled - restricting shell operations…` and `Sandboxed` in the status bar; next `Shell sandbox mode enabled (preference only; direct sandbox execution is unavailable).`, no status-bar change.
  45. unexplained — [behaviour] `/compact`: legacy `Compacting context...` then `Context compaction failed: Set agent.contextCompaction.compactThresholdTokens…`; next `Conversation compacted… Compaction complete.`
  46. unexplained — [behaviour] `/handoff`: legacy asks `Handoff message (enter to use default message):`, Esc gives `Handoff cancelled`; next immediately starts a new conversation with an "Implement this: …" turn, and the reply is cut off mid-word (`done. the command finis`).
  47. unexplained — [behaviour] `/retry` after a cancelled tool turn: legacy `No tool call to retry.`; next regenerates the turn (new approval), `Retrying.` / `Conversation history restored to retry.`
  48. unexplained — [behaviour] `/clear`: legacy keeps history, draws `── New conversation ──`, a new header and `Welcome to term²! Type a message to start chatting.`; next wipes the screen to a bare header, no welcome line.
  49. unexplained — [content] `/copy` right after the clear: legacy `Copied the latest assistant response…`; next `No assistant response to copy.` (transcripts differed at this point because of item 28).
  50. unexplained — [behaviour/content] `/rewind`: legacy shows each turn with `↳ discards N turns · N replies` and `⏎ rewind & edit │ ⇥ resend instead`; next a plain list, then a second step (`1. Edit in composer / 2. Resend`), then `Command <uuid> · rewind · rewound / Conversation rewound… / Rewind draft restored…`.
  51. unexplained — [appearance] After a rewind, next's `Command … rewound / Conversation rewound…` lines stay and re-appear below every later reply.
  52. unexplained — [content] `/undo` in a resumed chat: legacy lists 4 turns, long ones cut with `…`; next lists 13, long ones wrapped without indent.
  53. unexplained — [speed] `/resume`: next did not react for about 2.5 minutes (07:20:38 to about 07:23:10; typed keys did nothing, then the list appeared), and after a restart showed `Loading conversations…` for about 2.5 minutes (07:35:24 to 07:37:50). legacy opened in 1–3 s both times; a second open in next in the same session was fast.
  54. unexplained — [content] Resume list: legacy 10 rows with `│` columns, full UUID, `Updated: 2026-11-04 07:19:53`, `Local • 10 msgs • mock-alpha • mode: bare`; next 8 rows, a `Preview` header, `ID: conv_…`, `Updated: 11/4/2026, 7:19:53 AM`, `Messages: 10`, `Model: mockprov/mock-beta`.
  55. unexplained — [content] Resume entries: legacy's older entries `RT-PROMPT please read the small file · 6 hours ago`; next's `RT-PROMPT one more question · 5 days ago`. Ages differ ("hello there" 9 vs 11 minutes ago), message counts differ (14 vs 16), and next lists empty `(no messages yet)` sessions.
  56. unexplained — [behaviour] PgDn in the resume list: legacy jumps to the bottom of the page; next does nothing.
  57. unexplained — [content] After resuming: legacy prints `Resumed conversation: <id>`, next nothing. legacy's resumed transcript shows only the last couple of turns with a duplicated `RT-REPLY 6 plain answer.`; next shows many turns.
  58. unexplained — [behaviour] Up-arrow history: legacy recalls only chat messages; next also slash commands, and recalling `/rewind` opens the `/` menu, which then takes ↑/↓ so history cannot be navigated further.
  59. unexplained — [behaviour] `@` mention: legacy replaces the input with `Filter:` and a bordered list (src/, notes.txt, README.md, src/main.js); next keeps `look at @` and shows an unbordered list that also has `created-by-walk.txt`, in another order.
  60. unexplained — [appearance] `!` shell mode: legacy replaces the prompt with a red `!`; next shows `❯ !`.
  61. unexplained — [behaviour] Alt+Enter idle: legacy inserts nothing (`line oneline two`); next inserts a newline.
  62. unexplained — [behaviour] Esc on a draft: legacy `Press Esc again to clear input` and clears on the second Esc; next ignores Esc on a draft.
  63. unexplained — [behaviour] Once at 80x24 legacy treated Enter as a newline (`markdown please` plus an empty line; a second Enter sent two lines). Not reproduced in three attempts.
  64. unexplained — [content/appearance] Shift+Tab confirmation: legacy `▲ Switching to Plan mode requires clearing the current session. / Clear session and switch to Plan mode?` with ` Yes / ❯ No`; next `⚠ Switching modes requires clearing the current session. / Clear session and switch mode?` with `› No`. In next the last tool row (`✓ ls`) was drawn below the dialog.
  65. unexplained — [behaviour/content] After Yes: legacy shows a New-conversation divider, header, welcome and `Plan mode enabled`; next keeps the old transcript, adds a `PLAN` header, no message. Back: legacy `Switched to Bare mode`; next `Switched to builtin:bare for this session.`
  66. unexplained — [content] Footer while streaming: legacy `⏎ steer │ Alt+⏎ queue │ Ctrl+O model │ Ctrl+T effort`; next `Enter steer │ Alt+Enter follow-up │ /cancel stop`.
  67. unexplained — [content] Rate: legacy `Generating · 3s (583.3 tok/s)` (about 600–700); next `Generating · 4s (~156.6 tok/s)` (about 160–225, with `~`). legacy has a blank line before `Generating`.
  68. unexplained — [appearance] While streaming, next kept the stale `PLAN` header at the top, and the text started right under the user bubble with earlier lines cut off.
  69. unexplained — [behaviour] Enter (steer) while streaming: legacy queues it (`│ steer · mid-turn / steer this`), streams to the end, then answers; next stops the stream at once (`Stopped`) and answers `[steering message: the user sent this wh…` cut off mid-word, with the divider missing in the screenshot.
  70. unexplained — [content/appearance] Alt+Enter while streaming: legacy `│ queued · after this turn`, `[Q:1]` in the status bar, ↑ opens a queued-item editor (`e edit │ d delete`); next `Queue: running / Queued 1 (queued): …`, ↑ puts the text back in the input. Once, at the end of a stream, legacy's screen briefly showed old transcript lines with an empty `❯`.
  71. unexplained — [behaviour] Double Esc while streaming: legacy stops the reply; next ignores it.
  72. unexplained — [behaviour] Ctrl+C while streaming with a draft: next stops the turn, keeps the draft and pauses the queue (`Queue: paused · manual`).
  73. unexplained — [content] Stream end after a queued, steered or cancelled message: legacy's transcript stopped at the last full line (sw2494 / sw2446); next also showed the final short line (sw2495–sw2499, sw2447–sw2456). legacy's `Stopped` has a blank line before it, next's not. A stream left to finish showed sw2499 in both.
  74. unexplained — [behaviour] PgUp during or after streaming: legacy nothing; next scrolls only while the tool-output viewer is open.
  75. unexplained — [behaviour] `/queue` + Enter in next (queue paused): the menu stayed with no response for over 60 s; it ran only with a trailing space, printed usage and left the command in the input.
  76. unexplained — [appearance] At 80x24: legacy's reflowed long lines continue with a 3-space indent, next's with 2; next's footer drops `Ctrl+O tool output`.
  77. unexplained — [behaviour] Ctrl+C on an empty draft: next shows `Press Ctrl+C again to exit` above the divider and it stays; legacy shows it in the transcript, once two piled up.
  78. unexplained — [content] Exit: legacy printed `Token usage: 0 input, 0 output` (fresh session) and later `To resume this conversation: term2 --resume 9e6dd…`; next nothing for the fresh session, later `To resume this conversation: term2-next --resume 'conv_5dd…'`.
+ \ No newline at end of file diff --git a/rewrite/parity/real-terminal/report/results.json b/rewrite/parity/real-terminal/report/results.json new file mode 100644 index 000000000..5d5e160e5 --- /dev/null +++ b/rewrite/parity/real-terminal/report/results.json @@ -0,0 +1,23532 @@ +{ + "generatedAt": "2026-11-04T06:45:31.820Z", + "environment": { + "command": "node rewrite/parity/real-terminal/run.mjs --out /full --store /store", + "revision": "c21e8e0f0a7ccfb695b5efe311d48be8d23594af", + "terminal": "node-pty bridge (no sshd in this environment) -> SSE -> xterm.js DOM renderer, headless Chromium", + "xterm": "@xterm/xterm 6.0.0", + "chromium": "153.0.8010.12", + "node": "v22.23.4", + "os": "Linux 6.18.44-fc-v233 x64", + "cpu": "Intel(R) Xeon(R) Processor × 4", + "memory": "16 GiB", + "store": "/store", + "storeBytes": { + "legacy": 1169723476, + "next": 440501340 + }, + "storeManifest": { + "legacy": { + "directory": "conversations", + "sessions": 1392, + "bytes": 1169378536, + "longSession": { + "id": "07301a85-df32-44c5-a10f-737de02d14ec", + "bytes": 325086773, + "deltas": 200000 + } + }, + "next": { + "directory": "conversations-next", + "sessions": 1392, + "bytes": 440501340, + "longSession": { + "id": "conv_07301a85-df32-44c5-a10f-737de02d14ec", + "bytes": 132184505, + "deltas": 200000 + } + } + }, + "workspace": "/store/workspace", + "samples": "full", + "harnessFloor": "raw pty echo (cat) key-to-paint p50 2.6 ms, max 6.3 ms (n=40)", + "loadAverage1m": "min 0.08 · mean 0.63 · max 2.26" + }, + "sizes": [ + { + "cols": 100, + "rows": 34, + "store": { + "legacy": { + "startupMs": 1909, + "firstResumeMs": 842.3999999985099, + "secondResumeMs": 163.39999999850988 + }, + "next": { + "startupMs": 1682, + "firstResumeMs": null, + "failed": "first /resume: no list within 5000 ms", + "secondResumeMs": null + } + }, + "latency": { + "idle": { + "legacy": { + "type char": { + "n": 48, + "ok": 48, + "missed": 0, + "pre": 0, + "p50": 15.099999997764826, + "p95": 15.600000001490116, + "max": 15.699999999254942, + "parseP50": 3.699999999254942, + "cpuMsPerKey": 7.291666666666667, + "bytesPerKey": 488.5 + }, + "backspace": { + "n": 48, + "ok": 48, + "missed": 0, + "pre": 0, + "p50": 15.199999999254942, + "p95": 15.699999999254942, + "max": 15.800000000745058, + "parseP50": 3.5, + "cpuMsPerKey": 7.5, + "bytesPerKey": 487.5 + }, + "enter (composer)": { + "n": 10, + "ok": 10, + "missed": 0, + "pre": 0, + "p50": 14.800000000745058, + "p95": 15.400000002235174, + "max": 15.400000002235174, + "parseP50": 4.800000000745058, + "cpuMsPerKey": 70, + "bytesPerKey": 1983.8 + }, + "arrow (model menu)": { + "n": 20, + "ok": 20, + "missed": 0, + "pre": 0, + "p50": 15.300000000745058, + "p95": 16.100000001490116, + "max": 82, + "parseP50": 6.399999998509884, + "cpuMsPerKey": 8.5, + "bytesPerKey": 1965.3 + }, + "arrow (resume menu)": { + "n": 20, + "ok": 20, + "missed": 0, + "pre": 0, + "p50": 15.300000000745058, + "p95": 15.799999997019768, + "max": 15.800000000745058, + "parseP50": 6.899999998509884, + "cpuMsPerKey": 7, + "bytesPerKey": 3101 + }, + "ctrl+o": { + "n": 10, + "ok": 10, + "missed": 0, + "pre": 0, + "p50": 10.699999999254942, + "p95": 12, + "max": 12, + "parseP50": 7.200000002980232, + "cpuMsPerKey": 12, + "bytesPerKey": 2112.9 + }, + "shift+tab": { + "n": 10, + "ok": 10, + "missed": 0, + "pre": 0, + "p50": 10.699999999254942, + "p95": 16.599999997764826, + "max": 16.599999997764826, + "parseP50": 6.900000002235174, + "cpuMsPerKey": 6, + "bytesPerKey": 1992 + }, + "open /model": { + "n": 8, + "ok": 8, + "missed": 0, + "pre": 0, + "p50": 14.400000002235174, + "p95": 15.099999997764826, + "max": 15.099999997764826, + "parseP50": 6.800000000745058, + "cpuMsPerKey": 20, + "bytesPerKey": 2616 + }, + "open /settings": { + "n": 8, + "ok": 8, + "missed": 0, + "pre": 0, + "p50": 14.800000000745058, + "p95": 15.300000000745058, + "max": 15.300000000745058, + "parseP50": 6.699999999254942, + "cpuMsPerKey": 81.25, + "bytesPerKey": 6939 + }, + "scroll (resume page down/up)": { + "n": 10, + "ok": 10, + "missed": 0, + "pre": 0, + "p50": 15.199999999254942, + "p95": 15.699999999254942, + "max": 15.699999999254942, + "parseP50": 6.599999997764826, + "cpuMsPerKey": 8, + "bytesPerKey": 3101 + } + }, + "next": { + "type char": { + "n": 48, + "ok": 48, + "missed": 0, + "pre": 0, + "p50": 14.899999998509884, + "p95": 15.400000002235174, + "max": 15.5, + "parseP50": 4.099999997764826, + "cpuMsPerKey": 9.166666666666666, + "bytesPerKey": 585.5 + }, + "backspace": { + "n": 48, + "ok": 48, + "missed": 0, + "pre": 0, + "p50": 14.900000002235174, + "p95": 15.5, + "max": 15.599999997764826, + "parseP50": 3.899999998509884, + "cpuMsPerKey": 6.666666666666667, + "bytesPerKey": 584.5 + }, + "enter (composer)": { + "n": 10, + "ok": 10, + "missed": 0, + "pre": 0, + "p50": 14.600000001490116, + "p95": 15.100000001490116, + "max": 15.100000001490116, + "parseP50": 5.199999999254942, + "cpuMsPerKey": 50, + "bytesPerKey": 1978.6 + }, + "arrow (model menu)": { + "n": 20, + "ok": 0, + "missed": 20, + "pre": 0, + "p50": null, + "p95": null, + "max": null, + "parseP50": null, + "cpuMsPerKey": 24.5, + "bytesPerKey": 0 + }, + "arrow (resume menu)": { + "n": 20, + "ok": 0, + "missed": 20, + "pre": 0, + "p50": null, + "p95": null, + "max": null, + "parseP50": null, + "cpuMsPerKey": null, + "bytesPerKey": null + }, + "ctrl+o": { + "n": 10, + "ok": 0, + "missed": 10, + "pre": 0, + "p50": null, + "p95": null, + "max": null, + "parseP50": null, + "cpuMsPerKey": 55, + "bytesPerKey": 0 + }, + "shift+tab": { + "n": 10, + "ok": 10, + "missed": 0, + "pre": 0, + "p50": 27.5, + "p95": 47.69999999925494, + "max": 47.69999999925494, + "parseP50": 27.199999999254942, + "cpuMsPerKey": 59, + "bytesPerKey": 627.2 + }, + "open /model": { + "n": 8, + "ok": 8, + "missed": 0, + "pre": 0, + "p50": 14.599999997764826, + "p95": 15.699999999254942, + "max": 15.699999999254942, + "parseP50": 7.199999999254942, + "cpuMsPerKey": 12.5, + "bytesPerKey": 1870 + }, + "open /settings": { + "n": 8, + "ok": 8, + "missed": 0, + "pre": 0, + "p50": 14.800000000745058, + "p95": 15.800000000745058, + "max": 15.800000000745058, + "parseP50": 9.900000002235174, + "cpuMsPerKey": 12.5, + "bytesPerKey": 2827 + }, + "scroll (resume page down/up)": { + "n": 10, + "ok": 0, + "missed": 10, + "pre": 0, + "p50": null, + "p95": null, + "max": null, + "parseP50": null, + "cpuMsPerKey": null, + "bytesPerKey": null + } + }, + "gate": { + "type char": { + "pass": true, + "reasons": [] + }, + "backspace": { + "pass": true, + "reasons": [] + }, + "enter (composer)": { + "pass": true, + "reasons": [] + }, + "arrow (model menu)": { + "pass": false, + "reasons": ["no matching paint (legacy painted)", "20 key(s) never painted the change (legacy 0)"] + }, + "arrow (resume menu)": { + "pass": false, + "reasons": ["no matching paint (legacy painted)", "20 key(s) never painted the change (legacy 0)"] + }, + "ctrl+o": { + "pass": false, + "reasons": ["no matching paint (legacy painted)", "10 key(s) never painted the change (legacy 0)"] + }, + "shift+tab": { + "pass": false, + "reasons": ["p50 over 1.2x / +5 ms", "p95 over 1.2x / +5 ms"] + }, + "open /model": { + "pass": true, + "reasons": [] + }, + "open /settings": { + "pass": true, + "reasons": [] + }, + "scroll (resume page down/up)": { + "pass": false, + "reasons": ["no matching paint (legacy painted)", "10 key(s) never painted the change (legacy 0)"] + } + }, + "raw": { + "legacy": { + "type char": [ + { + "ok": true, + "pre": false, + "ms": 14.099999997764826, + "parseMs": 4.299999997019768, + "cpuMs": 20, + "bytes": 483, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.399999998509884, + "parseMs": 6.100000001490116, + "cpuMs": 10, + "bytes": 484, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.400000002235174, + "parseMs": 5.100000001490116, + "cpuMs": 10, + "bytes": 485, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.300000000745058, + "parseMs": 3.899999998509884, + "cpuMs": 10, + "bytes": 486, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.400000002235174, + "parseMs": 4, + "cpuMs": 10, + "bytes": 487, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.600000001490116, + "parseMs": 4.300000000745058, + "cpuMs": 0, + "bytes": 488, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 4.300000000745058, + "cpuMs": 10, + "bytes": 489, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 3.800000000745058, + "cpuMs": 10, + "bytes": 490, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 3.5, + "cpuMs": 0, + "bytes": 491, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.699999999254942, + "parseMs": 3.7999999970197678, + "cpuMs": 10, + "bytes": 492, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 3.899999998509884, + "cpuMs": 20, + "bytes": 493, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 4.199999999254942, + "cpuMs": 10, + "bytes": 494, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 3.699999999254942, + "cpuMs": 0, + "bytes": 483, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 3.899999998509884, + "cpuMs": 10, + "bytes": 484, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 3.5, + "cpuMs": 0, + "bytes": 485, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.700000002980232, + "parseMs": 3.400000002235174, + "cpuMs": 10, + "bytes": 486, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.5, + "parseMs": 4.099999997764826, + "cpuMs": 10, + "bytes": 487, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.200000002980232, + "parseMs": 3.900000002235174, + "cpuMs": 10, + "bytes": 488, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.399999998509884, + "parseMs": 4, + "cpuMs": 10, + "bytes": 489, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.799999997019768, + "parseMs": 3.399999998509884, + "cpuMs": 0, + "bytes": 490, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.600000001490116, + "parseMs": 3.2000000029802322, + "cpuMs": 10, + "bytes": 491, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.399999998509884, + "parseMs": 3.399999998509884, + "cpuMs": 0, + "bytes": 492, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.5, + "parseMs": 4.100000001490116, + "cpuMs": 10, + "bytes": 493, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 3.899999998509884, + "cpuMs": 0, + "bytes": 494, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.400000002235174, + "parseMs": 3.900000002235174, + "cpuMs": 10, + "bytes": 483, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 3.699999999254942, + "cpuMs": 0, + "bytes": 484, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.300000000745058, + "parseMs": 3.900000002235174, + "cpuMs": 10, + "bytes": 485, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.600000001490116, + "parseMs": 4.199999999254942, + "cpuMs": 10, + "bytes": 486, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.300000000745058, + "parseMs": 4.699999999254942, + "cpuMs": 0, + "bytes": 487, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.599999997764826, + "parseMs": 4.299999997019768, + "cpuMs": 10, + "bytes": 488, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.100000001490116, + "parseMs": 3.699999999254942, + "cpuMs": 0, + "bytes": 489, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.300000000745058, + "parseMs": 3.900000002235174, + "cpuMs": 10, + "bytes": 490, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.900000002235174, + "parseMs": 3.699999999254942, + "cpuMs": 10, + "bytes": 491, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 3.900000002235174, + "cpuMs": 0, + "bytes": 492, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 3.300000000745058, + "cpuMs": 10, + "bytes": 493, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 3.400000002235174, + "cpuMs": 0, + "bytes": 494, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.299999997019768, + "parseMs": 3.199999999254942, + "cpuMs": 10, + "bytes": 483, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14, + "parseMs": 3.600000001490116, + "cpuMs": 0, + "bytes": 484, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.600000001490116, + "parseMs": 3.300000000745058, + "cpuMs": 0, + "bytes": 485, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.5, + "parseMs": 3.300000000745058, + "cpuMs": 10, + "bytes": 486, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.5, + "parseMs": 3.099999997764826, + "cpuMs": 0, + "bytes": 487, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.399999998509884, + "parseMs": 3.099999997764826, + "cpuMs": 10, + "bytes": 488, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.600000001490116, + "parseMs": 3.199999999254942, + "cpuMs": 10, + "bytes": 489, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.599999997764826, + "parseMs": 3.199999999254942, + "cpuMs": 0, + "bytes": 490, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.099999997764826, + "parseMs": 3.599999997764826, + "cpuMs": 30, + "bytes": 491, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.099999997764826, + "parseMs": 3.5, + "cpuMs": 10, + "bytes": 492, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 3.5, + "cpuMs": 0, + "bytes": 493, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.600000001490116, + "parseMs": 3.199999999254942, + "cpuMs": 10, + "bytes": 494, + "streaming": false + } + ], + "backspace": [ + { + "ok": true, + "pre": false, + "ms": 15.5, + "parseMs": 6.199999999254942, + "cpuMs": 10, + "bytes": 493, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.399999998509884, + "parseMs": 3.800000000745058, + "cpuMs": 0, + "bytes": 492, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 5.399999998509884, + "cpuMs": 10, + "bytes": 491, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.300000000745058, + "parseMs": 3.900000002235174, + "cpuMs": 10, + "bytes": 490, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.699999999254942, + "parseMs": 4.300000000745058, + "cpuMs": 10, + "bytes": 489, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 3.5, + "cpuMs": 0, + "bytes": 488, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.300000000745058, + "parseMs": 3.899999998509884, + "cpuMs": 10, + "bytes": 487, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.900000002235174, + "parseMs": 4.5, + "cpuMs": 10, + "bytes": 486, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 4.600000001490116, + "cpuMs": 0, + "bytes": 485, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.399999998509884, + "parseMs": 6.099999997764826, + "cpuMs": 30, + "bytes": 484, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 3.800000000745058, + "cpuMs": 0, + "bytes": 483, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.400000002235174, + "parseMs": 4.100000001490116, + "cpuMs": 20, + "bytes": 482, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 3.7000000029802322, + "cpuMs": 20, + "bytes": 493, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.599999997764826, + "parseMs": 4.199999999254942, + "cpuMs": 10, + "bytes": 492, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 5.599999997764826, + "cpuMs": 10, + "bytes": 491, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.5, + "parseMs": 5.699999999254942, + "cpuMs": 10, + "bytes": 490, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.399999998509884, + "parseMs": 4, + "cpuMs": 0, + "bytes": 489, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.399999998509884, + "parseMs": 3.399999998509884, + "cpuMs": 0, + "bytes": 488, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 3.5, + "cpuMs": 10, + "bytes": 487, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 3.5, + "cpuMs": 0, + "bytes": 486, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.399999998509884, + "parseMs": 4, + "cpuMs": 10, + "bytes": 485, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.300000000745058, + "parseMs": 5.899999998509884, + "cpuMs": 20, + "bytes": 484, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.400000002235174, + "parseMs": 3.2000000029802322, + "cpuMs": 20, + "bytes": 483, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.200000002980232, + "parseMs": 3.900000002235174, + "cpuMs": 10, + "bytes": 482, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.199999999254942, + "parseMs": 3.800000000745058, + "cpuMs": 0, + "bytes": 493, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.700000002980232, + "parseMs": 4.200000002980232, + "cpuMs": 10, + "bytes": 492, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 3.5, + "cpuMs": 0, + "bytes": 491, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.699999999254942, + "parseMs": 3.2999999970197678, + "cpuMs": 20, + "bytes": 490, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.099999997764826, + "parseMs": 4.899999998509884, + "cpuMs": 0, + "bytes": 489, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 3.600000001490116, + "cpuMs": 10, + "bytes": 488, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.300000000745058, + "parseMs": 3.100000001490116, + "cpuMs": 0, + "bytes": 487, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.800000000745058, + "parseMs": 3.100000001490116, + "cpuMs": 10, + "bytes": 486, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.699999999254942, + "parseMs": 3.5, + "cpuMs": 0, + "bytes": 485, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.400000002235174, + "parseMs": 3, + "cpuMs": 10, + "bytes": 484, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 2.900000002235174, + "cpuMs": 0, + "bytes": 483, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.5, + "parseMs": 3.199999999254942, + "cpuMs": 10, + "bytes": 482, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 3, + "cpuMs": 10, + "bytes": 493, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.5, + "parseMs": 3.099999997764826, + "cpuMs": 10, + "bytes": 492, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.5, + "parseMs": 3.199999999254942, + "cpuMs": 0, + "bytes": 491, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.200000002980232, + "parseMs": 4.800000000745058, + "cpuMs": 0, + "bytes": 490, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 2.899999998509884, + "cpuMs": 10, + "bytes": 489, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.5, + "parseMs": 3.2000000029802322, + "cpuMs": 0, + "bytes": 488, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.300000000745058, + "parseMs": 2.899999998509884, + "cpuMs": 10, + "bytes": 487, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.399999998509884, + "parseMs": 3, + "cpuMs": 0, + "bytes": 486, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.699999999254942, + "parseMs": 3.199999999254942, + "cpuMs": 10, + "bytes": 485, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.699999999254942, + "parseMs": 3.300000000745058, + "cpuMs": 0, + "bytes": 484, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.699999999254942, + "parseMs": 3.100000001490116, + "cpuMs": 0, + "bytes": 483, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.100000001490116, + "parseMs": 2.900000002235174, + "cpuMs": 10, + "bytes": 482, + "streaming": false + } + ], + "enter (composer)": [ + { + "ok": true, + "pre": false, + "ms": 15.100000001490116, + "parseMs": 4.800000000745058, + "cpuMs": 140, + "bytes": 1163, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 4.600000001490116, + "cpuMs": 50, + "bytes": 2075, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.199999999254942, + "parseMs": 4.699999999254942, + "cpuMs": 100, + "bytes": 2075, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.400000002235174, + "parseMs": 4.800000000745058, + "cpuMs": 50, + "bytes": 2075, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.900000002235174, + "parseMs": 4.400000002235174, + "cpuMs": 90, + "bytes": 2075, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 5.099999997764826, + "cpuMs": 50, + "bytes": 2075, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 5.300000000745058, + "cpuMs": 60, + "bytes": 2075, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.799999997019768, + "parseMs": 6.299999997019768, + "cpuMs": 50, + "bytes": 2075, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.100000001490116, + "parseMs": 5.699999999254942, + "cpuMs": 60, + "bytes": 2075, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.5, + "parseMs": 5.099999997764826, + "cpuMs": 50, + "bytes": 2075, + "streaming": false + } + ], + "arrow (model menu)": [ + { + "ok": true, + "pre": false, + "ms": 82, + "parseMs": 79.89999999850988, + "cpuMs": 10, + "bytes": 1940, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 7.199999999254942, + "cpuMs": 30, + "bytes": 1969, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.300000000745058, + "parseMs": 5.800000000745058, + "cpuMs": 0, + "bytes": 1964, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.5, + "parseMs": 6, + "cpuMs": 10, + "bytes": 1969, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 6.699999999254942, + "cpuMs": 0, + "bytes": 1964, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.399999998509884, + "parseMs": 6, + "cpuMs": 10, + "bytes": 1969, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.5, + "parseMs": 5.800000000745058, + "cpuMs": 10, + "bytes": 1964, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.800000000745058, + "parseMs": 6.399999998509884, + "cpuMs": 10, + "bytes": 1969, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.599999997764826, + "parseMs": 6, + "cpuMs": 0, + "bytes": 1964, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.099999997764826, + "parseMs": 8.599999997764826, + "cpuMs": 20, + "bytes": 1969, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 16.100000001490116, + "parseMs": 5.5, + "cpuMs": 0, + "bytes": 1964, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 5.199999999254942, + "cpuMs": 20, + "bytes": 1969, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.399999998509884, + "parseMs": 6.899999998509884, + "cpuMs": 0, + "bytes": 1964, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.5, + "parseMs": 7, + "cpuMs": 10, + "bytes": 1969, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.900000002235174, + "parseMs": 5.400000002235174, + "cpuMs": 0, + "bytes": 1964, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.300000000745058, + "parseMs": 5.800000000745058, + "cpuMs": 10, + "bytes": 1969, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 7.5, + "cpuMs": 10, + "bytes": 1964, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.5, + "parseMs": 6.599999997764826, + "cpuMs": 10, + "bytes": 1969, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.599999997764826, + "parseMs": 7, + "cpuMs": 10, + "bytes": 1964, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 6.599999997764826, + "cpuMs": 0, + "bytes": 1969, + "streaming": false + } + ], + "arrow (resume menu)": [ + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 9, + "cpuMs": 20, + "bytes": 3101, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.400000002235174, + "parseMs": 7.800000000745058, + "cpuMs": 10, + "bytes": 3101, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 7.299999997019768, + "cpuMs": 0, + "bytes": 3101, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.300000000745058, + "parseMs": 7.400000002235174, + "cpuMs": 10, + "bytes": 3101, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.600000001490116, + "parseMs": 7.899999998509884, + "cpuMs": 0, + "bytes": 3101, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.800000000745058, + "parseMs": 7.100000001490116, + "cpuMs": 10, + "bytes": 3101, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.300000000745058, + "parseMs": 6.700000002980232, + "cpuMs": 10, + "bytes": 3101, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.5, + "parseMs": 6.899999998509884, + "cpuMs": 0, + "bytes": 3101, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 7.299999997019768, + "cpuMs": 0, + "bytes": 3101, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.399999998509884, + "parseMs": 6.699999999254942, + "cpuMs": 10, + "bytes": 3101, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.699999999254942, + "parseMs": 7.099999997764826, + "cpuMs": 10, + "bytes": 3101, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.300000000745058, + "parseMs": 6.600000001490116, + "cpuMs": 0, + "bytes": 3101, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 7.100000001490116, + "cpuMs": 20, + "bytes": 3101, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.399999998509884, + "parseMs": 6.899999998509884, + "cpuMs": 0, + "bytes": 3101, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.799999997019768, + "parseMs": 6.199999999254942, + "cpuMs": 10, + "bytes": 3101, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.5, + "parseMs": 6.800000000745058, + "cpuMs": 0, + "bytes": 3101, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.400000002235174, + "parseMs": 6.900000002235174, + "cpuMs": 10, + "bytes": 3101, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.099999997764826, + "parseMs": 6.399999998509884, + "cpuMs": 0, + "bytes": 3101, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 6.199999999254942, + "cpuMs": 10, + "bytes": 3101, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.5, + "parseMs": 6.899999998509884, + "cpuMs": 10, + "bytes": 3101, + "streaming": false + } + ], + "ctrl+o": [ + { + "ok": true, + "pre": false, + "ms": 9.800000000745058, + "parseMs": 7.399999998509884, + "cpuMs": 10, + "bytes": 3885, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 10.600000001490116, + "parseMs": 7.200000002980232, + "cpuMs": 10, + "bytes": 1916, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 10.399999998509884, + "parseMs": 6.699999999254942, + "cpuMs": 10, + "bytes": 1916, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 9.699999999254942, + "parseMs": 7.199999999254942, + "cpuMs": 10, + "bytes": 1916, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 11.5, + "parseMs": 9.100000001490116, + "cpuMs": 20, + "bytes": 1916, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 11.5, + "parseMs": 7.100000001490116, + "cpuMs": 10, + "bytes": 1916, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 10.699999999254942, + "parseMs": 7.199999999254942, + "cpuMs": 10, + "bytes": 1916, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 12, + "parseMs": 7.5, + "cpuMs": 10, + "bytes": 1916, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 10.800000000745058, + "parseMs": 9.199999999254942, + "cpuMs": 10, + "bytes": 1916, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 10.899999998509884, + "parseMs": 9.300000000745058, + "cpuMs": 20, + "bytes": 1916, + "streaming": false + } + ], + "shift+tab": [ + { + "ok": true, + "pre": false, + "ms": 11.800000000745058, + "parseMs": 7.400000002235174, + "cpuMs": 10, + "bytes": 1992, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 11.099999997764826, + "parseMs": 6.699999999254942, + "cpuMs": 10, + "bytes": 1992, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 10.200000002980232, + "parseMs": 6.800000000745058, + "cpuMs": 10, + "bytes": 1992, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 9.400000002235174, + "parseMs": 6.900000002235174, + "cpuMs": 10, + "bytes": 1992, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 10.899999998509884, + "parseMs": 6.5, + "cpuMs": 0, + "bytes": 1992, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 16.599999997764826, + "parseMs": 16.199999999254942, + "cpuMs": 10, + "bytes": 1992, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 10.699999999254942, + "parseMs": 7.199999999254942, + "cpuMs": 0, + "bytes": 1992, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 10.200000002980232, + "parseMs": 8.700000002980232, + "cpuMs": 10, + "bytes": 1992, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 10.300000000745058, + "parseMs": 6.800000000745058, + "cpuMs": 0, + "bytes": 1992, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 10.799999997019768, + "parseMs": 7.299999997019768, + "cpuMs": 0, + "bytes": 1992, + "streaming": false + } + ], + "open /model": [ + { + "ok": true, + "pre": false, + "ms": 14.099999997764826, + "parseMs": 6.599999997764826, + "cpuMs": 30, + "bytes": 2616, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.700000002980232, + "parseMs": 7.300000000745058, + "cpuMs": 10, + "bytes": 2616, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 6.800000000745058, + "cpuMs": 20, + "bytes": 2616, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.099999997764826, + "parseMs": 6.599999997764826, + "cpuMs": 30, + "bytes": 2616, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14, + "parseMs": 6.600000001490116, + "cpuMs": 20, + "bytes": 2616, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.699999999254942, + "parseMs": 7.299999997019768, + "cpuMs": 0, + "bytes": 2616, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.400000002235174, + "parseMs": 7, + "cpuMs": 10, + "bytes": 2616, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 13.899999998509884, + "parseMs": 11.5, + "cpuMs": 40, + "bytes": 2616, + "streaming": false + } + ], + "open /settings": [ + { + "ok": true, + "pre": false, + "ms": 14.699999999254942, + "parseMs": 8.699999999254942, + "cpuMs": 190, + "bytes": 6939, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.100000001490116, + "parseMs": 7, + "cpuMs": 60, + "bytes": 6939, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 7.399999998509884, + "cpuMs": 140, + "bytes": 6939, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 6.399999998509884, + "cpuMs": 20, + "bytes": 6939, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.300000000745058, + "parseMs": 6.699999999254942, + "cpuMs": 30, + "bytes": 6939, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 6.599999997764826, + "cpuMs": 30, + "bytes": 6939, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 6.199999999254942, + "cpuMs": 150, + "bytes": 6939, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.699999999254942, + "parseMs": 6.899999998509884, + "cpuMs": 30, + "bytes": 6939, + "streaming": false + } + ], + "scroll (resume page down/up)": [ + { + "ok": true, + "pre": false, + "ms": 15.699999999254942, + "parseMs": 7.100000001490116, + "cpuMs": 0, + "bytes": 3101, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 7.099999997764826, + "cpuMs": 10, + "bytes": 3101, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.600000001490116, + "parseMs": 6.900000002235174, + "cpuMs": 10, + "bytes": 3101, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 6.5, + "cpuMs": 0, + "bytes": 3101, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 6.300000000745058, + "cpuMs": 10, + "bytes": 3101, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.300000000745058, + "parseMs": 6.600000001490116, + "cpuMs": 10, + "bytes": 3101, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.100000001490116, + "parseMs": 6.5, + "cpuMs": 10, + "bytes": 3101, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 6.600000001490116, + "cpuMs": 20, + "bytes": 3101, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 6.599999997764826, + "cpuMs": 0, + "bytes": 3101, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.699999999254942, + "parseMs": 6.100000001490116, + "cpuMs": 10, + "bytes": 3101, + "streaming": false + } + ] + }, + "next": { + "type char": [ + { + "ok": true, + "pre": false, + "ms": 14.900000002235174, + "parseMs": 12.900000002235174, + "cpuMs": 50, + "bytes": 580, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.5, + "parseMs": 5.099999997764826, + "cpuMs": 10, + "bytes": 581, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.399999998509884, + "parseMs": 5.099999997764826, + "cpuMs": 10, + "bytes": 582, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 13.5, + "parseMs": 9.099999997764826, + "cpuMs": 40, + "bytes": 583, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 5.300000000745058, + "cpuMs": 10, + "bytes": 584, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.699999999254942, + "parseMs": 5.300000000745058, + "cpuMs": 10, + "bytes": 585, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.5, + "parseMs": 5.600000001490116, + "cpuMs": 20, + "bytes": 586, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.399999998509884, + "parseMs": 5.899999998509884, + "cpuMs": 10, + "bytes": 587, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.5, + "parseMs": 5, + "cpuMs": 0, + "bytes": 588, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 4.100000001490116, + "cpuMs": 10, + "bytes": 589, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.600000001490116, + "parseMs": 4.100000001490116, + "cpuMs": 10, + "bytes": 590, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 4.399999998509884, + "cpuMs": 10, + "bytes": 591, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 13.5, + "parseMs": 5.100000001490116, + "cpuMs": 0, + "bytes": 580, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 3.7999999970197678, + "cpuMs": 10, + "bytes": 581, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 4.100000001490116, + "cpuMs": 0, + "bytes": 582, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 5.899999998509884, + "cpuMs": 10, + "bytes": 583, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 8.399999998509884, + "cpuMs": 30, + "bytes": 584, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 4.5, + "cpuMs": 0, + "bytes": 585, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.400000002235174, + "parseMs": 3.900000002235174, + "cpuMs": 10, + "bytes": 586, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.399999998509884, + "parseMs": 5, + "cpuMs": 10, + "bytes": 587, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 3.800000000745058, + "cpuMs": 0, + "bytes": 588, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.199999999254942, + "parseMs": 3.7999999970197678, + "cpuMs": 10, + "bytes": 589, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.399999998509884, + "parseMs": 3.699999999254942, + "cpuMs": 10, + "bytes": 590, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.399999998509884, + "parseMs": 4.099999997764826, + "cpuMs": 0, + "bytes": 591, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.699999999254942, + "parseMs": 4.199999999254942, + "cpuMs": 10, + "bytes": 580, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 3.699999999254942, + "cpuMs": 0, + "bytes": 581, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.900000002235174, + "parseMs": 3.5, + "cpuMs": 10, + "bytes": 582, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.400000002235174, + "parseMs": 4.100000001490116, + "cpuMs": 0, + "bytes": 583, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 3.5, + "cpuMs": 10, + "bytes": 584, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.099999997764826, + "parseMs": 3.699999999254942, + "cpuMs": 0, + "bytes": 585, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 3.600000001490116, + "cpuMs": 10, + "bytes": 586, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 3.600000001490116, + "cpuMs": 10, + "bytes": 587, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.300000000745058, + "parseMs": 3.900000002235174, + "cpuMs": 0, + "bytes": 588, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.900000002235174, + "parseMs": 3.400000002235174, + "cpuMs": 10, + "bytes": 589, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.400000002235174, + "parseMs": 3.800000000745058, + "cpuMs": 0, + "bytes": 590, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.199999999254942, + "parseMs": 3.699999999254942, + "cpuMs": 30, + "bytes": 591, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 4.5, + "cpuMs": 10, + "bytes": 580, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.599999997764826, + "parseMs": 4.199999999254942, + "cpuMs": 0, + "bytes": 581, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.900000002235174, + "parseMs": 4.200000002980232, + "cpuMs": 10, + "bytes": 582, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 3.7999999970197678, + "cpuMs": 0, + "bytes": 583, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.100000001490116, + "parseMs": 3.800000000745058, + "cpuMs": 10, + "bytes": 584, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.099999997764826, + "parseMs": 3.699999999254942, + "cpuMs": 10, + "bytes": 585, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 3.699999999254942, + "cpuMs": 0, + "bytes": 586, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 3.7000000029802322, + "cpuMs": 10, + "bytes": 587, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.100000001490116, + "parseMs": 3.899999998509884, + "cpuMs": 0, + "bytes": 588, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.100000001490116, + "parseMs": 5, + "cpuMs": 10, + "bytes": 589, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.300000000745058, + "parseMs": 3.900000002235174, + "cpuMs": 0, + "bytes": 590, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.900000002235174, + "parseMs": 3.699999999254942, + "cpuMs": 10, + "bytes": 591, + "streaming": false + } + ], + "backspace": [ + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 4.200000002980232, + "cpuMs": 10, + "bytes": 590, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.5, + "parseMs": 4.099999997764826, + "cpuMs": 0, + "bytes": 589, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.400000002235174, + "parseMs": 3.800000000745058, + "cpuMs": 0, + "bytes": 588, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.399999998509884, + "parseMs": 3.899999998509884, + "cpuMs": 10, + "bytes": 587, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14, + "parseMs": 4.600000001490116, + "cpuMs": 10, + "bytes": 586, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.100000001490116, + "parseMs": 11.5, + "cpuMs": 10, + "bytes": 585, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.399999998509884, + "parseMs": 5.099999997764826, + "cpuMs": 10, + "bytes": 584, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.300000000745058, + "parseMs": 5.800000000745058, + "cpuMs": 10, + "bytes": 583, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.399999998509884, + "parseMs": 4.899999998509884, + "cpuMs": 10, + "bytes": 582, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.300000000745058, + "parseMs": 3.800000000745058, + "cpuMs": 10, + "bytes": 581, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.699999999254942, + "parseMs": 5.199999999254942, + "cpuMs": 0, + "bytes": 580, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.599999997764826, + "parseMs": 6.199999999254942, + "cpuMs": 10, + "bytes": 579, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.599999997764826, + "parseMs": 3.899999998509884, + "cpuMs": 10, + "bytes": 590, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.600000001490116, + "parseMs": 4.200000002980232, + "cpuMs": 10, + "bytes": 589, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.399999998509884, + "parseMs": 4, + "cpuMs": 0, + "bytes": 588, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.199999999254942, + "parseMs": 3.800000000745058, + "cpuMs": 10, + "bytes": 587, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.5, + "parseMs": 4, + "cpuMs": 0, + "bytes": 586, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 3.800000000745058, + "cpuMs": 10, + "bytes": 585, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.400000002235174, + "parseMs": 4.199999999254942, + "cpuMs": 10, + "bytes": 584, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.099999997764826, + "parseMs": 3.5, + "cpuMs": 0, + "bytes": 583, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 4.300000000745058, + "cpuMs": 0, + "bytes": 582, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.300000000745058, + "parseMs": 3.900000002235174, + "cpuMs": 20, + "bytes": 581, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.5, + "parseMs": 4, + "cpuMs": 0, + "bytes": 580, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.599999997764826, + "parseMs": 5.199999999254942, + "cpuMs": 20, + "bytes": 579, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 4.300000000745058, + "cpuMs": 0, + "bytes": 590, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.100000001490116, + "parseMs": 3.699999999254942, + "cpuMs": 10, + "bytes": 589, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.5, + "parseMs": 3.800000000745058, + "cpuMs": 0, + "bytes": 588, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 3.599999997764826, + "cpuMs": 0, + "bytes": 587, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.100000001490116, + "parseMs": 3.600000001490116, + "cpuMs": 10, + "bytes": 586, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.100000001490116, + "parseMs": 3.600000001490116, + "cpuMs": 0, + "bytes": 585, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.300000000745058, + "parseMs": 5, + "cpuMs": 10, + "bytes": 584, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.100000001490116, + "parseMs": 3.600000001490116, + "cpuMs": 0, + "bytes": 583, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.5, + "parseMs": 4.899999998509884, + "cpuMs": 10, + "bytes": 582, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.300000000745058, + "parseMs": 3.800000000745058, + "cpuMs": 10, + "bytes": 581, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 3.400000002235174, + "cpuMs": 0, + "bytes": 580, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 3.300000000745058, + "cpuMs": 0, + "bytes": 579, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.300000000745058, + "parseMs": 3.800000000745058, + "cpuMs": 10, + "bytes": 590, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.300000000745058, + "parseMs": 3.699999999254942, + "cpuMs": 10, + "bytes": 589, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.300000000745058, + "parseMs": 3.900000002235174, + "cpuMs": 0, + "bytes": 588, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.699999999254942, + "parseMs": 4.400000002235174, + "cpuMs": 10, + "bytes": 587, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 3.699999999254942, + "cpuMs": 0, + "bytes": 586, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.100000001490116, + "parseMs": 3.5, + "cpuMs": 0, + "bytes": 585, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 3.600000001490116, + "cpuMs": 10, + "bytes": 584, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.400000002235174, + "parseMs": 4, + "cpuMs": 30, + "bytes": 583, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 4.399999998509884, + "cpuMs": 10, + "bytes": 582, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 3.699999999254942, + "cpuMs": 0, + "bytes": 581, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.099999997764826, + "parseMs": 3.5, + "cpuMs": 0, + "bytes": 580, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.900000002235174, + "parseMs": 3.400000002235174, + "cpuMs": 10, + "bytes": 579, + "streaming": false + } + ], + "enter (composer)": [ + { + "ok": true, + "pre": false, + "ms": 14.100000001490116, + "parseMs": 5.5, + "cpuMs": 120, + "bytes": 1935, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.799999997019768, + "parseMs": 5.199999999254942, + "cpuMs": 50, + "bytes": 1974, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 5.400000002235174, + "cpuMs": 90, + "bytes": 1976, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.100000001490116, + "parseMs": 4.800000000745058, + "cpuMs": 40, + "bytes": 1989, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 4.899999998509884, + "cpuMs": 30, + "bytes": 1989, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.5, + "parseMs": 4.699999999254942, + "cpuMs": 30, + "bytes": 1989, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.399999998509884, + "parseMs": 6.899999998509884, + "cpuMs": 40, + "bytes": 1976, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.699999999254942, + "parseMs": 5.199999999254942, + "cpuMs": 30, + "bytes": 1989, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.600000001490116, + "parseMs": 7, + "cpuMs": 40, + "bytes": 1977, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.300000000745058, + "parseMs": 10.800000000745058, + "cpuMs": 30, + "bytes": 1992, + "streaming": false + } + ], + "arrow (model menu)": [ + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 10, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 30, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 0, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 10, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 160, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 170, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 20, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 20, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 10, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 0, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 10, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 10, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 0, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 10, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 10, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 0, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 10, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 0, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 10, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 0, + "bytes": 0, + "streaming": false + } + ], + "arrow (resume menu)": [ + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + } + ], + "ctrl+o": [ + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 40, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 150, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 270, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 10, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 20, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 10, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 10, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 20, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 10, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 10, + "bytes": 0, + "streaming": false + } + ], + "shift+tab": [ + { + "ok": true, + "pre": false, + "ms": 47.69999999925494, + "parseMs": 46.29999999701977, + "cpuMs": 50, + "bytes": 620, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 30.799999997019768, + "parseMs": 30.5, + "cpuMs": 150, + "bytes": 628, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 29.399999998509884, + "parseMs": 29.199999999254942, + "cpuMs": 40, + "bytes": 628, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 27.400000002235174, + "parseMs": 27.200000002980232, + "cpuMs": 30, + "bytes": 628, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 25, + "parseMs": 24.599999997764826, + "cpuMs": 30, + "bytes": 628, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 29.400000002235174, + "parseMs": 28.900000002235174, + "cpuMs": 50, + "bytes": 628, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 28.600000001490116, + "parseMs": 24.300000000745058, + "cpuMs": 50, + "bytes": 628, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 27.5, + "parseMs": 27.199999999254942, + "cpuMs": 30, + "bytes": 628, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 21.199999999254942, + "parseMs": 20.800000000745058, + "cpuMs": 140, + "bytes": 628, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 22.899999998509884, + "parseMs": 22.5, + "cpuMs": 20, + "bytes": 628, + "streaming": false + } + ], + "open /model": [ + { + "ok": true, + "pre": false, + "ms": 15.699999999254942, + "parseMs": 9.199999999254942, + "cpuMs": 20, + "bytes": 1877, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.5, + "parseMs": 7.799999997019768, + "cpuMs": 10, + "bytes": 1869, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 6.900000002235174, + "cpuMs": 20, + "bytes": 1869, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.400000002235174, + "parseMs": 6.800000000745058, + "cpuMs": 10, + "bytes": 1869, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 7.199999999254942, + "cpuMs": 0, + "bytes": 1869, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.599999997764826, + "parseMs": 8.300000000745058, + "cpuMs": 10, + "bytes": 1869, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.199999999254942, + "parseMs": 8.800000000745058, + "cpuMs": 20, + "bytes": 1869, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.300000000745058, + "parseMs": 6.600000001490116, + "cpuMs": 10, + "bytes": 1869, + "streaming": false + } + ], + "open /settings": [ + { + "ok": true, + "pre": false, + "ms": 15.800000000745058, + "parseMs": 14, + "cpuMs": 20, + "bytes": 2827, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.300000000745058, + "parseMs": 10.800000000745058, + "cpuMs": 10, + "bytes": 2827, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.299999997019768, + "parseMs": 9.699999999254942, + "cpuMs": 10, + "bytes": 2827, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.5, + "parseMs": 9.900000002235174, + "cpuMs": 10, + "bytes": 2827, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.600000001490116, + "parseMs": 10.100000001490116, + "cpuMs": 20, + "bytes": 2827, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 9.199999999254942, + "cpuMs": 10, + "bytes": 2827, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.400000002235174, + "parseMs": 10.900000002235174, + "cpuMs": 10, + "bytes": 2827, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.5, + "parseMs": 8, + "cpuMs": 10, + "bytes": 2827, + "streaming": false + } + ], + "scroll (resume page down/up)": [ + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + } + ] + } + } + }, + "streaming": { + "legacy": { + "type char": { + "n": 48, + "ok": 48, + "missed": 0, + "pre": 0, + "p50": 27.199999999254942, + "p95": 47.20000000298023, + "max": 54.100000001490116, + "parseP50": 26.600000001490116, + "cpuMsPerKey": 83.33333333333333, + "bytesPerKey": 34173.9375 + }, + "backspace": { + "n": 48, + "ok": 48, + "missed": 0, + "pre": 0, + "p50": 29.300000000745058, + "p95": 45, + "max": 60.19999999925494, + "parseP50": 28.5, + "cpuMsPerKey": 77.5, + "bytesPerKey": 39564.1875 + }, + "enter (composer)": { + "n": 10, + "ok": 10, + "missed": 0, + "pre": 0, + "p50": 35.80000000074506, + "p95": 41.30000000074506, + "max": 41.30000000074506, + "parseP50": 33.80000000074506, + "cpuMsPerKey": 55, + "bytesPerKey": 60114 + }, + "arrow (model menu)": { + "n": 20, + "ok": 20, + "missed": 0, + "pre": 0, + "p50": 28.899999998509884, + "p95": 47.5, + "max": 59.80000000074506, + "parseP50": 24.699999999254942, + "cpuMsPerKey": 78.5, + "bytesPerKey": 105810.55 + }, + "arrow (resume menu)": { + "n": 20, + "ok": 0, + "missed": 20, + "pre": 0, + "p50": null, + "p95": null, + "max": null, + "parseP50": null, + "cpuMsPerKey": null, + "bytesPerKey": null + }, + "ctrl+o": { + "n": 10, + "ok": 10, + "missed": 0, + "pre": 0, + "p50": 32, + "p95": 54.5, + "max": 54.5, + "parseP50": 11.599999997764826, + "cpuMsPerKey": 64, + "bytesPerKey": 175554.8 + }, + "shift+tab": { + "n": 10, + "ok": 10, + "missed": 0, + "pre": 0, + "p50": 22.800000000745058, + "p95": 49.19999999925494, + "max": 49.19999999925494, + "parseP50": 15.300000000745058, + "cpuMsPerKey": 90, + "bytesPerKey": 192095.9 + }, + "open /model": { + "n": 8, + "ok": 8, + "missed": 0, + "pre": 0, + "p50": 33, + "p95": 59.80000000074506, + "max": 59.80000000074506, + "parseP50": 20.199999999254942, + "cpuMsPerKey": 92.5, + "bytesPerKey": 239239.75 + }, + "open /settings": { + "n": 8, + "ok": 8, + "missed": 0, + "pre": 0, + "p50": 47.79999999701977, + "p95": 72.39999999850988, + "max": 72.39999999850988, + "parseP50": 13.099999997764826, + "cpuMsPerKey": 131.25, + "bytesPerKey": 424611 + }, + "scroll (resume page down/up)": { + "n": 10, + "ok": 0, + "missed": 10, + "pre": 0, + "p50": null, + "p95": null, + "max": null, + "parseP50": null, + "cpuMsPerKey": null, + "bytesPerKey": null + } + }, + "next": { + "type char": { + "n": 48, + "ok": 48, + "missed": 0, + "pre": 0, + "p50": 19.899999998509884, + "p95": 34.599999997764826, + "max": 40.69999999925494, + "parseP50": 19.399999998509884, + "cpuMsPerKey": 46.041666666666664, + "bytesPerKey": 6633.979166666667 + }, + "backspace": { + "n": 48, + "ok": 48, + "missed": 0, + "pre": 0, + "p50": 19.5, + "p95": 30.100000001490116, + "max": 33.900000002235174, + "parseP50": 19.099999997764826, + "cpuMsPerKey": 52.083333333333336, + "bytesPerKey": 7089.395833333333 + }, + "enter (composer)": { + "n": 10, + "ok": 10, + "missed": 0, + "pre": 0, + "p50": 32.100000001490116, + "p95": 40.80000000074506, + "max": 40.80000000074506, + "parseP50": 31.300000000745058, + "cpuMsPerKey": 57, + "bytesPerKey": 2383.5 + }, + "arrow (model menu)": { + "n": 20, + "ok": 0, + "missed": 20, + "pre": 0, + "p50": null, + "p95": null, + "max": null, + "parseP50": null, + "cpuMsPerKey": 1781.5, + "bytesPerKey": 438635.4 + }, + "arrow (resume menu)": { + "n": 20, + "ok": 0, + "missed": 20, + "pre": 0, + "p50": null, + "p95": null, + "max": null, + "parseP50": null, + "cpuMsPerKey": null, + "bytesPerKey": null + }, + "ctrl+o": { + "n": 10, + "ok": 10, + "missed": 0, + "pre": 0, + "p50": 16.600000001490116, + "p95": 138.70000000298023, + "max": 138.70000000298023, + "parseP50": 15.200000002980232, + "cpuMsPerKey": 45, + "bytesPerKey": 4445 + }, + "shift+tab": { + "n": 10, + "ok": 3, + "missed": 7, + "pre": 0, + "p50": 15.5, + "p95": 73.89999999850988, + "max": 73.89999999850988, + "parseP50": 14.900000002235174, + "cpuMsPerKey": 1288, + "bytesPerKey": 215151.8 + }, + "open /model": { + "n": 8, + "ok": 8, + "missed": 0, + "pre": 0, + "p50": 33.5, + "p95": 45.19999999925494, + "max": 45.19999999925494, + "parseP50": 29.400000002235174, + "cpuMsPerKey": 61.25, + "bytesPerKey": 30051.375 + }, + "open /settings": { + "n": 8, + "ok": 8, + "missed": 0, + "pre": 0, + "p50": 39.599999997764826, + "p95": 48.79999999701977, + "max": 48.79999999701977, + "parseP50": 37.599999997764826, + "cpuMsPerKey": 46.25, + "bytesPerKey": 102809.75 + }, + "scroll (resume page down/up)": { + "n": 10, + "ok": 0, + "missed": 10, + "pre": 0, + "p50": null, + "p95": null, + "max": null, + "parseP50": null, + "cpuMsPerKey": null, + "bytesPerKey": null + } + }, + "gate": { + "type char": { + "pass": true, + "reasons": [] + }, + "backspace": { + "pass": true, + "reasons": [] + }, + "enter (composer)": { + "pass": true, + "reasons": [] + }, + "arrow (model menu)": { + "pass": false, + "reasons": ["no matching paint (legacy painted)", "20 key(s) never painted the change (legacy 0)"] + }, + "arrow (resume menu)": { + "pass": true, + "na": true, + "reasons": ["neither CLI painted a change"] + }, + "ctrl+o": { + "pass": false, + "reasons": ["p95 over 1.2x / +5 ms"] + }, + "shift+tab": { + "pass": false, + "reasons": ["7 key(s) never painted the change (legacy 0)", "p95 over 1.2x / +5 ms"] + }, + "open /model": { + "pass": true, + "reasons": [] + }, + "open /settings": { + "pass": true, + "reasons": [] + }, + "scroll (resume page down/up)": { + "pass": true, + "na": true, + "reasons": ["neither CLI painted a change"] + } + }, + "raw": { + "legacy": { + "type char": [ + { + "ok": true, + "pre": false, + "ms": 35.69999999925494, + "parseMs": 35.400000002235174, + "cpuMs": 50, + "bytes": 3882, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.400000002235174, + "parseMs": 18.700000002980232, + "cpuMs": 60, + "bytes": 3330, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 16.899999998509884, + "parseMs": 16.699999999254942, + "cpuMs": 130, + "bytes": 5035, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 16.300000000745058, + "parseMs": 15.899999998509884, + "cpuMs": 50, + "bytes": 5744, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.300000000745058, + "parseMs": 18.800000000745058, + "cpuMs": 40, + "bytes": 6383, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 16.899999998509884, + "parseMs": 16.5, + "cpuMs": 40, + "bytes": 6994, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.799999997019768, + "parseMs": 20.5, + "cpuMs": 30, + "bytes": 7743, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 21, + "parseMs": 20.599999997764826, + "cpuMs": 40, + "bytes": 8335, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 17.100000001490116, + "parseMs": 16.800000000745058, + "cpuMs": 30, + "bytes": 9060, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.300000000745058, + "parseMs": 19.900000002235174, + "cpuMs": 30, + "bytes": 7281, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 21.5, + "parseMs": 21.099999997764826, + "cpuMs": 30, + "bytes": 10371, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 24.699999999254942, + "parseMs": 24.099999997764826, + "cpuMs": 50, + "bytes": 15169, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 32.69999999925494, + "parseMs": 31.799999997019768, + "cpuMs": 70, + "bytes": 23831, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.599999997764826, + "parseMs": 19.099999997764826, + "cpuMs": 50, + "bytes": 24480, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 32.600000001490116, + "parseMs": 31.100000001490116, + "cpuMs": 50, + "bytes": 25035, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 18.799999997019768, + "parseMs": 18.199999999254942, + "cpuMs": 70, + "bytes": 25691, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 28.400000002235174, + "parseMs": 27.800000000745058, + "cpuMs": 60, + "bytes": 26265, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 12.5, + "parseMs": 11.900000002235174, + "cpuMs": 70, + "bytes": 26920, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 26, + "parseMs": 25.600000001490116, + "cpuMs": 60, + "bytes": 27488, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 30.200000002980232, + "parseMs": 29.700000002980232, + "cpuMs": 60, + "bytes": 28125, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.699999999254942, + "parseMs": 19.099999997764826, + "cpuMs": 60, + "bytes": 28687, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 31.400000002235174, + "parseMs": 30.800000000745058, + "cpuMs": 60, + "bytes": 29342, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 37.30000000074506, + "parseMs": 36.600000001490116, + "cpuMs": 60, + "bytes": 30003, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 17.899999998509884, + "parseMs": 17.099999997764826, + "cpuMs": 60, + "bytes": 30640, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 29.400000002235174, + "parseMs": 28.700000002980232, + "cpuMs": 70, + "bytes": 40588, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 15.599999997764826, + "parseMs": 12.5, + "cpuMs": 90, + "bytes": 41354, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 23.899999998509884, + "parseMs": 23.199999999254942, + "cpuMs": 70, + "bytes": 31509, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 54.100000001490116, + "parseMs": 52.400000002235174, + "cpuMs": 100, + "bytes": 53456, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 18.399999998509884, + "parseMs": 17.199999999254942, + "cpuMs": 70, + "bytes": 43516, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 13.100000001490116, + "parseMs": 12.5, + "cpuMs": 70, + "bytes": 33126, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 46.899999998509884, + "parseMs": 45.69999999925494, + "cpuMs": 70, + "bytes": 44936, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 38.30000000074506, + "parseMs": 37.5, + "cpuMs": 100, + "bytes": 45787, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 35.30000000074506, + "parseMs": 34.5, + "cpuMs": 200, + "bytes": 46546, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 47.20000000298023, + "parseMs": 46.5, + "cpuMs": 70, + "bytes": 47203, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 33.100000001490116, + "parseMs": 31.699999999254942, + "cpuMs": 90, + "bytes": 47964, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 27.199999999254942, + "parseMs": 26.600000001490116, + "cpuMs": 200, + "bytes": 36498, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 35.70000000298023, + "parseMs": 34.70000000298023, + "cpuMs": 120, + "bytes": 59181, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.300000000745058, + "parseMs": 19.5, + "cpuMs": 110, + "bytes": 59944, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 27.100000001490116, + "parseMs": 26.399999998509884, + "cpuMs": 260, + "bytes": 30298, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 40.19999999925494, + "parseMs": 39.5, + "cpuMs": 190, + "bytes": 61374, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 51.30000000074506, + "parseMs": 49.900000002235174, + "cpuMs": 120, + "bytes": 77705, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 32.80000000074506, + "parseMs": 31.900000002235174, + "cpuMs": 100, + "bytes": 62994, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 31.100000001490116, + "parseMs": 29.600000001490116, + "cpuMs": 80, + "bytes": 47724, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 30.899999998509884, + "parseMs": 30.199999999254942, + "cpuMs": 90, + "bytes": 64364, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 41.19999999925494, + "parseMs": 39.899999998509884, + "cpuMs": 90, + "bytes": 65150, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 28.699999999254942, + "parseMs": 28, + "cpuMs": 80, + "bytes": 49362, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 30.100000001490116, + "parseMs": 29.399999998509884, + "cpuMs": 140, + "bytes": 66588, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 32.5, + "parseMs": 31.800000000745058, + "cpuMs": 110, + "bytes": 67348, + "streaming": true + } + ], + "backspace": [ + { + "ok": true, + "pre": false, + "ms": 10.599999997764826, + "parseMs": 10, + "cpuMs": 40, + "bytes": 15816, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 29.300000000745058, + "parseMs": 28.699999999254942, + "cpuMs": 40, + "bytes": 16346, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.600000001490116, + "parseMs": 19.399999998509884, + "cpuMs": 30, + "bytes": 12684, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 21, + "parseMs": 20.5, + "cpuMs": 40, + "bytes": 17559, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 33.400000002235174, + "parseMs": 32.30000000074506, + "cpuMs": 50, + "bytes": 18188, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.699999999254942, + "parseMs": 18.699999999254942, + "cpuMs": 40, + "bytes": 14061, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 16.100000001490116, + "parseMs": 15.400000002235174, + "cpuMs": 50, + "bytes": 19395, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20, + "parseMs": 19.399999998509884, + "cpuMs": 40, + "bytes": 20042, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 30.800000000745058, + "parseMs": 30.099999997764826, + "cpuMs": 50, + "bytes": 20585, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 22.600000001490116, + "parseMs": 19.300000000745058, + "cpuMs": 40, + "bytes": 21240, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 17.300000000745058, + "parseMs": 16.800000000745058, + "cpuMs": 60, + "bytes": 21797, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 17.199999999254942, + "parseMs": 16.599999997764826, + "cpuMs": 50, + "bytes": 22420, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 9.900000002235174, + "parseMs": 9.400000002235174, + "cpuMs": 60, + "bytes": 31206, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 30.800000000745058, + "parseMs": 30.300000000745058, + "cpuMs": 60, + "bytes": 31761, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 40.80000000074506, + "parseMs": 40.20000000298023, + "cpuMs": 70, + "bytes": 40483, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 31.699999999254942, + "parseMs": 31.199999999254942, + "cpuMs": 70, + "bytes": 33200, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 31.900000002235174, + "parseMs": 31.300000000745058, + "cpuMs": 70, + "bytes": 33927, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.399999998509884, + "parseMs": 18.899999998509884, + "cpuMs": 70, + "bytes": 34580, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 42.5, + "parseMs": 41.69999999925494, + "cpuMs": 70, + "bytes": 35440, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 23.799999997019768, + "parseMs": 23.299999997019768, + "cpuMs": 60, + "bytes": 27078, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 24.399999998509884, + "parseMs": 23.799999997019768, + "cpuMs": 70, + "bytes": 36713, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 45, + "parseMs": 44.400000002235174, + "cpuMs": 80, + "bytes": 37581, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 12.899999998509884, + "parseMs": 12.199999999254942, + "cpuMs": 70, + "bytes": 28691, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 26.600000001490116, + "parseMs": 24, + "cpuMs": 60, + "bytes": 38952, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 60.19999999925494, + "parseMs": 59.400000002235174, + "cpuMs": 110, + "bytes": 61963, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 27.799999997019768, + "parseMs": 27.299999997019768, + "cpuMs": 70, + "bytes": 50253, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 30.199999999254942, + "parseMs": 29.300000000745058, + "cpuMs": 90, + "bytes": 38234, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 29.300000000745058, + "parseMs": 28.699999999254942, + "cpuMs": 110, + "bytes": 51762, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 33.099999997764826, + "parseMs": 28.5, + "cpuMs": 80, + "bytes": 39309, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.399999998509884, + "parseMs": 17.5, + "cpuMs": 90, + "bytes": 39825, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 29.899999998509884, + "parseMs": 28.899999998509884, + "cpuMs": 90, + "bytes": 53894, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 26.399999998509884, + "parseMs": 25.5, + "cpuMs": 80, + "bytes": 40908, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 28.699999999254942, + "parseMs": 28, + "cpuMs": 90, + "bytes": 55275, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 29.5, + "parseMs": 28.900000002235174, + "cpuMs": 90, + "bytes": 56032, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 27.800000000745058, + "parseMs": 27, + "cpuMs": 70, + "bytes": 42507, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 33, + "parseMs": 31.300000000745058, + "cpuMs": 100, + "bytes": 57437, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 54.69999999925494, + "parseMs": 53.599999997764826, + "cpuMs": 120, + "bytes": 51025, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 36.5, + "parseMs": 34.79999999701977, + "cpuMs": 100, + "bytes": 68840, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 32.100000001490116, + "parseMs": 30.800000000745058, + "cpuMs": 110, + "bytes": 52149, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 33.399999998509884, + "parseMs": 32.100000001490116, + "cpuMs": 90, + "bytes": 70277, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 42.099999997764826, + "parseMs": 37.19999999925494, + "cpuMs": 280, + "bytes": 53250, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 26.600000001490116, + "parseMs": 25.800000000745058, + "cpuMs": 120, + "bytes": 71820, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 29.5, + "parseMs": 28.700000002980232, + "cpuMs": 80, + "bytes": 54348, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 31.700000002980232, + "parseMs": 30.600000001490116, + "cpuMs": 100, + "bytes": 73228, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 27.5, + "parseMs": 26.899999998509884, + "cpuMs": 100, + "bytes": 73980, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 39.30000000074506, + "parseMs": 38.69999999925494, + "cpuMs": 90, + "bytes": 55978, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 37.099999997764826, + "parseMs": 36.5, + "cpuMs": 120, + "bytes": 56515, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 3.699999999254942, + "parseMs": 3, + "cpuMs": 0, + "bytes": 527, + "streaming": false + } + ], + "enter (composer)": [ + { + "ok": true, + "pre": false, + "ms": 34.600000001490116, + "parseMs": 33.899999998509884, + "cpuMs": 40, + "bytes": 3566, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 33.30000000074506, + "parseMs": 32.69999999925494, + "cpuMs": 40, + "bytes": 6624, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 41.30000000074506, + "parseMs": 0.8000000007450581, + "cpuMs": 60, + "bytes": 10409, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 35.19999999925494, + "parseMs": 34.399999998509884, + "cpuMs": 50, + "bytes": 46688, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 35.80000000074506, + "parseMs": 32.5, + "cpuMs": 50, + "bytes": 84625, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 41.20000000298023, + "parseMs": 37.30000000074506, + "cpuMs": 50, + "bytes": 86341, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 35.399999998509884, + "parseMs": 31.300000000745058, + "cpuMs": 40, + "bytes": 88057, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 41.30000000074506, + "parseMs": 39.600000001490116, + "cpuMs": 90, + "bytes": 89878, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 37.600000001490116, + "parseMs": 33.80000000074506, + "cpuMs": 70, + "bytes": 91606, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 38.19999999925494, + "parseMs": 33.899999998509884, + "cpuMs": 60, + "bytes": 93346, + "streaming": true + } + ], + "arrow (model menu)": [ + { + "ok": true, + "pre": false, + "ms": 18.300000000745058, + "parseMs": 16.400000002235174, + "cpuMs": 70, + "bytes": 82929, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 36.80000000074506, + "parseMs": 32.899999998509884, + "cpuMs": 80, + "bytes": 83460, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 38.900000002235174, + "parseMs": 34.69999999925494, + "cpuMs": 80, + "bytes": 112068, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.800000000745058, + "parseMs": 15.699999999254942, + "cpuMs": 60, + "bytes": 84522, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 59.80000000074506, + "parseMs": 11.300000000745058, + "cpuMs": 70, + "bytes": 113458, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 47.5, + "parseMs": 42.80000000074506, + "cpuMs": 80, + "bytes": 114300, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 27, + "parseMs": 24.699999999254942, + "cpuMs": 80, + "bytes": 115054, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 28.100000001490116, + "parseMs": 24.199999999254942, + "cpuMs": 70, + "bytes": 86766, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 25.599999997764826, + "parseMs": 20.899999998509884, + "cpuMs": 80, + "bytes": 116443, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 27.300000000745058, + "parseMs": 23.400000002235174, + "cpuMs": 70, + "bytes": 117184, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 31.899999998509884, + "parseMs": 27.699999999254942, + "cpuMs": 60, + "bytes": 88368, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 34.399999998509884, + "parseMs": 30.100000001490116, + "cpuMs": 70, + "bytes": 118560, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 28.599999997764826, + "parseMs": 24.399999998509884, + "cpuMs": 100, + "bytes": 119362, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 33, + "parseMs": 28.899999998509884, + "cpuMs": 80, + "bytes": 89982, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 29.900000002235174, + "parseMs": 25.100000001490116, + "cpuMs": 100, + "bytes": 120761, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 30.300000000745058, + "parseMs": 25.900000002235174, + "cpuMs": 100, + "bytes": 121514, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 29.800000000745058, + "parseMs": 25.600000001490116, + "cpuMs": 80, + "bytes": 91626, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 28.899999998509884, + "parseMs": 24.699999999254942, + "cpuMs": 90, + "bytes": 122916, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 27.800000000745058, + "parseMs": 23.699999999254942, + "cpuMs": 90, + "bytes": 123692, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 3.5, + "parseMs": 2.599999997764826, + "cpuMs": 60, + "bytes": 93246, + "streaming": true + } + ], + "arrow (resume menu)": [ + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + } + ], + "ctrl+o": [ + { + "ok": true, + "pre": false, + "ms": 16.199999999254942, + "parseMs": 11.599999997764826, + "cpuMs": 50, + "bytes": 155338, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 32.900000002235174, + "parseMs": 26.400000002235174, + "cpuMs": 70, + "bytes": 157966, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 32.100000001490116, + "parseMs": 30, + "cpuMs": 50, + "bytes": 160570, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 32, + "parseMs": 27.599999997764826, + "cpuMs": 50, + "bytes": 163162, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 16, + "parseMs": 11.399999998509884, + "cpuMs": 70, + "bytes": 165766, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 54.5, + "parseMs": 8.200000002980232, + "cpuMs": 70, + "bytes": 209921, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.899999998509884, + "parseMs": 14.699999999254942, + "cpuMs": 50, + "bytes": 171061, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 52, + "parseMs": 6.100000001490116, + "cpuMs": 90, + "bytes": 216293, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 39.80000000074506, + "parseMs": 35.5, + "cpuMs": 80, + "bytes": 176536, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 28.899999998509884, + "parseMs": 4, + "cpuMs": 60, + "bytes": 178935, + "streaming": true + } + ], + "shift+tab": [ + { + "ok": true, + "pre": false, + "ms": 17.700000002980232, + "parseMs": 12.5, + "cpuMs": 80, + "bytes": 182671, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.300000000745058, + "parseMs": 13.5, + "cpuMs": 80, + "bytes": 184885, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 22.800000000745058, + "parseMs": 3.300000000745058, + "cpuMs": 70, + "bytes": 186397, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 21.100000001490116, + "parseMs": 16.699999999254942, + "cpuMs": 80, + "bytes": 189199, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 22.5, + "parseMs": 18.300000000745058, + "cpuMs": 90, + "bytes": 191413, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 35.5, + "parseMs": 12.5, + "cpuMs": 80, + "bytes": 192937, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 41.100000001490116, + "parseMs": 15.300000000745058, + "cpuMs": 90, + "bytes": 195097, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 49.19999999925494, + "parseMs": 19.799999997019768, + "cpuMs": 110, + "bytes": 197300, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 40.099999997764826, + "parseMs": 17, + "cpuMs": 110, + "bytes": 199444, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 43.100000001490116, + "parseMs": 19.600000001490116, + "cpuMs": 110, + "bytes": 201616, + "streaming": true + } + ], + "open /model": [ + { + "ok": true, + "pre": false, + "ms": 33.5, + "parseMs": 32.70000000298023, + "cpuMs": 60, + "bytes": 6936, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 59.80000000074506, + "parseMs": 11.800000000745058, + "cpuMs": 70, + "bytes": 293249, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 24, + "parseMs": 16.699999999254942, + "cpuMs": 80, + "bytes": 250211, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 23.699999999254942, + "parseMs": 20.800000000745058, + "cpuMs": 90, + "bytes": 267791, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 41.400000002235174, + "parseMs": 37.400000002235174, + "cpuMs": 170, + "bytes": 143018, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 27.199999999254942, + "parseMs": 20.199999999254942, + "cpuMs": 70, + "bytes": 301172, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 33, + "parseMs": 9.100000001490116, + "cpuMs": 90, + "bytes": 316607, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 45.80000000074506, + "parseMs": 39.30000000074506, + "cpuMs": 110, + "bytes": 334934, + "streaming": true + } + ], + "open /settings": [ + { + "ok": true, + "pre": false, + "ms": 47.79999999701977, + "parseMs": 2.099999997764826, + "cpuMs": 110, + "bytes": 271032, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 39.900000002235174, + "parseMs": 32.400000002235174, + "cpuMs": 80, + "bytes": 381006, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 23.099999997764826, + "parseMs": 14.599999997764826, + "cpuMs": 100, + "bytes": 392990, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 68.39999999850988, + "parseMs": 6.899999998509884, + "cpuMs": 150, + "bytes": 411626, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 38.900000002235174, + "parseMs": 30.5, + "cpuMs": 270, + "bytes": 324406, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 65, + "parseMs": 6.600000001490116, + "cpuMs": 100, + "bytes": 557178, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 72.39999999850988, + "parseMs": 13.099999997764826, + "cpuMs": 120, + "bytes": 576850, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 53.30000000074506, + "parseMs": 41.70000000298023, + "cpuMs": 120, + "bytes": 481800, + "streaming": true + } + ], + "scroll (resume page down/up)": [ + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + } + ] + }, + "next": { + "type char": [ + { + "ok": true, + "pre": false, + "ms": 33.30000000074506, + "parseMs": 32.900000002235174, + "cpuMs": 50, + "bytes": 1812, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 18.800000000745058, + "parseMs": 18.5, + "cpuMs": 30, + "bytes": 2093, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 18.199999999254942, + "parseMs": 17.899999998509884, + "cpuMs": 60, + "bytes": 3590, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 36.5, + "parseMs": 18.600000001490116, + "cpuMs": 40, + "bytes": 4032, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 40.69999999925494, + "parseMs": 40.29999999701977, + "cpuMs": 60, + "bytes": 6101, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 22, + "parseMs": 21.5, + "cpuMs": 30, + "bytes": 5200, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 23.800000000745058, + "parseMs": 22.900000002235174, + "cpuMs": 40, + "bytes": 5683, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 21.700000002980232, + "parseMs": 19.800000000745058, + "cpuMs": 50, + "bytes": 6184, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 16.5, + "parseMs": 16.100000001490116, + "cpuMs": 40, + "bytes": 6495, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 23.099999997764826, + "parseMs": 22, + "cpuMs": 50, + "bytes": 6552, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 21, + "parseMs": 20.5, + "cpuMs": 50, + "bytes": 6609, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 17, + "parseMs": 16, + "cpuMs": 30, + "bytes": 6684, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 29, + "parseMs": 28.699999999254942, + "cpuMs": 50, + "bytes": 6612, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 9.100000001490116, + "parseMs": 8.800000000745058, + "cpuMs": 30, + "bytes": 6597, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.399999998509884, + "parseMs": 19.800000000745058, + "cpuMs": 40, + "bytes": 6600, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 16.900000002235174, + "parseMs": 16.400000002235174, + "cpuMs": 40, + "bytes": 6597, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.199999999254942, + "parseMs": 19.699999999254942, + "cpuMs": 40, + "bytes": 6588, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 17, + "parseMs": 16.5, + "cpuMs": 50, + "bytes": 6591, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 16.800000000745058, + "parseMs": 16.300000000745058, + "cpuMs": 40, + "bytes": 6588, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.899999998509884, + "parseMs": 19.5, + "cpuMs": 40, + "bytes": 6579, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 18.099999997764826, + "parseMs": 17.800000000745058, + "cpuMs": 40, + "bytes": 6582, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.199999999254942, + "parseMs": 19.5, + "cpuMs": 40, + "bytes": 6783, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.300000000745058, + "parseMs": 19.599999997764826, + "cpuMs": 40, + "bytes": 6786, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.600000001490116, + "parseMs": 19.200000002980232, + "cpuMs": 40, + "bytes": 6771, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 23.100000001490116, + "parseMs": 22.600000001490116, + "cpuMs": 40, + "bytes": 7437, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 18.799999997019768, + "parseMs": 18.399999998509884, + "cpuMs": 50, + "bytes": 7419, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 31.300000000745058, + "parseMs": 30.699999999254942, + "cpuMs": 50, + "bytes": 7422, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.799999997019768, + "parseMs": 19.399999998509884, + "cpuMs": 100, + "bytes": 7404, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 22.099999997764826, + "parseMs": 21.699999999254942, + "cpuMs": 70, + "bytes": 7407, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.099999997764826, + "parseMs": 19.699999999254942, + "cpuMs": 40, + "bytes": 7389, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.699999999254942, + "parseMs": 19.300000000745058, + "cpuMs": 40, + "bytes": 7385, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 18.699999999254942, + "parseMs": 17.699999999254942, + "cpuMs": 30, + "bytes": 7374, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 18.5, + "parseMs": 17.899999998509884, + "cpuMs": 40, + "bytes": 7377, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 27.699999999254942, + "parseMs": 27.199999999254942, + "cpuMs": 50, + "bytes": 7380, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 17.900000002235174, + "parseMs": 17.5, + "cpuMs": 40, + "bytes": 7383, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 18.599999997764826, + "parseMs": 18.300000000745058, + "cpuMs": 50, + "bytes": 7365, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 34.599999997764826, + "parseMs": 34.19999999925494, + "cpuMs": 60, + "bytes": 7248, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 14, + "parseMs": 13.699999999254942, + "cpuMs": 40, + "bytes": 7251, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 16.699999999254942, + "parseMs": 16, + "cpuMs": 50, + "bytes": 7485, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 15.300000000745058, + "parseMs": 15, + "cpuMs": 50, + "bytes": 7488, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 23.100000001490116, + "parseMs": 22.399999998509884, + "cpuMs": 60, + "bytes": 7470, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 14.399999998509884, + "parseMs": 13.799999997019768, + "cpuMs": 40, + "bytes": 7452, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.199999999254942, + "parseMs": 18.5, + "cpuMs": 50, + "bytes": 7455, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19, + "parseMs": 18.600000001490116, + "cpuMs": 50, + "bytes": 7437, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 33, + "parseMs": 32.5, + "cpuMs": 50, + "bytes": 7440, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.699999999254942, + "parseMs": 20.399999998509884, + "cpuMs": 50, + "bytes": 7422, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.899999998509884, + "parseMs": 20.300000000745058, + "cpuMs": 50, + "bytes": 7425, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 21.199999999254942, + "parseMs": 20.800000000745058, + "cpuMs": 40, + "bytes": 7407, + "streaming": true + } + ], + "backspace": [ + { + "ok": true, + "pre": false, + "ms": 20.400000002235174, + "parseMs": 20, + "cpuMs": 40, + "bytes": 6732, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 18.5, + "parseMs": 18.100000001490116, + "cpuMs": 40, + "bytes": 6729, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.100000001490116, + "parseMs": 18.699999999254942, + "cpuMs": 50, + "bytes": 6708, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 21.300000000745058, + "parseMs": 20.800000000745058, + "cpuMs": 40, + "bytes": 6705, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.799999997019768, + "parseMs": 20.399999998509884, + "cpuMs": 40, + "bytes": 6696, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 18.600000001490116, + "parseMs": 18.100000001490116, + "cpuMs": 50, + "bytes": 6681, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.5, + "parseMs": 19.100000001490116, + "cpuMs": 30, + "bytes": 6678, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19, + "parseMs": 18.399999998509884, + "cpuMs": 50, + "bytes": 6669, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 18, + "parseMs": 17.5, + "cpuMs": 50, + "bytes": 6654, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.199999999254942, + "parseMs": 19.699999999254942, + "cpuMs": 40, + "bytes": 6651, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.699999999254942, + "parseMs": 20.399999998509884, + "cpuMs": 40, + "bytes": 6630, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.100000001490116, + "parseMs": 18.200000002980232, + "cpuMs": 40, + "bytes": 6627, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.699999999254942, + "parseMs": 19.099999997764826, + "cpuMs": 50, + "bytes": 6768, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 16.800000000745058, + "parseMs": 16.400000002235174, + "cpuMs": 50, + "bytes": 6765, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.5, + "parseMs": 19.099999997764826, + "cpuMs": 60, + "bytes": 6778, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 21.199999999254942, + "parseMs": 20.5, + "cpuMs": 60, + "bytes": 6828, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 13.800000000745058, + "parseMs": 13.300000000745058, + "cpuMs": 50, + "bytes": 6904, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.800000000745058, + "parseMs": 19.5, + "cpuMs": 60, + "bytes": 6966, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 17.300000000745058, + "parseMs": 16.700000002980232, + "cpuMs": 50, + "bytes": 7035, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20, + "parseMs": 19.300000000745058, + "cpuMs": 40, + "bytes": 7104, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 28.300000000745058, + "parseMs": 27.800000000745058, + "cpuMs": 50, + "bytes": 7185, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 5.600000001490116, + "parseMs": 4.800000000745058, + "cpuMs": 40, + "bytes": 7235, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 13.399999998509884, + "parseMs": 13.099999997764826, + "cpuMs": 50, + "bytes": 7290, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 17.800000000745058, + "parseMs": 17.400000002235174, + "cpuMs": 40, + "bytes": 7359, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.900000002235174, + "parseMs": 19.300000000745058, + "cpuMs": 40, + "bytes": 7362, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 16.700000002980232, + "parseMs": 16.400000002235174, + "cpuMs": 40, + "bytes": 7359, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.800000000745058, + "parseMs": 20.400000002235174, + "cpuMs": 40, + "bytes": 7342, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 18.800000000745058, + "parseMs": 18.199999999254942, + "cpuMs": 210, + "bytes": 7332, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 30.100000001490116, + "parseMs": 29.400000002235174, + "cpuMs": 50, + "bytes": 7329, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 22.599999997764826, + "parseMs": 22.199999999254942, + "cpuMs": 40, + "bytes": 7305, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 18.5, + "parseMs": 17.800000000745058, + "cpuMs": 40, + "bytes": 7302, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.699999999254942, + "parseMs": 18.800000000745058, + "cpuMs": 40, + "bytes": 7299, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 18.800000000745058, + "parseMs": 18.200000002980232, + "cpuMs": 60, + "bytes": 7275, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 18.899999998509884, + "parseMs": 18.599999997764826, + "cpuMs": 50, + "bytes": 7272, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20, + "parseMs": 19.600000001490116, + "cpuMs": 50, + "bytes": 7269, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 17.899999998509884, + "parseMs": 17.199999999254942, + "cpuMs": 50, + "bytes": 7245, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 18.400000002235174, + "parseMs": 18, + "cpuMs": 50, + "bytes": 7404, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.800000000745058, + "parseMs": 20.300000000745058, + "cpuMs": 60, + "bytes": 7394, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.199999999254942, + "parseMs": 19.600000001490116, + "cpuMs": 60, + "bytes": 7377, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.600000001490116, + "parseMs": 19.200000002980232, + "cpuMs": 50, + "bytes": 7374, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 31.099999997764826, + "parseMs": 30.599999997764826, + "cpuMs": 60, + "bytes": 7371, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 26.600000001490116, + "parseMs": 26.199999999254942, + "cpuMs": 40, + "bytes": 7368, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 18.300000000745058, + "parseMs": 18, + "cpuMs": 60, + "bytes": 7344, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 17.199999999254942, + "parseMs": 16.699999999254942, + "cpuMs": 80, + "bytes": 7341, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20, + "parseMs": 19.600000001490116, + "cpuMs": 50, + "bytes": 7317, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 33.900000002235174, + "parseMs": 33.30000000074506, + "cpuMs": 50, + "bytes": 7314, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 22.800000000745058, + "parseMs": 22.400000002235174, + "cpuMs": 60, + "bytes": 7311, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 18.399999998509884, + "parseMs": 17.899999998509884, + "cpuMs": 60, + "bytes": 7308, + "streaming": true + } + ], + "enter (composer)": [ + { + "ok": true, + "pre": false, + "ms": 4.100000001490116, + "parseMs": 3.600000001490116, + "cpuMs": 70, + "bytes": 1313, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 34.5, + "parseMs": 34.100000001490116, + "cpuMs": 40, + "bytes": 1992, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 33, + "parseMs": 32.599999997764826, + "cpuMs": 70, + "bytes": 2881, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 21.699999999254942, + "parseMs": 21.400000002235174, + "cpuMs": 70, + "bytes": 3172, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 32.19999999925494, + "parseMs": 31.899999998509884, + "cpuMs": 50, + "bytes": 3194, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 24.199999999254942, + "parseMs": 23.800000000745058, + "cpuMs": 50, + "bytes": 1641, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 40.80000000074506, + "parseMs": 40.399999998509884, + "cpuMs": 50, + "bytes": 1646, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 32.100000001490116, + "parseMs": 31, + "cpuMs": 50, + "bytes": 1600, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 33.600000001490116, + "parseMs": 33, + "cpuMs": 60, + "bytes": 3219, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 31.600000001490116, + "parseMs": 31.300000000745058, + "cpuMs": 60, + "bytes": 3177, + "streaming": true + } + ], + "arrow (model menu)": [ + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 56.599999997764826, + "cpuMs": 1750, + "bytes": 434405, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 41, + "cpuMs": 1980, + "bytes": 454697, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 31.899999998509884, + "cpuMs": 2260, + "bytes": 473807, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 4.699999999254942, + "cpuMs": 2290, + "bytes": 481980, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 71, + "cpuMs": 2090, + "bytes": 364470, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 61.5, + "cpuMs": 1570, + "bytes": 433200, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 26.300000000745058, + "cpuMs": 1600, + "bytes": 457470, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 24, + "cpuMs": 1900, + "bytes": 466932, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 380.19999999925494, + "cpuMs": 2040, + "bytes": 482594, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 34.600000001490116, + "cpuMs": 1740, + "bytes": 338798, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 134.60000000149012, + "cpuMs": 1370, + "bytes": 431909, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 66.39999999850988, + "cpuMs": 1580, + "bytes": 450765, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 6.299999997019768, + "cpuMs": 1950, + "bytes": 474415, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 4.5, + "cpuMs": 2030, + "bytes": 491539, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 110.59999999776483, + "cpuMs": 1680, + "bytes": 345321, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 100.80000000074506, + "cpuMs": 1270, + "bytes": 428788, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 4.800000000745058, + "cpuMs": 1460, + "bytes": 454085, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 10.600000001490116, + "cpuMs": 1700, + "bytes": 478968, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 6, + "cpuMs": 1880, + "bytes": 483826, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 29.300000000745058, + "cpuMs": 1490, + "bytes": 344739, + "streaming": false + } + ], + "arrow (resume menu)": [ + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + } + ], + "ctrl+o": [ + { + "ok": true, + "pre": false, + "ms": 12.900000002235174, + "parseMs": 12.300000000745058, + "cpuMs": 40, + "bytes": 1427, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 16.699999999254942, + "parseMs": 15.800000000745058, + "cpuMs": 60, + "bytes": 1635, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 14.200000002980232, + "parseMs": 13.600000001490116, + "cpuMs": 40, + "bytes": 3218, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 16.600000001490116, + "parseMs": 16.100000001490116, + "cpuMs": 40, + "bytes": 3690, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 17.799999997019768, + "parseMs": 17.399999998509884, + "cpuMs": 40, + "bytes": 4180, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.599999997764826, + "parseMs": 16, + "cpuMs": 60, + "bytes": 6333, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 4.099999997764826, + "parseMs": 3.699999999254942, + "cpuMs": 30, + "bytes": 1902, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 10.899999998509884, + "parseMs": 10.399999998509884, + "cpuMs": 30, + "bytes": 6760, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 21.300000000745058, + "parseMs": 20.700000002980232, + "cpuMs": 30, + "bytes": 6853, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 138.70000000298023, + "parseMs": 15.200000002980232, + "cpuMs": 80, + "bytes": 8452, + "streaming": true + } + ], + "shift+tab": [ + { + "ok": true, + "pre": false, + "ms": 10.599999997764826, + "parseMs": 9.300000000745058, + "cpuMs": 50, + "bytes": 6814, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 15.100000001490116, + "cpuMs": 1650, + "bytes": 290892, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 18.399999998509884, + "cpuMs": 1700, + "bytes": 312401, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 31.199999999254942, + "cpuMs": 2000, + "bytes": 321223, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 50.899999998509884, + "cpuMs": 2190, + "bytes": 320404, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 73.89999999850988, + "parseMs": 72.89999999850988, + "cpuMs": 70, + "bytes": 18669, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.5, + "parseMs": 14.900000002235174, + "cpuMs": 30, + "bytes": 1829, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 216.89999999850988, + "cpuMs": 1640, + "bytes": 254993, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 10.300000000745058, + "cpuMs": 1430, + "bytes": 298867, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 28.199999999254942, + "cpuMs": 2120, + "bytes": 325426, + "streaming": true + } + ], + "open /model": [ + { + "ok": true, + "pre": false, + "ms": 37.19999999925494, + "parseMs": 34.79999999701977, + "cpuMs": 90, + "bytes": 28578, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 42.900000002235174, + "parseMs": 38.80000000074506, + "cpuMs": 50, + "bytes": 32584, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 21.199999999254942, + "parseMs": 17.600000001490116, + "cpuMs": 50, + "bytes": 28536, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 45.19999999925494, + "parseMs": 39.899999998509884, + "cpuMs": 60, + "bytes": 32528, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 33.5, + "parseMs": 29.400000002235174, + "cpuMs": 50, + "bytes": 28494, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 27.800000000745058, + "parseMs": 23.5, + "cpuMs": 60, + "bytes": 28487, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 18.100000001490116, + "parseMs": 16.800000000745058, + "cpuMs": 70, + "bytes": 28452, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 42.69999999925494, + "parseMs": 41.30000000074506, + "cpuMs": 60, + "bytes": 32752, + "streaming": true + } + ], + "open /settings": [ + { + "ok": true, + "pre": false, + "ms": 39.599999997764826, + "parseMs": 37.599999997764826, + "cpuMs": 50, + "bytes": 6855, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 37.099999997764826, + "parseMs": 34.399999998509884, + "cpuMs": 40, + "bytes": 115106, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 44.5, + "parseMs": 37.80000000074506, + "cpuMs": 50, + "bytes": 116147, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 33.100000001490116, + "parseMs": 28.400000002235174, + "cpuMs": 30, + "bytes": 116198, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 38.600000001490116, + "parseMs": 36.399999998509884, + "cpuMs": 50, + "bytes": 116000, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 48.79999999701977, + "parseMs": 43.5, + "cpuMs": 50, + "bytes": 119794, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 42.80000000074506, + "parseMs": 38.400000002235174, + "cpuMs": 50, + "bytes": 116198, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 43.400000002235174, + "parseMs": 37.600000001490116, + "cpuMs": 50, + "bytes": 116180, + "streaming": true + } + ], + "scroll (resume page down/up)": [ + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + } + ] + } + } + } + }, + "misses": { + "idle": [ + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 0, + "screen": " Sure. This is a short answer to: ping idle 4\n\n ❯ ping idle 5 \n\n Sure. This is a short answer to: ping idle 5\n\n ❯ ping idle 6 \n\n Sure. This is a short answer to: ping idle 6\n\n ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 1, + "screen": " Sure. This is a short answer to: ping idle 4\n\n ❯ ping idle 5 \n\n Sure. This is a short answer to: ping idle 5\n\n ❯ ping idle 6 \n\n Sure. This is a short answer to: ping idle 6\n\n ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 2, + "screen": " Sure. This is a short answer to: ping idle 4\n\n ❯ ping idle 5 \n\n Sure. This is a short answer to: ping idle 5\n\n ❯ ping idle 6 \n\n Sure. This is a short answer to: ping idle 6\n\n ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 3, + "screen": " Sure. This is a short answer to: ping idle 4\n\n ❯ ping idle 5 \n\n Sure. This is a short answer to: ping idle 5\n\n ❯ ping idle 6 \n\n Sure. This is a short answer to: ping idle 6\n\n ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 4, + "screen": " Sure. This is a short answer to: ping idle 4\n\n ❯ ping idle 5 \n\n Sure. This is a short answer to: ping idle 5\n\n ❯ ping idle 6 \n\n Sure. This is a short answer to: ping idle 6\n\n ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 5, + "screen": " Sure. This is a short answer to: ping idle 4\n\n ❯ ping idle 5 \n\n Sure. This is a short answer to: ping idle 5\n\n ❯ ping idle 6 \n\n Sure. This is a short answer to: ping idle 6\n\n ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 6, + "screen": " Sure. This is a short answer to: ping idle 4\n\n ❯ ping idle 5 \n\n Sure. This is a short answer to: ping idle 5\n\n ❯ ping idle 6 \n\n Sure. This is a short answer to: ping idle 6\n\n ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 7, + "screen": " Sure. This is a short answer to: ping idle 4\n\n ❯ ping idle 5 \n\n Sure. This is a short answer to: ping idle 5\n\n ❯ ping idle 6 \n\n Sure. This is a short answer to: ping idle 6\n\n ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 8, + "screen": " Sure. This is a short answer to: ping idle 4\n\n ❯ ping idle 5 \n\n Sure. This is a short answer to: ping idle 5\n\n ❯ ping idle 6 \n\n Sure. This is a short answer to: ping idle 6\n\n ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 9, + "screen": " Sure. This is a short answer to: ping idle 4\n\n ❯ ping idle 5 \n\n Sure. This is a short answer to: ping idle 5\n\n ❯ ping idle 6 \n\n Sure. This is a short answer to: ping idle 6\n\n ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 10, + "screen": " Sure. This is a short answer to: ping idle 4\n\n ❯ ping idle 5 \n\n Sure. This is a short answer to: ping idle 5\n\n ❯ ping idle 6 \n\n Sure. This is a short answer to: ping idle 6\n\n ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 11, + "screen": " Sure. This is a short answer to: ping idle 4\n\n ❯ ping idle 5 \n\n Sure. This is a short answer to: ping idle 5\n\n ❯ ping idle 6 \n\n Sure. This is a short answer to: ping idle 6\n\n ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 12, + "screen": " Sure. This is a short answer to: ping idle 4\n\n ❯ ping idle 5 \n\n Sure. This is a short answer to: ping idle 5\n\n ❯ ping idle 6 \n\n Sure. This is a short answer to: ping idle 6\n\n ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 13, + "screen": " Sure. This is a short answer to: ping idle 4\n\n ❯ ping idle 5 \n\n Sure. This is a short answer to: ping idle 5\n\n ❯ ping idle 6 \n\n Sure. This is a short answer to: ping idle 6\n\n ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 14, + "screen": " Sure. This is a short answer to: ping idle 4\n\n ❯ ping idle 5 \n\n Sure. This is a short answer to: ping idle 5\n\n ❯ ping idle 6 \n\n Sure. This is a short answer to: ping idle 6\n\n ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 15, + "screen": " Sure. This is a short answer to: ping idle 4\n\n ❯ ping idle 5 \n\n Sure. This is a short answer to: ping idle 5\n\n ❯ ping idle 6 \n\n Sure. This is a short answer to: ping idle 6\n\n ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 16, + "screen": " Sure. This is a short answer to: ping idle 4\n\n ❯ ping idle 5 \n\n Sure. This is a short answer to: ping idle 5\n\n ❯ ping idle 6 \n\n Sure. This is a short answer to: ping idle 6\n\n ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 17, + "screen": " Sure. This is a short answer to: ping idle 4\n\n ❯ ping idle 5 \n\n Sure. This is a short answer to: ping idle 5\n\n ❯ ping idle 6 \n\n Sure. This is a short answer to: ping idle 6\n\n ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 18, + "screen": " Sure. This is a short answer to: ping idle 4\n\n ❯ ping idle 5 \n\n Sure. This is a short answer to: ping idle 5\n\n ❯ ping idle 6 \n\n Sure. This is a short answer to: ping idle 6\n\n ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 19, + "screen": " Sure. This is a short answer to: ping idle 4\n\n ❯ ping idle 5 \n\n Sure. This is a short answer to: ping idle 5\n\n ❯ ping idle 6 \n\n Sure. This is a short answer to: ping idle 6\n\n ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (resume menu)", + "index": 0, + "screen": "(list not painted within 5000 ms; 20 keys not sent)\n\n ❯ ping idle 5 \n\n Sure. This is a short answer to: ping idle 5\n\n ❯ ping idle 6 \n\n Sure. This is a short answer to: ping idle 6\n\n ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Resume Conversation │\n│ Loading conversations… │\n│ ↑/↓ select · Enter resume · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n\n\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "scroll (resume page down/up)", + "index": 0, + "screen": "(list not painted within 5000 ms; 10 keys not sent)\n\n ❯ ping idle 5 \n\n Sure. This is a short answer to: ping idle 5\n\n ❯ ping idle 6 \n\n Sure. This is a short answer to: ping idle 6\n\n ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Resume Conversation │\n│ Loading conversations… │\n│ ↑/↓ select · Enter resume · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n\n\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "restart", + "index": 0, + "screen": "(not back at the empty composer after Escapes; CLI restarted)\n\n ❯ ping idle 5 \n\n Sure. This is a short answer to: ping idle 5\n\n ❯ ping idle 6 \n\n Sure. This is a short answer to: ping idle 6\n\n ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Resume Conversation │\n│ Loading conversations… │\n│ ↑/↓ select · Enter resume · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n\n\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "ctrl+o", + "index": 0, + "screen": "Profile: BARE\n\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "ctrl+o", + "index": 1, + "screen": "Profile: BARE\n\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "ctrl+o", + "index": 2, + "screen": "Profile: BARE\n\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "ctrl+o", + "index": 3, + "screen": "Profile: BARE\n\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "ctrl+o", + "index": 4, + "screen": "Profile: BARE\n\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "ctrl+o", + "index": 5, + "screen": "Profile: BARE\n\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "ctrl+o", + "index": 6, + "screen": "Profile: BARE\n\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "ctrl+o", + "index": 7, + "screen": "Profile: BARE\n\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "ctrl+o", + "index": 8, + "screen": "Profile: BARE\n\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "ctrl+o", + "index": 9, + "screen": "Profile: BARE\n\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "cli": "next" + } + ], + "streaming": [ + { + "phase": "streaming", + "name": "arrow (resume menu)", + "index": 0, + "screen": "(list not painted within 5000 ms; 20 keys not sent)\n sw35 sw36 sw37 sw38 sw39 sw40 sw41 sw42 sw43 sw44 sw45 sw46\n sw47 sw48 sw49 sw50 sw51 sw52 sw53 sw54 sw55 sw56 sw57 sw58\n sw59 sw60 sw61 sw62 sw63 sw64 sw65 sw66 sw67 sw68 sw69 sw70\n sw71 sw72 sw73 sw74 sw75 sw76 sw77 sw78 sw79 sw80 sw81 sw82\n sw83 sw84 sw85 sw86 sw87 sw88 sw89 sw90 sw91 sw92 sw93 sw94\n sw95 sw96 sw97 sw98 sw99 sw100 sw101 sw102 sw103 sw104 sw105 sw106\n sw107 sw108 sw109 sw110 sw111 sw112 sw113 sw114 sw115 sw116 sw117 sw118\n sw119 sw120 sw121 sw122 sw123 sw124 sw125 sw126 sw127 sw128 sw129 sw130\n sw131 sw132 sw133 sw134 sw135 sw136 sw137 sw138 sw139 sw140 sw141 sw142\n sw143 sw144 sw145 sw146 sw147 sw148 sw149 sw150 sw151 sw152 sw153 sw154\n sw155 sw156 sw157 sw158 sw159 sw160 sw161 sw162 sw163 sw164 sw165 sw166\n sw167 sw168 sw169 sw170 sw171 sw172 sw173 sw174 sw175 sw176 sw177 sw178\n sw179 sw180 sw181 sw182 sw183 sw184 sw185 sw186 sw187 sw188 sw189 sw190\n sw191 sw192 sw193 sw194 sw195 sw196 sw197 sw198 sw199 sw200 sw201 sw202\n sw203 sw204 sw205 sw206 sw207 sw208 sw209 sw210 sw211 sw212 sw213 sw214\n sw215 sw216 sw217 sw218 sw219 sw220 sw221 sw222\n\n\n Generating · 2s (55.5 tok/s)\n ────────────────────────────────────────────────────────────────────────────────────────────────\n │ queued · after this turn\n │ ping streaming 1\n │ ping streaming 2\n │ ping streaming 3\n │ ping streaming 4\n │ ping streaming 5\n │ ping streaming 6\n │ ping streaming 7\n │ ping streaming 8\n │ ping streaming 9\n ❯ \n ↑ select queued │ ⏎ steer │ Alt+⏎ queue │ Ctrl+O model │ Ctrl+T effort\n\n Bare │ [Q:9] │ mockprov/mock-alpha │ ↑1.2k ↓80 · (3.1t/s) · Ctx 1k", + "cli": "legacy" + }, + { + "phase": "streaming", + "name": "scroll (resume page down/up)", + "index": 0, + "screen": "(list not painted within 5000 ms; 10 keys not sent)\n sw35 sw36 sw37 sw38 sw39 sw40 sw41 sw42 sw43 sw44 sw45 sw46\n sw47 sw48 sw49 sw50 sw51 sw52 sw53 sw54 sw55 sw56 sw57 sw58\n sw59 sw60 sw61 sw62 sw63 sw64 sw65 sw66 sw67 sw68 sw69 sw70\n sw71 sw72 sw73 sw74 sw75 sw76 sw77 sw78 sw79 sw80 sw81 sw82\n sw83 sw84 sw85 sw86 sw87 sw88 sw89 sw90 sw91 sw92 sw93 sw94\n sw95 sw96 sw97 sw98 sw99 sw100 sw101 sw102 sw103 sw104 sw105 sw106\n sw107 sw108 sw109 sw110 sw111 sw112 sw113 sw114 sw115 sw116 sw117 sw118\n sw119 sw120 sw121 sw122 sw123 sw124 sw125 sw126 sw127 sw128 sw129 sw130\n sw131 sw132 sw133 sw134 sw135 sw136 sw137 sw138 sw139 sw140 sw141 sw142\n sw143 sw144 sw145 sw146 sw147 sw148 sw149 sw150 sw151 sw152 sw153 sw154\n sw155 sw156 sw157 sw158 sw159 sw160 sw161 sw162 sw163 sw164 sw165 sw166\n sw167 sw168 sw169 sw170 sw171 sw172 sw173 sw174 sw175 sw176 sw177 sw178\n sw179 sw180 sw181 sw182 sw183 sw184 sw185 sw186 sw187 sw188 sw189 sw190\n sw191 sw192 sw193 sw194 sw195 sw196 sw197 sw198 sw199 sw200 sw201 sw202\n sw203 sw204 sw205 sw206 sw207 sw208 sw209 sw210 sw211 sw212 sw213 sw214\n sw215 sw216 sw217 sw218 sw219 sw220 sw221 sw222\n\n\n Generating · 2s (55.5 tok/s)\n ────────────────────────────────────────────────────────────────────────────────────────────────\n │ queued · after this turn\n │ ping streaming 1\n │ ping streaming 2\n │ ping streaming 3\n │ ping streaming 4\n │ ping streaming 5\n │ ping streaming 6\n │ ping streaming 7\n │ ping streaming 8\n │ ping streaming 9\n ❯ \n ↑ select queued │ ⏎ steer │ Alt+⏎ queue │ Ctrl+O model │ Ctrl+T effort\n\n Bare │ [Q:9] │ mockprov/mock-alpha │ ↑1.2k ↓80 · (3.1t/s) · Ctx 1k", + "cli": "legacy" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 0, + "screen": " sw335 sw336 sw337 sw338 sw339 sw340 sw341 sw342 sw343 sw344 sw345 sw346\n sw347 sw348 sw349 sw350 sw351 sw352 sw353 sw354 sw355 sw356 sw357 sw358\n sw359 sw360 sw361 sw362 sw363 sw364 sw365 sw366 sw367 sw368 sw369 sw370\n sw371 sw372 sw373 sw374 sw375 sw376 sw377 sw378 sw379 sw380 sw381 sw382\n sw383 sw384 sw385 sw386 sw387 sw388 sw389 sw390 sw391 sw392 sw393 sw394\n sw395 sw396 sw397 sw398 sw399 sw400 sw401 sw402 sw403 sw404 sw405 sw406\n sw407 sw408 sw409 sw410 sw411 sw412 sw413 sw414 sw415 sw416 sw417 sw418\n sw419 sw420 sw421 sw422 sw423 sw424 sw425 sw426 sw427 sw428 sw429 sw430\n sw431 sw432 sw433 sw434 sw435 sw436 sw437 sw438 sw439 sw440 sw441 sw442\n sw443 sw444 sw445 sw446 sw447 sw448 sw449 sw450 sw451 sw452 sw453 sw454\n sw455 sw456 sw457 sw458 sw459 sw460 sw461 sw462 sw463 sw464 sw465 sw466\n sw467 sw468 sw469 sw470 sw471 sw472 sw473 sw474 sw475 sw476 sw477 sw478\n sw479 sw480 sw481 sw482 sw483 sw484 sw485 sw486 sw487 sw488 sw489 sw490\n sw491 sw492 sw493 sw494 sw495 sw496 sw497 sw498 sw499 sw500 sw501 sw502\n sw503 sw504 sw505 sw506 sw507 sw508 sw509 sw510 sw511 sw512 sw513 sw514\n sw515 sw516 sw517 sw518 sw519 sw520 sw521 sw522 sw523 sw524 sw525 sw526\n sw527 sw528 sw529 sw530 sw531 sw532 sw533 sw534 sw535 sw536 sw537 sw538\n sw539 sw540 sw541 sw542 sw543 sw544 sw545 sw546 sw547 sw548 sw549 sw550\n sw551 sw552 sw553 sw554 sw555 sw556 sw557 sw558 sw559 sw560 sw561 sw562\n sw563 sw564 sw565 sw566 sw567 sw568 sw569 sw570 sw571\n\nGenerating · 11s (~163.3 tok/s)\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 1, + "screen": " sw863 sw864 sw865 sw866 sw867 sw868 sw869 sw870 sw871 sw872 sw873 sw874\n sw875 sw876 sw877 sw878 sw879 sw880 sw881 sw882 sw883 sw884 sw885 sw886\n sw887 sw888 sw889 sw890 sw891 sw892 sw893 sw894 sw895 sw896 sw897 sw898\n sw899 sw900 sw901 sw902 sw903 sw904 sw905 sw906 sw907 sw908 sw909 sw910\n sw911 sw912 sw913 sw914 sw915 sw916 sw917 sw918 sw919 sw920 sw921 sw922\n sw923 sw924 sw925 sw926 sw927 sw928 sw929 sw930 sw931 sw932 sw933 sw934\n sw935 sw936 sw937 sw938 sw939 sw940 sw941 sw942 sw943 sw944 sw945 sw946\n sw947 sw948 sw949 sw950 sw951 sw952 sw953 sw954 sw955 sw956 sw957 sw958\n sw959 sw960 sw961 sw962 sw963 sw964 sw965 sw966 sw967 sw968 sw969 sw970\n sw971 sw972 sw973 sw974 sw975 sw976 sw977 sw978 sw979 sw980 sw981 sw982\n sw983 sw984 sw985 sw986 sw987 sw988 sw989 sw990 sw991 sw992 sw993 sw994\n sw995 sw996 sw997 sw998 sw999 sw1000 sw1001 sw1002 sw1003 sw1004 sw1005 sw1006\n sw1007 sw1008 sw1009 sw1010 sw1011 sw1012 sw1013 sw1014 sw1015 sw1016 sw1017 sw1018\n sw1019 sw1020 sw1021 sw1022 sw1023 sw1024 sw1025 sw1026 sw1027 sw1028 sw1029 sw1030\n sw1031 sw1032 sw1033 sw1034 sw1035 sw1036 sw1037 sw1038 sw1039 sw1040 sw1041 sw1042\n sw1043 sw1044 sw1045 sw1046 sw1047 sw1048 sw1049 sw1050 sw1051 sw1052 sw1053 sw1054\n sw1055 sw1056 sw1057 sw1058 sw1059 sw1060 sw1061 sw1062 sw1063 sw1064 sw1065 sw1066\n sw1067 sw1068 sw1069 sw1070 sw1071 sw1072 sw1073 sw1074 sw1075 sw1076 sw1077 sw1078\n sw1079 sw1080 sw1081 sw1082 sw1083 sw1084 sw1085 sw1086 sw1087 sw1088 sw1089 sw1090\n sw1091 sw1092 sw1093 sw1094\n\nGenerating · 16s (~185.8 tok/s)\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 2, + "screen": " sw1367 sw1368 sw1369 sw1370 sw1371 sw1372 sw1373 sw1374 sw1375 sw1376 sw1377 sw1378\n sw1379 sw1380 sw1381 sw1382 sw1383 sw1384 sw1385 sw1386 sw1387 sw1388 sw1389 sw1390\n sw1391 sw1392 sw1393 sw1394 sw1395 sw1396 sw1397 sw1398 sw1399 sw1400 sw1401 sw1402\n sw1403 sw1404 sw1405 sw1406 sw1407 sw1408 sw1409 sw1410 sw1411 sw1412 sw1413 sw1414\n sw1415 sw1416 sw1417 sw1418 sw1419 sw1420 sw1421 sw1422 sw1423 sw1424 sw1425 sw1426\n sw1427 sw1428 sw1429 sw1430 sw1431 sw1432 sw1433 sw1434 sw1435 sw1436 sw1437 sw1438\n sw1439 sw1440 sw1441 sw1442 sw1443 sw1444 sw1445 sw1446 sw1447 sw1448 sw1449 sw1450\n sw1451 sw1452 sw1453 sw1454 sw1455 sw1456 sw1457 sw1458 sw1459 sw1460 sw1461 sw1462\n sw1463 sw1464 sw1465 sw1466 sw1467 sw1468 sw1469 sw1470 sw1471 sw1472 sw1473 sw1474\n sw1475 sw1476 sw1477 sw1478 sw1479 sw1480 sw1481 sw1482 sw1483 sw1484 sw1485 sw1486\n sw1487 sw1488 sw1489 sw1490 sw1491 sw1492 sw1493 sw1494 sw1495 sw1496 sw1497 sw1498\n sw1499 sw1500 sw1501 sw1502 sw1503 sw1504 sw1505 sw1506 sw1507 sw1508 sw1509 sw1510\n sw1511 sw1512 sw1513 sw1514 sw1515 sw1516 sw1517 sw1518 sw1519 sw1520 sw1521 sw1522\n sw1523 sw1524 sw1525 sw1526 sw1527 sw1528 sw1529 sw1530 sw1531 sw1532 sw1533 sw1534\n sw1535 sw1536 sw1537 sw1538 sw1539 sw1540 sw1541 sw1542 sw1543 sw1544 sw1545 sw1546\n sw1547 sw1548 sw1549 sw1550 sw1551 sw1552 sw1553 sw1554 sw1555 sw1556 sw1557 sw1558\n sw1559 sw1560 sw1561 sw1562 sw1563 sw1564 sw1565 sw1566 sw1567 sw1568 sw1569 sw1570\n sw1571 sw1572 sw1573 sw1574 sw1575 sw1576 sw1577 sw1578 sw1579 sw1580 sw1581 sw1582\n sw1583 sw1584 sw1585 sw1586 sw1587 sw1588 sw1589 sw1590 sw1591 sw1592 sw1593 sw1594\n sw1595 sw1596\n\nGenerating · 21s (~217.5 tok/s)\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 3, + "screen": " sw1883 sw1884 sw1885 sw1886 sw1887 sw1888 sw1889 sw1890 sw1891 sw1892 sw1893 sw1894\n sw1895 sw1896 sw1897 sw1898 sw1899 sw1900 sw1901 sw1902 sw1903 sw1904 sw1905 sw1906\n sw1907 sw1908 sw1909 sw1910 sw1911 sw1912 sw1913 sw1914 sw1915 sw1916 sw1917 sw1918\n sw1919 sw1920 sw1921 sw1922 sw1923 sw1924 sw1925 sw1926 sw1927 sw1928 sw1929 sw1930\n sw1931 sw1932 sw1933 sw1934 sw1935 sw1936 sw1937 sw1938 sw1939 sw1940 sw1941 sw1942\n sw1943 sw1944 sw1945 sw1946 sw1947 sw1948 sw1949 sw1950 sw1951 sw1952 sw1953 sw1954\n sw1955 sw1956 sw1957 sw1958 sw1959 sw1960 sw1961 sw1962 sw1963 sw1964 sw1965 sw1966\n sw1967 sw1968 sw1969 sw1970 sw1971 sw1972 sw1973 sw1974 sw1975 sw1976 sw1977 sw1978\n sw1979 sw1980 sw1981 sw1982 sw1983 sw1984 sw1985 sw1986 sw1987 sw1988 sw1989 sw1990\n sw1991 sw1992 sw1993 sw1994 sw1995 sw1996 sw1997 sw1998 sw1999 sw2000 sw2001 sw2002\n sw2003 sw2004 sw2005 sw2006 sw2007 sw2008 sw2009 sw2010 sw2011 sw2012 sw2013 sw2014\n sw2015 sw2016 sw2017 sw2018 sw2019 sw2020 sw2021 sw2022 sw2023 sw2024 sw2025 sw2026\n sw2027 sw2028 sw2029 sw2030 sw2031 sw2032 sw2033 sw2034 sw2035 sw2036 sw2037 sw2038\n sw2039 sw2040 sw2041 sw2042 sw2043 sw2044 sw2045 sw2046 sw2047 sw2048 sw2049 sw2050\n sw2051 sw2052 sw2053 sw2054 sw2055 sw2056 sw2057 sw2058 sw2059 sw2060 sw2061 sw2062\n sw2063 sw2064 sw2065 sw2066 sw2067 sw2068 sw2069 sw2070 sw2071 sw2072 sw2073 sw2074\n sw2075 sw2076 sw2077 sw2078 sw2079 sw2080 sw2081 sw2082 sw2083 sw2084 sw2085 sw2086\n sw2087 sw2088 sw2089 sw2090 sw2091 sw2092 sw2093 sw2094 sw2095 sw2096 sw2097 sw2098\n sw2099 sw2100 sw2101 sw2102 sw2103 sw2104 sw2105 sw2106 sw2107 sw2108 sw2109 sw2110\n sw2111 sw2112 sw2113 sw2114 sw2115 sw2116 sw2117 sw2118 sw2119 sw2120 sw2121\n\nGenerating · 26s (~232.4 tok/s)\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 4, + "screen": " sw2243 sw2244 sw2245 sw2246 sw2247 sw2248 sw2249 sw2250 sw2251 sw2252 sw2253 sw2254\n sw2255 sw2256 sw2257 sw2258 sw2259 sw2260 sw2261 sw2262 sw2263 sw2264 sw2265 sw2266\n sw2267 sw2268 sw2269 sw2270 sw2271 sw2272 sw2273 sw2274 sw2275 sw2276 sw2277 sw2278\n sw2279 sw2280 sw2281 sw2282 sw2283 sw2284 sw2285 sw2286 sw2287 sw2288 sw2289 sw2290\n sw2291 sw2292 sw2293 sw2294 sw2295 sw2296 sw2297 sw2298 sw2299 sw2300 sw2301 sw2302\n sw2303 sw2304 sw2305 sw2306 sw2307 sw2308 sw2309 sw2310 sw2311 sw2312 sw2313 sw2314\n sw2315 sw2316 sw2317 sw2318 sw2319 sw2320 sw2321 sw2322 sw2323 sw2324 sw2325 sw2326\n sw2327 sw2328 sw2329 sw2330 sw2331 sw2332 sw2333 sw2334 sw2335 sw2336 sw2337 sw2338\n sw2339 sw2340 sw2341 sw2342 sw2343 sw2344 sw2345 sw2346 sw2347 sw2348 sw2349 sw2350\n sw2351 sw2352 sw2353 sw2354 sw2355 sw2356 sw2357 sw2358 sw2359 sw2360 sw2361 sw2362\n sw2363 sw2364 sw2365 sw2366 sw2367 sw2368 sw2369 sw2370 sw2371 sw2372 sw2373 sw2374\n sw2375 sw2376 sw2377 sw2378 sw2379 sw2380 sw2381 sw2382 sw2383 sw2384 sw2385 sw2386\n sw2387 sw2388 sw2389 sw2390 sw2391 sw2392 sw2393 sw2394 sw2395 sw2396 sw2397 sw2398\n sw2399 sw2400 sw2401 sw2402 sw2403 sw2404 sw2405 sw2406 sw2407 sw2408 sw2409 sw2410\n sw2411 sw2412 sw2413 sw2414 sw2415 sw2416 sw2417 sw2418 sw2419 sw2420 sw2421 sw2422\n sw2423 sw2424 sw2425 sw2426 sw2427 sw2428 sw2429 sw2430 sw2431 sw2432 sw2433 sw2434\n sw2435 sw2436 sw2437 sw2438 sw2439 sw2440 sw2441 sw2442 sw2443 sw2444 sw2445 sw2446\n sw2447 sw2448 sw2449 sw2450 sw2451 sw2452 sw2453 sw2454 sw2455 sw2456 sw2457 sw2458\n sw2459 sw2460 sw2461 sw2462 sw2463 sw2464 sw2465 sw2466 sw2467 sw2468 sw2469 sw2470\n sw2471 sw2472 sw2473 sw2474 sw2475 sw2476 sw2477 sw2478 sw2479 sw2480 sw2481 sw2482\n sw2483 sw2484 sw2485 sw2486 sw2487 sw2488 sw2489 sw2490 sw2491 sw2492 sw2493 sw2494\n sw2495 sw2496 sw2497 sw2498 sw2499\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑2.4k ↓160 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 5, + "screen": " sw359 sw360 sw361 sw362 sw363 sw364 sw365 sw366 sw367 sw368 sw369 sw370\n sw371 sw372 sw373 sw374 sw375 sw376 sw377 sw378 sw379 sw380 sw381 sw382\n sw383 sw384 sw385 sw386 sw387 sw388 sw389 sw390 sw391 sw392 sw393 sw394\n sw395 sw396 sw397 sw398 sw399 sw400 sw401 sw402 sw403 sw404 sw405 sw406\n sw407 sw408 sw409 sw410 sw411 sw412 sw413 sw414 sw415 sw416 sw417 sw418\n sw419 sw420 sw421 sw422 sw423 sw424 sw425 sw426 sw427 sw428 sw429 sw430\n sw431 sw432 sw433 sw434 sw435 sw436 sw437 sw438 sw439 sw440 sw441 sw442\n sw443 sw444 sw445 sw446 sw447 sw448 sw449 sw450 sw451 sw452 sw453 sw454\n sw455 sw456 sw457 sw458 sw459 sw460 sw461 sw462 sw463 sw464 sw465 sw466\n sw467 sw468 sw469 sw470 sw471 sw472 sw473 sw474 sw475 sw476 sw477 sw478\n sw479 sw480 sw481 sw482 sw483 sw484 sw485 sw486 sw487 sw488 sw489 sw490\n sw491 sw492 sw493 sw494 sw495 sw496 sw497 sw498 sw499 sw500 sw501 sw502\n sw503 sw504 sw505 sw506 sw507 sw508 sw509 sw510 sw511 sw512 sw513 sw514\n sw515 sw516 sw517 sw518 sw519 sw520 sw521 sw522 sw523 sw524 sw525 sw526\n sw527 sw528 sw529 sw530 sw531 sw532 sw533 sw534 sw535 sw536 sw537 sw538\n sw539 sw540 sw541 sw542 sw543 sw544 sw545 sw546 sw547 sw548 sw549 sw550\n sw551 sw552 sw553 sw554 sw555 sw556 sw557 sw558 sw559 sw560 sw561 sw562\n sw563 sw564 sw565 sw566 sw567 sw568 sw569 sw570 sw571 sw572 sw573 sw574\n sw575 sw576 sw577 sw578 sw579 sw580 sw581 sw582 sw583 sw584 sw585 sw586\n sw587 sw588 sw589 sw590 sw591 sw592 sw593 sw594 sw595 sw596\n\nGenerating · 6s (~161.1 tok/s)\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑2.4k ↓160 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 6, + "screen": " sw875 sw876 sw877 sw878 sw879 sw880 sw881 sw882 sw883 sw884 sw885 sw886\n sw887 sw888 sw889 sw890 sw891 sw892 sw893 sw894 sw895 sw896 sw897 sw898\n sw899 sw900 sw901 sw902 sw903 sw904 sw905 sw906 sw907 sw908 sw909 sw910\n sw911 sw912 sw913 sw914 sw915 sw916 sw917 sw918 sw919 sw920 sw921 sw922\n sw923 sw924 sw925 sw926 sw927 sw928 sw929 sw930 sw931 sw932 sw933 sw934\n sw935 sw936 sw937 sw938 sw939 sw940 sw941 sw942 sw943 sw944 sw945 sw946\n sw947 sw948 sw949 sw950 sw951 sw952 sw953 sw954 sw955 sw956 sw957 sw958\n sw959 sw960 sw961 sw962 sw963 sw964 sw965 sw966 sw967 sw968 sw969 sw970\n sw971 sw972 sw973 sw974 sw975 sw976 sw977 sw978 sw979 sw980 sw981 sw982\n sw983 sw984 sw985 sw986 sw987 sw988 sw989 sw990 sw991 sw992 sw993 sw994\n sw995 sw996 sw997 sw998 sw999 sw1000 sw1001 sw1002 sw1003 sw1004 sw1005 sw1006\n sw1007 sw1008 sw1009 sw1010 sw1011 sw1012 sw1013 sw1014 sw1015 sw1016 sw1017 sw1018\n sw1019 sw1020 sw1021 sw1022 sw1023 sw1024 sw1025 sw1026 sw1027 sw1028 sw1029 sw1030\n sw1031 sw1032 sw1033 sw1034 sw1035 sw1036 sw1037 sw1038 sw1039 sw1040 sw1041 sw1042\n sw1043 sw1044 sw1045 sw1046 sw1047 sw1048 sw1049 sw1050 sw1051 sw1052 sw1053 sw1054\n sw1055 sw1056 sw1057 sw1058 sw1059 sw1060 sw1061 sw1062 sw1063 sw1064 sw1065 sw1066\n sw1067 sw1068 sw1069 sw1070 sw1071 sw1072 sw1073 sw1074 sw1075 sw1076 sw1077 sw1078\n sw1079 sw1080 sw1081 sw1082 sw1083 sw1084 sw1085 sw1086 sw1087 sw1088 sw1089 sw1090\n sw1091 sw1092 sw1093 sw1094 sw1095 sw1096 sw1097 sw1098 sw1099 sw1100 sw1101 sw1102\n sw1103 sw1104 sw1105 sw1106 sw1107 sw1108 sw1109 sw1110 sw1111\n\nGenerating · 11s (~182.2 tok/s)\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑2.4k ↓160 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 7, + "screen": " sw1391 sw1392 sw1393 sw1394 sw1395 sw1396 sw1397 sw1398 sw1399 sw1400 sw1401 sw1402\n sw1403 sw1404 sw1405 sw1406 sw1407 sw1408 sw1409 sw1410 sw1411 sw1412 sw1413 sw1414\n sw1415 sw1416 sw1417 sw1418 sw1419 sw1420 sw1421 sw1422 sw1423 sw1424 sw1425 sw1426\n sw1427 sw1428 sw1429 sw1430 sw1431 sw1432 sw1433 sw1434 sw1435 sw1436 sw1437 sw1438\n sw1439 sw1440 sw1441 sw1442 sw1443 sw1444 sw1445 sw1446 sw1447 sw1448 sw1449 sw1450\n sw1451 sw1452 sw1453 sw1454 sw1455 sw1456 sw1457 sw1458 sw1459 sw1460 sw1461 sw1462\n sw1463 sw1464 sw1465 sw1466 sw1467 sw1468 sw1469 sw1470 sw1471 sw1472 sw1473 sw1474\n sw1475 sw1476 sw1477 sw1478 sw1479 sw1480 sw1481 sw1482 sw1483 sw1484 sw1485 sw1486\n sw1487 sw1488 sw1489 sw1490 sw1491 sw1492 sw1493 sw1494 sw1495 sw1496 sw1497 sw1498\n sw1499 sw1500 sw1501 sw1502 sw1503 sw1504 sw1505 sw1506 sw1507 sw1508 sw1509 sw1510\n sw1511 sw1512 sw1513 sw1514 sw1515 sw1516 sw1517 sw1518 sw1519 sw1520 sw1521 sw1522\n sw1523 sw1524 sw1525 sw1526 sw1527 sw1528 sw1529 sw1530 sw1531 sw1532 sw1533 sw1534\n sw1535 sw1536 sw1537 sw1538 sw1539 sw1540 sw1541 sw1542 sw1543 sw1544 sw1545 sw1546\n sw1547 sw1548 sw1549 sw1550 sw1551 sw1552 sw1553 sw1554 sw1555 sw1556 sw1557 sw1558\n sw1559 sw1560 sw1561 sw1562 sw1563 sw1564 sw1565 sw1566 sw1567 sw1568 sw1569 sw1570\n sw1571 sw1572 sw1573 sw1574 sw1575 sw1576 sw1577 sw1578 sw1579 sw1580 sw1581 sw1582\n sw1583 sw1584 sw1585 sw1586 sw1587 sw1588 sw1589 sw1590 sw1591 sw1592 sw1593 sw1594\n sw1595 sw1596 sw1597 sw1598 sw1599 sw1600 sw1601 sw1602 sw1603 sw1604 sw1605 sw1606\n sw1607 sw1608 sw1609 sw1610 sw1611 sw1612 sw1613 sw1614 sw1615 sw1616 sw1617 sw1618\n sw1619 sw1620 sw1621 sw1622 sw1623 sw1624\n\nGenerating · 16s (~212.2 tok/s)\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑2.4k ↓160 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 8, + "screen": " sw1907 sw1908 sw1909 sw1910 sw1911 sw1912 sw1913 sw1914 sw1915 sw1916 sw1917 sw1918\n sw1919 sw1920 sw1921 sw1922 sw1923 sw1924 sw1925 sw1926 sw1927 sw1928 sw1929 sw1930\n sw1931 sw1932 sw1933 sw1934 sw1935 sw1936 sw1937 sw1938 sw1939 sw1940 sw1941 sw1942\n sw1943 sw1944 sw1945 sw1946 sw1947 sw1948 sw1949 sw1950 sw1951 sw1952 sw1953 sw1954\n sw1955 sw1956 sw1957 sw1958 sw1959 sw1960 sw1961 sw1962 sw1963 sw1964 sw1965 sw1966\n sw1967 sw1968 sw1969 sw1970 sw1971 sw1972 sw1973 sw1974 sw1975 sw1976 sw1977 sw1978\n sw1979 sw1980 sw1981 sw1982 sw1983 sw1984 sw1985 sw1986 sw1987 sw1988 sw1989 sw1990\n sw1991 sw1992 sw1993 sw1994 sw1995 sw1996 sw1997 sw1998 sw1999 sw2000 sw2001 sw2002\n sw2003 sw2004 sw2005 sw2006 sw2007 sw2008 sw2009 sw2010 sw2011 sw2012 sw2013 sw2014\n sw2015 sw2016 sw2017 sw2018 sw2019 sw2020 sw2021 sw2022 sw2023 sw2024 sw2025 sw2026\n sw2027 sw2028 sw2029 sw2030 sw2031 sw2032 sw2033 sw2034 sw2035 sw2036 sw2037 sw2038\n sw2039 sw2040 sw2041 sw2042 sw2043 sw2044 sw2045 sw2046 sw2047 sw2048 sw2049 sw2050\n sw2051 sw2052 sw2053 sw2054 sw2055 sw2056 sw2057 sw2058 sw2059 sw2060 sw2061 sw2062\n sw2063 sw2064 sw2065 sw2066 sw2067 sw2068 sw2069 sw2070 sw2071 sw2072 sw2073 sw2074\n sw2075 sw2076 sw2077 sw2078 sw2079 sw2080 sw2081 sw2082 sw2083 sw2084 sw2085 sw2086\n sw2087 sw2088 sw2089 sw2090 sw2091 sw2092 sw2093 sw2094 sw2095 sw2096 sw2097 sw2098\n sw2099 sw2100 sw2101 sw2102 sw2103 sw2104 sw2105 sw2106 sw2107 sw2108 sw2109 sw2110\n sw2111 sw2112 sw2113 sw2114 sw2115 sw2116 sw2117 sw2118 sw2119 sw2120 sw2121 sw2122\n sw2123 sw2124 sw2125 sw2126 sw2127 sw2128 sw2129 sw2130 sw2131 sw2132 sw2133 sw2134\n sw2135 sw2136 sw2137\n\nGenerating · 21s (~227.9 tok/s)\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑2.4k ↓160 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 9, + "screen": " sw2243 sw2244 sw2245 sw2246 sw2247 sw2248 sw2249 sw2250 sw2251 sw2252 sw2253 sw2254\n sw2255 sw2256 sw2257 sw2258 sw2259 sw2260 sw2261 sw2262 sw2263 sw2264 sw2265 sw2266\n sw2267 sw2268 sw2269 sw2270 sw2271 sw2272 sw2273 sw2274 sw2275 sw2276 sw2277 sw2278\n sw2279 sw2280 sw2281 sw2282 sw2283 sw2284 sw2285 sw2286 sw2287 sw2288 sw2289 sw2290\n sw2291 sw2292 sw2293 sw2294 sw2295 sw2296 sw2297 sw2298 sw2299 sw2300 sw2301 sw2302\n sw2303 sw2304 sw2305 sw2306 sw2307 sw2308 sw2309 sw2310 sw2311 sw2312 sw2313 sw2314\n sw2315 sw2316 sw2317 sw2318 sw2319 sw2320 sw2321 sw2322 sw2323 sw2324 sw2325 sw2326\n sw2327 sw2328 sw2329 sw2330 sw2331 sw2332 sw2333 sw2334 sw2335 sw2336 sw2337 sw2338\n sw2339 sw2340 sw2341 sw2342 sw2343 sw2344 sw2345 sw2346 sw2347 sw2348 sw2349 sw2350\n sw2351 sw2352 sw2353 sw2354 sw2355 sw2356 sw2357 sw2358 sw2359 sw2360 sw2361 sw2362\n sw2363 sw2364 sw2365 sw2366 sw2367 sw2368 sw2369 sw2370 sw2371 sw2372 sw2373 sw2374\n sw2375 sw2376 sw2377 sw2378 sw2379 sw2380 sw2381 sw2382 sw2383 sw2384 sw2385 sw2386\n sw2387 sw2388 sw2389 sw2390 sw2391 sw2392 sw2393 sw2394 sw2395 sw2396 sw2397 sw2398\n sw2399 sw2400 sw2401 sw2402 sw2403 sw2404 sw2405 sw2406 sw2407 sw2408 sw2409 sw2410\n sw2411 sw2412 sw2413 sw2414 sw2415 sw2416 sw2417 sw2418 sw2419 sw2420 sw2421 sw2422\n sw2423 sw2424 sw2425 sw2426 sw2427 sw2428 sw2429 sw2430 sw2431 sw2432 sw2433 sw2434\n sw2435 sw2436 sw2437 sw2438 sw2439 sw2440 sw2441 sw2442 sw2443 sw2444 sw2445 sw2446\n sw2447 sw2448 sw2449 sw2450 sw2451 sw2452 sw2453 sw2454 sw2455 sw2456 sw2457 sw2458\n sw2459 sw2460 sw2461 sw2462 sw2463 sw2464 sw2465 sw2466 sw2467 sw2468 sw2469 sw2470\n sw2471 sw2472 sw2473 sw2474 sw2475 sw2476 sw2477 sw2478 sw2479 sw2480 sw2481 sw2482\n sw2483 sw2484 sw2485 sw2486 sw2487 sw2488 sw2489 sw2490 sw2491 sw2492 sw2493 sw2494\n sw2495 sw2496 sw2497 sw2498 sw2499\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑3.6k ↓240 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 10, + "screen": " sw359 sw360 sw361 sw362 sw363 sw364 sw365 sw366 sw367 sw368 sw369 sw370\n sw371 sw372 sw373 sw374 sw375 sw376 sw377 sw378 sw379 sw380 sw381 sw382\n sw383 sw384 sw385 sw386 sw387 sw388 sw389 sw390 sw391 sw392 sw393 sw394\n sw395 sw396 sw397 sw398 sw399 sw400 sw401 sw402 sw403 sw404 sw405 sw406\n sw407 sw408 sw409 sw410 sw411 sw412 sw413 sw414 sw415 sw416 sw417 sw418\n sw419 sw420 sw421 sw422 sw423 sw424 sw425 sw426 sw427 sw428 sw429 sw430\n sw431 sw432 sw433 sw434 sw435 sw436 sw437 sw438 sw439 sw440 sw441 sw442\n sw443 sw444 sw445 sw446 sw447 sw448 sw449 sw450 sw451 sw452 sw453 sw454\n sw455 sw456 sw457 sw458 sw459 sw460 sw461 sw462 sw463 sw464 sw465 sw466\n sw467 sw468 sw469 sw470 sw471 sw472 sw473 sw474 sw475 sw476 sw477 sw478\n sw479 sw480 sw481 sw482 sw483 sw484 sw485 sw486 sw487 sw488 sw489 sw490\n sw491 sw492 sw493 sw494 sw495 sw496 sw497 sw498 sw499 sw500 sw501 sw502\n sw503 sw504 sw505 sw506 sw507 sw508 sw509 sw510 sw511 sw512 sw513 sw514\n sw515 sw516 sw517 sw518 sw519 sw520 sw521 sw522 sw523 sw524 sw525 sw526\n sw527 sw528 sw529 sw530 sw531 sw532 sw533 sw534 sw535 sw536 sw537 sw538\n sw539 sw540 sw541 sw542 sw543 sw544 sw545 sw546 sw547 sw548 sw549 sw550\n sw551 sw552 sw553 sw554 sw555 sw556 sw557 sw558 sw559 sw560 sw561 sw562\n sw563 sw564 sw565 sw566 sw567 sw568 sw569 sw570 sw571 sw572 sw573 sw574\n sw575 sw576 sw577 sw578 sw579 sw580 sw581 sw582 sw583 sw584 sw585 sw586\n sw587 sw588 sw589 sw590 sw591 sw592\n\nGenerating · 6s (~161.5 tok/s)\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑3.6k ↓240 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 11, + "screen": " sw875 sw876 sw877 sw878 sw879 sw880 sw881 sw882 sw883 sw884 sw885 sw886\n sw887 sw888 sw889 sw890 sw891 sw892 sw893 sw894 sw895 sw896 sw897 sw898\n sw899 sw900 sw901 sw902 sw903 sw904 sw905 sw906 sw907 sw908 sw909 sw910\n sw911 sw912 sw913 sw914 sw915 sw916 sw917 sw918 sw919 sw920 sw921 sw922\n sw923 sw924 sw925 sw926 sw927 sw928 sw929 sw930 sw931 sw932 sw933 sw934\n sw935 sw936 sw937 sw938 sw939 sw940 sw941 sw942 sw943 sw944 sw945 sw946\n sw947 sw948 sw949 sw950 sw951 sw952 sw953 sw954 sw955 sw956 sw957 sw958\n sw959 sw960 sw961 sw962 sw963 sw964 sw965 sw966 sw967 sw968 sw969 sw970\n sw971 sw972 sw973 sw974 sw975 sw976 sw977 sw978 sw979 sw980 sw981 sw982\n sw983 sw984 sw985 sw986 sw987 sw988 sw989 sw990 sw991 sw992 sw993 sw994\n sw995 sw996 sw997 sw998 sw999 sw1000 sw1001 sw1002 sw1003 sw1004 sw1005 sw1006\n sw1007 sw1008 sw1009 sw1010 sw1011 sw1012 sw1013 sw1014 sw1015 sw1016 sw1017 sw1018\n sw1019 sw1020 sw1021 sw1022 sw1023 sw1024 sw1025 sw1026 sw1027 sw1028 sw1029 sw1030\n sw1031 sw1032 sw1033 sw1034 sw1035 sw1036 sw1037 sw1038 sw1039 sw1040 sw1041 sw1042\n sw1043 sw1044 sw1045 sw1046 sw1047 sw1048 sw1049 sw1050 sw1051 sw1052 sw1053 sw1054\n sw1055 sw1056 sw1057 sw1058 sw1059 sw1060 sw1061 sw1062 sw1063 sw1064 sw1065 sw1066\n sw1067 sw1068 sw1069 sw1070 sw1071 sw1072 sw1073 sw1074 sw1075 sw1076 sw1077 sw1078\n sw1079 sw1080 sw1081 sw1082 sw1083 sw1084 sw1085 sw1086 sw1087 sw1088 sw1089 sw1090\n sw1091 sw1092 sw1093 sw1094 sw1095 sw1096 sw1097 sw1098 sw1099 sw1100 sw1101 sw1102\n sw1103 sw1104 sw1105\n\nGenerating · 11s (~180.5 tok/s)\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑3.6k ↓240 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 12, + "screen": " sw1379 sw1380 sw1381 sw1382 sw1383 sw1384 sw1385 sw1386 sw1387 sw1388 sw1389 sw1390\n sw1391 sw1392 sw1393 sw1394 sw1395 sw1396 sw1397 sw1398 sw1399 sw1400 sw1401 sw1402\n sw1403 sw1404 sw1405 sw1406 sw1407 sw1408 sw1409 sw1410 sw1411 sw1412 sw1413 sw1414\n sw1415 sw1416 sw1417 sw1418 sw1419 sw1420 sw1421 sw1422 sw1423 sw1424 sw1425 sw1426\n sw1427 sw1428 sw1429 sw1430 sw1431 sw1432 sw1433 sw1434 sw1435 sw1436 sw1437 sw1438\n sw1439 sw1440 sw1441 sw1442 sw1443 sw1444 sw1445 sw1446 sw1447 sw1448 sw1449 sw1450\n sw1451 sw1452 sw1453 sw1454 sw1455 sw1456 sw1457 sw1458 sw1459 sw1460 sw1461 sw1462\n sw1463 sw1464 sw1465 sw1466 sw1467 sw1468 sw1469 sw1470 sw1471 sw1472 sw1473 sw1474\n sw1475 sw1476 sw1477 sw1478 sw1479 sw1480 sw1481 sw1482 sw1483 sw1484 sw1485 sw1486\n sw1487 sw1488 sw1489 sw1490 sw1491 sw1492 sw1493 sw1494 sw1495 sw1496 sw1497 sw1498\n sw1499 sw1500 sw1501 sw1502 sw1503 sw1504 sw1505 sw1506 sw1507 sw1508 sw1509 sw1510\n sw1511 sw1512 sw1513 sw1514 sw1515 sw1516 sw1517 sw1518 sw1519 sw1520 sw1521 sw1522\n sw1523 sw1524 sw1525 sw1526 sw1527 sw1528 sw1529 sw1530 sw1531 sw1532 sw1533 sw1534\n sw1535 sw1536 sw1537 sw1538 sw1539 sw1540 sw1541 sw1542 sw1543 sw1544 sw1545 sw1546\n sw1547 sw1548 sw1549 sw1550 sw1551 sw1552 sw1553 sw1554 sw1555 sw1556 sw1557 sw1558\n sw1559 sw1560 sw1561 sw1562 sw1563 sw1564 sw1565 sw1566 sw1567 sw1568 sw1569 sw1570\n sw1571 sw1572 sw1573 sw1574 sw1575 sw1576 sw1577 sw1578 sw1579 sw1580 sw1581 sw1582\n sw1583 sw1584 sw1585 sw1586 sw1587 sw1588 sw1589 sw1590 sw1591 sw1592 sw1593 sw1594\n sw1595 sw1596 sw1597 sw1598 sw1599 sw1600 sw1601 sw1602 sw1603 sw1604 sw1605 sw1606\n sw1607 sw1608 sw1609 sw1610 sw1611 sw1612 sw1613 sw1614 sw1615 sw1616 sw1617 sw1618\n\nGenerating · 16s (~211.6 tok/s)\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑3.6k ↓240 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 13, + "screen": " sw1895 sw1896 sw1897 sw1898 sw1899 sw1900 sw1901 sw1902 sw1903 sw1904 sw1905 sw1906\n sw1907 sw1908 sw1909 sw1910 sw1911 sw1912 sw1913 sw1914 sw1915 sw1916 sw1917 sw1918\n sw1919 sw1920 sw1921 sw1922 sw1923 sw1924 sw1925 sw1926 sw1927 sw1928 sw1929 sw1930\n sw1931 sw1932 sw1933 sw1934 sw1935 sw1936 sw1937 sw1938 sw1939 sw1940 sw1941 sw1942\n sw1943 sw1944 sw1945 sw1946 sw1947 sw1948 sw1949 sw1950 sw1951 sw1952 sw1953 sw1954\n sw1955 sw1956 sw1957 sw1958 sw1959 sw1960 sw1961 sw1962 sw1963 sw1964 sw1965 sw1966\n sw1967 sw1968 sw1969 sw1970 sw1971 sw1972 sw1973 sw1974 sw1975 sw1976 sw1977 sw1978\n sw1979 sw1980 sw1981 sw1982 sw1983 sw1984 sw1985 sw1986 sw1987 sw1988 sw1989 sw1990\n sw1991 sw1992 sw1993 sw1994 sw1995 sw1996 sw1997 sw1998 sw1999 sw2000 sw2001 sw2002\n sw2003 sw2004 sw2005 sw2006 sw2007 sw2008 sw2009 sw2010 sw2011 sw2012 sw2013 sw2014\n sw2015 sw2016 sw2017 sw2018 sw2019 sw2020 sw2021 sw2022 sw2023 sw2024 sw2025 sw2026\n sw2027 sw2028 sw2029 sw2030 sw2031 sw2032 sw2033 sw2034 sw2035 sw2036 sw2037 sw2038\n sw2039 sw2040 sw2041 sw2042 sw2043 sw2044 sw2045 sw2046 sw2047 sw2048 sw2049 sw2050\n sw2051 sw2052 sw2053 sw2054 sw2055 sw2056 sw2057 sw2058 sw2059 sw2060 sw2061 sw2062\n sw2063 sw2064 sw2065 sw2066 sw2067 sw2068 sw2069 sw2070 sw2071 sw2072 sw2073 sw2074\n sw2075 sw2076 sw2077 sw2078 sw2079 sw2080 sw2081 sw2082 sw2083 sw2084 sw2085 sw2086\n sw2087 sw2088 sw2089 sw2090 sw2091 sw2092 sw2093 sw2094 sw2095 sw2096 sw2097 sw2098\n sw2099 sw2100 sw2101 sw2102 sw2103 sw2104 sw2105 sw2106 sw2107 sw2108 sw2109 sw2110\n sw2111 sw2112 sw2113 sw2114 sw2115 sw2116 sw2117 sw2118 sw2119 sw2120 sw2121 sw2122\n sw2123 sw2124 sw2125 sw2126 sw2127 sw2128 sw2129 sw2130 sw2131 sw2132 sw2133\n\nGenerating · 21s (~229.0 tok/s)\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑3.6k ↓240 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 14, + "screen": " sw2243 sw2244 sw2245 sw2246 sw2247 sw2248 sw2249 sw2250 sw2251 sw2252 sw2253 sw2254\n sw2255 sw2256 sw2257 sw2258 sw2259 sw2260 sw2261 sw2262 sw2263 sw2264 sw2265 sw2266\n sw2267 sw2268 sw2269 sw2270 sw2271 sw2272 sw2273 sw2274 sw2275 sw2276 sw2277 sw2278\n sw2279 sw2280 sw2281 sw2282 sw2283 sw2284 sw2285 sw2286 sw2287 sw2288 sw2289 sw2290\n sw2291 sw2292 sw2293 sw2294 sw2295 sw2296 sw2297 sw2298 sw2299 sw2300 sw2301 sw2302\n sw2303 sw2304 sw2305 sw2306 sw2307 sw2308 sw2309 sw2310 sw2311 sw2312 sw2313 sw2314\n sw2315 sw2316 sw2317 sw2318 sw2319 sw2320 sw2321 sw2322 sw2323 sw2324 sw2325 sw2326\n sw2327 sw2328 sw2329 sw2330 sw2331 sw2332 sw2333 sw2334 sw2335 sw2336 sw2337 sw2338\n sw2339 sw2340 sw2341 sw2342 sw2343 sw2344 sw2345 sw2346 sw2347 sw2348 sw2349 sw2350\n sw2351 sw2352 sw2353 sw2354 sw2355 sw2356 sw2357 sw2358 sw2359 sw2360 sw2361 sw2362\n sw2363 sw2364 sw2365 sw2366 sw2367 sw2368 sw2369 sw2370 sw2371 sw2372 sw2373 sw2374\n sw2375 sw2376 sw2377 sw2378 sw2379 sw2380 sw2381 sw2382 sw2383 sw2384 sw2385 sw2386\n sw2387 sw2388 sw2389 sw2390 sw2391 sw2392 sw2393 sw2394 sw2395 sw2396 sw2397 sw2398\n sw2399 sw2400 sw2401 sw2402 sw2403 sw2404 sw2405 sw2406 sw2407 sw2408 sw2409 sw2410\n sw2411 sw2412 sw2413 sw2414 sw2415 sw2416 sw2417 sw2418 sw2419 sw2420 sw2421 sw2422\n sw2423 sw2424 sw2425 sw2426 sw2427 sw2428 sw2429 sw2430 sw2431 sw2432 sw2433 sw2434\n sw2435 sw2436 sw2437 sw2438 sw2439 sw2440 sw2441 sw2442 sw2443 sw2444 sw2445 sw2446\n sw2447 sw2448 sw2449 sw2450 sw2451 sw2452 sw2453 sw2454 sw2455 sw2456 sw2457 sw2458\n sw2459 sw2460 sw2461 sw2462 sw2463 sw2464 sw2465 sw2466 sw2467 sw2468 sw2469 sw2470\n sw2471 sw2472 sw2473 sw2474 sw2475 sw2476 sw2477 sw2478 sw2479 sw2480 sw2481 sw2482\n sw2483 sw2484 sw2485 sw2486 sw2487 sw2488 sw2489 sw2490 sw2491 sw2492 sw2493 sw2494\n sw2495 sw2496 sw2497 sw2498 sw2499\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑4.8k ↓320 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 15, + "screen": " sw359 sw360 sw361 sw362 sw363 sw364 sw365 sw366 sw367 sw368 sw369 sw370\n sw371 sw372 sw373 sw374 sw375 sw376 sw377 sw378 sw379 sw380 sw381 sw382\n sw383 sw384 sw385 sw386 sw387 sw388 sw389 sw390 sw391 sw392 sw393 sw394\n sw395 sw396 sw397 sw398 sw399 sw400 sw401 sw402 sw403 sw404 sw405 sw406\n sw407 sw408 sw409 sw410 sw411 sw412 sw413 sw414 sw415 sw416 sw417 sw418\n sw419 sw420 sw421 sw422 sw423 sw424 sw425 sw426 sw427 sw428 sw429 sw430\n sw431 sw432 sw433 sw434 sw435 sw436 sw437 sw438 sw439 sw440 sw441 sw442\n sw443 sw444 sw445 sw446 sw447 sw448 sw449 sw450 sw451 sw452 sw453 sw454\n sw455 sw456 sw457 sw458 sw459 sw460 sw461 sw462 sw463 sw464 sw465 sw466\n sw467 sw468 sw469 sw470 sw471 sw472 sw473 sw474 sw475 sw476 sw477 sw478\n sw479 sw480 sw481 sw482 sw483 sw484 sw485 sw486 sw487 sw488 sw489 sw490\n sw491 sw492 sw493 sw494 sw495 sw496 sw497 sw498 sw499 sw500 sw501 sw502\n sw503 sw504 sw505 sw506 sw507 sw508 sw509 sw510 sw511 sw512 sw513 sw514\n sw515 sw516 sw517 sw518 sw519 sw520 sw521 sw522 sw523 sw524 sw525 sw526\n sw527 sw528 sw529 sw530 sw531 sw532 sw533 sw534 sw535 sw536 sw537 sw538\n sw539 sw540 sw541 sw542 sw543 sw544 sw545 sw546 sw547 sw548 sw549 sw550\n sw551 sw552 sw553 sw554 sw555 sw556 sw557 sw558 sw559 sw560 sw561 sw562\n sw563 sw564 sw565 sw566 sw567 sw568 sw569 sw570 sw571 sw572 sw573 sw574\n sw575 sw576 sw577 sw578 sw579 sw580 sw581 sw582 sw583 sw584 sw585 sw586\n sw587 sw588 sw589 sw590 sw591 sw592 sw593 sw594\n\nGenerating · 6s (~158.6 tok/s)\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑4.8k ↓320 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 16, + "screen": " sw875 sw876 sw877 sw878 sw879 sw880 sw881 sw882 sw883 sw884 sw885 sw886\n sw887 sw888 sw889 sw890 sw891 sw892 sw893 sw894 sw895 sw896 sw897 sw898\n sw899 sw900 sw901 sw902 sw903 sw904 sw905 sw906 sw907 sw908 sw909 sw910\n sw911 sw912 sw913 sw914 sw915 sw916 sw917 sw918 sw919 sw920 sw921 sw922\n sw923 sw924 sw925 sw926 sw927 sw928 sw929 sw930 sw931 sw932 sw933 sw934\n sw935 sw936 sw937 sw938 sw939 sw940 sw941 sw942 sw943 sw944 sw945 sw946\n sw947 sw948 sw949 sw950 sw951 sw952 sw953 sw954 sw955 sw956 sw957 sw958\n sw959 sw960 sw961 sw962 sw963 sw964 sw965 sw966 sw967 sw968 sw969 sw970\n sw971 sw972 sw973 sw974 sw975 sw976 sw977 sw978 sw979 sw980 sw981 sw982\n sw983 sw984 sw985 sw986 sw987 sw988 sw989 sw990 sw991 sw992 sw993 sw994\n sw995 sw996 sw997 sw998 sw999 sw1000 sw1001 sw1002 sw1003 sw1004 sw1005 sw1006\n sw1007 sw1008 sw1009 sw1010 sw1011 sw1012 sw1013 sw1014 sw1015 sw1016 sw1017 sw1018\n sw1019 sw1020 sw1021 sw1022 sw1023 sw1024 sw1025 sw1026 sw1027 sw1028 sw1029 sw1030\n sw1031 sw1032 sw1033 sw1034 sw1035 sw1036 sw1037 sw1038 sw1039 sw1040 sw1041 sw1042\n sw1043 sw1044 sw1045 sw1046 sw1047 sw1048 sw1049 sw1050 sw1051 sw1052 sw1053 sw1054\n sw1055 sw1056 sw1057 sw1058 sw1059 sw1060 sw1061 sw1062 sw1063 sw1064 sw1065 sw1066\n sw1067 sw1068 sw1069 sw1070 sw1071 sw1072 sw1073 sw1074 sw1075 sw1076 sw1077 sw1078\n sw1079 sw1080 sw1081 sw1082 sw1083 sw1084 sw1085 sw1086 sw1087 sw1088 sw1089 sw1090\n sw1091 sw1092 sw1093 sw1094 sw1095 sw1096 sw1097 sw1098 sw1099 sw1100 sw1101 sw1102\n sw1103 sw1104\n\nGenerating · 11s (~181.9 tok/s)\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑4.8k ↓320 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 17, + "screen": " sw1379 sw1380 sw1381 sw1382 sw1383 sw1384 sw1385 sw1386 sw1387 sw1388 sw1389 sw1390\n sw1391 sw1392 sw1393 sw1394 sw1395 sw1396 sw1397 sw1398 sw1399 sw1400 sw1401 sw1402\n sw1403 sw1404 sw1405 sw1406 sw1407 sw1408 sw1409 sw1410 sw1411 sw1412 sw1413 sw1414\n sw1415 sw1416 sw1417 sw1418 sw1419 sw1420 sw1421 sw1422 sw1423 sw1424 sw1425 sw1426\n sw1427 sw1428 sw1429 sw1430 sw1431 sw1432 sw1433 sw1434 sw1435 sw1436 sw1437 sw1438\n sw1439 sw1440 sw1441 sw1442 sw1443 sw1444 sw1445 sw1446 sw1447 sw1448 sw1449 sw1450\n sw1451 sw1452 sw1453 sw1454 sw1455 sw1456 sw1457 sw1458 sw1459 sw1460 sw1461 sw1462\n sw1463 sw1464 sw1465 sw1466 sw1467 sw1468 sw1469 sw1470 sw1471 sw1472 sw1473 sw1474\n sw1475 sw1476 sw1477 sw1478 sw1479 sw1480 sw1481 sw1482 sw1483 sw1484 sw1485 sw1486\n sw1487 sw1488 sw1489 sw1490 sw1491 sw1492 sw1493 sw1494 sw1495 sw1496 sw1497 sw1498\n sw1499 sw1500 sw1501 sw1502 sw1503 sw1504 sw1505 sw1506 sw1507 sw1508 sw1509 sw1510\n sw1511 sw1512 sw1513 sw1514 sw1515 sw1516 sw1517 sw1518 sw1519 sw1520 sw1521 sw1522\n sw1523 sw1524 sw1525 sw1526 sw1527 sw1528 sw1529 sw1530 sw1531 sw1532 sw1533 sw1534\n sw1535 sw1536 sw1537 sw1538 sw1539 sw1540 sw1541 sw1542 sw1543 sw1544 sw1545 sw1546\n sw1547 sw1548 sw1549 sw1550 sw1551 sw1552 sw1553 sw1554 sw1555 sw1556 sw1557 sw1558\n sw1559 sw1560 sw1561 sw1562 sw1563 sw1564 sw1565 sw1566 sw1567 sw1568 sw1569 sw1570\n sw1571 sw1572 sw1573 sw1574 sw1575 sw1576 sw1577 sw1578 sw1579 sw1580 sw1581 sw1582\n sw1583 sw1584 sw1585 sw1586 sw1587 sw1588 sw1589 sw1590 sw1591 sw1592 sw1593 sw1594\n sw1595 sw1596 sw1597 sw1598 sw1599 sw1600 sw1601 sw1602 sw1603 sw1604 sw1605 sw1606\n sw1607 sw1608 sw1609 sw1610 sw1611 sw1612 sw1613 sw1614\n\nGenerating · 16s (~213.6 tok/s)\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑4.8k ↓320 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 18, + "screen": " sw1907 sw1908 sw1909 sw1910 sw1911 sw1912 sw1913 sw1914 sw1915 sw1916 sw1917 sw1918\n sw1919 sw1920 sw1921 sw1922 sw1923 sw1924 sw1925 sw1926 sw1927 sw1928 sw1929 sw1930\n sw1931 sw1932 sw1933 sw1934 sw1935 sw1936 sw1937 sw1938 sw1939 sw1940 sw1941 sw1942\n sw1943 sw1944 sw1945 sw1946 sw1947 sw1948 sw1949 sw1950 sw1951 sw1952 sw1953 sw1954\n sw1955 sw1956 sw1957 sw1958 sw1959 sw1960 sw1961 sw1962 sw1963 sw1964 sw1965 sw1966\n sw1967 sw1968 sw1969 sw1970 sw1971 sw1972 sw1973 sw1974 sw1975 sw1976 sw1977 sw1978\n sw1979 sw1980 sw1981 sw1982 sw1983 sw1984 sw1985 sw1986 sw1987 sw1988 sw1989 sw1990\n sw1991 sw1992 sw1993 sw1994 sw1995 sw1996 sw1997 sw1998 sw1999 sw2000 sw2001 sw2002\n sw2003 sw2004 sw2005 sw2006 sw2007 sw2008 sw2009 sw2010 sw2011 sw2012 sw2013 sw2014\n sw2015 sw2016 sw2017 sw2018 sw2019 sw2020 sw2021 sw2022 sw2023 sw2024 sw2025 sw2026\n sw2027 sw2028 sw2029 sw2030 sw2031 sw2032 sw2033 sw2034 sw2035 sw2036 sw2037 sw2038\n sw2039 sw2040 sw2041 sw2042 sw2043 sw2044 sw2045 sw2046 sw2047 sw2048 sw2049 sw2050\n sw2051 sw2052 sw2053 sw2054 sw2055 sw2056 sw2057 sw2058 sw2059 sw2060 sw2061 sw2062\n sw2063 sw2064 sw2065 sw2066 sw2067 sw2068 sw2069 sw2070 sw2071 sw2072 sw2073 sw2074\n sw2075 sw2076 sw2077 sw2078 sw2079 sw2080 sw2081 sw2082 sw2083 sw2084 sw2085 sw2086\n sw2087 sw2088 sw2089 sw2090 sw2091 sw2092 sw2093 sw2094 sw2095 sw2096 sw2097 sw2098\n sw2099 sw2100 sw2101 sw2102 sw2103 sw2104 sw2105 sw2106 sw2107 sw2108 sw2109 sw2110\n sw2111 sw2112 sw2113 sw2114 sw2115 sw2116 sw2117 sw2118 sw2119 sw2120 sw2121 sw2122\n sw2123 sw2124 sw2125 sw2126 sw2127 sw2128 sw2129 sw2130 sw2131 sw2132 sw2133 sw2134\n sw2135 sw2136 sw2137 sw2138\n\nGenerating · 21s (~228.5 tok/s)\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑4.8k ↓320 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 19, + "screen": " sw2243 sw2244 sw2245 sw2246 sw2247 sw2248 sw2249 sw2250 sw2251 sw2252 sw2253 sw2254\n sw2255 sw2256 sw2257 sw2258 sw2259 sw2260 sw2261 sw2262 sw2263 sw2264 sw2265 sw2266\n sw2267 sw2268 sw2269 sw2270 sw2271 sw2272 sw2273 sw2274 sw2275 sw2276 sw2277 sw2278\n sw2279 sw2280 sw2281 sw2282 sw2283 sw2284 sw2285 sw2286 sw2287 sw2288 sw2289 sw2290\n sw2291 sw2292 sw2293 sw2294 sw2295 sw2296 sw2297 sw2298 sw2299 sw2300 sw2301 sw2302\n sw2303 sw2304 sw2305 sw2306 sw2307 sw2308 sw2309 sw2310 sw2311 sw2312 sw2313 sw2314\n sw2315 sw2316 sw2317 sw2318 sw2319 sw2320 sw2321 sw2322 sw2323 sw2324 sw2325 sw2326\n sw2327 sw2328 sw2329 sw2330 sw2331 sw2332 sw2333 sw2334 sw2335 sw2336 sw2337 sw2338\n sw2339 sw2340 sw2341 sw2342 sw2343 sw2344 sw2345 sw2346 sw2347 sw2348 sw2349 sw2350\n sw2351 sw2352 sw2353 sw2354 sw2355 sw2356 sw2357 sw2358 sw2359 sw2360 sw2361 sw2362\n sw2363 sw2364 sw2365 sw2366 sw2367 sw2368 sw2369 sw2370 sw2371 sw2372 sw2373 sw2374\n sw2375 sw2376 sw2377 sw2378 sw2379 sw2380 sw2381 sw2382 sw2383 sw2384 sw2385 sw2386\n sw2387 sw2388 sw2389 sw2390 sw2391 sw2392 sw2393 sw2394 sw2395 sw2396 sw2397 sw2398\n sw2399 sw2400 sw2401 sw2402 sw2403 sw2404 sw2405 sw2406 sw2407 sw2408 sw2409 sw2410\n sw2411 sw2412 sw2413 sw2414 sw2415 sw2416 sw2417 sw2418 sw2419 sw2420 sw2421 sw2422\n sw2423 sw2424 sw2425 sw2426 sw2427 sw2428 sw2429 sw2430 sw2431 sw2432 sw2433 sw2434\n sw2435 sw2436 sw2437 sw2438 sw2439 sw2440 sw2441 sw2442 sw2443 sw2444 sw2445 sw2446\n sw2447 sw2448 sw2449 sw2450 sw2451 sw2452 sw2453 sw2454 sw2455 sw2456 sw2457 sw2458\n sw2459 sw2460 sw2461 sw2462 sw2463 sw2464 sw2465 sw2466 sw2467 sw2468 sw2469 sw2470\n sw2471 sw2472 sw2473 sw2474 sw2475 sw2476 sw2477 sw2478 sw2479 sw2480 sw2481 sw2482\n sw2483 sw2484 sw2485 sw2486 sw2487 sw2488 sw2489 sw2490 sw2491 sw2492 sw2493 sw2494\n sw2495 sw2496 sw2497 sw2498 sw2499\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (resume menu)", + "index": 0, + "screen": "(list not painted within 5000 ms; 20 keys not sent)\n sw2459 sw2460 sw2461 sw2462 sw2463 sw2464 sw2465 sw2466 sw2467 sw2468 sw2469 sw2470\n sw2471 sw2472 sw2473 sw2474 sw2475 sw2476 sw2477 sw2478 sw2479 sw2480 sw2481 sw2482\n sw2483 sw2484 sw2485 sw2486 sw2487 sw2488 sw2489 sw2490 sw2491 sw2492 sw2493 sw2494\n sw2495 sw2496 sw2497 sw2498 sw2499\n\n ❯ stream a long reply please \n\n sw0 sw1 sw2 sw3 sw4 sw5 sw6 sw7 sw8 sw9 sw10\n sw11 sw12 sw13 sw14 sw15 sw16 sw17 sw18 sw19 sw20 sw21 sw22\n sw23 sw24 sw25 sw26 sw27 sw28 sw29 sw30 sw31 sw32 sw33 sw34\n sw35\n\nGenerating · 0s\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Commands │\n│ › /resume List saved conversations or resume one by ID │\n│ │\n│ ──────────────────────────────────────────────────────────────────────────────────────────────── │\n│ ↑/↓ select · Enter run · Tab complete · Esc dismiss │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ /resume \nEnter steer │ Alt+Enter follow-up │ /cancel stop\n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 3.2t/s · 0% cached · Ctx last 1k\n\n\n\n\n\n\n\n\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "scroll (resume page down/up)", + "index": 0, + "screen": "(list not painted within 5000 ms; 10 keys not sent)\n sw2459 sw2460 sw2461 sw2462 sw2463 sw2464 sw2465 sw2466 sw2467 sw2468 sw2469 sw2470\n sw2471 sw2472 sw2473 sw2474 sw2475 sw2476 sw2477 sw2478 sw2479 sw2480 sw2481 sw2482\n sw2483 sw2484 sw2485 sw2486 sw2487 sw2488 sw2489 sw2490 sw2491 sw2492 sw2493 sw2494\n sw2495 sw2496 sw2497 sw2498 sw2499\n\n ❯ stream a long reply please \n\n sw0 sw1 sw2 sw3 sw4 sw5 sw6 sw7 sw8 sw9 sw10\n sw11 sw12 sw13 sw14 sw15 sw16 sw17 sw18 sw19 sw20 sw21 sw22\n sw23 sw24 sw25 sw26 sw27 sw28 sw29 sw30 sw31 sw32 sw33 sw34\n sw35\n\nGenerating · 0s\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Commands │\n│ › /resume List saved conversations or resume one by ID │\n│ │\n│ ──────────────────────────────────────────────────────────────────────────────────────────────── │\n│ ↑/↓ select · Enter run · Tab complete · Esc dismiss │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ /resume \nEnter steer │ Alt+Enter follow-up │ /cancel stop\n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 3.2t/s · 0% cached · Ctx last 1k\n\n\n\n\n\n\n\n\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "restart", + "index": 0, + "screen": "(not back at the empty composer after Escapes; CLI restarted)\n sw2459 sw2460 sw2461 sw2462 sw2463 sw2464 sw2465 sw2466 sw2467 sw2468 sw2469 sw2470\n sw2471 sw2472 sw2473 sw2474 sw2475 sw2476 sw2477 sw2478 sw2479 sw2480 sw2481 sw2482\n sw2483 sw2484 sw2485 sw2486 sw2487 sw2488 sw2489 sw2490 sw2491 sw2492 sw2493 sw2494\n sw2495 sw2496 sw2497 sw2498 sw2499\n\n ❯ stream a long reply please \n\n sw0 sw1 sw2 sw3 sw4 sw5 sw6 sw7 sw8 sw9 sw10\n sw11 sw12 sw13 sw14 sw15 sw16 sw17 sw18 sw19 sw20 sw21 sw22\n sw23 sw24 sw25 sw26 sw27 sw28 sw29 sw30 sw31 sw32 sw33 sw34\n sw35\n\nGenerating · 0s\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Commands │\n│ › /resume List saved conversations or resume one by ID │\n│ │\n│ ──────────────────────────────────────────────────────────────────────────────────────────────── │\n│ ↑/↓ select · Enter run · Tab complete · Esc dismiss │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ /resume \nEnter steer │ Alt+Enter follow-up │ /cancel stop\n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 3.2t/s · 0% cached · Ctx last 1k\n\n\n\n\n\n\n\n\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "shift+tab", + "index": 1, + "screen": "▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n\n ❯ stream a long reply please \n sw695 sw696 sw697 sw698 sw699 sw700 sw701 sw702 sw703 sw704 sw705 sw706\n sw707 sw708 sw709 sw710 sw711 sw712 sw713 sw714 sw715 sw716 sw717 sw718\n sw719 sw720 sw721 sw722 sw723 sw724 sw725 sw726 sw727 sw728 sw729 sw730\n sw731 sw732 sw733 sw734 sw735 sw736 sw737 sw738 sw739 sw740 sw741 sw742\n sw743 sw744 sw745 sw746 sw747 sw748 sw749 sw750 sw751 sw752 sw753 sw754\n sw755 sw756 sw757 sw758 sw759 sw760 sw761 sw762 sw763 sw764 sw765 sw766\n sw767 sw768 sw769 sw770 sw771 sw772 sw773 sw774 sw775 sw776 sw777 sw778\n sw779 sw780 sw781 sw782 sw783 sw784 sw785 sw786 sw787 sw788 sw789 sw790\n sw791 sw792 sw793 sw794 sw795 sw796 sw797 sw798 sw799 sw800 sw801 sw802\n sw803 sw804 sw805 sw806 sw807 sw808 sw809 sw810 sw811 sw812 sw813 sw814\n sw815 sw816 sw817 sw818 sw819 sw820 sw821 sw822 sw823 sw824 sw825 sw826\n sw827 sw828 sw829 sw830 sw831 sw832 sw833 sw834 sw835 sw836 sw837 sw838\n sw839 sw840 sw841 sw842 sw843 sw844 sw845 sw846 sw847 sw848 sw849 sw850\n sw851 sw852 sw853 sw854 sw855 sw856 sw857 sw858 sw859 sw860 sw861 sw862\n sw863 sw864 sw865 sw866 sw867 sw868 sw869 sw870 sw871 sw872 sw873 sw874\n sw875 sw876 sw877 sw878 sw879 sw880 sw881 sw882 sw883 sw884 sw885 sw886\n sw887 sw888 sw889 sw890 sw891 sw892 sw893 sw894 sw895 sw896 sw897 sw898\n sw899 sw900 sw901 sw902 sw903 sw904 sw905 sw906 sw907 sw908 sw909 sw910\n sw911 sw912 sw913 sw914 sw915 sw916 sw917 sw918 sw919 sw920 sw921 sw922\n sw923 sw924 sw925\n\nGenerating · 9s (~180.1 tok/s)\nCannot switch modes mid-session (tool/context mismatch). Use `/clear` first, then `/plan`.\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \nEnter steer │ Alt+Enter follow-up │ /cancel stop\n\n Bare │ mockprov/mock-alpha\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "shift+tab", + "index": 2, + "screen": "▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n\n ❯ stream a long reply please \n sw1211 sw1212 sw1213 sw1214 sw1215 sw1216 sw1217 sw1218 sw1219 sw1220 sw1221 sw1222\n sw1223 sw1224 sw1225 sw1226 sw1227 sw1228 sw1229 sw1230 sw1231 sw1232 sw1233 sw1234\n sw1235 sw1236 sw1237 sw1238 sw1239 sw1240 sw1241 sw1242 sw1243 sw1244 sw1245 sw1246\n sw1247 sw1248 sw1249 sw1250 sw1251 sw1252 sw1253 sw1254 sw1255 sw1256 sw1257 sw1258\n sw1259 sw1260 sw1261 sw1262 sw1263 sw1264 sw1265 sw1266 sw1267 sw1268 sw1269 sw1270\n sw1271 sw1272 sw1273 sw1274 sw1275 sw1276 sw1277 sw1278 sw1279 sw1280 sw1281 sw1282\n sw1283 sw1284 sw1285 sw1286 sw1287 sw1288 sw1289 sw1290 sw1291 sw1292 sw1293 sw1294\n sw1295 sw1296 sw1297 sw1298 sw1299 sw1300 sw1301 sw1302 sw1303 sw1304 sw1305 sw1306\n sw1307 sw1308 sw1309 sw1310 sw1311 sw1312 sw1313 sw1314 sw1315 sw1316 sw1317 sw1318\n sw1319 sw1320 sw1321 sw1322 sw1323 sw1324 sw1325 sw1326 sw1327 sw1328 sw1329 sw1330\n sw1331 sw1332 sw1333 sw1334 sw1335 sw1336 sw1337 sw1338 sw1339 sw1340 sw1341 sw1342\n sw1343 sw1344 sw1345 sw1346 sw1347 sw1348 sw1349 sw1350 sw1351 sw1352 sw1353 sw1354\n sw1355 sw1356 sw1357 sw1358 sw1359 sw1360 sw1361 sw1362 sw1363 sw1364 sw1365 sw1366\n sw1367 sw1368 sw1369 sw1370 sw1371 sw1372 sw1373 sw1374 sw1375 sw1376 sw1377 sw1378\n sw1379 sw1380 sw1381 sw1382 sw1383 sw1384 sw1385 sw1386 sw1387 sw1388 sw1389 sw1390\n sw1391 sw1392 sw1393 sw1394 sw1395 sw1396 sw1397 sw1398 sw1399 sw1400 sw1401 sw1402\n sw1403 sw1404 sw1405 sw1406 sw1407 sw1408 sw1409 sw1410 sw1411 sw1412 sw1413 sw1414\n sw1415 sw1416 sw1417 sw1418 sw1419 sw1420 sw1421 sw1422 sw1423 sw1424 sw1425 sw1426\n sw1427 sw1428 sw1429 sw1430 sw1431 sw1432 sw1433 sw1434 sw1435 sw1436 sw1437 sw1438\n sw1439 sw1440 sw1441 sw1442 sw1443 sw1444 sw1445 sw1446\n\nGenerating · 14s (~224.9 tok/s)\nCannot switch modes mid-session (tool/context mismatch). Use `/clear` first, then `/plan`.\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \nEnter steer │ Alt+Enter follow-up │ /cancel stop\n\n Bare │ mockprov/mock-alpha\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "shift+tab", + "index": 3, + "screen": "▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n\n ❯ stream a long reply please \n sw1727 sw1728 sw1729 sw1730 sw1731 sw1732 sw1733 sw1734 sw1735 sw1736 sw1737 sw1738\n sw1739 sw1740 sw1741 sw1742 sw1743 sw1744 sw1745 sw1746 sw1747 sw1748 sw1749 sw1750\n sw1751 sw1752 sw1753 sw1754 sw1755 sw1756 sw1757 sw1758 sw1759 sw1760 sw1761 sw1762\n sw1763 sw1764 sw1765 sw1766 sw1767 sw1768 sw1769 sw1770 sw1771 sw1772 sw1773 sw1774\n sw1775 sw1776 sw1777 sw1778 sw1779 sw1780 sw1781 sw1782 sw1783 sw1784 sw1785 sw1786\n sw1787 sw1788 sw1789 sw1790 sw1791 sw1792 sw1793 sw1794 sw1795 sw1796 sw1797 sw1798\n sw1799 sw1800 sw1801 sw1802 sw1803 sw1804 sw1805 sw1806 sw1807 sw1808 sw1809 sw1810\n sw1811 sw1812 sw1813 sw1814 sw1815 sw1816 sw1817 sw1818 sw1819 sw1820 sw1821 sw1822\n sw1823 sw1824 sw1825 sw1826 sw1827 sw1828 sw1829 sw1830 sw1831 sw1832 sw1833 sw1834\n sw1835 sw1836 sw1837 sw1838 sw1839 sw1840 sw1841 sw1842 sw1843 sw1844 sw1845 sw1846\n sw1847 sw1848 sw1849 sw1850 sw1851 sw1852 sw1853 sw1854 sw1855 sw1856 sw1857 sw1858\n sw1859 sw1860 sw1861 sw1862 sw1863 sw1864 sw1865 sw1866 sw1867 sw1868 sw1869 sw1870\n sw1871 sw1872 sw1873 sw1874 sw1875 sw1876 sw1877 sw1878 sw1879 sw1880 sw1881 sw1882\n sw1883 sw1884 sw1885 sw1886 sw1887 sw1888 sw1889 sw1890 sw1891 sw1892 sw1893 sw1894\n sw1895 sw1896 sw1897 sw1898 sw1899 sw1900 sw1901 sw1902 sw1903 sw1904 sw1905 sw1906\n sw1907 sw1908 sw1909 sw1910 sw1911 sw1912 sw1913 sw1914 sw1915 sw1916 sw1917 sw1918\n sw1919 sw1920 sw1921 sw1922 sw1923 sw1924 sw1925 sw1926 sw1927 sw1928 sw1929 sw1930\n sw1931 sw1932 sw1933 sw1934 sw1935 sw1936 sw1937 sw1938 sw1939 sw1940 sw1941 sw1942\n sw1943 sw1944 sw1945 sw1946 sw1947 sw1948 sw1949 sw1950 sw1951 sw1952 sw1953 sw1954\n sw1955 sw1956 sw1957 sw1958 sw1959 sw1960\n\nGenerating · 19s (~238.0 tok/s)\nCannot switch modes mid-session (tool/context mismatch). Use `/clear` first, then `/plan`.\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \nEnter steer │ Alt+Enter follow-up │ /cancel stop\n\n Bare │ mockprov/mock-alpha\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "shift+tab", + "index": 4, + "screen": "▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n\n ❯ stream a long reply please \n sw2231 sw2232 sw2233 sw2234 sw2235 sw2236 sw2237 sw2238 sw2239 sw2240 sw2241 sw2242\n sw2243 sw2244 sw2245 sw2246 sw2247 sw2248 sw2249 sw2250 sw2251 sw2252 sw2253 sw2254\n sw2255 sw2256 sw2257 sw2258 sw2259 sw2260 sw2261 sw2262 sw2263 sw2264 sw2265 sw2266\n sw2267 sw2268 sw2269 sw2270 sw2271 sw2272 sw2273 sw2274 sw2275 sw2276 sw2277 sw2278\n sw2279 sw2280 sw2281 sw2282 sw2283 sw2284 sw2285 sw2286 sw2287 sw2288 sw2289 sw2290\n sw2291 sw2292 sw2293 sw2294 sw2295 sw2296 sw2297 sw2298 sw2299 sw2300 sw2301 sw2302\n sw2303 sw2304 sw2305 sw2306 sw2307 sw2308 sw2309 sw2310 sw2311 sw2312 sw2313 sw2314\n sw2315 sw2316 sw2317 sw2318 sw2319 sw2320 sw2321 sw2322 sw2323 sw2324 sw2325 sw2326\n sw2327 sw2328 sw2329 sw2330 sw2331 sw2332 sw2333 sw2334 sw2335 sw2336 sw2337 sw2338\n sw2339 sw2340 sw2341 sw2342 sw2343 sw2344 sw2345 sw2346 sw2347 sw2348 sw2349 sw2350\n sw2351 sw2352 sw2353 sw2354 sw2355 sw2356 sw2357 sw2358 sw2359 sw2360 sw2361 sw2362\n sw2363 sw2364 sw2365 sw2366 sw2367 sw2368 sw2369 sw2370 sw2371 sw2372 sw2373 sw2374\n sw2375 sw2376 sw2377 sw2378 sw2379 sw2380 sw2381 sw2382 sw2383 sw2384 sw2385 sw2386\n sw2387 sw2388 sw2389 sw2390 sw2391 sw2392 sw2393 sw2394 sw2395 sw2396 sw2397 sw2398\n sw2399 sw2400 sw2401 sw2402 sw2403 sw2404 sw2405 sw2406 sw2407 sw2408 sw2409 sw2410\n sw2411 sw2412 sw2413 sw2414 sw2415 sw2416 sw2417 sw2418 sw2419 sw2420 sw2421 sw2422\n sw2423 sw2424 sw2425 sw2426 sw2427 sw2428 sw2429 sw2430 sw2431 sw2432 sw2433 sw2434\n sw2435 sw2436 sw2437 sw2438 sw2439 sw2440 sw2441 sw2442 sw2443 sw2444 sw2445 sw2446\n sw2447 sw2448 sw2449 sw2450 sw2451 sw2452 sw2453 sw2454 sw2455 sw2456 sw2457 sw2458\n sw2459 sw2460 sw2461 sw2462 sw2463 sw2464 sw2465 sw2466 sw2467 sw2468 sw2469 sw2470\n\nGenerating · 25s (~189.5 tok/s)\nCannot switch modes mid-session (tool/context mismatch). Use `/clear` first, then `/plan`.\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \nEnter steer │ Alt+Enter follow-up │ /cancel stop\n\n Bare │ mockprov/mock-alpha\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "shift+tab", + "index": 7, + "screen": " sw2471 sw2472 sw2473 sw2474 sw2475 sw2476 sw2477 sw2478 sw2479 sw2480 sw2481 sw2482\n sw2483 sw2484 sw2485 sw2486 sw2487 sw2488 sw2489 sw2490 sw2491 sw2492 sw2493 sw2494\n sw2495 sw2496 sw2497 sw2498 sw2499\n\n ❯ stream a long reply please \n sw311 sw312 sw313 sw314 sw315 sw316 sw317 sw318 sw319 sw320 sw321 sw322\n sw323 sw324 sw325 sw326 sw327 sw328 sw329 sw330 sw331 sw332 sw333 sw334\n sw335 sw336 sw337 sw338 sw339 sw340 sw341 sw342 sw343 sw344 sw345 sw346\n sw347 sw348 sw349 sw350 sw351 sw352 sw353 sw354 sw355 sw356 sw357 sw358\n sw359 sw360 sw361 sw362 sw363 sw364 sw365 sw366 sw367 sw368 sw369 sw370\n sw371 sw372 sw373 sw374 sw375 sw376 sw377 sw378 sw379 sw380 sw381 sw382\n sw383 sw384 sw385 sw386 sw387 sw388 sw389 sw390 sw391 sw392 sw393 sw394\n sw395 sw396 sw397 sw398 sw399 sw400 sw401 sw402 sw403 sw404 sw405 sw406\n sw407 sw408 sw409 sw410 sw411 sw412 sw413 sw414 sw415 sw416 sw417 sw418\n sw419 sw420 sw421 sw422 sw423 sw424 sw425 sw426 sw427 sw428 sw429 sw430\n sw431 sw432 sw433 sw434 sw435 sw436 sw437 sw438 sw439 sw440 sw441 sw442\n sw443 sw444 sw445 sw446 sw447 sw448 sw449 sw450 sw451 sw452 sw453 sw454\n sw455 sw456 sw457 sw458 sw459 sw460 sw461 sw462 sw463 sw464 sw465 sw466\n sw467 sw468 sw469 sw470 sw471 sw472 sw473 sw474 sw475 sw476 sw477 sw478\n sw479 sw480 sw481 sw482 sw483 sw484 sw485 sw486 sw487 sw488 sw489 sw490\n sw491 sw492 sw493 sw494 sw495 sw496 sw497 sw498 sw499 sw500 sw501 sw502\n sw503 sw504 sw505 sw506 sw507 sw508 sw509 sw510 sw511 sw512 sw513 sw514\n sw515 sw516 sw517 sw518 sw519 sw520 sw521 sw522 sw523 sw524 sw525 sw526\n sw527 sw528 sw529 sw530 sw531 sw532 sw533 sw534 sw535 sw536 sw537 sw538\n sw539 sw540 sw541 sw542 sw543 sw544 sw545 sw546\n\nGenerating · 5s (~190.1 tok/s)\nCannot switch modes mid-session (tool/context mismatch). Use `/clear` first, then `/plan`.\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \nEnter steer │ Alt+Enter follow-up │ /cancel stop\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "shift+tab", + "index": 8, + "screen": " sw2471 sw2472 sw2473 sw2474 sw2475 sw2476 sw2477 sw2478 sw2479 sw2480 sw2481 sw2482\n sw2483 sw2484 sw2485 sw2486 sw2487 sw2488 sw2489 sw2490 sw2491 sw2492 sw2493 sw2494\n sw2495 sw2496 sw2497 sw2498 sw2499\n\n ❯ stream a long reply please \n sw827 sw828 sw829 sw830 sw831 sw832 sw833 sw834 sw835 sw836 sw837 sw838\n sw839 sw840 sw841 sw842 sw843 sw844 sw845 sw846 sw847 sw848 sw849 sw850\n sw851 sw852 sw853 sw854 sw855 sw856 sw857 sw858 sw859 sw860 sw861 sw862\n sw863 sw864 sw865 sw866 sw867 sw868 sw869 sw870 sw871 sw872 sw873 sw874\n sw875 sw876 sw877 sw878 sw879 sw880 sw881 sw882 sw883 sw884 sw885 sw886\n sw887 sw888 sw889 sw890 sw891 sw892 sw893 sw894 sw895 sw896 sw897 sw898\n sw899 sw900 sw901 sw902 sw903 sw904 sw905 sw906 sw907 sw908 sw909 sw910\n sw911 sw912 sw913 sw914 sw915 sw916 sw917 sw918 sw919 sw920 sw921 sw922\n sw923 sw924 sw925 sw926 sw927 sw928 sw929 sw930 sw931 sw932 sw933 sw934\n sw935 sw936 sw937 sw938 sw939 sw940 sw941 sw942 sw943 sw944 sw945 sw946\n sw947 sw948 sw949 sw950 sw951 sw952 sw953 sw954 sw955 sw956 sw957 sw958\n sw959 sw960 sw961 sw962 sw963 sw964 sw965 sw966 sw967 sw968 sw969 sw970\n sw971 sw972 sw973 sw974 sw975 sw976 sw977 sw978 sw979 sw980 sw981 sw982\n sw983 sw984 sw985 sw986 sw987 sw988 sw989 sw990 sw991 sw992 sw993 sw994\n sw995 sw996 sw997 sw998 sw999 sw1000 sw1001 sw1002 sw1003 sw1004 sw1005 sw1006\n sw1007 sw1008 sw1009 sw1010 sw1011 sw1012 sw1013 sw1014 sw1015 sw1016 sw1017 sw1018\n sw1019 sw1020 sw1021 sw1022 sw1023 sw1024 sw1025 sw1026 sw1027 sw1028 sw1029 sw1030\n sw1031 sw1032 sw1033 sw1034 sw1035 sw1036 sw1037 sw1038 sw1039 sw1040 sw1041 sw1042\n sw1043 sw1044 sw1045 sw1046 sw1047 sw1048 sw1049 sw1050 sw1051 sw1052 sw1053 sw1054\n sw1055 sw1056 sw1057 sw1058 sw1059 sw1060 sw1061 sw1062 sw1063 sw1064 sw1065 sw1066\n\nGenerating · 10s (~209.2 tok/s)\nCannot switch modes mid-session (tool/context mismatch). Use `/clear` first, then `/plan`.\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \nEnter steer │ Alt+Enter follow-up │ /cancel stop\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "shift+tab", + "index": 9, + "screen": " sw2471 sw2472 sw2473 sw2474 sw2475 sw2476 sw2477 sw2478 sw2479 sw2480 sw2481 sw2482\n sw2483 sw2484 sw2485 sw2486 sw2487 sw2488 sw2489 sw2490 sw2491 sw2492 sw2493 sw2494\n sw2495 sw2496 sw2497 sw2498 sw2499\n\n ❯ stream a long reply please \n sw1343 sw1344 sw1345 sw1346 sw1347 sw1348 sw1349 sw1350 sw1351 sw1352 sw1353 sw1354\n sw1355 sw1356 sw1357 sw1358 sw1359 sw1360 sw1361 sw1362 sw1363 sw1364 sw1365 sw1366\n sw1367 sw1368 sw1369 sw1370 sw1371 sw1372 sw1373 sw1374 sw1375 sw1376 sw1377 sw1378\n sw1379 sw1380 sw1381 sw1382 sw1383 sw1384 sw1385 sw1386 sw1387 sw1388 sw1389 sw1390\n sw1391 sw1392 sw1393 sw1394 sw1395 sw1396 sw1397 sw1398 sw1399 sw1400 sw1401 sw1402\n sw1403 sw1404 sw1405 sw1406 sw1407 sw1408 sw1409 sw1410 sw1411 sw1412 sw1413 sw1414\n sw1415 sw1416 sw1417 sw1418 sw1419 sw1420 sw1421 sw1422 sw1423 sw1424 sw1425 sw1426\n sw1427 sw1428 sw1429 sw1430 sw1431 sw1432 sw1433 sw1434 sw1435 sw1436 sw1437 sw1438\n sw1439 sw1440 sw1441 sw1442 sw1443 sw1444 sw1445 sw1446 sw1447 sw1448 sw1449 sw1450\n sw1451 sw1452 sw1453 sw1454 sw1455 sw1456 sw1457 sw1458 sw1459 sw1460 sw1461 sw1462\n sw1463 sw1464 sw1465 sw1466 sw1467 sw1468 sw1469 sw1470 sw1471 sw1472 sw1473 sw1474\n sw1475 sw1476 sw1477 sw1478 sw1479 sw1480 sw1481 sw1482 sw1483 sw1484 sw1485 sw1486\n sw1487 sw1488 sw1489 sw1490 sw1491 sw1492 sw1493 sw1494 sw1495 sw1496 sw1497 sw1498\n sw1499 sw1500 sw1501 sw1502 sw1503 sw1504 sw1505 sw1506 sw1507 sw1508 sw1509 sw1510\n sw1511 sw1512 sw1513 sw1514 sw1515 sw1516 sw1517 sw1518 sw1519 sw1520 sw1521 sw1522\n sw1523 sw1524 sw1525 sw1526 sw1527 sw1528 sw1529 sw1530 sw1531 sw1532 sw1533 sw1534\n sw1535 sw1536 sw1537 sw1538 sw1539 sw1540 sw1541 sw1542 sw1543 sw1544 sw1545 sw1546\n sw1547 sw1548 sw1549 sw1550 sw1551 sw1552 sw1553 sw1554 sw1555 sw1556 sw1557 sw1558\n sw1559 sw1560 sw1561 sw1562 sw1563 sw1564 sw1565 sw1566 sw1567 sw1568 sw1569 sw1570\n sw1571 sw1572 sw1573 sw1574 sw1575 sw1576 sw1577\n\nGenerating · 16s (~187.3 tok/s)\nCannot switch modes mid-session (tool/context mismatch). Use `/clear` first, then `/plan`.\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \nEnter steer │ Alt+Enter follow-up │ /cancel stop\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + } + ] + }, + "shots": [ + { + "step": "01-startup", + "legacy": "report/shots/100x34/legacy-01-startup.png", + "next": "report/shots/100x34/next-01-startup.png", + "diffFile": "report/shots/100x34/diff-01-startup.png", + "diff": { + "count": 13846, + "total": 458592, + "sizeA": [843, 544], + "sizeB": [843, 544] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": "Profile: bare", + "next": "Profile: BARE" + }, + { + "row": 2, + "legacy": " ▌ term² BARE ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒", + "next": "▌ term² BARE ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒" + }, + { + "row": 3, + "legacy": " mockprov/mock-alpha (default)", + "next": " mockprov/mock-alpha (default)" + }, + { + "row": 5, + "legacy": "", + "next": "────────────────────────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 6, + "legacy": "", + "next": "❯ " + }, + { + "row": 7, + "legacy": "", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output" + }, + { + "row": 8, + "legacy": " ────────────────────────────────────────────────────────────────────────────────────────────────", + "next": "" + }, + { + "row": 9, + "legacy": " ❯ ", + "next": " Bare │ mockprov/mock-alpha" + }, + { + "row": 10, + "legacy": " / commands │ @ paths │ ! shell │ Shift+Tab plan", + "next": "" + }, + { + "row": 12, + "legacy": " Bare │ mockprov/mock-alpha", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": "Profile: bare\n\n ▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n\n\n\n ────────────────────────────────────────────────────────────────────────────────────────────────\n ❯ \n / commands │ @ paths │ ! shell │ Shift+Tab plan\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "next": "Profile: BARE\n\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + } + }, + { + "step": "02-composer-typed", + "legacy": "report/shots/100x34/legacy-02-composer-typed.png", + "next": "report/shots/100x34/next-02-composer-typed.png", + "diffFile": "report/shots/100x34/diff-02-composer-typed.png", + "diff": { + "count": 13567, + "total": 458592, + "sizeA": [843, 544], + "sizeB": [843, 544] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": "Profile: bare", + "next": "Profile: BARE" + }, + { + "row": 2, + "legacy": " ▌ term² BARE ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒", + "next": "▌ term² BARE ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒" + }, + { + "row": 3, + "legacy": " mockprov/mock-alpha (default)", + "next": " mockprov/mock-alpha (default)" + }, + { + "row": 5, + "legacy": "", + "next": "────────────────────────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 6, + "legacy": "", + "next": "❯ show markdown please " + }, + { + "row": 7, + "legacy": "", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output" + }, + { + "row": 8, + "legacy": " ────────────────────────────────────────────────────────────────────────────────────────────────", + "next": "" + }, + { + "row": 9, + "legacy": " ❯ show markdown please ", + "next": " Bare │ mockprov/mock-alpha" + }, + { + "row": 11, + "legacy": " Bare │ mockprov/mock-alpha", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": "Profile: bare\n\n ▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n\n\n\n ────────────────────────────────────────────────────────────────────────────────────────────────\n ❯ show markdown please \n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "next": "Profile: BARE\n\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ show markdown please \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + } + }, + { + "step": "03-turn-markdown", + "legacy": "report/shots/100x34/legacy-03-turn-markdown.png", + "next": "report/shots/100x34/next-03-turn-markdown.png", + "diffFile": "report/shots/100x34/diff-03-turn-markdown.png", + "diff": { + "count": 35812, + "total": 458592, + "sizeA": [843, 544], + "sizeB": [843, 544] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": "Profile: bare", + "next": "Profile: BARE" + }, + { + "row": 2, + "legacy": " ▌ term² BARE ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒", + "next": "▌ term² BARE ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒" + }, + { + "row": 3, + "legacy": " mockprov/mock-alpha (default)", + "next": " mockprov/mock-alpha (default)" + }, + { + "row": 6, + "legacy": "", + "next": " ❯ show markdown please " + }, + { + "row": 7, + "legacy": " ❯ show markdown please ", + "next": "" + }, + { + "row": 8, + "legacy": "", + "next": " ## Plan" + }, + { + "row": 9, + "legacy": " ## Plan", + "next": "" + }, + { + "row": 10, + "legacy": "", + "next": " • Read notes.txt" + }, + { + "row": 11, + "legacy": " • Read notes.txt", + "next": " • Summarise it" + }, + { + "row": 12, + "legacy": " • Summarise it", + "next": "" + }, + { + "row": 13, + "legacy": "", + "next": " ╭──────────────────────────────────────────────────────────────────────────────────────────────╮" + }, + { + "row": 14, + "legacy": " ╭──────────────────────────────────────────────────────────────────────────────────────────────╮", + "next": " │ export function main() { │" + }, + { + "row": 15, + "legacy": " │ export function main() { │", + "next": " │ return 42; │" + }, + { + "row": 16, + "legacy": " │ return 42; │", + "next": " │ } │" + }, + { + "row": 17, + "legacy": " │ } │", + "next": " ╰──────────────────────────────────────────────────────────────────────────────────────────────╯" + }, + { + "row": 18, + "legacy": " ╰──────────────────────────────────────────────────────────────────────────────────────────────╯", + "next": "" + }, + { + "row": 19, + "legacy": "", + "next": " That is all." + }, + { + "row": 20, + "legacy": " That is all.", + "next": "────────────────────────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 21, + "legacy": "", + "next": "❯ " + }, + { + "row": 22, + "legacy": "", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output" + }, + { + "row": 23, + "legacy": " ────────────────────────────────────────────────────────────────────────────────────────────────", + "next": "" + }, + { + "row": 24, + "legacy": " ❯ ", + "next": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · 0% cached · Ctx last 1k" + }, + { + "row": 25, + "legacy": " / commands │ @ paths │ ! shell │ Shift+Tab plan", + "next": "" + }, + { + "row": 27, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": "Profile: bare\n\n ▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n\n\n ❯ show markdown please \n\n ## Plan\n\n • Read notes.txt\n • Summarise it\n\n ╭──────────────────────────────────────────────────────────────────────────────────────────────╮\n │ export function main() { │\n │ return 42; │\n │ } │\n ╰──────────────────────────────────────────────────────────────────────────────────────────────╯\n\n That is all.\n\n\n ────────────────────────────────────────────────────────────────────────────────────────────────\n ❯ \n / commands │ @ paths │ ! shell │ Shift+Tab plan\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k\n\n\n\n\n\n", + "next": "Profile: BARE\n\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n\n ❯ show markdown please \n\n ## Plan\n\n • Read notes.txt\n • Summarise it\n\n ╭──────────────────────────────────────────────────────────────────────────────────────────────╮\n │ export function main() { │\n │ return 42; │\n │ } │\n ╰──────────────────────────────────────────────────────────────────────────────────────────────╯\n\n That is all.\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · 0% cached · Ctx last 1k\n\n\n\n\n\n\n\n\n" + } + }, + { + "step": "04-turn-tool-call", + "legacy": "report/shots/100x34/legacy-04-turn-tool-call.png", + "next": "report/shots/100x34/next-04-turn-tool-call.png", + "diffFile": "report/shots/100x34/diff-04-turn-tool-call.png", + "diff": { + "count": 51525, + "total": 458592, + "sizeA": [843, 544], + "sizeB": [843, 544] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": "", + "next": "Profile: BARE" + }, + { + "row": 2, + "legacy": "", + "next": "▌ term² BARE ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒" + }, + { + "row": 3, + "legacy": " ❯ show markdown please ", + "next": " mockprov/mock-alpha (default)" + }, + { + "row": 5, + "legacy": " ## Plan", + "next": "" + }, + { + "row": 6, + "legacy": "", + "next": " ❯ show markdown please " + }, + { + "row": 7, + "legacy": " • Read notes.txt", + "next": "" + }, + { + "row": 8, + "legacy": " • Summarise it", + "next": " ## Plan" + }, + { + "row": 10, + "legacy": " ╭──────────────────────────────────────────────────────────────────────────────────────────────╮", + "next": " • Read notes.txt" + }, + { + "row": 11, + "legacy": " │ export function main() { │", + "next": " • Summarise it" + }, + { + "row": 12, + "legacy": " │ return 42; │", + "next": "" + }, + { + "row": 13, + "legacy": " │ } │", + "next": " ╭──────────────────────────────────────────────────────────────────────────────────────────────╮" + }, + { + "row": 14, + "legacy": " ╰──────────────────────────────────────────────────────────────────────────────────────────────╯", + "next": " │ export function main() { │" + }, + { + "row": 15, + "legacy": "", + "next": " │ return 42; │" + }, + { + "row": 16, + "legacy": " That is all.", + "next": " │ } │" + }, + { + "row": 17, + "legacy": "", + "next": " ╰──────────────────────────────────────────────────────────────────────────────────────────────╯" + }, + { + "row": 19, + "legacy": " ❯ list the files please ", + "next": " That is all." + }, + { + "row": 21, + "legacy": " ✓ ls (▒▒▒▒)", + "next": " ❯ list the files please " + }, + { + "row": 23, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": " ✓ Shell command (▒▒▒▒)" + }, + { + "row": 25, + "legacy": "", + "next": " Done. The command finished; the workspace has README.md, notes.txt and src/." + }, + { + "row": 26, + "legacy": " ────────────────────────────────────────────────────────────────────────────────────────────────", + "next": "────────────────────────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 27, + "legacy": " ❯ ", + "next": "❯ " + }, + { + "row": 28, + "legacy": " / commands │ @ paths │ ! shell │ Shift+Tab plan", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output" + }, + { + "row": 30, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": " Bare │ mockprov/mock-alpha │ ↑3.6k ↓240 · 0% cached · Ctx last 1k" + } + ], + "notes": [], + "text": { + "legacy": "\n\n\n ❯ show markdown please \n\n ## Plan\n\n • Read notes.txt\n • Summarise it\n\n ╭──────────────────────────────────────────────────────────────────────────────────────────────╮\n │ export function main() { │\n │ return 42; │\n │ } │\n ╰──────────────────────────────────────────────────────────────────────────────────────────────╯\n\n That is all.\n\n\n ❯ list the files please \n\n ✓ ls (21ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ────────────────────────────────────────────────────────────────────────────────────────────────\n ❯ \n / commands │ @ paths │ ! shell │ Shift+Tab plan\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k\n\n\n", + "next": "Profile: BARE\n\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n\n ❯ show markdown please \n\n ## Plan\n\n • Read notes.txt\n • Summarise it\n\n ╭──────────────────────────────────────────────────────────────────────────────────────────────╮\n │ export function main() { │\n │ return 42; │\n │ } │\n ╰──────────────────────────────────────────────────────────────────────────────────────────────╯\n\n That is all.\n\n ❯ list the files please \n\n ✓ Shell command (11ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output\n\n Bare │ mockprov/mock-alpha │ ↑3.6k ↓240 · 0% cached · Ctx last 1k\n\n\n" + } + }, + { + "step": "05-approval-prompt", + "legacy": "report/shots/100x34/legacy-05-approval-prompt.png", + "next": "report/shots/100x34/next-05-approval-prompt.png", + "diffFile": "report/shots/100x34/diff-05-approval-prompt.png", + "diff": { + "count": 47980, + "total": 458592, + "sizeA": [843, 544], + "sizeB": [843, 544] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " │ return 42; │", + "next": "" + }, + { + "row": 1, + "legacy": " │ } │", + "next": " ❯ list the files please " + }, + { + "row": 2, + "legacy": " ╰──────────────────────────────────────────────────────────────────────────────────────────────╯", + "next": "" + }, + { + "row": 3, + "legacy": "", + "next": " ✓ Shell command (▒▒▒▒)" + }, + { + "row": 4, + "legacy": " That is all.", + "next": "" + }, + { + "row": 5, + "legacy": "", + "next": " Done. The command finished; the workspace has README.md, notes.txt and src/." + }, + { + "row": 7, + "legacy": " ❯ list the files please ", + "next": " ❯ create a file please " + }, + { + "row": 9, + "legacy": " ✓ ls (▒▒▒▒)", + "next": " ○ Shell command" + }, + { + "row": 10, + "legacy": "", + "next": " touch created-by-walk.txt" + }, + { + "row": 11, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "" + }, + { + "row": 12, + "legacy": "", + "next": "Running tools · ▒▒" + }, + { + "row": 13, + "legacy": "", + "next": "╭──────────────────────────────────────────────────────────────────────────────────────────────────╮" + }, + { + "row": 14, + "legacy": " ❯ create a file please ", + "next": "│ Allow this action? │" + }, + { + "row": 15, + "legacy": "", + "next": "│ shell (this call only) │" + }, + { + "row": 16, + "legacy": "", + "next": "│ Owner: turn-3 │" + }, + { + "row": 17, + "legacy": "", + "next": "│ {\"command\":\"touch created-by-walk.txt\",\"sandbox\":\"default\",\"background\":false} │" + }, + { + "row": 18, + "legacy": " ────────────────────────────────────────────────────────────────────────────────────────────────", + "next": "│ { │" + }, + { + "row": 19, + "legacy": " Agent wants to run: shell", + "next": "│ \"command\": \"touch created-by-walk.txt\", │" + }, + { + "row": 20, + "legacy": "", + "next": "│ \"sandbox\": \"default\", │" + }, + { + "row": 21, + "legacy": " touch created-by-walk.txt", + "next": "│ \"background\": false │" + }, + { + "row": 22, + "legacy": "", + "next": "│ } │" + }, + { + "row": 23, + "legacy": " Allow this action?", + "next": "│ ❯ 1. Allow once │" + }, + { + "row": 24, + "legacy": "", + "next": "│ 2. Deny │" + }, + { + "row": 25, + "legacy": " ❯ 1. Allow once │ Allow once", + "next": "│ 3. Deny without reason │" + }, + { + "row": 26, + "legacy": " 2. Deny │", + "next": "│ Ctrl+G return to composer │" + }, + { + "row": 27, + "legacy": " │ Allow this tool call.", + "next": "│ y allow once · n deny · ↑/↓ select · Enter choose · Esc cancel │" + }, + { + "row": 28, + "legacy": "", + "next": "╰──────────────────────────────────────────────────────────────────────────────────────────────────╯" + }, + { + "row": 29, + "legacy": " ↑↓ navigate │ 1 allow once │ y/n answer │ ⏎ select │ Esc interrupts the turn", + "next": "────────────────────────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 30, + "legacy": "", + "next": "❯ " + }, + { + "row": 32, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": " Bare │ mockprov/mock-alpha │ ↑4.8k ↓320 · 0% cached · Ctx last 1k" + } + ], + "notes": [], + "text": { + "legacy": " │ return 42; │\n │ } │\n ╰──────────────────────────────────────────────────────────────────────────────────────────────╯\n\n That is all.\n\n\n ❯ list the files please \n\n ✓ ls (21ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ❯ create a file please \n\n\n\n ────────────────────────────────────────────────────────────────────────────────────────────────\n Agent wants to run: shell\n\n touch created-by-walk.txt\n\n Allow this action?\n\n ❯ 1. Allow once │ Allow once\n 2. Deny │\n │ Allow this tool call.\n\n ↑↓ navigate │ 1 allow once │ y/n answer │ ⏎ select │ Esc interrupts the turn\n\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k\n", + "next": "\n ❯ list the files please \n\n ✓ Shell command (11ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n ❯ create a file please \n\n ○ Shell command\n touch created-by-walk.txt\n\nRunning tools · 0s\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Allow this action? │\n│ shell (this call only) │\n│ Owner: turn-3 │\n│ {\"command\":\"touch created-by-walk.txt\",\"sandbox\":\"default\",\"background\":false} │\n│ { │\n│ \"command\": \"touch created-by-walk.txt\", │\n│ \"sandbox\": \"default\", │\n│ \"background\": false │\n│ } │\n│ ❯ 1. Allow once │\n│ 2. Deny │\n│ 3. Deny without reason │\n│ Ctrl+G return to composer │\n│ y allow once · n deny · ↑/↓ select · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑4.8k ↓320 · 0% cached · Ctx last 1k\n" + } + }, + { + "step": "06-approval-approved", + "legacy": "report/shots/100x34/legacy-06-approval-approved.png", + "next": "report/shots/100x34/next-06-approval-approved.png", + "diffFile": "report/shots/100x34/diff-06-approval-approved.png", + "diff": { + "count": 31672, + "total": 458592, + "sizeA": [843, 544], + "sizeB": [843, 544] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " │ return 42; │", + "next": "" + }, + { + "row": 1, + "legacy": " │ } │", + "next": " ❯ list the files please " + }, + { + "row": 2, + "legacy": " ╰──────────────────────────────────────────────────────────────────────────────────────────────╯", + "next": "" + }, + { + "row": 3, + "legacy": "", + "next": " ✓ Shell command (▒▒▒▒)" + }, + { + "row": 4, + "legacy": " That is all.", + "next": "" + }, + { + "row": 5, + "legacy": "", + "next": " Done. The command finished; the workspace has README.md, notes.txt and src/." + }, + { + "row": 7, + "legacy": " ❯ list the files please ", + "next": " ❯ create a file please " + }, + { + "row": 9, + "legacy": " ✓ ls (▒▒▒▒)", + "next": " ✓ Shell command (▒▒▒)" + }, + { + "row": 12, + "legacy": "", + "next": "────────────────────────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 13, + "legacy": "", + "next": "❯ " + }, + { + "row": 14, + "legacy": " ❯ create a file please ", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output" + }, + { + "row": 16, + "legacy": " ✓ touch created-by-walk.txt (▒▒▒)", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + }, + { + "row": 18, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "" + }, + { + "row": 21, + "legacy": " ────────────────────────────────────────────────────────────────────────────────────────────────", + "next": "" + }, + { + "row": 22, + "legacy": " ❯ ", + "next": "" + }, + { + "row": 23, + "legacy": " / commands │ @ paths │ ! shell │ Shift+Tab plan", + "next": "" + }, + { + "row": 25, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": " │ return 42; │\n │ } │\n ╰──────────────────────────────────────────────────────────────────────────────────────────────╯\n\n That is all.\n\n\n ❯ list the files please \n\n ✓ ls (21ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ❯ create a file please \n\n ✓ touch created-by-walk.txt (8ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ────────────────────────────────────────────────────────────────────────────────────────────────\n ❯ \n / commands │ @ paths │ ! shell │ Shift+Tab plan\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k\n\n\n\n\n\n\n\n", + "next": "\n ❯ list the files please \n\n ✓ Shell command (11ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n ❯ create a file please \n\n ✓ Shell command (8ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output\n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + } + }, + { + "step": "07-slash-menu", + "legacy": "report/shots/100x34/legacy-07-slash-menu.png", + "next": "report/shots/100x34/next-07-slash-menu.png", + "diffFile": "report/shots/100x34/diff-07-slash-menu.png", + "diff": { + "count": 76250, + "total": 458592, + "sizeA": [843, 544], + "sizeB": [843, 544] + }, + "identical": false, + "rows": [ + { + "row": 1, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": " ❯ list the files please " + }, + { + "row": 3, + "legacy": "", + "next": " ✓ Shell command (▒▒▒▒)" + }, + { + "row": 4, + "legacy": " ❯ create a file please ", + "next": "" + }, + { + "row": 5, + "legacy": "", + "next": " Done. The command finished; the workspace has README.md, notes.txt and src/." + }, + { + "row": 6, + "legacy": " ✓ touch created-by-walk.txt (▒▒▒)", + "next": "" + }, + { + "row": 7, + "legacy": "", + "next": " ❯ create a file please " + }, + { + "row": 8, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "" + }, + { + "row": 9, + "legacy": "", + "next": " ✓ Shell command (▒▒▒)" + }, + { + "row": 11, + "legacy": " ────────────────────────────────────────────────────────────────────────────────────────────────", + "next": " Done. The command finished; the workspace has README.md, notes.txt and src/." + }, + { + "row": 12, + "legacy": " Filter: ", + "next": "╭──────────────────────────────────────────────────────────────────────────────────────────────────╮" + }, + { + "row": 13, + "legacy": " ╭──────────────────────────────────────────────────────────────────────────────────────────────╮", + "next": "│ Commands │" + }, + { + "row": 14, + "legacy": " │ Commands │", + "next": "│ › /help Show commands and keyboard shortcuts │" + }, + { + "row": 15, + "legacy": " │ ❯ /model - Choose or set the AI model (Ctrl+O; use /model ) ┃ │", + "next": "│ /providers List configured providers and their status │" + }, + { + "row": 16, + "legacy": " │ /effort - Choose the model reasoning effort (Ctrl+T) ┃ │", + "next": "│ /model Choose or set the model (/model /) │" + }, + { + "row": 17, + "legacy": " │ /clear - Start a new conversation ┃ │", + "next": "│ /effort Set the reasoning effort │" + }, + { + "row": 18, + "legacy": " │ /goal - Inspect or update the durable session goal; /clear retains it ┃ │", + "next": "│ /profile Switch the active profile │" + }, + { + "row": 19, + "legacy": " │ /copy - Copy an assistant response (latest by default; use /copy N to count │ │", + "next": "│ /settings Show or change settings │" + }, + { + "row": 20, + "legacy": " │ backward) │ │", + "next": "│ /auto-approve Set tool auto-approval (off, advisory, auto, always) │" + }, + { + "row": 21, + "legacy": " │ /usage - Show token usage for the current session │ │", + "next": "│ /sandbox Toggle shell sandboxing (preference only here) │" + }, + { + "row": 22, + "legacy": " │ /resume - Browse saved conversations or resume one by ID │ │", + "next": "│ /resume List saved conversations or resume one by ID │" + }, + { + "row": 23, + "legacy": " │ /rewind - Rewind to a user turn and put it back in the input box │ │", + "next": "│ /clear Start a new conversation │" + }, + { + "row": 24, + "legacy": " │ /undo - Choose a user turn to remove and return to the input (same options as │ │", + "next": "│ │" + }, + { + "row": 25, + "legacy": " │ /rewind) │ │", + "next": "│ ──────────────────────────────────────────────────────────────────────────────────────────────── │" + }, + { + "row": 26, + "legacy": " │ /retry - Resend the last user turn, or choose a turn to resend │ │", + "next": "│ ↑/↓ select · Enter run · Tab complete · Esc dismiss │" + }, + { + "row": 27, + "legacy": " │ │", + "next": "╰──────────────────────────────────────────────────────────────────────────────────────────────────╯" + }, + { + "row": 28, + "legacy": " │ ──────────────────────────────────────────────────────────────────────────────────────────── │", + "next": "────────────────────────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 29, + "legacy": " │ ↑↓ navigate │ ⏎ run │ Tab complete │ Esc cancel │", + "next": "❯ / " + }, + { + "row": 30, + "legacy": " ╰──────────────────────────────────────────────────────────────────────────────────────────────╯", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output" + }, + { + "row": 32, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + } + ], + "notes": [], + "text": { + "legacy": "\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ❯ create a file please \n\n ✓ touch created-by-walk.txt (8ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ────────────────────────────────────────────────────────────────────────────────────────────────\n Filter: \n ╭──────────────────────────────────────────────────────────────────────────────────────────────╮\n │ Commands │\n │ ❯ /model - Choose or set the AI model (Ctrl+O; use /model ) ┃ │\n │ /effort - Choose the model reasoning effort (Ctrl+T) ┃ │\n │ /clear - Start a new conversation ┃ │\n │ /goal - Inspect or update the durable session goal; /clear retains it ┃ │\n │ /copy - Copy an assistant response (latest by default; use /copy N to count │ │\n │ backward) │ │\n │ /usage - Show token usage for the current session │ │\n │ /resume - Browse saved conversations or resume one by ID │ │\n │ /rewind - Rewind to a user turn and put it back in the input box │ │\n │ /undo - Choose a user turn to remove and return to the input (same options as │ │\n │ /rewind) │ │\n │ /retry - Resend the last user turn, or choose a turn to resend │ │\n │ │\n │ ──────────────────────────────────────────────────────────────────────────────────────────── │\n │ ↑↓ navigate │ ⏎ run │ Tab complete │ Esc cancel │\n ╰──────────────────────────────────────────────────────────────────────────────────────────────╯\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k\n", + "next": "\n ❯ list the files please \n\n ✓ Shell command (11ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n ❯ create a file please \n\n ✓ Shell command (8ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Commands │\n│ › /help Show commands and keyboard shortcuts │\n│ /providers List configured providers and their status │\n│ /model Choose or set the model (/model /) │\n│ /effort Set the reasoning effort │\n│ /profile Switch the active profile │\n│ /settings Show or change settings │\n│ /auto-approve Set tool auto-approval (off, advisory, auto, always) │\n│ /sandbox Toggle shell sandboxing (preference only here) │\n│ /resume List saved conversations or resume one by ID │\n│ /clear Start a new conversation │\n│ │\n│ ──────────────────────────────────────────────────────────────────────────────────────────────── │\n│ ↑/↓ select · Enter run · Tab complete · Esc dismiss │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ / \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output\n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n" + } + }, + { + "step": "08-slash-menu-closed", + "legacy": "report/shots/100x34/legacy-08-slash-menu-closed.png", + "next": "report/shots/100x34/next-08-slash-menu-closed.png", + "diffFile": "report/shots/100x34/diff-08-slash-menu-closed.png", + "diff": { + "count": 35988, + "total": 458592, + "sizeA": [843, 544], + "sizeB": [843, 544] + }, + "identical": false, + "rows": [ + { + "row": 1, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": " ❯ list the files please " + }, + { + "row": 3, + "legacy": "", + "next": " ✓ Shell command (▒▒▒▒)" + }, + { + "row": 4, + "legacy": " ❯ create a file please ", + "next": "" + }, + { + "row": 5, + "legacy": "", + "next": " Done. The command finished; the workspace has README.md, notes.txt and src/." + }, + { + "row": 6, + "legacy": " ✓ touch created-by-walk.txt (▒▒▒)", + "next": "" + }, + { + "row": 7, + "legacy": "", + "next": " ❯ create a file please " + }, + { + "row": 8, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "" + }, + { + "row": 9, + "legacy": "", + "next": " ✓ Shell command (▒▒▒)" + }, + { + "row": 11, + "legacy": " ────────────────────────────────────────────────────────────────────────────────────────────────", + "next": " Done. The command finished; the workspace has README.md, notes.txt and src/." + }, + { + "row": 12, + "legacy": " ❯ ", + "next": "────────────────────────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 13, + "legacy": " / commands │ @ paths │ ! shell │ Shift+Tab plan", + "next": "❯ " + }, + { + "row": 14, + "legacy": "", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output" + }, + { + "row": 15, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + }, + { + "row": 16, + "legacy": "", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + } + ], + "notes": [], + "text": { + "legacy": "\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ❯ create a file please \n\n ✓ touch created-by-walk.txt (8ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ────────────────────────────────────────────────────────────────────────────────────────────────\n ❯ \n / commands │ @ paths │ ! shell │ Shift+Tab plan\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "next": "\n ❯ list the files please \n\n ✓ Shell command (11ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n ❯ create a file please \n\n ✓ Shell command (8ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output\n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + } + }, + { + "step": "09-path-menu", + "legacy": "report/shots/100x34/legacy-09-path-menu.png", + "next": "report/shots/100x34/next-09-path-menu.png", + "diffFile": "report/shots/100x34/diff-09-path-menu.png", + "diff": { + "count": 43360, + "total": 458592, + "sizeA": [843, 544], + "sizeB": [843, 544] + }, + "identical": false, + "rows": [ + { + "row": 1, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": " ❯ list the files please " + }, + { + "row": 3, + "legacy": "", + "next": " ✓ Shell command (▒▒▒▒)" + }, + { + "row": 4, + "legacy": " ❯ create a file please ", + "next": "" + }, + { + "row": 5, + "legacy": "", + "next": " Done. The command finished; the workspace has README.md, notes.txt and src/." + }, + { + "row": 6, + "legacy": " ✓ touch created-by-walk.txt (▒▒▒)", + "next": "" + }, + { + "row": 7, + "legacy": "", + "next": " ❯ create a file please " + }, + { + "row": 8, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "" + }, + { + "row": 9, + "legacy": "", + "next": " ✓ Shell command (▒▒▒)" + }, + { + "row": 11, + "legacy": " ────────────────────────────────────────────────────────────────────────────────────────────────", + "next": " Done. The command finished; the workspace has README.md, notes.txt and src/." + }, + { + "row": 12, + "legacy": " Filter: ", + "next": "› created-by-walk.txt" + }, + { + "row": 13, + "legacy": " ╭──────────────────────────────────────────────────────────────────────────────────────────────╮", + "next": " notes.txt" + }, + { + "row": 14, + "legacy": " │ ❯ src/ │", + "next": " README.md" + }, + { + "row": 15, + "legacy": " │ notes.txt │", + "next": " src/" + }, + { + "row": 16, + "legacy": " │ README.md │", + "next": " src/main.js" + }, + { + "row": 17, + "legacy": " │ src/main.js │", + "next": "↑/↓ select · Enter insert · Tab insert without space · Esc dismiss" + }, + { + "row": 18, + "legacy": " ╰──────────────────────────────────────────────────────────────────────────────────────────────╯", + "next": "────────────────────────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 19, + "legacy": " ↑↓ navigate │ ⏎ insert │ Tab insert w/o space │ Esc cancel", + "next": "❯ @ " + }, + { + "row": 20, + "legacy": "", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output" + }, + { + "row": 21, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + }, + { + "row": 22, + "legacy": "", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + } + ], + "notes": [], + "text": { + "legacy": "\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ❯ create a file please \n\n ✓ touch created-by-walk.txt (8ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ────────────────────────────────────────────────────────────────────────────────────────────────\n Filter: \n ╭──────────────────────────────────────────────────────────────────────────────────────────────╮\n │ ❯ src/ │\n │ notes.txt │\n │ README.md │\n │ src/main.js │\n ╰──────────────────────────────────────────────────────────────────────────────────────────────╯\n ↑↓ navigate │ ⏎ insert │ Tab insert w/o space │ Esc cancel\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k\n\n\n\n\n\n\n\n\n\n\n\n", + "next": "\n ❯ list the files please \n\n ✓ Shell command (11ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n ❯ create a file please \n\n ✓ Shell command (8ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n› created-by-walk.txt\n notes.txt\n README.md\n src/\n src/main.js\n↑/↓ select · Enter insert · Tab insert without space · Esc dismiss\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ @ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output\n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n\n\n\n\n\n\n\n\n\n\n" + } + }, + { + "step": "10-path-menu-closed", + "legacy": "report/shots/100x34/legacy-10-path-menu-closed.png", + "next": "report/shots/100x34/next-10-path-menu-closed.png", + "diffFile": "report/shots/100x34/diff-10-path-menu-closed.png", + "diff": { + "count": 35988, + "total": 458592, + "sizeA": [843, 544], + "sizeB": [843, 544] + }, + "identical": false, + "rows": [ + { + "row": 1, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": " ❯ list the files please " + }, + { + "row": 3, + "legacy": "", + "next": " ✓ Shell command (▒▒▒▒)" + }, + { + "row": 4, + "legacy": " ❯ create a file please ", + "next": "" + }, + { + "row": 5, + "legacy": "", + "next": " Done. The command finished; the workspace has README.md, notes.txt and src/." + }, + { + "row": 6, + "legacy": " ✓ touch created-by-walk.txt (▒▒▒)", + "next": "" + }, + { + "row": 7, + "legacy": "", + "next": " ❯ create a file please " + }, + { + "row": 8, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "" + }, + { + "row": 9, + "legacy": "", + "next": " ✓ Shell command (▒▒▒)" + }, + { + "row": 11, + "legacy": " ────────────────────────────────────────────────────────────────────────────────────────────────", + "next": " Done. The command finished; the workspace has README.md, notes.txt and src/." + }, + { + "row": 12, + "legacy": " ❯ ", + "next": "────────────────────────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 13, + "legacy": " / commands │ @ paths │ ! shell │ Shift+Tab plan", + "next": "❯ " + }, + { + "row": 14, + "legacy": "", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output" + }, + { + "row": 15, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + }, + { + "row": 16, + "legacy": "", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + } + ], + "notes": [], + "text": { + "legacy": "\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ❯ create a file please \n\n ✓ touch created-by-walk.txt (8ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ────────────────────────────────────────────────────────────────────────────────────────────────\n ❯ \n / commands │ @ paths │ ! shell │ Shift+Tab plan\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "next": "\n ❯ list the files please \n\n ✓ Shell command (11ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n ❯ create a file please \n\n ✓ Shell command (8ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output\n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + } + }, + { + "step": "11-menu-model", + "legacy": "report/shots/100x34/legacy-11-menu-model.png", + "next": "report/shots/100x34/next-11-menu-model.png", + "diffFile": "report/shots/100x34/diff-11-menu-model.png", + "diff": { + "count": 47878, + "total": 458592, + "sizeA": [843, 544], + "sizeB": [843, 544] + }, + "identical": false, + "rows": [ + { + "row": 1, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": " ❯ list the files please " + }, + { + "row": 3, + "legacy": "", + "next": " ✓ Shell command (▒▒▒▒)" + }, + { + "row": 4, + "legacy": " ❯ create a file please ", + "next": "" + }, + { + "row": 5, + "legacy": "", + "next": " Done. The command finished; the workspace has README.md, notes.txt and src/." + }, + { + "row": 6, + "legacy": " ✓ touch created-by-walk.txt (▒▒▒)", + "next": "" + }, + { + "row": 7, + "legacy": "", + "next": " ❯ create a file please " + }, + { + "row": 8, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "" + }, + { + "row": 9, + "legacy": "", + "next": " ✓ Shell command (▒▒▒)" + }, + { + "row": 11, + "legacy": " ────────────────────────────────────────────────────────────────────────────────────────────────", + "next": " Done. The command finished; the workspace has README.md, notes.txt and src/." + }, + { + "row": 12, + "legacy": " Filter: ", + "next": "╭──────────────────────────────────────────────────────────────────────────────────────────────────╮" + }, + { + "row": 13, + "legacy": " Favorites │ Nicknames │ All ", + "next": "│ Choose a model │" + }, + { + "row": 14, + "legacy": " ╭──────────────────────────────────────────────────────────────────────────────────────────────╮", + "next": "│ Favorites │ Nicknames │ All │" + }, + { + "row": 15, + "legacy": " │ Select model │", + "next": "│ Filter: type to filter │" + }, + { + "row": 16, + "legacy": " │ mockprov │ ❯ mock-alpha (current) │", + "next": "│ No matching models. │" + }, + { + "row": 17, + "legacy": " │ │ mock-beta │", + "next": "│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │" + }, + { + "row": 18, + "legacy": " ╰──────────────────────────────────────────────────────────────────────────────────────────────╯", + "next": "╰──────────────────────────────────────────────────────────────────────────────────────────────────╯" + }, + { + "row": 19, + "legacy": " ↑↓ navigate │ ⏎ select │ Tab/←→ tab │ ctrl+n nickname │ ctrl+f favorite │ ctrl+r refresh model ", + "next": "────────────────────────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 20, + "legacy": " list │ Esc cancel", + "next": "❯ " + }, + { + "row": 22, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + } + ], + "notes": [], + "text": { + "legacy": "\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ❯ create a file please \n\n ✓ touch created-by-walk.txt (8ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ────────────────────────────────────────────────────────────────────────────────────────────────\n Filter: \n Favorites │ Nicknames │ All \n ╭──────────────────────────────────────────────────────────────────────────────────────────────╮\n │ Select model │\n │ mockprov │ ❯ mock-alpha (current) │\n │ │ mock-beta │\n ╰──────────────────────────────────────────────────────────────────────────────────────────────╯\n ↑↓ navigate │ ⏎ select │ Tab/←→ tab │ ctrl+n nickname │ ctrl+f favorite │ ctrl+r refresh model \n list │ Esc cancel\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k\n\n\n\n\n\n\n\n\n\n\n", + "next": "\n ❯ list the files please \n\n ✓ Shell command (11ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n ❯ create a file please \n\n ✓ Shell command (8ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n\n\n\n\n\n\n\n\n\n\n" + } + }, + { + "step": "12-menu-model-arrow", + "legacy": "report/shots/100x34/legacy-12-menu-model-arrow.png", + "next": "report/shots/100x34/next-12-menu-model-arrow.png", + "diffFile": "report/shots/100x34/diff-12-menu-model-arrow.png", + "diff": { + "count": 47894, + "total": 458592, + "sizeA": [843, 544], + "sizeB": [843, 544] + }, + "identical": false, + "rows": [ + { + "row": 1, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": " ❯ list the files please " + }, + { + "row": 3, + "legacy": "", + "next": " ✓ Shell command (▒▒▒▒)" + }, + { + "row": 4, + "legacy": " ❯ create a file please ", + "next": "" + }, + { + "row": 5, + "legacy": "", + "next": " Done. The command finished; the workspace has README.md, notes.txt and src/." + }, + { + "row": 6, + "legacy": " ✓ touch created-by-walk.txt (▒▒▒)", + "next": "" + }, + { + "row": 7, + "legacy": "", + "next": " ❯ create a file please " + }, + { + "row": 8, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "" + }, + { + "row": 9, + "legacy": "", + "next": " ✓ Shell command (▒▒▒)" + }, + { + "row": 11, + "legacy": " ────────────────────────────────────────────────────────────────────────────────────────────────", + "next": " Done. The command finished; the workspace has README.md, notes.txt and src/." + }, + { + "row": 12, + "legacy": " Filter: ", + "next": "╭──────────────────────────────────────────────────────────────────────────────────────────────────╮" + }, + { + "row": 13, + "legacy": " Favorites │ Nicknames │ All ", + "next": "│ Choose a model │" + }, + { + "row": 14, + "legacy": " ╭──────────────────────────────────────────────────────────────────────────────────────────────╮", + "next": "│ Favorites │ Nicknames │ All │" + }, + { + "row": 15, + "legacy": " │ Select model │", + "next": "│ Filter: type to filter │" + }, + { + "row": 16, + "legacy": " │ mockprov │ mock-alpha (current) │", + "next": "│ No matching models. │" + }, + { + "row": 17, + "legacy": " │ │ ❯ mock-beta │", + "next": "│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │" + }, + { + "row": 18, + "legacy": " ╰──────────────────────────────────────────────────────────────────────────────────────────────╯", + "next": "╰──────────────────────────────────────────────────────────────────────────────────────────────────╯" + }, + { + "row": 19, + "legacy": " ↑↓ navigate │ ⏎ select │ Tab/←→ tab │ ctrl+n nickname │ ctrl+f favorite │ ctrl+r refresh model ", + "next": "────────────────────────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 20, + "legacy": " list │ Esc cancel", + "next": "❯ " + }, + { + "row": 22, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + } + ], + "notes": [], + "text": { + "legacy": "\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ❯ create a file please \n\n ✓ touch created-by-walk.txt (8ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ────────────────────────────────────────────────────────────────────────────────────────────────\n Filter: \n Favorites │ Nicknames │ All \n ╭──────────────────────────────────────────────────────────────────────────────────────────────╮\n │ Select model │\n │ mockprov │ mock-alpha (current) │\n │ │ ❯ mock-beta │\n ╰──────────────────────────────────────────────────────────────────────────────────────────────╯\n ↑↓ navigate │ ⏎ select │ Tab/←→ tab │ ctrl+n nickname │ ctrl+f favorite │ ctrl+r refresh model \n list │ Esc cancel\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k\n\n\n\n\n\n\n\n\n\n\n", + "next": "\n ❯ list the files please \n\n ✓ Shell command (11ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n ❯ create a file please \n\n ✓ Shell command (8ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n\n\n\n\n\n\n\n\n\n\n" + } + }, + { + "step": "13-menu-model-closed", + "legacy": "report/shots/100x34/legacy-13-menu-model-closed.png", + "next": "report/shots/100x34/next-13-menu-model-closed.png", + "diffFile": "report/shots/100x34/diff-13-menu-model-closed.png", + "diff": { + "count": 35988, + "total": 458592, + "sizeA": [843, 544], + "sizeB": [843, 544] + }, + "identical": false, + "rows": [ + { + "row": 1, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": " ❯ list the files please " + }, + { + "row": 3, + "legacy": "", + "next": " ✓ Shell command (▒▒▒▒)" + }, + { + "row": 4, + "legacy": " ❯ create a file please ", + "next": "" + }, + { + "row": 5, + "legacy": "", + "next": " Done. The command finished; the workspace has README.md, notes.txt and src/." + }, + { + "row": 6, + "legacy": " ✓ touch created-by-walk.txt (▒▒▒)", + "next": "" + }, + { + "row": 7, + "legacy": "", + "next": " ❯ create a file please " + }, + { + "row": 8, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "" + }, + { + "row": 9, + "legacy": "", + "next": " ✓ Shell command (▒▒▒)" + }, + { + "row": 11, + "legacy": " ────────────────────────────────────────────────────────────────────────────────────────────────", + "next": " Done. The command finished; the workspace has README.md, notes.txt and src/." + }, + { + "row": 12, + "legacy": " ❯ ", + "next": "────────────────────────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 13, + "legacy": " / commands │ @ paths │ ! shell │ Shift+Tab plan", + "next": "❯ " + }, + { + "row": 14, + "legacy": "", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output" + }, + { + "row": 15, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + }, + { + "row": 16, + "legacy": "", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + } + ], + "notes": [], + "text": { + "legacy": "\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ❯ create a file please \n\n ✓ touch created-by-walk.txt (8ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ────────────────────────────────────────────────────────────────────────────────────────────────\n ❯ \n / commands │ @ paths │ ! shell │ Shift+Tab plan\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "next": "\n ❯ list the files please \n\n ✓ Shell command (11ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n ❯ create a file please \n\n ✓ Shell command (8ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output\n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + } + }, + { + "step": "14-menu-settings", + "legacy": "report/shots/100x34/legacy-14-menu-settings.png", + "next": "report/shots/100x34/next-14-menu-settings.png", + "diffFile": "report/shots/100x34/diff-14-menu-settings.png", + "diff": { + "count": 76098, + "total": 458592, + "sizeA": [843, 544], + "sizeB": [843, 544] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "" + }, + { + "row": 1, + "legacy": "", + "next": " ❯ list the files please " + }, + { + "row": 3, + "legacy": " ────────────────────────────────────────────────────────────────────────────────────────────────", + "next": " ✓ Shell command (▒▒▒▒)" + }, + { + "row": 4, + "legacy": " Filter: ", + "next": "" + }, + { + "row": 5, + "legacy": " Models │ Providers │ Context │ Safety │ Tools │ UI │ Hooks ", + "next": " Done. The command finished; the workspace has README.md, notes.txt and src/." + }, + { + "row": 6, + "legacy": " ╭──────────────────────────────────────────────────────────────────────────────────────────────╮", + "next": "" + }, + { + "row": 7, + "legacy": " │ ❯ Model ● mockprov/mock-alpha │", + "next": " ❯ create a file please " + }, + { + "row": 8, + "legacy": " │ Verifier model (unset) │", + "next": "" + }, + { + "row": 9, + "legacy": " │ Reasoning effort default │", + "next": " ✓ Shell command (▒▒▒)" + }, + { + "row": 10, + "legacy": " │ Temperature (unset) │", + "next": "" + }, + { + "row": 11, + "legacy": " │ Favorite models (none) │", + "next": " Done. The command finished; the workspace has README.md, notes.txt and src/." + }, + { + "row": 12, + "legacy": " │ Model nicknames (none) │", + "next": "╭──────────────────────────────────────────────────────────────────────────────────────────────────╮" + }, + { + "row": 13, + "legacy": " │ Smart model (inherits agent.modelSelection) │", + "next": "│ Settings · [Models] Providers Context Safety Tools UI Hooks │" + }, + { + "row": 14, + "legacy": " │ Smart reasoning effort (default) │", + "next": "│ Search: (type to search all categories) │" + }, + { + "row": 15, + "legacy": " │ Balanced model (inherits agent.modelSelection) │", + "next": "│ ❯ Model · agent.modelSelection: mockprov/mock-alpha │" + }, + { + "row": 16, + "legacy": " │ Balanced reasoning effort (default) │", + "next": "│ Verifier model · verifier.model: │" + }, + { + "row": 17, + "legacy": " │ Cheap model (inherits agent.modelSelection) │", + "next": "│ Reasoning effort · agent.reasoningEffort: default │" + }, + { + "row": 18, + "legacy": " │ Cheap reasoning effort (default) │", + "next": "│ Temperature · agent.temperature: unset │" + }, + { + "row": 19, + "legacy": " │ Chore model (inherits agent.modelSelection) │", + "next": "│ Favorite models · agent.favoriteModels: [0 entries] │" + }, + { + "row": 20, + "legacy": " │ Mentor models (none) │", + "next": "│ Model nicknames · agent.modelNicknames: [configured] │" + }, + { + "row": 21, + "legacy": " │ Disabled providers (none) │", + "next": "│ Smart model · agent.smartModel: unset │" + }, + { + "row": 22, + "legacy": " │ Flex service tier OFF │", + "next": "│ Bound provider and model selection for the main agent │" + }, + { + "row": 23, + "legacy": " │ │", + "next": "│ Current: mockprov/mock-alpha · Default: openai/gpt-5.1 │" + }, + { + "row": 24, + "legacy": " │ ──────────────────────────────────────────────────────────────────────────────────────────── │", + "next": "│ Use /model /. │" + }, + { + "row": 25, + "legacy": " │ Model · agent.modelSelection │", + "next": "│ Type search · Tab category · ↑/↓ select · Enter edit · Esc close │" + }, + { + "row": 26, + "legacy": " │ │", + "next": "╰──────────────────────────────────────────────────────────────────────────────────────────────────╯" + }, + { + "row": 27, + "legacy": " │ Bound provider and model selection for the main agent │", + "next": "────────────────────────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 28, + "legacy": " │ default: openai/gpt-5.1 │", + "next": "❯ " + }, + { + "row": 29, + "legacy": " │ │", + "next": "" + }, + { + "row": 30, + "legacy": " │ type search │ ↑↓ move │ Tab section │ ⏎ edit │ Esc close │ ● changed │", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + }, + { + "row": 31, + "legacy": " ╰──────────────────────────────────────────────────────────────────────────────────────────────╯", + "next": "" + }, + { + "row": 33, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ────────────────────────────────────────────────────────────────────────────────────────────────\n Filter: \n Models │ Providers │ Context │ Safety │ Tools │ UI │ Hooks \n ╭──────────────────────────────────────────────────────────────────────────────────────────────╮\n │ ❯ Model ● mockprov/mock-alpha │\n │ Verifier model (unset) │\n │ Reasoning effort default │\n │ Temperature (unset) │\n │ Favorite models (none) │\n │ Model nicknames (none) │\n │ Smart model (inherits agent.modelSelection) │\n │ Smart reasoning effort (default) │\n │ Balanced model (inherits agent.modelSelection) │\n │ Balanced reasoning effort (default) │\n │ Cheap model (inherits agent.modelSelection) │\n │ Cheap reasoning effort (default) │\n │ Chore model (inherits agent.modelSelection) │\n │ Mentor models (none) │\n │ Disabled providers (none) │\n │ Flex service tier OFF │\n │ │\n │ ──────────────────────────────────────────────────────────────────────────────────────────── │\n │ Model · agent.modelSelection │\n │ │\n │ Bound provider and model selection for the main agent │\n │ default: openai/gpt-5.1 │\n │ │\n │ type search │ ↑↓ move │ Tab section │ ⏎ edit │ Esc close │ ● changed │\n ╰──────────────────────────────────────────────────────────────────────────────────────────────╯\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "\n ❯ list the files please \n\n ✓ Shell command (11ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n ❯ create a file please \n\n ✓ Shell command (8ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Settings · [Models] Providers Context Safety Tools UI Hooks │\n│ Search: (type to search all categories) │\n│ ❯ Model · agent.modelSelection: mockprov/mock-alpha │\n│ Verifier model · verifier.model: │\n│ Reasoning effort · agent.reasoningEffort: default │\n│ Temperature · agent.temperature: unset │\n│ Favorite models · agent.favoriteModels: [0 entries] │\n│ Model nicknames · agent.modelNicknames: [configured] │\n│ Smart model · agent.smartModel: unset │\n│ Bound provider and model selection for the main agent │\n│ Current: mockprov/mock-alpha · Default: openai/gpt-5.1 │\n│ Use /model /. │\n│ Type search · Tab category · ↑/↓ select · Enter edit · Esc close │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n\n\n" + } + }, + { + "step": "15-menu-settings-arrow", + "legacy": "report/shots/100x34/legacy-15-menu-settings-arrow.png", + "next": "report/shots/100x34/next-15-menu-settings-arrow.png", + "diffFile": "report/shots/100x34/diff-15-menu-settings-arrow.png", + "diff": { + "count": 75084, + "total": 458592, + "sizeA": [843, 544], + "sizeB": [843, 544] + }, + "identical": false, + "rows": [ + { + "row": 1, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": " ❯ list the files please " + }, + { + "row": 3, + "legacy": "", + "next": " ✓ Shell command (▒▒▒▒)" + }, + { + "row": 4, + "legacy": " ────────────────────────────────────────────────────────────────────────────────────────────────", + "next": "" + }, + { + "row": 5, + "legacy": " Filter: ", + "next": " Done. The command finished; the workspace has README.md, notes.txt and src/." + }, + { + "row": 6, + "legacy": " Models │ Providers │ Context │ Safety │ Tools │ UI │ Hooks ", + "next": "" + }, + { + "row": 7, + "legacy": " ╭──────────────────────────────────────────────────────────────────────────────────────────────╮", + "next": " ❯ create a file please " + }, + { + "row": 8, + "legacy": " │ Model ● mockprov/mock-alpha │", + "next": "" + }, + { + "row": 9, + "legacy": " │ ❯ Verifier model (unset) │", + "next": " ✓ Shell command (▒▒▒)" + }, + { + "row": 10, + "legacy": " │ Reasoning effort default │", + "next": "" + }, + { + "row": 11, + "legacy": " │ Temperature (unset) │", + "next": " Done. The command finished; the workspace has README.md, notes.txt and src/." + }, + { + "row": 12, + "legacy": " │ Favorite models (none) │", + "next": "╭──────────────────────────────────────────────────────────────────────────────────────────────────╮" + }, + { + "row": 13, + "legacy": " │ Model nicknames (none) │", + "next": "│ Settings · [Models] Providers Context Safety Tools UI Hooks │" + }, + { + "row": 14, + "legacy": " │ Smart model (inherits agent.modelSelection) │", + "next": "│ Search: (type to search all categories) │" + }, + { + "row": 15, + "legacy": " │ Smart reasoning effort (default) │", + "next": "│ ❯ Verifier model · verifier.model: │" + }, + { + "row": 16, + "legacy": " │ Balanced model (inherits agent.modelSelection) │", + "next": "│ Reasoning effort · agent.reasoningEffort: default │" + }, + { + "row": 17, + "legacy": " │ Balanced reasoning effort (default) │", + "next": "│ Temperature · agent.temperature: unset │" + }, + { + "row": 18, + "legacy": " │ Cheap model (inherits agent.modelSelection) │", + "next": "│ Favorite models · agent.favoriteModels: [0 entries] │" + }, + { + "row": 19, + "legacy": " │ Cheap reasoning effort (default) │", + "next": "│ Model nicknames · agent.modelNicknames: [configured] │" + }, + { + "row": 20, + "legacy": " │ Chore model (inherits agent.modelSelection) │", + "next": "│ Smart model · agent.smartModel: unset │" + }, + { + "row": 21, + "legacy": " │ Mentor models (none) │", + "next": "│ Smart reasoning effort · agent.smartReasoningEffort: default │" + }, + { + "row": 22, + "legacy": " │ Disabled providers (none) │", + "next": "│ Independent verifier model ID; empty uses the session model and provider │" + }, + { + "row": 23, + "legacy": " │ Flex service tier OFF │", + "next": "│ Current: · Default: │" + }, + { + "row": 24, + "legacy": " │ │", + "next": "│ Type search · Tab category · ↑/↓ select · Enter edit · Esc close │" + }, + { + "row": 25, + "legacy": " │ ──────────────────────────────────────────────────────────────────────────────────────────── │", + "next": "╰──────────────────────────────────────────────────────────────────────────────────────────────────╯" + }, + { + "row": 26, + "legacy": " │ Verifier model · verifier.model │", + "next": "────────────────────────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 27, + "legacy": " │ │", + "next": "❯ " + }, + { + "row": 28, + "legacy": " │ Independent verifier model ID; empty uses the session model and provider │", + "next": "" + }, + { + "row": 29, + "legacy": " │ │", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + }, + { + "row": 30, + "legacy": " │ type search │ ↑↓ move │ Tab section │ ⏎ edit │ Esc close │ ● changed │", + "next": "" + }, + { + "row": 31, + "legacy": " ╰──────────────────────────────────────────────────────────────────────────────────────────────╯", + "next": "" + }, + { + "row": 33, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": "\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ────────────────────────────────────────────────────────────────────────────────────────────────\n Filter: \n Models │ Providers │ Context │ Safety │ Tools │ UI │ Hooks \n ╭──────────────────────────────────────────────────────────────────────────────────────────────╮\n │ Model ● mockprov/mock-alpha │\n │ ❯ Verifier model (unset) │\n │ Reasoning effort default │\n │ Temperature (unset) │\n │ Favorite models (none) │\n │ Model nicknames (none) │\n │ Smart model (inherits agent.modelSelection) │\n │ Smart reasoning effort (default) │\n │ Balanced model (inherits agent.modelSelection) │\n │ Balanced reasoning effort (default) │\n │ Cheap model (inherits agent.modelSelection) │\n │ Cheap reasoning effort (default) │\n │ Chore model (inherits agent.modelSelection) │\n │ Mentor models (none) │\n │ Disabled providers (none) │\n │ Flex service tier OFF │\n │ │\n │ ──────────────────────────────────────────────────────────────────────────────────────────── │\n │ Verifier model · verifier.model │\n │ │\n │ Independent verifier model ID; empty uses the session model and provider │\n │ │\n │ type search │ ↑↓ move │ Tab section │ ⏎ edit │ Esc close │ ● changed │\n ╰──────────────────────────────────────────────────────────────────────────────────────────────╯\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "\n ❯ list the files please \n\n ✓ Shell command (11ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n ❯ create a file please \n\n ✓ Shell command (8ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Settings · [Models] Providers Context Safety Tools UI Hooks │\n│ Search: (type to search all categories) │\n│ ❯ Verifier model · verifier.model: │\n│ Reasoning effort · agent.reasoningEffort: default │\n│ Temperature · agent.temperature: unset │\n│ Favorite models · agent.favoriteModels: [0 entries] │\n│ Model nicknames · agent.modelNicknames: [configured] │\n│ Smart model · agent.smartModel: unset │\n│ Smart reasoning effort · agent.smartReasoningEffort: default │\n│ Independent verifier model ID; empty uses the session model and provider │\n│ Current: · Default: │\n│ Type search · Tab category · ↑/↓ select · Enter edit · Esc close │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n\n\n\n" + } + }, + { + "step": "16-menu-settings-closed", + "legacy": "report/shots/100x34/legacy-16-menu-settings-closed.png", + "next": "report/shots/100x34/next-16-menu-settings-closed.png", + "diffFile": "report/shots/100x34/diff-16-menu-settings-closed.png", + "diff": { + "count": 48333, + "total": 458592, + "sizeA": [843, 544], + "sizeB": [843, 544] + }, + "identical": false, + "rows": [ + { + "row": 1, + "legacy": " ## Plan", + "next": " ❯ list the files please " + }, + { + "row": 3, + "legacy": " • Read notes.txt", + "next": " ✓ Shell command (▒▒▒▒)" + }, + { + "row": 4, + "legacy": " • Summarise it", + "next": "" + }, + { + "row": 5, + "legacy": "", + "next": " Done. The command finished; the workspace has README.md, notes.txt and src/." + }, + { + "row": 6, + "legacy": " ╭──────────────────────────────────────────────────────────────────────────────────────────────╮", + "next": "" + }, + { + "row": 7, + "legacy": " │ export function main() { │", + "next": " ❯ create a file please " + }, + { + "row": 8, + "legacy": " │ return 42; │", + "next": "" + }, + { + "row": 9, + "legacy": " │ } │", + "next": " ✓ Shell command (▒▒▒)" + }, + { + "row": 10, + "legacy": " ╰──────────────────────────────────────────────────────────────────────────────────────────────╯", + "next": "" + }, + { + "row": 11, + "legacy": "", + "next": " Done. The command finished; the workspace has README.md, notes.txt and src/." + }, + { + "row": 12, + "legacy": " That is all.", + "next": "────────────────────────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 13, + "legacy": "", + "next": "❯ " + }, + { + "row": 14, + "legacy": "", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output" + }, + { + "row": 15, + "legacy": " ❯ list the files please ", + "next": "" + }, + { + "row": 16, + "legacy": "", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + }, + { + "row": 17, + "legacy": " ✓ ls (▒▒▒▒)", + "next": "" + }, + { + "row": 19, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "" + }, + { + "row": 22, + "legacy": " ❯ create a file please ", + "next": "" + }, + { + "row": 24, + "legacy": " ✓ touch created-by-walk.txt (▒▒▒)", + "next": "" + }, + { + "row": 26, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "" + }, + { + "row": 29, + "legacy": " ────────────────────────────────────────────────────────────────────────────────────────────────", + "next": "" + }, + { + "row": 30, + "legacy": " ❯ ", + "next": "" + }, + { + "row": 31, + "legacy": " / commands │ @ paths │ ! shell │ Shift+Tab plan", + "next": "" + }, + { + "row": 33, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": "\n ## Plan\n\n • Read notes.txt\n • Summarise it\n\n ╭──────────────────────────────────────────────────────────────────────────────────────────────╮\n │ export function main() { │\n │ return 42; │\n │ } │\n ╰──────────────────────────────────────────────────────────────────────────────────────────────╯\n\n That is all.\n\n\n ❯ list the files please \n\n ✓ ls (21ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ❯ create a file please \n\n ✓ touch created-by-walk.txt (8ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ────────────────────────────────────────────────────────────────────────────────────────────────\n ❯ \n / commands │ @ paths │ ! shell │ Shift+Tab plan\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "\n ❯ list the files please \n\n ✓ Shell command (11ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n ❯ create a file please \n\n ✓ Shell command (8ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output\n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + } + }, + { + "step": "17-ctrl-o", + "legacy": "report/shots/100x34/legacy-17-ctrl-o.png", + "next": "report/shots/100x34/next-17-ctrl-o.png", + "diffFile": "report/shots/100x34/diff-17-ctrl-o.png", + "diff": { + "count": 56699, + "total": 458592, + "sizeA": [843, 544], + "sizeB": [843, 544] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " │ export function main() { │", + "next": "" + }, + { + "row": 1, + "legacy": " │ return 42; │", + "next": " ❯ create a file please " + }, + { + "row": 2, + "legacy": " │ } │", + "next": "" + }, + { + "row": 3, + "legacy": " ╰──────────────────────────────────────────────────────────────────────────────────────────────╯", + "next": " ✓ Shell command (▒▒▒)" + }, + { + "row": 5, + "legacy": " That is all.", + "next": " Done. The command finished; the workspace has README.md, notes.txt and src/." + }, + { + "row": 7, + "legacy": "", + "next": " ✓ Shell command (▒▒▒▒)" + }, + { + "row": 8, + "legacy": " ❯ list the files please ", + "next": " exit 0" + }, + { + "row": 9, + "legacy": "", + "next": " Runtime: ▒▒▒▒" + }, + { + "row": 10, + "legacy": " ✓ ls (▒▒▒▒)", + "next": " README.md" + }, + { + "row": 11, + "legacy": "", + "next": " notes.txt" + }, + { + "row": 12, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": " src" + }, + { + "row": 13, + "legacy": "", + "next": " ls" + }, + { + "row": 15, + "legacy": " ❯ create a file please ", + "next": " Done. The command finished; the workspace has README.md, notes.txt and src/." + }, + { + "row": 17, + "legacy": "", + "next": " ❯ create a file please " + }, + { + "row": 18, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "" + }, + { + "row": 19, + "legacy": "", + "next": " ✓ Shell command (▒▒▒)" + }, + { + "row": 20, + "legacy": "", + "next": " exit 0" + }, + { + "row": 21, + "legacy": " ────────────────────────────────────────────────────────────────────────────────────────────────", + "next": " Runtime: ▒▒▒" + }, + { + "row": 22, + "legacy": " Filter: ", + "next": " (No output)" + }, + { + "row": 23, + "legacy": " Favorites │ Nicknames │ All ", + "next": " touch created-by-walk.txt" + }, + { + "row": 24, + "legacy": " ╭──────────────────────────────────────────────────────────────────────────────────────────────╮", + "next": "" + }, + { + "row": 25, + "legacy": " │ Select model │", + "next": " Done. The command finished; the workspace has README.md, notes.txt and src/." + }, + { + "row": 26, + "legacy": " │ mockprov │ ❯ mock-alpha (current) │", + "next": "" + }, + { + "row": 27, + "legacy": " │ │ mock-beta │", + "next": "Lines 18–38 of 38 · PgUp/PgDn or Ctrl+↑/↓" + }, + { + "row": 28, + "legacy": " ╰──────────────────────────────────────────────────────────────────────────────────────────────╯", + "next": "────────────────────────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 29, + "legacy": " ↑↓ navigate │ ⏎ select │ Tab/←→ tab │ ctrl+n nickname │ ctrl+f favorite │ ctrl+r refresh model ", + "next": "❯ " + }, + { + "row": 30, + "legacy": " list │ Esc cancel", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output" + }, + { + "row": 32, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + } + ], + "notes": [], + "text": { + "legacy": " │ export function main() { │\n │ return 42; │\n │ } │\n ╰──────────────────────────────────────────────────────────────────────────────────────────────╯\n\n That is all.\n\n\n ❯ list the files please \n\n ✓ ls (21ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ❯ create a file please \n\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ────────────────────────────────────────────────────────────────────────────────────────────────\n Filter: \n Favorites │ Nicknames │ All \n ╭──────────────────────────────────────────────────────────────────────────────────────────────╮\n │ Select model │\n │ mockprov │ ❯ mock-alpha (current) │\n │ │ mock-beta │\n ╰──────────────────────────────────────────────────────────────────────────────────────────────╯\n ↑↓ navigate │ ⏎ select │ Tab/←→ tab │ ctrl+n nickname │ ctrl+f favorite │ ctrl+r refresh model \n list │ Esc cancel\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k\n", + "next": "\n ❯ create a file please \n\n ✓ Shell command (8ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n ✓ Shell command (11ms)\n exit 0\n Runtime: 11ms\n README.md\n notes.txt\n src\n ls\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n ❯ create a file please \n\n ✓ Shell command (8ms)\n exit 0\n Runtime: 8ms\n (No output)\n touch created-by-walk.txt\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\nLines 18–38 of 38 · PgUp/PgDn or Ctrl+↑/↓\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output\n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n" + } + }, + { + "step": "18-ctrl-o-closed", + "legacy": "report/shots/100x34/legacy-18-ctrl-o-closed.png", + "next": "report/shots/100x34/next-18-ctrl-o-closed.png", + "diffFile": "report/shots/100x34/diff-18-ctrl-o-closed.png", + "diff": { + "count": 34712, + "total": 458592, + "sizeA": [843, 544], + "sizeB": [843, 544] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " │ export function main() { │", + "next": "" + }, + { + "row": 1, + "legacy": " │ return 42; │", + "next": " ❯ create a file please " + }, + { + "row": 2, + "legacy": " │ } │", + "next": "" + }, + { + "row": 3, + "legacy": " ╰──────────────────────────────────────────────────────────────────────────────────────────────╯", + "next": " ✓ Shell command (▒▒▒)" + }, + { + "row": 5, + "legacy": " That is all.", + "next": " Done. The command finished; the workspace has README.md, notes.txt and src/." + }, + { + "row": 6, + "legacy": "", + "next": "────────────────────────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 7, + "legacy": "", + "next": "❯ " + }, + { + "row": 8, + "legacy": " ❯ list the files please ", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output" + }, + { + "row": 10, + "legacy": " ✓ ls (▒▒▒▒)", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + }, + { + "row": 12, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "" + }, + { + "row": 15, + "legacy": " ❯ create a file please ", + "next": "" + }, + { + "row": 18, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "" + }, + { + "row": 21, + "legacy": " ────────────────────────────────────────────────────────────────────────────────────────────────", + "next": "" + }, + { + "row": 22, + "legacy": " ❯ ", + "next": "" + }, + { + "row": 23, + "legacy": " / commands │ @ paths │ ! shell │ Shift+Tab plan", + "next": "" + }, + { + "row": 25, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": " │ export function main() { │\n │ return 42; │\n │ } │\n ╰──────────────────────────────────────────────────────────────────────────────────────────────╯\n\n That is all.\n\n\n ❯ list the files please \n\n ✓ ls (21ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ❯ create a file please \n\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ────────────────────────────────────────────────────────────────────────────────────────────────\n ❯ \n / commands │ @ paths │ ! shell │ Shift+Tab plan\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k\n\n\n\n\n\n\n\n", + "next": "\n ❯ create a file please \n\n ✓ Shell command (8ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output\n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + } + }, + { + "step": "19-shift-tab", + "legacy": "report/shots/100x34/legacy-19-shift-tab.png", + "next": "report/shots/100x34/next-19-shift-tab.png", + "diffFile": "report/shots/100x34/diff-19-shift-tab.png", + "diff": { + "count": 47752, + "total": 458592, + "sizeA": [843, 544], + "sizeB": [843, 544] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " │ export function main() { │", + "next": "" + }, + { + "row": 1, + "legacy": " │ return 42; │", + "next": " ❯ create a file please " + }, + { + "row": 2, + "legacy": " │ } │", + "next": "" + }, + { + "row": 3, + "legacy": " ╰──────────────────────────────────────────────────────────────────────────────────────────────╯", + "next": " ✓ Shell command (▒▒▒)" + }, + { + "row": 5, + "legacy": " That is all.", + "next": " Done. The command finished; the workspace has README.md, notes.txt and src/." + }, + { + "row": 6, + "legacy": "", + "next": "╭──────────────────────────────────────────────────────────────────────────────────────────────────╮" + }, + { + "row": 7, + "legacy": "", + "next": "│ ⚠ Switching modes requires clearing the current session. │" + }, + { + "row": 8, + "legacy": " ❯ list the files please ", + "next": "│ Clear session and switch mode? │" + }, + { + "row": 9, + "legacy": "", + "next": "│ Yes │" + }, + { + "row": 10, + "legacy": " ✓ ls (▒▒▒▒)", + "next": "│ › No │" + }, + { + "row": 11, + "legacy": "", + "next": "│ ↑/↓ select · Enter choose · y/n answer · Esc cancel │" + }, + { + "row": 12, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "╰──────────────────────────────────────────────────────────────────────────────────────────────────╯" + }, + { + "row": 13, + "legacy": "", + "next": "────────────────────────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 14, + "legacy": "", + "next": "❯ " + }, + { + "row": 15, + "legacy": " ❯ create a file please ", + "next": "" + }, + { + "row": 16, + "legacy": "", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + }, + { + "row": 18, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "" + }, + { + "row": 21, + "legacy": " ────────────────────────────────────────────────────────────────────────────────────────────────", + "next": "" + }, + { + "row": 22, + "legacy": " ╭──────────────────────────────────────────────────────────────────────────────────────────────╮", + "next": "" + }, + { + "row": 23, + "legacy": " │ ▲ Switching to Plan mode requires clearing the current session. │", + "next": "" + }, + { + "row": 24, + "legacy": " │ Clear session and switch to Plan mode? │", + "next": "" + }, + { + "row": 25, + "legacy": " │ │", + "next": "" + }, + { + "row": 26, + "legacy": " │ Yes │", + "next": "" + }, + { + "row": 27, + "legacy": " │ ❯ No │", + "next": "" + }, + { + "row": 28, + "legacy": " │ ↑↓ navigate │ ⏎ select │ y/n answer │ Esc cancel │", + "next": "" + }, + { + "row": 29, + "legacy": " ╰──────────────────────────────────────────────────────────────────────────────────────────────╯", + "next": "" + }, + { + "row": 31, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": " │ export function main() { │\n │ return 42; │\n │ } │\n ╰──────────────────────────────────────────────────────────────────────────────────────────────╯\n\n That is all.\n\n\n ❯ list the files please \n\n ✓ ls (21ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ❯ create a file please \n\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ────────────────────────────────────────────────────────────────────────────────────────────────\n ╭──────────────────────────────────────────────────────────────────────────────────────────────╮\n │ ▲ Switching to Plan mode requires clearing the current session. │\n │ Clear session and switch to Plan mode? │\n │ │\n │ Yes │\n │ ❯ No │\n │ ↑↓ navigate │ ⏎ select │ y/n answer │ Esc cancel │\n ╰──────────────────────────────────────────────────────────────────────────────────────────────╯\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k\n\n", + "next": "\n ❯ create a file please \n\n ✓ Shell command (8ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ ⚠ Switching modes requires clearing the current session. │\n│ Clear session and switch mode? │\n│ Yes │\n│ › No │\n│ ↑/↓ select · Enter choose · y/n answer · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + } + }, + { + "step": "20-shift-tab-restored", + "legacy": "report/shots/100x34/legacy-20-shift-tab-restored.png", + "next": "report/shots/100x34/next-20-shift-tab-restored.png", + "diffFile": "report/shots/100x34/diff-20-shift-tab-restored.png", + "diff": { + "count": 34712, + "total": 458592, + "sizeA": [843, 544], + "sizeB": [843, 544] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " │ export function main() { │", + "next": "" + }, + { + "row": 1, + "legacy": " │ return 42; │", + "next": " ❯ create a file please " + }, + { + "row": 2, + "legacy": " │ } │", + "next": "" + }, + { + "row": 3, + "legacy": " ╰──────────────────────────────────────────────────────────────────────────────────────────────╯", + "next": " ✓ Shell command (▒▒▒)" + }, + { + "row": 5, + "legacy": " That is all.", + "next": " Done. The command finished; the workspace has README.md, notes.txt and src/." + }, + { + "row": 6, + "legacy": "", + "next": "────────────────────────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 7, + "legacy": "", + "next": "❯ " + }, + { + "row": 8, + "legacy": " ❯ list the files please ", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output" + }, + { + "row": 10, + "legacy": " ✓ ls (▒▒▒▒)", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + }, + { + "row": 12, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "" + }, + { + "row": 15, + "legacy": " ❯ create a file please ", + "next": "" + }, + { + "row": 18, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "" + }, + { + "row": 21, + "legacy": " ────────────────────────────────────────────────────────────────────────────────────────────────", + "next": "" + }, + { + "row": 22, + "legacy": " ❯ ", + "next": "" + }, + { + "row": 23, + "legacy": " / commands │ @ paths │ ! shell │ Shift+Tab plan", + "next": "" + }, + { + "row": 25, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": " │ export function main() { │\n │ return 42; │\n │ } │\n ╰──────────────────────────────────────────────────────────────────────────────────────────────╯\n\n That is all.\n\n\n ❯ list the files please \n\n ✓ ls (21ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ❯ create a file please \n\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ────────────────────────────────────────────────────────────────────────────────────────────────\n ❯ \n / commands │ @ paths │ ! shell │ Shift+Tab plan\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k\n\n\n\n\n\n\n\n", + "next": "\n ❯ create a file please \n\n ✓ Shell command (8ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output\n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + } + }, + { + "step": "21-help", + "legacy": "report/shots/100x34/legacy-21-help.png", + "next": "report/shots/100x34/next-21-help.png", + "diffFile": "report/shots/100x34/diff-21-help.png", + "diff": { + "count": 90808, + "total": 458592, + "sizeA": [843, 544], + "sizeB": [843, 544] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " /retry — Resend the last user turn, or choose a turn to resend", + "next": "/usage — Show token usage for this session" + }, + { + "row": 1, + "legacy": " /retry-tool — Retry the last tool call", + "next": "/copy — Copy an assistant response (/copy N counts back)" + }, + { + "row": 2, + "legacy": " /retry-turn — Regenerate the latest user turn from its original prompt", + "next": "/skills — Activate a skill for a request" + }, + { + "row": 3, + "legacy": " /compact — Compact older conversation turns into a local summary", + "next": "/goal — Inspect or update the durable session goal" + }, + { + "row": 4, + "legacy": " /bare — Toggle the Bare profile (minimal prompt)", + "next": "/handoff — Send the last response to another model for review" + }, + { + "row": 5, + "legacy": " /lite — Toggle the Bare profile (Lite was merged into Bare)", + "next": "/tasks — Manage background tasks" + }, + { + "row": 6, + "legacy": " /mentor — Toggle mentor mode (collaborative mode with mentor model)", + "next": "/queue — Resume, discard, retract or edit queued messages" + }, + { + "row": 7, + "legacy": " /orchestrator — Toggle orchestrator mode (delegate all tool-backed work)", + "next": "/steer — Send a message into the running turn" + }, + { + "row": 8, + "legacy": " /auto-approve — Set tool auto-approval mode (off, advisory, auto, always)", + "next": "/followup — Queue a message for after the running turn" + }, + { + "row": 9, + "legacy": " /plan — Toggle plan mode (read-only research/planning mode)", + "next": "/cancel — Stop the running turn" + }, + { + "row": 10, + "legacy": " /profile — Switch the active profile", + "next": "/answer — Answer a pending approval or question" + }, + { + "row": 11, + "legacy": " /handoff — Send the last assistant response to another model for review", + "next": "/bridge — Attach or detach this session's control socket" + }, + { + "row": 12, + "legacy": " /settings — View or modify settings", + "next": "/restart — Reload this executable (/restart stop also stops background work)" + }, + { + "row": 13, + "legacy": " /sandbox — Toggle shell sandboxing; disabling it gives shell commands unrestricted access", + "next": "/quit — Exit the application" + }, + { + "row": 14, + "legacy": " /mcp — Show configured MCP servers and their connection state", + "next": "/exit — Exit the application" + }, + { + "row": 15, + "legacy": " /mcp-login — Authenticate with an OAuth-protected MCP server", + "next": "/command-status — Show the outcome of a command by ID" + }, + { + "row": 16, + "legacy": " /bridge — Attach or detach this local session for Discord bridge input", + "next": "/command-apply — Apply a finished command result by ID" + }, + { + "row": 17, + "legacy": " /providers — Manage API providers (list, add, edit, delete)", + "next": "/mcp — Show configured MCP servers and their state" + }, + { + "row": 18, + "legacy": " /skills — Activate a skill for the next request", + "next": "/mcp-login — Authenticate with an OAuth-protected MCP server" + }, + { + "row": 19, + "legacy": " /restart — Reload the built CLI in place; /restart stop consents to stopping background work", + "next": "/plan — Toggle the plan profile" + }, + { + "row": 20, + "legacy": " /quit — Exit the application", + "next": "/bare — Switch to the bare profile" + }, + { + "row": 21, + "legacy": " /help — Show commands and keyboard shortcuts", + "next": "/mentor — Toggle the mentor profile" + }, + { + "row": 22, + "legacy": "", + "next": "/orchestrator — Toggle the orchestrator profile" + }, + { + "row": 23, + "legacy": " Keyboard shortcuts", + "next": "Keyboard shortcuts" + }, + { + "row": 24, + "legacy": " Ctrl+C: clear draft or interrupt; press again to exit", + "next": "Enter send/steer · Alt+Enter follow-up · ↑/↓ history · PgUp/PgDn scroll · Ctrl+O tool output · " + }, + { + "row": 25, + "legacy": " Ctrl+O: choose model · Ctrl+T: choose reasoning effort", + "next": "Ctrl+T reasoning effort" + }, + { + "row": 26, + "legacy": " Shift+Tab: switch Standard/Plan · @: complete paths · !: shell", + "next": "Ctrl+G approvals/tasks · Ctrl+B budget · Ctrl+C stop turn / clear input / exit" + }, + { + "row": 27, + "legacy": "", + "next": "Shift+Tab plan mode" + }, + { + "row": 28, + "legacy": "", + "next": "────────────────────────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 29, + "legacy": " ────────────────────────────────────────────────────────────────────────────────────────────────", + "next": "❯ " + }, + { + "row": 30, + "legacy": " ❯ ", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output" + }, + { + "row": 31, + "legacy": " / commands │ @ paths │ ! shell │ Shift+Tab plan", + "next": "" + }, + { + "row": 32, + "legacy": "", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + }, + { + "row": 33, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": " /retry — Resend the last user turn, or choose a turn to resend\n /retry-tool — Retry the last tool call\n /retry-turn — Regenerate the latest user turn from its original prompt\n /compact — Compact older conversation turns into a local summary\n /bare — Toggle the Bare profile (minimal prompt)\n /lite — Toggle the Bare profile (Lite was merged into Bare)\n /mentor — Toggle mentor mode (collaborative mode with mentor model)\n /orchestrator — Toggle orchestrator mode (delegate all tool-backed work)\n /auto-approve — Set tool auto-approval mode (off, advisory, auto, always)\n /plan — Toggle plan mode (read-only research/planning mode)\n /profile — Switch the active profile\n /handoff — Send the last assistant response to another model for review\n /settings — View or modify settings\n /sandbox — Toggle shell sandboxing; disabling it gives shell commands unrestricted access\n /mcp — Show configured MCP servers and their connection state\n /mcp-login — Authenticate with an OAuth-protected MCP server\n /bridge — Attach or detach this local session for Discord bridge input\n /providers — Manage API providers (list, add, edit, delete)\n /skills — Activate a skill for the next request\n /restart — Reload the built CLI in place; /restart stop consents to stopping background work\n /quit — Exit the application\n /help — Show commands and keyboard shortcuts\n\n Keyboard shortcuts\n Ctrl+C: clear draft or interrupt; press again to exit\n Ctrl+O: choose model · Ctrl+T: choose reasoning effort\n Shift+Tab: switch Standard/Plan · @: complete paths · !: shell\n\n\n ────────────────────────────────────────────────────────────────────────────────────────────────\n ❯ \n / commands │ @ paths │ ! shell │ Shift+Tab plan\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "/usage — Show token usage for this session\n/copy — Copy an assistant response (/copy N counts back)\n/skills — Activate a skill for a request\n/goal — Inspect or update the durable session goal\n/handoff — Send the last response to another model for review\n/tasks — Manage background tasks\n/queue — Resume, discard, retract or edit queued messages\n/steer — Send a message into the running turn\n/followup — Queue a message for after the running turn\n/cancel — Stop the running turn\n/answer — Answer a pending approval or question\n/bridge — Attach or detach this session's control socket\n/restart — Reload this executable (/restart stop also stops background work)\n/quit — Exit the application\n/exit — Exit the application\n/command-status — Show the outcome of a command by ID\n/command-apply — Apply a finished command result by ID\n/mcp — Show configured MCP servers and their state\n/mcp-login — Authenticate with an OAuth-protected MCP server\n/plan — Toggle the plan profile\n/bare — Switch to the bare profile\n/mentor — Toggle the mentor profile\n/orchestrator — Toggle the orchestrator profile\nKeyboard shortcuts\nEnter send/steer · Alt+Enter follow-up · ↑/↓ history · PgUp/PgDn scroll · Ctrl+O tool output · \nCtrl+T reasoning effort\nCtrl+G approvals/tasks · Ctrl+B budget · Ctrl+C stop turn / clear input / exit\nShift+Tab plan mode\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output\n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n" + } + }, + { + "step": "22-help-closed", + "legacy": "report/shots/100x34/legacy-22-help-closed.png", + "next": "report/shots/100x34/next-22-help-closed.png", + "diffFile": "report/shots/100x34/diff-22-help-closed.png", + "diff": { + "count": 90808, + "total": 458592, + "sizeA": [843, 544], + "sizeB": [843, 544] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " /retry — Resend the last user turn, or choose a turn to resend", + "next": "/usage — Show token usage for this session" + }, + { + "row": 1, + "legacy": " /retry-tool — Retry the last tool call", + "next": "/copy — Copy an assistant response (/copy N counts back)" + }, + { + "row": 2, + "legacy": " /retry-turn — Regenerate the latest user turn from its original prompt", + "next": "/skills — Activate a skill for a request" + }, + { + "row": 3, + "legacy": " /compact — Compact older conversation turns into a local summary", + "next": "/goal — Inspect or update the durable session goal" + }, + { + "row": 4, + "legacy": " /bare — Toggle the Bare profile (minimal prompt)", + "next": "/handoff — Send the last response to another model for review" + }, + { + "row": 5, + "legacy": " /lite — Toggle the Bare profile (Lite was merged into Bare)", + "next": "/tasks — Manage background tasks" + }, + { + "row": 6, + "legacy": " /mentor — Toggle mentor mode (collaborative mode with mentor model)", + "next": "/queue — Resume, discard, retract or edit queued messages" + }, + { + "row": 7, + "legacy": " /orchestrator — Toggle orchestrator mode (delegate all tool-backed work)", + "next": "/steer — Send a message into the running turn" + }, + { + "row": 8, + "legacy": " /auto-approve — Set tool auto-approval mode (off, advisory, auto, always)", + "next": "/followup — Queue a message for after the running turn" + }, + { + "row": 9, + "legacy": " /plan — Toggle plan mode (read-only research/planning mode)", + "next": "/cancel — Stop the running turn" + }, + { + "row": 10, + "legacy": " /profile — Switch the active profile", + "next": "/answer — Answer a pending approval or question" + }, + { + "row": 11, + "legacy": " /handoff — Send the last assistant response to another model for review", + "next": "/bridge — Attach or detach this session's control socket" + }, + { + "row": 12, + "legacy": " /settings — View or modify settings", + "next": "/restart — Reload this executable (/restart stop also stops background work)" + }, + { + "row": 13, + "legacy": " /sandbox — Toggle shell sandboxing; disabling it gives shell commands unrestricted access", + "next": "/quit — Exit the application" + }, + { + "row": 14, + "legacy": " /mcp — Show configured MCP servers and their connection state", + "next": "/exit — Exit the application" + }, + { + "row": 15, + "legacy": " /mcp-login — Authenticate with an OAuth-protected MCP server", + "next": "/command-status — Show the outcome of a command by ID" + }, + { + "row": 16, + "legacy": " /bridge — Attach or detach this local session for Discord bridge input", + "next": "/command-apply — Apply a finished command result by ID" + }, + { + "row": 17, + "legacy": " /providers — Manage API providers (list, add, edit, delete)", + "next": "/mcp — Show configured MCP servers and their state" + }, + { + "row": 18, + "legacy": " /skills — Activate a skill for the next request", + "next": "/mcp-login — Authenticate with an OAuth-protected MCP server" + }, + { + "row": 19, + "legacy": " /restart — Reload the built CLI in place; /restart stop consents to stopping background work", + "next": "/plan — Toggle the plan profile" + }, + { + "row": 20, + "legacy": " /quit — Exit the application", + "next": "/bare — Switch to the bare profile" + }, + { + "row": 21, + "legacy": " /help — Show commands and keyboard shortcuts", + "next": "/mentor — Toggle the mentor profile" + }, + { + "row": 22, + "legacy": "", + "next": "/orchestrator — Toggle the orchestrator profile" + }, + { + "row": 23, + "legacy": " Keyboard shortcuts", + "next": "Keyboard shortcuts" + }, + { + "row": 24, + "legacy": " Ctrl+C: clear draft or interrupt; press again to exit", + "next": "Enter send/steer · Alt+Enter follow-up · ↑/↓ history · PgUp/PgDn scroll · Ctrl+O tool output · " + }, + { + "row": 25, + "legacy": " Ctrl+O: choose model · Ctrl+T: choose reasoning effort", + "next": "Ctrl+T reasoning effort" + }, + { + "row": 26, + "legacy": " Shift+Tab: switch Standard/Plan · @: complete paths · !: shell", + "next": "Ctrl+G approvals/tasks · Ctrl+B budget · Ctrl+C stop turn / clear input / exit" + }, + { + "row": 27, + "legacy": "", + "next": "Shift+Tab plan mode" + }, + { + "row": 28, + "legacy": "", + "next": "────────────────────────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 29, + "legacy": " ────────────────────────────────────────────────────────────────────────────────────────────────", + "next": "❯ " + }, + { + "row": 30, + "legacy": " ❯ ", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output" + }, + { + "row": 31, + "legacy": " / commands │ @ paths │ ! shell │ Shift+Tab plan", + "next": "" + }, + { + "row": 32, + "legacy": "", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + }, + { + "row": 33, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": " /retry — Resend the last user turn, or choose a turn to resend\n /retry-tool — Retry the last tool call\n /retry-turn — Regenerate the latest user turn from its original prompt\n /compact — Compact older conversation turns into a local summary\n /bare — Toggle the Bare profile (minimal prompt)\n /lite — Toggle the Bare profile (Lite was merged into Bare)\n /mentor — Toggle mentor mode (collaborative mode with mentor model)\n /orchestrator — Toggle orchestrator mode (delegate all tool-backed work)\n /auto-approve — Set tool auto-approval mode (off, advisory, auto, always)\n /plan — Toggle plan mode (read-only research/planning mode)\n /profile — Switch the active profile\n /handoff — Send the last assistant response to another model for review\n /settings — View or modify settings\n /sandbox — Toggle shell sandboxing; disabling it gives shell commands unrestricted access\n /mcp — Show configured MCP servers and their connection state\n /mcp-login — Authenticate with an OAuth-protected MCP server\n /bridge — Attach or detach this local session for Discord bridge input\n /providers — Manage API providers (list, add, edit, delete)\n /skills — Activate a skill for the next request\n /restart — Reload the built CLI in place; /restart stop consents to stopping background work\n /quit — Exit the application\n /help — Show commands and keyboard shortcuts\n\n Keyboard shortcuts\n Ctrl+C: clear draft or interrupt; press again to exit\n Ctrl+O: choose model · Ctrl+T: choose reasoning effort\n Shift+Tab: switch Standard/Plan · @: complete paths · !: shell\n\n\n ────────────────────────────────────────────────────────────────────────────────────────────────\n ❯ \n / commands │ @ paths │ ! shell │ Shift+Tab plan\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "/usage — Show token usage for this session\n/copy — Copy an assistant response (/copy N counts back)\n/skills — Activate a skill for a request\n/goal — Inspect or update the durable session goal\n/handoff — Send the last response to another model for review\n/tasks — Manage background tasks\n/queue — Resume, discard, retract or edit queued messages\n/steer — Send a message into the running turn\n/followup — Queue a message for after the running turn\n/cancel — Stop the running turn\n/answer — Answer a pending approval or question\n/bridge — Attach or detach this session's control socket\n/restart — Reload this executable (/restart stop also stops background work)\n/quit — Exit the application\n/exit — Exit the application\n/command-status — Show the outcome of a command by ID\n/command-apply — Apply a finished command result by ID\n/mcp — Show configured MCP servers and their state\n/mcp-login — Authenticate with an OAuth-protected MCP server\n/plan — Toggle the plan profile\n/bare — Switch to the bare profile\n/mentor — Toggle the mentor profile\n/orchestrator — Toggle the orchestrator profile\nKeyboard shortcuts\nEnter send/steer · Alt+Enter follow-up · ↑/↓ history · PgUp/PgDn scroll · Ctrl+O tool output · \nCtrl+T reasoning effort\nCtrl+G approvals/tasks · Ctrl+B budget · Ctrl+C stop turn / clear input / exit\nShift+Tab plan mode\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output\n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n" + } + }, + { + "step": "23-resume-list", + "legacy": "report/shots/100x34/legacy-23-resume-list.png", + "next": "report/shots/100x34/next-23-resume-list.png", + "diffFile": "report/shots/100x34/diff-23-resume-list.png", + "diff": { + "count": 93673, + "total": 458592, + "sizeA": [843, 544], + "sizeB": [843, 544] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " /settings — View or modify settings", + "next": "/followup — Queue a message for after the running turn" + }, + { + "row": 1, + "legacy": " /sandbox — Toggle shell sandboxing; disabling it gives shell commands unrestricted access", + "next": "/cancel — Stop the running turn" + }, + { + "row": 2, + "legacy": " /mcp — Show configured MCP servers and their connection state", + "next": "/answer — Answer a pending approval or question" + }, + { + "row": 3, + "legacy": " /mcp-login — Authenticate with an OAuth-protected MCP server", + "next": "/bridge — Attach or detach this session's control socket" + }, + { + "row": 4, + "legacy": " /bridge — Attach or detach this local session for Discord bridge input", + "next": "/restart — Reload this executable (/restart stop also stops background work)" + }, + { + "row": 5, + "legacy": " /providers — Manage API providers (list, add, edit, delete)", + "next": "/quit — Exit the application" + }, + { + "row": 6, + "legacy": " /skills — Activate a skill for the next request", + "next": "/exit — Exit the application" + }, + { + "row": 7, + "legacy": " /restart — Reload the built CLI in place; /restart stop consents to stopping background work", + "next": "/command-status — Show the outcome of a command by ID" + }, + { + "row": 8, + "legacy": " /quit — Exit the application", + "next": "/command-apply — Apply a finished command result by ID" + }, + { + "row": 9, + "legacy": " /help — Show commands and keyboard shortcuts", + "next": "/mcp — Show configured MCP servers and their state" + }, + { + "row": 10, + "legacy": "", + "next": "/mcp-login — Authenticate with an OAuth-protected MCP server" + }, + { + "row": 11, + "legacy": " Keyboard shortcuts", + "next": "/plan — Toggle the plan profile" + }, + { + "row": 12, + "legacy": " Ctrl+C: clear draft or interrupt; press again to exit", + "next": "/bare — Switch to the bare profile" + }, + { + "row": 13, + "legacy": " Ctrl+O: choose model · Ctrl+T: choose reasoning effort", + "next": "/mentor — Toggle the mentor profile" + }, + { + "row": 14, + "legacy": " Shift+Tab: switch Standard/Plan · @: complete paths · !: shell", + "next": "/orchestrator — Toggle the orchestrator profile" + }, + { + "row": 15, + "legacy": "", + "next": "Keyboard shortcuts" + }, + { + "row": 16, + "legacy": "", + "next": "Enter send/steer · Alt+Enter follow-up · ↑/↓ history · PgUp/PgDn scroll · Ctrl+O tool output · " + }, + { + "row": 17, + "legacy": " ────────────────────────────────────────────────────────────────────────────────────────────────", + "next": "Ctrl+T reasoning effort" + }, + { + "row": 18, + "legacy": " ╭──────────────────────────────────────────────────────────────────────────────────────────────╮", + "next": "Ctrl+G approvals/tasks · Ctrl+B budget · Ctrl+C stop turn / clear input / exit" + }, + { + "row": 19, + "legacy": " │ Resume Conversation │", + "next": "Shift+Tab plan mode" + }, + { + "row": 20, + "legacy": " │ ❯ show markdown please · ▒▒▒▒▒▒▒▒▒▒▒▒▒▒ · 6… │ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ │", + "next": "╭──────────────────────────────────────────────────────────────────────────────────────────────────╮" + }, + { + "row": 21, + "legacy": " │ ping idle 0 · ▒▒▒▒▒▒▒▒▒▒▒▒▒▒ · 38 msgs │ Updated: 2026-11-04 06:51:06 │", + "next": "│ Resume Conversation │" + }, + { + "row": 22, + "legacy": " │ RT-PROMPT please read the small file · 5 … │ Local • 6 msgs • mock-alpha • mode: bare │", + "next": "│ Loading conversations… │" + }, + { + "row": 23, + "legacy": " │ RT-PROMPT please read the small file · 5 … │ │", + "next": "│ ↑/↓ select · Enter resume · Esc cancel │" + }, + { + "row": 24, + "legacy": " │ RT-PROMPT one more question · ▒▒▒▒▒▒▒▒▒▒▒… │ Initial Prompt: │", + "next": "╰──────────────────────────────────────────────────────────────────────────────────────────────────╯" + }, + { + "row": 25, + "legacy": " │ RT-PROMPT one more question · ▒▒▒▒▒▒▒▒▒▒▒… │ \"show markdown please\" │", + "next": "────────────────────────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 26, + "legacy": " │ RT-PROMPT one more question · ▒▒▒▒▒▒▒▒▒▒▒… │ │", + "next": "❯ " + }, + { + "row": 27, + "legacy": " │ RT-PROMPT please read the large file · 5 … │ │", + "next": "" + }, + { + "row": 28, + "legacy": " │ RT-PROMPT please read the small file · 5 … │ │", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + }, + { + "row": 29, + "legacy": " │ RT-PROMPT please read the small file · 5 … │ │", + "next": "" + }, + { + "row": 30, + "legacy": " ╰──────────────────────────────────────────────────────────────────────────────────────────────╯", + "next": "" + }, + { + "row": 31, + "legacy": " ↑↓ navigate │ ⏎ resume │ Esc cancel", + "next": "" + }, + { + "row": 33, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": ["next: no matching screen within 5000 ms"], + "text": { + "legacy": " /settings — View or modify settings\n /sandbox — Toggle shell sandboxing; disabling it gives shell commands unrestricted access\n /mcp — Show configured MCP servers and their connection state\n /mcp-login — Authenticate with an OAuth-protected MCP server\n /bridge — Attach or detach this local session for Discord bridge input\n /providers — Manage API providers (list, add, edit, delete)\n /skills — Activate a skill for the next request\n /restart — Reload the built CLI in place; /restart stop consents to stopping background work\n /quit — Exit the application\n /help — Show commands and keyboard shortcuts\n\n Keyboard shortcuts\n Ctrl+C: clear draft or interrupt; press again to exit\n Ctrl+O: choose model · Ctrl+T: choose reasoning effort\n Shift+Tab: switch Standard/Plan · @: complete paths · !: shell\n\n\n ────────────────────────────────────────────────────────────────────────────────────────────────\n ╭──────────────────────────────────────────────────────────────────────────────────────────────╮\n │ Resume Conversation │\n │ ❯ show markdown please · 13 seconds ago · 6… │ 2ec7486d-b9d7-42c0-b96a-36d30d9631a3 │\n │ ping idle 0 · 38 seconds ago · 38 msgs │ Updated: 2026-11-04 06:51:06 │\n │ RT-PROMPT please read the small file · 5 … │ Local • 6 msgs • mock-alpha • mode: bare │\n │ RT-PROMPT please read the small file · 5 … │ │\n │ RT-PROMPT one more question · 5 hours ago… │ Initial Prompt: │\n │ RT-PROMPT one more question · 5 hours ago… │ \"show markdown please\" │\n │ RT-PROMPT one more question · 5 hours ago… │ │\n │ RT-PROMPT please read the large file · 5 … │ │\n │ RT-PROMPT please read the small file · 5 … │ │\n │ RT-PROMPT please read the small file · 5 … │ │\n ╰──────────────────────────────────────────────────────────────────────────────────────────────╯\n ↑↓ navigate │ ⏎ resume │ Esc cancel\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "/followup — Queue a message for after the running turn\n/cancel — Stop the running turn\n/answer — Answer a pending approval or question\n/bridge — Attach or detach this session's control socket\n/restart — Reload this executable (/restart stop also stops background work)\n/quit — Exit the application\n/exit — Exit the application\n/command-status — Show the outcome of a command by ID\n/command-apply — Apply a finished command result by ID\n/mcp — Show configured MCP servers and their state\n/mcp-login — Authenticate with an OAuth-protected MCP server\n/plan — Toggle the plan profile\n/bare — Switch to the bare profile\n/mentor — Toggle the mentor profile\n/orchestrator — Toggle the orchestrator profile\nKeyboard shortcuts\nEnter send/steer · Alt+Enter follow-up · ↑/↓ history · PgUp/PgDn scroll · Ctrl+O tool output · \nCtrl+T reasoning effort\nCtrl+G approvals/tasks · Ctrl+B budget · Ctrl+C stop turn / clear input / exit\nShift+Tab plan mode\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Resume Conversation │\n│ Loading conversations… │\n│ ↑/↓ select · Enter resume · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n\n\n\n\n" + } + }, + { + "step": "24-resume-preview", + "legacy": "report/shots/100x34/legacy-24-resume-preview.png", + "next": "report/shots/100x34/next-24-resume-preview.png", + "diffFile": "report/shots/100x34/diff-24-resume-preview.png", + "diff": { + "count": 93372, + "total": 458592, + "sizeA": [843, 544], + "sizeB": [843, 544] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " /settings — View or modify settings", + "next": "/followup — Queue a message for after the running turn" + }, + { + "row": 1, + "legacy": " /sandbox — Toggle shell sandboxing; disabling it gives shell commands unrestricted access", + "next": "/cancel — Stop the running turn" + }, + { + "row": 2, + "legacy": " /mcp — Show configured MCP servers and their connection state", + "next": "/answer — Answer a pending approval or question" + }, + { + "row": 3, + "legacy": " /mcp-login — Authenticate with an OAuth-protected MCP server", + "next": "/bridge — Attach or detach this session's control socket" + }, + { + "row": 4, + "legacy": " /bridge — Attach or detach this local session for Discord bridge input", + "next": "/restart — Reload this executable (/restart stop also stops background work)" + }, + { + "row": 5, + "legacy": " /providers — Manage API providers (list, add, edit, delete)", + "next": "/quit — Exit the application" + }, + { + "row": 6, + "legacy": " /skills — Activate a skill for the next request", + "next": "/exit — Exit the application" + }, + { + "row": 7, + "legacy": " /restart — Reload the built CLI in place; /restart stop consents to stopping background work", + "next": "/command-status — Show the outcome of a command by ID" + }, + { + "row": 8, + "legacy": " /quit — Exit the application", + "next": "/command-apply — Apply a finished command result by ID" + }, + { + "row": 9, + "legacy": " /help — Show commands and keyboard shortcuts", + "next": "/mcp — Show configured MCP servers and their state" + }, + { + "row": 10, + "legacy": "", + "next": "/mcp-login — Authenticate with an OAuth-protected MCP server" + }, + { + "row": 11, + "legacy": " Keyboard shortcuts", + "next": "/plan — Toggle the plan profile" + }, + { + "row": 12, + "legacy": " Ctrl+C: clear draft or interrupt; press again to exit", + "next": "/bare — Switch to the bare profile" + }, + { + "row": 13, + "legacy": " Ctrl+O: choose model · Ctrl+T: choose reasoning effort", + "next": "/mentor — Toggle the mentor profile" + }, + { + "row": 14, + "legacy": " Shift+Tab: switch Standard/Plan · @: complete paths · !: shell", + "next": "/orchestrator — Toggle the orchestrator profile" + }, + { + "row": 15, + "legacy": "", + "next": "Keyboard shortcuts" + }, + { + "row": 16, + "legacy": "", + "next": "Enter send/steer · Alt+Enter follow-up · ↑/↓ history · PgUp/PgDn scroll · Ctrl+O tool output · " + }, + { + "row": 17, + "legacy": " ────────────────────────────────────────────────────────────────────────────────────────────────", + "next": "Ctrl+T reasoning effort" + }, + { + "row": 18, + "legacy": " ╭──────────────────────────────────────────────────────────────────────────────────────────────╮", + "next": "Ctrl+G approvals/tasks · Ctrl+B budget · Ctrl+C stop turn / clear input / exit" + }, + { + "row": 19, + "legacy": " │ Resume Conversation │", + "next": "Shift+Tab plan mode" + }, + { + "row": 20, + "legacy": " │ show markdown please · ▒▒▒▒▒▒▒▒▒▒▒▒▒▒ · 6… │ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ │", + "next": "╭──────────────────────────────────────────────────────────────────────────────────────────────────╮" + }, + { + "row": 21, + "legacy": " │ ❯ ping idle 0 · ▒▒▒▒▒▒▒▒▒▒▒▒▒▒ · 38 msgs │ Updated: 2026-11-04 06:50:41 │", + "next": "│ Resume Conversation │" + }, + { + "row": 22, + "legacy": " │ RT-PROMPT please read the small file · 5 … │ Local • 38 msgs • mock-alpha • mode: bare │", + "next": "│ Loading conversations… │" + }, + { + "row": 23, + "legacy": " │ RT-PROMPT please read the small file · 5 … │ │", + "next": "│ ↑/↓ select · Enter resume · Esc cancel │" + }, + { + "row": 24, + "legacy": " │ RT-PROMPT one more question · ▒▒▒▒▒▒▒▒▒▒▒… │ Initial Prompt: │", + "next": "╰──────────────────────────────────────────────────────────────────────────────────────────────────╯" + }, + { + "row": 25, + "legacy": " │ RT-PROMPT one more question · ▒▒▒▒▒▒▒▒▒▒▒… │ \"ping idle 0\" │", + "next": "────────────────────────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 26, + "legacy": " │ RT-PROMPT one more question · ▒▒▒▒▒▒▒▒▒▒▒… │ │", + "next": "❯ " + }, + { + "row": 27, + "legacy": " │ RT-PROMPT please read the large file · 5 … │ │", + "next": "" + }, + { + "row": 28, + "legacy": " │ RT-PROMPT please read the small file · 5 … │ │", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + }, + { + "row": 29, + "legacy": " │ RT-PROMPT please read the small file · 5 … │ │", + "next": "" + }, + { + "row": 30, + "legacy": " ╰──────────────────────────────────────────────────────────────────────────────────────────────╯", + "next": "" + }, + { + "row": 31, + "legacy": " ↑↓ navigate │ ⏎ resume │ Esc cancel", + "next": "" + }, + { + "row": 33, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": ["next: no matching screen within 5000 ms"], + "text": { + "legacy": " /settings — View or modify settings\n /sandbox — Toggle shell sandboxing; disabling it gives shell commands unrestricted access\n /mcp — Show configured MCP servers and their connection state\n /mcp-login — Authenticate with an OAuth-protected MCP server\n /bridge — Attach or detach this local session for Discord bridge input\n /providers — Manage API providers (list, add, edit, delete)\n /skills — Activate a skill for the next request\n /restart — Reload the built CLI in place; /restart stop consents to stopping background work\n /quit — Exit the application\n /help — Show commands and keyboard shortcuts\n\n Keyboard shortcuts\n Ctrl+C: clear draft or interrupt; press again to exit\n Ctrl+O: choose model · Ctrl+T: choose reasoning effort\n Shift+Tab: switch Standard/Plan · @: complete paths · !: shell\n\n\n ────────────────────────────────────────────────────────────────────────────────────────────────\n ╭──────────────────────────────────────────────────────────────────────────────────────────────╮\n │ Resume Conversation │\n │ show markdown please · 13 seconds ago · 6… │ 5f02e7e4-13be-4f36-a4da-975530aed0cf │\n │ ❯ ping idle 0 · 38 seconds ago · 38 msgs │ Updated: 2026-11-04 06:50:41 │\n │ RT-PROMPT please read the small file · 5 … │ Local • 38 msgs • mock-alpha • mode: bare │\n │ RT-PROMPT please read the small file · 5 … │ │\n │ RT-PROMPT one more question · 5 hours ago… │ Initial Prompt: │\n │ RT-PROMPT one more question · 5 hours ago… │ \"ping idle 0\" │\n │ RT-PROMPT one more question · 5 hours ago… │ │\n │ RT-PROMPT please read the large file · 5 … │ │\n │ RT-PROMPT please read the small file · 5 … │ │\n │ RT-PROMPT please read the small file · 5 … │ │\n ╰──────────────────────────────────────────────────────────────────────────────────────────────╯\n ↑↓ navigate │ ⏎ resume │ Esc cancel\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "/followup — Queue a message for after the running turn\n/cancel — Stop the running turn\n/answer — Answer a pending approval or question\n/bridge — Attach or detach this session's control socket\n/restart — Reload this executable (/restart stop also stops background work)\n/quit — Exit the application\n/exit — Exit the application\n/command-status — Show the outcome of a command by ID\n/command-apply — Apply a finished command result by ID\n/mcp — Show configured MCP servers and their state\n/mcp-login — Authenticate with an OAuth-protected MCP server\n/plan — Toggle the plan profile\n/bare — Switch to the bare profile\n/mentor — Toggle the mentor profile\n/orchestrator — Toggle the orchestrator profile\nKeyboard shortcuts\nEnter send/steer · Alt+Enter follow-up · ↑/↓ history · PgUp/PgDn scroll · Ctrl+O tool output · \nCtrl+T reasoning effort\nCtrl+G approvals/tasks · Ctrl+B budget · Ctrl+C stop turn / clear input / exit\nShift+Tab plan mode\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Resume Conversation │\n│ Loading conversations… │\n│ ↑/↓ select · Enter resume · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n\n\n\n\n" + } + }, + { + "step": "25-resume-closed", + "legacy": "report/shots/100x34/legacy-25-resume-closed.png", + "next": "report/shots/100x34/next-25-resume-closed.png", + "diffFile": "report/shots/100x34/diff-25-resume-closed.png", + "diff": { + "count": 83413, + "total": 458592, + "sizeA": [843, 544], + "sizeB": [843, 544] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " /retry — Resend the last user turn, or choose a turn to resend", + "next": "/followup — Queue a message for after the running turn" + }, + { + "row": 1, + "legacy": " /retry-tool — Retry the last tool call", + "next": "/cancel — Stop the running turn" + }, + { + "row": 2, + "legacy": " /retry-turn — Regenerate the latest user turn from its original prompt", + "next": "/answer — Answer a pending approval or question" + }, + { + "row": 3, + "legacy": " /compact — Compact older conversation turns into a local summary", + "next": "/bridge — Attach or detach this session's control socket" + }, + { + "row": 4, + "legacy": " /bare — Toggle the Bare profile (minimal prompt)", + "next": "/restart — Reload this executable (/restart stop also stops background work)" + }, + { + "row": 5, + "legacy": " /lite — Toggle the Bare profile (Lite was merged into Bare)", + "next": "/quit — Exit the application" + }, + { + "row": 6, + "legacy": " /mentor — Toggle mentor mode (collaborative mode with mentor model)", + "next": "/exit — Exit the application" + }, + { + "row": 7, + "legacy": " /orchestrator — Toggle orchestrator mode (delegate all tool-backed work)", + "next": "/command-status — Show the outcome of a command by ID" + }, + { + "row": 8, + "legacy": " /auto-approve — Set tool auto-approval mode (off, advisory, auto, always)", + "next": "/command-apply — Apply a finished command result by ID" + }, + { + "row": 9, + "legacy": " /plan — Toggle plan mode (read-only research/planning mode)", + "next": "/mcp — Show configured MCP servers and their state" + }, + { + "row": 10, + "legacy": " /profile — Switch the active profile", + "next": "/mcp-login — Authenticate with an OAuth-protected MCP server" + }, + { + "row": 11, + "legacy": " /handoff — Send the last assistant response to another model for review", + "next": "/plan — Toggle the plan profile" + }, + { + "row": 12, + "legacy": " /settings — View or modify settings", + "next": "/bare — Switch to the bare profile" + }, + { + "row": 13, + "legacy": " /sandbox — Toggle shell sandboxing; disabling it gives shell commands unrestricted access", + "next": "/mentor — Toggle the mentor profile" + }, + { + "row": 14, + "legacy": " /mcp — Show configured MCP servers and their connection state", + "next": "/orchestrator — Toggle the orchestrator profile" + }, + { + "row": 15, + "legacy": " /mcp-login — Authenticate with an OAuth-protected MCP server", + "next": "Keyboard shortcuts" + }, + { + "row": 16, + "legacy": " /bridge — Attach or detach this local session for Discord bridge input", + "next": "Enter send/steer · Alt+Enter follow-up · ↑/↓ history · PgUp/PgDn scroll · Ctrl+O tool output · " + }, + { + "row": 17, + "legacy": " /providers — Manage API providers (list, add, edit, delete)", + "next": "Ctrl+T reasoning effort" + }, + { + "row": 18, + "legacy": " /skills — Activate a skill for the next request", + "next": "Ctrl+G approvals/tasks · Ctrl+B budget · Ctrl+C stop turn / clear input / exit" + }, + { + "row": 19, + "legacy": " /restart — Reload the built CLI in place; /restart stop consents to stopping background work", + "next": "Shift+Tab plan mode" + }, + { + "row": 20, + "legacy": " /quit — Exit the application", + "next": "╭──────────────────────────────────────────────────────────────────────────────────────────────────╮" + }, + { + "row": 21, + "legacy": " /help — Show commands and keyboard shortcuts", + "next": "│ Resume Conversation │" + }, + { + "row": 22, + "legacy": "", + "next": "│ Loading conversations… │" + }, + { + "row": 23, + "legacy": " Keyboard shortcuts", + "next": "│ ↑/↓ select · Enter resume · Esc cancel │" + }, + { + "row": 24, + "legacy": " Ctrl+C: clear draft or interrupt; press again to exit", + "next": "╰──────────────────────────────────────────────────────────────────────────────────────────────────╯" + }, + { + "row": 25, + "legacy": " Ctrl+O: choose model · Ctrl+T: choose reasoning effort", + "next": "────────────────────────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 26, + "legacy": " Shift+Tab: switch Standard/Plan · @: complete paths · !: shell", + "next": "❯ " + }, + { + "row": 28, + "legacy": "", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + }, + { + "row": 29, + "legacy": " ────────────────────────────────────────────────────────────────────────────────────────────────", + "next": "" + }, + { + "row": 30, + "legacy": " ❯ ", + "next": "" + }, + { + "row": 31, + "legacy": " / commands │ @ paths │ ! shell │ Shift+Tab plan", + "next": "" + }, + { + "row": 33, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": ["next: CLI restarted after this step"], + "text": { + "legacy": " /retry — Resend the last user turn, or choose a turn to resend\n /retry-tool — Retry the last tool call\n /retry-turn — Regenerate the latest user turn from its original prompt\n /compact — Compact older conversation turns into a local summary\n /bare — Toggle the Bare profile (minimal prompt)\n /lite — Toggle the Bare profile (Lite was merged into Bare)\n /mentor — Toggle mentor mode (collaborative mode with mentor model)\n /orchestrator — Toggle orchestrator mode (delegate all tool-backed work)\n /auto-approve — Set tool auto-approval mode (off, advisory, auto, always)\n /plan — Toggle plan mode (read-only research/planning mode)\n /profile — Switch the active profile\n /handoff — Send the last assistant response to another model for review\n /settings — View or modify settings\n /sandbox — Toggle shell sandboxing; disabling it gives shell commands unrestricted access\n /mcp — Show configured MCP servers and their connection state\n /mcp-login — Authenticate with an OAuth-protected MCP server\n /bridge — Attach or detach this local session for Discord bridge input\n /providers — Manage API providers (list, add, edit, delete)\n /skills — Activate a skill for the next request\n /restart — Reload the built CLI in place; /restart stop consents to stopping background work\n /quit — Exit the application\n /help — Show commands and keyboard shortcuts\n\n Keyboard shortcuts\n Ctrl+C: clear draft or interrupt; press again to exit\n Ctrl+O: choose model · Ctrl+T: choose reasoning effort\n Shift+Tab: switch Standard/Plan · @: complete paths · !: shell\n\n\n ────────────────────────────────────────────────────────────────────────────────────────────────\n ❯ \n / commands │ @ paths │ ! shell │ Shift+Tab plan\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "/followup — Queue a message for after the running turn\n/cancel — Stop the running turn\n/answer — Answer a pending approval or question\n/bridge — Attach or detach this session's control socket\n/restart — Reload this executable (/restart stop also stops background work)\n/quit — Exit the application\n/exit — Exit the application\n/command-status — Show the outcome of a command by ID\n/command-apply — Apply a finished command result by ID\n/mcp — Show configured MCP servers and their state\n/mcp-login — Authenticate with an OAuth-protected MCP server\n/plan — Toggle the plan profile\n/bare — Switch to the bare profile\n/mentor — Toggle the mentor profile\n/orchestrator — Toggle the orchestrator profile\nKeyboard shortcuts\nEnter send/steer · Alt+Enter follow-up · ↑/↓ history · PgUp/PgDn scroll · Ctrl+O tool output · \nCtrl+T reasoning effort\nCtrl+G approvals/tasks · Ctrl+B budget · Ctrl+C stop turn / clear input / exit\nShift+Tab plan mode\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ Resume Conversation │\n│ Loading conversations… │\n│ ↑/↓ select · Enter resume · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n\n\n\n\n" + } + }, + { + "step": "26-resize", + "legacy": "report/shots/100x34/legacy-26-resize.png", + "next": "report/shots/100x34/next-26-resize.png", + "diffFile": "report/shots/100x34/diff-26-resize.png", + "diff": { + "count": 39194, + "total": 258816, + "sizeA": [674, 384], + "sizeB": [674, 384] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " /settings — View or modify settings", + "next": "" + }, + { + "row": 1, + "legacy": " /sandbox — Toggle shell sandboxing; disabling it gives shell commands ", + "next": "▌ term² BARE ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒" + }, + { + "row": 2, + "legacy": " unrestricted access", + "next": " mockprov/mock-alpha (default)" + }, + { + "row": 3, + "legacy": " /mcp — Show configured MCP servers and their connection state", + "next": "" + }, + { + "row": 4, + "legacy": " /mcp-login — Authenticate with an OAuth-protected MCP server", + "next": "────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 5, + "legacy": " /bridge — Attach or detach this local session for Discord bridge input", + "next": "❯ " + }, + { + "row": 6, + "legacy": " /providers — Manage API providers (list, add, edit, delete)", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history" + }, + { + "row": 7, + "legacy": " /skills — Activate a skill for the next request", + "next": "" + }, + { + "row": 8, + "legacy": " /restart — Reload the built CLI in place; /restart stop consents to stopping", + "next": " Bare │ mockprov/mock-alpha" + }, + { + "row": 9, + "legacy": " background work", + "next": "" + }, + { + "row": 10, + "legacy": " /quit — Exit the application", + "next": "" + }, + { + "row": 11, + "legacy": " /help — Show commands and keyboard shortcuts", + "next": "" + }, + { + "row": 13, + "legacy": " Keyboard shortcuts", + "next": "" + }, + { + "row": 14, + "legacy": " Ctrl+C: clear draft or interrupt; press again to exit", + "next": "" + }, + { + "row": 15, + "legacy": " Ctrl+O: choose model · Ctrl+T: choose reasoning effort", + "next": "" + }, + { + "row": 16, + "legacy": " Shift+Tab: switch Standard/Plan · @: complete paths · !: shell", + "next": "" + }, + { + "row": 19, + "legacy": " ────────────────────────────────────────────────────────────────────────────", + "next": "" + }, + { + "row": 20, + "legacy": " ❯ ", + "next": "" + }, + { + "row": 21, + "legacy": " / commands │ @ paths │ ! shell │ Shift+Tab plan", + "next": "" + }, + { + "row": 23, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": " /settings — View or modify settings\n /sandbox — Toggle shell sandboxing; disabling it gives shell commands \n unrestricted access\n /mcp — Show configured MCP servers and their connection state\n /mcp-login — Authenticate with an OAuth-protected MCP server\n /bridge — Attach or detach this local session for Discord bridge input\n /providers — Manage API providers (list, add, edit, delete)\n /skills — Activate a skill for the next request\n /restart — Reload the built CLI in place; /restart stop consents to stopping\n background work\n /quit — Exit the application\n /help — Show commands and keyboard shortcuts\n\n Keyboard shortcuts\n Ctrl+C: clear draft or interrupt; press again to exit\n Ctrl+O: choose model · Ctrl+T: choose reasoning effort\n Shift+Tab: switch Standard/Plan · @: complete paths · !: shell\n\n\n ────────────────────────────────────────────────────────────────────────────\n ❯ \n / commands │ @ paths │ ! shell │ Shift+Tab plan\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + } + }, + { + "step": "27-resize-typed", + "legacy": "report/shots/100x34/legacy-27-resize-typed.png", + "next": "report/shots/100x34/next-27-resize-typed.png", + "diffFile": "report/shots/100x34/diff-27-resize-typed.png", + "diff": { + "count": 41021, + "total": 258816, + "sizeA": [674, 384], + "sizeB": [674, 384] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " /handoff — Send the last assistant response to another model for review", + "next": "" + }, + { + "row": 1, + "legacy": " /settings — View or modify settings", + "next": "▌ term² BARE ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒" + }, + { + "row": 2, + "legacy": " /sandbox — Toggle shell sandboxing; disabling it gives shell commands ", + "next": " mockprov/mock-alpha (default)" + }, + { + "row": 3, + "legacy": " unrestricted access", + "next": "" + }, + { + "row": 4, + "legacy": " /mcp — Show configured MCP servers and their connection state", + "next": "────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 5, + "legacy": " /mcp-login — Authenticate with an OAuth-protected MCP server", + "next": "❯ typed after resize " + }, + { + "row": 6, + "legacy": " /bridge — Attach or detach this local session for Discord bridge input", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history" + }, + { + "row": 7, + "legacy": " /providers — Manage API providers (list, add, edit, delete)", + "next": "" + }, + { + "row": 8, + "legacy": " /skills — Activate a skill for the next request", + "next": " Bare │ mockprov/mock-alpha" + }, + { + "row": 9, + "legacy": " /restart — Reload the built CLI in place; /restart stop consents to stopping", + "next": "" + }, + { + "row": 10, + "legacy": " background work", + "next": "" + }, + { + "row": 11, + "legacy": " /quit — Exit the application", + "next": "" + }, + { + "row": 12, + "legacy": " /help — Show commands and keyboard shortcuts", + "next": "" + }, + { + "row": 14, + "legacy": " Keyboard shortcuts", + "next": "" + }, + { + "row": 15, + "legacy": " Ctrl+C: clear draft or interrupt; press again to exit", + "next": "" + }, + { + "row": 16, + "legacy": " Ctrl+O: choose model · Ctrl+T: choose reasoning effort", + "next": "" + }, + { + "row": 17, + "legacy": " Shift+Tab: switch Standard/Plan · @: complete paths · !: shell", + "next": "" + }, + { + "row": 20, + "legacy": " ────────────────────────────────────────────────────────────────────────────", + "next": "" + }, + { + "row": 21, + "legacy": " ❯ typed after resize ", + "next": "" + }, + { + "row": 23, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": " /handoff — Send the last assistant response to another model for review\n /settings — View or modify settings\n /sandbox — Toggle shell sandboxing; disabling it gives shell commands \n unrestricted access\n /mcp — Show configured MCP servers and their connection state\n /mcp-login — Authenticate with an OAuth-protected MCP server\n /bridge — Attach or detach this local session for Discord bridge input\n /providers — Manage API providers (list, add, edit, delete)\n /skills — Activate a skill for the next request\n /restart — Reload the built CLI in place; /restart stop consents to stopping\n background work\n /quit — Exit the application\n /help — Show commands and keyboard shortcuts\n\n Keyboard shortcuts\n Ctrl+C: clear draft or interrupt; press again to exit\n Ctrl+O: choose model · Ctrl+T: choose reasoning effort\n Shift+Tab: switch Standard/Plan · @: complete paths · !: shell\n\n\n ────────────────────────────────────────────────────────────────────────────\n ❯ typed after resize \n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n────────────────────────────────────────────────────────────────────────────────\n❯ typed after resize \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + } + }, + { + "step": "28-resize-back", + "legacy": "report/shots/100x34/legacy-28-resize-back.png", + "next": "report/shots/100x34/next-28-resize-back.png", + "diffFile": "report/shots/100x34/diff-28-resize-back.png", + "diff": { + "count": 69165, + "total": 458592, + "sizeA": [843, 544], + "sizeB": [843, 544] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " /rewind — Rewind to a user turn and put it back in the input box", + "next": "" + }, + { + "row": 1, + "legacy": " /retry — Resend the last user turn, or choose a turn to resend", + "next": "▌ term² BARE ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒" + }, + { + "row": 2, + "legacy": " /retry-tool — Retry the last tool call", + "next": " mockprov/mock-alpha (default)" + }, + { + "row": 3, + "legacy": " /retry-turn — Regenerate the latest user turn from its original prompt", + "next": "" + }, + { + "row": 4, + "legacy": " /compact — Compact older conversation turns into a local summary", + "next": "────────────────────────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 5, + "legacy": " /bare — Toggle the Bare profile (minimal prompt)", + "next": "❯ typed after resize " + }, + { + "row": 6, + "legacy": " /lite — Toggle the Bare profile (Lite was merged into Bare)", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output" + }, + { + "row": 7, + "legacy": " /mentor — Toggle mentor mode (collaborative mode with mentor model)", + "next": "" + }, + { + "row": 8, + "legacy": " /orchestrator — Toggle orchestrator mode (delegate all tool-backed work)", + "next": " Bare │ mockprov/mock-alpha" + }, + { + "row": 9, + "legacy": " /auto-approve — Set tool auto-approval mode (off, advisory, auto, always)", + "next": "" + }, + { + "row": 10, + "legacy": " /plan — Toggle plan mode (read-only research/planning mode)", + "next": "" + }, + { + "row": 11, + "legacy": " /profile — Switch the active profile", + "next": "" + }, + { + "row": 12, + "legacy": " /handoff — Send the last assistant response to another model for review", + "next": "" + }, + { + "row": 13, + "legacy": " /settings — View or modify settings", + "next": "" + }, + { + "row": 14, + "legacy": " /sandbox — Toggle shell sandboxing; disabling it gives shell commands unrestricted access", + "next": "" + }, + { + "row": 15, + "legacy": " /mcp — Show configured MCP servers and their connection state", + "next": "" + }, + { + "row": 16, + "legacy": " /mcp-login — Authenticate with an OAuth-protected MCP server", + "next": "" + }, + { + "row": 17, + "legacy": " /bridge — Attach or detach this local session for Discord bridge input", + "next": "" + }, + { + "row": 18, + "legacy": " /providers — Manage API providers (list, add, edit, delete)", + "next": "" + }, + { + "row": 19, + "legacy": " /skills — Activate a skill for the next request", + "next": "" + }, + { + "row": 20, + "legacy": " /restart — Reload the built CLI in place; /restart stop consents to stopping background work", + "next": "" + }, + { + "row": 21, + "legacy": " /quit — Exit the application", + "next": "" + }, + { + "row": 22, + "legacy": " /help — Show commands and keyboard shortcuts", + "next": "" + }, + { + "row": 24, + "legacy": " Keyboard shortcuts", + "next": "" + }, + { + "row": 25, + "legacy": " Ctrl+C: clear draft or interrupt; press again to exit", + "next": "" + }, + { + "row": 26, + "legacy": " Ctrl+O: choose model · Ctrl+T: choose reasoning effort", + "next": "" + }, + { + "row": 27, + "legacy": " Shift+Tab: switch Standard/Plan · @: complete paths · !: shell", + "next": "" + }, + { + "row": 30, + "legacy": " ────────────────────────────────────────────────────────────────────────────────────────────────", + "next": "" + }, + { + "row": 31, + "legacy": " ❯ typed after resize ", + "next": "" + }, + { + "row": 33, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": " /rewind — Rewind to a user turn and put it back in the input box\n /retry — Resend the last user turn, or choose a turn to resend\n /retry-tool — Retry the last tool call\n /retry-turn — Regenerate the latest user turn from its original prompt\n /compact — Compact older conversation turns into a local summary\n /bare — Toggle the Bare profile (minimal prompt)\n /lite — Toggle the Bare profile (Lite was merged into Bare)\n /mentor — Toggle mentor mode (collaborative mode with mentor model)\n /orchestrator — Toggle orchestrator mode (delegate all tool-backed work)\n /auto-approve — Set tool auto-approval mode (off, advisory, auto, always)\n /plan — Toggle plan mode (read-only research/planning mode)\n /profile — Switch the active profile\n /handoff — Send the last assistant response to another model for review\n /settings — View or modify settings\n /sandbox — Toggle shell sandboxing; disabling it gives shell commands unrestricted access\n /mcp — Show configured MCP servers and their connection state\n /mcp-login — Authenticate with an OAuth-protected MCP server\n /bridge — Attach or detach this local session for Discord bridge input\n /providers — Manage API providers (list, add, edit, delete)\n /skills — Activate a skill for the next request\n /restart — Reload the built CLI in place; /restart stop consents to stopping background work\n /quit — Exit the application\n /help — Show commands and keyboard shortcuts\n\n Keyboard shortcuts\n Ctrl+C: clear draft or interrupt; press again to exit\n Ctrl+O: choose model · Ctrl+T: choose reasoning effort\n Shift+Tab: switch Standard/Plan · @: complete paths · !: shell\n\n\n ────────────────────────────────────────────────────────────────────────────────────────────────\n ❯ typed after resize \n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ typed after resize \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + } + }, + { + "step": "29-exit-confirm", + "legacy": "report/shots/100x34/legacy-29-exit-confirm.png", + "next": "report/shots/100x34/next-29-exit-confirm.png", + "diffFile": "report/shots/100x34/diff-29-exit-confirm.png", + "diff": { + "count": 65449, + "total": 458592, + "sizeA": [843, 544], + "sizeB": [843, 544] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " /retry-turn — Regenerate the latest user turn from its original prompt", + "next": "" + }, + { + "row": 1, + "legacy": " /compact — Compact older conversation turns into a local summary", + "next": "▌ term² BARE ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒" + }, + { + "row": 2, + "legacy": " /bare — Toggle the Bare profile (minimal prompt)", + "next": " mockprov/mock-alpha (default)" + }, + { + "row": 3, + "legacy": " /lite — Toggle the Bare profile (Lite was merged into Bare)", + "next": "" + }, + { + "row": 4, + "legacy": " /mentor — Toggle mentor mode (collaborative mode with mentor model)", + "next": "Press Ctrl+C again to exit" + }, + { + "row": 5, + "legacy": " /orchestrator — Toggle orchestrator mode (delegate all tool-backed work)", + "next": "────────────────────────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 6, + "legacy": " /auto-approve — Set tool auto-approval mode (off, advisory, auto, always)", + "next": "❯ " + }, + { + "row": 7, + "legacy": " /plan — Toggle plan mode (read-only research/planning mode)", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output" + }, + { + "row": 8, + "legacy": " /profile — Switch the active profile", + "next": "" + }, + { + "row": 9, + "legacy": " /handoff — Send the last assistant response to another model for review", + "next": " Bare │ mockprov/mock-alpha" + }, + { + "row": 10, + "legacy": " /settings — View or modify settings", + "next": "" + }, + { + "row": 11, + "legacy": " /sandbox — Toggle shell sandboxing; disabling it gives shell commands unrestricted access", + "next": "" + }, + { + "row": 12, + "legacy": " /mcp — Show configured MCP servers and their connection state", + "next": "" + }, + { + "row": 13, + "legacy": " /mcp-login — Authenticate with an OAuth-protected MCP server", + "next": "" + }, + { + "row": 14, + "legacy": " /bridge — Attach or detach this local session for Discord bridge input", + "next": "" + }, + { + "row": 15, + "legacy": " /providers — Manage API providers (list, add, edit, delete)", + "next": "" + }, + { + "row": 16, + "legacy": " /skills — Activate a skill for the next request", + "next": "" + }, + { + "row": 17, + "legacy": " /restart — Reload the built CLI in place; /restart stop consents to stopping background work", + "next": "" + }, + { + "row": 18, + "legacy": " /quit — Exit the application", + "next": "" + }, + { + "row": 19, + "legacy": " /help — Show commands and keyboard shortcuts", + "next": "" + }, + { + "row": 21, + "legacy": " Keyboard shortcuts", + "next": "" + }, + { + "row": 22, + "legacy": " Ctrl+C: clear draft or interrupt; press again to exit", + "next": "" + }, + { + "row": 23, + "legacy": " Ctrl+O: choose model · Ctrl+T: choose reasoning effort", + "next": "" + }, + { + "row": 24, + "legacy": " Shift+Tab: switch Standard/Plan · @: complete paths · !: shell", + "next": "" + }, + { + "row": 26, + "legacy": " Press Ctrl+C again to exit", + "next": "" + }, + { + "row": 29, + "legacy": " ────────────────────────────────────────────────────────────────────────────────────────────────", + "next": "" + }, + { + "row": 30, + "legacy": " ❯ ", + "next": "" + }, + { + "row": 31, + "legacy": " / commands │ @ paths │ ! shell │ Shift+Tab plan", + "next": "" + }, + { + "row": 33, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": " /retry-turn — Regenerate the latest user turn from its original prompt\n /compact — Compact older conversation turns into a local summary\n /bare — Toggle the Bare profile (minimal prompt)\n /lite — Toggle the Bare profile (Lite was merged into Bare)\n /mentor — Toggle mentor mode (collaborative mode with mentor model)\n /orchestrator — Toggle orchestrator mode (delegate all tool-backed work)\n /auto-approve — Set tool auto-approval mode (off, advisory, auto, always)\n /plan — Toggle plan mode (read-only research/planning mode)\n /profile — Switch the active profile\n /handoff — Send the last assistant response to another model for review\n /settings — View or modify settings\n /sandbox — Toggle shell sandboxing; disabling it gives shell commands unrestricted access\n /mcp — Show configured MCP servers and their connection state\n /mcp-login — Authenticate with an OAuth-protected MCP server\n /bridge — Attach or detach this local session for Discord bridge input\n /providers — Manage API providers (list, add, edit, delete)\n /skills — Activate a skill for the next request\n /restart — Reload the built CLI in place; /restart stop consents to stopping background work\n /quit — Exit the application\n /help — Show commands and keyboard shortcuts\n\n Keyboard shortcuts\n Ctrl+C: clear draft or interrupt; press again to exit\n Ctrl+O: choose model · Ctrl+T: choose reasoning effort\n Shift+Tab: switch Standard/Plan · @: complete paths · !: shell\n\n Press Ctrl+C again to exit\n\n\n ────────────────────────────────────────────────────────────────────────────────────────────────\n ❯ \n / commands │ @ paths │ ! shell │ Shift+Tab plan\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\nPress Ctrl+C again to exit\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + } + }, + { + "step": "30-exited", + "legacy": "report/shots/100x34/legacy-30-exited.png", + "next": "report/shots/100x34/next-30-exited.png", + "diffFile": "report/shots/100x34/diff-30-exited.png", + "diff": { + "count": 64438, + "total": 458592, + "sizeA": [843, 544], + "sizeB": [843, 544] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " /plan — Toggle plan mode (read-only research/planning mode)", + "next": "" + }, + { + "row": 1, + "legacy": " /profile — Switch the active profile", + "next": "▌ term² BARE ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒" + }, + { + "row": 2, + "legacy": " /handoff — Send the last assistant response to another model for review", + "next": " mockprov/mock-alpha (default)" + }, + { + "row": 3, + "legacy": " /settings — View or modify settings", + "next": "" + }, + { + "row": 4, + "legacy": " /sandbox — Toggle shell sandboxing; disabling it gives shell commands unrestricted access", + "next": "Press Ctrl+C again to exit" + }, + { + "row": 5, + "legacy": " /mcp — Show configured MCP servers and their connection state", + "next": "────────────────────────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 6, + "legacy": " /mcp-login — Authenticate with an OAuth-protected MCP server", + "next": "❯ " + }, + { + "row": 7, + "legacy": " /bridge — Attach or detach this local session for Discord bridge input", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output" + }, + { + "row": 8, + "legacy": " /providers — Manage API providers (list, add, edit, delete)", + "next": "" + }, + { + "row": 9, + "legacy": " /skills — Activate a skill for the next request", + "next": " Bare │ mockprov/mock-alpha" + }, + { + "row": 10, + "legacy": " /restart — Reload the built CLI in place; /restart stop consents to stopping background work", + "next": "" + }, + { + "row": 11, + "legacy": " /quit — Exit the application", + "next": "" + }, + { + "row": 12, + "legacy": " /help — Show commands and keyboard shortcuts", + "next": "" + }, + { + "row": 14, + "legacy": " Keyboard shortcuts", + "next": "" + }, + { + "row": 15, + "legacy": " Ctrl+C: clear draft or interrupt; press again to exit", + "next": "" + }, + { + "row": 16, + "legacy": " Ctrl+O: choose model · Ctrl+T: choose reasoning effort", + "next": "" + }, + { + "row": 17, + "legacy": " Shift+Tab: switch Standard/Plan · @: complete paths · !: shell", + "next": "" + }, + { + "row": 19, + "legacy": " Press Ctrl+C again to exit", + "next": "" + }, + { + "row": 22, + "legacy": " ────────────────────────────────────────────────────────────────────────────────────────────────", + "next": "" + }, + { + "row": 23, + "legacy": " ❯ ", + "next": "" + }, + { + "row": 24, + "legacy": " / commands │ @ paths │ ! shell │ Shift+Tab plan", + "next": "" + }, + { + "row": 26, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + }, + { + "row": 27, + "legacy": "Token usage: 6,000 input, 400 output", + "next": "" + }, + { + "row": 28, + "legacy": "By model:", + "next": "" + }, + { + "row": 29, + "legacy": " mockprov/mock-alpha: 6,000 input, 400 output; Cost unavailable", + "next": "" + }, + { + "row": 31, + "legacy": "Session: ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒", + "next": "" + }, + { + "row": 32, + "legacy": "To resume this conversation: term2 --resume ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": " /plan — Toggle plan mode (read-only research/planning mode)\n /profile — Switch the active profile\n /handoff — Send the last assistant response to another model for review\n /settings — View or modify settings\n /sandbox — Toggle shell sandboxing; disabling it gives shell commands unrestricted access\n /mcp — Show configured MCP servers and their connection state\n /mcp-login — Authenticate with an OAuth-protected MCP server\n /bridge — Attach or detach this local session for Discord bridge input\n /providers — Manage API providers (list, add, edit, delete)\n /skills — Activate a skill for the next request\n /restart — Reload the built CLI in place; /restart stop consents to stopping background work\n /quit — Exit the application\n /help — Show commands and keyboard shortcuts\n\n Keyboard shortcuts\n Ctrl+C: clear draft or interrupt; press again to exit\n Ctrl+O: choose model · Ctrl+T: choose reasoning effort\n Shift+Tab: switch Standard/Plan · @: complete paths · !: shell\n\n Press Ctrl+C again to exit\n\n\n ────────────────────────────────────────────────────────────────────────────────────────────────\n ❯ \n / commands │ @ paths │ ! shell │ Shift+Tab plan\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k\nToken usage: 6,000 input, 400 output\nBy model:\n mockprov/mock-alpha: 6,000 input, 400 output; Cost unavailable\n\nSession: 2ec7486d-b9d7-42c0-b96a-36d30d9631a3\nTo resume this conversation: term2 --resume 2ec7486d-b9d7-42c0-b96a-36d30d9631a3\n", + "next": "\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\nPress Ctrl+C again to exit\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + } + } + ] + }, + { + "cols": 80, + "rows": 24, + "store": { + "legacy": { + "startupMs": 2175, + "firstResumeMs": 800.1999999992549, + "secondResumeMs": 171.39999999850988 + }, + "next": { + "startupMs": 1893, + "firstResumeMs": null, + "failed": "first /resume: no list within 5000 ms", + "secondResumeMs": null + } + }, + "latency": { + "idle": { + "legacy": { + "type char": { + "n": 48, + "ok": 48, + "missed": 0, + "pre": 0, + "p50": 14.900000002235174, + "p95": 15.700000002980232, + "max": 23.5, + "parseP50": 3.600000001490116, + "cpuMsPerKey": 7.291666666666667, + "bytesPerKey": 428.5 + }, + "backspace": { + "n": 48, + "ok": 48, + "missed": 0, + "pre": 0, + "p50": 15.100000001490116, + "p95": 15.699999999254942, + "max": 51.600000001490116, + "parseP50": 3.699999999254942, + "cpuMsPerKey": 7.5, + "bytesPerKey": 427.5 + }, + "enter (composer)": { + "n": 10, + "ok": 10, + "missed": 0, + "pre": 0, + "p50": 14.700000002980232, + "p95": 15.5, + "max": 15.5, + "parseP50": 4.900000002235174, + "cpuMsPerKey": 59, + "bytesPerKey": 1747.4 + }, + "arrow (model menu)": { + "n": 20, + "ok": 20, + "missed": 0, + "pre": 0, + "p50": 15.299999997019768, + "p95": 15.899999998509884, + "max": 15.899999998509884, + "parseP50": 6.199999999254942, + "cpuMsPerKey": 8.5, + "bytesPerKey": 1726.5 + }, + "arrow (resume menu)": { + "n": 20, + "ok": 20, + "missed": 0, + "pre": 0, + "p50": 15.300000000745058, + "p95": 15.800000000745058, + "max": 15.899999998509884, + "parseP50": 6.899999998509884, + "cpuMsPerKey": 6.5, + "bytesPerKey": 2727.5 + }, + "ctrl+o": { + "n": 10, + "ok": 10, + "missed": 0, + "pre": 0, + "p50": 11.100000001490116, + "p95": 11.900000002235174, + "max": 11.900000002235174, + "parseP50": 7.200000002980232, + "cpuMsPerKey": 14, + "bytesPerKey": 1676 + }, + "shift+tab": { + "n": 10, + "ok": 10, + "missed": 0, + "pre": 0, + "p50": 11.5, + "p95": 12.300000000745058, + "max": 12.300000000745058, + "parseP50": 6.100000001490116, + "cpuMsPerKey": 5, + "bytesPerKey": 1692 + }, + "open /model": { + "n": 8, + "ok": 8, + "missed": 0, + "pre": 0, + "p50": 14.900000002235174, + "p95": 15.200000002980232, + "max": 15.200000002980232, + "parseP50": 6.5, + "cpuMsPerKey": 11.25, + "bytesPerKey": 2316 + }, + "open /settings": { + "n": 8, + "ok": 8, + "missed": 0, + "pre": 0, + "p50": 14.899999998509884, + "p95": 15.199999999254942, + "max": 15.199999999254942, + "parseP50": 6.5, + "cpuMsPerKey": 43.75, + "bytesPerKey": 5471 + }, + "scroll (resume page down/up)": { + "n": 10, + "ok": 10, + "missed": 0, + "pre": 0, + "p50": 15.099999997764826, + "p95": 15.699999999254942, + "max": 15.699999999254942, + "parseP50": 7.199999999254942, + "cpuMsPerKey": 10, + "bytesPerKey": 2727 + } + }, + "next": { + "type char": { + "n": 48, + "ok": 48, + "missed": 0, + "pre": 0, + "p50": 15.099999997764826, + "p95": 15.800000000745058, + "max": 15.900000002235174, + "parseP50": 3.699999999254942, + "cpuMsPerKey": 7.708333333333333, + "bytesPerKey": 502.5 + }, + "backspace": { + "n": 48, + "ok": 48, + "missed": 0, + "pre": 0, + "p50": 15.199999999254942, + "p95": 15.699999999254942, + "max": 15.800000000745058, + "parseP50": 3.699999999254942, + "cpuMsPerKey": 6.458333333333333, + "bytesPerKey": 501.5 + }, + "enter (composer)": { + "n": 10, + "ok": 10, + "missed": 0, + "pre": 0, + "p50": 14.600000001490116, + "p95": 15.100000001490116, + "max": 15.100000001490116, + "parseP50": 5.400000002235174, + "cpuMsPerKey": 55, + "bytesPerKey": 1622.1 + }, + "arrow (model menu)": { + "n": 20, + "ok": 0, + "missed": 20, + "pre": 0, + "p50": null, + "p95": null, + "max": null, + "parseP50": null, + "cpuMsPerKey": 25, + "bytesPerKey": 0 + }, + "arrow (resume menu)": { + "n": 20, + "ok": 0, + "missed": 20, + "pre": 0, + "p50": null, + "p95": null, + "max": null, + "parseP50": null, + "cpuMsPerKey": null, + "bytesPerKey": null + }, + "ctrl+o": { + "n": 10, + "ok": 0, + "missed": 10, + "pre": 0, + "p50": null, + "p95": null, + "max": null, + "parseP50": null, + "cpuMsPerKey": 45, + "bytesPerKey": 0 + }, + "shift+tab": { + "n": 10, + "ok": 10, + "missed": 0, + "pre": 0, + "p50": 25.099999997764826, + "p95": 43.69999999925494, + "max": 43.69999999925494, + "parseP50": 24.800000000745058, + "cpuMsPerKey": 56, + "bytesPerKey": 544.2 + }, + "open /model": { + "n": 8, + "ok": 8, + "missed": 0, + "pre": 0, + "p50": 14.600000001490116, + "p95": 16.099999997764826, + "max": 16.099999997764826, + "parseP50": 6.400000002235174, + "cpuMsPerKey": 13.75, + "bytesPerKey": 1590 + }, + "open /settings": { + "n": 8, + "ok": 8, + "missed": 0, + "pre": 0, + "p50": 14.699999999254942, + "p95": 18.300000000745058, + "max": 18.300000000745058, + "parseP50": 8.599999997764826, + "cpuMsPerKey": 7.5, + "bytesPerKey": 2387 + }, + "scroll (resume page down/up)": { + "n": 10, + "ok": 0, + "missed": 10, + "pre": 0, + "p50": null, + "p95": null, + "max": null, + "parseP50": null, + "cpuMsPerKey": null, + "bytesPerKey": null + } + }, + "gate": { + "type char": { + "pass": true, + "reasons": [] + }, + "backspace": { + "pass": true, + "reasons": [] + }, + "enter (composer)": { + "pass": true, + "reasons": [] + }, + "arrow (model menu)": { + "pass": false, + "reasons": ["no matching paint (legacy painted)", "20 key(s) never painted the change (legacy 0)"] + }, + "arrow (resume menu)": { + "pass": false, + "reasons": ["no matching paint (legacy painted)", "20 key(s) never painted the change (legacy 0)"] + }, + "ctrl+o": { + "pass": false, + "reasons": ["no matching paint (legacy painted)", "10 key(s) never painted the change (legacy 0)"] + }, + "shift+tab": { + "pass": false, + "reasons": ["p50 over 1.2x / +5 ms", "p95 over 1.2x / +5 ms"] + }, + "open /model": { + "pass": true, + "reasons": [] + }, + "open /settings": { + "pass": true, + "reasons": [] + }, + "scroll (resume page down/up)": { + "pass": false, + "reasons": ["no matching paint (legacy painted)", "10 key(s) never painted the change (legacy 0)"] + } + }, + "raw": { + "legacy": { + "type char": [ + { + "ok": true, + "pre": false, + "ms": 14.199999999254942, + "parseMs": 4.899999998509884, + "cpuMs": 30, + "bytes": 423, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.599999997764826, + "parseMs": 4.300000000745058, + "cpuMs": 0, + "bytes": 424, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 3.599999997764826, + "cpuMs": 10, + "bytes": 425, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 4.399999998509884, + "cpuMs": 20, + "bytes": 426, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 4.5, + "cpuMs": 0, + "bytes": 427, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.600000001490116, + "parseMs": 4.200000002980232, + "cpuMs": 10, + "bytes": 428, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 3.600000001490116, + "cpuMs": 0, + "bytes": 429, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.100000001490116, + "parseMs": 3.300000000745058, + "cpuMs": 10, + "bytes": 430, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 3.300000000745058, + "cpuMs": 10, + "bytes": 431, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 3.399999998509884, + "cpuMs": 0, + "bytes": 432, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.399999998509884, + "parseMs": 4, + "cpuMs": 10, + "bytes": 433, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.399999998509884, + "parseMs": 3.800000000745058, + "cpuMs": 10, + "bytes": 434, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.300000000745058, + "parseMs": 3.699999999254942, + "cpuMs": 0, + "bytes": 423, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.300000000745058, + "parseMs": 3.900000002235174, + "cpuMs": 20, + "bytes": 424, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.100000001490116, + "parseMs": 3.600000001490116, + "cpuMs": 0, + "bytes": 425, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 3.599999997764826, + "cpuMs": 10, + "bytes": 426, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 3.399999998509884, + "cpuMs": 10, + "bytes": 427, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.600000001490116, + "parseMs": 3.199999999254942, + "cpuMs": 0, + "bytes": 428, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 3.5, + "cpuMs": 10, + "bytes": 429, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 3.600000001490116, + "cpuMs": 10, + "bytes": 430, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.100000001490116, + "parseMs": 3.699999999254942, + "cpuMs": 0, + "bytes": 431, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.300000000745058, + "parseMs": 3.899999998509884, + "cpuMs": 10, + "bytes": 432, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.299999997019768, + "parseMs": 3.7999999970197678, + "cpuMs": 0, + "bytes": 433, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 23.5, + "parseMs": 23.199999999254942, + "cpuMs": 10, + "bytes": 434, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 3.599999997764826, + "cpuMs": 10, + "bytes": 423, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.600000001490116, + "parseMs": 3.400000002235174, + "cpuMs": 0, + "bytes": 424, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.699999999254942, + "parseMs": 3.300000000745058, + "cpuMs": 10, + "bytes": 425, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.799999997019768, + "parseMs": 3.5, + "cpuMs": 0, + "bytes": 426, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.900000002235174, + "parseMs": 3.400000002235174, + "cpuMs": 10, + "bytes": 427, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 3.699999999254942, + "cpuMs": 0, + "bytes": 428, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 3.300000000745058, + "cpuMs": 30, + "bytes": 429, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.5, + "parseMs": 4.100000001490116, + "cpuMs": 10, + "bytes": 430, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.700000002980232, + "parseMs": 3.300000000745058, + "cpuMs": 0, + "bytes": 431, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.399999998509884, + "parseMs": 11.899999998509884, + "cpuMs": 10, + "bytes": 432, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.399999998509884, + "parseMs": 4.100000001490116, + "cpuMs": 0, + "bytes": 433, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.799999997019768, + "parseMs": 4.299999997019768, + "cpuMs": 10, + "bytes": 434, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 3.600000001490116, + "cpuMs": 0, + "bytes": 423, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.900000002235174, + "parseMs": 5.700000002980232, + "cpuMs": 10, + "bytes": 424, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 4.400000002235174, + "cpuMs": 0, + "bytes": 425, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 3.399999998509884, + "cpuMs": 10, + "bytes": 426, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.699999999254942, + "parseMs": 3.400000002235174, + "cpuMs": 0, + "bytes": 427, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 3.5, + "cpuMs": 10, + "bytes": 428, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 3.400000002235174, + "cpuMs": 10, + "bytes": 429, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.900000002235174, + "parseMs": 3.400000002235174, + "cpuMs": 10, + "bytes": 430, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.300000000745058, + "parseMs": 3.800000000745058, + "cpuMs": 10, + "bytes": 431, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.800000000745058, + "parseMs": 3.400000002235174, + "cpuMs": 10, + "bytes": 432, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.5, + "parseMs": 3.199999999254942, + "cpuMs": 0, + "bytes": 433, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.5, + "parseMs": 3.199999999254942, + "cpuMs": 0, + "bytes": 434, + "streaming": false + } + ], + "backspace": [ + { + "ok": true, + "pre": false, + "ms": 15.300000000745058, + "parseMs": 4.100000001490116, + "cpuMs": 0, + "bytes": 433, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.300000000745058, + "parseMs": 3.900000002235174, + "cpuMs": 10, + "bytes": 432, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.300000000745058, + "parseMs": 3.899999998509884, + "cpuMs": 10, + "bytes": 431, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.100000001490116, + "parseMs": 3.7000000029802322, + "cpuMs": 20, + "bytes": 430, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 4.399999998509884, + "cpuMs": 10, + "bytes": 429, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 13.800000000745058, + "parseMs": 5.300000000745058, + "cpuMs": 10, + "bytes": 428, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 4.399999998509884, + "cpuMs": 10, + "bytes": 427, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.399999998509884, + "parseMs": 5.099999997764826, + "cpuMs": 10, + "bytes": 426, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.400000002235174, + "parseMs": 3.900000002235174, + "cpuMs": 0, + "bytes": 425, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 3.399999998509884, + "cpuMs": 30, + "bytes": 424, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.700000002980232, + "parseMs": 3.300000000745058, + "cpuMs": 0, + "bytes": 423, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.699999999254942, + "parseMs": 3.2999999970197678, + "cpuMs": 10, + "bytes": 422, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.400000002235174, + "parseMs": 4.100000001490116, + "cpuMs": 30, + "bytes": 433, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.699999999254942, + "parseMs": 3.5, + "cpuMs": 0, + "bytes": 432, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 3.800000000745058, + "cpuMs": 10, + "bytes": 431, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.100000001490116, + "parseMs": 3.5, + "cpuMs": 0, + "bytes": 430, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.099999997764826, + "parseMs": 4.599999997764826, + "cpuMs": 10, + "bytes": 429, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.699999999254942, + "parseMs": 3.699999999254942, + "cpuMs": 0, + "bytes": 428, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.400000002235174, + "parseMs": 3, + "cpuMs": 10, + "bytes": 427, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.300000000745058, + "parseMs": 3.099999997764826, + "cpuMs": 0, + "bytes": 426, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.400000002235174, + "parseMs": 3.100000001490116, + "cpuMs": 10, + "bytes": 425, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.699999999254942, + "parseMs": 4.199999999254942, + "cpuMs": 10, + "bytes": 424, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 3.600000001490116, + "cpuMs": 0, + "bytes": 423, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.799999997019768, + "parseMs": 3.399999998509884, + "cpuMs": 10, + "bytes": 422, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.300000000745058, + "parseMs": 3.899999998509884, + "cpuMs": 0, + "bytes": 433, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 4.800000000745058, + "cpuMs": 10, + "bytes": 432, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 6.5, + "cpuMs": 10, + "bytes": 431, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 3.5, + "cpuMs": 10, + "bytes": 430, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.699999999254942, + "parseMs": 3.300000000745058, + "cpuMs": 10, + "bytes": 429, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.599999997764826, + "parseMs": 5.199999999254942, + "cpuMs": 0, + "bytes": 428, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.200000002980232, + "parseMs": 4.800000000745058, + "cpuMs": 0, + "bytes": 427, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.699999999254942, + "parseMs": 3.399999998509884, + "cpuMs": 10, + "bytes": 426, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.5, + "parseMs": 3.300000000745058, + "cpuMs": 0, + "bytes": 425, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.600000001490116, + "parseMs": 3.300000000745058, + "cpuMs": 10, + "bytes": 424, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 51.600000001490116, + "parseMs": 51.399999998509884, + "cpuMs": 0, + "bytes": 423, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.299999997019768, + "parseMs": 3.599999997764826, + "cpuMs": 0, + "bytes": 422, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.699999999254942, + "parseMs": 3.399999998509884, + "cpuMs": 10, + "bytes": 433, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.400000002235174, + "parseMs": 4, + "cpuMs": 10, + "bytes": 432, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.799999997019768, + "parseMs": 3.5, + "cpuMs": 0, + "bytes": 431, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.900000002235174, + "parseMs": 3.400000002235174, + "cpuMs": 0, + "bytes": 430, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.699999999254942, + "parseMs": 3.399999998509884, + "cpuMs": 10, + "bytes": 429, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 3.5, + "cpuMs": 10, + "bytes": 428, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 3.699999999254942, + "cpuMs": 0, + "bytes": 427, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.399999998509884, + "parseMs": 3.899999998509884, + "cpuMs": 0, + "bytes": 426, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 3.399999998509884, + "cpuMs": 10, + "bytes": 425, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 3.699999999254942, + "cpuMs": 0, + "bytes": 424, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 3.899999998509884, + "cpuMs": 10, + "bytes": 423, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.900000002235174, + "parseMs": 4.5, + "cpuMs": 30, + "bytes": 422, + "streaming": false + } + ], + "enter (composer)": [ + { + "ok": true, + "pre": false, + "ms": 14.700000002980232, + "parseMs": 5.5, + "cpuMs": 10, + "bytes": 419, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 5.699999999254942, + "cpuMs": 50, + "bytes": 1895, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.199999999254942, + "parseMs": 4.800000000745058, + "cpuMs": 110, + "bytes": 1895, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.199999999254942, + "parseMs": 4.800000000745058, + "cpuMs": 60, + "bytes": 1895, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 4.899999998509884, + "cpuMs": 80, + "bytes": 1895, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 5.5, + "cpuMs": 70, + "bytes": 1895, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.5, + "parseMs": 5, + "cpuMs": 50, + "bytes": 1895, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.399999998509884, + "parseMs": 5, + "cpuMs": 50, + "bytes": 1895, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.199999999254942, + "parseMs": 4.800000000745058, + "cpuMs": 60, + "bytes": 1895, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.5, + "parseMs": 4.900000002235174, + "cpuMs": 50, + "bytes": 1895, + "streaming": false + } + ], + "arrow (model menu)": [ + { + "ok": true, + "pre": false, + "ms": 10, + "parseMs": 9.399999998509884, + "cpuMs": 20, + "bytes": 1729, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.5, + "parseMs": 7, + "cpuMs": 10, + "bytes": 1724, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 6.5, + "cpuMs": 0, + "bytes": 1729, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.600000001490116, + "parseMs": 6.100000001490116, + "cpuMs": 10, + "bytes": 1724, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.899999998509884, + "parseMs": 6.5, + "cpuMs": 10, + "bytes": 1729, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.100000001490116, + "parseMs": 7.5, + "cpuMs": 10, + "bytes": 1724, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.699999999254942, + "parseMs": 6.300000000745058, + "cpuMs": 0, + "bytes": 1729, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 6.5, + "cpuMs": 20, + "bytes": 1724, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.400000002235174, + "parseMs": 9.100000001490116, + "cpuMs": 20, + "bytes": 1729, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.699999999254942, + "parseMs": 6.199999999254942, + "cpuMs": 10, + "bytes": 1724, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 5.599999997764826, + "cpuMs": 0, + "bytes": 1729, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.100000001490116, + "parseMs": 5.600000001490116, + "cpuMs": 10, + "bytes": 1724, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.5, + "parseMs": 6.699999999254942, + "cpuMs": 10, + "bytes": 1729, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.399999998509884, + "parseMs": 5.899999998509884, + "cpuMs": 10, + "bytes": 1724, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.400000002235174, + "parseMs": 5.900000002235174, + "cpuMs": 10, + "bytes": 1729, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.799999997019768, + "parseMs": 5.299999997019768, + "cpuMs": 0, + "bytes": 1724, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.899999998509884, + "parseMs": 5.300000000745058, + "cpuMs": 0, + "bytes": 1729, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.399999998509884, + "parseMs": 5.800000000745058, + "cpuMs": 10, + "bytes": 1724, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.699999999254942, + "parseMs": 6.199999999254942, + "cpuMs": 10, + "bytes": 1729, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.299999997019768, + "parseMs": 5.799999997019768, + "cpuMs": 0, + "bytes": 1724, + "streaming": false + } + ], + "arrow (resume menu)": [ + { + "ok": true, + "pre": false, + "ms": 14.900000002235174, + "parseMs": 12.200000002980232, + "cpuMs": 10, + "bytes": 2728, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.400000002235174, + "parseMs": 7.900000002235174, + "cpuMs": 10, + "bytes": 2728, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.800000000745058, + "parseMs": 7, + "cpuMs": 0, + "bytes": 2728, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.399999998509884, + "parseMs": 6.599999997764826, + "cpuMs": 10, + "bytes": 2726, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 7.599999997764826, + "cpuMs": 0, + "bytes": 2728, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 6.399999998509884, + "cpuMs": 10, + "bytes": 2728, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.300000000745058, + "parseMs": 6.600000001490116, + "cpuMs": 0, + "bytes": 2728, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.600000001490116, + "parseMs": 9, + "cpuMs": 10, + "bytes": 2726, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.900000002235174, + "parseMs": 7.300000000745058, + "cpuMs": 20, + "bytes": 2728, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 6.5, + "cpuMs": 0, + "bytes": 2728, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.799999997019768, + "parseMs": 7.099999997764826, + "cpuMs": 10, + "bytes": 2728, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.399999998509884, + "parseMs": 6.899999998509884, + "cpuMs": 10, + "bytes": 2726, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 6.5, + "cpuMs": 0, + "bytes": 2728, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.599999997764826, + "parseMs": 6, + "cpuMs": 10, + "bytes": 2728, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.100000001490116, + "parseMs": 8.600000001490116, + "cpuMs": 10, + "bytes": 2728, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.300000000745058, + "parseMs": 6.699999999254942, + "cpuMs": 0, + "bytes": 2726, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 6.600000001490116, + "cpuMs": 10, + "bytes": 2728, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.899999998509884, + "parseMs": 6.199999999254942, + "cpuMs": 0, + "bytes": 2728, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.5, + "parseMs": 6.899999998509884, + "cpuMs": 10, + "bytes": 2728, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.600000001490116, + "parseMs": 7, + "cpuMs": 0, + "bytes": 2726, + "streaming": false + } + ], + "ctrl+o": [ + { + "ok": true, + "pre": false, + "ms": 10.800000000745058, + "parseMs": 7.200000002980232, + "cpuMs": 10, + "bytes": 1676, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 9.899999998509884, + "parseMs": 8.199999999254942, + "cpuMs": 10, + "bytes": 1676, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 11.599999997764826, + "parseMs": 7.199999999254942, + "cpuMs": 20, + "bytes": 1676, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 10, + "parseMs": 7.5, + "cpuMs": 10, + "bytes": 1676, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 10.399999998509884, + "parseMs": 6.899999998509884, + "cpuMs": 20, + "bytes": 1676, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 11.100000001490116, + "parseMs": 7.5, + "cpuMs": 10, + "bytes": 1676, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 11.100000001490116, + "parseMs": 7.5, + "cpuMs": 30, + "bytes": 1676, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 11.400000002235174, + "parseMs": 6.900000002235174, + "cpuMs": 0, + "bytes": 1676, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 11.900000002235174, + "parseMs": 6.5, + "cpuMs": 10, + "bytes": 1676, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 11.600000001490116, + "parseMs": 7.899999998509884, + "cpuMs": 20, + "bytes": 1676, + "streaming": false + } + ], + "shift+tab": [ + { + "ok": true, + "pre": false, + "ms": 12.300000000745058, + "parseMs": 7.100000001490116, + "cpuMs": 0, + "bytes": 1692, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 11.699999999254942, + "parseMs": 6.399999998509884, + "cpuMs": 10, + "bytes": 1692, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 11.300000000745058, + "parseMs": 5.899999998509884, + "cpuMs": 10, + "bytes": 1692, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 11.099999997764826, + "parseMs": 5.800000000745058, + "cpuMs": 0, + "bytes": 1692, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 11.300000000745058, + "parseMs": 6, + "cpuMs": 0, + "bytes": 1692, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 11.699999999254942, + "parseMs": 9.199999999254942, + "cpuMs": 10, + "bytes": 1692, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 11.5, + "parseMs": 6.100000001490116, + "cpuMs": 10, + "bytes": 1692, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 10.899999998509884, + "parseMs": 6.599999997764826, + "cpuMs": 0, + "bytes": 1692, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 12.099999997764826, + "parseMs": 5.599999997764826, + "cpuMs": 10, + "bytes": 1692, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 11.5, + "parseMs": 6.100000001490116, + "cpuMs": 0, + "bytes": 1692, + "streaming": false + } + ], + "open /model": [ + { + "ok": true, + "pre": false, + "ms": 13.600000001490116, + "parseMs": 6.100000001490116, + "cpuMs": 10, + "bytes": 2316, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.699999999254942, + "parseMs": 6.300000000745058, + "cpuMs": 10, + "bytes": 2316, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 6.300000000745058, + "cpuMs": 20, + "bytes": 2316, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 13.699999999254942, + "parseMs": 8.299999997019768, + "cpuMs": 10, + "bytes": 2316, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.200000002980232, + "parseMs": 6.700000002980232, + "cpuMs": 10, + "bytes": 2316, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 6.599999997764826, + "cpuMs": 10, + "bytes": 2316, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 7.599999997764826, + "cpuMs": 10, + "bytes": 2316, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.900000002235174, + "parseMs": 6.5, + "cpuMs": 10, + "bytes": 2316, + "streaming": false + } + ], + "open /settings": [ + { + "ok": true, + "pre": false, + "ms": 15.100000001490116, + "parseMs": 9.699999999254942, + "cpuMs": 30, + "bytes": 5471, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.5, + "parseMs": 7.099999997764826, + "cpuMs": 20, + "bytes": 5471, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 6.600000001490116, + "cpuMs": 20, + "bytes": 5471, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.600000001490116, + "parseMs": 6.199999999254942, + "cpuMs": 170, + "bytes": 5471, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.099999997764826, + "parseMs": 6.5, + "cpuMs": 30, + "bytes": 5471, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 6.099999997764826, + "cpuMs": 30, + "bytes": 5471, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 6.5, + "cpuMs": 30, + "bytes": 5471, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.5, + "parseMs": 6.899999998509884, + "cpuMs": 20, + "bytes": 5471, + "streaming": false + } + ], + "scroll (resume page down/up)": [ + { + "ok": true, + "pre": false, + "ms": 15.699999999254942, + "parseMs": 8, + "cpuMs": 20, + "bytes": 2728, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 8.299999997019768, + "cpuMs": 0, + "bytes": 2726, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.400000002235174, + "parseMs": 7.600000001490116, + "cpuMs": 10, + "bytes": 2728, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 7.399999998509884, + "cpuMs": 10, + "bytes": 2726, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 6.199999999254942, + "cpuMs": 20, + "bytes": 2728, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.600000001490116, + "parseMs": 7, + "cpuMs": 0, + "bytes": 2726, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.5, + "parseMs": 7, + "cpuMs": 10, + "bytes": 2728, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 7, + "cpuMs": 20, + "bytes": 2726, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.099999997764826, + "parseMs": 8.599999997764826, + "cpuMs": 0, + "bytes": 2728, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.699999999254942, + "parseMs": 7.199999999254942, + "cpuMs": 10, + "bytes": 2726, + "streaming": false + } + ] + }, + "next": { + "type char": [ + { + "ok": true, + "pre": false, + "ms": 14.900000002235174, + "parseMs": 5.200000002980232, + "cpuMs": 40, + "bytes": 497, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.200000002980232, + "parseMs": 4.700000002980232, + "cpuMs": 30, + "bytes": 498, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.399999998509884, + "parseMs": 4.099999997764826, + "cpuMs": 0, + "bytes": 499, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 8.800000000745058, + "cpuMs": 10, + "bytes": 500, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.600000001490116, + "parseMs": 7, + "cpuMs": 30, + "bytes": 501, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.600000001490116, + "parseMs": 6.200000002980232, + "cpuMs": 10, + "bytes": 502, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 4.199999999254942, + "cpuMs": 10, + "bytes": 503, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.399999998509884, + "parseMs": 4, + "cpuMs": 10, + "bytes": 504, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.599999997764826, + "parseMs": 3.899999998509884, + "cpuMs": 0, + "bytes": 505, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.399999998509884, + "parseMs": 3.599999997764826, + "cpuMs": 10, + "bytes": 506, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.900000002235174, + "parseMs": 3.600000001490116, + "cpuMs": 10, + "bytes": 507, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 3.699999999254942, + "cpuMs": 0, + "bytes": 508, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 3.800000000745058, + "cpuMs": 10, + "bytes": 497, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 3.600000001490116, + "cpuMs": 0, + "bytes": 498, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.100000001490116, + "parseMs": 3.600000001490116, + "cpuMs": 10, + "bytes": 499, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.100000001490116, + "parseMs": 3.600000001490116, + "cpuMs": 0, + "bytes": 500, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.699999999254942, + "parseMs": 3.600000001490116, + "cpuMs": 10, + "bytes": 501, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.100000001490116, + "parseMs": 3.7000000029802322, + "cpuMs": 0, + "bytes": 502, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 3.5, + "cpuMs": 10, + "bytes": 503, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.300000000745058, + "parseMs": 3.800000000745058, + "cpuMs": 10, + "bytes": 504, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.899999998509884, + "parseMs": 3.2999999970197678, + "cpuMs": 0, + "bytes": 505, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 3.5, + "cpuMs": 30, + "bytes": 506, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.800000000745058, + "parseMs": 4.200000002980232, + "cpuMs": 10, + "bytes": 507, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 3.300000000745058, + "cpuMs": 0, + "bytes": 508, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 3.7999999970197678, + "cpuMs": 20, + "bytes": 497, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 3.399999998509884, + "cpuMs": 0, + "bytes": 498, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.600000001490116, + "parseMs": 3.300000000745058, + "cpuMs": 0, + "bytes": 499, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 3.599999997764826, + "cpuMs": 10, + "bytes": 500, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 3.300000000745058, + "cpuMs": 0, + "bytes": 501, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 3.400000002235174, + "cpuMs": 0, + "bytes": 502, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 3.099999997764826, + "cpuMs": 10, + "bytes": 503, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.399999998509884, + "parseMs": 3.399999998509884, + "cpuMs": 10, + "bytes": 504, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 4.100000001490116, + "cpuMs": 10, + "bytes": 505, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.900000002235174, + "parseMs": 3.900000002235174, + "cpuMs": 0, + "bytes": 506, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.300000000745058, + "parseMs": 4, + "cpuMs": 0, + "bytes": 507, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.299999997019768, + "parseMs": 3.899999998509884, + "cpuMs": 10, + "bytes": 508, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.900000002235174, + "parseMs": 3.600000001490116, + "cpuMs": 0, + "bytes": 497, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 3.5, + "cpuMs": 0, + "bytes": 498, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.699999999254942, + "parseMs": 4.300000000745058, + "cpuMs": 10, + "bytes": 499, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.099999997764826, + "parseMs": 3.599999997764826, + "cpuMs": 0, + "bytes": 500, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.600000001490116, + "parseMs": 4.199999999254942, + "cpuMs": 0, + "bytes": 501, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.599999997764826, + "parseMs": 6.199999999254942, + "cpuMs": 20, + "bytes": 502, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.5, + "parseMs": 4.099999997764826, + "cpuMs": 0, + "bytes": 503, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.100000001490116, + "parseMs": 3.300000000745058, + "cpuMs": 10, + "bytes": 504, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 3.800000000745058, + "cpuMs": 0, + "bytes": 505, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.900000002235174, + "parseMs": 3.400000002235174, + "cpuMs": 0, + "bytes": 506, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.100000001490116, + "parseMs": 3.800000000745058, + "cpuMs": 10, + "bytes": 507, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 3.5, + "cpuMs": 0, + "bytes": 508, + "streaming": false + } + ], + "backspace": [ + { + "ok": true, + "pre": false, + "ms": 15.099999997764826, + "parseMs": 4.099999997764826, + "cpuMs": 10, + "bytes": 507, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 3.699999999254942, + "cpuMs": 10, + "bytes": 506, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.200000002980232, + "parseMs": 3.7000000029802322, + "cpuMs": 0, + "bytes": 505, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 4.699999999254942, + "cpuMs": 0, + "bytes": 504, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.800000000745058, + "parseMs": 5.399999998509884, + "cpuMs": 10, + "bytes": 503, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.399999998509884, + "parseMs": 5.800000000745058, + "cpuMs": 10, + "bytes": 502, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.699999999254942, + "parseMs": 6.399999998509884, + "cpuMs": 10, + "bytes": 501, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 4.799999997019768, + "cpuMs": 0, + "bytes": 500, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.099999997764826, + "parseMs": 3.699999999254942, + "cpuMs": 10, + "bytes": 499, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.599999997764826, + "parseMs": 3.199999999254942, + "cpuMs": 10, + "bytes": 498, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.599999997764826, + "parseMs": 3.199999999254942, + "cpuMs": 0, + "bytes": 497, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 3.399999998509884, + "cpuMs": 10, + "bytes": 496, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.5, + "parseMs": 3.300000000745058, + "cpuMs": 0, + "bytes": 507, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 3.5, + "cpuMs": 10, + "bytes": 506, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.699999999254942, + "parseMs": 5.399999998509884, + "cpuMs": 10, + "bytes": 505, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 3.199999999254942, + "cpuMs": 10, + "bytes": 504, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.599999997764826, + "parseMs": 3.199999999254942, + "cpuMs": 10, + "bytes": 503, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.399999998509884, + "parseMs": 5, + "cpuMs": 0, + "bytes": 502, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.699999999254942, + "parseMs": 3.300000000745058, + "cpuMs": 10, + "bytes": 501, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.900000002235174, + "parseMs": 3.5, + "cpuMs": 0, + "bytes": 500, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.5, + "parseMs": 4.199999999254942, + "cpuMs": 10, + "bytes": 499, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.800000000745058, + "parseMs": 3.300000000745058, + "cpuMs": 10, + "bytes": 498, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.299999997019768, + "parseMs": 4, + "cpuMs": 0, + "bytes": 497, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.900000002235174, + "parseMs": 5.5, + "cpuMs": 10, + "bytes": 496, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 4.600000001490116, + "cpuMs": 10, + "bytes": 507, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.400000002235174, + "parseMs": 4.900000002235174, + "cpuMs": 0, + "bytes": 506, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 4.600000001490116, + "cpuMs": 10, + "bytes": 505, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 3.699999999254942, + "cpuMs": 0, + "bytes": 504, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.300000000745058, + "parseMs": 3.899999998509884, + "cpuMs": 10, + "bytes": 503, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.5, + "parseMs": 3.399999998509884, + "cpuMs": 0, + "bytes": 502, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.5, + "parseMs": 5.100000001490116, + "cpuMs": 10, + "bytes": 501, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.099999997764826, + "parseMs": 3.599999997764826, + "cpuMs": 0, + "bytes": 500, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.100000001490116, + "parseMs": 3.800000000745058, + "cpuMs": 0, + "bytes": 499, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.599999997764826, + "parseMs": 3.199999999254942, + "cpuMs": 10, + "bytes": 498, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.399999998509884, + "parseMs": 5, + "cpuMs": 30, + "bytes": 497, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 3.599999997764826, + "cpuMs": 0, + "bytes": 496, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 3.899999998509884, + "cpuMs": 20, + "bytes": 507, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.600000001490116, + "parseMs": 4.100000001490116, + "cpuMs": 0, + "bytes": 506, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 3.800000000745058, + "cpuMs": 10, + "bytes": 505, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 3.199999999254942, + "cpuMs": 0, + "bytes": 504, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.400000002235174, + "parseMs": 3.800000000745058, + "cpuMs": 10, + "bytes": 503, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 3.5, + "cpuMs": 0, + "bytes": 502, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.099999997764826, + "parseMs": 3.599999997764826, + "cpuMs": 10, + "bytes": 501, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.699999999254942, + "parseMs": 5.300000000745058, + "cpuMs": 0, + "bytes": 500, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.600000001490116, + "parseMs": 3.199999999254942, + "cpuMs": 0, + "bytes": 499, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 3.399999998509884, + "cpuMs": 10, + "bytes": 498, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.600000001490116, + "parseMs": 3.199999999254942, + "cpuMs": 0, + "bytes": 497, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 3.5, + "cpuMs": 10, + "bytes": 496, + "streaming": false + } + ], + "enter (composer)": [ + { + "ok": true, + "pre": false, + "ms": 14.5, + "parseMs": 6, + "cpuMs": 120, + "bytes": 1686, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.899999998509884, + "parseMs": 5.300000000745058, + "cpuMs": 80, + "bytes": 1748, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.699999999254942, + "parseMs": 7.100000001490116, + "cpuMs": 90, + "bytes": 1740, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.600000001490116, + "parseMs": 5.200000002980232, + "cpuMs": 40, + "bytes": 1750, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 5.199999999254942, + "cpuMs": 40, + "bytes": 1750, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.800000000745058, + "parseMs": 5.400000002235174, + "cpuMs": 40, + "bytes": 1750, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.300000000745058, + "parseMs": 5.900000002235174, + "cpuMs": 50, + "bytes": 1750, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.5, + "parseMs": 6, + "cpuMs": 40, + "bytes": 1750, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.600000001490116, + "parseMs": 5.100000001490116, + "cpuMs": 40, + "bytes": 1751, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.100000001490116, + "parseMs": 5.600000001490116, + "cpuMs": 10, + "bytes": 546, + "streaming": false + } + ], + "arrow (model menu)": [ + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 10, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 20, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 0, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 0, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 160, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 200, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 30, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 10, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 20, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 0, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 10, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 0, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 0, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 10, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 10, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 0, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 0, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 10, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 10, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 0, + "bytes": 0, + "streaming": false + } + ], + "arrow (resume menu)": [ + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + } + ], + "ctrl+o": [ + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 10, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 320, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 40, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 10, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 10, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 10, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 20, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 10, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 10, + "bytes": 0, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": null, + "cpuMs": 10, + "bytes": 0, + "streaming": false + } + ], + "shift+tab": [ + { + "ok": true, + "pre": false, + "ms": 43.69999999925494, + "parseMs": 42.400000002235174, + "cpuMs": 50, + "bytes": 537, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 30.5, + "parseMs": 27.199999999254942, + "cpuMs": 150, + "bytes": 545, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 28.5, + "parseMs": 28, + "cpuMs": 50, + "bytes": 545, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 26.900000002235174, + "parseMs": 26.600000001490116, + "cpuMs": 30, + "bytes": 545, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 21.300000000745058, + "parseMs": 20.800000000745058, + "cpuMs": 20, + "bytes": 545, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 25.300000000745058, + "parseMs": 25.099999997764826, + "cpuMs": 40, + "bytes": 545, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 21.400000002235174, + "parseMs": 21.100000001490116, + "cpuMs": 40, + "bytes": 545, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 25.099999997764826, + "parseMs": 24.800000000745058, + "cpuMs": 30, + "bytes": 545, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 18.199999999254942, + "parseMs": 18, + "cpuMs": 140, + "bytes": 545, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 21.400000002235174, + "parseMs": 21.200000002980232, + "cpuMs": 10, + "bytes": 545, + "streaming": false + } + ], + "open /model": [ + { + "ok": true, + "pre": false, + "ms": 16.099999997764826, + "parseMs": 8.599999997764826, + "cpuMs": 10, + "bytes": 1597, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 6.5, + "cpuMs": 10, + "bytes": 1589, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.5, + "parseMs": 6, + "cpuMs": 30, + "bytes": 1589, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.600000001490116, + "parseMs": 7.200000002980232, + "cpuMs": 10, + "bytes": 1589, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.699999999254942, + "parseMs": 6.099999997764826, + "cpuMs": 20, + "bytes": 1589, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.400000002235174, + "parseMs": 8.800000000745058, + "cpuMs": 20, + "bytes": 1589, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.5, + "parseMs": 6.099999997764826, + "cpuMs": 10, + "bytes": 1589, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.900000002235174, + "parseMs": 6.400000002235174, + "cpuMs": 0, + "bytes": 1589, + "streaming": false + } + ], + "open /settings": [ + { + "ok": true, + "pre": false, + "ms": 18.300000000745058, + "parseMs": 10.199999999254942, + "cpuMs": 10, + "bytes": 2387, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.600000001490116, + "parseMs": 10.100000001490116, + "cpuMs": 10, + "bytes": 2387, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 8.599999997764826, + "cpuMs": 10, + "bytes": 2387, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 12.199999999254942, + "parseMs": 7.899999998509884, + "cpuMs": 10, + "bytes": 2387, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.699999999254942, + "parseMs": 9.199999999254942, + "cpuMs": 0, + "bytes": 2387, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.699999999254942, + "parseMs": 8.199999999254942, + "cpuMs": 10, + "bytes": 2387, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 14.599999997764826, + "parseMs": 8.5, + "cpuMs": 0, + "bytes": 2387, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 8.599999997764826, + "cpuMs": 10, + "bytes": 2387, + "streaming": false + } + ], + "scroll (resume page down/up)": [ + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": false + } + ] + } + } + }, + "streaming": { + "legacy": { + "type char": { + "n": 48, + "ok": 48, + "missed": 0, + "pre": 0, + "p50": 28, + "p95": 68, + "max": 81.10000000149012, + "parseP50": 27.099999997764826, + "cpuMsPerKey": 89.375, + "bytesPerKey": 35692.333333333336 + }, + "backspace": { + "n": 48, + "ok": 48, + "missed": 0, + "pre": 0, + "p50": 30.400000002235174, + "p95": 68.59999999776483, + "max": 85.80000000074506, + "parseP50": 29.900000002235174, + "cpuMsPerKey": 78.33333333333333, + "bytesPerKey": 33406.041666666664 + }, + "enter (composer)": { + "n": 10, + "ok": 10, + "missed": 0, + "pre": 0, + "p50": 34.400000002235174, + "p95": 39.599999997764826, + "max": 39.599999997764826, + "parseP50": 31.899999998509884, + "cpuMsPerKey": 57, + "bytesPerKey": 73953.4 + }, + "arrow (model menu)": { + "n": 20, + "ok": 20, + "missed": 0, + "pre": 0, + "p50": 28.400000002235174, + "p95": 39.79999999701977, + "max": 46, + "parseP50": 24.200000002980232, + "cpuMsPerKey": 85, + "bytesPerKey": 107081.05 + }, + "arrow (resume menu)": { + "n": 20, + "ok": 0, + "missed": 20, + "pre": 0, + "p50": null, + "p95": null, + "max": null, + "parseP50": null, + "cpuMsPerKey": null, + "bytesPerKey": null + }, + "ctrl+o": { + "n": 10, + "ok": 10, + "missed": 0, + "pre": 0, + "p50": 31.5, + "p95": 62.20000000298023, + "max": 62.20000000298023, + "parseP50": 15.800000000745058, + "cpuMsPerKey": 68, + "bytesPerKey": 173803.1 + }, + "shift+tab": { + "n": 10, + "ok": 10, + "missed": 0, + "pre": 0, + "p50": 22.900000002235174, + "p95": 71.60000000149012, + "max": 71.60000000149012, + "parseP50": 16.899999998509884, + "cpuMsPerKey": 107, + "bytesPerKey": 183480.3 + }, + "open /model": { + "n": 8, + "ok": 8, + "missed": 0, + "pre": 0, + "p50": 40.5, + "p95": 74.30000000074506, + "max": 74.30000000074506, + "parseP50": 10.099999997764826, + "cpuMsPerKey": 92.5, + "bytesPerKey": 273962.75 + }, + "open /settings": { + "n": 8, + "ok": 8, + "missed": 0, + "pre": 0, + "p50": 20.600000001490116, + "p95": 77.5, + "max": 77.5, + "parseP50": 10.099999997764826, + "cpuMsPerKey": 93.75, + "bytesPerKey": 359884.125 + }, + "scroll (resume page down/up)": { + "n": 10, + "ok": 0, + "missed": 10, + "pre": 0, + "p50": null, + "p95": null, + "max": null, + "parseP50": null, + "cpuMsPerKey": null, + "bytesPerKey": null + } + }, + "next": { + "type char": { + "n": 48, + "ok": 48, + "missed": 0, + "pre": 0, + "p50": 18.800000000745058, + "p95": 35.69999999925494, + "max": 39.900000002235174, + "parseP50": 18.5, + "cpuMsPerKey": 48.125, + "bytesPerKey": 3444.6041666666665 + }, + "backspace": { + "n": 48, + "ok": 48, + "missed": 0, + "pre": 0, + "p50": 17.200000002980232, + "p95": 35.599999997764826, + "max": 41.899999998509884, + "parseP50": 16.699999999254942, + "cpuMsPerKey": 53.125, + "bytesPerKey": 3431.1041666666665 + }, + "enter (composer)": { + "n": 10, + "ok": 10, + "missed": 0, + "pre": 0, + "p50": 29.100000001490116, + "p95": 39.80000000074506, + "max": 39.80000000074506, + "parseP50": 28.699999999254942, + "cpuMsPerKey": 66, + "bytesPerKey": 1779.2 + }, + "arrow (model menu)": { + "n": 20, + "ok": 0, + "missed": 20, + "pre": 0, + "p50": null, + "p95": null, + "max": null, + "parseP50": null, + "cpuMsPerKey": 1869.5, + "bytesPerKey": 274209.4 + }, + "arrow (resume menu)": { + "n": 20, + "ok": 0, + "missed": 20, + "pre": 0, + "p50": null, + "p95": null, + "max": null, + "parseP50": null, + "cpuMsPerKey": null, + "bytesPerKey": null + }, + "ctrl+o": { + "n": 10, + "ok": 10, + "missed": 0, + "pre": 0, + "p50": 22.099999997764826, + "p95": 145.40000000223517, + "max": 145.40000000223517, + "parseP50": 21.5, + "cpuMsPerKey": 64, + "bytesPerKey": 4238.1 + }, + "shift+tab": { + "n": 10, + "ok": 3, + "missed": 7, + "pre": 0, + "p50": 40.20000000298023, + "p95": 4855.400000002235, + "max": 4855.400000002235, + "parseP50": 39.70000000298023, + "cpuMsPerKey": 1607, + "bytesPerKey": 128151.6 + }, + "open /model": { + "n": 8, + "ok": 8, + "missed": 0, + "pre": 0, + "p50": 36, + "p95": 39.399999998509884, + "max": 39.399999998509884, + "parseP50": 33.100000001490116, + "cpuMsPerKey": 53.75, + "bytesPerKey": 25726.875 + }, + "open /settings": { + "n": 8, + "ok": 8, + "missed": 0, + "pre": 0, + "p50": 41, + "p95": 52, + "max": 52, + "parseP50": 37.100000001490116, + "cpuMsPerKey": 55, + "bytesPerKey": 115601.25 + }, + "scroll (resume page down/up)": { + "n": 10, + "ok": 0, + "missed": 10, + "pre": 0, + "p50": null, + "p95": null, + "max": null, + "parseP50": null, + "cpuMsPerKey": null, + "bytesPerKey": null + } + }, + "gate": { + "type char": { + "pass": true, + "reasons": [] + }, + "backspace": { + "pass": true, + "reasons": [] + }, + "enter (composer)": { + "pass": true, + "reasons": [] + }, + "arrow (model menu)": { + "pass": false, + "reasons": ["no matching paint (legacy painted)", "20 key(s) never painted the change (legacy 0)"] + }, + "arrow (resume menu)": { + "pass": true, + "na": true, + "reasons": ["neither CLI painted a change"] + }, + "ctrl+o": { + "pass": false, + "reasons": ["p95 over 1.2x / +5 ms"] + }, + "shift+tab": { + "pass": false, + "reasons": [ + "7 key(s) never painted the change (legacy 0)", + "p50 over 1.2x / +5 ms", + "p95 over 1.2x / +5 ms", + "input stall 4855 ms > 200 ms" + ] + }, + "open /model": { + "pass": true, + "reasons": [] + }, + "open /settings": { + "pass": false, + "reasons": ["p50 over 1.2x / +5 ms"] + }, + "scroll (resume page down/up)": { + "pass": true, + "na": true, + "reasons": ["neither CLI painted a change"] + } + }, + "raw": { + "legacy": { + "type char": [ + { + "ok": true, + "pre": false, + "ms": 28.5, + "parseMs": 28.099999997764826, + "cpuMs": 40, + "bytes": 3545, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 17.899999998509884, + "parseMs": 17.5, + "cpuMs": 40, + "bytes": 4172, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 18.400000002235174, + "parseMs": 17.900000002235174, + "cpuMs": 40, + "bytes": 4700, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 21.899999998509884, + "parseMs": 21.5, + "cpuMs": 190, + "bytes": 3972, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.100000001490116, + "parseMs": 18.600000001490116, + "cpuMs": 40, + "bytes": 6025, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.199999999254942, + "parseMs": 18.800000000745058, + "cpuMs": 40, + "bytes": 6718, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 17, + "parseMs": 16.5, + "cpuMs": 40, + "bytes": 11839, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 15, + "parseMs": 14.5, + "cpuMs": 60, + "bytes": 12402, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 24.599999997764826, + "parseMs": 24.099999997764826, + "cpuMs": 40, + "bytes": 13054, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.399999998509884, + "parseMs": 20, + "cpuMs": 30, + "bytes": 13607, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.800000000745058, + "parseMs": 20.199999999254942, + "cpuMs": 50, + "bytes": 14262, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.099999997764826, + "parseMs": 18.699999999254942, + "cpuMs": 40, + "bytes": 11127, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 28, + "parseMs": 27.5, + "cpuMs": 60, + "bytes": 23405, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 11.5, + "parseMs": 10.800000000745058, + "cpuMs": 50, + "bytes": 24060, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 30.200000002980232, + "parseMs": 29.700000002980232, + "cpuMs": 60, + "bytes": 24622, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 31, + "parseMs": 30.199999999254942, + "cpuMs": 80, + "bytes": 25265, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 16.599999997764826, + "parseMs": 16.099999997764826, + "cpuMs": 50, + "bytes": 25836, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 18.199999999254942, + "parseMs": 17.800000000745058, + "cpuMs": 50, + "bytes": 26494, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 18.200000002980232, + "parseMs": 17.800000000745058, + "cpuMs": 50, + "bytes": 20292, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 28.900000002235174, + "parseMs": 28.400000002235174, + "cpuMs": 50, + "bytes": 27699, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 18.699999999254942, + "parseMs": 18.199999999254942, + "cpuMs": 40, + "bytes": 28354, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.399999998509884, + "parseMs": 20, + "cpuMs": 50, + "bytes": 28927, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 29.600000001490116, + "parseMs": 29.100000001490116, + "cpuMs": 60, + "bytes": 29583, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 30.600000001490116, + "parseMs": 30.200000002980232, + "cpuMs": 60, + "bytes": 30214, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 27, + "parseMs": 26.5, + "cpuMs": 80, + "bytes": 35842, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 28.399999998509884, + "parseMs": 27.099999997764826, + "cpuMs": 80, + "bytes": 43087, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 11.399999998509884, + "parseMs": 10.899999998509884, + "cpuMs": 70, + "bytes": 43784, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 31.899999998509884, + "parseMs": 31.300000000745058, + "cpuMs": 70, + "bytes": 33345, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 23.300000000745058, + "parseMs": 22.899999998509884, + "cpuMs": 80, + "bytes": 45292, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 30.399999998509884, + "parseMs": 29.699999999254942, + "cpuMs": 80, + "bytes": 46092, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 31, + "parseMs": 30.300000000745058, + "cpuMs": 90, + "bytes": 35061, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 28, + "parseMs": 27.5, + "cpuMs": 200, + "bytes": 47535, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 25, + "parseMs": 24.400000002235174, + "cpuMs": 90, + "bytes": 48340, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 35.899999998509884, + "parseMs": 35.399999998509884, + "cpuMs": 100, + "bytes": 36786, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 42.399999998509884, + "parseMs": 41.69999999925494, + "cpuMs": 110, + "bytes": 49856, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 56.80000000074506, + "parseMs": 56.100000001490116, + "cpuMs": 120, + "bytes": 63360, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 24.5, + "parseMs": 23.900000002235174, + "cpuMs": 120, + "bytes": 63236, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 44.5, + "parseMs": 44, + "cpuMs": 210, + "bytes": 48102, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 65.79999999701977, + "parseMs": 62.599999997764826, + "cpuMs": 150, + "bytes": 64867, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 29.5, + "parseMs": 28.900000002235174, + "cpuMs": 110, + "bytes": 49274, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 63.30000000074506, + "parseMs": 62.5, + "cpuMs": 120, + "bytes": 49959, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 68, + "parseMs": 67, + "cpuMs": 330, + "bytes": 67281, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 42, + "parseMs": 41.20000000298023, + "cpuMs": 130, + "bytes": 68349, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 64.5, + "parseMs": 63.900000002235174, + "cpuMs": 130, + "bytes": 69028, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 81.10000000149012, + "parseMs": 80.60000000149012, + "cpuMs": 170, + "bytes": 87413, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 26.600000001490116, + "parseMs": 26.100000001490116, + "cpuMs": 90, + "bytes": 53060, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 73, + "parseMs": 71.90000000223517, + "cpuMs": 120, + "bytes": 71584, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 32.5, + "parseMs": 31.100000001490116, + "cpuMs": 130, + "bytes": 72525, + "streaming": true + } + ], + "backspace": [ + { + "ok": true, + "pre": false, + "ms": 21, + "parseMs": 20.300000000745058, + "cpuMs": 50, + "bytes": 15459, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.300000000745058, + "parseMs": 18.800000000745058, + "cpuMs": 50, + "bytes": 16013, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 12.5, + "parseMs": 11.899999998509884, + "cpuMs": 40, + "bytes": 16672, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 26.599999997764826, + "parseMs": 25.799999997019768, + "cpuMs": 60, + "bytes": 17226, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.400000002235174, + "parseMs": 19.100000001490116, + "cpuMs": 50, + "bytes": 13317, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 22, + "parseMs": 21.5, + "cpuMs": 50, + "bytes": 18415, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.400000002235174, + "parseMs": 19.900000002235174, + "cpuMs": 40, + "bytes": 19062, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 21.199999999254942, + "parseMs": 18.300000000745058, + "cpuMs": 50, + "bytes": 19629, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 15.900000002235174, + "parseMs": 15.5, + "cpuMs": 50, + "bytes": 20257, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 32.099999997764826, + "parseMs": 31.699999999254942, + "cpuMs": 50, + "bytes": 20808, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 12.5, + "parseMs": 12.099999997764826, + "cpuMs": 50, + "bytes": 21464, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 28.400000002235174, + "parseMs": 27.800000000745058, + "cpuMs": 50, + "bytes": 21994, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 49.100000001490116, + "parseMs": 48.70000000298023, + "cpuMs": 70, + "bytes": 38381, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 34.80000000074506, + "parseMs": 34.19999999925494, + "cpuMs": 70, + "bytes": 39308, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 39, + "parseMs": 38.5, + "cpuMs": 80, + "bytes": 32218, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 49.19999999925494, + "parseMs": 48.69999999925494, + "cpuMs": 70, + "bytes": 33519, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.899999998509884, + "parseMs": 20.5, + "cpuMs": 50, + "bytes": 25233, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 40.399999998509884, + "parseMs": 39.69999999925494, + "cpuMs": 90, + "bytes": 34444, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 40.80000000074506, + "parseMs": 40.400000002235174, + "cpuMs": 70, + "bytes": 35228, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 53.600000001490116, + "parseMs": 52.70000000298023, + "cpuMs": 100, + "bytes": 45125, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 38.100000001490116, + "parseMs": 37.69999999925494, + "cpuMs": 80, + "bytes": 36785, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 26.400000002235174, + "parseMs": 26, + "cpuMs": 250, + "bytes": 28182, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 55.30000000074506, + "parseMs": 54, + "cpuMs": 90, + "bytes": 48022, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.300000000745058, + "parseMs": 19.699999999254942, + "cpuMs": 60, + "bytes": 29399, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 44.79999999701977, + "parseMs": 43.79999999701977, + "cpuMs": 110, + "bytes": 51530, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 26.399999998509884, + "parseMs": 25.599999997764826, + "cpuMs": 90, + "bytes": 39165, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 39.399999998509884, + "parseMs": 38.899999998509884, + "cpuMs": 100, + "bytes": 53041, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 28.199999999254942, + "parseMs": 27.600000001490116, + "cpuMs": 110, + "bytes": 53836, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 28, + "parseMs": 27.599999997764826, + "cpuMs": 80, + "bytes": 40886, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 33.5, + "parseMs": 32.899999998509884, + "cpuMs": 240, + "bytes": 41450, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 68.59999999776483, + "parseMs": 68.09999999776483, + "cpuMs": 130, + "bytes": 56141, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 43.399999998509884, + "parseMs": 42.80000000074506, + "cpuMs": 110, + "bytes": 57018, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 37.19999999925494, + "parseMs": 36.69999999925494, + "cpuMs": 100, + "bytes": 43297, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 42.900000002235174, + "parseMs": 42.100000001490116, + "cpuMs": 120, + "bytes": 43867, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 47.100000001490116, + "parseMs": 46.600000001490116, + "cpuMs": 90, + "bytes": 44474, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 35.899999998509884, + "parseMs": 35.399999998509884, + "cpuMs": 100, + "bytes": 45052, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 64, + "parseMs": 62.69999999925494, + "cpuMs": 120, + "bytes": 73217, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 30.400000002235174, + "parseMs": 29.900000002235174, + "cpuMs": 80, + "bytes": 55519, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 73.39999999850988, + "parseMs": 72.5, + "cpuMs": 150, + "bytes": 93597, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 63.20000000298023, + "parseMs": 62.600000001490116, + "cpuMs": 120, + "bytes": 75645, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 61.599999997764826, + "parseMs": 61, + "cpuMs": 140, + "bytes": 67509, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 85.80000000074506, + "parseMs": 85, + "cpuMs": 70, + "bytes": 19269, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 6, + "parseMs": 4.900000002235174, + "cpuMs": 0, + "bytes": 472, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 4.5, + "parseMs": 3.7999999970197678, + "cpuMs": 0, + "bytes": 471, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 5.300000000745058, + "parseMs": 4.699999999254942, + "cpuMs": 10, + "bytes": 470, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 5.099999997764826, + "parseMs": 4.699999999254942, + "cpuMs": 20, + "bytes": 469, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 5.099999997764826, + "parseMs": 4.300000000745058, + "cpuMs": 0, + "bytes": 468, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 4.5, + "parseMs": 4.100000001490116, + "cpuMs": 0, + "bytes": 467, + "streaming": false + } + ], + "enter (composer)": [ + { + "ok": true, + "pre": false, + "ms": 32.5, + "parseMs": 31.899999998509884, + "cpuMs": 60, + "bytes": 2240, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 34.400000002235174, + "parseMs": 34, + "cpuMs": 40, + "bytes": 4690, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 16, + "parseMs": 12.5, + "cpuMs": 70, + "bytes": 82820, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 35.100000001490116, + "parseMs": 32, + "cpuMs": 40, + "bytes": 84527, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 37.79999999701977, + "parseMs": 36.19999999925494, + "cpuMs": 50, + "bytes": 86267, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 39.599999997764826, + "parseMs": 0.6999999992549419, + "cpuMs": 60, + "bytes": 109868, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 36.600000001490116, + "parseMs": 35.100000001490116, + "cpuMs": 50, + "bytes": 89630, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 36, + "parseMs": 32.69999999925494, + "cpuMs": 80, + "bytes": 91370, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 30.899999998509884, + "parseMs": 27.199999999254942, + "cpuMs": 70, + "bytes": 93203, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 29.399999998509884, + "parseMs": 25.800000000745058, + "cpuMs": 50, + "bytes": 94919, + "streaming": true + } + ], + "arrow (model menu)": [ + { + "ok": true, + "pre": false, + "ms": 19.900000002235174, + "parseMs": 18.400000002235174, + "cpuMs": 70, + "bytes": 83694, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 35.80000000074506, + "parseMs": 32.19999999925494, + "cpuMs": 80, + "bytes": 112347, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 21, + "parseMs": 17.300000000745058, + "cpuMs": 70, + "bytes": 84804, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 25.5, + "parseMs": 21.699999999254942, + "cpuMs": 70, + "bytes": 85347, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 34.70000000298023, + "parseMs": 30.900000002235174, + "cpuMs": 80, + "bytes": 114600, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 28.400000002235174, + "parseMs": 26.200000002980232, + "cpuMs": 80, + "bytes": 115378, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 30.600000001490116, + "parseMs": 15.199999999254942, + "cpuMs": 80, + "bytes": 116079, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.399999998509884, + "parseMs": 16.399999998509884, + "cpuMs": 110, + "bytes": 87587, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 39.79999999701977, + "parseMs": 38.29999999701977, + "cpuMs": 80, + "bytes": 117614, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 22.900000002235174, + "parseMs": 5.600000001490116, + "cpuMs": 60, + "bytes": 118281, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.299999997019768, + "parseMs": 14, + "cpuMs": 90, + "bytes": 119052, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 28.100000001490116, + "parseMs": 24.200000002980232, + "cpuMs": 90, + "bytes": 93922, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 37.79999999701977, + "parseMs": 11.699999999254942, + "cpuMs": 100, + "bytes": 120531, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 29.600000001490116, + "parseMs": 25.800000000745058, + "cpuMs": 90, + "bytes": 121321, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 33.5, + "parseMs": 29.699999999254942, + "cpuMs": 130, + "bytes": 122118, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.699999999254942, + "parseMs": 15.800000000745058, + "cpuMs": 70, + "bytes": 61378, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 46, + "parseMs": 41.399999998509884, + "cpuMs": 90, + "bytes": 123585, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 27.299999997019768, + "parseMs": 25.299999997019768, + "cpuMs": 90, + "bytes": 124352, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 31.900000002235174, + "parseMs": 29.900000002235174, + "cpuMs": 70, + "bytes": 93795, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 30.100000001490116, + "parseMs": 24.5, + "cpuMs": 100, + "bytes": 125836, + "streaming": true + } + ], + "arrow (resume menu)": [ + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + } + ], + "ctrl+o": [ + { + "ok": true, + "pre": false, + "ms": 43.399999998509884, + "parseMs": 6.699999999254942, + "cpuMs": 80, + "bytes": 197199, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 36.599999997764826, + "parseMs": 28.399999998509884, + "cpuMs": 50, + "bytes": 160719, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 31.5, + "parseMs": 27, + "cpuMs": 70, + "bytes": 163224, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 33.599999997764826, + "parseMs": 29.699999999254942, + "cpuMs": 60, + "bytes": 165822, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 31.199999999254942, + "parseMs": 29, + "cpuMs": 70, + "bytes": 168402, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 33.400000002235174, + "parseMs": 28.600000001490116, + "cpuMs": 50, + "bytes": 170994, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 14.100000001490116, + "parseMs": 10.199999999254942, + "cpuMs": 70, + "bytes": 130061, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.599999997764826, + "parseMs": 15.800000000745058, + "cpuMs": 60, + "bytes": 176040, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 16.100000001490116, + "parseMs": 11.5, + "cpuMs": 70, + "bytes": 178652, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 62.20000000298023, + "parseMs": 11.600000001490116, + "cpuMs": 100, + "bytes": 226918, + "streaming": true + } + ], + "shift+tab": [ + { + "ok": true, + "pre": false, + "ms": 29.300000000745058, + "parseMs": 22.599999997764826, + "cpuMs": 90, + "bytes": 142928, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 22.300000000745058, + "parseMs": 16.899999998509884, + "cpuMs": 70, + "bytes": 187244, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 21.899999998509884, + "parseMs": 13.899999998509884, + "cpuMs": 90, + "bytes": 189491, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.399999998509884, + "parseMs": 16.899999998509884, + "cpuMs": 80, + "bytes": 166700, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 71.60000000149012, + "parseMs": 11.700000002980232, + "cpuMs": 290, + "bytes": 193568, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.599999997764826, + "parseMs": 16.899999998509884, + "cpuMs": 70, + "bytes": 147281, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 41.099999997764826, + "parseMs": 5.399999998509884, + "cpuMs": 70, + "bytes": 198232, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 32.19999999925494, + "parseMs": 27.599999997764826, + "cpuMs": 100, + "bytes": 200851, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 31.799999997019768, + "parseMs": 25.599999997764826, + "cpuMs": 110, + "bytes": 203092, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 22.900000002235174, + "parseMs": 18, + "cpuMs": 100, + "bytes": 205416, + "streaming": true + } + ], + "open /model": [ + { + "ok": true, + "pre": false, + "ms": 13.300000000745058, + "parseMs": 12.600000001490116, + "cpuMs": 40, + "bytes": 7534, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 16.799999997019768, + "parseMs": 10.099999997764826, + "cpuMs": 50, + "bytes": 238263, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 68.80000000074506, + "parseMs": 11.300000000745058, + "cpuMs": 100, + "bytes": 255398, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 70, + "parseMs": 6.099999997764826, + "cpuMs": 130, + "bytes": 342382, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 40.5, + "parseMs": 9.099999997764826, + "cpuMs": 130, + "bytes": 291989, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 74.30000000074506, + "parseMs": 7.099999997764826, + "cpuMs": 70, + "bytes": 384589, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 62.400000002235174, + "parseMs": 13.200000002980232, + "cpuMs": 100, + "bytes": 329051, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 39.400000002235174, + "parseMs": 30.200000002980232, + "cpuMs": 120, + "bytes": 342496, + "streaming": true + } + ], + "open /settings": [ + { + "ok": true, + "pre": false, + "ms": 3.100000001490116, + "parseMs": 1.699999999254942, + "cpuMs": 100, + "bytes": 191500, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 18.599999997764826, + "parseMs": 10.099999997764826, + "cpuMs": 80, + "bytes": 381958, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.600000001490116, + "parseMs": 12.600000001490116, + "cpuMs": 80, + "bytes": 397956, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 77.5, + "parseMs": 22.099999997764826, + "cpuMs": 140, + "bytes": 417150, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 33.400000002235174, + "parseMs": 24, + "cpuMs": 140, + "bytes": 435143, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 31.099999997764826, + "parseMs": 21.5, + "cpuMs": 70, + "bytes": 340230, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 3.600000001490116, + "parseMs": 2.699999999254942, + "cpuMs": 50, + "bytes": 231956, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 33.600000001490116, + "parseMs": 1.2000000029802322, + "cpuMs": 90, + "bytes": 483180, + "streaming": true + } + ], + "scroll (resume page down/up)": [ + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + } + ] + }, + "next": { + "type char": [ + { + "ok": true, + "pre": false, + "ms": 36.600000001490116, + "parseMs": 36.20000000298023, + "cpuMs": 40, + "bytes": 1697, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.099999997764826, + "parseMs": 18.800000000745058, + "cpuMs": 40, + "bytes": 1973, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 18.300000000745058, + "parseMs": 18.100000001490116, + "cpuMs": 40, + "bytes": 3408, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.900000002235174, + "parseMs": 19.600000001490116, + "cpuMs": 30, + "bytes": 3801, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.300000000745058, + "parseMs": 20, + "cpuMs": 40, + "bytes": 3891, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 18.800000000745058, + "parseMs": 18.5, + "cpuMs": 40, + "bytes": 3948, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 18.900000002235174, + "parseMs": 18.5, + "cpuMs": 40, + "bytes": 4023, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 14.599999997764826, + "parseMs": 14.399999998509884, + "cpuMs": 50, + "bytes": 4084, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 21.699999999254942, + "parseMs": 21.100000001490116, + "cpuMs": 50, + "bytes": 4074, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.600000001490116, + "parseMs": 19.600000001490116, + "cpuMs": 40, + "bytes": 4077, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 15.899999998509884, + "parseMs": 15.399999998509884, + "cpuMs": 40, + "bytes": 4080, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.199999999254942, + "parseMs": 19.799999997019768, + "cpuMs": 40, + "bytes": 4065, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 29.800000000745058, + "parseMs": 29.5, + "cpuMs": 40, + "bytes": 3924, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 16, + "parseMs": 15.700000002980232, + "cpuMs": 40, + "bytes": 3939, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 26.900000002235174, + "parseMs": 26.400000002235174, + "cpuMs": 40, + "bytes": 3930, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 5.5, + "parseMs": 5.300000000745058, + "cpuMs": 40, + "bytes": 3933, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 17.5, + "parseMs": 17, + "cpuMs": 30, + "bytes": 3918, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 24.5, + "parseMs": 24, + "cpuMs": 50, + "bytes": 3921, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 16.399999998509884, + "parseMs": 15.899999998509884, + "cpuMs": 40, + "bytes": 3924, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 15.199999999254942, + "parseMs": 14.800000000745058, + "cpuMs": 30, + "bytes": 3927, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 16.599999997764826, + "parseMs": 16.199999999254942, + "cpuMs": 30, + "bytes": 3912, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 15.600000001490116, + "parseMs": 15.300000000745058, + "cpuMs": 30, + "bytes": 3915, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 16.699999999254942, + "parseMs": 16.399999998509884, + "cpuMs": 30, + "bytes": 3918, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 12.5, + "parseMs": 12.100000001490116, + "cpuMs": 30, + "bytes": 3921, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 35.69999999925494, + "parseMs": 35.19999999925494, + "cpuMs": 50, + "bytes": 3105, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 18.200000002980232, + "parseMs": 18, + "cpuMs": 40, + "bytes": 3108, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 32.100000001490116, + "parseMs": 31.700000002980232, + "cpuMs": 40, + "bytes": 3090, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 13.400000002235174, + "parseMs": 13, + "cpuMs": 130, + "bytes": 3072, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.899999998509884, + "parseMs": 20.5, + "cpuMs": 70, + "bytes": 3075, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 3.900000002235174, + "parseMs": 3.5, + "cpuMs": 40, + "bytes": 3064, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 26.199999999254942, + "parseMs": 25.899999998509884, + "cpuMs": 40, + "bytes": 3060, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 9.699999999254942, + "parseMs": 9.399999998509884, + "cpuMs": 60, + "bytes": 3049, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 30.299999997019768, + "parseMs": 30, + "cpuMs": 50, + "bytes": 3045, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.800000000745058, + "parseMs": 19.100000001490116, + "cpuMs": 50, + "bytes": 3048, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.199999999254942, + "parseMs": 18.800000000745058, + "cpuMs": 70, + "bytes": 3037, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.800000000745058, + "parseMs": 20.399999998509884, + "cpuMs": 60, + "bytes": 3033, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 32.69999999925494, + "parseMs": 32.29999999701977, + "cpuMs": 60, + "bytes": 3133, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.5, + "parseMs": 20.100000001490116, + "cpuMs": 60, + "bytes": 3129, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 13.800000000745058, + "parseMs": 13.400000002235174, + "cpuMs": 60, + "bytes": 3132, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 14.100000001490116, + "parseMs": 13.800000000745058, + "cpuMs": 50, + "bytes": 3114, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 17.899999998509884, + "parseMs": 17.600000001490116, + "cpuMs": 60, + "bytes": 3117, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 17.900000002235174, + "parseMs": 17.600000001490116, + "cpuMs": 70, + "bytes": 3120, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 18.800000000745058, + "parseMs": 18.5, + "cpuMs": 60, + "bytes": 3102, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 39.900000002235174, + "parseMs": 39.5, + "cpuMs": 60, + "bytes": 4139, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 17.399999998509884, + "parseMs": 16.899999998509884, + "cpuMs": 50, + "bytes": 3108, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 13, + "parseMs": 12.700000002980232, + "cpuMs": 50, + "bytes": 3090, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 22.900000002235174, + "parseMs": 22.600000001490116, + "cpuMs": 60, + "bytes": 3093, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.199999999254942, + "parseMs": 18.899999998509884, + "cpuMs": 50, + "bytes": 3075, + "streaming": true + } + ], + "backspace": [ + { + "ok": true, + "pre": false, + "ms": 19.099999997764826, + "parseMs": 18.699999999254942, + "cpuMs": 50, + "bytes": 4062, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 18.100000001490116, + "parseMs": 17.699999999254942, + "cpuMs": 40, + "bytes": 4047, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 22.699999999254942, + "parseMs": 22.300000000745058, + "cpuMs": 40, + "bytes": 4038, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 13.899999998509884, + "parseMs": 13.599999997764826, + "cpuMs": 50, + "bytes": 4035, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.799999997019768, + "parseMs": 20.299999997019768, + "cpuMs": 40, + "bytes": 3996, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 15.399999998509884, + "parseMs": 15, + "cpuMs": 40, + "bytes": 3993, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 15.899999998509884, + "parseMs": 15.399999998509884, + "cpuMs": 30, + "bytes": 3972, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 17.199999999254942, + "parseMs": 16.699999999254942, + "cpuMs": 40, + "bytes": 3969, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.400000002235174, + "parseMs": 19, + "cpuMs": 50, + "bytes": 3966, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 18.900000002235174, + "parseMs": 18.600000001490116, + "cpuMs": 30, + "bytes": 3945, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.199999999254942, + "parseMs": 19.699999999254942, + "cpuMs": 50, + "bytes": 3942, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.200000002980232, + "parseMs": 19.700000002980232, + "cpuMs": 50, + "bytes": 3939, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 22.100000001490116, + "parseMs": 5.199999999254942, + "cpuMs": 40, + "bytes": 4116, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 9.199999999254942, + "parseMs": 8.799999997019768, + "cpuMs": 40, + "bytes": 4095, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 12.199999999254942, + "parseMs": 11.899999998509884, + "cpuMs": 50, + "bytes": 4095, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 21.399999998509884, + "parseMs": 20.899999998509884, + "cpuMs": 50, + "bytes": 3906, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 14.699999999254942, + "parseMs": 14.199999999254942, + "cpuMs": 30, + "bytes": 3543, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 17.200000002980232, + "parseMs": 16.700000002980232, + "cpuMs": 50, + "bytes": 3159, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 41.899999998509884, + "parseMs": 41.29999999701977, + "cpuMs": 200, + "bytes": 3173, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 33.20000000298023, + "parseMs": 32.900000002235174, + "cpuMs": 60, + "bytes": 3156, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 14.299999997019768, + "parseMs": 14.099999997764826, + "cpuMs": 60, + "bytes": 3153, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 17.200000002980232, + "parseMs": 16.900000002235174, + "cpuMs": 50, + "bytes": 3129, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20.300000000745058, + "parseMs": 19.600000001490116, + "cpuMs": 50, + "bytes": 3126, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 18.5, + "parseMs": 17.800000000745058, + "cpuMs": 50, + "bytes": 3123, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 16.299999997019768, + "parseMs": 16, + "cpuMs": 40, + "bytes": 3030, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 20, + "parseMs": 19.700000002980232, + "cpuMs": 50, + "bytes": 3006, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 17.399999998509884, + "parseMs": 17, + "cpuMs": 40, + "bytes": 3003, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 35.599999997764826, + "parseMs": 35.399999998509884, + "cpuMs": 50, + "bytes": 3000, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 16.599999997764826, + "parseMs": 15.800000000745058, + "cpuMs": 50, + "bytes": 2997, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 13.800000000745058, + "parseMs": 13.400000002235174, + "cpuMs": 40, + "bytes": 2994, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 12.899999998509884, + "parseMs": 12.599999997764826, + "cpuMs": 50, + "bytes": 3201, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 16.899999998509884, + "parseMs": 16.5, + "cpuMs": 50, + "bytes": 3198, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 13.200000002980232, + "parseMs": 12.800000000745058, + "cpuMs": 40, + "bytes": 3195, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 16.799999997019768, + "parseMs": 16.399999998509884, + "cpuMs": 50, + "bytes": 3192, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 17.100000001490116, + "parseMs": 16.699999999254942, + "cpuMs": 50, + "bytes": 3189, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 13.400000002235174, + "parseMs": 13, + "cpuMs": 50, + "bytes": 3165, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 39.899999998509884, + "parseMs": 39.599999997764826, + "cpuMs": 60, + "bytes": 4097, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 22.199999999254942, + "parseMs": 21.899999998509884, + "cpuMs": 70, + "bytes": 3069, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 15.599999997764826, + "parseMs": 15, + "cpuMs": 50, + "bytes": 3045, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 9.5, + "parseMs": 8.899999998509884, + "cpuMs": 50, + "bytes": 3042, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 18.5, + "parseMs": 18.100000001490116, + "cpuMs": 60, + "bytes": 3032, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 9.5, + "parseMs": 8.800000000745058, + "cpuMs": 50, + "bytes": 3015, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.099999997764826, + "parseMs": 18.799999997019768, + "cpuMs": 60, + "bytes": 3005, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 17.5, + "parseMs": 17, + "cpuMs": 60, + "bytes": 2988, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 10.199999999254942, + "parseMs": 9.900000002235174, + "cpuMs": 60, + "bytes": 2985, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 19.199999999254942, + "parseMs": 16.100000001490116, + "cpuMs": 60, + "bytes": 3192, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 16.599999997764826, + "parseMs": 16.199999999254942, + "cpuMs": 50, + "bytes": 3189, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 7.600000001490116, + "parseMs": 7.199999999254942, + "cpuMs": 120, + "bytes": 3186, + "streaming": true + } + ], + "enter (composer)": [ + { + "ok": true, + "pre": false, + "ms": 33.100000001490116, + "parseMs": 32.400000002235174, + "cpuMs": 100, + "bytes": 1964, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 39.80000000074506, + "parseMs": 39.399999998509884, + "cpuMs": 80, + "bytes": 2076, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 29.600000001490116, + "parseMs": 29.100000001490116, + "cpuMs": 80, + "bytes": 2091, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 33.900000002235174, + "parseMs": 33.600000001490116, + "cpuMs": 50, + "bytes": 2104, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 28.699999999254942, + "parseMs": 28.300000000745058, + "cpuMs": 70, + "bytes": 2118, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 34.100000001490116, + "parseMs": 33.30000000074506, + "cpuMs": 70, + "bytes": 2131, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 27.5, + "parseMs": 27.099999997764826, + "cpuMs": 60, + "bytes": 1070, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 27.900000002235174, + "parseMs": 27.5, + "cpuMs": 60, + "bytes": 1075, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 29.100000001490116, + "parseMs": 28.699999999254942, + "cpuMs": 40, + "bytes": 1085, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 22.699999999254942, + "parseMs": 22.299999997019768, + "cpuMs": 50, + "bytes": 2078, + "streaming": true + } + ], + "arrow (model menu)": [ + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 258.29999999701977, + "cpuMs": 1630, + "bytes": 301236, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 175.39999999850988, + "cpuMs": 1830, + "bytes": 308359, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 3.199999999254942, + "cpuMs": 2050, + "bytes": 273511, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 21.900000002235174, + "cpuMs": 2470, + "bytes": 271754, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 237.30000000074506, + "cpuMs": 1910, + "bytes": 216150, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 257.80000000074506, + "cpuMs": 1390, + "bytes": 313110, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 33.70000000298023, + "cpuMs": 1680, + "bytes": 310689, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 154.90000000223517, + "cpuMs": 2020, + "bytes": 271430, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 85.69999999925494, + "cpuMs": 2420, + "bytes": 273818, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 26.699999999254942, + "cpuMs": 1760, + "bytes": 206760, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 309.19999999925494, + "cpuMs": 1330, + "bytes": 313741, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 149.19999999925494, + "cpuMs": 1570, + "bytes": 305195, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 164.79999999701977, + "cpuMs": 1910, + "bytes": 276381, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 235.59999999776483, + "cpuMs": 2400, + "bytes": 271815, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 21.399999998509884, + "cpuMs": 1800, + "bytes": 194397, + "streaming": false + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 55.79999999701977, + "cpuMs": 1360, + "bytes": 313903, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 24.199999999254942, + "cpuMs": 1590, + "bytes": 304655, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 43, + "cpuMs": 1950, + "bytes": 277200, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 110.10000000149012, + "cpuMs": 2570, + "bytes": 272516, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 48.100000001490116, + "cpuMs": 1750, + "bytes": 207568, + "streaming": false + } + ], + "arrow (resume menu)": [ + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + } + ], + "ctrl+o": [ + { + "ok": true, + "pre": false, + "ms": 15.900000002235174, + "parseMs": 15, + "cpuMs": 50, + "bytes": 1302, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 17.400000002235174, + "parseMs": 16.5, + "cpuMs": 50, + "bytes": 1515, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 13.300000000745058, + "parseMs": 12.599999997764826, + "cpuMs": 40, + "bytes": 2974, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 15.399999998509884, + "parseMs": 14.699999999254942, + "cpuMs": 30, + "bytes": 4036, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 22.099999997764826, + "parseMs": 21.5, + "cpuMs": 50, + "bytes": 4126, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 139.19999999925494, + "parseMs": 97, + "cpuMs": 70, + "bytes": 5700, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 136.59999999776483, + "parseMs": 93.39999999850988, + "cpuMs": 90, + "bytes": 5700, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 134.19999999925494, + "parseMs": 92.30000000074506, + "cpuMs": 70, + "bytes": 5682, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 145.40000000223517, + "parseMs": 144.80000000074506, + "cpuMs": 100, + "bytes": 5664, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 122.5, + "parseMs": 121.60000000149012, + "cpuMs": 90, + "bytes": 5682, + "streaming": true + } + ], + "shift+tab": [ + { + "ok": true, + "pre": false, + "ms": 11.199999999254942, + "parseMs": 9, + "cpuMs": 30, + "bytes": 4225, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 204.60000000149012, + "cpuMs": 1780, + "bytes": 181095, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 283.1000000014901, + "cpuMs": 2120, + "bytes": 146301, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 8.699999999254942, + "cpuMs": 2350, + "bytes": 142002, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 4855.400000002235, + "parseMs": 826.4000000022352, + "cpuMs": 2580, + "bytes": 148438, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 40.20000000298023, + "parseMs": 39.70000000298023, + "cpuMs": 40, + "bytes": 1719, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 851, + "cpuMs": 1670, + "bytes": 176116, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 35.30000000074506, + "cpuMs": 1390, + "bytes": 183289, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 67.60000000149012, + "cpuMs": 1810, + "bytes": 150468, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": 5000, + "parseMs": 367.6000000014901, + "cpuMs": 2300, + "bytes": 147863, + "streaming": true + } + ], + "open /model": [ + { + "ok": true, + "pre": false, + "ms": 31.200000002980232, + "parseMs": 25.200000002980232, + "cpuMs": 100, + "bytes": 24082, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 36.899999998509884, + "parseMs": 35.399999998509884, + "cpuMs": 80, + "bytes": 26405, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 24, + "parseMs": 20.599999997764826, + "cpuMs": 70, + "bytes": 24040, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 7.600000001490116, + "parseMs": 6.900000002235174, + "cpuMs": 10, + "bytes": 1651, + "streaming": false + }, + { + "ok": true, + "pre": false, + "ms": 36, + "parseMs": 35.600000001490116, + "cpuMs": 30, + "bytes": 2110, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 39.399999998509884, + "parseMs": 33.899999998509884, + "cpuMs": 40, + "bytes": 42463, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 39, + "parseMs": 33.100000001490116, + "cpuMs": 60, + "bytes": 42532, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 38.099999997764826, + "parseMs": 34.30000000074506, + "cpuMs": 40, + "bytes": 42532, + "streaming": true + } + ], + "open /settings": [ + { + "ok": true, + "pre": false, + "ms": 50.100000001490116, + "parseMs": 43.30000000074506, + "cpuMs": 60, + "bytes": 117510, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 40.100000001490116, + "parseMs": 37.100000001490116, + "cpuMs": 60, + "bytes": 114782, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 40.80000000074506, + "parseMs": 35.30000000074506, + "cpuMs": 40, + "bytes": 114746, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 39.30000000074506, + "parseMs": 37, + "cpuMs": 50, + "bytes": 114728, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 41, + "parseMs": 38.399999998509884, + "cpuMs": 50, + "bytes": 113942, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 42.80000000074506, + "parseMs": 38.399999998509884, + "cpuMs": 60, + "bytes": 116386, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 52, + "parseMs": 47.5, + "cpuMs": 60, + "bytes": 116386, + "streaming": true + }, + { + "ok": true, + "pre": false, + "ms": 43.400000002235174, + "parseMs": 0.6000000014901161, + "cpuMs": 60, + "bytes": 116330, + "streaming": true + } + ], + "scroll (resume page down/up)": [ + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + }, + { + "ok": false, + "pre": false, + "ms": null, + "unsent": true, + "streaming": true + } + ] + } + } + } + }, + "misses": { + "idle": [ + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 0, + "screen": " ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 1, + "screen": " ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 2, + "screen": " ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 3, + "screen": " ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 4, + "screen": " ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 5, + "screen": " ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 6, + "screen": " ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 7, + "screen": " ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 8, + "screen": " ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 9, + "screen": " ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 10, + "screen": " ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 11, + "screen": " ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 12, + "screen": " ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 13, + "screen": " ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 14, + "screen": " ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 15, + "screen": " ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 16, + "screen": " ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 17, + "screen": " ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 18, + "screen": " ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (model menu)", + "index": 19, + "screen": " ❯ ping idle 7 \n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "arrow (resume menu)", + "index": 0, + "screen": "(list not painted within 5000 ms; 20 keys not sent)\n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Resume Conversation │\n│ Loading conversations… │\n│ ↑/↓ select · Enter resume · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n\n\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "scroll (resume page down/up)", + "index": 0, + "screen": "(list not painted within 5000 ms; 10 keys not sent)\n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Resume Conversation │\n│ Loading conversations… │\n│ ↑/↓ select · Enter resume · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n\n\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "restart", + "index": 0, + "screen": "(not back at the empty composer after Escapes; CLI restarted)\n\n Sure. This is a short answer to: ping idle 7\n\n ❯ ping idle 8 \n\n Sure. This is a short answer to: ping idle 8\n\n ❯ ping idle 9 \n\n Sure. This is a short answer to: ping idle 9\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Resume Conversation │\n│ Loading conversations… │\n│ ↑/↓ select · Enter resume · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑12.0k ↓800 · 0% cached · Ctx last 1k\n\n\n\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "ctrl+o", + "index": 0, + "screen": "Profile: BARE\n\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "ctrl+o", + "index": 1, + "screen": "Profile: BARE\n\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "ctrl+o", + "index": 2, + "screen": "Profile: BARE\n\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "ctrl+o", + "index": 3, + "screen": "Profile: BARE\n\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "ctrl+o", + "index": 4, + "screen": "Profile: BARE\n\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "ctrl+o", + "index": 5, + "screen": "Profile: BARE\n\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "ctrl+o", + "index": 6, + "screen": "Profile: BARE\n\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "ctrl+o", + "index": 7, + "screen": "Profile: BARE\n\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "ctrl+o", + "index": 8, + "screen": "Profile: BARE\n\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "cli": "next" + }, + { + "phase": "idle", + "name": "ctrl+o", + "index": 9, + "screen": "Profile: BARE\n\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "cli": "next" + } + ], + "streaming": [ + { + "phase": "streaming", + "name": "arrow (resume menu)", + "index": 0, + "screen": "(list not painted within 5000 ms; 20 keys not sent)\n sw143 sw144 sw145 sw146 sw147 sw148 sw149 sw150 sw151 sw152 sw153 sw154\n sw155 sw156 sw157 sw158 sw159 sw160 sw161 sw162 sw163 sw164 sw165 sw166\n sw167 sw168 sw169 sw170 sw171 sw172 sw173 sw174 sw175 sw176 sw177 sw178\n sw179 sw180 sw181 sw182 sw183 sw184 sw185 sw186 sw187 sw188 sw189 sw190\n sw191 sw192 sw193 sw194 sw195 sw196 sw197 sw198 sw199 sw200 sw201 sw202\n sw203 sw204 sw205 sw206 sw207\n\n\n Generating · 1s (55.0 tok/s)\n ────────────────────────────────────────────────────────────────────────────\n │ queued · after this turn\n │ ping streaming 1\n │ ping streaming 2\n │ ping streaming 3\n │ ping streaming 4\n │ ping streaming 5\n │ ping streaming 6\n │ ping streaming 7\n │ ping streaming 8\n │ ping streaming 9\n ❯ \n ↑ select queued │ ⏎ steer │ Alt+⏎ queue │ Ctrl+O model │ Ctrl+T effort\n\n Bare │ [Q:9] │ mockprov/mock-alpha │ ↑1.2k ↓80 · (3.1t/s) · Ctx 1k", + "cli": "legacy" + }, + { + "phase": "streaming", + "name": "scroll (resume page down/up)", + "index": 0, + "screen": "(list not painted within 5000 ms; 10 keys not sent)\n sw143 sw144 sw145 sw146 sw147 sw148 sw149 sw150 sw151 sw152 sw153 sw154\n sw155 sw156 sw157 sw158 sw159 sw160 sw161 sw162 sw163 sw164 sw165 sw166\n sw167 sw168 sw169 sw170 sw171 sw172 sw173 sw174 sw175 sw176 sw177 sw178\n sw179 sw180 sw181 sw182 sw183 sw184 sw185 sw186 sw187 sw188 sw189 sw190\n sw191 sw192 sw193 sw194 sw195 sw196 sw197 sw198 sw199 sw200 sw201 sw202\n sw203 sw204 sw205 sw206 sw207\n\n\n Generating · 1s (55.0 tok/s)\n ────────────────────────────────────────────────────────────────────────────\n │ queued · after this turn\n │ ping streaming 1\n │ ping streaming 2\n │ ping streaming 3\n │ ping streaming 4\n │ ping streaming 5\n │ ping streaming 6\n │ ping streaming 7\n │ ping streaming 8\n │ ping streaming 9\n ❯ \n ↑ select queued │ ⏎ steer │ Alt+⏎ queue │ Ctrl+O model │ Ctrl+T effort\n\n Bare │ [Q:9] │ mockprov/mock-alpha │ ↑1.2k ↓80 · (3.1t/s) · Ctx 1k", + "cli": "legacy" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 0, + "screen": " sw455 sw456 sw457 sw458 sw459 sw460 sw461 sw462 sw463 sw464 sw465 sw466\n sw467 sw468 sw469 sw470 sw471 sw472 sw473 sw474 sw475 sw476 sw477 sw478\n sw479 sw480 sw481 sw482 sw483 sw484 sw485 sw486 sw487 sw488 sw489 sw490\n sw491 sw492 sw493 sw494 sw495 sw496 sw497 sw498 sw499 sw500 sw501 sw502\n sw503 sw504 sw505 sw506 sw507 sw508 sw509 sw510 sw511 sw512 sw513 sw514\n sw515 sw516 sw517 sw518 sw519 sw520 sw521 sw522 sw523 sw524 sw525 sw526\n sw527 sw528 sw529 sw530 sw531 sw532 sw533 sw534 sw535 sw536 sw537 sw538\n sw539 sw540 sw541 sw542 sw543 sw544 sw545 sw546 sw547 sw548 sw549 sw550\n sw551 sw552 sw553 sw554 sw555 sw556 sw557 sw558 sw559 sw560 sw561 sw562\n sw563 sw564 sw565 sw566 sw567 sw568 sw569 sw570 sw571\n\nGenerating · 11s (~202.7 tok/s)\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 1, + "screen": " sw1030\n sw1031 sw1032 sw1033 sw1034 sw1035 sw1036 sw1037 sw1038 sw1039 sw1040 sw1041\n sw1042\n sw1043 sw1044 sw1045 sw1046 sw1047 sw1048 sw1049 sw1050 sw1051 sw1052 sw1053\n sw1054\n sw1055 sw1056 sw1057 sw1058 sw1059 sw1060 sw1061 sw1062 sw1063 sw1064 sw1065\n sw1066\n sw1067 sw1068 sw1069 sw1070 sw1071 sw1072 sw1073 sw1074 sw1075 sw1076 sw1077\n sw1078\n sw1079 sw1080 sw1081 sw1082 sw1083 sw1084\n\nGenerating · 17s (~168.8 tok/s)\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 2, + "screen": " sw1558\n sw1559 sw1560 sw1561 sw1562 sw1563 sw1564 sw1565 sw1566 sw1567 sw1568 sw1569\n sw1570\n sw1571 sw1572 sw1573 sw1574 sw1575 sw1576 sw1577 sw1578 sw1579 sw1580 sw1581\n sw1582\n sw1583 sw1584 sw1585 sw1586 sw1587 sw1588 sw1589 sw1590 sw1591 sw1592 sw1593\n sw1594\n sw1595 sw1596 sw1597 sw1598 sw1599 sw1600 sw1601 sw1602 sw1603 sw1604 sw1605\n sw1606\n sw1607\n\nGenerating · 22s (~201.7 tok/s)\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 3, + "screen": " sw2074\n sw2075 sw2076 sw2077 sw2078 sw2079 sw2080 sw2081 sw2082 sw2083 sw2084 sw2085\n sw2086\n sw2087 sw2088 sw2089 sw2090 sw2091 sw2092 sw2093 sw2094 sw2095 sw2096 sw2097\n sw2098\n sw2099 sw2100 sw2101 sw2102 sw2103 sw2104 sw2105 sw2106 sw2107 sw2108 sw2109\n sw2110\n sw2111 sw2112 sw2113 sw2114 sw2115 sw2116 sw2117 sw2118 sw2119 sw2120 sw2121\n sw2122\n sw2123 sw2124 sw2125 sw2126 sw2127 sw2128 sw2129\n\nGenerating · 27s (~214.5 tok/s)\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 4, + "screen": " sw2434\n sw2435 sw2436 sw2437 sw2438 sw2439 sw2440 sw2441 sw2442 sw2443 sw2444 sw2445\n sw2446\n sw2447 sw2448 sw2449 sw2450 sw2451 sw2452 sw2453 sw2454 sw2455 sw2456 sw2457\n sw2458\n sw2459 sw2460 sw2461 sw2462 sw2463 sw2464 sw2465 sw2466 sw2467 sw2468 sw2469\n sw2470\n sw2471 sw2472 sw2473 sw2474 sw2475 sw2476 sw2477 sw2478 sw2479 sw2480 sw2481\n sw2482\n sw2483 sw2484 sw2485 sw2486 sw2487 sw2488 sw2489 sw2490 sw2491 sw2492 sw2493\n sw2494\n sw2495 sw2496 sw2497 sw2498 sw2499\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑2.4k ↓160 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 5, + "screen": " sw467 sw468 sw469 sw470 sw471 sw472 sw473 sw474 sw475 sw476 sw477 sw478\n sw479 sw480 sw481 sw482 sw483 sw484 sw485 sw486 sw487 sw488 sw489 sw490\n sw491 sw492 sw493 sw494 sw495 sw496 sw497 sw498 sw499 sw500 sw501 sw502\n sw503 sw504 sw505 sw506 sw507 sw508 sw509 sw510 sw511 sw512 sw513 sw514\n sw515 sw516 sw517 sw518 sw519 sw520 sw521 sw522 sw523 sw524 sw525 sw526\n sw527 sw528 sw529 sw530 sw531 sw532 sw533 sw534 sw535 sw536 sw537 sw538\n sw539 sw540 sw541 sw542 sw543 sw544 sw545 sw546 sw547 sw548 sw549 sw550\n sw551 sw552 sw553 sw554 sw555 sw556 sw557 sw558 sw559 sw560 sw561 sw562\n sw563 sw564 sw565 sw566 sw567 sw568 sw569 sw570 sw571 sw572 sw573 sw574\n sw575 sw576 sw577 sw578 sw579 sw580 sw581 sw582 sw583 sw584 sw585 sw586\n\nGenerating · 6s (~160.5 tok/s)\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑2.4k ↓160 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 6, + "screen": " sw1054\n sw1055 sw1056 sw1057 sw1058 sw1059 sw1060 sw1061 sw1062 sw1063 sw1064 sw1065\n sw1066\n sw1067 sw1068 sw1069 sw1070 sw1071 sw1072 sw1073 sw1074 sw1075 sw1076 sw1077\n sw1078\n sw1079 sw1080 sw1081 sw1082 sw1083 sw1084 sw1085 sw1086 sw1087 sw1088 sw1089\n sw1090\n sw1091 sw1092 sw1093 sw1094 sw1095 sw1096 sw1097 sw1098 sw1099 sw1100 sw1101\n sw1102\n sw1103 sw1104 sw1105 sw1106 sw1107 sw1108\n\nGenerating · 11s (~181.1 tok/s)\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑2.4k ↓160 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 7, + "screen": " sw1558\n sw1559 sw1560 sw1561 sw1562 sw1563 sw1564 sw1565 sw1566 sw1567 sw1568 sw1569\n sw1570\n sw1571 sw1572 sw1573 sw1574 sw1575 sw1576 sw1577 sw1578 sw1579 sw1580 sw1581\n sw1582\n sw1583 sw1584 sw1585 sw1586 sw1587 sw1588 sw1589 sw1590 sw1591 sw1592 sw1593\n sw1594\n sw1595 sw1596 sw1597 sw1598 sw1599 sw1600 sw1601 sw1602 sw1603 sw1604 sw1605\n sw1606\n sw1607 sw1608 sw1609 sw1610 sw1611 sw1612 sw1613 sw1614 sw1615 sw1616\n\nGenerating · 16s (~212.4 tok/s)\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑2.4k ↓160 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 8, + "screen": " sw2086\n sw2087 sw2088 sw2089 sw2090 sw2091 sw2092 sw2093 sw2094 sw2095 sw2096 sw2097\n sw2098\n sw2099 sw2100 sw2101 sw2102 sw2103 sw2104 sw2105 sw2106 sw2107 sw2108 sw2109\n sw2110\n sw2111 sw2112 sw2113 sw2114 sw2115 sw2116 sw2117 sw2118 sw2119 sw2120 sw2121\n sw2122\n sw2123 sw2124 sw2125 sw2126 sw2127 sw2128 sw2129 sw2130 sw2131 sw2132 sw2133\n sw2134\n sw2135 sw2136\n\nGenerating · 21s (~226.8 tok/s)\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑2.4k ↓160 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 9, + "screen": " sw2434\n sw2435 sw2436 sw2437 sw2438 sw2439 sw2440 sw2441 sw2442 sw2443 sw2444 sw2445\n sw2446\n sw2447 sw2448 sw2449 sw2450 sw2451 sw2452 sw2453 sw2454 sw2455 sw2456 sw2457\n sw2458\n sw2459 sw2460 sw2461 sw2462 sw2463 sw2464 sw2465 sw2466 sw2467 sw2468 sw2469\n sw2470\n sw2471 sw2472 sw2473 sw2474 sw2475 sw2476 sw2477 sw2478 sw2479 sw2480 sw2481\n sw2482\n sw2483 sw2484 sw2485 sw2486 sw2487 sw2488 sw2489 sw2490 sw2491 sw2492 sw2493\n sw2494\n sw2495 sw2496 sw2497 sw2498 sw2499\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑3.6k ↓240 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 10, + "screen": " sw479 sw480 sw481 sw482 sw483 sw484 sw485 sw486 sw487 sw488 sw489 sw490\n sw491 sw492 sw493 sw494 sw495 sw496 sw497 sw498 sw499 sw500 sw501 sw502\n sw503 sw504 sw505 sw506 sw507 sw508 sw509 sw510 sw511 sw512 sw513 sw514\n sw515 sw516 sw517 sw518 sw519 sw520 sw521 sw522 sw523 sw524 sw525 sw526\n sw527 sw528 sw529 sw530 sw531 sw532 sw533 sw534 sw535 sw536 sw537 sw538\n sw539 sw540 sw541 sw542 sw543 sw544 sw545 sw546 sw547 sw548 sw549 sw550\n sw551 sw552 sw553 sw554 sw555 sw556 sw557 sw558 sw559 sw560 sw561 sw562\n sw563 sw564 sw565 sw566 sw567 sw568 sw569 sw570 sw571 sw572 sw573 sw574\n sw575 sw576 sw577 sw578 sw579 sw580 sw581 sw582 sw583 sw584 sw585 sw586\n sw587 sw588 sw589 sw590 sw591 sw592 sw593 sw594\n\nGenerating · 6s (~161.0 tok/s)\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑3.6k ↓240 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 11, + "screen": " sw1054\n sw1055 sw1056 sw1057 sw1058 sw1059 sw1060 sw1061 sw1062 sw1063 sw1064 sw1065\n sw1066\n sw1067 sw1068 sw1069 sw1070 sw1071 sw1072 sw1073 sw1074 sw1075 sw1076 sw1077\n sw1078\n sw1079 sw1080 sw1081 sw1082 sw1083 sw1084 sw1085 sw1086 sw1087 sw1088 sw1089\n sw1090\n sw1091 sw1092 sw1093 sw1094 sw1095 sw1096 sw1097 sw1098 sw1099 sw1100 sw1101\n sw1102\n sw1103 sw1104 sw1105 sw1106\n\nGenerating · 11s (~181.4 tok/s)\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑3.6k ↓240 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 12, + "screen": " sw1570\n sw1571 sw1572 sw1573 sw1574 sw1575 sw1576 sw1577 sw1578 sw1579 sw1580 sw1581\n sw1582\n sw1583 sw1584 sw1585 sw1586 sw1587 sw1588 sw1589 sw1590 sw1591 sw1592 sw1593\n sw1594\n sw1595 sw1596 sw1597 sw1598 sw1599 sw1600 sw1601 sw1602 sw1603 sw1604 sw1605\n sw1606\n sw1607 sw1608 sw1609 sw1610 sw1611 sw1612 sw1613 sw1614 sw1615 sw1616 sw1617\n sw1618\n sw1619 sw1620 sw1621 sw1622 sw1623 sw1624 sw1625 sw1626 sw1627\n\nGenerating · 16s (~214.3 tok/s)\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑3.6k ↓240 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 13, + "screen": " sw2086\n sw2087 sw2088 sw2089 sw2090 sw2091 sw2092 sw2093 sw2094 sw2095 sw2096 sw2097\n sw2098\n sw2099 sw2100 sw2101 sw2102 sw2103 sw2104 sw2105 sw2106 sw2107 sw2108 sw2109\n sw2110\n sw2111 sw2112 sw2113 sw2114 sw2115 sw2116 sw2117 sw2118 sw2119 sw2120 sw2121\n sw2122\n sw2123 sw2124 sw2125 sw2126 sw2127 sw2128 sw2129 sw2130 sw2131 sw2132 sw2133\n sw2134\n sw2135 sw2136 sw2137\n\nGenerating · 21s (~226.5 tok/s)\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑3.6k ↓240 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 14, + "screen": " sw2434\n sw2435 sw2436 sw2437 sw2438 sw2439 sw2440 sw2441 sw2442 sw2443 sw2444 sw2445\n sw2446\n sw2447 sw2448 sw2449 sw2450 sw2451 sw2452 sw2453 sw2454 sw2455 sw2456 sw2457\n sw2458\n sw2459 sw2460 sw2461 sw2462 sw2463 sw2464 sw2465 sw2466 sw2467 sw2468 sw2469\n sw2470\n sw2471 sw2472 sw2473 sw2474 sw2475 sw2476 sw2477 sw2478 sw2479 sw2480 sw2481\n sw2482\n sw2483 sw2484 sw2485 sw2486 sw2487 sw2488 sw2489 sw2490 sw2491 sw2492 sw2493\n sw2494\n sw2495 sw2496 sw2497 sw2498 sw2499\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑4.8k ↓320 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 15, + "screen": " sw479 sw480 sw481 sw482 sw483 sw484 sw485 sw486 sw487 sw488 sw489 sw490\n sw491 sw492 sw493 sw494 sw495 sw496 sw497 sw498 sw499 sw500 sw501 sw502\n sw503 sw504 sw505 sw506 sw507 sw508 sw509 sw510 sw511 sw512 sw513 sw514\n sw515 sw516 sw517 sw518 sw519 sw520 sw521 sw522 sw523 sw524 sw525 sw526\n sw527 sw528 sw529 sw530 sw531 sw532 sw533 sw534 sw535 sw536 sw537 sw538\n sw539 sw540 sw541 sw542 sw543 sw544 sw545 sw546 sw547 sw548 sw549 sw550\n sw551 sw552 sw553 sw554 sw555 sw556 sw557 sw558 sw559 sw560 sw561 sw562\n sw563 sw564 sw565 sw566 sw567 sw568 sw569 sw570 sw571 sw572 sw573 sw574\n sw575 sw576 sw577 sw578 sw579 sw580 sw581 sw582 sw583 sw584 sw585 sw586\n sw587 sw588 sw589 sw590 sw591 sw592 sw593 sw594 sw595\n\nGenerating · 6s (~161.7 tok/s)\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑4.8k ↓320 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 16, + "screen": " sw1054\n sw1055 sw1056 sw1057 sw1058 sw1059 sw1060 sw1061 sw1062 sw1063 sw1064 sw1065\n sw1066\n sw1067 sw1068 sw1069 sw1070 sw1071 sw1072 sw1073 sw1074 sw1075 sw1076 sw1077\n sw1078\n sw1079 sw1080 sw1081 sw1082 sw1083 sw1084 sw1085 sw1086 sw1087 sw1088 sw1089\n sw1090\n sw1091 sw1092 sw1093 sw1094 sw1095 sw1096 sw1097 sw1098 sw1099 sw1100 sw1101\n sw1102\n sw1103 sw1104\n\nGenerating · 11s (~181.5 tok/s)\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑4.8k ↓320 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 17, + "screen": " sw1570\n sw1571 sw1572 sw1573 sw1574 sw1575 sw1576 sw1577 sw1578 sw1579 sw1580 sw1581\n sw1582\n sw1583 sw1584 sw1585 sw1586 sw1587 sw1588 sw1589 sw1590 sw1591 sw1592 sw1593\n sw1594\n sw1595 sw1596 sw1597 sw1598 sw1599 sw1600 sw1601 sw1602 sw1603 sw1604 sw1605\n sw1606\n sw1607 sw1608 sw1609 sw1610 sw1611 sw1612 sw1613 sw1614 sw1615 sw1616 sw1617\n sw1618\n sw1619 sw1620 sw1621 sw1622 sw1623 sw1624 sw1625\n\nGenerating · 16s (~215.3 tok/s)\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑4.8k ↓320 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 18, + "screen": " sw2075 sw2076 sw2077 sw2078 sw2079 sw2080 sw2081 sw2082 sw2083 sw2084 sw2085\n sw2086\n sw2087 sw2088 sw2089 sw2090 sw2091 sw2092 sw2093 sw2094 sw2095 sw2096 sw2097\n sw2098\n sw2099 sw2100 sw2101 sw2102 sw2103 sw2104 sw2105 sw2106 sw2107 sw2108 sw2109\n sw2110\n sw2111 sw2112 sw2113 sw2114 sw2115 sw2116 sw2117 sw2118 sw2119 sw2120 sw2121\n sw2122\n sw2123 sw2124 sw2125 sw2126 sw2127 sw2128 sw2129 sw2130 sw2131 sw2132 sw2133\n sw2134\n\nGenerating · 21s (~228.3 tok/s)\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑4.8k ↓320 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (model menu)", + "index": 19, + "screen": " sw2434\n sw2435 sw2436 sw2437 sw2438 sw2439 sw2440 sw2441 sw2442 sw2443 sw2444 sw2445\n sw2446\n sw2447 sw2448 sw2449 sw2450 sw2451 sw2452 sw2453 sw2454 sw2455 sw2456 sw2457\n sw2458\n sw2459 sw2460 sw2461 sw2462 sw2463 sw2464 sw2465 sw2466 sw2467 sw2468 sw2469\n sw2470\n sw2471 sw2472 sw2473 sw2474 sw2475 sw2476 sw2477 sw2478 sw2479 sw2480 sw2481\n sw2482\n sw2483 sw2484 sw2485 sw2486 sw2487 sw2488 sw2489 sw2490 sw2491 sw2492 sw2493\n sw2494\n sw2495 sw2496 sw2497 sw2498 sw2499\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "arrow (resume menu)", + "index": 0, + "screen": "(list not painted within 5000 ms; 20 keys not sent)\n sw2483 sw2484 sw2485 sw2486 sw2487 sw2488 sw2489 sw2490 sw2491 sw2492 sw2493\n sw2494\n sw2495 sw2496 sw2497 sw2498 sw2499\n\n\n sw0 sw1 sw2 sw3 sw4 sw5 sw6 sw7 sw8 sw9 sw10\n sw11 sw12 sw13 sw14 sw15 sw16 sw17 sw18 sw19 sw20 sw21 sw22\n sw23 sw24 sw25 sw26 sw27 sw28 sw29 sw30 sw31 sw32 sw33 sw34\n sw35\n\nGenerating · 0s\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Commands │\n│ › /resume List saved conversations or resume one by ID │\n│ │\n│ ──────────────────────────────────────────────────────────────────────────── │\n│ ↑/↓ select · Enter run · Tab complete · Esc dismiss │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ /resume \nEnter steer │ Alt+Enter follow-up │ /cancel stop\n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "scroll (resume page down/up)", + "index": 0, + "screen": "(list not painted within 5000 ms; 10 keys not sent)\n sw2483 sw2484 sw2485 sw2486 sw2487 sw2488 sw2489 sw2490 sw2491 sw2492 sw2493\n sw2494\n sw2495 sw2496 sw2497 sw2498 sw2499\n\n\n sw0 sw1 sw2 sw3 sw4 sw5 sw6 sw7 sw8 sw9 sw10\n sw11 sw12 sw13 sw14 sw15 sw16 sw17 sw18 sw19 sw20 sw21 sw22\n sw23 sw24 sw25 sw26 sw27 sw28 sw29 sw30 sw31 sw32 sw33 sw34\n sw35\n\nGenerating · 0s\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Commands │\n│ › /resume List saved conversations or resume one by ID │\n│ │\n│ ──────────────────────────────────────────────────────────────────────────── │\n│ ↑/↓ select · Enter run · Tab complete · Esc dismiss │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ /resume \nEnter steer │ Alt+Enter follow-up │ /cancel stop\n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "restart", + "index": 0, + "screen": "(not back at the empty composer after Escapes; CLI restarted)\n sw2483 sw2484 sw2485 sw2486 sw2487 sw2488 sw2489 sw2490 sw2491 sw2492 sw2493\n sw2494\n sw2495 sw2496 sw2497 sw2498 sw2499\n\n\n sw0 sw1 sw2 sw3 sw4 sw5 sw6 sw7 sw8 sw9 sw10\n sw11 sw12 sw13 sw14 sw15 sw16 sw17 sw18 sw19 sw20 sw21 sw22\n sw23 sw24 sw25 sw26 sw27 sw28 sw29 sw30 sw31 sw32 sw33 sw34\n sw35\n\nGenerating · 0s\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Commands │\n│ › /resume List saved conversations or resume one by ID │\n│ │\n│ ──────────────────────────────────────────────────────────────────────────── │\n│ ↑/↓ select · Enter run · Tab complete · Esc dismiss │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ /resume \nEnter steer │ Alt+Enter follow-up │ /cancel stop\n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "shift+tab", + "index": 1, + "screen": " mockprov/mock-alpha (default)\n\n\n ❯ stream a long reply please \n sw863 sw864 sw865 sw866 sw867 sw868 sw869 sw870 sw871 sw872 sw873 sw874\n sw875 sw876 sw877 sw878 sw879 sw880 sw881 sw882 sw883 sw884 sw885 sw886\n sw887 sw888 sw889 sw890 sw891 sw892 sw893 sw894 sw895 sw896 sw897 sw898\n sw899 sw900 sw901 sw902 sw903 sw904 sw905 sw906 sw907 sw908 sw909 sw910\n sw911 sw912 sw913 sw914 sw915 sw916 sw917 sw918 sw919 sw920 sw921 sw922\n sw923 sw924 sw925 sw926 sw927 sw928 sw929 sw930 sw931 sw932 sw933 sw934\n sw935 sw936 sw937 sw938 sw939 sw940 sw941 sw942 sw943 sw944 sw945 sw946\n sw947 sw948 sw949 sw950 sw951 sw952 sw953 sw954 sw955 sw956 sw957 sw958\n sw959 sw960 sw961 sw962 sw963 sw964 sw965 sw966 sw967 sw968 sw969 sw970\n sw971 sw972\n\nGenerating · 9s (~206.4 tok/s)\nCannot switch modes mid-session (tool/context mismatch). Use `/clear` first,\nthen `/plan`.\n────────────────────────────────────────────────────────────────────────────────\n❯ \nEnter steer │ Alt+Enter follow-up │ /cancel stop\n\n Bare │ mockprov/mock-alpha\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "shift+tab", + "index": 2, + "screen": " mockprov/mock-alpha (default)\n\n\n ❯ stream a long reply please \n sw1438\n sw1439 sw1440 sw1441 sw1442 sw1443 sw1444 sw1445 sw1446 sw1447 sw1448 sw1449\n sw1450\n sw1451 sw1452 sw1453 sw1454 sw1455 sw1456 sw1457 sw1458 sw1459 sw1460 sw1461\n sw1462\n sw1463 sw1464 sw1465 sw1466 sw1467 sw1468 sw1469 sw1470 sw1471 sw1472 sw1473\n sw1474\n sw1475 sw1476 sw1477 sw1478 sw1479 sw1480 sw1481 sw1482 sw1483 sw1484 sw1485\n sw1486\n sw1487 sw1488 sw1489 sw1490 sw1491 sw1492\n\nGenerating · 15s (~191.3 tok/s)\nCannot switch modes mid-session (tool/context mismatch). Use `/clear` first,\nthen `/plan`.\n────────────────────────────────────────────────────────────────────────────────\n❯ \nEnter steer │ Alt+Enter follow-up │ /cancel stop\n\n Bare │ mockprov/mock-alpha\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "shift+tab", + "index": 3, + "screen": " mockprov/mock-alpha (default)\n\n\n ❯ stream a long reply please \n sw1942\n sw1943 sw1944 sw1945 sw1946 sw1947 sw1948 sw1949 sw1950 sw1951 sw1952 sw1953\n sw1954\n sw1955 sw1956 sw1957 sw1958 sw1959 sw1960 sw1961 sw1962 sw1963 sw1964 sw1965\n sw1966\n sw1967 sw1968 sw1969 sw1970 sw1971 sw1972 sw1973 sw1974 sw1975 sw1976 sw1977\n sw1978\n sw1979 sw1980 sw1981 sw1982 sw1983 sw1984 sw1985 sw1986 sw1987 sw1988 sw1989\n sw1990\n sw1991 sw1992 sw1993 sw1994 sw1995 sw1996 sw1997 sw1998 sw1999 sw2000\n\nGenerating · 20s (~206.7 tok/s)\nCannot switch modes mid-session (tool/context mismatch). Use `/clear` first,\nthen `/plan`.\n────────────────────────────────────────────────────────────────────────────────\n❯ \nEnter steer │ Alt+Enter follow-up │ /cancel stop\n\n Bare │ mockprov/mock-alpha\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "shift+tab", + "index": 6, + "screen": " sw2494\n sw2495 sw2496 sw2497 sw2498 sw2499\n\n ❯ stream a long reply please \n sw443 sw444 sw445 sw446 sw447 sw448 sw449 sw450 sw451 sw452 sw453 sw454\n sw455 sw456 sw457 sw458 sw459 sw460 sw461 sw462 sw463 sw464 sw465 sw466\n sw467 sw468 sw469 sw470 sw471 sw472 sw473 sw474 sw475 sw476 sw477 sw478\n sw479 sw480 sw481 sw482 sw483 sw484 sw485 sw486 sw487 sw488 sw489 sw490\n sw491 sw492 sw493 sw494 sw495 sw496 sw497 sw498 sw499 sw500 sw501 sw502\n sw503 sw504 sw505 sw506 sw507 sw508 sw509 sw510 sw511 sw512 sw513 sw514\n sw515 sw516 sw517 sw518 sw519 sw520 sw521 sw522 sw523 sw524 sw525 sw526\n sw527 sw528 sw529 sw530 sw531 sw532 sw533 sw534 sw535 sw536 sw537 sw538\n sw539 sw540 sw541 sw542 sw543 sw544 sw545 sw546 sw547 sw548 sw549 sw550\n sw551 sw552 sw553 sw554 sw555 sw556 sw557\n\nGenerating · 5s (~194.0 tok/s)\nCannot switch modes mid-session (tool/context mismatch). Use `/clear` first,\nthen `/plan`.\n────────────────────────────────────────────────────────────────────────────────\n❯ \nEnter steer │ Alt+Enter follow-up │ /cancel stop\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "shift+tab", + "index": 7, + "screen": " sw2494\n sw2495 sw2496 sw2497 sw2498 sw2499\n\n ❯ stream a long reply please \n\n sw1007 sw1008 sw1009 sw1010 sw1011 sw1012 sw1013 sw1014 sw1015 sw1016 sw1017\n sw1018\n sw1019 sw1020 sw1021 sw1022 sw1023 sw1024 sw1025 sw1026 sw1027 sw1028 sw1029\n sw1030\n sw1031 sw1032 sw1033 sw1034 sw1035 sw1036 sw1037 sw1038 sw1039 sw1040 sw1041\n sw1042\n sw1043 sw1044 sw1045 sw1046 sw1047 sw1048 sw1049 sw1050 sw1051 sw1052 sw1053\n sw1054\n sw1055 sw1056 sw1057 sw1058 sw1059 sw1060 sw1061 sw1062 sw1063 sw1064 sw1065\n\nGenerating · 10s (~210.7 tok/s)\nCannot switch modes mid-session (tool/context mismatch). Use `/clear` first,\nthen `/plan`.\n────────────────────────────────────────────────────────────────────────────────\n❯ \nEnter steer │ Alt+Enter follow-up │ /cancel stop\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "shift+tab", + "index": 8, + "screen": " sw2494\n sw2495 sw2496 sw2497 sw2498 sw2499\n\n ❯ stream a long reply please \n sw1534\n sw1535 sw1536 sw1537 sw1538 sw1539 sw1540 sw1541 sw1542 sw1543 sw1544 sw1545\n sw1546\n sw1547 sw1548 sw1549 sw1550 sw1551 sw1552 sw1553 sw1554 sw1555 sw1556 sw1557\n sw1558\n sw1559 sw1560 sw1561 sw1562 sw1563 sw1564 sw1565 sw1566 sw1567 sw1568 sw1569\n sw1570\n sw1571 sw1572 sw1573 sw1574 sw1575 sw1576 sw1577 sw1578 sw1579 sw1580 sw1581\n sw1582\n sw1583 sw1584 sw1585\n\nGenerating · 16s (~191.3 tok/s)\nCannot switch modes mid-session (tool/context mismatch). Use `/clear` first,\nthen `/plan`.\n────────────────────────────────────────────────────────────────────────────────\n❯ \nEnter steer │ Alt+Enter follow-up │ /cancel stop\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + }, + { + "phase": "streaming", + "name": "shift+tab", + "index": 9, + "screen": " sw2494\n sw2495 sw2496 sw2497 sw2498 sw2499\n\n ❯ stream a long reply please \n sw2050\n sw2051 sw2052 sw2053 sw2054 sw2055 sw2056 sw2057 sw2058 sw2059 sw2060 sw2061\n sw2062\n sw2063 sw2064 sw2065 sw2066 sw2067 sw2068 sw2069 sw2070 sw2071 sw2072 sw2073\n sw2074\n sw2075 sw2076 sw2077 sw2078 sw2079 sw2080 sw2081 sw2082 sw2083 sw2084 sw2085\n sw2086\n sw2087 sw2088 sw2089 sw2090 sw2091 sw2092 sw2093 sw2094 sw2095 sw2096 sw2097\n sw2098\n sw2099 sw2100 sw2101 sw2102 sw2103 sw2104 sw2105 sw2106\n\nGenerating · 21s (~203.6 tok/s)\nCannot switch modes mid-session (tool/context mismatch). Use `/clear` first,\nthen `/plan`.\n────────────────────────────────────────────────────────────────────────────────\n❯ \nEnter steer │ Alt+Enter follow-up │ /cancel stop\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · 3.2t/s · 0% cached · Ctx last 1k\n", + "cli": "next" + } + ] + }, + "shots": [ + { + "step": "01-startup", + "legacy": "report/shots/80x24/legacy-01-startup.png", + "next": "report/shots/80x24/next-01-startup.png", + "diffFile": "report/shots/80x24/diff-01-startup.png", + "diff": { + "count": 12445, + "total": 258816, + "sizeA": [674, 384], + "sizeB": [674, 384] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": "Profile: bare", + "next": "Profile: BARE" + }, + { + "row": 2, + "legacy": " ▌ term² BARE ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒", + "next": "▌ term² BARE ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒" + }, + { + "row": 3, + "legacy": " mockprov/mock-alpha (default)", + "next": " mockprov/mock-alpha (default)" + }, + { + "row": 5, + "legacy": "", + "next": "────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 6, + "legacy": "", + "next": "❯ " + }, + { + "row": 7, + "legacy": "", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history" + }, + { + "row": 8, + "legacy": " ────────────────────────────────────────────────────────────────────────────", + "next": "" + }, + { + "row": 9, + "legacy": " ❯ ", + "next": " Bare │ mockprov/mock-alpha" + }, + { + "row": 10, + "legacy": " / commands │ @ paths │ ! shell │ Shift+Tab plan", + "next": "" + }, + { + "row": 12, + "legacy": " Bare │ mockprov/mock-alpha", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": "Profile: bare\n\n ▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n\n\n\n ────────────────────────────────────────────────────────────────────────────\n ❯ \n / commands │ @ paths │ ! shell │ Shift+Tab plan\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n", + "next": "Profile: BARE\n\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + } + }, + { + "step": "02-composer-typed", + "legacy": "report/shots/80x24/legacy-02-composer-typed.png", + "next": "report/shots/80x24/next-02-composer-typed.png", + "diffFile": "report/shots/80x24/diff-02-composer-typed.png", + "diff": { + "count": 12146, + "total": 258816, + "sizeA": [674, 384], + "sizeB": [674, 384] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": "Profile: bare", + "next": "Profile: BARE" + }, + { + "row": 2, + "legacy": " ▌ term² BARE ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒", + "next": "▌ term² BARE ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒" + }, + { + "row": 3, + "legacy": " mockprov/mock-alpha (default)", + "next": " mockprov/mock-alpha (default)" + }, + { + "row": 5, + "legacy": "", + "next": "────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 6, + "legacy": "", + "next": "❯ show markdown please " + }, + { + "row": 7, + "legacy": "", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history" + }, + { + "row": 8, + "legacy": " ────────────────────────────────────────────────────────────────────────────", + "next": "" + }, + { + "row": 9, + "legacy": " ❯ show markdown please ", + "next": " Bare │ mockprov/mock-alpha" + }, + { + "row": 11, + "legacy": " Bare │ mockprov/mock-alpha", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": "Profile: bare\n\n ▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n\n\n\n ────────────────────────────────────────────────────────────────────────────\n ❯ show markdown please \n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n", + "next": "Profile: BARE\n\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n────────────────────────────────────────────────────────────────────────────────\n❯ show markdown please \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + } + }, + { + "step": "03-turn-markdown", + "legacy": "report/shots/80x24/legacy-03-turn-markdown.png", + "next": "report/shots/80x24/next-03-turn-markdown.png", + "diffFile": "report/shots/80x24/diff-03-turn-markdown.png", + "diff": { + "count": 30833, + "total": 258816, + "sizeA": [674, 384], + "sizeB": [674, 384] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": "", + "next": "▌ term² BARE ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒" + }, + { + "row": 1, + "legacy": "", + "next": " mockprov/mock-alpha (default)" + }, + { + "row": 2, + "legacy": " ❯ show markdown please ", + "next": "" + }, + { + "row": 4, + "legacy": " ## Plan", + "next": " ❯ show markdown please " + }, + { + "row": 6, + "legacy": " • Read notes.txt", + "next": " ## Plan" + }, + { + "row": 7, + "legacy": " • Summarise it", + "next": "" + }, + { + "row": 8, + "legacy": "", + "next": " • Read notes.txt" + }, + { + "row": 9, + "legacy": " ╭──────────────────────────────────────────────────────────────────────────╮", + "next": " • Summarise it" + }, + { + "row": 10, + "legacy": " │ export function main() { │", + "next": "" + }, + { + "row": 11, + "legacy": " │ return 42; │", + "next": " ╭──────────────────────────────────────────────────────────────────────────╮" + }, + { + "row": 12, + "legacy": " │ } │", + "next": " │ export function main() { │" + }, + { + "row": 13, + "legacy": " ╰──────────────────────────────────────────────────────────────────────────╯", + "next": " │ return 42; │" + }, + { + "row": 14, + "legacy": "", + "next": " │ } │" + }, + { + "row": 15, + "legacy": " That is all.", + "next": " ╰──────────────────────────────────────────────────────────────────────────╯" + }, + { + "row": 17, + "legacy": "", + "next": " That is all." + }, + { + "row": 18, + "legacy": " ────────────────────────────────────────────────────────────────────────────", + "next": "────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 19, + "legacy": " ❯ ", + "next": "❯ " + }, + { + "row": 20, + "legacy": " / commands │ @ paths │ ! shell │ Shift+Tab plan", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history" + }, + { + "row": 22, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · 0% cached · Ctx last 1k" + } + ], + "notes": [], + "text": { + "legacy": "\n\n ❯ show markdown please \n\n ## Plan\n\n • Read notes.txt\n • Summarise it\n\n ╭──────────────────────────────────────────────────────────────────────────╮\n │ export function main() { │\n │ return 42; │\n │ } │\n ╰──────────────────────────────────────────────────────────────────────────╯\n\n That is all.\n\n\n ────────────────────────────────────────────────────────────────────────────\n ❯ \n / commands │ @ paths │ ! shell │ Shift+Tab plan\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k\n", + "next": "▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n\n ❯ show markdown please \n\n ## Plan\n\n • Read notes.txt\n • Summarise it\n\n ╭──────────────────────────────────────────────────────────────────────────╮\n │ export function main() { │\n │ return 42; │\n │ } │\n ╰──────────────────────────────────────────────────────────────────────────╯\n\n That is all.\n────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · 0% cached · Ctx last 1k\n" + } + }, + { + "step": "04-turn-tool-call", + "legacy": "report/shots/80x24/legacy-04-turn-tool-call.png", + "next": "report/shots/80x24/next-04-turn-tool-call.png", + "diffFile": "report/shots/80x24/diff-04-turn-tool-call.png", + "diff": { + "count": 33520, + "total": 258816, + "sizeA": [674, 384], + "sizeB": [674, 384] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " ╭──────────────────────────────────────────────────────────────────────────╮", + "next": " ## Plan" + }, + { + "row": 1, + "legacy": " │ export function main() { │", + "next": "" + }, + { + "row": 2, + "legacy": " │ return 42; │", + "next": " • Read notes.txt" + }, + { + "row": 3, + "legacy": " │ } │", + "next": " • Summarise it" + }, + { + "row": 4, + "legacy": " ╰──────────────────────────────────────────────────────────────────────────╯", + "next": "" + }, + { + "row": 5, + "legacy": "", + "next": " ╭──────────────────────────────────────────────────────────────────────────╮" + }, + { + "row": 6, + "legacy": " That is all.", + "next": " │ export function main() { │" + }, + { + "row": 7, + "legacy": "", + "next": " │ return 42; │" + }, + { + "row": 8, + "legacy": "", + "next": " │ } │" + }, + { + "row": 9, + "legacy": " ❯ list the files please ", + "next": " ╰──────────────────────────────────────────────────────────────────────────╯" + }, + { + "row": 11, + "legacy": " ✓ ls (▒▒▒▒)", + "next": " That is all." + }, + { + "row": 13, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": " ❯ list the files please " + }, + { + "row": 15, + "legacy": "", + "next": " ✓ Shell command (▒▒▒▒)" + }, + { + "row": 16, + "legacy": " ────────────────────────────────────────────────────────────────────────────", + "next": "" + }, + { + "row": 17, + "legacy": " ❯ ", + "next": " Done. The command finished; the workspace has README.md, notes.txt and src/." + }, + { + "row": 18, + "legacy": " / commands │ @ paths │ ! shell │ Shift+Tab plan", + "next": "────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 19, + "legacy": "", + "next": "❯ " + }, + { + "row": 20, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history" + }, + { + "row": 22, + "legacy": "", + "next": " Bare │ mockprov/mock-alpha │ ↑3.6k ↓240 · 0% cached · Ctx last 1k" + } + ], + "notes": [], + "text": { + "legacy": " ╭──────────────────────────────────────────────────────────────────────────╮\n │ export function main() { │\n │ return 42; │\n │ } │\n ╰──────────────────────────────────────────────────────────────────────────╯\n\n That is all.\n\n\n ❯ list the files please \n\n ✓ ls (17ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ────────────────────────────────────────────────────────────────────────────\n ❯ \n / commands │ @ paths │ ! shell │ Shift+Tab plan\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k\n\n\n", + "next": " ## Plan\n\n • Read notes.txt\n • Summarise it\n\n ╭──────────────────────────────────────────────────────────────────────────╮\n │ export function main() { │\n │ return 42; │\n │ } │\n ╰──────────────────────────────────────────────────────────────────────────╯\n\n That is all.\n\n ❯ list the files please \n\n ✓ Shell command (14ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history\n\n Bare │ mockprov/mock-alpha │ ↑3.6k ↓240 · 0% cached · Ctx last 1k\n" + } + }, + { + "step": "05-approval-prompt", + "legacy": "report/shots/80x24/legacy-05-approval-prompt.png", + "next": "report/shots/80x24/next-05-approval-prompt.png", + "diffFile": "report/shots/80x24/diff-05-approval-prompt.png", + "diff": { + "count": 30864, + "total": 258816, + "sizeA": [674, 384], + "sizeB": [674, 384] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " ❯ create a file please ", + "next": " touch created-by-walk.txt" + }, + { + "row": 2, + "legacy": "", + "next": "Running tools · ▒▒" + }, + { + "row": 3, + "legacy": "", + "next": "╭──────────────────────────────────────────────────────────────────────────────╮" + }, + { + "row": 4, + "legacy": " ────────────────────────────────────────────────────────────────────────────", + "next": "│ Allow this action? │" + }, + { + "row": 5, + "legacy": " Agent wants to run: shell", + "next": "│ shell (this call only) │" + }, + { + "row": 6, + "legacy": "", + "next": "│ Owner: turn-3 │" + }, + { + "row": 7, + "legacy": " touch created-by-walk.txt", + "next": "│ {\"command\":\"touch │" + }, + { + "row": 8, + "legacy": "", + "next": "│ created-by-walk.txt\",\"sandbox\":\"default\",\"background\":false} │" + }, + { + "row": 9, + "legacy": " Allow this action?", + "next": "│ { │" + }, + { + "row": 10, + "legacy": "", + "next": "│ \"command\": \"touch created-by-walk.txt\", │" + }, + { + "row": 11, + "legacy": " ❯ 1. Allow once", + "next": "│ \"sandbox\": \"default\", │" + }, + { + "row": 12, + "legacy": " 2. Deny", + "next": "│ \"background\": false │" + }, + { + "row": 13, + "legacy": "", + "next": "│ } │" + }, + { + "row": 14, + "legacy": " Allow once", + "next": "│ ❯ 1. Allow once │" + }, + { + "row": 15, + "legacy": "", + "next": "│ 2. Deny │" + }, + { + "row": 16, + "legacy": " Allow this tool call.", + "next": "│ 3. Deny without reason │" + }, + { + "row": 17, + "legacy": "", + "next": "│ Ctrl+G return to composer │" + }, + { + "row": 18, + "legacy": " ↑↓ navigate │ 1 allow once │ y/n answer │ ⏎ select │ Esc interrupts the ", + "next": "│ y allow once · n deny · ↑/↓ select · Enter choose · Esc cancel │" + }, + { + "row": 19, + "legacy": " turn", + "next": "╰──────────────────────────────────────────────────────────────────────────────╯" + }, + { + "row": 20, + "legacy": "", + "next": "────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 21, + "legacy": "", + "next": "❯ " + }, + { + "row": 22, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + }, + { + "row": 23, + "legacy": "", + "next": " Bare │ mockprov/mock-alpha │ ↑4.8k ↓320 · 0% cached · Ctx last 1k" + } + ], + "notes": [], + "text": { + "legacy": " ❯ create a file please \n\n\n\n ────────────────────────────────────────────────────────────────────────────\n Agent wants to run: shell\n\n touch created-by-walk.txt\n\n Allow this action?\n\n ❯ 1. Allow once\n 2. Deny\n\n Allow once\n\n Allow this tool call.\n\n ↑↓ navigate │ 1 allow once │ y/n answer │ ⏎ select │ Esc interrupts the \n turn\n\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k\n", + "next": " touch created-by-walk.txt\n\nRunning tools · 0s\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Allow this action? │\n│ shell (this call only) │\n│ Owner: turn-3 │\n│ {\"command\":\"touch │\n│ created-by-walk.txt\",\"sandbox\":\"default\",\"background\":false} │\n│ { │\n│ \"command\": \"touch created-by-walk.txt\", │\n│ \"sandbox\": \"default\", │\n│ \"background\": false │\n│ } │\n│ ❯ 1. Allow once │\n│ 2. Deny │\n│ 3. Deny without reason │\n│ Ctrl+G return to composer │\n│ y allow once · n deny · ↑/↓ select · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑4.8k ↓320 · 0% cached · Ctx last 1k" + } + }, + { + "step": "06-approval-approved", + "legacy": "report/shots/80x24/legacy-06-approval-approved.png", + "next": "report/shots/80x24/next-06-approval-approved.png", + "diffFile": "report/shots/80x24/diff-06-approval-approved.png", + "diff": { + "count": 36907, + "total": 258816, + "sizeA": [674, 384], + "sizeB": [674, 384] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " ❯ create a file please ", + "next": " ╭──────────────────────────────────────────────────────────────────────────╮" + }, + { + "row": 1, + "legacy": "", + "next": " │ export function main() { │" + }, + { + "row": 2, + "legacy": " ✓ touch created-by-walk.txt (▒▒▒)", + "next": " │ return 42; │" + }, + { + "row": 3, + "legacy": "", + "next": " │ } │" + }, + { + "row": 4, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": " ╰──────────────────────────────────────────────────────────────────────────╯" + }, + { + "row": 6, + "legacy": "", + "next": " That is all." + }, + { + "row": 7, + "legacy": " ────────────────────────────────────────────────────────────────────────────", + "next": "" + }, + { + "row": 8, + "legacy": " ❯ ", + "next": " ❯ list the files please " + }, + { + "row": 9, + "legacy": " / commands │ @ paths │ ! shell │ Shift+Tab plan", + "next": "" + }, + { + "row": 10, + "legacy": "", + "next": " ✓ Shell command (▒▒▒▒)" + }, + { + "row": 11, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + }, + { + "row": 12, + "legacy": "", + "next": " Done. The command finished; the workspace has README.md, notes.txt and src/." + }, + { + "row": 14, + "legacy": "", + "next": " ❯ create a file please " + }, + { + "row": 16, + "legacy": "", + "next": " ✓ Shell command (▒▒▒)" + }, + { + "row": 18, + "legacy": "", + "next": " Done. The command finished; the workspace has README.md, notes.txt and src/." + }, + { + "row": 19, + "legacy": "", + "next": "────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 20, + "legacy": "", + "next": "❯ " + }, + { + "row": 21, + "legacy": "", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history" + }, + { + "row": 23, + "legacy": "", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + } + ], + "notes": [], + "text": { + "legacy": " ❯ create a file please \n\n ✓ touch created-by-walk.txt (6ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ────────────────────────────────────────────────────────────────────────────\n ❯ \n / commands │ @ paths │ ! shell │ Shift+Tab plan\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k\n\n\n\n\n\n\n\n\n\n\n\n", + "next": " ╭──────────────────────────────────────────────────────────────────────────╮\n │ export function main() { │\n │ return 42; │\n │ } │\n ╰──────────────────────────────────────────────────────────────────────────╯\n\n That is all.\n\n ❯ list the files please \n\n ✓ Shell command (14ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n ❯ create a file please \n\n ✓ Shell command (9ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history\n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + } + }, + { + "step": "07-slash-menu", + "legacy": "report/shots/80x24/legacy-07-slash-menu.png", + "next": "report/shots/80x24/next-07-slash-menu.png", + "diffFile": "report/shots/80x24/diff-07-slash-menu.png", + "diff": { + "count": 52553, + "total": 258816, + "sizeA": [674, 384], + "sizeB": [674, 384] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " Filter: ", + "next": " ✓ Shell command (▒▒▒)" + }, + { + "row": 1, + "legacy": " ╭──────────────────────────────────────────────────────────────────────────╮", + "next": "" + }, + { + "row": 2, + "legacy": " │ Commands │", + "next": "╭──────────────────────────────────────────────────────────────────────────────╮" + }, + { + "row": 3, + "legacy": " │ ❯ /model - Choose or set the AI model (Ctrl+O; use /model ┃ │", + "next": "│ Commands │" + }, + { + "row": 4, + "legacy": " │ ) ┃ │", + "next": "│ › /help Show commands and keyboard shortcuts │" + }, + { + "row": 5, + "legacy": " │ /effort - Choose the model reasoning effort (Ctrl+T) ┃ │", + "next": "│ /providers List configured providers and their status │" + }, + { + "row": 6, + "legacy": " │ /clear - Start a new conversation ┃ │", + "next": "│ /model Choose or set the model (/model /) │" + }, + { + "row": 7, + "legacy": " │ /goal - Inspect or update the durable session goal; /clear ┃ │", + "next": "│ /effort Set the reasoning effort │" + }, + { + "row": 8, + "legacy": " │ retains it │ │", + "next": "│ /profile Switch the active profile │" + }, + { + "row": 9, + "legacy": " │ /copy - Copy an assistant response (latest by default; use │ │", + "next": "│ /settings Show or change settings │" + }, + { + "row": 10, + "legacy": " │ /copy N to count backward) │ │", + "next": "│ /auto-approve Set tool auto-approval (off, advisory, auto, always) │" + }, + { + "row": 11, + "legacy": " │ /usage - Show token usage for the current session │ │", + "next": "│ /sandbox Toggle shell sandboxing (preference only here) │" + }, + { + "row": 12, + "legacy": " │ /resume - Browse saved conversations or resume one by ID │ │", + "next": "│ /resume List saved conversations or resume one by ID │" + }, + { + "row": 13, + "legacy": " │ /rewind - Rewind to a user turn and put it back in the input │ │", + "next": "│ /clear Start a new conversation │" + }, + { + "row": 14, + "legacy": " │ box │ │", + "next": "│ │" + }, + { + "row": 15, + "legacy": " │ /undo - Choose a user turn to remove and return to the input │ │", + "next": "│ ──────────────────────────────────────────────────────────────────────────── │" + }, + { + "row": 16, + "legacy": " │ (same options as /rewind) │ │", + "next": "│ ↑/↓ select · Enter run · Tab complete · Esc dismiss │" + }, + { + "row": 17, + "legacy": " │ /retry - Resend the last user turn, or choose a turn to resend│ │", + "next": "╰──────────────────────────────────────────────────────────────────────────────╯" + }, + { + "row": 18, + "legacy": " │ │", + "next": "────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 19, + "legacy": " │ ──────────────────────────────────────────────────────────────────────── │", + "next": "❯ / " + }, + { + "row": 20, + "legacy": " │ ↑↓ navigate │ ⏎ run │ Tab complete │ Esc cancel │", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history" + }, + { + "row": 21, + "legacy": " ╰──────────────────────────────────────────────────────────────────────────╯", + "next": "" + }, + { + "row": 22, + "legacy": "", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + }, + { + "row": 23, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": " Filter: \n ╭──────────────────────────────────────────────────────────────────────────╮\n │ Commands │\n │ ❯ /model - Choose or set the AI model (Ctrl+O; use /model ┃ │\n │ ) ┃ │\n │ /effort - Choose the model reasoning effort (Ctrl+T) ┃ │\n │ /clear - Start a new conversation ┃ │\n │ /goal - Inspect or update the durable session goal; /clear ┃ │\n │ retains it │ │\n │ /copy - Copy an assistant response (latest by default; use │ │\n │ /copy N to count backward) │ │\n │ /usage - Show token usage for the current session │ │\n │ /resume - Browse saved conversations or resume one by ID │ │\n │ /rewind - Rewind to a user turn and put it back in the input │ │\n │ box │ │\n │ /undo - Choose a user turn to remove and return to the input │ │\n │ (same options as /rewind) │ │\n │ /retry - Resend the last user turn, or choose a turn to resend│ │\n │ │\n │ ──────────────────────────────────────────────────────────────────────── │\n │ ↑↓ navigate │ ⏎ run │ Tab complete │ Esc cancel │\n ╰──────────────────────────────────────────────────────────────────────────╯\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": " ✓ Shell command (9ms)\n\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Commands │\n│ › /help Show commands and keyboard shortcuts │\n│ /providers List configured providers and their status │\n│ /model Choose or set the model (/model /) │\n│ /effort Set the reasoning effort │\n│ /profile Switch the active profile │\n│ /settings Show or change settings │\n│ /auto-approve Set tool auto-approval (off, advisory, auto, always) │\n│ /sandbox Toggle shell sandboxing (preference only here) │\n│ /resume List saved conversations or resume one by ID │\n│ /clear Start a new conversation │\n│ │\n│ ──────────────────────────────────────────────────────────────────────────── │\n│ ↑/↓ select · Enter run · Tab complete · Esc dismiss │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ / \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history\n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n" + } + }, + { + "step": "08-slash-menu-closed", + "legacy": "report/shots/80x24/legacy-08-slash-menu-closed.png", + "next": "report/shots/80x24/next-08-slash-menu-closed.png", + "diffFile": "report/shots/80x24/diff-08-slash-menu-closed.png", + "diff": { + "count": 28274, + "total": 258816, + "sizeA": [674, 384], + "sizeB": [674, 384] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " ╰──────────────────────────────────────────────────────────────────────────╯", + "next": " ✓ Shell command (▒▒▒)" + }, + { + "row": 2, + "legacy": " That is all.", + "next": "────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 3, + "legacy": "", + "next": "❯ " + }, + { + "row": 4, + "legacy": "", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history" + }, + { + "row": 5, + "legacy": " ❯ list the files please ", + "next": "" + }, + { + "row": 6, + "legacy": "", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + }, + { + "row": 7, + "legacy": " ✓ ls (▒▒▒▒)", + "next": "" + }, + { + "row": 9, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "" + }, + { + "row": 12, + "legacy": " ❯ create a file please ", + "next": "" + }, + { + "row": 14, + "legacy": " ✓ touch created-by-walk.txt (▒▒▒)", + "next": "" + }, + { + "row": 16, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "" + }, + { + "row": 19, + "legacy": " ────────────────────────────────────────────────────────────────────────────", + "next": "" + }, + { + "row": 20, + "legacy": " ❯ ", + "next": "" + }, + { + "row": 21, + "legacy": " / commands │ @ paths │ ! shell │ Shift+Tab plan", + "next": "" + }, + { + "row": 23, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": " ╰──────────────────────────────────────────────────────────────────────────╯\n\n That is all.\n\n\n ❯ list the files please \n\n ✓ ls (17ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ❯ create a file please \n\n ✓ touch created-by-walk.txt (6ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ────────────────────────────────────────────────────────────────────────────\n ❯ \n / commands │ @ paths │ ! shell │ Shift+Tab plan\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": " ✓ Shell command (9ms)\n\n────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history\n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + } + }, + { + "step": "09-path-menu", + "legacy": "report/shots/80x24/legacy-09-path-menu.png", + "next": "report/shots/80x24/next-09-path-menu.png", + "diffFile": "report/shots/80x24/diff-09-path-menu.png", + "diff": { + "count": 29134, + "total": 258816, + "sizeA": [674, 384], + "sizeB": [674, 384] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": "", + "next": " ✓ Shell command (▒▒▒)" + }, + { + "row": 1, + "legacy": " ✓ ls (▒▒▒▒)", + "next": "" + }, + { + "row": 2, + "legacy": "", + "next": "› created-by-walk.txt" + }, + { + "row": 3, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": " notes.txt" + }, + { + "row": 4, + "legacy": "", + "next": " README.md" + }, + { + "row": 5, + "legacy": "", + "next": " src/" + }, + { + "row": 6, + "legacy": " ❯ create a file please ", + "next": " src/main.js" + }, + { + "row": 7, + "legacy": "", + "next": "↑/↓ select · Enter insert · Tab insert without space · Esc dismiss" + }, + { + "row": 8, + "legacy": "", + "next": "────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 9, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "❯ @ " + }, + { + "row": 10, + "legacy": "", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history" + }, + { + "row": 12, + "legacy": " ────────────────────────────────────────────────────────────────────────────", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + }, + { + "row": 13, + "legacy": " Filter: ", + "next": "" + }, + { + "row": 14, + "legacy": " ╭──────────────────────────────────────────────────────────────────────────╮", + "next": "" + }, + { + "row": 15, + "legacy": " │ ❯ src/ │", + "next": "" + }, + { + "row": 16, + "legacy": " │ notes.txt │", + "next": "" + }, + { + "row": 17, + "legacy": " │ README.md │", + "next": "" + }, + { + "row": 18, + "legacy": " │ src/main.js │", + "next": "" + }, + { + "row": 19, + "legacy": " ╰──────────────────────────────────────────────────────────────────────────╯", + "next": "" + }, + { + "row": 20, + "legacy": " ↑↓ navigate │ ⏎ insert │ Tab insert w/o space │ Esc cancel", + "next": "" + }, + { + "row": 22, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": "\n ✓ ls (17ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ❯ create a file please \n\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ────────────────────────────────────────────────────────────────────────────\n Filter: \n ╭──────────────────────────────────────────────────────────────────────────╮\n │ ❯ src/ │\n │ notes.txt │\n │ README.md │\n │ src/main.js │\n ╰──────────────────────────────────────────────────────────────────────────╯\n ↑↓ navigate │ ⏎ insert │ Tab insert w/o space │ Esc cancel\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k\n", + "next": " ✓ Shell command (9ms)\n\n› created-by-walk.txt\n notes.txt\n README.md\n src/\n src/main.js\n↑/↓ select · Enter insert · Tab insert without space · Esc dismiss\n────────────────────────────────────────────────────────────────────────────────\n❯ @ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history\n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n\n\n\n\n\n\n\n\n\n\n" + } + }, + { + "step": "10-path-menu-closed", + "legacy": "report/shots/80x24/legacy-10-path-menu-closed.png", + "next": "report/shots/80x24/next-10-path-menu-closed.png", + "diffFile": "report/shots/80x24/diff-10-path-menu-closed.png", + "diff": { + "count": 20408, + "total": 258816, + "sizeA": [674, 384], + "sizeB": [674, 384] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": "", + "next": " ✓ Shell command (▒▒▒)" + }, + { + "row": 1, + "legacy": " ✓ ls (▒▒▒▒)", + "next": "" + }, + { + "row": 2, + "legacy": "", + "next": "────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 3, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "❯ " + }, + { + "row": 4, + "legacy": "", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history" + }, + { + "row": 6, + "legacy": " ❯ create a file please ", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + }, + { + "row": 9, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "" + }, + { + "row": 12, + "legacy": " ────────────────────────────────────────────────────────────────────────────", + "next": "" + }, + { + "row": 13, + "legacy": " ❯ ", + "next": "" + }, + { + "row": 14, + "legacy": " / commands │ @ paths │ ! shell │ Shift+Tab plan", + "next": "" + }, + { + "row": 16, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": "\n ✓ ls (17ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ❯ create a file please \n\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ────────────────────────────────────────────────────────────────────────────\n ❯ \n / commands │ @ paths │ ! shell │ Shift+Tab plan\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k\n\n\n\n\n\n\n", + "next": " ✓ Shell command (9ms)\n\n────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history\n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + } + }, + { + "step": "11-menu-model", + "legacy": "report/shots/80x24/legacy-11-menu-model.png", + "next": "report/shots/80x24/next-11-menu-model.png", + "diffFile": "report/shots/80x24/diff-11-menu-model.png", + "diff": { + "count": 34999, + "total": 258816, + "sizeA": [674, 384], + "sizeB": [674, 384] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " ✓ ls (▒▒▒▒)", + "next": " ✓ Shell command (▒▒▒)" + }, + { + "row": 2, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "╭──────────────────────────────────────────────────────────────────────────────╮" + }, + { + "row": 3, + "legacy": "", + "next": "│ Choose a model │" + }, + { + "row": 4, + "legacy": "", + "next": "│ Favorites │ Nicknames │ All │" + }, + { + "row": 5, + "legacy": " ❯ create a file please ", + "next": "│ Filter: type to filter │" + }, + { + "row": 6, + "legacy": "", + "next": "│ No matching models. │" + }, + { + "row": 7, + "legacy": "", + "next": "│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │" + }, + { + "row": 8, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "╰──────────────────────────────────────────────────────────────────────────────╯" + }, + { + "row": 9, + "legacy": "", + "next": "────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 10, + "legacy": "", + "next": "❯ " + }, + { + "row": 11, + "legacy": " ────────────────────────────────────────────────────────────────────────────", + "next": "" + }, + { + "row": 12, + "legacy": " Filter: ", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + }, + { + "row": 13, + "legacy": " Favorites │ Nicknames │ All ", + "next": "" + }, + { + "row": 14, + "legacy": " ╭──────────────────────────────────────────────────────────────────────────╮", + "next": "" + }, + { + "row": 15, + "legacy": " │ Select model │", + "next": "" + }, + { + "row": 16, + "legacy": " │ mockprov │ ❯ mock-alpha (current) │", + "next": "" + }, + { + "row": 17, + "legacy": " │ │ mock-beta │", + "next": "" + }, + { + "row": 18, + "legacy": " ╰──────────────────────────────────────────────────────────────────────────╯", + "next": "" + }, + { + "row": 19, + "legacy": " ↑↓ navigate │ ⏎ select │ Tab/←→ tab │ ctrl+n nickname │ ctrl+f favorite │ ", + "next": "" + }, + { + "row": 20, + "legacy": " ctrl+r refresh model list │ Esc cancel", + "next": "" + }, + { + "row": 22, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": " ✓ ls (17ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ❯ create a file please \n\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ────────────────────────────────────────────────────────────────────────────\n Filter: \n Favorites │ Nicknames │ All \n ╭──────────────────────────────────────────────────────────────────────────╮\n │ Select model │\n │ mockprov │ ❯ mock-alpha (current) │\n │ │ mock-beta │\n ╰──────────────────────────────────────────────────────────────────────────╯\n ↑↓ navigate │ ⏎ select │ Tab/←→ tab │ ctrl+n nickname │ ctrl+f favorite │ \n ctrl+r refresh model list │ Esc cancel\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k\n", + "next": " ✓ Shell command (9ms)\n\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n\n\n\n\n\n\n\n\n\n\n" + } + }, + { + "step": "12-menu-model-arrow", + "legacy": "report/shots/80x24/legacy-12-menu-model-arrow.png", + "next": "report/shots/80x24/next-12-menu-model-arrow.png", + "diffFile": "report/shots/80x24/diff-12-menu-model-arrow.png", + "diff": { + "count": 35002, + "total": 258816, + "sizeA": [674, 384], + "sizeB": [674, 384] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " ✓ ls (▒▒▒▒)", + "next": " ✓ Shell command (▒▒▒)" + }, + { + "row": 2, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "╭──────────────────────────────────────────────────────────────────────────────╮" + }, + { + "row": 3, + "legacy": "", + "next": "│ Choose a model │" + }, + { + "row": 4, + "legacy": "", + "next": "│ Favorites │ Nicknames │ All │" + }, + { + "row": 5, + "legacy": " ❯ create a file please ", + "next": "│ Filter: type to filter │" + }, + { + "row": 6, + "legacy": "", + "next": "│ No matching models. │" + }, + { + "row": 7, + "legacy": "", + "next": "│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │" + }, + { + "row": 8, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "╰──────────────────────────────────────────────────────────────────────────────╯" + }, + { + "row": 9, + "legacy": "", + "next": "────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 10, + "legacy": "", + "next": "❯ " + }, + { + "row": 11, + "legacy": " ────────────────────────────────────────────────────────────────────────────", + "next": "" + }, + { + "row": 12, + "legacy": " Filter: ", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + }, + { + "row": 13, + "legacy": " Favorites │ Nicknames │ All ", + "next": "" + }, + { + "row": 14, + "legacy": " ╭──────────────────────────────────────────────────────────────────────────╮", + "next": "" + }, + { + "row": 15, + "legacy": " │ Select model │", + "next": "" + }, + { + "row": 16, + "legacy": " │ mockprov │ mock-alpha (current) │", + "next": "" + }, + { + "row": 17, + "legacy": " │ │ ❯ mock-beta │", + "next": "" + }, + { + "row": 18, + "legacy": " ╰──────────────────────────────────────────────────────────────────────────╯", + "next": "" + }, + { + "row": 19, + "legacy": " ↑↓ navigate │ ⏎ select │ Tab/←→ tab │ ctrl+n nickname │ ctrl+f favorite │ ", + "next": "" + }, + { + "row": 20, + "legacy": " ctrl+r refresh model list │ Esc cancel", + "next": "" + }, + { + "row": 22, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": " ✓ ls (17ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ❯ create a file please \n\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ────────────────────────────────────────────────────────────────────────────\n Filter: \n Favorites │ Nicknames │ All \n ╭──────────────────────────────────────────────────────────────────────────╮\n │ Select model │\n │ mockprov │ mock-alpha (current) │\n │ │ ❯ mock-beta │\n ╰──────────────────────────────────────────────────────────────────────────╯\n ↑↓ navigate │ ⏎ select │ Tab/←→ tab │ ctrl+n nickname │ ctrl+f favorite │ \n ctrl+r refresh model list │ Esc cancel\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k\n", + "next": " ✓ Shell command (9ms)\n\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Choose a model │\n│ Favorites │ Nicknames │ All │\n│ Filter: type to filter │\n│ No matching models. │\n│ Tab/←→ switch · ↑/↓ select · Ctrl+F favorite · Enter choose · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n\n\n\n\n\n\n\n\n\n\n" + } + }, + { + "step": "13-menu-model-closed", + "legacy": "report/shots/80x24/legacy-13-menu-model-closed.png", + "next": "report/shots/80x24/next-13-menu-model-closed.png", + "diffFile": "report/shots/80x24/diff-13-menu-model-closed.png", + "diff": { + "count": 20618, + "total": 258816, + "sizeA": [674, 384], + "sizeB": [674, 384] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " ✓ ls (▒▒▒▒)", + "next": " ✓ Shell command (▒▒▒)" + }, + { + "row": 2, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 3, + "legacy": "", + "next": "❯ " + }, + { + "row": 4, + "legacy": "", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history" + }, + { + "row": 5, + "legacy": " ❯ create a file please ", + "next": "" + }, + { + "row": 6, + "legacy": "", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + }, + { + "row": 8, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "" + }, + { + "row": 11, + "legacy": " ────────────────────────────────────────────────────────────────────────────", + "next": "" + }, + { + "row": 12, + "legacy": " ❯ ", + "next": "" + }, + { + "row": 13, + "legacy": " / commands │ @ paths │ ! shell │ Shift+Tab plan", + "next": "" + }, + { + "row": 15, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": " ✓ ls (17ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ❯ create a file please \n\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ────────────────────────────────────────────────────────────────────────────\n ❯ \n / commands │ @ paths │ ! shell │ Shift+Tab plan\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k\n\n\n\n\n\n\n\n", + "next": " ✓ Shell command (9ms)\n\n────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history\n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + } + }, + { + "step": "14-menu-settings", + "legacy": "report/shots/80x24/legacy-14-menu-settings.png", + "next": "report/shots/80x24/next-14-menu-settings.png", + "diffFile": "report/shots/80x24/diff-14-menu-settings.png", + "diff": { + "count": 49348, + "total": 258816, + "sizeA": [674, 384], + "sizeB": [674, 384] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " Filter: ", + "next": " ✓ Shell command (▒▒▒)" + }, + { + "row": 1, + "legacy": " Models │ Providers │ Context │ Safety │ Tools │ UI │ Hooks ", + "next": "" + }, + { + "row": 2, + "legacy": " ╭──────────────────────────────────────────────────────────────────────────╮", + "next": "╭──────────────────────────────────────────────────────────────────────────────╮" + }, + { + "row": 3, + "legacy": " │ ❯ Model ● mockprov/mock-alpha ┃ │", + "next": "│ Settings · [Models] Providers Context Safety Tools UI Hooks │" + }, + { + "row": 4, + "legacy": " │ Verifier model (unset) ┃ │", + "next": "│ Search: (type to search all categories) │" + }, + { + "row": 5, + "legacy": " │ Reasoning effort default ┃ │", + "next": "│ ❯ Model · agent.modelSelection: mockprov/mock-alpha │" + }, + { + "row": 6, + "legacy": " │ Temperature (unset) ┃ │", + "next": "│ Verifier model · verifier.model: │" + }, + { + "row": 7, + "legacy": " │ Favorite models (none) ┃ │", + "next": "│ Reasoning effort · agent.reasoningEffort: default │" + }, + { + "row": 8, + "legacy": " │ Model nicknames (none) ┃ │", + "next": "│ Temperature · agent.temperature: unset │" + }, + { + "row": 9, + "legacy": " │ Smart model (inherits agent.modelSelection) │ │", + "next": "│ Favorite models · agent.favoriteModels: [0 entries] │" + }, + { + "row": 10, + "legacy": " │ Smart reasoning effort (default) │ │", + "next": "│ Model nicknames · agent.modelNicknames: [configured] │" + }, + { + "row": 11, + "legacy": " │ Balanced model (inherits agent.modelSelection) │ │", + "next": "│ Smart model · agent.smartModel: unset │" + }, + { + "row": 12, + "legacy": " │ Balanced reasoning effort (default) │ │", + "next": "│ Bound provider and model selection for the main agent │" + }, + { + "row": 13, + "legacy": " │ │", + "next": "│ Current: mockprov/mock-alpha · Default: openai/gpt-5.1 │" + }, + { + "row": 14, + "legacy": " │ ──────────────────────────────────────────────────────────────────────── │", + "next": "│ Use /model /. │" + }, + { + "row": 15, + "legacy": " │ Model · agent.modelSelection │", + "next": "│ Type search · Tab category · ↑/↓ select · Enter edit · Esc close │" + }, + { + "row": 16, + "legacy": " │ │", + "next": "╰──────────────────────────────────────────────────────────────────────────────╯" + }, + { + "row": 17, + "legacy": " │ Bound provider and model selection for the main agent │", + "next": "────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 18, + "legacy": " │ default: openai/gpt-5.1 │", + "next": "❯ " + }, + { + "row": 19, + "legacy": " │ │", + "next": "" + }, + { + "row": 20, + "legacy": " │ type search │ ↑↓ move │ Tab section │ ⏎ edit │ Esc close │ ● changed │", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + }, + { + "row": 21, + "legacy": " ╰──────────────────────────────────────────────────────────────────────────╯", + "next": "" + }, + { + "row": 23, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": " Filter: \n Models │ Providers │ Context │ Safety │ Tools │ UI │ Hooks \n ╭──────────────────────────────────────────────────────────────────────────╮\n │ ❯ Model ● mockprov/mock-alpha ┃ │\n │ Verifier model (unset) ┃ │\n │ Reasoning effort default ┃ │\n │ Temperature (unset) ┃ │\n │ Favorite models (none) ┃ │\n │ Model nicknames (none) ┃ │\n │ Smart model (inherits agent.modelSelection) │ │\n │ Smart reasoning effort (default) │ │\n │ Balanced model (inherits agent.modelSelection) │ │\n │ Balanced reasoning effort (default) │ │\n │ │\n │ ──────────────────────────────────────────────────────────────────────── │\n │ Model · agent.modelSelection │\n │ │\n │ Bound provider and model selection for the main agent │\n │ default: openai/gpt-5.1 │\n │ │\n │ type search │ ↑↓ move │ Tab section │ ⏎ edit │ Esc close │ ● changed │\n ╰──────────────────────────────────────────────────────────────────────────╯\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": " ✓ Shell command (9ms)\n\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Settings · [Models] Providers Context Safety Tools UI Hooks │\n│ Search: (type to search all categories) │\n│ ❯ Model · agent.modelSelection: mockprov/mock-alpha │\n│ Verifier model · verifier.model: │\n│ Reasoning effort · agent.reasoningEffort: default │\n│ Temperature · agent.temperature: unset │\n│ Favorite models · agent.favoriteModels: [0 entries] │\n│ Model nicknames · agent.modelNicknames: [configured] │\n│ Smart model · agent.smartModel: unset │\n│ Bound provider and model selection for the main agent │\n│ Current: mockprov/mock-alpha · Default: openai/gpt-5.1 │\n│ Use /model /. │\n│ Type search · Tab category · ↑/↓ select · Enter edit · Esc close │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n\n\n" + } + }, + { + "step": "15-menu-settings-arrow", + "legacy": "report/shots/80x24/legacy-15-menu-settings-arrow.png", + "next": "report/shots/80x24/next-15-menu-settings-arrow.png", + "diffFile": "report/shots/80x24/diff-15-menu-settings-arrow.png", + "diff": { + "count": 51491, + "total": 258816, + "sizeA": [674, 384], + "sizeB": [674, 384] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " ────────────────────────────────────────────────────────────────────────────", + "next": " ✓ Shell command (▒▒▒)" + }, + { + "row": 1, + "legacy": " Filter: ", + "next": "" + }, + { + "row": 2, + "legacy": " Models │ Providers │ Context │ Safety │ Tools │ UI │ Hooks ", + "next": "╭──────────────────────────────────────────────────────────────────────────────╮" + }, + { + "row": 3, + "legacy": " ╭──────────────────────────────────────────────────────────────────────────╮", + "next": "│ Settings · [Models] Providers Context Safety Tools UI Hooks │" + }, + { + "row": 4, + "legacy": " │ Model ● mockprov/mock-alpha ┃ │", + "next": "│ Search: (type to search all categories) │" + }, + { + "row": 5, + "legacy": " │ ❯ Verifier model (unset) ┃ │", + "next": "│ ❯ Verifier model · verifier.model: │" + }, + { + "row": 6, + "legacy": " │ Reasoning effort default ┃ │", + "next": "│ Reasoning effort · agent.reasoningEffort: default │" + }, + { + "row": 7, + "legacy": " │ Temperature (unset) ┃ │", + "next": "│ Temperature · agent.temperature: unset │" + }, + { + "row": 8, + "legacy": " │ Favorite models (none) ┃ │", + "next": "│ Favorite models · agent.favoriteModels: [0 entries] │" + }, + { + "row": 9, + "legacy": " │ Model nicknames (none) ┃ │", + "next": "│ Model nicknames · agent.modelNicknames: [configured] │" + }, + { + "row": 10, + "legacy": " │ Smart model (inherits agent.modelSelection) │ │", + "next": "│ Smart model · agent.smartModel: unset │" + }, + { + "row": 11, + "legacy": " │ Smart reasoning effort (default) │ │", + "next": "│ Smart reasoning effort · agent.smartReasoningEffort: default │" + }, + { + "row": 12, + "legacy": " │ Balanced model (inherits agent.modelSelection) │ │", + "next": "│ Independent verifier model ID; empty uses the session model and provider │" + }, + { + "row": 13, + "legacy": " │ Balanced reasoning effort (default) │ │", + "next": "│ Current: · Default: │" + }, + { + "row": 14, + "legacy": " │ │", + "next": "│ Type search · Tab category · ↑/↓ select · Enter edit · Esc close │" + }, + { + "row": 15, + "legacy": " │ ──────────────────────────────────────────────────────────────────────── │", + "next": "╰──────────────────────────────────────────────────────────────────────────────╯" + }, + { + "row": 16, + "legacy": " │ Verifier model · verifier.model │", + "next": "────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 17, + "legacy": " │ │", + "next": "❯ " + }, + { + "row": 18, + "legacy": " │ Independent verifier model ID; empty uses the session model and provider │", + "next": "" + }, + { + "row": 19, + "legacy": " │ │", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + }, + { + "row": 20, + "legacy": " │ type search │ ↑↓ move │ Tab section │ ⏎ edit │ Esc close │ ● changed │", + "next": "" + }, + { + "row": 21, + "legacy": " ╰──────────────────────────────────────────────────────────────────────────╯", + "next": "" + }, + { + "row": 23, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": " ────────────────────────────────────────────────────────────────────────────\n Filter: \n Models │ Providers │ Context │ Safety │ Tools │ UI │ Hooks \n ╭──────────────────────────────────────────────────────────────────────────╮\n │ Model ● mockprov/mock-alpha ┃ │\n │ ❯ Verifier model (unset) ┃ │\n │ Reasoning effort default ┃ │\n │ Temperature (unset) ┃ │\n │ Favorite models (none) ┃ │\n │ Model nicknames (none) ┃ │\n │ Smart model (inherits agent.modelSelection) │ │\n │ Smart reasoning effort (default) │ │\n │ Balanced model (inherits agent.modelSelection) │ │\n │ Balanced reasoning effort (default) │ │\n │ │\n │ ──────────────────────────────────────────────────────────────────────── │\n │ Verifier model · verifier.model │\n │ │\n │ Independent verifier model ID; empty uses the session model and provider │\n │ │\n │ type search │ ↑↓ move │ Tab section │ ⏎ edit │ Esc close │ ● changed │\n ╰──────────────────────────────────────────────────────────────────────────╯\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": " ✓ Shell command (9ms)\n\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Settings · [Models] Providers Context Safety Tools UI Hooks │\n│ Search: (type to search all categories) │\n│ ❯ Verifier model · verifier.model: │\n│ Reasoning effort · agent.reasoningEffort: default │\n│ Temperature · agent.temperature: unset │\n│ Favorite models · agent.favoriteModels: [0 entries] │\n│ Model nicknames · agent.modelNicknames: [configured] │\n│ Smart model · agent.smartModel: unset │\n│ Smart reasoning effort · agent.smartReasoningEffort: default │\n│ Independent verifier model ID; empty uses the session model and provider │\n│ Current: · Default: │\n│ Type search · Tab category · ↑/↓ select · Enter edit · Esc close │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n\n\n\n" + } + }, + { + "step": "16-menu-settings-closed", + "legacy": "report/shots/80x24/legacy-16-menu-settings-closed.png", + "next": "report/shots/80x24/next-16-menu-settings-closed.png", + "diffFile": "report/shots/80x24/diff-16-menu-settings-closed.png", + "diff": { + "count": 28274, + "total": 258816, + "sizeA": [674, 384], + "sizeB": [674, 384] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " ╰──────────────────────────────────────────────────────────────────────────╯", + "next": " ✓ Shell command (▒▒▒)" + }, + { + "row": 2, + "legacy": " That is all.", + "next": "────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 3, + "legacy": "", + "next": "❯ " + }, + { + "row": 4, + "legacy": "", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history" + }, + { + "row": 5, + "legacy": " ❯ list the files please ", + "next": "" + }, + { + "row": 6, + "legacy": "", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + }, + { + "row": 7, + "legacy": " ✓ ls (▒▒▒▒)", + "next": "" + }, + { + "row": 9, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "" + }, + { + "row": 12, + "legacy": " ❯ create a file please ", + "next": "" + }, + { + "row": 14, + "legacy": " ✓ touch created-by-walk.txt (▒▒▒)", + "next": "" + }, + { + "row": 16, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "" + }, + { + "row": 19, + "legacy": " ────────────────────────────────────────────────────────────────────────────", + "next": "" + }, + { + "row": 20, + "legacy": " ❯ ", + "next": "" + }, + { + "row": 21, + "legacy": " / commands │ @ paths │ ! shell │ Shift+Tab plan", + "next": "" + }, + { + "row": 23, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": " ╰──────────────────────────────────────────────────────────────────────────╯\n\n That is all.\n\n\n ❯ list the files please \n\n ✓ ls (17ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ❯ create a file please \n\n ✓ touch created-by-walk.txt (6ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ────────────────────────────────────────────────────────────────────────────\n ❯ \n / commands │ @ paths │ ! shell │ Shift+Tab plan\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": " ✓ Shell command (9ms)\n\n────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history\n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + } + }, + { + "step": "17-ctrl-o", + "legacy": "report/shots/80x24/legacy-17-ctrl-o.png", + "next": "report/shots/80x24/next-17-ctrl-o.png", + "diffFile": "report/shots/80x24/diff-17-ctrl-o.png", + "diff": { + "count": 35879, + "total": 258816, + "sizeA": [674, 384], + "sizeB": [674, 384] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " ✓ ls (▒▒▒▒)", + "next": " ✓ Shell command (▒▒▒)" + }, + { + "row": 2, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "" + }, + { + "row": 3, + "legacy": "", + "next": " ❯ create a file please " + }, + { + "row": 5, + "legacy": " ❯ create a file please ", + "next": " ✓ Shell command (▒▒▒)" + }, + { + "row": 6, + "legacy": "", + "next": " exit 0" + }, + { + "row": 7, + "legacy": "", + "next": " Runtime: ▒▒▒" + }, + { + "row": 8, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": " (No output)" + }, + { + "row": 9, + "legacy": "", + "next": " touch created-by-walk.txt" + }, + { + "row": 11, + "legacy": " ────────────────────────────────────────────────────────────────────────────", + "next": " Done. The command finished; the workspace has README.md, notes.txt and src/." + }, + { + "row": 12, + "legacy": " Filter: ", + "next": "" + }, + { + "row": 13, + "legacy": " Favorites │ Nicknames │ All ", + "next": "Lines 28–38 of 38 · PgUp/PgDn or Ctrl+↑/↓" + }, + { + "row": 14, + "legacy": " ╭──────────────────────────────────────────────────────────────────────────╮", + "next": "────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 15, + "legacy": " │ Select model │", + "next": "❯ " + }, + { + "row": 16, + "legacy": " │ mockprov │ ❯ mock-alpha (current) │", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history" + }, + { + "row": 17, + "legacy": " │ │ mock-beta │", + "next": "" + }, + { + "row": 18, + "legacy": " ╰──────────────────────────────────────────────────────────────────────────╯", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + }, + { + "row": 19, + "legacy": " ↑↓ navigate │ ⏎ select │ Tab/←→ tab │ ctrl+n nickname │ ctrl+f favorite │ ", + "next": "" + }, + { + "row": 20, + "legacy": " ctrl+r refresh model list │ Esc cancel", + "next": "" + }, + { + "row": 22, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": " ✓ ls (17ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ❯ create a file please \n\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ────────────────────────────────────────────────────────────────────────────\n Filter: \n Favorites │ Nicknames │ All \n ╭──────────────────────────────────────────────────────────────────────────╮\n │ Select model │\n │ mockprov │ ❯ mock-alpha (current) │\n │ │ mock-beta │\n ╰──────────────────────────────────────────────────────────────────────────╯\n ↑↓ navigate │ ⏎ select │ Tab/←→ tab │ ctrl+n nickname │ ctrl+f favorite │ \n ctrl+r refresh model list │ Esc cancel\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k\n", + "next": " ✓ Shell command (9ms)\n\n\n ❯ create a file please \n\n ✓ Shell command (9ms)\n exit 0\n Runtime: 9ms\n (No output)\n touch created-by-walk.txt\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\nLines 28–38 of 38 · PgUp/PgDn or Ctrl+↑/↓\n────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history\n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n\n\n\n\n" + } + }, + { + "step": "18-ctrl-o-closed", + "legacy": "report/shots/80x24/legacy-18-ctrl-o-closed.png", + "next": "report/shots/80x24/next-18-ctrl-o-closed.png", + "diffFile": "report/shots/80x24/diff-18-ctrl-o-closed.png", + "diff": { + "count": 20618, + "total": 258816, + "sizeA": [674, 384], + "sizeB": [674, 384] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " ✓ ls (▒▒▒▒)", + "next": " ✓ Shell command (▒▒▒)" + }, + { + "row": 2, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 3, + "legacy": "", + "next": "❯ " + }, + { + "row": 4, + "legacy": "", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history" + }, + { + "row": 5, + "legacy": " ❯ create a file please ", + "next": "" + }, + { + "row": 6, + "legacy": "", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + }, + { + "row": 8, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "" + }, + { + "row": 11, + "legacy": " ────────────────────────────────────────────────────────────────────────────", + "next": "" + }, + { + "row": 12, + "legacy": " ❯ ", + "next": "" + }, + { + "row": 13, + "legacy": " / commands │ @ paths │ ! shell │ Shift+Tab plan", + "next": "" + }, + { + "row": 15, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": " ✓ ls (17ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ❯ create a file please \n\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ────────────────────────────────────────────────────────────────────────────\n ❯ \n / commands │ @ paths │ ! shell │ Shift+Tab plan\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k\n\n\n\n\n\n\n\n", + "next": " ✓ Shell command (9ms)\n\n────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history\n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + } + }, + { + "step": "19-shift-tab", + "legacy": "report/shots/80x24/legacy-19-shift-tab.png", + "next": "report/shots/80x24/next-19-shift-tab.png", + "diffFile": "report/shots/80x24/diff-19-shift-tab.png", + "diff": { + "count": 32648, + "total": 258816, + "sizeA": [674, 384], + "sizeB": [674, 384] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " ✓ ls (▒▒▒▒)", + "next": " ✓ Shell command (▒▒▒)" + }, + { + "row": 2, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "╭──────────────────────────────────────────────────────────────────────────────╮" + }, + { + "row": 3, + "legacy": "", + "next": "│ ⚠ Switching modes requires clearing the current session. │" + }, + { + "row": 4, + "legacy": "", + "next": "│ Clear session and switch mode? │" + }, + { + "row": 5, + "legacy": " ❯ create a file please ", + "next": "│ Yes │" + }, + { + "row": 6, + "legacy": "", + "next": "│ › No │" + }, + { + "row": 7, + "legacy": "", + "next": "│ ↑/↓ select · Enter choose · y/n answer · Esc cancel │" + }, + { + "row": 8, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "╰──────────────────────────────────────────────────────────────────────────────╯" + }, + { + "row": 9, + "legacy": "", + "next": "────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 10, + "legacy": "", + "next": "❯ " + }, + { + "row": 11, + "legacy": " ────────────────────────────────────────────────────────────────────────────", + "next": "" + }, + { + "row": 12, + "legacy": " ╭──────────────────────────────────────────────────────────────────────────╮", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + }, + { + "row": 13, + "legacy": " │ ▲ Switching to Plan mode requires clearing the current session. │", + "next": "" + }, + { + "row": 14, + "legacy": " │ Clear session and switch to Plan mode? │", + "next": "" + }, + { + "row": 15, + "legacy": " │ │", + "next": "" + }, + { + "row": 16, + "legacy": " │ Yes │", + "next": "" + }, + { + "row": 17, + "legacy": " │ ❯ No │", + "next": "" + }, + { + "row": 18, + "legacy": " │ ↑↓ navigate │ ⏎ select │ y/n answer │ Esc cancel │", + "next": "" + }, + { + "row": 19, + "legacy": " ╰──────────────────────────────────────────────────────────────────────────╯", + "next": "" + }, + { + "row": 21, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": " ✓ ls (17ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ❯ create a file please \n\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ────────────────────────────────────────────────────────────────────────────\n ╭──────────────────────────────────────────────────────────────────────────╮\n │ ▲ Switching to Plan mode requires clearing the current session. │\n │ Clear session and switch to Plan mode? │\n │ │\n │ Yes │\n │ ❯ No │\n │ ↑↓ navigate │ ⏎ select │ y/n answer │ Esc cancel │\n ╰──────────────────────────────────────────────────────────────────────────╯\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k\n\n", + "next": " ✓ Shell command (9ms)\n\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ ⚠ Switching modes requires clearing the current session. │\n│ Clear session and switch mode? │\n│ Yes │\n│ › No │\n│ ↑/↓ select · Enter choose · y/n answer · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n\n\n\n\n\n\n\n\n\n\n" + } + }, + { + "step": "20-shift-tab-restored", + "legacy": "report/shots/80x24/legacy-20-shift-tab-restored.png", + "next": "report/shots/80x24/next-20-shift-tab-restored.png", + "diffFile": "report/shots/80x24/diff-20-shift-tab-restored.png", + "diff": { + "count": 20618, + "total": 258816, + "sizeA": [674, 384], + "sizeB": [674, 384] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " ✓ ls (▒▒▒▒)", + "next": " ✓ Shell command (▒▒▒)" + }, + { + "row": 2, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 3, + "legacy": "", + "next": "❯ " + }, + { + "row": 4, + "legacy": "", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history" + }, + { + "row": 5, + "legacy": " ❯ create a file please ", + "next": "" + }, + { + "row": 6, + "legacy": "", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + }, + { + "row": 8, + "legacy": " Done. The command finished; the workspace has README.md, notes.txt and src/.", + "next": "" + }, + { + "row": 11, + "legacy": " ────────────────────────────────────────────────────────────────────────────", + "next": "" + }, + { + "row": 12, + "legacy": " ❯ ", + "next": "" + }, + { + "row": 13, + "legacy": " / commands │ @ paths │ ! shell │ Shift+Tab plan", + "next": "" + }, + { + "row": 15, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": " ✓ ls (17ms)\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ❯ create a file please \n\n\n Done. The command finished; the workspace has README.md, notes.txt and src/.\n\n\n ────────────────────────────────────────────────────────────────────────────\n ❯ \n / commands │ @ paths │ ! shell │ Shift+Tab plan\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k\n\n\n\n\n\n\n\n", + "next": " ✓ Shell command (9ms)\n\n────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history\n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + } + }, + { + "step": "21-help", + "legacy": "report/shots/80x24/legacy-21-help.png", + "next": "report/shots/80x24/next-21-help.png", + "diffFile": "report/shots/80x24/diff-21-help.png", + "diff": { + "count": 55721, + "total": 258816, + "sizeA": [674, 384], + "sizeB": [674, 384] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " /settings — View or modify settings", + "next": "/answer — Answer a pending approval or question" + }, + { + "row": 1, + "legacy": " /sandbox — Toggle shell sandboxing; disabling it gives shell commands ", + "next": "/bridge — Attach or detach this session's control socket" + }, + { + "row": 2, + "legacy": " unrestricted access", + "next": "/restart — Reload this executable (/restart stop also stops background work)" + }, + { + "row": 3, + "legacy": " /mcp — Show configured MCP servers and their connection state", + "next": "/quit — Exit the application" + }, + { + "row": 4, + "legacy": " /mcp-login — Authenticate with an OAuth-protected MCP server", + "next": "/exit — Exit the application" + }, + { + "row": 5, + "legacy": " /bridge — Attach or detach this local session for Discord bridge input", + "next": "/command-status — Show the outcome of a command by ID" + }, + { + "row": 6, + "legacy": " /providers — Manage API providers (list, add, edit, delete)", + "next": "/command-apply — Apply a finished command result by ID" + }, + { + "row": 7, + "legacy": " /skills — Activate a skill for the next request", + "next": "/mcp — Show configured MCP servers and their state" + }, + { + "row": 8, + "legacy": " /restart — Reload the built CLI in place; /restart stop consents to stopping", + "next": "/mcp-login — Authenticate with an OAuth-protected MCP server" + }, + { + "row": 9, + "legacy": " background work", + "next": "/plan — Toggle the plan profile" + }, + { + "row": 10, + "legacy": " /quit — Exit the application", + "next": "/bare — Switch to the bare profile" + }, + { + "row": 11, + "legacy": " /help — Show commands and keyboard shortcuts", + "next": "/mentor — Toggle the mentor profile" + }, + { + "row": 12, + "legacy": "", + "next": "/orchestrator — Toggle the orchestrator profile" + }, + { + "row": 13, + "legacy": " Keyboard shortcuts", + "next": "Keyboard shortcuts" + }, + { + "row": 14, + "legacy": " Ctrl+C: clear draft or interrupt; press again to exit", + "next": "Enter send/steer · Alt+Enter follow-up · ↑/↓ history · PgUp/PgDn scroll · Ctrl+O" + }, + { + "row": 15, + "legacy": " Ctrl+O: choose model · Ctrl+T: choose reasoning effort", + "next": " tool output · Ctrl+T reasoning effort" + }, + { + "row": 16, + "legacy": " Shift+Tab: switch Standard/Plan · @: complete paths · !: shell", + "next": "Ctrl+G approvals/tasks · Ctrl+B budget · Ctrl+C stop turn / clear input / exit" + }, + { + "row": 17, + "legacy": "", + "next": "Shift+Tab plan mode" + }, + { + "row": 18, + "legacy": "", + "next": "────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 19, + "legacy": " ────────────────────────────────────────────────────────────────────────────", + "next": "❯ " + }, + { + "row": 20, + "legacy": " ❯ ", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history" + }, + { + "row": 21, + "legacy": " / commands │ @ paths │ ! shell │ Shift+Tab plan", + "next": "" + }, + { + "row": 22, + "legacy": "", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + }, + { + "row": 23, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": " /settings — View or modify settings\n /sandbox — Toggle shell sandboxing; disabling it gives shell commands \n unrestricted access\n /mcp — Show configured MCP servers and their connection state\n /mcp-login — Authenticate with an OAuth-protected MCP server\n /bridge — Attach or detach this local session for Discord bridge input\n /providers — Manage API providers (list, add, edit, delete)\n /skills — Activate a skill for the next request\n /restart — Reload the built CLI in place; /restart stop consents to stopping\n background work\n /quit — Exit the application\n /help — Show commands and keyboard shortcuts\n\n Keyboard shortcuts\n Ctrl+C: clear draft or interrupt; press again to exit\n Ctrl+O: choose model · Ctrl+T: choose reasoning effort\n Shift+Tab: switch Standard/Plan · @: complete paths · !: shell\n\n\n ────────────────────────────────────────────────────────────────────────────\n ❯ \n / commands │ @ paths │ ! shell │ Shift+Tab plan\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "/answer — Answer a pending approval or question\n/bridge — Attach or detach this session's control socket\n/restart — Reload this executable (/restart stop also stops background work)\n/quit — Exit the application\n/exit — Exit the application\n/command-status — Show the outcome of a command by ID\n/command-apply — Apply a finished command result by ID\n/mcp — Show configured MCP servers and their state\n/mcp-login — Authenticate with an OAuth-protected MCP server\n/plan — Toggle the plan profile\n/bare — Switch to the bare profile\n/mentor — Toggle the mentor profile\n/orchestrator — Toggle the orchestrator profile\nKeyboard shortcuts\nEnter send/steer · Alt+Enter follow-up · ↑/↓ history · PgUp/PgDn scroll · Ctrl+O\n tool output · Ctrl+T reasoning effort\nCtrl+G approvals/tasks · Ctrl+B budget · Ctrl+C stop turn / clear input / exit\nShift+Tab plan mode\n────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history\n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n" + } + }, + { + "step": "22-help-closed", + "legacy": "report/shots/80x24/legacy-22-help-closed.png", + "next": "report/shots/80x24/next-22-help-closed.png", + "diffFile": "report/shots/80x24/diff-22-help-closed.png", + "diff": { + "count": 55721, + "total": 258816, + "sizeA": [674, 384], + "sizeB": [674, 384] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " /settings — View or modify settings", + "next": "/answer — Answer a pending approval or question" + }, + { + "row": 1, + "legacy": " /sandbox — Toggle shell sandboxing; disabling it gives shell commands ", + "next": "/bridge — Attach or detach this session's control socket" + }, + { + "row": 2, + "legacy": " unrestricted access", + "next": "/restart — Reload this executable (/restart stop also stops background work)" + }, + { + "row": 3, + "legacy": " /mcp — Show configured MCP servers and their connection state", + "next": "/quit — Exit the application" + }, + { + "row": 4, + "legacy": " /mcp-login — Authenticate with an OAuth-protected MCP server", + "next": "/exit — Exit the application" + }, + { + "row": 5, + "legacy": " /bridge — Attach or detach this local session for Discord bridge input", + "next": "/command-status — Show the outcome of a command by ID" + }, + { + "row": 6, + "legacy": " /providers — Manage API providers (list, add, edit, delete)", + "next": "/command-apply — Apply a finished command result by ID" + }, + { + "row": 7, + "legacy": " /skills — Activate a skill for the next request", + "next": "/mcp — Show configured MCP servers and their state" + }, + { + "row": 8, + "legacy": " /restart — Reload the built CLI in place; /restart stop consents to stopping", + "next": "/mcp-login — Authenticate with an OAuth-protected MCP server" + }, + { + "row": 9, + "legacy": " background work", + "next": "/plan — Toggle the plan profile" + }, + { + "row": 10, + "legacy": " /quit — Exit the application", + "next": "/bare — Switch to the bare profile" + }, + { + "row": 11, + "legacy": " /help — Show commands and keyboard shortcuts", + "next": "/mentor — Toggle the mentor profile" + }, + { + "row": 12, + "legacy": "", + "next": "/orchestrator — Toggle the orchestrator profile" + }, + { + "row": 13, + "legacy": " Keyboard shortcuts", + "next": "Keyboard shortcuts" + }, + { + "row": 14, + "legacy": " Ctrl+C: clear draft or interrupt; press again to exit", + "next": "Enter send/steer · Alt+Enter follow-up · ↑/↓ history · PgUp/PgDn scroll · Ctrl+O" + }, + { + "row": 15, + "legacy": " Ctrl+O: choose model · Ctrl+T: choose reasoning effort", + "next": " tool output · Ctrl+T reasoning effort" + }, + { + "row": 16, + "legacy": " Shift+Tab: switch Standard/Plan · @: complete paths · !: shell", + "next": "Ctrl+G approvals/tasks · Ctrl+B budget · Ctrl+C stop turn / clear input / exit" + }, + { + "row": 17, + "legacy": "", + "next": "Shift+Tab plan mode" + }, + { + "row": 18, + "legacy": "", + "next": "────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 19, + "legacy": " ────────────────────────────────────────────────────────────────────────────", + "next": "❯ " + }, + { + "row": 20, + "legacy": " ❯ ", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history" + }, + { + "row": 21, + "legacy": " / commands │ @ paths │ ! shell │ Shift+Tab plan", + "next": "" + }, + { + "row": 22, + "legacy": "", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + }, + { + "row": 23, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": " /settings — View or modify settings\n /sandbox — Toggle shell sandboxing; disabling it gives shell commands \n unrestricted access\n /mcp — Show configured MCP servers and their connection state\n /mcp-login — Authenticate with an OAuth-protected MCP server\n /bridge — Attach or detach this local session for Discord bridge input\n /providers — Manage API providers (list, add, edit, delete)\n /skills — Activate a skill for the next request\n /restart — Reload the built CLI in place; /restart stop consents to stopping\n background work\n /quit — Exit the application\n /help — Show commands and keyboard shortcuts\n\n Keyboard shortcuts\n Ctrl+C: clear draft or interrupt; press again to exit\n Ctrl+O: choose model · Ctrl+T: choose reasoning effort\n Shift+Tab: switch Standard/Plan · @: complete paths · !: shell\n\n\n ────────────────────────────────────────────────────────────────────────────\n ❯ \n / commands │ @ paths │ ! shell │ Shift+Tab plan\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "/answer — Answer a pending approval or question\n/bridge — Attach or detach this session's control socket\n/restart — Reload this executable (/restart stop also stops background work)\n/quit — Exit the application\n/exit — Exit the application\n/command-status — Show the outcome of a command by ID\n/command-apply — Apply a finished command result by ID\n/mcp — Show configured MCP servers and their state\n/mcp-login — Authenticate with an OAuth-protected MCP server\n/plan — Toggle the plan profile\n/bare — Switch to the bare profile\n/mentor — Toggle the mentor profile\n/orchestrator — Toggle the orchestrator profile\nKeyboard shortcuts\nEnter send/steer · Alt+Enter follow-up · ↑/↓ history · PgUp/PgDn scroll · Ctrl+O\n tool output · Ctrl+T reasoning effort\nCtrl+G approvals/tasks · Ctrl+B budget · Ctrl+C stop turn / clear input / exit\nShift+Tab plan mode\n────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history\n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n" + } + }, + { + "step": "23-resume-list", + "legacy": "report/shots/80x24/legacy-23-resume-list.png", + "next": "report/shots/80x24/next-23-resume-list.png", + "diffFile": "report/shots/80x24/diff-23-resume-list.png", + "diff": { + "count": 52646, + "total": 258816, + "sizeA": [674, 384], + "sizeB": [674, 384] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": "", + "next": "/mcp-login — Authenticate with an OAuth-protected MCP server" + }, + { + "row": 1, + "legacy": " Keyboard shortcuts", + "next": "/plan — Toggle the plan profile" + }, + { + "row": 2, + "legacy": " Ctrl+C: clear draft or interrupt; press again to exit", + "next": "/bare — Switch to the bare profile" + }, + { + "row": 3, + "legacy": " Ctrl+O: choose model · Ctrl+T: choose reasoning effort", + "next": "/mentor — Toggle the mentor profile" + }, + { + "row": 4, + "legacy": " Shift+Tab: switch Standard/Plan · @: complete paths · !: shell", + "next": "/orchestrator — Toggle the orchestrator profile" + }, + { + "row": 5, + "legacy": "", + "next": "Keyboard shortcuts" + }, + { + "row": 6, + "legacy": "", + "next": "Enter send/steer · Alt+Enter follow-up · ↑/↓ history · PgUp/PgDn scroll · Ctrl+O" + }, + { + "row": 7, + "legacy": " ────────────────────────────────────────────────────────────────────────────", + "next": " tool output · Ctrl+T reasoning effort" + }, + { + "row": 8, + "legacy": " ╭──────────────────────────────────────────────────────────────────────────╮", + "next": "Ctrl+G approvals/tasks · Ctrl+B budget · Ctrl+C stop turn / clear input / exit" + }, + { + "row": 9, + "legacy": " │ Resume Conversation │", + "next": "Shift+Tab plan mode" + }, + { + "row": 10, + "legacy": " │ ❯ show markdown please · 13 secon… │ 4257dac3-3ee2-4b4f-b172-30560cc9ae │", + "next": "╭──────────────────────────────────────────────────────────────────────────────╮" + }, + { + "row": 11, + "legacy": " │ ping idle 0 · ▒▒▒▒▒▒▒▒▒▒▒▒▒▒ · … │ 73 │", + "next": "│ Resume Conversation │" + }, + { + "row": 12, + "legacy": " │ RT-PROMPT please read the small… │ Updated: 2026-11-04 07:05:47 │", + "next": "│ Loading conversations… │" + }, + { + "row": 13, + "legacy": " │ RT-PROMPT please read the small… │ Local • 6 msgs • mock-alpha • │", + "next": "│ ↑/↓ select · Enter resume · Esc cancel │" + }, + { + "row": 14, + "legacy": " │ RT-PROMPT one more question · 5… │ mode: bare │", + "next": "╰──────────────────────────────────────────────────────────────────────────────╯" + }, + { + "row": 15, + "legacy": " │ RT-PROMPT one more question · 5… │ │", + "next": "────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 16, + "legacy": " │ RT-PROMPT one more question · 5… │ Initial Prompt: │", + "next": "❯ " + }, + { + "row": 17, + "legacy": " │ RT-PROMPT please read the large… │ \"show markdown please\" │", + "next": "" + }, + { + "row": 18, + "legacy": " │ RT-PROMPT please read the small… │ │", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + }, + { + "row": 19, + "legacy": " │ RT-PROMPT please read the small… │ │", + "next": "" + }, + { + "row": 20, + "legacy": " ╰──────────────────────────────────────────────────────────────────────────╯", + "next": "" + }, + { + "row": 21, + "legacy": " ↑↓ navigate │ ⏎ resume │ Esc cancel", + "next": "" + }, + { + "row": 23, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": ["next: no matching screen within 5000 ms"], + "text": { + "legacy": "\n Keyboard shortcuts\n Ctrl+C: clear draft or interrupt; press again to exit\n Ctrl+O: choose model · Ctrl+T: choose reasoning effort\n Shift+Tab: switch Standard/Plan · @: complete paths · !: shell\n\n\n ────────────────────────────────────────────────────────────────────────────\n ╭──────────────────────────────────────────────────────────────────────────╮\n │ Resume Conversation │\n │ ❯ show markdown please · 13 secon… │ 4257dac3-3ee2-4b4f-b172-30560cc9ae │\n │ ping idle 0 · 37 seconds ago · … │ 73 │\n │ RT-PROMPT please read the small… │ Updated: 2026-11-04 07:05:47 │\n │ RT-PROMPT please read the small… │ Local • 6 msgs • mock-alpha • │\n │ RT-PROMPT one more question · 5… │ mode: bare │\n │ RT-PROMPT one more question · 5… │ │\n │ RT-PROMPT one more question · 5… │ Initial Prompt: │\n │ RT-PROMPT please read the large… │ \"show markdown please\" │\n │ RT-PROMPT please read the small… │ │\n │ RT-PROMPT please read the small… │ │\n ╰──────────────────────────────────────────────────────────────────────────╯\n ↑↓ navigate │ ⏎ resume │ Esc cancel\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "/mcp-login — Authenticate with an OAuth-protected MCP server\n/plan — Toggle the plan profile\n/bare — Switch to the bare profile\n/mentor — Toggle the mentor profile\n/orchestrator — Toggle the orchestrator profile\nKeyboard shortcuts\nEnter send/steer · Alt+Enter follow-up · ↑/↓ history · PgUp/PgDn scroll · Ctrl+O\n tool output · Ctrl+T reasoning effort\nCtrl+G approvals/tasks · Ctrl+B budget · Ctrl+C stop turn / clear input / exit\nShift+Tab plan mode\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Resume Conversation │\n│ Loading conversations… │\n│ ↑/↓ select · Enter resume · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n\n\n\n\n" + } + }, + { + "step": "24-resume-preview", + "legacy": "report/shots/80x24/legacy-24-resume-preview.png", + "next": "report/shots/80x24/next-24-resume-preview.png", + "diffFile": "report/shots/80x24/diff-24-resume-preview.png", + "diff": { + "count": 52255, + "total": 258816, + "sizeA": [674, 384], + "sizeB": [674, 384] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": "", + "next": "/mcp-login — Authenticate with an OAuth-protected MCP server" + }, + { + "row": 1, + "legacy": " Keyboard shortcuts", + "next": "/plan — Toggle the plan profile" + }, + { + "row": 2, + "legacy": " Ctrl+C: clear draft or interrupt; press again to exit", + "next": "/bare — Switch to the bare profile" + }, + { + "row": 3, + "legacy": " Ctrl+O: choose model · Ctrl+T: choose reasoning effort", + "next": "/mentor — Toggle the mentor profile" + }, + { + "row": 4, + "legacy": " Shift+Tab: switch Standard/Plan · @: complete paths · !: shell", + "next": "/orchestrator — Toggle the orchestrator profile" + }, + { + "row": 5, + "legacy": "", + "next": "Keyboard shortcuts" + }, + { + "row": 6, + "legacy": "", + "next": "Enter send/steer · Alt+Enter follow-up · ↑/↓ history · PgUp/PgDn scroll · Ctrl+O" + }, + { + "row": 7, + "legacy": " ────────────────────────────────────────────────────────────────────────────", + "next": " tool output · Ctrl+T reasoning effort" + }, + { + "row": 8, + "legacy": " ╭──────────────────────────────────────────────────────────────────────────╮", + "next": "Ctrl+G approvals/tasks · Ctrl+B budget · Ctrl+C stop turn / clear input / exit" + }, + { + "row": 9, + "legacy": " │ Resume Conversation │", + "next": "Shift+Tab plan mode" + }, + { + "row": 10, + "legacy": " │ show markdown please · 13 secon… │ 8328e816-3344-4e5c-a487-2a527c934d │", + "next": "╭──────────────────────────────────────────────────────────────────────────────╮" + }, + { + "row": 11, + "legacy": " │ ❯ ping idle 0 · ▒▒▒▒▒▒▒▒▒▒▒▒▒▒ · … │ ae │", + "next": "│ Resume Conversation │" + }, + { + "row": 12, + "legacy": " │ RT-PROMPT please read the small… │ Updated: 2026-11-04 07:05:23 │", + "next": "│ Loading conversations… │" + }, + { + "row": 13, + "legacy": " │ RT-PROMPT please read the small… │ Local • 38 msgs • mock-alpha • │", + "next": "│ ↑/↓ select · Enter resume · Esc cancel │" + }, + { + "row": 14, + "legacy": " │ RT-PROMPT one more question · 5… │ mode: bare │", + "next": "╰──────────────────────────────────────────────────────────────────────────────╯" + }, + { + "row": 15, + "legacy": " │ RT-PROMPT one more question · 5… │ │", + "next": "────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 16, + "legacy": " │ RT-PROMPT one more question · 5… │ Initial Prompt: │", + "next": "❯ " + }, + { + "row": 17, + "legacy": " │ RT-PROMPT please read the large… │ \"ping idle 0\" │", + "next": "" + }, + { + "row": 18, + "legacy": " │ RT-PROMPT please read the small… │ │", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + }, + { + "row": 19, + "legacy": " │ RT-PROMPT please read the small… │ │", + "next": "" + }, + { + "row": 20, + "legacy": " ╰──────────────────────────────────────────────────────────────────────────╯", + "next": "" + }, + { + "row": 21, + "legacy": " ↑↓ navigate │ ⏎ resume │ Esc cancel", + "next": "" + }, + { + "row": 23, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": ["next: no matching screen within 5000 ms"], + "text": { + "legacy": "\n Keyboard shortcuts\n Ctrl+C: clear draft or interrupt; press again to exit\n Ctrl+O: choose model · Ctrl+T: choose reasoning effort\n Shift+Tab: switch Standard/Plan · @: complete paths · !: shell\n\n\n ────────────────────────────────────────────────────────────────────────────\n ╭──────────────────────────────────────────────────────────────────────────╮\n │ Resume Conversation │\n │ show markdown please · 13 secon… │ 8328e816-3344-4e5c-a487-2a527c934d │\n │ ❯ ping idle 0 · 38 seconds ago · … │ ae │\n │ RT-PROMPT please read the small… │ Updated: 2026-11-04 07:05:23 │\n │ RT-PROMPT please read the small… │ Local • 38 msgs • mock-alpha • │\n │ RT-PROMPT one more question · 5… │ mode: bare │\n │ RT-PROMPT one more question · 5… │ │\n │ RT-PROMPT one more question · 5… │ Initial Prompt: │\n │ RT-PROMPT please read the large… │ \"ping idle 0\" │\n │ RT-PROMPT please read the small… │ │\n │ RT-PROMPT please read the small… │ │\n ╰──────────────────────────────────────────────────────────────────────────╯\n ↑↓ navigate │ ⏎ resume │ Esc cancel\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "/mcp-login — Authenticate with an OAuth-protected MCP server\n/plan — Toggle the plan profile\n/bare — Switch to the bare profile\n/mentor — Toggle the mentor profile\n/orchestrator — Toggle the orchestrator profile\nKeyboard shortcuts\nEnter send/steer · Alt+Enter follow-up · ↑/↓ history · PgUp/PgDn scroll · Ctrl+O\n tool output · Ctrl+T reasoning effort\nCtrl+G approvals/tasks · Ctrl+B budget · Ctrl+C stop turn / clear input / exit\nShift+Tab plan mode\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Resume Conversation │\n│ Loading conversations… │\n│ ↑/↓ select · Enter resume · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n\n\n\n\n" + } + }, + { + "step": "25-resume-closed", + "legacy": "report/shots/80x24/legacy-25-resume-closed.png", + "next": "report/shots/80x24/next-25-resume-closed.png", + "diffFile": "report/shots/80x24/diff-25-resume-closed.png", + "diff": { + "count": 48811, + "total": 258816, + "sizeA": [674, 384], + "sizeB": [674, 384] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " /settings — View or modify settings", + "next": "/mcp-login — Authenticate with an OAuth-protected MCP server" + }, + { + "row": 1, + "legacy": " /sandbox — Toggle shell sandboxing; disabling it gives shell commands ", + "next": "/plan — Toggle the plan profile" + }, + { + "row": 2, + "legacy": " unrestricted access", + "next": "/bare — Switch to the bare profile" + }, + { + "row": 3, + "legacy": " /mcp — Show configured MCP servers and their connection state", + "next": "/mentor — Toggle the mentor profile" + }, + { + "row": 4, + "legacy": " /mcp-login — Authenticate with an OAuth-protected MCP server", + "next": "/orchestrator — Toggle the orchestrator profile" + }, + { + "row": 5, + "legacy": " /bridge — Attach or detach this local session for Discord bridge input", + "next": "Keyboard shortcuts" + }, + { + "row": 6, + "legacy": " /providers — Manage API providers (list, add, edit, delete)", + "next": "Enter send/steer · Alt+Enter follow-up · ↑/↓ history · PgUp/PgDn scroll · Ctrl+O" + }, + { + "row": 7, + "legacy": " /skills — Activate a skill for the next request", + "next": " tool output · Ctrl+T reasoning effort" + }, + { + "row": 8, + "legacy": " /restart — Reload the built CLI in place; /restart stop consents to stopping", + "next": "Ctrl+G approvals/tasks · Ctrl+B budget · Ctrl+C stop turn / clear input / exit" + }, + { + "row": 9, + "legacy": " background work", + "next": "Shift+Tab plan mode" + }, + { + "row": 10, + "legacy": " /quit — Exit the application", + "next": "╭──────────────────────────────────────────────────────────────────────────────╮" + }, + { + "row": 11, + "legacy": " /help — Show commands and keyboard shortcuts", + "next": "│ Resume Conversation │" + }, + { + "row": 12, + "legacy": "", + "next": "│ Loading conversations… │" + }, + { + "row": 13, + "legacy": " Keyboard shortcuts", + "next": "│ ↑/↓ select · Enter resume · Esc cancel │" + }, + { + "row": 14, + "legacy": " Ctrl+C: clear draft or interrupt; press again to exit", + "next": "╰──────────────────────────────────────────────────────────────────────────────╯" + }, + { + "row": 15, + "legacy": " Ctrl+O: choose model · Ctrl+T: choose reasoning effort", + "next": "────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 16, + "legacy": " Shift+Tab: switch Standard/Plan · @: complete paths · !: shell", + "next": "❯ " + }, + { + "row": 18, + "legacy": "", + "next": " Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k" + }, + { + "row": 19, + "legacy": " ────────────────────────────────────────────────────────────────────────────", + "next": "" + }, + { + "row": 20, + "legacy": " ❯ ", + "next": "" + }, + { + "row": 21, + "legacy": " / commands │ @ paths │ ! shell │ Shift+Tab plan", + "next": "" + }, + { + "row": 23, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": ["next: CLI restarted after this step"], + "text": { + "legacy": " /settings — View or modify settings\n /sandbox — Toggle shell sandboxing; disabling it gives shell commands \n unrestricted access\n /mcp — Show configured MCP servers and their connection state\n /mcp-login — Authenticate with an OAuth-protected MCP server\n /bridge — Attach or detach this local session for Discord bridge input\n /providers — Manage API providers (list, add, edit, delete)\n /skills — Activate a skill for the next request\n /restart — Reload the built CLI in place; /restart stop consents to stopping\n background work\n /quit — Exit the application\n /help — Show commands and keyboard shortcuts\n\n Keyboard shortcuts\n Ctrl+C: clear draft or interrupt; press again to exit\n Ctrl+O: choose model · Ctrl+T: choose reasoning effort\n Shift+Tab: switch Standard/Plan · @: complete paths · !: shell\n\n\n ────────────────────────────────────────────────────────────────────────────\n ❯ \n / commands │ @ paths │ ! shell │ Shift+Tab plan\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "/mcp-login — Authenticate with an OAuth-protected MCP server\n/plan — Toggle the plan profile\n/bare — Switch to the bare profile\n/mentor — Toggle the mentor profile\n/orchestrator — Toggle the orchestrator profile\nKeyboard shortcuts\nEnter send/steer · Alt+Enter follow-up · ↑/↓ history · PgUp/PgDn scroll · Ctrl+O\n tool output · Ctrl+T reasoning effort\nCtrl+G approvals/tasks · Ctrl+B budget · Ctrl+C stop turn / clear input / exit\nShift+Tab plan mode\n╭──────────────────────────────────────────────────────────────────────────────╮\n│ Resume Conversation │\n│ Loading conversations… │\n│ ↑/↓ select · Enter resume · Esc cancel │\n╰──────────────────────────────────────────────────────────────────────────────╯\n────────────────────────────────────────────────────────────────────────────────\n❯ \n\n Bare │ mockprov/mock-alpha │ ↑6.0k ↓400 · 0% cached · Ctx last 1k\n\n\n\n\n" + } + }, + { + "step": "26-resize", + "legacy": "report/shots/80x24/legacy-26-resize.png", + "next": "report/shots/80x24/next-26-resize.png", + "diffFile": "report/shots/80x24/diff-26-resize.png", + "diff": { + "count": 67663, + "total": 458592, + "sizeA": [843, 544], + "sizeB": [843, 544] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " /retry — Resend the last user turn, or choose a turn to resend", + "next": "" + }, + { + "row": 1, + "legacy": " /retry-tool — Retry the last tool call", + "next": "▌ term² BARE ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒" + }, + { + "row": 2, + "legacy": " /retry-turn — Regenerate the latest user turn from its original prompt", + "next": " mockprov/mock-alpha (default)" + }, + { + "row": 3, + "legacy": " /compact — Compact older conversation turns into a local summary", + "next": "" + }, + { + "row": 4, + "legacy": " /bare — Toggle the Bare profile (minimal prompt)", + "next": "────────────────────────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 5, + "legacy": " /lite — Toggle the Bare profile (Lite was merged into Bare)", + "next": "❯ " + }, + { + "row": 6, + "legacy": " /mentor — Toggle mentor mode (collaborative mode with mentor model)", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output" + }, + { + "row": 7, + "legacy": " /orchestrator — Toggle orchestrator mode (delegate all tool-backed work)", + "next": "" + }, + { + "row": 8, + "legacy": " /auto-approve — Set tool auto-approval mode (off, advisory, auto, always)", + "next": " Bare │ mockprov/mock-alpha" + }, + { + "row": 9, + "legacy": " /plan — Toggle plan mode (read-only research/planning mode)", + "next": "" + }, + { + "row": 10, + "legacy": " /profile — Switch the active profile", + "next": "" + }, + { + "row": 11, + "legacy": " /handoff — Send the last assistant response to another model for review", + "next": "" + }, + { + "row": 12, + "legacy": " /settings — View or modify settings", + "next": "" + }, + { + "row": 13, + "legacy": " /sandbox — Toggle shell sandboxing; disabling it gives shell commands unrestricted access", + "next": "" + }, + { + "row": 14, + "legacy": " /mcp — Show configured MCP servers and their connection state", + "next": "" + }, + { + "row": 15, + "legacy": " /mcp-login — Authenticate with an OAuth-protected MCP server", + "next": "" + }, + { + "row": 16, + "legacy": " /bridge — Attach or detach this local session for Discord bridge input", + "next": "" + }, + { + "row": 17, + "legacy": " /providers — Manage API providers (list, add, edit, delete)", + "next": "" + }, + { + "row": 18, + "legacy": " /skills — Activate a skill for the next request", + "next": "" + }, + { + "row": 19, + "legacy": " /restart — Reload the built CLI in place; /restart stop consents to stopping background work", + "next": "" + }, + { + "row": 20, + "legacy": " /quit — Exit the application", + "next": "" + }, + { + "row": 21, + "legacy": " /help — Show commands and keyboard shortcuts", + "next": "" + }, + { + "row": 23, + "legacy": " Keyboard shortcuts", + "next": "" + }, + { + "row": 24, + "legacy": " Ctrl+C: clear draft or interrupt; press again to exit", + "next": "" + }, + { + "row": 25, + "legacy": " Ctrl+O: choose model · Ctrl+T: choose reasoning effort", + "next": "" + }, + { + "row": 26, + "legacy": " Shift+Tab: switch Standard/Plan · @: complete paths · !: shell", + "next": "" + }, + { + "row": 29, + "legacy": " ────────────────────────────────────────────────────────────────────────────────────────────────", + "next": "" + }, + { + "row": 30, + "legacy": " ❯ ", + "next": "" + }, + { + "row": 31, + "legacy": " / commands │ @ paths │ ! shell │ Shift+Tab plan", + "next": "" + }, + { + "row": 33, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": " /retry — Resend the last user turn, or choose a turn to resend\n /retry-tool — Retry the last tool call\n /retry-turn — Regenerate the latest user turn from its original prompt\n /compact — Compact older conversation turns into a local summary\n /bare — Toggle the Bare profile (minimal prompt)\n /lite — Toggle the Bare profile (Lite was merged into Bare)\n /mentor — Toggle mentor mode (collaborative mode with mentor model)\n /orchestrator — Toggle orchestrator mode (delegate all tool-backed work)\n /auto-approve — Set tool auto-approval mode (off, advisory, auto, always)\n /plan — Toggle plan mode (read-only research/planning mode)\n /profile — Switch the active profile\n /handoff — Send the last assistant response to another model for review\n /settings — View or modify settings\n /sandbox — Toggle shell sandboxing; disabling it gives shell commands unrestricted access\n /mcp — Show configured MCP servers and their connection state\n /mcp-login — Authenticate with an OAuth-protected MCP server\n /bridge — Attach or detach this local session for Discord bridge input\n /providers — Manage API providers (list, add, edit, delete)\n /skills — Activate a skill for the next request\n /restart — Reload the built CLI in place; /restart stop consents to stopping background work\n /quit — Exit the application\n /help — Show commands and keyboard shortcuts\n\n Keyboard shortcuts\n Ctrl+C: clear draft or interrupt; press again to exit\n Ctrl+O: choose model · Ctrl+T: choose reasoning effort\n Shift+Tab: switch Standard/Plan · @: complete paths · !: shell\n\n\n ────────────────────────────────────────────────────────────────────────────────────────────────\n ❯ \n / commands │ @ paths │ ! shell │ Shift+Tab plan\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + } + }, + { + "step": "27-resize-typed", + "legacy": "report/shots/80x24/legacy-27-resize-typed.png", + "next": "report/shots/80x24/next-27-resize-typed.png", + "diffFile": "report/shots/80x24/diff-27-resize-typed.png", + "diff": { + "count": 69249, + "total": 458592, + "sizeA": [843, 544], + "sizeB": [843, 544] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " /rewind — Rewind to a user turn and put it back in the input box", + "next": "" + }, + { + "row": 1, + "legacy": " /retry — Resend the last user turn, or choose a turn to resend", + "next": "▌ term² BARE ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒" + }, + { + "row": 2, + "legacy": " /retry-tool — Retry the last tool call", + "next": " mockprov/mock-alpha (default)" + }, + { + "row": 3, + "legacy": " /retry-turn — Regenerate the latest user turn from its original prompt", + "next": "" + }, + { + "row": 4, + "legacy": " /compact — Compact older conversation turns into a local summary", + "next": "────────────────────────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 5, + "legacy": " /bare — Toggle the Bare profile (minimal prompt)", + "next": "❯ typed after resize " + }, + { + "row": 6, + "legacy": " /lite — Toggle the Bare profile (Lite was merged into Bare)", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output" + }, + { + "row": 7, + "legacy": " /mentor — Toggle mentor mode (collaborative mode with mentor model)", + "next": "" + }, + { + "row": 8, + "legacy": " /orchestrator — Toggle orchestrator mode (delegate all tool-backed work)", + "next": " Bare │ mockprov/mock-alpha" + }, + { + "row": 9, + "legacy": " /auto-approve — Set tool auto-approval mode (off, advisory, auto, always)", + "next": "" + }, + { + "row": 10, + "legacy": " /plan — Toggle plan mode (read-only research/planning mode)", + "next": "" + }, + { + "row": 11, + "legacy": " /profile — Switch the active profile", + "next": "" + }, + { + "row": 12, + "legacy": " /handoff — Send the last assistant response to another model for review", + "next": "" + }, + { + "row": 13, + "legacy": " /settings — View or modify settings", + "next": "" + }, + { + "row": 14, + "legacy": " /sandbox — Toggle shell sandboxing; disabling it gives shell commands unrestricted access", + "next": "" + }, + { + "row": 15, + "legacy": " /mcp — Show configured MCP servers and their connection state", + "next": "" + }, + { + "row": 16, + "legacy": " /mcp-login — Authenticate with an OAuth-protected MCP server", + "next": "" + }, + { + "row": 17, + "legacy": " /bridge — Attach or detach this local session for Discord bridge input", + "next": "" + }, + { + "row": 18, + "legacy": " /providers — Manage API providers (list, add, edit, delete)", + "next": "" + }, + { + "row": 19, + "legacy": " /skills — Activate a skill for the next request", + "next": "" + }, + { + "row": 20, + "legacy": " /restart — Reload the built CLI in place; /restart stop consents to stopping background work", + "next": "" + }, + { + "row": 21, + "legacy": " /quit — Exit the application", + "next": "" + }, + { + "row": 22, + "legacy": " /help — Show commands and keyboard shortcuts", + "next": "" + }, + { + "row": 24, + "legacy": " Keyboard shortcuts", + "next": "" + }, + { + "row": 25, + "legacy": " Ctrl+C: clear draft or interrupt; press again to exit", + "next": "" + }, + { + "row": 26, + "legacy": " Ctrl+O: choose model · Ctrl+T: choose reasoning effort", + "next": "" + }, + { + "row": 27, + "legacy": " Shift+Tab: switch Standard/Plan · @: complete paths · !: shell", + "next": "" + }, + { + "row": 30, + "legacy": " ────────────────────────────────────────────────────────────────────────────────────────────────", + "next": "" + }, + { + "row": 31, + "legacy": " ❯ typed after resize ", + "next": "" + }, + { + "row": 33, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": " /rewind — Rewind to a user turn and put it back in the input box\n /retry — Resend the last user turn, or choose a turn to resend\n /retry-tool — Retry the last tool call\n /retry-turn — Regenerate the latest user turn from its original prompt\n /compact — Compact older conversation turns into a local summary\n /bare — Toggle the Bare profile (minimal prompt)\n /lite — Toggle the Bare profile (Lite was merged into Bare)\n /mentor — Toggle mentor mode (collaborative mode with mentor model)\n /orchestrator — Toggle orchestrator mode (delegate all tool-backed work)\n /auto-approve — Set tool auto-approval mode (off, advisory, auto, always)\n /plan — Toggle plan mode (read-only research/planning mode)\n /profile — Switch the active profile\n /handoff — Send the last assistant response to another model for review\n /settings — View or modify settings\n /sandbox — Toggle shell sandboxing; disabling it gives shell commands unrestricted access\n /mcp — Show configured MCP servers and their connection state\n /mcp-login — Authenticate with an OAuth-protected MCP server\n /bridge — Attach or detach this local session for Discord bridge input\n /providers — Manage API providers (list, add, edit, delete)\n /skills — Activate a skill for the next request\n /restart — Reload the built CLI in place; /restart stop consents to stopping background work\n /quit — Exit the application\n /help — Show commands and keyboard shortcuts\n\n Keyboard shortcuts\n Ctrl+C: clear draft or interrupt; press again to exit\n Ctrl+O: choose model · Ctrl+T: choose reasoning effort\n Shift+Tab: switch Standard/Plan · @: complete paths · !: shell\n\n\n ────────────────────────────────────────────────────────────────────────────────────────────────\n ❯ typed after resize \n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ typed after resize \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + } + }, + { + "step": "28-resize-back", + "legacy": "report/shots/80x24/legacy-28-resize-back.png", + "next": "report/shots/80x24/next-28-resize-back.png", + "diffFile": "report/shots/80x24/diff-28-resize-back.png", + "diff": { + "count": 41035, + "total": 258816, + "sizeA": [674, 384], + "sizeB": [674, 384] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " /handoff — Send the last assistant response to another model for review", + "next": "" + }, + { + "row": 1, + "legacy": " /settings — View or modify settings", + "next": "▌ term² BARE ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒" + }, + { + "row": 2, + "legacy": " /sandbox — Toggle shell sandboxing; disabling it gives shell commands ", + "next": " mockprov/mock-alpha (default)" + }, + { + "row": 3, + "legacy": " unrestricted access", + "next": "" + }, + { + "row": 4, + "legacy": " /mcp — Show configured MCP servers and their connection state", + "next": "────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 5, + "legacy": " /mcp-login — Authenticate with an OAuth-protected MCP server", + "next": "❯ typed after resize " + }, + { + "row": 6, + "legacy": " /bridge — Attach or detach this local session for Discord bridge input", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history" + }, + { + "row": 7, + "legacy": " /providers — Manage API providers (list, add, edit, delete)", + "next": "" + }, + { + "row": 8, + "legacy": " /skills — Activate a skill for the next request", + "next": " Bare │ mockprov/mock-alpha" + }, + { + "row": 9, + "legacy": " /restart — Reload the built CLI in place; /restart stop consents to stopping", + "next": "" + }, + { + "row": 10, + "legacy": " background work", + "next": "" + }, + { + "row": 11, + "legacy": " /quit — Exit the application", + "next": "" + }, + { + "row": 12, + "legacy": " /help — Show commands and keyboard shortcuts", + "next": "" + }, + { + "row": 14, + "legacy": " Keyboard shortcuts", + "next": "" + }, + { + "row": 15, + "legacy": " Ctrl+C: clear draft or interrupt; press again to exit", + "next": "" + }, + { + "row": 16, + "legacy": " Ctrl+O: choose model · Ctrl+T: choose reasoning effort", + "next": "" + }, + { + "row": 17, + "legacy": " Shift+Tab: switch Standard/Plan · @: complete paths · !: shell", + "next": "" + }, + { + "row": 20, + "legacy": " ────────────────────────────────────────────────────────────────────────────", + "next": "" + }, + { + "row": 21, + "legacy": " ❯ typed after resize ", + "next": "" + }, + { + "row": 23, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": " /handoff — Send the last assistant response to another model for review\n /settings — View or modify settings\n /sandbox — Toggle shell sandboxing; disabling it gives shell commands \n unrestricted access\n /mcp — Show configured MCP servers and their connection state\n /mcp-login — Authenticate with an OAuth-protected MCP server\n /bridge — Attach or detach this local session for Discord bridge input\n /providers — Manage API providers (list, add, edit, delete)\n /skills — Activate a skill for the next request\n /restart — Reload the built CLI in place; /restart stop consents to stopping\n background work\n /quit — Exit the application\n /help — Show commands and keyboard shortcuts\n\n Keyboard shortcuts\n Ctrl+C: clear draft or interrupt; press again to exit\n Ctrl+O: choose model · Ctrl+T: choose reasoning effort\n Shift+Tab: switch Standard/Plan · @: complete paths · !: shell\n\n\n ────────────────────────────────────────────────────────────────────────────\n ❯ typed after resize \n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\n────────────────────────────────────────────────────────────────────────────────\n❯ typed after resize \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + } + }, + { + "step": "29-exit-confirm", + "legacy": "report/shots/80x24/legacy-29-exit-confirm.png", + "next": "report/shots/80x24/next-29-exit-confirm.png", + "diffFile": "report/shots/80x24/diff-29-exit-confirm.png", + "diff": { + "count": 37329, + "total": 258816, + "sizeA": [674, 384], + "sizeB": [674, 384] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " unrestricted access", + "next": "" + }, + { + "row": 1, + "legacy": " /mcp — Show configured MCP servers and their connection state", + "next": "▌ term² BARE ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒" + }, + { + "row": 2, + "legacy": " /mcp-login — Authenticate with an OAuth-protected MCP server", + "next": " mockprov/mock-alpha (default)" + }, + { + "row": 3, + "legacy": " /bridge — Attach or detach this local session for Discord bridge input", + "next": "" + }, + { + "row": 4, + "legacy": " /providers — Manage API providers (list, add, edit, delete)", + "next": "Press Ctrl+C again to exit" + }, + { + "row": 5, + "legacy": " /skills — Activate a skill for the next request", + "next": "────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 6, + "legacy": " /restart — Reload the built CLI in place; /restart stop consents to stopping", + "next": "❯ " + }, + { + "row": 7, + "legacy": " background work", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history" + }, + { + "row": 8, + "legacy": " /quit — Exit the application", + "next": "" + }, + { + "row": 9, + "legacy": " /help — Show commands and keyboard shortcuts", + "next": " Bare │ mockprov/mock-alpha" + }, + { + "row": 11, + "legacy": " Keyboard shortcuts", + "next": "" + }, + { + "row": 12, + "legacy": " Ctrl+C: clear draft or interrupt; press again to exit", + "next": "" + }, + { + "row": 13, + "legacy": " Ctrl+O: choose model · Ctrl+T: choose reasoning effort", + "next": "" + }, + { + "row": 14, + "legacy": " Shift+Tab: switch Standard/Plan · @: complete paths · !: shell", + "next": "" + }, + { + "row": 16, + "legacy": " Press Ctrl+C again to exit", + "next": "" + }, + { + "row": 19, + "legacy": " ────────────────────────────────────────────────────────────────────────────", + "next": "" + }, + { + "row": 20, + "legacy": " ❯ ", + "next": "" + }, + { + "row": 21, + "legacy": " / commands │ @ paths │ ! shell │ Shift+Tab plan", + "next": "" + }, + { + "row": 23, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": " unrestricted access\n /mcp — Show configured MCP servers and their connection state\n /mcp-login — Authenticate with an OAuth-protected MCP server\n /bridge — Attach or detach this local session for Discord bridge input\n /providers — Manage API providers (list, add, edit, delete)\n /skills — Activate a skill for the next request\n /restart — Reload the built CLI in place; /restart stop consents to stopping\n background work\n /quit — Exit the application\n /help — Show commands and keyboard shortcuts\n\n Keyboard shortcuts\n Ctrl+C: clear draft or interrupt; press again to exit\n Ctrl+O: choose model · Ctrl+T: choose reasoning effort\n Shift+Tab: switch Standard/Plan · @: complete paths · !: shell\n\n Press Ctrl+C again to exit\n\n\n ────────────────────────────────────────────────────────────────────────────\n ❯ \n / commands │ @ paths │ ! shell │ Shift+Tab plan\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\nPress Ctrl+C again to exit\n────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + } + }, + { + "step": "30-exited", + "legacy": "report/shots/80x24/legacy-30-exited.png", + "next": "report/shots/80x24/next-30-exited.png", + "diffFile": "report/shots/80x24/diff-30-exited.png", + "diff": { + "count": 38448, + "total": 258816, + "sizeA": [674, 384], + "sizeB": [674, 384] + }, + "identical": false, + "rows": [ + { + "row": 0, + "legacy": " background work", + "next": "" + }, + { + "row": 1, + "legacy": " /quit — Exit the application", + "next": "▌ term² BARE ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒" + }, + { + "row": 2, + "legacy": " /help — Show commands and keyboard shortcuts", + "next": " mockprov/mock-alpha (default)" + }, + { + "row": 4, + "legacy": " Keyboard shortcuts", + "next": "Press Ctrl+C again to exit" + }, + { + "row": 5, + "legacy": " Ctrl+C: clear draft or interrupt; press again to exit", + "next": "────────────────────────────────────────────────────────────────────────────────" + }, + { + "row": 6, + "legacy": " Ctrl+O: choose model · Ctrl+T: choose reasoning effort", + "next": "❯ " + }, + { + "row": 7, + "legacy": " Shift+Tab: switch Standard/Plan · @: complete paths · !: shell", + "next": "/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history" + }, + { + "row": 9, + "legacy": " Press Ctrl+C again to exit", + "next": " Bare │ mockprov/mock-alpha" + }, + { + "row": 12, + "legacy": " ────────────────────────────────────────────────────────────────────────────", + "next": "" + }, + { + "row": 13, + "legacy": " ❯ ", + "next": "" + }, + { + "row": 14, + "legacy": " / commands │ @ paths │ ! shell │ Shift+Tab plan", + "next": "" + }, + { + "row": 16, + "legacy": " Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k", + "next": "" + }, + { + "row": 17, + "legacy": "Token usage: 6,000 input, 400 output", + "next": "" + }, + { + "row": 18, + "legacy": "By model:", + "next": "" + }, + { + "row": 19, + "legacy": " mockprov/mock-alpha: 6,000 input, 400 output; Cost unavailable", + "next": "" + }, + { + "row": 21, + "legacy": "Session: ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒", + "next": "" + }, + { + "row": 22, + "legacy": "To resume this conversation: term2 --resume ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒", + "next": "" + } + ], + "notes": [], + "text": { + "legacy": " background work\n /quit — Exit the application\n /help — Show commands and keyboard shortcuts\n\n Keyboard shortcuts\n Ctrl+C: clear draft or interrupt; press again to exit\n Ctrl+O: choose model · Ctrl+T: choose reasoning effort\n Shift+Tab: switch Standard/Plan · @: complete paths · !: shell\n\n Press Ctrl+C again to exit\n\n\n ────────────────────────────────────────────────────────────────────────────\n ❯ \n / commands │ @ paths │ ! shell │ Shift+Tab plan\n\n Bare │ mockprov/mock-alpha │ ↑1.2k ↓80 · Ctx 1k\nToken usage: 6,000 input, 400 output\nBy model:\n mockprov/mock-alpha: 6,000 input, 400 output; Cost unavailable\n\nSession: 4257dac3-3ee2-4b4f-b172-30560cc9ae73\nTo resume this conversation: term2 --resume 4257dac3-3ee2-4b4f-b172-30560cc9ae73\n", + "next": "\n▌ term² BARE v0.40.0-dev+e9617ae\n mockprov/mock-alpha (default)\n\nPress Ctrl+C again to exit\n────────────────────────────────────────────────────────────────────────────────\n❯ \n/ commands │ @ paths │ ! shell │ Shift+Tab plan mode │ ↑/↓ history\n\n Bare │ mockprov/mock-alpha\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + } + } + ] + } + ], + "soak": [ + "[content] Start screen, top line: legacy `Profile: bare`; next `Profile: BARE`.", + "[appearance] Whole UI: legacy is indented 2 columns, so its divider is shorter than the terminal width; next starts at column 0 and the divider spans the full width.", + "[appearance] Start screen: legacy has 4 blank lines between the header and the input divider; next has 1.", + "[content] Footer hint, idle at 100 columns: legacy `/ commands │ @ paths │ ! shell │ Shift+Tab plan` (cut off); next `... Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output`.", + "[behaviour] Footer while typing: legacy hides the hint line whenever the input has text; next always shows it.", + "[appearance] After each reply: legacy leaves 2 blank lines before the divider and between turns; next has no blank line, and the divider sits right under the reply.", + "[appearance] Reply indent: legacy's reply starts at the same column as the user bubble; next's is indented 2 columns more than the bubble.", + "[content] Status bar after a turn: legacy `↑1.2k ↓80 · Ctx 1k`; next `↑1.2k ↓80 · 0% cached · Ctx last 1k`.", + "[content] Status bar over several turns: legacy stays at `↑1.2k ↓80`; next adds up (2.4k, 4.8k … 31.2k). next drops `Ctx last 1k` after a model switch.", + "[content] Status bar during streaming: legacy shows `(583.3t/s)`; next shows nothing. After the stream: legacy `(3.1t/s)`; next `3.1t/s` (no brackets).", + "[content/appearance] \"list the files\" tool row: legacy `✓ ls (34ms)` with `ls` bold white and the duration grey; next `✓ Shell command (12ms)`, all cyan.", + "[behaviour] Ctrl+O: legacy opens the model picker; next expands the tool output in place (exit 0, runtime, file list) with a `Lines x–y of N · PgUp/PgDn` viewer.", + "[appearance] Ctrl+O expand in next (seen twice): a stale copy of the latest turn is drawn above older content. Collapsing leaves only the last turn at the top and the rest of the screen blank.", + "[content/appearance] Approval prompt: legacy has a plain `Agent wants to run: shell` / `touch created-by-walk.txt` layout with options on the left and a description pane on the right. next has a boxed `Allow this action?` panel with `Owner: turn-4`, the call's arguments as one-line JSON and as pretty-printed JSON, and `○ Shell command … Running tools · 4s` above it.", + "[content] Approval options: legacy `1. Allow once / 2. Deny`; next adds `3. Deny without reason` and `Ctrl+G return to composer`. Key hints: legacy `… Esc interrupts the turn`; next `… Esc cancel`.", + "[content] Approved tool row: legacy `✓ touch created-by-walk.txt (9ms)`; next `✓ Shell command (9ms)`.", + "[content] Deny reason prompt: legacy `Why?` then `(or Esc to cancel)` on the next line; next `Why? (or Esc to cancel) · Enter without a reason` inside the box, later `(or Esc to go back)`.", + "[content] Denied tool row: legacy `✗ touch created-by-walk.txt` / `→ DENIED: Tool execution was not approved. User's reason: not now`; next `✗ Shell command` / `Full tool output: Ctrl+O`, without the reason.", + "[behaviour] Ctrl+G during an approval: legacy nothing; next moves to the composer with a text summary (`/answer 1 [text]`), and again opens a \"Pending interactions\" list.", + "[behaviour] Esc on an approval: legacy interrupts the turn (`Stopped`); next goes back to the \"Pending interactions\" list and the turn keeps waiting.", + "[content] Ctrl+C on a waiting approval in next: the user message `❯ create a file please` disappears from the transcript and no `Stopped` appears.", + "[behaviour/appearance] Typing `/`: legacy replaces the input line with `Filter:` and a bordered list with a scrollbar; next keeps `❯ /` in the input and shows the list above it.", + "[content] `/` menu contents and order: legacy starts `/model, /effort, /clear, /goal, /copy…` with `- description` and wrapped descriptions; next starts `/help, /providers, /model, /effort, /profile…` and adds `/tasks /queue /steer /followup /cancel /answer /command-status /command-apply /exit /rollover`. legacy has `/lite` and `/retry` that next lacks or words differently. Many descriptions are worded differently.", + "[appearance] Selected command: legacy `❯` with the row white/bold; next `›` with no row highlight.", + "[behaviour] Filtering `/re`: legacy also matches `/bare` and puts `/restart` first; next puts `/resume` first, no `/bare`. At 80 columns legacy's wrapped line is indented one space too far.", + "[behaviour] Tab in the `/` menu: legacy runs the highlighted command (opened `/resume`); next completes it into the input (`/retry `).", + "[content] `/help`: command lists differ. legacy shortcuts `Ctrl+C: clear draft or interrupt; press again to exit / Ctrl+O: choose model · Ctrl+T … / Shift+Tab: switch Standard/Plan…`; next `Enter send/steer · Alt+Enter follow-up · ↑/↓ history · PgUp/PgDn scroll · Ctrl+O tool output · Ctrl+T … / Ctrl+G approvals/tasks · Ctrl+B budget …`, with no blank lines.", + "[behaviour] Escaping some command menus (`/mcp`, `/profile`, `/tasks` that did not open): legacy leaves the command text in the input, so the next command was appended and sent as chat (`/mcp/skills`, `/tasks/copy`), with the error `Missing parent or Profile 'builtin:/providers'`; next leaves the input empty.", + "[behaviour] Status messages: next keeps only the latest one or two (the `/providers` output vanished after the next command); legacy keeps all of them.", + "[behaviour] `/model` opening tab: legacy opens on All with the models listed; next opens on an empty tab with `No matching models.`. legacy's empty tabs say `No favorites yet — press Ctrl+F…` / `No nicknames yet — …`.", + "[appearance/content] Model picker: legacy cyan border, `Filter:` above, `Select model`, hints incl. `ctrl+n nickname … ctrl+r refresh model list`; next grey border, bold `Choose a model`, `Filter: type to filter` inside, fewer hints, extra spaces before model names.", + "[content] Model chosen: legacy `Set model to mock-beta (mockprov)`; next `Model set to mockprov/mock-beta.`", + "[content] Effort picker: legacy `Reasoning effort =` input and `Current: default ·` above the box, `Enter will set: default`, `Tab use value │ Ctrl+D reset`; next `Current: default` inside, `default (current)`, shorter hints. After choosing: legacy no message; next `Reasoning effort set to high.`", + "[appearance/content] `/settings`: legacy tab bar with highlighted tab, aligned name/value columns, `● changed` markers, detail pane, `⏎ edit │ ● changed`; next `Settings · [Models] Providers…`, rows `Name · key: value`, 7 visible rows, `Current: … · Default: …`.", + "[content] `/settings` values: nicknames legacy `(none)`, next `[configured]`; API keys legacy ``, next `[hidden]`; booleans legacy `ON/OFF`, next `true/false`; legacy shows `↻` markers.", + "[behaviour] Enter on a boolean setting: legacy toggles it (● OFF, `default: ON`); next opens a text editor (`Editing app.notifications: ▏`).", + "[content] Settings search: legacy adds `Searching all settings, including advanced ones` and a `UI` tag per row; next adds `(true|false)` to the description.", + "[content] `/effort low`, `/auto-approve auto/off`: legacy prints no confirmation and no `Auto` in the status bar; next prints `Tool auto-approval set to auto.` and shows `│ Auto │`.", + "[behaviour] `/profile`: legacy opens a profile picker (Bare, Plan, Pair, Mentor, Orchestrator); next prints `Use /profile .`", + "[behaviour] `/providers`: legacy opens a \"Your Providers\" menu; next prints `Configured providers: mockprov (mockprov) — configured · active`.", + "[behaviour] `/auto-approve`: legacy opens a picker (off/advisory/auto/always); next prints `Tool auto-approval is off. Use /auto-approve …`.", + "[behaviour] `/mcp`: legacy opens \"MCP Server Management\" (+ Add user server); next prints instructions with the mcp.json path.", + "[behaviour] `/tasks`: legacy has no such command (the text stays in the input); next opens a \"Manage background tasks\" box.", + "[content] `/sandbox`: legacy `Shell sandbox mode enabled - restricting shell operations…` and `Sandboxed` in the status bar; next `Shell sandbox mode enabled (preference only; direct sandbox execution is unavailable).`, no status-bar change.", + "[behaviour] `/compact`: legacy `Compacting context...` then `Context compaction failed: Set agent.contextCompaction.compactThresholdTokens…`; next `Conversation compacted… Compaction complete.`", + "[behaviour] `/handoff`: legacy asks `Handoff message (enter to use default message):`, Esc gives `Handoff cancelled`; next immediately starts a new conversation with an \"Implement this: …\" turn, and the reply is cut off mid-word (`done. the command finis`).", + "[behaviour] `/retry` after a cancelled tool turn: legacy `No tool call to retry.`; next regenerates the turn (new approval), `Retrying.` / `Conversation history restored to retry.`", + "[behaviour] `/clear`: legacy keeps history, draws `── New conversation ──`, a new header and `Welcome to term²! Type a message to start chatting.`; next wipes the screen to a bare header, no welcome line.", + "[content] `/copy` right after the clear: legacy `Copied the latest assistant response…`; next `No assistant response to copy.` (transcripts differed at this point because of item 28).", + "[behaviour/content] `/rewind`: legacy shows each turn with `↳ discards N turns · N replies` and `⏎ rewind & edit │ ⇥ resend instead`; next a plain list, then a second step (`1. Edit in composer / 2. Resend`), then `Command · rewind · rewound / Conversation rewound… / Rewind draft restored…`.", + "[appearance] After a rewind, next's `Command … rewound / Conversation rewound…` lines stay and re-appear below every later reply.", + "[content] `/undo` in a resumed chat: legacy lists 4 turns, long ones cut with `…`; next lists 13, long ones wrapped without indent.", + "[speed] `/resume`: next did not react for about 2.5 minutes (07:20:38 to about 07:23:10; typed keys did nothing, then the list appeared), and after a restart showed `Loading conversations…` for about 2.5 minutes (07:35:24 to 07:37:50). legacy opened in 1–3 s both times; a second open in next in the same session was fast.", + "[content] Resume list: legacy 10 rows with `│` columns, full UUID, `Updated: 2026-11-04 07:19:53`, `Local • 10 msgs • mock-alpha • mode: bare`; next 8 rows, a `Preview` header, `ID: conv_…`, `Updated: 11/4/2026, 7:19:53 AM`, `Messages: 10`, `Model: mockprov/mock-beta`.", + "[content] Resume entries: legacy's older entries `RT-PROMPT please read the small file · 6 hours ago`; next's `RT-PROMPT one more question · 5 days ago`. Ages differ (\"hello there\" 9 vs 11 minutes ago), message counts differ (14 vs 16), and next lists empty `(no messages yet)` sessions.", + "[behaviour] PgDn in the resume list: legacy jumps to the bottom of the page; next does nothing.", + "[content] After resuming: legacy prints `Resumed conversation: `, next nothing. legacy's resumed transcript shows only the last couple of turns with a duplicated `RT-REPLY 6 plain answer.`; next shows many turns.", + "[behaviour] Up-arrow history: legacy recalls only chat messages; next also slash commands, and recalling `/rewind` opens the `/` menu, which then takes ↑/↓ so history cannot be navigated further.", + "[behaviour] `@` mention: legacy replaces the input with `Filter:` and a bordered list (src/, notes.txt, README.md, src/main.js); next keeps `look at @` and shows an unbordered list that also has `created-by-walk.txt`, in another order.", + "[appearance] `!` shell mode: legacy replaces the prompt with a red `!`; next shows `❯ !`.", + "[behaviour] Alt+Enter idle: legacy inserts nothing (`line oneline two`); next inserts a newline.", + "[behaviour] Esc on a draft: legacy `Press Esc again to clear input` and clears on the second Esc; next ignores Esc on a draft.", + "[behaviour] Once at 80x24 legacy treated Enter as a newline (`markdown please` plus an empty line; a second Enter sent two lines). Not reproduced in three attempts.", + "[content/appearance] Shift+Tab confirmation: legacy `▲ Switching to Plan mode requires clearing the current session. / Clear session and switch to Plan mode?` with ` Yes / ❯ No`; next `⚠ Switching modes requires clearing the current session. / Clear session and switch mode?` with `› No`. In next the last tool row (`✓ ls`) was drawn below the dialog.", + "[behaviour/content] After Yes: legacy shows a New-conversation divider, header, welcome and `Plan mode enabled`; next keeps the old transcript, adds a `PLAN` header, no message. Back: legacy `Switched to Bare mode`; next `Switched to builtin:bare for this session.`", + "[content] Footer while streaming: legacy `⏎ steer │ Alt+⏎ queue │ Ctrl+O model │ Ctrl+T effort`; next `Enter steer │ Alt+Enter follow-up │ /cancel stop`.", + "[content] Rate: legacy `Generating · 3s (583.3 tok/s)` (about 600–700); next `Generating · 4s (~156.6 tok/s)` (about 160–225, with `~`). legacy has a blank line before `Generating`.", + "[appearance] While streaming, next kept the stale `PLAN` header at the top, and the text started right under the user bubble with earlier lines cut off.", + "[behaviour] Enter (steer) while streaming: legacy queues it (`│ steer · mid-turn / steer this`), streams to the end, then answers; next stops the stream at once (`Stopped`) and answers `[steering message: the user sent this wh…` cut off mid-word, with the divider missing in the screenshot.", + "[content/appearance] Alt+Enter while streaming: legacy `│ queued · after this turn`, `[Q:1]` in the status bar, ↑ opens a queued-item editor (`e edit │ d delete`); next `Queue: running / Queued 1 (queued): …`, ↑ puts the text back in the input. Once, at the end of a stream, legacy's screen briefly showed old transcript lines with an empty `❯`.", + "[behaviour] Double Esc while streaming: legacy stops the reply; next ignores it.", + "[behaviour] Ctrl+C while streaming with a draft: next stops the turn, keeps the draft and pauses the queue (`Queue: paused · manual`).", + "[content] Stream end after a queued, steered or cancelled message: legacy's transcript stopped at the last full line (sw2494 / sw2446); next also showed the final short line (sw2495–sw2499, sw2447–sw2456). legacy's `Stopped` has a blank line before it, next's not. A stream left to finish showed sw2499 in both.", + "[behaviour] PgUp during or after streaming: legacy nothing; next scrolls only while the tool-output viewer is open.", + "[behaviour] `/queue` + Enter in next (queue paused): the menu stayed with no response for over 60 s; it ran only with a trailing space, printed usage and left the command in the input.", + "[appearance] At 80x24: legacy's reflowed long lines continue with a 3-space indent, next's with 2; next's footer drops `Ctrl+O tool output`.", + "[behaviour] Ctrl+C on an empty draft: next shows `Press Ctrl+C again to exit` above the divider and it stays; legacy shows it in the transcript, once two piled up.", + "[content] Exit: legacy printed `Token usage: 0 input, 0 output` (fresh session) and later `To resume this conversation: term2 --resume 9e6dd…`; next nothing for the fresh session, later `To resume this conversation: term2-next --resume 'conv_5dd…'`." + ], + "verdict": { + "latency": false, + "screenshots": false, + "identicalShots": 0, + "totalShots": 60, + "soak": "78 difference(s), all unexplained — fails the gate unless accepted" + } +} diff --git a/rewrite/parity/real-terminal/report/shots/100x34/diff-01-startup.png b/rewrite/parity/real-terminal/report/shots/100x34/diff-01-startup.png new file mode 100644 index 000000000..3c50d0f29 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/diff-01-startup.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/diff-02-composer-typed.png b/rewrite/parity/real-terminal/report/shots/100x34/diff-02-composer-typed.png new file mode 100644 index 000000000..bf943e1ec Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/diff-02-composer-typed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/diff-03-turn-markdown.png b/rewrite/parity/real-terminal/report/shots/100x34/diff-03-turn-markdown.png new file mode 100644 index 000000000..4deecbadd Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/diff-03-turn-markdown.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/diff-04-turn-tool-call.png b/rewrite/parity/real-terminal/report/shots/100x34/diff-04-turn-tool-call.png new file mode 100644 index 000000000..ac62cc156 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/diff-04-turn-tool-call.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/diff-05-approval-prompt.png b/rewrite/parity/real-terminal/report/shots/100x34/diff-05-approval-prompt.png new file mode 100644 index 000000000..7910d6376 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/diff-05-approval-prompt.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/diff-06-approval-approved.png b/rewrite/parity/real-terminal/report/shots/100x34/diff-06-approval-approved.png new file mode 100644 index 000000000..72a4a6c55 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/diff-06-approval-approved.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/diff-07-slash-menu.png b/rewrite/parity/real-terminal/report/shots/100x34/diff-07-slash-menu.png new file mode 100644 index 000000000..f4b8fac77 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/diff-07-slash-menu.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/diff-08-slash-menu-closed.png b/rewrite/parity/real-terminal/report/shots/100x34/diff-08-slash-menu-closed.png new file mode 100644 index 000000000..2f991fd7d Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/diff-08-slash-menu-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/diff-09-path-menu.png b/rewrite/parity/real-terminal/report/shots/100x34/diff-09-path-menu.png new file mode 100644 index 000000000..84b601ec3 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/diff-09-path-menu.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/diff-10-path-menu-closed.png b/rewrite/parity/real-terminal/report/shots/100x34/diff-10-path-menu-closed.png new file mode 100644 index 000000000..2f991fd7d Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/diff-10-path-menu-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/diff-11-menu-model.png b/rewrite/parity/real-terminal/report/shots/100x34/diff-11-menu-model.png new file mode 100644 index 000000000..d62441eb1 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/diff-11-menu-model.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/diff-12-menu-model-arrow.png b/rewrite/parity/real-terminal/report/shots/100x34/diff-12-menu-model-arrow.png new file mode 100644 index 000000000..77832e91c Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/diff-12-menu-model-arrow.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/diff-13-menu-model-closed.png b/rewrite/parity/real-terminal/report/shots/100x34/diff-13-menu-model-closed.png new file mode 100644 index 000000000..2f991fd7d Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/diff-13-menu-model-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/diff-14-menu-settings.png b/rewrite/parity/real-terminal/report/shots/100x34/diff-14-menu-settings.png new file mode 100644 index 000000000..a4037b61a Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/diff-14-menu-settings.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/diff-15-menu-settings-arrow.png b/rewrite/parity/real-terminal/report/shots/100x34/diff-15-menu-settings-arrow.png new file mode 100644 index 000000000..e2efb045c Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/diff-15-menu-settings-arrow.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/diff-16-menu-settings-closed.png b/rewrite/parity/real-terminal/report/shots/100x34/diff-16-menu-settings-closed.png new file mode 100644 index 000000000..161ab83c8 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/diff-16-menu-settings-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/diff-17-ctrl-o.png b/rewrite/parity/real-terminal/report/shots/100x34/diff-17-ctrl-o.png new file mode 100644 index 000000000..a50bba9ab Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/diff-17-ctrl-o.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/diff-18-ctrl-o-closed.png b/rewrite/parity/real-terminal/report/shots/100x34/diff-18-ctrl-o-closed.png new file mode 100644 index 000000000..e18789a7b Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/diff-18-ctrl-o-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/diff-19-shift-tab.png b/rewrite/parity/real-terminal/report/shots/100x34/diff-19-shift-tab.png new file mode 100644 index 000000000..f3e8b1522 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/diff-19-shift-tab.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/diff-20-shift-tab-restored.png b/rewrite/parity/real-terminal/report/shots/100x34/diff-20-shift-tab-restored.png new file mode 100644 index 000000000..e18789a7b Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/diff-20-shift-tab-restored.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/diff-21-help.png b/rewrite/parity/real-terminal/report/shots/100x34/diff-21-help.png new file mode 100644 index 000000000..dbe577eba Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/diff-21-help.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/diff-22-help-closed.png b/rewrite/parity/real-terminal/report/shots/100x34/diff-22-help-closed.png new file mode 100644 index 000000000..dbe577eba Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/diff-22-help-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/diff-23-resume-list.png b/rewrite/parity/real-terminal/report/shots/100x34/diff-23-resume-list.png new file mode 100644 index 000000000..06381fb10 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/diff-23-resume-list.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/diff-24-resume-preview.png b/rewrite/parity/real-terminal/report/shots/100x34/diff-24-resume-preview.png new file mode 100644 index 000000000..316d74072 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/diff-24-resume-preview.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/diff-25-resume-closed.png b/rewrite/parity/real-terminal/report/shots/100x34/diff-25-resume-closed.png new file mode 100644 index 000000000..a044ffffd Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/diff-25-resume-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/diff-26-resize.png b/rewrite/parity/real-terminal/report/shots/100x34/diff-26-resize.png new file mode 100644 index 000000000..dc97e8d91 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/diff-26-resize.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/diff-27-resize-typed.png b/rewrite/parity/real-terminal/report/shots/100x34/diff-27-resize-typed.png new file mode 100644 index 000000000..342e9dd83 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/diff-27-resize-typed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/diff-28-resize-back.png b/rewrite/parity/real-terminal/report/shots/100x34/diff-28-resize-back.png new file mode 100644 index 000000000..d28a51d37 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/diff-28-resize-back.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/diff-29-exit-confirm.png b/rewrite/parity/real-terminal/report/shots/100x34/diff-29-exit-confirm.png new file mode 100644 index 000000000..34946c144 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/diff-29-exit-confirm.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/diff-30-exited.png b/rewrite/parity/real-terminal/report/shots/100x34/diff-30-exited.png new file mode 100644 index 000000000..5e7c7ba34 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/diff-30-exited.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/legacy-01-startup.png b/rewrite/parity/real-terminal/report/shots/100x34/legacy-01-startup.png new file mode 100644 index 000000000..6927bfbbc Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/legacy-01-startup.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/legacy-02-composer-typed.png b/rewrite/parity/real-terminal/report/shots/100x34/legacy-02-composer-typed.png new file mode 100644 index 000000000..aa11517f2 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/legacy-02-composer-typed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/legacy-03-turn-markdown.png b/rewrite/parity/real-terminal/report/shots/100x34/legacy-03-turn-markdown.png new file mode 100644 index 000000000..23bc97a95 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/legacy-03-turn-markdown.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/legacy-04-turn-tool-call.png b/rewrite/parity/real-terminal/report/shots/100x34/legacy-04-turn-tool-call.png new file mode 100644 index 000000000..d85e661e4 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/legacy-04-turn-tool-call.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/legacy-05-approval-prompt.png b/rewrite/parity/real-terminal/report/shots/100x34/legacy-05-approval-prompt.png new file mode 100644 index 000000000..89a1572a8 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/legacy-05-approval-prompt.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/legacy-06-approval-approved.png b/rewrite/parity/real-terminal/report/shots/100x34/legacy-06-approval-approved.png new file mode 100644 index 000000000..58d2e2d3e Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/legacy-06-approval-approved.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/legacy-07-slash-menu.png b/rewrite/parity/real-terminal/report/shots/100x34/legacy-07-slash-menu.png new file mode 100644 index 000000000..8ac963961 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/legacy-07-slash-menu.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/legacy-08-slash-menu-closed.png b/rewrite/parity/real-terminal/report/shots/100x34/legacy-08-slash-menu-closed.png new file mode 100644 index 000000000..ab0f3db36 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/legacy-08-slash-menu-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/legacy-09-path-menu.png b/rewrite/parity/real-terminal/report/shots/100x34/legacy-09-path-menu.png new file mode 100644 index 000000000..d7a8bc768 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/legacy-09-path-menu.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/legacy-10-path-menu-closed.png b/rewrite/parity/real-terminal/report/shots/100x34/legacy-10-path-menu-closed.png new file mode 100644 index 000000000..ab0f3db36 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/legacy-10-path-menu-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/legacy-11-menu-model.png b/rewrite/parity/real-terminal/report/shots/100x34/legacy-11-menu-model.png new file mode 100644 index 000000000..a14579bd0 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/legacy-11-menu-model.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/legacy-12-menu-model-arrow.png b/rewrite/parity/real-terminal/report/shots/100x34/legacy-12-menu-model-arrow.png new file mode 100644 index 000000000..ec122f487 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/legacy-12-menu-model-arrow.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/legacy-13-menu-model-closed.png b/rewrite/parity/real-terminal/report/shots/100x34/legacy-13-menu-model-closed.png new file mode 100644 index 000000000..ab0f3db36 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/legacy-13-menu-model-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/legacy-14-menu-settings.png b/rewrite/parity/real-terminal/report/shots/100x34/legacy-14-menu-settings.png new file mode 100644 index 000000000..38de2fff4 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/legacy-14-menu-settings.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/legacy-15-menu-settings-arrow.png b/rewrite/parity/real-terminal/report/shots/100x34/legacy-15-menu-settings-arrow.png new file mode 100644 index 000000000..1774e6abb Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/legacy-15-menu-settings-arrow.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/legacy-16-menu-settings-closed.png b/rewrite/parity/real-terminal/report/shots/100x34/legacy-16-menu-settings-closed.png new file mode 100644 index 000000000..591a7d1e5 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/legacy-16-menu-settings-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/legacy-17-ctrl-o.png b/rewrite/parity/real-terminal/report/shots/100x34/legacy-17-ctrl-o.png new file mode 100644 index 000000000..e19849adf Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/legacy-17-ctrl-o.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/legacy-18-ctrl-o-closed.png b/rewrite/parity/real-terminal/report/shots/100x34/legacy-18-ctrl-o-closed.png new file mode 100644 index 000000000..d209e7963 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/legacy-18-ctrl-o-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/legacy-19-shift-tab.png b/rewrite/parity/real-terminal/report/shots/100x34/legacy-19-shift-tab.png new file mode 100644 index 000000000..1e12f25de Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/legacy-19-shift-tab.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/legacy-20-shift-tab-restored.png b/rewrite/parity/real-terminal/report/shots/100x34/legacy-20-shift-tab-restored.png new file mode 100644 index 000000000..d209e7963 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/legacy-20-shift-tab-restored.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/legacy-21-help.png b/rewrite/parity/real-terminal/report/shots/100x34/legacy-21-help.png new file mode 100644 index 000000000..426551e32 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/legacy-21-help.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/legacy-22-help-closed.png b/rewrite/parity/real-terminal/report/shots/100x34/legacy-22-help-closed.png new file mode 100644 index 000000000..426551e32 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/legacy-22-help-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/legacy-23-resume-list.png b/rewrite/parity/real-terminal/report/shots/100x34/legacy-23-resume-list.png new file mode 100644 index 000000000..8b81e4887 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/legacy-23-resume-list.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/legacy-24-resume-preview.png b/rewrite/parity/real-terminal/report/shots/100x34/legacy-24-resume-preview.png new file mode 100644 index 000000000..ad97a52b5 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/legacy-24-resume-preview.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/legacy-25-resume-closed.png b/rewrite/parity/real-terminal/report/shots/100x34/legacy-25-resume-closed.png new file mode 100644 index 000000000..426551e32 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/legacy-25-resume-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/legacy-26-resize.png b/rewrite/parity/real-terminal/report/shots/100x34/legacy-26-resize.png new file mode 100644 index 000000000..cf2c4473e Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/legacy-26-resize.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/legacy-27-resize-typed.png b/rewrite/parity/real-terminal/report/shots/100x34/legacy-27-resize-typed.png new file mode 100644 index 000000000..c0cb0c046 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/legacy-27-resize-typed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/legacy-28-resize-back.png b/rewrite/parity/real-terminal/report/shots/100x34/legacy-28-resize-back.png new file mode 100644 index 000000000..d6acae671 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/legacy-28-resize-back.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/legacy-29-exit-confirm.png b/rewrite/parity/real-terminal/report/shots/100x34/legacy-29-exit-confirm.png new file mode 100644 index 000000000..3f475eb30 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/legacy-29-exit-confirm.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/legacy-30-exited.png b/rewrite/parity/real-terminal/report/shots/100x34/legacy-30-exited.png new file mode 100644 index 000000000..f7d6b3113 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/legacy-30-exited.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/next-01-startup.png b/rewrite/parity/real-terminal/report/shots/100x34/next-01-startup.png new file mode 100644 index 000000000..3e06e1226 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/next-01-startup.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/next-02-composer-typed.png b/rewrite/parity/real-terminal/report/shots/100x34/next-02-composer-typed.png new file mode 100644 index 000000000..7bce16423 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/next-02-composer-typed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/next-03-turn-markdown.png b/rewrite/parity/real-terminal/report/shots/100x34/next-03-turn-markdown.png new file mode 100644 index 000000000..c2e703c11 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/next-03-turn-markdown.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/next-04-turn-tool-call.png b/rewrite/parity/real-terminal/report/shots/100x34/next-04-turn-tool-call.png new file mode 100644 index 000000000..85df8ba82 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/next-04-turn-tool-call.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/next-05-approval-prompt.png b/rewrite/parity/real-terminal/report/shots/100x34/next-05-approval-prompt.png new file mode 100644 index 000000000..3cd7c2ce4 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/next-05-approval-prompt.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/next-06-approval-approved.png b/rewrite/parity/real-terminal/report/shots/100x34/next-06-approval-approved.png new file mode 100644 index 000000000..400875259 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/next-06-approval-approved.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/next-07-slash-menu.png b/rewrite/parity/real-terminal/report/shots/100x34/next-07-slash-menu.png new file mode 100644 index 000000000..8b1d23ae1 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/next-07-slash-menu.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/next-08-slash-menu-closed.png b/rewrite/parity/real-terminal/report/shots/100x34/next-08-slash-menu-closed.png new file mode 100644 index 000000000..400875259 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/next-08-slash-menu-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/next-09-path-menu.png b/rewrite/parity/real-terminal/report/shots/100x34/next-09-path-menu.png new file mode 100644 index 000000000..3bc60c53c Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/next-09-path-menu.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/next-10-path-menu-closed.png b/rewrite/parity/real-terminal/report/shots/100x34/next-10-path-menu-closed.png new file mode 100644 index 000000000..400875259 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/next-10-path-menu-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/next-11-menu-model.png b/rewrite/parity/real-terminal/report/shots/100x34/next-11-menu-model.png new file mode 100644 index 000000000..3e2ee7261 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/next-11-menu-model.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/next-12-menu-model-arrow.png b/rewrite/parity/real-terminal/report/shots/100x34/next-12-menu-model-arrow.png new file mode 100644 index 000000000..3e2ee7261 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/next-12-menu-model-arrow.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/next-13-menu-model-closed.png b/rewrite/parity/real-terminal/report/shots/100x34/next-13-menu-model-closed.png new file mode 100644 index 000000000..400875259 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/next-13-menu-model-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/next-14-menu-settings.png b/rewrite/parity/real-terminal/report/shots/100x34/next-14-menu-settings.png new file mode 100644 index 000000000..23b7e7a7b Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/next-14-menu-settings.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/next-15-menu-settings-arrow.png b/rewrite/parity/real-terminal/report/shots/100x34/next-15-menu-settings-arrow.png new file mode 100644 index 000000000..75584d6d5 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/next-15-menu-settings-arrow.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/next-16-menu-settings-closed.png b/rewrite/parity/real-terminal/report/shots/100x34/next-16-menu-settings-closed.png new file mode 100644 index 000000000..400875259 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/next-16-menu-settings-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/next-17-ctrl-o.png b/rewrite/parity/real-terminal/report/shots/100x34/next-17-ctrl-o.png new file mode 100644 index 000000000..6d92173c4 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/next-17-ctrl-o.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/next-18-ctrl-o-closed.png b/rewrite/parity/real-terminal/report/shots/100x34/next-18-ctrl-o-closed.png new file mode 100644 index 000000000..6c6ff8515 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/next-18-ctrl-o-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/next-19-shift-tab.png b/rewrite/parity/real-terminal/report/shots/100x34/next-19-shift-tab.png new file mode 100644 index 000000000..5bc24b210 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/next-19-shift-tab.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/next-20-shift-tab-restored.png b/rewrite/parity/real-terminal/report/shots/100x34/next-20-shift-tab-restored.png new file mode 100644 index 000000000..6c6ff8515 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/next-20-shift-tab-restored.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/next-21-help.png b/rewrite/parity/real-terminal/report/shots/100x34/next-21-help.png new file mode 100644 index 000000000..d9705da86 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/next-21-help.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/next-22-help-closed.png b/rewrite/parity/real-terminal/report/shots/100x34/next-22-help-closed.png new file mode 100644 index 000000000..d9705da86 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/next-22-help-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/next-23-resume-list.png b/rewrite/parity/real-terminal/report/shots/100x34/next-23-resume-list.png new file mode 100644 index 000000000..94361107b Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/next-23-resume-list.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/next-24-resume-preview.png b/rewrite/parity/real-terminal/report/shots/100x34/next-24-resume-preview.png new file mode 100644 index 000000000..94361107b Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/next-24-resume-preview.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/next-25-resume-closed.png b/rewrite/parity/real-terminal/report/shots/100x34/next-25-resume-closed.png new file mode 100644 index 000000000..94361107b Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/next-25-resume-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/next-26-resize.png b/rewrite/parity/real-terminal/report/shots/100x34/next-26-resize.png new file mode 100644 index 000000000..5ee51f71c Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/next-26-resize.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/next-27-resize-typed.png b/rewrite/parity/real-terminal/report/shots/100x34/next-27-resize-typed.png new file mode 100644 index 000000000..d75ca68da Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/next-27-resize-typed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/next-28-resize-back.png b/rewrite/parity/real-terminal/report/shots/100x34/next-28-resize-back.png new file mode 100644 index 000000000..b3fc4ddb2 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/next-28-resize-back.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/next-29-exit-confirm.png b/rewrite/parity/real-terminal/report/shots/100x34/next-29-exit-confirm.png new file mode 100644 index 000000000..fa1bbe924 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/next-29-exit-confirm.png differ diff --git a/rewrite/parity/real-terminal/report/shots/100x34/next-30-exited.png b/rewrite/parity/real-terminal/report/shots/100x34/next-30-exited.png new file mode 100644 index 000000000..fa1bbe924 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/100x34/next-30-exited.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/diff-01-startup.png b/rewrite/parity/real-terminal/report/shots/80x24/diff-01-startup.png new file mode 100644 index 000000000..18978ff52 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/diff-01-startup.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/diff-02-composer-typed.png b/rewrite/parity/real-terminal/report/shots/80x24/diff-02-composer-typed.png new file mode 100644 index 000000000..07212dbf9 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/diff-02-composer-typed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/diff-03-turn-markdown.png b/rewrite/parity/real-terminal/report/shots/80x24/diff-03-turn-markdown.png new file mode 100644 index 000000000..d245258b2 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/diff-03-turn-markdown.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/diff-04-turn-tool-call.png b/rewrite/parity/real-terminal/report/shots/80x24/diff-04-turn-tool-call.png new file mode 100644 index 000000000..9be8c963a Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/diff-04-turn-tool-call.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/diff-05-approval-prompt.png b/rewrite/parity/real-terminal/report/shots/80x24/diff-05-approval-prompt.png new file mode 100644 index 000000000..521b19e3a Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/diff-05-approval-prompt.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/diff-06-approval-approved.png b/rewrite/parity/real-terminal/report/shots/80x24/diff-06-approval-approved.png new file mode 100644 index 000000000..b5a958839 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/diff-06-approval-approved.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/diff-07-slash-menu.png b/rewrite/parity/real-terminal/report/shots/80x24/diff-07-slash-menu.png new file mode 100644 index 000000000..51efcbd20 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/diff-07-slash-menu.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/diff-08-slash-menu-closed.png b/rewrite/parity/real-terminal/report/shots/80x24/diff-08-slash-menu-closed.png new file mode 100644 index 000000000..9ef79e6fc Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/diff-08-slash-menu-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/diff-09-path-menu.png b/rewrite/parity/real-terminal/report/shots/80x24/diff-09-path-menu.png new file mode 100644 index 000000000..c7bf8e370 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/diff-09-path-menu.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/diff-10-path-menu-closed.png b/rewrite/parity/real-terminal/report/shots/80x24/diff-10-path-menu-closed.png new file mode 100644 index 000000000..914539a42 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/diff-10-path-menu-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/diff-11-menu-model.png b/rewrite/parity/real-terminal/report/shots/80x24/diff-11-menu-model.png new file mode 100644 index 000000000..7298b3415 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/diff-11-menu-model.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/diff-12-menu-model-arrow.png b/rewrite/parity/real-terminal/report/shots/80x24/diff-12-menu-model-arrow.png new file mode 100644 index 000000000..005d32b58 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/diff-12-menu-model-arrow.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/diff-13-menu-model-closed.png b/rewrite/parity/real-terminal/report/shots/80x24/diff-13-menu-model-closed.png new file mode 100644 index 000000000..95ddf1649 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/diff-13-menu-model-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/diff-14-menu-settings.png b/rewrite/parity/real-terminal/report/shots/80x24/diff-14-menu-settings.png new file mode 100644 index 000000000..1b8272581 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/diff-14-menu-settings.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/diff-15-menu-settings-arrow.png b/rewrite/parity/real-terminal/report/shots/80x24/diff-15-menu-settings-arrow.png new file mode 100644 index 000000000..2030e6d49 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/diff-15-menu-settings-arrow.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/diff-16-menu-settings-closed.png b/rewrite/parity/real-terminal/report/shots/80x24/diff-16-menu-settings-closed.png new file mode 100644 index 000000000..9ef79e6fc Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/diff-16-menu-settings-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/diff-17-ctrl-o.png b/rewrite/parity/real-terminal/report/shots/80x24/diff-17-ctrl-o.png new file mode 100644 index 000000000..e24f9a220 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/diff-17-ctrl-o.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/diff-18-ctrl-o-closed.png b/rewrite/parity/real-terminal/report/shots/80x24/diff-18-ctrl-o-closed.png new file mode 100644 index 000000000..95ddf1649 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/diff-18-ctrl-o-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/diff-19-shift-tab.png b/rewrite/parity/real-terminal/report/shots/80x24/diff-19-shift-tab.png new file mode 100644 index 000000000..8b6a1ed3d Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/diff-19-shift-tab.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/diff-20-shift-tab-restored.png b/rewrite/parity/real-terminal/report/shots/80x24/diff-20-shift-tab-restored.png new file mode 100644 index 000000000..95ddf1649 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/diff-20-shift-tab-restored.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/diff-21-help.png b/rewrite/parity/real-terminal/report/shots/80x24/diff-21-help.png new file mode 100644 index 000000000..cc893eda6 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/diff-21-help.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/diff-22-help-closed.png b/rewrite/parity/real-terminal/report/shots/80x24/diff-22-help-closed.png new file mode 100644 index 000000000..cc893eda6 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/diff-22-help-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/diff-23-resume-list.png b/rewrite/parity/real-terminal/report/shots/80x24/diff-23-resume-list.png new file mode 100644 index 000000000..50d8de339 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/diff-23-resume-list.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/diff-24-resume-preview.png b/rewrite/parity/real-terminal/report/shots/80x24/diff-24-resume-preview.png new file mode 100644 index 000000000..b95f08ccd Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/diff-24-resume-preview.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/diff-25-resume-closed.png b/rewrite/parity/real-terminal/report/shots/80x24/diff-25-resume-closed.png new file mode 100644 index 000000000..fbb9a1fa1 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/diff-25-resume-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/diff-26-resize.png b/rewrite/parity/real-terminal/report/shots/80x24/diff-26-resize.png new file mode 100644 index 000000000..f212518ec Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/diff-26-resize.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/diff-27-resize-typed.png b/rewrite/parity/real-terminal/report/shots/80x24/diff-27-resize-typed.png new file mode 100644 index 000000000..1d6ed6c4f Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/diff-27-resize-typed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/diff-28-resize-back.png b/rewrite/parity/real-terminal/report/shots/80x24/diff-28-resize-back.png new file mode 100644 index 000000000..bfbd7f5f8 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/diff-28-resize-back.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/diff-29-exit-confirm.png b/rewrite/parity/real-terminal/report/shots/80x24/diff-29-exit-confirm.png new file mode 100644 index 000000000..dee807a70 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/diff-29-exit-confirm.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/diff-30-exited.png b/rewrite/parity/real-terminal/report/shots/80x24/diff-30-exited.png new file mode 100644 index 000000000..c10abc8f5 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/diff-30-exited.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/legacy-01-startup.png b/rewrite/parity/real-terminal/report/shots/80x24/legacy-01-startup.png new file mode 100644 index 000000000..e931481fe Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/legacy-01-startup.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/legacy-02-composer-typed.png b/rewrite/parity/real-terminal/report/shots/80x24/legacy-02-composer-typed.png new file mode 100644 index 000000000..d0c41a2c4 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/legacy-02-composer-typed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/legacy-03-turn-markdown.png b/rewrite/parity/real-terminal/report/shots/80x24/legacy-03-turn-markdown.png new file mode 100644 index 000000000..425eaf685 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/legacy-03-turn-markdown.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/legacy-04-turn-tool-call.png b/rewrite/parity/real-terminal/report/shots/80x24/legacy-04-turn-tool-call.png new file mode 100644 index 000000000..e03fc6aa8 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/legacy-04-turn-tool-call.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/legacy-05-approval-prompt.png b/rewrite/parity/real-terminal/report/shots/80x24/legacy-05-approval-prompt.png new file mode 100644 index 000000000..3f2c998b2 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/legacy-05-approval-prompt.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/legacy-06-approval-approved.png b/rewrite/parity/real-terminal/report/shots/80x24/legacy-06-approval-approved.png new file mode 100644 index 000000000..d47481ba6 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/legacy-06-approval-approved.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/legacy-07-slash-menu.png b/rewrite/parity/real-terminal/report/shots/80x24/legacy-07-slash-menu.png new file mode 100644 index 000000000..5dab34922 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/legacy-07-slash-menu.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/legacy-08-slash-menu-closed.png b/rewrite/parity/real-terminal/report/shots/80x24/legacy-08-slash-menu-closed.png new file mode 100644 index 000000000..dfd28973a Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/legacy-08-slash-menu-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/legacy-09-path-menu.png b/rewrite/parity/real-terminal/report/shots/80x24/legacy-09-path-menu.png new file mode 100644 index 000000000..2b130110e Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/legacy-09-path-menu.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/legacy-10-path-menu-closed.png b/rewrite/parity/real-terminal/report/shots/80x24/legacy-10-path-menu-closed.png new file mode 100644 index 000000000..ecd3b1a4c Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/legacy-10-path-menu-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/legacy-11-menu-model.png b/rewrite/parity/real-terminal/report/shots/80x24/legacy-11-menu-model.png new file mode 100644 index 000000000..13553616b Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/legacy-11-menu-model.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/legacy-12-menu-model-arrow.png b/rewrite/parity/real-terminal/report/shots/80x24/legacy-12-menu-model-arrow.png new file mode 100644 index 000000000..ae2e7e3fc Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/legacy-12-menu-model-arrow.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/legacy-13-menu-model-closed.png b/rewrite/parity/real-terminal/report/shots/80x24/legacy-13-menu-model-closed.png new file mode 100644 index 000000000..15a7df951 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/legacy-13-menu-model-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/legacy-14-menu-settings.png b/rewrite/parity/real-terminal/report/shots/80x24/legacy-14-menu-settings.png new file mode 100644 index 000000000..95c4d0a02 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/legacy-14-menu-settings.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/legacy-15-menu-settings-arrow.png b/rewrite/parity/real-terminal/report/shots/80x24/legacy-15-menu-settings-arrow.png new file mode 100644 index 000000000..11eaedacf Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/legacy-15-menu-settings-arrow.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/legacy-16-menu-settings-closed.png b/rewrite/parity/real-terminal/report/shots/80x24/legacy-16-menu-settings-closed.png new file mode 100644 index 000000000..dfd28973a Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/legacy-16-menu-settings-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/legacy-17-ctrl-o.png b/rewrite/parity/real-terminal/report/shots/80x24/legacy-17-ctrl-o.png new file mode 100644 index 000000000..13553616b Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/legacy-17-ctrl-o.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/legacy-18-ctrl-o-closed.png b/rewrite/parity/real-terminal/report/shots/80x24/legacy-18-ctrl-o-closed.png new file mode 100644 index 000000000..15a7df951 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/legacy-18-ctrl-o-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/legacy-19-shift-tab.png b/rewrite/parity/real-terminal/report/shots/80x24/legacy-19-shift-tab.png new file mode 100644 index 000000000..87e759a55 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/legacy-19-shift-tab.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/legacy-20-shift-tab-restored.png b/rewrite/parity/real-terminal/report/shots/80x24/legacy-20-shift-tab-restored.png new file mode 100644 index 000000000..15a7df951 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/legacy-20-shift-tab-restored.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/legacy-21-help.png b/rewrite/parity/real-terminal/report/shots/80x24/legacy-21-help.png new file mode 100644 index 000000000..5717c568c Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/legacy-21-help.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/legacy-22-help-closed.png b/rewrite/parity/real-terminal/report/shots/80x24/legacy-22-help-closed.png new file mode 100644 index 000000000..5717c568c Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/legacy-22-help-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/legacy-23-resume-list.png b/rewrite/parity/real-terminal/report/shots/80x24/legacy-23-resume-list.png new file mode 100644 index 000000000..0fdefab83 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/legacy-23-resume-list.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/legacy-24-resume-preview.png b/rewrite/parity/real-terminal/report/shots/80x24/legacy-24-resume-preview.png new file mode 100644 index 000000000..cdeb43282 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/legacy-24-resume-preview.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/legacy-25-resume-closed.png b/rewrite/parity/real-terminal/report/shots/80x24/legacy-25-resume-closed.png new file mode 100644 index 000000000..5717c568c Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/legacy-25-resume-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/legacy-26-resize.png b/rewrite/parity/real-terminal/report/shots/80x24/legacy-26-resize.png new file mode 100644 index 000000000..df4d8a554 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/legacy-26-resize.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/legacy-27-resize-typed.png b/rewrite/parity/real-terminal/report/shots/80x24/legacy-27-resize-typed.png new file mode 100644 index 000000000..8bf33676c Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/legacy-27-resize-typed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/legacy-28-resize-back.png b/rewrite/parity/real-terminal/report/shots/80x24/legacy-28-resize-back.png new file mode 100644 index 000000000..ea2c88c11 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/legacy-28-resize-back.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/legacy-29-exit-confirm.png b/rewrite/parity/real-terminal/report/shots/80x24/legacy-29-exit-confirm.png new file mode 100644 index 000000000..ae8637579 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/legacy-29-exit-confirm.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/legacy-30-exited.png b/rewrite/parity/real-terminal/report/shots/80x24/legacy-30-exited.png new file mode 100644 index 000000000..9b7afc2f0 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/legacy-30-exited.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/next-01-startup.png b/rewrite/parity/real-terminal/report/shots/80x24/next-01-startup.png new file mode 100644 index 000000000..68f809469 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/next-01-startup.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/next-02-composer-typed.png b/rewrite/parity/real-terminal/report/shots/80x24/next-02-composer-typed.png new file mode 100644 index 000000000..f583b495e Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/next-02-composer-typed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/next-03-turn-markdown.png b/rewrite/parity/real-terminal/report/shots/80x24/next-03-turn-markdown.png new file mode 100644 index 000000000..ff468c3fa Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/next-03-turn-markdown.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/next-04-turn-tool-call.png b/rewrite/parity/real-terminal/report/shots/80x24/next-04-turn-tool-call.png new file mode 100644 index 000000000..7b1d87cde Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/next-04-turn-tool-call.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/next-05-approval-prompt.png b/rewrite/parity/real-terminal/report/shots/80x24/next-05-approval-prompt.png new file mode 100644 index 000000000..0dbb06636 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/next-05-approval-prompt.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/next-06-approval-approved.png b/rewrite/parity/real-terminal/report/shots/80x24/next-06-approval-approved.png new file mode 100644 index 000000000..d965e4321 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/next-06-approval-approved.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/next-07-slash-menu.png b/rewrite/parity/real-terminal/report/shots/80x24/next-07-slash-menu.png new file mode 100644 index 000000000..833d8e5ed Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/next-07-slash-menu.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/next-08-slash-menu-closed.png b/rewrite/parity/real-terminal/report/shots/80x24/next-08-slash-menu-closed.png new file mode 100644 index 000000000..8a9b1566d Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/next-08-slash-menu-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/next-09-path-menu.png b/rewrite/parity/real-terminal/report/shots/80x24/next-09-path-menu.png new file mode 100644 index 000000000..b9c733180 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/next-09-path-menu.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/next-10-path-menu-closed.png b/rewrite/parity/real-terminal/report/shots/80x24/next-10-path-menu-closed.png new file mode 100644 index 000000000..8a9b1566d Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/next-10-path-menu-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/next-11-menu-model.png b/rewrite/parity/real-terminal/report/shots/80x24/next-11-menu-model.png new file mode 100644 index 000000000..b2d2e8a6b Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/next-11-menu-model.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/next-12-menu-model-arrow.png b/rewrite/parity/real-terminal/report/shots/80x24/next-12-menu-model-arrow.png new file mode 100644 index 000000000..b2d2e8a6b Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/next-12-menu-model-arrow.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/next-13-menu-model-closed.png b/rewrite/parity/real-terminal/report/shots/80x24/next-13-menu-model-closed.png new file mode 100644 index 000000000..8a9b1566d Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/next-13-menu-model-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/next-14-menu-settings.png b/rewrite/parity/real-terminal/report/shots/80x24/next-14-menu-settings.png new file mode 100644 index 000000000..945383d52 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/next-14-menu-settings.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/next-15-menu-settings-arrow.png b/rewrite/parity/real-terminal/report/shots/80x24/next-15-menu-settings-arrow.png new file mode 100644 index 000000000..1b3998bf0 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/next-15-menu-settings-arrow.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/next-16-menu-settings-closed.png b/rewrite/parity/real-terminal/report/shots/80x24/next-16-menu-settings-closed.png new file mode 100644 index 000000000..8a9b1566d Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/next-16-menu-settings-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/next-17-ctrl-o.png b/rewrite/parity/real-terminal/report/shots/80x24/next-17-ctrl-o.png new file mode 100644 index 000000000..a4606a21a Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/next-17-ctrl-o.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/next-18-ctrl-o-closed.png b/rewrite/parity/real-terminal/report/shots/80x24/next-18-ctrl-o-closed.png new file mode 100644 index 000000000..8a9b1566d Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/next-18-ctrl-o-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/next-19-shift-tab.png b/rewrite/parity/real-terminal/report/shots/80x24/next-19-shift-tab.png new file mode 100644 index 000000000..8b19f4f0d Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/next-19-shift-tab.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/next-20-shift-tab-restored.png b/rewrite/parity/real-terminal/report/shots/80x24/next-20-shift-tab-restored.png new file mode 100644 index 000000000..8a9b1566d Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/next-20-shift-tab-restored.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/next-21-help.png b/rewrite/parity/real-terminal/report/shots/80x24/next-21-help.png new file mode 100644 index 000000000..80c4c421e Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/next-21-help.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/next-22-help-closed.png b/rewrite/parity/real-terminal/report/shots/80x24/next-22-help-closed.png new file mode 100644 index 000000000..80c4c421e Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/next-22-help-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/next-23-resume-list.png b/rewrite/parity/real-terminal/report/shots/80x24/next-23-resume-list.png new file mode 100644 index 000000000..5be567b5c Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/next-23-resume-list.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/next-24-resume-preview.png b/rewrite/parity/real-terminal/report/shots/80x24/next-24-resume-preview.png new file mode 100644 index 000000000..5be567b5c Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/next-24-resume-preview.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/next-25-resume-closed.png b/rewrite/parity/real-terminal/report/shots/80x24/next-25-resume-closed.png new file mode 100644 index 000000000..5be567b5c Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/next-25-resume-closed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/next-26-resize.png b/rewrite/parity/real-terminal/report/shots/80x24/next-26-resize.png new file mode 100644 index 000000000..aa478f973 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/next-26-resize.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/next-27-resize-typed.png b/rewrite/parity/real-terminal/report/shots/80x24/next-27-resize-typed.png new file mode 100644 index 000000000..b3fc4ddb2 Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/next-27-resize-typed.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/next-28-resize-back.png b/rewrite/parity/real-terminal/report/shots/80x24/next-28-resize-back.png new file mode 100644 index 000000000..d75ca68da Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/next-28-resize-back.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/next-29-exit-confirm.png b/rewrite/parity/real-terminal/report/shots/80x24/next-29-exit-confirm.png new file mode 100644 index 000000000..3f006564f Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/next-29-exit-confirm.png differ diff --git a/rewrite/parity/real-terminal/report/shots/80x24/next-30-exited.png b/rewrite/parity/real-terminal/report/shots/80x24/next-30-exited.png new file mode 100644 index 000000000..3f006564f Binary files /dev/null and b/rewrite/parity/real-terminal/report/shots/80x24/next-30-exited.png differ diff --git a/rewrite/parity/real-terminal/report/soak-differences.md b/rewrite/parity/real-terminal/report/soak-differences.md new file mode 100644 index 000000000..f13b06b6e --- /dev/null +++ b/rewrite/parity/real-terminal/report/soak-differences.md @@ -0,0 +1,126 @@ +# Soak differences (2026-11-04, 07:16:43–07:47:03 UTC) + +A context-free agent used both CLIs side by side for 30 minutes through `soak.mjs` (brief: +`../SOAK-BRIEF.md`), 100x34 with a resize to 80x24, on the generated 420 MB store. It saw them as A and B; +the random mapping was A = legacy, B = term2-next, filled in below after the run. Wording is the agent's, +lightly trimmed. Every item is **unexplained** and fails the gate until the owner's team accepts it; none +has been fixed. `soak.json` holds the same list for `run.mjs --soak`. + +Operator notes (context the agent did not have, not explanations): + +- The soak homes carry no compaction settings, so legacy's manual `/compact` cannot run for the + uncatalogued fake model (item 45); term2-next compacts with the same settings. +- From about 07:20 the two sessions drifted apart after item 28, so some later counts (turns, messages, + `/copy`) compare different transcripts; the agent used `/clear` to line them up where it could. + +## Start screen and layout + +1. **unexplained** [content] Start screen, top line: legacy `Profile: bare`; next `Profile: BARE`. +2. **unexplained** [appearance] Whole UI: legacy is indented 2 columns, so its divider is shorter than the terminal width; next starts at column 0 and the divider spans the full width. +3. **unexplained** [appearance] Start screen: legacy has 4 blank lines between the header and the input divider; next has 1. +4. **unexplained** [content] Footer hint, idle at 100 columns: legacy `/ commands │ @ paths │ ! shell │ Shift+Tab plan` (cut off); next `... Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output`. +5. **unexplained** [behaviour] Footer while typing: legacy hides the hint line whenever the input has text; next always shows it. + +## Ordinary turns + +6. **unexplained** [appearance] After each reply: legacy leaves 2 blank lines before the divider and between turns; next has no blank line, and the divider sits right under the reply. +7. **unexplained** [appearance] Reply indent: legacy's reply starts at the same column as the user bubble; next's is indented 2 columns more than the bubble. +8. **unexplained** [content] Status bar after a turn: legacy `↑1.2k ↓80 · Ctx 1k`; next `↑1.2k ↓80 · 0% cached · Ctx last 1k`. +9. **unexplained** [content] Status bar over several turns: legacy stays at `↑1.2k ↓80`; next adds up (2.4k, 4.8k … 31.2k). next drops `Ctx last 1k` after a model switch. +10. **unexplained** [content] Status bar during streaming: legacy shows `(583.3t/s)`; next shows nothing. After the stream: legacy `(3.1t/s)`; next `3.1t/s` (no brackets). + +## Tool calls and approvals + +11. **unexplained** [content/appearance] "list the files" tool row: legacy `✓ ls (34ms)` with `ls` bold white and the duration grey; next `✓ Shell command (12ms)`, all cyan. +12. **unexplained** [behaviour] Ctrl+O: legacy opens the model picker; next expands the tool output in place (exit 0, runtime, file list) with a `Lines x–y of N · PgUp/PgDn` viewer. +13. **unexplained** [appearance] Ctrl+O expand in next (seen twice): a stale copy of the latest turn is drawn above older content. Collapsing leaves only the last turn at the top and the rest of the screen blank. +14. **unexplained** [content/appearance] Approval prompt: legacy has a plain `Agent wants to run: shell` / `touch created-by-walk.txt` layout with options on the left and a description pane on the right. next has a boxed `Allow this action?` panel with `Owner: turn-4`, the call's arguments as one-line JSON and as pretty-printed JSON, and `○ Shell command … Running tools · 4s` above it. +15. **unexplained** [content] Approval options: legacy `1. Allow once / 2. Deny`; next adds `3. Deny without reason` and `Ctrl+G return to composer`. Key hints: legacy `… Esc interrupts the turn`; next `… Esc cancel`. +16. **unexplained** [content] Approved tool row: legacy `✓ touch created-by-walk.txt (9ms)`; next `✓ Shell command (9ms)`. +17. **unexplained** [content] Deny reason prompt: legacy `Why?` then `(or Esc to cancel)` on the next line; next `Why? (or Esc to cancel) · Enter without a reason` inside the box, later `(or Esc to go back)`. +18. **unexplained** [content] Denied tool row: legacy `✗ touch created-by-walk.txt` / `→ DENIED: Tool execution was not approved. User's reason: not now`; next `✗ Shell command` / `Full tool output: Ctrl+O`, without the reason. +19. **unexplained** [behaviour] Ctrl+G during an approval: legacy nothing; next moves to the composer with a text summary (`/answer 1 [text]`), and again opens a "Pending interactions" list. +20. **unexplained** [behaviour] Esc on an approval: legacy interrupts the turn (`Stopped`); next goes back to the "Pending interactions" list and the turn keeps waiting. +21. **unexplained** [content] Ctrl+C on a waiting approval in next: the user message `❯ create a file please` disappears from the transcript and no `Stopped` appears. + +## Slash commands and menus + +22. **unexplained** [behaviour/appearance] Typing `/`: legacy replaces the input line with `Filter:` and a bordered list with a scrollbar; next keeps `❯ /` in the input and shows the list above it. +23. **unexplained** [content] `/` menu contents and order: legacy starts `/model, /effort, /clear, /goal, /copy…` with `- description` and wrapped descriptions; next starts `/help, /providers, /model, /effort, /profile…` and adds `/tasks /queue /steer /followup /cancel /answer /command-status /command-apply /exit /rollover`. legacy has `/lite` and `/retry` that next lacks or words differently. Many descriptions are worded differently. +24. **unexplained** [appearance] Selected command: legacy `❯` with the row white/bold; next `›` with no row highlight. +25. **unexplained** [behaviour] Filtering `/re`: legacy also matches `/bare` and puts `/restart` first; next puts `/resume` first, no `/bare`. At 80 columns legacy's wrapped line is indented one space too far. +26. **unexplained** [behaviour] Tab in the `/` menu: legacy runs the highlighted command (opened `/resume`); next completes it into the input (`/retry `). +27. **unexplained** [content] `/help`: command lists differ. legacy shortcuts `Ctrl+C: clear draft or interrupt; press again to exit / Ctrl+O: choose model · Ctrl+T … / Shift+Tab: switch Standard/Plan…`; next `Enter send/steer · Alt+Enter follow-up · ↑/↓ history · PgUp/PgDn scroll · Ctrl+O tool output · Ctrl+T … / Ctrl+G approvals/tasks · Ctrl+B budget …`, with no blank lines. +28. **unexplained** [behaviour] Escaping some command menus (`/mcp`, `/profile`, `/tasks` that did not open): legacy leaves the command text in the input, so the next command was appended and sent as chat (`/mcp/skills`, `/tasks/copy`), with the error `Missing parent or Profile 'builtin:/providers'`; next leaves the input empty. +29. **unexplained** [behaviour] Status messages: next keeps only the latest one or two (the `/providers` output vanished after the next command); legacy keeps all of them. + +## Model, effort and settings + +30. **unexplained** [behaviour] `/model` opening tab: legacy opens on All with the models listed; next opens on an empty tab with `No matching models.`. legacy's empty tabs say `No favorites yet — press Ctrl+F…` / `No nicknames yet — …`. +31. **unexplained** [appearance/content] Model picker: legacy cyan border, `Filter:` above, `Select model`, hints incl. `ctrl+n nickname … ctrl+r refresh model list`; next grey border, bold `Choose a model`, `Filter: type to filter` inside, fewer hints, extra spaces before model names. +32. **unexplained** [content] Model chosen: legacy `Set model to mock-beta (mockprov)`; next `Model set to mockprov/mock-beta.` +33. **unexplained** [content] Effort picker: legacy `Reasoning effort =` input and `Current: default ·` above the box, `Enter will set: default`, `Tab use value │ Ctrl+D reset`; next `Current: default` inside, `default (current)`, shorter hints. After choosing: legacy no message; next `Reasoning effort set to high.` +34. **unexplained** [appearance/content] `/settings`: legacy tab bar with highlighted tab, aligned name/value columns, `● changed` markers, detail pane, `⏎ edit │ ● changed`; next `Settings · [Models] Providers…`, rows `Name · key: value`, 7 visible rows, `Current: … · Default: …`. +35. **unexplained** [content] `/settings` values: nicknames legacy `(none)`, next `[configured]`; API keys legacy ``, next `[hidden]`; booleans legacy `ON/OFF`, next `true/false`; legacy shows `↻` markers. +36. **unexplained** [behaviour] Enter on a boolean setting: legacy toggles it (● OFF, `default: ON`); next opens a text editor (`Editing app.notifications: ▏`). +37. **unexplained** [content] Settings search: legacy adds `Searching all settings, including advanced ones` and a `UI` tag per row; next adds `(true|false)` to the description. +38. **unexplained** [content] `/effort low`, `/auto-approve auto/off`: legacy prints no confirmation and no `Auto` in the status bar; next prints `Tool auto-approval set to auto.` and shows `│ Auto │`. +39. **unexplained** [behaviour] `/profile`: legacy opens a profile picker (Bare, Plan, Pair, Mentor, Orchestrator); next prints `Use /profile .` +40. **unexplained** [behaviour] `/providers`: legacy opens a "Your Providers" menu; next prints `Configured providers: mockprov (mockprov) — configured · active`. +41. **unexplained** [behaviour] `/auto-approve`: legacy opens a picker (off/advisory/auto/always); next prints `Tool auto-approval is off. Use /auto-approve …`. +42. **unexplained** [behaviour] `/mcp`: legacy opens "MCP Server Management" (+ Add user server); next prints instructions with the mcp.json path. +43. **unexplained** [behaviour] `/tasks`: legacy has no such command (the text stays in the input); next opens a "Manage background tasks" box. +44. **unexplained** [content] `/sandbox`: legacy `Shell sandbox mode enabled - restricting shell operations…` and `Sandboxed` in the status bar; next `Shell sandbox mode enabled (preference only; direct sandbox execution is unavailable).`, no status-bar change. +45. **unexplained** [behaviour] `/compact`: legacy `Compacting context...` then `Context compaction failed: Set agent.contextCompaction.compactThresholdTokens…`; next `Conversation compacted… Compaction complete.` +46. **unexplained** [behaviour] `/handoff`: legacy asks `Handoff message (enter to use default message):`, Esc gives `Handoff cancelled`; next immediately starts a new conversation with an "Implement this: …" turn, and the reply is cut off mid-word (`done. the command finis`). +47. **unexplained** [behaviour] `/retry` after a cancelled tool turn: legacy `No tool call to retry.`; next regenerates the turn (new approval), `Retrying.` / `Conversation history restored to retry.` +48. **unexplained** [behaviour] `/clear`: legacy keeps history, draws `── New conversation ──`, a new header and `Welcome to term²! Type a message to start chatting.`; next wipes the screen to a bare header, no welcome line. +49. **unexplained** [content] `/copy` right after the clear: legacy `Copied the latest assistant response…`; next `No assistant response to copy.` (transcripts differed at this point because of item 28). +50. **unexplained** [behaviour/content] `/rewind`: legacy shows each turn with `↳ discards N turns · N replies` and `⏎ rewind & edit │ ⇥ resend instead`; next a plain list, then a second step (`1. Edit in composer / 2. Resend`), then `Command · rewind · rewound / Conversation rewound… / Rewind draft restored…`. +51. **unexplained** [appearance] After a rewind, next's `Command … rewound / Conversation rewound…` lines stay and re-appear below every later reply. +52. **unexplained** [content] `/undo` in a resumed chat: legacy lists 4 turns, long ones cut with `…`; next lists 13, long ones wrapped without indent. + +## Resume + +53. **unexplained** [speed] `/resume`: next did not react for about 2.5 minutes (07:20:38 to about 07:23:10; typed keys did nothing, then the list appeared), and after a restart showed `Loading conversations…` for about 2.5 minutes (07:35:24 to 07:37:50). legacy opened in 1–3 s both times; a second open in next in the same session was fast. +54. **unexplained** [content] Resume list: legacy 10 rows with `│` columns, full UUID, `Updated: 2026-11-04 07:19:53`, `Local • 10 msgs • mock-alpha • mode: bare`; next 8 rows, a `Preview` header, `ID: conv_…`, `Updated: 11/4/2026, 7:19:53 AM`, `Messages: 10`, `Model: mockprov/mock-beta`. +55. **unexplained** [content] Resume entries: legacy's older entries `RT-PROMPT please read the small file · 6 hours ago`; next's `RT-PROMPT one more question · 5 days ago`. Ages differ ("hello there" 9 vs 11 minutes ago), message counts differ (14 vs 16), and next lists empty `(no messages yet)` sessions. +56. **unexplained** [behaviour] PgDn in the resume list: legacy jumps to the bottom of the page; next does nothing. +57. **unexplained** [content] After resuming: legacy prints `Resumed conversation: `, next nothing. legacy's resumed transcript shows only the last couple of turns with a duplicated `RT-REPLY 6 plain answer.`; next shows many turns. + +## Input, history, mentions, shell mode + +58. **unexplained** [behaviour] Up-arrow history: legacy recalls only chat messages; next also slash commands, and recalling `/rewind` opens the `/` menu, which then takes ↑/↓ so history cannot be navigated further. +59. **unexplained** [behaviour] `@` mention: legacy replaces the input with `Filter:` and a bordered list (src/, notes.txt, README.md, src/main.js); next keeps `look at @` and shows an unbordered list that also has `created-by-walk.txt`, in another order. +60. **unexplained** [appearance] `!` shell mode: legacy replaces the prompt with a red `!`; next shows `❯ !`. +61. **unexplained** [behaviour] Alt+Enter idle: legacy inserts nothing (`line oneline two`); next inserts a newline. +62. **unexplained** [behaviour] Esc on a draft: legacy `Press Esc again to clear input` and clears on the second Esc; next ignores Esc on a draft. +63. **unexplained** [behaviour] Once at 80x24 legacy treated Enter as a newline (`markdown please` plus an empty line; a second Enter sent two lines). Not reproduced in three attempts. + +## Plan mode (Shift+Tab) + +64. **unexplained** [content/appearance] Shift+Tab confirmation: legacy `▲ Switching to Plan mode requires clearing the current session. / Clear session and switch to Plan mode?` with ` Yes / ❯ No`; next `⚠ Switching modes requires clearing the current session. / Clear session and switch mode?` with `› No`. In next the last tool row (`✓ ls`) was drawn below the dialog. +65. **unexplained** [behaviour/content] After Yes: legacy shows a New-conversation divider, header, welcome and `Plan mode enabled`; next keeps the old transcript, adds a `PLAN` header, no message. Back: legacy `Switched to Bare mode`; next `Switched to builtin:bare for this session.` + +## Streaming + +66. **unexplained** [content] Footer while streaming: legacy `⏎ steer │ Alt+⏎ queue │ Ctrl+O model │ Ctrl+T effort`; next `Enter steer │ Alt+Enter follow-up │ /cancel stop`. +67. **unexplained** [content] Rate: legacy `Generating · 3s (583.3 tok/s)` (about 600–700); next `Generating · 4s (~156.6 tok/s)` (about 160–225, with `~`). legacy has a blank line before `Generating`. +68. **unexplained** [appearance] While streaming, next kept the stale `PLAN` header at the top, and the text started right under the user bubble with earlier lines cut off. +69. **unexplained** [behaviour] Enter (steer) while streaming: legacy queues it (`│ steer · mid-turn / steer this`), streams to the end, then answers; next stops the stream at once (`Stopped`) and answers `[steering message: the user sent this wh…` cut off mid-word, with the divider missing in the screenshot. +70. **unexplained** [content/appearance] Alt+Enter while streaming: legacy `│ queued · after this turn`, `[Q:1]` in the status bar, ↑ opens a queued-item editor (`e edit │ d delete`); next `Queue: running / Queued 1 (queued): …`, ↑ puts the text back in the input. Once, at the end of a stream, legacy's screen briefly showed old transcript lines with an empty `❯`. +71. **unexplained** [behaviour] Double Esc while streaming: legacy stops the reply; next ignores it. +72. **unexplained** [behaviour] Ctrl+C while streaming with a draft: next stops the turn, keeps the draft and pauses the queue (`Queue: paused · manual`). +73. **unexplained** [content] Stream end after a queued, steered or cancelled message: legacy's transcript stopped at the last full line (sw2494 / sw2446); next also showed the final short line (sw2495–sw2499, sw2447–sw2456). legacy's `Stopped` has a blank line before it, next's not. A stream left to finish showed sw2499 in both. +74. **unexplained** [behaviour] PgUp during or after streaming: legacy nothing; next scrolls only while the tool-output viewer is open. +75. **unexplained** [behaviour] `/queue` + Enter in next (queue paused): the menu stayed with no response for over 60 s; it ran only with a trailing space, printed usage and left the command in the input. + +## Resize and exit + +76. **unexplained** [appearance] At 80x24: legacy's reflowed long lines continue with a 3-space indent, next's with 2; next's footer drops `Ctrl+O tool output`. +77. **unexplained** [behaviour] Ctrl+C on an empty draft: next shows `Press Ctrl+C again to exit` above the divider and it stays; legacy shows it in the transcript, once two piled up. +78. **unexplained** [content] Exit: legacy printed `Token usage: 0 input, 0 output` (fresh session) and later `To resume this conversation: term2 --resume 9e6dd…`; next nothing for the fresh session, later `To resume this conversation: term2-next --resume 'conv_5dd…'`. + +## Not tried + +`/mentor`, `/orchestrator`, `/restart`, `/bridge`, `/mcp-login`, `/steer`, `/followup`, `/cancel`, `/answer`, Ctrl+B, and the model picker's nickname and favourite keys (the agent avoided profile changes and restarts partway through). The first Ctrl+O glitch and the first `/resume` stall in next had no like-for-like action in legacy. diff --git a/rewrite/parity/real-terminal/report/soak.json b/rewrite/parity/real-terminal/report/soak.json new file mode 100644 index 000000000..41c999e72 --- /dev/null +++ b/rewrite/parity/real-terminal/report/soak.json @@ -0,0 +1,80 @@ +[ + "[content] Start screen, top line: legacy `Profile: bare`; next `Profile: BARE`.", + "[appearance] Whole UI: legacy is indented 2 columns, so its divider is shorter than the terminal width; next starts at column 0 and the divider spans the full width.", + "[appearance] Start screen: legacy has 4 blank lines between the header and the input divider; next has 1.", + "[content] Footer hint, idle at 100 columns: legacy `/ commands │ @ paths │ ! shell │ Shift+Tab plan` (cut off); next `... Shift+Tab plan mode │ ↑/↓ history │ Ctrl+O tool output`.", + "[behaviour] Footer while typing: legacy hides the hint line whenever the input has text; next always shows it.", + "[appearance] After each reply: legacy leaves 2 blank lines before the divider and between turns; next has no blank line, and the divider sits right under the reply.", + "[appearance] Reply indent: legacy's reply starts at the same column as the user bubble; next's is indented 2 columns more than the bubble.", + "[content] Status bar after a turn: legacy `↑1.2k ↓80 · Ctx 1k`; next `↑1.2k ↓80 · 0% cached · Ctx last 1k`.", + "[content] Status bar over several turns: legacy stays at `↑1.2k ↓80`; next adds up (2.4k, 4.8k … 31.2k). next drops `Ctx last 1k` after a model switch.", + "[content] Status bar during streaming: legacy shows `(583.3t/s)`; next shows nothing. After the stream: legacy `(3.1t/s)`; next `3.1t/s` (no brackets).", + "[content/appearance] \"list the files\" tool row: legacy `✓ ls (34ms)` with `ls` bold white and the duration grey; next `✓ Shell command (12ms)`, all cyan.", + "[behaviour] Ctrl+O: legacy opens the model picker; next expands the tool output in place (exit 0, runtime, file list) with a `Lines x–y of N · PgUp/PgDn` viewer.", + "[appearance] Ctrl+O expand in next (seen twice): a stale copy of the latest turn is drawn above older content. Collapsing leaves only the last turn at the top and the rest of the screen blank.", + "[content/appearance] Approval prompt: legacy has a plain `Agent wants to run: shell` / `touch created-by-walk.txt` layout with options on the left and a description pane on the right. next has a boxed `Allow this action?` panel with `Owner: turn-4`, the call's arguments as one-line JSON and as pretty-printed JSON, and `○ Shell command … Running tools · 4s` above it.", + "[content] Approval options: legacy `1. Allow once / 2. Deny`; next adds `3. Deny without reason` and `Ctrl+G return to composer`. Key hints: legacy `… Esc interrupts the turn`; next `… Esc cancel`.", + "[content] Approved tool row: legacy `✓ touch created-by-walk.txt (9ms)`; next `✓ Shell command (9ms)`.", + "[content] Deny reason prompt: legacy `Why?` then `(or Esc to cancel)` on the next line; next `Why? (or Esc to cancel) · Enter without a reason` inside the box, later `(or Esc to go back)`.", + "[content] Denied tool row: legacy `✗ touch created-by-walk.txt` / `→ DENIED: Tool execution was not approved. User's reason: not now`; next `✗ Shell command` / `Full tool output: Ctrl+O`, without the reason.", + "[behaviour] Ctrl+G during an approval: legacy nothing; next moves to the composer with a text summary (`/answer 1 [text]`), and again opens a \"Pending interactions\" list.", + "[behaviour] Esc on an approval: legacy interrupts the turn (`Stopped`); next goes back to the \"Pending interactions\" list and the turn keeps waiting.", + "[content] Ctrl+C on a waiting approval in next: the user message `❯ create a file please` disappears from the transcript and no `Stopped` appears.", + "[behaviour/appearance] Typing `/`: legacy replaces the input line with `Filter:` and a bordered list with a scrollbar; next keeps `❯ /` in the input and shows the list above it.", + "[content] `/` menu contents and order: legacy starts `/model, /effort, /clear, /goal, /copy…` with `- description` and wrapped descriptions; next starts `/help, /providers, /model, /effort, /profile…` and adds `/tasks /queue /steer /followup /cancel /answer /command-status /command-apply /exit /rollover`. legacy has `/lite` and `/retry` that next lacks or words differently. Many descriptions are worded differently.", + "[appearance] Selected command: legacy `❯` with the row white/bold; next `›` with no row highlight.", + "[behaviour] Filtering `/re`: legacy also matches `/bare` and puts `/restart` first; next puts `/resume` first, no `/bare`. At 80 columns legacy's wrapped line is indented one space too far.", + "[behaviour] Tab in the `/` menu: legacy runs the highlighted command (opened `/resume`); next completes it into the input (`/retry `).", + "[content] `/help`: command lists differ. legacy shortcuts `Ctrl+C: clear draft or interrupt; press again to exit / Ctrl+O: choose model · Ctrl+T … / Shift+Tab: switch Standard/Plan…`; next `Enter send/steer · Alt+Enter follow-up · ↑/↓ history · PgUp/PgDn scroll · Ctrl+O tool output · Ctrl+T … / Ctrl+G approvals/tasks · Ctrl+B budget …`, with no blank lines.", + "[behaviour] Escaping some command menus (`/mcp`, `/profile`, `/tasks` that did not open): legacy leaves the command text in the input, so the next command was appended and sent as chat (`/mcp/skills`, `/tasks/copy`), with the error `Missing parent or Profile 'builtin:/providers'`; next leaves the input empty.", + "[behaviour] Status messages: next keeps only the latest one or two (the `/providers` output vanished after the next command); legacy keeps all of them.", + "[behaviour] `/model` opening tab: legacy opens on All with the models listed; next opens on an empty tab with `No matching models.`. legacy's empty tabs say `No favorites yet — press Ctrl+F…` / `No nicknames yet — …`.", + "[appearance/content] Model picker: legacy cyan border, `Filter:` above, `Select model`, hints incl. `ctrl+n nickname … ctrl+r refresh model list`; next grey border, bold `Choose a model`, `Filter: type to filter` inside, fewer hints, extra spaces before model names.", + "[content] Model chosen: legacy `Set model to mock-beta (mockprov)`; next `Model set to mockprov/mock-beta.`", + "[content] Effort picker: legacy `Reasoning effort =` input and `Current: default ·` above the box, `Enter will set: default`, `Tab use value │ Ctrl+D reset`; next `Current: default` inside, `default (current)`, shorter hints. After choosing: legacy no message; next `Reasoning effort set to high.`", + "[appearance/content] `/settings`: legacy tab bar with highlighted tab, aligned name/value columns, `● changed` markers, detail pane, `⏎ edit │ ● changed`; next `Settings · [Models] Providers…`, rows `Name · key: value`, 7 visible rows, `Current: … · Default: …`.", + "[content] `/settings` values: nicknames legacy `(none)`, next `[configured]`; API keys legacy ``, next `[hidden]`; booleans legacy `ON/OFF`, next `true/false`; legacy shows `↻` markers.", + "[behaviour] Enter on a boolean setting: legacy toggles it (● OFF, `default: ON`); next opens a text editor (`Editing app.notifications: ▏`).", + "[content] Settings search: legacy adds `Searching all settings, including advanced ones` and a `UI` tag per row; next adds `(true|false)` to the description.", + "[content] `/effort low`, `/auto-approve auto/off`: legacy prints no confirmation and no `Auto` in the status bar; next prints `Tool auto-approval set to auto.` and shows `│ Auto │`.", + "[behaviour] `/profile`: legacy opens a profile picker (Bare, Plan, Pair, Mentor, Orchestrator); next prints `Use /profile .`", + "[behaviour] `/providers`: legacy opens a \"Your Providers\" menu; next prints `Configured providers: mockprov (mockprov) — configured · active`.", + "[behaviour] `/auto-approve`: legacy opens a picker (off/advisory/auto/always); next prints `Tool auto-approval is off. Use /auto-approve …`.", + "[behaviour] `/mcp`: legacy opens \"MCP Server Management\" (+ Add user server); next prints instructions with the mcp.json path.", + "[behaviour] `/tasks`: legacy has no such command (the text stays in the input); next opens a \"Manage background tasks\" box.", + "[content] `/sandbox`: legacy `Shell sandbox mode enabled - restricting shell operations…` and `Sandboxed` in the status bar; next `Shell sandbox mode enabled (preference only; direct sandbox execution is unavailable).`, no status-bar change.", + "[behaviour] `/compact`: legacy `Compacting context...` then `Context compaction failed: Set agent.contextCompaction.compactThresholdTokens…`; next `Conversation compacted… Compaction complete.`", + "[behaviour] `/handoff`: legacy asks `Handoff message (enter to use default message):`, Esc gives `Handoff cancelled`; next immediately starts a new conversation with an \"Implement this: …\" turn, and the reply is cut off mid-word (`done. the command finis`).", + "[behaviour] `/retry` after a cancelled tool turn: legacy `No tool call to retry.`; next regenerates the turn (new approval), `Retrying.` / `Conversation history restored to retry.`", + "[behaviour] `/clear`: legacy keeps history, draws `── New conversation ──`, a new header and `Welcome to term²! Type a message to start chatting.`; next wipes the screen to a bare header, no welcome line.", + "[content] `/copy` right after the clear: legacy `Copied the latest assistant response…`; next `No assistant response to copy.` (transcripts differed at this point because of item 28).", + "[behaviour/content] `/rewind`: legacy shows each turn with `↳ discards N turns · N replies` and `⏎ rewind & edit │ ⇥ resend instead`; next a plain list, then a second step (`1. Edit in composer / 2. Resend`), then `Command · rewind · rewound / Conversation rewound… / Rewind draft restored…`.", + "[appearance] After a rewind, next's `Command … rewound / Conversation rewound…` lines stay and re-appear below every later reply.", + "[content] `/undo` in a resumed chat: legacy lists 4 turns, long ones cut with `…`; next lists 13, long ones wrapped without indent.", + "[speed] `/resume`: next did not react for about 2.5 minutes (07:20:38 to about 07:23:10; typed keys did nothing, then the list appeared), and after a restart showed `Loading conversations…` for about 2.5 minutes (07:35:24 to 07:37:50). legacy opened in 1–3 s both times; a second open in next in the same session was fast.", + "[content] Resume list: legacy 10 rows with `│` columns, full UUID, `Updated: 2026-11-04 07:19:53`, `Local • 10 msgs • mock-alpha • mode: bare`; next 8 rows, a `Preview` header, `ID: conv_…`, `Updated: 11/4/2026, 7:19:53 AM`, `Messages: 10`, `Model: mockprov/mock-beta`.", + "[content] Resume entries: legacy's older entries `RT-PROMPT please read the small file · 6 hours ago`; next's `RT-PROMPT one more question · 5 days ago`. Ages differ (\"hello there\" 9 vs 11 minutes ago), message counts differ (14 vs 16), and next lists empty `(no messages yet)` sessions.", + "[behaviour] PgDn in the resume list: legacy jumps to the bottom of the page; next does nothing.", + "[content] After resuming: legacy prints `Resumed conversation: `, next nothing. legacy's resumed transcript shows only the last couple of turns with a duplicated `RT-REPLY 6 plain answer.`; next shows many turns.", + "[behaviour] Up-arrow history: legacy recalls only chat messages; next also slash commands, and recalling `/rewind` opens the `/` menu, which then takes ↑/↓ so history cannot be navigated further.", + "[behaviour] `@` mention: legacy replaces the input with `Filter:` and a bordered list (src/, notes.txt, README.md, src/main.js); next keeps `look at @` and shows an unbordered list that also has `created-by-walk.txt`, in another order.", + "[appearance] `!` shell mode: legacy replaces the prompt with a red `!`; next shows `❯ !`.", + "[behaviour] Alt+Enter idle: legacy inserts nothing (`line oneline two`); next inserts a newline.", + "[behaviour] Esc on a draft: legacy `Press Esc again to clear input` and clears on the second Esc; next ignores Esc on a draft.", + "[behaviour] Once at 80x24 legacy treated Enter as a newline (`markdown please` plus an empty line; a second Enter sent two lines). Not reproduced in three attempts.", + "[content/appearance] Shift+Tab confirmation: legacy `▲ Switching to Plan mode requires clearing the current session. / Clear session and switch to Plan mode?` with ` Yes / ❯ No`; next `⚠ Switching modes requires clearing the current session. / Clear session and switch mode?` with `› No`. In next the last tool row (`✓ ls`) was drawn below the dialog.", + "[behaviour/content] After Yes: legacy shows a New-conversation divider, header, welcome and `Plan mode enabled`; next keeps the old transcript, adds a `PLAN` header, no message. Back: legacy `Switched to Bare mode`; next `Switched to builtin:bare for this session.`", + "[content] Footer while streaming: legacy `⏎ steer │ Alt+⏎ queue │ Ctrl+O model │ Ctrl+T effort`; next `Enter steer │ Alt+Enter follow-up │ /cancel stop`.", + "[content] Rate: legacy `Generating · 3s (583.3 tok/s)` (about 600–700); next `Generating · 4s (~156.6 tok/s)` (about 160–225, with `~`). legacy has a blank line before `Generating`.", + "[appearance] While streaming, next kept the stale `PLAN` header at the top, and the text started right under the user bubble with earlier lines cut off.", + "[behaviour] Enter (steer) while streaming: legacy queues it (`│ steer · mid-turn / steer this`), streams to the end, then answers; next stops the stream at once (`Stopped`) and answers `[steering message: the user sent this wh…` cut off mid-word, with the divider missing in the screenshot.", + "[content/appearance] Alt+Enter while streaming: legacy `│ queued · after this turn`, `[Q:1]` in the status bar, ↑ opens a queued-item editor (`e edit │ d delete`); next `Queue: running / Queued 1 (queued): …`, ↑ puts the text back in the input. Once, at the end of a stream, legacy's screen briefly showed old transcript lines with an empty `❯`.", + "[behaviour] Double Esc while streaming: legacy stops the reply; next ignores it.", + "[behaviour] Ctrl+C while streaming with a draft: next stops the turn, keeps the draft and pauses the queue (`Queue: paused · manual`).", + "[content] Stream end after a queued, steered or cancelled message: legacy's transcript stopped at the last full line (sw2494 / sw2446); next also showed the final short line (sw2495–sw2499, sw2447–sw2456). legacy's `Stopped` has a blank line before it, next's not. A stream left to finish showed sw2499 in both.", + "[behaviour] PgUp during or after streaming: legacy nothing; next scrolls only while the tool-output viewer is open.", + "[behaviour] `/queue` + Enter in next (queue paused): the menu stayed with no response for over 60 s; it ran only with a trailing space, printed usage and left the command in the input.", + "[appearance] At 80x24: legacy's reflowed long lines continue with a 3-space indent, next's with 2; next's footer drops `Ctrl+O tool output`.", + "[behaviour] Ctrl+C on an empty draft: next shows `Press Ctrl+C again to exit` above the divider and it stays; legacy shows it in the transcript, once two piled up.", + "[content] Exit: legacy printed `Token usage: 0 input, 0 output` (fresh session) and later `To resume this conversation: term2 --resume 9e6dd…`; next nothing for the fresh session, later `To resume this conversation: term2-next --resume 'conv_5dd…'`." +] diff --git a/rewrite/parity/real-terminal/run.mjs b/rewrite/parity/real-terminal/run.mjs new file mode 100644 index 000000000..4d802d256 --- /dev/null +++ b/rewrite/parity/real-terminal/run.mjs @@ -0,0 +1,316 @@ +#!/usr/bin/env node +// Real-terminal side-by-side check of legacy term2 and term2-next (issue #140, flip gate item 5). +// +// node rewrite/parity/real-terminal/run.mjs --out [--store ] [options] +// +// --store a generated store (generate-store.mjs) or a term2 data dir: legacy reads /conversations, +// term2-next reads /conversations-next. Each run works on a private copy. Omitted: a +// store is generated into /store (--store-mb, default 420 per format). +// --workspace the CLIs' cwd (default: /workspace when present, else a scratch project) +// --sizes 100x34,80x24 +// --quick a quarter of the samples (a smoke run; not gate evidence) +// --only latency|walk +// --soak JSON array of soak differences to include in the report +// --report-only re-render /report.html from /results.json (with --soak: add the soak list); +// measures nothing +// +// Not a CI test: a full run takes about 30 minutes. Uses the loopback fake provider only. +import { execFileSync, execSync } from 'node:child_process'; +import fs from 'node:fs'; +import os from 'node:os'; +import path from 'node:path'; +import { parseArgs } from 'node:util'; +import { fileURLToPath } from 'node:url'; + +const here = path.dirname(fileURLToPath(import.meta.url)); +const repo = path.resolve(here, '..', '..', '..'); + +const { values } = parseArgs({ + options: { + out: { type: 'string' }, + store: { type: 'string' }, + workspace: { type: 'string' }, + sizes: { type: 'string', default: '100x34,80x24' }, + quick: { type: 'boolean', default: false }, + only: { type: 'string' }, + soak: { type: 'string' }, + 'store-mb': { type: 'string', default: '420' }, + 'skip-build': { type: 'boolean', default: false }, + 'report-only': { type: 'boolean', default: false }, + }, +}); +if (!values.out) { + console.error('usage: node rewrite/parity/real-terminal/run.mjs --out [--store ] [--quick]'); + process.exit(2); +} +const out = path.resolve(values.out); +fs.mkdirSync(out, { recursive: true }); +const log = (message) => console.log(`[${new Date().toISOString().slice(11, 19)}] ${message}`); +const readSoak = () => (values.soak && fs.existsSync(values.soak) ? JSON.parse(fs.readFileSync(values.soak, 'utf8')) : []); +const soakVerdict = (soak) => + soak.length ? `${soak.length} difference(s), all unexplained — fails the gate unless accepted` : 'not included in this run'; + +if (values['report-only']) { + const { writeReport } = await import('./lib/report.mjs'); + const results = JSON.parse(fs.readFileSync(path.join(out, 'results.json'), 'utf8')); + if (values.soak) { + results.soak = readSoak(); + results.verdict.soak = soakVerdict(results.soak); + fs.writeFileSync(path.join(out, 'results.json'), JSON.stringify(results, null, 2)); + } + writeReport(path.join(out, 'report.html'), results); + log(`report: ${path.join(out, 'report.html')} (soak: ${results.verdict.soak})`); + process.exit(0); +} + +// ---------- prerequisites on a fresh checkout: dependencies and both builds ---------- +if (!fs.existsSync(path.join(repo, 'node_modules', '@xterm', 'xterm'))) { + log('installing dependencies (pnpm install --frozen-lockfile)'); + execSync('pnpm install --frozen-lockfile', { cwd: repo, stdio: 'inherit' }); +} +const { CLIS } = await import('./lib/env.mjs'); +if (!values['skip-build']) { + if (!fs.existsSync(CLIS.legacy.cli)) { + log('building legacy CLI (pnpm build)'); + execSync('pnpm build', { cwd: repo, stdio: 'inherit' }); + } + if (!fs.existsSync(CLIS.next.cli)) { + log('building term2-next (node rewrite/scripts/build.mjs)'); + execFileSync(process.execPath, ['rewrite/scripts/build.mjs'], { cwd: repo, stdio: 'inherit' }); + } +} + +const { startStage, calibrate, TRANSPORT, xtermVersion } = await import('./lib/terminal.mjs'); +const { startCli, resolveStore } = await import('./lib/session.mjs'); +const { runLatency, measureStoreTimings, summarize, gate, CLASSES, PAINT_TIMEOUT_MS } = await import('./lib/latency.mjs'); +const { runWalk, MASKS } = await import('./lib/walk.mjs'); +const { diffImages, textDiff, writeReport } = await import('./lib/report.mjs'); + +// ---------- the store ---------- +let storeDir = values.store ? path.resolve(values.store) : null; +if (!storeDir) { + storeDir = path.join(out, 'store'); + if (!fs.existsSync(path.join(storeDir, 'manifest.json'))) { + fs.rmSync(storeDir, { recursive: true, force: true }); + log(`generating a synthetic store (${values['store-mb']} MB per format) into ${storeDir}`); + execFileSync(process.execPath, [path.join(here, 'generate-store.mjs'), '--out', storeDir, '--size-mb', values['store-mb']], { + stdio: ['ignore', 'ignore', 'inherit'], + }); + } +} +const store = resolveStore(storeDir); +const workspace = values.workspace ? path.resolve(values.workspace) : store.workspace; +const storeBytes = (dir) => { + if (!dir) return 0; + let total = 0; + for (const entry of fs.readdirSync(dir, { withFileTypes: true, recursive: true })) { + if (entry.isFile()) total += fs.statSync(path.join(entry.parentPath ?? entry.path, entry.name)).size; + } + return total; +}; + +// ---------- samples ---------- +const FULL = { + 'type char': 48, + backspace: 48, + 'enter (composer)': 10, + 'arrow (model menu)': 20, + 'arrow (resume menu)': 20, + 'ctrl+o': 10, + 'shift+tab': 10, + 'open /model': 8, + 'open /settings': 8, + 'scroll (resume page down/up)': 10, +}; +const samples = Object.fromEntries( + Object.entries(FULL).map(([k, v]) => [k, values.quick ? Math.max(2, Math.ceil(v / 4)) : v]), +); +const sizes = values.sizes.split(',').map((s) => s.split('x').map(Number)); + +// ---------- environment and load ---------- +const loads = []; +const loadTimer = setInterval(() => loads.push(os.loadavg()[0]), 5_000); +const git = (args) => { + try { + return execFileSync('git', args, { cwd: repo, encoding: 'utf8' }).trim(); + } catch { + return 'unknown'; + } +}; +const stage = await startStage(); +const environment = { + command: `node ${path.relative(repo, path.join(here, 'run.mjs'))} ${process.argv.slice(2).join(' ')}`, + revision: `${git(['rev-parse', 'HEAD'])}${git(['status', '--porcelain', '--', 'source', 'rewrite/src']) ? ' (dirty source tree)' : ''}`, + terminal: TRANSPORT, + xterm: `@xterm/xterm ${xtermVersion()}`, + chromium: stage.chromiumVersion, + node: process.version, + os: `${os.type()} ${os.release()} ${os.arch()}`, + cpu: `${os.cpus()[0]?.model ?? 'unknown'} × ${os.cpus().length}`, + memory: `${Math.round(os.totalmem() / 2 ** 30)} GiB`, + store: storeDir, + storeBytes: { legacy: storeBytes(store.legacy), next: storeBytes(store.next) }, + storeManifest: fs.existsSync(path.join(storeDir, 'manifest.json')) + ? JSON.parse(fs.readFileSync(path.join(storeDir, 'manifest.json'), 'utf8')).formats + : 'not a generated store', + workspace: workspace ?? 'per-run scratch project', + samples: values.quick ? 'quick (quarter samples; smoke only)' : 'full', +}; +const floor = await calibrate(stage); +environment.harnessFloor = `raw pty echo (cat) key-to-paint p50 ${floor.p50.toFixed(1)} ms, max ${floor.max.toFixed(1)} ms (n=${floor.n})`; +log(`chromium ${stage.chromiumVersion}; ${environment.cpu}; ${environment.harnessFloor}`); + +const scratch = fs.mkdtempSync(path.join(os.tmpdir(), 'term2-rt-')); +const results = { generatedAt: new Date().toISOString(), environment, sizes: [] }; + +/** Workspace entries the CLIs add (the approval step creates a file); removed after each CLI. */ +function workspaceGuard(dir) { + if (!dir) return () => {}; + const before = new Set(fs.readdirSync(dir)); + return () => { + for (const name of fs.readdirSync(dir)) if (!before.has(name)) fs.rmSync(path.join(dir, name), { recursive: true, force: true }); + }; +} + +try { + for (const [cols, rows] of sizes) { + const sizeResult = { cols, rows, store: {}, latency: {}, misses: { idle: [], streaming: [] }, shots: [] }; + const raw = { idle: {}, streaming: {} }; + const walks = {}; + const resizeTo = cols === 100 ? [80, 24] : [100, 34]; + const shotDir = path.join(out, 'shots', `${cols}x${rows}`); + for (const which of ['legacy', 'next']) { + const restore = workspaceGuard(workspace); + log(`${which} ${cols}x${rows}: copying store and starting`); + const started = Date.now(); + let first = await startCli(stage, { which, scratch, cols, rows, store: store[which], workspace, keep: true }); + // Replace a CLI that stopped answering with a fresh one on the same home (and store copy), so a paint that + // arrives after its 5 s timeout cannot land in a later measurement. + const restart = async (stale) => { + await stale.close(); + first = await startCli(stage, { which, scratch, cols, rows, workspace, keep: true, home: stale.home }); + await first.ready(60_000); + return first; + }; + try { + // Startup is not gated (the issue gates keys); the minute is only how long a CLI may take to exist. + await first.ready(60_000); + const startupMs = Date.now() - started; + if (values.only !== 'walk') { + log(`${which}: store timings`); + const { needsRestart, ...timings } = await measureStoreTimings(first); + sizeResult.store[which] = { startupMs, ...timings }; + log(`${which}: ${JSON.stringify(sizeResult.store[which])}`); + if (needsRestart) { + log(`${which}: restarting after the failed /resume`); + await restart(first); + } + for (const phase of ['idle', 'streaming']) { + log(`${which}: latency ${phase}`); + const misses = []; + raw[phase][which] = await runLatency(first, { phase, samples, log, misses, restart }).catch((error) => { + log(`${which}: latency ${phase} aborted: ${error.message.split('\n')[0]}`); + sizeResult.errors = [...(sizeResult.errors ?? []), `${which} ${phase}: ${error.message}`]; + return Object.fromEntries(CLASSES.map((c) => [c, []])); + }); + sizeResult.misses[phase].push(...misses.map((m) => ({ ...m, cli: which }))); + // Let a running stream finish or be cancelled before the next phase. + first.term.write('\x1b'); + await new Promise((resolve) => setTimeout(resolve, 300)); + first.term.write('\x1b'); + await first.term.waitFor(/❯/, PAINT_TIMEOUT_MS).catch(() => {}); + await first.term.quiet(500, 40_000); + } + } else { + sizeResult.store[which] = { startupMs }; + } + } finally { + await first.close(); + } + if (values.only !== 'latency') { + log(`${which}: screenshot walk`); + let second = await startCli(stage, { which, scratch, cols, rows, workspace, home: first.home, keep: true }); + const restartWalk = async (stale) => { + await stale.close(); + second = await startCli(stage, { which, scratch, cols: stale.term.cols, rows: stale.term.rows, workspace, home: stale.home, keep: true }); + await second.ready(60_000); + return second; + }; + try { + await second.ready(60_000); + walks[which] = await runWalk(second, { outDir: shotDir, label: which, originalSize: [cols, rows], resizeTo, log, restart: restartWalk }).catch( + (error) => { + log(`${which}: walk aborted: ${error.message.split('\n')[0]}`); + sizeResult.errors = [...(sizeResult.errors ?? []), `${which} walk: ${error.message}`]; + return []; + }, + ); + } finally { + await second.close(); + fs.rmSync(second.home.root, { recursive: true, force: true, maxRetries: 5 }); + } + } else { + fs.rmSync(first.home.root, { recursive: true, force: true }); + } + restore(); + } + + if (values.only !== 'walk') { + for (const phase of ['idle', 'streaming']) { + const legacy = Object.fromEntries(CLASSES.map((c) => [c, summarize(raw[phase].legacy[c])])); + const next = Object.fromEntries(CLASSES.map((c) => [c, summarize(raw[phase].next[c])])); + const verdicts = Object.fromEntries(CLASSES.map((c) => [c, gate(legacy[c], next[c])])); + sizeResult.latency[phase] = { legacy, next, gate: verdicts, raw: raw[phase] }; + } + } + if (values.only !== 'latency') { + for (let i = 0; i < Math.min(walks.legacy?.length ?? 0, walks.next?.length ?? 0); i++) { + const l = walks.legacy[i]; + const n = walks.next[i]; + const diffFile = path.join(shotDir, `diff-${l.step}.png`); + const diff = await diffImages(stage, l.file, n.file, diffFile); + sizeResult.shots.push({ + step: l.step, + legacy: l.file, + next: n.file, + diffFile, + diff, + identical: diff.count === 0, + rows: textDiff(l.text, n.text, MASKS), + notes: [...l.note.map((x) => `legacy: ${x}`), ...n.note.map((x) => `next: ${x}`)], + text: { legacy: l.text, next: n.text }, + }); + } + } + results.sizes.push(sizeResult); + } +} finally { + clearInterval(loadTimer); + await stage.close(); + fs.rmSync(scratch, { recursive: true, force: true }); +} + +const loadStats = loads.length + ? { min: Math.min(...loads), mean: loads.reduce((a, b) => a + b, 0) / loads.length, max: Math.max(...loads) } + : null; +environment.loadAverage1m = loadStats + ? `min ${loadStats.min.toFixed(2)} · mean ${loadStats.mean.toFixed(2)} · max ${loadStats.max.toFixed(2)}${loadStats.max > 9 ? ' — ABOVE 9: rerun the measurements' : ''}` + : 'not sampled'; + +const allGates = results.sizes.flatMap((s) => Object.values(s.latency).flatMap((p) => Object.values(p.gate ?? {}))); +const allShots = results.sizes.flatMap((s) => s.shots); +const soak = readSoak(); +results.soak = soak; +results.verdict = { + latency: allGates.length > 0 && allGates.every((g) => g.pass), + screenshots: allShots.length > 0 && allShots.every((s) => s.identical), + identicalShots: allShots.filter((s) => s.identical).length, + totalShots: allShots.length, + soak: soakVerdict(soak), +}; + +fs.writeFileSync(path.join(out, 'results.json'), JSON.stringify(results, null, 2)); +writeReport(path.join(out, 'report.html'), results); +log(`load average (1m): ${environment.loadAverage1m}`); +log(`latency gate: ${results.verdict.latency ? 'pass' : 'FAIL'}; screenshots identical: ${results.verdict.identicalShots}/${results.verdict.totalShots}`); +log(`report: ${path.join(out, 'report.html')}`); diff --git a/rewrite/parity/real-terminal/soak.mjs b/rewrite/parity/real-terminal/soak.mjs new file mode 100644 index 000000000..f36e0cea1 --- /dev/null +++ b/rewrite/parity/real-terminal/soak.mjs @@ -0,0 +1,174 @@ +#!/usr/bin/env node +// Two live terminals for the soak (SOAK-BRIEF.md): both CLIs side by side in real xterm.js terminals, driven +// by a context-free agent through this small command line. Terminals are labelled A and B; which CLI is which +// is chosen at random and written only to /mapping.json, which the agent is told not to read. +// +// node rewrite/parity/real-terminal/soak.mjs serve --state [--store ] [--cols 100 --rows 34] +// node rewrite/parity/real-terminal/soak.mjs type "" type like a person +// node rewrite/parity/real-terminal/soak.mjs screen print the visible screen +// node rewrite/parity/real-terminal/soak.mjs shot PNG path(s) of the screen +// node rewrite/parity/real-terminal/soak.mjs resize resize both terminals +// node rewrite/parity/real-terminal/soak.mjs restart start the program again +// node rewrite/parity/real-terminal/soak.mjs stop +// +// Keys inside text: {enter} {esc} {tab} {shift+tab} {backspace} {up} {down} {left} {right} {pgup} {pgdn} +// {ctrl+c} {ctrl+o} {ctrl+t} {ctrl+g} {alt+enter} {wait:500} +import crypto from 'node:crypto'; +import fs from 'node:fs'; +import http from 'node:http'; +import path from 'node:path'; +import { parseArgs } from 'node:util'; +import { sleep } from './lib/terminal.mjs'; + +const [command, ...rest] = process.argv.slice(2); +const { values, positionals } = parseArgs({ + args: rest, + allowPositionals: true, + options: { + state: { type: 'string', default: process.env.SOAK_STATE ?? path.join(process.cwd(), '.soak') }, + store: { type: 'string' }, + cols: { type: 'string', default: '100' }, + rows: { type: 'string', default: '34' }, + }, +}); +const state = path.resolve(values.state); + +const KEYS = { + enter: '\r', + esc: '\x1b', + tab: '\t', + 'shift+tab': '\x1b[Z', + backspace: '\x7f', + up: '\x1b[A', + down: '\x1b[B', + right: '\x1b[C', + left: '\x1b[D', + pgup: '\x1b[5~', + pgdn: '\x1b[6~', + 'ctrl+c': '\x03', + 'ctrl+o': '\x0f', + 'ctrl+t': '\x14', + 'ctrl+g': '\x07', + 'alt+enter': '\x1b\r', +}; + +async function serve() { + const { startStage } = await import('./lib/terminal.mjs'); + const { startCli, resolveStore } = await import('./lib/session.mjs'); + fs.mkdirSync(path.join(state, 'shots'), { recursive: true }); + const store = resolveStore(values.store); + const scratch = fs.mkdtempSync(path.join(state, 'run-')); + const stage = await startStage(); + const cols = Number(values.cols); + const rows = Number(values.rows); + const flip = crypto.randomInt(2) === 1; + const mapping = flip ? { A: 'next', B: 'legacy' } : { A: 'legacy', B: 'next' }; + fs.writeFileSync(path.join(state, 'mapping.json'), JSON.stringify(mapping)); + const sessions = {}; + const start = async (label) => { + const which = mapping[label]; + sessions[label] = await startCli(stage, { which, scratch, cols, rows, store: store[which], workspace: store.workspace ?? undefined }); + await sessions[label].ready(5 * 60_000).catch(() => {}); + }; + await Promise.all([start('A'), start('B')]); + let shot = 0; + const targets = (who) => (who === 'both' ? ['A', 'B'] : [String(who).toUpperCase()]); + + const server = http.createServer(async (req, res) => { + let body = ''; + req.on('data', (chunk) => (body += chunk)); + await new Promise((resolve) => req.on('end', resolve)); + const reply = (status, data) => { + res.writeHead(status, { 'content-type': 'application/json' }); + res.end(JSON.stringify(data)); + }; + try { + const { op, who, text, cols: c, rows: r } = JSON.parse(body || '{}'); + if (op === 'type') { + const tokens = String(text).split(/(\{[a-z+:0-9]+\})/).filter(Boolean); + for (const token of tokens) { + const key = token.match(/^\{([a-z+:0-9]+)\}$/)?.[1]; + if (key?.startsWith('wait:')) { + await sleep(Number(key.slice(5))); + continue; + } + const chunks = key && KEYS[key] ? [KEYS[key]] : [...token]; + for (const chunk of chunks) { + for (const label of targets(who)) sessions[label]?.term.write(chunk); + await sleep(key ? 60 : 15); + } + } + await sleep(400); + return reply(200, { ok: true }); + } + if (op === 'screen') { + const s = sessions[targets(who)[0]]; + return reply(200, { screen: (await s.term.screen()).join('\n'), exited: Boolean(s.term.exited) }); + } + if (op === 'shot') { + const files = []; + for (const label of targets(who)) { + const file = path.join(state, 'shots', `${String(++shot).padStart(4, '0')}-${label}.png`); + await sessions[label].term.screenshot(file, []); + files.push(file); + } + return reply(200, { files }); + } + if (op === 'resize') { + for (const label of ['A', 'B']) await sessions[label].term.resize(Number(c), Number(r)); + await sleep(500); + return reply(200, { ok: true }); + } + if (op === 'restart') { + for (const label of targets(who)) { + await sessions[label].close(); + await start(label); + } + return reply(200, { ok: true }); + } + if (op === 'stop') { + reply(200, { ok: true }); + for (const s of Object.values(sessions)) await s.close().catch(() => {}); + await stage.close(); + fs.rmSync(scratch, { recursive: true, force: true }); + fs.rmSync(path.join(state, 'port'), { force: true }); + process.exit(0); + } + reply(400, { error: `unknown op ${op}` }); + } catch (error) { + reply(500, { error: String(error?.stack ?? error) }); + } + }); + server.listen(0, '127.0.0.1', () => { + fs.writeFileSync(path.join(state, 'port'), String(server.address().port)); + // The agent's only command: /t [args]. + const self = new URL(import.meta.url).pathname; + fs.writeFileSync(path.join(state, 't'), `#!/bin/sh\nexec "${process.execPath}" "${self}" "$@" --state "${state}"\n`, { mode: 0o755 }); + console.log(`soak terminals ready (A and B); the agent's command is ${path.join(state, 't')}`); + }); +} + +async function call(payload) { + const portFile = path.join(state, 'port'); + if (!fs.existsSync(portFile)) throw new Error(`no soak server: run "soak.mjs serve --state ${state}" first`); + const port = fs.readFileSync(portFile, 'utf8').trim(); + const res = await fetch(`http://127.0.0.1:${port}/`, { method: 'POST', body: JSON.stringify(payload) }); + const data = await res.json(); + if (data.error) throw new Error(data.error); + return data; +} + +if (command === 'serve') await serve(); +else if (command === 'type') await call({ op: 'type', who: positionals[0], text: positionals.slice(1).join(' ') }); +else if (command === 'screen') { + const { screen, exited } = await call({ op: 'screen', who: positionals[0] }); + console.log(screen.replace(/\s+$/, '')); + if (exited) console.log('[the program in this terminal has exited]'); +} else if (command === 'shot') console.log((await call({ op: 'shot', who: positionals[0] ?? 'both' })).files.join('\n')); +else if (command === 'resize') await call({ op: 'resize', cols: positionals[0], rows: positionals[1] }); +else if (command === 'restart') await call({ op: 'restart', who: positionals[0] ?? 'both' }); +else if (command === 'stop') await call({ op: 'stop' }); +else { + console.error('commands: serve | type | screen | shot | resize | restart | stop'); + process.exit(2); +}