Commit Graph
9801 Commits
Author SHA1 Message Date
roboomp 33340f82ce fix(plugins): restored legacy commonjs compatibility
- Added DefaultPackageManager discovery compatibility for legacy extensions.

- Loaded graph-owned CommonJS modules through synchronous default bridges.

Fixes #5658
2026-07-16 05:41:35 +00:00
Christian Stewart e3aa6594e5 fix(coding-agent): disable thinking on local llama.cpp Qwen models
A Qwen-family model served through llama.cpp ships a jinja chat template that
defaults `enable_thinking: true`, but `discoverLlamaCppModels` stamped every
local model with `reasoning: false` and an empty compat, so `--thinking off`
never reached the wire and the model kept emitting a reasoning block.

Route Qwen-family ids (plus the Qwen3.6-derived PrismLM Ternary Bonsai GGUFs,
matched with a scoped pattern rather than broadening the global
`isQwenModelId`) through a shared `applyLlamaCppQwenThinking` upgrade. It gives
them `reasoning: true` with the `qwen-template-false` disable dialect and
`qwenPreserveThinking`, since omp emits `preserve_thinking` inside
`chat_template_kwargs` for Qwen, and switches them to the chat-completions API
because the implicit llama.cpp provider defaults to `openai-responses`, whose
disable path has no Qwen encoding. The runtime base URL gains a `/v1` suffix so
the completions request does not POST to the native root, which serves
`/models` and `/props` but not `/chat/completions`; a model kept on a custom
transport (e.g. `pi-native`, whose client appends `/v1/pi/stream`) retains its
base URL so the suffix is not doubled. Non-Qwen local models keep the
configured api, base URL, and minimal compat.

The upgrade is idempotent and re-applied as the outermost transform after
discovery merges, provider/transport overrides, and cache fallbacks, so a
configured native-root `baseUrl` (which wins in `mergeDiscoveredModel`) or a
fallback to a pre-fix cached row cannot leave the routed model on the old
`openai-responses` / `reasoning: false` spec. Because routed models carry a
`/v1` base URL, the runtime metadata refresh probes the native `/models`
endpoint (stripping `/v1`, matching the existing `/props` probe) so a model's
`meta`, `status.args`, and `architecture.input_modalities` fields are not lost.

Adds discovery tests pinning the resolved reasoning/api/base URL/compat for
Qwen and non-Qwen local ids, that a configured native-root provider keeps the
`/v1` runtime URL, that a pi-native-transport model keeps its gateway URL, and
that the runtime metadata refresh for a routed model stays on native `/models`.

Signed-off-by: Christian Stewart <christian@aperture.us>
2026-07-15 21:47:48 -07:00
roboomp 8b0402b32c fix(cursor): gated mounted device execution through approval
Built-in xd:// devices are mounted before the SDK wraps registry tools in ExtensionToolWrapper, so Cursor executed them via tool.execute() without the deny/prompt approval gate that write xd:// enforces. Wrap unwrapped devices in the Cursor resolver, skipping already-wrapped dynamic mounts.

Fixes #5650
2026-07-16 03:31:13 +00:00
roboomp 8386ab2c0b fix(cursor): exposed mounted xd devices to cursor-agent
Forwarded the session xd registry into Cursor provider tool contexts.

Routed Cursor MCP execution through the mounted registry fallback and added regression coverage for built-in devices and external MCP tools.

Fixes #5650
2026-07-16 03:15:32 +00:00
roboompandcan1357 ed4ddcba6c fix(session): await session.dispose() on non-interactive exit paths
Print-mode assistant-error/aborted exit, RPC pi.shutdown() and stdin-EOF
shutdowns, and the extension command-context shutdown() called
process.exit() before (or racing) session.dispose(), skipping the bounded
browser reaper (releaseTabsForOwner) installed in dispose(). An OMP-owned
Chromium could survive the parent and reparent to PID 1.

Route all four graceful paths through the idempotent, promise-memoized
session.dispose() and await it before the final exit. The RPC
performShutdown no longer emits session_shutdown directly (dispose() emits
it), avoiding a double emit.

Fixes #5643
2026-07-16 04:29:55 +02:00
can1357 1e85462cff fix: reconciled merged sources with current main APIs
- restored capability reset import in agent-session refreshSkills
- fixed renamed credential entry reference in auth-storage org fields
- aligned xai web-search fetch mock and refresh-race test with current typings
2026-07-16 03:58:41 +02:00
can1357 2c355102ce chore: applied biome formatting to merged sources 2026-07-16 03:52:48 +02:00
can1357 fd54f897f4 merged PR #5419: fix(acp): await teardown on stdio disconnect
# Conflicts:
#	packages/coding-agent/src/modes/acp/acp-mode.ts
2026-07-16 03:50:06 +02:00
can1357 3a75368b92 fix(images): preserve replay and transcript invariants 2026-07-16 03:48:59 +02:00
can1357 93cc1fed1c merged PR #5417: fix(openai): render native response images
# Conflicts:
#	packages/coding-agent/src/modes/components/chat-transcript-builder.ts
#	packages/coding-agent/test/agent-session-skill-keywords.test.ts
2026-07-16 03:48:21 +02:00
can1357 34f8eb70f0 fix(tui): honor ends during plan review reflow 2026-07-16 03:44:10 +02:00
can1357 37d38e1485 merged PR #5444: fix(tui): preserve Plan Review scroll position
# Conflicts:
#	packages/coding-agent/src/modes/components/plan-review-overlay.ts
2026-07-16 03:44:10 +02:00
can1357 7363684cb6 merged PR #5453: fix(browser): bound tab teardown waits
# Conflicts:
#	packages/coding-agent/src/tools/browser/registry.ts
#	packages/coding-agent/src/tools/browser/tab-supervisor.ts
2026-07-16 03:43:17 +02:00
can1357 5c9fa528c7 test(coding-agent): cover nested output priority 2026-07-16 03:41:51 +02:00
can1357 0533ec005f merged PR #5462: fix(coding-agent): resolve agent:// slash form for nested subagent output
# Conflicts:
#	packages/coding-agent/src/prompts/system/system-prompt.md
2026-07-16 03:41:51 +02:00
roboomp da2e630fb0 fix(irc): scope mid-park send gate to the owning lifecycle
The new isParking/has checks consulted the global lifecycle for every send, so a custom-registry IrcBus (which falls back to the global manager) could gate a live recipient on unrelated global park state for the same id. Add AgentLifecycleManager.manages(registry) and apply the mid-park/adopted gate only when the lifecycle owns this bus's registry; the parked-status path (read from the bus's own registry) is unchanged.

Fixes #5633
2026-07-16 01:40:17 +00:00
can1357 5641722ec2 merged PR #5554: fix(session): skip ssh paths during streaming edit pre-cache
# Conflicts:
#	packages/coding-agent/src/session/agent-session.ts
2026-07-16 03:35:05 +02:00
can1357 f39c1ce103 merged PR #5412: fix(tui): anchor IME candidates in interactive inputs 2026-07-16 03:32:04 +02:00
can1357 b3bf0ab4ae merged PR #5415: fix(editor): accept upstream-pi editor constructor in CustomEditor 2026-07-16 03:32:04 +02:00
can1357 056c53189e merged PR #5421: fix(tui): use Nerd Fonts v3 session icon 2026-07-16 03:32:04 +02:00
can1357 1678607617 fix(eval): preserve column truncation metadata 2026-07-16 03:32:03 +02:00
can1357 a049ed4ca7 merged PR #5422: fix(tools): stop column cap from faking window truncation 2026-07-16 03:32:03 +02:00
can1357 217678bfd8 fix(tui): discard deferred output after session changes 2026-07-16 03:32:03 +02:00
can1357 e0c717e07f merged PR #5427: fix(tui): defer command output during streaming 2026-07-16 03:32:03 +02:00
can1357 17a38cefaf fix(cli): guard scoped plugin verb aliases 2026-07-16 03:32:02 +02:00
can1357 ad036c0965 merged PR #5436: fix(cli): guard documented marketplace verbs from launch leak 2026-07-16 03:32:01 +02:00
can1357 8e80eae501 merged PR #5438: fix(tui): guard plugin tool renderer components against render crashes 2026-07-16 03:32:01 +02:00
can1357 f9cc18c45a fix(tools): skip incompatible image providers 2026-07-16 03:32:01 +02:00
can1357 a3283a157c merged PR #5443: fix(tools): prefer active image provider and fall back 2026-07-16 03:32:01 +02:00
can1357 a55e4b1a7b fix(model-resolver): preserve fuzzy literal thinking suffixes 2026-07-16 03:32:01 +02:00
can1357 0b6ce1d185 merged PR #5447: fix(model-resolver): strip thinking suffix before fuzzy model match 2026-07-16 03:32:01 +02:00
can1357 ebaed59dda fix(tui): preserve deferred alternate exit 2026-07-16 03:32:00 +02:00
can1357 2a05d36be5 merged PR #5476: fix(tui): prevent stale-buffer flicker 2026-07-16 03:32:00 +02:00
can1357 015d575231 fix(auth): preserve dialog paste routing 2026-07-16 03:31:59 +02:00
can1357 46f811bf86 merged PR #5484: fix(auth): mount login dialog input for paste-code fallback URL 2026-07-16 03:31:59 +02:00
can1357 b16aa7a815 fix(skills): refresh interactive skill commands 2026-07-16 03:31:59 +02:00
can1357 3601692c8d merged PR #5515: fix(skills): reload runtime skill state 2026-07-16 03:31:59 +02:00
can1357 8760c6367f merged PR #5574: fix(tui): stabilize streamed table scrollback 2026-07-16 03:31:59 +02:00
can1357 6356873927 fix(web-search): reuse supplied registry auth 2026-07-16 03:31:58 +02:00
can1357 c098e8679d merged PR #5601: fix(web-search): honor configured xAI transport 2026-07-16 03:31:58 +02:00
can1357 6783c3a473 merged PR #5573: fix: disable eager tool streaming for custom Anthropic endpoints 2026-07-16 03:31:57 +02:00
can1357 ac0f9f795f docs(advisor): clarify terminal blocker routing 2026-07-16 03:31:56 +02:00
can1357 b3ac21a2e1 test(advisor): cover terminal blocker continuation 2026-07-16 03:31:56 +02:00
can1357 6c45f5a63a merged PR #5631: fix(advisor): steer late blocker after terminal answer 2026-07-16 03:31:56 +02:00
can1357 61cb9cb4e3 merged PR #5562: fix(discovery): root Codex config.toml MCP command/cwd at config dir 2026-07-16 03:31:55 +02:00
can1357 dfd90b6203 merged PR #5619: fix(tui): render keyed hook statuses separately 2026-07-16 03:31:55 +02:00
roboomp ec6511524e fix(coding-agent): migrate legacy nested autoqa/todo settings keys
The v17 rename (46ad908) of dev.autoqa.consent -> dev.autoqaConsent and
todo.reminders.max -> todo.remindersMax added no case to
Settings.#migrateRawSettings, so pre-rename nested or quoted-dotted config
left the leaf beneath the parent path. The parent then resolved to an
object, making dev.autoqa truthy (isAutoQaEnabled saw Auto QA enabled) and
discarding the reminder limit.

Lift both legacy leaves onto the new keys during raw settings load via a
shared migrateNestedLeafRename helper: an explicit new key wins, a
separately configured parent boolean is preserved, an irrecoverable
object-valued parent is dropped so the schema default applies, and only the
new representation persists on save.

Fixes #5632
2026-07-16 01:23:01 +00:00
roboomp 54f4a1894f fix(registry): coordinate park/dispose with ensureLive and IRC delivery
park() detached the live session only after session.dispose() resolved,
so during the dispose window the registry still exposed ref.session at
idle status. Concurrent ensureLive()/hub-send handed out or injected into
the dying session, reporting success while the message was dropped once
detach committed.

- Replace the #parking Set guard with a #parks map of in-flight park state
  that is cancelable until the session is detached.
- park() now yields a cancel window, then detaches + flips status to
  parked BEFORE dispose(), and coalesces concurrent park calls.
- ensureLive() cancels a pre-detach park (keeps the live session) or waits
  for detach+dispose then performs one coalesced revive; never returns a
  disposing session.
- release()/dispose() drain any in-flight park; the idle re-arm skips while
  a park owns the transition.
- IrcBus.send() gates parkable recipients through ensureLive and derives
  the revived receipt from session identity, so receipts/unread counts
  reflect actual delivery.

Fixes #5633
2026-07-16 01:21:08 +00:00
DarkPhilosophy 4695db1ed6 fix(advisor): preserve YAML whitespace on CI 2026-07-16 03:31:10 +03:00
DarkPhilosophy 081ce322ef Merge remote-tracking branch 'can1357/main' into feat/advisor-per-agent-toggle 2026-07-16 02:30:12 +03:00