дзеркало
https://github.com/l0ng-ai/openidea.git
синхронізовано 2026-11-09 19:25:54 +02:00
Plugin API (breaking; the plugin system is unreleased): - Remove the runtime `contributions` interface (register-command, register-language, register-theme). Commands, languages and themes are declared in plugin.toml only, so everything a plugin contributes goes through the install preview and consent. The registry drops runtime scope, `contribute` and `dispose_runtime`; inline `definition` in language and theme declarations is gone. - `completion-item.kind` is a string (the 25 LSP kinds; unknown kinds show no icon), like the other open-ended kinds. - `lifecycle.activate` and `commands.run` return `types.error` instead of a string. The host maps it to the matching error kind, and only `failed` counts against the plugin: cancelling, a missing grant or an unknown command does not. The SDK's `Plugin` returns `Result<_, Error>`; plain messages convert to `Error::Failed`. Runtime: - Editor providers of several plugins are called at the same time (`Actor::submit` + `Pending::wait`): the wait is the slowest plugin's, not the sum, so each gets the full edit-path budget. Versioning and tooling: - Components are checked at install and by `openidea-plugin check` for the plugin API they were built for; another major or a newer minor is refused with what to do. - Tests: the SDK's WIT matches the host's, a simulated next-minor host links every shipped component, every host function has an SDK wrapper, released APIs only grow (no snapshot until the first release). - plugins/build.sh builds every checked-in component, records a source fingerprint next to it, and `--check` fails on stale components; CI runs it plus fmt, clippy (host and wasm) and tests for the SDK, the official plugins and the fixtures. - The API evolution rules and the checklist for a new host function are in plugins/README.md; the design notes under docs/ are removed.
60 рядки
1.6 KiB
Plaintext
60 рядки
1.6 KiB
Plaintext
/// Runtime probe: optional exports, async calls and
|
|
/// cancellation, and a WASI p2 task model built on `wasi:io/poll`.
|
|
/// Test fixture only; not part of the plugin API.
|
|
package openidea:[email protected];
|
|
|
|
interface host-api {
|
|
use wasi:io/[email protected].{pollable};
|
|
|
|
/// A long-running job the host started for the guest.
|
|
resource task {
|
|
/// Progress report (`total` unknown while `none`).
|
|
report: func(done: u32, total: option<u32>);
|
|
/// Set by the host when the user cancels.
|
|
is-cancelled: func() -> bool;
|
|
/// Ready when the host pushed the next item, or on cancellation.
|
|
next-ready: func() -> pollable;
|
|
/// The pushed item, if any (non-blocking).
|
|
take: func() -> option<string>;
|
|
}
|
|
|
|
/// The task of the current call.
|
|
current-task: func() -> task;
|
|
|
|
/// An async host import: sleeps without blocking the host thread.
|
|
sleep-ms: func(ms: u32);
|
|
}
|
|
|
|
interface base {
|
|
run: func(cmd: string, arg: string) -> result<string, string>;
|
|
}
|
|
|
|
/// Optional exports: a plugin implements only the providers it needs.
|
|
interface code-actions {
|
|
actions: func(path: string) -> list<string>;
|
|
}
|
|
|
|
interface completion {
|
|
complete: func(prefix: string) -> list<string>;
|
|
}
|
|
|
|
world probe-min {
|
|
import host-api;
|
|
export base;
|
|
}
|
|
|
|
world probe-full {
|
|
import host-api;
|
|
export base;
|
|
export code-actions;
|
|
export completion;
|
|
}
|
|
|
|
/// The host binds this world; guests implement `probe-min` or `probe-full`.
|
|
world probe-host {
|
|
import host-api;
|
|
export base;
|
|
export code-actions;
|
|
export completion;
|
|
}
|