General
PromptBeginner5 minmarkdown
<h1 align="center">
<a href="https://prompts.chat">
120
Loading actions...
<a href="https://prompts.chat">
TypeScript and ESLint rules that MUST be followed when creating, modifying, or reviewing any file under apps/frontend/, including .ts, .tsx, .js, and .jsx files. Also apply when discussing frontend linting, type safety, or ESLint configuration.
risks
Last verified: 2026-02-14
Implements the two-pane plugin manager interface using Bubble Tea's Elm Architecture (Model-Update-View).
NewModel(client, workingDir) -> *Model, implements tea.Model interfaceclaude.Client implementation. Terminal with reasonable size (handles resize).Model struct contains all state (no nested sub-models)map[string]Operation tracks pending operations per pluginOpInstall, OpUninstall, OpMigrate, OpUpdate, OpEnable, OpDisable, OpScopeChangeModeMain, ModeProgress, ModeSummary, ModeDoc, ModeConfig, ModeScopeDialogPluginState.InstalledScopes is map[Scope]bool (not single scope). Operation.Scopes is []Scope for multi-scope targets; Operation.UninstallScopes holds scopes to remove in OpScopeChangeS key opens ModeScopeDialog for installed plugins, showing checkboxes for user/project/local. Produces OpScopeChange with install and uninstall scope listsPluginState entries with IsGroupHeader=trueGetAllEnabledPlugins to build complete scope map per plugin[-> LOCAL], [-> ENABLED])model.go - Model struct, Init, message types, plugin stateupdate.go - Update logic for all modes and inputsview.go - View rendering for all modes and modalsstyles.go - Lip Gloss style definitionskeys.go - Key binding definitionsfilteredIdx maps visible index to plugins slice indexe opens the scope dialog instead of toggling directly