feat(plugins): add JavaScript plugin system with overlay panel

- Load plugins from <config dir>/plugins/<id>/ when enabled under `plugins` in config
- Expose ctx with mpv events/commands, timers, subtitle context, actions, notify, exec, and panel
- Bind plugin actions via `__plugin-action:<id>/<action>` keybindings (runPluginAction session action)
- Add plugin-panel modal with markdown rendering; closing aborts the panel signal
- Add ai-explain example plugin that queries `codex exec` for the current line
- Add e2e harness `files` option and plugin e2e scenario; document plugins in docs-site and internal docs
This commit is contained in:
sudacode committed 2026-10-26 21:38:51 -07:00
1 parent d3a94536a8
commit ca534cd232
65 files changed
+2555 -39

No files matched your search

+9
View File
@@ -180,6 +180,11 @@ export type RendererDom = {
changelogStatus: HTMLDivElement;
changelogList: HTMLDivElement;
pluginPanelModal: HTMLDivElement;
pluginPanelTitle: HTMLDivElement;
pluginPanelClose: HTMLButtonElement;
pluginPanelBody: HTMLDivElement;
sessionHelpModal: HTMLDivElement;
sessionHelpClose: HTMLButtonElement;
sessionHelpShortcut: HTMLDivElement;
@@ -448,6 +453,10 @@ export function resolveRendererDom(): RendererDom {
changelogWarning: getRequiredElement<HTMLDivElement>('changelogWarning'),
changelogStatus: getRequiredElement<HTMLDivElement>('changelogStatus'),
changelogList: getRequiredElement<HTMLDivElement>('changelogList'),
pluginPanelModal: getRequiredElement<HTMLDivElement>('pluginPanelModal'),
pluginPanelTitle: getRequiredElement<HTMLDivElement>('pluginPanelTitle'),
pluginPanelClose: getRequiredElement<HTMLButtonElement>('pluginPanelClose'),
pluginPanelBody: getRequiredElement<HTMLDivElement>('pluginPanelBody'),
sessionHelpModal: getRequiredElement<HTMLDivElement>('sessionHelpModal'),
sessionHelpClose: getRequiredElement<HTMLButtonElement>('sessionHelpClose'),
sessionHelpShortcut: getRequiredElement<HTMLDivElement>('sessionHelpShortcut'),