Peter Steinberger
83d82c9302
refactor(channels): persist runtime state in plugin SQLite ( #109380 )
...
* refactor(channels): move reef, msteams, matrix, zalouser file state to SQLite with doctor imports
* fix(channels): harden SQLite state migrations
* test(reef): use SQLite flow stores in receipt suites
* fix(reef): validate restored request policy
* fix(reef): retain replay state through relay window
* docs(reef): describe durable state import
* fix(reef): honor configured legacy state path
* chore: leave changelog to release flow
* fix(reef): use managed temp root in flow tests
* fix(matrix): omit undefined device id from state
2026-07-16 17:05:28 -07:00
Peter Steinberger
39cddf847e
fix(reef): keep routine agent replies from disappearing ( #109160 )
...
* fix(reef): relax guard and surface rejections
* fix(reef): preserve ordered rejection notices
* fix(reef): bound rejection notice retries
* fix(reef): persist correlated rejection notices
* fix(reef): align receipt entry typing
* test(reef): type owner notice fixtures
* fix(reef): make rejection feedback restart-safe
* fix(reef): retry rejection state reads
* fix(reef): quarantine invalid receipts
* chore(reef): leave changelog to release
* fix(reef): bind receipts to recipient identity
* refactor(reef): keep receipt types private
* test(reef): preserve notice mock call typing
* fix(reef): reconcile keys before resend recovery
* fix(reef): keep rejection recovery durable
* fix(reef): preserve in-flight receipt upgrades
* test(reef): split receipt flow coverage
* fix(reef): cap automatic guard retries
2026-07-16 12:36:22 -07:00
Sally O'Malley
11c7360af5
fix(chat): keep internal metadata out of transcripts ( #109056 )
...
* fix(chat): keep internal metadata out of transcripts
Signed-off-by: sallyom <somalley@redhat.com >
* fix(gateway): harden control reply projection
Co-authored-by: sallyom <somalley@redhat.com >
* chore: leave changelog to release tooling
---------
Signed-off-by: sallyom <somalley@redhat.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-16 10:47:43 -07:00
pick-cat
419c61a590
fix(reef): add WebSocket handshake timeout to inbox connection ( #109052 )
...
* fix(reef): add WebSocket handshake timeout to inbox connection
Stalled Reef relay TCP peers that never complete the HTTP upgrade could
hang createReefWebSocket forever. Bound the handshake at 30s like sibling
channel WebSocket clients.
Co-authored-by: Cursor <cursoragent@cursor.com >
* test(reef): prove inbox WebSocket handshake timeout on never-upgrade peer
Co-authored-by: Cursor <cursoragent@cursor.com >
* chore(ci): retrigger checks after OpenGrep install flake
Co-authored-by: Cursor <cursoragent@cursor.com >
* test(reef): simplify handshake timeout proof
Co-authored-by: Pick-cat <huang.ting3@xydigit.com >
* style(reef): satisfy promise executor lint
---------
Co-authored-by: Cursor <cursoragent@cursor.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-16 10:29:01 -07:00
Peter Steinberger
f89c624ebb
fix(reef): bound inbox WebSocket frames ( #108886 )
2026-07-16 03:17:52 -07:00
pick-cat
9026b9f4ac
fix(reef): bound relay HTTP JSON response body reads ( #106456 )
...
* fix(reef): bound relay HTTP JSON response body reads
* test(reef): cover relay response boundaries
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-16 01:00:35 -07:00
Peter Steinberger
ff4d854167
fix(reef): migrate legacy peer trust config ( #108417 )
...
* fix(reef): migrate legacy peer trust config
* chore(reef): leave changelog to release flow
* build(reef): refresh bundled config metadata
* fix(reef): keep identity scope internal
2026-07-15 11:37:32 -07:00
Peter Steinberger
f810fb35d5
refactor(reef): centralize peer trust in SQLite ( #108375 )
...
* feat(plugin-sdk): support removing pairing requests
* refactor(reef): centralize peer trust in SQLite
* chore: defer Reef release note
* fix(reef): share runtime state across module instances
* refactor(reef): narrow trust store boundary
* test(reef): pass config to account description
2026-07-15 10:21:54 -07:00
Peter Steinberger
c56d1bbbbb
fix(reef): send through the connected gateway ( #107373 )
...
* fix(reef): route outbound through gateway
* chore: keep Reef release note in PR
2026-07-14 04:08:36 -07:00
Peter Steinberger
d361b4ccb8
feat(reef): headless openclaw reef CLI for agent-driven registration and pairing
...
Adds a non-interactive command surface (openclaw reef register|status|friend code|request|list|remove) so an agent can claim a handle and manage guarded friendships when its owner asks, without the interactive wizard. --json emits machine-readable output for automation. Registration is crash-safe and idempotent: guard defaults are provider-coupled, the full config is validated before the single-use magic-link token is consumed, a duplicate-handle claim recovers by proving key ownership and reconciling the relay's request policy, the exchanged session is cached scoped to relay+email (never printed) so reruns recover, one state dir is pinned to one identity, and friend removal revokes both the pin and the allowlist entry. Manifest gains commandAliases/onCommands so the CLI resolves; docs cover the agent-driven path.
2026-07-13 16:23:13 -07:00
Peter Steinberger
6315dd8e2d
fix(reef): adopt self-initiated friendships via durable outbound-intent markers
2026-07-13 13:03:55 -07:00
Peter Steinberger
2d5803a250
fix(reef): use bundled-channel-entry contract so channelConfigs surfaces load
2026-07-13 08:52:14 -07:00
Peter Steinberger
882b2fe900
feat(channels): bundle Reef guarded claw-to-claw channel ( #106232 )
...
* feat(channels): bundle Reef guarded claw-to-claw channel
Moves the Reef channel extension from openclaw/reef into the bundled extensions tree with the wire protocol vendored under extensions/reef/protocol. Includes channelConfigs manifest metadata, runtime status reporting via setStatus/buildAccountSnapshot, abort-aware inbox shutdown, monotonic device-auth timestamps, and immutable-model guard admission (dated snapshots plus documented gpt-5.6 ids).
* fix(reef): pin zod exactly per dependency pin guard
* style(reef): satisfy extension lint gates
Curly braces in vendored protocol, explicit type re-exports, typed catch callbacks, Object.assign over map-spread, abort-aware loop restructure.
* fix(reef): CI gates — knip workspace, boundary tsconfig, facade imports, cycle break, contract baselines
- knip: reef workspace project includes vendored protocol/ (owns noble deps)
- tsconfig: conform to canonical extension package-boundary include/exclude; add @openclaw/plugin-sdk devDependency
- imports: channel-inbound/channel-outbound facades instead of deprecated subpaths
- protocol: home ReplayStore contract in envelope.ts to break the envelope<->replay type cycle
- baselines: reef in unguarded runtime-api list; regenerate bundled channel config metadata
* feat(reef): plugin catalog cover art, channel label, changelog revert
* fix(reef): drop unused error-class exports, register lint suppression
* fix(reef): knip entry surface for vendored protocol, explicit WebSocketLike export
2026-07-13 05:17:44 -07:00