mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-14 06:41:09 +00:00
* 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
272 lines
6.3 KiB
JSON
272 lines
6.3 KiB
JSON
{
|
|
"id": "reef",
|
|
"name": "Reef",
|
|
"description": "Guarded end-to-end encrypted claw channel",
|
|
"activation": {
|
|
"onStartup": true
|
|
},
|
|
"channels": [
|
|
"reef"
|
|
],
|
|
"configSchema": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"relayUrl": {
|
|
"type": "string",
|
|
"format": "uri",
|
|
"default": "https://reefwire.ai"
|
|
},
|
|
"handle": {
|
|
"type": "string",
|
|
"pattern": "^[a-z0-9][a-z0-9_-]{0,62}$"
|
|
},
|
|
"email": {
|
|
"type": "string",
|
|
"format": "email"
|
|
},
|
|
"guard": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"provider",
|
|
"pinnedModel",
|
|
"apiKeyEnv",
|
|
"policyVersion",
|
|
"timeoutMs"
|
|
],
|
|
"properties": {
|
|
"provider": {
|
|
"enum": [
|
|
"anthropic",
|
|
"openai"
|
|
]
|
|
},
|
|
"pinnedModel": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"apiKeyEnv": {
|
|
"type": "string",
|
|
"pattern": "^[A-Z_][A-Z0-9_]*$"
|
|
},
|
|
"policyVersion": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"timeoutMs": {
|
|
"type": "integer",
|
|
"minimum": 100,
|
|
"maximum": 120000
|
|
}
|
|
}
|
|
},
|
|
"stateDir": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"friends": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"$ref": "#/$defs/friend"
|
|
}
|
|
},
|
|
"requestPolicy": {
|
|
"enum": [
|
|
"code-only",
|
|
"friends-of-friends",
|
|
"open"
|
|
],
|
|
"default": "code-only"
|
|
},
|
|
"dmPolicy": {
|
|
"const": "pairing",
|
|
"default": "pairing"
|
|
},
|
|
"allowFrom": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"default": []
|
|
},
|
|
"enabled": {
|
|
"type": "boolean",
|
|
"default": true
|
|
}
|
|
},
|
|
"$defs": {
|
|
"friend": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"autonomy",
|
|
"ed25519PublicKey",
|
|
"x25519PublicKey",
|
|
"keyEpoch"
|
|
],
|
|
"properties": {
|
|
"autonomy": {
|
|
"enum": [
|
|
"notify-only",
|
|
"bounded",
|
|
"extended"
|
|
],
|
|
"default": "bounded"
|
|
},
|
|
"ed25519PublicKey": {
|
|
"type": "string",
|
|
"minLength": 43,
|
|
"maxLength": 43
|
|
},
|
|
"x25519PublicKey": {
|
|
"type": "string",
|
|
"minLength": 43,
|
|
"maxLength": 43
|
|
},
|
|
"keyEpoch": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
},
|
|
"safetyNumberChanged": {
|
|
"type": "boolean",
|
|
"default": false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"channelConfigs": {
|
|
"reef": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"relayUrl": {
|
|
"type": "string",
|
|
"format": "uri",
|
|
"default": "https://reefwire.ai"
|
|
},
|
|
"handle": {
|
|
"type": "string",
|
|
"pattern": "^[a-z0-9][a-z0-9_-]{0,62}$"
|
|
},
|
|
"email": {
|
|
"type": "string",
|
|
"format": "email"
|
|
},
|
|
"guard": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"provider",
|
|
"pinnedModel",
|
|
"apiKeyEnv",
|
|
"policyVersion",
|
|
"timeoutMs"
|
|
],
|
|
"properties": {
|
|
"provider": {
|
|
"enum": [
|
|
"anthropic",
|
|
"openai"
|
|
]
|
|
},
|
|
"pinnedModel": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"apiKeyEnv": {
|
|
"type": "string",
|
|
"pattern": "^[A-Z_][A-Z0-9_]*$"
|
|
},
|
|
"policyVersion": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"timeoutMs": {
|
|
"type": "integer",
|
|
"minimum": 100,
|
|
"maximum": 120000
|
|
}
|
|
}
|
|
},
|
|
"stateDir": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"friends": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"$ref": "#/$defs/friend"
|
|
}
|
|
},
|
|
"requestPolicy": {
|
|
"enum": [
|
|
"code-only",
|
|
"friends-of-friends",
|
|
"open"
|
|
],
|
|
"default": "code-only"
|
|
},
|
|
"dmPolicy": {
|
|
"const": "pairing",
|
|
"default": "pairing"
|
|
},
|
|
"allowFrom": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"default": []
|
|
},
|
|
"enabled": {
|
|
"type": "boolean",
|
|
"default": true
|
|
}
|
|
},
|
|
"$defs": {
|
|
"friend": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"autonomy",
|
|
"ed25519PublicKey",
|
|
"x25519PublicKey",
|
|
"keyEpoch"
|
|
],
|
|
"properties": {
|
|
"autonomy": {
|
|
"enum": [
|
|
"notify-only",
|
|
"bounded",
|
|
"extended"
|
|
],
|
|
"default": "bounded"
|
|
},
|
|
"ed25519PublicKey": {
|
|
"type": "string",
|
|
"minLength": 43,
|
|
"maxLength": 43
|
|
},
|
|
"x25519PublicKey": {
|
|
"type": "string",
|
|
"minLength": 43,
|
|
"maxLength": 43
|
|
},
|
|
"keyEpoch": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
},
|
|
"safetyNumberChanged": {
|
|
"type": "boolean",
|
|
"default": false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|