mirivlad
|
05ef1449bc
|
feat: milestone 5b — frontend bundle host + VerstakPluginAPI stub
- Bundle contract: window.VerstakPluginRegister(id, {components: {...}})
- PluginBundleHost.svelte: loads bundle via GetPluginAssetContent, mounts components
- VerstakPluginAPI.js: restricted API (capabilities, events, settings, commands — all stub)
- ViewContainer: PluginBundleHost replaces placeholder when frontend bundle exists
- PluginManager: settings panel via PluginBundleHost (removed hardcoded form)
- Backend: GetPluginFrontendInfo, GetPluginAssetContent with path security
- Security: reject absolute paths, path traversal, escape from plugin root
- Error boundary: bundle load/execute/mount errors show fallback, not crash
- Tests: 11 backend tests (asset API), frontend bundle checks in smoke
- Docs: bundle contract, VerstakPluginAPI, security constraints
|
2026-06-17 17:39:50 +08:00 |
mirivlad
|
a96ffb5801
|
chore: split build.sh and update-and-build-all.sh
- build.sh: deterministic local-only build, fail-fast, no git pull
- update-and-build-all.sh: dev helper, pulls all repos, builds official plugins, then builds desktop
- Docs: added Build Scripts section explaining the difference
|
2026-06-17 17:13:14 +08:00 |
mirivlad
|
86eeadd2a9
|
feat: milestone 5a — frontend plugin host, contribution lifecycle, UI shell
- Contribution Registry: ListByPoint, idempotent Register (Unregister-before-add)
- Flat ContributionSummary types for frontend (no nested .item.)
- Sidebar.svelte: items from ContributionRegistry, sort by position, error boundary
- ViewContainer.svelte: declarative placeholder host with error boundary
- PluginManager.svelte: settings panels from registry, knoppka only with settingsPanel
- PluginCard.svelte: settingsPanels prop, disabled state for Settings button
- Error boundary: ViewContainer + PluginManager catch errors, shell stays stable
- ReloadPlugins: Unregister before Register contributions (no duplicates)
- Smoke: -test-contributions flag, enable/disable/reload lifecycle verification
- Build: global_update() — pull all repos, build official plugins, install to desktop
|
2026-06-17 17:07:52 +08:00 |
mirivlad
|
67345a194a
|
fix: vault/workspace lifecycle — CreateVault creates workspace, SetCurrentVault loads workspace, ReloadPlugins keeps workspace capability, recursive tree rendering
|
2026-06-17 14:26:49 +08:00 |
mirivlad
|
5c9ae7f93b
|
feat: add workspace/cases core capability
|
2026-06-17 12:22:52 +08:00 |
mirivlad
|
252d075f9b
|
fix: register OnStartup callback for Wails context initialization
|
2026-06-17 09:44:23 +08:00 |
mirivlad
|
ffb3446cc3
|
feat: native directory picker for vault selection
|
2026-06-17 09:13:09 +08:00 |
mirivlad
|
7530e21dfd
|
feat: ui completion — VaultSelection, Sidebar navigation, layout fixes
|
2026-06-17 07:28:00 +08:00 |
mirivlad
|
a6f9e85f13
|
feat(m4b): add vault selection UI, enable/disable toggle, missing-installed UI
- Add VaultSelection.svelte: first-run vault create/open/recent UI
- Update App.svelte: vault check on startup, show VaultSelection when needed
- Update PluginCard.svelte: enable/disable buttons, vault state awareness
- Update PluginManager.svelte: enable/disable handlers, missing-installed section
- Add SetCurrentVault Wails API binding
- Add RecordDesiredPlugin Wails API binding
- Record desired plugins on discovery (only when vault open)
- Fix addRecent: remove duplicate sort, clean up unused import
- Update smoke-platform.sh: enable/disable lifecycle test
- Add runEnableDisableTest: vault create/open, disable/enable, plugins.json verify
|
2026-06-17 04:19:13 +08:00 |
mirivlad
|
ca7eb79a40
|
feat: add plugin UI host (sidebar, view container, settings panel) + storage API
- internal/core/storage/api.go — plugin namespace JSON storage (settings/data/cache)
- internal/core/storage/api_test.go — 8 tests (write/read, path traversal, atomic)
- internal/api/app.go — Wails bindings for storage (Read/WritePluginSettings, Read/WritePluginDataJSON)
- main.go — initialize storage service, pass to NewApp
- Sidebar.svelte — plugin sidebar items from contributions (filtered by ui.register)
- ViewContainer.svelte — plugin view host with degraded status
- PluginCard.svelte — Settings button + permission warnings
- PluginManager.svelte — settings panel modal with test form
- App.svelte — integrated sidebar + view container layout
|
2026-06-17 03:01:37 +08:00 |
mirivlad
|
d7da8b4ee3
|
feat: add vault status to Plugin Manager UI
|
2026-06-16 20:40:00 +08:00 |
mirivlad
|
d6793e8695
|
feat: add core vault layer with capability registration
|
2026-06-16 20:37:48 +08:00 |
mirivlad
|
6832b01b23
|
fix: show core capabilities in registry, add degraded text + contribution counts
|
2026-06-16 17:52:50 +08:00 |
mirivlad
|
d72ebeb7ec
|
fix: PluginManager — proper await with real Wails imports; no dead code, no safety timer
|
2026-06-16 15:39:30 +08:00 |
mirivlad
|
1d20b833f2
|
hotfix: PluginManager infinite loading
Root cause: Wails v2 + webkit2gtk-4.1 production bridge deadlock.
await window.go.api.App.Xxx() deadlocks the JS event loop — Promise
never settles, finally never runs, loading=true forever.
Fix:
- Replace await with .then() + fallback to window.runtime.Call()
- Separated GetPlugins/GetCapabilities/GetPermissions (no Promise.all)
- Safety timer: force loading=false after 10s regardless of bridge
- All UI states: loading → error (with retry) → empty/list + badges
- Go: tilde expansion (~/.config/verstak/plugins → /home/mirivlad/...)
- Go: diagnostic logging in DiscoverPlugins + API methods
- Tests: 11 headless Go tests for DiscoverPlugins
|
2026-06-16 14:51:31 +08:00 |
mirivlad
|
3c613f0e44
|
hotfix: plugin manager infinite loading
- frontend: RPC timeout (8s), try/catch/finally on reload, proper UI
states (loading/error/empty/list)
- frontend: reload() now sets loading=true, catches errors
- backend: tilde expansion (~/.config/verstak/plugins → /home/mirivlad/...)
- backend: ReloadPlugins returns diagnostics (count, summary string)
- backend: diagnostic logging in DiscoverPlugins (start/dirs/entries/results)
- backend: FormatDiscoverySummary helper
- testing: 11 headless tests for DiscoverPlugins (empty, missing, valid,
broken JSON, duplicate ID, multiple dirs, nonexistent mix)
|
2026-06-16 13:52:49 +08:00 |
mirivlad
|
e39e249556
|
fix: auto-detect webkit2gtk-4.1 with -tags webkit2_41, show binary path
|
2026-06-16 13:38:51 +08:00 |
mirivlad
|
ec8ceee7f3
|
chore: add .gitignore, remove node_modules from tracking
|
2026-06-16 12:01:36 +08:00 |
mirivlad
|
cf0a962b46
|
feat: plugin discovery, capability/contribution/permission registries, Plugin Manager UI
|
2026-06-16 12:00:43 +08:00 |