Commit graph

35 commits

Author SHA1 Message Date
a1bbc6f8ba Enforce LF line endings via .gitattributes + ignore tauri-icon's extra outputs
Fixes the recurring 'Your local changes to Cargo.toml would be overwritten'
error on Windows pulls. Git-for-Windows defaults to core.autocrlf=true,
which made every text file appear modified vs the LF-stored versions.
'* text=auto eol=lf' in .gitattributes overrides autocrlf and forces a
stable LF checkout.

Also ignores Square*Logo.png, android/, ios/, 64x64.png, icon.png — these
are produced by 'pnpm tauri icon' but we ship only the canonical 5 files
(32, 128, 128@2x, .ico, .icns).
2026-05-09 16:05:55 +01:00
160e08d4a8 Suppress console-window flash on subprocess spawn (CREATE_NO_WINDOW); bump 0.1.2
paths::quiet_command sets CREATE_NO_WINDOW (0x08000000) on Windows so
short-lived child processes (wsl.exe -l -q, where claude, wsl.exe -d X
bash -lc 'command -v claude') don't briefly allocate a real console
window and flash on click. Used by both paths.rs and cli_usage.rs.
2026-05-09 16:03:40 +01:00
6dd8200802 README: replace ASCII mock with 4-theme screenshot grid (anthropic / instrument / editorial / retro) 2026-05-09 16:00:49 +01:00
4d5bce244a Bump version to 0.1.1 (themes release) 2026-05-09 15:53:03 +01:00
14d9ca0b41 Settings overlay: cover the widget cleanly (was rendering below content because of a stacking-context fix from theme atmosphere layer) 2026-05-09 15:51:38 +01:00
3a4b1a4d7a Settings: collapse theme picker into a segmented control + move below command settings near Save 2026-05-09 15:48:49 +01:00
8a7ebd60b1 Add 4 switchable themes (Anthropic / Instrument / Editorial / Retro CRT)
- @fontsource-variable/{fraunces,jetbrains-mono,newsreader} + @fontsource/{dm-sans,ibm-plex-mono} bundled offline.
- styles.css restructured: theme-agnostic base + 4 [data-theme="..."] overrides driving CSS custom props (--bg, --fg, --accent, --font-display, --font-body, --atmosphere).
- Each theme has its own typographic + chromatic personality:
  * Anthropic: warm cream-on-charcoal, Newsreader display + DM Sans body, sunset orange + claude purple.
  * Instrument: synth panel, JetBrains Mono throughout, chartreuse on slate, ring tick marks, faint scanlines, bracket corners on title bar.
  * Editorial: magazine artifact, Fraunces variable serif (opsz axis), saffron on warm charcoal, hairline rules.
  * Retro CRT: phosphor green on near-black, IBM Plex Mono, scanlines + vignette, blink-cursor in corner, [bracketed] header label.
- Settings panel: 4-up theme picker (each card renders a sample percentage in that theme's actual fonts/colors). Click = live preview; Cancel reverts; Save persists.
- BlockRing big % bumped to 38px logical with theme-specific font-variation-settings.
- TitleBar voice differs per theme without changing underlying string.
- Default theme: Anthropic (warmest first impression).
2026-05-09 15:43:57 +01:00
5200caf21f Repo cleanup: untrack CLAUDE.md / memory.md (agent-internal); fix README link 2026-05-09 15:00:16 +01:00
dbf77a0cec memory: record v0.1.0 release and public visibility flip 2026-05-09 14:59:11 +01:00
79fc144235 Add system tray icon (Show/Hide/Refresh/Quit; left-click restores window)
Solves the 'lost window' problem — if the widget gets dragged off-screen
or hidden behind other apps, users can recover it via the tray.

Enables tauri 'tray-icon' feature; tray runs entirely Rust-side so no
new JS capabilities needed.
2026-05-09 14:47:03 +01:00
9be856d37c Polish for shipping: robust auto-detect, empty state, real icons, end-user README
- cli_usage::default_command now enumerates WSL distros and probes each for
  claude before falling back; no more hardcoded -d Ubuntu.
- New autodetect_claude_command Tauri command + IPC binding so the UI knows
  whether claude is reachable.
- App.svelte: clear 'Claude Code not found' empty state with install link.
- Real icons: scripts/make-icon.py generates a 1024x1024 source.png; runtime
  produces 32/128/256 PNGs and a multi-resolution .ico. README in icons/
  explains how to regen.
- README rewritten for friends: install / requirements / troubleshooting on
  top; build-from-source moved to bottom.
2026-05-09 14:25:24 +01:00
0a960dae2d memory.md: full session log of v0 bring-up + pivot to PTY-driven /usage 2026-05-09 02:01:04 +01:00
60db1bf8c2 Drop unused anyhow! macro import 2026-05-09 01:59:40 +01:00
c38d895f5f styles: box-sizing reset + body overflow:hidden — kill the 2px-border overflow bug
#app has width:100vw and a 1px border with default content-box box-sizing,
so its rendered size is 100vw+2px which overflowed body → unwanted scrollbars.
2026-05-09 01:58:45 +01:00
f90bb3b0d5 Layout: resizable window, fluid SVG ring, no scrollbars unless overflow, opaque bg
tauri.conf: resizable=true, min 220x240, default 300x320.
BlockRing: SVG scales via viewBox, claims remaining vertical space.
#app uses flex column with sections flex:0 0 auto — content reflows when window resized.
Bumped --bg opacity from 0.78 to 0.93 so files behind the widget don't bleed through.
Themed scrollbars subtle when they do appear.
2026-05-09 01:56:59 +01:00
75049903e7 Auto-detect 'wsl.exe -d Ubuntu bash -lc claude' as default on Windows; record milestone in memory 2026-05-09 01:55:51 +01:00
97864374aa Settings: make autostart toggle best-effort so it doesn't block save (dev builds) 2026-05-09 01:48:03 +01:00
5a6f5dd4fa Settings: expose raw /usage output when parser fails (debug aid) 2026-05-09 01:46:31 +01:00
db9a10a4c2 Replace cap-based estimation with PTY-driven 'claude /usage' parser
The widget now spawns 'claude' via portable-pty, sends /usage, parses the
three rendered bars (Current session / Current week all / Current week
Sonnet), and shows the real percentages in the ring + weekly bars. A
background task refreshes every 5 minutes; the title-bar refresh button
forces an immediate fetch.

Drops the cap-tuning UI and tier card from Settings; adds a 'claude command'
override (e.g. 'wsl.exe -- claude' for Windows-host widgets reading WSL
credentials) and a refresh-interval setting. Fixes title-bar buttons getting
swallowed as drag attempts via data-tauri-drag-region="false".
2026-05-09 01:40:44 +01:00
18e55cd139 tier: per-path probe diagnostics — surface read errors / parse status in TierInfo.searched 2026-05-09 01:19:52 +01:00
c5c38d1ce5 Don't canonicalize roots — \\?\UNC\... prefix breaks downstream Path ops 2026-05-09 01:15:58 +01:00
9d10c1f46f detect_plan_tier: re-resolve roots fresh; expose searched paths in TierInfo for diagnosis 2026-05-09 01:11:43 +01:00
f33bb5481b Detect tier across WSL roots, not just native home (\\wsl$\<distro>\... probe) 2026-05-09 01:00:50 +01:00
ef84257ddd Detect plan tier from .claude.json; seed sane caps per tier (Pro/Max 5x/Max 20x) 2026-05-09 00:54:50 +01:00
106ad28f9f Record v0 first-run milestone and the 4 bring-up fixes in memory.md 2026-05-09 00:43:52 +01:00
8c25b015a7 Remove autostart JSON config (plugin takes args via Rust init(), not tauri.conf.json) 2026-05-09 00:42:48 +01:00
ab75ca9bbb Fix watch.rs: import notify::Watcher trait, use tauri JoinHandle, drop unused imports 2026-05-09 00:41:10 +01:00
66e4de33b5 Allow esbuild postinstall via pnpm.onlyBuiltDependencies (pnpm 11 default-deny) 2026-05-09 00:37:10 +01:00
89ab6c8952 Update memory.md: record successful push to Forgejo 2026-05-09 00:29:21 +01:00
169f82d53e Update memory.md: record session, host-setup gap, and known watcher rebind limitation 2026-05-09 00:11:47 +01:00
c1ef514697 Add seed-fake-jsonl.ps1 verification helper and README 2026-05-09 00:08:07 +01:00
0e8a87fbc5 Add Svelte 5 frontend (App, TitleBar, BlockRing, ModelStack, WeeklyBar, Settings) 2026-05-09 00:07:02 +01:00
14ffcf4bd3 Add Rust modules: paths, jsonl, usage, watch, commands, state, settings 2026-05-09 00:05:12 +01:00
8abb0599f6 Add Tauri config, Cargo.toml, capabilities 2026-05-09 00:00:55 +01:00
c6d8e902f6 Initial scaffold 2026-05-09 00:00:26 +01:00