796b6fcdcf
fix(agents): drop orphaned thinking blocks when NO_REPLY text leaves an assistant message with only thinking content ( #99620 ) ( #99772 )
...
* fix(agents): drop silent reasoning-only replay turns
Prevent NO_REPLY cleanup from leaving signed reasoning that merges into the next assistant tool-use turn and bricks strict-provider sessions.
Related: #99620
Co-authored-by: SunnyShu <shu.zongyu@xydigit.com >
* docs: refresh transcript hygiene map
Regenerate the docs map after documenting silent reasoning-only replay cleanup.
Co-authored-by: SunnyShu <shu.zongyu@xydigit.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-21 00:34:15 -07:00
Peter Steinberger and GitHub
be5e427f56
feat(dashboard): plugin-declared widget data bindings and action verbs ( #112083 )
...
* feat(dashboard): add plugin capability declarations
* docs(dashboard): describe plugin capabilities
* fix(plugins): preserve registry map cloning
* fix(dashboard): make plugin grant ids unambiguous
* fix(dashboard): align generated plugin grant ids
* chore(boards): internalize verb ids and refresh protocol snapshots
2026-07-20 22:43:04 -07:00
Jason (Json) and GitHub
7b683b0792
fix(bootstrap): let users name new agents ( #112009 )
2026-07-20 20:12:59 -06:00
e27e2d08fd
feat(policy): check authored message routing ( #111087 )
...
* feat(policy): check authored message routing
* fix(policy): normalize routing probe comparisons
* Policy: keep routing evidence types internal
* Docs: refresh policy map
---------
Co-authored-by: Omar Shahine <10343873+omarshahine@users.noreply.github.com >
2026-07-20 17:31:29 -07:00
Peter Steinberger and GitHub
a52eb2134b
feat(apps): connect multiple gateways simultaneously ( #111932 )
...
* feat(apps): support simultaneous gateways
* fix(apps): satisfy multi-gateway checks
* chore(apps): refresh multi-gateway baselines
* style(android): format gateway fleet code
2026-07-20 13:06:29 -07:00
Peter Steinberger and GitHub
96ffdf15c7
docs(web): user guide for session dashboards ( #111834 )
...
* docs(web): user guide for session dashboards
* docs: format dashboards page
2026-07-20 08:23:14 -07:00
Peter Steinberger and GitHub
154a49a78b
feat(dashboard): widget capabilities — net CSP, host tools, hardened shared sandbox ( #111687 )
...
* feat(boards): enforce widget capability grants
* feat(ui): expose dashboard widget capabilities
* test(dashboard): align rebased gateway contracts
* refactor(dashboard): finish capability alignment
* chore: internalize unused board sandbox exports
* test(dashboard): bind grants to widget instances
* fix(dashboard): close widget authority lifetime gaps
* refactor(ui): preserve modular widget frame ownership
* test(ui): preserve explicit MCP App lease refresh
* test(ui): use shared dashboard sandbox server
* fix(ui): settle widget requests on reconnect
* fix(ui): retry transient widget document loads
* refactor(dashboard): document WebRTC egress residual
* fix(dashboard): clear landing checks
2026-07-20 06:54:44 -07:00
Peter Steinberger and GitHub
9056c43368
docs(gateway): add client-building and embedding guides ( #111726 )
...
* docs(gateway): add client-building and embedding guides
* docs(gateway): harden package rollout guidance
2026-07-20 02:12:52 -07:00
Peter Steinberger and GitHub
343cfba638
fix(clickclack): private API base for gated hostnames and single discussion-provider registration ( #111724 )
...
* fix(clickclack): split API base and refresh discussion provider
* chore: regenerate bundled channel config metadata and docs map for the apiBaseUrl key
2026-07-20 01:27:13 -07:00
Peter Steinberger and GitHub
7d4dccf959
improve(swarm): close out wait, phase, and worker follow-ups ( #111605 )
...
* fix(codex): support full swarm wait budgets
* feat(ui): bucket swarm dots by phase
* docs(swarm): document flat worker patterns
* fix(codex): configured per-tool timeout still wins over swarm wait default
* fix(codex): outer swarm-wait watchdog outlives the 600s budget (cap + grace)
* fix(ui): order swarm phase buckets by observation rank
* fix(ui): repair rank-order widget test — proper lit render container, untangle sibling assertions
* fix(ui): implicit swarm phase assignment only on child creation events
* test(ui): split swarm activity integration coverage
2026-07-19 20:11:54 -07:00
Peter Steinberger and GitHub
5420c5c409
feat(clickclack): session discussions — bound channels, side agent, lifecycle sync ( #111503 )
...
* feat(clickclack): add session discussions
* chore: remove release-owned changelog entry
* refactor(clickclack): split discussion service workflows
* fix(clickclack): satisfy plugin surface gates
* fix: narrow routing peer in inbound test and refresh docs map
2026-07-19 14:47:14 -07:00
Peter Steinberger and GitHub
c7e7ac2728
refactor: remove expired plugin compatibility surfaces ( #111451 )
...
* docs(secrets): remove retired web credential paths
* refactor(web): remove retired provider compatibility paths
* refactor(providers): delete retired compatibility routes
* refactor(secrets): remove retired credential aliases
* refactor(plugin-sdk): delete retired compatibility surfaces
* docs(plugin-sdk): remove retired migration guidance
* chore(plugin-sdk): refresh rebased surface budgets
* chore(plugin-sdk): refresh API removal baseline
* refactor(compat): migrate retired internal callers
* chore(plugin-sdk): refresh current-main baselines
* test(config): migrate plugin-owned secret assertions
* test(gateway): narrow plugin secret refs
* fix(plugin-sdk): preserve private boundary type identity
* chore(compat): remove stale sweep references
* chore(lint): lower max-lines budget
* refactor(secrets): remove unused web helper
* build(plugin-sdk): drop removed compat entries
* chore(plugin-sdk): refresh rebased API baseline
* chore(plugin-sdk): use Linux API baseline hash
* fix(plugin-sdk): preserve private bundled build entries
* fix(plugin-sdk): package private runtime facades
* fix(plugins): preserve external credential contracts
2026-07-19 11:04:48 -07:00
Peter Steinberger and GitHub
4c55a4fc28
feat(plugins): expose requester context to tool hooks ( #111190 )
...
* feat(plugins): expose requester context to tool hooks
* chore(plugin-sdk): restore generated API baseline
* chore: drop release-owned changelog entry
* docs: refresh documentation map
2026-07-19 10:31:58 -07:00
Peter Steinberger and GitHub
adf02e8de4
refactor(plugin-sdk): retire global provider publication ( #111426 )
...
* refactor(plugin-sdk): retire global provider publication
* docs: refresh SDK migration map
2026-07-19 07:44:11 -07:00
Peter Steinberger and GitHub
783a5d21cf
refactor(config): purge numeric tuning knobs behind built-in defaults ( #111382 )
2026-07-19 07:35:45 -07:00
Peter Steinberger and GitHub
46b9a3e12d
docs: Swarm user guide ( #110325 ) ( #111384 )
2026-07-19 05:33:00 -07:00
Peter Steinberger and GitHub
06f5f73e47
refactor: own model discovery by runtime lifecycle ( #111173 )
...
* refactor(agents): prepare model runtime catalogs
Build lifecycle-owned model and auth snapshots, carry prepared stores into hot agent paths, and serialize config/auth publication.
Credits @zeroaltitude's #90741 investigation and benchmark approach.
* refactor: finish lifecycle-owned model discovery
* fix: align prepared model catalog contracts
* test: align lifecycle catalog mocks
* test: fix prepared catalog type fixtures
* refactor: split prepared model runtime ownership
* fix: import prepared runtime replacement gate type
* test: split media runtime coverage
* test: preserve image auth fixture key types
* test: isolate lifecycle gate fixtures
* chore: keep release changelog owned
* refactor: finish prepared model catalog migration
* test: keep catalog review fixtures scanner-safe
* refactor: preserve lifecycle model runtime ownership
* fix: close prepared runtime lifecycle races
* fix: preserve compaction workspace fallback
* chore: document btw generation rebinding
* fix: preserve prepared generation boundaries
* fix: keep model-list discovery flag explicit
* fix: serialize standalone model runtime activation
* refactor: migrate subagent model catalog lookup
* refactor: clarify doctor catalog lookup seam
* chore: refresh plugin sdk api baseline
* test: migrate swarm catalog dependency
* refactor(telegram): rename runtime catalog seam
* refactor: extract model-aware tool context
* test(models): isolate lifecycle catalog fixtures
* refactor(agents): avoid btw parameter rebinding
* fix(net-policy): align root ipaddr dependency
* fix(build): keep net policy dependency bundled
* fix(deadcode): document net policy compile dependency
2026-07-19 05:30:54 -07:00
Peter Steinberger and GitHub
bbcfec9e96
fix(channels): prevent outbound echoes and expose native login ( #111341 )
...
* fix(channels): centralize outbound echo suppression
* chore(plugin-sdk): refresh channel outbound surface
* test(commands): avoid native plugin fallback loading
* refactor(channels): separate outbound echo state
* docs(changelog): note channel action decisions
* fix(discord): align webhook preflight call
* fix(discord): use type-only thread binding import
* fix(channels): stream login blocks and widen turn results
* test(channels): narrow drop-capable turn results
* fix(channels): address echo and reply edge cases
2026-07-19 03:49:11 -07:00
Peter Steinberger and GitHub
ef91ce5712
feat: keep reset session history searchable ( #111194 )
...
* feat(sessions): retain reset history in sqlite with physical disk budget
* fix(sessions): satisfy test-types, knip export scan, and docs map
* fix(sessions): align behavioral suites and flip proof with retained history, route-aware cleanup plans
2026-07-19 03:38:51 -07:00
Peter Steinberger and GitHub
b9fa1ffa27
feat(gateway): system change history RPC and Ask OpenClaw recent-changes panel ( #111286 )
...
* feat(gateway): system change history RPC and Ask OpenClaw recent-changes panel
* test(gateway): fix journal fixtures, split custodian page tests, refresh docs map
* chore: quiet lint on journal reader tests and custodian harness
2026-07-19 02:38:05 -07:00
4efcea1fd2
feat(browser): send pages to OpenClaw from the Chrome extension ( #111158 )
...
* feat(browser): send pages to the main session from the Chrome extension
One-click page share in the OpenClaw Chrome extension: toolbar popup with an
optional note, page/selection context menu, and Alt+Shift+S. Capture is
selection-first with a readability heuristic, X/Twitter thread extraction, and
Google Docs plain-text export via the user's session cookies. Payloads ride the
existing paired relay WebSocket as a new pageShare message; the gateway-only
page-share sink wraps page text in the external-content safety boundary, then
enqueues a main-session system event and requests an immediate heartbeat
(hooks/wake semantics). Node-hosted relays report a clear unsupported error.
Capture heuristics adapted from Nat Eliason's MIT-licensed send-to-openclaw.
Co-authored-by: Codex <codex@openai.com >
* fix(browser): keep page-controlled metadata inside the share safety boundary
Review findings: move title/URL inside wrapExternalContent (a hostile <title>
must not become trusted header text), prefer the user's selection over the
full Google Docs export, and pass the context-menu selectionText through so
iframe selections and selections cleared during relay reconnect still win.
* fix(browser): bind context-menu shares to the click-time document
Selection shares from the context menu now send the click snapshot directly
(no recapture), so navigations during relay reconnect cannot mislabel the
source and iframe selections are preserved. The Google Docs selection probe
scans all accessible frames before falling back to the full-document export.
* test(browser): expect the page-share handler in relay server args
* fix(browser): probe only the main frame for Google Docs selections
All-frame injection rejects wholesale when one frame is inaccessible and
returns child frames in nondeterministic order, so the probe now reads the
main frame only. Child-frame selections still share correctly through the
context menu's click-time selectionText; toolbar/shortcut entry sends the
full page for that case (named tradeoff in the code comment).
* fix(browser): satisfy page-share CI gates
---------
Co-authored-by: Codex <codex@openai.com >
2026-07-19 01:07:28 -07:00
Peter Steinberger and GitHub
ccb147518c
feat(agents): Swarm core — collector spawn, agents_wait, structured output, caps (gated) ( #110932 )
...
* docs: add Swarm implementation spec
* feat(agents): Swarm core — collector spawn, agents_wait, structured output, fastMode, caps
Implements docs/plan/swarms.md §4-6: tools.swarm config gate (default off),
collector-mode sessions_spawn (collect/outputSchema/fastMode/groupId), fail-closed
child approvals, agents_wait race-semantics tool, per-group FIFO scheduler with
maxConcurrent/maxChildrenPerGroup/maxTotalPerGroup caps, additive registry and
state-schema columns (no schema-version bump), and colocated tests.
Part of #110325
* fix(agents): rebase reconciliation — preserve swarm state columns
* fix(agents): O(1) collector session index, cheap-first preflight, collector start lifecycle hooks
Autoreview findings: replace the per-request full registry scan with an
index-maintaining run map and gate the persisted-store fallback behind
isSubagentSessionKey; emit subagent_progress/subagent_spawned from the swarm
scheduler start callback so collector children produce balanced plugin
lifecycle events.
* chore(protocol): regenerate Swift gateway models for swarm fields
* fix(agents): lint cleanup — typed catch, explicit microtask flush, no executor return
* fix(agents): knip/test-support/max-lines cleanup for swarm surfaces
* fix(agents): keep tool-catalog ui-safe — callers pass prepared swarmEnabled fact
resolveSwarmConfig value-import in tool-catalog dragged the server graph into
the Control UI bundle via tool-policy-shared (UNLOADABLE_DEPENDENCY on
subpath aliases). Catalog stays pure; the gateway tools-catalog handler
resolves the gate and passes the boolean.
* fix(agents): reconcile swarm spawn pipeline
* fix(agents): refresh swarm tool metadata
* fix(apps): sync swarm tool localization
* style(agents): compact tool display metadata
* fix(plugin-sdk): account for swarm config surface
2026-07-18 23:30:11 -07:00
Peter Steinberger and GitHub
a2ccbdfa96
feat(cli): list and resolve pending approvals headlessly ( #111060 )
...
* feat(cli): manage pending approvals
* fix(cli): show terminal-safe approval ids raw, reserve id64 tokens for hostile ids
* fix(cli): preserve opaque approval ids verbatim
* fix(cli): tokenize leading-hyphen approval ids for pasteability
* fix(cli): lossless utf16 id64 tokens for opaque approval ids
* fix(cli): resolve approval ids verbatim, no input trim
* fix(cli): scope-only approval auth, reviewer-safe system-agent summaries, skip ill-formed ids
* fix(cli): validate pending approval ids
* fix(cli): align approvals catalog and docs map
2026-07-18 23:23:49 -07:00
4074e0cae1
fix(browser): close tracked tabs after gateway restart ( #110797 )
...
* fix(browser): preserve tab cleanup across restarts
* fix(browser): disambiguate restart tab aliases
* fix(browser): keep untrack selection type private
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-18 22:24:20 -07:00
Peter Steinberger and GitHub
5e51c4bbcc
feat(gateway): auto-approve trusted-proxy browser device pairing ( #111189 )
...
* feat(gateway): auto-approve trusted-proxy browser device pairing
Adds gateway.auth.trustedProxy.deviceAutoApprove so team gateways behind an
identity-aware proxy (Cloudflare Access, oauth2-proxy, Pomerium) can skip the
manual `openclaw devices approve` step for new Control UI/WebChat devices.
Auto-approval fires only for a new (unpaired) operator browser device on a
connection that already passed trusted-proxy auth with a resolved allowUsers
user. Scope upgrades on existing devices and node pairing stay manual. Granted
scopes are capped to the configured set intersected with the connection's
x-openclaw-scopes proxy cap, operator.admin is rejected at config validation,
and the pairing-store approval rechecks new-device status under the store lock
so a repair/upgrade or concurrent approval can never be silently widened. Each
auto-approval emits an audit log line with the proxy user and granted scopes,
and `openclaw security audit` warns when the mode is enabled.
* docs: regenerate docs map for trusted-proxy auto-approval section
2026-07-18 21:23:55 -07:00
Peter Steinberger and GitHub
68771ebdfe
feat(cron): script payloads behind the trigger gate ( #111112 )
...
Run script payloads through the shared headless code-mode executor with payload-grade budgets and success-only trigger.state persistence.
Reuse cron delivery, wake, pacing, and dangerous trigger-gate contracts for notify, wake, and nextCheck results.
2026-07-18 19:24:12 -07:00
Peter Steinberger
b51e3d02c7
docs(meetings): mention Discord voice channels
2026-07-19 02:35:21 +01:00
Peter Steinberger
09dd616782
docs(meetings): add platform comparison guide
2026-07-19 02:17:43 +01:00
Peter Steinberger and GitHub
d96a87e8e9
docs: document session automation contracts ( #111095 )
2026-07-18 18:10:14 -07:00
Peter Steinberger and GitHub
fdf44edf4d
docs: document channel ingress guarantees ( #111069 )
2026-07-18 17:26:41 -07:00
Peter Steinberger and GitHub
b4187ced90
feat: add live-validated Zoom meeting guest plugin ( #111048 )
...
* feat(zoom-meetings): add browser guest transport
* fix(zoom-meetings): type reusable refresh result
* test(meeting-bot): bind reusable refresh callback
* chore(zoom-meetings): use existing plugin label
* chore(zoom-meetings): defer changelog to release
* test(zoom-meetings): cover node setup through public host
2026-07-18 17:17:26 -07:00
Peter Steinberger and GitHub
4b7d6fa3bf
docs: align interactive client behavior ( #111047 )
2026-07-18 17:00:14 -07:00
Peter Steinberger and GitHub
56eef79989
fix(channels): recover dead-lettered inbound events ( #111029 )
...
* feat(channels): add ingress dead-letter recovery
* fix(channels): preserve dead-letter compatibility
* docs: refresh CLI map for channel dead letters
2026-07-19 00:44:23 +01:00
Peter Steinberger and GitHub
7562b79465
refactor(channels): share durable ingress monitor ( #111017 )
...
* refactor(channels): share durable ingress monitor
* fix(channels): harden ingress monitor shutdown
* docs: refresh SDK documentation map
2026-07-19 00:42:08 +01:00
Peter Steinberger and GitHub
556a2ee276
feat(cron): add per-job dynamic cadence ( #110978 )
...
Add optional per-job pacing bounds across the cron API, CLI, tool schema, public output, and SQLite job envelope, requiring at least one bound. Allow only the currently running paced job to record a one-shot next_check proposal and carry it through isolated-run completion.
After successful runs, clamp the proposal to the job bounds and persist an exact one-shot slot marker so maintenance preserves only that timestamp. Clear the marker on runs, edits, and schedule normalization; preserve existing no-proposal, skip, timeout, and error scheduling behavior.
2026-07-18 23:43:39 +01:00
Peter Steinberger and GitHub
a5ec26fa3c
fix: prevent LINE channel reloads from hanging on stalled deliveries ( #110971 )
...
* fix(channels): bound ingress shutdown and document retention
* docs(channels): note ingress shutdown behavior
* chore: keep release notes in pull request
* docs: refresh documentation map
* fix(line): preserve deferred claims during shutdown
* fix(line): handle late abandonment failures
2026-07-18 23:25:33 +01:00
Peter Steinberger and GitHub
460e3e669c
fix(canvas): restore shipped policy/host-disable contracts; harden workspaces doctor cleanup ( #110927 )
...
* fix(dashboard): harden canvas and workspace compatibility
* docs(web): add dashboard architecture
* chore: remove release-owned changelog entry
* docs: update dashboard architecture map
2026-07-18 23:00:00 +01:00
Peter Steinberger and GitHub
81362bf643
feat(apps,ui): question surface parity and composer takeover ( #110681 )
...
* feat(apple): question parity — persistent summaries, skip, reconnect fallback, macOS keyboard
* feat(android): question parity — persistent summaries, skip, reconnect fallback
* feat(ui): question panel replaces composer while expanded
* fix(apps): regenerate question parity contracts
* fix(apps): preserve question reconciliation state
* fix(apps): keep question terminal state monotonic
* test(android): satisfy question test formatting
* fix(security): restore skill audit file reads
* fix(apps): harden question parity edge cases
* fix(apps): preserve expired question summaries
* fix(apps): keep question recovery retries current
* fix(apps): retry stale question recovery snapshots
* fix(android): reset stale question retry budgets
* docs(tools): clarify question composer takeover
* fix(apps): satisfy question recovery release gates
* fix(apps): preserve unknown question outcomes
* fix(apps): harden question action state
* fix(apps): keep unavailable questions terminal
* fix(apps): finalize local question outcomes
* fix(apps): preserve question card API
* fix(apps): reconcile external question answers
* fix(apps): reset question backoff budget
* chore(apps): refresh native i18n inventory
* fix(android): distinguish question skip progress
* fix(android): reconcile locally expired questions
* fix(apps): keep question recovery state fresh
* docs: note question surface parity
* fix(ui): reconcile IME draft before question takeover
* docs: leave question parity notes to release workflow
2026-07-18 21:42:15 +01:00
Peter Steinberger and GitHub
1cacb12c4d
feat(canvas): give show_widget a design system — theme tokens, base styles, live host theme bridge ( #110832 )
2026-07-18 21:05:16 +01:00
Peter Steinberger and GitHub
be80cc747c
feat(zalouser): recover accepted messages after local crashes ( #110916 )
...
* feat(zalouser): add durable ingress recovery
* fix(zalouser): settle aborted ingress claims
* fix(zalouser): preserve concurrent ingress lanes
* docs: refresh generated channel map
* refactor(zalouser): simplify ingress abort listener
2026-07-18 20:32:30 +01:00
Peter Steinberger and GitHub
6589788c02
docs: The main session concept page and shipped-sidebar updates ( #110905 )
...
* docs: add The main session concept page and cross-links
* docs: precise memory-priming wording on the main-session page
* docs: update Control UI sidebar description to the Home and zones model
2026-07-18 20:23:09 +01:00
Peter Steinberger and GitHub
3572fba7f9
feat(plugin-sdk): guard ingress effects once per event ( #110846 )
...
* feat(plugin-sdk): add ingress effect guard
* docs: refresh docs map
* fix(plugin-sdk): propagate effect commit failures
* fix(plugin-sdk): isolate ingress effect namespaces
2026-07-18 19:23:39 +01:00
Peter Steinberger and GitHub
a115af2774
feat(ui): add reactive OpenClaw health nudges ( #110708 )
...
* feat(ui): add reactive custodian health nudges
* fix(ui): distinguish stopped channels from startup failures
* test(ui): update custodian route gateway fixture
* fix(ui): preserve current channel health failures
* fix(ui): ignore recovered channel errors
2026-07-18 15:44:29 +01:00
Peter Steinberger and GitHub
a068d38b66
refactor(plugins)!: remove experimental workspaces plugin ( #110416 )
...
* refactor(plugins)!: remove experimental workspaces plugin
* fix(doctor): remove retired workspaces plugin state
* refactor(doctor): settle retired-workspaces cleanup before legacy-state detect
* chore(i18n): leave workflow-owned locale artifacts to the locale refresh
* ci: retrigger after GitHub scheduling outage
2026-07-18 10:56:37 +01:00
Peter Steinberger and GitHub
654560f289
feat(ui): add Apps & extensions page to the Control UI ( #110563 )
...
* feat(ui): add Apps & extensions page
* feat(ui): add per-theme app-art card illustrations
* docs: describe the Apps and extensions page in control-ui
* fix(ui): keep icons.ts under max-lines, drop unused export, regen docs map
2026-07-18 09:52:34 +01:00
Peter Steinberger and GitHub
ab093bded4
docs(onboarding): finalize phase status and phase 7 decision ( #110543 )
...
* docs(onboarding): final phase status and phase 7 decision
* docs(onboarding): remove shipped refresh follow-up
* docs(onboarding): remove shipped browser follow-up
2026-07-18 09:44:20 +01:00
42be965eac
improve(mattermost): restart only the changed account on config reload ( #99312 )
...
* improve(gateway): restart only the changed account on channel config reload
When a config change is scoped entirely to one channel account
(channels.{kind}.accounts.{accountId}[.*]), restart just that account
instead of the whole channel. Wholesale channel restarts disconnect every
account on the channel; on gateways running many accounts, each
account-scoped config write (adding an account, changing one account's
settings) briefly dropped every other account's connection.
The reload plan gains a restartChannelAccounts bucket populated only when
all of a channel's changed paths are account-scoped; any channel-global
path falls back to the existing wholesale restart, and a channel scheduled
for wholesale restart drops its per-account entries so each (channel,
account) pair restarts at most once. The executor runs per-account
restarts through the existing stopChannel/startChannel accountId parameter.
* fix(gateway): preserve account reload admission
* fix(gateway): scope surgical reloads to isolated plugins
* test(gateway): avoid preactivating reload snapshot
* docs(channels): define account reload isolation contract
* fix(gateway): preflight scoped account reloads
* fix(gateway): re-drain live scoped reload targets
* docs: refresh generated docs map
* fix(mattermost): align scoped reload with durable ingress
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-18 09:33:06 +01:00
Josh Avant and GitHub
6def1a9c04
fix: prevent repeated tool-call IDs from poisoning sessions ( #110518 )
...
* fix(agents): pair repeated tool calls by occurrence
* docs: regenerate docs map
2026-07-18 00:49:40 -07:00
Peter Steinberger and GitHub
18a49b3a78
refactor(discord): authorize widgets by channel audience ( #110522 )
...
* refactor(discord): authorize widgets by channel audience
* docs: refresh Discord Activity map
2026-07-18 08:42:40 +01:00
Peter Steinberger and GitHub
d7de67ae02
feat: ask_user follow-ups — harness convergence, channel finalization + reactions, native cards, docked web panel ( #110372 )
...
* feat(ask-user): follow-up harness slice
* feat(ask-user): follow-up channels slice
* feat(ask-user): follow-up native slice
* feat(ui): dock question panel above composer with stepper and compact stream summaries
* docs: refresh follow-up integration maps
* test(ui): align terminal summary proof
* fix(infra): echo declared option answers in terminal status when free-text is allowed
* fix(infra): keep reaction answering when display labels are formatter-adjusted
* fix(agents): settle plain-text claims only after question registration commits
* fix(agents,apps): commit-ordered claim persistence, claim-aware prompt delivery, non-blocking question refresh
* fix(harness,infra): reaction-appropriate question copy, caller presentations honored
* fix(native,infra,agents): local-expiry eviction, value-addressed reactions, reserve-before-request
* fix(infra,android): dual-mode question resolver for compact callbacks; reset terminal retention on replayed pending
* fix(harness,discord): claim-aware prompt delivery in run helper; escape finalization labels
* fix(macos): merge transient-content visibility with question cards after main sync
* fix: repair ask user follow-up CI
* test: update limited bootstrap scope expectation
* fix: retain shared question card API
* chore: refresh native i18n inventory
2026-07-18 03:32:39 -04:00