- Updated SessionManager.listAll to retrieve session files with Bun.Glob.scan instead of scanSync.
- Awaited the async glob scan results via Array.fromAsync before collecting session metadata.
- Replaced the `sanitize_node_kind` suffix-removal chain with a `strip_suffix` loop to drop unsupported legacy helper usage.
- Removed the crate-level `#![feature(trim_prefix_suffix)]` gate and the `specialization` feature from the smallvec dependency configuration.
- Added minimizer API fields (`MinimizerResult.text`, `settingsHash`) and shell options for minimized output behavior.
- Changed bash execution to print minimized text output and append artifact footers only after minimized output is saved.
- Added UTF-8-safe shell streaming with `on_chunk` callback routing and `replace()` output sink updates.
- Added core filter enhancements for git, cargo, go, and listing/python outputs to produce compact summaries.
- Added RTK command filters and fixtures to strip noise, truncate output, and normalize success fallbacks.
- Added command-marker metadata and lifecycle in process execution, including completion markers and exit-code writes.
- Refactored minimization to support `MarkedCommands` mode, token-based detection, and marker-aware stripping.
- Added `onMinimizedSave` and `saveBashOriginalArtifact` to persist full bash-original output artifacts.
- Expanded public exports and marker hooks so external command launch metadata can be controlled by consumers.
- Simplified shell minimizer control flow in command planning and pipeline handling using cleaner `let else` and `if let` patterns.
- Marked checksum and plan-classification helpers and the minimizer transformed-output constructor as `const fn` to enable compile-time use.
- Retained existing minimizer output semantics while adjusting generated filter docs and build-time concatenation writing style.
- Use.
- Removed `process.env.PI_DEV` checks from `packages/natives/native/index.js`, dropping per-candidate debug load logging and load-error reporting from the native addon loader.
- Pruned `PI_DEV` and `--dev` usage from native build/run and runtime docs, including setup, variant, and troubleshooting guidance.
- Updated `packages/natives/CHANGELOG.md` to note removal of the `PI_DEV` loader diagnostic environment variable and associated console logging.
- Prevalidated each operation in `apply_edits` via `schedule_edit_operation` before execution.
- Aborted the entire batch immediately when initial checksum validation failed for an operation.
- Replaced touched-path CRC auto-acceptance with checksum-based lookup in `unique_current_chunk_by_initial_checksum`.
- Added AST-based minimizer planning with brush-parser to classify commands before minimization.
- Added original text capture and byte-metric `minimized` telemetry to shell execution results.
- Added minimizer configuration controls, including trust-gated loading via `settingsHash` and limits.
- Added `onMinimizedSave` callback wiring to persist minimized outputs and annotate Bash sinks with artifact IDs.
- Added passthrough handling for non-zero exits and raw/metadata outputs in docker, helm, cloud, listing, and system filters.
- Expanded minimizer routing to support bun run/exec, gt status/diff, npx extras, and pnpm-dlx handling.
- Updated git, go, and cargo handling to preserve important outputs (status trees, show/stash cases, tool subcommands, metadata).
- Improved pkg and python filters to keep security/audit and pytest summaries, including location-followup lines.
- Added Ruby RSpec JSON parsing to emit condensed summaries, example sections, and exception context.
- Refined chunk selector/edit tests by asserting CRC flags directly and adjusting selector/CRC error message formatting.
- Captured inline per-segment checksums in selector parsing and preserved trailing-CRC semantics.
- Allowed multi-CRC edits to resolve when any provided checksum matched an ancestor chunk checksum.
- Added tests for multi-CRC selector parsing and ancestor-match acceptance/rejection.
- Added configurable minimizer settings to native and coding-agent APIs, including shellMinimizer options.
- Added minimizer execution plumbing through shell config, session-key generation, and buffered output capture.
- Added command identity detection and dispatching by program/subcommand with safe fallback to passthrough output.
- Added filter suites for git, docker, go, bun, cloud, and system commands to strip ANSI and compact noisy output.
- Added unit tests for detection and minimizer behavior across command support, failures, and passthrough paths.
When the Codex Responses API synthesizes an answer without emitting
url_citation annotations, previously-empty sources made cited results
look ungrounded. Add:
- tool_choice: { type: "web_search" } so Codex must call the tool
- markdown-link + bare-URL extraction from the answer as a fallback
that only runs when no structured citations were returned
The model-resolution path is unchanged; getBundledModels already
returns a usable Codex catalog on main.
Closes#724
- Register claude-opus-4-7 model entry in models.json
- Cover adaptive thinking/sampling payload shape in anthropic-alignment test
- Assert Opus 4.7 surfaces in ModelRegistry available models
- Upgrade @anthropic-ai/sdk to ^0.90 for Opus 4.7 types
- Strip sampling parameters (temperature/top_p/top_k) for Opus 4.7+
which rejects them with 400 error
- Add display: summarized to adaptive thinking for Opus 4.7+ which
omits thinking content by default
- Regenerate models.json catalog
fixes#726
The SQLite read helper is documented as a structured selector path
with explicit pagination, while raw SQL already has a separate
q=SELECT escape hatch. This change rejects SQL control syntax outside
quoted strings so helper filters cannot override LIMIT/OFFSET, while
still allowing semicolons inside quoted literals such as LIKE '%;%'.
Constraint: Preserve the documented q=SELECT raw SQL path unchanged
Rejected: Replace where= with a new filter DSL | too broad for a regression fix
Confidence: high
Scope-risk: narrow
Directive: Keep table?where=... as a structured helper; if broader SQL is needed, route it through q=SELECT instead
Tested: bun --cwd=packages/natives run build; bun --cwd=packages/coding-agent run check; bun --cwd=packages/coding-agent test test/tools/sqlite.test.ts
Not-tested: Manual interactive omp read invocation against a live SQLite file
- Added an explicit `Plugin` type import to the cost chart component.
- Updated `makeBarLabelPlugin` to return `Plugin<"bar">` for clearer Chart.js typing.
- Added detection of Git install roots from registry and where-lookup results to resolve MSYS-style path segments.
- Rebuilt PATH normalization to translate existing and added Git paths, deduplicate normalized entries, and preserve Windows entries.
- Removed the old path membership helper and added tests for MSYS translation and Windows-path handling behaviors.
Fixes#608.
- New Costs tab with bar chart (All Models) and line chart (By Model)
- Toggle between 14d / 30d / 90d time ranges, filtered client-side
- Bar chart shows cost value on top of each bar
- Line chart uses straight lines with always-visible data points
- Summary cards: total 30d cost, avg/day, top model, trend vs prior period
- Backend: getCostTimeSeries() query grouped by day x model x provider
- All cost values displayed as whole dollar amounts (Math.round)
Previously, Ollama model discovery hardcoded contextWindow=128000 and
maxTokens=8192 regardless of the model's actual capacity. That caused
OMP's planner and overflow detector to disagree with Ollama — e.g. a
4k-context model would be planned against 128k, and a 32k-context model
would be silently clamped by OMP.
For each entry returned by /api/tags, POST /api/show and read the
first '<arch>.context_length' field from 'model_info' to pick up the
model's native context window. Fall back to Ollama's default 4096
when the endpoint or field is missing so discovery still works against
older builds. maxTokens is left at 8192 to match the existing default.
Fixes#760
The previous mismatch text ('1 line has changed since last read. Use
the updated LINE#ID references shown below.') reads like a successful
edit followed by an informational note. Providers whose tool-result
plumbing does not surface `isError: true` to the model (e.g. Qwen via
the OpenAI-completions shim, where mitmproxy traces show the model only
receives the content text) treat the response as a success and proceed
with stale state.
Reword the message to start with 'Edit rejected:' and explicitly state
'The edit was NOT applied' so the failure is unambiguous in plaintext.
The structural payload (>>> markers, updated LINE#IDs) is unchanged.
Fixes#742
Mirror the existing `commands.enableClaudeUser`/`commands.enableClaudeProject`
schema entries so the OpenCode discovery provider exposes the same
user/project toggle surface as Claude. Default remains true to preserve
current behavior.
Fixes#661
The structured SQLite helper interpolates `where=` directly into SQL.
A crafted clause like `where=1=1 LIMIT 1000000 --` could comment out
the helper's bound `LIMIT ? OFFSET ?`, returning the full table in
violation of the documented pagination contract.
Validate where= at the selector boundary and reject SQL comments,
statement terminators, and pagination/attach/pragma keywords. Raw SQL
remains available via ?q=SELECT... for callers that need it.
Fixes#735
Extracts a single `formatMatchPath` helper used by both the
fast-glob/native code paths and the streaming onMatch callback so
relative paths, trailing-slash handling, and directory markers are
produced consistently. Also drops the retry-without-gitignore fallback
when the gitignored pass returns zero matches, so a broad hidden-file
pattern that is fully ignored stays fully ignored instead of silently
flipping gitignore off on the second attempt.