- Updated the `fix` script to run `fix:changelogs` alongside existing fix tasks.
- Updated the `fix:all` script to run `fix:changelogs` with the other full-fix commands.
- model-resolver: removed three resolveAgentModelPatterns cases that pinned exact
priority.json model names (gpt-5.4 / gemini-3 designer list); priority.json now
leads slow with gpt-5.5 and includes gemini-3.5-flash, so the hardcoded lists
were stale. The remaining cases still cover cross-role alias inheritance and
configured-override precedence.
- settings-selector: removed the condition-hidden group-title assertion that
depended on the pre-autolearn memory-tab group layout.
Hardcoding device index `:0` grabbed whatever avfoundation enumerated first
(often a camera or the wrong input), so recording could capture silence or the
wrong source. Both the single-shot and streaming ffmpeg recorder paths now
request the system default input device.
Treated SearXNG HTTP 200 responses with no usable sources and upstream engine failures as transient provider errors. Added a generic renderable-content guard so provider fallback continues instead of returning an invisible success.\n\nFixes #2571
- Tracked snapshot-safe boundaries to retain commit-stable streamed rows in scrollback.
- Computed durableBoundary from commit and snapshot ends to prevent row drop regressions.
- Updated audit-row handling so drifting durable rows were excluded from resync checks.
- Added regression tests for commit-stable and commit-unstable relayout streaming cases.
- Remove the stale pre-refinement LaTeX entry left behind when the refined
#2550 changelog line was applied over the original.
- Add [Unreleased] entries for the two merged farm fixes that shipped without
one: mnemopi legacy-bank recall isolation (#2412) and slash-command alias
dedup in the prompt-template autocomplete picker.
- agent-loop: raise repetition-detection floor to 180 chars and clear thinking
replay anchors when collapsing a detected loop.
- providers/google: ignore empty text parts, retain terminal thoughtSignatures,
and stop function-call signatures clobbering the prior block.
- autolearn: capture goal-mode at the turn boundary; harden managed-skill writes
against hard-links/symlinks (O_NOFOLLOW + nlink); refuse minting managed skills
whose name an authored skill already claims.
- eager tasks: thread agentKind through the session so a custom top-level agentId
still gets always-mode delegation; split Eager Tasks prompt into hard vs soft.
- title-generator: race the online title model against a local tiny-model fallback.
- eager-todo: keep the soft reminder aligned with the todo init schema.
- mcp/stdio: keep close() detaching the read loop instead of awaiting it.
- stream loop: fix collapsing and tool-call thought-signature handling.
- Added unified `omp setup speech` flow with JSON/check modes and model picker.
- Added local STT pipeline with sherpa workers, recorder/download flow, and streaming inference.
- Added local TTS pipeline with `omp say`, backend selection, and streaming vocalization.
- Replaced legacy speech settings with unified `speech`/`speechgen` configuration keys.
Redirected legacy pi-ai utils/oauth subpaths through the compatibility loader so background workers load the relocated OAuth registry modules.\n\nFixes #2566
Added a root-level test:scripts script for scripts/ci-concurrency.test.ts and chained it from test:ts so the GitHub Actions Test & smoke (TS) job runs the release-concurrency regression after workspace TypeScript tests pass.
Verified bun run test:scripts passes. bun run test:ts reaches the existing workspace suite first and currently fails before the new tail command on unrelated pre-existing package tests (pi-mnemopi optional embedding load, pi-coding-agent GitHub worktree/retry-cap cases).
The workflow-wide concurrency group was `${{ github.workflow }}-${{ github.ref }}`
with `cancel-in-progress: true`, so the release-script's atomic
`refs/heads/main + v* tag` push shared the `CI-refs/heads/main` group with every
later main push. The newer run cancelled the older release run before
`release_binary` / `release_github` / `release_npm` could execute, and no
future run carried the tag at HEAD, so the tag stayed published-as-a-ref but
unreleased on GitHub and npm (v15.12.6 in the wild).
Release runs are now routed to a per-sha group with `cancel-in-progress: false`
when either:
* the push subject starts with `chore: bump version to ` (the release-script
commit convention from scripts/release.ts), or
* `github.ref` is a `v*` tag (workflow_dispatch recovery from a tag ref).
Other events keep the cheap branch-wide cancel-in-progress for PR/main churn.
release.ts's retry hint now uses the same release commit subject so manual
retries also land in the per-sha group.
Added scripts/ci-concurrency.test.ts: a regression test with a minimal GHA
expression evaluator that asserts the resolved group / cancel-in-progress for
auto-release pushes, retry pushes, tag-ref dispatches, plain main pushes, PRs,
distinct release shas, and a benign `revert: chore: bump version to ...`
follow-up.
Fixes#2564
Removed schema-incompatible task metadata instructions from the eager todo prelude so GPT-5.5 can satisfy the forced initial todo call.
Added regression coverage that keeps the eager init prompt aligned with the todo init schema.
Fixes#2561
Removed stale per-version native cache directories after successful addon loads so updates do not leave old ~/.omp/natives/<version> trees behind.
Added a focused loader regression test for keeping the current version directory and non-directory files while removing stale version folders.
Fixes#2560
Followed AGENTS.md by importing the catalog model-spec types from @oh-my-pi/pi-catalog/types in the issue #2558 regression. The Context/Tool/TJsonSchema signatures used by streamAnthropic still come from pi-ai.