Commit Graph

13 Commits

Author SHA1 Message Date
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