Commit Graph

72711 Commits

Author SHA1 Message Date
xin zhuang
7653bcce58 fix(agents): classify Google invalid API keys as auth (#114825) 2026-07-27 23:26:56 -04:00
sunlit-deng
478a895623 fix(voice-call): keep custom tail cursor aligned with short reads (#108322)
* fix(voice-call): keep custom tail cursor aligned with short reads

* test(voice-call): preserve timer behavior after rebase

* fix(voice-call): reset custom tail after short-read truncation

* style(voice-call): format custom log regression

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-27 23:25:11 -04:00
metaforismo
a84ea8b732 fix(ios): suppress stale delayed UI actions (#113062)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-27 23:19:07 -04:00
haruai
b168e4b5ed fix: align macos remote url validation copy (#98548)
* fix: align macos remote url validation copy

* fix(macos): match remote URL guidance to policy

Co-authored-by: haruaiclone-droid <281899875+haruaiclone-droid@users.noreply.github.com>

* chore(i18n): refresh native source inventory

Co-authored-by: haruaiclone-droid <281899875+haruaiclone-droid@users.noreply.github.com>

---------

Co-authored-by: haruaiclone-droid <281899875+haruaiclone-droid@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-27 23:18:41 -04:00
Peter Steinberger
124911aee0 fix: prevent cron and Workboard lifecycle regressions (#114865)
* fix: harden cron and Workboard lifecycle races

* fix: use canonical card identity for Workboard drops
2026-07-27 23:17:15 -04:00
Vito Cappello
ac795a5821 perf(skills): build snapshot cache key lazily (#114584)
Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com>
2026-07-27 23:16:27 -04:00
Peter Steinberger
d7622734d5 feat(code-mode): unify node MCP namespaces (#114876) 2026-07-27 23:07:06 -04:00
TUARAN
5723d36b46 fix(doctor): honor configured plugin load paths (#113200) 2026-07-27 23:06:01 -04:00
joshavant
8d682b74bd test(messages): lock external alias authorization order 2026-07-27 22:05:04 -05:00
Peter Steinberger
e0a119dabf fix(channels): own account status in one closed state machine (#114775)
* refactor(channels): own account status in one closed state machine

* fix(gateway): stop storing derived reasons and configured in channel runtime

* fix(channels): separate linkage from configuration in whatsapp and zalo personal

* fix(cli): render channel state reasons apart from runtime failures

* refactor(channels): keep account-state projection internal to its owner
2026-07-27 23:04:28 -04:00
Peter Steinberger
ea707382fd feat(code-mode): first-class nodes API (#114877)
* feat(agents): add nodes to code mode

* fix(agents): add code mode nodes discovery hint
2026-07-27 23:03:23 -04:00
Vito Cappello
b244adf430 fix: speed up Control UI startup model projection (#114605)
Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com>
2026-07-27 23:01:01 -04:00
Peter Steinberger
a0530259e2 fix(ui): preserve navigation during startup (#114828) 2026-07-27 23:00:04 -04:00
Peter Steinberger
feb5883089 docs: add Buzz to generated plugin inventory (#114875)
* docs: refresh Buzz plugin inventory

* docs: refresh generated docs map
2026-07-27 22:59:32 -04:00
Vito Cappello
073f7a9ba2 improve(agents): avoid duplicate subagent registry write (#114705)
* perf(agents): avoid duplicate subagent registry write

* fix(agents): isolate subagent task runtime origin

---------

Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com>
2026-07-27 22:57:31 -04:00
Peter Steinberger
eeba5a3433 fix(tui): prevent unsafe errors and out-of-order streamed replies (#114869)
* fix(tui): redact and sanitize terminal errors

Co-authored-by: Marnie0415 <xzh110415@gmail.com>

* fix(tui): keep streamed answers and tools chronological

Co-authored-by: Foxy6670 <snorblok@gmail.com>

* fix(tui): keep revised answers after tool calls

Co-authored-by: Foxy6670 <snorblok@gmail.com>

* fix(tui): discard retracted streamed assistant rows

Co-authored-by: Foxy6670 <snorblok@gmail.com>

---------

Co-authored-by: Marnie0415 <xzh110415@gmail.com>
Co-authored-by: Foxy6670 <snorblok@gmail.com>
2026-07-27 22:56:58 -04:00
Peter Steinberger
577a0642fa fix(plugin-sdk): classify loopback hosts consistently (#114832)
* fix(plugin-sdk): expose loopback host classifier

* fix(ollama): remove stale host normalizer import

* chore: keep release notes in PR context
2026-07-27 22:55:44 -04:00
sunlit-deng
b4e246be01 fix(line): preserve webhook object error details (#113606)
* fix(line): preserve webhook object error details

* fix(line): preserve structured errors on the live webhook route

* test(line): provide the complete typed runtime to webhook proof

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-27 22:46:21 -04:00
Peter Steinberger
f2a12916d7 fix(codex): refuse Platform routes on a subscription-signed native Codex home (#114719)
A user-home app-server keeps its native Codex account, and OpenClaw verified only
half of that contract. A subscription route was checked against the native
account, but a Platform (API-key) route was not: an operator signed in to Codex
with a ChatGPT subscription who selected an API-billed model silently spent their
plan. Both directions of the same billing boundary now share one account/read
check. An absent account is left alone, since a native home may serve a custom
model provider that reports no OpenAI account at all.

The home-scope rule behind #114397 was also expressed four times: two
prepared-auth call sites spread it in conditionally from raw plugin config, two
others read resolved start options, and the supervision connection applied its
own default inline. resolveCodexAppServerHomeScope now owns it, and homeScope is
a required argument of resolveCodexAppServerPreparedAuthHandoff, so a new call
site that forgets it fails to compile instead of failing every turn.

Docs dropped the stale user-home paragraph that still described the startup
failure #114397 removed and told operators to delete a working OpenAI profile.
2026-07-27 22:42:18 -04:00
Peter Steinberger
4273ca9dbd refactor(sessions): remove file-era transcript runtime (#113233)
* refactor(sessions): keep helper transcripts in memory

* refactor(sessions): remove file-era transcript storage

* test(sessions): use SQLite identity in attempt persistence

* test(codex): isolate legacy transcript fixtures

* fix(sessions): preserve SQLite transcript identity

* fix(sessions): harden transcript lifecycle invariants

* fix(sessions): validate transcript identities

* fix(sessions): close identity compatibility gaps

* fix(sessions): preserve leaf and plugin identities

* fix(sessions): retain dispatch transcript targets

* fix(sessions): preserve active transcript context

* fix(sessions): isolate artifact accounting

* fix(sessions): bound SQLite usage accounting

* fix(sessions): retain bounded latest usage

* fix(sessions): align rebased transcript targets

* test(sessions): align accessor scope fixture

* fix(telegram): derive SQLite transcript identity

* refactor(sessions): remove file-era compaction residue

* chore(sessions): lower max-lines baseline

* fix(sessions): preserve structured transcript identity

* test(sessions): align doctor identity assertions

* fix(sessions): isolate default SDK database

* refactor(sessions): remove dead file-era exports

* fix(sessions): reconcile SQLite transcript identity

* fix(sessions): pass checkpoint identity explicitly

* test(sessions): make entry field probe explicit

* test(sessions): satisfy transcript cleanup lint

* test(sessions): align diagnostics identity proof

* fix(sessions): finish transcript runtime teardown

* fix(sessions): preserve transcript identity invariants

* fix(sessions): harden transcript compatibility edges

* fix(sessions): preserve checkpoint transcript anchors

* fix(sessions): preserve SQLite lifecycle invariants

* fix(sessions): retarget compaction successors

* test(sessions): preserve transcript fixture semantics

* feat(plugin-sdk): add command transcript targets

* fix(sessions): serialize transcript rewrites

* fix(sessions): validate legacy successor identity

* fix(sessions): normalize compaction ownership

* fix(sessions): validate successor identity before adoption

* fix(sessions): preserve plugin transcript ownership

* fix(sessions): carry transcript identity through commands

* fix(sessions): import legacy checkpoint artifacts into SQLite

* fix(sessions): preserve successor transcript ownership

* fix(sessions): align transcript consumers with target identity

* fix(sessions): scope transcript token estimates

* fix(sessions): retain agent identity across lifecycle hooks

* fix(sessions): resolve scoped SQLite targets

* fix(sessions): isolate lifecycle transcript targets

* fix(sessions): validate compaction agent ownership

* fix(sessions): preserve reset and cleanup lifecycle

* fix(sessions): serialize prompt cleanup lifecycle

* fix(sessions): remove stale lock import

* fix(sessions): preserve reset target context

* fix(sessions): fence prompt reload takeover

* fix(sessions): unblock abort and default lifecycle reads

* fix(sessions): validate legacy successor scope

* fix(sessions): reject metadata-only runtime rows

* fix(sessions): propagate custom transcript stores

* fix(sessions): preserve adopted retry targets

* fix(sessions): allow unkeyed usage reads

* fix(sessions): harden runtime target boundaries

* fix(sessions): serialize retry transcript writes

* fix(sessions): bound prompt reload disposal

* fix(sessions): complete retry marker identity

* fix(sessions): keep legacy marker identity minimal

* test(sessions): tighten teardown fixture types

* fix(sessions): preserve compatibility target identity

* test(sessions): persist post-checkpoint boundary turn

* test(sessions): align runtime store mock contracts

* style(sessions): simplify persisted identity guard

* fix(sessions): prefer complete typed targets

* fix(sessions): recover legacy marker targets

* test(sessions): align marker lookup fixture scope

* fix(sessions): validate partial transcript targets

* fix(sessions): reconcile partial transcript identities

* fix(sessions): canonicalize compatibility identities

* test(sessions): cover compatibility aliases

* fix(sessions): adopt legacy successor identity

* fix(sessions): preserve usage read identity

* fix(sessions): preserve partial marker compatibility

* fix(sessions): validate legacy successor mappings

* fix(sessions): reconcile marker store mappings

* fix(sessions): preserve legacy fallback identity

* fix(sessions): harden marker alias resolution

* fix(sessions): prefer verified successor aliases

* fix(sessions): resolve preferred marker aliases

* fix(sessions): serialize cleanup admission

* fix(sessions): align marker lookup scopes

* fix(codex): type marker alias summaries

* style(sessions): satisfy changed lint

* test(sessions): align structured target assertions

* fix(sessions): reconcile latest identity contracts

* fix(sessions): validate transcript identity boundaries

* docs(sessions): explain stable registry keys

* fix(sessions): harden compatibility target round trips

* fix(sessions): port usage identity to split modules

* test(sessions): align subagent transcript identity

* fix(sessions): finish transcript identity migration

* fix(agents): route subagent completion capture through transcript targets

* fix(agents): settle SQLite prompt handoff during cleanup

* chore: shrink max-lines baseline after teardown

* fix(sessions): port teardown across split runtime owners

* fix(sessions): carry transcript targets through split owners

* test(agents): use SQLite compaction target in abort coverage

* chore: retain unrelated max-lines suppressions

* chore: shrink max-lines baseline after main splits

* style(agents): const compaction checkpoint locals

* fix(sessions): harden SQLite teardown boundaries

* test(sessions): use typed metadata in predicate isolation fixture

* test(agents): cover malformed settlement rejections lint-safely

* fix(sessions): close remaining SQLite identity races

* fix(agents): fail closed on incomplete successor targets

* fix(sessions): preserve transcript identity fallbacks

* fix(agents): preserve session-key abort admission

* fix(trajectory): validate incomplete export targets

* test(sessions): drop retired pricing cache imports

* fix(sessions): validate partial transcript identities

* fix(sessions): close transcript identity edge cases

* fix(plugins): reserve retired transcript locator slot

* fix(sessions): scope transcript locks by target

* style(sessions): simplify SDK initialization error

* fix(sessions): preserve initialized transcript state

* fix(codex): verify mirrored history session keys

* fix(sessions): reject stale transcript ownership

* fix(sessions): anchor asynchronous transcript ownership

* fix(sessions): measure active transcript state

* fix(sessions): preserve scoped transcript compaction

* fix(sessions): harden transcript identity and lifecycle

* fix(sessions): resolve scoped command transcript stores

* fix(sessions): make transcript appends failure-atomic

* fix(sessions): enforce scoped transcript ownership

* fix(sessions): reject cross-owner transcript handoffs

* fix(sessions): fence cleanup transcript ownership

* fix(sessions): retire stale write ownership contexts

* fix(sessions): preserve pending session migration state

* fix(sessions): validate migrated transcript ownership

* fix(sessions): validate usage transcript targets

* fix(sessions): clear predecessor transcript metadata

* fix(sessions): align durable session event targets

* fix(sessions): fence late prompt handoffs

* fix(sessions): fence lifecycle transcript fallbacks

* fix(sessions): bound zero-length memory capture

* fix(sessions): preserve transcript teardown ownership

* fix(sessions): reject duplicate cleanup ownership

* fix(sessions): serialize runtime writes with sqlite leases

* fix(sessions): close sqlite teardown concurrency gaps

* fix(sessions): preserve nested lifecycle failures

* fix(sessions): canonicalize sqlite transcript ownership

* fix(sessions): settle disposed prompt handoffs

* fix(sessions): resolve canonical attempt lock targets

* test(sessions): align canonical target fixtures

* test(sessions): retire redundant jsonl parser coverage

* refactor(sessions): split active transcript cursors

* test(memory): retire legacy marker fixture

* fix(sessions): preserve canonical transcript access after rebase

* fix(sessions): fence prompt lease and return transcript targets

* fix(sessions): colocate transcript leases with target store

* fix(sessions): canonicalize transcript lease and worker targets

* fix(sessions): preserve plugin and fork identity markers

* fix(sessions): complete sqlite transcript target migration

* fix(sessions): integrate canonical followup identity

* fix(sessions): preserve bounded transcript topology

* fix(sessions): validate transcript identity boundaries

* fix(context): separate caller and successor targets

* test(sessions): split persistence compatibility coverage

* test(sessions): preserve fixture topology efficiently

* chore(sdk): refresh plugin api baseline

* test(agents): align compaction lock target mocks

* test(sessions): seed malformed transcript fixtures directly

* fix(agents): canonicalize transcript compatibility inputs

* fix(agents): type optional tool result ids

* test(ci): stabilize loaded process timing

* test(tui): wait for collect queue admission
2026-07-27 22:33:24 -04:00
sunlit-deng
6559e3f3b9 fix(media): keep hosted plugin media pinned (#112515) 2026-07-27 22:32:37 -04:00
Peter Steinberger
9bcc44301b fix(nodes): preserve gateway connections and local inference (#114857) 2026-07-27 22:28:32 -04:00
Peter Steinberger
3806c3866b fix(cli): keep read-only config queries from writing state (#114847)
* fix(cli): keep config queries read-only

* test(cli): preserve read-only routed config coverage
2026-07-27 22:27:00 -04:00
RileyJJY
6de4b47203 fix(ollama): release failed discovery bodies (#109967)
* fix(ollama): release failed discovery bodies

* test(ollama): prove failed discovery sockets close

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-27 22:20:15 -04:00
Leon-SK668
c3713317b8 fix(active-memory): accept max thinking config (#103614)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-27 22:06:00 -04:00
joshavant
0b96c10aad fix(messages): preserve policy ordering before target resolution 2026-07-27 21:04:10 -05:00
joshavant
ca592adcc8 fix(messages): gate gateway action dry runs 2026-07-27 21:04:10 -05:00
joshavant
d8eb6aa8d3 fix(messages): authorize external targets before resolution 2026-07-27 21:04:10 -05:00
joshavant
153c4f088e fix(channels): preserve external current target aliases 2026-07-27 21:04:10 -05:00
Peter Steinberger
56d9d07516 feat(ui): match ClickClack discussion sidebars to host themes (#114812)
* feat(ui): align ClickClack discussion themes

* fix(ui): synchronize custom discussion palettes from first paint

* fix(clickclack): explicitly identify theme-aware discussion embeds
2026-07-27 22:03:58 -04:00
Peter Steinberger
1292262996 fix(process): prevent concurrent scoped replacement leaks (#114845) 2026-07-27 22:02:33 -04:00
dependabot[bot]
9fbbe2cc98 build(deps): bump the swift-deps group across 1 directory with 2 updates (#114452)
Bumps the swift-deps group with 2 updates in the /apps/macos directory: [github.com/steipete/peekaboo](https://github.com/steipete/Peekaboo) and [github.com/pointfreeco/swift-concurrency-extras](https://github.com/pointfreeco/swift-concurrency-extras).


Updates `github.com/steipete/peekaboo` from 3.9.6 to 3.9.8
- [Release notes](https://github.com/steipete/Peekaboo/releases)
- [Commits](https://github.com/steipete/Peekaboo/compare/v3.9.6...v3.9.8)

Updates `github.com/pointfreeco/swift-concurrency-extras` from 1.4.0 to 1.4.1
- [Release notes](https://github.com/pointfreeco/swift-concurrency-extras/releases)
- [Commits](https://github.com/pointfreeco/swift-concurrency-extras/compare/1.4.0...1.4.1)

---
updated-dependencies:
- dependency-name: github.com/steipete/peekaboo
  dependency-version: 3.9.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: swift-deps
- dependency-name: github.com/pointfreeco/swift-concurrency-extras
  dependency-version: 1.4.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: swift-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-27 21:58:03 -04:00
Leon-SK668
a90bef3970 fix(usage): guard malformed Copilot payloads (#110795)
Co-authored-by: Leon-SK668 <17695126+Leon-SK668@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-27 21:55:15 -04:00
Peter Steinberger
6ca7c6488e fix(cron): prevent completed jobs rerunning after gateway restart (#114820)
* fix(cron): preserve completed runs across restarts

* test(cron): assert persisted timer execution identity
2026-07-27 21:52:19 -04:00
dependabot[bot]
52bf653427 build(deps): bump the android-deps group across 1 directory with 5 updates (#113083)
Bumps the android-deps group with 5 updates in the /apps/android directory:

| Package | From | To |
| --- | --- | --- |
| [io.kotest:kotest-assertions-core-jvm](https://github.com/kotest/kotest) | `6.2.2` | `6.2.3` |
| [io.kotest:kotest-runner-junit5-jvm](https://github.com/kotest/kotest) | `6.2.2` | `6.2.3` |
| com.android.application | `9.3.0` | `9.3.1` |
| com.android.library | `9.3.0` | `9.3.1` |
| com.android.test | `9.3.0` | `9.3.1` |



Updates `io.kotest:kotest-assertions-core-jvm` from 6.2.2 to 6.2.3
- [Release notes](https://github.com/kotest/kotest/releases)
- [Commits](https://github.com/kotest/kotest/compare/6.2.2...6.2.3)

Updates `io.kotest:kotest-runner-junit5-jvm` from 6.2.2 to 6.2.3
- [Release notes](https://github.com/kotest/kotest/releases)
- [Commits](https://github.com/kotest/kotest/compare/6.2.2...6.2.3)

Updates `io.kotest:kotest-runner-junit5-jvm` from 6.2.2 to 6.2.3
- [Release notes](https://github.com/kotest/kotest/releases)
- [Commits](https://github.com/kotest/kotest/compare/6.2.2...6.2.3)

Updates `com.android.application` from 9.3.0 to 9.3.1

Updates `com.android.library` from 9.3.0 to 9.3.1

Updates `com.android.test` from 9.3.0 to 9.3.1

Updates `com.android.library` from 9.3.0 to 9.3.1

Updates `com.android.test` from 9.3.0 to 9.3.1

---
updated-dependencies:
- dependency-name: com.android.application
  dependency-version: 9.3.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: android-deps
- dependency-name: com.android.library
  dependency-version: 9.3.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: android-deps
- dependency-name: com.android.library
  dependency-version: 9.3.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: android-deps
- dependency-name: com.android.test
  dependency-version: 9.3.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: android-deps
- dependency-name: com.android.test
  dependency-version: 9.3.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: android-deps
- dependency-name: io.kotest:kotest-assertions-core-jvm
  dependency-version: 6.2.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: android-deps
- dependency-name: io.kotest:kotest-runner-junit5-jvm
  dependency-version: 6.2.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: android-deps
- dependency-name: io.kotest:kotest-runner-junit5-jvm
  dependency-version: 6.2.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: android-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-27 21:51:56 -04:00
Jason (Json)
78720fbaef fix(plugins): load replacement npm plugin after reinstall (#114713)
* fix(plugins): reconcile managed npm load paths

* fix(plugins): preserve replacement load path order
2026-07-27 19:48:45 -06:00
joshavant
d0669429d8 fix(telegram): suppress unsafe reply previews 2026-07-27 20:31:51 -05:00
Peter Steinberger
5ae4a8fb8e fix(release): trust corrected beta runtime evidence (#114838)
* fix(release): trust corrected beta runtime evidence

* style(test): format runtime evidence cases
2026-07-27 21:14:41 -04:00
Peter Steinberger
d5907ca619 fix(google): keep static compat flags on discovered Gemini id variants (#114831) 2026-07-27 21:13:44 -04:00
Peter Steinberger
cc78df6d5b fix(ui): preserve active Workboard sessions when editing cards (#114804)
* fix(ui): preserve Workboard sessions when editing running cards

* test(ui): stabilize mount recovery under browser load
2026-07-27 21:13:15 -04:00
Peter Steinberger
92fff941ef perf(anthropic): memoize the local Claude session scan (#114833)
* perf(anthropic): memoize the local Claude session scan

* fix(anthropic): make the scan memo freshness gate race-safe
2026-07-27 21:13:12 -04:00
Peter Steinberger
1d67a55681 fix(onboarding): validate provider setup before writing agent state (#114823) 2026-07-27 21:10:12 -04:00
Peter Steinberger
d5e46646f2 refactor(gateway-protocol): derive schema registries from owner fragments (#114817)
* refactor(protocol): share schema owner barrel

* refactor(protocol): extract ordered schema fragments

* refactor(protocol): compose public schema registry

* docs(protocol): document schema fragments

* ci(protocol): guard schema registry structure

* style(protocol): satisfy registry guard lint
2026-07-27 21:08:20 -04:00
Peter Steinberger
b2f137797b fix(codex): isolate QA sandbox from production policy (#114830) 2026-07-27 21:05:41 -04:00
Peter Steinberger
83cc8887b8 perf(sessions): stop cloning the whole store per catalog request (#114829) 2026-07-27 21:03:53 -04:00
Peter Steinberger
924004d35c test(scripts): deflake credential process-tree timeout tests (#114821) 2026-07-27 21:01:03 -04:00
Peter Steinberger
1e2f918c29 chore(sdk): record flushLogger in the deprecated surface budgets (#114827) 2026-07-27 21:00:45 -04:00
Peter Steinberger
ac830cef0b fix(cron): rearm fallback watchdog across execution phases (#114815)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-27 20:59:25 -04:00
Peter Steinberger
dd248759ef refactor(config): derive cloud worker metadata from Zod (#114818) 2026-07-27 20:57:01 -04:00
Peter Steinberger
0bfe7dd357 feat(plugins): deliver sessions.changed to plugin services (#114813)
* feat(plugins): deliver sessions.changed to plugin services

* docs: regenerate docs map

* refactor(clickclack): split reconcile scheduler and history formatting out of the discussion service

* style: format discussion service
2026-07-27 20:56:44 -04:00