Use one typed category choice list for search, selection and staged creation.
Prefer existing matches, retain a create option unless the trimmed name has
an exact match, and share highlight, scrolling and submission across keys
and pointer input. Restore trigger focus after closing the picker.
Route input actions before Submitted and isolate modified Enter and IME
confirmation from category selection and the editor save shortcut. Remove
the second editor input and its routing; retain the standalone category
dialog and existing save-time persistence and duplicate rules.
Validation on Linux/headless GPUI:
- 27 targeted desktop tests passed, including both editor view surfaces.
- App/workspace check, fmt check and strict workspace Clippy passed.
- Workspace tests: 6116 passed, 3 failed, 40 ignored. Two desktop failures
passed individually; the readonly-file test passed without root privileges.
- Architecture check matches the original PR failure: two unapproved test
thread spawns in completion_runtime.rs. Architecture script tests passed.
Real graphical IME and macOS/Windows native-window verification remain open.
No persistence formats, dependency versions or fork revisions changed.
Refs: https://github.com/nyakang/nyaterm/pull/1240
Map saved ADB preparations to the requested view and preserve the runtime AI profiles. Register the caller-owned command suggestion scrollbar with the architecture checker.
Validation: workspace check, workspace tests (6401 passed, 40 ignored), formatting, architecture checks and workspace Clippy with warnings denied passed on Linux. Tests ran as an ordinary user with a writable temporary HOME.
Move preview decoding and translation HTTP clients into dedicated
UI-independent crates. Move file operations, terminal algorithms and
presentation helpers, TRZSZ execution, parsing and workspace algorithms
to their authoritative crates.
Split desktop session/settings state, terminal frame processing and the
connection editor by responsibility without duplicating mutable state.
Keep GPUI composition, task ownership and persistence adaptation in
desktop, and register the new crates in architecture checks and CI.
Preserve persisted formats and credential encryption contracts. Document
the boundaries and validation in DESKTOP_SPLIT_PLAN.md. Bound ETXTBSY
retries in temporary executable test fixtures without changing production
behavior or assertions.
Linux validation: workspace/app checks, formatting, workspace Clippy,
architecture checks and 39 Python tests passed. Full workspace tests
passed: 5,953 passed and 37 existing ignored, using a non-root runner with
the desktop parent serialized and subprocess fixtures at eight threads.
Use anonymous in-memory zsh history, guard the pop, and emit ready before cleanup can fail. Cover saved history, options, unprivileged PTYs, and all delivery paths. Clean batch editor lint suggestions and record workspace and platform validation.
Open the existing paste review from both suggestion entry points, preserving
complete quick commands and replacing the query only after confirmation.
Revalidate the input and session before sending; require bracketed paste for
direct filling and retain explicit line-by-line execution. Preserve literal
newlines through Telnet while sharing input recording and write guards.
Add multiline candidate labels, translations, regression coverage and docs.
No persistence format, dependency or fork revision changes.
Validation: workspace check, test (5863 passed, 37 ignored), fmt check and
clippy --all-targets passed. File permission tests used an unprivileged runner.
Linux Bash, Zsh and Fish PTY checks preserved continuations and blank lines,
with execution only after manual Enter. GUI, Windows and macOS unverified.
Share whole-history and named quick-command search between automatic
suggestions and Alt+R. Keep contextual token supplements in automatic mode,
deduplicate final target lines, and retain whole-command metadata.
Replace confirmed shell input through the shared editing-key encoder, wait
for echo, and require another manual Enter to execute. Remove the legacy
history badge and description without changing stored history formats.
Validation: core completion tests; 57 related desktop tests; workspace
check; cargo fmt check; workspace clippy with all targets. Also verify
manual Enter records the complete replacement command exactly once.
Workspace tests hit an existing read-only permission assertion under root;
the same test passes as nobody. Remaining package tests and doctests pass.
Register nyaterm-updater so the workspace coverage guard allows Rust and Docs orchestration to proceed. Cover updater source changes selecting the Rust job set.
Validated the 30 selection tests and all 199 common script tests (3 platform tests skipped).
Move native update execution into nyaterm-updater and the recording writer into nyaterm-recording. Keep desktop state, progress UI, scheduling, and lifecycle ownership in place; preserve existing data and helper contracts.
Update crate boundary checks, release validation ownership, and architecture documentation. Linux workspace checks, Clippy, formatting, all test executables, and doctests were validated; file tests ran without root privileges.
- Introduced `rust-toolchain.toml` to specify Rust version 1.99.1 with a minimal profile.
- Added `rustfmt.toml` to enforce the 2024 edition style for Rust formatting.
- Updated GitHub Actions workflows to read the Rust toolchain version dynamically and adjusted caching strategies accordingly.
- Enhanced CI workflows with orchestrate jobs for better job selection and dependency management.
- Implemented scheduled runs for CI workflows to ensure regular checks.
Move native AI and cloud-storage implementations into UI-independent crates
while preserving desktop entry points, runtime ownership and data contracts.
Share cloud fixtures behind test-support, retain compatibility coverage and
enforce dependency boundaries for the new crates.
Validated on Windows with workspace check, tests (one build job and one test
thread), fmt and clippy, plus architecture checks and their unit tests.
Keep both sets of desktop test dependencies, recording and role-setting methods, and terminal regression tests. Adapt the stale-history event test to the unified snapshot API. Windows workspace check, 5,598 tests, clippy, fmt, and architecture checks pass; earlier performance data remains labeled as pre-merge.
Compare immutable release binaries across the ancestor, original PR, and optimized tree. Add an opt-in native GPUI probe, capture resource and latency distributions, and resume missing samples after failed processes.
- Change the visibility of the `terminal` module to `pub(crate)` to limit its scope.
- Introduce `TerminalHistoryChange` struct to encapsulate changes in terminal history.
- Update `TerminalHistoryState` to provide a method for calculating changes since a previous state.
- Refactor snapshot handling to support reanchoring of history without copying rows.
- Enhance selection handling to preserve direction and sides while clipping evicted rows.
- Add tests to verify the behavior of history changes, selection reanchoring, and eviction handling.
- Ensure that retained history correctly shares rows and rejects evicted or mutable windows.
Use platform-aware copy and select-all shortcuts in transcript tests.
Route the mock AI server through the joinable thread factory and register
the model-row fixture's caller-owned scroll handle in the architecture allowlist.
Skip Ubuntu's global compinit in the isolated Zsh startup fixture, which
otherwise waits for insecure-directory confirmation before reporting shell
identity. Reproduced the original failure and verified the fix on Ubuntu 24.04.
Make the event-pump regression enter connect settling explicitly and derive
its paced drain count from the existing 4 KiB budget. Wait for the post-pull
configuration refresh before submitting recovery in the sync sidebar test.
Validation: workspace check, rustfmt, architecture checks and strict clippy
passed. The event-pump regression passed 10 consecutive runs and the sync
round trip passed three. Workspace tests had one root-only read-only-file
assertion failure; the entire files crate passed as an unprivileged user
(204 tests). Native macOS verification remains for CI.
- Introduced `CommandContext` event to manage shell command contexts more effectively.
- Updated `SessionManager` to create and push command contexts based on shell program and arguments.
- Enhanced `SshShellIntegrationState` to capture shell identities and push command contexts during SSH sessions.
- Added support for dialect detection in WSL environments.
- Implemented a new catalog generation script for offline command completion using Carapace.
- Added performance benchmarks for command completion.
- Updated documentation and tests for the new completion features.
- Added `nyaterm-files` for local and remote file services, including SFTP and shell file backends.
- Introduced `nyaterm-remote-ops` for system metrics, process management, and Docker operations.
- Updated `AGENTS.md` to reflect the new crates and their responsibilities.
- Ensured that the new crates remain independent of GPUI and desktop presentation types.
- Updated `Cargo.toml` and `Cargo.lock` to include new dependencies and workspace members.
- Introduced `AgentChild` to manage the lifecycle of external agent processes, ensuring proper cleanup of child processes and their associated resources.
- Updated `ExternalAgentChild` to utilize `AgentChild`, improving the handling of process termination and output capturing.
- Added tests for descendant cleanup behavior on Windows to ensure that child processes are properly terminated and resources are released.
- Refactored related code in `claude_code_runtime` and `codex_runtime` to use the new `spawn` method for process initialization.
- Enhanced shutdown logic in `app_state` to cancel all running agents and chats when closing terminals, improving resource management.
- Added a new GitHub Actions workflow for Windows diagnostics, allowing manual execution with specified source references and toolchains.
- Implemented a Python script to apply diagnostic instrumentation to the source code, ensuring compatibility with existing releases.
- Created a packaging script to build a frozen Windows x64 source with symbols and bounded panic probes, retaining necessary files for review.
- Developed diagnostic metadata and breadcrumb tracking for improved debugging and analysis of application behavior.
- Included unit tests to validate the functionality of the diagnostic packaging and instrumentation processes.
- Introduced `nyaterm-windows-rdp` for Windows Native RDP integration, detailing its architecture and isolation requirements.
- Removed the `nyaterm-activex-helper` crate, including all related files and dependencies, to streamline the project and focus on modern RDP implementations.
- Updated documentation in `AGENTS.md` to reflect these changes and clarify the new architecture.
- Adjusted `Cargo.toml` and `Cargo.lock` to remove references to the deleted ActiveX helper and include the new RDP crate.
- Enhanced CI workflows to configure MSVC for Windows builds, ensuring compatibility with the new RDP implementation.
- Introduced an `orchestrate` job to determine which CI jobs to run based on changed paths in pull requests.
- Updated Rust workflow to conditionally execute jobs like linting, testing, and plugin SDK based on the selection logic.
- Added a new script `select_rust_jobs.py` to handle job selection logic without requiring a Rust installation.
- Enhanced documentation to explain the new CI execution model and its implications for contributors.
- Added support for testing and validating portable updates on Windows, including handling ARM64 executables.
- Introduced a new module for managing the portable package contract, ensuring consistency between the Rust and Python packaging processes.
- Updated the release workflow to include tests for portable ZIP files, validating their structure and contents against the defined contract.
- Enhanced error handling for portable updates, including recovery mechanisms for failed updates.
- Added comprehensive tests to ensure the integrity and correctness of portable package handling.
This update significantly improves the reliability and user experience of the portable updater, addressing previous issues with ConPTY and ActiveX file handling.
- Added support for registering and unregistering URL protocols on Windows, allowing external applications to invoke NyaTerm.
- Introduced a new module for managing URL protocol registration, including functions for creating, setting, and deleting registry keys.
- Updated the main application logic to handle incoming protocol requests and execute corresponding actions.
- Enhanced the activation request parsing to accommodate new connection types and behaviors.
- Added tests to validate the URL protocol registration and handling functionality.
This update significantly improves the integration of NyaTerm with external applications, enhancing user experience and connectivity options.