- Normalized agent `setSystemPrompt` to wrap string inputs into one-item arrays.
- Updated session creation to accept string `systemPrompt` values and normalize callback or direct results to string arrays.
- Adjusted extension result handling and test fixtures to accept string `systemPrompt` and missing `assistant_message` fields without crashing.
- Updated ToolExecutionComponent.isTranscriptBlockCommitStable to return true when a tool result exists, so streaming results are treated as commit-stable.
- Limited provisionalPendingPreview handling to the pending call phase so only pre-result previews remain non-committed, preventing collapsed streams from dropping their top rows.
Confirmed root cause of the CI test hang: bun --parallel spawns one isolated
worker per core, and each worker loads the 116MB pi-natives addon plus a large
JS heap. On the 16GB hosted runner that exceeds memory, triggering swap thrash
(100s+ event-loop stalls, transient file-read failures) that looks like a hang.
Capping to 2 workers keeps per-file memory recycling (isolation) while halving
peak memory so it fits the runner.
Restored the released coding-agent changelog sections that the previous pre-publish fix run flattened into Unreleased. The local checkout only had tags through v15.5.15, so fix-changelogs compared against an old tag and promoted entire newly-added release sections.
- Kept newly-added release-section hunks out of collectPromotableAddedItemLines so the fixer still promotes individual new items added under an existing released section, but does not rewrite whole release blocks.
- Added regression coverage for the release-section case.
- Restored the coding-agent changelog history and kept only the #2582 entry under Unreleased.
Fixes#2582
fix(coding-agent): avoid placeholder crash before theme init
Resolved CHANGELOG conflict: 15.13.0 was re-opened into [Unreleased] on
main, so the fix entry goes under the existing [Unreleased] Fixed section
rather than resurrecting the released 15.13.0 heading.
Two CustomEditor/streaming-preview tests timed out under bun test --parallel
because they reset+reinitialised the process-global Settings singleton in
beforeEach. 50+ other test files do the same dance, so under parallelism the
proxy points at whichever instance won the latest race rather than the one
under test (issue #2582).
- Added CustomEditor#magicKeywordsEnabledOverride: an instance-level test/host
injection that short-circuits the global lookup at the read site.
Production wiring still reads from Settings.
- Switched the magic-keyword shimmer-disabled test to set
magicKeywordsEnabledOverride directly instead of mutating the singleton.
- Removed the gratuitous reset+init from the 'streaming tool call preview
height (bounded across renderers)' describe -- bash/ssh/eval pending
previews never read settings.*; only initTheme() (idempotent) is kept.
Fixes#2582
The tts/stt suite spawns sherpa-onnx worker subprocesses that hang on the
headless CI runner (zero-output stall → SIGTERM), and the resulting event-loop
starvation tipped real-time TUI tests (streaming-preview, custom-editor shimmer,
ask timeouts) past bun's 5s default. Remove the tts/stt tests and give the
timing-sensitive tests an explicit 30s timeout.
- Added a lifecycle test case verifying executePython retries execution with a fresh kernel when the prior session kernel dies during run.
- Removed the now-redundant python-executor-session.test.ts file that defined session lifecycle tests.
Rebasing onto current main landed both the coding-agent and catalog
vLLM entries under the released [15.12.6] section. Per AGENTS.md, new
entries go under [Unreleased] and released sections are immutable, so
the release tooling would otherwise miss them.
Addresses review feedback on #2451.
Read vLLM max_model_len and OpenAI-compatible context_length metadata during model discovery, route providers.vllm.baseUrl into built-in discovery before cached models exist, and avoid sending local placeholder bearer tokens.
Scope the vLLM model cache to the discovery base URL so endpoint changes refetch immediately, and add focused regression coverage for configured and built-in vLLM discovery.
Rebasing onto main replayed the branch's changelog history across main's
diverged changelog, duplicating the RPC prompt-completion note and
injecting stray entries/headers into the released [15.12.4] section.
Reset the changelog to main's content with exactly one entry under
[Unreleased] -> Added, per AGENTS.md (released sections are immutable).
Addresses review feedback on #2432.
The rebase landed the changelog entry inside the already-released
[15.12.4] section because its #2429 anchor was moved there when that
release was cut. Relocate it to [Unreleased] -> Fixed per changelog
convention.
Addresses review feedback on #2456.
Add a proxy-discovery regression: a `context_length: 0` upstream value
must be rejected by `toPositiveNumberOrUndefined` and fall back to the
default window. Raw `??` would have pinned it at 0 (nullish coalescing
does not skip 0), so this guards the should-fix the helper was added for.
Also apply biome formatting to the discovery change (collapse the
multiline `contextWindow:` expression, drop a trailing space) and the new
tests so `biome check` passes — the PR as submitted failed the formatter.
Addresses review feedback on #2466.
The PR added its `### Fixed` entry to packages/agent/CHANGELOG.md
(@oh-my-pi/pi-agent-core), but the change lives in the coding-agent
package (packages/coding-agent/src/config/model-discovery.ts). Per
AGENTS.md the changelog entry belongs in the touched package under
`## [Unreleased]`; the rebase also wedged the misplaced entry inside the
already-released `## [15.12.6]` section. Move it to
packages/coding-agent/CHANGELOG.md and restore packages/agent unchanged.
Addresses review feedback on #2466.
Updated model discovery to use `context_length` reported by the API when available, falling back to bundled reference data and default. Added `context_length` field to parsed model response and modified context window assignment logic.
The rebase replayed the entry against its old context anchor, which has
since shipped in the released [15.11.7] section, so the new line landed
inside published release history. Relocate it under [Unreleased] / Fixed
per the changelog convention.
Addresses review feedback on #2377.