Commit Graph

977 Commits

Author SHA1 Message Date
can1357 7b21704a72 merge PR #5772 via eval/pr-5772: fix(codex): force tool_choice auto on responses-lite requests 2026-07-17 04:42:11 +02:00
can1357 c1fc297f3f merge PR #5763 via eval/pr-5763: fix(web-search): scoped kimi search to kimi code credentials 2026-07-17 04:42:10 +02:00
can1357 05e1314bd9 merge PR #5760 via eval/pr-5760: fix(coding-agent): restored xdev for explicit tool sessions
Resolved plan-mode exit overlap with #5662 (kept restore/rollback
structure, routed pending-switch clearing through
clearPendingPlanModelSwitch) and unioned additive test blocks with
#5672/#5662.
2026-07-17 04:42:10 +02:00
can1357 046dea349d merge PR #5746 via eval/pr-5746: fix(lsp): returned null for missing configuration 2026-07-17 04:40:04 +02:00
can1357 6d4d132c35 merge PR #5709 via eval/pr-5709: fix(coding-agent/launch): handle EISDIR from realpath on drive roots 2026-07-17 04:39:15 +02:00
can1357 96a59fa2ad merge PR #5682 via eval/pr-5682: fix(tools): fix hub tools env selection 2026-07-17 04:37:12 +02:00
can1357 2620c18c47 merge PR #5637 via eval/pr-5637: fix(irc): scope mid-park send gate to the owning lifecycle 2026-07-17 04:37:09 +02:00
can1357 4ded610d38 merge PR #5500 via eval/pr-5500: fix(review): fall back to per-file API when PR diff exceeds 20k lines 2026-07-17 04:37:08 +02:00
can1357 f3f5745200 fix(review): guard per-file diff fallback limits 2026-07-17 04:16:46 +02:00
can1357 a86fbaa8d1 fix(launch): preserve compatible PTY shells 2026-07-17 04:10:15 +02:00
can1357 6a5fd45480 test(web-search): preserve Kimi search env 2026-07-17 03:57:57 +02:00
roboomp f961d824bf fix(codex): force tool_choice auto on responses-lite requests
The Responses-Lite rewrite moves tools into an `additional_tools` developer
input and deletes top-level `tools`, but preserved a forced top-level
`tool_choice` (e.g. `{ type: "web_search" }`). With no top-level tools to
validate against, the ChatGPT Codex endpoint rejected the request with
`HTTP 400 Tool choice '…' not found in 'tools' parameter`, and web search
silently fell back to Gemini.

`applyCodexResponsesLiteShape` now sets `tool_choice: "auto"`, matching
codex-rs `build_responses_request`. Classic (non-Lite) Responses requests
keep their forced choice since top-level `tools` remains present.

Fixes #5771
2026-07-16 23:42:30 +00:00
roboomp acff852022 fix(web-search): scoped kimi search to kimi code credentials
The Kimi web-search adapter posts to the Kimi Code endpoint
(api.kimi.com/coding/v1/search) but resolved and advertised Moonshot
Open Platform credentials (moonshot provider, MOONSHOT_API_KEY,
api.moonshot.ai). Those are a different credential system, so a valid
Open Platform key was rejected with 401 and the preferred provider
silently fell back to another engine.

resolveKey() and isAvailable() now use kimi-code credentials only
(explicit MOONSHOT_SEARCH_API_KEY / KIMI_SEARCH_API_KEY overrides or a
stored kimi-code login), and the missing-credential error and provider
metadata name the Kimi Code requirement.

Fixes #5762
2026-07-16 22:39:01 +00:00
Victor Araújo 323ef8ec73 fix(coding-agent): restored xdev for explicit tools 2026-07-16 18:41:58 -03:00
roboomp c6e9763068 fix(lsp): returned null for missing configuration
Answered unconfigured workspace/configuration sections with the spec-required null value and covered the Roslyn post-initialization pull path.

Fixes #5745
2026-07-16 19:55:50 +00:00
roboomp eb149d1b0a fix(coding-agent/launch): handle EISDIR from realpath on drive roots
fs.realpath throws EISDIR on Windows drive roots (e.g. R:\), but
canonicalProjectDir in launch/presence.ts and launch/client.ts only
recovered ENOENT, aborting startup. Both now fall back to path.resolve()
on EISDIR, matching the existing ENOENT handling.

Fixes #5708
2026-07-16 13:55:22 +00:00
can1357 1df790a5d2 Revert "fix(agent-loop): discard incomplete sibling tool calls"
This reverts commit 7a2e34988b.
2026-07-16 04:08:59 +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 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
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 1678607617 fix(eval): preserve column truncation metadata 2026-07-16 03:32:03 +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 5c58641e54 test(coding-agent): isolate header fallback regression 2026-07-16 03:32:00 +02:00
can1357 46446624a0 merged PR #5452: test(coding-agent): guard compiled header fallback regression 2026-07-16 03:32:00 +02:00
can1357 f669376670 merged PR #5473: fix(browser): use debugCatchError in stealth acquire paths 2026-07-16 03:32:00 +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
roboomp 2a21194bbb test(irc): replaced manual dispose promise gates
Replaced all three newly added manual Promise constructors with Promise.withResolvers<void>(), matching the package promise convention without changing the race coverage.

Fixes #5633
2026-07-16 01:28:34 +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
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 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 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 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 af1832af1b feat(coding-agent/prompts): refined tool prompts for shell, browser, and eval workflows
- Simplified `bash` guidance to tighten allowed command patterns, pipeline limits, and launch-based process handling.
- Reworked `browser` instructions into grouped helper sections while preserving selector restrictions and key action semantics.
- Harmonized `eval`, `irc`, `read`, and `todo` prompt wording around state reuse, messaging, selector formats, and task operations.
2026-07-15 03:28:21 +02:00
can1357 425e583ae0 feat(coding-agent): added support for task-agent field and model resolution
- Added schema and type updates for task-agent fields and model resolver settings.
- Extended discovery helper logic to carry resolved task-agent metadata through execution setup.
- Updated task/agent registration and execution paths to use the new capability/field data.
- Expanded test coverage for agent-field parsing, model resolution, and executor prewalk behavior.
2026-07-15 00:50:55 +02:00
roboomp ea320d745b fix(bash): resolved nested internal URLs
- Tracked quote context independently inside command substitutions.
- Covered unquoted skill URLs nested under outer double quotes.

Fixes #5535
2026-07-14 22:21:53 +00:00
can1357 a9c038818d feat(tools): removed separate selector args from read and grep APIs
- Removed `selector`/`sel` arguments from read and grep tool schemas and related execution arg handling.
- Reworked read and grep path processing to parse line selectors from `path` suffixes instead of separate fields, including inline range propagation.
- Updated delegation and execution call paths (including JS/Python preludes and executor tests) to pass selectors embedded in `path`.
- Updated read/grep prompt docs and changelog for the breaking inline-selector API, and removed obsolete selector-specific tests and expectations.
2026-07-15 00:04:02 +02:00
can1357 ad396fb8fe Merge PR #5529: fix(tools): strip stray leading colon from tool paths (@roboomp) 2026-07-14 23:11:12 +02:00
can1357 5447312c5f Merge PR #5498: fix(tools): accept empty GitHub search date placeholders (@roboomp) 2026-07-14 23:11:12 +02:00
can1357 6b381eb765 Merge PR #5451: fix(eval): honor timeout zero and classify session deadlines (@roboomp) 2026-07-14 22:58:49 +02:00
can1357 6f8a3ab94a Merge PR #5458: fix(browser): bound headless browser close to unblock tab cleanup (@roboomp) 2026-07-14 22:58:47 +02:00
roboomp e0e24efaf6 fix(tools): strip stray leading colon from tool paths
Some models intermittently prefix an otherwise-valid path with a leading
`:` (e.g. `:/abs/path`, `:../rel`). read/edit/grep hard-failed because
resolveToCwd left the colon intact and resolution missed the real file.
The #4618 literal-preferring probe cannot recover it: the literal
`:/abs/path` does not exist on disk, so the peel proceeds to an empty
path.

Strip the mangled prefix in expandPath — the shared resolution funnel for
read (resolveReadPath), grep (resolveToolSearchScope), and edit
(resolvePlanPath) — mirroring the existing @-prefix normalization. The
lookahead only fires before `/`, `~/`, `./`, or `../`, so selector-shaped
tokens like `:raw` are untouched.

Fixes #5508
2026-07-14 20:41:45 +00:00
roboomp 56fb4c0145 fix(tools): recover from active OpenAI image HTTP failure
Threw ProviderHttpError from generateOpenAIHostedImage so a failing active OpenAI/Codex image call records the failure and continues the provider fallback chain instead of aborting the tool call.

Fixes #5218
2026-07-14 20:16:37 +00:00
roboomp cad30f8c29 fix(review): fall back to per-file API when PR diff exceeds 20k lines
GitHub rejects the aggregate PR diff endpoint with HTTP 406 once the diff
exceeds 20,000 lines, which made `fetchPrDiffFresh` throw and aborted the
entire /review workflow. Detect the 406 (diff-too-large) specifically and
fall back to the paginated per-file endpoint, reassembling a synthetic
unified diff. Files whose patch is omitted (binary or too large) stay
visible with an explicit marker instead of being dropped.

Fixes #5350
2026-07-14 19:25:02 +00:00
roboomp de72e15fa8 fix(tools): accepted empty GitHub search date placeholders
Normalized optional since and until values before enforcing code-search date restrictions.

Covered empty placeholders, real date bounds, and successful validated searches.

Fixes #5370
2026-07-14 19:19:09 +00:00