Compare commits
8
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2235a627b5 | ||
|
|
d6c138f1a2 | ||
|
|
432819639e | ||
|
|
52db469c13 | ||
|
|
40c86aaaf2 | ||
|
|
46b09934d7 | ||
|
|
a79a23ac24 | ||
|
|
3785629ee4 |
@@ -18,12 +18,18 @@ Steps to reproduce the behaviour:
|
|||||||
**Expected behaviour**
|
**Expected behaviour**
|
||||||
What you expected to happen.
|
What you expected to happen.
|
||||||
|
|
||||||
|
**Diagnostics**
|
||||||
|
Open the app → Settings → Diagnostics, then click "Copy All" and paste the output here.
|
||||||
|
This shows the error, request state, and cookie info. Email and org IDs are automatically redacted when you click Copy All.
|
||||||
|
|
||||||
**Screenshots**
|
**Screenshots**
|
||||||
If applicable, add screenshots to help explain your problem.
|
If applicable, add screenshots to help explain your problem.
|
||||||
|
|
||||||
**Environment**
|
**Environment**
|
||||||
- macOS version: [e.g. Sequoia 15.4]
|
- Platform: [macOS / Windows]
|
||||||
- ClaudeChecker version: [e.g. 1.1.3]
|
- macOS version: [e.g. Sequoia 15.4] *(if applicable)*
|
||||||
|
- Windows version: [e.g. Windows 11 24H2] *(if applicable)*
|
||||||
|
- ClaudeChecker version: [e.g. 1.3.2]
|
||||||
- Claude plan: [e.g. Pro, Max]
|
- Claude plan: [e.g. Pro, Max]
|
||||||
|
|
||||||
**Additional context**
|
**Additional context**
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ struct DiagnosticsView: View {
|
|||||||
.buttonStyle(.bordered)
|
.buttonStyle(.bordered)
|
||||||
.controlSize(.small)
|
.controlSize(.small)
|
||||||
if copied {
|
if copied {
|
||||||
Text("Copied!")
|
Text("Copied! (IDs redacted)")
|
||||||
.font(.system(size: 11))
|
.font(.system(size: 11))
|
||||||
.foregroundColor(.green)
|
.foregroundColor(.green)
|
||||||
}
|
}
|
||||||
@@ -46,7 +46,6 @@ struct DiagnosticsView: View {
|
|||||||
DiagRow("Version", Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "?")
|
DiagRow("Version", Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "?")
|
||||||
DiagRow("Build", Bundle.main.infoDictionary?["CFBundleVersion"] as? String ?? "?")
|
DiagRow("Build", Bundle.main.infoDictionary?["CFBundleVersion"] as? String ?? "?")
|
||||||
DiagRow("Signed in", vm.isSignedIn ? "Yes" : "No")
|
DiagRow("Signed in", vm.isSignedIn ? "Yes" : "No")
|
||||||
DiagRow("Email", vm.userEmail.isEmpty ? "(none)" : vm.userEmail)
|
|
||||||
DiagRow("Org ID", UserDefaults.standard.string(forKey: "claude_org_id") ?? "(none)")
|
DiagRow("Org ID", UserDefaults.standard.string(forKey: "claude_org_id") ?? "(none)")
|
||||||
DiagRow("lastActiveOrg", vm.diagLastActiveOrg.isEmpty ? "(not read)" : vm.diagLastActiveOrg)
|
DiagRow("lastActiveOrg", vm.diagLastActiveOrg.isEmpty ? "(not read)" : vm.diagLastActiveOrg)
|
||||||
DiagRow("Error", vm.errorMessage ?? "(none)")
|
DiagRow("Error", vm.errorMessage ?? "(none)")
|
||||||
@@ -149,8 +148,6 @@ struct DiagnosticsView: View {
|
|||||||
lines.append("Version: \(Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "?") (\(Bundle.main.infoDictionary?["CFBundleVersion"] as? String ?? "?"))")
|
lines.append("Version: \(Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "?") (\(Bundle.main.infoDictionary?["CFBundleVersion"] as? String ?? "?"))")
|
||||||
lines.append("Signed in: \(vm.isSignedIn ? "Yes" : "No")")
|
lines.append("Signed in: \(vm.isSignedIn ? "Yes" : "No")")
|
||||||
lines.append("Email: \(vm.userEmail.isEmpty ? "(none)" : vm.userEmail)")
|
lines.append("Email: \(vm.userEmail.isEmpty ? "(none)" : vm.userEmail)")
|
||||||
lines.append("Org ID: \(UserDefaults.standard.string(forKey: "claude_org_id") ?? "(none)")")
|
|
||||||
lines.append("lastActiveOrg: \(vm.diagLastActiveOrg.isEmpty ? "(not read)" : vm.diagLastActiveOrg)")
|
|
||||||
lines.append("Error: \(vm.errorMessage ?? "(none)")")
|
lines.append("Error: \(vm.errorMessage ?? "(none)")")
|
||||||
lines.append("")
|
lines.append("")
|
||||||
lines.append("Last path: \(vm.diagLastPath)")
|
lines.append("Last path: \(vm.diagLastPath)")
|
||||||
@@ -165,7 +162,14 @@ struct DiagnosticsView: View {
|
|||||||
for c in liveAllCookies {
|
for c in liveAllCookies {
|
||||||
lines.append(" \(c.domain) \(c.name) httpOnly=\(c.isHTTPOnly) secure=\(c.isSecure)")
|
lines.append(" \(c.domain) \(c.name) httpOnly=\(c.isHTTPOnly) secure=\(c.isSecure)")
|
||||||
}
|
}
|
||||||
return lines.joined(separator: "\n")
|
return redactUUIDs(lines.joined(separator: "\n"))
|
||||||
|
}
|
||||||
|
|
||||||
|
private func redactUUIDs(_ text: String) -> String {
|
||||||
|
let pattern = "[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}"
|
||||||
|
guard let regex = try? NSRegularExpression(pattern: pattern) else { return text }
|
||||||
|
let range = NSRange(text.startIndex..., in: text)
|
||||||
|
return regex.stringByReplacingMatches(in: text, range: range, withTemplate: "****")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,9 +15,9 @@
|
|||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>APPL</string>
|
<string>APPL</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>1.3.2</string>
|
<string>1.3.3-beta.1</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>76</string>
|
<string>77</string>
|
||||||
<key>LSMinimumSystemVersion</key>
|
<key>LSMinimumSystemVersion</key>
|
||||||
<string>13.0</string>
|
<string>13.0</string>
|
||||||
<key>LSUIElement</key>
|
<key>LSUIElement</key>
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
[](https://www.apple.com/macos/)
|
[](https://www.apple.com/macos/)
|
||||||
[](https://swift.org)
|
[](https://swift.org)
|
||||||
[](https://github.com/superdooper86/claudechecker/releases)
|
[](https://github.com/superdooper86/claudechecker/releases)
|
||||||
[](LICENSE)
|
[](LICENSE)
|
||||||
<!-- BETA_BADGE -->
|
<!-- BETA_BADGE -->
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"version": "0.0.1-beta.49",
|
"version": "0.0.1-beta.51",
|
||||||
"url": "https://github.com/superdooper86/claudechecker/releases/download/win-v0.0.1-beta.49/ClaudeChecker-Windows.zip",
|
"url": "https://github.com/superdooper86/claudechecker/releases/download/win-v0.0.1-beta.51/ClaudeChecker-Windows.zip",
|
||||||
"notes": "## What's new in beta.36\r\n\r\n### Bug fixes\r\n- Settings no longer incorrectly shows \"Not signed in\" when limits are working\r\n- Session Diary now shows correctly after the first successful refresh\r\n- Extra Usage Credits section now restored from cache on startup\r\n- Plan name, overage, and prepaid credits are now cached and shown immediately on launch\r\n- App now loads cached state instantly on startup before the background refresh completes"
|
"notes": "## What's new in beta.49\r\n\r\n### Architecture\r\n- All data (usage, plan, overage, prepaid credits) now fetched via the persistent background WebView2 — the same always-live session as the macOS app, so Cloudflare cookies never expire between refreshes\r\n- HttpClient path kept only as a brief startup fallback before the browser is ready\r\n- Settings file simplified: only stores session signal, burn history, and user preferences — no more cached API responses\r\n\r\n### Bug fixes\r\n- Plan label (e.g. \"Pro\") now updates on every refresh, not just at login\r\n- Extra Usage Credits values now correct (were 100× too large)\r\n- Limit and balance now update live on every refresh\r\n- Refresh interval dropdown now shows \"1 min\", \"2 min\" etc. correctly\r\n- ComboBox no longer flashes bright blue when clicked\r\n- Buttons now show a visible pressed state\r\n- Footer \"Updated X ago\" counter now ticks every second; shows \"X min, Y sec ago\" past 60 s\r\n- Removed stray sparkline bars from the 5 h and 7 d limit cards\r\n- App window now shown on launch\r\n\r\n### UI improvements\r\n- Gauge percentage larger, \"used\" label removed\r\n- Each limit card now shows an \"after reset\" or \"today HH:MM\" badge\r\n- Session Diary card redesigned to match macOS layout (stats row + sparkline, no Claude header)\r\n- Reset date moved inline with time remaining"
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"version": "1.3.1",
|
"version": "1.3.2",
|
||||||
"url": "https://github.com/superdooper86/claudechecker/releases/download/v1.3.1/ClaudeChecker.zip",
|
"url": "https://github.com/superdooper86/claudechecker/releases/download/v1.3.2/ClaudeChecker.zip",
|
||||||
"notes": "## What's new in v1.3.1\n\n### Privacy\n- Diagnostics panel no longer displays API response bodies, which could contain account and financial data. Status codes, error messages, cookie names, and request paths are still shown."
|
"notes": "## What's new in v1.3.2\n\n### Reliability\n- Data now loads automatically on every app launch without requiring manual re-authentication. The background WebView is anchored in a hidden window so macOS no longer throttles its JavaScript execution."
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user