Commit Graph

78555 Commits

Author SHA1 Message Date
Peter Steinberger 68e77c5ea7 fix(gateway): accept noVNC extended clipboard framing (#121276)
[AI-assisted]
2026-08-09 16:32:26 -07:00
Peter Steinberger bd6c6aaef2 refactor(ws): consolidate raw WebSocket payload decoding (#121268)
* refactor(ws): consolidate raw data conversion

* fix(scripts): keep gateway client source-loadable

* refactor(ws): share plugin frame decoding
2026-08-09 16:32:18 -07:00
Peter Steinberger 1c9649afc4 fix(telegram): enforce recursive rich-message transport limits (#117020)
* fix(telegram): enforce recursive rich-message limits

* test(telegram): type rich message assertions

* refactor(telegram): build album fragments without map spread
2026-08-09 16:28:47 -07:00
Peter Steinberger 1b2920a520 improve(agents): avoid plugin registry rebuilds on auth refresh (#121250)
* perf(agents): reuse prepared plugin generation

* test(agents): verify plugin generation reuse

* test(agents): tighten plugin generation proof

* style(agents): format prepared runtime integration

* chore(plugin-sdk): refresh prepared runtime API baseline
2026-08-09 16:13:28 -07:00
Peter Steinberger 0f6de6a751 fix(agents): start subagent retention after execution completes (#121178)
## What Problem This Solves
Subagent archive deadlines were armed when a run was registered, allowing a long-running, paused, restored, or still-delivering child to expire before its execution and completion delivery actually finished.

## Why This Change Was Made
One canonical retention owner now computes archive eligibility from completed execution or finalized collector results, clears stale deadlines during paused lifecycles, and keeps the sweeper from reclaiming active or still-owned delivery records.

## User Impact
Long-running and yielded subagents remain available until their work and completion messages finish, while completed runs and collector groups are archived after the intended retention window.

## Context
Final exact-source trusted remote validation passed 220 focused tests, including actual archive end-to-end coverage, and a production/private-QA build spanning 11 bundler phases and 35 plugin closures. All six production files passed core type-aware lint, and targeted formatting passed. Production code decreases by three lines. This affects persisted subagent lifecycle and retention behavior, so explicit maintainer review is required before any merge.
2026-08-09 16:11:36 -07:00
Peter Steinberger cfb19c7054 fix(telegram): stabilize command menu ordering (#121239)
Preserve custom, native, plugin, and alias precedence while keeping the documented /skill fallback across local and Telegram-driven menu pressure.
2026-08-09 16:08:10 -07:00
Jason (Json) d9e43b147a fix: prevent startup failures from obsolete managed plugin shadows (#121261)
* fix: retire stale bundled plugin shadows after core updates

* test: type convergence call ordering
2026-08-09 17:00:24 -06:00
Peter Steinberger eb59c68436 fix(cli): reject blank configuration section filters (#121145)
## What Problem This Solves
Explicit blank or whitespace-only configure --section values were silently discarded by generic normalization, causing a scoped configuration request to unexpectedly launch the full setup wizard.

## Why This Change Was Made
The configuration-section parser now retains explicitly supplied blank values long enough to classify and report them as invalid, while preserving existing trimming and accepted-section behavior. The invalid-section message displays empty values clearly.

## User Impact
Operators who accidentally provide an empty section receive an actionable validation error instead of silently entering unrelated setup flows or changing the wrong configuration area.

## Context
Owner and independent reviewer exercised actual Commander-backed production paths with 13 and 12 passing assertions respectively. Regression coverage spans parser, command, and registered CLI boundaries. Existing oxfmt formatting and scoped whitespace checks passed; production code decreases by one line.
2026-08-09 15:53:04 -07:00
Peter Steinberger 810b99432c test(ui): remove source-mirror assertions (#121266) 2026-08-09 15:48:41 -07:00
Peter Steinberger 0efd5b4bc9 refactor(channels): move owner policy into plugins (#121257)
* refactor(channels): move owner policy into plugins

* test(plugin-sdk): lower surface budget after export removal
2026-08-09 15:46:18 -07:00
Peter Steinberger 42283cb609 fix: completed tasks no longer block gateway suspension (#121267)
* fix(gateway): close task terminals at run end

* refactor(agents): keep terminal task ownership internal

* test(gateway): type task-owned terminal fixtures

* test(infra): split agent run task ownership coverage
2026-08-09 15:45:44 -07:00
joshavant 59e4e31602 docs(ios): cut 2026.8.10 release notes 2026-08-09 17:45:22 -05:00
Vyctor H. Brzezowski 95fdce7049 fix(ui): confirm disruptive Control UI updates before they start (#121234)
* fix(ui): confirm disruptive Control UI updates before dispatch

Every Control UI update affordance dispatched `update.run` (or the macOS
bridge `start-update` message) on the first click, so a misclick could
install new code, restart the Gateway, and interrupt active work.

Add one canonical confirmation gate in the Control UI owner boundary and
route the sidebar/settings-sidebar/floating update card and the
Settings -> Updates row through it. The gate owns the copy, the versions,
the restart consequence, the action-specific confirm label, and the
choice between the macOS bridge and `update.run`, so the bridge fork no
longer lives in the card and no surface can drift.

CLI, API, automation, agent-driven paths, automatic update campaigns, and
the `update.run` contract are unchanged.

Addresses the Control UI portion of #117178.

* style(ui): apply oxfmt to update confirmation sources

* perf(ui): load the update confirmation lazily and share its impact copy

Keeps the Control UI startup bundle under its 317 KiB gzip ceiling: the
confirmation dialog only loads when an operator opens it.

* test(ui): drive the update confirmation in sidebar and shell wiring tests
2026-08-09 19:40:06 -03:00
Peter Steinberger e9cf5dde56 fix(gateway): keep view-only desktop sessions connected [AI-assisted] (#121256)
* fix(gateway): keep view-only desktop sessions connected

[AI-assisted]

* fix(gateway): satisfy RFB filter type checks

[AI-assisted]
2026-08-09 15:33:50 -07:00
Peter Steinberger ce53f7e82e refactor(agents)!: remove the session write lease (#121113)
* refactor(agents): remove session write lease

* refactor(plugin-sdk): deprecate session write lease

* refactor(doctor): remove session lock checks

* test(agents): remove session lease fixtures

* test(agents): align writer rebound assertion

* refactor(infra): remove retired session lock exports

* test(tooling): preserve embedded abort race shard
2026-08-09 15:30:48 -07:00
Vito Cappello 67e653e580 fix(anthropic): reject leaked Claude tool protocol output (#120734)
Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com>
2026-08-09 15:30:38 -07:00
Peter Steinberger aa0bad1ebe fix(models): honor replace mode in list output (#103103)
* fix(models): honor replace mode in list output

* fix(models): make replace rows provider-authoritative
2026-08-09 15:26:37 -07:00
Peter Steinberger ba35d2a09a fix(gateway): refresh chat metadata after runtime auth succeeds (#121193)
* fix(gateway): converge chat metadata after runtime auth

* refactor(auth): isolate runtime materialization state

* fix(auth): guard runtime route API types

* fix(auth): default runtime transport override state

* test(gateway): narrow prepared auth fixture

* fix(auth): avoid recursive external auth publication

* fix(auth): keep publication suppression internal

* refactor(auth): hide runtime publication scope

* fix(auth): isolate models list materialization

* fix(gateway): type startup auth hydration deps

* refactor(auth): extract materialization registration

* chore(auth): keep materialization helper private
2026-08-09 15:24:45 -07:00
Patrick Erichsen ce133d4a35 fix(ui): use in-app dialog for session rename (#121255) 2026-08-09 15:24:02 -07:00
Peter Steinberger 096b2764e0 refactor(tests): simplify internal test-only seams (#121243)
* refactor(tests): simplify internal test-only seams

* chore(plugin-sdk): refresh API baseline
2026-08-09 15:14:55 -07:00
Peter Steinberger 6ee409ca7b refactor(commands): share native plugin command merging (#120972) 2026-08-09 14:57:45 -07:00
Peter Steinberger 0dbdf994b3 feat(macos): isolate named app profiles (#121136)
* feat(macos): isolate named app profiles

* refactor(macos): isolate profile launch ownership

* fix(macos): avoid overlapping approvals socket access

* fix(macos): declare profile defaults concurrency ownership

* fix(macos): return profiled node launch arguments

* chore(i18n): refresh macOS profile source inventory

* fix(macos): gate profile startup before services

* test(macos): evaluate profile state before assertions

* fix(daemon): skip absent launchd deactivation

* fix(macos): fail closed on profile port conflicts

* chore(i18n): refresh profile conflict inventory

* fix(macos): ignore non-gateway launch agent claims

* test(macos): stabilize profile lifecycle timing

* fix(macos): remove stale dashboard URL

* chore(macos): refresh native source baseline
2026-08-09 14:50:15 -07:00
Peter Steinberger 0ef798d28d fix(gateway): keep hello authorization aligned with RPC access (#120888)
* fix(gateway): separate socket and device token scopes

* chore(i18n): refresh native source baseline

* style(ios): keep gateway channel within lint limit

* refactor(gateway): simplify scope metadata decoding

* ci(ui): isolate real-gateway e2e suites

* docs(ci): align runner table formatting

* chore(plugin-sdk): refresh api baseline

* ci(ui): route real-gateway retries to hosted runners

* chore(plugin-sdk): repair generated api baseline

* test(ui): select Labs toggles by title

* fix(gateway): preserve stored scopes without wire metadata
2026-08-09 14:50:07 -07:00
Peter Steinberger 306c923e3d fix(sessions): deliver generated images in agent announcements [AI-assisted] (#115126)
* fix(sessions): preserve media in agent announcements

* style(agents): format session announcement delivery
2026-08-09 14:47:14 -07:00
Peter Steinberger 4b4be7448e fix(ui): pin compact task-suggestion split button to the card top-right (#121246)
- Uses a four-column grid with inline top-row actions to keep the compact control pinned to the card corner.
- Fixes both split halves at 26px, eliminating the chevron overhang.

Release-note context: the suggested-task card's action button is now a compact split control in the top-right corner, matching the intended design.
2026-08-09 14:43:14 -07:00
Peter Steinberger 063acb9268 refactor(gateway): relocate agent turn modules (#121241) 2026-08-09 14:30:10 -07:00
Peter Steinberger 59ec48439e fix(telegram): preserve topic routing for reactions and poll answers (#121231) 2026-08-09 14:23:19 -07:00
Vincent Koc 87ba8ef82b fix(release): use frozen source build entrypoint (#121216) 2026-08-10 05:08:46 +08:00
Peter Steinberger 9ede0e9cef test(qa): remove retired scenario migration ledgers (#121229)
* test(qa): remove retired scenario migration ledgers

* fix(deps): pin noVNC dependency exactly
2026-08-09 14:06:03 -07:00
Peter Steinberger f31d9d8fa9 fix: prevent externally supervised state schema drift (#121069)
* fix: prevent externally supervised state schema drift

* refactor: isolate schema ownership support code

* test: follow canonical additive column order

* test: keep older schema fixture valid

* fix: preserve additive schema compatibility

* chore: remove release-owned changelog entry

* test: follow schema compatibility owner

* style: format schema compatibility test

* refactor: split sqlite schema sql helpers

* fix: preserve desktop schema compatibility

* fix: preserve ownership gates across platforms

* fix: preserve detached updater long paths

* fix: close external state ownership races

* chore: refresh plugin sdk api baseline
2026-08-09 14:04:40 -07:00
Peter Steinberger bff0494f33 refactor(gateway): typed internal agent turn path for recovery (#121223)
* refactor(gateway): add typed internal agent turn path

* chore(plugin-sdk): refresh API baseline
2026-08-09 13:34:40 -07:00
Peter Steinberger 2904bbfc47 test(imessage): exercise chat lookup through runtime boundary (#121205) 2026-08-09 13:33:30 -07:00
Ayaan Gazali 5262874d64 fix(telegram): reuse saved media for quoted replies
Store resolved Telegram media references on observed messages so repeated quoted-photo turns reuse retained bytes instead of downloading them again. Preserve uncached external-reply media for the active turn and keep cache metadata out of model context.

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
Co-authored-by: Ayaan Gazali <ayaangazali.work@gmail.com>
2026-08-10 02:03:01 +05:30
Peter Steinberger c37b53868d feat(memory): enable MMR diversity by default (#121224)
Apply deterministic relevance-biased diversity ordering to builtin hybrid recall and preserve distinct non-tokenized snippets.
2026-08-09 13:30:18 -07:00
Shakker cd5ec0027c docs: keep maintainer leads hands-on (#121225) 2026-08-09 21:25:34 +01:00
Peter Steinberger 690f7d7778 refactor(memory): remove obsolete readonly recovery (#120844) 2026-08-09 13:10:58 -07:00
Peter Steinberger 8dbd30ba74 feat(memory): per-entry glob patterns for extraPaths (#121209)
* feat(memory): support globbed extra paths

Allow root-relative glob patterns on existing memory.search.extraPaths entries across discovery, watching, reindex identity, and QMD migration.

* fix(memory): drop stale lease type import

* fix(memory): enforce extra path glob scope
2026-08-09 13:05:24 -07:00
Peter Steinberger db61480056 fix(windows): honor explicit executable paths (#121094) 2026-08-09 12:52:09 -07:00
Peter Steinberger dd1d151300 fix(cli): keep model status JSON clean under concurrent access (#113953)
* fix(cli): route parent model status aliases

* refactor(cli): trim model status route plumbing

* refactor(cli): break parent path descriptor cycle

* fix(cli): align model status startup checks

* chore(cli): refresh plugin SDK API baseline
2026-08-09 12:50:06 -07:00
Sarah Fortune 66dee798b5 Revert "fix: enable Slack native approvals for Enterprise Grid installs (#120…" (#121219)
This reverts commit 96798953b2.
2026-08-09 19:49:35 +00:00
Peter Steinberger 0b1fc0e279 refactor(gateway): extract agent turn service (#121215) 2026-08-09 12:45:38 -07:00
Peter Steinberger 1d271907f3 test(gateway): add lightweight real-wire session boundary harness (#121212) 2026-08-09 12:39:59 -07:00
Shakker b8b2046c08 chore: refresh bot admission contract baselines (#119278) 2026-08-09 20:33:03 +01:00
Shakker cddb6971af fix: bound bot loop retry state 2026-08-09 20:33:03 +01:00
Shakker b3d71c754f fix(clickclack): ignore agent activity inbound events 2026-08-09 20:33:03 +01:00
Shakker 564bdae462 docs: document ClickClack bot loop retry semantics 2026-08-09 20:33:03 +01:00
Shakker 3d80a2f6f2 fix(clickclack): isolate bot loop budgets by thread 2026-08-09 20:33:03 +01:00
Shakker 5a659c624b fix: preserve bot loop retries 2026-08-09 20:33:03 +01:00
Jacqueline Henriksen 762fa6e428 feat(clickclack): allow opt-in bot-to-bot inbound dispatch 2026-08-09 20:33:03 +01:00
Vincent Koc 2e4683ba7f fix(qa): finish aggregate suites without shared cache races (#120816)
* fix(qa): bound parallel aggregate script runs

Punchcard-Session: amber-workshop-workshop-36
Co-authored-by: Dallin Romney <6581799+RomneyDa@users.noreply.github.com>

* test(tui): wait for adopted session frame

Punchcard-Session: amber-workshop-workshop-36

---------

Co-authored-by: Dallin Romney <6581799+RomneyDa@users.noreply.github.com>
2026-08-10 03:32:04 +08:00