feat(plugins): add scoped V2 pluggin activation controls - #726
Open
pascalandr wants to merge 5 commits into
Open
pascalandr wants to merge 5 commits into
pascalandr wants to merge 5 commits into
Conversation
Expose runtime plugin inventory and configured sources separately in the Status panel, require an explicit Global or Project scope, and keep disabled exact IDs visible so users can safely re-enable them. The controls append ordered activation rules only and do not present package installation, updates, removal, or option editing. Add narrow authenticated workspace routes backed by config.get and plugin.list, daemon-reported path authority, WSL host translation, location ownership, connection-generation checks, and the worktree deletion fence. Preserve JSONC comments, source objects, options, unknown keys, BOMs, formatting, and permissions through bounded conflict-checked atomic replacement; malformed documents and stale writes fail closed. Fence UI cache responses and coalesce native config/plugin event bursts while retaining the last valid snapshot. Add complete locale coverage, square scoped styles, compatibility documentation, server/store regressions, proxy security coverage, and a real Solid browser fixture for scope, mutation, event refresh, and geometry. Validated with server, UI, and Electron typechecks; 21 focused server tests; 7 UI store/invalidation tests; the plugin-controls Playwright regression; and the generic proxy mutation-block test.
|
PR builds are available as GitHub Actions artifacts: https://github.com/NeuralNomadsAI/CodeNomad/actions/runs/35504530251 Artifacts expire in 7 days.
|
Serialize activation mutations per instance location in the UI cache so concurrent controls cannot publish an older server response over a newer durable snapshot. Queued mutations continue after an earlier failure while passive refresh errors remain independently reported. Refresh the plugin-control qualification notes after the dev merge moved the synchronized OpenCode client/plugin pins to 2.0.11, and distinguish historical adapter evidence from the current release support policy. Validated with server, UI, and Electron typechecks; 21 focused server tests; 8 UI store/invalidation tests; the real plugin-controls Playwright fixture; the generic proxy refusal regression; and git diff --check.
|
PR builds are available as GitHub Actions artifacts: https://github.com/NeuralNomadsAI/CodeNomad/actions/runs/35512796408 Artifacts expire in 7 days.
|
Bring the plugin activation controls branch onto upstream/dev at 05e9342 before producing the review build. This incorporates the managed OpenCode setup, runtime-admission, and session-history changes without altering the plugin controls' scoped mutation contract. The merge resolved cleanly. Validation is recorded in the following documentation adjustment commit and local build results.
Reflect the upstream runtime-support split introduced by the latest dev baseline: OpenCode 2.0.7 is the demonstrated technical minimum, while 2.0.11 remains the synchronized recommended and tested target. Clarify that plugin activation controls add no stricter version requirement and defer admission to the shared runtime-support module and compatibility evidence policy. Validated on the merged tree with server, UI, and Electron typechecks, 21 focused server tests, 8 focused UI tests, an Electron application build, packaged-resource smoke checks, and a Windows x64 zip build.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
plugin.list()so they remain reactivable.plugin.id/-plugin.idrules. This surface does not install, remove, update, or edit plugin options.Safety and compatibility
config.get()roots.OPENCODE_CONFIG_CONTENT.plugin/check,plugin/update, and plugin RPC mutations; expose only narrow CodeNomad read/mutation routes.config.updated/plugin.updatedbursts into a trailing refresh while retaining the last valid snapshot.@opencode/client/@opencode/plugin2.0.11 pins and the latest-stable native compatibility workflow; historical adapter evidence is not presented as a separate support promise.UI
Validation
npm run typecheck --workspace @neuralnomads/codenomadnpm run typecheck --workspace @codenomad/uinpm run typecheck --workspace @neuralnomads/codenomad-electron-appnode --import tsx --test packages/server/src/opencode/plugin-control-document.test.ts packages/server/src/opencode/plugin-controls.test.ts packages/server/src/server/routes/plugin-controls.test.tsÔÇö 21 passingnode --import tsx --test packages/ui/src/stores/plugin-controls.test.ts packages/ui/src/stores/instance-invalidation.test.tsÔÇö 8 passingnode --import tsx --test packages/ui/tests/browser/plugin-controls.test.tsÔÇö passing real Solid/full-stylesheet regressionnode --import tsx --test --test-name-pattern="blocks global routes through a workspace" packages/server/src/server/__tests__/instance-proxy.test.tsÔÇö proxy mutation block remains passinggit diff --check0px.Scope note
This separate V2 implementation supersedes PR #593.