Commit Graph

16941 Commits

Author SHA1 Message Date
can1357 d2fe1b212b style: applied biome formatting to input-controller 2026-08-03 14:51:52 +02:00
can1357 9fdb989c63 docs(changelog): restored released sections and normalized unreleased entries
- Union changelog merges interleaved stale pre-17.2.5 PR-branch entries into
  released sections; released bodies are restored byte-for-byte from the
  pre-merge main state.
- [Unreleased] now carries exactly the entries for PR #7080 and the nine
  merged fixes (#7495, #7460, #7466, #7468, #7473, #7481, #7477, #7368, #7453).
2026-08-03 14:51:01 +02:00
can1357 3eb89ef4e3 Merge PR #7453: fix(pi-shell): spare host process from run-cancellation sweeps (@roboomp) 2026-08-03 14:46:24 +02:00
can1357 1b5148ed84 Merge PR #7368: fix(browser): guard cmux guest rejections (@roboomp) 2026-08-03 14:46:24 +02:00
can1357 b1d75bb55b fix(session): preserve title on first-turn branches 2026-08-03 14:46:24 +02:00
can1357 14a03d4579 Merge PR #7477: fix(session): preserve title when branching (@lemonleks) 2026-08-03 14:46:24 +02:00
can1357 d46c58b5c8 fix(tui): clear extension command image drafts 2026-08-03 14:46:24 +02:00
can1357 86a6786dd2 Merge PR #7481: fix(tui): consume extension slash commands locally (@lemonleks) 2026-08-03 14:46:23 +02:00
can1357 35ed5db9e1 Merge PR #7473: fix(catalog): use live Copilot default-tier prices (@roboomp) 2026-08-03 14:46:23 +02:00
can1357 11559395c2 Merge PR #7468: fix(catalog): add reasoning config for deepseek-v4 family in alibaba-token-plan (@21307369) 2026-08-03 14:46:23 +02:00
can1357 1fb9daa3f6 Merge PR #7466: fix(ai): guarantee ollama user turn and surface done_reason load (@roboomp) 2026-08-03 14:46:23 +02:00
can1357 dc62c5d6b4 docs(agent): separate changelog sections 2026-08-03 14:46:23 +02:00
can1357 d841569ee8 Merge PR #7460: fix(agent): distinguish parent steering from advisories (@fatihaziz) 2026-08-03 14:46:14 +02:00
can1357 3dc1c838a9 Merge PR #7495: fix(agent): keep queued non-interruptible tools alive on peer-IRC interrupt (@roboomp) 2026-08-03 14:45:40 +02:00
can1357 c48376d8f0 fix(catalog): made bedrock-mantle dynamic discovery authoritative
- Account-scoped bearer /v1/models responses now replace the static seed
  instead of merging, so models disabled for the account are not selectable.
- Extended the catalog regression to run a real online refresh and assert
  the static seeds are pruned to the fetched IDs.
2026-08-03 14:36:57 +02:00
can1357 e06ccbd907 Merge PR #7080: fix(ai): add authenticated Bedrock Mantle routing (@anatoli-tsinovoy)
# Conflicts:
#	packages/ai/src/registry/registry.ts
#	packages/catalog/scripts/generated-policies.ts
#	packages/catalog/src/models.json
2026-08-03 14:36:52 +02:00
roboomp 4997423f10 fix(agent): keep queued non-interruptible tools alive on peer-IRC interrupt
A peer-IRC interrupt (e.g. a subagent message) aborts only interruptible
waits and leaves already-running non-interruptible foreground work alone.
But runTool's `interruptState.triggered` early-return skipped every
not-yet-started tool regardless of source, so a non-interruptible tool
queued behind an interruptible wait in the same batch (a batched todo/write
after `hub wait`) was dropped with "Skipped due to pending peer interrupt".

Exclude non-interruptible tools from the early skip on the IRC path; user
and system steering still preempt all queued work.

Fixes #7493
2026-08-03 12:24:10 +00:00
Aleksandr Khaustov 276ff92afe fix(tui): consume extension slash commands locally 2026-08-03 14:02:05 +04:00
Aleksandr Khaustov efe640a161 fix(session): preserve title when branching 2026-08-03 13:27:01 +04:00
roboomp 27c1d6e8d4 fix(catalog): used live copilot default-tier prices
Applied GitHub Copilot's discovered default token-price tier to base models while preserving the provider fallback for unreported cache-write costs. Added regression coverage for GPT-5.6 Luna base and long-context pricing.

Fixes #7471
2026-08-03 08:38:14 +00:00
lsmir2 7beee683b9 fix(catalog): add reasoning config for deepseek-v4 family in alibaba-token-plan
Dynamically discovered deepseek-v4* models (e.g. deepseek-v4-flash-0731)
now receive reasoning: true and [high, max] thinking efforts via prefix
matching in the discovery mapper.
2026-08-03 15:55:14 +08:00
roboomp 2586c422ec fix(ai): guarantee ollama user turn and surface done_reason load
An agent-attributed developer turn (e.g. a plan-approval handoff into a
fresh session) maps to Ollama's `system` role, so a request whose only
non-system message is that turn carried zero `user`-role turns. Ollama
answers such a request with `done_reason: "load"`, generating nothing,
and `mapDoneReason` laundered it into a clean `stopReason: "stop"` with
zero usage — indistinguishable from a legitimate empty completion, so
every recovery layer retried the impossible request until the cap
surfaced a misleading empty-stop error.

- convertMessages now demotes the last non-prefix `system` turn to
  `user` when no user turn survives, keeping the static system-prompt
  prefix intact for prefix caching.
- mapDoneReason maps `done_reason: "load"` to `error` with an explicit
  message so it surfaces immediately instead of being retried.

Fixes #7465
2026-08-03 07:33:56 +00:00
Fatih Al-Aziz e4de9bf176 fix(agent): classify attributed custom user steering
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-03 13:32:25 +07:00
Fatih Al-Aziz 2416134cf0 fix(agent): classify next queued steering source
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-03 13:18:45 +07:00
Fatih Al-Aziz 1e448304ac Merge remote-tracking branch 'origin/main' into fix/clarify-interrupt-skip-wording 2026-08-03 13:14:07 +07:00
Fatih Al-Aziz 9574e91d46 docs(agent): note steering source distinction
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-03 13:09:32 +07:00
Fatih Al-Aziz f8cc29e8db fix(agent): distinguish parent steering from advisories
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-03 13:05:20 +07:00
Fatih Al-Aziz c61ed66dd3 fix(agent): clarify internal steering skip message
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-03 12:54:08 +07:00
can1357 5039b33a11 test(utils): skipped torn log lines in logger poll loop
- waitForLogEntry raced winston's async flush and JSON.parsed a
  partially written line, failing the error-serialization tests on
  loaded CI runners; unparseable lines now wait for the next poll.
2026-08-03 06:52:11 +02:00
can1357 f41f3f3ee1 test(read): deraced shared PDF extraction abort tests
- Aborting a caller while it was the sole extraction waiter tore the shared
  extraction down and deadlocked against the blocked conversion mock, hanging
  the CI chunk until SIGKILL.
- Sequenced owner/joiner starts and added an untilAborted spy barrier that
  waits for both waiters to attach before aborting.
2026-08-03 06:43:54 +02:00
can1357 c53b85aaf4 chore: bump version to 17.2.5 2026-08-03 05:53:12 +02:00
can1357 63b07f8ec0 chore: rewrite changelogs 2026-08-03 05:52:53 +02:00
can1357 7278f31415 Merge PR #7453: fix(pi-shell): spare host process from run-cancellation sweeps (@roboomp) 2026-08-03 05:49:04 +02:00
roboomp dc22ea5dad fix(pi-shell): kept recycled targets killable
Protect only the harness pid during cancellation sweeps. The host recorded parent pid can be stale on Windows and recycled onto the hung command; adding that raw pid to the protected set spared the cancellation target and pruned its whole subtree from cleanup.

Keep protected-subtree pruning rooted at the harness itself, which still spares its real workers while allowing the timed-out target to be reaped.

Fixes #7452
2026-08-03 03:47:32 +00:00
roboomp e5f954b0fe fix(pi-shell): prune protected subtrees from cancellation sweeps
The flattened descendant list can contain a protected node (the
harness, on a Windows PID-reuse false-descendant) together with that
node's real children, collected by recursing through it. Skipping only
the exact protected pid kept omp alive but still TerminateProcess'd its
unrelated worker/tool subprocesses.

signal_tree/terminate_tree now drop every node whose recorded parent
chain within the enumerated set passes through a protected pid, so a
false descendant of the harness can no longer drag the harness's real
children into the kill set.

Fixes #7452
2026-08-03 03:42:50 +00:00
can1357 5ad263f0a6 fix(tui): hid stripped-tool-call placeholder with tool activity
- The 'N tool calls elided' replay placeholder leaked tool activity while
  display.hideToolActivity was on; it is now a visibility-aware component
  wired into both the hotkey and /settings toggle paths.
- Added replay + live-reveal regression coverage.
2026-08-03 05:42:07 +02:00
can1357 0244e18e43 fix(extensions): refreshed formerly synchronous sources on reload walks
- A reload that drops a module's last require() edge leaves the permanent
  hooks serving it from the synchronous snapshot map, which was only
  refreshed while the path stayed flagged; an edit after the downgrade
  replayed stale bytes. Ensure now re-rewrites and refreshes the snapshot
  for every ever-synchronous path on each graph walk.
- Added the mirror reload regression (require edge dropped + source edited).
2026-08-03 05:42:07 +02:00
roboomp 25633d357d fix(pi-shell): spare host process from run-cancellation sweeps
On Windows the descendant tree used to reap a cancelled bash run is
built from raw th32ParentProcessID links that outlive their recorded
parent. A recycled pid matching the harness's stale parent pid could
surface omp itself (or an ancestor) as a false descendant, and
signal_tree TerminateProcess'd it — killing the session with no
cleanup and no session_exit record when a blocking command hit its
timeout.

Add host_protected_pids() (harness pid plus its resolvable ancestor
chain) and skip those pids in signal_tree and terminate_tree. The
guard is cross-platform: a no-op on Unix, where the descendant walk is
already identity-pinned, and the safety net that keeps a tool timeout
from ever taking down the harness on Windows.

Fixes #7452
2026-08-03 03:34:44 +00:00
can1357 03c07f89ec Merge PR #7342: feat(tui): add hidden tool activity mode (@dannyboy-ai) 2026-08-03 05:34:17 +02:00
can1357 e1ac59e5df fix(extensions): served sync-upgraded modules from earlier async load hooks
- A reload that adds a require() edge to an already-hooked ESM module never
  re-registers hooks, and the original async onLoad filter keeps matching;
  require() rejects async onLoad results, so the async hook now serves the
  pre-rewritten synchronous source inline when one exists.
- Added a same-process reload regression covering the async-to-sync upgrade.
2026-08-03 05:33:06 +02:00
can1357 c83bff390d Merge PR #7406: fix(coding-agent): restore legacy compaction exports (@roboomp) 2026-08-03 05:26:10 +02:00
can1357 ed7ea77a6b Merge PR #7405: fix(extensions): resolve compiled dependency graphs (@roboomp) 2026-08-03 05:26:10 +02:00
Daniel Anderson-Little 4471a3f26d fix(tui): purge hidden tool images 2026-08-02 23:21:17 -04:00
roboomp 8f7c7f7415 fix(coding-agent): honor vision role thinking effort in inspect_image
inspect_image resolved @vision with resolveModelFromString, which dropped the
:high thinking selector, and passed no reasoning to the oneshot. The
google-gemini-cli mapper then emitted thinkingBudget: 0, which thinking-only
Gemini models reject with HTTP 400. Resolve the role's explicit thinking
selector, clamp it to the model's supported efforts, and forward it as the
oneshot reasoning.

Fixes #7448
2026-08-03 05:16:14 +02:00
can1357 4b8c19366d Merge PR #7437: fix(edit): prevent fuzzy replace-all self-matching (@roboomp) 2026-08-03 05:15:03 +02:00
can1357 a95476bad6 Merge PR #7441: fix(mcp): expand env vars in reauth OAuth credentials and reject empty tokens (@roboomp) 2026-08-03 05:15:03 +02:00
can1357 b8c81e195f Merge PR #7444: fix(coding-agent): keep completed session entries durable across crashes (@olegpulatov) 2026-08-03 05:15:02 +02:00
can1357 2c370ae524 Merge PR #7447: fix(openai): preserve Codex native image results (@roboomp) 2026-08-03 05:15:02 +02:00
can1357 a58584ff3c feat: implemented shared serialization utilities and standardized inventories
- Added shared Python call and literal serialization utilities with multiline verbatim support.
- Standardized tool inventories to format as an OpenAI-Harmony functions namespace using TypeScript declarations.
- Updated tool normalization and rendering functions to accept options objects and default to Python-syntax examples.
- Refactored Gemini dialect rendering to leverage shared serialization functions directly.
2026-08-03 05:06:49 +02:00
Daniel Anderson-Little 4801bff2a0 docs: document hidden tool activity 2026-08-02 22:59:48 -04:00