- README: fix LICENSE link, remove dead doc links, update install
instructions, remove hardcoded version/bundle size/LOC metrics
- artifacthub-pkg.yml: fix appVersion 0.2.18 → 0.2.20, fix README
path, fix build-from-source cd path
- docs/README.md: trim to only reference files that actually exist
(was 160 lines of aspirational links, now 47 lines of real ones)
- CLAUDE.md: correct "no MUI imports" claim — code uses @mui/material
- headlamp-plugin-developer agent: match corrected MUI convention
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The self-hosted runner doesn't have gh CLI installed. Restore the
original softprops/action-gh-release@v2 action for creating releases.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The mv was a leftover from when the plugin built in a subdirectory.
Now that source lives at repo root, the tarball is already correctly
named — just verify it exists instead.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
SettingsPage now accepts PluginSettingsProps (data, onDataChange)
and is registered directly as a component (not wrapped in function).
This matches the pattern used in headlamp-polaris-plugin.
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
This matches the polaris plugin naming convention where the package
name is just 'polaris', causing Headlamp to display 'sealed-secrets'
in the plugin settings list instead of 'headlamp-sealed-secrets'.
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
- Fix extra closing Box tag in SettingsPage causing blank display
- Change display name from 'Sealed Secrets Plugin for Headlamp' to 'Sealed Secrets'
- Use default values for params to avoid undefined in hooks (fixes retry button issue)
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Major UX improvements:
- Changed detail view from full page to drawer (slides from right)
- Moved plugin settings from sidebar to Settings → Plugins (proper pattern)
- Fixed React error #310 by adding defensive String() wrappers
- Fixed syncMessage getter to always return string
- Added safety checks for encryptedData access
- Added error handling for useGet failures
The drawer approach keeps the list visible while viewing details,
matching Headlamp's design patterns. Settings are now properly
located in the global Settings → Plugins section instead of
cluttering the plugin's sidebar navigation.
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
The error was caused by attempting to read the response body twice:
- First with response.json()
- Then with response.text() in the error handler
This caused the 'Body is disturbed or locked' error that was being
displayed as 'The string did not match the expected pattern'.
Fix: Removed the duplicate response.text() call in error handler.
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
The plugin was importing from internal Headlamp paths like
'@kinvolk/headlamp-plugin/lib/lib/k8s/cluster' instead of using the
official public API '@kinvolk/headlamp-plugin/lib'.
This caused the plugin to fail loading in the browser with:
"TypeError: undefined is not an object (evaluating 'Ot.KubeObject')"
Changes:
- Updated imports to use K8s.cluster and ApiProxy from main export
- Added vite.config.js with custom globals (now obsolete with this fix)
- Moved node-forge to dependencies for proper bundling
The plugin now uses only the official documented Headlamp plugin API.
Fixes: #[issue number if exists]
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Moving node-forge from dependencies to devDependencies ensures it gets
bundled into the plugin instead of being externalized. This is required
because Headlamp doesn't provide node-forge as a shared library.
The .pluginrc file with empty externals forces bundling of all deps,
and keeping node-forge in devDependencies makes this behavior explicit.
This fixes the frontend loading error:
"TypeError: undefined is not an object (evaluating 'Ot.KubeObject')"
Changes:
- Moved node-forge from dependencies to devDependencies
- Updated package-lock.json to mark node-forge as dev dependency
- .pluginrc remains in place to enforce bundling
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>