- Renamed subagent completion flow from `submit_result` to `yield` across SDK tools, prompts, and docs.
- Updated executor/task handling to require and parse `yield` calls, replacing legacy submit-result extraction and state flags.
- Added `subagent-yield-reminder` and updated system prompts to require `yield` with `result.data` or `result.error`.
- Renamed hidden-tool and registration plumbing to `yield`, including discovery helpers and renderer/test surface.
- Enabled Biome VCS settings and expanded fix scripts with new `fix:all` and `fix:tools:all` commands.
- Updated `fix:ts` and `fix:tools` to separate changed-only checks from full-run formatting and generation tasks.
- Simplified edit-benchmark variant parsing by removing hardcoded validation logic, and removed deprecated flags from `run-rs-task.ts`.
- Added raw read output propagation so read/archive commands bypass anchors, line numbers, and chunk formatting.
- Fixed atom/hashline editing by tightening hashline prefixes and applying grouped anchor edits in stable order.
- Hardened chunk parsing and path handling by using `bigram_end` checks and resolving edit paths via shared `args.path` fallback.
- Updated path-related behavior for chunk, replace, patch, and hashline previews to honor optional edit paths.
- Removed mode-level param validators and replaced them with runtime handling, then removed obsolete validation tests.
- Migrated `chunk_checksum` to emit 4-char checksums from `HASHLINE_BIGRAMS` bigrams.
- Updated selector handling in `resolve.rs` to normalize CRCs to lowercase and validate two-bigram tokens.
- Updated `hashline_prefix_len` to require ASCII two-character bigrams from `HASHLINE_BIGRAMS` in hashlines.
- Relaxed `--edit-variant` parsing in `packages/typescript-edit-benchmark/src/index.ts` to accept any string.
- Adjusted token delta calculation in `runner.ts` to subtract estimated system-prompt overhead per assistant turn.
- Captured initial system-prompt tokens in `runSingleTask` and added rough `estimateTokens` helper for corrected accounting.
- Reframed `scripts/rate-edit-tool.py` prompts to target edit-tool behavior and constraints for each fixture type.
- Added `atom` edit mode to `EditTool` with single-point hashline-style dispatch and `executeAtomSingle`.
- Added `AtomToolEdit`/`AtomParams` schema and `atom` prompt docs to require one op per edit entry.
- Changed `EditTool` entry processing to inherit per-entry `path` from a top-level request `path` fallback.
- Added top-level `path` defaults to patch and replace schemas and now reject missing entry paths.
- Added an `atom` streaming strategy and registered it in `EDIT_MODE_STRATEGIES` for live mode support.
- Enabled hashline read anchors for `atom` mode via `file-display-mode.ts` path-display logic.
- Added `atom` unit tests covering schema checks, anchor conflicts, and hash mismatch diagnostics.
- Escaped raw control characters inside JSON string literals in `tryParseJsonForTypes` and `tryParseLeadingJsonContainer`.
- Fixed `validateToolArguments` parsing of stringified tool args containing literal newlines or tabs in string values.
- Added regression coverage for raw-control-character JSON arguments in `tool-argument-coercion.test.ts`.
- Aligned hashline and chunk token handling to `HASHLINE_BIGRAMS` in `computeLineHash` and parsing regexes.
- Removed hashline file-level `move`/`delete` options from schemas and execution so edits are in-place updates only.
- Hardened hashline prefix parsing to reject non-bigram IDs, preventing false stripping of `#` comment lines.
- Updated `read()`/prompt wording so raw reads skip prefixes and examples now show anchors like `123#th`.
- Updated hashline chunk tests for new `HASHLINE_BIGRAMS` IDs and replaced stale hash constants.
- Prevented template compile failures from `}}}` sequences by normalizing closing braces before `handlebars.compile`.
- Updated Unreleased `CHANGELOG.md` to describe current hashline/edit/path behavior changes.
- Standardized tool prompt example formatting by replacing `<example>` blocks with unified `<examples>` sections.
- Update all npm catalog entries to current latest versions
- Major: diff ^8 -> ^9
- Bump @typescript/native-preview to 7.0.0-dev.20260425.1
- packages/stats/tsconfig.client.json: drop react/react-dom from explicit types (auto-resolved via react-jsx)
Add 'deepseek' as a known provider with DEEPSEEK_API_KEY env resolution.
Register DeepSeek V4 Flash and V4 Pro models with canonical IDs:
- deepseek-v4-flash: 1M context, 384K output, .14/.28 per 1M
- deepseek-v4-pro: 1M context, 384K output, .74/.48 per 1M
Both models use the openai-completions API at https://api.deepseek.com
with effort-based thinking mode support.
- Updated package.json to allow ajv ^8.20 and added an override pinning ajv to 8.20.0.
- Added matching ajv 8.20.0 override entries in bun.lock and aligned the catalog to the new version.
- Refreshed bun.lock to replace the ajv@8.18.0 entry with ajv@8.20.0 and updated its checksum metadata.
- Added a new `CommandSessionExt::detach_session` extension trait on Unix, Windows, and stub command backends.
- Updated external command execution to use `detach_session` when spawning a new process group without terminal stdin.
- Implemented Unix detaching via `pre_exec(setsid)` with `EPERM` handled as a non-fatal condition.
- Add explicit validation rejecting write:"" with the expected error message in normalizeChunkEditOperations.
- Update spark context-promotion tests (it_1, it_2, concurrent it_5) to expect promotion to gpt-5.5 (the new chain target on openai-codex), since spark variants now promote to gpt-5.5 rather than the base codex model.
- When inferred body indentation was empty, the replacement path now falls back to compute_insert_indent for the effective indent.
- The body indentation logic now uses this computed effective indent when indenting non-empty normalized lines.
- Existing inferred indentation is still used unchanged when available, preserving prior behavior.
- Removed `read: true` from chunk edit schema and validation logic, including mixed read/write checks and read-only execution paths.
- Updated chunk edit normalization to treat chunk operations as mutating and removed unused read-result handling.
- Updated prompts and changelog guidance to require `open` for inspection and document that chunk edits use only `write`, `insert`, or `delete`.
Azure OpenAI endpoints require:
- /deployments/{model-id}/chat/completions (not /chat/completions)
- ?api-version=YYYY-MM-DD query parameter
The openai-completions provider was sending neither, resulting in silent
404 errors for any model served via openai.azure.com.
This fix detects .openai.azure.com in the base URL, injects the
deployment path if not already present, and attaches the api-version
query param (from AZURE_OPENAI_API_VERSION env or defaulting to
2024-10-21) via OpenAI SDK's defaultQuery option.
- Added markdown `Row` chunk support by introducing `ChunkKind::Row`, mapping it to tag `"row"`, and emitting row chunks for table rows.
- Updated Go chunk parsing to support method signatures (`func (recv) Name`), prefer method parsing in signatures, and adjust root rules to classify package/import chunks correctly.
- Changed chunk-edit behavior to add read-only `read:true`, replace `write:null` deletes with explicit `delete`, and require one explicit action per entry.
- Added safer chunk-edit execution with region matching, replacement reindentation, table-row append handling, and stricter warnings/errors for boundary and invalid operations.
- Updated OpenAI context-promotion linking to handle `-spark` variants and base `gpt-5.5` models.
- Adjusted model generation data so OpenAI-like models now promote first to `gpt-5.5` and then to `gpt-5.4` where configured.
- Updated unit tests to assert context-promotion targets for both spark and `gpt-5.5` model variants.
- Replaced the standalone chunk and vim benchmark scripts with a unified `scripts/edit-benchmark.py` entrypoint.
- Added `--variant` and `PI_EDIT_VARIANT` handling with validation for supported edit modes.
- Generated benchmark specs dynamically per variant with mode-specific prompts and retry instructions.
- Fixed chunk edits to reject invalid `^`/`~` operations on code-leaf chunks.
- Fixed multiline replacement behavior to preserve literal insertion text and adjust multiline match starts.
- Fixed unsupported-region handling to warn, fall back to whole-chunk edits, and clear invalid region targets.
- Documented chunk-edit behavior for raw whitespace, parser boundaries, `sel="?"` refresh, markdown spacing, and streaming headers.
- Updated open-chunk prompt docs to describe URL handling, document/image extraction, and directory/archive traversal.
- Expanded selector behavior documentation for full-file, chunk, line-range, and raw reads, including the one-line `L20-L20` format.
- Updated the generic open prompt table to clarify `L50` shorthand as a range-to-EOF read and add single-line range support.
- Added helper utilities in the edit renderer to parse partial JSON fragments and extract the `path` field.
- Used the extracted path as a fallback when resolving the edit target file, enabling partial streamed edit calls to show the path.
- Built and stored the render context before call rendering, and added a test covering partial JSON edit path rendering.
- Added a Go fixture and registered it as `main.go` in the reference files, fixture list, and descriptions.
- Changed prompt construction and workspace setup to exercise every fixture in a single session instead of one file at a time.
- Updated run identifiers and output filenames, and set run results to report a fixture scope of `all`.
- Added a rerun flow that synthesizes oracle findings from existing `review_*.md` files without re-running fixtures.
- Refactored oracle input handling to source `(model, fixture, path)` tuples, and persisted oracle prompt and synthesis outputs in the results directory.
- Removed `OPENROUTER_API_KEY` bootstrapping and passed environment, and now write oracle errors to `oracle_error.txt` on failure.
- Canonicalized file and CLI defaults from `read` to `open` across tool registration and prompts.
- Added `resolveToolAlias()` and applied alias-normalized tool selection so legacy `read` maps to `open`.
- Updated runtime, UI, and export layers to treat `open` as first-class while preserving `read` compatibility.
- Renamed read prompt docs to `open.md`/`open-chunk.md` and refreshed system guidance to recommend `open`.
- Updated tool-related tests and expectations from `read` to `open` (including test fixtures and aliases).
- Updated the LSP prompt to require symbol-aware operations to use `lsp` when a language server is available.
- Added explicit warnings against cross-file text-based renames, recommending `lsp` rename and code actions for server-known fixes.
- Updated `chunkReadPathSeparatorIndex` to detect URL schemes and split at the final selector colon only after the URL path.
- Added tests for `parseChunkEditPath` and `parseChunkReadPath` covering local plan URLs with selectors and scheme-only URLs.
- Updated browser tool guidance to prefer `read` for static web content and use browser automation only when JavaScript, authentication, or interaction is required.
- Expanded the `read` tool documentation to include broader document and URL formats and to call out reader-mode text extraction.
- Strengthened instructions by requiring `read` for file/directory/archive/URL reads and discouraging browser/puppeteer for static web content.