feat(ui): load right panel plugin manifests - #617
Conversation
|
Stack note: this is intentionally based on feat/right-panel-customization so the diff only contains the manifest/lifecycle loader. The repository restrict-non-dev-prs workflow currently blocks non-dev base branches for authors outside ALLOWED_NON_DEV_PR_ACTORS, so CI is skipped until #615 merges and this PR is retargeted to dev, or the allowlist includes this author. |
1d1da61 to
a082456
Compare
|
Rebased on the updated #615 branch after the right-panel customization popover UX change. Manifest loader diff remains stacked and clean. Validation after rebase:
|
a082456 to
a7eee0e
Compare
|
Update: rebased this stacked branch on the latest feat/right-panel-customization and force-with-lease pushed a7eee0e.
|
Add a typed manifest loader for right-panel plugins so bundled modules can contribute tabs and Status sections through the registry introduced by the stacked customization PR. The loader runs deterministic onLoad/onUnload lifecycle hooks, skips duplicate or failed manifests without blocking other plugins, and keeps the plugin list explicit for now to avoid arbitrary code loading or marketplace behavior in this step. Validated with focused manifest and registry tests, UI typecheck, whitespace check, UI build, and a final gatekeeper pass.
a7eee0e to
6f93f79
Compare
|
Update: #617 is now rebased directly on dev after #615 was merged.
|
Route the built-in Git Changes, Files, Status tab definitions and native Status sections through core manifest factories. The render functions still close over the existing RightPanel and StatusTab state, so this proves the manifest contract without widening plugin access to private panel internals or changing user-visible behavior. Validation: npm exec --no -- tsx --test packages/ui/src/components/instance/shell/right-panel/plugin-manifest.test.ts; npm exec --no -- tsx --test packages/ui/src/components/instance/shell/right-panel/registry.test.ts; npm run typecheck --workspace @codenomad/ui; npm run build --workspace @codenomad/ui; git diff --check.
|
Update: pushed e50cf17 to make #617 useful without broadening scope.
|
Derive the native Status tab manifest from CORE_STATUS_SECTION_ITEMS instead of duplicating ids, labels, tooltips, and ordering in core-plugin.tsx. This keeps the customization defaults and plugin manifest source aligned. Missing renderers now fail when building the core manifest so future section additions are caught by the existing manifest test. Validation: npm exec --no -- tsx --test packages/ui/src/components/instance/shell/right-panel/plugin-manifest.test.ts; npm exec --no -- tsx --test packages/ui/src/components/instance/shell/right-panel/registry.test.ts; npm run typecheck --workspace @codenomad/ui; npm run build --workspace @codenomad/ui; git diff --check
pascalandr
left a comment
There was a problem hiding this comment.
Gatekeeper review complete for d74be3e.
Findings: none remaining.
Fixed during review:
- Reused CORE_STATUS_SECTION_ITEMS from the core Status section manifest instead of duplicating section ids, labels, tooltips, and order in core-plugin.tsx. This keeps customization defaults and manifest metadata aligned, and missing renderers now fail in the manifest path.
Validated locally:
- npm exec --no -- tsx --test packages/ui/src/components/instance/shell/right-panel/plugin-manifest.test.ts
- npm exec --no -- tsx --test packages/ui/src/components/instance/shell/right-panel/registry.test.ts
- npm run typecheck --workspace @codenomad/ui
- npm run build --workspace @codenomad/ui
- git diff --check
Remote checks at review time:
- authorize: pass
- tests-tauri-windows: pass
- restrict-non-dev-prs: skipped as expected for dev base
- tests: still in progress after watcher timeout
- comment artifact job: still in progress
Residual risk: I did not do a manual visual drag/drop pass in the running app; coverage here is code review plus local build/typecheck/tests.
Turn RightPanel.tsx back into the shell for tab chrome, customization, drag ordering, and active manifest rendering. Native Git, Files, and Status wiring now lives in core-runtime.tsx, with Files state and split resizing isolated in focused runtime helpers. This makes the manifest extraction real instead of wrapping a monolith: plugin loading stays in the shell while native tab state is kept behind internal runtime modules, preserving persisted tab, word-wrap, list-open, section-open, and split-width behavior. Validation: npm run typecheck --workspace @codenomad/ui; npm exec --no -- tsx --test packages/ui/src/components/instance/shell/right-panel/plugin-manifest.test.ts; npm exec --no -- tsx --test packages/ui/src/components/instance/shell/right-panel/registry.test.ts; npm run build --workspace @codenomad/ui; git diff --check
|
Follow-up after scope correction:
Validated locally:
Known build note: existing Vite chunk-size warning remains unchanged in nature. |
|
PR builds are available as GitHub Actions artifacts: https://github.com/NeuralNomadsAI/CodeNomad/actions/runs/30365369176 Artifacts expire in 7 days.
|
Summary
Stacking
Validation