Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
- uses: actions/checkout@v6
with:
repository: Nanako0129/TokenBar
ref: 1e00e7b769a1b0d20b2de077b0a3aab52a24c088
ref: 4dfed5ffab26e2707a8cd82ee99864520b75892b
path: tokenbar-mac
- uses: actions/checkout@v6
with:
Expand Down
3 changes: 3 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

201 changes: 201 additions & 0 deletions Fixtures/CrossCheck/provider-quota-pace-v3.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,201 @@
{
"schemaVersion": 3,
"payload": {
"generatedAt": "2026-07-10T12:00:00.000Z",
"agents": [
{
"clientId": "provider-fixture.invalid",
"source": "fixture.invalid",
"updatedAt": "2026-07-10T12:00:00.000Z",
"identity": null,
"windows": [
{
"cardId": "ahead.invalid",
"label": "Ahead quota",
"usedPercent": 72.0,
"remainingPercent": 28.0,
"resetsAt": "2026-07-10T15:00:00Z",
"windowMinutes": 300,
"paceStatus": {
"state": "available",
"windowKey": "quota.ahead.invalid",
"durationSeconds": 18000,
"durationSource": "provider",
"completeCycles": 5
},
"historicalPace": {
"expectedUsedPercent": 32.0,
"etaSeconds": 3600.0,
"willLastToReset": false,
"runOutProbability": 0.75
}
},
{
"cardId": "behind.invalid",
"label": "Behind quota",
"usedPercent": 28.0,
"remainingPercent": 72.0,
"resetsAt": "2026-07-15T12:00:00Z",
"windowMinutes": 10080,
"paceStatus": {
"state": "available",
"windowKey": "quota.behind.invalid",
"durationSeconds": 604800,
"durationSource": "contract",
"completeCycles": 7
},
"historicalPace": {
"expectedUsedPercent": 56.0,
"willLastToReset": true,
"runOutProbability": 0.2
}
},
{
"cardId": "learning-history.invalid",
"label": "Learning history",
"usedPercent": 40.0,
"remainingPercent": 60.0,
"resetsAt": "2026-07-10T15:00:00Z",
"windowMinutes": 300,
"paceStatus": {
"state": "learningHistory",
"windowKey": "quota.learning-history.invalid",
"durationSeconds": 18000,
"durationSource": "provider",
"completeCycles": 2
}
},
{
"cardId": "learning-duration.invalid",
"label": "Learning duration",
"usedPercent": 40.0,
"remainingPercent": 60.0,
"resetsAt": "2026-07-10T15:00:00Z",
"paceStatus": {
"state": "learningDuration",
"windowKey": "quota.learning-duration.invalid",
"durationSource": "observed",
"completeCycles": 0
}
},
{
"cardId": "missing-reset.invalid",
"label": "Missing reset",
"usedPercent": 50.0,
"remainingPercent": 50.0,
"paceStatus": {
"state": "unavailable",
"windowKey": "quota.missing-reset.invalid",
"completeCycles": 0,
"reason": "missingReset"
}
},
{
"cardId": "shared-first.invalid",
"label": "Shared label",
"usedPercent": 10.0,
"remainingPercent": 90.0,
"resetsAt": "2026-07-10T15:00:00Z",
"windowMinutes": 300,
"paceStatus": {
"state": "learningHistory",
"windowKey": "quota.shared-first.invalid",
"durationSeconds": 18000,
"durationSource": "provider",
"completeCycles": 2
}
},
{
"cardId": "shared-second.invalid",
"label": "Shared label",
"usedPercent": 20.0,
"remainingPercent": 80.0,
"resetsAt": "2026-07-10T15:00:00Z",
"windowMinutes": 300,
"paceStatus": {
"state": "learningHistory",
"windowKey": "quota.shared-second.invalid",
"durationSeconds": 18000,
"durationSource": "provider",
"completeCycles": 2
}
}
],
"credits": null,
"error": null
}
]
},
"cases": [
{
"name": "available-ahead-historical",
"kind": "pace",
"clientId": "provider-fixture.invalid",
"cardId": "ahead.invalid",
"mode": "historical",
"now": "2026-07-10T12:00:00Z"
},
{
"name": "available-behind-historical",
"kind": "pace",
"clientId": "provider-fixture.invalid",
"cardId": "behind.invalid",
"mode": "historical",
"now": "2026-07-10T12:00:00Z"
},
{
"name": "learning-history-historical-uses-linear",
"kind": "pace",
"clientId": "provider-fixture.invalid",
"cardId": "learning-history.invalid",
"mode": "historical",
"now": "2026-07-10T12:00:00Z"
},
{
"name": "selection-exact-card-id",
"kind": "selection",
"selection": "provider-fixture.invalid|shared-second.invalid"
},
{
"name": "selection-unique-legacy-label",
"kind": "selection",
"selection": "provider-fixture.invalid|Ahead quota"
},
{
"name": "selection-ambiguous-legacy-label-preserved",
"kind": "selection",
"selection": "provider-fixture.invalid|Shared label"
},
{
"name": "legacy-missing-pace-status",
"kind": "legacy",
"now": "2026-07-10T12:00:00Z",
"rawWindow": "{\"cardId\":\"legacy.invalid\",\"label\":\"Legacy\",\"usedPercent\":20,\"remainingPercent\":80,\"resetsAt\":\"2026-07-10T15:00:00Z\",\"windowMinutes\":300}"
},
{
"name": "malformed-pace-status-null",
"kind": "malformed",
"rawWindow": "{\"cardId\":\"malformed-null.invalid\",\"label\":\"Malformed null\",\"usedPercent\":20,\"remainingPercent\":80,\"resetsAt\":\"2026-07-10T15:00:00Z\",\"windowMinutes\":300,\"paceStatus\":null}"
},
{
"name": "malformed-unknown-state",
"kind": "malformed",
"rawWindow": "{\"cardId\":\"malformed-state.invalid\",\"label\":\"Malformed state\",\"usedPercent\":20,\"remainingPercent\":80,\"resetsAt\":\"2026-07-10T15:00:00Z\",\"windowMinutes\":300,\"paceStatus\":{\"state\":\"unknownState\",\"windowKey\":\"quota.malformed-state.invalid\",\"durationSeconds\":18000,\"durationSource\":\"provider\",\"completeCycles\":0}}"
},
{
"name": "malformed-available-without-historical",
"kind": "malformed",
"rawWindow": "{\"cardId\":\"malformed-available.invalid\",\"label\":\"Malformed available\",\"usedPercent\":20,\"remainingPercent\":80,\"resetsAt\":\"2026-07-10T15:00:00Z\",\"windowMinutes\":300,\"paceStatus\":{\"state\":\"available\",\"windowKey\":\"quota.malformed-available.invalid\",\"durationSeconds\":18000,\"durationSource\":\"provider\",\"completeCycles\":5}}"
},
{
"name": "malformed-duration-window-minutes-mismatch",
"kind": "malformed",
"rawWindow": "{\"cardId\":\"malformed-duration.invalid\",\"label\":\"Malformed duration\",\"usedPercent\":20,\"remainingPercent\":80,\"resetsAt\":\"2026-07-10T15:00:00Z\",\"windowMinutes\":301,\"paceStatus\":{\"state\":\"learningHistory\",\"windowKey\":\"quota.malformed-duration.invalid\",\"durationSeconds\":18000,\"durationSource\":\"provider\",\"completeCycles\":0}}"
},
{
"name": "malformed-percentages-not-complementary",
"kind": "malformed",
"rawWindow": "{\"cardId\":\"malformed-percent.invalid\",\"label\":\"Malformed percentages\",\"usedPercent\":80,\"remainingPercent\":80,\"resetsAt\":\"2026-07-10T15:00:00Z\",\"windowMinutes\":300}"
}
]
}
4 changes: 4 additions & 0 deletions crates/tb_core_ffi/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ serde_json = { version = "1.0", features = ["raw_value"] }
# Version specs mirror the Tauri app (TokenBar-tokcat/src-tauri/Cargo.toml) so
# the ported report/agent modules compile against the same dependency surface.
reqwest = { version = "0.13", default-features = false, features = ["json", "rustls"] }
# Public resolver and typed TLS error surfaces used by provider diagnostics.
hyper-util = { version = "0.1", default-features = false, features = ["client-legacy"] }
tower-service = "0.3"
rustls = { version = "0.23", default-features = false }
base64 = "0.22"
hmac = "0.12"
sha2 = "0.10"
Expand Down
Loading
Loading