Files
openclaw/extensions/reef/openclaw.plugin.json
T
Peter Steinberger da4a656cdb improve: doctor migration checks no longer load every bundled plugin runtime (#120678)
* perf(plugins): declare doctor contract surfaces

* perf(doctor): slim migration import closures

* perf(plugins): narrow doctor declaration record surface and wire owner-test lane

Registry records carry only the doctorContract declaration instead of the whole
parsed manifest, and check:changed now selects the src/plugins-owned declaration
honesty and closure-guard tests for extension module/manifest changes so
cross-lane drift cannot pass PR classification.

* fix(doctor): keep control-plane dist imports require-safe

Keep doctor and channel control-plane chunks off exec-class dependencies, and enforce native require(esm) loading during postbuild.

* chore(plugin-sdk): regenerate API baseline

* chore(plugin-sdk): sync export ordering

* fix(plugins): satisfy doctor contract CI boundaries

* perf(doctor): make qqbot doctor closure dependency-light

qqbot was the last plugin above 5s in doctor state-migration enumeration
(~8s under tsx/jiti). The cost was not the state-key builder (already a
leaf): its doctor closure value-imported the runtime-doctor SDK barrel,
whose plugin-state-store/state-db re-exports pull kysely (~330 modules),
plus security-runtime for one fileExists (~200 modules), all resolved
per-module by jiti during enumeration.

Split the migration-define helpers and light re-exports into a new
private-local plugin-sdk/runtime-doctor-migrations subpath; runtime-doctor
re-exports it so its public surface is byte-identical (API baseline hash
unchanged). qqbot's doctor-contract and state-migrations now import only
the light subpath, swapping fileExists for the equivalent async
legacyStateFileExists already in the closure.

qqbot enumeration: ~8.0s/531 modules -> ~0.25s/18 modules.

* chore(plugin-sdk): drop private-local subpath from API baseline

runtime-doctor-migrations is private-local-only; the baseline tracks public
modules, and the earlier line was generated before the classification.

* fix(plugins): register runtime-doctor-migrations boundary paths

The private-local subpath list feeds the extension package boundary map;
the shared paths config and xai's derived overrides must carry the same
entry or the boundary contract test fails.
2026-08-08 13:29:18 -07:00

173 lines
3.9 KiB
JSON

{
"id": "reef",
"doctorContract": {
"legacyConfigRules": true,
"normalizeCompatibilityConfig": true,
"stateMigrations": true
},
"name": "Reef",
"description": "Guarded end-to-end encrypted claw channel",
"activation": {
"onStartup": true,
"onCommands": [
"reef"
]
},
"channels": [
"reef"
],
"configSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"relayUrl": {
"type": "string",
"format": "uri",
"pattern": "^[hH][tT][tT][pP][sS]?://[^\\\\/?#@]+/?$",
"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
},
"requestPolicy": {
"enum": [
"code-only",
"friends-of-friends",
"open"
],
"default": "code-only"
},
"enabled": {
"type": "boolean",
"default": true
}
}
},
"channelConfigs": {
"reef": {
"schema": {
"type": "object",
"additionalProperties": false,
"properties": {
"relayUrl": {
"type": "string",
"format": "uri",
"pattern": "^[hH][tT][tT][pP][sS]?://[^\\\\/?#@]+/?$",
"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
},
"requestPolicy": {
"enum": [
"code-only",
"friends-of-friends",
"open"
],
"default": "code-only"
},
"enabled": {
"type": "boolean",
"default": true
}
}
}
}
},
"commandAliases": [
{
"name": "reef"
}
]
}