forked from 1b-agent/opencadstudio-upstream
fix(plugins): gate on_load behind API v5
BREAKING CHANGE: plugins using on_load must target API v5 and declare api_version = 5. Refs #901
This commit is contained in:
1 parent
c527466791
commit
2842f6dc58
9 files changed
+43
-30
No files matched your search
@@ -9,7 +9,7 @@ cheaply. The runtime host surface is enabled by the `host` feature.
|
||||
## Plugin Architecture
|
||||
|
||||
OCS is scriptable and extensible through a versioned plugin API. The API
|
||||
supports three major protocol generations: **V2**, **V3**, and **V4**. Each
|
||||
supports four major generations: **V2**, **V3**, **V4**, and **V5**. Each
|
||||
generation keeps the previous ABI stable by appending new vtable entries and new
|
||||
enum variants at the end, so older plugins continue to load on newer hosts.
|
||||
|
||||
@@ -18,12 +18,17 @@ enum variants at the end, so older plugins continue to load on newer hosts.
|
||||
| **V2** | Out-of-process runner | Synchronous commands + interactive point collection (`HostApi::start_interactive`) | Baseline |
|
||||
| **V3** | Out-of-process runner | Local cached `document()`/`document_mut()` + shared-memory `DocumentReader`/`document_view` for large reads | New vtable entries appended; new `PluginRequest`/`PluginResponse` variants appended |
|
||||
| **V4** | Out-of-process runner over a multiplexed local socket | Full-duplex notifications + asynchronous REPL `ExecuteCode` | New `HostToPluginV4`/`PluginToHostV4` frame layer; `BuiltinPlugin::on_notification` and `start_execute_code` appended to trait |
|
||||
| **V5** | V4 multiplexed runner | One-shot `BuiltinPlugin::on_load` initialization | Lifecycle callback appended to `BuiltinPlugin` |
|
||||
|
||||
The host controls which generations are accepted at runtime through
|
||||
`OCS_PLUGIN_MAX_API_VERSION` (e.g. `2` for V2-only mode, `3` to disable V4). The
|
||||
current host advertises [`API_VERSION = 4`](src/manifest.rs) and supports plugins
|
||||
`OCS_PLUGIN_MAX_API_VERSION` (e.g. `2` for V2-only mode, `4` to disable V5). The
|
||||
current host advertises [`API_VERSION = 5`](src/manifest.rs) and supports plugins
|
||||
back to `API_VERSION_MIN_SUPPORTED = 2`.
|
||||
|
||||
V5 calls `BuiltinPlugin::on_load` once after the runner connects and before the
|
||||
first user command. Plugins can cache `HostApi::plugin_request_sender()` there
|
||||
for worker-thread access. A panic in the callback fails plugin loading.
|
||||
|
||||
### High-level layout
|
||||
|
||||
```mermaid
|
||||
@@ -263,7 +268,7 @@ static MANIFEST: PluginManifest = PluginManifest {
|
||||
name: "Hello Plugin",
|
||||
version: "0.1.0",
|
||||
description: "A minimal example plugin.",
|
||||
api_version: ApiVersion { major: 4 },
|
||||
api_version: ApiVersion::CURRENT,
|
||||
ribbon_order: 100,
|
||||
xdata_apps: &[],
|
||||
command_prefixes: &["HELLO"],
|
||||
|
||||
Reference in new issue
Block a user