mirivlad
0ac473d720
core: Milestone 7b — Files explorer and Default Editor improvements
...
- Files plugin: richer explorer with breadcrumbs, selection, toolbar actions,
rename/trash, filter, sorting, hidden/reserved entries filtered
- Default Editor: line numbers, Ctrl+S, markdown toolbar, Edit/Preview/Split,
markdown preview, Reload/Revert
- E2E tests: 39 passed for files + editor
- Workspace model: correction, naming alignment, compatibility wrappers
- Updated docs: NOTES_FILES_PLUGIN_PLAN.md, PLUGIN_RUNTIME.md
2026-06-20 19:20:13 +08:00
mirivlad
4de5a74a55
fix: sanitize sync error messages, detect non-sync servers, add health check in TestAuth
2026-06-20 03:20:25 +08:00
mirivlad
ed69746332
feat: add sync backend methods
2026-06-20 02:25:25 +08:00
mirivlad
5c979174f1
fix: polish workspace files and editor shell
2026-06-19 23:37:10 +08:00
mirivlad
a6412fa070
feat: milestones 6b-fix through 6e — default-editor, files plugin, workspace host, workspaceItems contribution
...
- Fix PluginCard openProviders display
- Add default-editor plugin (text/markdown/notes-context)
- Add files plugin with workspaceItems placement
- Add workspaceItems contribution point (Go + API + mock + SDK)
- Add WorkspaceHost component for workspace area
- WorkspaceTree dispatches selection event
- Fix default-editor layout to fill container
- Fix PluginCard unsafe .length access
- Add E2E tests: 34/34 pass
- Add bundle execution check to official-plugins check.sh
- Update docs: PLUGIN_RUNTIME, DEV_PLUGINS, MILESTONE_6B/6C/6D plans
2026-06-19 16:42:01 +08:00
mirivlad
6ed6df311a
Implement milestone 6b workbench routing skeleton
2026-06-19 07:51:57 +08:00
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
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
6eecf5d005
fix: OpenVault now looks for vault.json inside VerstakVault/ subdirectory
2026-06-17 10:10:39 +08:00
mirivlad
ffb3446cc3
feat: native directory picker for vault selection
2026-06-17 09:13:09 +08:00
mirivlad
dd199f38ee
fix: remove legacy config migration — new Verstak starts clean
2026-06-17 08:56:17 +08:00
mirivlad
e9758ec1b5
feat: add legacy config migration + test
2026-06-17 08:23:25 +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
04dbfa056e
feat: add app settings, vault plugin state, and first-run vault selection
...
- internal/core/appsettings/ — app settings manager (~/.config/verstak/config.json)
- internal/core/pluginstate/ — vault plugin state (.verstak/plugins.json)
- internal/api/app.go — Wails bindings for app settings + plugin state
- main.go — init app settings, auto-open vault, init plugin state, disabled plugin filtering
- Plugin state: enable/disable, desired plugins, missing-installed tracking
- App settings: currentVaultPath, recentVaults, theme, devMode, windowState
2026-06-17 03:37:15 +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
70d4c75d7e
fix: resolve plugin path relative to binary location + copy plugins in build
...
- main.go: use filepath.Dir(os.Args[0]) instead of ./plugins for discovery
- api/app.go: same fix for ReloadPlugins
- build.sh: copy plugins/ to build/bin/plugins/ after wails build
- Fixes: plugin not found when binary launched from different CWD
2026-06-16 21:00:44 +08:00
mirivlad
d6793e8695
feat: add core vault layer with capability registration
2026-06-16 20:37:48 +08:00
mirivlad
47530559bb
test: add plugin lifecycle tests (core caps, degraded, disabled, reload)
2026-06-16 17:46:24 +08:00
mirivlad
dd3a5f8ff5
fix: register core capabilities + plugin lifecycle before discovery
...
Core fix: core capabilities (plugin-manager, capability-registry,
contribution-registry, permissions, events) now registered BEFORE plugin
discovery, so plugins can resolve required capabilities at load time.
Changes:
- main.go: register 5 core capabilities before DiscoverPlugins();
add plugin lifecycle (register caps, resolve required/optional,
set status LOADED/DEGRADED/MISSING_REQUIRED, register contributions)
- api/app.go: ReloadPlugins now re-registers core + plugin capabilities
- capability/registry.go: add UnregisterAll() for reload
- cmd/smoke-platform/main.go: verify core caps, required resolution,
degraded status, total caps >= 7
- PluginCard.svelte: remove ✗ on optional-missing, show degraded info
- PluginManager.svelte: preserved (counter shows core+plugin caps)
Rule: optional missing => DEGRADED (not FAILED).
Required missing => MISSING_REQUIRED_CAPABILITY.
Verified: smoke-platform ✅ , test.sh (10/10) ✅ , check.sh ✅
2026-06-16 17:12:46 +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
aefb9e9a9c
feat: add scripts/build.sh, test.sh, check.sh + gofmt + go mod tidy
2026-06-16 12:11:55 +08:00
mirivlad
cf0a962b46
feat: plugin discovery, capability/contribution/permission registries, Plugin Manager UI
2026-06-16 12:00:43 +08:00