Adds EventKeybindingTriggered and EventWindowFileDrop EventType constants.
HandleIPCEvents bridges keybinding.ActionTriggered and window.ActionFilesDropped
to WS events. handleWSMessage bridges WS commands to IPC for keybinding:add,
keybinding:remove, keybinding:list, browser:open-url, browser:open-file.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds OnFileDrop(handler func(paths []string, targetID string)) to PlatformWindow.
trackWindow() now wires file drop callbacks to ActionFilesDropped broadcasts.
Updates both exported MockWindow and unexported mockWindow with the new method.
Wails adapter maps WindowFilesDropped event with DroppedFiles and DropTargetDetails.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Implements pkg/browser with three-layer pattern: IPC Bus -> Service -> Platform.
Stateless service — delegates OpenURL and OpenFile to platform adapter.
No queries or actions, tasks only.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Implements pkg/keybinding with three-layer pattern: IPC Bus -> Service -> Platform.
Service maintains in-memory registry, ErrAlreadyRegistered on duplicates.
QueryList reads from service registry, not platform.GetAll().
ActionTriggered broadcast on shortcut trigger via platform callback.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
5 new packages: clipboard, dialog, notification, environment, screen.
Each follows the three-layer pattern with Platform interface, IPC
messages, and Service. Task 7 cleans up display orchestrator.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
5 new core.Service packages extracted from pkg/display:
clipboard, dialog, notification, environment, screen.
Each with Platform interface insulation, full IPC messages,
and WS bridge integration for the TypeScript SDK.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace the in-memory loadConfig() stub with real ~/.core/gui/config.yaml
loading via go-config. handleConfigTask now persists changes to disk via
cfg.Set() + cfg.Commit(). Sub-service applyConfig() stubs fleshed out:
window reads default dimensions (TODO: Manager API), systray stores icon
path, menu reads show_dev_tools flag with accessor.
Co-Authored-By: Virgil <virgil@lethean.io>
Wire go-config into display orchestrator to replace the in-memory
loadConfig() stub with real .core/gui/config.yaml file loading and
persistence via handleConfigTask.
Co-Authored-By: Virgil <virgil@lethean.io>
Display methods now route through IPC bus instead of direct Manager calls.
Menu/tray setup uses PERFORM. Tray click actions handled via HandleIPCEvents.
WindowInfo aliased from window package. Direct Manager refs removed.
Integration tests verify full 4-service conclave startup and communication.
Service struct no longer holds windows/tray/menus fields — uses windowService()
for direct Manager access where IPC messages are not yet defined.
Co-Authored-By: Virgil <virgil@lethean.io>
Display HandleIPCEvents converts sub-service actions to WS events.
ActionServiceStartup triggers buildMenu/setupTray after all services start.
Export mock platforms from each sub-package for integration tests.
Co-Authored-By: Virgil <virgil@lethean.io>
Menu package is now a full core.Service with typed IPC messages.
TaskSetAppMenu carries MenuItems with OnClick closures (in-process IPC).
Co-Authored-By: Virgil <virgil@lethean.io>
Systray package is now a full core.Service with typed IPC messages.
Menu item clicks emit ActionTrayMenuItemClicked via IPC.
Co-Authored-By: Virgil <virgil@lethean.io>
Window package is now a full core.Service with typed IPC messages.
Register(Platform) factory closure captures platform adapter for WithService.
OnStartup queries config and registers query/task handlers.
Platform events converted to IPC actions via trackWindow.
Co-Authored-By: Virgil <virgil@lethean.io>
Service now delegates to window.Manager, systray.Manager, and menu.Manager
instead of directly using Wails types. WSEventManager accepts EventSource
interface instead of calling application.Get() directly.
AttachWindowListeners now accepts window.PlatformWindow.
Removes migrated files: window.go, window_state.go, layout.go, tray.go, menu.go.
Tests rewritten against mock platform implementations.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Uses reusable workflows from core/go-devops for Go testing
(with race detector and coverage) and security scanning
(govulncheck, gitleaks, trivy).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Update Enchantrix, Mining dependency paths and snider/i18n import
to forge.lthn.ai equivalents across go.mod files and imports.
Also update go-i18n pseudo-version to v0.0.1 tag.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
GUI packages, examples, and documentation for building
desktop applications with Go and web technologies.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>