Commit Graph
6861 Commits
Author SHA1 Message Date
can1357 9b7b193f8f Merge PR #7384: test(browser): stop gating chromium tests on a top-level-await export (@paralin) 2026-08-02 20:53:21 +02:00
can1357 ca2385b0ec Merge PR #7382: fix(cli): restore piped custom session persistence (@roboomp) 2026-08-02 20:53:21 +02:00
can1357 2b4c33569b Merge PR #7367: fix(mnemopi): surface scoped recall failures (@roboomp) 2026-08-02 20:53:21 +02:00
can1357 bdc2072440 Merge PR #7356: fix(mnemopi): bound embed worker IPC and reap on timeout (@roboomp) 2026-08-02 20:53:20 +02:00
can1357 51b71c098b test(mnemopi): exercise locked shared-bank flush 2026-08-02 20:53:20 +02:00
can1357 221d91d4ae Merge PR #7355: fix(mnemopi): bound locked retention during teardown (@roboomp) 2026-08-02 20:53:20 +02:00
can1357 d8881e3fd6 Merge PR #7350: fix(eval): preserve console for ConPTY Python kernels (@roboomp) 2026-08-02 20:53:19 +02:00
can1357 160bdd05c3 fix(agent): keep session scout notices live 2026-08-02 20:52:57 +02:00
can1357 3de8c3a476 Merge PR #7344: fix(agent): stop leaking scout into prompts when it is disabled (@szavadsky)
# Conflicts:
#	packages/coding-agent/src/prompts/system/system-prompt.md
2026-08-02 20:52:56 +02:00
can1357 4beae19ca8 Merge PR #7340: test(vibe): fix kill-before-init race with a worker-ready handshake (@szavadsky) 2026-08-02 20:52:14 +02:00
can1357 abebe8c2a8 Merge PR #7333: fix(tui): compact linear branch continuations (@roboomp) 2026-08-02 20:52:07 +02:00
can1357 3b118015e5 Merge PR #7331: fix(tui): preserve loop after cancelling iteration (@roboomp) 2026-08-02 20:52:07 +02:00
can1357 6e4a0e8125 Merge PR #7327: fix(compaction): stop shake from re-eliding artifact recovery reads (@jwmacd) 2026-08-02 20:52:07 +02:00
can1357 a872d77068 chore: cleanup dumb tests 2026-08-02 20:39:23 +02:00
can1357 212f0b1e00 feat(coding-agent/config): supported custom timeout configuration for model discovery
- Added an optional `timeoutMs` property to the provider discovery configuration schema with validation.
- Passed custom discovery timeout values through model discovery and metadata probing functions.

Fixes #6952
2026-08-02 20:32:31 +02:00
can1357 ef852af986 feat(computer): implemented modular desktop backend and script workflows
- Replaced monolithic desktop native bindings and action batching with a modular cross-platform backend structure supporting Wayland, X11, macOS, and Win32.
- Updated the computer tool schema and supervisor to execute persistent JavaScript script runs with timeout clamping and asynchronous tool calling.
- Integrated accessibility (AX) tree snapshotting, node querying, and bounds-based hit testing across platform desktop layers.
- Added native clipboard bindings and updated coding-agent prompts, renderers, and tests to validate script-based computer workflows.
2026-08-02 19:46:25 +02:00
can1357 92b50faacc feat(coding-agent/lsp): implemented lsp multiplexer server and shared daemon lifecycle
- Added an LSP multiplexer server, protocol definitions, and daemon lifecycle management to route traffic across sessions.
- Introduced `lsp.shared` settings configuration and SDK session creation support for shared language servers.
- Migrated shared daemon ensure helpers into a central launch module with updated import references.
- Added comprehensive unit tests and fake LSP server fixtures covering muxing, sharing, caching, and restarts.
2026-08-02 18:15:22 +02:00
can1357 4a946e2cfc fix(coding-agent/tools): serialized tab grouping operations in the relay bridge
- Serialized group and ungroup operations to prevent duplicate tab group creation races.
- Queued and serially drained tab grouping requests in the relay bridge to prevent overlapping RPCs.
- Mirrored tab group titles to session storage and healed duplicate groups during background service worker recovery.
- Renamed run-cancellation utility to run-scope and updated corresponding module and test references.
2026-08-02 18:07:07 +02:00
can1357 7c3b24ddf2 feat: implemented cross-platform window discovery and targeting capabilities
- Added window discovery, targeting, and frame validation for macOS, Windows, and Linux platforms.
- Updated computer tool and protocol definitions to support listing and targeting specific application windows.
- Refactored native computer tool exposure to function-only representation across models.
- Updated documentation and test suites to reflect window-scoped computer control capabilities.
2026-08-02 17:35:29 +02:00
Christian Stewart 78a4d2ea5a test(browser): stop gating chromium tests on a top-level-await export
`bun test` fails the coding-agent native/unit job with

  ReferenceError: Cannot access 'CHROMIUM_AVAILABLE' before initialization

in test/tools/browser-attach.test.ts and browser-tab-evaluate.test.ts,
taking the job red on every pull request.

chromium-probe.ts initializes its only export with top-level await. When
a test file importing it is the first file the runner loads, the await
settles before that file evaluates and the binding reads fine. When any
other test file was loaded first, the importer's body runs while the
binding is still in its temporal dead zone, and registration throws at
the `skipIf` call. `bun test <one file>` passes and `bun test --parallel=1
<any earlier file> <that file>` fails, which is why the job fails while a
single-file run does not.

Export the memoized probe as a function and let each test file await it
during its own evaluation, which the runner sequences. The probe still
runs once per process and resolves the executable exactly as before.

Signed-off-by: Christian Stewart <christian@aperture.us>
2026-08-02 05:00:26 -07:00
roboomp 72d8d4eaca fix(cli): restored piped session persistence
- Treated undefined stdin TTY state as redirected input.

- Honored PI_CODING_AGENT_SESSION_DIR with CLI precedence.

Fixes #7378
2026-08-02 11:33:58 +00:00
roboomp e82aa25590 fix(mnemopi): contained auto-recall failures
- Caught all-target recall failures inside the fire-and-forget auto-recall path.
- Kept first-turn recall eligible for retry after an engine failure.
- Added regression coverage for the background failure contract.
2026-08-02 09:18:09 +00:00
roboomp d99adc9325 fix(mnemopi): surfaced scoped recall failures
- Warned when a scoped recall target fails while preserving partial results from healthy targets.
- Re-threw the underlying failure when every target fails so recall cannot masquerade as an empty search.
- Added tool-level regression coverage for total and partial scoped failures.

Fixes #7364
2026-08-02 09:11:36 +00:00
roboomp 4c80c7b114 fix(mnemopi): exempted initialization from embed timeout
Kept the hard timeout and worker reap for steady-state embed requests while allowing first-use runtime installation and model bootstrap to finish without SIGKILL stranding the install lock.

Added deterministic coverage for initialization outliving the embed timeout budget and corrected the changelog contract.

Fixes #7352
2026-08-02 05:40:14 +00:00
roboomp b9bdbcec03 fix(mnemopi): bound busy timeout on every owned bank
Extended the shutdown busy-timeout clamp from the retain bank to all owned banks so a locked shared bank (per-project-tagged) cannot stall teardown for the default 5s SQLite timeout.

Fixes #7351
2026-08-02 05:34:58 +00:00
roboomp a4987ba518 fix(mnemopi): bounded embed worker IPC and reap on timeout
Embed-worker init/embed requests awaited the reply with no timeout, so a
wedged fastembed/onnxruntime runtime blocked the turn memory recall or the
shutdown consolidation forever, hanging headless -p/--mode json runs and
leaving __omp_worker_mnemopi_embed unreaped. The #5753 fix only bounded the
dispose-time consolidate await, not the embed IPC beneath it.

Bound every request with an unref-ed timeout; on expiry fail the request
and SIGKILL-reap the worker so the next call respawns a fresh child.

Fixes #7352
2026-08-02 05:33:11 +00:00
roboomp 82095f0c12 fix(mnemopi): bounded locked retention during teardown
Capped synchronous SQLite busy waits before starting bounded final consolidation, then spent only the remaining shutdown deadline on asynchronous drains.

Added regression coverage for a locked Mnemopi writer in the headless teardown path.

Fixes #7351
2026-08-02 05:27:11 +00:00
roboomp 3fab985c14 fix(eval): preserved console for conpty python kernels
Combined native HWND and stdio TTY evidence so compiled Windows Terminal launches no longer set CREATE_NO_WINDOW for the Python eval kernel.

Fixes #7343
2026-08-02 05:05:52 +00:00
Slava Zavadsky 9885ee34fc fix(agent): stop leaking scout into prompts when it is disabled
Hard-coded 'scout' references reached the model even when the scout
agent was disabled via task.disabledAgents or absent from the session
spawn list. Gate every such reference on scout actually being spawnable:
the task tool description, the delegation gates, the plan-mode and
workflowz notices, the glob/grep/ast-grep guidance, and the task
specialization advisory. Prompt shape is otherwise unchanged; only
erroneous references to the unavailable subagent are dropped.

Closes #7313
2026-08-01 23:50:33 -04:00
can1357 92c79d80c7 feat: introduced OMP Browser Relay extension with CDP RPC execution
- Implement the OMP Browser Relay extension with WebSocket communication and CDP RPC execution.
- Add browser relay server, daemon management, and bridge multiplexing in the coding agent.
- Introduce CLI commands and settings schema options for configuring and installing the relay.
- Add utility functions and test suites supporting environment parsing and relay lifecycle handling.
2026-08-02 05:33:07 +02:00
Slava Zavadsky 556830a215 test(vibe): use deferred() for the worker-ready gate; changelog
Review (PR 7340):
- replace the manual resolver-capture promise with the repo-standard deferred()
  helper already used elsewhere in the file
- changelog: vibe pre-init-kill race fix under [Unreleased] Fixed
2026-08-01 22:06:03 -04:00
Slava Zavadsky 6e143bf567 test(vibe): fix kill-before-init race with a worker-ready handshake
The pre-init-kill test issued registry.kill() immediately after spawn()
returned; the mock worker only registers its AgentRef after the abort signal
lands, so on a loaded runner the job body may not have dispatched yet and
kill observed no registration at all (AgentRegistry.get() undefined), failing
the aborted-ref assertion. The mock now signals readiness once it is inside
the abort-wait, and the test awaits that before killing — deterministically
exercising the late-registration terminalization path the test names.

Flaked once on CI singleton (vibe session registry); 32/32 pass locally.
2026-08-01 21:11:52 -04:00
roboomp ca5504cae0 fix(tui): kept virtual-root children nested
- Advanced indentation for a virtual root's direct children so single-child roots no longer collapse to the shared column-0 root.

- Mirrored the fix in the HTML export renderer and added a multi-root regression.

Fixes #7332
2026-08-02 00:34:42 +00:00
roboomp f8b71b4a3c fix(tui): compacted linear branch continuations
- Kept single-child chains aligned with their branch head while preserving real branch depth.

- Removed disconnected terminal-branch anchors from TUI and HTML tree renderers.

- Updated nested tree regressions for compact connector alignment.

Fixes #7332
2026-08-02 00:27:41 +00:00
roboomp 3945b1b4af fix(tui): preserved loop after cancelling iteration
Kept /loop running when Esc aborts an active streamed turn. Idle Esc still pauses the loop and cancels a pending submission.

Fixes #7329
2026-08-02 00:00:25 +00:00
jwmacd 77028ae957 fix(compaction): stop shake from re-eliding artifact recovery reads
A recovered artifact:// read is an ordinary read result, so the next shake
pass elides it into a new artifact, indefinitely. Extends the 5f9558d17a
spill exemption to shake; the dead-end rescue gets a dedicated config
instead of falling through to AGGRESSIVE. Manual /shake unchanged.
2026-08-01 19:27:41 -04:00
can1357 9ad82cbe6e test(coding-agent): simulated production env in unref worker repro
The CI harness exports PI_TEST_RUNTIME=1, which the wrapper subprocess
inherited; isBunTestRuntime() then suppressed unref in the worker client
and deterministically kept the wrapper alive until the test timed out.
Override PI_TEST_RUNTIME=0 in the wrapper env and restore the 10s bound.
2026-08-01 23:15:11 +02:00
can1357 2d27412022 test(coding-agent): aligned activation tests with write-gated xd mounting
- Updated sdk-tool-activation expectations for 386385f18b: sessions
  without a granted write tool keep extension/SDK tools top-level and
  allocate no xd:// state instead of auto-granting write.
- Raised the unref'd-worker parent-exit repro to a 30s timeout; the 10s
  ceiling SIGTERMed the wrapper (exit 143) on shared-core CI runners.
2026-08-01 23:05:28 +02:00
can1357 23c629be18 test(coding-agent): aligned deferred MCP test with write-gated xd mounting
386385f18b made xd:// mounting require both granted transport halves and
stopped auto-granting write; a read-only session now surfaces deferred
MCP tools top-level. The test still encoded the old auto-grant contract.
2026-08-01 22:55:01 +02:00
can1357 811fcde05f Merge PR #7306: fix(title): reject overlong auto-generated session titles (@roboomp) 2026-08-01 21:29:46 +02:00
can1357 8fe2b8f9ba Merge PR #7311: fix(catalog): honor openrouter deepseek effort metadata (@roboomp) 2026-08-01 21:29:35 +02:00
roboomp 2cfaeb6116 fix(catalog): honored openrouter deepseek effort metadata
- Parsed OpenRouter reasoning effort ladders and defaults during discovery.

- Preserved explicit thinking metadata from models.yml patches.

- Regenerated the catalog and covered both regression paths.

Fixes #7307
2026-08-01 19:06:44 +00:00
can1357 992963f949 feat(coding-agent): allowed switching to models smaller than session context with compaction
- Make over-context models selectable in the model picker by graying them instead of disabling them.
- Trigger automatic session compaction with the current model prior to switching when an over-context model is chosen.
2026-08-01 20:59:24 +02:00
roboomp 294f32d6bc fix(title): reject overlong auto-generated session titles
normalizeGeneratedTitle only guarded emptiness and the none sentinel, so
when the tiny title model ignored the titling task and answered the first
user message, its full one-line reply became the session title verbatim.
Bound accepted titles to 80 chars / 12 words and return null past that,
deferring titling to the next user turn. Both the online and local-worker
paths funnel through this normalizer, so both are covered.

Fixes #7303
2026-08-01 18:50:28 +00:00
can1357 386385f18b fix(coding-agent): skipped xd:// mounting when write tool is not granted
- Prevent xdev state allocation and tool mounting in sessions lacking a write tool.
- Expose discoverable tools top-level instead of auto-granting write transports.
2026-08-01 20:39:08 +02:00
can1357 13a36f7c83 refactor(coding-agent/mcp): changed default MCP request ID format to sequential integers
- Change the default MCP JSON-RPC request ID format from snowflake strings to sequential integers.
- Update server configuration schema, connection equivalence checks, and tests to reflect the new integer default.
2026-08-01 20:33:11 +02:00
can1357 9f65d3ae71 chore: applied biome formatting to sweep fix commits 2026-08-01 20:15:15 +02:00
can1357 51afd5c503 fix(coding-agent): tombstone remote hub kills 2026-08-01 20:14:41 +02:00
can1357 cc884eea9b Merge PR #7252: fix(coding-agent): keep hub-killed subagent from resurrecting as parked (@roboomp) 2026-08-01 20:14:40 +02:00
can1357 3fd042c38b fix(coding-agent): preserve grouped reads during retraction 2026-08-01 20:14:40 +02:00