Commit Graph
7032 Commits
Author SHA1 Message Date
can1357 350b85e26c test(coding-agent): drop unrelated schema repro churn 2026-08-05 01:12:02 +02:00
can1357 94c838faea Merge PR #7539: fix(coding-agent): complete usage-aware fallback integration (@eggpeat) 2026-08-05 01:12:02 +02:00
can1357 6da9460dff Merge PR #7488: fix(task): bound abort cleanup and quarantine late jobs (@metaphorics) 2026-08-05 01:12:02 +02:00
can1357 ae1c9c981d test(coding-agent): make coalescing tests deterministic 2026-08-05 01:12:02 +02:00
can1357 783739e618 Merge PR #7542: fix(coding-agent): coalesce streaming message_update handler work per render window (#7443) (@szavadsky) 2026-08-05 01:12:01 +02:00
can1357 18e6df18a6 Merge PR #7621: fix(coding-agent/eval): remove per-call model override from agent() (@szavadsky) 2026-08-05 01:12:01 +02:00
can1357 d53d5c0035 fix(coding-agent): scope hindsight memory errors to caller 2026-08-05 01:12:01 +02:00
can1357 403535d2a9 Merge PR #7588: fix(coding-agent): corrective memory:// error under hindsight backend (@roboomp) 2026-08-05 01:12:01 +02:00
can1357 d48977f380 Merge PR #7570: fix(coding-agent/hindsight): route recall through single injection path (@roboomp) 2026-08-05 01:12:00 +02:00
can1357 975d0a2e9d Merge PR #7501: fix(agent): classify thinking-only unexpected stops (@roboomp) 2026-08-05 01:12:00 +02:00
can1357 0cf5d55ac0 Merge PR #7629: fix(coding-agent): retry buffered print streams (@roboomp) 2026-08-05 01:12:00 +02:00
can1357 43666b3b1a fix(cli): follow promise resolver convention 2026-08-05 01:11:59 +02:00
can1357 e4684325a3 Merge PR #7637: fix(cli): flush final json record before print-mode exit (@roboomp) 2026-08-05 01:11:59 +02:00
can1357 130d3318c8 test(coding-agent): update observer registry stubs 2026-08-05 01:11:59 +02:00
can1357 772fe8fa6e Merge PR #7500: perf(agent-hub): bound roster rendering to viewport (@hancens1024) 2026-08-05 01:11:59 +02:00
can1357 b0984cd25c Merge PR #7598: fix(coding-agent): split semicolon path lists that trip ENAMETOOLONG (@roboomp) 2026-08-05 01:11:59 +02:00
can1357 abc628b63c fix(read): expose artifact source line totals 2026-08-05 01:11:59 +02:00
can1357 a0f203bfd4 Merge PR #7592: fix(cursor): correct inline read range metadata (@roboomp) 2026-08-05 01:11:58 +02:00
can1357 e50b989e45 Merge PR #7654: fix(mcp): propagate enabled flag from translated tool configs (@roboomp) 2026-08-05 01:11:57 +02:00
can1357 511b200bc5 Merge PR #7584: fix(config): read server input modalities in openai-models-list discovery (@roboomp) 2026-08-05 01:11:57 +02:00
can1357 4da44c5492 Merge PR #7604: fix(browser): honor explicit Chromium executable override (@roboomp) 2026-08-05 01:11:57 +02:00
can1357 c14bd77707 Merge PR #7611: fix(coding-agent): restore legacy convertToPng export (@roboomp) 2026-08-05 01:11:57 +02:00
can1357 2605243f38 fix: complete version comparator centralization 2026-08-05 01:11:56 +02:00
can1357 ca71858545 Merge PR #7497: fix(tool): exempt piped-stdin stages from bash interceptor (@roboomp) 2026-08-05 01:11:55 +02:00
can1357 13d9a09999 Merge PR #7612: chore(ts): enforce noImplicitOverride (@metaphorics) 2026-08-05 01:11:31 +02:00
Slava Zavadsky 326fb24367 fix(coding-agent): chain every queued dispatch onto the current tail
The previous #runSerialized waited on the shared #dispatchTail, then ran
unconditionally: when two or more events queued behind an in-flight run,
each resumed from the same settled await and started its own run in
parallel, defeating the ordering guarantee for a burst landing in one
coalescing window (message_end + agent_end behind a suspended flush).

Each waiter now chains its own link onto the current tail
(tail.then(run, run)), so queued runs start strictly one after another;
the idle path still runs synchronously, preserving the flush timing the
coalescing tests assert on. The in-flight flag clears only when the
settling link is still the tail, so a later chained link's settle does
not clear it early.

Regression test: two message_end events queued behind a suspended window
flush stay serialized (init call count steps 1 -> 2 -> 3 as each gate
opens); fails on the previous implementation.
2026-08-04 17:42:54 -04:00
Slava Zavadsky 72a6654572 Merge remote-tracking branch 'upstream/main' into fix/7443-streaming-message-update-coalesce 2026-08-04 17:41:15 -04:00
roboomp 9f92d36425 fix(mcp): ordered project entries before user in translated importers
The Claude/Cursor/Gemini/Windsurf importers appended user entries before
project entries, so a project `enabled: false` could not claim its dedupe key
ahead of a same-named user server and the disable was silently ignored. Load
project entries first, matching the native/Codex loaders, so a project disable
suppresses a same-named user server.

Updated docs/mcp-config.md to reflect the project-first precedence and added
compound regression coverage.

Fixes #7652
2026-08-04 21:14:11 +00:00
roboomp 172ce9bf6c revert(session): restored legacy project directory names
Reverted PR #7397 session directory hashing and automatic migration.

Restored existing script compatibility with the legacy cwd-derived naming scheme.

Fixes #7646
2026-08-04 21:10:54 +00:00
roboomp 73d3076d14 test(mcp): isolated translated importer home configs
Set HOME and os.homedir() to a dedicated temporary directory for each translated-provider fixture, then restore both after every test. This prevents real user MCP configs from shadowing the project fixture through capability deduplication.
2026-08-04 21:03:19 +00:00
roboomp b872e51e6f fix(mcp): propagate enabled flag from translated tool configs
The Claude Code, Cursor, Gemini CLI, Windsurf, and VS Code importers built
their canonical MCPServer object without mapping serverConfig.enabled, so a
server declared with "enabled": false stayed undefined and the central
suppressServer filter never fired. Only disabledServers masked the gap.

Map the field in each importer, mirroring opencode.ts and codex.ts, and add
a table-driven regression test across all five importers.

Fixes #7652
2026-08-04 20:57:47 +00:00
Slava Zavadsky 50ee839c51 fix(modes): serialize dispatch so a stream tail cannot overtake the coalesced flush
AgentSession.#emit fires listeners fire-and-forget, and the coalesced
message_update flush fires from its own 33ms timer — neither path awaited
the other. A rapid stream tail (message_update -> message_end ->
agent_end) could therefore run the end handlers while the flush was
suspended mid-await, agent_end removing streamingComponent before
#handleMessageEnd finalizes and records the final message (issue #7443
follow-up).

- #runSerialized chains listener dispatch and the timer flush through one
  promise chain; an in-flight run holds later events until it completes.
  Idle dispatch stays synchronous (no added microtask), preserving the
  timing the coalescing tests assert on.
- Regression test: a message_end landing while the window flush is
  suspended on init is queued behind it (initCalls 1 while suspended,
  then 2), where the pristine code ran both concurrently (2 while
  suspended). Fails without the fix.
2026-08-04 16:35:56 -04:00
metaphorics 3802d2dd80 chore(ts): enforce noImplicitOverride 2026-08-05 02:49:01 +09:00
roboomp 03d90bdd9f fix(cli): flush final json record before print-mode exit
Per-event stdout writes in --mode json (and text) were fire-and-forget
and relied on an empty-write flush barrier before dispose/exit. The
barrier awaited its own callback, not the preceding large write, so a
big final agent_end could be truncated when the process exited before
the pipe drained -- while still exiting 0.

Serialize every print-mode stdout write on its own completion callback
(honoring backpressure) and block shutdown on the tail so the terminal
record is delivered in full.

Fixes #7635
2026-08-04 16:21:29 +00:00
roboomp fe6e9c28ab test(coding-agent): stub setTextOutputCommitted in print mocks
Added the no-op setter to lightweight print-mode session mocks so text-mode runs without a submitted prompt no longer throw at the final commit call.

Fixes #7625
2026-08-04 13:57:04 +00:00
roboomp 929ab1a20f fix(coding-agent): allowed retries for buffered print output
Made text replay safety depend on whether the active output sink has committed streamed text.

Kept tool calls, images, and server tools replay-unsafe while covering text and JSON print policies plus a transient socket-close recovery.

Fixes #7625
2026-08-04 13:50:09 +00:00
Slava Zavadsky b8779dae63 fix(coding-agent/eval): remove per-call model override from agent() (#6438)
Completes the maintainer's removal of per-call model selection from
subagent spawns (9f8aa87dbf removed it from the task tool and the
model-facing agent() docs/prompt, but the eval agent() runtime and all
four preludes still accepted and forwarded a per-call model).

Subagents now always resolve through the selected agent's frontmatter
model and settings, so an explicit model: "default" can no longer
silently route children onto the parent session model.

- agent-bridge: drops "model?" from agentArgsSchema and the request
  forward; adds "+": "delete" so a legacy model argument is stripped
  (same contract as the task wire schemas).
- JS/Python/Ruby/Julia preludes: remove the model parameter from
  agent(); completion()'s tier selector is unchanged.
- docs (tools/eval.md, python-repl.md) updated to the removed surface.

Refs #6438
2026-08-04 08:35:01 -04:00
Slava Zavadsky 84922eca22 Merge remote-tracking branch 'upstream/main' into fix/7443-streaming-message-update-coalesce 2026-08-04 07:29:25 -04:00
roboomp 2cfaa7adbc fix(coding-agent): restored legacy convertToPng export
- Restored the package-root image conversion contract through the legacy compatibility shim.

- Covered PNG passthrough, image conversion, and decoder failure behavior.

Fixes #7610
2026-08-04 07:31:16 +00:00
roboomp 62cb7a0e62 fix(browser): honored explicit Chromium executable override
Selected PUPPETEER_EXECUTABLE_PATH before probing system browser installations so compatible headless-shell binaries remain usable by the shared daemon.

Added an isolated Windows candidate-selection regression probe.

Fixes #7601
2026-08-04 06:37:29 +00:00
roboomp 262ce960fc fix(coding-agent): split semicolon path lists that trip ENAMETOOLONG
The grep/glob multipath detector probed the raw joined string with lstat
and only split when the probe reported "missing" (ENOENT/ENOTDIR).
ENAMETOOLONG was classified as "unknown", which suppressed the split, so
a semicolon-delimited path list long enough to exceed NAME_MAX or
PATH_MAX collapsed to one literal path and failed with
"Path not found: <whole list>" even though every entry existed.

Classify ENAMETOOLONG as "missing" in probeLiteralPathExists and
delimitedPathPartResolves (a too-long string can never name a real
single entry), and broaden glob's stat catch so the raw errno never
reaches the caller.

Fixes #7597
2026-08-04 06:07:42 +00:00
roboomp 9be8d797fc fix(cursor): corrected inline read range metadata
Detected path-embedded OMP line selectors when reporting Cursor read results and stopped treating ranged payload lengths as whole-file totals.

Exposed exact source line counts from EOF-reaching read results and covered both the wire response and read metadata contracts.

Fixes #7590
2026-08-04 04:13:35 +00:00
roboomp 8b152f7bdf fix(coding-agent): give memory:// a corrective error under hindsight backend
The shared `recall` tool description instructs a follow-up `read memory://<id>`,
but the memory:// handler resolves only `root` and mnemopi ids. Under
memory.backend=hindsight, following the tool's own docs hit the generic
"Unknown memory namespace" error that only mentions mnemopi, causing repeated
failed reads and derailment.

Make the handler backend-aware: when a memory://<id> read arrives while a
Hindsight session is active and no mnemopi state can serve it, throw a
corrective error pointing at `recall`/`reflect` so a stray read self-corrects
in one turn.

Fixes #7587
2026-08-04 03:42:57 +00:00
roboomp 9011e8ed44 fix(config): parsed top-level input modalities
OpenAI-compatible endpoints such as Synthetic advertise vision support through a top-level input_modalities array. Include that response field alongside direct input and nested architecture.input_modalities, with regression coverage for a catalog-absent id.
2026-08-04 03:37:38 +00:00
roboomp 67441e2eec fix(config): bumped openai-models-list discovery cache namespace
Warm context-v2 rows cached before server input-modality parsing pinned vision-capable ids at input: ["text"] until a forced refresh. Bump the namespace to context-v3 so the modality fix takes effect on the next online-if-uncached refresh, and add a regression proving v2 rows are orphaned.
2026-08-04 03:32:06 +00:00
roboomp 0c27e521c4 fix(config): preserved LM Studio native modalities
Keep the richer LM Studio /api/v0/models input metadata ahead of the thin OpenAI-compatible row while retaining row-first behavior for generic openai-models-list discovery. Add a regression covering a text-only /v1/models row paired with a native VLM record.
2026-08-04 03:25:03 +00:00
roboomp a29acbfa40 fix(config): read server input modalities in openai-models-list discovery
discoverOpenAIModelsList never consulted the /v1/models row's input
field, so custom virtual tier ids absent from the bundled catalog fell
through to the ["text"] fallback and showed images: no even when the
server advertised input: ["text","image"]. Parse the direct input array
and OpenRouter-style architecture.input_modalities from the response row,
preferring server-reported modalities over native metadata and the
bundled reference.

Fixes #7583
2026-08-04 03:19:07 +00:00
roboomp 510661437f fix(coding-agent/hindsight): route recall through single injection path
Two recall paths shared the hasRecalledForFirstTurn flag: the agent_start
subscription (maybeRecallOnAgentStart, fire-and-forget with an unawaited
background prompt rebuild) and beforeAgentStartPrompt (awaited before the
turn builds). When the event path consumed the flag first,
beforeAgentStartPrompt returned undefined and the recalled context reached
the model only if the background rebuild had already landed -- on a fast
turn it had not, so autoRecall intermittently never reached the model.

Make beforeAgentStartPrompt the sole injection path and drop the racing
agent_start recall.

Fixes #7568
2026-08-03 23:29:04 +00:00
can1357 ad37de9663 Merge PR #7553: fix(coding-agent): allow quoted metacharacters in bash patterns (@roboomp) 2026-08-04 01:03:01 +02:00
can1357 fbfae3b4ad Merge PR #7540: fix(discovery): honor disabled codex mcp servers (@roboomp) 2026-08-04 01:02:56 +02:00