Commit Graph

78555 Commits

Author SHA1 Message Date
Peter Steinberger 600787a0cb test(gateway): isolate live-event sweep assertion (#106216)
* test(gateway): isolate agent run registry state

* test(infra): reset agent event state between files
2026-08-09 05:06:40 -07:00
Peter Steinberger 758d4a4786 test(updater): clean cloned Git fixtures (#113348) 2026-08-09 05:02:39 -07:00
Shakker 0a898b70d8 test: satisfy browser annotation landing guards (#120848) 2026-08-09 13:56:55 +02:00
Shakker 88ec5a9343 fix: preserve browser annotation metadata styling 2026-08-09 13:56:55 +02:00
Shakker f06e3675a6 docs: clarify browser annotation session scope 2026-08-09 13:56:55 +02:00
Shakker 7874024748 fix: preserve staged browser annotations across remounts 2026-08-09 13:56:55 +02:00
Shakker d0e76dea49 fix: bound browser annotation composer lifecycle 2026-08-09 13:56:55 +02:00
Shakker 7a98ff6ee6 test: construct annotation credential URL at runtime 2026-08-09 13:56:55 +02:00
Shakker 992c38f053 fix: restore annotation removal focus handling 2026-08-09 13:56:55 +02:00
Shakker a3938ef435 fix: couple browser annotations to composer attachments 2026-08-09 13:56:55 +02:00
Anuj Bolewar 1328a53930 fix: keep cron trigger once when editing only the script body (#120226)
* fix: keep cron trigger once when editing only the script body

* test: cover cron trigger once preservation on script edit

* test: clean up temp script fixture in cron edit once test

The test leaked the mkdtemp directory under os.tmpdir. Remove it in a
finally block so repeated runs do not accumulate temp fixtures.

Fixes #120226

* test: prove trigger.once survives script edit via real gateway store

* fix(cron): preserve trigger metadata on script edits

Validate trigger script input before any Gateway lookup, retain existing trigger metadata during script-only edits, and replace mock-only handler coverage with isolated CLI-to-Gateway persistence proof.

Co-authored-by: Anuj Bolewar <bolewara@gmail.com>

* test(cron): normalize trigger-script rejection cases

Keep the table rows type-stable so the cron edit regression suite passes test type checking.

Co-authored-by: Anuj Bolewar <bolewara@gmail.com>

* style(cron): format trigger preservation tests

Co-authored-by: Anuj Bolewar <bolewara@gmail.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-09 04:54:50 -07:00
zw-xysk 03cb1443e5 fix(agents): canonicalize auth profile aliases (#119505)
Persist inherited per-agent order references, collapse equivalent auth-provider state keys onto the canonical provider, and clear every equivalent persisted key. Make auth-order validation and display alias-aware while leaving separate OAuth runtime-cache behavior unchanged.

Fixes #119233

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-09 04:53:24 -07:00
Serghei d7054d4daf fix(gateway): streamed chat text stalls mid-answer until the next agent event (#119566)
* fix(gateway): flush trailing chat deltas

Keep the fixed-deadline wake-up on the existing chat run record so terminal, abort, and shutdown cleanup cancel it at the lifecycle owner. Normalize voice runs onto their unique per-turn ID instead of compensating for a stale client alias downstream.

Fixes #119557

Co-authored-by: Serghei <43180231+xyrolle@users.noreply.github.com>

* test(gateway): drop obsolete delta length assertions

Remove stale fixtures and assertions for the write-only chat delta length field deleted by the owner-boundary repair.

Co-authored-by: Serghei <43180231+xyrolle@users.noreply.github.com>

* fix(gateway): preserve chat run state type contract

Keep the optional delta length field and its cleanup semantics in the exported ChatRunState closure without restoring runtime writes.

Co-authored-by: Serghei <43180231+xyrolle@users.noreply.github.com>

* refactor(gateway): hide chat delta timer from SDK shape

Keep the trailing wake physically on each run record while exposing it only through internal state-module accessors, preserving the public ChatRunState closure.

Co-authored-by: Serghei <43180231+xyrolle@users.noreply.github.com>

* refactor(gateway): narrow chat delta timer access

Use one Gateway-internal record accessor so the run-owned timer remains outside the public ChatRunState shape without extra state maps.

Co-authored-by: Serghei <43180231+xyrolle@users.noreply.github.com>

* refactor(gateway): keep chat timer casts private

Keep the run-owned timer invisible to the generated Plugin SDK closure by using module-private casts in each owning Gateway module.

Co-authored-by: Serghei <43180231+xyrolle@users.noreply.github.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-09 04:53:16 -07:00
Vincent Koc f83ba2b326 fix(ci): route UI E2E PR retries to hosted runners (#120997)
* fix(ci): route UI E2E PR retries to hosted runners

Punchcard-Session: amber-workshop-workshop-36

* fix(ci): align UI E2E retry cache routing

Punchcard-Session: amber-workshop-workshop-36

* fix(ci): clarify UI E2E retry routing

Punchcard-Session: amber-workshop-workshop-36

* fix(ci): validate workflow expression capture

Punchcard-Session: amber-workshop-workshop-36
2026-08-09 19:50:24 +08:00
Peter Steinberger 2a57e1a1af fix(github-copilot): preserve cumulative poll backoff (#103434) 2026-08-09 04:50:18 -07:00
Peter Steinberger 71a33f07a9 fix(imessage): make SSH-backed sends and actions reliable (#121038)
* fix(imessage): harden remote Mac transport

Route SSH-backed iMessage actions through JSON-RPC, preserve remote database paths, and stage outbound files on the Messages Mac with bounded cleanup. Keep local action semantics intact while failing closed on ambiguous wrappers and surfacing the remaining imsg v0.13.4 limits.

* fix(imessage): remove test-only exports
2026-08-09 04:48:38 -07:00
Peter Steinberger 11e897a630 fix(discord): preserve attachment content types (#114460)
Co-authored-by: Zhe Liu <15888718+zheliu2@users.noreply.github.com>
2026-08-09 04:44:38 -07:00
Peter Steinberger 5d98d2e6ec fix(uninstall): preserve user data when gateway removal fails (#113887)
* fix(uninstall): gate cleanup on service teardown

* fix(daemon): scope strict task removal checks
2026-08-09 04:40:50 -07:00
Peter Steinberger 4cb33d48cd refactor(config): consolidate regression fixtures (#114459) 2026-08-09 04:35:00 -07:00
Peter Steinberger b869d5e73f fix(workers): skip shared-host quiescence sweeps (#120969)
* fix(workers): skip shared-host quiescence sweeps

Refs #120952.

* test(workers): update shared-host fixtures

Refs #120952.

* fix(workers): reconcile shared-host lease metadata

* fix(workers): fence unknown lease isolation

* chore(plugin-sdk): refresh API baseline

* fix(workers): fence tunnel isolation updates

* docs(workers): clarify shared-host final fences

* ci: invalidate Vitest cache for state schemas

* refactor(workers): import stableWorkerPathComponent from its defining module

workspace-sync.ts crossed the 700-line lint budget by one; drop its
re-export and point consumers at workspace-sync-helpers directly.
2026-08-09 04:34:39 -07:00
Peter Steinberger 262cf17baf fix(agents): preserve session abort reasons (#113693) 2026-08-09 04:30:32 -07:00
Peter Steinberger e257683390 test(wizard): restore stdin TTY state (#113345) 2026-08-09 04:29:34 -07:00
Peter Steinberger 05e534eae5 fix(cron): deliver final results after heartbeat acknowledgements (#113924) 2026-08-09 04:27:23 -07:00
Peter Steinberger d1b4ed872c fix(slack): preserve inbound attachment metadata (#114502) 2026-08-09 04:09:18 -07:00
Peter Steinberger 44a2a87134 fix(ui): prevent cloud draft recovery dead ends (#120970)
* fix(ui): harden cloud draft recovery

Refs #120953.

* fix(gateway): keep minimal metadata startup lazy

* fix(ui): preserve interrupted cloud setup state

* fix(ui): separate cloud recovery lifecycle fences
2026-08-09 04:06:05 -07:00
Peter Steinberger c7cf69a110 fix(opencode): refresh hosted model catalogs (#121030)
* fix(opencode): refresh hosted model catalogs

Align Zen and Go availability, pricing, limits, transports, lifecycle metadata, and model-specific reasoning controls with current provider contracts.

Co-authored-by: samson1357924 <samson1357924@gmail.com>

Co-authored-by: xialonglee <li.xialong@xydigit.com>

* fix(opencode): align catalog metadata with runtime contracts

---------

Co-authored-by: xialonglee <li.xialong@xydigit.com>
2026-08-09 04:05:47 -07:00
Peter Steinberger f9449e0805 refactor(gateway): consolidate chat history fixtures (#114435) 2026-08-09 04:03:35 -07:00
Peter Steinberger 8d152c1852 fix: preserve tool results across session reset (#121028)
* fix(agents): preserve paired reset tool results

Keep occurrence-paired tool results in reset-derived model context and compaction without rewriting persisted transcripts. Reuse the same classifier in transcript repair and compaction chunk planning.

Co-authored-by: sunlit-deng <yang.jiajun1@xydigit.com>

* style(agents): apply transcript repair formatting

* fix(agents): keep pairing helpers private

* refactor(agents): preserve private pairing surface

---------

Co-authored-by: sunlit-deng <yang.jiajun1@xydigit.com>
2026-08-09 04:03:00 -07:00
Colin Johnson c44b01614d fix: profile saves leave stale sidebar identity (#120791)
Profile identity changes now refresh immediately across connected browsers, including revisioned avatar URLs that avoid stale cached images.

Fixes #120784
Prepared head SHA: 20fb9ea42d
Co-authored-by: Colin Johnson <211764741+Solvely-Colin@users.noreply.github.com>
Co-authored-by: Shakker <165377636+shakkernerd@users.noreply.github.com>
Reviewed-by: @shakkernerd
2026-08-09 11:58:19 +01:00
Peter Steinberger d280ec1e70 fix(qqbot): handle malformed gateway hello bodies (#121031)
Normalize hostile QQ gateway HELLO bodies before reading heartbeat_interval, use a timer-safe fallback, and keep diagnostics non-throwing.

Co-authored-by: 万拥 0668000723 <wan.yong@xydigit.com>
2026-08-09 03:55:37 -07:00
Peter Steinberger 2941ff5e44 fix(ai): preserve Responses stream cancellation (#113801) 2026-08-09 03:54:02 -07:00
Peter Steinberger 4e9e7359f6 refactor(acpx): reuse operation session snapshot (#120924) 2026-08-09 03:52:44 -07:00
Peter Steinberger b61bc5cd8d fix: sync Cloud Worker workspaces from macOS gateways (#121027)
* fix(cloud-workers): support Apple openrsync receivers

* build: register worker receiver entry

* fix(cloud-workers): narrow receiver invocation types

* test(cloud-workers): resolve real rsync before wrapping
2026-08-09 03:51:24 -07:00
Peter Steinberger 079907f7e2 fix(doctor): restore safe selected-plugin state migrations (#120908)
* fix(doctor): restore safe selected-plugin state migrations

* fix(doctor): harden selected migration ownership

* test(doctor): split state migration registry coverage
2026-08-09 03:48:59 -07:00
Vincent Koc c8a99f7aab test(gateway): cover rolling node compatibility (#119991)
Punchcard-Session: calm-lantern-timber-wa
2026-08-09 18:45:08 +08:00
Peter Steinberger 8b501c1c13 fix(build): reject incomplete Plugin SDK declaration caches (#120961)
Require the unified declaration cache to contain every production Plugin SDK declaration before accepting or stamping it. Matching partial v4 stamps are now stale and rebuild instead of failing later in the canonical declaration writer.
2026-08-09 03:38:37 -07:00
Peter Steinberger 693b62f69e fix(secrets): reuse prepared plugin metadata (#120863) 2026-08-09 03:37:29 -07:00
ruel225 545b235981 fix(sessions): reject rebound transcript turns (#119221)
Route persisted session turns through the existing identity-checked writer while keeping memory-only provenance reads non-materializing. Rejected turns no longer create agent database state through provenance or empty cursor bookkeeping.

Fixes #119220

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: ruel225 <ruel225@users.noreply.github.com>
2026-08-09 03:35:38 -07:00
Peter Steinberger ba31c3059f fix(agents): acknowledge steering only after durable transcript commits (#120914)
* fix(agents): acknowledge steering only after durable transcript commits

* test(agents): cover blocked steering persistence
2026-08-09 03:34:19 -07:00
Peter Steinberger c9b346e216 fix(sessions): fence transcript writes by admitted run (#121003)
* fix(sessions): fence transcript writes by admitted run

* fix(agents): break terminal outcome import cycle

* test(sessions): cover writer fence propagation

* fix(sessions): complete admitted writer fence
2026-08-09 03:32:01 -07:00
Gio Della-Libera 7422222788 feat(claws): add local project author lifecycle (#117037)
* feat(claws): add local project lifecycle

* fix(claws): harden local project lifecycle

* fix(claws): harden project source selection

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 3cdcdb00-ade8-4e61-85a7-8151b35f216a

* fix(claws): preserve project archive paths

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085

* fix(claws): harden author lifecycle

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085

* chore(claws): normalize authoring test mode

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085

* fix(claws): normalize archive path spellings

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085

* fix(claws): exclude repository-local sources

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085

* fix(claws): satisfy CI contracts

Co-authored-by: Copilot 223556219+Copilot@users.noreply.github.com

Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085

* chore: record CI fix attribution

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085

* fix(claws): reject excluded manifest links

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 3cdcdb00-ade8-4e61-85a7-8151b35f216a
Copilot-Session: db3a73db-01ff-428e-a451-b7b710cd5085
2026-08-09 03:30:21 -07:00
Peter Steinberger 8362f74c99 feat(browser): add all-tabs extension access (#120995)
* feat(browser): add all-tabs extension access

* fix(browser): preserve cancel revocation during startup

* test(browser): align all-tabs Chromium fixtures
2026-08-09 03:15:54 -07:00
Peter Steinberger a9d3980ed1 refactor(acpx): complete lease ownership and remove legacy reaper heuristics (#121016)
* refactor(acpx): harden pending process leases

* fix(acpx): bound retained probe leases
2026-08-09 03:15:39 -07:00
Peter Steinberger ab5e10fd17 fix(macos): first-run gateway startup survives state migrations (#121012)
* fix(macos): tolerate first-run state migrations during gateway start

* fix(macos): tolerate loaded-host version probes
2026-08-09 03:11:38 -07:00
Peter Steinberger c092900e3c fix(plugins): keep OpenCode Go bundled (#120985)
* fix(plugins): keep OpenCode Go bundled

* fix(plugins): mark OpenCode Go dist bundled

* fix(docs): show OpenCode Go as bundled

* fix(release): defer bundled plugin publication
2026-08-09 03:09:47 -07:00
Peter Steinberger 8b0735e89f refactor(memory)!: remove the QMD backend; builtin is the only memory engine (#120936)
* refactor(memory): remove qmd backend

Make builtin the sole memory-core engine, rename the retained session helper barrel, retire QMD config with doctor migrations, and remove QMD runtime/UI/policy surfaces.

* docs(memory): remove qmd backend guidance

Delete the QMD concept page, rewrite memory documentation for builtin retrieval, and remove QMD from navigation and taxonomy source.

* refactor(memory): remove qmd-only leftovers

* refactor(memory): finish qmd integration cleanup

* build(deps): align root string-width types

* build(deps): model root string-width tooling

* refactor(memory): align qmd removal ui and docs

* fix(memory): preserve qmd external paths in doctor

* test(memory): remove obsolete backend probe case

* test(plugin-sdk): refresh private type baseline
2026-08-09 03:05:47 -07:00
Peter Steinberger 6f56d797d7 fix(ui): survive route notFound at startup and stop silent chat draft loss (#120960) 2026-08-09 02:57:54 -07:00
Peter Steinberger b4564b02cd fix(ui): hide inert task-suggestion chips and strip bidi controls (#120967)
* fix(ui): hide inert task-suggestion chips and strip bidi controls

- render no suggestion card for operators who can neither accept nor dismiss (matches TUI behavior)
- strip RTL/bidi control characters from chip title, summary, project path, and instructions before rendering
- document the git-checkout requirement for spawn_task project directories (gateway enforcement landed in #120940)

* fix(ui): gate task-suggestion actions on negotiated gateway methods

Mirror the TUI capability rule: accept requires the taskSuggestions.accept method plus operator.admin, dismiss requires taskSuggestions.dismiss plus operator.write. List-only gateways render no chip; e2e fixtures now advertise the mutation methods they exercise, and a new regression proves a pending suggestion renders no chip when only listing is advertised. Addresses the ClawSweeper P2 on this PR.
2026-08-09 02:56:48 -07:00
Peter Steinberger e40e352fe7 refactor(session-url): centralize normalization and contract tests (#120945)
* refactor(session-url): centralize contract normalization

* fix(ui): resolve normalization agent-id alias

* test(session-url): make grammar tables type-safe
2026-08-09 02:56:07 -07:00
Peter Steinberger 0df1a89e3a fix(telegram): preserve visible draft recovery (#120626)
* fix(telegram): preserve visible draft recovery

* fix(telegram): await visible draft send

* test(telegram): use const in draft recovery test

* test(telegram): add live partial failure proof

* test(telegram): register live recovery coverage

* ci(qa): support mock Telegram proof scenarios

* test(telegram): isolate live recovery fallback

* test(telegram): assert live recovery behavior

* fix(agents): join partial reply delivery

* test(telegram): keep settlement proof at core boundary
2026-08-09 02:54:38 -07:00