gui: add Wails v3 desktop app skeleton

- Go upgraded to 1.25.10 (required by Wails v3)
- Wails v3 installed (alpha.96)
- Frontend: Svelte+Vite scaffold in frontend/
- guimain.go: Wails GUI entry point (compiled with -tags gui)
- wails_service.go: stub service for Wails bindings
- Verstak desktop binary builds: go build -tags gui -o verstak-gui .
- CLI (./cmd/verstak/) unaffected
- Legacy HTTP GUI (internal/gui/) preserved as prototype
- Build: 24MB ELF binary with GTK4/WebKit2GTK-6

Build commands:
  CLI:  go build -o verstak ./cmd/verstak/
  GUI:  cd frontend && npm run build && go build -tags gui -o verstak-gui .
This commit is contained in:
2026-05-31 15:45:52 +08:00
parent 537e8a126e
commit 600b67bc1e
37 changed files with 2944 additions and 72 deletions
-71
View File
@@ -1,71 +0,0 @@
//go:build gui
// +build gui
package main
import (
"fmt"
"log"
"os"
"os/exec"
"os/signal"
"path/filepath"
"runtime"
"syscall"
gui "verstak/internal/gui"
"verstak/internal/core/storage"
)
func main() {
vaultPath := "."
if len(os.Args) > 1 {
vaultPath = os.Args[1]
}
abs, err := filepath.Abs(vaultPath)
if err != nil {
log.Fatal(err)
}
dbPath := filepath.Join(abs, ".verstak", "index.db")
db, err := storage.Open(dbPath)
if err != nil {
log.Fatalf("Open vault: %v", err)
}
defer db.Close()
srv := gui.NewServer(db, abs)
addr, err := srv.Start()
if err != nil {
log.Fatalf("Start GUI: %v", err)
}
fmt.Println("Верстак GUI:", addr)
openBrowser(addr)
// Wait for interrupt.
sig := make(chan os.Signal, 1)
signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM)
<-sig
srv.Stop()
deferFunc()
}
func openBrowser(url string) {
var cmd *exec.Cmd
switch runtime.GOOS {
case "linux":
cmd = exec.Command("xdg-open", url)
case "darwin":
cmd = exec.Command("open", url)
case "windows":
cmd = exec.Command("cmd", "/c", "start", "", url)
}
if cmd != nil {
go cmd.Start()
}
}
func deferFunc() {}