clauddy 1.5.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -4
- package/auth.js +7 -1
- package/main.js +3 -0
- package/package.json +15 -1
package/README.md
CHANGED
|
@@ -50,9 +50,13 @@ Plus a welcome **wave** on launch. You can [poke the pet from the terminal](#pla
|
|
|
50
50
|
|
|
51
51
|
## Install
|
|
52
52
|
|
|
53
|
-
macOS (Apple Silicon).
|
|
53
|
+
**macOS (Apple Silicon)** is the first-class build. **Windows (x64)** works too, and **Linux** is next. The `bunx`/`npx` route below runs on all of them today.
|
|
54
54
|
|
|
55
|
-
###
|
|
55
|
+
### macOS
|
|
56
|
+
|
|
57
|
+
Two ways, depending on what you want:
|
|
58
|
+
|
|
59
|
+
#### 1. Install as an app — opens at login (recommended)
|
|
56
60
|
|
|
57
61
|
One command — it downloads the latest release and drops it in `/Applications`:
|
|
58
62
|
|
|
@@ -64,7 +68,7 @@ curl -fsSL https://raw.githubusercontent.com/renatoaug/claude-usage-monitor/main
|
|
|
64
68
|
|
|
65
69
|
Why not a normal download? macOS blocks **unsigned** apps downloaded through a browser with a scary *"damaged, move to Trash"* warning — even when they're perfectly safe. It's a false alarm: the only way to silence it is to pay Apple **$99/year** to sign + notarize, which a free hobby app skips. Files fetched with `curl` aren't flagged, so this method simply **lets your Mac open the app** without the block. It then registers in **Login Items** and starts with your Mac — set it and forget it.
|
|
66
70
|
|
|
67
|
-
|
|
71
|
+
#### 2. Run it via `bunx` (no install)
|
|
68
72
|
|
|
69
73
|
Needs [Bun](https://bun.sh) (or use `npx` with Node 24):
|
|
70
74
|
|
|
@@ -74,7 +78,23 @@ bunx clauddy
|
|
|
74
78
|
|
|
75
79
|
The first run downloads Electron, so give it a moment. Handy for a quick run, but it stays up **only while that command is open** and won't start on its own. Quit it with the **×** button.
|
|
76
80
|
|
|
77
|
-
|
|
81
|
+
### Windows (x64)
|
|
82
|
+
|
|
83
|
+
The quickest path works the same as macOS — with [Bun](https://bun.sh) or Node 24 installed:
|
|
84
|
+
|
|
85
|
+
```powershell
|
|
86
|
+
bunx clauddy # or: npx clauddy
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Prefer a standalone app with no Node/Bun? Grab the **portable zip** (`Clauddy-<version>-win.zip`) from the [latest release](https://github.com/renatoaug/claude-usage-monitor/releases), unzip it anywhere, and run `Clauddy.exe`. Because the app is unsigned, Windows **SmartScreen** shows a "Windows protected your PC" prompt the first time — click **More info → Run anyway**. From then on it starts with Windows.
|
|
90
|
+
|
|
91
|
+
> Windows builds are produced by the **Build** workflow (Actions ▸ Build) — attaching them to every release automatically is on the roadmap.
|
|
92
|
+
|
|
93
|
+
### Linux
|
|
94
|
+
|
|
95
|
+
Coming soon — the build is already wired for `tar.gz` and AppImage. In the meantime, `bunx clauddy` / `npx clauddy` works today.
|
|
96
|
+
|
|
97
|
+
> The app keeps its data in `~/.claude-usage-monitor`, regardless of platform or how you run it.
|
|
78
98
|
|
|
79
99
|
## Controls
|
|
80
100
|
|
package/auth.js
CHANGED
|
@@ -124,7 +124,13 @@ async function refresh() {
|
|
|
124
124
|
client_id: CLIENT_ID,
|
|
125
125
|
}),
|
|
126
126
|
})
|
|
127
|
-
if (!res.ok)
|
|
127
|
+
if (!res.ok) {
|
|
128
|
+
// a rejected grant (expired/revoked refresh token) means the session is
|
|
129
|
+
// dead — surface it as 401 so callers clear the token and prompt login.
|
|
130
|
+
// transient failures (429, 5xx) keep their status so we retry, not logout.
|
|
131
|
+
const dead = res.status === 400 || res.status === 403
|
|
132
|
+
throw Object.assign(new Error('refresh failed'), { status: dead ? 401 : res.status })
|
|
133
|
+
}
|
|
128
134
|
const j = await res.json()
|
|
129
135
|
save({
|
|
130
136
|
access_token: j.access_token,
|
package/main.js
CHANGED
|
@@ -101,6 +101,7 @@ function createWindow() {
|
|
|
101
101
|
y: workAreaSize.height - H - 24,
|
|
102
102
|
frame: false,
|
|
103
103
|
transparent: true,
|
|
104
|
+
backgroundColor: '#00000000', // fully transparent — Windows needs this or the window paints black
|
|
104
105
|
resizable: false,
|
|
105
106
|
alwaysOnTop: true,
|
|
106
107
|
skipTaskbar: true,
|
|
@@ -265,6 +266,8 @@ ipcMain.on('save-config', (_e, patch) => {
|
|
|
265
266
|
ipcMain.on('quit', () => app.quit())
|
|
266
267
|
|
|
267
268
|
app.whenReady().then(() => {
|
|
269
|
+
// Windows toast notifications need an explicit AppUserModelID to show reliably
|
|
270
|
+
if (process.platform === 'win32') app.setAppUserModelId('app.clauddy')
|
|
268
271
|
createWindow()
|
|
269
272
|
// open at login (packaged app only)
|
|
270
273
|
if (app.isPackaged) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "clauddy",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.0",
|
|
4
4
|
"description": "A cute desktop pet that tracks your Claude Code usage",
|
|
5
5
|
"main": "main.js",
|
|
6
6
|
"bin": {
|
|
@@ -19,6 +19,8 @@
|
|
|
19
19
|
"start": "electron .",
|
|
20
20
|
"pack": "node scripts/build-app.js --dir",
|
|
21
21
|
"dist": "node scripts/build-app.js --mac zip",
|
|
22
|
+
"dist:win": "node scripts/build-app.js --win zip",
|
|
23
|
+
"dist:linux": "node scripts/build-app.js --linux",
|
|
22
24
|
"icon": "bash build-icon.sh",
|
|
23
25
|
"gifs": "electron tools/capture/capture.js",
|
|
24
26
|
"format": "biome format --write .",
|
|
@@ -73,6 +75,18 @@
|
|
|
73
75
|
"target": "dir",
|
|
74
76
|
"identity": null,
|
|
75
77
|
"icon": "build/icon.icns"
|
|
78
|
+
},
|
|
79
|
+
"win": {
|
|
80
|
+
"target": "zip",
|
|
81
|
+
"icon": "build/icon.ico"
|
|
82
|
+
},
|
|
83
|
+
"linux": {
|
|
84
|
+
"target": [
|
|
85
|
+
"tar.gz",
|
|
86
|
+
"AppImage"
|
|
87
|
+
],
|
|
88
|
+
"category": "Utility",
|
|
89
|
+
"icon": "build/icon.png"
|
|
76
90
|
}
|
|
77
91
|
},
|
|
78
92
|
"dependencies": {
|