{"_id":"@civaapple/qi-tui","_rev":"8-d99cce2b01adbb8bfb833db4280afb09","name":"@civaapple/qi-tui","dist-tags":{"latest":"0.7.4"},"versions":{"0.5.0":{"name":"@civaapple/qi-tui","version":"0.5.0","license":"MIT","_id":"@civaapple/qi-tui@0.5.0","maintainers":[{"name":"civaapple","email":"civaapple@gmail.com"}],"homepage":"https://github.com/civaapple-alt/qi#readme","bugs":{"url":"https://github.com/civaapple-alt/qi/issues"},"dist":{"shasum":"05cda31b846d8b58aa4ed4a2a8f490b1f23318c7","tarball":"https://registry.npmjs.org/@civaapple/qi-tui/-/qi-tui-0.5.0.tgz","fileCount":116,"integrity":"sha512-R26iT0JeWhpPUB2EM2AA6mdqMEQDyap84PZ9OhUm+uPCitzvQx43VQpVE/E/wGU6ynivcMPXzNsuKixSQjmgKw==","signatures":[{"sig":"MEQCIDCTMOaXqWpAW+Z8VunMw/V9liKR//HjyQfijABlF/mlAiBKj1xhzocZpS9kxAt6aFAevVyEu0Yyl6bMF093rry6wg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@civaapple%2fqi-tui@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":605744},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"9ae76a92cdcce130958d3f93c6ab5ba20149d424","_npmUser":{"name":"civaapple","email":"civaapple@gmail.com"},"repository":{"url":"git+https://github.com/civaapple-alt/qi.git","type":"git","directory":"packages/tui"},"_npmVersion":"11.16.0","description":"Reusable terminal presenters, controls, panels, themes, and Session projections for Qi","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@civaapple/qi-loop":"0.5.0","@civaapple/qi-tools":"0.5.0","@civaapple/qi-kernel":"0.5.0","@civaapple/qi-protocol":"0.5.0","@earendil-works/pi-tui":"0.81.1"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/qi-tui_0.5.0_1785137701962_0.8194089084923242","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@civaapple/qi-tui","version":"0.5.1","license":"MIT","_id":"@civaapple/qi-tui@0.5.1","maintainers":[{"name":"civaapple","email":"civaapple@gmail.com"}],"homepage":"https://github.com/civaapple-alt/qi#readme","bugs":{"url":"https://github.com/civaapple-alt/qi/issues"},"dist":{"shasum":"718b92574dd472dfc6003b1f23d1fdd13768337a","tarball":"https://registry.npmjs.org/@civaapple/qi-tui/-/qi-tui-0.5.1.tgz","fileCount":116,"integrity":"sha512-obmCi5kGtIih1TpDJ6kO7oUZeO1LaTxmM7/3Dca/3rOVl8TRIqS6fgobCz2hSUIVpjBQuIMiBfWBKbLLBcO3aA==","signatures":[{"sig":"MEUCIHI8hpS7mhoBRFuww7b+Wc2hqU9gkWZUKByN8GqUY4auAiEA+VdXuK+ngIKKIxEpkV903nrRG41gA51I6zFNmmcdyP0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@civaapple%2fqi-tui@0.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":610951},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"8b042be6fb43eda223b619286e9b3e5cb1e1c439","_npmUser":{"name":"civaapple","email":"civaapple@gmail.com"},"repository":{"url":"git+https://github.com/civaapple-alt/qi.git","type":"git","directory":"packages/tui"},"_npmVersion":"11.16.0","description":"Reusable terminal presenters, controls, panels, themes, and Session projections for Qi","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@civaapple/qi-loop":"0.5.1","@civaapple/qi-tools":"0.5.1","@civaapple/qi-kernel":"0.5.1","@civaapple/qi-protocol":"0.5.1","@earendil-works/pi-tui":"0.81.1"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/qi-tui_0.5.1_1785149359412_0.4898667551859537","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@civaapple/qi-tui","version":"0.6.0","license":"MIT","_id":"@civaapple/qi-tui@0.6.0","maintainers":[{"name":"civaapple","email":"civaapple@gmail.com"}],"homepage":"https://github.com/civaapple-alt/qi#readme","bugs":{"url":"https://github.com/civaapple-alt/qi/issues"},"dist":{"shasum":"640db05de161bc14612e31edcdc0a6ad9a981bbd","tarball":"https://registry.npmjs.org/@civaapple/qi-tui/-/qi-tui-0.6.0.tgz","fileCount":116,"integrity":"sha512-foYwz+0YphUZH4Mw6XyzulemaWHIxrYCxF7ZPJe6ooa6CNXK4g9NjWnyNxHgwUGp952r7wgyJvYJcv9EVqbR4w==","signatures":[{"sig":"MEUCIFt+a61cK3IgwJagb1kYFh6L2Jx1OQimqrQD7r/k3cGrAiEA7NTAQ6hKOeURD3qZyDW7qbNTRG/sSef6uPl73MwD5Mc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@civaapple%2fqi-tui@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":614744},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"e38f41185d88ff99099aa5cab5e5fc397ab1ace4","_npmUser":{"name":"civaapple","email":"civaapple@gmail.com"},"repository":{"url":"git+https://github.com/civaapple-alt/qi.git","type":"git","directory":"packages/tui"},"_npmVersion":"11.16.0","description":"Reusable terminal presenters, controls, panels, themes, and Session projections for Qi","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@civaapple/qi-agent":"0.6.0","@civaapple/qi-protocol":"0.6.0","@earendil-works/pi-tui":"0.81.1"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/qi-tui_0.6.0_1785226424316_0.6928662846216758","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@civaapple/qi-tui","version":"0.7.0","license":"MIT","_id":"@civaapple/qi-tui@0.7.0","maintainers":[{"name":"civaapple","email":"civaapple@gmail.com"}],"homepage":"https://github.com/civaapple-alt/qi#readme","bugs":{"url":"https://github.com/civaapple-alt/qi/issues"},"dist":{"shasum":"80fea0d5a074eac73d1be3a493396c8b074d5479","tarball":"https://registry.npmjs.org/@civaapple/qi-tui/-/qi-tui-0.7.0.tgz","fileCount":120,"integrity":"sha512-J+4guO4zjWo9xRvgndGEcnBlyk+6sZoC7l3OM7F04qWCyH5rwovbqrZ1ll4svhlV5pN6mTaX/HKFFtmVpncZPg==","signatures":[{"sig":"MEQCIHYvZ0G7fwDYwWBXYq9YM+oOHNj6IJu1kBdD68Y+f10CAiBkSHavcCsgv4U6gqgYOZbKJifnDp9ZP6DOnj8S3mPPzA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@civaapple%2fqi-tui@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":657340},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"5d6e74c44f4fe17f8b4f35c452a6a18cc8e74956","_npmUser":{"name":"civaapple","email":"civaapple@gmail.com"},"repository":{"url":"git+https://github.com/civaapple-alt/qi.git","type":"git","directory":"packages/tui"},"_npmVersion":"11.16.0","description":"Reusable terminal presenters, controls, panels, themes, and Session projections for Qi","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@civaapple/qi-agent":"0.7.0","@civaapple/qi-protocol":"0.7.0","@earendil-works/pi-tui":"0.81.1"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/qi-tui_0.7.0_1785242092430_0.45678173879683626","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@civaapple/qi-tui","version":"0.7.1","license":"MIT","_id":"@civaapple/qi-tui@0.7.1","maintainers":[{"name":"civaapple","email":"civaapple@gmail.com"}],"homepage":"https://github.com/civaapple-alt/qi#readme","bugs":{"url":"https://github.com/civaapple-alt/qi/issues"},"dist":{"shasum":"02135c1a3a6c959be3c41271c3acfbd439923e08","tarball":"https://registry.npmjs.org/@civaapple/qi-tui/-/qi-tui-0.7.1.tgz","fileCount":140,"integrity":"sha512-KkqqQt4qWBLD/HD3iv8FqxDOCxwZFq4POEJ/Oypi9wSf9C2CLHpnvwj27kgYIurTOlyU1WQw5BQq00NwnrS8rg==","signatures":[{"sig":"MEUCIGRlHduDGI5ZAizJ0IoUUNgO7Pd0nhC7PqILy/jEch5OAiEAsxODwGY3dWtfoAn3Ko78x5Z24gLOcjMK+7wPD58wOnA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@civaapple%2fqi-tui@0.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":721236},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"8f6e5c5d38cc79c01e31d6b87a9857d67767d278","_npmUser":{"name":"civaapple","email":"civaapple@gmail.com"},"repository":{"url":"git+https://github.com/civaapple-alt/qi.git","type":"git","directory":"packages/tui"},"_npmVersion":"11.16.0","description":"Reusable terminal presenters, controls, panels, themes, and Session projections for Qi","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@civaapple/qi-agent":"0.7.1","@civaapple/qi-protocol":"0.7.1","@earendil-works/pi-tui":"0.81.1"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/qi-tui_0.7.1_1785321705141_0.14002223211143083","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"@civaapple/qi-tui","version":"0.7.2","license":"MIT","_id":"@civaapple/qi-tui@0.7.2","maintainers":[{"name":"civaapple","email":"civaapple@gmail.com"}],"homepage":"https://github.com/civaapple-alt/qi#readme","bugs":{"url":"https://github.com/civaapple-alt/qi/issues"},"dist":{"shasum":"8a151a82bc67945214da76e9fd4bb8565ea081e0","tarball":"https://registry.npmjs.org/@civaapple/qi-tui/-/qi-tui-0.7.2.tgz","fileCount":140,"integrity":"sha512-SipwpJspNUhABj1akXCzbZYIan+lZPESjlwg/jkqnLvTA+vtuiUvnfTLGpyw1A2V46QxmvaZ9VLsoh/d0vYGcg==","signatures":[{"sig":"MEYCIQD5+e0G/+TmKGz+sQjlIvlvvq83YGLUdksNgRg0CKTOHgIhAMadJSx2GR6OOYQwqTtHNBnz5RTfkiQp1ZmTPO/lxQCF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@civaapple%2fqi-tui@0.7.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":749971},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"9d9d1dda6a0d6d8e3265782a7446516674898a35","_npmUser":{"name":"civaapple","email":"civaapple@gmail.com"},"repository":{"url":"git+https://github.com/civaapple-alt/qi.git","type":"git","directory":"packages/tui"},"_npmVersion":"11.16.0","description":"Reusable terminal presenters, controls, panels, themes, and Session projections for Qi","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@civaapple/qi-agent":"0.7.2","@civaapple/qi-protocol":"0.7.2","@earendil-works/pi-tui":"0.81.1"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/qi-tui_0.7.2_1785408153344_0.27706507157337623","host":"s3://npm-registry-packages-npm-production"}},"0.7.3":{"name":"@civaapple/qi-tui","version":"0.7.3","license":"MIT","_id":"@civaapple/qi-tui@0.7.3","maintainers":[{"name":"civaapple","email":"civaapple@gmail.com"}],"homepage":"https://github.com/civaapple-alt/qi#readme","bugs":{"url":"https://github.com/civaapple-alt/qi/issues"},"dist":{"shasum":"bbabbce0ccd8147e8e99ffe3fa96253180a70307","tarball":"https://registry.npmjs.org/@civaapple/qi-tui/-/qi-tui-0.7.3.tgz","fileCount":140,"integrity":"sha512-hkAftZgl9TDTodDpaRjt3BOcncSYTHO6ljV30qBDyi6BrhjOXD2H47Hj0c/lxgBV+oQnHbVijrIiSBI/zACUwg==","signatures":[{"sig":"MEUCIQC9UtRLxix6jDANMl3+TLijZ4cBmfL6tPgUf02w4Vtq1AIgIrraEQ91BXsTfEVD3efbTXC4bPk+dRl6x55xbCffvKc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@civaapple%2fqi-tui@0.7.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":811196},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"9808d7f0df3b5c7ae5270e409bb466f3e3576122","_npmUser":{"name":"civaapple","email":"civaapple@gmail.com"},"repository":{"url":"git+https://github.com/civaapple-alt/qi.git","type":"git","directory":"packages/tui"},"_npmVersion":"11.16.0","description":"Reusable terminal presenters, controls, panels, themes, and Session projections for Qi","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@civaapple/qi-agent":"0.7.3","@civaapple/qi-protocol":"0.7.3","@earendil-works/pi-tui":"0.81.1"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/qi-tui_0.7.3_1785745943504_0.9726820915811873","host":"s3://npm-registry-packages-npm-production"}},"0.7.4":{"name":"@civaapple/qi-tui","version":"0.7.4","description":"Reusable terminal presenters, controls, panels, themes, and Session projections for Qi","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"engines":{"node":">=22.19.0"},"dependencies":{"@civaapple/qi-agent":"0.7.4","@civaapple/qi-protocol":"0.7.4","@earendil-works/pi-tui":"0.81.1"},"repository":{"type":"git","url":"git+https://github.com/civaapple-alt/qi.git","directory":"packages/tui"},"homepage":"https://github.com/civaapple-alt/qi#readme","bugs":{"url":"https://github.com/civaapple-alt/qi/issues"},"license":"MIT","publishConfig":{"access":"public","provenance":true},"gitHead":"8c2bdc32c6f8d67794393ee15aa0e57bb5a73182","_id":"@civaapple/qi-tui@0.7.4","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-Nqsa/JF62OLCFFOsCbzn+lbKRdeq4sbmJnYMfQbTglQ3DZbRh7K9XoapMdxPqog86ShJAB/Sj47ZERxYfEuTgg==","shasum":"dc705b3653febf32aed393b481098928d0e6b111","tarball":"https://registry.npmjs.org/@civaapple/qi-tui/-/qi-tui-0.7.4.tgz","fileCount":140,"unpackedSize":840298,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@civaapple%2fqi-tui@0.7.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDB5i6F5QP131gQBCWPEzLIW/TtYJtNCIcp3wYZh/ERNQIgdJuBMB4gQBgfmc4/d+KB+kzQQRxIOXjj/LBj8R8RAzM="}]},"_npmUser":{"name":"civaapple","email":"civaapple@gmail.com"},"directories":{},"maintainers":[{"name":"civaapple","email":"civaapple@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/qi-tui_0.7.4_1785988625506_0.029614908374304694"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-27T07:35:01.751Z","modified":"2026-08-06T03:57:05.985Z","0.5.0":"2026-07-27T07:35:02.119Z","0.5.1":"2026-07-27T10:49:19.581Z","0.6.0":"2026-07-28T08:13:44.483Z","0.7.0":"2026-07-28T12:34:52.582Z","0.7.1":"2026-07-29T10:41:45.301Z","0.7.2":"2026-07-30T10:42:33.488Z","0.7.3":"2026-08-03T08:32:23.649Z","0.7.4":"2026-08-06T03:57:05.668Z"},"bugs":{"url":"https://github.com/civaapple-alt/qi/issues"},"license":"MIT","homepage":"https://github.com/civaapple-alt/qi#readme","repository":{"type":"git","url":"git+https://github.com/civaapple-alt/qi.git","directory":"packages/tui"},"description":"Reusable terminal presenters, controls, panels, themes, and Session projections for Qi","maintainers":[{"name":"civaapple","email":"civaapple@gmail.com"}],"readme":"# `@civaapple/qi-tui`\n\nVersion **0.7.4**. Package maturity: **internal public-package preview**.\n\nReusable Qi-specific terminal presentation and control components built on\n`@earendil-works/pi-tui`.\n\n## Purpose\n\n- Project committed `SessionEvent` and `SessionView` facts into terminal-friendly transcripts and status views.\n- Render bounded Markdown and Action cards without turning provisional activity into settlement.\n- Wrap wide Markdown table cells (or stack fields on narrow terminals) so later columns are not clipped, and\n  keep the latest three display-wrapped provisional model text/reasoning/tool lines visible in the Working strip.\n- Keep provisional reasoning in the live Working strip only (never as agent narration); render settled reasoning\n  as a one-line, expandable Thinking item. During Thinking the Working strip token count grows as\n  `context.estimatedTokens + estimatedOutputTokens`, then switches to provider `input+output` after\n  `model.completed`. Length-boundary assistant `text` stays as an 8-line truncated tail;\n  ordinary long replies preview from the head (200 rendered lines on a terminal Step, matching Formal Plan\n  scale; 48 mid-Run) with Ctrl+O for the rest. Ctrl+O prefers that truncated model output over Thinking when\n  both advertise the same shortcut, and an expanded Step renders the full assistant text from the start.\n  Render an accepted Formal Plan as a 200-line transcript preview with its immutable local path instead of\n  treating it as pasted input.\n- Render that same bounded Formal Plan preview before Plan Review choices, so the reviewed document is visible\n  before acceptance.\n- Retain confirmed `ask_question` cards with every question and option plus selected, custom-text, and skipped\n  answers; durable Action input/output, rather than transient panel state, drives replay. Interactive\n  `QuestionPanel` prompts hard-wrap by display column width so long CJK text cannot overflow the terminal.\n- Group consecutive, same-Step read-only discovery Actions while preserving every durable Action for expansion\n  and History Center inspection.\n- Project `/context` diagnostics with per-ContextBlock-kind included token share, included/omitted counts,\n  omitted token cost, and a separate conversation/Tool-schema subtotal when durable block statistics exist.\n- Explicit `/skill:<name> <task>` Runs show a bounded `Skill · <name> · <scope>` line before the original task;\n  the Skill instruction body is never rendered by the TUI.\n- Skill management distinguishes always-active Workspace/user Skills from toggleable global Agent Skills; `/skills`\n  exposes only activation management and installation, and the activation panel uses Space to toggle and Enter to apply.\n- Model-initiated `skill` Tool calls appear as bounded `Skill tool · <operation> · <name> · <status>` lines and\n  cards. Failed Skill calls remain visible even when the surrounding Run produces a fallback response.\n- Keep bounded file Diff previews for completed mutations in the current Run, and\n  expose bounded process failure evidence instead of hiding it inside the ToolFailure envelope.\n- Project failed `git` cards with the full request (`git status · ref HEAD`, `git diff · maxCount 5`) and the\n  validation message, not only `INVALID_GIT_ARGUMENT`.\n- Include effective thinking effort and the selected model's wire API (`responses` / `chat.completions`) on the\n  statusline when launch info supplies them, and show Run-cumulative provider prompt-cache hit rate as `CH%`\n  (`sum(cachedInputTokens)/sum(inputTokens)`). `/context` also shows the latest Step's cache line.\n- For indeterminate Actions, surface the durable settlement reason (and reconciliation hint) on the tool card\n  and enrich parked-run handoff text beyond the generic \"settlement could not be confirmed\" phrase.\n- Provide reusable composer, follow-up queue, selection/form/scroll panels, themes, and layout helpers.\n- Carry structured image metadata in follow-ups and render committed image source, dimensions, and preprocessing\n  state from `run.triggered.content`; clipboard, Network, configuration, and Artifact reads remain application\n  responsibilities.\n- Keep Qi-specific control vocabulary separate from CLI startup, credentials, persistence, and process ownership.\n\n## Non-goals\n\n- This is not a general replacement for `@earendil-works/pi-tui`.\n- It does not create Sessions, call models, execute Tools, grant capabilities, or own application lifecycle.\n- `TuiPresenter` projects supplied facts; it is not a second Runtime or source of Session truth.\n- Provider login, configuration files, CLI arguments, and the interactive application shell remain in\n  `@civaapple/qi`.\n\n## Quick start\n\n```sh\nnpm install @civaapple/qi-tui\n```\n\n```ts\nimport {\n  ListPanel,\n  TuiPresenter,\n  renderMarkdown,\n  statusGlyph,\n} from \"@civaapple/qi-tui\";\n\nconst presenter = new TuiPresenter({\n  workspaceRoot: process.cwd(),\n  dataRoot: \".qi\",\n  provider: \"scripted\",\n  model: \"example\",\n  capabilities: [],\n  contextWindowTokens: 128_000,\n  contextBudgetTokens: 112_000,\n  outputReserveTokens: 16_000,\n  historyBudgetTokens: 16_000,\n  maxSteps: 20,\n  maxActionsPerStep: 6,\n});\n\nconsole.log(renderMarkdown(\"## Qi\", 80));\nconsole.log(statusGlyph(\"denied\"));\n```\n\nApplication authors provide committed events and projections to `TuiPresenter.update()` for cold start or\nresynchronization, then call `applyCommitted()` for contiguous facts. A `false` result requests one cold\nresynchronization. Components that\nimplement the `pi-tui` `Component`/`Focusable` contracts can be mounted in an existing terminal application.\n\n## Public API\n\n- `TuiPresenter` and projection/render helpers;\n- `TimelineDensity = \"compact\" | \"standard\" | \"diagnostic\"`; the default is `standard`, and\n  `TuiPresenter.density()` / `setDensity()` provide Session-local presentation control;\n- `ComposerComponent`, `FollowUpQueue`, and `FollowUpsComponent`;\n- `ListPanel`, `MultiSelectPanel`, `FormPanel` (text, secret, and terminal-dropdown fields with optional custom\n  input), `QuestionPanel`, `ScrollPanel`, `SessionsPanel`, and `PanelHost`;\n- committed `ask_question` Action cards that replay prompts, options, and confirmed answers;\n- Codex-style `update_plan` Todo snapshots in the Action timeline (full ✔/◐/○ lists that flow with the chat\n  stream, not a sticky footer); legacy Plan-item Todo projection remains\n  replay-only for legacy plans. Failed snapshots include their durable rejection code and message.\n- Settled successful `shell`/`script`/`verify` cards collapse to `$ command · duration`; expanded or diagnostic\n  views reveal bounded output, while failures retain bounded evidence.\n- command parsing/autocomplete and localization helpers;\n- Markdown, layout, theme, Action-card, Session-list, and repaint helpers.\n\nThe CLI runtime, auth/configuration, project policy, provider setup, tool construction, and process entrypoint\nare intentionally absent.\n\n## Change guidance\n\nKeep the package render-only or local-component-state-only. New exports must not write Session facts, enter Tool\nexecutors, load credentials, read policy files, or hide unbounded output. Add component or projection tests and\nan isolated TypeScript consumer for every compatibility-sensitive public API change.\n\n## Verification\n\n- `tests/tui-package.test.mjs` exercises the package directly.\n- `tests/tui-presentation.test.mjs` covers projections, cards, panels, bounded rendering, and repaint semantics.\n- `npm run packages:check` installs the tarball into an empty consumer and typechecks its public imports.\n\n## Further reading\n\n- [ADR 0018](../../design/decisions.md#adr-0018-publish-a-modular-open-source-runtime)\n- [TUI application contract](../../apps/cli/README.md)\n- [Bounded transcript rendering](../../design/decisions.md#adr-0017-bound-tui-transcript-work)\n- [Unified Interaction Timeline](../../design/decisions.md#adr-0027-project-one-bounded-interaction-timeline-with-protected-human-attention)\n","readmeFilename":"README.md"}