- Added `Shell.liveBackgroundJobCount` to query active background processes.
- Retained per-call `:async:` shells if background jobs are still running upon turn completion.
- Reaped shells automatically once their last background process exits to prevent lingering processes.
- Enabled Julia language support by adding a sub-syntax definition file.
- Integrated the new syntax into the highlighter by updating the syntax set builder.
- Configured the dependency to support YAML syntax loading via syntect feature flags.
- Updated `render`, `renderMany`, and native snapcompact methods to return promises, ensuring scalable async execution.
- Refactored `transformProviderContext` and `buildSideRequestContext` to support asynchronous operations in agent loops.
- Integrated `Promise.all` for improved concurrency when processing frame rendering and rendering batch operations.
- Updated all internal call sites, SDK hooks, and test suites to accommodate the asynchronous API signatures.
The parallel streaming walker accumulated match_count toward the
first-page stop budget, but match_count can exceed the matches actually
returned (collected) by one whenever a file overflows its per-file cap.
With the production config (max_count=2000, max_count_per_file=21) that
over-count could quit the walk a few percent short of the requested
page. Budget on collected instead, matching run_sequential_grep and
aggregate_parallel_results.
Carried the streaming-grep match budget into the parallel visitor via a shared atomic counter so production callers (`maxCount: INTERNAL_TOTAL_CAP`) early-stop the walker instead of scanning the rest of the tree. Kept the sequential ordered path for small budgets where strict path ordering matters; the parallel path tolerates up to one extra file per worker in the tail, far better than walking the entire tree.\n\nFixes #2738
Merged main into the PR branch and preserved the ordered small-budget grep cutoff on top of main's searched-file accounting and active-streaming worker fallback.\n\nFixes #2738
Limited the ordered streaming grep early-stop path to small first-page budgets so broad content searches keep the parallel walker. Added coverage that large budgets do not take the serial early-stop route.\n\nFixes #2738
The pi-natives test module had 8 warnings on Windows. Root cause: test
helpers (TempDirGuard, write_file, make_fifo, base_grep_config) and their
imports are only used by #[cfg(unix)] tests, so they appear as dead code
when compiled on Windows where those tests are excluded.
Fix: gate all unix-only test helpers, their imports, and the super::
imports they reference (classify_file_type, GrepConfig, GrepOutputMode,
grep_sync, crate::task, mpsc) with #[cfg(unix)] so they are excluded
from Windows compilation entirely. On Linux (CI), all helpers compile
and are used by the unix test suite.
Also removed genuinely unused import: Duration (from grep.rs test module
only — Duration in shell.rs is used by a non-cfg-gated test).
Verified: 0 warnings, 105 tests pass on Windows. Unix tests retain all
their helpers and imports.
Gate platform-specific XDG functions (APP_NAME, xdg_state_logs,
default_agent_dir) and their tests with #[cfg(any(target_os = "linux",
target_os = "macos"))] so they are not flagged as dead code on Windows.
Suppress the false-positive missing_const_for_fn lint on Process::group_id
(#[napi] generates a non-const wrapper).
These 4 clippy warnings broke bun check (check:rs) and the CI
native_linux_x64 baseline job on every PR.
- Updated various truncation and overflow messages across `pi-shell` and `coding-agent` to use the consistent `[...N units elided...]` format.
- Improved clarity of elided output by explicitly stating the count and type of omitted information.
- Standardized elision markers across all tool outputs and filters to use cohesive `[...N [type] elided...]`, `[...Nln elided...]`, and `[...xB elided...]` syntax.
- Updated documentation, prompts, and test expectations to reflect the unified elision format.
- Improved transcript viewer robustness by preventing content aliasing through path-inclusive signature hashing.
- Added logic to clear stale transcript content when associated session files are deleted, accompanied by verifying test cases.
- Updated line wrapping in module documentation and test blocks for consistent style.
- Adjusted variable assignment formatting in the segmented chain test to improve readability.
- Validated every stage of a pipeline against `simple_command_is_safe` instead of only the first stage to prevent improper segmentation of compound shell constructs.
- Guarded segment re-execution by verifying that each `Display`-reconstructed command parses back to the expected pipeline shape.
- Configured segmented-chain execution to fall back to an unsegmented, whole-command path whenever a reconstructed segment diverges from the original AST.
- Resolved a syntax error during command execution by preventing `Display` from stripping terminators from compound commands like `while` and `for` loops.
- Removed the `cache` option from `GrepOptions` and eliminated the internal directory cache path.
- Implemented `run_sequential_grep` as a single-threaded fallback when too many concurrent streaming searches are active.
- Restricted concurrent grep workers under heavy resource contention using a global `ACTIVE_STREAMING_GREPS` atomic counter.
- Cleaned up obsolete benchmark scenarios, typescript type definitions, and reference tests for cached grep searches.
- Removed the `cache` option from `GrepOptions` and internal caching mechanisms in `grep_sync`.
- Implemented file tracking during search using an `AtomicU64` counter.
- Integrated the counter into parallel visitor structures to increment with each visited file.
- Updated the streaming grep function signature to return the cumulative count of searched files.
- Expanded the native test suite to verify accurate file counts and edge cases like empty search directories.
- Added a JavaScript unit test to validate that advise tool calls are summarized correctly by their note argument.
- Added a `files_searched` atomic counter to `run_parallel_search` to track the total number of files processed.
- Increments the search counter during parallel execution immediately after a file is successfully read.
- Short-circuits and filters out file search results that yield zero matches.
- Configured searcher line numbers based on whether the output mode is set to content.
- Updated `build_searcher` and `build_searcher_for_params` to accept and set the line number flag.