Commit Graph
2200 Commits
Author SHA1 Message Date
can1357 a8bfd2ebe1 fix(coding-agent): fixed role override regression by consolidating multiple override calls
- Fixed role override regression by consolidating multiple override calls into a single operation to prevent intermediate state loss.
- Changed model role assignment in buildSessionOptions to use override with merged state instead of deprecated setModelRole method.
- Refactored multiple conditional override calls for smol, slow, and plan model roles to batch them into a single override call.
2026-02-01 12:36:56 +01:00
can1357 ce80cb8b94 feat(keys): migrated keyboard parsing logic from JavaScript to native Rust implementation
- Migrated keyboard parsing and matching logic from JavaScript to native Rust implementation for improved performance.
- Exported new native functions parseKey, parseKittySequence, matchesLegacySequence, and matchesKey from @oh-my-pi/pi-natives package.
- Exported KeyEventType enum and ParsedKittyResult type for Kitty keyboard protocol support.
- Removed Key helper object from public API of @oh-my-pi/pi-tui package; users should now pass key identifiers as strings (e.g., 'ctrl+c' instead of Key.ctrl('c')).
- Added comprehensive keyboard parsing support in native layer including Kitty protocol, legacy terminal sequences, function keys, and modifier combinations.
- Added phf dependency for efficient perfect hash map lookups of legacy terminal escape sequences.
2026-02-01 12:35:57 +01:00
can1357 c3e7726b8f fix(natives): fixed native binary installation to prevent architecture mismatches and improve cross-compilation handling
- Fixed potential issue where cross-compiled binaries could overwrite platform-specific native builds with incorrect architecture binaries.
- Improved native binary installation to use atomic rename operations and better fallback handling for Windows DLLs.
- Reordered native binary search candidates to prioritize platform-tagged builds and avoid loading stale cross-compiled binaries.
- Enhanced cross-compilation detection to prevent installing wrong-platform fallback binaries during cross-compilation builds.
- Refactored binary installation logic with improved error handling and cleanup of stale temporary files.
2026-02-01 11:33:07 +01:00
can1357 ad54335458 chore: bump version to 9.6.4 2026-02-01 11:18:12 +01:00
can1357 54b1b0728e perf(pi-natives): optimized grapheme width calculation with inline ASCII fast path
- Optimized grapheme width calculation with inline ASCII fast path detection.
- Renamed for_each_grapheme_u16 to for_each_grapheme_u16_slow to clarify it handles non-ASCII segments only.
- Removed segment_is_ascii_u16 helper function and inlined ASCII detection directly in hot loops.
- Refactored visible_width_u16_up_to, truncate_to_width, slice_with_width_impl, and extract_segments_impl to branch on ASCII vs non-ASCII segments separately.
- Improved grapheme_width_str to use pattern matching for single-character detection.
- Changed ANSI sequence tracking from saw_any_ansi to saw_sgr for more precise SGR code detection.
2026-02-01 11:17:36 +01:00
can1357 c252847005 feat(natives): updated streaming callbacks to use error-first convention for proper async error handling
- Modified callback signature for `find()` and `grep()` streaming callbacks from `(match)` to `(error, match)` to support proper error handling in async operations.
- Updated native binding wrappers to handle error-first callback convention from napi-rs ThreadsafeFunction.
- Removed 'pi_natives.node' from candidate native module names, keeping only platform-specific variants.
2026-02-01 11:06:28 +01:00
can1357 7493ed87b6 fix(coding-agent/tools): fixed null reference error in onMatch callback with type annotation update
- Added null check for match parameter in onMatch callback to prevent null reference errors.
- Updated match parameter type annotation from FindMatch to FindMatch | null to reflect actual usage.
2026-02-01 10:51:51 +01:00
can1357 b10adb92cb chore: bump version to 9.6.3 2026-02-01 10:41:26 +01:00
can1357 c52968a2f3 fix(coding-agent/ipy): fixed pythonPath typo and removed unused pythonwPath field
- Fixed typo in gateway coordinator where pythonwPath was referenced instead of pythonPath.
- Removed unused pythonwPath field from PythonRuntime interface and consolidated python executable resolution to use windowless python path directly.
2026-02-01 10:28:14 +01:00
can1357 b193bdcada chore: bump version to 9.6.2 2026-02-01 10:23:57 +01:00
can1357 e1bcf492a1 refactor: restructured text module and simplified NAPI API surface
- Renamed `EllipsisKind` enum to `Ellipsis` across all packages for clearer API naming.
- Refactored Rust text module from 356 to 155 lines with simplified state tracking using u32 ColorVal instead of enum ColorCode and named attribute constants.
- Removed `Env` parameter from public NAPI functions `truncate_to_width` and `extract_segments` to simplify API surface.
- Changed return type of `truncate_to_width` from `JsString` to `Either<JsString, Utf16String>` to support zero-copy returns.
- Removed early return optimization in `truncateToWidth()` function.
- Reordered native module search paths to prioritize repository build artifacts over system paths.
2026-02-01 10:23:41 +01:00
can1357 09225bc491 feat: refactored text truncation API to use string type and hardcoded ellipsis
- Changed TextInput type parameter to string in truncateToWidth(), visibleWidth(), sliceWithWidth(), and extractSegments() functions in native bindings.
- Removed TextInput type export from public API of pi-natives package.
- Removed format.ellipsis symbol from theme configuration, replacing all theme-based ellipsis references with hardcoded Unicode ellipsis character (...).
- Removed ellipsis property from SymbolTheme interface in pi-tui package.
- Removed truncateToWidth, sliceWithWidth, and extractSegments wrapper functions from pi-tui public API, now re-exporting directly from pi-natives.
- Added early return optimizations in truncateToWidth() and sliceWithWidth() native functions to skip native calls when possible.
2026-02-01 10:01:56 +01:00
can1357 c8f106c58c feat(text): refactored text processing with UTF-16 optimization and ANSI state bitflags
- Added `visibleWidth()` function to measure visible text width while excluding ANSI codes.
- Optimized text processing from UTF-8 to UTF-16 implementation with direct JsString handling for improved performance.
- Refactored ANSI state tracking to use bitflags-based SgrState struct instead of individual boolean fields for more efficient storage.
- Introduced ColorCode enum to represent color codes (Basic, Indexed, Rgb) for better type safety.
- Added comprehensive test coverage for UTF-16 text processing, ANSI detection, and width calculations.
- Updated napi feature from 'napi8' to 'napi10' and added unicode-segmentation dependency.
2026-02-01 09:34:54 +01:00
can1357 b91ab4bad0 chore: bump version to 9.6.1 2026-02-01 09:06:05 +01:00
can1357 0ac6d19cbc feat(deps): upgraded napi to v3, added Kitty keyboard protocol support, and refactored text processing
- Added native Kitty keyboard protocol sequence matching via new `matchesKittySequence` function in pi-natives crate.
- Removed `visibleWidth` function from text utilities in favor of consistent Bun.stringWidth approach.
- Upgraded napi and napi-derive dependencies from version 2 to 3.
- Relaxed grep-regex, grep-searcher, and grep-matcher dependency version constraints to allow any 0.1.x version.
- Replaced unicode-segmentation dependency with bstr for improved byte-slice handling in text processing.
- Refactored text module to use byte-slice abstractions instead of string references for better performance and flexibility.
2026-02-01 09:05:56 +01:00
can1357 2767c7e2a9 fix(tui/bench): fixed output handling and added visibleWidth benchmark suite
- Fixed output handling to prioritize text/markdown over text/plain when both are available, ensuring Markdown content is displayed correctly.
- Added comprehensive benchmark suite for visibleWidth implementations comparing native, Bun.stringWidth, and hybrid approaches across ASCII, ANSI, CJK, emoji, and mixed content scenarios.
2026-02-01 08:26:13 +01:00
can1357 5d80d0df7a chore: bump version to 9.6.0 2026-02-01 08:20:08 +01:00
can1357 696cd48f4e fix: backport fixes from pi-mono (52532c7c0..82d7da878)
packages/ai:
- fix: default tool call arguments to {} when nullish
- feat: add Vercel AI Gateway routing support

packages/tui:
- feat: add Ctrl+B/Ctrl+F cursor navigation keybindings
- feat: add character jump navigation (Ctrl+], Ctrl+Alt+])
- fix: support quoted paths with spaces in autocomplete

packages/coding-agent:
- feat: add set_session_name RPC command
- feat: add "none" option to doubleEscapeAction setting
- fix: respect .gitignore/.ignore/.fdignore when scanning package resources
- refactor: unified sessionTitle to sessionName across codebase
2026-02-01 08:14:40 +01:00
can1357 ef415e863b feat(coding-agent): refactored settings system with new singleton API and unified schema
- Replaced SettingsManager class with new Settings singleton providing synchronous get/set API and background persistence.
- Introduced settings-schema.ts as single source of truth for all configuration definitions with 100+ settings organized into logical groups.
- Migrated from method-based settings access (getTheme(), setTheme()) to path-based access using dot notation (settings.get('theme'), settings.set('theme', value)).
- Removed 2035-line settings-manager.ts file and replaced with modular settings.ts (693 lines) and settings-schema.ts (836 lines) for improved maintainability.
- Unified settings schema into single source of truth eliminating duplicate definitions across settings-defs.ts and settings-manager.ts.
2026-02-01 08:08:58 +01:00
can1357 1e8e058ead feat: added cross-compilation support via CARGO_BUILD_TARGET and environment variable overrides
- Added support for cross-compilation via CARGO_BUILD_TARGET environment variable, enabling builds for non-native targets like ARM64 Linux.
- Added support for overriding platform and architecture detection via TARGET_PLATFORM and TARGET_ARCH environment variables.
- Modified native build script to search for release artifacts in target-specific directories when cross-compiling.
- Updated CI workflow to use cross-compilation toolchain for ARM64 Linux builds instead of native ARM64 runners.
- Created comprehensive porting guide documenting how to port hot paths to pi-natives with anatomy, checklist, and troubleshooting sections.
2026-02-01 07:44:34 +01:00
can1357 c803338101 chore: bump version to 9.5.1 2026-02-01 06:27:00 +01:00
can1357 b126c275ec refactor(coding-agent): changed persistent shell to opt-in and added Bash settings tab 2026-02-01 06:04:01 +01:00
can1357 a1f674c156 chore: bump version to 9.5.0 2026-02-01 05:56:09 +01:00
can1357 f5fed20ea9 fix(natives/scripts): improved native binary installation safety with atomic rename operations
- Improved native binary installation safety by using atomic rename operations instead of copy-then-delete, preventing data loss if installation fails.
- Added proper error handling and recovery in safeCopy function to restore old binary if new file installation fails.
- Enhanced Windows DLL compatibility by staging new file to temp location before renaming, avoiding issues with loaded binaries.
2026-02-01 05:55:26 +01:00
can1357 a1bd76e42c refactor(natives/bench): removed worker pool benchmarking code from grep benchmark suite
- Removed worker pool benchmarking code from grep benchmark suite.
- Simplified benchmark to focus on main thread and subprocess comparisons.
2026-02-01 05:54:23 +01:00
can1357 32c6b22bbe feat: added sortByMtime, streaming grep callbacks, mtime field, RequestOptions export, and fixed shell race condition
- Added sortByMtime option to FindOptions for native-level mtime-based sorting of file search results.
- Added streaming callback support (onMatch parameter) to grep() function for real-time match notifications.
- Added mtime field to FindMatch struct to expose file modification times in search results.
- Exported RequestOptions type from natives package for public API use.
- Implemented wrapRequestOptions utility for consistent timeout and abort signal handling across native functions.
- Fixed race condition in shell session where command completion could occur before stream data was fully processed.
2026-02-01 05:52:12 +01:00
can1357 1265b6c006 feat: added fuzzyFind native function with .gitignore support and replaced fd binary dependency
- Added fuzzyFind native function for case-insensitive fuzzy file path searching with .gitignore support and configurable result limits.
- Exported FuzzyFindOptions, FuzzyFindMatch, and FuzzyFindResult types from @oh-my-pi/pi-natives for fuzzy search configuration and results.
- Replaced external fd binary dependency with native fuzzyFind implementation in autocomplete provider for improved performance.
- Implemented safeCopy function in native build script to prevent crashes when updating native binaries by using atomic-like file operations.
2026-02-01 05:31:53 +01:00
can1357 85535a514e feat(coding-agent/tools): added head/tail parameters to bash tool for native output limiting
- Added head and tail parameters to bash tool for native output limiting without piping.
- Implemented automatic normalization of bash commands to extract and strip head/tail pipes and stderr redirects.
- Created bash-normalize utility module with normalizeBashCommand and applyHeadTail functions for command processing.
- Updated bash tool documentation to recommend using head/tail parameters instead of piping through shell commands.
- Added comprehensive test coverage for bash command normalization and head/tail filtering functionality.
2026-02-01 05:27:24 +01:00
can1357 078db06bcb refactor(coding-agent/ipy): extracted Python runtime resolution logic into shared module
- Extracted Python runtime resolution logic from kernel and gateway-coordinator modules into a new shared runtime module.
- Centralized environment variable filtering, venv detection, and Python executable resolution into ipy/runtime.ts to eliminate code duplication.
- Moved DEFAULT_ENV_ALLOWLIST, WINDOWS_ENV_ALLOWLIST, DEFAULT_ENV_DENYLIST, and related environment configuration constants to the shared runtime module.
- Consolidated filterEnv(), resolveVenvPath(), and resolvePythonRuntime() functions into the shared runtime module for reuse across kernel and gateway-coordinator.
- Updated gateway-coordinator to use pythonw.exe (windowless Python interpreter) on Windows to prevent console window spawning.
2026-02-01 05:17:36 +01:00
can1357 1e52c837c8 feat(natives): added native addon distribution and platform validation to CLI update mechanism
- Added native addon distribution and installation support to the CLI update mechanism, enabling platform-specific native modules to be downloaded and installed alongside the main binary.
- Added platform validation in native addon loader to verify supported platforms (linux-x64, linux-arm64, darwin-x64, darwin-arm64, win32-x64) with helpful error messages for unsupported configurations.
- Enhanced native addon loading error messages to provide platform-specific troubleshooting guidance for both npm/bun installations and local development environments.
- Updated installation scripts (install.sh, install.ps1) to download and install native addon files alongside the main binary during CLI installation.
2026-02-01 05:17:06 +01:00
can1357 67fcf85518 test(coding-agent): added .git directory creation in gitignore test for proper setup
- Added .git directory creation in gitignore test to ensure proper test environment setup.
2026-02-01 05:01:47 +01:00
can1357 f494d2a68a docs(coding-agent/prompts): improved prompt formatting and removed redundant instructions
- Removed redundant instruction about preferring delegation in coordinator prompt.
- Improved task context template formatting with consistent markdown code fence markers.
- Removed dependencies section from task template constraints as it was redundant.
- Enhanced readability of task examples with better spacing and formatting.
2026-02-01 04:57:57 +01:00
can1357 25ca56c05c perf: optimized performance with streaming readers, single-pass algorithms, and reduced allocations
- Optimized grep search to use streaming readers instead of buffering entire files, reducing memory overhead for large files.
- Added thread-local caching to scope color computation in highlight module to avoid repeated prefix checks.
- Refactored text truncation from two-pass algorithm to single-pass streaming algorithm, eliminating intermediate vector allocations.
- Removed Arc overhead from image storage by storing DynamicImage directly and pre-allocating buffer capacity for encoding operations.
- Updated find tool to emit streaming match updates via callback and use native match metadata instead of redundant filesystem stats, improving performance.
- Added maxResults parameter to find tool to limit result set at the native layer.
2026-02-01 04:57:47 +01:00
can1357 9bee79c8c3 ci(workflows): updated macOS runner from macos-13 to macos-15-intel in CI
- Updated macOS runner from macos-13 to macos-15-intel in CI pipeline.
2026-02-01 04:36:15 +01:00
can1357 276411d560 refactor(pi-natives): optimized string handling and refactored native modules for better memory efficiency
- Optimized string handling in find.rs by replacing String allocations with Cow<'_, str> to avoid unnecessary copies when glob patterns don't contain backslashes on non-Windows systems.
- Refactored grep.rs to use Cow<'a, str> in normalize_relative_path() for conditional allocation, reducing memory overhead on non-Windows platforms.
- Extracted helper functions bytes_to_trimmed_string() and matches_case_insensitive() in grep.rs to reduce code duplication and improve maintainability.
- Converted multiple match statements to let...else syntax in grep.rs for cleaner error handling patterns.
- Restructured visible_width_impl() in text.rs to use a two-pass algorithm that separates ANSI escape sequence detection from width calculation for improved clarity.
2026-02-01 04:30:01 +01:00
Can BölükandGitHub 41cfa67603 Merge pull request #2 from arg3t/main
Fix TUI corruption and lost keystrokes when opening an external editor
2026-02-01 04:21:28 +01:00
can1357andarg3t a6e6c85d78 fix(tui): prevent render and stdin races when external editor has terminal
terminal.stop() wasn't fully releasing the terminal when vim editor was
opened with Ctrl+G. Two consequences:

1. Renders landed on vim's screen. Streaming message_update events kept
   scheduling doRender() via nextTick after the TUI was stopped. A stopped
   flag now gates requestRender() and the nextTick callback, preventing
   any render tick while an external editor owns the terminal.

2. Keystrokes were swallowed. process.stdin stayed in flowing mode -
   start() called resume() but stop() never called pause(). libuv kept
   reading from fd 0, racing with vim for input on the same tty. Added
   the matching pause() so the editor gets exclusive access.

PR: #2
Co-authored-by: arg3t <arg3t@users.noreply.github.com>
2026-02-01 04:16:21 +01:00
Yigit Colakogluandcan1357 eccf3ec051 fix(coding-agent/lsp): surface server exit errors and add per-server warmup timeout
Previously, any LSP server failure during initialize (process crash, missing
binary, rustup proxy error) was reported as a generic "timed out" message.
The process exit and its stderr were ignored; only the per-request timeout
fired, hiding the actual cause.

proc.exited now rejects all pending requests with the server's stderr output.
ptree already captures stderr and awaits its completion for non-zero exits,
so peekStderr() is reliable at this point. The first rejection wins the race
against the timeout; the other finds the request already removed and no-ops.

Also added warmupTimeoutMs to ServerConfig, allowing per-server override of
the global 5s warmup cap via lsp.json/lsp.yaml. Servers without it fall back
to WARMUP_TIMEOUT_MS as before.

Timeout error messages now include the configured duration for clarity when
they do legitimately fire.
2026-02-01 04:16:08 +01:00
can1357 9244f324c3 refactor(tui/components): optimized cache key computation with xxHash64 and consolidated validation logic
- Simplified cache key computation by replacing multi-field comparison with single bigint hash using xxHash64.
- Reduced Cache type from three fields (key, width, bgSample) to two fields (key, result) by consolidating cache validation logic.
- Refactored matchCache method to accept precomputed cache key instead of individual parameters, improving performance and reducing comparison overhead.
2026-02-01 04:13:41 +01:00
can1357 b5e96526e3 feat: added native find module and made grep/html/image/text async with camelCase naming
- Added native find module for high-performance filesystem discovery with glob pattern matching and .gitignore support.
- Made grep, html, image, and text native functions asynchronous to prevent blocking the event loop.
- Updated native function names to use camelCase convention for JavaScript interoperability.
- Extended grep and text functions to accept Uint8Array/Buffer input for zero-copy operations.
- Delegated file discovery logic from JavaScript to native Rust implementation for improved performance.
2026-02-01 03:10:24 +01:00
Yigit Colakoglu 02890f0fc4 fix(tui): prevent render and stdin races when external editor has the terminal
Two bugs caused by terminal.stop() not fully releasing the terminal:

1. Streaming renders overwrote vim: requestRender() scheduled doRender()
   via process.nextTick even after stop(). Added a 'stopped' flag that
   gates requestRender() — no tick is scheduled while the TUI is stopped.
   The flag is cleared in start(), so renders resume when the TUI restarts.

2. Keystrokes raced between Node and vim: process.stdin stayed in flowing
   mode after stop() because resume() in start() had no matching pause().
   libuv kept calling read() on fd 0, competing with vim for input from
   the same tty. Added process.stdin.pause() to stop() so the external
   editor gets exclusive access to the input queue.
2026-01-31 20:29:25 +01:00
Yigit Colakoglu c52223ad5c fix(coding-agent/lsp): surface server exit errors and add per-server warmup timeout
Previously, any LSP server failure during initialize (process crash, missing
binary, rustup proxy error) was reported as a generic "timed out" message.
The process exit and its stderr were ignored; only the per-request timeout
fired, hiding the actual cause.

proc.exited now rejects all pending requests with the server's stderr output.
ptree already captures stderr and awaits its completion for non-zero exits,
so peekStderr() is reliable at this point. The first rejection wins the race
against the timeout; the other finds the request already removed and no-ops.

Also added warmupTimeoutMs to ServerConfig, allowing per-server override of
the global 5s warmup cap via lsp.json/lsp.yaml. Servers without it fall back
to WARMUP_TIMEOUT_MS as before.

Timeout error messages now include the configured duration for clarity when
they do legitimately fire.
2026-01-31 20:12:57 +01:00
can1357 eabbde0c8a feat(natives): migrated native bindings from WASM to Node.js N-API with ripgrep-backed grep module
- Migrated native bindings from WebAssembly (wasm-bindgen) to Node.js N-API architecture for improved performance and platform support.
- Replaced worker pool-based async architecture with synchronous native addon calls, eliminating thread overhead and simplifying the API.
- Added new grep module with ripgrep-backed filesystem search supporting parallel processing, glob filtering, and context line extraction.
- Updated build system to compile Rust crates to platform-specific .node binaries instead of WASM modules.
- Removed WASI implementation and worker pool infrastructure no longer needed with N-API native bindings.
- Updated CI/CD pipeline to build native addons for multiple platforms (Linux x64/arm64, macOS x64/arm64, Windows x64) and include them in releases.
2026-01-31 18:02:56 +01:00
can1357 e67e02947f docs(coding-agent/prompts): added phased execution guidance for migrations and refactors with WASM to N-API example
- Added phased execution guidance for migrations and refactors to prevent parallel work on dependent layers.
- Added example demonstrating phased execution pattern for porting WASM to N-API with sequential foundation, parallel implementation, integration, and dependent layer phases.
2026-01-31 15:45:00 +01:00
can1357 242c2d5cb7 feat(coding-agent/lsp): removed Nushell language server from LSP defaults
- Removed Nushell language server configuration from LSP defaults.
2026-01-31 15:44:18 +01:00
can1357 7bd876037d fix(coding-agent/web): disabled related questions in Perplexity search requests to fix unexpected behavior
- Disabled related questions in Perplexity search requests to fix unexpected behavior in search results.
2026-01-31 15:36:06 +01:00
can1357 12eeb63041 chore: bump version to 9.4.0 2026-01-31 14:02:24 +01:00
can1357 92abbe9363 refactor(coding-agent): migrated environment variable handling to centralized getEnv utilities
- Migrated environment variable handling to use centralized getEnv() and getEnvApiKey() utilities from pi-ai package.
- Removed environment variable denylist that previously blocked API keys from being passed to subprocesses.
- Simplified web search error messages by removing provider-specific configuration hints.
- Eliminated duplicate environment variable and .env file parsing logic across web search providers by delegating to centralized utilities.
2026-01-31 14:02:15 +01:00
can1357 cc90ed37f8 refactor: extracted padding logic into reusable utility function with optimized buffer allocation
- Extracted manual space padding logic into a reusable `padding()` utility function across all UI components and utilities.
- Optimized padding operations by introducing a pre-allocated 512-space buffer in the `padding()` function to reduce repeated string allocations.
- Updated all imports across 30 files to use the new `padding()` function from pi-tui instead of inline `' '.repeat()` calls.
- Renamed local variables from `padding` to `pad`, `padSize`, `indent`, or `linePad` to avoid naming conflicts with the imported `padding()` function.
- Exported the `padding()` utility function from the tui package index for public use.
2026-01-31 13:36:54 +01:00
can1357 9a22622f9c fix(coding-agent/web): fixed snippet field assignment in Anthropic search provider response parsing
- Fixed snippet field assignment to use undefined instead of encrypted_content in Anthropic search provider response parsing.
2026-01-31 13:27:42 +01:00