mirror of
https://github.com/l0ng-ai/openidea.git
synced 2026-11-08 08:52:12 +00:00
Rework the plugin system per docs/plugin_plan.md (P0–P8): - Extension-point registry (ide-extension) so new contribution types register without touching the kernel; languages, run detectors, providers, views and UI contributions go through it. - Per-plugin capability consent with a risk-graded ledger; process capabilities are pinned to resolved binary paths and hashes. - Async, actor-per-plugin Wasm runtime with lazy activation, cancellation, events, long-running tasks and idle reclamation. - Plugin host moved into ide-host, shared by local and remote projects. - Distribution: install/package tooling (openidea-plugin bin) and a static market index. - WIT frozen as openidea:[email protected]; Rust SDK with mock host. - Ten official validation plugins under plugins/official.
52 lines
1.9 KiB
Plaintext
52 lines
1.9 KiB
Plaintext
package openidea:[email protected];
|
|
|
|
/// Writes to the IDE log, tagged with the plugin id.
|
|
interface log {
|
|
use types.{log-level};
|
|
|
|
log: func(level: log-level, message: string);
|
|
}
|
|
|
|
/// Contributions made at run time (declare static ones in plugin.toml).
|
|
interface contributions {
|
|
use types.{error};
|
|
|
|
/// Registers (or updates) a command `plugin.<plugin-id>.<id>`.
|
|
/// `id` must match `[a-z0-9][a-z0-9._-]*`.
|
|
register-command: func(id: string, title: string, category: option<string>) -> result<_, error>;
|
|
/// A language from a `languages/<id>.toml`-style definition.
|
|
register-language: func(definition: string) -> result<_, error>;
|
|
/// A theme from JSON: {"id","name","kind":"dark"|"light","tokens":{"--var":"value"}}.
|
|
register-theme: func(definition: string) -> result<_, error>;
|
|
}
|
|
|
|
interface ui {
|
|
use types.{notification-level};
|
|
|
|
record status-item {
|
|
text: string,
|
|
tooltip: option<string>,
|
|
/// One of the plugin's commands, run when the item is clicked.
|
|
command: option<string>,
|
|
}
|
|
|
|
/// Shows a notification balloon in the window the current command or
|
|
/// event came from (every window when there is none).
|
|
show-notification: func(level: notification-level, title: string, body: string);
|
|
/// Shows or updates the plugin's status bar item `id` in every window.
|
|
set-status-item: func(id: string, item: status-item);
|
|
remove-status-item: func(id: string);
|
|
}
|
|
|
|
/// Persistent key-value storage of the plugin (survives restarts and idle
|
|
/// reclaim; instance memory does not). Requires `storage`. At most 1 MiB.
|
|
interface storage {
|
|
use types.{error};
|
|
|
|
get: func(key: string) -> result<option<string>, error>;
|
|
set: func(key: string, value: string) -> result<_, error>;
|
|
delete: func(key: string) -> result<_, error>;
|
|
/// Keys starting with `prefix`, sorted.
|
|
keys: func(prefix: string) -> result<list<string>, error>;
|
|
}
|