refactor: convert to bun-workspaces monorepo (desktop/ + www/)

- Move the Tauri app (React frontend + Rust backend) into desktop/ via
  git mv — configs unchanged (relative paths: tauri.conf.json, vite.config.ts)
- Root package.json becomes a private bun workspace container with
  orchestration scripts; desktop package renamed gridline-desktop
- Scaffold www/ with Astro 7 + Tailwind v4 (hand-wired vite plugin,
  static output, ready for Dokploy)
- Update release.yml for the new layout: projectPath: desktop,
  desktop/src-tauri resource paths, rust-cache workspace path
- Update README + AGENTS.md structure trees and dev commands
- Verified: vitest (1074), cargo test (354), desktop build, tauri dev
  (window launches), tauri build (dmg + app bundles), Astro build
This commit is contained in:
2026-08-16 19:31:53 +08:00
parent d752642b4d
commit 6854d889c5
400 changed files with 857 additions and 149 deletions
+26
View File
@@ -0,0 +1,26 @@
import { create } from "zustand";
import type { Settings } from "../lib/types";
import * as cmd from "../lib/commands";
interface SettingsState {
settings: Settings | null; loading: boolean; error: string | null;
load: () => Promise<void>;
updateSetting: (key: string, value: string) => Promise<void>;
}
export const useSettingsStore = create<SettingsState>((set, get) => ({
settings: null, loading: false, error: null,
load: async () => {
set({ loading: true, error: null });
try {
const settings = await cmd.getSettings();
set({ settings, loading: false });
} catch (e) {
set({ loading: false, error: e instanceof Error ? e.message : String(e) });
}
},
updateSetting: async (key, value) => {
await cmd.updateSetting(key, value);
await get().load();
},
}));