From f8c5ce70be9608b8ed900bd69a30566bfe9897d4 Mon Sep 17 00:00:00 2001 From: evalops-mirror Date: Sun, 19 Jul 2026 17:55:03 -0700 Subject: [PATCH 1/7] chore: sync public mirror from internal - sync sanitized public tree from evalops/maestro-internal - remove deleted TypeScript TUI (packages/tui + src/cli-tui) - include native maestro-tui packaging + post-rip fixes through 4040c71 internal source SHA: 4040c71ad1280f6b8235797453964ecc4aa81c18 --- .github/RELEASE_MIRROR_CONTRACT.md | 4 - .gitignore | 3 + CONTRIBUTING.md | 2 +- Dockerfile | 4 - README.md | 4 +- bun.lockb | Bin 715704 -> 714696 bytes docs/AGENT_INTERNALS.md | 2 +- docs/ARCHITECTURE.md | 131 +- docs/ARCHITECTURE_DIAGRAM.md | 19 +- docs/BUILD_TESTING.md | 7 +- docs/CONTRIBUTOR_RUNBOOK.md | 12 +- docs/FEATURES.md | 7 +- docs/NATIVE_TUI_PARITY.md | 119 + docs/PROMPT_QUEUE.md | 84 +- docs/QUICKSTART.md | 30 +- docs/README.md | 3 + docs/THREAT_MODEL.md | 2 +- docs/TUI_ARCHITECTURE.md | 504 +-- docs/design/INDEX.md | 2 +- docs/design/LSP_INTEGRATION.md | 6 +- docs/design/TELEMETRY_COST.md | 6 +- docs/design/TUI_RENDERING.md | 10 +- docs/patterns/INDEX.md | 4 +- docs/patterns/event-suppression.md | 9 +- docs/patterns/tui-controller-extraction.md | 21 +- docs/perf/turn-latency-budget-20260531.md | 3 +- docs/protocols/a2a-fleet-delegation.md | 3 +- docs/protocols/a2a-peer-pairing.md | 9 +- docs/protocols/codex-parity-conformance.json | 10 - .../release-surface-conformance.json | 1 - evals/tui/quick-settings-cases.json | 245 -- flake.nix | 2 - nx.json | 25 +- package.json | 14 +- packages/ai/package.json | 1 - packages/core/package.json | 12 +- packages/tui-rs/src/agent/compaction.rs | 2 +- packages/tui-rs/src/agent/token_estimation.rs | 6 +- packages/tui-rs/src/app.rs | 120 +- packages/tui-rs/src/app/command_handlers.rs | 47 + packages/tui-rs/src/app/tests.rs | 1 + packages/tui-rs/src/commands/mod.rs | 4 +- packages/tui-rs/src/commands/registry.rs | 87 + .../tui-rs/src/commands/registry/tests.rs | 97 + packages/tui-rs/src/commands/types.rs | 4 + packages/tui-rs/src/components/message.rs | 5 +- packages/tui-rs/src/lib.rs | 1 + packages/tui-rs/src/main.rs | 22 +- packages/tui-rs/src/prompts.rs | 132 +- packages/tui-rs/src/skills/loader.rs | 84 +- packages/tui-rs/src/skills/types.rs | 8 + packages/tui-rs/src/tools/history/tests.rs | 4 +- packages/tui/README.md | 255 -- packages/tui/package.json | 58 - packages/tui/project.json | 29 - packages/tui/src/autocomplete.ts | 924 ------ packages/tui/src/components/editor.ts | 1683 ---------- packages/tui/src/components/input.ts | 466 --- packages/tui/src/components/layout.ts | 655 ---- packages/tui/src/components/loader.ts | 462 --- packages/tui/src/components/markdown.ts | 714 ----- .../tui/src/components/scroll-container.ts | 746 ----- packages/tui/src/components/select-list.ts | 325 -- packages/tui/src/components/spacer.ts | 20 - packages/tui/src/components/status-bar.ts | 65 - packages/tui/src/components/text.ts | 223 -- packages/tui/src/components/truncated-text.ts | 109 - packages/tui/src/index.ts | 157 - packages/tui/src/keymap.ts | 419 --- packages/tui/src/mermaid-renderer.ts | 1024 ------ packages/tui/src/style/code-highlighter.ts | 566 ---- packages/tui/src/terminal.ts | 323 -- packages/tui/src/testing/index.ts | 46 - packages/tui/src/testing/virtual-terminal.ts | 304 -- packages/tui/src/tui.ts | 865 ------ packages/tui/src/utils.ts | 627 ---- packages/tui/src/utils/terminal-features.ts | 62 - packages/tui/test/editor-input.test.ts | 48 - packages/tui/test/editor-keymap.test.ts | 274 -- packages/tui/test/keymap.test.ts | 254 -- packages/tui/test/layout.test.ts | 63 - .../tui/test/rendering-properties.test.ts | 134 - packages/tui/test/scroll-container.test.ts | 108 - packages/tui/test/tui-harness.test.ts | 100 - packages/tui/test/utils.test.ts | 89 - packages/tui/test/virtual-terminal.test.ts | 241 -- packages/tui/tsconfig.build.json | 11 - packages/tui/vitest.config.ts | 8 - project.json | 6 +- scripts/check-actions-pipelines-cert.mjs | 108 + scripts/check-atomic-write-hygiene.mjs | 3 +- scripts/check-release-mirror-contract.mjs | 42 +- scripts/check-release-surface-conformance.mjs | 3 +- scripts/check-staged-rollout.mjs | 3 +- scripts/check-tui-vendor-packed.mjs | 93 + scripts/ci-nx-tests.sh | 2 +- scripts/cli-runtime-boundary-externals.mjs | 2 - scripts/ensure-deps.js | 5 - scripts/env-reads-baseline.json | 121 - scripts/evals/quick-settings/core.ts | 254 -- scripts/evals/run-quick-settings-evals.ts | 13 - scripts/guardrail-regression-suite.json | 671 ++-- scripts/materialize-tui-vendor.mjs | 130 + scripts/measure-turn-latency-budget.mjs | 2 - scripts/settings-reads-baseline.json | 10 - scripts/verify-build.ts | 3 +- scripts/verify-evals.js | 5 - src/cli-tui/about-view.ts | 261 -- src/cli-tui/agent-event-router.ts | 202 -- src/cli-tui/approval/approval-controller.ts | 130 - src/cli-tui/approval/approval-modal.ts | 205 -- src/cli-tui/assistant-message.ts | 302 -- src/cli-tui/auth-state.ts | 63 - .../background/background-tasks-controller.ts | 116 - src/cli-tui/base-view.ts | 178 -- src/cli-tui/bash-mode-view.ts | 708 ----- src/cli-tui/bash-shell-block.ts | 161 - src/cli-tui/bash/background-launcher.ts | 71 - src/cli-tui/bash/bash-autocomplete.ts | 415 --- src/cli-tui/bash/bash-history.ts | 81 - src/cli-tui/bash/bash-syntax.ts | 201 -- src/cli-tui/bash/index.ts | 8 - src/cli-tui/changelog-view.ts | 54 - src/cli-tui/clean-mode.ts | 35 - .../client-tools/client-tool-controller.ts | 1204 -------- .../client-tools/local-client-tool-service.ts | 144 - src/cli-tui/commands/a2a-handlers.ts | 270 -- src/cli-tui/commands/access-command.ts | 112 - src/cli-tui/commands/argument-parser.ts | 160 - src/cli-tui/commands/audit-command.ts | 53 - src/cli-tui/commands/background-handlers.ts | 169 - src/cli-tui/commands/command-catalog.ts | 761 ----- .../commands/command-registry-adapter.ts | 219 -- src/cli-tui/commands/command-suite-catalog.ts | 186 -- .../commands/command-suite-handlers.ts | 228 -- src/cli-tui/commands/composer-handlers.ts | 107 - src/cli-tui/commands/framework-handlers.ts | 81 - src/cli-tui/commands/guardian-handlers.ts | 77 - src/cli-tui/commands/handlers/mode-handler.ts | 197 -- src/cli-tui/commands/hotkeys-command.ts | 81 - src/cli-tui/commands/limits-command.ts | 148 - src/cli-tui/commands/mcp-handlers.ts | 1742 ----------- src/cli-tui/commands/memory-handlers.ts | 535 ---- src/cli-tui/commands/otel-handlers.ts | 25 - src/cli-tui/commands/package-handlers.ts | 682 ---- src/cli-tui/commands/pii-command.ts | 67 - src/cli-tui/commands/registry.ts | 77 - src/cli-tui/commands/safety-handlers.ts | 102 - .../commands/subcommands/auth-commands.ts | 109 - .../commands/subcommands/config-commands.ts | 77 - .../commands/subcommands/diag-commands.ts | 219 -- .../commands/subcommands/git-commands.ts | 63 - src/cli-tui/commands/subcommands/index.ts | 80 - .../commands/subcommands/safety-commands.ts | 188 -- .../commands/subcommands/session-commands.ts | 157 - .../commands/subcommands/tools-commands.ts | 99 - .../commands/subcommands/ui-commands.ts | 102 - .../commands/subcommands/undo-commands.ts | 103 - .../commands/subcommands/usage-commands.ts | 78 - src/cli-tui/commands/subcommands/utils.ts | 511 --- src/cli-tui/commands/types.ts | 116 - src/cli-tui/commands/undo-handlers.ts | 374 --- src/cli-tui/commands/utility-handlers.ts | 205 -- src/cli-tui/commands/workflow-handlers.ts | 311 -- src/cli-tui/compact-boundary-message.ts | 21 - src/cli-tui/compaction-recovery.ts | 22 - src/cli-tui/config-view.ts | 317 -- src/cli-tui/context-view.ts | 260 -- src/cli-tui/custom-editor.ts | 271 -- src/cli-tui/editor-view.ts | 140 - src/cli-tui/feedback-view.ts | 354 --- src/cli-tui/footer.ts | 307 -- src/cli-tui/git/commit-modal.ts | 80 - src/cli-tui/git/git-preview-modal.ts | 163 - src/cli-tui/git/git-view.ts | 626 ---- src/cli-tui/history/history-config.ts | 59 - src/cli-tui/history/prompt-history.ts | 215 -- src/cli-tui/history/tool-history.ts | 303 -- src/cli-tui/hook-message.ts | 89 - src/cli-tui/hooks/hook-input-modal.ts | 94 - src/cli-tui/hotkeys-view.ts | 129 - src/cli-tui/import-view.ts | 281 -- src/cli-tui/info-view.ts | 125 - src/cli-tui/instruction-panel.ts | 106 - src/cli-tui/interrupt-controller.ts | 153 - src/cli-tui/keybindings-config.ts | 501 --- src/cli-tui/keybindings-watcher.ts | 73 - src/cli-tui/keybindings.ts | 325 -- src/cli-tui/loader/loader-stage-manager.ts | 286 -- src/cli-tui/loader/loader-stage-telemetry.ts | 48 - src/cli-tui/loader/loader-view.ts | 220 -- src/cli-tui/lsp-view.ts | 224 -- src/cli-tui/mermaid-renderer.ts | 491 --- src/cli-tui/message-view.ts | 220 -- src/cli-tui/modal-manager.ts | 186 -- src/cli-tui/notification-view.ts | 67 - src/cli-tui/oauth/index.ts | 6 - src/cli-tui/oauth/oauth-flow-controller.ts | 600 ---- src/cli-tui/ollama-view.ts | 505 --- src/cli-tui/paste/index.ts | 5 - src/cli-tui/paste/paste-handler.ts | 200 -- src/cli-tui/plan-panel-modal.ts | 277 -- src/cli-tui/plan-view.ts | 504 --- src/cli-tui/plan/plan-controller.ts | 91 - src/cli-tui/prompt-queue.ts | 8 - src/cli-tui/queue-panel-modal.ts | 264 -- src/cli-tui/queue/follow-up-shortcut.ts | 15 - src/cli-tui/queue/index.ts | 11 - src/cli-tui/queue/queue-controller.ts | 502 --- src/cli-tui/queue/queue-panel-controller.ts | 217 -- .../queue/queued-follow-up-edit-binding.ts | 34 - src/cli-tui/run/run-command-view.ts | 82 - src/cli-tui/run/run-controller.ts | 55 - src/cli-tui/run/run-shell-command.ts | 74 - src/cli-tui/run/streaming-shell-command.ts | 139 - src/cli-tui/search/file-search-view.ts | 88 - src/cli-tui/search/file-search.ts | 65 - src/cli-tui/security-status.ts | 282 -- src/cli-tui/selectors/base-selector.ts | 84 - src/cli-tui/selectors/branch-summary-modal.ts | 48 - src/cli-tui/selectors/model-selector-view.ts | 53 - src/cli-tui/selectors/model-selector.ts | 300 -- src/cli-tui/selectors/oauth-selector-view.ts | 53 - src/cli-tui/selectors/oauth-selector.ts | 165 - .../selectors/queue-mode-selector-view.ts | 47 - src/cli-tui/selectors/queue-mode-selector.ts | 44 - src/cli-tui/selectors/report-selector-view.ts | 43 - src/cli-tui/selectors/report-selector.ts | 38 - src/cli-tui/selectors/theme-selector-view.ts | 58 - src/cli-tui/selectors/theme-selector.ts | 62 - .../selectors/thinking-selector-view.ts | 48 - src/cli-tui/selectors/thinking-selector.ts | 57 - src/cli-tui/selectors/tree-selector-view.ts | 575 ---- src/cli-tui/selectors/tree-selector.ts | 271 -- .../selectors/user-message-selector-view.ts | 159 - .../selectors/user-message-selector.ts | 169 - src/cli-tui/session/branch-controller.ts | 210 -- src/cli-tui/session/conversation-compactor.ts | 136 - src/cli-tui/session/select-session.ts | 47 - src/cli-tui/session/session-context.ts | 133 - src/cli-tui/session/session-data-provider.ts | 40 - src/cli-tui/session/session-list.ts | 136 - src/cli-tui/session/session-selector.ts | 51 - .../session/session-summary-controller.ts | 144 - src/cli-tui/session/session-switcher-view.ts | 59 - src/cli-tui/session/session-switcher.ts | 263 -- src/cli-tui/session/session-view.ts | 447 --- src/cli-tui/slash/index.ts | 5 - src/cli-tui/slash/slash-command-matcher.ts | 145 - src/cli-tui/smart-autocomplete-provider.ts | 48 - src/cli-tui/startup-announcements.ts | 111 - src/cli-tui/status/cost-view.ts | 288 -- src/cli-tui/status/diagnostics-templates.ts | 242 -- src/cli-tui/status/diagnostics-view.ts | 324 -- src/cli-tui/status/diagnostics.ts | 380 --- src/cli-tui/status/health-snapshot.ts | 57 - src/cli-tui/status/quota-view.ts | 456 --- src/cli-tui/status/telemetry-view.ts | 110 - src/cli-tui/status/training-view.ts | 105 - src/cli-tui/streaming-view.ts | 210 -- src/cli-tui/terminal/index.ts | 10 - src/cli-tui/terminal/terminal-utils.ts | 172 -- src/cli-tui/tips/tip-scheduler.ts | 207 -- src/cli-tui/tool-execution.ts | 335 -- src/cli-tui/tool-output-view.ts | 87 - src/cli-tui/tool-renderers/index.ts | 23 - src/cli-tui/tool-renderers/render-bash.ts | 118 - src/cli-tui/tool-renderers/render-batch.ts | 181 -- src/cli-tui/tool-renderers/render-edit.ts | 163 - src/cli-tui/tool-renderers/render-generic.ts | 85 - src/cli-tui/tool-renderers/render-read.ts | 140 - src/cli-tui/tool-renderers/render-style.ts | 69 - src/cli-tui/tool-renderers/render-write.ts | 81 - src/cli-tui/tool-renderers/types.ts | 22 - .../tool-retry/tool-retry-controller.ts | 145 - src/cli-tui/tool-retry/tool-retry-modal.ts | 163 - src/cli-tui/tool-status-view.ts | 122 - src/cli-tui/tui-renderer.ts | 2751 ----------------- .../tui-renderer/agent-event-bridge.ts | 222 -- src/cli-tui/tui-renderer/approval-setup.ts | 15 - .../tui-renderer/attachment-controller.ts | 214 -- .../tui-renderer/background-tasks-setup.ts | 13 - src/cli-tui/tui-renderer/branch-controller.ts | 160 - src/cli-tui/tui-renderer/clear-controller.ts | 160 - .../tui-renderer/client-tools-setup.ts | 16 - .../tui-renderer/command-registry-options.ts | 342 -- src/cli-tui/tui-renderer/command-registry.ts | 49 - .../tui-renderer/command-suite-wiring.ts | 204 -- .../tui-renderer/compaction-controller.ts | 248 -- .../custom-commands-controller.ts | 173 -- .../delegating-command-handlers.ts | 222 -- src/cli-tui/tui-renderer/editor-bindings.ts | 98 - .../tui-renderer/footer-hints-controller.ts | 253 -- .../tui-renderer/history-controller.ts | 229 -- .../tui-renderer/hook-ui-controller.ts | 428 --- .../tui-renderer/initial-preferences.ts | 88 - src/cli-tui/tui-renderer/input-controller.ts | 156 - src/cli-tui/tui-renderer/interrupt-setup.ts | 41 - src/cli-tui/tui-renderer/loader-setup.ts | 25 - src/cli-tui/tui-renderer/mcp-events-setup.ts | 198 -- src/cli-tui/tui-renderer/misc-handlers.ts | 201 -- src/cli-tui/tui-renderer/oauth-setup.ts | 45 - src/cli-tui/tui-renderer/plan-setup.ts | 44 - .../prompt-template-slash-commands.ts | 115 - src/cli-tui/tui-renderer/queue-setup.ts | 71 - .../tui-renderer/quick-settings-controller.ts | 169 - src/cli-tui/tui-renderer/session-setup.ts | 85 - .../tui-renderer/session-state-controller.ts | 235 -- src/cli-tui/tui-renderer/skills-controller.ts | 599 ---- .../tui-renderer/slash-hint-controller.ts | 196 -- src/cli-tui/tui-renderer/tool-retry-setup.ts | 15 - .../tui-renderer/tooling-views-setup.ts | 105 - .../tui-renderer/ui-state-controller.ts | 268 -- src/cli-tui/tui-renderer/ui-state-setup.ts | 28 - .../tui-renderer/utility-views-setup.ts | 62 - .../tui-renderer/viewport-controller.ts | 133 - src/cli-tui/ui-state.ts | 8 - src/cli-tui/update-view.ts | 64 - src/cli-tui/user-message.ts | 148 - src/cli-tui/utils/borders.ts | 398 --- .../utils/commands/command-palette-view.ts | 50 - src/cli-tui/utils/commands/command-palette.ts | 262 -- .../commands/command-registry-builder.ts | 19 - src/cli-tui/utils/commands/review-prompt.ts | 100 - src/cli-tui/utils/commands/slash-hint-bar.ts | 122 - src/cli-tui/utils/env-detect.ts | 104 - src/cli-tui/utils/external-editor.ts | 67 - src/cli-tui/utils/footer-utils.ts | 950 ------ src/cli-tui/utils/footer-visual-widgets.ts | 185 -- src/cli-tui/utils/git-branch-tracker.ts | 100 - src/cli-tui/utils/glyphs.ts | 306 -- src/cli-tui/utils/layout.ts | 113 - src/cli-tui/utils/links.ts | 13 - src/cli-tui/utils/motion.ts | 30 - src/cli-tui/utils/runtime-badges.ts | 247 -- src/cli-tui/utils/shimmer.ts | 82 - src/cli-tui/utils/stage-labels.ts | 78 - src/cli-tui/utils/text-formatting.ts | 126 - src/cli-tui/utils/text-preview.ts | 24 - src/cli-tui/utils/tool-text-utils.ts | 446 --- src/cli-tui/welcome-animation.ts | 131 - src/cli-tui/welcome-colors.ts | 44 - src/cli/native-tui-launcher.ts | 349 +++ src/cli/session.ts | 56 +- src/main.ts | 242 +- src/utils/terminal-text.ts | 29 + test/arrow-normalization.test.ts | 119 - test/cli-tui/agent-event-bridge.test.ts | 215 -- .../agent-event-router-thinking.test.ts | 433 --- test/cli-tui/assistant-message.test.ts | 62 - test/cli-tui/attachment-controller.test.ts | 36 - test/cli-tui/clear-controller.test.ts | 54 - test/cli-tui/commands/a2a-handlers.test.ts | 246 -- .../command-registry-integration.test.ts | 548 ---- .../commands/framework-handlers.test.ts | 164 - test/cli-tui/commands/hotkeys-command.test.ts | 111 - test/cli-tui/commands/mode-handler.test.ts | 51 - .../cli-tui/commands/package-handlers.test.ts | 641 ---- .../commands/standalone-handlers.test.ts | 1412 --------- .../cli-tui/commands/utility-handlers.test.ts | 406 --- test/cli-tui/conversation-compactor.test.ts | 52 - test/cli-tui/external-editor.test.ts | 88 - test/cli-tui/keybindings-config.test.ts | 136 - test/cli-tui/keybindings-watcher.test.ts | 133 - test/cli-tui/keybindings.test.ts | 136 - test/cli-tui/message-view.test.ts | 94 - test/cli-tui/modal-manager.test.ts | 92 - test/cli-tui/model-selector.test.ts | 39 - .../prompt-template-slash-commands.test.ts | 67 - test/cli-tui/runtime-badges.test.ts | 301 -- test/cli-tui/session-state-controller.test.ts | 177 -- test/cli-tui/skills-controller.test.ts | 659 ---- test/cli-tui/startup-announcements.test.ts | 113 - test/cli-tui/tip-scheduler.test.ts | 149 - test/cli-tui/tool-history.test.ts | 26 - test/cli/command-parser.test.ts | 52 - test/cli/native-tui-launcher-e2e.test.ts | 128 + test/cli/native-tui-launcher.test.ts | 366 +++ test/cli/review-prompt.test.ts | 25 - test/cli/startup-error-stderr.test.ts | 18 +- test/evals/quick-settings-evals.test.ts | 17 - test/lsp-view.test.ts | 148 - test/packages/core/naming-consistency.test.ts | 1 - test/queued-follow-up-edit-binding.test.ts | 103 - .../check-actions-pipelines-cert.test.ts | 26 + .../check-release-mirror-contract.test.ts | 22 +- .../ensure-deps-workspace-bootstrap.test.ts | 5 - test/scripts/release-context-deps.test.ts | 6 +- .../release-surface-conformance.test.ts | 2 - .../session-summary-controller.test.ts | 52 - test/session/session-view-info.test.ts | 152 - test/slash-hint-bar.test.ts | 56 - test/streaming-view.test.ts | 258 -- test/testing/auto-verify.test.ts | 2 +- test/tools/tool-execution.test.ts | 417 --- test/tui-command-prefs.test.ts | 34 - .../diagnostics-report.test.ts.snap | 83 - test/tui/about-view.test.ts | 52 - test/tui/approval-modal.test.ts | 240 -- test/tui/auth-state.test.ts | 102 - test/tui/bash-mode.test.ts | 1084 ------- test/tui/branch-controller.test.ts | 406 --- test/tui/changelog.test.ts | 122 - test/tui/clamp-ansi.test.ts | 37 - test/tui/clean-mode.test.ts | 72 - test/tui/client-tool-controller.test.ts | 268 -- test/tui/command-palette-component.test.ts | 53 - test/tui/command-registry-options.test.ts | 331 -- test/tui/config-view.test.ts | 209 -- test/tui/context-view.test.ts | 111 - test/tui/cost-view.test.ts | 215 -- test/tui/custom-commands-controller.test.ts | 57 - test/tui/diagnostics-report.test.ts | 151 - test/tui/editor-kill-ring.test.ts | 22 - test/tui/editor-view.test.ts | 175 -- test/tui/editor-word-nav.test.ts | 53 - test/tui/feedback-view.test.ts | 76 - test/tui/footer-hints-controller.test.ts | 111 - test/tui/footer-shimmer.test.ts | 53 - test/tui/footer.test.ts | 425 --- test/tui/git-view.test.ts | 142 - test/tui/hotkeys-view.test.ts | 86 - test/tui/import-export-view.test.ts | 219 -- test/tui/input-controller.test.ts | 119 - test/tui/interrupt-controller.test.ts | 308 -- test/tui/loader-stage-manager.test.ts | 66 - test/tui/markdown-table.test.ts | 106 - test/tui/mcp-events-setup.test.ts | 119 - test/tui/mermaid-renderer.test.ts | 33 - test/tui/oauth-flow-controller.test.ts | 437 --- test/tui/ollama-view.test.ts | 227 -- test/tui/paste-handler.test.ts | 350 --- test/tui/plan-view-editor.test.ts | 131 - test/tui/plan-view.test.ts | 265 -- test/tui/prompt-queue.test.ts | 142 - test/tui/queue-controller.test.ts | 637 ---- test/tui/quota-view.test.ts | 545 ---- test/tui/run-controller.test.ts | 48 - test/tui/shimmer.test.ts | 40 - test/tui/slash-command-matcher.test.ts | 202 -- test/tui/stage-labels.test.ts | 35 - test/tui/telemetry-view.test.ts | 105 - test/tui/terminal-utils.test.ts | 227 -- test/tui/tool-output-clamp.test.ts | 44 - test/tui/training-view.test.ts | 115 - test/tui/tui-autocomplete.test.ts | 146 - test/tui/tui-subcommands.test.ts | 1770 ----------- test/tui/tui-wrap.test.ts | 63 - test/tui/ui-state-controller.test.ts | 76 - test/tui/update-view.test.ts | 29 - test/tui/welcome-animation.test.ts | 43 - tools/bazel/maestro_bazel_contract_test.sh | 1 - tsconfig.build.json | 33 +- 453 files changed, 2720 insertions(+), 79527 deletions(-) create mode 100644 docs/NATIVE_TUI_PARITY.md delete mode 100644 evals/tui/quick-settings-cases.json delete mode 100644 packages/tui/README.md delete mode 100644 packages/tui/package.json delete mode 100644 packages/tui/project.json delete mode 100644 packages/tui/src/autocomplete.ts delete mode 100644 packages/tui/src/components/editor.ts delete mode 100644 packages/tui/src/components/input.ts delete mode 100644 packages/tui/src/components/layout.ts delete mode 100644 packages/tui/src/components/loader.ts delete mode 100644 packages/tui/src/components/markdown.ts delete mode 100644 packages/tui/src/components/scroll-container.ts delete mode 100644 packages/tui/src/components/select-list.ts delete mode 100644 packages/tui/src/components/spacer.ts delete mode 100644 packages/tui/src/components/status-bar.ts delete mode 100644 packages/tui/src/components/text.ts delete mode 100644 packages/tui/src/components/truncated-text.ts delete mode 100644 packages/tui/src/index.ts delete mode 100644 packages/tui/src/keymap.ts delete mode 100644 packages/tui/src/mermaid-renderer.ts delete mode 100644 packages/tui/src/style/code-highlighter.ts delete mode 100644 packages/tui/src/terminal.ts delete mode 100644 packages/tui/src/testing/index.ts delete mode 100644 packages/tui/src/testing/virtual-terminal.ts delete mode 100644 packages/tui/src/tui.ts delete mode 100644 packages/tui/src/utils.ts delete mode 100644 packages/tui/src/utils/terminal-features.ts delete mode 100644 packages/tui/test/editor-input.test.ts delete mode 100644 packages/tui/test/editor-keymap.test.ts delete mode 100644 packages/tui/test/keymap.test.ts delete mode 100644 packages/tui/test/layout.test.ts delete mode 100644 packages/tui/test/rendering-properties.test.ts delete mode 100644 packages/tui/test/scroll-container.test.ts delete mode 100644 packages/tui/test/tui-harness.test.ts delete mode 100644 packages/tui/test/utils.test.ts delete mode 100644 packages/tui/test/virtual-terminal.test.ts delete mode 100644 packages/tui/tsconfig.build.json delete mode 100644 packages/tui/vitest.config.ts create mode 100755 scripts/check-actions-pipelines-cert.mjs create mode 100644 scripts/check-tui-vendor-packed.mjs delete mode 100644 scripts/evals/quick-settings/core.ts delete mode 100644 scripts/evals/run-quick-settings-evals.ts create mode 100644 scripts/materialize-tui-vendor.mjs delete mode 100644 src/cli-tui/about-view.ts delete mode 100644 src/cli-tui/agent-event-router.ts delete mode 100644 src/cli-tui/approval/approval-controller.ts delete mode 100644 src/cli-tui/approval/approval-modal.ts delete mode 100644 src/cli-tui/assistant-message.ts delete mode 100644 src/cli-tui/auth-state.ts delete mode 100644 src/cli-tui/background/background-tasks-controller.ts delete mode 100644 src/cli-tui/base-view.ts delete mode 100644 src/cli-tui/bash-mode-view.ts delete mode 100644 src/cli-tui/bash-shell-block.ts delete mode 100644 src/cli-tui/bash/background-launcher.ts delete mode 100644 src/cli-tui/bash/bash-autocomplete.ts delete mode 100644 src/cli-tui/bash/bash-history.ts delete mode 100644 src/cli-tui/bash/bash-syntax.ts delete mode 100644 src/cli-tui/bash/index.ts delete mode 100644 src/cli-tui/changelog-view.ts delete mode 100644 src/cli-tui/clean-mode.ts delete mode 100644 src/cli-tui/client-tools/client-tool-controller.ts delete mode 100644 src/cli-tui/client-tools/local-client-tool-service.ts delete mode 100644 src/cli-tui/commands/a2a-handlers.ts delete mode 100644 src/cli-tui/commands/access-command.ts delete mode 100644 src/cli-tui/commands/argument-parser.ts delete mode 100644 src/cli-tui/commands/audit-command.ts delete mode 100644 src/cli-tui/commands/background-handlers.ts delete mode 100644 src/cli-tui/commands/command-catalog.ts delete mode 100644 src/cli-tui/commands/command-registry-adapter.ts delete mode 100644 src/cli-tui/commands/command-suite-catalog.ts delete mode 100644 src/cli-tui/commands/command-suite-handlers.ts delete mode 100644 src/cli-tui/commands/composer-handlers.ts delete mode 100644 src/cli-tui/commands/framework-handlers.ts delete mode 100644 src/cli-tui/commands/guardian-handlers.ts delete mode 100644 src/cli-tui/commands/handlers/mode-handler.ts delete mode 100644 src/cli-tui/commands/hotkeys-command.ts delete mode 100644 src/cli-tui/commands/limits-command.ts delete mode 100644 src/cli-tui/commands/mcp-handlers.ts delete mode 100644 src/cli-tui/commands/memory-handlers.ts delete mode 100644 src/cli-tui/commands/otel-handlers.ts delete mode 100644 src/cli-tui/commands/package-handlers.ts delete mode 100644 src/cli-tui/commands/pii-command.ts delete mode 100644 src/cli-tui/commands/registry.ts delete mode 100644 src/cli-tui/commands/safety-handlers.ts delete mode 100644 src/cli-tui/commands/subcommands/auth-commands.ts delete mode 100644 src/cli-tui/commands/subcommands/config-commands.ts delete mode 100644 src/cli-tui/commands/subcommands/diag-commands.ts delete mode 100644 src/cli-tui/commands/subcommands/git-commands.ts delete mode 100644 src/cli-tui/commands/subcommands/index.ts delete mode 100644 src/cli-tui/commands/subcommands/safety-commands.ts delete mode 100644 src/cli-tui/commands/subcommands/session-commands.ts delete mode 100644 src/cli-tui/commands/subcommands/tools-commands.ts delete mode 100644 src/cli-tui/commands/subcommands/ui-commands.ts delete mode 100644 src/cli-tui/commands/subcommands/undo-commands.ts delete mode 100644 src/cli-tui/commands/subcommands/usage-commands.ts delete mode 100644 src/cli-tui/commands/subcommands/utils.ts delete mode 100644 src/cli-tui/commands/types.ts delete mode 100644 src/cli-tui/commands/undo-handlers.ts delete mode 100644 src/cli-tui/commands/utility-handlers.ts delete mode 100644 src/cli-tui/commands/workflow-handlers.ts delete mode 100644 src/cli-tui/compact-boundary-message.ts delete mode 100644 src/cli-tui/compaction-recovery.ts delete mode 100644 src/cli-tui/config-view.ts delete mode 100644 src/cli-tui/context-view.ts delete mode 100644 src/cli-tui/custom-editor.ts delete mode 100644 src/cli-tui/editor-view.ts delete mode 100644 src/cli-tui/feedback-view.ts delete mode 100644 src/cli-tui/footer.ts delete mode 100644 src/cli-tui/git/commit-modal.ts delete mode 100644 src/cli-tui/git/git-preview-modal.ts delete mode 100644 src/cli-tui/git/git-view.ts delete mode 100644 src/cli-tui/history/history-config.ts delete mode 100644 src/cli-tui/history/prompt-history.ts delete mode 100644 src/cli-tui/history/tool-history.ts delete mode 100644 src/cli-tui/hook-message.ts delete mode 100644 src/cli-tui/hooks/hook-input-modal.ts delete mode 100644 src/cli-tui/hotkeys-view.ts delete mode 100644 src/cli-tui/import-view.ts delete mode 100644 src/cli-tui/info-view.ts delete mode 100644 src/cli-tui/instruction-panel.ts delete mode 100644 src/cli-tui/interrupt-controller.ts delete mode 100644 src/cli-tui/keybindings-config.ts delete mode 100644 src/cli-tui/keybindings-watcher.ts delete mode 100644 src/cli-tui/keybindings.ts delete mode 100644 src/cli-tui/loader/loader-stage-manager.ts delete mode 100644 src/cli-tui/loader/loader-stage-telemetry.ts delete mode 100644 src/cli-tui/loader/loader-view.ts delete mode 100644 src/cli-tui/lsp-view.ts delete mode 100644 src/cli-tui/mermaid-renderer.ts delete mode 100644 src/cli-tui/message-view.ts delete mode 100644 src/cli-tui/modal-manager.ts delete mode 100644 src/cli-tui/notification-view.ts delete mode 100644 src/cli-tui/oauth/index.ts delete mode 100644 src/cli-tui/oauth/oauth-flow-controller.ts delete mode 100644 src/cli-tui/ollama-view.ts delete mode 100644 src/cli-tui/paste/index.ts delete mode 100644 src/cli-tui/paste/paste-handler.ts delete mode 100644 src/cli-tui/plan-panel-modal.ts delete mode 100644 src/cli-tui/plan-view.ts delete mode 100644 src/cli-tui/plan/plan-controller.ts delete mode 100644 src/cli-tui/prompt-queue.ts delete mode 100644 src/cli-tui/queue-panel-modal.ts delete mode 100644 src/cli-tui/queue/follow-up-shortcut.ts delete mode 100644 src/cli-tui/queue/index.ts delete mode 100644 src/cli-tui/queue/queue-controller.ts delete mode 100644 src/cli-tui/queue/queue-panel-controller.ts delete mode 100644 src/cli-tui/queue/queued-follow-up-edit-binding.ts delete mode 100644 src/cli-tui/run/run-command-view.ts delete mode 100644 src/cli-tui/run/run-controller.ts delete mode 100644 src/cli-tui/run/run-shell-command.ts delete mode 100644 src/cli-tui/run/streaming-shell-command.ts delete mode 100644 src/cli-tui/search/file-search-view.ts delete mode 100644 src/cli-tui/search/file-search.ts delete mode 100644 src/cli-tui/security-status.ts delete mode 100644 src/cli-tui/selectors/base-selector.ts delete mode 100644 src/cli-tui/selectors/branch-summary-modal.ts delete mode 100644 src/cli-tui/selectors/model-selector-view.ts delete mode 100644 src/cli-tui/selectors/model-selector.ts delete mode 100644 src/cli-tui/selectors/oauth-selector-view.ts delete mode 100644 src/cli-tui/selectors/oauth-selector.ts delete mode 100644 src/cli-tui/selectors/queue-mode-selector-view.ts delete mode 100644 src/cli-tui/selectors/queue-mode-selector.ts delete mode 100644 src/cli-tui/selectors/report-selector-view.ts delete mode 100644 src/cli-tui/selectors/report-selector.ts delete mode 100644 src/cli-tui/selectors/theme-selector-view.ts delete mode 100644 src/cli-tui/selectors/theme-selector.ts delete mode 100644 src/cli-tui/selectors/thinking-selector-view.ts delete mode 100644 src/cli-tui/selectors/thinking-selector.ts delete mode 100644 src/cli-tui/selectors/tree-selector-view.ts delete mode 100644 src/cli-tui/selectors/tree-selector.ts delete mode 100644 src/cli-tui/selectors/user-message-selector-view.ts delete mode 100644 src/cli-tui/selectors/user-message-selector.ts delete mode 100644 src/cli-tui/session/branch-controller.ts delete mode 100644 src/cli-tui/session/conversation-compactor.ts delete mode 100644 src/cli-tui/session/select-session.ts delete mode 100644 src/cli-tui/session/session-context.ts delete mode 100644 src/cli-tui/session/session-data-provider.ts delete mode 100644 src/cli-tui/session/session-list.ts delete mode 100644 src/cli-tui/session/session-selector.ts delete mode 100644 src/cli-tui/session/session-summary-controller.ts delete mode 100644 src/cli-tui/session/session-switcher-view.ts delete mode 100644 src/cli-tui/session/session-switcher.ts delete mode 100644 src/cli-tui/session/session-view.ts delete mode 100644 src/cli-tui/slash/index.ts delete mode 100644 src/cli-tui/slash/slash-command-matcher.ts delete mode 100644 src/cli-tui/smart-autocomplete-provider.ts delete mode 100644 src/cli-tui/startup-announcements.ts delete mode 100644 src/cli-tui/status/cost-view.ts delete mode 100644 src/cli-tui/status/diagnostics-templates.ts delete mode 100644 src/cli-tui/status/diagnostics-view.ts delete mode 100644 src/cli-tui/status/diagnostics.ts delete mode 100644 src/cli-tui/status/health-snapshot.ts delete mode 100644 src/cli-tui/status/quota-view.ts delete mode 100644 src/cli-tui/status/telemetry-view.ts delete mode 100644 src/cli-tui/status/training-view.ts delete mode 100644 src/cli-tui/streaming-view.ts delete mode 100644 src/cli-tui/terminal/index.ts delete mode 100644 src/cli-tui/terminal/terminal-utils.ts delete mode 100644 src/cli-tui/tips/tip-scheduler.ts delete mode 100644 src/cli-tui/tool-execution.ts delete mode 100644 src/cli-tui/tool-output-view.ts delete mode 100644 src/cli-tui/tool-renderers/index.ts delete mode 100644 src/cli-tui/tool-renderers/render-bash.ts delete mode 100644 src/cli-tui/tool-renderers/render-batch.ts delete mode 100644 src/cli-tui/tool-renderers/render-edit.ts delete mode 100644 src/cli-tui/tool-renderers/render-generic.ts delete mode 100644 src/cli-tui/tool-renderers/render-read.ts delete mode 100644 src/cli-tui/tool-renderers/render-style.ts delete mode 100644 src/cli-tui/tool-renderers/render-write.ts delete mode 100644 src/cli-tui/tool-renderers/types.ts delete mode 100644 src/cli-tui/tool-retry/tool-retry-controller.ts delete mode 100644 src/cli-tui/tool-retry/tool-retry-modal.ts delete mode 100644 src/cli-tui/tool-status-view.ts delete mode 100644 src/cli-tui/tui-renderer.ts delete mode 100644 src/cli-tui/tui-renderer/agent-event-bridge.ts delete mode 100644 src/cli-tui/tui-renderer/approval-setup.ts delete mode 100644 src/cli-tui/tui-renderer/attachment-controller.ts delete mode 100644 src/cli-tui/tui-renderer/background-tasks-setup.ts delete mode 100644 src/cli-tui/tui-renderer/branch-controller.ts delete mode 100644 src/cli-tui/tui-renderer/clear-controller.ts delete mode 100644 src/cli-tui/tui-renderer/client-tools-setup.ts delete mode 100644 src/cli-tui/tui-renderer/command-registry-options.ts delete mode 100644 src/cli-tui/tui-renderer/command-registry.ts delete mode 100644 src/cli-tui/tui-renderer/command-suite-wiring.ts delete mode 100644 src/cli-tui/tui-renderer/compaction-controller.ts delete mode 100644 src/cli-tui/tui-renderer/custom-commands-controller.ts delete mode 100644 src/cli-tui/tui-renderer/delegating-command-handlers.ts delete mode 100644 src/cli-tui/tui-renderer/editor-bindings.ts delete mode 100644 src/cli-tui/tui-renderer/footer-hints-controller.ts delete mode 100644 src/cli-tui/tui-renderer/history-controller.ts delete mode 100644 src/cli-tui/tui-renderer/hook-ui-controller.ts delete mode 100644 src/cli-tui/tui-renderer/initial-preferences.ts delete mode 100644 src/cli-tui/tui-renderer/input-controller.ts delete mode 100644 src/cli-tui/tui-renderer/interrupt-setup.ts delete mode 100644 src/cli-tui/tui-renderer/loader-setup.ts delete mode 100644 src/cli-tui/tui-renderer/mcp-events-setup.ts delete mode 100644 src/cli-tui/tui-renderer/misc-handlers.ts delete mode 100644 src/cli-tui/tui-renderer/oauth-setup.ts delete mode 100644 src/cli-tui/tui-renderer/plan-setup.ts delete mode 100644 src/cli-tui/tui-renderer/prompt-template-slash-commands.ts delete mode 100644 src/cli-tui/tui-renderer/queue-setup.ts delete mode 100644 src/cli-tui/tui-renderer/quick-settings-controller.ts delete mode 100644 src/cli-tui/tui-renderer/session-setup.ts delete mode 100644 src/cli-tui/tui-renderer/session-state-controller.ts delete mode 100644 src/cli-tui/tui-renderer/skills-controller.ts delete mode 100644 src/cli-tui/tui-renderer/slash-hint-controller.ts delete mode 100644 src/cli-tui/tui-renderer/tool-retry-setup.ts delete mode 100644 src/cli-tui/tui-renderer/tooling-views-setup.ts delete mode 100644 src/cli-tui/tui-renderer/ui-state-controller.ts delete mode 100644 src/cli-tui/tui-renderer/ui-state-setup.ts delete mode 100644 src/cli-tui/tui-renderer/utility-views-setup.ts delete mode 100644 src/cli-tui/tui-renderer/viewport-controller.ts delete mode 100644 src/cli-tui/ui-state.ts delete mode 100644 src/cli-tui/update-view.ts delete mode 100644 src/cli-tui/user-message.ts delete mode 100644 src/cli-tui/utils/borders.ts delete mode 100644 src/cli-tui/utils/commands/command-palette-view.ts delete mode 100644 src/cli-tui/utils/commands/command-palette.ts delete mode 100644 src/cli-tui/utils/commands/command-registry-builder.ts delete mode 100644 src/cli-tui/utils/commands/review-prompt.ts delete mode 100644 src/cli-tui/utils/commands/slash-hint-bar.ts delete mode 100644 src/cli-tui/utils/env-detect.ts delete mode 100644 src/cli-tui/utils/external-editor.ts delete mode 100644 src/cli-tui/utils/footer-utils.ts delete mode 100644 src/cli-tui/utils/footer-visual-widgets.ts delete mode 100644 src/cli-tui/utils/git-branch-tracker.ts delete mode 100644 src/cli-tui/utils/glyphs.ts delete mode 100644 src/cli-tui/utils/layout.ts delete mode 100644 src/cli-tui/utils/links.ts delete mode 100644 src/cli-tui/utils/motion.ts delete mode 100644 src/cli-tui/utils/runtime-badges.ts delete mode 100644 src/cli-tui/utils/shimmer.ts delete mode 100644 src/cli-tui/utils/stage-labels.ts delete mode 100644 src/cli-tui/utils/text-formatting.ts delete mode 100644 src/cli-tui/utils/text-preview.ts delete mode 100644 src/cli-tui/utils/tool-text-utils.ts delete mode 100644 src/cli-tui/welcome-animation.ts delete mode 100644 src/cli-tui/welcome-colors.ts create mode 100644 src/cli/native-tui-launcher.ts create mode 100644 src/utils/terminal-text.ts delete mode 100644 test/arrow-normalization.test.ts delete mode 100644 test/cli-tui/agent-event-bridge.test.ts delete mode 100644 test/cli-tui/agent-event-router-thinking.test.ts delete mode 100644 test/cli-tui/assistant-message.test.ts delete mode 100644 test/cli-tui/attachment-controller.test.ts delete mode 100644 test/cli-tui/clear-controller.test.ts delete mode 100644 test/cli-tui/commands/a2a-handlers.test.ts delete mode 100644 test/cli-tui/commands/command-registry-integration.test.ts delete mode 100644 test/cli-tui/commands/framework-handlers.test.ts delete mode 100644 test/cli-tui/commands/hotkeys-command.test.ts delete mode 100644 test/cli-tui/commands/mode-handler.test.ts delete mode 100644 test/cli-tui/commands/package-handlers.test.ts delete mode 100644 test/cli-tui/commands/standalone-handlers.test.ts delete mode 100644 test/cli-tui/commands/utility-handlers.test.ts delete mode 100644 test/cli-tui/conversation-compactor.test.ts delete mode 100644 test/cli-tui/external-editor.test.ts delete mode 100644 test/cli-tui/keybindings-config.test.ts delete mode 100644 test/cli-tui/keybindings-watcher.test.ts delete mode 100644 test/cli-tui/keybindings.test.ts delete mode 100644 test/cli-tui/message-view.test.ts delete mode 100644 test/cli-tui/modal-manager.test.ts delete mode 100644 test/cli-tui/model-selector.test.ts delete mode 100644 test/cli-tui/prompt-template-slash-commands.test.ts delete mode 100644 test/cli-tui/runtime-badges.test.ts delete mode 100644 test/cli-tui/session-state-controller.test.ts delete mode 100644 test/cli-tui/skills-controller.test.ts delete mode 100644 test/cli-tui/startup-announcements.test.ts delete mode 100644 test/cli-tui/tip-scheduler.test.ts delete mode 100644 test/cli-tui/tool-history.test.ts delete mode 100644 test/cli/command-parser.test.ts create mode 100644 test/cli/native-tui-launcher-e2e.test.ts create mode 100644 test/cli/native-tui-launcher.test.ts delete mode 100644 test/cli/review-prompt.test.ts delete mode 100644 test/evals/quick-settings-evals.test.ts delete mode 100644 test/lsp-view.test.ts delete mode 100644 test/queued-follow-up-edit-binding.test.ts create mode 100644 test/scripts/check-actions-pipelines-cert.test.ts delete mode 100644 test/session/session-summary-controller.test.ts delete mode 100644 test/session/session-view-info.test.ts delete mode 100644 test/slash-hint-bar.test.ts delete mode 100644 test/streaming-view.test.ts delete mode 100644 test/tools/tool-execution.test.ts delete mode 100644 test/tui-command-prefs.test.ts delete mode 100644 test/tui/__snapshots__/diagnostics-report.test.ts.snap delete mode 100644 test/tui/about-view.test.ts delete mode 100644 test/tui/approval-modal.test.ts delete mode 100644 test/tui/auth-state.test.ts delete mode 100644 test/tui/bash-mode.test.ts delete mode 100644 test/tui/branch-controller.test.ts delete mode 100644 test/tui/changelog.test.ts delete mode 100644 test/tui/clamp-ansi.test.ts delete mode 100644 test/tui/clean-mode.test.ts delete mode 100644 test/tui/client-tool-controller.test.ts delete mode 100644 test/tui/command-palette-component.test.ts delete mode 100644 test/tui/command-registry-options.test.ts delete mode 100644 test/tui/config-view.test.ts delete mode 100644 test/tui/context-view.test.ts delete mode 100644 test/tui/cost-view.test.ts delete mode 100644 test/tui/custom-commands-controller.test.ts delete mode 100644 test/tui/diagnostics-report.test.ts delete mode 100644 test/tui/editor-kill-ring.test.ts delete mode 100644 test/tui/editor-view.test.ts delete mode 100644 test/tui/editor-word-nav.test.ts delete mode 100644 test/tui/feedback-view.test.ts delete mode 100644 test/tui/footer-hints-controller.test.ts delete mode 100644 test/tui/footer-shimmer.test.ts delete mode 100644 test/tui/footer.test.ts delete mode 100644 test/tui/git-view.test.ts delete mode 100644 test/tui/hotkeys-view.test.ts delete mode 100644 test/tui/import-export-view.test.ts delete mode 100644 test/tui/input-controller.test.ts delete mode 100644 test/tui/interrupt-controller.test.ts delete mode 100644 test/tui/loader-stage-manager.test.ts delete mode 100644 test/tui/markdown-table.test.ts delete mode 100644 test/tui/mcp-events-setup.test.ts delete mode 100644 test/tui/mermaid-renderer.test.ts delete mode 100644 test/tui/oauth-flow-controller.test.ts delete mode 100644 test/tui/ollama-view.test.ts delete mode 100644 test/tui/paste-handler.test.ts delete mode 100644 test/tui/plan-view-editor.test.ts delete mode 100644 test/tui/plan-view.test.ts delete mode 100644 test/tui/prompt-queue.test.ts delete mode 100644 test/tui/queue-controller.test.ts delete mode 100644 test/tui/quota-view.test.ts delete mode 100644 test/tui/run-controller.test.ts delete mode 100644 test/tui/shimmer.test.ts delete mode 100644 test/tui/slash-command-matcher.test.ts delete mode 100644 test/tui/stage-labels.test.ts delete mode 100644 test/tui/telemetry-view.test.ts delete mode 100644 test/tui/terminal-utils.test.ts delete mode 100644 test/tui/tool-output-clamp.test.ts delete mode 100644 test/tui/training-view.test.ts delete mode 100644 test/tui/tui-autocomplete.test.ts delete mode 100644 test/tui/tui-subcommands.test.ts delete mode 100644 test/tui/tui-wrap.test.ts delete mode 100644 test/tui/ui-state-controller.test.ts delete mode 100644 test/tui/update-view.test.ts delete mode 100644 test/tui/welcome-animation.test.ts diff --git a/.github/RELEASE_MIRROR_CONTRACT.md b/.github/RELEASE_MIRROR_CONTRACT.md index 08fc94898..dfe0e9369 100644 --- a/.github/RELEASE_MIRROR_CONTRACT.md +++ b/.github/RELEASE_MIRROR_CONTRACT.md @@ -34,10 +34,6 @@ handler split and leaves one repo with a different command model. The following surfaces are intentionally internal-only and must not be added to the manifest: -- `src/cli-tui/tui-renderer.ts` -- `src/cli-tui/commands/grouped-command-handlers.ts` -- `src/cli-tui/tui-renderer/grouped-handlers-wiring.ts` -- `src/cli-tui/commands/grouped/**` ## Maestro Event Catalog Boundary diff --git a/.gitignore b/.gitignore index e08e7b7a6..342c5da1b 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,9 @@ target/ node_modules/ .nx/ +# Prebuilt native TUI binaries staged for npm pack (materialized in release.yml) +vendor/ + # External checkouts .external/ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 33337cbc7..b33a25fc8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -23,7 +23,7 @@ expect before opening a PR. npx nx run maestro:evals --skip-nx-cache # Optional eval scenarios bun run bun:test:fast # Fast local Vitest (no Nx build; VITEST_FAST=1) # If you touched specific packages, build them too: - bun run --filter @evalops/tui build + bun run tui-rs:build bun run --filter @evalops/maestro-web build ``` (CI runs these, but failing locally wastes review cycles.) diff --git a/Dockerfile b/Dockerfile index f37838e9a..4686224c2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,7 +19,6 @@ COPY packages/governance-mcp-server/package.json packages/governance-mcp-server/ COPY packages/memory/package.json packages/memory/ COPY packages/slack-agent/package.json packages/slack-agent/ COPY packages/slack-agent-ui/package.json packages/slack-agent-ui/ -COPY packages/tui/package.json packages/tui/ COPY packages/web/package.json packages/web/ # ambient-agent-rs, control-plane-rs, and tui-rs are pure Rust (no package.json) @@ -59,7 +58,6 @@ COPY packages/governance-mcp-server ./packages/governance-mcp-server COPY packages/memory ./packages/memory COPY packages/slack-agent ./packages/slack-agent COPY packages/slack-agent-ui ./packages/slack-agent-ui -COPY packages/tui ./packages/tui COPY packages/tui-rs ./packages/tui-rs COPY packages/web ./packages/web @@ -103,8 +101,6 @@ COPY --from=web-builder /app/package.json ./ COPY --from=web-builder /app/skills ./skills COPY --from=web-builder /app/packages/contracts/package.json ./packages/contracts/package.json COPY --from=web-builder /app/packages/contracts/dist ./packages/contracts/dist -COPY --from=web-builder /app/packages/tui/package.json ./packages/tui/package.json -COPY --from=web-builder /app/packages/tui/dist ./packages/tui/dist COPY --from=web-builder /app/packages/web/dist ./packages/web/dist COPY --from=rust-builder /app/target-bin/maestro-control-plane ./bin/maestro-control-plane diff --git a/README.md b/README.md index e67af349c..e0f66fec7 100644 --- a/README.md +++ b/README.md @@ -55,8 +55,7 @@ Package-manager installs are kept for contributors and source-based workflows. Release binaries are the primary install artifact and are smoke-tested directly with `maestro --version` and a headless protocol handshake before attachment. -If a global install fails while resolving `@evalops/tui` or -`@evalops/contracts`, you are installing a deprecated 0.10.8-0.10.20 package +If a global install fails while resolving `@evalops/contracts`, you are installing a deprecated 0.10.8-0.10.20 package that referenced private workspace dependencies. Upgrade to `@evalops/maestro@latest`; published release verification now runs npm and Bun registry install smokes against the public package metadata before promotion. @@ -199,7 +198,6 @@ Need Redis or PostgreSQL for a specific workflow? Start from `docker-compose.yml - `src/` - CLI entrypoints and shared application code - `packages/core/` - agent loop, transport, types, and sandbox primitives - `packages/ai/` - model registry, provider transport, and event streaming -- `packages/tui/` - TypeScript terminal UI - `packages/tui-rs/` - native Rust TUI - `packages/web/` - browser UI - `packages/vscode-extension/`, `packages/jetbrains-plugin/`, `packages/slack-agent/`, `packages/github-agent/` - interface integrations diff --git a/bun.lockb b/bun.lockb index c2117ff4f764349262d0ca2d155a9b83c5ef4e7b..374c1a2372272ea4fddf0bdf8c1427fa59346306 100755 GIT binary patch delta 116475 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 z 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

**Removed:** `packages/tui` (`@evalops/tui`) and `src/cli-tui/` (TypeScript TUI) +> were deleted in PR #2891. Do not reintroduce them. + ### Surface Entrypoints | Surface | Entrypoint | |---------|------------| -| **TS TUI** | `src/cli.ts` → `src/cli-tui/tui-renderer.ts` | -| **Rust TUI** | `packages/tui-rs/src/main.rs` | +| **Native TUI** | `maestro` → `src/cli/native-tui-launcher.ts` → `packages/tui-rs` (`maestro-tui`) | | **Web UI** | `src/server/` (backend) + `packages/web/` (frontend) | | **VS Code** | `packages/vscode-extension/` | | **Slack Bot** | `packages/slack-agent/src/index.ts` | | **GitHub Agent** | `packages/github-agent/src/index.ts` | | **Ambient Agent** | `packages/ambient-agent-rs/src/main.rs` | +| **Headless / one-shot** | `src/main.ts` TypeScript agent bootstrap | ### Configuration Precedence (highest wins) @@ -129,9 +134,12 @@ Safety-gated execution framework. Tools are defined with `createTool()` / `creat JSONL persistence with buffered writes. Sessions are lazily initialized (file created only after first user + assistant exchange). Supports branching (fork from any message), metadata caching, and crash recovery via `beforeExit`/`SIGINT`/`SIGTERM` flush handlers. -### TUI (`src/cli-tui/`, `packages/tui/`) +### TUI (`packages/tui-rs/`) -Differential rendering engine that minimizes terminal writes. `TuiRenderer` subscribes to Agent events, delegates to views (message, tool output), controllers (queue, plan, approval), and modals (selectors, command palette). The `@evalops/tui` library provides the low-level rendering pipeline, widgets, and synchronized output. +Native `maestro-tui` binary (ratatui + crossterm) with its own agent loop, provider +clients, tools, safety, sessions, MCP, hooks, and skills. No Node subprocess for +interactive turns. See [TUI Architecture](TUI_ARCHITECTURE.md) and +[Native TUI parity](NATIVE_TUI_PARITY.md). --- @@ -177,8 +185,8 @@ User types prompt │ ▼ ┌──────────────────────────────────────────────────────────┐ -│ Event Subscribers │ -│ • TUI Renderer → differential screen update │ +│ Event Subscribers / native UI │ +│ • Native TUI App → ratatui screen update │ │ • Session Manager → JSONL persistence │ │ • Telemetry → duration, cost, success tracking │ │ • Web UI → SSE/WebSocket forwarding │ @@ -207,8 +215,7 @@ All surfaces share the Agent core via different integration patterns: | Surface | Integration | Notes | |---------|-------------|-------| -| **TS TUI** (`src/cli-tui/`) | Direct — `TuiRenderer` subscribes to `Agent.subscribe()` | Main interactive surface | -| **Rust TUI** (`packages/tui-rs/`) | Standalone — own agent + native provider clients | No Node subprocess; mirrors TS feature set | +| **Native TUI** (`packages/tui-rs/`) | Standalone — own agent + native provider clients | **Only** interactive terminal UI; no Node subprocess | | **Web UI** (`packages/web/`) | HTTP/WS — `src/server/` wraps Agent, streams via SSE/WebSocket | Lit components, Vite build | | **VS Code / JetBrains** | Extension/Plugin — spawns Maestro process, communicates via RPC | IDE-aware context (diagnostics, references) | | **Slack Bot** (`packages/slack-agent/`) | Docker sandbox — runs Agent in isolated container per request | Async queuing, approval workflows | @@ -218,58 +225,33 @@ All surfaces share the Agent core via different integration patterns: --- -## Slash Command System +## Slash Command System (native TUI) -Commands are split into a flat metadata catalog and a command-suite catalog. This keeps command definitions declarative while still giving handlers typed runtime dependencies. +Interactive slash commands live in the Rust TUI. Register and handle them under +`packages/tui-rs`: -### 1. Define or reuse the handler contract (`src/cli-tui/commands/types.ts`) +### 1. Command types (`packages/tui-rs/src/commands/types.rs`) -```typescript -export interface CommandHandlers { - myCommand(context: CommandExecutionContext): void; -} -``` +Define `Command` metadata and any context the handler needs. -### 2. Add standalone command metadata (`src/cli-tui/commands/command-catalog.ts`) +### 2. Registry (`packages/tui-rs/src/commands/registry.rs`) -```typescript -withArgs("mycommand", "myCommand", { - description: "...", - usage: "/mycommand [args]", - tags: ["ui"], -}); -``` +Add the command to `build_command_registry()` (name, description, usage, tags). +Fuzzy matching and tab completion are provided by `commands/matcher.rs`. -The adapter in `command-registry-adapter.ts` turns catalog metadata into executable registry entries and handles help, argument parsing, completions, aliases, and command rewrites. +### 3. Handler (`packages/tui-rs/src/app/command_handlers.rs`) -### 3. Add command-suite metadata when a parent command owns subcommands +Wire the command action to App behavior (modals, agent calls, status updates). -```typescript -// command-suite-catalog.ts -{ - name: "ops", - description: "Operational commands", - usage: "/ops [status|restart]", - subcommands: OPS_SUBCOMMANDS, -} +### 4. Tests -// subcommands/ops-commands.ts -export const OPS_SUBCOMMANDS: SubcommandDef[] = [ - { name: "status", description: "Show service status" }, -]; -``` +Cover parsing/dispatch in `commands/registry/tests.rs` and/or `app/tests.rs`. -Command-suite handlers live in `command-suite-handlers.ts` and are wired to the existing top-level handlers through `tui-renderer/command-suite-wiring.ts`. - -### 4. Wire runtime dependencies (`src/cli-tui/tui-renderer/command-registry-options.ts`) - -```typescript -handlers: { - myCommand: (context) => this.doSomething(context), -}, -``` +Selector-style commands (`/model`, `/theme`, `/approvals`) open ratatui components +under `packages/tui-rs/src/components/`. See [TUI Architecture](TUI_ARCHITECTURE.md). -**Command suites** (e.g., `/ss`, `/diag`, `/ui`, `/tools`) share subcommand definitions in `src/cli-tui/commands/subcommands/` and route through `CommandSuiteHandlers`. **Selector commands** (e.g., `/model`, `/theme`) still push a modal via `modalManager.push(component)`. +> **Historical:** The TS catalog/adapter pattern under `src/cli-tui/commands/` was +> removed with the TypeScript TUI (PR #2891). --- @@ -322,7 +304,9 @@ All located in `docs/design/`. Start with Agent State Machine for the core event | [Tool System](design/TOOL_SYSTEM.md) | Tool DSL, validation, caching, retry, sandbox | | [Context Management](design/CONTEXT_MANAGEMENT.md) | Token budgeting, context sources, auto-compaction | | [Session Persistence](design/SESSION_PERSISTENCE.md) | JSONL storage, buffered writes, branching, crash recovery | -| [TUI Rendering](design/TUI_RENDERING.md) | Differential rendering, event-driven UI, modal system | +| [TUI Architecture](TUI_ARCHITECTURE.md) | Native maestro-tui overview (current) | +| [Native TUI parity](NATIVE_TUI_PARITY.md) | Feature checklist vs removed TS interactive agent | +| [TUI Rendering](design/TUI_RENDERING.md) | **Historical** TS differential-rendering design (pre-#2891) | | [Web UI Architecture](design/WEB_UI_ARCHITECTURE.md) | Browser interface, SSE/WebSocket, Lit components | | [Safety & Firewall](design/SAFETY_FIREWALL.md) | Rule-based enforcement, dangerous command detection | | [Hooks System](design/HOOKS_SYSTEM.md) | PreToolUse/PostToolUse lifecycle, external integrations | @@ -344,17 +328,18 @@ Quick reference for "where do I change X?" | Task | Files to touch | |------|----------------| -| **Add a slash command** | `commands/types.ts` → `commands/command-catalog.ts` → handler module → `tui-renderer/command-registry-options.ts` | -| **Add a command-suite subcommand** | `commands/subcommands/*.ts` → `commands/command-suite-handlers.ts` → `tui-renderer/command-suite-wiring.ts` | -| **Add a built-in tool** | Create in `src/tools/`, register in tool list, add test in `test/tools/` | +| **Add a slash command (TUI)** | `packages/tui-rs/src/commands/{types,registry}.rs` → `app/command_handlers.rs` → tests | +| **Add a built-in tool (TS surfaces)** | Create in `src/tools/`, register in tool list, add test in `test/tools/` | +| **Add a built-in tool (native TUI)** | `packages/tui-rs/src/tools/` + registry | | **Add an MCP server** | `~/.maestro/mcp.json` or `.maestro/mcp.json` — tools auto-register as `mcp____` | -| **Add a provider** | Transport adapter in `packages/ai/`, model entries in registry, compat flags if needed | -| **Add a context source** | Implement `AgentContextSource`, register in `AgentContextManager` | -| **Add a TUI modal/selector** | Component in `src/cli-tui/selectors/`, view wrapper, init in `TuiRenderer`, push via `modalManager` | -| **Add a lifecycle hook** | Define event in hook types, emit from agent/tool executor, document in hooks config | -| **Fix terminal rendering** | Check if fix belongs in `packages/tui` (library), `src/cli-tui` (app), or `packages/tui-rs` (Rust) | +| **Add a provider (TS)** | Transport adapter in `packages/ai/`, model entries in registry, compat flags if needed | +| **Add a provider (native)** | Client under `packages/tui-rs/src/ai/` | +| **Add a context source (TS)** | Implement `AgentContextSource`, register in `AgentContextManager` | +| **Add a TUI modal/selector** | Component in `packages/tui-rs/src/components/`, wire from App / commands | +| **Add a lifecycle hook** | TS: hook types + agent/tool executor; native: `packages/tui-rs/src/hooks/` | +| **Fix terminal rendering** | `packages/tui-rs` only (TS TUI removed) | | **Add a web API endpoint** | Route in `src/server/`, handler using shared Agent, update `packages/web/` if UI needed | -| **Run tests** | `npx nx run maestro:test --skip-nx-cache` (full) or `bunx vitest --run -t "name"` (targeted) | +| **Run tests** | `npx nx run maestro:test --skip-nx-cache` (full) or `bunx vitest --run -t "name"` (targeted); `bun run tui-rs:test` for native | | **Lint** | `bun run bun:lint` (Biome + eval verifier) | --- @@ -372,13 +357,15 @@ npx nx run maestro:test --skip-nx-cache # ~4500 tests, should all pass npx nx graph --focus maestro # dependency visualization # 3. Make a change — pick one: -# a) Edit a TUI string: grep for "Maestro" in src/cli-tui/ and change it +# a) Edit a native TUI string: grep for "Maestro" in packages/tui-rs/src and change it # b) Add a toy tool: create src/tools/clock.ts that returns Date.now() -# c) Add a slash command /ping: follow the 4-file pattern above +# c) Add a slash command /ping in packages/tui-rs commands/registry + handlers # 4. Verify bun run bun:lint bunx vitest --run -t "your test name" +# if you touched packages/tui-rs: +bun run tui-rs:check ``` --- diff --git a/docs/ARCHITECTURE_DIAGRAM.md b/docs/ARCHITECTURE_DIAGRAM.md index 30978be8d..4b79a0bde 100644 --- a/docs/ARCHITECTURE_DIAGRAM.md +++ b/docs/ARCHITECTURE_DIAGRAM.md @@ -1,7 +1,10 @@ # Maestro CLI - Visual Architecture Audience: contributors needing a system map; pair with `VSCODE_ARCHITECTURE.md` for extension specifics. -Nav: [Docs index](README.md) · [Contributor Runbook](CONTRIBUTOR_RUNBOOK.md) · [Safety](SAFETY.md) +Nav: [Docs index](README.md) · [TUI Architecture](TUI_ARCHITECTURE.md) · [Contributor Runbook](CONTRIBUTOR_RUNBOOK.md) · [Safety](SAFETY.md) + +Interactive terminal UI is **native** `maestro-tui` (`packages/tui-rs`). Headless/web +paths still use the TypeScript Agent core. See [TUI Architecture](TUI_ARCHITECTURE.md). ## System Overview @@ -9,22 +12,22 @@ Nav: [Docs index](README.md) · [Contributor Runbook](CONTRIBUTOR_RUNBOOK.md) · ┌─────────────────────────────────────────────────────────────────────┐ │ USER INTERFACE │ │ ┌───────────────────────────────────────────────────────────────┐ │ -│ │ Terminal UI (TUI) │ │ +│ │ Terminal UI (native maestro-tui / tui-rs) │ │ │ │ ┌─────────────┐ ┌──────────────┐ ┌──────────────────┐ │ │ -│ │ │ Component │ │ Markdown │ │ Command Palette │ │ │ -│ │ │ System │ │ Renderer │ │ & Selectors │ │ │ +│ │ │ Components │ │ Markdown │ │ Command Palette │ │ │ +│ │ │ (ratatui) │ │ Renderer │ │ & Selectors │ │ │ │ │ └──────┬──────┘ └──────┬───────┘ └────────┬─────────┘ │ │ │ │ │ │ │ │ │ │ │ └────────────────┴─────────────────────┘ │ │ │ │ │ │ │ │ │ ┌──────▼──────┐ │ │ -│ │ │ TUI Renderer│ │ │ +│ │ │ App loop │ (+ NativeAgent in-process) │ │ │ │ └──────┬──────┘ │ │ │ └───────────────────────────┼────────────────────────────────────┘ │ └────────────────────────────────┼──────────────────────────────────────┘ - │ + │ (headless/web/IDE still use TS core) ┌────────────────────────────────▼──────────────────────────────────────┐ -│ AGENT CORE │ +│ AGENT CORE (TypeScript surfaces) │ │ ┌───────────────────────────────────────────────────────────────┐ │ │ │ Agent Class │ │ │ │ • Event-driven architecture (pub/sub) │ │ @@ -297,7 +300,7 @@ Factory CLI Integration │ │ │ │ ▼ ▼ ▼ ┌─────────────┐ ┌──────────────┐ ┌──────────────┐ - │ TUI Renderer│ │ Telemetry │ │ Session │ + │ Native TUI │ │ Telemetry │ │ Session │ │ │ │ Logger │ │ Manager │ │ Updates UI │ │ │ │ │ │ components │ │ Records: │ │ Persists: │ diff --git a/docs/BUILD_TESTING.md b/docs/BUILD_TESTING.md index 4b80a929c..02bdf9e40 100644 --- a/docs/BUILD_TESTING.md +++ b/docs/BUILD_TESTING.md @@ -10,7 +10,7 @@ Build testing ensures that: 3. Source maps are valid 4. Essential modules and tools are built correctly 5. CLI functionality works after build -6. Package builds (TUI, Web, Contracts, AI) are complete +6. Package builds (Web, Contracts, AI; native TUI via Cargo separately) are complete ## Test Suites @@ -29,11 +29,14 @@ Comprehensive unit tests that verify: ### 2. Package Build Tests (`test/build/package-builds.test.ts`) Verifies that workspace packages build correctly: -- TUI package (`packages/tui/dist`) - Web package (`packages/web/dist`) - Contracts package (`packages/contracts/dist`) - AI package (`packages/ai/dist`) +The interactive TUI is native Rust (`packages/tui-rs`); build/test with +`bun run tui-rs:build` / `bun run tui-rs:test` rather than a JS package `dist`. +(`@evalops/tui` / `packages/tui` were removed with the TypeScript TUI.) + **Run:** `bunx vitest --run test/build/package-builds.test.ts` ### 3. Binary Compilation Tests (`test/build/binary-compilation.test.ts`) diff --git a/docs/CONTRIBUTOR_RUNBOOK.md b/docs/CONTRIBUTOR_RUNBOOK.md index cea65f54e..f35390bc9 100644 --- a/docs/CONTRIBUTOR_RUNBOOK.md +++ b/docs/CONTRIBUTOR_RUNBOOK.md @@ -14,9 +14,10 @@ Nav: [Docs index](README.md) · [Quickstart](QUICKSTART.md) · [Tools Reference] ```bash npx nx run maestro:build --skip-nx-cache # CLI fast path npm run smoke:local-e2e # help/version/headless/mock-agent local smoke -npx nx run maestro:build:all --skip-nx-cache # CLI + TUI + Web +npx nx run maestro:build:all --skip-nx-cache # CLI + Web packages +bun run tui-rs:build # native maestro-tui (interactive) bun run bun:lint # Biome + eval verifier -npx nx run maestro:test --skip-nx-cache # Builds TUI/Web, then Vitest +npx nx run maestro:test --skip-nx-cache # Builds deps, then Vitest npx nx run maestro:evals --skip-nx-cache # Scenario runner ``` @@ -27,9 +28,10 @@ mock-agent read, write/read, search/read, and edit/read flows. ## 2. Inner Loop - `bun run dev` — TS watch (rebuilds `dist/`). -- TUI: `bun run cli -- --provider anthropic --model claude-opus-4-6 "hi"`. +- Interactive TUI: build with `bun run tui-rs:build`, then `maestro` or `bun run start:native`. +- One-shot CLI: `bun run cli -- --provider anthropic --model claude-opus-4-6 "hi"`. - Web: `bun run web:dev` (server on `:8080`, Vite on `:3000`). -- Package builds: `bun run --filter @evalops/tui build`, `bun run --filter @evalops/maestro-web build`. +- Package builds: `bun run tui-rs:build`, `bun run --filter @evalops/maestro-web build`. ## 3. Safety Checks @@ -49,7 +51,7 @@ mock-agent read, write/read, search/read, and edit/read flows. - `bun run bun:lint` - `npx nx run maestro:test --skip-nx-cache` -- Build touched packages (e.g., `npx nx run tui:build`, `npx nx run maestro-web:build`) +- Build touched packages (e.g., `bun run tui-rs:build`, `npx nx run maestro-web:build`) - Ensure docs updated if flags/options changed (source-of-truth notes above) ## 6. Troubleshooting Quickies diff --git a/docs/FEATURES.md b/docs/FEATURES.md index 53f732867..a536cfb5c 100644 --- a/docs/FEATURES.md +++ b/docs/FEATURES.md @@ -25,7 +25,8 @@ Type `/` in the editor for completions. Highlights: - `/run