You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: packages/opencode/specs/tui-plugins.md
+5-1Lines changed: 5 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -36,6 +36,7 @@ Example:
36
36
-`plugin_enabled` is keyed by plugin id, not by plugin spec.
37
37
- For file plugins, that id must come from the plugin module's exported `id`. For npm plugins, it is the exported `id` or the package name if `id` is omitted.
38
38
- Plugins are enabled by default. `plugin_enabled` is only for explicit overrides, usually to disable a plugin with `false`.
39
+
- Internal plugins can declare `enabled: false` to be registered but inactive by default; `plugin_enabled` and runtime KV can still enable them by id.
39
40
-`plugin_enabled` is merged across config layers.
40
41
- Runtime enable/disable state is also stored in KV under `plugin_enabled`; that KV state overrides config on startup.
41
42
@@ -227,6 +228,7 @@ Top-level API groups exposed to `tui(api, options, meta)`:
227
228
- To surface a command in the host command palette, set `namespace: "palette"` and provide metadata such as `title`, `category`, `desc`, `suggested`, `hidden`, `enabled`, `slashName`, and `slashAliases` on the command.
228
229
- Use `api.keymap.dispatchCommand(name)` for user-style execution semantics and `api.keymap.runCommand(name)` only for forced programmatic execution.
229
230
- Disposers returned by `api.keymap` registrations and `acquireResource(...)` are automatically cleaned up when the plugin deactivates. You do not need to add those disposers to `api.lifecycle.onDispose(...)` yourself.
231
+
- Built-in which-key shortcuts are resolved from `keymap.sections.which_key`, not plugin options.
230
232
231
233
### Keys
232
234
@@ -314,6 +316,7 @@ Theme install behavior:
314
316
Current host slot names:
315
317
316
318
-`app`
319
+
-`app_bottom`
317
320
-`home_logo`
318
321
-`home_prompt` with props `{ workspace_id?, ref? }`
319
322
-`home_prompt_right` with props `{ workspace_id? }`
@@ -332,7 +335,8 @@ Slot notes:
332
335
-`api.slots.register(plugin)` does not return an unregister function.
333
336
- Returned ids are `pluginId`, `pluginId:1`, `pluginId:2`, and so on.
334
337
- Plugin-provided `id` is not allowed.
335
-
- The current host renders `home_logo`, `home_prompt`, and `session_prompt` with `replace`, `home_footer`, `sidebar_title`, and `sidebar_footer` with `single_winner`, and `app`, `home_prompt_right`, `session_prompt_right`, `home_bottom`, and `sidebar_content` with the slot library default mode.
338
+
- The current host renders `home_logo`, `home_prompt`, and `session_prompt` with `replace`, `home_footer`, `sidebar_title`, and `sidebar_footer` with `single_winner`, and `app`, `app_bottom`, `home_prompt_right`, `session_prompt_right`, `home_bottom`, and `sidebar_content` with the slot library default mode.
339
+
-`app_bottom` is rendered in normal layout flow below the active route, while `app` is rendered afterward for global app-level UI.
336
340
- Plugins can define custom slot names in `api.slots.register(...)` and render them from plugin UI with `ui.Slot`.
0 commit comments