| refactor(natives): migrated native bindings to NAPI-RS with auto-generated types
- Migrated native bindings from TypeScript wrappers to NAPI-RS generated modules with auto-generated type definitions and runtime enums.
- Replaced chunk tree API with stateful ChunkState class supporting render, edit, and resolve operations with improved error handling.
- Converted callback signatures to error-first pattern (error, result) for shell, PTY, glob, and grep operations.
- Introduced type-safe enums for MacOSAppearance, GrepOutputMode, KeyEventType, ImageFormat, and AstMatchStrictness replacing string literals.
- Refactored chunk tree implementation with dedicated modules for edit, indent, resolve, and state management with comprehensive validation.
- Moved clipboard utilities from native bindings to coding-agent package with improved OSC 52 and Termux compatibility.
| 1 个月前 |
| feat(hashline)!: disallowed inline payload on op lines, required + rows
- Removed inline_body from grammar; op sigils (↑, ↓, :) now accept no trailing content.
- Executor emits INLINE_PAYLOAD_ACCEPTED_WARNING when legacy inline form is encountered but still applies the edit leniently.
- Updated prompt docs and all tests to use bare op + +-prefixed continuation rows.
| 5 天前 |
| feat: added block replace syntax with block edits in hashline parser
- Added replace block N: syntax in grammar/parser/tokenizer/types, emitting kind: "block" edits with empty-body checks.
- Added block-resolution in hashline apply/recovery, wiring BlockResolver to resolve edits with throw/drop unresolved behavior.
- Added native blockRangeAt support and exported block range/options types through pi-ast, pi-natives, and JS bindings.
- Added coding-agent resolver wiring plus internal visibility/exports updates and new parser, patcher, and setup-wizard tests.
| 1 天前 |
| refactor(pi-natives): simplified NAPI naming by removing explicit js_name attributes
- Removed explicit js_name attributes from NAPI macros across all modules, relying on automatic snake_case to camelCase conversion.
- Renamed internal functions in keys.rs for clarity: parse_kitty_sequence_napi() -> parse_kitty_sequence() and parse_kitty_sequence() -> parse_kitty_sequence_bytes().
- Renamed text.rs functions for consistency: set_env_tab_width() -> set_default_tab_width() and get_env_tab_width() -> get_default_tab_width().
- Updated documentation to reflect automatic NAPI naming convention and simplified export mapping tables.
| 1 个月前 |
| feat(pi-natives): added link-following control to filesystem scan options
- Added a follow_links flag to ScanOptions and build_walker so callers could control symlink traversal.
- Updated scan callsites so ast, glob, and grep continued skipping symlinks while fd's fuzzy-find enabled link following.
- Updated fd scoring to favor fuzzy basename matching for queries without '/', reducing matches based only on ancestor directory names.
| 20 天前 |
| feat(pi-natives): added link-following control to filesystem scan options
- Added a follow_links flag to ScanOptions and build_walker so callers could control symlink traversal.
- Updated scan callsites so ast, glob, and grep continued skipping symlinks while fd's fuzzy-find enabled link following.
- Updated fd scoring to favor fuzzy basename matching for queries without '/', reducing matches based only on ancestor directory names.
| 20 天前 |
| feat(pi-natives): added link-following control to filesystem scan options
- Added a follow_links flag to ScanOptions and build_walker so callers could control symlink traversal.
- Updated scan callsites so ast, glob, and grep continued skipping symlinks while fd's fuzzy-find enabled link following.
- Updated fd scoring to favor fuzzy basename matching for queries without '/', reducing matches based only on ancestor directory names.
| 20 天前 |
| fix(pi-natives): preserved exact brace unions without adding recursive glob prefix
- Updated glob pattern construction to skip prepending the recursive **/ prefix for exact brace unions wrapped in {}.
- Added an is_exact_brace_union helper that detected brace-only unions without wildcard or bracket meta-characters.
- Added tests covering {alpha.txt,beta.txt} as non-recursive and {*.ts,*.tsx} as still receiving the recursive prefix.
| 1 个月前 |
| fix(coding-agent): improved run lookup and made test temp directories unique
- Updated TempDirGuard creation in grep tests to include PID and an atomic sequence, preventing temp path collisions.
- Removed the branch filter from GitHub action run queries so results are matched by head_sha only.
- Adjusted run-watch calls to the simplified fetchRunsForCommit interface without the branch argument.
| 6 天前 |
| refactor(pi-natives): simplified NAPI naming by removing explicit js_name attributes
- Removed explicit js_name attributes from NAPI macros across all modules, relying on automatic snake_case to camelCase conversion.
- Renamed internal functions in keys.rs for clarity: parse_kitty_sequence_napi() -> parse_kitty_sequence() and parse_kitty_sequence() -> parse_kitty_sequence_bytes().
- Renamed text.rs functions for consistency: set_env_tab_width() -> set_default_tab_width() and get_env_tab_width() -> get_default_tab_width().
- Updated documentation to reflect automatic NAPI naming convention and simplified export mapping tables.
| 1 个月前 |
| refactor(pi-natives): simplified NAPI naming by removing explicit js_name attributes
- Removed explicit js_name attributes from NAPI macros across all modules, relying on automatic snake_case to camelCase conversion.
- Renamed internal functions in keys.rs for clarity: parse_kitty_sequence_napi() -> parse_kitty_sequence() and parse_kitty_sequence() -> parse_kitty_sequence_bytes().
- Renamed text.rs functions for consistency: set_env_tab_width() -> set_default_tab_width() and get_env_tab_width() -> get_default_tab_width().
- Updated documentation to reflect automatic NAPI naming convention and simplified export mapping tables.
| 1 个月前 |
| fix(crates): address clippy lints surfaced on linux baseline
| 20 天前 |
| fix(pi-natives): updated alt key handling for kitty mode and alt+enter decoding
- Removed legacy lowercase Alt+arrow byte handling so alt-arrow sequences are matched through kitty-aware CSI/u paths instead of deprecated escape-letter forms.
- Added support for alt+enter from both \x1b\r and \x1b\n during key parsing and matching.
- Expanded tests to cover mixed Kitty/tmux modes and to restrict legacy uppercase Alt+arrow aliases to non-Kitty protocol mode only.
| 3 天前 |
| chore: bump version to 15.7.4
| 1 天前 |
| feat: added macOS power assertion schema and begin/end/reset handling
- Added macOS power assertion settings for idle, system, user, and display with schema defaults.
- Added idle, system, and user options to MacOSPowerAssertionOptions in TS typings and Rust, preserving display.
- Changed agent-session power flow to use begin/end/reset in-flight helpers and avoid manual counter updates.
- Updated power assertions to combine multiple kinds per native handle and support safe repeated-stop behavior.
- Updated unreleased changelog notes to document the breaking behavior and canceled-prompt unblock correction.
| 22 天前 |
| feat: updated atom.sed edge handling for object syntax and matching
- Replaced atom.sed string syntax with {pat,rep,g?,F?,i?} objects in schema, prompts, and tests.
- Changed sed validation defaults so pat is regex, g defaults to global replacement, and F:true forces literal matching.
- Fixed sed edge cases by allowing sequential same-anchor edits, handling zero-length matches, and preserving chaining.
- Updated native build flow to local --profile defaults, refactored enum generation, and switched totals to total_ms.
| 1 个月前 |
| feat(coding-agent): added verbatim unicode rule to hashline prompt
| 20 天前 |
| feat: added auth-gateway usage cache with single-flight 15s ttl fallback
- Added AbortSignal propagation and timeout-race handling for broker health, usage, refresh, and snapshot calls.
- Added single-flight usage-report caching with 15s TTL, per-caller abort races, and null-on-fail fallback.
- Expanded provider schemas and parse/build logic for cache metadata, headers, stop controls, and image/file content.
- Hardened auth flows by rejecting refresh sentinels and using timing-safe bearer-token comparisons.
| 15 天前 |
| fix: corrected child-session behavior to DetachSession for non-term stdin
- Renamed non-terminal stdin pipeline tests and updated non-terminal expectations to DetachSession behavior.
- Updated child_session_action behavior so non-terminal, non-pipeline stdin now yields DetachSession instead of None.
- Updated execute_external_command to skip process_group for detached children and move take_foreground into its foreground arm.
- Added async regression coverage for detached pipeline stages and logged the fix in the natives CHANGELOG.
| 1 天前 |
| feat: Bun 1.3.14
- Raised the Bun minimum version to >=1.3.14 across package metadata, install scripts, and changelog notes.
- Removed the Photon native image pipeline and added SIXEL-based sixel support in pi-natives.
- Migrated coding-agent image handling and resizing to Bun.Image, including updated tests and a JPEG quality bump to 80.
- Added HTTP/2 fetch bootstrap with HTTPS-only fallback and updated Bun build flags for autoload suppression/--keep-names.
| 19 天前 |
| chore: reformat
| 5 天前 |
| feat(cross-cutting): added pi-ast/pi-shell crates and rewired pi-natives
- Added pi-ast as a new crate with public language, ops, and summary modules and exported SupportLang.
- Added AST summary and rewrite APIs in pi-ast, including language inference, overlap-safe edits, and span normalization.
- Added pi-shell crate with new Shell and cross-platform Process APIs, session execution, and cancellation-aware runs.
- Updated pi-natives to use shared pi_ast/pi_shell APIs, switched to local path deps, and moved minimizer assets to pi-shell.
| 21 天前 |
| fix(tui): apply Hangul jamo width correction only on macOS
The Hangul Compatibility Jamo width correction (U+3131..=U+318E → 1 cell)
was applied unconditionally, but macOS terminals (Ghostty, Terminal.app,
iTerm2) are the only ones that render jamo as 1 cell. WezTerm and most
Linux terminals follow UAX#11 and render them as 2 cells.
The unconditional correction caused a width mismatch between the TUI's
calculated column positions and the terminal's actual rendering, resulting
in corrupted layout and broken Korean input on non-macOS platforms.
- Rust: gate the correction with cfg!(target_os = "macos")
- TS: gate the correction with process.platform === "darwin"
- On non-macOS, use UnicodeWidthStr for multi-char graphemes (perf)
Constraint: macOS terminals render jamo as 1 cell despite UAX#11.
Rejected: removing the correction entirely — would break macOS.
Tested: native build succeeds, typecheck passes.
Not-tested: visual verification on macOS terminals.
Scope-risk: narrow
| 6 天前 |
| feat: compressed prompts slightly
| 1 个月前 |
| refactor(pi-natives): restructured config handling with env_uint! macro and scope validation
- Extracted environment variable parsing into centralized env_uint! macro for consistent configuration handling across modules.
- Refactored recursion logic to validate scope narrowing before recursing, introducing recursion_narrows_scope() and MIN_RECURSE_SAVINGS constant.
- Consolidated static configuration initialization from LazyLock to declarative env_uint! macro in render and cache modules.
- Improved control flow statement classification in defaults module by replacing positional candidates with named function-context candidates.
| 1 个月前 |
| feat: added listWorkspace binding and moved AGENTS.md lookup into tree
- Added listWorkspace native binding and API types, exporting bounded workspace trees with AGENTS.md candidates.
- Reworked buildWorkspaceTree and buildDirectoryTree to call listWorkspace with 5s timeout defaults.
- Replaced startup AGENTS.md discovery with workspace-tree-only scanning and removed legacy AgentsMdSearch session plumbing.
- Updated WorkspaceTree and system prompt context to expose agentsMdFiles and aligned tests/changelog expectations.
| 22 天前 |