Commit Graph

7541 Commits

Author SHA1 Message Date
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 aff195a91c fix(advisor): arm immune window only when a turn is steered
`#recordAdvisorInterruptDelivered()` ran before the plan-mode and ACP-defer
preserve branches, so a blocker that was merely preserved (never interrupting
or starting a turn) still armed the post-interrupt immune window. With the
default `advisor.immuneTurns = 3`, the next three turns' concerns/blockers
were then downgraded to skip-idle-flush asides and could again be deferred.

Move the cooldown arm below every preserve branch so it fires only on the
actual steer/trigger path.

Fixes #5628
2026-07-15 23:26:03 +00:00
roboomp 581bfed6b5 fix(advisor): preserve terminal blocker when ACP defers agent turns
An idle ACP session sets `deferAgentInitiatedTurns`, so a steered terminal
blocker routed through `sendCustomMessage({ triggerTurn: true })` was buried
in `#pendingNextTurnMessages` instead of starting a turn — invisible and
deferred to the next user prompt, the exact regression #5628 avoids.

`#routeAdvice` now preserves the blocker as a visible card when a turn cannot
auto-trigger (idle + ACP defer without an explicit allow), folding the
existing plan-mode preserve branch into the same guard.

Fixes #5628
2026-07-15 23:20:35 +00:00
roboomp 54df76be81 fix(advisor): steer late blocker after terminal answer
A late interrupting advisor note delivered after the primary ended with a
terminal text answer (no queued work) was routed to `preserve` for every
severity, so a `blocker` flagging a mistake in the final output became a
passive card that the model ignored until the next user turn.

Scope the terminal-answer preserve rule to non-blocker severities: a
`blocker` now steers a triggered turn so the primary acknowledges and
continues before the turn is considered done, while a late `concern` still
preserves as a visible card (keeps the #4840 no-duplicate-completion path).

Fixes #5628
2026-07-15 23:12:42 +00:00
roboomp f512d99614 fix(tool): strip leading colon before Windows path shapes
expandPath's leading-colon strip only fired before POSIX prefixes
(`/`, `~/`, `./`, `../`), so Windows-mangled inputs like `:C:\repo\file`
or `:.\src` slipped through and path.resolve treated them as relative
children of cwd. The omp grep subcommand is the Windows grep path, so it
hit the common Windows form of the same bug.

Broaden the lookahead to admit `\` separators, `.\`/`..\` relatives, and
drive-letter absolutes (`[A-Za-z]:`). Add expandPath regression tests
for the Windows forms and the bare-token non-strip cases.

Fixes #5624
2026-07-15 22:25:44 +00:00
roboomp e291d77cb0 fix(tool): routed omp grep CLI path through expandPath
The `omp grep` subcommand resolved its path argument with a bare
`path.resolve` in `runGrepCommand`, bypassing `expandPath`. The
leading-colon strip from #5529 never fired, so `:/abs/path` was
mangled into `<cwd>/:/abs/path` and failed to resolve.

Route the path arg through `expandPath` so it inherits the leading-`:`
strip plus `@`-prefix, tilde, and unicode-space normalizations, matching
`read`/`edit`/in-agent `grep`.

Fixes #5624
2026-07-15 22:17:35 +00:00
roboomp 34b4598918 fix(tui): rendered keyed hook statuses separately
Rendered each keyed extension status on an independently truncated line while preserving deterministic key ordering.

Added narrow-width regression coverage for multiple extension status keys.

Fixes #5617
2026-07-15 21:07:05 +00:00
roboomp 188985eb0f fix(models): isolated provider header defaults
- Resolved provider headers only from static and runtime provider overrides.
- Kept unrelated per-model header overrides out of native tool requests.
- Added regression coverage for xAI model-scoped tenant headers.

Fixes #5599
2026-07-15 17:53:47 +00:00
can1357 d25d9300ed chore: fixed remaining stale tests after prompt and session api changes
- coordination advisory now points at hub, not irc
- eval description renders 'Allowed:' list instead of removed default-agent prose
- task description no longer renders spawn-policy text; assert agent-list filtering instead
- issue-2750 mock session gained getEnabledToolNames (renamed session api)
2026-07-15 19:50:46 +02:00
roboomp 91b67c7b0f fix(web-search): honored configured xai transport
- Routed native xAI Responses search through configured provider base URLs and headers.
- Kept endpoint credentials coupled and rejected official OAuth tokens for custom endpoints.
- Added proxy routing and credential-leak regression coverage.

Fixes #5599
2026-07-15 17:44:30 +00:00
can1357 c2a659df34 chore: fix stale tests 2026-07-15 19:16:41 +02:00
can1357 46ad908245 fix(coding-agent): renamed settings keys to avoid nested-value lookup collisions
- Updated schema and runtime paths to use `dev.autoqaConsent` and `todo.remindersMax`, including auto-QA consent reads/persistence and todo reminder limit checks.
- Adjusted settings expectations so obsolete BM25-discovery keys were dropped on load and `tools.xdev` now kept its default unless explicitly set.
- Added/updated tests for the setting key migration and refreshed issue-consent flows, plus a new `refreshMCPTools` test for steered `xdev-mount-notice` updates without prompt rebuilds.
2026-07-15 19:08:37 +02:00
can1357 bf3764fa4d feat(coding-agent): stabilize system-prompt cache across xd:// mount changes via delta notices
Instead of including the xd:// device inventory in the system-prompt signature, mount/unmount events now inject a steered `xdev-mount-notice` message so the system prompt (and its provider cache prefix) stays byte-stable across MCP connects and disconnects. Full device docs are picked up opportunistically on the next unrelated rebuild.

Also caps external (dynamic-mount) device descriptions to 200 chars in `docsAll` to prevent server-controlled prose from consuming prompt budget; built-ins keep their full curated docs, and `read xd://` always returns the untruncated text.

Legacy `discoveryMode: "off"` → `tools.xdev: false` migration is removed; the setting keeps its own default without inference from the deprecated key.
2026-07-15 19:07:31 +02:00
can1357 9afedb591e feat(coding-agent): added opt-in task prewalk and tightened --tools and xdev behavior
- Added a `task.prewalk` option (default `false`), removed default task `prewalk` flags, and updated prewalk resolution so bunded generic task execution only prewalks when explicitly enabled.
- Enforced strict `--tools` validation in CLI parsing, making unknown tool names fail fast with `CliUsageError` instead of being silently filtered.
- Migrated legacy discovery settings (`tools.discoveryMode`, `tools.essentialOverride`, MCP discovery keys) into updated `tools.xdev` handling with preserved explicit override behavior.
- Hardened xdev/ACP execution flow by capping `docsAll` payloads with overflow listing and remapping `xd://` dispatches/approval gating for correct execute/read behavior and reduced duplicate prompts.
2026-07-15 18:39:36 +02:00
can1357 4da1bbf9ea Merge remote-tracking branch 'origin/farm/80b5de49/plan-mode-reentry-anchor-new-request' 2026-07-15 15:34:06 +02:00
can1357 84d873f2ca Merge remote-tracking branch 'origin/farm/ceed3a6a/compiled-appserver-extension-exit' 2026-07-15 15:31:51 +02:00
can1357 5ff277349c refactor(coding-agent): consolidated tool surface onto xd:// devices and hub
- Added the `xd://` virtual device protocol (`internal-urls/xd-protocol.ts`, `tools/xdev.ts`): tools declaring `loadMode: "discoverable"` are unmounted from the request tools array and driven via `read xd://` (list/docs+schema) and `write xd://<tool>` (execute), gated by the `tools.xdev` setting (default on) and inlined into the system prompt.
- Merged the `irc`, `job`, and `launch` tools into a single `hub` tool (`tools/hub/`, `async/job-manager.ts`): messaging keeps `send`/`inbox`/`list`, job control maps to `wait`/`cancel`/`jobs`, process supervision keeps `start`/`logs`/`stop`/`restart`/`describe` with `ps`, and the unified `wait` races background jobs against peer messages; SDK `IrcTool`/`JobTool`/`LaunchTool` are replaced by `HubTool`.
- Removed the hidden `resolve` tool in favor of the `xd://resolve`/`xd://reject`/`xd://propose` resolution devices, auto-including `write` whenever a deferrable tool or plan mode is present.
- Removed the BM25 tool-discovery system: the `search_tool_bm25` tool, the `tool-discovery` module, the `tools.discoveryMode`/`mcp.discoveryMode`/`mcp.discoveryDefaultServers`/`tools.essentialOverride` settings, per-tool MCP selection, and the `mcp_tool_selection` message type.
- Unified tool presentation on `ToolLoadMode` (`essential`|`discoverable`), replacing the custom-tool `xdev?: boolean` opt-out; custom, extension, MCP, RPC host, image-generation, and TTS tools now default to `discoverable`, and added a `satisfies` predicate to `SoftToolRequirement`.
- Removed the standalone `ssh` command tool and `ssh/ssh-executor` (the `ssh://` read/write/search protocol stays), and made `--tools` address hidden built-ins.
- Updated collab-web to render `xd://` dispatches and `hub` op families, dropped the `search_tool_bm25`/`ssh`/`report-finding` renderers, refreshed tool docs and prompts, and migrated the affected tests and changelogs.
2026-07-15 15:16:29 +02:00
can1357 f75c97773d fix(coding-agent): renamed project-context wrapper to <repo-rules>
- Renamed the system prompt's project-context section wrapper from `<context>` to `<repo-rules>` in `project-prompt.md`, so it no longer collides with the `task` tool's `context` parameter under in-band XML tool dialects.
- Updated `snapcompact-inline`'s context-section strip pattern to match `<repo-rules>`.
- Updated the `snapcompact-inline` test fixture to the new wrapper.
- Changelog entry for this rename rides with the fused device-migration commit (adjacent changelog lines).
2026-07-15 15:15:46 +02:00
can1357 d50cc4e2d3 feat(coding-agent): made hashline seen-line guard opt-in via edit.enforceSeenLines
- Added the `enforceSeenLines` option to hashline `PatcherOptions` (defaults `true`); the seen-line guard in `Patcher` now runs only when enabled.
- Added the `edit.enforceSeenLines` coding-agent setting (default off) and wired it through `edit/hashline/execute.ts` into the `Patcher`.
- Stopped `file-snapshot-store` excluding column-clipped (>512-char) lines from a snapshot's seen set, so single-line edits on long lines apply without a full-width re-read.
- Updated `seen-line-guard` tests and the hashline/coding-agent changelogs.
2026-07-15 15:15:08 +02:00
roboomp faf4890b08 fix(plan-mode): anchored re-entry on the new request
The re-entry system prompt led with "Read the existing plan" and its
"different task -> overwrite it" step contradicted the planExists guidance
("leave that plan in place and start a fresh file"). Weak models fixated on
reconciling the incomplete old plan and dropped the new request entirely.

- Rewrote the Re-entry procedure in plan-mode-active.md to treat the new
  request as the primary input and the old plan as reference only, and to
  fold corrections for unfinished old work INTO the new plan rather than
  substituting them for the new request.
- Aligned the "different task" branch with the planExists section (fresh
  file, no overwrite), removing the contradiction.
- Added reentry-prompt.test.ts asserting the anchoring contract and the
  absence of the contradiction.

Fixes #5576
2026-07-15 12:35:54 +00:00
can1357 b52c798025 feat(coding-agent/discovery): set builtin discovery rules to interruptMode never
- Added `interruptMode: never` to all updated Go, Rust, and TypeScript built-in discovery rule files.
- Changed `ts-no-inline-cast-access.md` from `interruptMode: tool-only` to `interruptMode: never`.
2026-07-15 14:34:38 +02:00
pppobear f9459bf462 fix(tui): stabilize streamed table scrollback 2026-07-15 20:13:09 +08:00
can1357 71f29e17c9 fix(coding-agent): kept cleanup tail out of plan-mode execution specs
- Added a `plan-mode-active.md` directive barring changelog/release notes, doc updates, formatter/linter runs, and scaffolding removal as plan steps, so plan mode stops enumerating the mechanical cleanup tail that runs automatically after the change works.
- Clarified that behavior-defining tests and the end-to-end proof stay in the **Verification** section rather than being dropped as cleanup.
2026-07-15 13:23:17 +02:00
roboomp 4b3ec660f3 fix(catalog): disabled eager streaming for custom anthropic
Defaulted eager tool input streaming to the canonical Anthropic API while allowing explicit models.yml opt-in for compatible proxies.

Fixes #5572
2026-07-15 11:20:12 +00:00
can1357 f3aad14ee9 fix(tui): restored compact editor border by default
- Restored the compact two-row `Editor` layout by default and gated the dedicated IME-safe bottom border behind `setImeSafeCursorLayout()`.
- Added `tui.imeSafeCursor` as an opt-in appearance setting and applied it to initial and replacement editors.
- Added regression coverage for compact default rendering while retaining terminal-local IME preedit protection.
- Updated the TUI changelog for the opt-in compatibility layout.
2026-07-15 13:16:07 +02:00
roboomp 24960899ac fix(coding-agent): lazily loaded compiled extension modules
Generated per-module loaders instead of eagerly evaluating the entire bundled compatibility graph during extension bootstrap.

This prevents appserver startup from cycling through its own retained command modules before the Unix socket is created.

Fixes #5568
2026-07-15 10:54:13 +00:00
roboomp 09d2d2db33 fix(export): rendered inline markdown in list items
- Parsed nested marked text tokens through the inline parser.
- Added browser-template regression coverage for ordered, unordered, and nested lists.

Fixes #5567
2026-07-15 10:45:50 +00:00
roboomp 0d0df064e0 fix(discovery): gated cwd-based command rooting to codex importer
The previous follow-up rooted path-like commands at the resolved cwd in
the shared resolvePluginStdioPaths helper, which regressed plugin
.mcp.json semantics: plugin commands are relative to the plugin package
root, so a plugin shipping ./bin/server with cwd="work" would resolve to
<pkg>/work/bin/server and ENOENT. Add a commandBase parameter defaulting
to "config-dir" (the plugin contract) and pass "cwd" only from the Codex
importer, where the OS resolves the relative command against the spawned
process cwd.

Fixes #5561
2026-07-15 10:05:08 +00:00
roboomp e88c45f063 fix(discovery): resolved plugin stdio command against rooted cwd
resolvePluginStdioPaths resolved a path-like command against the config
directory unconditionally, but the stdio transport spawns the subprocess
with the rooted cwd as its process cwd, so the OS resolves a relative
command from there. For cwd="server", command="./bin/mcp" that meant OMP
looked for <configDir>/bin/mcp instead of <configDir>/server/bin/mcp.
Root cwd first, then resolve path-like commands from that rooted cwd,
falling back to configDir only when no cwd is set.

Fixes #5561
2026-07-15 09:56:18 +00:00
roboomp d6683c351a fix(discovery): rooted codex toml mcp command/cwd at config dir
The Codex config.toml importer copied only command/args/url into the
returned MCPServer, dropping cwd and leaving relative command values
verbatim. MCP stdio spawning resolved those against the session cwd, so
the bundled Codex Computer Use server (relative command, cwd = ".") failed
with ENOENT. Route command/cwd through resolvePluginStdioPaths against the
config directory, matching the claude-plugins/omp-plugins fix in #5481.

Fixes #5561
2026-07-15 09:43:46 +00:00
can1357 2134526b7d Merge remote-tracking branch 'origin/farm/f9161653/fix-prewalk-completion-loop' 2026-07-15 11:16:53 +02:00