diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..132825d --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,20 @@ +name: CI + +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 22 + - run: npm ci + - run: npm run check + - run: npm test + - run: npm pack --dry-run diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dd6e803 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +node_modules/ +dist/ +*.log +.DS_Store diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..76f826a --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Iury Souza + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..60d7e9d --- /dev/null +++ b/README.md @@ -0,0 +1,43 @@ +# pi-codex-kimi-usage + +A Pi extension that shows OpenAI Codex and Kimi Coding subscription quota in one compact footer status, with a `/quotas` command for the detailed view. + +## Footer + +```text +CX 5h 24% · 7d 61% | KM 5h 18% · 7d 43% +``` + +Colors: green below 70%, yellow at 70–89%, red at 90%+. A trailing `~` means the data is stale, `—` means credentials are missing, and `!` means the last fetch failed. + +## Installation + +```sh +pi install git:github.com/iurysza/pi-codex-kimi-usage +``` + +## Prerequisites + +- `/login openai-codex` for Codex quota. +- `/login kimi-coding` (or `KIMI_API_KEY`) for Kimi quota. + +## Commands + +- `/quotas` — toggle the detailed quota widget above the editor. + +## Refresh behavior + +Quota refreshes on session start and again after each turn or model switch only when the cache is older than five minutes. Opening `/quotas` always forces a refresh. + +## Privacy and security + +- Only direct read-only quota endpoints are used. +- No browser cookies, dashboard scraping, model probes, or subprocesses. +- Tokens, JWTs, account IDs, and raw provider responses are never logged, displayed, or persisted outside Pi’s existing credential storage. + +## Troubleshooting + +- If a provider shows `—`, run `/login` for that provider. +- If a provider shows `!`, check your network and credentials. +- Full custom footers created with `ctx.ui.setFooter()` must render Pi extension statuses or they can hide this footer segment; `/quotas` still works. +- The Codex and Kimi endpoints are internal/provider surfaces and may change. diff --git a/implementation-notes.md b/implementation-notes.md new file mode 100644 index 0000000..96e1558 --- /dev/null +++ b/implementation-notes.md @@ -0,0 +1,50 @@ +# Implementation Notes: `pi-codex-kimi-usage` + +## Plan Snapshot + +Build one Pi extension that fetches Codex and Kimi Coding quota from their direct read-only endpoints and shows both providers in a single footer status slot plus a `/quotas` detail widget. + +## Decisions + +- Use `AuthStorage.create()` for credentials; no custom login flow. +- Codex account id comes from stored credential `accountId` or JWT claim `https://api.openai.com/auth.chatgpt_account_id`. +- Kimi 401 recovery uses the registered `kimi-coding` OAuth provider returned by `storage.getOAuthProviders()`, matching `pi-provider-kimi-code` behavior. +- Runtime dependencies: Node built-ins only. Dev dependencies include TypeScript and the matching `@earendil-works/pi-coding-agent` / `pi-tui` packages for type checking. +- Tests use Node’s built-in test runner and `globalThis.fetch` mocking. + +## Deviations + +- Added a TUI-mode guard to `/quotas` so it warns instead of no-oping in print/RPC modes. +- Exported `createCoordinator` and `createPiCodexKimiUsage` so unit tests can inject a fake `AuthStorage` and avoid real network. +- Used `.js` extensions on local relative imports because TypeScript with `module: NodeNext` requires it for ESM emit. + +## Parent Review Fixes + +- Fixed the coordinator to retain last-good data when clients return explicit `error` or `missing` states; the original implementation only handled thrown failures and replaced good cache entries. +- Prevented unexpected thrown errors from reaching the widget/footer by replacing them with a fixed sanitized message. +- Classified environment/fallback Kimi credentials as API keys instead of OAuth when no stored OAuth credential exists. +- Required a real Kimi refresh token, contained provider refresh exceptions, and validated refreshed credentials before persistence. +- Contained second-attempt Codex/Kimi fetch failures so client functions always return sanitized provider states. +- Added tests for returned-error stale fallback, sanitized refresh failure, and the real `/quotas` widget toggle. + +## New Unknowns + +- Exact live Codex `wham/usage` JSON shape; plan describes `rate_limit.primary_window`, `rate_limit.secondary_window`, `used_percent`, `reset_at`, `plan_type`. If live differs, only sanitized structural fixtures will be saved. + +## Validation + +```sh +npm run check # tsc --noEmit, exit 0 +npm test # 30 tests, 0 failures, exit 0 +npm pack --dry-run # 9 files, 8.8 kB tarball, exit 0 +``` + +## Smoke Test + +- `pi -e ./src/index.ts --version` loads without errors (exit 0). +- `pi -e ./src/index.ts --list-models` loads and lists models without errors. +- `pi -e ./src/index.ts -p --no-session --provider openai --api-key fake-key "hello"` triggers `session_start`, the extension attempts quota fetches, and exits with only a sanitized credential-related message (`Failed to extract accountId from token`) and no leaked tokens/JWTs/account IDs/raw response bodies. +- Real TUI with the normal Pi environment fetched and rendered live Codex and Kimi quota in `/quotas`; no credentials or raw responses were exposed. +- Isolated default Pi TUI showed `CX — | KM —` in the footer and `/quotas` toggled a clean missing-credentials widget without duplicate messages. +- The normal local environment’s custom footer suppresses Pi’s built-in footer and does not render extension statuses, so it hides all `setStatus()` segments, including this extension. `/quotas` still works. That custom footer needs a separate compatibility fix before the quota segment appears in the user’s normal footer. +- Existing `/usage` coexistence is covered by registration tests (`quotas` registered, `usage` untouched); interactive `/usage` was not modified. diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..7b1675c --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2070 @@ +{ + "name": "pi-codex-kimi-usage", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "pi-codex-kimi-usage", + "version": "0.1.0", + "license": "MIT", + "devDependencies": { + "@earendil-works/pi-coding-agent": "^0.80.6", + "@earendil-works/pi-tui": "^0.80.6", + "@types/node": "^24.12.4", + "typescript": "^5.9.3" + }, + "engines": { + "node": ">=22.19.0" + }, + "peerDependencies": { + "@earendil-works/pi-coding-agent": "*", + "@earendil-works/pi-tui": "*" + } + }, + "node_modules/@earendil-works/pi-coding-agent": { + "version": "0.80.6", + "resolved": "https://registry.npmjs.org/@earendil-works/pi-coding-agent/-/pi-coding-agent-0.80.6.tgz", + "integrity": "sha512-vcfD6tOk402isLl3Cm/qbn2O10TvgroMp1+/fEGM24ZdvETFCdOYv5VZ7m59EI5fPsjfSJh+CpQ5bhBrhfOg7g==", + "dev": true, + "hasShrinkwrap": true, + "license": "MIT", + "dependencies": { + "@earendil-works/pi-agent-core": "^0.80.6", + "@earendil-works/pi-ai": "^0.80.6", + "@earendil-works/pi-tui": "^0.80.6", + "@silvia-odwyer/photon-node": "0.3.4", + "chalk": "5.6.2", + "cross-spawn": "7.0.6", + "diff": "8.0.4", + "glob": "13.0.6", + "highlight.js": "10.7.3", + "hosted-git-info": "9.0.3", + "ignore": "7.0.5", + "jiti": "2.7.0", + "minimatch": "10.2.5", + "proper-lockfile": "4.1.2", + "semver": "7.8.0", + "typebox": "1.1.38", + "undici": "8.5.0", + "yaml": "2.9.0" + }, + "bin": { + "pi": "dist/cli.js" + }, + "engines": { + "node": ">=22.19.0" + }, + "optionalDependencies": { + "@mariozechner/clipboard": "0.3.9" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@anthropic-ai/sdk": { + "version": "0.91.1", + "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.91.1.tgz", + "integrity": "sha512-LAmu761tSN9r66ixvmciswUj/ZC+1Q4iAfpedTfSVLeswRwnY3n2Nb6Tsk+cLPP28aLOPWeMgIuTuCcMC6W/iw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-schema-to-ts": "^3.1.1" + }, + "bin": { + "anthropic-ai-sdk": "bin/cli" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-crypto/crc32": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", + "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-crypto/sha256-js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-crypto/util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/client-bedrock-runtime": { + "version": "3.1048.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-bedrock-runtime/-/client-bedrock-runtime-3.1048.0.tgz", + "integrity": "sha512-u+NT61JZEkRFtpL0CAw1N1dwxnaLgwVXQl/zjJxTGgLyS/jTIdg2SdoEoCTHxgDyCnqa1HEi9QOoE9/pYRNpOQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.974.11", + "@aws-sdk/credential-provider-node": "^3.972.42", + "@aws-sdk/eventstream-handler-node": "^3.972.16", + "@aws-sdk/middleware-eventstream": "^3.972.12", + "@aws-sdk/middleware-websocket": "^3.972.19", + "@aws-sdk/token-providers": "3.1048.0", + "@aws-sdk/types": "^3.973.8", + "@smithy/core": "^3.24.2", + "@smithy/fetch-http-handler": "^5.4.2", + "@smithy/node-http-handler": "^4.7.2", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/core": { + "version": "3.974.11", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.974.11.tgz", + "integrity": "sha512-QpnINq5FZH6EOaDEkmHdT7eUunbvD27pDNQypaWjFyYz7Zl1q3UCMQErBZxpmfGfI7MvI2TlK8KTkgNpv8b1ug==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.8", + "@aws-sdk/xml-builder": "^3.972.24", + "@aws/lambda-invoke-store": "^0.2.2", + "@smithy/core": "^3.24.2", + "@smithy/signature-v4": "^5.4.2", + "@smithy/types": "^4.14.1", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.972.37", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.37.tgz", + "integrity": "sha512-/jpPvEh6f7ntmIzf7dNxoNX6Q8vt8UpesCjbW6mFfk4V1NW6bIy9qxcQ6WbA8As5yQhsZOe+xeNd4xHX8kdY2Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.974.11", + "@aws-sdk/types": "^3.973.8", + "@smithy/core": "^3.24.2", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.972.39", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.39.tgz", + "integrity": "sha512-pIgTpisWyWg7X1bUbzSjuUYosYTD0Ghz2M0hkSTmb3a6i3qV3uU+NYJPI/E2XSC0HcsZh5rsLPzeXrkb2DS0Cg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.974.11", + "@aws-sdk/types": "^3.973.8", + "@smithy/core": "^3.24.2", + "@smithy/fetch-http-handler": "^5.4.2", + "@smithy/node-http-handler": "^4.7.2", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.972.41", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.41.tgz", + "integrity": "sha512-u2tyjaxJJzW8UtW4SM1ZcPMDwO6y+kV+llvou+Adts0FAKyzes5jG4izQN+KX3yE8ZROpS5y1LJ//xL2iSf76w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.974.11", + "@aws-sdk/credential-provider-env": "^3.972.37", + "@aws-sdk/credential-provider-http": "^3.972.39", + "@aws-sdk/credential-provider-login": "^3.972.41", + "@aws-sdk/credential-provider-process": "^3.972.37", + "@aws-sdk/credential-provider-sso": "^3.972.41", + "@aws-sdk/credential-provider-web-identity": "^3.972.41", + "@aws-sdk/nested-clients": "^3.997.9", + "@aws-sdk/types": "^3.973.8", + "@smithy/core": "^3.24.2", + "@smithy/credential-provider-imds": "^4.3.2", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/credential-provider-login": { + "version": "3.972.41", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.41.tgz", + "integrity": "sha512-0LBitxXiAiaE5nlFPfpNIww/8FRY/I7WIndWsc9GmNFOM7cE1wNpVNQEGEk9Outg5l8xl+3vybxFyUy4l9q/LQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.974.11", + "@aws-sdk/nested-clients": "^3.997.9", + "@aws-sdk/types": "^3.973.8", + "@smithy/core": "^3.24.2", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.972.42", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.42.tgz", + "integrity": "sha512-D4oon2zbqqsWOJUM99Gm3/ZyJ0IJvTXVN3PyloGb3kQEyI36fjCZheZj422lAgTWWd6TSHgiImLt3RIaLdv3dQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "^3.972.37", + "@aws-sdk/credential-provider-http": "^3.972.39", + "@aws-sdk/credential-provider-ini": "^3.972.41", + "@aws-sdk/credential-provider-process": "^3.972.37", + "@aws-sdk/credential-provider-sso": "^3.972.41", + "@aws-sdk/credential-provider-web-identity": "^3.972.41", + "@aws-sdk/types": "^3.973.8", + "@smithy/core": "^3.24.2", + "@smithy/credential-provider-imds": "^4.3.2", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.972.37", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.37.tgz", + "integrity": "sha512-7nVaHBUaWIddASYfVaA9O4D5ZVjewU3sCol9WqZPGfW0nR+0WqE0xHZnD/U2L33PlOB8KNXGKZ6wOES/QijKzg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.974.11", + "@aws-sdk/types": "^3.973.8", + "@smithy/core": "^3.24.2", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.972.41", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.41.tgz", + "integrity": "sha512-IOWAWEHe5LkjSKkkUUX9ciV6Y1scHTsnfEkdt5yyC4Slrc7AGbkLPrpntjqh18ksJAMOaVhoBsO8p2WyTcY2wQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.974.11", + "@aws-sdk/nested-clients": "^3.997.9", + "@aws-sdk/token-providers": "3.1048.0", + "@aws-sdk/types": "^3.973.8", + "@smithy/core": "^3.24.2", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.972.41", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.41.tgz", + "integrity": "sha512-mbACk9Yypa8nm4iGZLs0PofOXEcTDOUw6wDnsPXNDNSd2WNXs1tSo+6nc/fh0jLYdfVZThhBL98PHW4aXFsG5A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.974.11", + "@aws-sdk/nested-clients": "^3.997.9", + "@aws-sdk/types": "^3.973.8", + "@smithy/core": "^3.24.2", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/eventstream-handler-node": { + "version": "3.972.16", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-handler-node/-/eventstream-handler-node-3.972.16.tgz", + "integrity": "sha512-yedpPgKftqjU5SlPFHfqWpOw6xSCRieWRG1euWOlXn4WJxt2VX92VprCa2PpSOXjVCAeK6dTjW9eJRXVig9yGA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.8", + "@smithy/core": "^3.24.2", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/middleware-eventstream": { + "version": "3.972.12", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-eventstream/-/middleware-eventstream-3.972.12.tgz", + "integrity": "sha512-tHTHHCHNrq6XklQvlzHBDJG4Iuhh7NVPRdtmvP+nHFA+5sxPlIDzlAHHgfoYHGvT3NXP1yVP/L5c3opUn6T3Qg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.8", + "@smithy/core": "^3.24.2", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/middleware-websocket": { + "version": "3.972.19", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-websocket/-/middleware-websocket-3.972.19.tgz", + "integrity": "sha512-mkEhOGYozqKQkbFaVrjwr0faiwwZza1v5/jSY6Tucm3bD+uKTazIUH/4Yo6aMnQD2ua2W9cMP6s8mvwTcjtqHw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.974.11", + "@aws-sdk/types": "^3.973.8", + "@smithy/core": "^3.24.2", + "@smithy/fetch-http-handler": "^5.4.2", + "@smithy/signature-v4": "^5.4.2", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/nested-clients": { + "version": "3.997.9", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.9.tgz", + "integrity": "sha512-jPR3rnmRI4hWYyzfmTGBr7NblMp8QYYeflHXba1H6+7CGrWVqWKQzaXFQ4qbExqPRsXN3T3L3JxFhr6aouXUGQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.974.11", + "@aws-sdk/signature-v4-multi-region": "^3.996.27", + "@aws-sdk/types": "^3.973.8", + "@smithy/core": "^3.24.2", + "@smithy/fetch-http-handler": "^5.4.2", + "@smithy/node-http-handler": "^4.7.2", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.996.27", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.27.tgz", + "integrity": "sha512-0Phbz4t6HI3D3skxvG2uI+VWU034/nSIw1T8d+FPzzQG9EQTrw94o9mOKO2Gv3n3Oc8P7JD7RAUxkoneLWv5Eg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.8", + "@smithy/core": "^3.24.2", + "@smithy/signature-v4": "^5.4.2", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/token-providers": { + "version": "3.1048.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1048.0.tgz", + "integrity": "sha512-k0y/GcuesuSfWyUM0WamrGyeZmltRYaPbHO82UDA6mZ/doB+FOHKutikPAtSXMn/hDz970cF+iRuuiYO9VEbAA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.974.11", + "@aws-sdk/nested-clients": "^3.997.9", + "@aws-sdk/types": "^3.973.8", + "@smithy/core": "^3.24.2", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/types": { + "version": "3.973.8", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.8.tgz", + "integrity": "sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/util-locate-window": { + "version": "3.965.5", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.965.5.tgz", + "integrity": "sha512-WhlJNNINQB+9qtLtZJcpQdgZw3SCDCpXdUJP7cToGwHbCWCnRckGlc6Bx/OhWwIYFNAn+FIydY8SZ0QmVu3xTQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws-sdk/xml-builder": { + "version": "3.972.24", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.24.tgz", + "integrity": "sha512-V8z5YcDPfsvzrBlj0xR1vhRtocblhYbqdreCJB/voGd4Sr5zjNAeWxexbnqVtskTJe0vFb5KMqbSL++ePl+zRw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@nodable/entities": "2.1.0", + "@smithy/types": "^4.14.1", + "fast-xml-parser": "5.7.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@aws/lambda-invoke-store": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.4.tgz", + "integrity": "sha512-iY8yvjE0y651BixKNPgmv1WrQc+GZ142sb0z4gYnChDDY2YqI4P/jsSopBWrKfAt7LOJAkOXt7rC/hms+WclQQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@babel/runtime": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", + "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@earendil-works/pi-agent-core": { + "version": "0.80.6", + "resolved": "https://registry.npmjs.org/@earendil-works/pi-agent-core/-/pi-agent-core-0.80.6.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "@earendil-works/pi-ai": "^0.80.6", + "ignore": "7.0.5", + "typebox": "1.1.38", + "yaml": "2.9.0" + }, + "engines": { + "node": ">=22.19.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@earendil-works/pi-ai": { + "version": "0.80.6", + "resolved": "https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.80.6.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "@anthropic-ai/sdk": "0.91.1", + "@aws-sdk/client-bedrock-runtime": "3.1048.0", + "@google/genai": "1.52.0", + "@mistralai/mistralai": "2.2.6", + "@opentelemetry/api": "1.9.0", + "@smithy/node-http-handler": "4.7.3", + "http-proxy-agent": "7.0.2", + "https-proxy-agent": "7.0.6", + "openai": "6.26.0", + "partial-json": "0.1.7", + "typebox": "1.1.38" + }, + "bin": { + "pi-ai": "dist/cli.js" + }, + "engines": { + "node": ">=22.19.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@earendil-works/pi-tui": { + "version": "0.80.6", + "resolved": "https://registry.npmjs.org/@earendil-works/pi-tui/-/pi-tui-0.80.6.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "1.6.0", + "marked": "18.0.5" + }, + "engines": { + "node": ">=22.19.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@google/genai": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/@google/genai/-/genai-1.52.0.tgz", + "integrity": "sha512-gwSvbpiN/17O9TbsqSsE/OzZcpv5Fo4RQjdngGgogtuB9RsyJ8ZHhX5KjHj1bp5N9snN2eK8LDGXSaWW2hof8Q==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "google-auth-library": "^10.3.0", + "p-retry": "^4.6.2", + "protobufjs": "^7.5.4", + "ws": "^8.18.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@modelcontextprotocol/sdk": "^1.25.2" + }, + "peerDependenciesMeta": { + "@modelcontextprotocol/sdk": { + "optional": true + } + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@mariozechner/clipboard": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard/-/clipboard-0.3.9.tgz", + "integrity": "sha512-ABnA53mdfkGZwOFUdZNv2S0CWGO/EIuPj8Vv9xmBFmSYg/qFc7ihO6q5FcQjvoE67kZpWkEc4AhD6B/os04yuA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@mariozechner/clipboard-darwin-arm64": "0.3.9", + "@mariozechner/clipboard-darwin-universal": "0.3.9", + "@mariozechner/clipboard-darwin-x64": "0.3.9", + "@mariozechner/clipboard-linux-arm64-gnu": "0.3.9", + "@mariozechner/clipboard-linux-arm64-musl": "0.3.9", + "@mariozechner/clipboard-linux-riscv64-gnu": "0.3.9", + "@mariozechner/clipboard-linux-x64-gnu": "0.3.9", + "@mariozechner/clipboard-linux-x64-musl": "0.3.9", + "@mariozechner/clipboard-win32-arm64-msvc": "0.3.9", + "@mariozechner/clipboard-win32-x64-msvc": "0.3.9" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@mariozechner/clipboard-darwin-arm64": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-darwin-arm64/-/clipboard-darwin-arm64-0.3.9.tgz", + "integrity": "sha512-BfgV7vCEWZwJwZJw03r6bP5+tf0iI/ANuQYCxi9RNn7FrWB3yzGuMKCrNLRl6V761vXRdL8+OqZ0wd4TqlsNOQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@mariozechner/clipboard-darwin-universal": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-darwin-universal/-/clipboard-darwin-universal-0.3.9.tgz", + "integrity": "sha512-BGGR4iA9Z2shAjI65eI5xtyb3LYNlDW9X3gxKxDbqtbnREohsrqznov6zpKoIrsRWpzlYVEdKphS7ksJ0/ndSQ==", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@mariozechner/clipboard-darwin-x64": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-darwin-x64/-/clipboard-darwin-x64-0.3.9.tgz", + "integrity": "sha512-4kURmCbS6nt8uYhtmWpUcJWyPHfmAr5dTpXD1nO3pIfa+TSQ9DbrGOYCKH+aEFW47XhQ4Vp8ZTszie+wfFvDKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@mariozechner/clipboard-linux-arm64-gnu": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-linux-arm64-gnu/-/clipboard-linux-arm64-gnu-0.3.9.tgz", + "integrity": "sha512-g59OkUGP2DDfCOIKypHeYgv2M55u/cKvXa5dSxFbEJ34XvIQMdcVmpKCkGUro3ZgefXiGVdwguvTMQGpHWzIXw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@mariozechner/clipboard-linux-arm64-musl": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-linux-arm64-musl/-/clipboard-linux-arm64-musl-0.3.9.tgz", + "integrity": "sha512-AGuJdgKsmJdm4Pych7kv3sqe591ERRaAHW3xjLooiFzn8J+PxUyof++7YZrB5Y5tpnTO+K18Og3taj2NpluCRQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@mariozechner/clipboard-linux-riscv64-gnu": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-linux-riscv64-gnu/-/clipboard-linux-riscv64-gnu-0.3.9.tgz", + "integrity": "sha512-DXBEAiuMpk7dhS1a9NzNxVAFi1vaKoPu7rQNgY8LIDLGrK3lnIp3nT10DUum+PKVJoJppIP+NAA8IZe4DMNDPw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@mariozechner/clipboard-linux-x64-gnu": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-linux-x64-gnu/-/clipboard-linux-x64-gnu-0.3.9.tgz", + "integrity": "sha512-WORrMLd6EpElEME7JRKfSaY34nW1P5LbdgK5YNCS1ncG2LqmITsSMEJ8nh2mpvxb3TxqbOOKgY7k9eMJYlW9Mw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@mariozechner/clipboard-linux-x64-musl": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-linux-x64-musl/-/clipboard-linux-x64-musl-0.3.9.tgz", + "integrity": "sha512-/DHn+1DrfL6oRaPPWXaOKvonFFrni666fxd+zFqiQEfvBH0tsHVWjq9iqBk0oDp0qaPA72lIMy5BptxISBEhZQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@mariozechner/clipboard-win32-arm64-msvc": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-win32-arm64-msvc/-/clipboard-win32-arm64-msvc-0.3.9.tgz", + "integrity": "sha512-O5FHD3ErkMwMhNzAfu3ggy0ug4z7btZuoQgwwxlzPrwV2bxlD6WDpqBY4NCgICAgZdDKdp+loUEKVAVt8aYnhQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@mariozechner/clipboard-win32-x64-msvc": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-win32-x64-msvc/-/clipboard-win32-x64-msvc-0.3.9.tgz", + "integrity": "sha512-ihQC3EufqEY81vhXBgVBtK4prL+wc62zJsSvxrgz7K1hsdt6OObz6v9p3Rn1OG3GJksTTKMJF0u/guMISHPhSA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@mistralai/mistralai": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@mistralai/mistralai/-/mistralai-2.2.6.tgz", + "integrity": "sha512-W8pX7zHxjJvMIpw8JMxeJEleapXX0Q9NPszdNzqkM3MIEoIGPObdodujj+WHteXEvGfaP/AMwlNyRfEzSY6dQQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "^1.40.0", + "ws": "^8.18.0", + "zod": "^3.25.0 || ^4.0.0", + "zod-to-json-schema": "^3.25.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.9.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + } + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@nodable/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@nodable/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/nodable" + } + ], + "license": "MIT" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@opentelemetry/api": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.41.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.41.1.tgz", + "integrity": "sha512-/UhIkaZgPutTFmQ7RnIJGgDXZmtEJ7Dvi86xNTFWcnRxVRNk/aotsqDJYeEvDP+FSMB2SdW+pQzNMcWP0rwuNA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@protobufjs/codegen": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.5.tgz", + "integrity": "sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@protobufjs/eventemitter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.1.tgz", + "integrity": "sha512-vW1GmwMZNnL+gMRaovlh9yZX74kc+TTU3FObkkurpMaRtBfLP3ldjS9KQWlwZgraRE0+dheEEoAxdzcJQ8eXZg==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@protobufjs/fetch": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.1.tgz", + "integrity": "sha512-GpptLrs57adMSuHi3VNj0mAF8dwh36LMaYF6XyJ6JMWlVsc+t42tm1HSEDmOs3A8fC9yyeisgLhsTVQokOZ0zw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@protobufjs/utf8": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.1.tgz", + "integrity": "sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@silvia-odwyer/photon-node": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@silvia-odwyer/photon-node/-/photon-node-0.3.4.tgz", + "integrity": "sha512-bnly4BKB3KDTFxrUIcgCLbaeVVS8lrAkri1pEzskpmxu9MdfGQTy8b8EgcD83ywD3RPMsIulY8xJH5Awa+t9fA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@smithy/core": { + "version": "3.24.3", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.24.3.tgz", + "integrity": "sha512-Ep/7tPamGY8mgESE3LyLKtxJyy6U52WWAqr/3wial47Sj4u3PiIF73AOGI27UyLy9duTkhZbgzodOfLV4TduZg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^4.14.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@smithy/credential-provider-imds": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.3.3.tgz", + "integrity": "sha512-I2Bti0DKFo2IJyN28ijCsx51BAumEYR4/1yZ1FXyBygy9MqbnMqCev4JPth/MbpRfBSRAX35hITSnAdJRo1u5w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.24.3", + "@smithy/types": "^4.14.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@smithy/fetch-http-handler": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.4.3.tgz", + "integrity": "sha512-F+DRf8IJazRJgYog2A/yJK7eYVc0rqTlRzO+5ZxjJd4WkZoKz0IJRncf7G6t1pdVT3kryJcwuTFhN1c5m6N47A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.24.3", + "@smithy/types": "^4.14.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@smithy/node-http-handler": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.7.3.tgz", + "integrity": "sha512-/jPhevcTFPMVl6KNjbaI47iOg1zxC7IsnX4PQDGVZKMFceOXtB8IEYaB7a9VvkP/3oC60WzTeKocvSI7vLT0vA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.24.3", + "@smithy/types": "^4.14.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@smithy/signature-v4": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.4.3.tgz", + "integrity": "sha512-53+75QuPl6DL+ct6vVEB51FDO5oulXr20TPV46VvJZg76lIlXNWfxi8j+G2V/t0I2qxCBOa3vX/8bmjrpFVo9g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.24.3", + "@smithy/types": "^4.14.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@smithy/types": { + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.14.2.tgz", + "integrity": "sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/@types/node": { + "version": "22.19.19", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.19.tgz", + "integrity": "sha512-dyh/xO2Fh5bYrfWaaqGrRQQGkNdmYw6AmaAUvYeUMNTWQtvb796ikLdmTchRmOlOiIJ1TDXfWgVx1QkUlQ6Hew==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/bignumber.js": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/bowser": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.14.1.tgz", + "integrity": "sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/brace-expansion": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/diff": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.4.tgz", + "integrity": "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/fast-xml-builder": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.2.0.tgz", + "integrity": "sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "path-expression-matcher": "^1.5.0", + "xml-naming": "^0.1.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/fast-xml-parser": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.7.3.tgz", + "integrity": "sha512-C0AaNuC+mscy6vrAQKAc/rMq+zAPHodfHGZu4sGVehvAQt/JLG1O5zEcYcXSY5zSqr4YVgxsB+pHXTq0i7eDlg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "@nodable/entities": "^2.1.0", + "fast-xml-builder": "^1.1.7", + "path-expression-matcher": "^1.5.0", + "strnum": "^2.2.3" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/gaxios": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.1.4.tgz", + "integrity": "sha512-bTIgTsM2bWn3XklZISBTQX7ZSddGW+IO3bMdGaemHZ3tbqExMENHLx6kKZ/KlejgrMtj8q7wBItt51yegqalrA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "node-fetch": "^3.3.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/gcp-metadata": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-8.1.2.tgz", + "integrity": "sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "gaxios": "^7.0.0", + "google-logging-utils": "^1.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/get-east-asian-width": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", + "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/glob": { + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/google-auth-library": { + "version": "10.6.2", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.6.2.tgz", + "integrity": "sha512-e27Z6EThmVNNvtYASwQxose/G57rkRuaRbQyxM2bvYLLX/GqWZ5chWq2EBoUchJbCc57eC9ArzO5wMsEmWftCw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^7.1.4", + "gcp-metadata": "8.1.2", + "google-logging-utils": "1.1.3", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/google-logging-utils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-1.1.3.tgz", + "integrity": "sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/hosted-git-info": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.3.tgz", + "integrity": "sha512-Hc+ghLoSt6QaYZUv0WBiIvmMDZuZZ7oaDvdH8MbfOO4lOsxdXLEvuC6ePoGs9H1X9oCLyq6+NVN0MKqD+ydxyg==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^11.1.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/jiti": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/json-schema-to-ts": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/json-schema-to-ts/-/json-schema-to-ts-3.1.1.tgz", + "integrity": "sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "ts-algebra": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/jwa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/jws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jwa": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/lru-cache": { + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.4.0.tgz", + "integrity": "sha512-W+R+kFL4HgVxONq2bhXPi3bGpzGe/yEhVOp233qw9wCRtgncJ15P3bC+e4zZMu4Cq7d+WAJjXGW0uUkifhcatA==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/marked": { + "version": "18.0.5", + "resolved": "https://registry.npmjs.org/marked/-/marked-18.0.5.tgz", + "integrity": "sha512-S6GcvALHg6K4ohtu4E7x0a1AqhAjp6cV8KhLSyN9qVapnzJkusVBxZRcIU9AeYsbe6P1hKDusSbEOzGyyuce6w==", + "dev": true, + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/openai": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-6.26.0.tgz", + "integrity": "sha512-zd23dbWTjiJ6sSAX6s0HrCZi41JwTA1bQVs0wLQPZ2/5o2gxOJA5wh7yOAUgwYybfhDXyhwlpeQf7Mlgx8EOCA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "openai": "bin/cli" + }, + "peerDependencies": { + "ws": "^8.18.0", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "ws": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/p-retry/node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/partial-json": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/partial-json/-/partial-json-0.1.7.tgz", + "integrity": "sha512-Njv/59hHaokb/hRUjce3Hdv12wd60MtM9Z5Olmn+nehe0QDAsRtRbJPvJ0Z91TusF0SuZRIvnM+S4l6EIP8leA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/path-expression-matcher": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/path-expression-matcher/-/path-expression-matcher-1.5.0.tgz", + "integrity": "sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/proper-lockfile/node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/protobufjs": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.6.4.tgz", + "integrity": "sha512-RJJPTTpvFfHcWLkIa2JFWK4XvtSzS0yEWDmunqHXli1h3JlkbcQZXDZdcWxv+JK3Xsl5/UFDPZ0iGm7DAengYw==", + "dev": true, + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.5", + "@protobufjs/eventemitter": "^1.1.1", + "@protobufjs/fetch": "^1.1.1", + "@protobufjs/float": "^1.0.2", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.1", + "@types/node": ">=13.7.0", + "long": "^5.3.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/semver": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", + "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/strnum": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.3.0.tgz", + "integrity": "sha512-ums3KNd42PGyx5xaoVTO1mjU1bH3NpY4vsrVlnv9PNGqQj8wd7rJ6nEypLrJ7z5vxK5RP0yMLo6J/Gsm62DI5Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/ts-algebra": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ts-algebra/-/ts-algebra-2.0.0.tgz", + "integrity": "sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/typebox": { + "version": "1.1.38", + "resolved": "https://registry.npmjs.org/typebox/-/typebox-1.1.38.tgz", + "integrity": "sha512-pZ0aQPmMmXoUvSbeuWf/Hzsc+avNw/Zd6VeE8CFgkVGWyuHPJvqeJJDeJqLve+K70LvjYIoleGcoJHPT17cWoA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/undici": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-8.5.0.tgz", + "integrity": "sha512-xamtWoB1EshgjpmlXd7GGm2VfdDtw1+rD8uhry8pSNW3If6S8E0m2T2+orSKeZXEn/aPJMviCpDBA65WJt8zhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=22.19.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/ws": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", + "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/xml-naming": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/xml-naming/-/xml-naming-0.1.0.tgz", + "integrity": "sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/yaml": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", + "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@earendil-works/pi-coding-agent/node_modules/zod-to-json-schema": { + "version": "3.25.2", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz", + "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==", + "dev": true, + "license": "ISC", + "peerDependencies": { + "zod": "^3.25.28 || ^4" + } + }, + "node_modules/@earendil-works/pi-tui": { + "version": "0.80.6", + "resolved": "https://registry.npmjs.org/@earendil-works/pi-tui/-/pi-tui-0.80.6.tgz", + "integrity": "sha512-bSuzS4EVSqEPj/Qr/p9eqCESfKsGuDNbl77EGci8Iaqqt/C/XCBZL1MjXaxSWW1NsT5afjp/Cb0NTPzOLv/aPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "1.6.0", + "marked": "18.0.5" + }, + "engines": { + "node": ">=22.19.0" + } + }, + "node_modules/@types/node": { + "version": "24.13.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.3.tgz", + "integrity": "sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", + "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/marked": { + "version": "18.0.5", + "resolved": "https://registry.npmjs.org/marked/-/marked-18.0.5.tgz", + "integrity": "sha512-S6GcvALHg6K4ohtu4E7x0a1AqhAjp6cV8KhLSyN9qVapnzJkusVBxZRcIU9AeYsbe6P1hKDusSbEOzGyyuce6w==", + "dev": true, + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "dev": true, + "license": "MIT" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..359d2d3 --- /dev/null +++ b/package.json @@ -0,0 +1,52 @@ +{ + "name": "pi-codex-kimi-usage", + "version": "0.1.0", + "description": "Pi footer quota status for OpenAI Codex and Kimi Coding subscriptions", + "license": "MIT", + "author": "Iury Souza", + "keywords": [ + "pi-package", + "pi-extension", + "codex", + "kimi", + "quota", + "usage" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/iurysza/pi-codex-kimi-usage.git" + }, + "bugs": "https://github.com/iurysza/pi-codex-kimi-usage/issues", + "homepage": "https://github.com/iurysza/pi-codex-kimi-usage#readme", + "type": "module", + "main": "src/index.ts", + "pi": { + "extensions": [ + "src/index.ts" + ] + }, + "files": [ + "src", + "README.md", + "LICENSE" + ], + "scripts": { + "check": "tsc --noEmit", + "build": "tsc -p tsconfig.json", + "test": "npm run build && node --test dist/tests/*.test.js", + "prepack": "npm run build" + }, + "peerDependencies": { + "@earendil-works/pi-coding-agent": "*", + "@earendil-works/pi-tui": "*" + }, + "devDependencies": { + "@earendil-works/pi-coding-agent": "^0.80.6", + "@earendil-works/pi-tui": "^0.80.6", + "@types/node": "^24.12.4", + "typescript": "^5.9.3" + }, + "engines": { + "node": ">=22.19.0" + } +} diff --git a/plan.md b/plan.md new file mode 100644 index 0000000..79df3d1 --- /dev/null +++ b/plan.md @@ -0,0 +1,311 @@ +# Implementation Plan: `pi-codex-kimi-usage` + +## Goal + +Build a standalone public Pi extension that reliably shows OpenAI Codex and Kimi Coding subscription quota in one compact footer status and exposes `/quotas` for a detailed view. + +## Decisions + +- One extension, one footer slot: `pi-codex-kimi-usage`. +- Direct read-only quota endpoints only. + - Codex: `GET https://chatgpt.com/backend-api/wham/usage`. + - Kimi: `GET https://api.kimi.com/coding/v1/usages`. +- No Codex app-server fallback: it may use a different account than Pi OAuth. +- Reuse Pi `AuthStorage`; no login flow. +- Kimi 401 recovery: force one OAuth refresh using the registered `kimi-coding` OAuth provider, persist through `AuthStorage`, retry once. +- In-memory last-good cache only. +- Refresh on startup and only when cache is older than five minutes on `turn_end` or `model_select`; `/quotas` forces refresh when opening. +- No background timer. +- `/quotas` toggles a static detail widget above the editor. Opening refreshes; invoking again hides it. +- Keep `/usage` untouched. +- Display **used percentages** consistently. + +## V1 Scope + +### Footer + +Compact single line: + +```text +CX 5h 24% · 7d 61% | KM 5h 18% · 7d 43% +``` + +Rules: + +- Green below 70%, yellow at 70–89%, red at 90%+. +- `~` after provider code means last-good data is stale: `KM~`. +- `—` means credentials are absent: `KM —`. +- `!` means fetch failed and no last-good value exists: `KM !`. +- Do not attempt custom width detection. `setStatus` owns a compact footer segment; Pi handles footer layout. + +### `/quotas` widget + +Static, theme-aware text above the editor: + +```text +Quota usage + +Codex · Plus · live + 5h 24% used resets 2h 13m + Weekly 61% used resets 3d 8h + +Kimi · Allegro · live + 5h 18% used resets 4h 02m + Weekly 43% used resets 5d 11h + +Updated 10:42 +Run /quotas again to hide. +``` + +Show provider-specific errors below that provider. Never show token, JWT, account id, email, raw response, or response body. + +## Non-goals + +- Codex CLI/app-server fallback. +- Browser cookies, dashboard scraping, model probes, or API-key balance endpoints. +- Persistent cache or usage history. +- Code-review/Spark/additional Codex windows. +- Codex credits/spend control. +- Kimi Extra Usage/booster wallet. +- Per-provider settings, display modes, custom width breakpoints, or LLM tools. +- Full custom footer replacement or modal overlay. +- Multi-account support. + +## Data Model + +`src/types.ts`: + +```ts +export type ProviderName = "codex" | "kimi"; +export type QuotaState = "live" | "stale" | "missing" | "error"; + +export interface QuotaWindow { + kind: "five-hour" | "weekly"; + usedPercent: number; + used?: number; + limit?: number; + resetsAt?: number; // Unix milliseconds +} + +export interface ProviderQuota { + provider: ProviderName; + state: QuotaState; + fetchedAt?: number; + plan?: string; + windows: QuotaWindow[]; + error?: string; // sanitized, user-facing only +} + +export interface QuotaSnapshot { + codex: ProviderQuota; + kimi: ProviderQuota; +} +``` + +Parsers clamp percentages to `0..100` for rendering. They must reject payloads without the expected 5-hour and weekly data rather than silently reporting zero. + +## Auth + +### Codex + +1. `AuthStorage.create().getApiKey("openai-codex")` gets/refreshed access token. +2. `storage.get("openai-codex")` supplies `accountId` when present. +3. If absent, decode only the JWT middle segment in memory and read `https://api.openai.com/auth.chatgpt_account_id`. +4. If no account id exists, return a sanitized auth error. +5. On 401/403, `storage.reload()` and retry once only if the access token changed. Do not force Codex refresh or call its token endpoint. + +### Kimi + +1. `AuthStorage.create().getApiKey("kimi-coding")` supports Pi OAuth or stored API key; fall back to `KIMI_API_KEY` only if Pi returns nothing. +2. Call `/coding/v1/usages` with `Authorization: Bearer`; no spoofed device headers are required. +3. On 401: + - reload storage; + - if disk now contains a different access token, retry it; + - otherwise find the registered `kimi-coding` provider through `storage.getOAuthProviders()`; + - call its `refreshToken()` with the current OAuth credential; + - reload and avoid overwriting a newer token if another process already refreshed; + - otherwise persist with `storage.set()` and retry once. +4. API-key credentials never attempt OAuth refresh. +5. Refresh failures become sanitized auth errors. + +This mirrors the installed Kimi provider’s forced-refresh behavior while using Pi’s registered OAuth implementation instead of duplicating Kimi OAuth endpoints/client constants. + +## Fetching and Parsing + +### Codex + +Request headers: + +```text +Authorization: Bearer +ChatGPT-Account-Id: +Accept: application/json +``` + +Parse: + +- `rate_limit.primary_window` → five-hour. +- `rate_limit.secondary_window` → weekly. +- `used_percent` → `usedPercent`. +- `reset_at` Unix seconds → milliseconds. +- `plan_type` → plan. + +Use a 10-second timeout. Categorize missing credentials, auth, timeout/network, HTTP, and invalid schema without including response bodies. + +### Kimi + +Parse: + +- top-level `usage` → weekly. +- `limits[]` item whose `window.duration` + `timeUnit` equals 300 minutes → five-hour. +- Numeric strings and numbers are both valid. +- Derive `used = limit - remaining` when needed. +- `usedPercent = used / limit * 100`. +- Accept documented reset aliases and ISO timestamps, including nanosecond precision. +- `user.membership.level` maps to the known Kimi plan names; preserve unknown enum text safely. + +Use a 10-second timeout. Invalid/missing required windows is an invalid-schema failure. + +## Cache and Refresh Semantics + +Keep provider caches independently so one provider’s failure never discards the other. + +- Freshness interval: five minutes. +- `session_start`: fetch both in parallel. +- `turn_end` / `model_select`: fetch only when the cache is older than five minutes. +- `/quotas` opening: force both fetches in parallel. +- Prevent overlapping refreshes with one in-flight promise. +- Success replaces that provider’s cache. +- Failure with last-good data retains it indefinitely for this Pi session, marks it stale, and stores a sanitized current error for the widget. +- Failure without last-good data produces missing/error state. +- Session shutdown clears footer/widget and releases references. + +## Minimal File Tree + +```text +├── .github/workflows/ci.yml +├── .gitignore +├── LICENSE +├── README.md +├── package.json +├── tsconfig.json +├── src/ +│ ├── index.ts # extension lifecycle, cache coordinator, /quotas +│ ├── types.ts +│ ├── auth.ts +│ ├── codex.ts # fetch + parse +│ ├── kimi.ts # fetch + parse +│ └── format.ts # footer + widget strings +└── tests/ + ├── fixtures/ + │ ├── codex-usage.json + │ ├── kimi-usage.json + │ └── kimi-usage-numeric-strings.json + ├── codex.test.ts + ├── kimi.test.ts + ├── format.test.ts + └── coordinator.test.ts +``` + +Do not create one-file abstractions for config, errors, JWT, cache, commands, headers, or app-server. + +## Implementation Phases + +### 1. Scaffold + +Create package metadata, strict TypeScript config, MIT license, README skeleton, and CI. Use: + +- `@earendil-works/pi-coding-agent` and `@earendil-works/pi-tui` as peer dependencies. +- Matching current packages as dev dependencies. +- Node built-ins only at runtime. +- `node --test` for tests. + +Gate: `npm install` and `npm run check` pass with a minimal extension entry. + +### 2. Pure parsers and formatters + +Implement normalized types, Codex parser, Kimi parser, percentage/reset formatting, footer, and widget text. Build fixture tests first; no auth/network yet. + +Gate: parser/formatter tests cover numeric strings, derived Kimi usage, missing windows, malformed resets, thresholds, stale/missing/error footer states, and secret-like error redaction. + +### 3. Auth and clients + +Implement Pi AuthStorage access, Codex account-id extraction, direct endpoint clients, timeout handling, Codex changed-token retry, and Kimi forced refresh/retry. + +Gate: mocked tests prove exactly one retry, no forced refresh for API keys, no raw body/token in errors, and provider failures remain independent. + +### 4. Coordinator and Pi UI + +Wire parallel refresh, in-flight deduplication, five-minute freshness, last-good stale fallback, footer `setStatus`, widget `setWidget`, `/quotas` toggle, and shutdown cleanup. + +Gate: mock Pi context tests verify lifecycle calls, `/usage` is never registered, `/quotas` toggles correctly, and one provider failure preserves the other. + +### 5. Live smoke test + +Load with: + +```sh +pi -e ./src/index.ts +``` + +Verify: + +1. Footer shows both real quotas. +2. `/quotas` shows detail widget; second invocation hides it. +3. Existing `/usage` still opens its dashboard. +4. Switching models does not duplicate status/widget entries. +5. Pi logs contain no bearer tokens, JWTs, account IDs, or raw provider bodies. +6. `/reload` and exit clean up session resources. + +Record only sanitized percentages/statuses in implementation notes. + +## Validation + +Required commands: + +```sh +npm run check +npm test +npm pack --dry-run +``` + +CI runs the same checks on Node 22. + +## Release Preparation + +- README: purpose, screenshot/text example, installation via `pi install git:github.com/iurysza/pi-codex-kimi-usage`, `/login` prerequisites, `/quotas`, refresh behavior, privacy/security, troubleshooting, and internal-endpoint warning. +- Package keywords: `pi-package`, `pi-extension`, `codex`, `kimi`, `quota`, `usage`. +- Start at `0.1.0`; do not publish or tag until live smoke test passes and user approves release. + +## Acceptance Criteria + +- Footer shows both providers from one `setStatus` slot. +- Codex and Kimi quota percentages match their provider quota surfaces during live smoke test. +- `/quotas` toggles a detailed static widget. +- Existing `/usage` remains unchanged. +- Direct endpoints only; no model calls, cookies, or Codex subprocess. +- Kimi recovers once from a revoked-but-unexpired OAuth token. +- Missing/failing providers do not hide working providers. +- Last-good data is visibly stale after refresh failure. +- No secrets/account identifiers/raw bodies are logged, persisted, or displayed. +- Typecheck, tests, and package dry-run pass. + +## Deviation Policy + +The implementer may make small local changes that simplify code or satisfy current Pi types and must record them in `implementation-notes.md`. + +Stop and report before changing: + +- auth/storage strategy; +- endpoint choice; +- network destinations; +- disk persistence; +- command/footer UX; +- adding dependencies or subprocesses; +- expanding quota scope beyond 5-hour + weekly windows. + +If live response schemas differ, save only a manually sanitized structural fixture—never the raw authenticated response—and update parser tests before continuing. + +## Unresolved Questions + +None blocking. Low-risk defaults are fixed above. Release publishing remains a separate approval. diff --git a/src/auth.ts b/src/auth.ts new file mode 100644 index 0000000..909c334 --- /dev/null +++ b/src/auth.ts @@ -0,0 +1,136 @@ +import { AuthStorage } from "@earendil-works/pi-coding-agent"; +import type { AuthCredential } from "@earendil-works/pi-coding-agent"; + +export type AuthStorageLike = Pick< + AuthStorage, + "get" | "getApiKey" | "reload" | "getOAuthProviders" | "set" +>; + +export function getAuthStorage(): AuthStorage { + return AuthStorage.create(); +} + +interface OAuthLikeCredential { + type?: string; + accountId?: string; + access?: string; + refresh?: string; + expires?: number; +} + +function toOAuthLike(cred: unknown): OAuthLikeCredential | undefined { + if (!cred || typeof cred !== "object" || Array.isArray(cred)) return undefined; + return cred as OAuthLikeCredential; +} + +function extractAccountId(cred: unknown): string | undefined { + const o = toOAuthLike(cred); + if (o?.accountId && typeof o.accountId === "string" && o.accountId.length > 0) { + return o.accountId; + } + return undefined; +} + +function extractAccountIdFromJwt(token: string): string | undefined { + try { + const parts = token.split("."); + if (parts.length !== 3) return undefined; + const payload = JSON.parse(Buffer.from(parts[1]!, "base64url").toString("utf8")); + const auth = payload["https://api.openai.com/auth"]; + const accountId = auth?.chatgpt_account_id; + return typeof accountId === "string" && accountId.length > 0 ? accountId : undefined; + } catch { + return undefined; + } +} + +export type CodexAuthResult = + | { token: string; accountId: string } + | { error: string }; + +export async function getCodexAuth( + storage: AuthStorageLike, +): Promise { + const token = await storage.getApiKey("openai-codex", { includeFallback: false }); + if (!token) { + return { error: "Codex credentials missing. Run /login openai-codex." }; + } + const cred = storage.get("openai-codex"); + let accountId = extractAccountId(cred); + if (!accountId) { + accountId = extractAccountIdFromJwt(token); + } + if (!accountId) { + return { error: "Codex account id missing. Run /login openai-codex again." }; + } + return { token, accountId }; +} + +export type KimiCredentialType = "oauth" | "api_key"; + +export type KimiAuthResult = + | { token: string; type: KimiCredentialType } + | { error: string }; + +export async function getKimiAuth( + storage: AuthStorageLike, +): Promise { + const token = await storage.getApiKey("kimi-coding"); + if (!token) { + const envKey = process.env.KIMI_API_KEY?.trim(); + if (envKey) { + return { token: envKey, type: "api_key" }; + } + return { error: "Kimi credentials missing. Run /login kimi-coding or set KIMI_API_KEY." }; + } + const cred = storage.get("kimi-coding"); + return { token, type: toOAuthLike(cred)?.type === "oauth" ? "oauth" : "api_key" }; +} + +export async function refreshKimiToken( + storage: AuthStorageLike, + currentKey: string, +): Promise { + storage.reload(); + const cred = storage.get("kimi-coding"); + if (!cred || toOAuthLike(cred)?.type !== "oauth") { + return null; + } + const oauth = toOAuthLike(cred)!; + if (oauth.access && oauth.access !== currentKey && oauth.expires && Date.now() < oauth.expires) { + return oauth.access; + } + if (!oauth.refresh) return null; + + const providers = storage.getOAuthProviders(); + const provider = providers.find((p) => p.id === "kimi-coding"); + if (!provider) return null; + + try { + const refreshed = await provider.refreshToken({ + access: oauth.access ?? currentKey, + refresh: oauth.refresh, + expires: oauth.expires ?? 0, + }); + storage.reload(); + const after = storage.get("kimi-coding"); + const afterOAuth = toOAuthLike(after); + if (afterOAuth?.access && afterOAuth.access !== currentKey) { + return afterOAuth.access; + } + if (!refreshed.access || !refreshed.refresh || !Number.isFinite(refreshed.expires)) { + return null; + } + const newCred = { + ...cred, + type: "oauth" as const, + access: refreshed.access, + refresh: refreshed.refresh, + expires: refreshed.expires, + }; + storage.set("kimi-coding", newCred as AuthCredential); + return refreshed.access; + } catch { + return null; + } +} diff --git a/src/codex.ts b/src/codex.ts new file mode 100644 index 0000000..1596989 --- /dev/null +++ b/src/codex.ts @@ -0,0 +1,163 @@ +import type { AuthStorageLike, CodexAuthResult } from "./auth.js"; +import { getCodexAuth } from "./auth.js"; +import type { ProviderQuota, QuotaWindow } from "./types.js"; + +const CODEX_USAGE_URL = "https://chatgpt.com/backend-api/wham/usage"; +const FETCH_TIMEOUT_MS = 10_000; + +interface CodexWindow { + used_percent?: unknown; + reset_at?: unknown; + [key: string]: unknown; +} + +interface CodexUsageBody { + plan_type?: unknown; + rate_limit?: { + primary_window?: CodexWindow; + secondary_window?: CodexWindow; + }; + [key: string]: unknown; +} + +function toNumber(value: unknown): number | undefined { + if (typeof value === "number" && Number.isFinite(value)) return value; + if (typeof value === "string") { + const parsed = Number(value); + if (Number.isFinite(parsed)) return parsed; + } + return undefined; +} + +function clampPercent(value: number): number { + return Math.max(0, Math.min(100, value)); +} + +function parseWindow(value: unknown, kind: QuotaWindow["kind"]): QuotaWindow | undefined { + if (!value || typeof value !== "object" || Array.isArray(value)) return undefined; + const record = value as Record; + const usedPercent = toNumber(record.used_percent); + if (usedPercent === undefined) return undefined; + const resetRaw = toNumber(record.reset_at); + const resetsAt = + resetRaw === undefined + ? undefined + : resetRaw < 1_000_000_000_000 + ? resetRaw * 1000 + : resetRaw; + return { + kind, + usedPercent: clampPercent(usedPercent), + resetsAt, + }; +} + +function parseCodexBody(body: unknown): Omit { + if (!body || typeof body !== "object" || Array.isArray(body)) { + throw new Error("Invalid Codex usage response: expected object"); + } + const record = body as CodexUsageBody; + const primary = parseWindow(record.rate_limit?.primary_window, "five-hour"); + const secondary = parseWindow(record.rate_limit?.secondary_window, "weekly"); + if (!primary || !secondary) { + throw new Error("Invalid Codex usage response: missing rate-limit windows"); + } + return { + plan: typeof record.plan_type === "string" ? record.plan_type : undefined, + windows: [primary, secondary], + }; +} + +function sanitizeError(error: unknown): string { + const message = error instanceof Error ? error.message : String(error); + // Never echo response bodies, tokens, or account ids. + return message.replace(/(["'])[^"']*\1/g, '"..."').split("\n")[0] ?? "Codex request failed"; +} + +async function fetchWithTimeout( + url: string, + init: RequestInit, + timeoutMs: number, +): Promise { + const controller = new AbortController(); + const id = setTimeout(() => controller.abort(), timeoutMs); + try { + return await fetch(url, { ...init, signal: controller.signal }); + } finally { + clearTimeout(id); + } +} + +async function performCodexFetch( + auth: { token: string; accountId: string }, +): Promise { + const response = await fetchWithTimeout( + CODEX_USAGE_URL, + { + method: "GET", + headers: { + Authorization: `Bearer ${auth.token}`, + "ChatGPT-Account-Id": auth.accountId, + Accept: "application/json", + }, + }, + FETCH_TIMEOUT_MS, + ); + + if (!response.ok) { + throw new Error(`Codex quota request failed (${response.status})`); + } + + const body = await response.json(); + const parsed = parseCodexBody(body); + return { + provider: "codex", + state: "live", + fetchedAt: Date.now(), + ...parsed, + }; +} + +export async function fetchCodexQuota(storage: AuthStorageLike): Promise { + let auth: CodexAuthResult = await getCodexAuth(storage); + if ("error" in auth) { + return { provider: "codex", state: "missing", windows: [], error: auth.error }; + } + + try { + return await performCodexFetch(auth); + } catch (error) { + const message = error instanceof Error ? error.message : String(error); + const authError = message.includes("401") || message.includes("403"); + if (authError) { + storage.reload(); + const retry = await getCodexAuth(storage); + if ("error" in retry) { + return { + provider: "codex", + state: "error", + windows: [], + error: retry.error, + }; + } + if (retry.token !== auth.token) { + try { + return await performCodexFetch(retry); + } catch (retryError) { + return { + provider: "codex", + state: "error", + windows: [], + error: sanitizeError(retryError), + }; + } + } + } + return { + provider: "codex", + state: "error", + windows: [], + error: sanitizeError(error), + }; + } +} diff --git a/src/format.ts b/src/format.ts new file mode 100644 index 0000000..ac7a316 --- /dev/null +++ b/src/format.ts @@ -0,0 +1,128 @@ +import type { ProviderName, ProviderQuota, QuotaSnapshot, QuotaWindow } from "./types.js"; + +interface ThemeLike { + fg(color: "success" | "warning" | "error" | "dim" | "text" | "accent", text: string): string; +} + +const PROVIDER_LABEL: Record = { + codex: "Codex", + kimi: "Kimi", +}; + +const PROVIDER_CODE: Record = { + codex: "CX", + kimi: "KM", +}; + +function thresholdColor(percent: number): "success" | "warning" | "error" { + if (percent >= 90) return "error"; + if (percent >= 70) return "warning"; + return "success"; +} + +function maxUsedPercent(windows: QuotaWindow[]): number { + return windows.reduce((max, w) => Math.max(max, w.usedPercent), 0); +} + +function shortWindowLabel(kind: QuotaWindow["kind"]): string { + return kind === "five-hour" ? "5h" : "7d"; +} + +function longWindowLabel(kind: QuotaWindow["kind"]): string { + return kind === "five-hour" ? "5h" : "Weekly"; +} + +function formatResetDuration(deltaMs: number): string { + if (deltaMs <= 0) return "soon"; + const minutes = Math.floor(deltaMs / 60_000); + const hours = Math.floor(minutes / 60); + const days = Math.floor(hours / 24); + const remMinutes = minutes % 60; + const remHours = hours % 24; + const parts: string[] = []; + if (days > 0) parts.push(`${days}d`); + if (remHours > 0 || (days > 0 && remMinutes > 0)) parts.push(`${remHours}h`); + if (days === 0 && remMinutes > 0) parts.push(`${remMinutes}m`); + if (parts.length === 0) return "soon"; + return parts.join(" "); +} + +function formatUpdatedTime(fetchedAt?: number): string { + if (!fetchedAt) return "—"; + const date = new Date(fetchedAt); + const hours = String(date.getHours()).padStart(2, "0"); + const minutes = String(date.getMinutes()).padStart(2, "0"); + return `${hours}:${minutes}`; +} + +export function formatProviderSegment(quota: ProviderQuota): string { + const code = PROVIDER_CODE[quota.provider]; + if (quota.state === "missing") return `${code} —`; + if (quota.state === "error") return `${code} !`; + const staleMarker = quota.state === "stale" ? "~" : ""; + const parts = quota.windows.map((w) => `${shortWindowLabel(w.kind)} ${Math.round(w.usedPercent)}%`); + return `${code}${staleMarker} ${parts.join(" · ")}`; +} + +export function formatFooter(snapshot: QuotaSnapshot, theme: ThemeLike): string { + const segments = [formatProviderSegment(snapshot.codex), formatProviderSegment(snapshot.kimi)]; + const codexPercent = snapshot.codex.windows.length > 0 ? maxUsedPercent(snapshot.codex.windows) : 0; + const kimiPercent = snapshot.kimi.windows.length > 0 ? maxUsedPercent(snapshot.kimi.windows) : 0; + const overallPercent = Math.max(codexPercent, kimiPercent); + const colored = segments.map((segment, index) => { + const q = index === 0 ? snapshot.codex : snapshot.kimi; + if (q.state === "missing" || q.state === "error") return theme.fg("dim", segment); + const providerPercent = maxUsedPercent(q.windows); + const color = thresholdColor(providerPercent); + return theme.fg(color, segment); + }); + // Use the overall threshold for the separator so the footer reads as a single quota block. + const separator = theme.fg(thresholdColor(overallPercent), " | "); + return colored.join(separator); +} + +export function formatWidget(snapshot: QuotaSnapshot, theme: ThemeLike, nowMs: number): string[] { + const lines: string[] = []; + lines.push(theme.fg("accent", "Quota usage")); + lines.push(""); + + const providers: ProviderQuota[] = [snapshot.codex, snapshot.kimi]; + for (const q of providers) { + const label = PROVIDER_LABEL[q.provider]; + const plan = q.plan ?? "—"; + const state = q.state; + lines.push( + `${theme.fg("accent", label)}${theme.fg("dim", ` · ${plan} · ${state}`)}`, + ); + + if (q.state === "missing") { + lines.push(theme.fg("dim", ` Credentials missing. Run /login ${q.provider === "codex" ? "openai-codex" : "kimi-coding"}.`)); + } else if (q.state === "error" && q.error) { + lines.push(theme.fg("error", ` ${q.error}`)); + } else { + for (const w of q.windows) { + const labelText = longWindowLabel(w.kind).padEnd(7); + const percentText = `${Math.round(w.usedPercent)}% used`; + const resetText = w.resetsAt ? `resets ${formatResetDuration(w.resetsAt - nowMs)}` : ""; + const color = thresholdColor(w.usedPercent); + const parts = [` ${labelText}`, theme.fg(color, percentText)]; + if (resetText) parts.push(theme.fg("dim", resetText)); + lines.push(parts.join(" ")); + } + } + + if (q.error && q.state === "stale") { + lines.push(theme.fg("warning", ` ${q.error}`)); + } + + lines.push(""); + } + + const updated = formatUpdatedTime(snapshot.codex.fetchedAt ?? snapshot.kimi.fetchedAt); + lines.push(theme.fg("dim", `Updated ${updated}`)); + lines.push(theme.fg("dim", "Run /quotas again to hide.")); + + return lines; +} + +export { formatResetDuration }; diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..fcb424f --- /dev/null +++ b/src/index.ts @@ -0,0 +1,182 @@ +import type { + ExtensionAPI, + ExtensionContext, +} from "@earendil-works/pi-coding-agent"; + +import { getAuthStorage, type AuthStorageLike } from "./auth.js"; +import { fetchCodexQuota } from "./codex.js"; +import { formatFooter, formatWidget } from "./format.js"; +import { fetchKimiQuota } from "./kimi.js"; +import type { ProviderName, ProviderQuota, QuotaSnapshot } from "./types.js"; + +const STATUS_KEY = "pi-codex-kimi-usage"; +const WIDGET_KEY = "pi-codex-kimi-usage"; +const FRESHNESS_MS = 5 * 60 * 1000; + +type Fetcher = (storage: AuthStorageLike) => Promise; + +interface CacheEntry { + data?: ProviderQuota; + inflight?: Promise; +} + +export function createCoordinator(storage: AuthStorageLike, fetchers: Record) { + const caches: Record = { + codex: {}, + kimi: {}, + }; + + async function refresh(provider: ProviderName, force: boolean): Promise { + const cache = caches[provider]!; + if (!force && cache.data?.fetchedAt && Date.now() - cache.data.fetchedAt < FRESHNESS_MS) { + return cache.data; + } + if (cache.inflight) { + return cache.inflight; + } + + cache.inflight = fetchers[provider]!(storage) + .then((quota) => { + const previous = cache.data; + if ( + (quota.state === "error" || quota.state === "missing") && + previous && + (previous.state === "live" || previous.state === "stale") + ) { + cache.data = { + ...previous, + state: "stale", + error: quota.error, + }; + } else { + cache.data = quota; + } + cache.inflight = undefined; + return cache.data; + }) + .catch(() => { + const previous = cache.data; + if (previous && (previous.state === "live" || previous.state === "stale")) { + cache.data = { + ...previous, + state: "stale", + error: "Unexpected quota refresh failure.", + }; + } else { + cache.data = { + provider, + state: "error", + windows: [], + error: "Unexpected quota refresh failure.", + }; + } + cache.inflight = undefined; + return cache.data; + }); + + return cache.inflight; + } + + async function refreshAll(force: boolean): Promise { + const [codex, kimi] = await Promise.all([ + refresh("codex", force), + refresh("kimi", force), + ]); + return { codex, kimi }; + } + + function getSnapshot(): QuotaSnapshot { + return { + codex: caches.codex.data ?? { provider: "codex", state: "missing", windows: [] }, + kimi: caches.kimi.data ?? { provider: "kimi", state: "missing", windows: [] }, + }; + } + + function clear(): void { + caches.codex.data = undefined; + caches.codex.inflight = undefined; + caches.kimi.data = undefined; + caches.kimi.inflight = undefined; + } + + return { refresh, refreshAll, getSnapshot, clear }; +} + +function makeThemeLike(ctx: ExtensionContext["ui"]) { + return { + fg: (color: Parameters[0], text: string) => ctx.theme.fg(color, text), + }; +} + +export function createPiCodexKimiUsage( + pi: ExtensionAPI, + storageOverride?: AuthStorageLike, +) { + const storage = storageOverride ?? getAuthStorage(); + const coordinator = createCoordinator(storage, { + codex: fetchCodexQuota, + kimi: fetchKimiQuota, + }); + + let widgetVisible = false; + + async function updateFooter(ctx: ExtensionContext["ui"]) { + const snapshot = coordinator.getSnapshot(); + ctx.setStatus(STATUS_KEY, formatFooter(snapshot, makeThemeLike(ctx))); + } + + function updateWidget(ctx: ExtensionContext["ui"]) { + if (!widgetVisible) { + ctx.setWidget(WIDGET_KEY, undefined); + return; + } + const snapshot = coordinator.getSnapshot(); + ctx.setWidget(WIDGET_KEY, formatWidget(snapshot, makeThemeLike(ctx), Date.now())); + } + + async function refreshAndRender(ctx: ExtensionContext, force: boolean) { + await coordinator.refreshAll(force); + await updateFooter(ctx.ui); + if (widgetVisible) { + updateWidget(ctx.ui); + } + } + + pi.on("session_start", async (_event, ctx) => { + await refreshAndRender(ctx, true); + }); + + pi.on("turn_end", async (_event, ctx) => { + await refreshAndRender(ctx, false); + }); + + pi.on("model_select", async (_event, ctx) => { + await refreshAndRender(ctx, false); + }); + + pi.on("session_shutdown", async (_event, ctx) => { + ctx.ui.setStatus(STATUS_KEY, undefined); + ctx.ui.setWidget(WIDGET_KEY, undefined); + coordinator.clear(); + }); + + pi.registerCommand("quotas", { + description: "Toggle detailed Codex/Kimi quota widget", + handler: async (_args, ctx) => { + if (ctx.mode !== "tui") { + ctx.ui.notify("/quotas requires TUI mode", "warning"); + return; + } + widgetVisible = !widgetVisible; + if (widgetVisible) { + await coordinator.refreshAll(true); + } + updateFooter(ctx.ui); + updateWidget(ctx.ui); + }, + }); +} + +export default function piCodexKimiUsage(pi: ExtensionAPI) { + return createPiCodexKimiUsage(pi); +} diff --git a/src/kimi.ts b/src/kimi.ts new file mode 100644 index 0000000..4bc4b6d --- /dev/null +++ b/src/kimi.ts @@ -0,0 +1,236 @@ +import type { AuthStorageLike, KimiAuthResult } from "./auth.js"; +import { getKimiAuth, refreshKimiToken } from "./auth.js"; +import type { ProviderQuota, QuotaWindow } from "./types.js"; + +const KIMI_USAGE_URL = "https://api.kimi.com/coding/v1/usages"; +const FETCH_TIMEOUT_MS = 10_000; + +const MEMBERSHIP_LEVEL_NAMES: Record = { + LEVEL_FREE: "Free", + LEVEL_BASIC: "Adagio", + LEVEL_STANDARD: "Moderato", + LEVEL_INTERMEDIATE: "Allegretto", + LEVEL_ADVANCED: "Allegro", + LEVEL_PREMIUM: "Vivace", +}; + +const RESET_TIME_KEYS = [ + "resetTime", + "reset_time", + "resetAt", + "reset_at", + "resetsAt", + "resets_at", + "nextResetTime", + "next_reset_time", +]; + +function toNumber(value: unknown): number | undefined { + if (typeof value === "number" && Number.isFinite(value)) return value; + if (typeof value === "string") { + const parsed = Number(value); + if (Number.isFinite(parsed)) return parsed; + } + return undefined; +} + +function parseDate(value: unknown): number | undefined { + const text = typeof value === "string" ? value : typeof value === "number" ? String(value) : undefined; + if (!text) return undefined; + if (/^\d+$/.test(text)) { + const ts = Number(text); + return ts < 1_000_000_000_000 ? ts * 1000 : ts; + } + // Trim nanosecond precision to milliseconds for ISO parsing. + const normalized = text.replace(/\.(\d{3})\d+Z?$/, ".$1Z"); + const date = new Date(normalized); + return Number.isNaN(date.getTime()) ? undefined : date.getTime(); +} + +function deriveUsed(record: Record): number | undefined { + const used = toNumber(record.used); + if (used !== undefined) return used; + const limit = toNumber(record.limit); + const remaining = toNumber(record.remaining); + if (limit !== undefined && remaining !== undefined) { + return Math.max(0, limit - remaining); + } + return undefined; +} + +function clampPercent(value: number): number { + return Math.max(0, Math.min(100, value)); +} + +function parseUsageRow(value: unknown, kind: QuotaWindow["kind"]): QuotaWindow | undefined { + if (!value || typeof value !== "object" || Array.isArray(value)) return undefined; + const record = value as Record; + const limit = toNumber(record.limit); + const used = deriveUsed(record); + if (used === undefined || limit === undefined || limit <= 0) return undefined; + const usedPercent = clampPercent((used / limit) * 100); + + let resetsAt: number | undefined; + for (const key of RESET_TIME_KEYS) { + resetsAt = parseDate(record[key]); + if (resetsAt !== undefined) break; + } + return { kind, usedPercent, used, limit, resetsAt }; +} + +function parseMembership(record: Record): string | undefined { + const user = record.user; + if (!user || typeof user !== "object" || Array.isArray(user)) return undefined; + const membership = (user as Record).membership; + if (!membership || typeof membership !== "object" || Array.isArray(membership)) return undefined; + const level = (membership as Record).level; + if (typeof level !== "string" || !level) return undefined; + return MEMBERSHIP_LEVEL_NAMES[level] ?? level; +} + +function parseKimiBody(body: unknown): Omit { + if (!body || typeof body !== "object" || Array.isArray(body)) { + throw new Error("Invalid Kimi usage response: expected object"); + } + const record = body as Record; + const weekly = parseUsageRow(record.usage, "weekly"); + if (!weekly) { + throw new Error("Invalid Kimi usage response: missing weekly usage"); + } + + let fiveHour: QuotaWindow | undefined; + if (Array.isArray(record.limits)) { + for (const item of record.limits) { + if (!item || typeof item !== "object" || Array.isArray(item)) continue; + const itemRecord = item as Record; + const detail = + itemRecord.detail && typeof itemRecord.detail === "object" && !Array.isArray(itemRecord.detail) + ? itemRecord.detail + : itemRecord; + const windowMeta = + itemRecord.window && typeof itemRecord.window === "object" && !Array.isArray(itemRecord.window) + ? (itemRecord.window as Record) + : {}; + const duration = toNumber(windowMeta.duration ?? (detail as Record).duration); + const unit = String( + windowMeta.timeUnit ?? + windowMeta.time_unit ?? + (detail as Record).timeUnit ?? + (detail as Record).time_unit ?? + "", + ).toUpperCase(); + if (duration === undefined) continue; + const minutes = unit.includes("HOUR") ? duration * 60 : unit.includes("MINUTE") ? duration : undefined; + if (minutes === 300) { + const row = parseUsageRow(detail, "five-hour"); + if (row) { + fiveHour = row; + break; + } + } + } + } + + if (!fiveHour) { + throw new Error("Invalid Kimi usage response: missing 5-hour window"); + } + + return { + plan: parseMembership(record), + windows: [fiveHour, weekly], + }; +} + +function sanitizeError(error: unknown): string { + const message = error instanceof Error ? error.message : String(error); + return message.replace(/(["'])[^"']*\1/g, '"..."').split("\n")[0] ?? "Kimi request failed"; +} + +async function fetchWithTimeout( + url: string, + init: RequestInit, + timeoutMs: number, +): Promise { + const controller = new AbortController(); + const id = setTimeout(() => controller.abort(), timeoutMs); + try { + return await fetch(url, { ...init, signal: controller.signal }); + } finally { + clearTimeout(id); + } +} + +async function performKimiFetch(token: string): Promise { + const response = await fetchWithTimeout( + KIMI_USAGE_URL, + { + method: "GET", + headers: { + Authorization: `Bearer ${token}`, + Accept: "application/json", + }, + }, + FETCH_TIMEOUT_MS, + ); + + if (!response.ok) { + throw new Error(`Kimi quota request failed (${response.status})`); + } + + const body = await response.json(); + const parsed = parseKimiBody(body); + return { + provider: "kimi", + state: "live", + fetchedAt: Date.now(), + ...parsed, + }; +} + +export async function fetchKimiQuota(storage: AuthStorageLike): Promise { + let auth: KimiAuthResult = await getKimiAuth(storage); + if ("error" in auth) { + return { provider: "kimi", state: "missing", windows: [], error: auth.error }; + } + + try { + return await performKimiFetch(auth.token); + } catch (error) { + const message = error instanceof Error ? error.message : String(error); + if (message.includes("401") && auth.type === "oauth") { + storage.reload(); + const afterReload = await getKimiAuth(storage); + if ("token" in afterReload && afterReload.token !== auth.token) { + try { + return await performKimiFetch(afterReload.token); + } catch (retryError) { + return { + provider: "kimi", + state: "error", + windows: [], + error: sanitizeError(retryError), + }; + } + } + const refreshed = await refreshKimiToken(storage, auth.token); + if (refreshed) { + try { + return await performKimiFetch(refreshed); + } catch (retryError) { + return { + provider: "kimi", + state: "error", + windows: [], + error: sanitizeError(retryError), + }; + } + } + } + return { + provider: "kimi", + state: "error", + windows: [], + error: sanitizeError(error), + }; + } +} diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000..6d948bc --- /dev/null +++ b/src/types.ts @@ -0,0 +1,24 @@ +export type ProviderName = "codex" | "kimi"; +export type QuotaState = "live" | "stale" | "missing" | "error"; + +export interface QuotaWindow { + kind: "five-hour" | "weekly"; + usedPercent: number; + used?: number; + limit?: number; + resetsAt?: number; // Unix milliseconds +} + +export interface ProviderQuota { + provider: ProviderName; + state: QuotaState; + fetchedAt?: number; + plan?: string; + windows: QuotaWindow[]; + error?: string; // sanitized, user-facing only +} + +export interface QuotaSnapshot { + codex: ProviderQuota; + kimi: ProviderQuota; +} diff --git a/tests/codex.test.ts b/tests/codex.test.ts new file mode 100644 index 0000000..68ef380 --- /dev/null +++ b/tests/codex.test.ts @@ -0,0 +1,129 @@ +import { describe, it } from "node:test"; +import assert from "node:assert/strict"; +import { fetchCodexQuota } from "../src/codex.js"; +import type { AuthStorageLike } from "../src/auth.js"; +import codexUsage from "./fixtures/codex-usage.json" with { type: "json" }; + +function mockStorage(overrides?: { + token?: string; + accountId?: string; + noCredential?: boolean; +}): AuthStorageLike { + return { + getApiKey: async () => (overrides?.noCredential ? undefined : overrides?.token ?? "token"), + get: () => + overrides?.noCredential + ? undefined + : { + type: "oauth", + access: overrides?.token ?? "token", + accountId: overrides?.accountId ?? "acc-1", + }, + reload: () => {}, + getOAuthProviders: () => [], + set: () => {}, + } as unknown as AuthStorageLike; +} + +function mockFetch(response: (url: string, init: RequestInit) => Response | Promise) { + const original = globalThis.fetch; + globalThis.fetch = (async (url, init) => response(url as string, init as RequestInit)) as typeof fetch; + return () => { + globalThis.fetch = original; + }; +} + +describe("fetchCodexQuota", () => { + it("parses a valid usage response", async () => { + const restore = mockFetch(() => + new Response(JSON.stringify(codexUsage), { status: 200 }) + ); + try { + const quota = await fetchCodexQuota(mockStorage()); + assert.equal(quota.provider, "codex"); + assert.equal(quota.state, "live"); + assert.equal(quota.plan, "plus"); + assert.equal(quota.windows.length, 2); + assert.equal(quota.windows[0]?.kind, "five-hour"); + assert.equal(quota.windows[0]?.usedPercent, 24); + assert.equal(quota.windows[1]?.kind, "weekly"); + assert.equal(quota.windows[1]?.usedPercent, 61); + } finally { + restore(); + } + }); + + it("returns missing state when credentials are absent", async () => { + const quota = await fetchCodexQuota(mockStorage({ noCredential: true })); + assert.equal(quota.state, "missing"); + assert.equal(quota.windows.length, 0); + }); + + it("retries once when the access token changes after a 401", async () => { + let calls = 0; + const tokens: string[] = []; + const storage = { + ...mockStorage({ token: "old-token", accountId: "acc-1" }), + getApiKey: async (_provider: string, _opts?: unknown) => { + calls++; + return calls === 1 ? "old-token" : "new-token"; + }, + get: (_provider: string) => { + return { + type: "oauth", + access: calls === 1 ? "old-token" : "new-token", + accountId: "acc-1", + }; + }, + } as unknown as AuthStorageLike; + + const restore = mockFetch((_url, init) => { + const auth = (init.headers as Record)["Authorization"]; + tokens.push(auth ?? ""); + if (auth === "Bearer old-token") { + return new Response("unauthorized", { status: 401 }); + } + return new Response(JSON.stringify(codexUsage), { status: 200 }); + }); + + try { + const quota = await fetchCodexQuota(storage); + assert.equal(quota.state, "live"); + assert.equal(tokens.length, 2); + assert.equal(tokens[0], "Bearer old-token"); + assert.equal(tokens[1], "Bearer new-token"); + } finally { + restore(); + } + }); + + it("does not retry when the token is unchanged after reload", async () => { + let calls = 0; + const storage = mockStorage({ token: "same-token", accountId: "acc-1" }); + const restore = mockFetch(() => { + calls++; + return new Response("unauthorized", { status: 401 }); + }); + try { + const quota = await fetchCodexQuota(storage); + assert.equal(quota.state, "error"); + assert.equal(calls, 1); + assert.ok(!quota.error?.includes("same-token")); + } finally { + restore(); + } + }); + + it("rejects invalid schemas without raw bodies", async () => { + const restore = mockFetch(() => + new Response(JSON.stringify({ unexpected: true }), { status: 200 }) + ); + try { + const quota = await fetchCodexQuota(mockStorage()); + assert.equal(quota.state, "error"); + assert.ok(!quota.error?.includes("unexpected")); + } finally { + restore(); + } + }); +}); diff --git a/tests/coordinator.test.ts b/tests/coordinator.test.ts new file mode 100644 index 0000000..2f49a05 --- /dev/null +++ b/tests/coordinator.test.ts @@ -0,0 +1,114 @@ +import { describe, it } from "node:test"; +import assert from "node:assert/strict"; +import { createCoordinator } from "../src/index.js"; +import type { AuthStorageLike } from "../src/auth.js"; +import type { ProviderName, ProviderQuota } from "../src/types.js"; + +function mockStorage(): AuthStorageLike { + return { + getApiKey: async () => "token", + get: () => undefined, + reload: () => {}, + getOAuthProviders: () => [], + set: () => {}, + } as unknown as AuthStorageLike; +} + +function live(provider: ProviderName, percent: number): ProviderQuota { + return { + provider, + state: "live", + fetchedAt: Date.now(), + windows: [ + { kind: "five-hour", usedPercent: percent }, + { kind: "weekly", usedPercent: percent }, + ], + }; +} + +describe("createCoordinator", () => { + it("fetches both providers on refreshAll", async () => { + const c = createCoordinator(mockStorage(), { + codex: async () => live("codex", 10), + kimi: async () => live("kimi", 20), + }); + const snapshot = await c.refreshAll(true); + assert.equal(snapshot.codex.state, "live"); + assert.equal(snapshot.kimi.state, "live"); + assert.equal(snapshot.codex.windows[0]?.usedPercent, 10); + }); + + it("deduplicates concurrent refreshes", async () => { + let calls = 0; + const c = createCoordinator(mockStorage(), { + codex: async () => { + calls++; + await new Promise((r) => setTimeout(r, 20)); + return live("codex", 10); + }, + kimi: async () => live("kimi", 20), + }); + const [a, b] = await Promise.all([c.refresh("codex", true), c.refresh("codex", true)]); + assert.equal(calls, 1); + assert.equal(a.state, "live"); + assert.equal(b.state, "live"); + }); + + it("uses cache when fresh and not forced", async () => { + let calls = 0; + const c = createCoordinator(mockStorage(), { + codex: async () => { + calls++; + return live("codex", 10); + }, + kimi: async () => live("kimi", 20), + }); + await c.refreshAll(true); + const snapshot = await c.refreshAll(false); + assert.equal(calls, 1); + assert.equal(snapshot.codex.windows[0]?.usedPercent, 10); + }); + + it("keeps last-good data as stale when a client returns an error state", async () => { + let succeed = true; + const c = createCoordinator(mockStorage(), { + codex: async () => { + if (succeed) return live("codex", 10); + return { provider: "codex", state: "error", windows: [], error: "network down" }; + }, + kimi: async () => live("kimi", 20), + }); + await c.refreshAll(true); + succeed = false; + const snapshot = await c.refreshAll(true); + assert.equal(snapshot.codex.state, "stale"); + assert.equal(snapshot.codex.windows[0]?.usedPercent, 10); + assert.equal(snapshot.codex.error, "network down"); + assert.equal(snapshot.kimi.state, "live"); + }); + + it("one provider failure does not discard the other", async () => { + const c = createCoordinator(mockStorage(), { + codex: async () => { + throw new Error("secret-bearing unexpected failure"); + }, + kimi: async () => live("kimi", 20), + }); + const snapshot = await c.refreshAll(true); + assert.equal(snapshot.codex.state, "error"); + assert.equal(snapshot.codex.error, "Unexpected quota refresh failure."); + assert.equal(snapshot.kimi.state, "live"); + }); + + it("clears caches on clear", async () => { + const c = createCoordinator(mockStorage(), { + codex: async () => live("codex", 10), + kimi: async () => live("kimi", 20), + }); + await c.refreshAll(true); + c.clear(); + const snapshot = c.getSnapshot(); + assert.equal(snapshot.codex.state, "missing"); + assert.equal(snapshot.kimi.state, "missing"); + }); +}); diff --git a/tests/fixtures/codex-usage.json b/tests/fixtures/codex-usage.json new file mode 100644 index 0000000..8a5ee24 --- /dev/null +++ b/tests/fixtures/codex-usage.json @@ -0,0 +1,13 @@ +{ + "plan_type": "plus", + "rate_limit": { + "primary_window": { + "used_percent": 24, + "reset_at": 1752262800 + }, + "secondary_window": { + "used_percent": 61, + "reset_at": 1752687600 + } + } +} diff --git a/tests/fixtures/kimi-usage-numeric-strings.json b/tests/fixtures/kimi-usage-numeric-strings.json new file mode 100644 index 0000000..41c5498 --- /dev/null +++ b/tests/fixtures/kimi-usage-numeric-strings.json @@ -0,0 +1,27 @@ +{ + "user": { + "membership": { + "level": "LEVEL_PREMIUM" + } + }, + "usage": { + "name": "Weekly usage", + "limit": "200", + "remaining": "114", + "resetTime": "1752687600" + }, + "limits": [ + { + "window": { + "duration": "300", + "timeUnit": "MINUTE" + }, + "detail": { + "name": "5-hour window", + "limit": "80", + "used": "18", + "resets_at": "1752262800" + } + } + ] +} diff --git a/tests/fixtures/kimi-usage.json b/tests/fixtures/kimi-usage.json new file mode 100644 index 0000000..23354cd --- /dev/null +++ b/tests/fixtures/kimi-usage.json @@ -0,0 +1,27 @@ +{ + "user": { + "membership": { + "level": "LEVEL_ADVANCED" + } + }, + "usage": { + "name": "Weekly usage", + "limit": 100, + "used": 43, + "reset_time": "2026-07-18T00:00:00.123456789Z" + }, + "limits": [ + { + "window": { + "duration": 300, + "timeUnit": "MINUTE" + }, + "detail": { + "name": "5-hour window", + "limit": 50, + "remaining": 41, + "resetAt": "2026-07-12T16:00:00Z" + } + } + ] +} diff --git a/tests/format.test.ts b/tests/format.test.ts new file mode 100644 index 0000000..ae9e73c --- /dev/null +++ b/tests/format.test.ts @@ -0,0 +1,100 @@ +import { describe, it } from "node:test"; +import assert from "node:assert/strict"; +import { formatFooter, formatProviderSegment, formatWidget } from "../src/format.js"; +import type { ProviderQuota, QuotaSnapshot } from "../src/types.js"; + +const theme = { + fg: (color: string, text: string) => `[${color}:${text}]`, +}; + +function liveQuota(provider: ProviderQuota["provider"], five: number, weekly: number): ProviderQuota { + return { + provider, + state: "live", + fetchedAt: 1752306000000, + plan: provider === "codex" ? "plus" : "Allegro", + windows: [ + { kind: "five-hour", usedPercent: five, resetsAt: 1752313800000 }, + { kind: "weekly", usedPercent: weekly, resetsAt: 1752774000000 }, + ], + }; +} + +describe("formatProviderSegment", () => { + it("formats a live provider", () => { + const segment = formatProviderSegment(liveQuota("codex", 24, 61)); + assert.equal(segment, "CX 5h 24% · 7d 61%"); + }); + + it("marks stale data", () => { + const q = liveQuota("kimi", 18, 43); + q.state = "stale"; + assert.equal(formatProviderSegment(q), "KM~ 5h 18% · 7d 43%"); + }); + + it("shows missing and error states", () => { + assert.equal(formatProviderSegment({ provider: "codex", state: "missing", windows: [] }), "CX —"); + assert.equal(formatProviderSegment({ provider: "kimi", state: "error", windows: [] }), "KM !"); + }); +}); + +describe("formatFooter", () => { + it("combines both providers", () => { + const snapshot: QuotaSnapshot = { + codex: liveQuota("codex", 24, 61), + kimi: liveQuota("kimi", 18, 43), + }; + const footer = formatFooter(snapshot, theme); + assert.ok(footer.includes("CX 5h 24% · 7d 61%")); + assert.ok(footer.includes("KM 5h 18% · 7d 43%")); + }); + + it("uses warning color for 70-89%", () => { + const snapshot: QuotaSnapshot = { + codex: liveQuota("codex", 75, 50), + kimi: liveQuota("kimi", 10, 20), + }; + const footer = formatFooter(snapshot, theme); + assert.ok(footer.includes("[warning:")); + }); + + it("uses error color for 90%+", () => { + const snapshot: QuotaSnapshot = { + codex: liveQuota("codex", 95, 50), + kimi: liveQuota("kimi", 10, 20), + }; + const footer = formatFooter(snapshot, theme); + assert.ok(footer.includes("[error:")); + }); +}); + +describe("formatWidget", () => { + it("renders provider headers and windows", () => { + const snapshot: QuotaSnapshot = { + codex: liveQuota("codex", 24, 61), + kimi: liveQuota("kimi", 18, 43), + }; + const lines = formatWidget(snapshot, theme, 1752306000000); + const text = lines.join("\n"); + assert.ok(text.includes("Quota usage")); + assert.ok(text.includes("Codex")); + assert.ok(text.includes("Kimi")); + assert.ok(text.includes("24% used")); + assert.ok(text.includes("61% used")); + assert.ok(text.includes("Run /quotas again to hide.")); + }); + + it("renders missing credentials", () => { + const snapshot: QuotaSnapshot = { + codex: { + provider: "codex", + state: "missing", + windows: [], + error: "Codex credentials missing. Run /login openai-codex.", + }, + kimi: liveQuota("kimi", 18, 43), + }; + const lines = formatWidget(snapshot, theme, 1752306000000); + assert.equal(lines.filter((l) => /credentials missing/i.test(l)).length, 1); + }); +}); diff --git a/tests/index.test.ts b/tests/index.test.ts new file mode 100644 index 0000000..e3e8763 --- /dev/null +++ b/tests/index.test.ts @@ -0,0 +1,136 @@ +import { describe, it } from "node:test"; +import assert from "node:assert/strict"; +import { createPiCodexKimiUsage } from "../src/index.js"; +import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent"; +import type { AuthStorageLike } from "../src/auth.js"; +import codexUsage from "./fixtures/codex-usage.json" with { type: "json" }; +import kimiUsage from "./fixtures/kimi-usage.json" with { type: "json" }; + +function fakeStorage(): AuthStorageLike { + return { + getApiKey: async () => "token", + get: () => undefined, + reload: () => {}, + getOAuthProviders: () => [], + set: () => {}, + } as unknown as AuthStorageLike; +} + +function withMockFetch(fn: () => Promise): () => Promise { + return async () => { + const original = globalThis.fetch; + globalThis.fetch = async () => new Response("unauthorized", { status: 401 }); + try { + await fn(); + } finally { + globalThis.fetch = original; + } + }; +} + +function fakeAPI() { + const handlers: Record Promise)[]> = {}; + const status: Record = {}; + const widgets: Record = {}; + const commands: Record Promise }> = {}; + + const ctx: ExtensionContext = { + mode: "tui", + ui: { + setStatus: (key: string, text: string | undefined) => { + status[key] = text; + }, + setWidget: (key: string, content: string[] | undefined) => { + widgets[key] = content; + }, + theme: { + fg: (_color: string, text: string) => text, + }, + } as unknown as ExtensionContext["ui"], + } as unknown as ExtensionContext; + + return { + api: { + on: (event: string, handler: (event: unknown, ctx: unknown) => Promise) => { + handlers[event] = handlers[event] ?? []; + handlers[event]!.push(handler); + }, + registerCommand: (name: string, options: { handler: (args: string, ctx: ExtensionContext) => Promise }) => { + commands[name] = options; + }, + } as unknown as ExtensionAPI, + handlers, + status, + widgets, + commands, + ctx, + async fire(event: string, payload: unknown) { + for (const h of handlers[event] ?? []) { + await h(payload, ctx); + } + }, + + }; +} + +describe("createPiCodexKimiUsage", () => { + it("registers /quotas and not /usage", () => { + fakeAPI(); + const registered: string[] = []; + const pi = { + on: () => {}, + registerCommand: (name: string) => { + registered.push(name); + }, + } as unknown as ExtensionAPI; + createPiCodexKimiUsage(pi, fakeStorage()); + assert.ok(registered.includes("quotas")); + assert.ok(!registered.includes("usage")); + }); + + it( + "sets footer on session_start", + withMockFetch(async () => { + const f = fakeAPI(); + createPiCodexKimiUsage(f.api, fakeStorage()); + await f.fire("session_start", { type: "session_start", reason: "startup" }); + assert.ok(f.status["pi-codex-kimi-usage"], "status should be set"); + }), + ); + + it("toggles the /quotas widget", async () => { + const original = globalThis.fetch; + globalThis.fetch = (async (url) => { + const body = String(url).includes("chatgpt.com") ? codexUsage : kimiUsage; + return new Response(JSON.stringify(body), { status: 200 }); + }) as typeof fetch; + try { + const f = fakeAPI(); + const storage = { + ...fakeStorage(), + get: (provider: string) => provider === "openai-codex" + ? { type: "oauth", access: "token", accountId: "acc-1" } + : { type: "api_key", key: "token" }, + } as unknown as AuthStorageLike; + createPiCodexKimiUsage(f.api, storage); + await f.commands.quotas!.handler("", f.ctx); + assert.ok(f.widgets["pi-codex-kimi-usage"]?.includes("Run /quotas again to hide.")); + await f.commands.quotas!.handler("", f.ctx); + assert.equal(f.widgets["pi-codex-kimi-usage"], undefined); + } finally { + globalThis.fetch = original; + } + }); + + it( + "cleans up on session_shutdown", + withMockFetch(async () => { + const f = fakeAPI(); + createPiCodexKimiUsage(f.api, fakeStorage()); + await f.fire("session_start", { type: "session_start", reason: "startup" }); + await f.fire("session_shutdown", { type: "session_shutdown", reason: "quit" }); + assert.equal(f.status["pi-codex-kimi-usage"], undefined); + assert.equal(f.widgets["pi-codex-kimi-usage"], undefined); + }), + ); +}); diff --git a/tests/kimi.test.ts b/tests/kimi.test.ts new file mode 100644 index 0000000..cd45cb1 --- /dev/null +++ b/tests/kimi.test.ts @@ -0,0 +1,168 @@ +import { describe, it } from "node:test"; +import assert from "node:assert/strict"; +import { fetchKimiQuota } from "../src/kimi.js"; +import type { AuthStorageLike } from "../src/auth.js"; +import kimiUsage from "./fixtures/kimi-usage.json" with { type: "json" }; +import kimiNumeric from "./fixtures/kimi-usage-numeric-strings.json" with { type: "json" }; + +function mockStorage(overrides?: { + token?: string; + type?: "oauth" | "api_key"; + noCredential?: boolean; +}): AuthStorageLike { + return { + getApiKey: async () => (overrides?.noCredential ? undefined : overrides?.token ?? "token"), + get: () => + overrides?.noCredential + ? undefined + : overrides?.type === "api_key" + ? { type: "api_key", key: overrides?.token ?? "token" } + : { + type: "oauth", + access: overrides?.token ?? "token", + refresh: "refresh-token", + expires: Date.now() + 3600_000, + }, + reload: () => {}, + getOAuthProviders: () => [], + set: () => {}, + } as unknown as AuthStorageLike; +} + +function mockFetch(response: (url: string, init: RequestInit) => Response | Promise) { + const original = globalThis.fetch; + globalThis.fetch = (async (url, init) => response(url as string, init as RequestInit)) as typeof fetch; + return () => { + globalThis.fetch = original; + }; +} + +describe("fetchKimiQuota", () => { + it("parses a valid usage response", async () => { + const restore = mockFetch(() => new Response(JSON.stringify(kimiUsage), { status: 200 })); + try { + const quota = await fetchKimiQuota(mockStorage()); + assert.equal(quota.provider, "kimi"); + assert.equal(quota.state, "live"); + assert.equal(quota.plan, "Allegro"); + assert.equal(quota.windows.length, 2); + assert.equal(quota.windows[0]?.kind, "five-hour"); + assert.equal(quota.windows[0]?.usedPercent, 18); + assert.equal(quota.windows[1]?.kind, "weekly"); + assert.equal(quota.windows[1]?.usedPercent, 43); + } finally { + restore(); + } + }); + + it("handles numeric strings and derived usage", async () => { + const restore = mockFetch(() => new Response(JSON.stringify(kimiNumeric), { status: 200 })); + try { + const quota = await fetchKimiQuota(mockStorage()); + assert.equal(quota.plan, "Vivace"); + assert.equal(quota.windows[1]?.usedPercent, 43); // (200-114)/200 + assert.equal(quota.windows[0]?.usedPercent, 22.5); + } finally { + restore(); + } + }); + + it("returns missing state when credentials are absent", async () => { + const restore = mockFetch(() => new Response(JSON.stringify(kimiUsage), { status: 200 })); + try { + const quota = await fetchKimiQuota(mockStorage({ noCredential: true })); + assert.equal(quota.state, "missing"); + } finally { + restore(); + } + }); + + it("forces one OAuth refresh on 401", async () => { + const refreshed: string[] = []; + const provider = { + id: "kimi-coding", + refreshToken: async () => { + refreshed.push("yes"); + return { access: "new-access", refresh: "new-refresh", expires: Date.now() + 3600_000 }; + }, + }; + const storage = { + ...mockStorage({ token: "old-token", type: "oauth" }), + getOAuthProviders: () => [provider], + } as unknown as AuthStorageLike; + + const restore = mockFetch((_url, init) => { + const auth = (init.headers as Record)["Authorization"]; + if (auth === "Bearer old-token") { + return new Response("unauthorized", { status: 401 }); + } + return new Response(JSON.stringify(kimiUsage), { status: 200 }); + }); + + try { + const quota = await fetchKimiQuota(storage); + assert.equal(quota.state, "live"); + assert.equal(refreshed.length, 1); + } finally { + restore(); + } + }); + + it("returns a sanitized error when OAuth refresh fails", async () => { + const provider = { + id: "kimi-coding", + refreshToken: async () => { + throw new Error("refresh-token secret leaked by provider"); + }, + }; + const storage = { + ...mockStorage({ token: "old-token", type: "oauth" }), + getOAuthProviders: () => [provider], + } as unknown as AuthStorageLike; + + const restore = mockFetch(() => new Response("unauthorized", { status: 401 })); + try { + const quota = await fetchKimiQuota(storage); + assert.equal(quota.state, "error"); + assert.ok(!quota.error?.includes("refresh-token")); + } finally { + restore(); + } + }); + + it("does not attempt OAuth refresh for API keys", async () => { + const provider = { + id: "kimi-coding", + refreshToken: async () => ({ access: "x", refresh: "y", expires: Date.now() }), + }; + const storage = { + ...mockStorage({ token: "api-key", type: "api_key" }), + getOAuthProviders: () => [provider], + } as unknown as AuthStorageLike; + + let refreshed = false; + provider.refreshToken = async () => { + refreshed = true; + return { access: "x", refresh: "y", expires: Date.now() }; + }; + + const restore = mockFetch(() => new Response("unauthorized", { status: 401 })); + try { + const quota = await fetchKimiQuota(storage); + assert.equal(quota.state, "error"); + assert.equal(refreshed, false); + } finally { + restore(); + } + }); + + it("rejects invalid schemas", async () => { + const restore = mockFetch(() => new Response(JSON.stringify({ usage: {} }), { status: 200 })); + try { + const quota = await fetchKimiQuota(mockStorage()); + assert.equal(quota.state, "error"); + } finally { + restore(); + } + }); +}); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..3a90979 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "target": "ES2023", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "lib": ["ES2023"], + "outDir": "dist", + "rootDir": ".", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "resolveJsonModule": true, + "declaration": false, + "sourceMap": false + }, + "include": ["src/**/*.ts", "tests/**/*.ts"], + "exclude": ["node_modules", "dist"] +} -- 2.51.2 From 49fc48830b5dd0dd0a9525698bc374578e5f0af1 Mon Sep 17 00:00:00 2001 From: Iury Souza Date: Sun, 12 Jul 2026 13:41:32 +0200 Subject: [PATCH 02/19] feat(footer): show active model quota gauge --- README.md | 28 ++++++++--- package-lock.json | 4 +- package.json | 2 +- src/format.ts | 61 +++++++++++------------ src/index.ts | 61 +++++++++++++++++------ src/preferences.ts | 29 +++++++++++ tests/format.test.ts | 102 ++++++++++++-------------------------- tests/index.test.ts | 48 +++++++++++++++++- tests/preferences.test.ts | 26 ++++++++++ 9 files changed, 232 insertions(+), 129 deletions(-) create mode 100644 src/preferences.ts create mode 100644 tests/preferences.test.ts diff --git a/README.md b/README.md index 60d7e9d..b965784 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,22 @@ # pi-codex-kimi-usage -A Pi extension that shows OpenAI Codex and Kimi Coding subscription quota in one compact footer status, with a `/quotas` command for the detailed view. +A Pi extension that shows the active model family's subscription quota in the footer. OpenAI/OpenAI-Codex models show Codex quota; `kimi-coding` models show Kimi quota. Unsupported providers show no quota status. ## Footer +The default `minimal` mode shows the 5-hour window: + +```text +▰▱▱▱ 24% ↻ 3:25 +``` + +`full` mode adds the weekly window: + ```text -CX 5h 24% · 7d 61% | KM 5h 18% · 7d 43% +5h ▰▱▱▱ 24% ↻ 3:25 · 7d ▰▱▱▱ 15% ↻ Sun 9:00 ``` -Colors: green below 70%, yellow at 70–89%, red at 90%+. A trailing `~` means the data is stale, `—` means credentials are missing, and `!` means the last fetch failed. +The four-cell gauge represents quota pressure in 25-point buckets. Percentages stay exact and alone receive threshold color: green below 70%, yellow at 70–89%, red at 90%+. A trailing `~` marks stale last-good data. Reset timestamps use local wall-clock time. ## Installation @@ -23,21 +31,25 @@ pi install git:github.com/iurysza/pi-codex-kimi-usage ## Commands -- `/quotas` — toggle the detailed quota widget above the editor. +- `/quotas` — toggle the detailed widget showing both providers. +- `/quotas minimal` — use the compact 5-hour footer. +- `/quotas full` — show 5-hour and weekly footer windows. + +Footer mode defaults to `minimal` and is stored globally in `pi-codex-kimi-usage.json` under Pi's agent directory. This file contains only the display preference, never quota data or credentials. ## Refresh behavior -Quota refreshes on session start and again after each turn or model switch only when the cache is older than five minutes. Opening `/quotas` always forces a refresh. +Quota refreshes on session start and after each turn or model switch when its cache is older than five minutes. Model switches immediately route the footer to the selected provider. Opening bare `/quotas` forces both providers to refresh. ## Privacy and security - Only direct read-only quota endpoints are used. - No browser cookies, dashboard scraping, model probes, or subprocesses. -- Tokens, JWTs, account IDs, and raw provider responses are never logged, displayed, or persisted outside Pi’s existing credential storage. +- Tokens, JWTs, account IDs, raw provider responses, and quota data are never persisted by this extension. ## Troubleshooting -- If a provider shows `—`, run `/login` for that provider. -- If a provider shows `!`, check your network and credentials. +- If the footer shows `—`, log in to the active model's provider. +- If it shows `!`, check network and credentials. - Full custom footers created with `ctx.ui.setFooter()` must render Pi extension statuses or they can hide this footer segment; `/quotas` still works. - The Codex and Kimi endpoints are internal/provider surfaces and may change. diff --git a/package-lock.json b/package-lock.json index 7b1675c..cbd6ef4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pi-codex-kimi-usage", - "version": "0.1.0", + "version": "0.2.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pi-codex-kimi-usage", - "version": "0.1.0", + "version": "0.2.0", "license": "MIT", "devDependencies": { "@earendil-works/pi-coding-agent": "^0.80.6", diff --git a/package.json b/package.json index 359d2d3..35bd1cd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pi-codex-kimi-usage", - "version": "0.1.0", + "version": "0.2.0", "description": "Pi footer quota status for OpenAI Codex and Kimi Coding subscriptions", "license": "MIT", "author": "Iury Souza", diff --git a/src/format.ts b/src/format.ts index ac7a316..04d9428 100644 --- a/src/format.ts +++ b/src/format.ts @@ -1,3 +1,4 @@ +import type { FooterMode } from "./preferences.js"; import type { ProviderName, ProviderQuota, QuotaSnapshot, QuotaWindow } from "./types.js"; interface ThemeLike { @@ -9,21 +10,12 @@ const PROVIDER_LABEL: Record = { kimi: "Kimi", }; -const PROVIDER_CODE: Record = { - codex: "CX", - kimi: "KM", -}; - function thresholdColor(percent: number): "success" | "warning" | "error" { if (percent >= 90) return "error"; if (percent >= 70) return "warning"; return "success"; } -function maxUsedPercent(windows: QuotaWindow[]): number { - return windows.reduce((max, w) => Math.max(max, w.usedPercent), 0); -} - function shortWindowLabel(kind: QuotaWindow["kind"]): string { return kind === "five-hour" ? "5h" : "7d"; } @@ -55,30 +47,37 @@ function formatUpdatedTime(fetchedAt?: number): string { return `${hours}:${minutes}`; } -export function formatProviderSegment(quota: ProviderQuota): string { - const code = PROVIDER_CODE[quota.provider]; - if (quota.state === "missing") return `${code} —`; - if (quota.state === "error") return `${code} !`; - const staleMarker = quota.state === "stale" ? "~" : ""; - const parts = quota.windows.map((w) => `${shortWindowLabel(w.kind)} ${Math.round(w.usedPercent)}%`); - return `${code}${staleMarker} ${parts.join(" · ")}`; +export function formatGauge(percent: number): string { + const filled = percent <= 0 ? 0 : Math.min(4, Math.ceil(percent / 25)); + return "▰".repeat(filled) + "▱".repeat(4 - filled); +} + +export function formatResetTime(resetsAt: number, weekly: boolean): string { + const date = new Date(resetsAt); + const time = `${date.getHours()}:${String(date.getMinutes()).padStart(2, "0")}`; + return weekly ? `${date.toLocaleDateString("en-US", { weekday: "short" })} ${time}` : time; +} + +function formatFooterWindow(window: QuotaWindow, label: boolean, stale: boolean, theme: ThemeLike): string { + const percent = `${window.usedPercent}%${stale ? "~" : ""}`; + const reset = window.resetsAt + ? ` ↻${label ? " " : " "}${formatResetTime(window.resetsAt, window.kind === "weekly")}` + : ""; + const prefix = label ? `${shortWindowLabel(window.kind)} ` : ""; + return `${theme.fg("dim", `${prefix}${formatGauge(window.usedPercent)} `)}${theme.fg(thresholdColor(window.usedPercent), percent)}${theme.fg("dim", reset)}`; } -export function formatFooter(snapshot: QuotaSnapshot, theme: ThemeLike): string { - const segments = [formatProviderSegment(snapshot.codex), formatProviderSegment(snapshot.kimi)]; - const codexPercent = snapshot.codex.windows.length > 0 ? maxUsedPercent(snapshot.codex.windows) : 0; - const kimiPercent = snapshot.kimi.windows.length > 0 ? maxUsedPercent(snapshot.kimi.windows) : 0; - const overallPercent = Math.max(codexPercent, kimiPercent); - const colored = segments.map((segment, index) => { - const q = index === 0 ? snapshot.codex : snapshot.kimi; - if (q.state === "missing" || q.state === "error") return theme.fg("dim", segment); - const providerPercent = maxUsedPercent(q.windows); - const color = thresholdColor(providerPercent); - return theme.fg(color, segment); - }); - // Use the overall threshold for the separator so the footer reads as a single quota block. - const separator = theme.fg(thresholdColor(overallPercent), " | "); - return colored.join(separator); +export function formatFooter(quota: ProviderQuota, mode: FooterMode, theme: ThemeLike): string { + if (quota.state === "missing") return theme.fg("dim", "—"); + if (quota.state === "error") return theme.fg("dim", "!"); + const fiveHour = quota.windows.find((window) => window.kind === "five-hour"); + if (!fiveHour) return theme.fg("dim", "—"); + const stale = quota.state === "stale"; + const fiveHourText = formatFooterWindow(fiveHour, mode === "full", stale, theme); + if (mode === "minimal") return fiveHourText; + const weekly = quota.windows.find((window) => window.kind === "weekly"); + if (!weekly) return fiveHourText; + return `${fiveHourText}${theme.fg("dim", " · ")}${formatFooterWindow(weekly, true, stale, theme)}`; } export function formatWidget(snapshot: QuotaSnapshot, theme: ThemeLike, nowMs: number): string[] { diff --git a/src/index.ts b/src/index.ts index fcb424f..8fd5033 100644 --- a/src/index.ts +++ b/src/index.ts @@ -7,6 +7,7 @@ import { getAuthStorage, type AuthStorageLike } from "./auth.js"; import { fetchCodexQuota } from "./codex.js"; import { formatFooter, formatWidget } from "./format.js"; import { fetchKimiQuota } from "./kimi.js"; +import { loadFooterMode, saveFooterMode, type FooterMode } from "./preferences.js"; import type { ProviderName, ProviderQuota, QuotaSnapshot } from "./types.js"; const STATUS_KEY = "pi-codex-kimi-usage"; @@ -108,9 +109,17 @@ function makeThemeLike(ctx: ExtensionContext["ui"]) { }; } +export function providerForModel(model: ExtensionContext["model"]): ProviderName | undefined { + const provider = model?.provider.toLowerCase(); + if (provider === "openai" || provider === "openai-codex") return "codex"; + if (provider === "kimi-coding") return "kimi"; + return undefined; +} + export function createPiCodexKimiUsage( pi: ExtensionAPI, storageOverride?: AuthStorageLike, + preferenceFile?: string, ) { const storage = storageOverride ?? getAuthStorage(); const coordinator = createCoordinator(storage, { @@ -119,10 +128,16 @@ export function createPiCodexKimiUsage( }); let widgetVisible = false; + let footerMode: FooterMode = "minimal"; - async function updateFooter(ctx: ExtensionContext["ui"]) { - const snapshot = coordinator.getSnapshot(); - ctx.setStatus(STATUS_KEY, formatFooter(snapshot, makeThemeLike(ctx))); + function updateFooter(ctx: ExtensionContext) { + const provider = providerForModel(ctx.model); + if (!provider) { + ctx.ui.setStatus(STATUS_KEY, undefined); + return; + } + const quota = coordinator.getSnapshot()[provider]; + ctx.ui.setStatus(STATUS_KEY, formatFooter(quota, footerMode, makeThemeLike(ctx.ui))); } function updateWidget(ctx: ExtensionContext["ui"]) { @@ -135,14 +150,15 @@ export function createPiCodexKimiUsage( } async function refreshAndRender(ctx: ExtensionContext, force: boolean) { - await coordinator.refreshAll(force); - await updateFooter(ctx.ui); - if (widgetVisible) { - updateWidget(ctx.ui); - } + const provider = providerForModel(ctx.model); + updateFooter(ctx); + if (provider) await coordinator.refresh(provider, force); + updateFooter(ctx); + if (widgetVisible) updateWidget(ctx.ui); } pi.on("session_start", async (_event, ctx) => { + footerMode = await loadFooterMode(preferenceFile); await refreshAndRender(ctx, true); }); @@ -150,8 +166,9 @@ export function createPiCodexKimiUsage( await refreshAndRender(ctx, false); }); - pi.on("model_select", async (_event, ctx) => { - await refreshAndRender(ctx, false); + pi.on("model_select", async (event, ctx) => { + const selectedContext = { ...ctx, model: event.model } as ExtensionContext; + await refreshAndRender(selectedContext, false); }); pi.on("session_shutdown", async (_event, ctx) => { @@ -161,17 +178,29 @@ export function createPiCodexKimiUsage( }); pi.registerCommand("quotas", { - description: "Toggle detailed Codex/Kimi quota widget", - handler: async (_args, ctx) => { + description: "Toggle details or set footer mode: minimal | full", + getArgumentCompletions: (prefix) => ["minimal", "full"] + .filter((value) => value.startsWith(prefix.trim())) + .map((value) => ({ value, label: value })), + handler: async (args, ctx) => { + const argument = args.trim(); + if (argument === "minimal" || argument === "full") { + footerMode = argument; + updateFooter(ctx); + await saveFooterMode(footerMode, preferenceFile); + return; + } + if (argument) { + ctx.ui.notify("Usage: /quotas [minimal|full]", "warning"); + return; + } if (ctx.mode !== "tui") { ctx.ui.notify("/quotas requires TUI mode", "warning"); return; } widgetVisible = !widgetVisible; - if (widgetVisible) { - await coordinator.refreshAll(true); - } - updateFooter(ctx.ui); + if (widgetVisible) await coordinator.refreshAll(true); + updateFooter(ctx); updateWidget(ctx.ui); }, }); diff --git a/src/preferences.ts b/src/preferences.ts new file mode 100644 index 0000000..d5f6727 --- /dev/null +++ b/src/preferences.ts @@ -0,0 +1,29 @@ +import { mkdir, readFile, rename, rm, writeFile } from "node:fs/promises"; +import { dirname, join } from "node:path"; +import { getAgentDir } from "@earendil-works/pi-coding-agent"; + +export type FooterMode = "minimal" | "full"; + +export function preferencePath(agentDir = getAgentDir()): string { + return join(agentDir, "pi-codex-kimi-usage.json"); +} + +export async function loadFooterMode(path = preferencePath()): Promise { + try { + const value = JSON.parse(await readFile(path, "utf8")) as { footerMode?: unknown }; + return value.footerMode === "full" ? "full" : "minimal"; + } catch { + return "minimal"; + } +} + +export async function saveFooterMode(mode: FooterMode, path = preferencePath()): Promise { + const temporary = `${path}.${process.pid}.${Date.now()}.tmp`; + try { + await mkdir(dirname(path), { recursive: true }); + await writeFile(temporary, `${JSON.stringify({ footerMode: mode })}\n`, { mode: 0o600 }); + await rename(temporary, path); + } catch { + await rm(temporary, { force: true }).catch(() => {}); + } +} diff --git a/tests/format.test.ts b/tests/format.test.ts index ae9e73c..e9e07be 100644 --- a/tests/format.test.ts +++ b/tests/format.test.ts @@ -1,100 +1,64 @@ import { describe, it } from "node:test"; import assert from "node:assert/strict"; -import { formatFooter, formatProviderSegment, formatWidget } from "../src/format.js"; +import { formatFooter, formatGauge, formatResetTime, formatWidget } from "../src/format.js"; import type { ProviderQuota, QuotaSnapshot } from "../src/types.js"; -const theme = { - fg: (color: string, text: string) => `[${color}:${text}]`, -}; +const theme = { fg: (color: string, text: string) => `[${color}:${text}]` }; +const plainTheme = { fg: (_color: string, text: string) => text }; function liveQuota(provider: ProviderQuota["provider"], five: number, weekly: number): ProviderQuota { return { - provider, - state: "live", - fetchedAt: 1752306000000, + provider, state: "live", fetchedAt: 1752306000000, plan: provider === "codex" ? "plus" : "Allegro", windows: [ - { kind: "five-hour", usedPercent: five, resetsAt: 1752313800000 }, - { kind: "weekly", usedPercent: weekly, resetsAt: 1752774000000 }, + { kind: "five-hour", usedPercent: five, resetsAt: new Date(2025, 6, 12, 3, 25).getTime() }, + { kind: "weekly", usedPercent: weekly, resetsAt: new Date(2025, 6, 13, 9, 0).getTime() }, ], }; } -describe("formatProviderSegment", () => { - it("formats a live provider", () => { - const segment = formatProviderSegment(liveQuota("codex", 24, 61)); - assert.equal(segment, "CX 5h 24% · 7d 61%"); +describe("footer gauges", () => { + it("buckets pressure into four truthful cells", () => { + assert.deepEqual([0, 1, 24, 25, 26, 50, 51, 72, 75, 76, 100].map(formatGauge), [ + "▱▱▱▱", "▰▱▱▱", "▰▱▱▱", "▰▱▱▱", "▰▰▱▱", "▰▰▱▱", + "▰▰▰▱", "▰▰▰▱", "▰▰▰▱", "▰▰▰▰", "▰▰▰▰", + ]); }); - it("marks stale data", () => { - const q = liveQuota("kimi", 18, 43); - q.state = "stale"; - assert.equal(formatProviderSegment(q), "KM~ 5h 18% · 7d 43%"); + it("renders exact minimal and full shapes", () => { + const quota = liveQuota("codex", 24, 15); + assert.equal(formatFooter(quota, "minimal", plainTheme), "▰▱▱▱ 24% ↻ 3:25"); + assert.equal(formatFooter(quota, "full", plainTheme), "5h ▰▱▱▱ 24% ↻ 3:25 · 7d ▰▱▱▱ 15% ↻ Sun 9:00"); }); - it("shows missing and error states", () => { - assert.equal(formatProviderSegment({ provider: "codex", state: "missing", windows: [] }), "CX —"); - assert.equal(formatProviderSegment({ provider: "kimi", state: "error", windows: [] }), "KM !"); - }); -}); - -describe("formatFooter", () => { - it("combines both providers", () => { - const snapshot: QuotaSnapshot = { - codex: liveQuota("codex", 24, 61), - kimi: liveQuota("kimi", 18, 43), - }; - const footer = formatFooter(snapshot, theme); - assert.ok(footer.includes("CX 5h 24% · 7d 61%")); - assert.ok(footer.includes("KM 5h 18% · 7d 43%")); + it("marks cached quota percentages as stale", () => { + const quota = liveQuota("kimi", 48, 35); + quota.state = "stale"; + assert.equal(formatFooter(quota, "minimal", plainTheme), "▰▰▱▱ 48%~ ↻ 3:25"); }); - it("uses warning color for 70-89%", () => { - const snapshot: QuotaSnapshot = { - codex: liveQuota("codex", 75, 50), - kimi: liveQuota("kimi", 10, 20), - }; - const footer = formatFooter(snapshot, theme); - assert.ok(footer.includes("[warning:")); + it("colors only exact percentages at thresholds", () => { + const warning = formatFooter(liveQuota("codex", 70, 89), "full", theme); + assert.ok(warning.includes("[warning:70%]")); + assert.ok(warning.includes("[warning:89%]")); + assert.ok(warning.includes("[dim:5h ▰▰▰▱ ]")); + assert.ok(!warning.includes("[warning:5h")); + assert.ok(formatFooter(liveQuota("codex", 69, 90), "full", theme).includes("[error:90%]")); }); - it("uses error color for 90%+", () => { - const snapshot: QuotaSnapshot = { - codex: liveQuota("codex", 95, 50), - kimi: liveQuota("kimi", 10, 20), - }; - const footer = formatFooter(snapshot, theme); - assert.ok(footer.includes("[error:")); + it("formats reset timestamps in local wall-clock time", () => { + assert.equal(formatResetTime(new Date(2025, 6, 12, 3, 5).getTime(), false), "3:05"); + assert.equal(formatResetTime(new Date(2025, 6, 13, 9, 0).getTime(), true), "Sun 9:00"); }); }); describe("formatWidget", () => { - it("renders provider headers and windows", () => { - const snapshot: QuotaSnapshot = { - codex: liveQuota("codex", 24, 61), - kimi: liveQuota("kimi", 18, 43), - }; - const lines = formatWidget(snapshot, theme, 1752306000000); - const text = lines.join("\n"); - assert.ok(text.includes("Quota usage")); + it("retains both provider details", () => { + const snapshot: QuotaSnapshot = { codex: liveQuota("codex", 24, 61), kimi: liveQuota("kimi", 18, 43) }; + const text = formatWidget(snapshot, theme, 1752306000000).join("\n"); assert.ok(text.includes("Codex")); assert.ok(text.includes("Kimi")); assert.ok(text.includes("24% used")); - assert.ok(text.includes("61% used")); assert.ok(text.includes("Run /quotas again to hide.")); }); - - it("renders missing credentials", () => { - const snapshot: QuotaSnapshot = { - codex: { - provider: "codex", - state: "missing", - windows: [], - error: "Codex credentials missing. Run /login openai-codex.", - }, - kimi: liveQuota("kimi", 18, 43), - }; - const lines = formatWidget(snapshot, theme, 1752306000000); - assert.equal(lines.filter((l) => /credentials missing/i.test(l)).length, 1); - }); }); diff --git a/tests/index.test.ts b/tests/index.test.ts index e3e8763..5c0da5b 100644 --- a/tests/index.test.ts +++ b/tests/index.test.ts @@ -1,6 +1,9 @@ import { describe, it } from "node:test"; import assert from "node:assert/strict"; -import { createPiCodexKimiUsage } from "../src/index.js"; +import { mkdtemp, readFile, rm } from "node:fs/promises"; +import { join } from "node:path"; +import { tmpdir } from "node:os"; +import { createPiCodexKimiUsage, providerForModel } from "../src/index.js"; import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent"; import type { AuthStorageLike } from "../src/auth.js"; import codexUsage from "./fixtures/codex-usage.json" with { type: "json" }; @@ -28,7 +31,7 @@ function withMockFetch(fn: () => Promise): () => Promise { }; } -function fakeAPI() { +function fakeAPI(provider = "openai-codex") { const handlers: Record Promise)[]> = {}; const status: Record = {}; const widgets: Record = {}; @@ -36,6 +39,7 @@ function fakeAPI() { const ctx: ExtensionContext = { mode: "tui", + model: { provider, id: "test-model" } as ExtensionContext["model"], ui: { setStatus: (key: string, text: string | undefined) => { status[key] = text; @@ -74,6 +78,13 @@ function fakeAPI() { } describe("createPiCodexKimiUsage", () => { + it("routes supported model families and rejects unsupported providers", () => { + assert.equal(providerForModel({ provider: "openai", id: "gpt" } as ExtensionContext["model"]), "codex"); + assert.equal(providerForModel({ provider: "openai-codex", id: "gpt" } as ExtensionContext["model"]), "codex"); + assert.equal(providerForModel({ provider: "kimi-coding", id: "kimi" } as ExtensionContext["model"]), "kimi"); + assert.equal(providerForModel({ provider: "anthropic", id: "claude" } as ExtensionContext["model"]), undefined); + }); + it("registers /quotas and not /usage", () => { fakeAPI(); const registered: string[] = []; @@ -95,6 +106,9 @@ describe("createPiCodexKimiUsage", () => { createPiCodexKimiUsage(f.api, fakeStorage()); await f.fire("session_start", { type: "session_start", reason: "startup" }); assert.ok(f.status["pi-codex-kimi-usage"], "status should be set"); + f.ctx.model = { provider: "anthropic", id: "claude" } as ExtensionContext["model"]; + await f.fire("model_select", { type: "model_select", model: f.ctx.model, source: "set" }); + assert.equal(f.status["pi-codex-kimi-usage"], undefined); }), ); @@ -122,6 +136,36 @@ describe("createPiCodexKimiUsage", () => { } }); + it("switches provider footer immediately", async () => { + const original = globalThis.fetch; + globalThis.fetch = (async (url) => new Response(JSON.stringify(String(url).includes("chatgpt.com") ? codexUsage : kimiUsage))) as typeof fetch; + try { + const f = fakeAPI("openai-codex"); + const storage = { ...fakeStorage(), get: (provider: string) => provider === "openai-codex" + ? { type: "oauth", access: "token", accountId: "acc-1" } + : { type: "api_key", key: "token" } } as unknown as AuthStorageLike; + createPiCodexKimiUsage(f.api, storage); + await f.fire("session_start", {}); + const codexFooter = f.status["pi-codex-kimi-usage"]; + f.ctx.model = { provider: "kimi-coding", id: "kimi" } as ExtensionContext["model"]; + await f.fire("model_select", { model: f.ctx.model }); + assert.notEqual(f.status["pi-codex-kimi-usage"], codexFooter); + assert.ok(f.status["pi-codex-kimi-usage"]?.includes("18")); + } finally { globalThis.fetch = original; } + }); + + it("changes and atomically persists footer mode", async () => { + const dir = await mkdtemp(join(tmpdir(), "quota-mode-")); + const path = join(dir, "preference.json"); + try { + const f = fakeAPI(); + createPiCodexKimiUsage(f.api, fakeStorage(), path); + await f.commands.quotas!.handler("full", f.ctx); + assert.deepEqual(JSON.parse(await readFile(path, "utf8")), { footerMode: "full" }); + assert.ok(f.status["pi-codex-kimi-usage"]); + } finally { await rm(dir, { recursive: true, force: true }); } + }); + it( "cleans up on session_shutdown", withMockFetch(async () => { diff --git a/tests/preferences.test.ts b/tests/preferences.test.ts new file mode 100644 index 0000000..954f79d --- /dev/null +++ b/tests/preferences.test.ts @@ -0,0 +1,26 @@ +import { describe, it } from "node:test"; +import assert from "node:assert/strict"; +import { mkdtemp, rm, writeFile } from "node:fs/promises"; +import { join } from "node:path"; +import { tmpdir } from "node:os"; +import { loadFooterMode, saveFooterMode } from "../src/preferences.js"; + +describe("footer preferences", () => { + it("defaults to minimal and round-trips full", async () => { + const dir = await mkdtemp(join(tmpdir(), "quota-preference-")); + const path = join(dir, "mode.json"); + try { + assert.equal(await loadFooterMode(path), "minimal"); + await saveFooterMode("full", path); + assert.equal(await loadFooterMode(path), "full"); + await writeFile(path, "invalid"); + assert.equal(await loadFooterMode(path), "minimal"); + } finally { + await rm(dir, { recursive: true, force: true }); + } + }); + + it("contains write failures", async () => { + await assert.doesNotReject(saveFooterMode("full", "/dev/null/preference.json")); + }); +}); -- 2.51.2 From 41e671bcf5d43e16dfcf44cc8e02a56adadc91ac Mon Sep 17 00:00:00 2001 From: Iury Souza Date: Sun, 12 Jul 2026 13:55:47 +0200 Subject: [PATCH 03/19] feat: add extensible quota provider registry --- README.md | 10 +++ package-lock.json | 4 +- package.json | 2 +- src/codex.ts | 15 +++-- src/format.ts | 61 +++++++++--------- src/index.ts | 117 +++++++++++++---------------------- src/kimi.ts | 15 +++-- src/providers.ts | 32 ++++++++++ src/types.ts | 31 +++++++--- tests/codex.test.ts | 4 +- tests/coordinator.test.ts | 126 ++++++++++++++++++-------------------- tests/format.test.ts | 7 ++- tests/index.test.ts | 22 +++++++ tests/kimi.test.ts | 4 +- 14 files changed, 251 insertions(+), 199 deletions(-) create mode 100644 src/providers.ts diff --git a/README.md b/README.md index b965784..fa950d6 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,16 @@ Footer mode defaults to `minimal` and is stored globally in `pi-codex-kimi-usage Quota refreshes on session start and after each turn or model switch when its cache is older than five minutes. Model switches immediately route the footer to the selected provider. Opening bare `/quotas` forces both providers to refresh. +## Adding providers + +Providers are registered in `src/providers.ts` through the exported `QuotaProvider` contract. An adapter supplies its ID and label, active-model matcher, quota fetcher, credential hint, and the window IDs used by minimal/full footer modes. The coordinator, cache, stale-data handling, model routing, and `/quotas` widget derive from that registry. + +Provider fetchers normalize API responses into labeled `QuotaWindow` values, so new window types such as monthly limits require no formatter changes. + +### OpenCode Go + +OpenCode Go support is waiting for an official API-key-authenticated usage endpoint. The proposed `/zen/go/v1/usage` endpoint is not merged upstream; current alternatives require scraping console HTML with an expiring browser cookie. Once the official endpoint ships, Go can be added as one adapter with 5-hour, weekly, and monthly windows. + ## Privacy and security - Only direct read-only quota endpoints are used. diff --git a/package-lock.json b/package-lock.json index cbd6ef4..6d4afa8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pi-codex-kimi-usage", - "version": "0.2.0", + "version": "0.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pi-codex-kimi-usage", - "version": "0.2.0", + "version": "0.3.0", "license": "MIT", "devDependencies": { "@earendil-works/pi-coding-agent": "^0.80.6", diff --git a/package.json b/package.json index 35bd1cd..2868012 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pi-codex-kimi-usage", - "version": "0.2.0", + "version": "0.3.0", "description": "Pi footer quota status for OpenAI Codex and Kimi Coding subscriptions", "license": "MIT", "author": "Iury Souza", diff --git a/src/codex.ts b/src/codex.ts index 1596989..590c86f 100644 --- a/src/codex.ts +++ b/src/codex.ts @@ -33,7 +33,10 @@ function clampPercent(value: number): number { return Math.max(0, Math.min(100, value)); } -function parseWindow(value: unknown, kind: QuotaWindow["kind"]): QuotaWindow | undefined { +function parseWindow( + value: unknown, + window: Pick, +): QuotaWindow | undefined { if (!value || typeof value !== "object" || Array.isArray(value)) return undefined; const record = value as Record; const usedPercent = toNumber(record.used_percent); @@ -46,7 +49,7 @@ function parseWindow(value: unknown, kind: QuotaWindow["kind"]): QuotaWindow | u ? resetRaw * 1000 : resetRaw; return { - kind, + ...window, usedPercent: clampPercent(usedPercent), resetsAt, }; @@ -57,8 +60,12 @@ function parseCodexBody(body: unknown): Omit = { - codex: "Codex", - kimi: "Kimi", -}; - function thresholdColor(percent: number): "success" | "warning" | "error" { if (percent >= 90) return "error"; if (percent >= 70) return "warning"; return "success"; } -function shortWindowLabel(kind: QuotaWindow["kind"]): string { - return kind === "five-hour" ? "5h" : "7d"; -} - -function longWindowLabel(kind: QuotaWindow["kind"]): string { - return kind === "five-hour" ? "5h" : "Weekly"; -} - function formatResetDuration(deltaMs: number): string { if (deltaMs <= 0) return "soon"; const minutes = Math.floor(deltaMs / 60_000); @@ -61,33 +48,45 @@ export function formatResetTime(resetsAt: number, weekly: boolean): string { function formatFooterWindow(window: QuotaWindow, label: boolean, stale: boolean, theme: ThemeLike): string { const percent = `${window.usedPercent}%${stale ? "~" : ""}`; const reset = window.resetsAt - ? ` ↻${label ? " " : " "}${formatResetTime(window.resetsAt, window.kind === "weekly")}` + ? ` ↻${label ? " " : " "}${formatResetTime(window.resetsAt, window.resetStyle === "weekday-time")}` : ""; - const prefix = label ? `${shortWindowLabel(window.kind)} ` : ""; + const prefix = label ? `${window.shortLabel} ` : ""; return `${theme.fg("dim", `${prefix}${formatGauge(window.usedPercent)} `)}${theme.fg(thresholdColor(window.usedPercent), percent)}${theme.fg("dim", reset)}`; } -export function formatFooter(quota: ProviderQuota, mode: FooterMode, theme: ThemeLike): string { +export function formatFooter( + quota: ProviderQuota, + mode: FooterMode, + theme: ThemeLike, + windowIds?: readonly string[], +): string { if (quota.state === "missing") return theme.fg("dim", "—"); if (quota.state === "error") return theme.fg("dim", "!"); - const fiveHour = quota.windows.find((window) => window.kind === "five-hour"); - if (!fiveHour) return theme.fg("dim", "—"); + const ids = windowIds ?? quota.windows.slice(0, mode === "minimal" ? 1 : 2).map((window) => window.id); + const windows = ids + .map((id) => quota.windows.find((window) => window.id === id)) + .filter((window): window is QuotaWindow => Boolean(window)); + if (windows.length === 0) return theme.fg("dim", "—"); const stale = quota.state === "stale"; - const fiveHourText = formatFooterWindow(fiveHour, mode === "full", stale, theme); - if (mode === "minimal") return fiveHourText; - const weekly = quota.windows.find((window) => window.kind === "weekly"); - if (!weekly) return fiveHourText; - return `${fiveHourText}${theme.fg("dim", " · ")}${formatFooterWindow(weekly, true, stale, theme)}`; + return windows + .map((window) => formatFooterWindow(window, mode === "full", stale, theme)) + .join(theme.fg("dim", " · ")); } -export function formatWidget(snapshot: QuotaSnapshot, theme: ThemeLike, nowMs: number): string[] { +export function formatWidget( + snapshot: QuotaSnapshot, + registry: readonly QuotaProvider[], + theme: ThemeLike, + nowMs: number, +): string[] { const lines: string[] = []; lines.push(theme.fg("accent", "Quota usage")); lines.push(""); - const providers: ProviderQuota[] = [snapshot.codex, snapshot.kimi]; - for (const q of providers) { - const label = PROVIDER_LABEL[q.provider]; + for (const provider of registry) { + const q = snapshot[provider.id]; + if (!q) continue; + const label = provider.label; const plan = q.plan ?? "—"; const state = q.state; lines.push( @@ -95,12 +94,12 @@ export function formatWidget(snapshot: QuotaSnapshot, theme: ThemeLike, nowMs: n ); if (q.state === "missing") { - lines.push(theme.fg("dim", ` Credentials missing. Run /login ${q.provider === "codex" ? "openai-codex" : "kimi-coding"}.`)); + lines.push(theme.fg("dim", ` Credentials missing. ${provider.credentialsHint}`)); } else if (q.state === "error" && q.error) { lines.push(theme.fg("error", ` ${q.error}`)); } else { for (const w of q.windows) { - const labelText = longWindowLabel(w.kind).padEnd(7); + const labelText = w.longLabel.padEnd(7); const percentText = `${Math.round(w.usedPercent)}% used`; const resetText = w.resetsAt ? `resets ${formatResetDuration(w.resetsAt - nowMs)}` : ""; const color = thresholdColor(w.usedPercent); @@ -117,7 +116,7 @@ export function formatWidget(snapshot: QuotaSnapshot, theme: ThemeLike, nowMs: n lines.push(""); } - const updated = formatUpdatedTime(snapshot.codex.fetchedAt ?? snapshot.kimi.fetchedAt); + const updated = formatUpdatedTime(registry.map((provider) => snapshot[provider.id]?.fetchedAt).find(Boolean)); lines.push(theme.fg("dim", `Updated ${updated}`)); lines.push(theme.fg("dim", "Run /quotas again to hide.")); diff --git a/src/index.ts b/src/index.ts index 8fd5033..9310959 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,39 +4,34 @@ import type { } from "@earendil-works/pi-coding-agent"; import { getAuthStorage, type AuthStorageLike } from "./auth.js"; -import { fetchCodexQuota } from "./codex.js"; import { formatFooter, formatWidget } from "./format.js"; -import { fetchKimiQuota } from "./kimi.js"; import { loadFooterMode, saveFooterMode, type FooterMode } from "./preferences.js"; -import type { ProviderName, ProviderQuota, QuotaSnapshot } from "./types.js"; +import { providerForModel as findProviderForModel, providers } from "./providers.js"; +import type { ProviderId, ProviderQuota, QuotaProvider, QuotaSnapshot } from "./types.js"; const STATUS_KEY = "pi-codex-kimi-usage"; const WIDGET_KEY = "pi-codex-kimi-usage"; const FRESHNESS_MS = 5 * 60 * 1000; -type Fetcher = (storage: AuthStorageLike) => Promise; - interface CacheEntry { data?: ProviderQuota; inflight?: Promise; } -export function createCoordinator(storage: AuthStorageLike, fetchers: Record) { - const caches: Record = { - codex: {}, - kimi: {}, - }; +export function createCoordinator(storage: AuthStorageLike, registry: readonly QuotaProvider[]) { + const caches = new Map(registry.map((provider) => [provider.id, {}])); + const providerById = new Map(registry.map((provider) => [provider.id, provider])); - async function refresh(provider: ProviderName, force: boolean): Promise { - const cache = caches[provider]!; + async function refresh(providerId: ProviderId, force: boolean): Promise { + const provider = providerById.get(providerId); + const cache = caches.get(providerId); + if (!provider || !cache) throw new Error(`Unknown quota provider: ${providerId}`); if (!force && cache.data?.fetchedAt && Date.now() - cache.data.fetchedAt < FRESHNESS_MS) { return cache.data; } - if (cache.inflight) { - return cache.inflight; - } + if (cache.inflight) return cache.inflight; - cache.inflight = fetchers[provider]!(storage) + cache.inflight = provider.fetch(storage) .then((quota) => { const previous = cache.data; if ( @@ -44,11 +39,7 @@ export function createCoordinator(storage: AuthStorageLike, fetchers: Record { const previous = cache.data; - if (previous && (previous.state === "live" || previous.state === "stale")) { - cache.data = { - ...previous, - state: "stale", - error: "Unexpected quota refresh failure.", - }; - } else { - cache.data = { - provider, - state: "error", - windows: [], - error: "Unexpected quota refresh failure.", - }; - } + cache.data = previous && (previous.state === "live" || previous.state === "stale") + ? { ...previous, state: "stale", error: "Unexpected quota refresh failure." } + : { provider: providerId, state: "error", windows: [], error: "Unexpected quota refresh failure." }; cache.inflight = undefined; return cache.data; }); - return cache.inflight; } async function refreshAll(force: boolean): Promise { - const [codex, kimi] = await Promise.all([ - refresh("codex", force), - refresh("kimi", force), - ]); - return { codex, kimi }; + await Promise.all(registry.map((provider) => refresh(provider.id, force))); + return getSnapshot(); } function getSnapshot(): QuotaSnapshot { - return { - codex: caches.codex.data ?? { provider: "codex", state: "missing", windows: [] }, - kimi: caches.kimi.data ?? { provider: "kimi", state: "missing", windows: [] }, - }; + return Object.fromEntries(registry.map((provider) => [ + provider.id, + caches.get(provider.id)?.data ?? { provider: provider.id, state: "missing", windows: [] }, + ])); } function clear(): void { - caches.codex.data = undefined; - caches.codex.inflight = undefined; - caches.kimi.data = undefined; - caches.kimi.inflight = undefined; + for (const cache of caches.values()) { + cache.data = undefined; + cache.inflight = undefined; + } } return { refresh, refreshAll, getSnapshot, clear }; @@ -109,35 +85,32 @@ function makeThemeLike(ctx: ExtensionContext["ui"]) { }; } -export function providerForModel(model: ExtensionContext["model"]): ProviderName | undefined { - const provider = model?.provider.toLowerCase(); - if (provider === "openai" || provider === "openai-codex") return "codex"; - if (provider === "kimi-coding") return "kimi"; - return undefined; +export function providerForModel(model: ExtensionContext["model"]): ProviderId | undefined { + return findProviderForModel(model)?.id; } export function createPiCodexKimiUsage( pi: ExtensionAPI, storageOverride?: AuthStorageLike, preferenceFile?: string, + registry: readonly QuotaProvider[] = providers, ) { const storage = storageOverride ?? getAuthStorage(); - const coordinator = createCoordinator(storage, { - codex: fetchCodexQuota, - kimi: fetchKimiQuota, - }); - + const coordinator = createCoordinator(storage, registry); let widgetVisible = false; let footerMode: FooterMode = "minimal"; function updateFooter(ctx: ExtensionContext) { - const provider = providerForModel(ctx.model); + const provider = findProviderForModel(ctx.model, registry); if (!provider) { ctx.ui.setStatus(STATUS_KEY, undefined); return; } - const quota = coordinator.getSnapshot()[provider]; - ctx.ui.setStatus(STATUS_KEY, formatFooter(quota, footerMode, makeThemeLike(ctx.ui))); + const quota = coordinator.getSnapshot()[provider.id]; + ctx.ui.setStatus( + STATUS_KEY, + formatFooter(quota, footerMode, makeThemeLike(ctx.ui), provider.footerWindows[footerMode]), + ); } function updateWidget(ctx: ExtensionContext["ui"]) { @@ -145,14 +118,13 @@ export function createPiCodexKimiUsage( ctx.setWidget(WIDGET_KEY, undefined); return; } - const snapshot = coordinator.getSnapshot(); - ctx.setWidget(WIDGET_KEY, formatWidget(snapshot, makeThemeLike(ctx), Date.now())); + ctx.setWidget(WIDGET_KEY, formatWidget(coordinator.getSnapshot(), registry, makeThemeLike(ctx), Date.now())); } async function refreshAndRender(ctx: ExtensionContext, force: boolean) { - const provider = providerForModel(ctx.model); + const provider = findProviderForModel(ctx.model, registry); updateFooter(ctx); - if (provider) await coordinator.refresh(provider, force); + if (provider) await coordinator.refresh(provider.id, force); updateFooter(ctx); if (widgetVisible) updateWidget(ctx.ui); } @@ -161,16 +133,10 @@ export function createPiCodexKimiUsage( footerMode = await loadFooterMode(preferenceFile); await refreshAndRender(ctx, true); }); - - pi.on("turn_end", async (_event, ctx) => { - await refreshAndRender(ctx, false); - }); - + pi.on("turn_end", async (_event, ctx) => refreshAndRender(ctx, false)); pi.on("model_select", async (event, ctx) => { - const selectedContext = { ...ctx, model: event.model } as ExtensionContext; - await refreshAndRender(selectedContext, false); + await refreshAndRender({ ...ctx, model: event.model } as ExtensionContext, false); }); - pi.on("session_shutdown", async (_event, ctx) => { ctx.ui.setStatus(STATUS_KEY, undefined); ctx.ui.setWidget(WIDGET_KEY, undefined); @@ -206,6 +172,9 @@ export function createPiCodexKimiUsage( }); } +export { providers } from "./providers.js"; +export type { QuotaProvider } from "./types.js"; + export default function piCodexKimiUsage(pi: ExtensionAPI) { return createPiCodexKimiUsage(pi); } diff --git a/src/kimi.ts b/src/kimi.ts index 4bc4b6d..b321813 100644 --- a/src/kimi.ts +++ b/src/kimi.ts @@ -62,7 +62,10 @@ function clampPercent(value: number): number { return Math.max(0, Math.min(100, value)); } -function parseUsageRow(value: unknown, kind: QuotaWindow["kind"]): QuotaWindow | undefined { +function parseUsageRow( + value: unknown, + window: Pick, +): QuotaWindow | undefined { if (!value || typeof value !== "object" || Array.isArray(value)) return undefined; const record = value as Record; const limit = toNumber(record.limit); @@ -75,7 +78,7 @@ function parseUsageRow(value: unknown, kind: QuotaWindow["kind"]): QuotaWindow | resetsAt = parseDate(record[key]); if (resetsAt !== undefined) break; } - return { kind, usedPercent, used, limit, resetsAt }; + return { ...window, usedPercent, used, limit, resetsAt }; } function parseMembership(record: Record): string | undefined { @@ -93,7 +96,9 @@ function parseKimiBody(body: unknown): Omit; - const weekly = parseUsageRow(record.usage, "weekly"); + const weekly = parseUsageRow(record.usage, { + id: "weekly", shortLabel: "7d", longLabel: "Weekly", resetStyle: "weekday-time", + }); if (!weekly) { throw new Error("Invalid Kimi usage response: missing weekly usage"); } @@ -122,7 +127,9 @@ function parseKimiBody(body: unknown): Omit { + const provider = model?.provider.toLowerCase(); + return provider === "openai" || provider === "openai-codex"; + }, + fetch: fetchCodexQuota, + credentialsHint: "Run /login openai-codex.", + footerWindows: { minimal: ["five-hour"], full: ["five-hour", "weekly"] }, + }, + { + id: "kimi", + label: "Kimi", + matchesModel: (model) => model?.provider.toLowerCase() === "kimi-coding", + fetch: fetchKimiQuota, + credentialsHint: "Run /login kimi-coding or set KIMI_API_KEY.", + footerWindows: { minimal: ["five-hour"], full: ["five-hour", "weekly"] }, + }, +]; + +export function providerForModel( + model: Parameters[0], + registry: readonly QuotaProvider[] = providers, +): QuotaProvider | undefined { + return registry.find((provider) => provider.matchesModel(model)); +} diff --git a/src/types.ts b/src/types.ts index 6d948bc..c13c75f 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,24 +1,39 @@ -export type ProviderName = "codex" | "kimi"; +import type { ExtensionContext } from "@earendil-works/pi-coding-agent"; +import type { AuthStorageLike } from "./auth.js"; + +export type ProviderId = string; export type QuotaState = "live" | "stale" | "missing" | "error"; export interface QuotaWindow { - kind: "five-hour" | "weekly"; + id: string; + shortLabel: string; + longLabel: string; + resetStyle: "time" | "weekday-time"; usedPercent: number; used?: number; limit?: number; - resetsAt?: number; // Unix milliseconds + resetsAt?: number; } export interface ProviderQuota { - provider: ProviderName; + provider: ProviderId; state: QuotaState; fetchedAt?: number; plan?: string; windows: QuotaWindow[]; - error?: string; // sanitized, user-facing only + error?: string; } -export interface QuotaSnapshot { - codex: ProviderQuota; - kimi: ProviderQuota; +export type QuotaSnapshot = Record; + +export interface QuotaProvider { + id: ProviderId; + label: string; + matchesModel(model: ExtensionContext["model"]): boolean; + fetch(storage: AuthStorageLike): Promise; + credentialsHint: string; + footerWindows: { + minimal: string[]; + full: string[]; + }; } diff --git a/tests/codex.test.ts b/tests/codex.test.ts index 68ef380..b075e59 100644 --- a/tests/codex.test.ts +++ b/tests/codex.test.ts @@ -44,9 +44,9 @@ describe("fetchCodexQuota", () => { assert.equal(quota.state, "live"); assert.equal(quota.plan, "plus"); assert.equal(quota.windows.length, 2); - assert.equal(quota.windows[0]?.kind, "five-hour"); + assert.equal(quota.windows[0]?.id, "five-hour"); assert.equal(quota.windows[0]?.usedPercent, 24); - assert.equal(quota.windows[1]?.kind, "weekly"); + assert.equal(quota.windows[1]?.id, "weekly"); assert.equal(quota.windows[1]?.usedPercent, 61); } finally { restore(); diff --git a/tests/coordinator.test.ts b/tests/coordinator.test.ts index 2f49a05..856d20d 100644 --- a/tests/coordinator.test.ts +++ b/tests/coordinator.test.ts @@ -2,113 +2,103 @@ import { describe, it } from "node:test"; import assert from "node:assert/strict"; import { createCoordinator } from "../src/index.js"; import type { AuthStorageLike } from "../src/auth.js"; -import type { ProviderName, ProviderQuota } from "../src/types.js"; +import type { ProviderId, ProviderQuota, QuotaProvider } from "../src/types.js"; function mockStorage(): AuthStorageLike { return { - getApiKey: async () => "token", - get: () => undefined, - reload: () => {}, - getOAuthProviders: () => [], - set: () => {}, + getApiKey: async () => "token", get: () => undefined, reload: () => {}, + getOAuthProviders: () => [], set: () => {}, } as unknown as AuthStorageLike; } -function live(provider: ProviderName, percent: number): ProviderQuota { +function live(provider: ProviderId, percent: number): ProviderQuota { return { - provider, - state: "live", - fetchedAt: Date.now(), + provider, state: "live", fetchedAt: Date.now(), windows: [ - { kind: "five-hour", usedPercent: percent }, - { kind: "weekly", usedPercent: percent }, + { id: "five-hour", shortLabel: "5h", longLabel: "5h", resetStyle: "time", usedPercent: percent }, + { id: "weekly", shortLabel: "7d", longLabel: "Weekly", resetStyle: "weekday-time", usedPercent: percent }, ], }; } +function adapter(id: string, fetch: QuotaProvider["fetch"]): QuotaProvider { + return { + id, label: id, matchesModel: (model) => model?.provider === id, fetch, + credentialsHint: `Configure ${id}.`, + footerWindows: { minimal: ["five-hour"], full: ["five-hour", "weekly"] }, + }; +} + +function registry(codexFetch: QuotaProvider["fetch"], kimiFetch: QuotaProvider["fetch"]): QuotaProvider[] { + return [adapter("codex", codexFetch), adapter("kimi", kimiFetch)]; +} + describe("createCoordinator", () => { - it("fetches both providers on refreshAll", async () => { - const c = createCoordinator(mockStorage(), { - codex: async () => live("codex", 10), - kimi: async () => live("kimi", 20), - }); + it("fetches every registered provider", async () => { + const c = createCoordinator(mockStorage(), registry( + async () => live("codex", 10), async () => live("kimi", 20), + )); + const snapshot = await c.refreshAll(true); + assert.equal(snapshot.codex?.windows[0]?.usedPercent, 10); + assert.equal(snapshot.kimi?.state, "live"); + }); + + it("supports adding a provider without coordinator changes", async () => { + const c = createCoordinator(mockStorage(), [adapter("future", async () => live("future", 30))]); const snapshot = await c.refreshAll(true); - assert.equal(snapshot.codex.state, "live"); - assert.equal(snapshot.kimi.state, "live"); - assert.equal(snapshot.codex.windows[0]?.usedPercent, 10); + assert.equal(snapshot.future?.windows[0]?.usedPercent, 30); }); it("deduplicates concurrent refreshes", async () => { let calls = 0; - const c = createCoordinator(mockStorage(), { - codex: async () => { - calls++; - await new Promise((r) => setTimeout(r, 20)); - return live("codex", 10); - }, - kimi: async () => live("kimi", 20), - }); + const c = createCoordinator(mockStorage(), [adapter("codex", async () => { + calls++; + await new Promise((resolve) => setTimeout(resolve, 20)); + return live("codex", 10); + })]); const [a, b] = await Promise.all([c.refresh("codex", true), c.refresh("codex", true)]); assert.equal(calls, 1); assert.equal(a.state, "live"); assert.equal(b.state, "live"); }); - it("uses cache when fresh and not forced", async () => { + it("uses fresh cache", async () => { let calls = 0; - const c = createCoordinator(mockStorage(), { - codex: async () => { - calls++; - return live("codex", 10); - }, - kimi: async () => live("kimi", 20), - }); + const c = createCoordinator(mockStorage(), [adapter("codex", async () => { + calls++; + return live("codex", 10); + })]); await c.refreshAll(true); - const snapshot = await c.refreshAll(false); + await c.refreshAll(false); assert.equal(calls, 1); - assert.equal(snapshot.codex.windows[0]?.usedPercent, 10); }); - it("keeps last-good data as stale when a client returns an error state", async () => { + it("keeps last-good data as stale", async () => { let succeed = true; - const c = createCoordinator(mockStorage(), { - codex: async () => { - if (succeed) return live("codex", 10); - return { provider: "codex", state: "error", windows: [], error: "network down" }; - }, - kimi: async () => live("kimi", 20), - }); + const c = createCoordinator(mockStorage(), [adapter("codex", async () => succeed + ? live("codex", 10) + : { provider: "codex", state: "error", windows: [], error: "network down" })]); await c.refreshAll(true); succeed = false; const snapshot = await c.refreshAll(true); - assert.equal(snapshot.codex.state, "stale"); - assert.equal(snapshot.codex.windows[0]?.usedPercent, 10); - assert.equal(snapshot.codex.error, "network down"); - assert.equal(snapshot.kimi.state, "live"); + assert.equal(snapshot.codex?.state, "stale"); + assert.equal(snapshot.codex?.error, "network down"); }); - it("one provider failure does not discard the other", async () => { - const c = createCoordinator(mockStorage(), { - codex: async () => { - throw new Error("secret-bearing unexpected failure"); - }, - kimi: async () => live("kimi", 20), - }); + it("isolates provider failures", async () => { + const c = createCoordinator(mockStorage(), registry( + async () => { throw new Error("secret-bearing failure"); }, + async () => live("kimi", 20), + )); const snapshot = await c.refreshAll(true); - assert.equal(snapshot.codex.state, "error"); - assert.equal(snapshot.codex.error, "Unexpected quota refresh failure."); - assert.equal(snapshot.kimi.state, "live"); + assert.equal(snapshot.codex?.error, "Unexpected quota refresh failure."); + assert.equal(snapshot.kimi?.state, "live"); }); - it("clears caches on clear", async () => { - const c = createCoordinator(mockStorage(), { - codex: async () => live("codex", 10), - kimi: async () => live("kimi", 20), - }); + it("clears dynamic caches", async () => { + const c = createCoordinator(mockStorage(), [adapter("future", async () => live("future", 30))]); await c.refreshAll(true); c.clear(); - const snapshot = c.getSnapshot(); - assert.equal(snapshot.codex.state, "missing"); - assert.equal(snapshot.kimi.state, "missing"); + assert.equal(c.getSnapshot().future?.state, "missing"); }); }); diff --git a/tests/format.test.ts b/tests/format.test.ts index e9e07be..ba5af03 100644 --- a/tests/format.test.ts +++ b/tests/format.test.ts @@ -1,6 +1,7 @@ import { describe, it } from "node:test"; import assert from "node:assert/strict"; import { formatFooter, formatGauge, formatResetTime, formatWidget } from "../src/format.js"; +import { providers } from "../src/providers.js"; import type { ProviderQuota, QuotaSnapshot } from "../src/types.js"; const theme = { fg: (color: string, text: string) => `[${color}:${text}]` }; @@ -11,8 +12,8 @@ function liveQuota(provider: ProviderQuota["provider"], five: number, weekly: nu provider, state: "live", fetchedAt: 1752306000000, plan: provider === "codex" ? "plus" : "Allegro", windows: [ - { kind: "five-hour", usedPercent: five, resetsAt: new Date(2025, 6, 12, 3, 25).getTime() }, - { kind: "weekly", usedPercent: weekly, resetsAt: new Date(2025, 6, 13, 9, 0).getTime() }, + { id: "five-hour", shortLabel: "5h", longLabel: "5h", resetStyle: "time", usedPercent: five, resetsAt: new Date(2025, 6, 12, 3, 25).getTime() }, + { id: "weekly", shortLabel: "7d", longLabel: "Weekly", resetStyle: "weekday-time", usedPercent: weekly, resetsAt: new Date(2025, 6, 13, 9, 0).getTime() }, ], }; } @@ -55,7 +56,7 @@ describe("footer gauges", () => { describe("formatWidget", () => { it("retains both provider details", () => { const snapshot: QuotaSnapshot = { codex: liveQuota("codex", 24, 61), kimi: liveQuota("kimi", 18, 43) }; - const text = formatWidget(snapshot, theme, 1752306000000).join("\n"); + const text = formatWidget(snapshot, providers, theme, 1752306000000).join("\n"); assert.ok(text.includes("Codex")); assert.ok(text.includes("Kimi")); assert.ok(text.includes("24% used")); diff --git a/tests/index.test.ts b/tests/index.test.ts index 5c0da5b..42eb555 100644 --- a/tests/index.test.ts +++ b/tests/index.test.ts @@ -6,6 +6,7 @@ import { tmpdir } from "node:os"; import { createPiCodexKimiUsage, providerForModel } from "../src/index.js"; import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent"; import type { AuthStorageLike } from "../src/auth.js"; +import type { QuotaProvider } from "../src/types.js"; import codexUsage from "./fixtures/codex-usage.json" with { type: "json" }; import kimiUsage from "./fixtures/kimi-usage.json" with { type: "json" }; @@ -85,6 +86,27 @@ describe("createPiCodexKimiUsage", () => { assert.equal(providerForModel({ provider: "anthropic", id: "claude" } as ExtensionContext["model"]), undefined); }); + it("routes and renders an injected provider adapter", async () => { + const future: QuotaProvider = { + id: "future", + label: "Future", + matchesModel: (model) => model?.provider === "future", + fetch: async () => ({ + provider: "future", state: "live", fetchedAt: Date.now(), + windows: [{ + id: "monthly", shortLabel: "30d", longLabel: "Monthly", + resetStyle: "weekday-time", usedPercent: 42, + }], + }), + credentialsHint: "Configure Future.", + footerWindows: { minimal: ["monthly"], full: ["monthly"] }, + }; + const f = fakeAPI("future"); + createPiCodexKimiUsage(f.api, fakeStorage(), undefined, [future]); + await f.fire("session_start", {}); + assert.ok(f.status["pi-codex-kimi-usage"]?.includes("42%")); + }); + it("registers /quotas and not /usage", () => { fakeAPI(); const registered: string[] = []; diff --git a/tests/kimi.test.ts b/tests/kimi.test.ts index cd45cb1..06d7a49 100644 --- a/tests/kimi.test.ts +++ b/tests/kimi.test.ts @@ -46,9 +46,9 @@ describe("fetchKimiQuota", () => { assert.equal(quota.state, "live"); assert.equal(quota.plan, "Allegro"); assert.equal(quota.windows.length, 2); - assert.equal(quota.windows[0]?.kind, "five-hour"); + assert.equal(quota.windows[0]?.id, "five-hour"); assert.equal(quota.windows[0]?.usedPercent, 18); - assert.equal(quota.windows[1]?.kind, "weekly"); + assert.equal(quota.windows[1]?.id, "weekly"); assert.equal(quota.windows[1]?.usedPercent, 43); } finally { restore(); -- 2.51.2 From bae64022def1e449a518f0ee6fec7d207191e460 Mon Sep 17 00:00:00 2001 From: Iury Souza Date: Sun, 12 Jul 2026 14:02:34 +0200 Subject: [PATCH 04/19] feat: rename extension to pi-model-quotas --- README.md | 123 +++++++++++----- implementation-notes.md | 50 ------- package-lock.json | 8 +- package.json | 20 +-- plan.md | 311 ---------------------------------------- src/index.ts | 8 +- src/preferences.ts | 2 +- tests/index.test.ts | 40 +++--- 8 files changed, 130 insertions(+), 432 deletions(-) delete mode 100644 implementation-notes.md delete mode 100644 plan.md diff --git a/README.md b/README.md index fa950d6..50194d8 100644 --- a/README.md +++ b/README.md @@ -1,65 +1,122 @@ -# pi-codex-kimi-usage +# pi-model-quotas -A Pi extension that shows the active model family's subscription quota in the footer. OpenAI/OpenAI-Codex models show Codex quota; `kimi-coding` models show Kimi quota. Unsupported providers show no quota status. +Provider-aware subscription quota status for [Pi](https://github.com/badlogic/pi-mono). It follows the active model, fetches only that provider’s quota, and keeps the footer quiet for unsupported providers. -## Footer +```text +▰▱▱▱ 24% ↻ 3:25 +``` + +## Supported providers + +| Active model provider | Subscription | Authentication | Quota windows | +| --- | --- | --- | --- | +| `openai`, `openai-codex` | OpenAI Codex | Pi `/login openai-codex` | 5 hour, weekly | +| `kimi-coding` | Kimi Coding | Pi `/login kimi-coding` or `KIMI_API_KEY` | 5 hour, weekly | + +Unsupported model providers produce no footer status. + +OpenCode Go is intentionally not supported yet. Its proposed API-key-authenticated usage endpoint is still unmerged upstream; current alternatives require scraping console HTML with an expiring browser cookie. Once an official endpoint ships, its 5-hour, weekly, and monthly limits can be added as a normal provider adapter. -The default `minimal` mode shows the 5-hour window: +## Install + +```sh +pi install git:github.com/iurysza/pi-model-quotas +``` + +Then authenticate the provider you use: + +```text +/login openai-codex +/login kimi-coding +``` + +Reload Pi after installation. + +## Footer modes + +Minimal mode is the default and shows the provider’s primary window: ```text ▰▱▱▱ 24% ↻ 3:25 ``` -`full` mode adds the weekly window: +Full mode adds the configured secondary window: ```text 5h ▰▱▱▱ 24% ↻ 3:25 · 7d ▰▱▱▱ 15% ↻ Sun 9:00 ``` -The four-cell gauge represents quota pressure in 25-point buckets. Percentages stay exact and alone receive threshold color: green below 70%, yellow at 70–89%, red at 90%+. A trailing `~` marks stale last-good data. Reset timestamps use local wall-clock time. +- Four gauge cells represent 25-point usage buckets. +- Only the percentage receives threshold color: green below 70%, yellow from 70–89%, red at 90% or higher. +- `~` after a percentage means the extension is showing stale last-good data. +- Reset timestamps use local time. -## Installation +## Commands -```sh -pi install git:github.com/iurysza/pi-codex-kimi-usage -``` +| Command | Action | +| --- | --- | +| `/quotas` | Toggle detailed quota data for every configured provider | +| `/quotas minimal` | Show only the active provider’s primary window | +| `/quotas full` | Show the active provider’s configured full window set | -## Prerequisites +The selected mode is stored in `pi-model-quotas.json` under Pi’s agent directory. The file contains only `{ "footerMode": "minimal" | "full" }`—never credentials or quota data. -- `/login openai-codex` for Codex quota. -- `/login kimi-coding` (or `KIMI_API_KEY`) for Kimi quota. +## Refresh and failure behavior -## Commands +- Fetches the active provider on session start. +- Refreshes after turns and model switches when cached data is older than five minutes. +- Routes immediately when the active model changes. +- Opening `/quotas` forces all registered providers to refresh independently. +- Keeps last-good data and marks it stale if a later request fails. +- Shows `—` when credentials are missing and `!` when a request fails without cached data. + +## Privacy -- `/quotas` — toggle the detailed widget showing both providers. -- `/quotas minimal` — use the compact 5-hour footer. -- `/quotas full` — show 5-hour and weekly footer windows. +- Uses direct, read-only provider quota endpoints. +- Reuses Pi’s `AuthStorage`; no separate login flow. +- Does not read browser cookies, scrape dashboards, probe models, or spawn subprocesses. +- Never persists tokens, account IDs, raw responses, or quota data. -Footer mode defaults to `minimal` and is stored globally in `pi-codex-kimi-usage.json` under Pi's agent directory. This file contains only the display preference, never quota data or credentials. +Current data sources: -## Refresh behavior +- Codex: `https://chatgpt.com/backend-api/wham/usage` +- Kimi: `https://api.kimi.com/coding/v1/usages` -Quota refreshes on session start and after each turn or model switch when its cache is older than five minutes. Model switches immediately route the footer to the selected provider. Opening bare `/quotas` forces both providers to refresh. +These are provider-controlled surfaces and may change. -## Adding providers +## Adding a provider -Providers are registered in `src/providers.ts` through the exported `QuotaProvider` contract. An adapter supplies its ID and label, active-model matcher, quota fetcher, credential hint, and the window IDs used by minimal/full footer modes. The coordinator, cache, stale-data handling, model routing, and `/quotas` widget derive from that registry. +Providers implement the exported `QuotaProvider` contract and are registered in [`src/providers.ts`](src/providers.ts): -Provider fetchers normalize API responses into labeled `QuotaWindow` values, so new window types such as monthly limits require no formatter changes. +```ts +const provider: QuotaProvider = { + id: "provider-id", + label: "Provider", + matchesModel: (model) => model?.provider === "provider-id", + fetch: fetchProviderQuota, + credentialsHint: "Run /login provider-id.", + footerWindows: { + minimal: ["five-hour"], + full: ["five-hour", "weekly"], + }, +}; +``` -### OpenCode Go +The fetcher normalizes the provider response into `ProviderQuota` and labeled `QuotaWindow` values. Registration automatically supplies model routing, independent caching, in-flight deduplication, stale-data fallback, footer rendering, and `/quotas` details. New window types such as monthly limits need no formatter changes. -OpenCode Go support is waiting for an official API-key-authenticated usage endpoint. The proposed `/zen/go/v1/usage` endpoint is not merged upstream; current alternatives require scraping console HTML with an expiring browser cookie. Once the official endpoint ships, Go can be added as one adapter with 5-hour, weekly, and monthly windows. +## Development -## Privacy and security +```sh +npm install +npm run check +npm test +npm pack --dry-run +``` -- Only direct read-only quota endpoints are used. -- No browser cookies, dashboard scraping, model probes, or subprocesses. -- Tokens, JWTs, account IDs, raw provider responses, and quota data are never persisted by this extension. +Tests cover response parsing, credential refresh, dynamic provider registration, cache isolation, formatting, preference persistence, and extension lifecycle behavior. ## Troubleshooting -- If the footer shows `—`, log in to the active model's provider. -- If it shows `!`, check network and credentials. -- Full custom footers created with `ctx.ui.setFooter()` must render Pi extension statuses or they can hide this footer segment; `/quotas` still works. -- The Codex and Kimi endpoints are internal/provider surfaces and may change. +- `—`: authenticate the active model provider. +- `!`: verify credentials and network access. +- Missing footer segment with a custom footer: the custom `ctx.ui.setFooter()` implementation must render extension statuses. `/quotas` remains available. diff --git a/implementation-notes.md b/implementation-notes.md deleted file mode 100644 index 96e1558..0000000 --- a/implementation-notes.md +++ /dev/null @@ -1,50 +0,0 @@ -# Implementation Notes: `pi-codex-kimi-usage` - -## Plan Snapshot - -Build one Pi extension that fetches Codex and Kimi Coding quota from their direct read-only endpoints and shows both providers in a single footer status slot plus a `/quotas` detail widget. - -## Decisions - -- Use `AuthStorage.create()` for credentials; no custom login flow. -- Codex account id comes from stored credential `accountId` or JWT claim `https://api.openai.com/auth.chatgpt_account_id`. -- Kimi 401 recovery uses the registered `kimi-coding` OAuth provider returned by `storage.getOAuthProviders()`, matching `pi-provider-kimi-code` behavior. -- Runtime dependencies: Node built-ins only. Dev dependencies include TypeScript and the matching `@earendil-works/pi-coding-agent` / `pi-tui` packages for type checking. -- Tests use Node’s built-in test runner and `globalThis.fetch` mocking. - -## Deviations - -- Added a TUI-mode guard to `/quotas` so it warns instead of no-oping in print/RPC modes. -- Exported `createCoordinator` and `createPiCodexKimiUsage` so unit tests can inject a fake `AuthStorage` and avoid real network. -- Used `.js` extensions on local relative imports because TypeScript with `module: NodeNext` requires it for ESM emit. - -## Parent Review Fixes - -- Fixed the coordinator to retain last-good data when clients return explicit `error` or `missing` states; the original implementation only handled thrown failures and replaced good cache entries. -- Prevented unexpected thrown errors from reaching the widget/footer by replacing them with a fixed sanitized message. -- Classified environment/fallback Kimi credentials as API keys instead of OAuth when no stored OAuth credential exists. -- Required a real Kimi refresh token, contained provider refresh exceptions, and validated refreshed credentials before persistence. -- Contained second-attempt Codex/Kimi fetch failures so client functions always return sanitized provider states. -- Added tests for returned-error stale fallback, sanitized refresh failure, and the real `/quotas` widget toggle. - -## New Unknowns - -- Exact live Codex `wham/usage` JSON shape; plan describes `rate_limit.primary_window`, `rate_limit.secondary_window`, `used_percent`, `reset_at`, `plan_type`. If live differs, only sanitized structural fixtures will be saved. - -## Validation - -```sh -npm run check # tsc --noEmit, exit 0 -npm test # 30 tests, 0 failures, exit 0 -npm pack --dry-run # 9 files, 8.8 kB tarball, exit 0 -``` - -## Smoke Test - -- `pi -e ./src/index.ts --version` loads without errors (exit 0). -- `pi -e ./src/index.ts --list-models` loads and lists models without errors. -- `pi -e ./src/index.ts -p --no-session --provider openai --api-key fake-key "hello"` triggers `session_start`, the extension attempts quota fetches, and exits with only a sanitized credential-related message (`Failed to extract accountId from token`) and no leaked tokens/JWTs/account IDs/raw response bodies. -- Real TUI with the normal Pi environment fetched and rendered live Codex and Kimi quota in `/quotas`; no credentials or raw responses were exposed. -- Isolated default Pi TUI showed `CX — | KM —` in the footer and `/quotas` toggled a clean missing-credentials widget without duplicate messages. -- The normal local environment’s custom footer suppresses Pi’s built-in footer and does not render extension statuses, so it hides all `setStatus()` segments, including this extension. `/quotas` still works. That custom footer needs a separate compatibility fix before the quota segment appears in the user’s normal footer. -- Existing `/usage` coexistence is covered by registration tests (`quotas` registered, `usage` untouched); interactive `/usage` was not modified. diff --git a/package-lock.json b/package-lock.json index 6d4afa8..d5fb907 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { - "name": "pi-codex-kimi-usage", - "version": "0.3.0", + "name": "pi-model-quotas", + "version": "0.4.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "pi-codex-kimi-usage", - "version": "0.3.0", + "name": "pi-model-quotas", + "version": "0.4.0", "license": "MIT", "devDependencies": { "@earendil-works/pi-coding-agent": "^0.80.6", diff --git a/package.json b/package.json index 2868012..3e8bf87 100644 --- a/package.json +++ b/package.json @@ -1,23 +1,25 @@ { - "name": "pi-codex-kimi-usage", - "version": "0.3.0", - "description": "Pi footer quota status for OpenAI Codex and Kimi Coding subscriptions", + "name": "pi-model-quotas", + "version": "0.4.0", + "description": "Provider-neutral subscription quota status for Pi", "license": "MIT", "author": "Iury Souza", "keywords": [ "pi-package", "pi-extension", - "codex", - "kimi", "quota", - "usage" + "subscription", + "usage", + "footer", + "codex", + "kimi" ], "repository": { "type": "git", - "url": "git+https://github.com/iurysza/pi-codex-kimi-usage.git" + "url": "git+https://github.com/iurysza/pi-model-quotas.git" }, - "bugs": "https://github.com/iurysza/pi-codex-kimi-usage/issues", - "homepage": "https://github.com/iurysza/pi-codex-kimi-usage#readme", + "bugs": "https://github.com/iurysza/pi-model-quotas/issues", + "homepage": "https://github.com/iurysza/pi-model-quotas#readme", "type": "module", "main": "src/index.ts", "pi": { diff --git a/plan.md b/plan.md deleted file mode 100644 index 79df3d1..0000000 --- a/plan.md +++ /dev/null @@ -1,311 +0,0 @@ -# Implementation Plan: `pi-codex-kimi-usage` - -## Goal - -Build a standalone public Pi extension that reliably shows OpenAI Codex and Kimi Coding subscription quota in one compact footer status and exposes `/quotas` for a detailed view. - -## Decisions - -- One extension, one footer slot: `pi-codex-kimi-usage`. -- Direct read-only quota endpoints only. - - Codex: `GET https://chatgpt.com/backend-api/wham/usage`. - - Kimi: `GET https://api.kimi.com/coding/v1/usages`. -- No Codex app-server fallback: it may use a different account than Pi OAuth. -- Reuse Pi `AuthStorage`; no login flow. -- Kimi 401 recovery: force one OAuth refresh using the registered `kimi-coding` OAuth provider, persist through `AuthStorage`, retry once. -- In-memory last-good cache only. -- Refresh on startup and only when cache is older than five minutes on `turn_end` or `model_select`; `/quotas` forces refresh when opening. -- No background timer. -- `/quotas` toggles a static detail widget above the editor. Opening refreshes; invoking again hides it. -- Keep `/usage` untouched. -- Display **used percentages** consistently. - -## V1 Scope - -### Footer - -Compact single line: - -```text -CX 5h 24% · 7d 61% | KM 5h 18% · 7d 43% -``` - -Rules: - -- Green below 70%, yellow at 70–89%, red at 90%+. -- `~` after provider code means last-good data is stale: `KM~`. -- `—` means credentials are absent: `KM —`. -- `!` means fetch failed and no last-good value exists: `KM !`. -- Do not attempt custom width detection. `setStatus` owns a compact footer segment; Pi handles footer layout. - -### `/quotas` widget - -Static, theme-aware text above the editor: - -```text -Quota usage - -Codex · Plus · live - 5h 24% used resets 2h 13m - Weekly 61% used resets 3d 8h - -Kimi · Allegro · live - 5h 18% used resets 4h 02m - Weekly 43% used resets 5d 11h - -Updated 10:42 -Run /quotas again to hide. -``` - -Show provider-specific errors below that provider. Never show token, JWT, account id, email, raw response, or response body. - -## Non-goals - -- Codex CLI/app-server fallback. -- Browser cookies, dashboard scraping, model probes, or API-key balance endpoints. -- Persistent cache or usage history. -- Code-review/Spark/additional Codex windows. -- Codex credits/spend control. -- Kimi Extra Usage/booster wallet. -- Per-provider settings, display modes, custom width breakpoints, or LLM tools. -- Full custom footer replacement or modal overlay. -- Multi-account support. - -## Data Model - -`src/types.ts`: - -```ts -export type ProviderName = "codex" | "kimi"; -export type QuotaState = "live" | "stale" | "missing" | "error"; - -export interface QuotaWindow { - kind: "five-hour" | "weekly"; - usedPercent: number; - used?: number; - limit?: number; - resetsAt?: number; // Unix milliseconds -} - -export interface ProviderQuota { - provider: ProviderName; - state: QuotaState; - fetchedAt?: number; - plan?: string; - windows: QuotaWindow[]; - error?: string; // sanitized, user-facing only -} - -export interface QuotaSnapshot { - codex: ProviderQuota; - kimi: ProviderQuota; -} -``` - -Parsers clamp percentages to `0..100` for rendering. They must reject payloads without the expected 5-hour and weekly data rather than silently reporting zero. - -## Auth - -### Codex - -1. `AuthStorage.create().getApiKey("openai-codex")` gets/refreshed access token. -2. `storage.get("openai-codex")` supplies `accountId` when present. -3. If absent, decode only the JWT middle segment in memory and read `https://api.openai.com/auth.chatgpt_account_id`. -4. If no account id exists, return a sanitized auth error. -5. On 401/403, `storage.reload()` and retry once only if the access token changed. Do not force Codex refresh or call its token endpoint. - -### Kimi - -1. `AuthStorage.create().getApiKey("kimi-coding")` supports Pi OAuth or stored API key; fall back to `KIMI_API_KEY` only if Pi returns nothing. -2. Call `/coding/v1/usages` with `Authorization: Bearer`; no spoofed device headers are required. -3. On 401: - - reload storage; - - if disk now contains a different access token, retry it; - - otherwise find the registered `kimi-coding` provider through `storage.getOAuthProviders()`; - - call its `refreshToken()` with the current OAuth credential; - - reload and avoid overwriting a newer token if another process already refreshed; - - otherwise persist with `storage.set()` and retry once. -4. API-key credentials never attempt OAuth refresh. -5. Refresh failures become sanitized auth errors. - -This mirrors the installed Kimi provider’s forced-refresh behavior while using Pi’s registered OAuth implementation instead of duplicating Kimi OAuth endpoints/client constants. - -## Fetching and Parsing - -### Codex - -Request headers: - -```text -Authorization: Bearer -ChatGPT-Account-Id: -Accept: application/json -``` - -Parse: - -- `rate_limit.primary_window` → five-hour. -- `rate_limit.secondary_window` → weekly. -- `used_percent` → `usedPercent`. -- `reset_at` Unix seconds → milliseconds. -- `plan_type` → plan. - -Use a 10-second timeout. Categorize missing credentials, auth, timeout/network, HTTP, and invalid schema without including response bodies. - -### Kimi - -Parse: - -- top-level `usage` → weekly. -- `limits[]` item whose `window.duration` + `timeUnit` equals 300 minutes → five-hour. -- Numeric strings and numbers are both valid. -- Derive `used = limit - remaining` when needed. -- `usedPercent = used / limit * 100`. -- Accept documented reset aliases and ISO timestamps, including nanosecond precision. -- `user.membership.level` maps to the known Kimi plan names; preserve unknown enum text safely. - -Use a 10-second timeout. Invalid/missing required windows is an invalid-schema failure. - -## Cache and Refresh Semantics - -Keep provider caches independently so one provider’s failure never discards the other. - -- Freshness interval: five minutes. -- `session_start`: fetch both in parallel. -- `turn_end` / `model_select`: fetch only when the cache is older than five minutes. -- `/quotas` opening: force both fetches in parallel. -- Prevent overlapping refreshes with one in-flight promise. -- Success replaces that provider’s cache. -- Failure with last-good data retains it indefinitely for this Pi session, marks it stale, and stores a sanitized current error for the widget. -- Failure without last-good data produces missing/error state. -- Session shutdown clears footer/widget and releases references. - -## Minimal File Tree - -```text -├── .github/workflows/ci.yml -├── .gitignore -├── LICENSE -├── README.md -├── package.json -├── tsconfig.json -├── src/ -│ ├── index.ts # extension lifecycle, cache coordinator, /quotas -│ ├── types.ts -│ ├── auth.ts -│ ├── codex.ts # fetch + parse -│ ├── kimi.ts # fetch + parse -│ └── format.ts # footer + widget strings -└── tests/ - ├── fixtures/ - │ ├── codex-usage.json - │ ├── kimi-usage.json - │ └── kimi-usage-numeric-strings.json - ├── codex.test.ts - ├── kimi.test.ts - ├── format.test.ts - └── coordinator.test.ts -``` - -Do not create one-file abstractions for config, errors, JWT, cache, commands, headers, or app-server. - -## Implementation Phases - -### 1. Scaffold - -Create package metadata, strict TypeScript config, MIT license, README skeleton, and CI. Use: - -- `@earendil-works/pi-coding-agent` and `@earendil-works/pi-tui` as peer dependencies. -- Matching current packages as dev dependencies. -- Node built-ins only at runtime. -- `node --test` for tests. - -Gate: `npm install` and `npm run check` pass with a minimal extension entry. - -### 2. Pure parsers and formatters - -Implement normalized types, Codex parser, Kimi parser, percentage/reset formatting, footer, and widget text. Build fixture tests first; no auth/network yet. - -Gate: parser/formatter tests cover numeric strings, derived Kimi usage, missing windows, malformed resets, thresholds, stale/missing/error footer states, and secret-like error redaction. - -### 3. Auth and clients - -Implement Pi AuthStorage access, Codex account-id extraction, direct endpoint clients, timeout handling, Codex changed-token retry, and Kimi forced refresh/retry. - -Gate: mocked tests prove exactly one retry, no forced refresh for API keys, no raw body/token in errors, and provider failures remain independent. - -### 4. Coordinator and Pi UI - -Wire parallel refresh, in-flight deduplication, five-minute freshness, last-good stale fallback, footer `setStatus`, widget `setWidget`, `/quotas` toggle, and shutdown cleanup. - -Gate: mock Pi context tests verify lifecycle calls, `/usage` is never registered, `/quotas` toggles correctly, and one provider failure preserves the other. - -### 5. Live smoke test - -Load with: - -```sh -pi -e ./src/index.ts -``` - -Verify: - -1. Footer shows both real quotas. -2. `/quotas` shows detail widget; second invocation hides it. -3. Existing `/usage` still opens its dashboard. -4. Switching models does not duplicate status/widget entries. -5. Pi logs contain no bearer tokens, JWTs, account IDs, or raw provider bodies. -6. `/reload` and exit clean up session resources. - -Record only sanitized percentages/statuses in implementation notes. - -## Validation - -Required commands: - -```sh -npm run check -npm test -npm pack --dry-run -``` - -CI runs the same checks on Node 22. - -## Release Preparation - -- README: purpose, screenshot/text example, installation via `pi install git:github.com/iurysza/pi-codex-kimi-usage`, `/login` prerequisites, `/quotas`, refresh behavior, privacy/security, troubleshooting, and internal-endpoint warning. -- Package keywords: `pi-package`, `pi-extension`, `codex`, `kimi`, `quota`, `usage`. -- Start at `0.1.0`; do not publish or tag until live smoke test passes and user approves release. - -## Acceptance Criteria - -- Footer shows both providers from one `setStatus` slot. -- Codex and Kimi quota percentages match their provider quota surfaces during live smoke test. -- `/quotas` toggles a detailed static widget. -- Existing `/usage` remains unchanged. -- Direct endpoints only; no model calls, cookies, or Codex subprocess. -- Kimi recovers once from a revoked-but-unexpired OAuth token. -- Missing/failing providers do not hide working providers. -- Last-good data is visibly stale after refresh failure. -- No secrets/account identifiers/raw bodies are logged, persisted, or displayed. -- Typecheck, tests, and package dry-run pass. - -## Deviation Policy - -The implementer may make small local changes that simplify code or satisfy current Pi types and must record them in `implementation-notes.md`. - -Stop and report before changing: - -- auth/storage strategy; -- endpoint choice; -- network destinations; -- disk persistence; -- command/footer UX; -- adding dependencies or subprocesses; -- expanding quota scope beyond 5-hour + weekly windows. - -If live response schemas differ, save only a manually sanitized structural fixture—never the raw authenticated response—and update parser tests before continuing. - -## Unresolved Questions - -None blocking. Low-risk defaults are fixed above. Release publishing remains a separate approval. diff --git a/src/index.ts b/src/index.ts index 9310959..7bf0e25 100644 --- a/src/index.ts +++ b/src/index.ts @@ -9,8 +9,8 @@ import { loadFooterMode, saveFooterMode, type FooterMode } from "./preferences.j import { providerForModel as findProviderForModel, providers } from "./providers.js"; import type { ProviderId, ProviderQuota, QuotaProvider, QuotaSnapshot } from "./types.js"; -const STATUS_KEY = "pi-codex-kimi-usage"; -const WIDGET_KEY = "pi-codex-kimi-usage"; +const STATUS_KEY = "pi-model-quotas"; +const WIDGET_KEY = "pi-model-quotas"; const FRESHNESS_MS = 5 * 60 * 1000; interface CacheEntry { @@ -89,7 +89,7 @@ export function providerForModel(model: ExtensionContext["model"]): ProviderId | return findProviderForModel(model)?.id; } -export function createPiCodexKimiUsage( +export function createPiModelQuotas( pi: ExtensionAPI, storageOverride?: AuthStorageLike, preferenceFile?: string, @@ -176,5 +176,5 @@ export { providers } from "./providers.js"; export type { QuotaProvider } from "./types.js"; export default function piCodexKimiUsage(pi: ExtensionAPI) { - return createPiCodexKimiUsage(pi); + return createPiModelQuotas(pi); } diff --git a/src/preferences.ts b/src/preferences.ts index d5f6727..2364cec 100644 --- a/src/preferences.ts +++ b/src/preferences.ts @@ -5,7 +5,7 @@ import { getAgentDir } from "@earendil-works/pi-coding-agent"; export type FooterMode = "minimal" | "full"; export function preferencePath(agentDir = getAgentDir()): string { - return join(agentDir, "pi-codex-kimi-usage.json"); + return join(agentDir, "pi-model-quotas.json"); } export async function loadFooterMode(path = preferencePath()): Promise { diff --git a/tests/index.test.ts b/tests/index.test.ts index 42eb555..e0e3599 100644 --- a/tests/index.test.ts +++ b/tests/index.test.ts @@ -3,7 +3,7 @@ import assert from "node:assert/strict"; import { mkdtemp, readFile, rm } from "node:fs/promises"; import { join } from "node:path"; import { tmpdir } from "node:os"; -import { createPiCodexKimiUsage, providerForModel } from "../src/index.js"; +import { createPiModelQuotas, providerForModel } from "../src/index.js"; import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent"; import type { AuthStorageLike } from "../src/auth.js"; import type { QuotaProvider } from "../src/types.js"; @@ -78,7 +78,7 @@ function fakeAPI(provider = "openai-codex") { }; } -describe("createPiCodexKimiUsage", () => { +describe("createPiModelQuotas", () => { it("routes supported model families and rejects unsupported providers", () => { assert.equal(providerForModel({ provider: "openai", id: "gpt" } as ExtensionContext["model"]), "codex"); assert.equal(providerForModel({ provider: "openai-codex", id: "gpt" } as ExtensionContext["model"]), "codex"); @@ -102,9 +102,9 @@ describe("createPiCodexKimiUsage", () => { footerWindows: { minimal: ["monthly"], full: ["monthly"] }, }; const f = fakeAPI("future"); - createPiCodexKimiUsage(f.api, fakeStorage(), undefined, [future]); + createPiModelQuotas(f.api, fakeStorage(), undefined, [future]); await f.fire("session_start", {}); - assert.ok(f.status["pi-codex-kimi-usage"]?.includes("42%")); + assert.ok(f.status["pi-model-quotas"]?.includes("42%")); }); it("registers /quotas and not /usage", () => { @@ -116,7 +116,7 @@ describe("createPiCodexKimiUsage", () => { registered.push(name); }, } as unknown as ExtensionAPI; - createPiCodexKimiUsage(pi, fakeStorage()); + createPiModelQuotas(pi, fakeStorage()); assert.ok(registered.includes("quotas")); assert.ok(!registered.includes("usage")); }); @@ -125,12 +125,12 @@ describe("createPiCodexKimiUsage", () => { "sets footer on session_start", withMockFetch(async () => { const f = fakeAPI(); - createPiCodexKimiUsage(f.api, fakeStorage()); + createPiModelQuotas(f.api, fakeStorage()); await f.fire("session_start", { type: "session_start", reason: "startup" }); - assert.ok(f.status["pi-codex-kimi-usage"], "status should be set"); + assert.ok(f.status["pi-model-quotas"], "status should be set"); f.ctx.model = { provider: "anthropic", id: "claude" } as ExtensionContext["model"]; await f.fire("model_select", { type: "model_select", model: f.ctx.model, source: "set" }); - assert.equal(f.status["pi-codex-kimi-usage"], undefined); + assert.equal(f.status["pi-model-quotas"], undefined); }), ); @@ -148,11 +148,11 @@ describe("createPiCodexKimiUsage", () => { ? { type: "oauth", access: "token", accountId: "acc-1" } : { type: "api_key", key: "token" }, } as unknown as AuthStorageLike; - createPiCodexKimiUsage(f.api, storage); + createPiModelQuotas(f.api, storage); await f.commands.quotas!.handler("", f.ctx); - assert.ok(f.widgets["pi-codex-kimi-usage"]?.includes("Run /quotas again to hide.")); + assert.ok(f.widgets["pi-model-quotas"]?.includes("Run /quotas again to hide.")); await f.commands.quotas!.handler("", f.ctx); - assert.equal(f.widgets["pi-codex-kimi-usage"], undefined); + assert.equal(f.widgets["pi-model-quotas"], undefined); } finally { globalThis.fetch = original; } @@ -166,13 +166,13 @@ describe("createPiCodexKimiUsage", () => { const storage = { ...fakeStorage(), get: (provider: string) => provider === "openai-codex" ? { type: "oauth", access: "token", accountId: "acc-1" } : { type: "api_key", key: "token" } } as unknown as AuthStorageLike; - createPiCodexKimiUsage(f.api, storage); + createPiModelQuotas(f.api, storage); await f.fire("session_start", {}); - const codexFooter = f.status["pi-codex-kimi-usage"]; + const codexFooter = f.status["pi-model-quotas"]; f.ctx.model = { provider: "kimi-coding", id: "kimi" } as ExtensionContext["model"]; await f.fire("model_select", { model: f.ctx.model }); - assert.notEqual(f.status["pi-codex-kimi-usage"], codexFooter); - assert.ok(f.status["pi-codex-kimi-usage"]?.includes("18")); + assert.notEqual(f.status["pi-model-quotas"], codexFooter); + assert.ok(f.status["pi-model-quotas"]?.includes("18")); } finally { globalThis.fetch = original; } }); @@ -181,10 +181,10 @@ describe("createPiCodexKimiUsage", () => { const path = join(dir, "preference.json"); try { const f = fakeAPI(); - createPiCodexKimiUsage(f.api, fakeStorage(), path); + createPiModelQuotas(f.api, fakeStorage(), path); await f.commands.quotas!.handler("full", f.ctx); assert.deepEqual(JSON.parse(await readFile(path, "utf8")), { footerMode: "full" }); - assert.ok(f.status["pi-codex-kimi-usage"]); + assert.ok(f.status["pi-model-quotas"]); } finally { await rm(dir, { recursive: true, force: true }); } }); @@ -192,11 +192,11 @@ describe("createPiCodexKimiUsage", () => { "cleans up on session_shutdown", withMockFetch(async () => { const f = fakeAPI(); - createPiCodexKimiUsage(f.api, fakeStorage()); + createPiModelQuotas(f.api, fakeStorage()); await f.fire("session_start", { type: "session_start", reason: "startup" }); await f.fire("session_shutdown", { type: "session_shutdown", reason: "quit" }); - assert.equal(f.status["pi-codex-kimi-usage"], undefined); - assert.equal(f.widgets["pi-codex-kimi-usage"], undefined); + assert.equal(f.status["pi-model-quotas"], undefined); + assert.equal(f.widgets["pi-model-quotas"], undefined); }), ); }); -- 2.51.2 From a59cecc9ea5cb6cf865f9090f23e52c79de742fb Mon Sep 17 00:00:00 2001 From: Iury Souza Date: Sun, 12 Jul 2026 14:03:32 +0200 Subject: [PATCH 05/19] docs: move provider internals out of README --- AGENTS.md | 12 +++++++ README.md | 20 ------------ ai-artifacts/MOC.md | 5 +++ ai-artifacts/provider-adapters.md | 52 +++++++++++++++++++++++++++++++ 4 files changed, 69 insertions(+), 20 deletions(-) create mode 100644 AGENTS.md create mode 100644 ai-artifacts/MOC.md create mode 100644 ai-artifacts/provider-adapters.md diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..7c60127 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,12 @@ +# Agent Notes + +Provider-neutral Pi quota extension. Keep the README user-facing. + +Before changing provider contracts, routing, caching, or adding a provider, read [[ai-artifacts/MOC]] and [[ai-artifacts/provider-adapters]]. + +Rules: + +- Use direct read-only quota endpoints. +- Reuse Pi `AuthStorage`; never persist credentials or quota data. +- Keep provider-specific auth and parsing inside its adapter/fetcher. +- Run `npm run check`, `npm test`, and `npm pack --dry-run` before shipping. diff --git a/README.md b/README.md index 50194d8..49681a7 100644 --- a/README.md +++ b/README.md @@ -84,26 +84,6 @@ Current data sources: These are provider-controlled surfaces and may change. -## Adding a provider - -Providers implement the exported `QuotaProvider` contract and are registered in [`src/providers.ts`](src/providers.ts): - -```ts -const provider: QuotaProvider = { - id: "provider-id", - label: "Provider", - matchesModel: (model) => model?.provider === "provider-id", - fetch: fetchProviderQuota, - credentialsHint: "Run /login provider-id.", - footerWindows: { - minimal: ["five-hour"], - full: ["five-hour", "weekly"], - }, -}; -``` - -The fetcher normalizes the provider response into `ProviderQuota` and labeled `QuotaWindow` values. Registration automatically supplies model routing, independent caching, in-flight deduplication, stale-data fallback, footer rendering, and `/quotas` details. New window types such as monthly limits need no formatter changes. - ## Development ```sh diff --git a/ai-artifacts/MOC.md b/ai-artifacts/MOC.md new file mode 100644 index 0000000..43c6c3e --- /dev/null +++ b/ai-artifacts/MOC.md @@ -0,0 +1,5 @@ +# Technical Reference MOC + +- [[provider-adapters]] — provider contract, registration, data flow, and implementation checklist +- [Pi extension documentation](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/docs/extensions.md) +- [OpenCode Go usage endpoint proposal](https://github.com/anomalyco/opencode/pull/16513) diff --git a/ai-artifacts/provider-adapters.md b/ai-artifacts/provider-adapters.md new file mode 100644 index 0000000..a43d362 --- /dev/null +++ b/ai-artifacts/provider-adapters.md @@ -0,0 +1,52 @@ +# Provider Adapters + +## Architecture + +`src/providers.ts` is the registry. Each `QuotaProvider` supplies: + +- stable `id` and user-facing `label` +- `matchesModel()` for active-model routing +- `fetch()` for authentication, request, validation, and normalization +- a safe credential hint +- ordered window IDs for minimal and full footer modes + +The generic coordinator derives per-provider caches from the registry. It handles freshness, in-flight deduplication, independent refreshes, stale last-good fallback, snapshots, and cleanup. Formatting consumes normalized window metadata; it must not branch on provider IDs. + +## Normalized data + +A fetcher returns `ProviderQuota`. Every `QuotaWindow` carries its own stable ID, short and long labels, reset display style, percentage, optional raw usage/limit, and optional reset timestamp. This allows hourly, weekly, monthly, or provider-specific windows without formatter changes. + +## Adding a provider + +1. Add the provider-specific auth/fetch/parser module under `src/`. +2. Validate external response fields before constructing normalized quota data. +3. Sanitize errors; never include tokens, account IDs, or response bodies. +4. Add one `QuotaProvider` entry to `src/providers.ts`. +5. Add response fixtures and parser tests. +6. Add registry-routing, cache-isolation, footer, and widget tests where relevant. +7. Update the README supported-provider table and authentication instructions only. +8. Run `npm run check`, `npm test`, and `npm pack --dry-run`. + +Example: + +```ts +const provider: QuotaProvider = { + id: "provider-id", + label: "Provider", + matchesModel: (model) => model?.provider === "provider-id", + fetch: fetchProviderQuota, + credentialsHint: "Run /login provider-id.", + footerWindows: { + minimal: ["five-hour"], + full: ["five-hour", "weekly"], + }, +}; +``` + +## Security boundary + +Use direct read-only quota endpoints and Pi `AuthStorage`. Do not add browser-cookie extraction, dashboard scraping, model probes, subprocess fallbacks, credential persistence, or quota persistence without an explicit product decision. + +## OpenCode Go + +Do not implement the current cookie-scraping workaround. Track [anomalyco/opencode#16513](https://github.com/anomalyco/opencode/pull/16513). When an official API-key-authenticated endpoint ships, add a standard adapter with 5-hour, weekly, and monthly normalized windows. -- 2.51.2 From 763ba7da32f438c046acb5332738164d8c31ea10 Mon Sep 17 00:00:00 2001 From: Iury Souza Date: Sun, 12 Jul 2026 14:05:14 +0200 Subject: [PATCH 06/19] docs: keep Pi introduction distribution-neutral --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 49681a7..fd48e1e 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # pi-model-quotas -Provider-aware subscription quota status for [Pi](https://github.com/badlogic/pi-mono). It follows the active model, fetches only that provider’s quota, and keeps the footer quiet for unsupported providers. +Provider-aware subscription quota status for Pi. It follows the active model, fetches only that provider’s quota, and keeps the footer quiet for unsupported providers. ```text ▰▱▱▱ 24% ↻ 3:25 -- 2.51.2 From 936eac47b4fe5b5abf59f7f8a9c46c806e1300f4 Mon Sep 17 00:00:00 2001 From: Iury Souza Date: Sun, 12 Jul 2026 14:12:53 +0200 Subject: [PATCH 07/19] feat: rename extension to pi-token-tank --- README.md | 12 +++++++++--- assets/token-tank.png | Bin 0 -> 174403 bytes package-lock.json | 8 ++++---- package.json | 13 +++++++------ src/index.ts | 10 +++++----- src/preferences.ts | 2 +- tests/index.test.ts | 40 ++++++++++++++++++++-------------------- 7 files changed, 46 insertions(+), 39 deletions(-) create mode 100644 assets/token-tank.png diff --git a/README.md b/README.md index fd48e1e..ae89353 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,10 @@ -# pi-model-quotas +

+ Token Tank icon +

+ +

pi-token-tank

+ +

Keep an eye on the tank.

Provider-aware subscription quota status for Pi. It follows the active model, fetches only that provider’s quota, and keeps the footer quiet for unsupported providers. @@ -20,7 +26,7 @@ OpenCode Go is intentionally not supported yet. Its proposed API-key-authenticat ## Install ```sh -pi install git:github.com/iurysza/pi-model-quotas +pi install git:github.com/iurysza/pi-token-tank ``` Then authenticate the provider you use: @@ -59,7 +65,7 @@ Full mode adds the configured secondary window: | `/quotas minimal` | Show only the active provider’s primary window | | `/quotas full` | Show the active provider’s configured full window set | -The selected mode is stored in `pi-model-quotas.json` under Pi’s agent directory. The file contains only `{ "footerMode": "minimal" | "full" }`—never credentials or quota data. +The selected mode is stored in `pi-token-tank.json` under Pi’s agent directory. The file contains only `{ "footerMode": "minimal" | "full" }`—never credentials or quota data. ## Refresh and failure behavior diff --git a/assets/token-tank.png b/assets/token-tank.png new file mode 100644 index 0000000000000000000000000000000000000000..04a3b0493ee91a517bd585898da12fafca060788 GIT binary patch literal 174403 zcmeAS@N?(olHy`uVBq!ia0y~yU}6Aa4iHr><-C@Gfq}6&$lZxy-8q?;3=9kvsS%!O zzP=1v3=9k$3@nUN46Gm}3=9l*jM8wn8>0pTGgzF7fuTKWMEjp1XIn#uz(rC25F3&@^K~u0|RG)M`SSrgPt-7Ggd6MFJoYEVDNNt45?sz zv$y(9S!|Wq7wf(6%jfu|TN%q*9o}-m$RV>kA;~t7HG6H6^92_JlZA#6zEfRhX-(YE z6PV1ij7crS!{AqY;3XHQt%hAk+}3P$$jwZ&Drqb0l1+QHW>D#zcojuIkWnuq3Wxj+7nM-KbK{(q;tn>HpefEMT&S-SNX|Wm8Z9ITd8Lh z-`q8ix1KAlvFNYjbZ!B;$&)U9;bWe@-r~uk&YMBnEqQZxSur?PTHf-M6#1fmYKeo& zH66LvUuMo!SoPcZx|dS#+c!*G9?3Y(%w)1ykSQ8$D%|^h8E5VF4T7d;S03_ASZ-Ny z;w<~wH#^jP7ArAM@w_|R`}ktp**VKY53|*z-TV5(CrbK|{g|rKEKJ`7Gr|CZCYoLT5C@e>R0)>|D1~sH%A0g5-ZEf~;EO;+l*_7JG^J z>zw-2GrzRTDx2$$m1~Ilo}auE1$Bb<>E#D!tPs`CzLJ>RvbV#oEv8p))%EFpYYN`^ z9#|M!@-1N3p()mf7oE(!t(*8{{f>2fIT?$Nv`MkG3UfRS(wDhf@%3thQV8puv(Nv` zy!o!pM>E-D!=C4NEje|TonT4{~Kiau>E=e|?dcGd+fILTpHeE#S= zz13|k5-h<6p7JU_1z`-{R+|zW1@y}ne|9bCGk-1Ec$-@`Q>FJ;tD(WPZwekCMDHEj zH=(HTx>H`Rb=?uR{aKH63KoBn>2|OXGM;|sw84t1Jf{CmmsfFwX)UP9jhOi3)q|TC zR;*4h3ghd!x}|ta(&W~kN+x`cr{8xOtu{ZD&(PU$QlepjCVeLa(Ig7n-A61 z_4&1urdDMv`**bRr2x~prw2GX6)#@l3R3uyv}s$-Svg*#_`cz!+=3{bwD$|CGi zQ^|UEL&3Qfr%l#ATeWY&)U$y(0$dJjs(2;7JoT%)xZ+gtont)B4qet;x@LYlC2?x{ zwGR=Wbq!nOe12H%zb)V=*gDIPgDv1_H&e0dbn&XA6B4+X@_Az0b>>|*(w}v!!}Vfy z#I4?W5@~x*%W{v;mOGup%}TzeOiwaRjlUN2`F58=9yu}IPvNYd(*{S&auZIzgfV! zBFAs<)5CF_xC9q1f8uQ=S(Y(XP%Ucm(eDm%N0JzveJd+xxU7ApFeAWf)j7u(n@bec z6YH+)chxhknkAg>XE`Zn1-t3y(`rYq3G_}W;5fU;^2f4i1w2!8+s>?+@Uk@3t>axG zf9h%F7Yl<8&W5M{`jz6h?0c{4wmGrQS8mNM;>)=^@o{`$vtLF2-Ze9F1Q{>iGyH7% zbEDm}uL=Q07nf{i$urU1F;h@ylgJ!5#zk$)+J@~)nn!Mi3K>T4-*ow;N?Z2I14nW- zZ@!w7%;4@L9BH-i!Q7YcCM>+^SJ0ENx36KJ4}->{K*7mgQD+zLHk@%W&h>(8>^`F@Gk-5~w7+e%w5pRSe#^OPMe(OUMFI+cZB9Co_~wf#&&pci9f4Ug zCTB~h2Ry4&^;%r8d!;Qy!$e;lG2;(sqE!}5`>XdV)baf~FSEU$x@^N;@*gIg`Fz&9 zFTUiNM04BLjI>!1LW$+=?B`c}7nmG2i`jS0MaKucYY%B|=eT9f!j^ovarvFb>jy0_ zc%3LKxwuN|BbUz)&P_R{P0Pwz<$UM0eNFsx^V}_NmmS)h8+zk~x zT1sY|AqPv&F?s?{L+09d7=sH#Sx?KGH?P*DB z@%-{`?*bjZS4%N6U!8N;Vb7UUtP{m79E=xqq&6r?uHxOSw^(V9$%dlbX9AZmxm6n6 zC^;Xe9~^i_V*Au&4U0z;+}8UZzIEuusR-p25B|+~V(ewn@bE+U`C}dhnzJ^fACodm zxVrUN(CpdFOo`wBoZ(q1rne$Fy}`VwJyosjZ1QJ+fko75 zQJ!-u4Jwbn&JkZW&9GePl+v6fwKq4-T(w1~-^gt`Z|RIknM01toVO}&-cuTAEx1j` z?w68Wy5NR9#hcuVZ)xBBw9k8op3IcO7e=kOPKeeY&YAV*xI{>AQQkAI4tbextg||_ zv>Q&UU0R(i%3_gac5nKuuxDHNWir!d$%qI)j}mX4SbD@!{6viJMLXyCKMS`AMn*pK z751t8K4Ilqt0ix?DzC`g?5D-Hyl`RGx!8}ZYYGfkAFJN~Ez>NnAii(zO#Y*sY^%&e z8#tp8-LX;IU#6oGbiO{UDBWHfvL6Y zrk|`;T4_}I-E4W3SMak-IXSBzec>`GZBHmXH`Tn@NFwlq(ROXGw5}6bd}pkbA8@*F z+a{&ueQI;iDsGJ_+bc2+o*Eh(A9uZW_n6q996KIQ1qWrmxVfozt6h zt}JP>?$uX+QWHvR+m)9-Tk_=A2BkY^8XIToH(nC#`ys$@-{E=qW{2L2z0(hMUc5g; zV#&kj9Mw{%Ouj_*>ba)AyQR0lFY2uXo6hs(hBH4MS3lj;w#f3pm0RAHXT-uSU6#6w zaQP>4-;ewB>b-)()J+x(ee^e)@xJ5Fxgo&x&{EWA-Of|XnXULdbIfmlXP6Y)^WctM zQ=2_Yqs7~Z1m7>c?He*GSPw3mm%(cwV)!D7VX2eo+MtzcYvhy)!%75wrfHcK7PwuO z5qLCv0{hX!78hGIn z!?9E-M@Q|8obeRTYu#cUiTgjVW_l^%#&?;)uj=xO24sVbD$Pi*SZn;=rxP9SHUX4$$Pw4)Q z3yExOSjuN|vuEkPn%k;J4>k%~xLNN|>r*_aKZ(cSxO`Vv*~K)K37x#2J2D(Kv}T-o z%#nPInQ3(>zjFAo2UqnntS9*EC>F2mGR!QnJK-ZI+$z3MFB)P&c)dYb|fD$~>0wktm+EL6HAZP>_?JiE`wge2HTdjHR@4 zQdU{4=@gq2HCgoYHu1Gxe;4o-TQP0>^;+e04^!0c$s6Al=e!TeFkCvQc{Z?STdG4*X`U~m8GC~`gG^5tnZ+HYLBbE`FrY`D%mWc13gWGGydJn?6w z$}V<6`}w__Cm#45CVzABOl_7gsf)C}K3sd_o$98=d)G{xGTVZ6oy#!u4&D1xWI0#AQabR%h1_pPvajY;zZDUB-Rf<#Juk+4huD(6$5yQl z^I*9%@48Im<*YO5e9R5!7M`}ftIF?tV`A73`PPdp%Yr&?w#&}RtXFh5diYEuX@Y2V z*1v{BeN_?NJ_3>7xiTZSi^x6QHOIMqe)FyU`xBUM%yRmuu1GRc~yN zSgpHQ|D|@6NAP_8#Vt!Xjb=A(Gx^*aVR2QMZI-nZ*MvvQ7!U2+ohcFaLZ;WhS-kx7 z#dUUT>%=Y_cI@%5dTHzQQo&E4M7Fr{(we(-EiY}fo26BB?c_S+`bDL?`^}2xr<=bl zIgxtyq*UjNBFBWdrC{O0EiIrZ^ zX|U$K+WI?FUpK}{X0QKrBVnCnOOAJtx7Es3Yv+qz6pG@Wcq{)naysX~%gW_M z=7!s3hwnP*KKWVbs_Sm)dUvj53Cv1sljs(>Tw`(2WmZqw{+G>`M$$8zq#iBi3%Yx{ zRZrS-rQ+S{EmC(Jcl~B^Xx=h4TcFix>M!9PMH}Xw*%iW}oql9P(}4+JICP9y_`04p zUwV=DfUSkWRxw9*Ns{!UnVEC#9ACfjHVMd3 zI`ifnOU0odtXr8XW@Jcwo3L|U-MZTs zYEFox^~Kbhgv2Es`ZL2Ws_E^|uFKYJnqP`1doHc+Se9pb^WM=3$-*M+85a_Hu5MiV zgx$Eft%0|A{VelSAC@|N*!7la!kqBiovM8Hj`7+nTGV@Er<~4By1S_V;I9(dy}WZd zb*&s^w9fRan!G$;nyxF&b@`WC+O61Ru6#YIS*NdGP%$>md$EUi;*Cw2v-Ug5 z2u#}B&``;oxAN!A$(h=J{yMK&zTdg4GDLh$%*KURC*Ga)(NVtPnu5vM#50lZTw%r& zOSfI{eUiav?iszH@A}Gfom-|{yeHnUbb~>dLDVcOJx%i(_Vh)8H}0u4eQP(BxOGgn z$L`^S-Hp2YTHIJ{U#c8kyz#8>#hJ>J|Ls}Q?6s{s#&nveT*}V=>&(J#+t#ko|5B>? zdZ~ic-(@$W--f*K{a1f(1JmKF^(#1^WuC5!+Ol+peA9g8>vzt~Y5%Z8@bbYK6BOq^ zpZ6rn-EU~-D&0A)oRgZjsPOuftrMTAnG^~>D&=?|`a-|EdE5HL36p|a zcCTxYT9q22eZs8!+oImh)2}9;x+(tRjt!4M7%#`Hdje|``|e%HUU2Qqeuz#u8PM7rx>$@3t^vzt_kTr{qU7r7M;gds=T1l=~vXk;%9qt%DTo_qCeXRk@ z4nA!Gg$Unmz3wJ!FLZx(LcI*F8}gsmi@BjDYjX@KBu~TYqpc? z=7$nB$`j8P^E_DmN#@?g_!8r)rmhw4 zv+I+cT7FquEU`O2uh^i%EJW$`O9y!_ZL9X9+n8o3+lcOcqW9UjR%?HBfz&AIz@SI$jlyOJF1%`cc4+@edg@VJs-)Lu-N0JOn;5dp<@m5A-s_qf;@-nWb)qpV(&F* zp3dzcpAlx&aBpt9&HiW3AH+))++CLXxIXB4?E2IG$obpGHaRk1%00aFFQhH4QkVZw zy_EHR<@VW`59e&#WBV`e;=7Q#7fE_wA2UA-y&rpf=I=>N)fRnj4;N-%-SK+1uc7=a zz64eO>#kP54z)*)7e5K?d*gS+YtHfCwsH>@4;8b@#GRkW@yBh+vTqjr+vB;n?=j%t zYyD>Kk#CG??rLRC>$Own_}uO??O~p?Z_>^~$NL-Q?kCQfkZ~zz)^UrdRSlo57Oodc z-(#u%hiBePwZ(2Ow=Y`P^j_`GUo@lR?9%EL)(uOK1T3p7zkDU{%)Z9Ckq|1pN zJ{V@59jC{@ZhhnQh7gwbUdN>`|FP4p|2OM+oW*ag{S4w9oHw6(zuxEgPwR5J>9_hl z*JeCv6s%YtF*sBxEv~NDp`6#_r zdG@DG@3I4?<;Lwy$+f$de1oUBW07!7r{m&@;taVyd>=P2_Z9ZNd`CDZzjQ}+KtDg% zzVdDPD;tl?bI3{`ewlsZ?+&>Wo4)()4751ucfWG3#Wvy8s+y1&cF%uI6R7T$cRkT4 zbU01(NAu~T4G+1s=RW7YA9uH4`}W^_2`f81GF`V!`H)idYVL`am|An0*pFWl`gU*F z{#1CE)bH-<+*Kt)$LBO`J+z=Or(O1#aZ28CnXGkhp7E8HZ+K{MXghQ9()V!=n+gOE zr}uwsUi9;~VSYQ)z6TOhtmQWzVcLDkUFhvThBZA6wZ+k$Y4Ix-{^OCqeJrBEqlDX(pe?wcRxFlTRN*|d4y z+M6}uRSlKQ5;qH2o-H|(Go?Q#O`P5N?d(s1`&qZF-(36k`zj~yKHh)Z-Zo$P_Q^Et z*l$T?N9h|L>B{~AY$h8o{$bd9%=NNJLhylQJKt?#7fH7|zC87p{)e|um-Z(fI&YLS zE9p$iz0AxXSCvI;YNL;2er#R#rss~y*?7fm)3-C`&(hYD^LWDGBlCvCwP9_6QPeVi zw)edLtl2X6THjlh-DiB`G~;CGrbAXQt3Mi>-vnE$)ZVSBmURX1{5~a`guPO`_=YdRwOV!0;Wc3l`**lV$ejI= zG3)jAU*1Xne=i-U*5acRjq1n+vMh(d8rdhC+o1zt(8nvpXeAig`YW|(Z+3yknv-m`{kL3 z@@5@BVz9+lZolW+Ouo5l&*ZHCrhE-hS#?o_<>ePiQ!9Savz-O}-C_K7-|B=bDr&RW zDRE>(T%K3Ch-;6gx$K+B)BZy2bgyD= z<0&iW8_u6@)t>y~G2y@MF=xIX309M`)*j4>RL_3w7~TJM(PlT67mwO~HlHu--E8;o z_*Kcii}yIMm}Pz2ra$9zS%>lQf?FRGQ(}sKv^&e2#jpL8nH*7im238gS!t{Pes{cW zyTkVSJ(koj4<~)gx)v$VAbD1;TCkwDuI^-g=i+~F{!IG$ai7tqpk<$VH!Dcbn-Ips zU}M*|Z#GX|&4I_<2i#&@uCZ^w_)R4%zmh>aa>L|l``_-l*V-N`I>Rb#(J3X3#g#MG z_Y^xtDXwLB7ZS0t^+oQ~H&rXxJxcGt^uNBN-mxRkp#6;7^BHQ75+$&GCfC z*G8}PO4FpS?mZv3^UZAQFQqvjoAx+IK99^Tdn6NPIBnK>hv@ya;wk6K;x~L+ulR1w zfqh$D8xxu?WcQ|vT8B2D@9=Le<(jk1YiB%Po4;gIwRpUZopt=ryWI?h(EcFO_%gf2TVDegv%X39zAdyooONL3 zkDVgkvtA3nOD&C=JD=QqLKJ7*UJH)%V5_VWpz8fnb*?CzPkFyoH1yr~Dx8y`RF zWZH23XS7pc>Wz-eQzD|<{xHtywFtOJ?wbYCM>_PhaxvULVhg z-@i?p|Jf%i@W~yKy_c)=Hyu$7(Q{dTy(entwrgIjOD@0C=NHQO_BYAhdC|)w`)0R= zRU1l*UTb})Y}i$%9umBF?k{W62h%U79A-SbG&y~}uH?GU?Q;F=8D87JYWkW`=9Rpq zK$)9~uk9Cy-8=qcmlmF!aI;6uYK`=oh5w?D_RQjO3zz@!CfGsb_@t_sJNq8Ver0nO zcDDa#@@s0);x}pAjChsAlVlg3G1TCFB{^N*`nJQ3uWWZOuQuq+W4-gJEv$6S>%>E+ z9zCtQ`OI%I>(SKO$oaeaZwuWJw7RTO>uq)P@JoaDX7Q^ScK2j2y7c6_z_sI*$8K`Q zO%3cT_(1x#VFsr z6~ndW`SxrRrK9&(@-1AOkQQHC5Pc|uG5^fP^qZ_11yX802QqoC&z3A+F;iLO$I&~^ zVG>F?=~fZ~%X0J1#aV9Zf5qSZ{i#uf|BYDvDsPJ}_I&0Q4-`&COZ|Gj^8Tb5yFM<< z`dss%QL^{xKcQyZ@@pH8x1Z_F3q8#I=#G&VABT?`yM$K!QsXmsXKF>xdtD;&O8uE@ zj&$KVd&b!*r&X#a=C9Hj1CT zT3)|g-(oJJdH-1KiaP-lcwoIEs@)lf_d64{l z*Ot1_rypHglmy=G^3SkqmTd#PzZudse>I9DUMaqrcmTRhDAv@@Q|NZ(ktzbt80 z&r_SO%?Iyqwp^R`N@wQum5rWT&l`tEOCGr?8u)$53BRQb<SS&nG@BVGx6u6 zC)@|VY*`(6>R4FRrHw_-SA2L3LbqL%F%#$7%ba^KYa7$5KIi4PXZ%^XzTk-Z+S@+I zq73RET;29{_r1dQH0AzeLU$ zCcbXFY_gP1E!)CwMu^51=Z_oC2}Nz!tGt(~wf5?Vg#C~IG_C&f`;kuX4N;BGS)CV- z-0^s=A-iB*2ivXL5t{?M4$Mk0OVrVR%6(u{*d&vs8<(8FbC+3o<?!6@IBJ%)`r{Jwl8R(z&1D3 zKHTlSp{!Ik-@n$vq`!%OgIKv#zVOHSs+mli+}U$^W@w$)(O<&nRPOkihGostELbq( zMz6(n1CbjG%=1p)Fs-QD|5~#1%98@O^LrLSIlP-Q*HvViTuhl& z`}eD3N8r(_7Tq}ojrV&q``^SSIwz;kjh=F=FVL`e=B`U&h2OQ_?~N~WmYQVgk<8PT zcC%x`zcB5ZqRg1~ig)+FUqA6!aL>xN*9w6j4sMw=^>tfSk=9ag*)-L#pqcA;M@--K z{@T?|Chn>GWx4fR4Y%ef(Cl$NzmKbm9xaLE>LEDxMq&?+PQZx$j|zI=561j#V%YadxZLS9-scZg2lD>(XM^k zthPQ=CWfZYDgDyW_2kLN19vCs-#KkR;qtx5x2G-s^<yxEz(3C}n?nb)yv-z(m-tZ@0F z{W~9C+iG(C&Wz#}d!ywH_NKm9if5?$d+27}#5b}!P4AQ)7%Hvr%zkFoCQ|uw{q@*6 z{7g4zGF@3>+2E)1`il8ewVAHM**?CJIVK0wj<_#7YooYuLV;MJ(-TpRFMVmI@r9qa ze6^mLyL|eL$JPh_euz8iaql-rxKCAT!KQu80){1uwP)Tk^NHmiR-RHiSEfL?URlbG zqrj)drhD$!fO_T4Q&LOR7aBd2{l&GcDf7_geM{_`_p7GP)<1J3v&_4=!!kvxlG*Tc zl8Nx+?+j)S`a*lG#pDm(?bwsrro;P1^5(DQQY)6!?BvK;wC?4k?QKfh;cFURWCg9$oLo77isd)EO!m~)w)wMz zxqQu!E)SE5HnW_uZM`ms_0)-_pX&}!t9g2BmX>Ty;@sG-td)Dbf3a<6vM6|%_J7@M z*O?PS&04lJp8BO-5^?s4bh5>b$7gQN>;1;GAn-+=#oGmMlC!<;m{k9*wd~k`e(A#v z*I(;bt$VUtDEiwXj^4$chd=dHf+c&^mKlUI`6xGc?PzfrlsdQI@|gB_0-EMs_Mep@OQGweNf($Yi7l4G0aj?8x@dpCKz zo;)tCD(5ydNv`DVxz9BFPD{bPFDBC#9y<2H^uFBL%or12mf)g(Z}Bt9(;HJlZ|{)0 zp_X+(VfokNn|zN<*_|En)=OeztdRf4(4Y6#e{1bCJX>@vPWffr+U|~B`OA%`Ucb8S zAIpo{_*afkHN-EZe1732)}Q%6A^y9d(iHBU#dB_Ry1t%~n93DzpCubIm#`^fBhz z@k{A_OVq34X9gd5{XzHHjjAI8E+GmfdSRiL6|VSr_xzORd{>(wcX+nz0{dB74ZRAt zukxI>Y1^ryqpf~VPUUR2>ei!&1;X8>Z?YWryj-_?_BQswy}MeMtPs1Ld@0VyLgfX& z`a^{o);VI4`!aJr@D&!U@K@Ymt*QCuSi({3s7yJC&C##ovH2>k-k4`HBS+^J`Y$*`gS0#R`oIky*<|c#k!Q+e%w%N9Q$hgC~ z=o0VMJ5wh;<314Z|H~P6t@z2C-L#H-ok_ED)!Hh4(ME0KN0Sx)Mcfr8PnXIs=uvH* z@KU!iwRWfUt{Y5S1Koez)DQ0PzU$UvdnHS?w?3ubblq$n1y;K@x0NY8!m-s`{=fQ~ zs&r%FmX9lzZ8mtwvNqo0>&zuT)!y_eTk|SvcL?x_%n;8LSXkZIE_V66_m!0gwB>zd zf|`pRE(i1^IxBhW^=w|ku!m(tr0q)iuJON<~BG=eB>{8g6U#CTH=&<+INn^D#TV?b(eFj+{SgE&3gv-7lPO zvV?!aRKb<3fuTiu$E{=afBV(AUwW)CeQL>?^OugAm@o!@yREZHTP|})qFc3%v;1lI zZ&!D?6~D|_YqdXYL9+!zYdB+`4xevUZORRkYPHx*hj+$m(_c-iHrQRJq$bnZk)v^r zc`kq1mXwYj8>cC;lOL}X5`4qGm*EGOna{mTOLon7BfoonM>R zWh!mG}mM{IzsIvCIeAE4IPehBmsq|dcGkbp=4HU`MKfHHJtgZNj(jKozchb$5 z?w>w;=cW%w4{wm~t6>d0)U0J^u=Bs7JHy2r%#3{b4?e7%`s0CDUyAx4gYTM$Qr7qI z%;P<15-&E*FW}Dwa3h=-^x0!da(EX^5v7| zoR@!asPk>*yk^~?`gd>Btge9jc8*bQ+pf&ndmwe`=2cS<20FZ(nq}qECvoDXT&j$m zgT=Rsd$RWTobQ%?IXFe;qVIx3i!H2@ll{JBFxq-{y!aXmR_6cZkc*(VI=;BgZ zIJNPv!}7Fs^K!30H~RZ*hR`jpNQ2YQU#E3le#$O>bIKc^mmO}$SbG0wRrWE&8rY_E zZ)Dhdtc*Qf^~?NS2FBqp6gj?BPiUKLy+&~Dj%Yz%$0J9keD*zNux(E3OT`3XhxN>T zwNGWF4_`K$xL}%SYWlAV{lhH0x4m_(dIT2iW>9$0k$GTV^2IWx-8b^K1{QPfd7j*2 zF?UYd{pQGBLTzqN`SW~vjz&-TsaSmEX1i7Rn(w=Lx0}6PWOVELT&}f_Q9)&K6T%K| z-1Tbx_YD)9@0YpWJ+}JGs@I(N@0z?>$zyA~u_^ekufg%aF41(EKN>MMK@P_sZ};tE zUbdB8pip}gN8{_Rtc!+nZ?jobmX`EZ@)fZbbZfkq+V*0;SNr47xy2?=&lc)-o?3BZ z>d{G+WgA^iw=Roc_)&=2bpG@+N8`C1IQHtwUfHQS*N9tdv$eye7>Cc!Mzs+Y2+7H+H9t}pq@=g$Y$;}!E(S9KX5ZDzljxTi?;`C2)7Rv%l1&xr{|ysbs? zC(L9YOkLdiq{QH<^Y=tcxwAW7b?p<-mQOga{?hE4a~ew(G+HjnAMu&r8#wjdyB}xQ zCxvp};9ARm^Uy@)%x4}4`gcuz@T5fc!bV5k%bPCE$ra!^9q0Vd{*alo@t#mpwS;zYX7ZC0vEIS!I@J~))>yoD-Tnv7lih#s*?O@! zaB;3HoA(0+DW6oXw7$(Br??j@pYl~quQ_z=hw=}d%{kj=>uoH(JbT|34;D7=JpDlT z^u4#;ug(zAVqc#W#j;2t{JrYg7mm6eVSWa)PjJR$$EURDWrW4KvhJ^3bE@oxn_!yY zq=xnfPojTjwy+r8bbi8GH^ zwTHjdam@Vjb`Gny;d8sJL(*o&Dl?}Qy=`5XSsQ;)IC0I^6L0TEZatqQ#crr};mn+* z9ZeZ8^s|_hlb=6uXj;YW*4a15$Rgv_oS*C$e7E+#IsVuA%-eNSbw011zd(Yii*xJ0 zm$`zu5(_@1{+a9ejm!3UhPx2&rrExK`9CL_%%1MO;I`wJeN}uS?Pn}6U3v7cu!JLp zW9y~U%1e?f&#t&3t{1*(W%1=Z;y+to@>eGw{T(#_(32BM&#W2p1K6%NOnnfyfur`$ z6#ZfwivV%iNGqQhC6%Hp8nI3J2=`cH~kb#dQqOy@gv^B#`$`h z)vfJHLj8x!Sd?sz1s~tMIG2N+U*YmZj`zYzr?!0Wn5WzjC1u}s>fM4pTXauksW1P@ zkXt!n{vFv>$G2;qHvH=Sq5P}6sr9?9Jzc-My`RX=t&oXJpR3OxlI64G`e%WcIrpX9 z;#=oUR*s&YcDCY@sqZ|UUsoOX^HzU$6`9sOb^3MF_Kh*?G;LP+obEb5*rvQs*L3={KGlECY7^&XO-Lzc_ka71X@aBc_j6Tq z*`LY?Fmx|XH@a-_RVd&Y1G`~5NAh|TvxRqVK8b4Qo4UmLt;K@N1*@K@e))Tg$!Lp|78dHs{Nik~#Pmd}+@P%sZFl@lmI8N-o>Rv^JyS&Kus9oGGpOf8NUOZQ2%? zvb^_SX7Y=RZ^T`e*>WT%)d}Bb^zC8fYp~!m$oDa0Id*f(efKGza>sbn?!W0yo6E}> zQSQSdIBnhr_W3X8%#Y{eZMX9}C7t%-Le06H*Ot@gEim1~d||2dzSA2osfMQh);<`x zc-}x@TZd;h0(al27<8-g zt#j|bULF2ksM0lS_NS;*O&ph>=6h!6+a-k7M4S13HW#ve;C6UTSn`eCNmnN%-)@*G zcKQ62;w@_mET4#T{7~j?SvoVww`}jR{)S^2Gnuk;mK9#*m^Rz;pWEpSiH#N$n%-Fi z&wAqRYn5~S;$f+^t7N|3I-;=V-)6(tf2MLU&Ck@HxNx`VXFro(XTBCAKepG2qNNPG zCH62JQTQyd#PzcFZijCZPKUSbwvgf79vbC z)BQIy1H^Ysk!JN5U1$~<8h$x@y#k+n!d2(_scY754QJi9=%UN+MLSiPoceg>rl;NI zVscqEuVl(5OSNeNZ8b}uF}{~$KmO%{fKRlp=9*823buRGyC#bNF06LDP*QFlc=W6C zg&?=yb7yKzLc~6LCcpb}+kc1au^;}y3(WcXuCJU?a>v0Xh`Z}xn8%-hcR89-#+fOW zX&tlD7VlYla+Ox&rcZiOt{<99D=#M0AFN`OeYNkv9)>l}@4I)bS^uyvATn%DweQEk zTyO34?+a$6JH|74?z`YzmX*|%w0F92pYM~_b!R38AJ^YE+cwcz;Iqi4mXf&shRYh< zk*SA*v{zoav@^kMr%Axo!pM0Q|GWFurd!rL&`7UX$^Wu&Rb=UoU#nO)d!0XdNw;LJ z^GTDuZwHeXu%x%-&fR{X%u4cp=Hb%}d(@6*Skrobi&RRczja#Y zEVUU+nM{Q>bX-+iCTyGet*&=XW%`ZM4_(QBPCdw;nd-%8@n%uxA%mRmO*a`!>R3u1 z+_`r;TZHxem8kg7NtxUA9>~t!a(VZ!#n-sk&uJ_&7hibf(`!wu#Kr$=)P1YxcgAWY zE(&bZ`K5JCOg)VC^N(|kB_76YK0OLE4W2)p6+JgT>Cu(1vldC{&Utl-`CxhX%EIg72&47w&Cj>T`*ZeO2e#;0^VdDs5l4S~W9KW8%dZI(=%^Z0PrTf3q) zbu8OUSOk|P9FRFS?edu~iT|FeKAvHw_+;76>AOF&9uR1dTb9+jm%~9;__f_W3!_&b z=B<72%itTVcjioS=JN6g-{d7(>lJd=v^6z;;+nF@ap|tu>Z!N(2{VHa%Yn zPuGpiT2{ZQ>aTmTYyWS_eP@+@D}wFUzP$0oAn7>k0{>Ef^L=5L*FBp&^TgS+h4ZSb zrtC7j8DctF`9s<7Rbfm=b|zetHazT=_$zZ&hX0R4C)1VJ3D1(N65%~N_2#9=8B5kh zhW(3MVQ) zWc@$0amLkK`n!wQ@+5U!?md>{C>3^LWz6>}5;DDtru9zysMR$Je*JceP~ znQxD-pKBKMI;LXlb!Dz+qW%NVo$edBHFvH|e3iH)p>3&*(Pm{$mh@9AtR87h)Mr(= zH6zsb(B=95t@g(ggAD&H=l^zAG=e?n^YGA}s zFkS2L`#THxCdY2Q|3S)hzx}1IS4rgGP1Xli`+Cau-25$A`_WXf z@sMl!r!bkF*Eh}9Wmf&wYPyo+#(W{?ZPOmH@tO9_ba<|_)n0mD?7Y5pA4Ob_HU4Nyd4~cdGb#zWy$y3CD%}mjrOLZN9rN%+A@g_;g$B=7oYDT72qpl3z_X zz5BhoD?Dy_xzwzAGtJANbI41{X`fT7 z{c7JDA_7E3w3|g9z2bB=S^Xp>seRlge5siXH%z& z*09I@^eOl?uj|{YKbnubyFbVU^13^*-uS|$zl*iS%=X&iONHk}_8lnHTy^bRcxaFO znhm@cu9RFo+GVPFQMk^yHS(oEet9vTbsT!54WlnA#RiT~lCm zS0O)B?09qt|7FQz?IsOoB5z-^MmKM=7En89)sw70(;#=NDpQ6S=gn;yv!?Y;$-U&U zaC7SQWNn}Da}hR|*SLIRy4Cl~V@c=dZ!}rxg}4UKPlgw(s56^5P9Kiyk+4Iz3SBF$rPW zyf^7mc!-oYU$y3<6Z?F4XI@Lvvv()6UpzPFL=3^e&*;VQ5v$!S8`E>%*S{2FzI0`q1XK5au`~2bEhkn|c8qaP8 z7xieQy^nIdyz-*>G5_gDS6TD5tvl1(YU|g0W@={0)tIwYCl_1gwUy79o)cQ7ZFI)u zl*Q*GY{z-}a?X95=l*TdOF1=bE$(0I<}r9|GfF%Brg-zSXeXUG-TRX=wprwI?K-;T zdZ(YQS-ERdOr)ZS7h5({|ckUU}bimqhxVa9tJ~=eYMxHS8bCc1!4_m?!Vw zG2{Ac3+}8dFUqZEZf4>OtO}XC@b;bXX|r?Es-%3i zU+#2lHqKFcx>Eezt@9-}r{~U2I1{fZ@%%;8*8COPdU6g|&aHVIGlzlq`;J+?pXKcJ z)@?W^-XMH{(`oPTrr$pr=X{Htk*p-1ccP`~yF!@R@yP~j9czAT&-+ji_FQvI3xCAp z34N++^WR=Sl4EeRFHUAh!~40X>&vDqsqb;=kvZ)(-`Y$+^LrOd)o$2X0BI_K%#CnvO-4 zqL#9sWA|@fcP7CsFZ(x3Uph>dk89lA;nFnI?X7qRSJBqAqe@-^2J7E^D|Jl?U7pX! zalmZ0#P`4;ZDqf>S&Tt5EgvUwUF6VZ+^_3#e)-L>3Qh6d{#+5-O72^{-Y>XW@=og1 zCY@{3Q$HF`YOZ3vdh!0fc~ARFSDN19X#D%~)W!6~zRsL^Ghd(B@0`SFZ2ffhP2IBxvTe>R`nIy8CQm1K>dy=3 z|M;YD_4#h~dhgBG&6kZgb6n2cum`lMtoTlj#vrf;K# z$91dpzlSq+Y*0+NYjW}W=Bo5r+e8yrxAmv#Gi~};m8vFPzjwt$7tdP;SuMTq*4%t< zDtunL_CxW`O~H-^^2?hi&zgT+Ds9*CGkb4I9(+=4{8eDa>vMtJ7FR3d-{0#r*K4_E z@I6aUQGLRXBZloWtFK$Lek+*ea`eQ_(&7}Svx_|KpB%|?H)W69?ESV>?Tg^l`9%p$ zKVKA9L{Ao3b5odOYkJeFgwZ8a>@-nE=qX{ez2HEn(%Us3y( zUGokl7@3}8aVfjC!Mr5sj-!&?Q*Vb}({vT_Q@f1H59A8pUfhv%M0)y-%UARc_~!MS zhc26Z_JUPrTF#8}pzkrC-^@;Ed)Id6q}qz!d*0&L6)!gQ%o5b~6aVv1Q%Ug9uH93s zP90^w$JkR8@mNznGo|Y6vQt+KU*DZTj+yw z&q2G4qHSIWW7@ag;L(4U!gT1)o0o~2r=0p{|Ngn?&TRd{qV>G7CT%}287g`9{RYcRD|g-1o;N9d-kq77#iy(_6Z*FG)zZ6Dlczj9Z*9MxP1|px za=+EY>DrcwZ{F-XFHb*vrls(5O!MvFwEk_z$8Wp&%6;0| zbcSt9Y0A6Iwg%HTB0Dp7FECNN#QEvaKf`(Y=^rAV|B#e9&d^lO{P{udCE?r5-7(8% znXs-raqqJ4tk5mrPF1-XDHs{e-F5A&p6(3iKaXU$Kig}ZYE>F=ML6q$hsvzBjiKM) za#$8VsdroU>DG0b*|uU#bA?`8JN4_R@0UD!u)~sd&eUm{v)pqX4oq_o4hqc+*}w8q z<9(M+ZzfNAHaVd;_i{=AxA@Caedm=6eZFK_+g6#r$UW=WHzV?Rvf#7Q~nwDRheyS&;Cf zamx~!qXCb&y?JsTG95KEnw@&}k=3Eq;jywEf+aJRS3dJw-f@G^P(8%tQ1_J=i-M|j zzq%Y=v_M^xXOa2QgEtQzVDodHD;Lb*>Mm0)vT$8v{8Ih>sd`tqnJ;Yp|v#9F{py4MJU~Ab0x!hKg*Rf6{Jom$^Y%ivxt=3^5;|K{Wk5!TFJ?^;hQ5C ziQAaHDZDJVS>k_y;H=Vww3C4*`V3oT+!^0yzu|gka%bI5=iHYMl0QiI^NQ?Qyz2tz zqANSsvCQ#UCOzkl%RBxHicf^Gh4UT>0j%!d#a1&);YII?S|4l#H z=`$Lc_iyyspxoWlQ2O65;nm6JbK(y=4xJ51bmd_+VA|}#RorrO`<59`c;<_#&Uhj9 z%+$WBuZzLXIQ8zSg+h|@Ooa-1i@H+nYWzzMI2>&dt*DxtC2eyfYFehT>l&wNU(0s{ z9NP2ohQjk_yQZ(1`LbufOZwm1mpwbzzuot1_P5#Aj^S3Dw#UBOwq~cR`fL4*zU=0O z^GphEHzHZL$Ewc`uow(@dHskid1xy#k-|<~NYgMaqER*9mYt#R2HFj$cM&@TtyBWUz zPRFdY_46$m&c8RQaAQ7Fa_#@31^%Dq9OMMlJ*5|)yS*Zr;q%rh@yi&pnw*8_ZWsB} zrIC2XW99=Ly@{*2|L9F$`ss#G(ToD#S7p`S4@CubX+#!ACVIuhs2t^QoO$kLOl<7k zd!MEs5?NK^@R-44P5hKs4}$;x+PrJRtK&zv?01{Dp>^sVRtJR;Z_k@k1BF*Qu3%#H z@>b+Yb*w#OWYf8DlKjf;wJm;U{A@#H+AgS_>B`^7RBZELdQZfe%pMVai9W-l3z^Rf zX&3QZh#lOa#i7R_k$rWg^HSX`(b_3G9%(F{IaeRd);GN~uOs7}m%y1h$%_}OF?h!< zsQNp_yDjUGgpzbT%P#3Kjnp5B2|TrOb#q0wz82S8>isStO2+b>Te0hv48GYW^VxOE zP2ViM7sAKRbeXXj62nZGSY-P0u6X~u&KrA`^2n51ehSR^cEmJx7h*z)O1mub^1S4An4 z{d+I(<(MMEDdXv$cBPX!sHnhkO`ZOE{Rz7_C7%)JnY1nD$4c#J!JOlbU5x8bMuq*1 zb3FCLJ=EK{sA*?%+18~D`)_KRzGjTdaNTUS+3)JyIB64;w}F;^t7NZMY?0w`zP(02 zYF6v~Rj(vkR;~%WblPH_p5A)7mz7Ivx4G>1s;Jw#s(PE?+j(Mt?(F5icv$p|mC_y4 znfIToW|lQ(iXATAj#E*m*F& zDIz1UkX>9tlDEO?&Sf=!`!$j0=iiOFe=p%>`_;wXW%4sDxY-jF4jhz|Pk)$wwfUT` z#ly90niH92O%z!hH7kpYnWfAVrcd8<%z?G0proO=u#}VUK%#5B`ISbI^qI~5&0GsP zg?0A*@b5byzU-WVi-(}8qe^dtgir1z%a^}u*tUr=iuua&=!c037%aRUaZoW-?5R(G z`Yzrkk7}!j7lL<)D_q~m9cOxQN!s2I0W*6vc`h)WXVJ4?A$zJNqf=nI|MxW}rDaxS zEQi=j9JHP0A2f`g#pO^Ucrov?;@>z^{{1>{zb=jZabjnd_&<}585~v|>{FEI{yyF> zx6oS7wko8YX-Y_gQSsCrGosa|pY2zdD);98-nDpH_LZE3+96!McCyBY-%$)bf`$?V5aNSS3Ev9n0ecm6!Dr0 zBnbWO^Y?ezEO|O_&!*PqW6vXAoDOxF5o0?eP=qtP;K}OOj0X<4JY{UmU|28Hefb05 zzUiegbypfwHh!Au&O1q0q|sx+1kKIMxbNvtT;aGWW8vuyOZ}B*1T~kGF=z@LShFo4 zq>_`V{YST!cCuT7hJf*wjE<9q@vRRYFxWL)?q-S3{1j9A%tH0JW$^{3Hx1TFsb^)P zug%?{)>U+4k$+zP`*rK{4fedxGgK+yWfz~znz(YmNnzZq)7~||EZ#ZnIUDoN@_1#1 zM)tJ)aP_#lo7MaNEd0}7@OwsCn?)06+$mm#RJ)@a#M4~&Jr+8cc>F)VRnnwOMGX%6 zANm$brax4k@v8QLfe+VwZbz>pw_;+>pUca8xAEQM17)4FrvE57y>^<@I?afs2X;Q~ z>SyK>=sX}95TkL|2`|=k zV6mGvanbqd#xW9t>a`iMjeauW)AuY?^mL24afo}?k(KN(B6$jZ7deVJa$K6f=1^6Z z&@{0My`yyp7r2B7`jlK@Vcn7wdZ>E^m+a45vNIlS_HJ=~68XoJKjX;On{T}s6s_03 zIry6I?8-Fb=nbXzSE^?+7>2!nH_x`duJ*4?*7P0CENnVIgDxd%m-b$qWm@&@_YOAU zLpyq$J!F<<=E$(yZw|9MYq@(~=KK2sMcWR`9^l@~aA5nl)9*Y={>O#CS7X0Xbn?In zb*1Yrdv>KbHk|KlY*kC&$M1XMN3`*wOBze(CJP20ouC%wcbtRa(YpV?ew|hKSJqb% z=y%z1hqbousCiAYh~2KLmgi;MssqJ-8w2&we?r^&&=17NOm0)7Z`)Fno3Sg&R-GHKzkp zyr=P1nlvRkK1ndLzwCT?6~q3(MC;W|N}I!MwDPN1g*ODxX0<)VS(x=EiAAnYMrqcv>lgVZ>#c3~{&RTGiC4Ni7#3{* z@_YyX%l$XhlP)^=FPL5MU}=y2V=<;;-;m18rx(?ntY)Q6(wS5n=e>&IJ$pc6(Xu=C z)!*KnobCT{Nj(3fjZutU#roI8by~xx8%ijp*=(PvtdXF5E#}eey%PIxq$Ry+lll?U zd7(p1{E ze3`J}Yyq9!E8DnaVmLR*Ke-et?iJG5y2AIsrAQuzP2O=^La(GMg3)#kh-kcr*Jg2^|3?0!NFOA9GVA?oJkT|^uWD6?ChHPrjD-b&M(q_9li-_ZD=dyg(|P-D8k zwlm^U^katd{DZ6q9?H2Yg!5+1`5FK6%LB8!{mcIK6;*5~?A*L@{&9(J0n>u-zn{(a zU!R}%Q-giw(W9q@?JVxhIAZ$1sO(Y9wYP_6ZJhMz$DhQ{+V9)AkH@Z(>0tjWQyl$Ta~%t`AWCn@-LKH$r2 zYSz}axHKhk&c}Ton&DHGoV+At#g(48a=!Ojy>S97)1NF4!;C_g6Hc1my4v2e&Oe-J zkaQ^jsX*kJV~Y>0{x@ZTg++SnqGR08SU8sLy}|YFjbPB%WlI$#+*a~)C#PO&%vUqB zzkYt*M^D2$FVjplN{+8NHg}6b*gfkQBgv1l-xg$CxG(yOxoZ8$YK>;nS=%p`6RRfdwQvyb=-hi|q0V6j&FGgAON?R_1Z}U}tNElN z_soF1Hf`gYo{y43`iW8fr_$uJW#_Ygw2iBqGb#UVk$G1?dqP)i?1PWDc&`QNb#$;- z$JpFE@F_}M>PYkU`x}lORMu195q0ON`@iJG{SD8qUOjsDE^m6xp8D$I&pq1FYtD=R zC}I1ze{b7r?R)+QI`u>&{=J9`tNG1%ezU>z{GD8fzy7?*>(pt-(!BjgR9xmE^SaKu z!>140zLyoS$d6$-Vem?;Z~K19OHU>5i74hy?*HMn4*4cn zEI5m6Q~y)8SieUSJECkN-c4L@^G4oe-ktlq5AAnWxiR+`)5S8O@b252_4oW_b7**Z zR&APSjhB=!PgRe)jMU!;CuFB=On7+m$KRX0Y2xzp?kDA{+Ly|l)YGoIF$^p+b2Pj1^Ba$)vTd1R;oYc^*s4}{ zF3jSK+{6nSdI}pC?6P|xs=ZQF+iZpNYKH|;EfYCe6Z&#Q`E!-^f4WXC?R?uRGH-6Y z-TwVQ4joXEl+h2@{{?ChF#U9#w_oU)RL_VUiR$co?qBa4 z+IQ~S981`_zgKR-tX;?EzP2-J+0A(*d;OkYKbC6Wvwc%|MdI4y_Y8s$53fy|yPa90 zHqJJk{Y~e42ET~)butQ5je3q@qa_(KmYr_|Nq_hb>CmF-`{pVxY%{y?%g{N9(Q~HRm_mXpwx0A_ng9y zJ9cV|OT>k}ZWfQVU%()I;S?vwqZOP|Eax7~R+gQgtIhiQw3u(Un8_NRtpSrx31nRp zIsW{?XFj#Q8*hv^eA=)g%9p=D#*Cw--MDkd56OqW{(SoN@1OqPH~Rn1{Is4IyZ6r* zA@1ur;+op87jy3Vb?EgLyHGVJ_$}cJ@y9uK!}WD9iFN!6#)#&CTshP3&{8Iz-?4P`vr#Nng<; za~{8LmUtVrCA=fufBnW^*|(A%9^cjT5uLMe{ZaAs3p;ocWRL3}Q8l~1JwN7--OpS6 z^-s;~FWdj={eL0nX_0Z-6!V7#|>QNLH|$O+`a#Md;PEXcjNw@ zdR*S*>HKH?>0>SDbV?4)Vt5%KtX90uRPE`7z+x$_Yq#gmP)sjwVTpe*k7@s zF}#jG*M$sIcl2@k%7pJY5+85>_sep--{t?#>DN6`-Y)<5#Afq6`GrqbOpN)|>i9@t zu}_VLOYVoA89rUtdi_477 z)1%evShl=*!Emy|C|zOg>UTUH0VO=sZ{44)XQBA?OWu;LC(kCl+q}#&F?T`RHe)sU zWA`63|GR!Z?~$U(_ggp4W}NQ%{AEu2`Ooj)t>6Da;{LCFwV$u=c^~`#(EGpJ?tjj` z|Le8=7e*gvyX-z*6WTvY!!YuBVr za&bq?_4MriUfON<>&>I{f2Yd-zbzjB>C3C9>C^RJ_c8vMQ<=J@fbr6Xlg-PIEihbD z-gZ(udr!{ezsv@EHz&@&T4x;P^YNjPd#>f7P|m}imAbE`qunOozw|E7>#maH)9B6X zIDYfUwI1Kz_wKyh{kwZgs{c#mYwrE|FjxXuOE*RTJKt-nD%yo%`2&0QT9)=r+=zD zw{M3&gYPj!M_pDABh@8@#CSmjR8Kbn% zx~>UZ<4n#byehG3eQ)#k+cE8_o#o;QJzWng@0|U4m4E*J*ZzM`9Jenm|EjHDyVCKr zRKV?uU1~xKQ_QpP1;m+ZPEaZ6b2@3KRz`(ItV zE}3yZ!=Z|`Fl^oo{%XnDlXm}>KGIMfx99M`H;?WAUatRHzxQ9X{l{OyJU@PGACqFY zbDd!Km$laWL$JpB{f|Rqt}YG#BLC#*Yd5#}80SrwZqKP(t;e9ZqT8bI!a>8N9VUxv zDlYS;UzA?G($-1ixvS!3r%m5`5A@DTHk)O+Z~hF6pi3W)UYDJ3Q+dqfb$Zc;U;dWI z@;&3`+S>20F01_itiA5+^xE_CKiAd&D*yL*NA8Y8vyXgDmPNW6LFy;xxGb8^RUl#S&dyQb*{bot2S@XiksG)=UDa#t~@u} z^G?C{hoAV=W-VR6y3OWV*wLP{#g;G6tdz-J_B^U~b=Wcn`F3JG{F*bL)Yl zn-lN5cDn!4>WD}$2JqjxOkj6WiG%iGm|pZ{;Q{O>1sucph_b87W+WXR2IJn)cP zRPM%87DX;e|LRhk#(m*OnReYh_nQwNTW$ZS&Bw)@ zzVCN+eR1ixXOB0V*L@DJKU)7Y{r{Eie}eC~%)fJF>Y^VW%}l?JtWv2ge|xj*g_?9*FGG{IzE9?>`<}&fgARt5 zKJiNbrl6)2Tg(!-=g+Cr@^$~K>)t*8_ipw_+vevL+vlC!q;%j&ac-MLa@MQEnKbZwzJJIb@BEUlaB5GeaPji?)qobr@Z72RtV_wI;dl~VP20gS(>1;&W@}hGZ|P-s@Jw z&281J^*7Xr^F{OC%p-!zo3tZ2j4e|CuskVH**(CZeW?beunQGvybiDZqH;=Oq0oJQ{Ji8AMg3-L-zthjrZsFe>gV# zNpqun%tuxw+eb@y`+nbcpPt_T{{D~Y``*s~VO;;ozUqJVJ{J24tY^Em;}{i=vp4PV zeG*;wrTb&MRh#<050n2Wb{g{YUTs_&mat($ox?@G_Kb7lj-A$XCpHzI`LZNX)5}zq zL9}7V0@s-C=RH2Yd`-XF8&cMlXo>9congAZbMn$<)~3fSPlxZ$=P~~0E^hJpBdgB) z^YMGD|22Mo{r&H)^?#!0|2Y#}jC3%fi2~PLqpyvGYa7PtCb;r!Vb2q~oUW zDM;dr#D8a@_DhVKO{SVcZlM{%0!vHQNU~fyk~in_@+ej{iLI*=v%gI6)2(uzkjAj& z0gJcqJY|VFKW6hjUGKnZyrt4N;Z&eSp@m_mU$w=d>ul%s@74VIangGKo7Z)}?LT}u zn?C>V6ZQDL$I>@F`mOgTPhmcX!{%8Zc+37&$lMctmR`lIuEevcu4(2icDW;*A;%;Q zKZzu~OEv9&)>xPEOp9A`4(DboTc)~{Q|=CiHczDc;?Ee~eRe>;=mb<28bW7Bg1_b-Xb&Mdff_3-4+Cug7kko_;?(SuJ5CyGRVKJJ&7AGfQb zs`T5F{<`nwwa2&r?|%N{opznv_jhWq4*PFv7qzoL`{m*h_11!8Uzu6ul>h^rXoQ@fJVa(SO&*|*W)o|H1;rPM6oe$n`m>2u!koWsPH$I>K|E>P_ zL;tuvhi?3c<^E%%Z8q=E9RZ%l!4atvhj;v%wf9niqsisu#WvFpv9@_X57W*%7py&< z-FBW*9{W`JhN}hw^^%#YJC#n<{LnnT$TqFO_QK;$^~cPw=70S2`4N}>yXNB#5ieFN z@5|bEV%pdJJ8GW4)s5g|lIF}#Kl=|ss5dEU@{G7{T_TJXJ9w;ZCJ^R6F*JYN+4L{rsI=BCDH3%u2 zQLssMXW-h6uV#B&bTBHtG@f^9qOHT}iJ@lgZAM)2YyVBmWsfX0c(N?w<;Qn2@=uN@ z96jj%|B1q!3TXv4!)@<=JY`$+ul`Yg{dxQU=WDs;ekTYpG}*6`$!DGx^Qxv<`M-(u zJ%>Ii(f$>|Hj{Sj*;!Fj|LxMvr;C@Le`oi1=Kt@X=T|cu9uNrF#n5qV=J(fD6^W~w z&*!fxoIcx1X<4aXWY8S$6NUOtX3Jzb_dlP0!1_H$-&YjFL}@3zvI`TtH~iRzkLccTxFino-`cdnnb)^y&NG{Hy1KKD zGb&{*nzq`c)LrAi^CLH#=9fxEGkPh$SW_(}705%vPO@i7PlZV|_!3 zzra3etHRY=dctSRUzo_i-+#m)@lUA}V}FT7tm;{-PpzHd9X|sOi0}Kb+9D#LAmQPI z;!6^X`+ruj$G@(9eDUV&|NrFwFW&!q{@*m8;<|73X?^EAKZP;e|2pe)VQI(uo%bGR zGxdL%+cf+4^bf*z-^KN7-#niGE?Ol^&8l5WZ?Wpr{vxn8*WtLxr7T-A` z@KC_R=18Y!_x7UK8I7G)UV@K!1odhndVWSOSRI~t`mO!Fr7V5_wgf#`V{hHvC&pCq zmbIbVOLL7*ms;g#<_#M~4X)34v>|fsGH!-sZRPtxuiSs}TxFS2Tw~B6xhqgU;B>o* zv}NsM2DUi;^YVLN-+lk{LU`SS>-AsT?fyL69Ufo#_|?bR;r$;}e>@NGf6(c#uFQJo zhS1fUf1m5?-~Ziv|Hs$u=Jp?J>;GMS-F%Yd|rqrxFozTG_`j|H{X0vRw)1s!x zYJt?g^lk~(jy`^~r{>=M%S8(s#5bHuy!=w;{Rxie`+sh)Y4(zQe))cqLdL_}ON|PD zc3s)su;%*3SvIx{L?-K(%NbAFw^YsQ$6KEG|EDi7rCD^bo679ntk}-*;Q{;m4AJWm z<{v!M|9Z#$P#68!xMTD0>F?`aR{!hG|9^e|XX_7Y1`A|VCR$$GcfwPn__=^P9!JI?>$Ir$~pf77IM0*Rh1J};bSt$pHAqv??) z@G^SJ?3w2{w#ix~ez&$Q zOP}DnuY4On{MhQh??dtb)BpcWl>Z@r|9eaR!jBuJ@4ub3j8{w&08MJUHh6M zTXT`M_ieA7Ph*_zGSekikJj-2n(}&yfwqxy)S~dkwgDAC?|q+IFTfV}@R!4kq_#;5 zy+5SSIiq-1IzeP(#)1VKdcp#B@4c=kpDD%LV6&)?Z^5rAZ$4~hxa;Y0K+mB)+hU&m z{Ucr6O~J3K>n%_SS(Z9AtN z(saw;@rwdq4>6B!{?+z>7x#ba^6>vJ=l@*)|3mrz-T!~{|2?t3hOhkmEv~8i z6x<~D`N;WRcQ9G<;K^puBilWXowTy$mG3p0WwB=EiYsS+Jb1F=!jy$yHcwsXlT!0| zL7w5eMH!#pM!RZ1W_J~9vf(moI@sB6@VLrm^^CPCms%Lpo^iO(5(+(cMZfspnV2>s zL!DX6dTmssw%$3jCFiUmx|Ig;#u5}B<`0I;UAMI58Z~ErP zlcPF^G7m6j=dORbb51qmwbX0Z_oP)!t^Bikuf4!O1*aOW7qthEnZB)9zi!q-BlV1X z^2gszjXUXh{P>CvjcNXS3Us`klj1KmPjB1Ioxr~Di0v}V1M0p1x9(Chymcr3L45he zUGhfD&SW#ZQ_=spS>t;DJNxg^b$6%#eO~{|-{ukj8(~Lnf!^c>;r8HY$&Ydj{7nkX zt@Tb{|Gl}mxm*9|zx`jX?|&Ts`7g%8$jFN48LN;q+d1ox+S| zslo;quT*l!Tk%er#aqmJ_MOWUwNHlxUM^g7xNEA*2dmQ^Z&&yW7}~|I?{G`fP50Hj z!gKg#%W-#0?h6w~{pXqc|0di2`ZK-$XY>AthyCMfW&ImJOgKABLunUl{rU5HAI=@j|9OhP z_LF-3qnFb8F-Om6$IGw2g1!siYgLSa z-WkX)W}$mZ?yb?3?$fheO_s~dtoqti|3T{iA@Se?>2qH9XHWb4`0v-7XQlPy?f$O+ z*Zscse)avMcln*0xmQg-bf$AD%Qg+Y?fyG#j_jXQUR_pNUHA3RpRe(i|32;ieEeVY z`@iS^z1jTydd1{PeXC!)ROf6>j%@VY{K~lJhqIf(llkjZi%rv7I2scKE@q|OYD-$x z87ky*e4=&3`6X_jCm1XjVC@Xtx=5ogCD7*arIj*~S2&bsO>wLA{Gw3MyZB+dXXLxo zr^XzzMvT0RKBcX1m>Tk9+Q|!-j&1$9DR)g(ywUU`X44!gd+)cY+>D3c_^HVpS!I_h zlePa3_xyh^_y3$M|L;I}%}eXJ2M=vXoh}w(q?lTRXil<<*4yJ)7sUHJxQX z+ox9ZGUxc6@Zwzz3w)d(*D56(KQ@1&5xYlCo}kX03x*yM*DIu4mlq$@G!lxbD==t# z`XPm5ZGfg+qEWuzdnwi@2h|^4-yo^!tY6={PI5|>UG1-){GZ37Ity1?H8XsE^Njn) z()Rbiod17%|MOb@q4e5s(=36$GKaKge5{;B-cA=cYB*`pL5EjW6zA%812@3aStQ8oVIYhXg(2^H)}%o ztvNQQR(;}bo2}5s{^fxAGA_AeZ#2Ke7I^tC(r%rz^wAW6zp=(+I0ILDcLZK9s(TS2Z*sn_?O6iZ>Bb2hQVSw^R{|J=Ke zhv)6^{dXk(_v`h0pYL5?^Wpj<&43z@Dd(+Mo}AzPz}<5FN83}^;_BcUt#K|&2bAXrfW(5D_CS|9@~nu+E*pRGz9oJYpx@)AMVdPT&7c{r}|u9}MmPA5-4sqPmbt`OlR9y7x{@ zJ(0fWe`!1apP0In>ULjS?|*0icj5fsKl%c-`{LbZe~T%+<*Kr1wqKKLw3=dq$VRb* zwJ8Y)WlB;-MWam%`J&k!vOCZ4A1D&K9PlvGP`saQN*aF>AIDE4MS0FU^SmPkW<~ZI zIg~WmJ1yAt!|M2B?kU#FRdX0Pr|RsU(35tHCB$|1;sYgY!t5n)Y`tBj7m7C~uXH%T zxZvj`FO@pBjk#%Qw`L^Vs_9_U?7Q)?wm+|2w}=Ssj{WlN^pAZD^(=Gj{g(e;|_@bCxwhGHK8SPen^2EKN zMllLvW!;-kG-*{(3d`!|;^~EpmNSr#g zZI#v*(LHBeHWxf%ce$|Palp!Fs+t`KCKkQewp?e^vJNiS$#Tap$sM#1E4;FH>P{C` zeaj>B9w)3x(--=A#=zwA$wy*wvwpY<&HM1+{?31A-0iErt}EaBXKH-wDaVQ8=T;~x z9bLY-ApOISZ{JSe|NCzKPwD!{rZp>OEnM&-=Ih6HwJxR@ALT#Nhq#V)uD&_E zl)UiA)zUwAAGV8rFv{OwoA1-+~1aoZ=eRwKm>(1XRQ&Ts**!%C7 z=D$$m!X(u>KN1ctuDL1JcYx8pIAY_4GlH|s_-tOuTRm%=;LTE(+m;bm_2DnapUqkM zc2?Cw`*(mq~orKR%<46PS9w`Q?MUY?Wb?i^5{?qS-Su;0i;%0{QQRnMJY|Nnjc z`|Hc|zgK@w6T32V-tT>%=jzY>GPmIT-tX6@&p5GKX0^hjvez;Be>dIEzh8BA^|AXu zw4S>uI=HI_C^s@$K1ouAJ(XzJoiI;;s>va=gbGRCkmb2 ztEsSh+f0GJg#9^}uiibWXfWsVl&4)L%S1{WE~OfK`MlDd`1^3yw43|CDL?k!|M2r_ z=Er;X#l)wJD4(skGxP1gR{P(Jt2XoZDa-I3d;BH+v1fYh?VoefSIkj<8~1C0K78@3%i63?bm>mLDKY=cHqB2Bd%C%QJ6H3l7#(#x{WhzP z-O${o=JITnsug@Lo{Qh*PFQtN&|GTyuLCV_r>@?r^s%Yefl<*V;VXNds?~3y49mb% zE~a-TyvY0%p@*V)up8u~ahZ175-eAwJl%O|_&a_RJazxiw4-@DauXOj0P zk(fIS%#5BtTD_+4VNSgDEb{)l<@Uc@>wmxh7ypa-%fXZ=y!ku+pW7W*do;9Wa%pvOv4vduuA1r9rw$l*Z5P_8YC7{(VawLiX{t3%JGfPs zJ@D*QDyW^iebegTi;KTRNZvKr=h19cbvMJpQKXUS&6@0%pxA><~(iaX=LJ&O3Y8TXFDmeca>u^ z%iWq)`Qpx;Y?&Xt#J?WmFO_OHJ=c3Y_*3-M{2S*3%%k)BuYWVk+xPBN`Q7`s-ep-X zOPsjijd099y*S$j5yzih#TuVVFDiU>iO+ufdUNmm-#?zq&n}z)RxbUCc)mpb@5vF# zaRy5BH*NjUwM>R#5o5$Y7gxms(eRLRwZ?-+Ilj%4E!YmcdbnxB&N;8Vo@sMROjvg{ z?4uxSPxqZbWs4HN+E)zcpL}_#zVFx7{Qu{cm(8!r$~CgHlM9UVQNJ+HO!~#fyt<#Q z{(oPszw_~UUB!Z(lgx{?BG1@N$d5E=E1x-tRMEL{X@rxyvUiW?Zo{ZM_`5&rY6+64BGX+1; zeC~BoSG-?5c>YYk%IVj4?J1MlDtCU_-rj#1220dGt1Uj6aN+gWC}!I)2R`RkJJ-JN z*?#ln^6gK~es5zg>RKPZ?YQ!d^*8QG&9U3bmu8b_lgJY(z4AhVLcl7KNTI+gEy+_& z`~3APT=$=|RxI1G*?Zp+4*wp;2aOxjtz4*LH}dJ<^(ZBj@rdF2llky{4UQS8Rp*Z2 z*xxbFMOH67l(cnQSKU%BmWUk9Ov&I+lTLNt%Xsu^|BmuiL1(1czL{+|U%&6&KX$pA zkE{9XKTrSn_sdJ+p67v8Q>S11;Ckcn${(KfHgz9A&$s>jjeUFmo{5czW^PsD-ST?w z=C$9>=I?%gTK?zSx18!#vC~1)P+l)OwAp^`m!9@p{MT=&?itShyH&pG{P%mc{KYx8(Vofu8yRPw zNXvS=()RZajZl9M{^qF`d4fkOn&V%7t2(pvwnb{$$w=N4b4)d?_UeTjb#Twyka#s# ze9}}W{WjG1h7=;_x-+-HfT(MKpa!U%11ltesd zOr7?|^D=`|MDB~ETa`C`C-`LKCm5Y%Sh>S~Yk2RGEs0*SI_s>@Mqazt7h8HYHoxxm zWOe_!H7}3anL7Mjk=puy`ti1|t=DrdMArYi@-q5+j!~9aDO8 zY5e~)%eTKSz9g_>j`4@5iFOiUNk*DcPDgUW#rOi-k6h_ky5H>Nb&no9ZM*L`RomXP zF_rQK2|pC|ij`oniLPuF;y<~rEl|9Ovpd$;-PDmy`cj7Sf;(KwTUTxPtD~>VeE9Z{ zrMzJwm&`-;C6k%Bw-hrrdvEwyvF>EV?7J?ee^ahY&tDo|VWdCnPVwzt`)}$0SoEBA zYA#04Z+`FN_U2#qxfAb9{bep%|wx{?^ z56}Ks8&~>e*1?B9^ z_{JMNecjnD5{G|(?UtVCp{sHEV-8FG@;%=ISsT93SDM-CRKB?Xs>I>LmwWV57Tr!Q z=<>8(YJKrvn_2M_YYpis#!dqBo$lYibKqr~<%@7L=w zAHOc2Uz?UYo8?BcpTNPdVhxKDH^rn*4d7K@CREOPRNj!~*ma{!#%;^_E*_gK8y@Ld zCJ|_`Y#mFG8bi{~G$H5RpH_dm^yko&sY-DyXLsf9wSM(Izvl7mviO?9KSv(VQdyv^ zksUilZ27Ga_r(h z%<8q{*xCQne$GkG&PZe^aJ=HVe}DbSgft_@)hfmkcQ@SDJ$&@hk_^L}Ca;;Ix9pn2 zbB2G{jD;Zuo($Q_yENV`n4#^^c2&2|Qu=2g?>hce#Jx{{K7wUsPI}_x=4uGuzv{s|wzgUjFF+ zZ=-z`^ZUE0{+hc~FDLTayfVGjH+6CP*^Sqp1v5vuY8BV0CCs{Ty78T%=Cs)dmY=&J z@+eM2|3=n%wKt1S1V0M8xvbprVeZMC>Cu8~G9nas+Iv(F-;Is9Ub&LnviFjk)aEyK z?nW8Qcue1%`S$y91dD-f6V%9ZAnILzM^H{ajstjYApDl@*deyNoMob&s#9oZ6@4@HpUs9?O=M7pI6PckRQZ!}KEn|bJ;(N5%X36{Zm6aXW-ELR=Xl1be-ZSit!JB?>^)d}Ry!_YS z)A9A{Ha*5mRks9+o%?%v`MJ8s(p!Y5xGZmoHf=L8onF@cy_qTeu4ZXSLsa;QIpQA8 zDnZXJUId90R0&Psu`Xo25iTXe(Q!XZ$~z;&v$xoq%h+L6hrU^Wc5hqx#z}fz>jU>q z+bFbhrg~_Mzc5eB$JLt^wnw%Ltt-6$bpH*X6>BFI)F=g-*Y2)cts?#Q=8J>u?^3n8 zm`e-3H%Lf5nV?^peJh-$ENzCl|F^3BKTf|-|9m{fuS?r*-_d8MpYA?9zvlb*z5h0y zzL9cVJez%vH2=n>>!kO;xv}B2Vt9Z2{1c&<4j%ewc$)9^)@auQj*o*FTT;%an_Tm= zva3Eb+r6}Y!QNxN=B09Z(;rQ|u4c?PW0Sb?v)Vm(_vAj}j6+FtF zVu!L)Dt^t$TYTREy_&(3RdJNtVM)4pYau?(A^Z@qqR zUhg`Ix%+k-|2X~qUe)7Ue3N7JTSBTf?me>RtiAi@&Nij(jHf5hGI3tPae9VT>OXNQ zZ)2|SnLX=MCvoyA8!vU9^F@`%(T6AE;>!ok%(}LilFRGnurIZ5_uk^Y_e!_ldDXfhIG9!H;03nJ z4?-K>ZA#s`PAQ@>`%1WDqI=25cT;MXZVBps=(8(h!Ib$<2Ic!EJ4{SHR4=t)<-|TC z{g$h0CJ|B>uiCI~D_iBXQ+46TJzm_5?2UR!-Ag|{oYb&!!UHkR;_c1JQM-Siv%Ybj zBmA7pO0BXC1qROz0*flNpKN$*oBiGHOSC*^;x3W0GduXpuD-kZJHGt%-0l1FjO4Oj z9&FrMD*CL&_xIMD8CFS#XEw^)hOdcLyLnW>xqae(Ii8PKG%JmydfH|7J#b95+Gy9N zx_Rf+GrwxBj^!3^lXcsdEoz6_2Q_o1n zJqWE{X7Wszt19cPtnQ~%=a#S?a@<|~?Zm|Gdw$=w?)e+YH_2IaN@Drxyv&yK8T$B>$sDc>vL&_CC6?Gn(!OR6+2AG>iz7J-S4F{vAunD zQGwp!$GQniqW2r=+7emwckqtANf)s6B3VJ%`de7RqzUBA=v|52X)U#rPa#6(}bHJsVo zmKQ6+wD`dG`4#Uv)%|ZIoLR(5Au}Jfh8ts|5^pI8}8Uo!hYN@R~)}7rDJ=-udZ7)$Fy3MN2;0Z&+-_7UCrl zd{EfcdP)LA#~}`%34h;~l^axl{k8G9{qLnW&F4M&F-h%fXn}d))~gbKT|*>U`;0R4 zecQtM&fmE_`_Izq{Qa4|8-rgrENMB$Smvz|wM^{}gHMc-^MOB)mM9!H_@6T=D9D>> z>59*XPTvxb$Pl{N;?U+e#rX0poddhpYD<%nUY!NEX*pX)+ z`tU@;%Z`Q#EIi9^{JrwF-T&BUrmInMyFxb=1sSj3|Jln%-_df%N>P^!y1co+t`^>2 zydp1_ZRV}1RsS9~ZN2gPaG-YViNIc)IY&MR8opE$-eUJ>5uag8^vA2l7B#&!XYT#D z79Dr?O^Su&_Z`KeTl*R-5*)M_%FM76JY0A6^erjlXXpREn_e(gV8^mmn-)1-i;}*4 z@^;>ym%F_C3a!$O;Tx>Ao@|^n1)SN=w%% z2nKSmz4ol+$E>q!zuOgjKVSc9p?cKb=jMIKC+xX#Mf+Oq{|SLT>XwZvtdk8IPWCLc z@TxkzEId%hXqporr@prbkAqH+$-;#~N><-5W`rjk+PB^O#h19>-`MT{OTWLLw0#5L zG+~wM=kqF>%I4eJPi9Ei@#I!^yiH+Ks2ne6&up=zhD1fLz1M@p|8*@`b(XcpZH3x> zKL%#Q@Lgrg;#d;O(*w1ahO+ofQmWZ56Y}cpOZT)G+ZRejpH4+yczx;4`G!;*xBW%Y zg)4iLmIes??$Vm}O;PdUyd;Uk=0Pr7Y>FChRtQ(i|B?MXO?v(QwoKhP&aDCh0qcLS zKFDOdR;*ug>XDkXS{uot^v@61+nze-Zrap(fBRXUp4pF2TIcO8ZC?C0=l_PgckVB+ zep7m*@u6Mj_RZE$?B1lLPk&gv_x|I*i{8v!^ReXItbLblW8U*t{8)WmGF#luKRL7S zjBaazfRXd^oGo*g-rSNW`8dZkZ{_k#&VvDq&dUbR{*h|yax7-edi{wLv+qiD_{vQ^ z;P(9K%O!^oF50p9!Eb>RojISve=gOCh(BW`75*jmbj0xmtdl1Qt7SauU&kkX-0G{c zb@g7}zG+sXu4|;9yfd%S%UHixQri8lZ)Nf|t0`Yowq2b0QRa}^`-N{x%Fn+sSYUX2 z%0a6Grvx>x8NdCPP?fv<_nY@MKeO(+f0*^U=DW1>>V)_HDn<&;i)+)Ih1%LKzRK}c zkG^bNp1Pzidu>DbYKwWs%8&H}(t~dpTz1ti0WDCFIP?nBef{do#6IWVn1X z1Ev==M|yTYGv(0J*tJH(@YP9isfe2EI#;t!A6@d=X<}H&%WcM?61{6z-}aAuA>p+* zLcoBhH*1A%OPClf$q}Vm$ldL zkuev4Z@m7Q&ZmAU-8Wyhax-oeJ^8RGW%Jd4-^%Ar2=0>&677!S*c`Nv)#mY^XK&Y6 zO|?2H)xULJw){LvbH52^r)}PCb?f|>9lQH}%k{YX96OhrvvYwsMR#$0YGuTY&;vTM2+5}1Q-g!Ey zP304xovK6T+i4ADakhcoKC`>mq&#MSzcVLcdb?0E&&&BU_x!QukL_B%bEcugZXppPU2$Ep zjskY~(`LFpQ{V4B`|-iEv%TN%)jvO9`)Z;3^veKYSmPuj^ogr2zB)E@#I#{2IH$Hm8|hx{x!@K<~T44%*k4?Ps!tu$D&>CbHAmA z$6mCn+p~3b{<3M8ly+USD$lc$*!nB#)zrq2lpHzRCJ}#+Ia$_=KP8{@d%d=t&*^zg z+tp6HXRS-$T@un<<*hSwZR?Aopi4144wL!Jd}3FAS4z2cXjha#fUFl={Rf5x>mu4N zEznrddP`SRSj_uOacd{r6xQh`>f_Gm zaZQ`V*6-(dSYRjAUs`?qM%qIMzwBHa$%o%cmQQ(XSf$T(s9MKD?auzE2dY<}6+Ym< ze!cyz_kV9auYbQ??%%DO5B17t2u@X0dHh_gjNj-wlZn8|1{bX$_9qOJQWm(a{~@iL z%ql0cM{J+Z2-Ils@d+Zcb#=lVaZaq z<4N1q-)_Bo*?-TMkFU$`U)uM0Yt)J(VTbnwCgrYOf37stcUI*Qfd<~$lNGnKyn82~ zEc@ZS{r}$S-})xGh3mgPA9MZFx4+S8S`S%tj2H7B2)umbLCg26;+&f85otGdX0~W} zbN8HLbXdG)Pt+OR563o^eev-B7kc3BSM7DX^S+(AJnflwk&26{sq_ci+<9yr0+TN0 z+uwZk)!bI|;uD2wJyA)=KG!C8>y@YDKder-aeNFy}?W=y4N=9_5qtcUejW$Gy;m-;za)3~`Sp!mOb<8N7fpXDHiMa=)VWdb$8;6nhCKejX{~3^ zhBO>wSgo?fYim~brt53k_o;r_!{idyG9~^2ACq=^%byIPYpl(;X16bxO1&`EtCp;8eYaDuYTWFY;yv?G_HOA|iLJY3x3_K->1USQ z&KR`s=FAD%XAV5ya!Y@{U90TWluwWEd`Q)fTX5rfGt-wPEB&r*e!ID^KvqRH&L2q zO*7iEH%TYY%F*>ZtFmO7fa#2keQTC!HA%3Zy>ubIb8Yq#ksUrOyQ1IoeM_5P^X20G z-?t8bkE#7S|Hr@b`;|9Ur_Z(CesXQ*yJ?^Edg|V&ZN1jl7v*37rr10{YyJMr-pwmN zCS6^{^~YVCz13h%#_hh#a#z-VH&eG>fA_`S@B6I(UtPZM&yjn_xc@#r6?evaLs{xF zscF_(Ug-vgng<=6XH7gg>Bt7|$S>{^r>|UMP@g*EN}STtsGFjC)zkO5Kd4=IW>LTq zI~mdMszk4Hy$<|OE`bhp&GKq(O~O*#q?$RPp5o16*6Jd87c1rYnPuAsed*pBxAkKf|9_7 z*!fv%+36D#=10tWq?B<&HOq&yh41I&T~|WLs-w;+y!-NxyaONJd|kHFYf+WPvD8+pvzL_}c-G{0hh>+SPgkj~Z{uv~ zX|vH;Z05eI*=wrkfw=6+!qe`Ydpc3$opJvcAKqmC#=_PHnZCrLlutg(zdxCnZ2xs) z|G&@o|NZ#9_iXIE(^DPpu2|uEt3K3FoHhJVWwv^&#Dgq`$fWZ0b)u=0Ogl{``OFLq z5;kjGuWF|%G1GII%L2}6>jhqHO`7{|X7AbO{jt9~i+9_9d|&@ET>js!dlMHo-^dW+ zF8AFr(@sYA?%mz5&fMdk|L@V8@B5xTXAbjnTjspdua{q^t>Adors}6JuEgFw7+-Vy zbza6>Bg;TlH;u@1-1?gvJlAbm>lk*)!DmX^8s4=QPRV8Ajvh0(eNGB-Bp(xJTq>4k zvglo#j-TlRL(O(^Q=hyKkJkj5|5~#5;8u12ZAUzoM+I&&S=4EM`c#OtrnTm0gJTXSvwzsgrOkY}$Uy5JH|H6x z?{5RAJ)Xqm=TI4^Q@H5ZkE~-dX_~WtxqET0Ru@f?nkl~3m$gp?uDka7 zwrQE}DKYNdVdR$fScf-oyPsFXwiBkzo_TXEGV*K=JzC+HT-0NGFIvHJtAo*^%Ckv^ zR#&fo^ax&Zv0%EP^L8Iek3}-KX4~?48_k$wRrTg#^7KEK~3N+nrWed`pdv(a&hH~klUkox^dll>Ok zd6SYYa=&)=*L;~@^C$Scylq+E;XoVxv(IggO9gCwd-%7yAOE}`H=cj5uuCY<&#l{S zc?rt}MrGA;hP>i;9g z9d18W8b#YCPMzw-F z{Ff8#W47c>;FkHka^u?wkC?8I$LS(|rZu`3-?X2onf1VcHAVDI>U;IgM|QI;b-k>+ zQ6gDkJ!|*pb&40hxCRO9aPmpaJZ;o?)K9+QjMe@F7Ze&bl9{tUTt9QsG|rX5Sx9b< zHpkhiNqj0hPF%cWcV78XrAGdw0~RtH?ygVIxOws!Z>Y?fnESVCGP7U*|8XYWzWmWl z&FxdZPV;KrIVV&=Xxc^XojqI5YVXuZSIwWg#VOSJ=bnA1SW=cnFh4Dg%x|`EEu7Ty ze9}Doq9@Pyf9tLP87(jS&Ah_I)7ti#%(N?X}m}^R7^hV!gV1Rv{<%+>-`9O+cCJ{QO| zlcgYTsp`fD5fKwit(vyJcp%0*`^+(+n_sTYNb6XT_f~+T?_bg*m12|io#qWaGir51 z+C>jea@Zs<_F&({KE@rI>%K{g>;73J$)COFMULg>GMtEjwg_Ka`9PiCtQzjpnQ!JR2VyDl`GVkJH ztp--c^3>O#Pn7np>U%hG!J?Ax{?)1*q&)ue?!9Yf(9W>wmsXxBIs9e1U{q=7~a&le`MLF`QTKaI5kQDPE8^xFb+qU{WgU zvn^ih%~F;JTZ|JcyrsIE&Umbo`6gLW`G4*5e}8zp>swyEb-Q<|bh<<3zFF-n zD%bruQSkm{|KGgVr~B8=oxPDSK=*}S@)Wk~mCZTd_^xDDM%laUGL^lzYwNdtRk8=9 z{H=|=6Y~mkt{sWFF)8`|GKnS6r<7_(32kEvEV8VW+}yO*A+=ZBqERp6>u#%nOIxy% zE=r1@P*hVnRnW@$&BrKVVyDWi3Wk%bR!p}7DDO^Ei+;SC zaa-TIAJS4OCpT?L?fIFQ$zgQt`jajmGu{&+{0rH|ouX2eA0F+z{I2lJ!^>OcmMt&7 zCeUoLDD$C0q~!TyR?jSC_-;xW)!N!TNP4oHQz%+|VP*1zd!MB%6fQ`MJX)=3qt*K5 z?$>+Xv)$`HCd)tls<~#bHfQ(Jz}pAzFH$}lYqKyVX7d)uQ?qt$zS{82eL{NH1QUJj z;Hhgld|!3wZ`#o`MZDzdXQ_*kO`YPAQ&ufn-TbJunLXX@TasJ0?7PYT@Aun$tFL=u zu0F@0)BJ28Hw*vC={?rh=jGXc+<1R(-Ah5gb=U9N-}Yg;7H~CRbmhMdYu?Jt>{~B0 zXWw$`Ki%K=^_4b!)0sKN)$(`NE!G>mk9BX_Fh@zlIQmfc7VV^^$AZE=yJ|xJ+Z}YB z-nmp@mSJGxqGs+6qvZyc_r$pGtT-6)@>b4em$_kEGp9|-cW}ziJpI#@O_z6F&n)xB z3^$jzeEIuY$uc+k+SHK5z)-)_pC-R?Y77eDjPH=yesYzG5x2+VXHOE_MQ$WK$a;|Q z^@2*{PMNvMuTwm^BZ^-0MXHBI|B++6Wg4H5o|(kh zAhY*Sk93&LF_+(6x(ZSn9&#~Vb(@YqiOoNl^RaC5tG`@#_zPyXoc?ZQwMrpOG1ER@ z;sN*Mk6G-zx(~kAiq6~kq}ucDzjsy7S1aQU&viPdjbMFq94o3rw1!PRA2+fP+GH6;hym@JvyUge~8B2_(!lOeh7dD-i~ z@s%A*zVCZ{P`aXQmcHbNo*NUsAAae3eGOZm-!1>Y-`?M2`6?ZM{Z(n&uGLNf4>i=M zMBHUnx;~N3&5Pyn?=9~y$35O!xIOP{B>M}?hZf>3uBVMRKZq>ccyo(7^D>WKZ3(Fr zH=?KC3_QB;XXNY~3ZaKJwxrZ{uDPAa-^$*qY}BI@&;TfODtwoGn*HD&q{ z&5&0rmaE(>);1nVHO@)jsl@I)|B+Y2G3IR&{DL`&t~;_m^_^J}H#sFUMQ=saT=O#v zxmS2`zj2LUV%}6-TNo7F;c9uxw7)Uznd_l_X|sJpH;Ek54UwJg@=G}U?t}hYUPY64 z=3CfndMAY*IhDI2qoT`;&69)kpxWwnetgHSEDN-KEgF&js@uwE*OMYP;rfdWtXbFO z--j;<+~g|!Gx*&FCdRi?4$o_n+NW4-FqIO1+qp97=?t&rOAj1A@kkiN%8BTOKz)as62p zY2THyIZQF@SJASfl7CI15rRLBW^M_YrDgum$7R(gk42$ZYT06*HmT0uw4&KIS~mE; z+SY{hS1+Wye!b%{%JTZ><#(knmATx-!g$B+w>;N&TUW5hE!wqU#U!2e2OU3syS4fD z?foClx=;8l{Qds**)I!|{N8Pv(Y@SUW8>bph0imFKZz4P7vTRU!>ubD?-W>3MA zB&+&6C+0p~`?BLu{o!L9!$+dfZe4En|ClqM?60F`FlgmaT(UXQ)?t=9tyeo>XW$K zDz|8ZCdUs)J++VMG@WHs=vm%mJH>H#PWz^iXNIgn3-We^s$S(>-R004I;Cd|OJr!r zXUPDc(rnMG@ggtpD>mKQ!s5PCS4387v*U@iGEO&IC!XkcDPF!NW1>%MMXaRtf@?>U zBW=^ZXKnr1B(-23wYG+=VuF#{F zyEnl@w3>(E1W&|w+E_oTbEBxf2hDFgCiFYEDR= z>a4Ez**d*!hxPMQ>x5qYN)30H*qi0-@3qI~M(wku;`@L65bodq<Vd%NY77Atmzu@2mRuE$6H5@4i=hIOD|TYgO0h8AaVaY;SeX`r}FcIRAs2`Ce>G zi~S@wb?cQyPHAVlJ%S#dUg3}>d*F9d-0rPE_iexbw|IWti;t22kM?>;POoftDG_wx zS^O$+9fPe_%Y@*`GT-!FPbs-y*GcDGe?4b9Vl@ z-TAwVJ@J-@&_da@!hceXo^+Ytlzj84u4W$d<(jFpw^vCuxHtW-PdD!c&6>YL)_Y@yyid2i?zG)bAA4< zZ|DDC;Lm&a?!}g^F|)6od$qBqwc)&2GMl!GtX3>98>+emZhOnc$R;u zUc0%cY)|^+%B6+77WJ-0tYSy^{(rNN@4Ni6=F|GS<@)z$zI-ut84oYd7Oh2(H-Alj9(BI%m3R2Wh30pc zP5*uMul<#C`ijD)7u^9tzcdrQN9&nm;nm16BmtmJtm(Qz-Y{EMOuXbripG&GcB6sw} zRfnbh`xY;neS5)Hp$?8On^-r$>Nq2Cwk9ZadCZ6V208QAKUnV*s=sD-z=V@0SRZ%4 zsAE~`Xk;D1wBl9+tC}^7XV@n>xwwZ1!;LOa{Np@7)a=Ba%X6~4vdky?CWWqMs$kyu z>_SZcgg1Rfxf^C{NB0M3TXHA)&J+^TV4bybQly%U6yL@#VRKC$wEhq~n$jY#uldASsZw$JQaC%dJIF}!L}&i{OMYT5p7z6pCQ zTFdMD&c7}B@S(c;Ov%@(FN^**x`=BFJX*wFSdvQ6G^V5 zk+rr=eLrXY>71ru)D`pj_8gykHE&DnU)$P$abLIl->c2(Rg*tPy{WzV;zaV*tzR}o zZ2z3iU;9)3|GD&e_wLzTPd?JwXuVIXIrPf=Z!1b43CCyreRnwrrxF@Che=3(d*T+A?l-P8byC)zDAHouAi(&rFQG88Nqxqq zDa>;eIlUU&+h%UKuzu?o=Y;0dT3$;^-!3=&8_jyfPlmHN@S#npW_O&)tqn20vl_*; zXMLWwY{lPjUHL7Vr@#DVV<8>*t9a*lqt!QfP)IS>Mv$Vob2QFK?V#>=a zd(!@eCw<`BV*mC_sCC09_J4{p3QxQzJ`^b`bV%E9&`zISYWckt%N%rrmG?~MUCy>Q zvp|GzVtLRNLytw=S9uwtE($w!IL4}`@4aii>8SUIr|CN{c3RD2?iTA-dS|S>_D%1! z2F*PyzMEc;Ew0>uJAKWA;P+=PK4RW~>0r+O%dc|3eYn1jozraPr)MASYUBR-NV7KI zJ}%C*;B>KJ?AC*;XBv6>eMTv0C@d1Vue=&Gpy#++1!P*nD~M$&YjIhQELJ=j(6zAI{tFUX=CUDd;pQNLx^FL`uf69EjWZJiu zf}C&s@~b;P*nGHm>E(y6hc9>ko^1d7S@gP@pXP4TJe%ex5TF`R{P2hF)^@g9H}6>0 zIV=nh=B6yzv&#G`qqLTB)|o^1t>SsEONH*d8+*R)PRoO(8b3tTufJ%>l4IevbSP5R zjLdqgbt543yI{(-V^>VH|LL8KbWEP@dEmjHg??q?iLA>zo@G2)qH$Pp^P&w)7OcC~ zS$g*8YcrnIP9Mb+IS+a@*Q+vSedB$$vVEnD=N;|Ujur9GmbNJ6b7!9OT$*hd{&0nO z2Y=6rLq7sN<<{*KGO4=!#7HzmWA0`4o7%e)v_8joKj_yzufu%d%T715pNF&GmCB#_ z^77&VfitN$JZD`!RW;S`R13qBlRGwDKR+vJ$=oSo@($PCSo2wPKktj#>w6+5X6?lu zqheqA*n{<-nYbjLp0)n?=}8rf($oVfzWS%wC9}&uJxb;EmeCbSQgN=RU%dRRN8o^-Aqj%lnjDl>hLE*8U0SpH8~@;<&-2;-ckyW9_{+-urlbp2H;9 zw9nPMXZ=gx$H%rPafN{5VS#-z_vQQlUt!Mw|1f<2w^N&+@2Yv}^IS|shy5hqRjUWu z{QobXuX)${`1tuvE|=W}cVwUUZg#6V)yR{}ueL{j#n-3#+seNE*tO(NIg4kvREhEy z2lbnixcH>Jew;}8{%vvYJ@Jy`4#9CQ#DSU1VzLi4e;vCaP~HS^DTb zSao7ri>CbVDF+;x9h%j%vf`s-k8>|`7o0kSIpNiGsh;^E5v8Ge-jf#u`DHG7slD!K z8jJTbHAl_oqKB_`%#GaOR`RgE@#ET5X4d@EJB8l(D=yA|5WGd9gTM5p)U?$VN(Wvr zh&N0;aN>E+qCIQxmEXCjp7;Ci*WQ0t@@Kklmv3eGs@i@-bLEj+?#hijEf@QVh*_Uo zCsL}rciEKLD?U0JF8g*)q-X=<3|X~|39N0aby;5I=SfWVTqE}8-9mHja1{&vn1$(U zbe>-BZQ7Q#x<zu1=H*Gha8CPBQef_?t z`{Z|g{kn$vMDbj!|Jti}$Zxn;{qV)b_#e-b|9@J%-`29oWxm0a$tg9i^Dev8EJ`r4 zwabgIUiS5eyWQnqr;>lY(0#f$^|g0bPMP;~@{F}NAG|ua(mdDq|DEW( zy=B|7!;=*Sb}#7QicgQZkQ5>2{cDfIhdoy=1vxI|*}Qz+k?9SYVOmASrGLZ9j{TLs zvGDq{!DMk^cFFWT6) zfOU!|HSCQ6t+vR91fj2@3+ixv;P!F!HHM(yiXY#a&qro zG%?1jWlPVr4LgheMXTu+HyU1Yi1XHCk(z&k+vv>ZJy)6p4zoHu@An} z^(AYzYFs}U&N=Z|!gc1-M7{G*PIdB}SiNIzmZf)ic$l!P&Z>QK+gX-9{=WBdZ2gzE z+3T!|^J=ZqWCMbhtM*vl;jj3AIR2-*{O=>h$NT2K*>e7+Uhlix!A4R$(l&dm&wXF> z;__O3yGvHfe>2AIH9f1WuW@aK%FU&Ehrg)VeLiXR!2R9c$Lk&%Pv?)j#udEXFl3Ty zZL;YEPoZdiL5D-(+pl^hJNp?;YsmES(z30;b+)^qpe4vXAwc=+SJAjdF>mFU>^_mN zI#b;6>gwk~zl~y2%PbcjOOQ_2yiwfwhbvlYy~eVuY1e(8|CXLTO>NWPO4gTerp#oz z86Z{Muv6?h>(z(z7b{*))8Df9%IrV9v7P1@0%Dbd^RrY+6B#0AN_I>Ooi<}q_pkHw zOQ*j%naU7ttg`XtLGBgq9;U04`T~Tc`Is!*lsea(o!-)TJt54rcR*!~Cidp9}x7C{+-aL_AR8dwI{=-P=x9*RhXV0!Z znQ=({apLvE**(cMN!Nq(?@bEZzo2Q)0;Me%{I1Md!y4|9Kils^=N#{=4;bYh4PZqp9F_Kv-%NL8FSY5?`of?k0;;0 ze6!Try8iFJ_doYtzjx`ei{Lf!r_+-D&iTL{ef$5jiO1`{G0V@2D>}L6{^#19Z`LML zJ{@|#`SEMN_Z#_U)czEF=O5B~-e&7VHm4P*%w}1IdtEYkW|(?=&bzq1)t_`{U*7*= zTlBi@w?+&O4i`4-Y}GJuTh^-0c+uti#7!L9C#OwxjQ+M#q4Q*Q=~yc2S`A={csp0p}(QzKF73@JM0dok=--S6pMGOvQOabi>37Bnyw7oh@|Y zSkZ+o8IsvOmeQ>flk<2p9-N-wG)a3;SHD5Cklm%Zp2)hd|(ZW zQp(3kEJ9xFdk$L0MSXjAyZ?UW>2s>HC%?VN!~Zgz|7c2jcJ}Eh+jwsX$vizZ&5mtD zRRYfevttcgf>Mt7j&9%#YJMZ*u*#jI6i5;6Juw;Z5NmThI^vi0APcd6x(Gkmens=*|lTo>M zgH+a^DU*aE*mKUS)xWdIX4d)B*sb-O<=&fov~-NVg$+^w!NE}33?+$}8l-;5vGn_{>h=DQ|bX}rF{drxK@ z^R#IkOMMc)?y%}C*||1puI%4HezxO3)>d+w1WILJonEFB zofqEW{p*N6GkZYLEvf0sGd50%JfyiT@sCk>&@Qc|N=~yj1~I8$q}1Z1rGXxKh<%i`L!w)g9P?=(8TzNe7qcan)Z7IX;>5a#48ZJ&ua#`-c zC;z6@nvMT~cF#6N?#m6OhTrpZ-^o_Ko_kk%z1{Ke31()u_pZz1T=Ti_>$!L9%I5pb zWMgrgtS@TH&wRYo=S#NKxsMm>>VHp4zU|(BAvsq)EyX?cx%;=*&5>6vSlTWK92dzi7VFsFPxCK{?mXe~Gb8ahnskbhEk4PEU@@ zJla~~4>j*UiL7<`dCTZKa|HXJ@A>u5cjwo|&R@^&{w!$2&6BO?S@&+(`S-NH?Puft zpH{D3e7wTaL_IDd(ZHzc+-dH|>#T48{N`?F{B`GoUB4!zS!#+oJdWJ_I^eEVTWN~X zuA+iZy?+hgb3gjcIP1^spvPH%GU5|nt(;%IbZbFrkjv(UdYMW$r?79)jkg&dj1kJzp}*ji8$-t635W$9)6 zD!e?9!)u4*{Q$RDM#qE>q-StMO14VueW;Zzxv~FAo7?IPh454HooD7KsdL0+#BjzL zWX_eo_^N5MvOweXwW2&}=C(4s)H($wOa1ja+ufkeQ{|Z^$gp(7op{yhN9U>S21DE2>%_GOoS zufKbjb7t9^gOhj;q@I|n%HQ8#`{efhf6?#%e_d{79`|f@sG)Po>6S?kKi;T#+u2{U z?dyl_*V$@5Y<~4nMexn+;A$ohwUCPp3g4=o>sv|>yolT<|Dd!XQ$e?QN|Dn^n{rjV zhe8<~oYFCwi)PIZ`K(~?9e1-+pkdYR#wfM|t?+PjhP8V0v;@S@GC#~y5xu?2Uh{~T zw91lM3l1GWv^{Y%=Mt+rUe41OgC5ANd(Yl5QFuE2A}< zF+aX(iTX@hrFmqXPW!Cyf9jq2Y$xi;C#I$a`G_oS)8udaI$_1H)!sY3e8m_}>!>n6 zzr(1oTvv5^VxX96Pwa!oX+Hs^z^I;8m zr?lY2D$}2LWmh|NF(kKWtlFig61U&z%x$eNC&~?2UpFXEzWMce*}r4A<^MEq-?z{H z?qfD9mXrKBraUgm_oQ##|Fv|v|DQMPb~ZO|$b?;1&Uun(C3z)_2)@;%<3=aE}DDZo4Mat zd^I!V6ypk&BQK()9qxwh{;w%uES7R@qRIJ=9<_!uzurYXn$@s%NlVnXL-(I-JZ!{$ z!ZILSL*o6_OY$!S51$NJU)UF0`eNg8otKQkMiP_eoSLfVa%rM+^sSb=FJeBO+g=u5 zefOoe*)jJjn{QJ4I1*=VD)d!kn06q$BVui}cl*p8r)=_U9!%LP#%Xkn`I%qB8K(C) zjhCNX@MPE8%d0Dy6rMN>XT+YEp=OY{A+-4kXTrL^PfMg$x){&iz`WYU$&_KGS!dj; zm&$u940_HbN?sK;a_T(wEm)~h_n!$CQjDjJ{0BV{hX;<@BVAse~tcISw?0%v#bB< zd91s9#ADxUp%oWD@AunewIS?cK*~u?d4-2j6K>7uect8v|J9XO@4a+I!)@i(2;CD{ zY&LmeV%8(m{U=sBCW$lnt0p}O`M&xv)7hXUXAURk_%fzWlr*c>Typ5W{fy;XxS76b zFAjA&Rdm?)vFy3vax&PI#%UaueQZyTTEk4ufK4D zxyh*0`MA_~+ea}M9<1N<_1^za->j!!XY@S(x8Y>f^P6wi{(nC+{r}DN^#vPtnm)N` zPd>W^pX<>bB)(*8f-S{W#~t)5DkZ zU-Z|#xp!TEJ@X}%&sQ$ytjL-lYAKSP8gQlN!Rjntqxdt?3Q`GgCC|KbF*tF`#pg{CfDG(G86ME&Z3*?V((I96SG^{jo7WESJE*HO=2O<Bo4PM^ z!InLGr&jiAY8bT5@bxl@X)Csqn^C!U%@%g<@JGS3!ZKHjWv$%Kct%oLvCHGFu(gTC z(e+7%W?uhNc~)NSFj>Ew%XwM)EEKKCwhordt)r?L)@{;zd9 z-&DAxqxeFObza%F_j`*UKYQ($x2;Xu;>jDnK+Sct1QIu9$oN-m^E|lOSZE`oIWOZ0 zMg2c3`9HYczxFnXDMe*MWyXhZ1(z3Q&bA44PzV)L&RD@!mDKTV!;?gX1;@u*Z&=h=4`raa&*4L+insw+`Y<*EFL$I!C(Ses`zZ(J_--+KSghw9tR&gYe>?+H(~N~_#{{HKQB z-!iM))|Z9lf2F*>DEwA&u{e90iMbyqV~E-68l@Du#eY_D-xuDOy7_3e^L>M=zTb!6 zC@S4o4fsA~XNby@2}i;tX0=>b;<;JM@9Qe?{`8EdXAN2!%wG>jJ`qVhaOsp~W|X&( zuI|l+{yP|T)Fm%ZSfCZ=AH=Y%G_u-@nO`R-khRli)6|9*y{HH`<-$gVP>c6!WrvG{ zPR3=&Wb7?{sud`9eQKz1{FnI5nbWHkk1Y;vTp=3$-O0&i&RaG+ps(TiH?iG(gQQT+&rum#{MUv zqGs9N1*RKC3w`-QSd&Twl3n31&iV5 zs?`r%GG?VS2_JsF)BY!u*~TrwEQQ_;A&Z`z_7I#fQS*80j@AP!rA_<)I)#S)zA$6@ zw`sn5r`(H`>JDru7Ah&W+4=3xyZGAMd+UFE+g+jP<}dwp6;o5Y>S3SCO0^$9*RGAP zd$_ayTOm;6t_uNu*ckZ_S=l%U|S#b4^zR&Gu^E9+IANn?`+9jHHKD*30tMu1%Ap^rj94B|k zKTs+)UVU5fk|gd`>YnJ_)^20VwT>Uwx}4k zv(Nfvkh(K~PrzMvl~nSic?FS5obn1`o|f{K4v{LYb6N$3O0q2Fzn3f8mcE_7Sm=FN z2RAdr`jZ}Kd|xOU%7(ce2$yAhy~yP2oZKxHf2!1$-c#DYA>8qhB(s(5v%Ae76O5j2 zy!Z8HMZwM4?{|EA7Jfa>`v`YIL9%Gnhg&NW7R%2$n-=lNGXC!7Y5P}6u{AKuS;Rdv zF6X`BAT;yn@5|u=GbB=OISDgZpO8~Ac7Han$hNCup@3#}N0ZRZm{gs*b0LuXOig-o0~YdlfQ2XsvcX|JL^7Yx#893sPsICjb0hleIV0 zd!5nhV+-#W-I&!IcQ=3U`-9c@ENTxvZ;CLSK2tY0I?bP_E976`wlv1R713!^gg66Z z8pCa+JQUfkY}>n};4JH!;AqABXXh1hBra;1H-A_SmSZ=LR1wK0nEGV~~2P`LkH!iQhkv*T$L>paPC zYi7#0P6&!T$Xr;o!z;AEpV49Rm&*66UZ=+W2=q-2(KW80c4n*EYK=g_6Rq6qJyK;0 z&d!{>|If1RN2;BV-#vP}=kv7_hh?JJWqw|GY5f1i^?UVYi|t>1tFRV+deCFl`>Q?Q z`}n@Ct4sWIrrrMHuV33s3`AN**8EA_lGz}tcBXjNw3l@Uew>kg%lNt>ywuI=^HK-5 zReMCfPV(_xa3=p!v(Cq7Cqou(3jC%gqF<4vSoe8f=bRkH)-$Veqc=@)E!a{Rd&PRW z$UL)vH9Q&9SVYs#99$`q95e5xyVR%Yi#^Ah!4o8;2Jidk`vOP?^8 zIEF2~7O5@C&wIQ4?8(Chl868Q)G3;`kHb-xr~Af?ujT=#FQ)h`SmLSTa6s;h*CeiU zf$K8#v^!!eKeTKSEecztaO~+iAFYX+dtBy;FH`iYdmF=Yd?lN~fj!$AmzQ1Kw{xfG zlm-Xk!zbdjoLQwcN|w}$OjNU!R4`t%)OoM;>|1lQMAf)AdOT3o`grbd$K&GCIH_{& zqe@4(;*7W^JwK>X&dqZEnebuYAnD4xU8osynock1ev359xgZz2`%e|h!w_m5wf(p+T!H1All-gn1_{WJBuPhIn8 zbKaw;u(Ro)b$jyl97$8Zpg;!W1QFHd>l@g0)@p9%kE{7;W?rHGQDEj=P0w2#P7i_{ zTeYU2SoH3#DjrWzuynz!Rew}&X7)J_^N8qtu_O#k>w}b@Kq$Bpt5>J{O%I5O0 zLFGe*p{nRgErH3pCl)5SUA=ujtER{QLe(MFWmj`|EQ|kfTjQ9|>US&)_!>8syzqNm zci`sT|L@j*|9|lM-Ff%ia+ayIgZ>+3IS=Sti0y64TZ& zue06z{YkzN+lPArxl1|~Hp#fetTLPbRxDVY)8)l`_B$Kxp2S?(T3uuBP?Qm4vhnjY zW|2)C(-utIk>PR0JEXTeFwJGk{wq6@5ZBO; zn0tRk#>=Wd7WaetD>Rc?17>ej(hL+kVd|XZm9k9ALs|OAXSdu*H}Ae^Ed13LTJZIi zL{F{uj2p$*uUURt$nO6k;Nk|CKO2v8Ej_T+^p9Qq#1=W8@ZWzw&iLL~WFK^JN{p-) z&(rAXoDw?%+D+Cp`E2{>r8GC~;@zNQiWzfQ61XLgIf;Dw`Z^)b~?ntV2 z#>_Mj;yCPCFgg;iqwoF#p8@GSiu3D*{s2pFL_Ony> zh|Lb~GAKI|zcS*L*&&&M#KKmcDT3|jiOE+9xfn~;9tp_*s^UwXh^ZESWx%_oM zR@VLJ(GQMF|GIdR!hN0B7dGv+uAcL~&F+uJ;#u$5k5~xEGJ3kG`h~ZzIA~?`|8!ON zb7l+iFN?q5FTVc3@-BaXX4XYXC!@`Z1?R#Y9k;dIl`k}~of#D0C(zfE6p>LerQtOD zrkDc@&-P|5jmmsdFT22TkEUkzv=b*oHP;1upITzruz~H_gAC`QmsUb{5r>LiX-S`$ zAmuhQq{M&HlvjJX{wWE2F`xd#-}x~jL{PbJ!T!KZou2)h5T4UE zF~CsoS(9c>iq~!v;d`!|x1Bq^WT&5`kbsnX;hgM?SHI3?FuIxSv`y|ylCx4C>uKfe z!Uf3-e6HeB=<9oMoQ$oNr}x z^zAAO$^Qpb4A&f$Plz$E0kx@KS2x)AY>?H0Lyz1{l*er<19t32(!wuPsjldtJ_ zi`Sd?u6-Huyy;%ifBAiH`R4I|C_m!E`Fc*Pf6=j_tTkzR}akOy+Oa*ngVn|Gw_Cpl!X|1rrYAXQFeN7#}DdWqrCjIFdca(&F#2 z-k1G*-)_tP^0&c4LhA486TYd@nM)oXad;TNatq`1s@E!4?VEozZK+_^kY$uA+O;lU zBYdWlQ2LGVqnA#sYFm(67#Wli>*w2}ULxsx zVAiI$(<&l#HZQV_sEggY?YPdgZ8Qx!0r6ieNf z`fO(EylrOEzNO73`#9crC1jn5cADv$<>w+4&di&ARqNG(o`wb?OE1IsYs+sJa(Ngn zH?CbIuwaTp+oBbWnxcPn{h2q%pPk{Td9rTb=5xY{KR!i>B~074Hi_G=Tm18!V4ZE# zCY{R=doN&D|?>v_fLkWOY}l_aO8w< zU9@x zN#wg8t8nsy(v0t{zGeBh^Zvj1TmJDc!+PdJETOgx;U_p$ZNz`yZJV+?gP+4J=dIac z-&+N@Hs>(uh+eW>`I+xhM~bH+!!skdDO1XH)n4j0zK(I78Fo0+Sg7b^kovpd=6@SB zwU}%6b9q0y7kc>Ll&u;4x6)_MJri;%UL)c9bTOq3h72KVRi0i;4s7+{?m3@v>3G6c zjm`JwOx+|=uaI_$YtGKEQ*JsHdGGRbomF@3=+%Z!VZQ|%To#yKTO`%FU;pBn>DCN> zXaDu(HQ2d1E^=!+c=gkdb-$Uz)o$G^&M}_yagVlf;m$*s9$5ujl`{8~_jPmK_x!-u zzDK0*x>~pS&ACxsO_u_Rr6S=*+?;U3F6Xh6)m_I;B0ARaA17hP2n@hoOgq^Y1CzEEp-t#J3G3nryg4w56CQO@X`r5I6@!!p1 zT=si>BDl_OT%X;?=rqh5`=p8@LloMa3K4jpz`0CU&o}&>fw)`z( z`;n#*+NQJFnOnG0^OE8(quCQWjZ(!fng~@@=T1(XJ-KFueR+P03cK{<cM6I`9E&|e`r4MmffdMRliHBtzP;0m7nj`&yTJB-7Dg~-qh~zmE^UP z^$TW8uV0zB$maHjoms2W3}z@s^8(t)oRS!d6lCwnlXLQ`?p+M@JhN0zs+Ds%`<);XElu+8=VqHjC14*iSe z5?hy@tJBo^$a7Qc6xP{Ub5j>Frbw@TWfG~gU(Nd+*8<*G-p+ElvpV~hrz}$4(_~e8 zvu=~YeC@Rg_t}>kEnBL8Eknd6b$!yOh^%r}$x}=8SFtE8WfH$E>88@NQ=&TPfl-3; z!DB%z_zg2X^b?3BWXF{(hr<}Onx+Ekkq4rq$5w+`Y-~BuCm;cYg z>#yq=UNa$-e)KcKR>r=DPIl#&hB>?Rqrtb-MJbNB3@h zIg#_@)8+fK=G9zG4w!f_D2w&6@C1F)&qV??DW|?Of7!P{e*gP#udkO~J@>lPnCWDz z@g}E7+Rjt2d1bEUUYRPi!HQ3H(W%^ztQ?82F4o;_S@qE&Bz5vNRlYigUq|KIq}!fH zsHESX{7pl(=&r!No=gFYETfhk5|IZ#1dAzIOkM5Vs{8N6yG2boJ=Lj>ssfxQCw^$I zGU}PHBq+5g>kI4OwYO?cGG|$aBws0FnsI`^uGKGd@#HMl@JPK>$2C$b3np9EFq$+? z+S0b>c~$R|zl*B;`)np%KU}P(?=r{acpS$TdHsqWmCd(mp8u3lb9ktfIXCe5EhZ;^ zmMzr@6WTJj9^5Yidk(^b5(U_cWNwk-5~!wH~Y-BR{q$^6I?&F zZ^?uEDY9{ThrL$?M;+vLR6TVf^!inkb34{+8icIqc%|mmb>pO}fN6LBW&YX8zQ=^Q zW?#Noeg7xlJ?W~ambLZ`r4E{x&79|dXa2W5{(o=2>}%Wl%-^r9^WxqgeIPDhpEhgH z#aZ(ze{I}5`TVx;Zf|N1iZ0x?f89zhU)5*pokHtZ6+3R^yYRi`B}<}x+th8kMtc`U zqzP-jV#+Hm{C>jog|E~s#+j`>laF6$Ru4U~bi&_S`_0)kPbcd1wso4QFKubdSzcu7 z7$=<~B;m~^?ceM_Jt*i}+7yeYr(?KpEZVBST&?ZU$@u2I9oKjlJH!ff>{>PB%rxcO zr~WuB{0awNwmoPn%RQ6b*490YqI>N+PERj=>}}*@>(nv%%%Q0(40qHm($P9rv$@db z*}YA921lwZ4xD$cm17R`N#JYEYLox&knkiz;rfo>TAy1wBh|ytu`X=dyzH6k)jc~( zp9mZ{BB*fJzF^;>$H5ABgsv>Cn9dyZcm@CBCKIQV9LcdRk;M@?Hh)jI1o9oav_tBd z*M#D3AIbbDiR(^HVVd-}JBLfzm_zM@Y3pq^;SVOq)$R*gm%m$or}}<<>GQjL^gEun z%ssL-CGp6ETK_t~AMgL&(*O2;S78z7`^ZZLi=H2TEaJO{xy;}G=i0r~=cm6{c^Yzn zvG$1MO3oef2do~~0#)wDe0rRIFDGXY$U_DLb_}h2mBo zS{eFyiABietIAT^FT<6Bk9sZ8Yh3m9+Sv%()cpaQLtei6LA3N+hdb6GTtkSn#Tmch{exymRn6#jfTA`)8*Yx^e9eU^I>uehY8zTu2*}6rG2g9Rko<9Y+Ap|Yc^ASeF)Rj zQ)!~nPTjnkv!+c_$k-zD<1e?Nw%&`FM&1yERTqUO%g&Nt={rf>Rk_92X5N9$?EE`+9PTD_)vVmsGLKI>wC2ovC1 z;_%nlt~hS>jQ)^>q#s!v5wdrWH&_~W6$$s&DhnCST0O_Ilu_3^?$`_)R<-SBD{8j8 zP3BiK%dLIuU0iEB&DB7FX=eH7@X0Y6h3i!w`g86*%Uh?SIR82eqlcLAjskw6+dM+7 ze#h;Vudk8wQJWrRK5*ACOvJC6M%1;P|yYZH#ZGd@zW6Wl(J- z&C7OxMaxEYviM;Jm5V$ZCTQ!hcz=sxG?Enf?yY6GMans)xAT9+BF?%i%2Qgd1Z|t? zYNPTwEOyewgopbMu?8qP@33-W(AK+fy5m(_OHcapo>GQrhx&i}w%@NkdNoBjTlHG@ zvY=y8?Vq=$TOGIm_2TCIKfCR#%P!5{vX$3KP}t|j{n;{^yneQSf80Ac-5~7i?kk&5 zIBQPrbb7MrUBJXwr3dcbeb~Q0^m)^av=a;WHa)1>spMsN>Q$5N#hAZpSF}#K^%q zOOvj*y>-v2F|qk-)V?KMUeEkftx)(v!RSSIlUDHj=UdSxYCJ1QpupK=##1Nu#{ysO zTwAQa(>n25(d#Lp7nUn^+}$p;nTKWXJB=U9oET=QJ@-kOscLvSGUC{bh|SGERP`GS z%Vb|Zo6zt&B+GVgdep&X5}WIm*{M`MdXo&AE4sctLW1*{u^e~8bdK*E0&-h}_!`|9 zi{2+h**f`f{#zSnlKEqx#7`y8?Yk%X z+*4=?-tH5xJMGP6uW7;xrl*!Tl!r z`|I-=T#kz->nI$W^yrY|4ZrWj_bon#*Z+DR7iVo2cV8`QvI3XhJhK^ds(uBoWsdr_ zV1rJ~pQlAOn-tzDOb~lhlFk0WaO3Rl*CW{P7}ve~bT?RzdD9vOA-yNwCm0tdL@rqM z@yGY9bqDP8sQR=ax2X-|hs>RJ6IDjyH-@;c>okF|Nl=J(vw)vfQI zx|p~5L+u)lf(dgjr!VuLGJD$_j*XT1Hd7Qn9=iN=?*k?4Z8~ZH4dv&b6?kNGNV;Lw zjx`-;dU_VtUt5;NEBM>soyViEI(BNg1&!qfXJ)a@cd4^D(IW89YC`I2HLl+Emllb( z?OGWsy})om;P2pttW6t^7a!iWZ^pm#Uu;c{r-g4u+#8N1%GC(UVrsop~#y#YcvEVl(3#SU#kEAh57k^XXpPDx31oM zQYv+Y;B_5_z1LEz%`7S(-Tqi};7=XHQWp(P+1PX9i#YZe^u6!6yV>xc_xGX)B?q?8 z%bopFF(T~_|7C?dmxo?Gx8>SaiU&B|dED8~a6r8`_~4FL{3lq8!e_D=iFHg&%WTNY z{OwsBdTi^aYr03iy!_~0s;SjzR4RFnM^8PLBkkTjy_VNDTjKn0I7MmNSGG@0Of~CS zb9@5pzNufhMO<4Jwb(^EB}}}-^1RsmdZWZ%?lnA`qMSdueN>f>`%9d?J!P-JbdB@- z#4ot2VsW&3ij!xn(s$F-vvTX5hqx-vi!arx9h)`+s z*<<&a`GD?0zwg2Em4DR#|2sebj z@mQ38;lb5h*>960tp&bMvaCH@&RDao zi@J+Dgrk`gHEP|8S4gRUWz60?_rzx=xz#(TF$Qkk!u2+A-I7R7^Bq2$g(5elZ(MM6 zf9sW_cb1sUQcL+D#mtaa-hSMva^=3V=mQs2KXiWS5;?JFAA+yr+Q!ZYoCA{TjgH-@elo4svmo%W7EvF zr>C$wE|a@+Bgo0M-@fqPW)`L8Qh|@#wab=mVd;E&;?~Y{zqtSQ`qw#2-o1E##r@nl+)?}F1w^N$nx>mv(YUG*w?NZyY1yWiWrwCt zdvNJQ5yRtSY{!IrCM+_Z#gMYhXBLZ&yq9oz_^sGGwoPYdEHMw@)OmN!(bi z0{1$mO=)k>Y%$qZ`(pFaca!(E98+mGN^LFa@ahsOySU?o&o!MjlXmHSj7l)onsqmP zvb@d`u}I$Kr=3fD1OA?ktY5o*&5x|L3@h79q~dtqZ2h1bep_H(;FgNnriPp;Y^@Jh zaIbSZZ)AA?**YD)tx}xZwr`)QT+P}L-O{~Rg!^Fdqa(Hk5mC=vi#}}Qh~`ncuqxy1 z=88og&!SF;JUkp>wA81HZ?oZ&EWc~f^WT4MncnVdZMx)iYgTQ-Nslcz1r)flcebtg z*&~;{aN*?kxYVOZJOY+%bN3djiJSgjX~T&NW$d?;Y>dvlNQ?`&y1vDdrRtG<^tYpL z)_AN6V=G$9ve&d(RzTGCud!};@~Vt1PwwX>U-!;mQ`<5>Hs5~x#rmS^$J^)CKbvm% z)pK?B2dk`;F|tk{Z)xM`d|O*9?P9e zt5Gc_qFP5$KR zu{F4=cK>i^$$o6lFDo4cyv-M#ZWf3Ms7ZPquN zJ-_d+50@65{9Ro$?Ej&2d~dp#y{6cocyn-Z#MRrP8k_3)HCu1yHp((Lu&`cCDyl77 z^7m;`a}IYIM1L_ z7kMC5#h7z~&xC+Qe7*@wyk$*F<}5!Jm2@!rLi(>sI(lkvCN=9bTu!{cCtjz<;Yw$FdM9eH%_we$NIDG}j(9lMTn@Uq&5-4yAG zPrtfp&XLHt%I8M+uBR~Uc==-E_PSS-)o0g5Y+LbRg@B=*!6Z?U9J~9%>#iKndj0?F zw8J;88fJv}8}#=sSlHTmnLTV5pTgywYZsrgJzEyRZnMYm@OS14e+j7;{kH}YX3k>M zq{H=p3b9Ixx*hpYHQOt;|5Z=-mRV|Ej32n-Hyu}<@ruD^fx?DGADSn=?CNE8ZDUVm zc*ONf=ETz#Nfv5fc`9=_9COZQ1fua-wdXogG-_@tW_+loN>@C+h4pH=MOD zwp6{kddO=z8#7fin+`cTMvlJUcpTg7&ZtC(ktc6Ylv-K+Vu zrG$q;QLo`>Y821f8}--BinP6BT&M6_{PX^JXnjEV37^B8N(EQ?GI5m6;?tFkW3uAW zc$29dp54>JHr>2yn<3joSMELj*|AG}GjsJa`-2KUG^KRA&0WbExxtk2eZfU_lxvvyU4yL(*nkY&g`c-)h3qrt5_f5W7c6*Y@Kgz^Y6d8W3N z2CTZzA-M7At(Pi3M$e}<-d!!HD)H5&VdVzRc3Zy}CDW2lnn%Y5CORvLOv*7)oSV1o zVtG}(^UmaZ*#yPdxgl`8iEexR=VRaf z&Rn%HT^!PSKj$p3uFqV%4e1YWOyrs`_9DmE?1RWo73rA|ZpYl%EUs&I|NEwEpBviw z&+PfY8U9Jua2|U^{N1N#?o2umbm3K~cy!>bDHB60Un})+1iA*D6}uP6lKgwJ<~6T{ zPkPS9K5(95Fe&m#lwBu7Ps4)tO$yOR|BDvw6q|Y}=#Z^udScrp*LOG9$L@}qYT%ve zTez*IG)a5no@WZSTbGJ@7)}yR^V+_p$*?!)R3FpK6QUtkF6~;>z}g`{gHJPlfk@N} z&y_}^Gd}%adR6te*iUt7FQJup5>%$i1#App5?C^Q{=Ch{H}l?OeZ1>;k@f>{rxiq!d>*e7Ip`Ho8hBz*T&*z z=JV(G<2Qz#`f|@m@I*21d|uf&rU#9tMvle@6eQba@-{y%eEa2&$?_QmYG-{*4m|7m z(q8b;fPrbR;v1EfQ<;QQIUoPrpmb(^__DOM@6X9ZEIxB-(z!R{ug#KF6}B8#Irrfj zSI%sUI=?w3lf3O-Z!iCOM@CvNiT&D_DoHUNZkzS;?^nx9N$#p$@KgN%mx-M-Gj*r- z1f5e`{^#oTwRbE2ZR0+7drxjbf{QYvlfq%nf|<_}@5C(q_H+IH-HWK zQQ^qk7a!mLW!P;!>wC-J7=evmrmW#1`~@=-YU1uM@kmijFUfnh>ENr)-PO*Le`149 zIe2BN3)c-OqX{p}{ z0lx_`=J&;lf>Ing-rSG0e7v>PUqh4GLwDh>uN6u`zu)%p`UHNz^=Z?JDJ+k6O>B%5 zD988(M#fgS=qe_0etu!JDbk;(YMJk`-Ej}s zZs&Twk#m2`t9L6jcsjXseM%2%gx#H=wNr8J>E}AVzD+kY0(C0(ar;+yB)?C{aQz{} zoyeQGH*uld5(mZ;3ws+AFZJ?^`_I_AoTV{?>snc!de2$mnWtttto3G?(B_l;WMe^m zv%H2uk;A{WCp~jN9awsi&!NXi+LA$$mqDGAVacpg=2e2Mi+e)CZX`!pJ(jfo&wS4+ z_y5j@d-GEHG&RhYU7YkEEG6%K#e!xeF!L1apb%g24kTsGI&Z~oa<|MyDm z<=|I;r`B9`2)U3R^X-Cm`J0Lp&(7Z7mb?4Ir_=If55ILwuqX>NIB_>D-)a{Y|NUfi z|DIp7zWbc{el|3R!9Yq|Rhx;e;bH5`%lz+VZhy~yW@3X*Y_7r0llJF#C2`+yIr-7% zz&_<`b57ppS6HRHh}+9(uRycW(;7#fd)}e3EvfqIH#azboU(pSZ)sf0kC@NyIUM3k zPcN)G5Z|HqMW~f~O~P?in?+|VJ5>^b3!MiIlzNjbOfa3)ti$UYdl+EaGT zM^B?5RTnLp{8>dRfn4)i{n!4I+i4(Gdw0Xqld@lxd6)!0Olt5|{gWOtiFrZI#0e+% zP1ro=1K-SpQ<-DGVf@<f43RyL?_v*im_&PyxCCgpS_dUdKF`ZSK{YzeI~_?j^7&A zn!m1PuCY0jC0FqzxgkVb)W~k7L)ZD;xsCx->|%IoOa5$YJ27`_Xy5#r3(SGiUC-9TdXGyzKSXjcI=$eE4uT``Vu0kLB-I|4?wA zsS{`w!@sxwu_FJ@DUNd$DwQ5eo8{c9{HS`*I$~GTyc^pdbLOpm&%OQL|4ZhzA6!yp zUpM@W3KkQS`8IFEUikynhq#4rRv&sRqNb7WxXz*C35UcZ+lL2FZLa?i*gwa9m*wwy z1p-r4wtciyPV+b=mguIGb6>p?>=kvvyxLjH$|s#Fiu-E zkI7ZRen%MVlFAFKD$eyrNF8>MIKa3jig~KuN?Dy<`ex3N*+eXZmLzdEVt3pAbNeD z`7Cy}_IqD`*6)9KfKktOL+hkyChopTPj=6l{$@u>Nd<3D&NA&q)dabgC5ch#v$2H6q_6M#pYS-Bx;Q2aVsKZT;BmdFg zhF?q8GG|@B6W>?WGs*Db^Vs>bH)aI$mYrwUmd%>}^T{N6k7AqGQEfg+YxANf?KWx4 zV(tpkn>bM{OsGiq%epNJ%QDV1oY*UrDt9Kc;d8>qNgK3!y`%od>nXN#GZ)23#Td$E;q@6VYzc+cb66+F zh_-9V)9NKhCkglIg&KIhd{DsBICt*%$GSo)wu?Cyh@YwBmatQI&|#3-mX~0%@Pex0 z=T1Mx>Vyd)3%K-_hzbe$3Pj(1sd#2v!-3f=*WElKa(ISXwkMOw(Y^`$w@qEPJwj=t z(&<{;+Xg+}YS~`u4hdT(2dXqaWuKjHbMb}E+j$}BnejYRc;^}iYcD>kl2RtcTk0w7 zlhDcKI=T1P#edK4O}u#9&F$ZtWcl4+@8uVoZVQr~Qey67qqnQ#_^q$6J#s!o9g-Bc zx$W+DEoM*hax1ls?Rp#yCo7_Lul?Rv@w!&O+W0;Dn%OJ)&ql^oPpnv&Jog$S_i_Fo zpBZdVY@KrJ{I54mdD4N$CPdWPh~2w*zv>#l%_qTP_aE~N(naTNKRa#x{7J2EPw<@( z_IRI{EGIZk%=oZM)Lt*Yv?W`19FSY==a}<Qw3;A0YO?eg7C%@c(&t&J*MH8$NOlAdH<^Ij_-*QU!*BbAf-HlmKChI7? zd!2s$-mZT)zo;~*vwt~sOQfl&s_0bz%^7WZy=|rLQ=-JH9A{XS+weVp*tmIC+|jJX zcYJhav9KNRn{aYg5MvH+#L9w)XMQd9w&Q#lFd-!>S=;R6ZHbo4Y?gahN~+FX(0)eKRdqSs=NKKr|kS698>&iyCRG{S-RJ8>)$yU=ARKb&1=oU zJ^!L#M;mXdJMJpJx=Hd}R_5-1(Ya4;ogEEm6?|wNu=%g#=U7X+o7lB#2HUMrk_>BVH7 zs)$(5b{|hZH%ZB5OeY)<>=m~9e2#6>G3IG1lY<|p=q!8bqkbenYuowqbsTQHHZ(40 z`le~JEPIaZtoaLzpDN04V3l-wv4@NOaY|vnEEDfqqbE__FD=y`P6?ipk+|${yI}fj z#rky%6!tZ_B}{HS(iO63$>gj#`~4Y~zSLov#nN6ZzoalUTmAR%@_xSeQM;c#ZkOBh z?AL2PIs2?vcN~?|qn<~L#}qtV=6mn=Zr&i>nG+ZjEbSkdW?#$X>4=EbHmc$NwRfTU zosI3^nQLSX49-uz8`>f=@z0h7y78U$efK8* z$5!>YzZ+hb#7_|Sbla<<5jf2uKGbEAiI9evgyfHHP9J$fa{Lc&P*6GIBy3dtYr)Bh zO-FC{o;O^1E5X?GM7Fn_^ad~ABTkFN#aX-+yiM*Nj9GugtLTSQnejA(Mf!@<`IZ@` zXD%x4>3x!Va)a5d{)E*=wk&KHauc^7$n!D3zDdGl+LTEG{@xpI&CrrEVY=Y5_?|Ee z+u_XzCr%Ws7CDoVXT8VN?C4XZrHx z3~DA89Wz)u{hghB^@Q_x?Gz$k-)Lu?Gxy=yFXC%Ygk9}Ps`-6AO=g%CbtDEo*rt_6GuTS)wvzPVv?0cUbzxUbY`IZr@Z%@s!ljPS6 zzOriG{;!8Vo8@ktv?(L{=gJprHBP4Qmc0CF?S<&al?PnK-+h=eYst2`uE&!WOMY*= z_IBTb>jm)_oGxEyT(_;_$kqE%5AFq=W1V`P(eLWZm3yN_r*01Q+t{(O+IhKO?A1Ac z&mNE8xHaj%;O5>PXI3?x{I^=9W#f{>4c7&PJhTc{?G+H2EL|Y>)VV=2!E||s<`rx1 z607urjeW~we#}fcE%N&$V*`tuX&MX9F_j(OOZNWjOt9QEB|q$xNY3%~(=S|o5OCKs z?$TAsmx@a_x*vHJ__ij#^MYRV^gs^Vq}pR^Ej`}pA71?;Z*@$9R{rvnuU{m6YK?b$ z>=hKA!S8xPhf_Vn)PJvvok6eTu13u~F_t|Q-tnEYXU?28Lu&r4nJN3;Y_#iMAO1s# zVbA5w#upmQXMQo56!hbewu)#%fr^VGubfgq$ib|&t&JV*GkmsH_Meu!^zp^Pz5~&v zBG&U4r7#2to!Op$cEjQ){bCtqC2|Mu#Y>6bExj9My~jdUVAIV7>whUO=#`$gwa<6u z+w7A;D!rc+<7RBCQPBEcyt&qb%SGDb%iOh^XWc&U{o!OZCumi9m~y>`W+2PPqFqte zCKeUfcWo`dqLu%zoxlE>{l2uN0T#YbV)-m1l5e*ko+rdDxv@vKB+5?bwx_}AjY(UA z*9oP_9=I9sJ~-iPTu)f=5+-in=&i@P5617x{eJp>k?ei`87uj2RUa~&B~r3y!o^M1 z&TlIjo;O8l^7|&;E)5H*II1^!OWLZi_UFs>q*vK}<_wQD{i|@E`AsZ``9gu@(~j#u zvnpM!KW#EcvO8is?~Ifx(GSJebvnIP3Y&9zTqoH7YPz)3+UA7LcF#r2gN~-?>^pSe zc&A~_*+;#BX(B9&<}1&A;`NFV_|h_WiMg-AJktkI7$56QkZ^Vz(Y{lNE zoDF%+&i3nnZqc9mKX>o{JN_~Gaa_%fp2@0S90m3F5A<>Ca|H@XIHnw8nsjjf!uj)6 z8WJDe-SE)nTT@85s@VOEzmYP{i% z*2**N9k+%)i;nhBw@&To4U8+-lgY# ze1-lRv-`cbEq!)->$A>h7edzB9sPQ7&l6Ykx8(~8CD^6*=_hlyW|=Z>%UdC}EbYi0 z%j4lkCKx+!4_jSWQJj<~CSS3T|6XO&1?36i{||1N^)0t#$B!ch{Z$8dnr^6)HL<#1qcB z*~Os4_hyzv@yvr72UvDCFJlp4S*fBkdqT|7OB;?jCC^k9U%^zk?!Te=ujAjW9($fsoaM}<8qwGpGyZP3DPs4V_PAMq(;(Sjpya}b zMGjjFR~i1ecfRIl$^R2I#T%}^$^U9PoWTHPkwzPQ<{W&P`_+kctQkHT`> z&OVH4z8|yoobNQ_GgG2eWe0ur!>B`|x!27iQmUk}4h)!vlUQ&pN=O zx@*V$_bHqI|6BOa{O*sZ-|Jr9_cxci^OL#uT#&&vN%L(v_pEGexRM1{teN@K=uA+7 zPlc{zoW>I_hOdlEe0Oc-wvUfA-&J`0+uS{0b4y%5GPa!A!k3Zr5Cwx<6O`-QC8QG4&kZij7-7YpL$MF!iZJYDM0p?=A8d?bBa3oZ9l# z)VpO}p48PP=Y;dpyqhB5pPz7rrDpkrjR%rUKW$X=3*_+(_%*pLruxLjC8ByyvL(Y8 z1kY91U@|pKh?I_Ttk-K;{ym08=UDVP=S^FF9K00xQ(U;PtfE@_>Fy^}zKS$6ztlLf z^M%$aqqCYe&F5V2E!xw%XsSSqVeTWFhX+nEGRV06c=O@HpXjpUC9IjEb%D!l8|KcM z`*Qu)$>}yi2~vmoc)k}FiO#7FT5qw3#k)M%rQ@p(Pw~8mX7iVQU-y~k@;?9W%TiHc zQr6oHir0o6|NYDU^V!(;|JU!^zh$4dA@y_RUuIq@3E{9=sax;6`_32HoN#>!f86aU z1*a!V9u;$xO4+;IVCt)iZv`aI{(@}51*clI3bkE<(YWJS*6efLD@joRAH+r4Hinyh5z<@d#?c+W-iYcH%# zOg^lA`SSapxA*VVzEY7+T&5(^3O>z6OSySxATuIO@?kMipuY-qofGr#8Hx4Sj|KX}*I-TQURDLJw27gJ;B z_rIUgQomi<7n^O_v%fHV>8&Rr8*XgfCphPJ7>EA0vW z&ujdQY}2Pqc(DEA+JXZq?awd1Kou%k0UIzPPM2 z(N=ZoIsI$3Qe4U#)*lkbAO8y+(tJ`|a#UUp5q9zMS*%@}-#zi=VY$HGJN{ z_D537beb0rcQ)&}l3Rk4)(9!9Ur$e38#&?Xo5mYf&3R=9^%YV-Pu0A2>!RR|!nrkR z{CS%$+Fv#Q@Y7k{{{KUNhvt;!rVMFoCh19wa&5Ib%Ntj|R8i&Vtxh4m51zhyyQG(I z->Y+SxA=2Ec|%<*Kc_lsb6;%HoyOICS7gWaW!vXR-ggtUjY2Np_uO4tQ)ecw()T6Mho{TzqyDBt3wV|ZTwj0x%!A$e|Cyy0 zCbS&*vRzhlg?N&G$U_um2w2mi75;*IoHM)n{M!$Y01gyNNHtn>S+r)YQn? zx96XX{;FGaEa&x$dfQ7+LMr4Ayr0PYx=p_P=35cV->65|y?kIfYyD_L_koOHkX*25xp zTMs+GZRzy(gUxd`eQ$}Le=6a@OSNsAXD<2T;Lv+?`RDB~r{*?Z`@zJ$m{TU&EI-2f zj=kO8eRIy;u=*W;W1;S?IZF>@+$iZ-w7GJxXp8-2GwaUp?U(&LJR{SySDGqr5}I_S z!_&p7`(j1RrsW(nD|gk{6#pzJ=9Ig8?#z#wlhgg`v+w^qU;lR5XSVjbM}qxTr>^qf zH!|LynANqGoli^A|FhTRoDEttoL1U-ggd4Ff6?`0u8f4u)%*1+8BgBtulnqszpHT7 zP4`EC9ac>|mD4G@`l-w6O>h6K{WZy$WlD0+`!k>QrdmI3*!cNPW92T}lx@5MTpXE9 zI%dVv=6PyIBoZEnh&{d4%Xgq^ZB+Aj=DOFjvhV*m^?c2Gy$_-b?e4y8;XC~^YO~ex z&kTBtSLE(#SlG%P`|!&_tG2I8Os`LBi`#tS|DTu(OAj-j|JS(s|F5>_@1bmw>=9)d z5+9yae%u+T=YNS~vYUX-WuwS<9_#Ogf7jT|#<=Hs66dRuF!eQI6~2e{cQJJy68AP& zuDTE;pt8~I_KTo}Q>qN3mQKAnH>~Emvqq>8(~Gd3E+OV0vkYbbW}er1aW1Lki;Gve zrq?xhrDky-|I$jPBBt5jmKIHB?6z_#`ikU>PVlx1Wz2N{ z@lyQF#e;t)%l+4|;&`#tscmNbnd~*4hW5I3CGvk>tT`aTa4&KG)`^#Wm}|RIcu(Jp z@|f~uk4EmPRH2TojE86KO#YL+v+3#Wwzk(y8IO&tpy<|U-9z(pR?ipvdr&gbEO=0D<$6a$plo19x?a1IDeA2go=B4$F#@H&EI+W;y-u# z$CRJWUH+SWjex&hJQ=cDhR=&M0XQ@6jKO1|);u8`dcbs&Twq()m;;-I#^|-Kq zxnEwg{g-dswxu@}E3e*`d3f6A?Xdwm3lcYQO=IOf%+7o+WmcCaJd1dcR}Yq%)KL1Z^;A`Oot}wpd>K z=C>FVWt}X}6%)i}-gdmMJs~h?;Ts;$wwFgIWWMaN|8B|`IKtLN?$SNUkuOwBA)4b>rR@2N(;I&z%1|efgCrnJoAG zO}>HGcH9w6(RJGJ&1`T*8BVK zefW$2-mdR;RpOKGOw4-y@b)uH>%Dcg&(F=BvE4X%ltm#2BkU3M&v zjw-y*Hf6SX{>^P)Ypnj7&7886pV9Am)4r15an~4+i(Mw@siiumm;>>5XSp1o^ z=#^qO#k!Ec0qhBBW)|WCHEb-6oF%tkFgoqvEL1o8!&1Q-Hf5H7`-M2hlT+?%$JI_W zm3cqiOGQlk&m$o(9kD4}yEkk}6+3irPH(hJUHb|XhKS48^_<<`>|`;~oL1Ak_VQ*Y zvoo8fbuOq5x{w;MPSsVbc(+FGqvXlivuFJ*G5MS-qJF-Ps4 zE8j8owqvhCXU+B6H!nkX8Y|;Qo1ag=dJEqEa`U#(Ui-j{M+Y9dC$+2nf1C?m zzwcS?<6_=@@(KJv$$|H)b$UXU?a7P_ak-+GY(gO61AQvY*IbCSB7`a?sH!p;H^4);rT@~GeF zulh@1b;8L>bM7XtW;0U~6|m3`7e`smy1i-kHKSU;M4b<@h}sfO>Co)nSF-E$&Ff1OU1r9kExN2iXa zAD5B@=ZcnFRz9uR*zSLO+50w+%T}wFZ7tj0ShKC{e9fHAbMO6I8y`@$H!&jn#e^3|95aTd&Q&ElHTQ$(o$mmJY06# z1S_&9GT!ZIhes3B@tPcuE2dEim@!_)14oR^pVt~!h70f)|drZW}K zT*O?rIT%~*D*OEGtfKDwa)+Rr7r_$`s=8^{UVryKWrl6Skrf(-kAz$GAME+OZQlO3 zPOq2mn!~|!*10w6vG?}d-jmEw^W+tW})4^2~(w zHN`)dEqWrNt-_>wnPu0(Qc#Iwl@?ciU@^y5xqr)hezrcow(QtZ@%SXk*Zf5Xl_l9X&e1sN zQXg_;$H1X(iI*Z$ysvPW}!rLz>X%bedIq{Ku0zq8)0d?cD*@%_l52H6Lx zzh>}C|D9?X&2DqzH{%`2>y|ao_vWElQSb9ZZj|iP z*s9RIt+U6WZBL$$OC#sT6UE-9z2;=QR|r~HFtgc zAHT}yQj=y)IOK9EE52oaI>Sr;>%o~liza+kiLew3RLp%Eb2{joiO<)08ox@qBAsre zZsU5Vd+^;aAMq82S5qT>*B?x^4!BT#qmC)YZ0<(od2eqz-jtZ{w(#iulqF%Quh!Jw zlsL?%6Z?Pt|6Av6-$(Ah5h1ZU+&WIM$tWh$i0wznIaS5=bAPVW3ysPB<-W%Cr(Uk- ztje!u0U%&D1c?;E7Q`kkuUU7+kB>)IDzdt$;>jU*+h2RS%MbM_ zhc$d%wf5Dyx%`O<+nhc!O_g*MtH^!*`jqknr3s5ZIC^<(@D|@=aI4m9oA;IjUl-X3 zZ_8W0!fC?Ob2t9pyDkC<|i;o#&llSymD{%RsqeF^DAO3HvH=S;5|dZ?)5%a=?A^)s*LTq z>AIFVuh~ovP5HQRlgvk1-fWSn9wud4y1hODKkuC7UNgCqRRo^Mj5}FZ<7jRh;g;TW?iUcZKnTihxx1ucLa6PyGyiIaWIh26AlX z=e;fb^qU8>YOUD&*@|o9X1`zWv+vQ;^R?%U>*jG!w>?#KfOWR|Mn;xKh7S{;>(?Uy{yydcxtU^PdW z-?iW0`1)h&ug|Uj^0B_Mfm{7V`r*s+Hwlg23+Hkwu^6yA^ z&B~LlP^jdmv+ATyOa%Lv+&^z@m&biw_TBH+-i5W--nVs$@pn9Liw<7S|HJCQYX{E| z0q;#osS6Fl4r_XYNzi_d!dta+TB=f`f(Qt%Z3fN zf|3)Th3eP8Gp>KRe*@o&&`aX6MJpGbF>Gq>U&1N*j8)trB6Y*`S#LH<&fldKmATDs zLqz!r5!;4}<~RvW-uR85ULKER|8x3o`Tw8S_f=)2WbC^5fXjAw{Q>?>MH18QE_8No zE?*!2`|QDI)^wkTkepoJy;qum38yo*6XI~4ymRoaZbNye<{`xz;^}iPy|Ni!Z zvnBgEPwLwJ^&b{>>v1s$y|Sp)e|~e_lYqEW+GmX2kH1`P!qJ+rrcLeRPZvfT#}gm+ zewZwNo~K0bL{)fsVjDxS)7wYYDO-<)|EN1Kd!21$q;;_TgI#>;2}+ZmDeY0Od3NC4 zsg3N~pTFGQCaW@iqH5C2sGtye&d&2iL6E8OYov5$ff=$BE5)LE##qD+i0348m4F29=`Z&#?p<^ zOqMgA|Ia#FcHz0@CBci53&JnyUuc}jax-dD7#G|7B!?3`3>z7l=d`}wwyUlO8%XT(L~n3jDCf^25(b zGahzFHcQD#JnP@a>w775`HXd8&!oA7>%ZI*|NrN5{T8eGU5}y}C*6O0y6A)I(nj%a zO|4tbE}WhE>P%;MH%A0ck~cV9`)g-hN8yn+Nwd?}wAAY>4)ET-`YL4cFaGU!KAnr+ zSC>&yvFzrYEVJXkrP;6d-7CI#tiJlgf!qJCe`WWdZx(2>{?s3zy~hd{7&jlD{Msy3 z?(<*&s(+ui^O{_LfBWyt*Y+niX!m+4EdRGX@2-{Asos3EMJF`5ZnHd44vzU!XfZ8j z4hu7fl);3jlNuET*y5*n>HnA@6BAuwo4_3}>ros3z?rq-9{-P1bF1V2J>$P+wcytI z7yY?jrcnh)zqd#-tG#`7Rdr7JciE3|Vs^Fj;;y+%P1jakEWcXXZ+UuE@H>$U)3-1YyrA2=ib}+tca(mszwD(25m~Twh*|78f z%dgvBzh7}VWU=AR`}Wt~)F)KDm|K45-#7o-R}pLFzE>@p()nM7{V999w*Bw>^M1T} zzHJus;meofE8p+_6p2~4fV`W^kAb68}o~ob++b5gSWVVmN(L#z7V~tRU9~f?W^yPoScQ8er^A0_c~#MVnD6;>@$~_Mo2Jg+`KH? zB9yFQr~T!rjMwM%uASeWMx59D7b7y!VIzBk<|+Bpf9|lx_We0`NMqW&rAMD}o_n}- zr`N`X-UqzCOjDT?E8v=SEJALwUBZX3vp?=_kNta6*SvW0WMP2~90%sle0b`w*ymca zc7}p$+#-LOrk$w!$)zQBBkjmF#U+A=8koL`w&@<|ZSB;r=QEEAzW(Rp`#*0k&ySgJ zpZva~%&JpJFM;t>ZsxnbghMAXR4>=Y&$^wX=X<03;%T)X?;da{GE7qLY0}$WJE=Y4 z1@9&y<=1mx?z?q=GvAM2=KFRgKF&RSIREzz`}%LoX5T0g=XO$iReSt5`*OGIA?I%I z`n&Ud?U&$rHde-kA73VKuYdKpy6o+v#k$j`Y&ns@ur9vnq_gi<>y{7m|19Y!R19X2 zNNSw=P*B8rU&M!*k{zt_Hv1MOT;H%z*yWPy%tb8EDjW7Gvn`J45K4%t@jbX-`P(G( zx(6@*XuRhv{#|}zq28y*`xM^s#y+TY$i5^tS-VViX*0L6^{?mkAKB%L4<5R4;?I<; zw#yynZW7#o?z+N?YM+$uIa3V9-dxJAnWtXa)2*{g)^d)n>8{S=V@nf_H%+&Co^}4U z>tyXy50{4ONUvV-eM4jU{U= zZJvgu#`=UA9$Pj@O-)X=Yu zOn2Oz?)#dVt#0u}_v60uj4Ndq7qHI@$*gy-hzv>)@@&Q@6Yk|kL0@gYaV^x^)qOa??iL^h6}6?0em+^x1MZ@bNF$gdy|TK zlK_WbO5|qqxT344&d)j6BDRu$*+tcjd=|`zZH({l#CO&5VEb`uX$LeSVi;^Jc!gL`k4`*(Z*f|MrINP59l{ z*r>?&v@Oep^O#e{hu9s`GfO`{C`_1{z_g-Xog?R(mBNw}4odF7uO~1t$XC=?Z(I`cw`qiIgA>HSaVvcKC_EW0I< zVn1(g{S}?XY8w(~=C3`G zX87ih!~|36CkHOAIk)F4@A|r5^}iVBay#|CnQrw`NGRT6(~-%_Dk+ZoKITg~itKmX z^7!_}I9w^<*6kybEW(eIqOvN4ZuHDpcRladG4sAT7MYj*jG7KdmA!s`;i74FboRAS zx!*UA|ND0O`rPfE{5(0b_QqCazv9>Jo)&n0$tB4j7L4a-nP#7}es81g@>(&+wtfAY zV>S$b3N~>tG5l2P$-C?H%w>V=!bL3;SvVH0Imog%$yHNt;zqs;+f~-CzTP~!>BN+s zhx6>#79XBl7JuR5wOJ>no;Tfk&7gAl;`8TCVtqfW56$5{eD2T{r?}ttL7W~tHY~d< zJAZ2ZpFZ8}%C|@M$0pkDm_2Wit#-rIOop8k76f`eWM^YAymtTbQT=|uNqc)V)Z%xY z^!wO$|Kt@uMfYH_~p%(h+TX3 z2;4T_ew*3h$@QC=zxKCw%S0Z!Qhc(7@1))JF!RR#h@_{_w9eMHr_cNNM*RKF@|JBI z3{Lkli+PJPtDfh%`d&TjcU#c!Ne?%~lsPf01y*@-GYc_YlwdqNp=*g+Zz2;{&!u^K`-W;?u{xSBsFI9{;J zWM*?qyU-PNZF*46v)9I^)xJGBq4|d%b?-~hJK*;#yzW=}x|)xtk6l~)yy^GDn>RnJ ztL6Rq(7v2s=FM|si+4VP-*dxWiN|jd&V1m&5Fit{Cc<@P;}mX*B!g|YirIA(dioc} z7Voh!JNc>JQGU`vhc##I&OCU?^1Ust+Oog?+iCebOF8AuKV#b^YQjtAJ}6lj;9sg0yVgd*!{pz! zjqiVp8*{wwd8064ukx~!f#LBN*PQ+Ta(3N+`~N@q&7vmnF`DM`v&-V(Jef=$pC@cd zha;W3&c%M|;*y$hsC^CxlZDZ0p1O0#KW%vNz(wX&kwf5*haIY4zkIs0qCBVK!;fFR zQ_s%Uueet%|9{K!k8N3-jqHuAch_aT`C`8B*IMa(2Uja?*8R5mYx3^b1={p8x_@`o z`Xg)`wl8AoK?aF1j!z5nijDNjl?0Y*79H2KXAv>9b(a z_)*s|kCXYaiWh@e)VAM`8bnp!bAGmYaO05FJoXPSO*2$jZhP{+ZUF5Hvfnjdc9U23 zu~{x*Yg$v<*sp2}q+XAh@qYg7Tbt^1r~0~=Ecj3|v!-s7?@pJydLM4jG z)m1gXgNu_D8jaI%lTV@jPAl28^A%7&K_I2csBYCAiZnLY^y|vW0 zEy~HsTX<@D@xp_S=XDo_)vod zq8Gf3T~g|4^txf;t0%YrKPmOEJ;iULb;osLnb{QXg&qwP7FsniWPCh#wQLJ#nVb+vGA7!UW&ST*34bj{C=2H0nva`wi{-?xG=9}2B z+IQwW-#m-D%U`dr{W$ye!~~|d4VAffZ+-o;b_&DJuE_;8jCZR}noKxl#rR_p`vEaQ z5x1N5*MtRD)XY4$m~}}F!=eNpaYx3t39FCoT{zqPrrlId-53FdgZ|U5AD4b@Uw=OH z8sp<{e;Mw-as4fC6)EwP!e zr|G?STJXo06K9&8)7@}4eh*)p6(7^vx(7Gb|9Q5WZ|;n_c~{eG_p5%Z7qBw6c76L; z*Kn`anUf_)R!uavbGQ&#P&Tnqs^fjyrcVnZf3|5BZ=BJ0^4gS${E9OIxszU8UtyZf z{l4P#>$*oL`;%n@zJ6~BzGd~_v-%{1_e66?PLr9fryttPU&yas^G;ZmQE!H8=hG#> zTko9vFLbqYwNLo!bgACpJEFVtlAmtuuRh})Z?-1d=B;ofxAgLKIU~DoNB95Uz49aH zN;eJ$JM(>SZ)^-UI>_P4uh%n=rQys~%c+Sj%nEupbvIq^f>$7#CJ*Ve_Zf2F9qQ*ZN;C0Ay|->ErYx0ZQ_c}d^$ecK*9a6amF+G(?y z^}h#yKfBAV(CfJ#CBxtAroy0^J3VBAga6{t1K0k1aHwA=wRhRw-;(E}qT_GPlGuAC z{a-=u#O`e_fe#PMKIsVEEgWZJ^-avgQlUv^^5L$d{0%qu#6CaLl-jd&MZp8sGU55G z$88$Iu@sp{2c(b7A!zrRfX_w4lfp7U34bUsaeASuUrLxwG4Hox2Z__J)y z+^u}K`?TyQeBs@qA^D)it&>q__soWyn^#|P`CHkr>`9yF{kKdF+po=%TGRLc=IsA3 zj@SSAxQ5v$CorFhL)v8d>5m5lrOTR*%+#>$`e5wQbXGsckAKc-PKl@lPwrm~Dw<7f zIv=uT+!YCtlv?-akG{<(%kz@*a`Uzv75jZbwC_>gteJKnf1a1!`?l;{{KnwCyQ|mk zx)8MY$0P5ghgYY02A(pq3R`BKpJruxvcb^AX-D$!b5`q3zm$cA8qDeT+sgOg-i42qaRRTyFRm6lc&hr) z;k73X=dsJ&Jbp;CB~?ndzJ*gf}% z*mZ{DqDLELW_HcrlCo&GVPp!^(RB^!-IDQttWI=(U6Ucc_sQuEe3wGmyvp3VoOot1 zy~~Xjoc-_i#JZX#98ac+@yZvL<{pDGk40j*c_N5_j zTH>|-kb4|?7c>nwKRUeQC{z5cm_Ai?mxZUT|GcVMZ5aM`{%T%dU7m9xZOfw1-sGCk zwb8oi(j~^TYS-?2_su%8>V8?K_^)i^_Z6q*|NQ8;*|y#&^z|Ndk*kUI7de+4;hxWQ z)BaK)GvnR}78iqz+f&@;dwK0~Y!)+^_~bx2(=qF~^|G(!XGqCCTk_xaeC55X_J0nq z+1PX4L;Tvgb2;+%cda(O|1AGoBU)Z4;>D`mTRST6?kaU!)jX}nKx(#cOZlB7M*aoo z=4xDKI+nk%A#UR$o=mQ;AlB#1Ue!)>T0WdF_LrUWia~3FrfZ{Oht`?Ch=zhi>KP2q z-h2B?4|w1I!njZV!FN`}oF}o2=b6)vRmv4)eR=1BZ#O(H7#^E&SW%&$_eoZxhtZ`gvNuXD{R+KyPv~$b!SCJ{)MeC25Xql~v3U=Olvi#3U`M)>#ZTr?wQT=Hk z&d0MLhv5V#%l9v?>sQEq+dU^wYPtW`EBw!$ljeHA;B8c$xrZ%AQf5WWrwiS2pY7Y^ z%f6OuJ;zuf{b0|o^>b(LdvN9D`PvV+_MOzsD|72Oxs|W=@@8i7xE+UAUXqa!`xPl; zTk1G%m(b*}9e0GpRb5VLUuADOFiEMaUP^^SkX6#pj#J%LBz=%#1Bq;rmkAaC9b~h zS<7N0?uaAX88-_=Eb}afh~$zja+$KFV&aS}bA>Lgo=k6@Gug>j3n$2b<4$(` z=qB}cN&DHoG5H(6GR~BCejfAxnC$m|zq;dphrh2n{lX!+uJ87lH`6loxRQ$NuFaQu zvMP1Yjh9>3cwV1%x!81FgZ%6{zqg;SeW`7Jujae$eY>hJ8YZ*N*Y19E$$Q?P|28j= z&->Hdd{%6-we-Xszo)kyZ<=^%ty#47+3)P)_cgEO?f$2(|9eJ!pH=+B!p!P?M^A3) zBdYO%mTC`}lc!k&hs#TUdE?i&p<@@HB|8KP&_`>>8>9m)2u z>Tmx4sBhll^eeS=N20$=qvEw4lN(o-t&~46ET_ZNamZ6A)3Gn+!Aw9jB7jJG~1^-Ml91ywT(ZQ)cW4xuLpI zGeU21s%Q$!Ja@%-!4BS&r%sir23XE5J=bNZdR(~mz>L17Uw+jb_wk%+m$`kX|7xRX z**zbntLr|iuCKa(`+voP{_6+Rey{4aESvLt?Q>TqUO5KQ9UH_%x2Vn2Kfm?Yxii=9 zfBwh6|3CBfxpu~h)wf)eZ`8l}pj$5gYj*vwKgYHz>;LMFuQ|8=U&&7G12YtIAA=LZ5(D||mM|NmOm{?n6SKTbp8l(e=pGVJMT=I74L+xhui{@>U8 z`6`zOYdp>LExkPL^A`beym3-Q&%&vNBBO`MX1XsxAw?`J@+ioenKzjB|iyZJD9^XIM4n0zl*o%zE3c<-y|t{KyLucY1kynOxdiRw0cwiO(c z=j6)Qbgf7!Vo-FM!BNI6u%lA#Lj434i|4G*YX8N#!?`uvuqtjv_PMj`=35lsTUa~)=lttNPp?egC~&lvzwGY*x2+NS4D&SY z8@zfK#AHl=vY{~|VPn98L+rf`25mQ1aH>tKT4X+R^E!E{?vFKnN7)@M7X=*RIC}1E zP3pIOzjF?{Px&%!%X5!|8<+#?D=fZ*&ST&6alOAz&zWn#cDm~EOje2$PS(%(cCc1d z?`NWA%Io7_j03~oE@n~P{YKfnGDC1$*!upOB`3~hN119HPdT(|QQn55FH#@$v~AI_ z{4{m)5$zd*>o|_wO6d8s#ndbCBSTSy6Z1|b*>2&dMNE7OZ#Wsd4)LE^)ezzvesr^p zq0!gZo->ka4;LDqI{LwuRj<*fXpdlK{by^{NH5j3?Tmq17xNf1H2-V~=k7lh^xRJO zTAEw$%xees-~X}p`Q9H>r)udhH9Ecei}{ar!L#@eDd{ot-JbUD@9)09f7b7Nvaj~I zcIfTZjv_a;y;d6E$Xk$o?z(&azS{fe|DO8%P2TEY*S)^hmY;J=PfX)jTdBwW$oAp) zJ%7LYSG@_n+PZQ@y4Qjb4P8OePhm_7j!r58I)`*l>xsQws{drx`BNV}p00AQxu0FP z{{N}>()oNLmj9F2CkOgG`|-)IIIZmRkss#&e*L|Axc$oSXz`45c{SB9ob?|EbRD_W z9BlGK%g9VSMRcEums%am)_?=cO}Zm)2Y=*rX#DU$$uQ7txykg?iV{Ymt~yCCos~Hn zZ?Yw(KKwATx%^(`@0rHwN@i19WfB!mWZGPN#ebjw$M^hsRad3&8`~Yf8_fG@$%KUF z#LcGmmuAUX|2gm`aG$!*^YzQ7Xc@fJ@2K6ewKx9shnTHvjwUc{cBuC8Xqw(4@@JFo z_6x}!>h*KUsb#l|be_7;Q=jd-zc=QOjL*Cy6(Nz2 zE+u~azQ|DY(z>u14*wH#mUf&fT-_YJHBL78V&&7AQ}1LR7tFd`dR8#!Mtt3q_d?rK znw-UR7_;jprb%Wj`4-6qUUt7f+tc@^{GV8OjZrkOE$~qfkN4F|SMfAwF@M#6pU%hsU*aAgm+yPy z`uRJaI=5I)Oji>8@s>eV)`pFr7Tf=tA--op z{@WF)>r3xW%Q?+^enP47W$W{E?tGrAU;p~t?VTN_oE!HTZqL2F?VuyyhVAm7C&ivJ z6zqu8Pvf3;@Sb}_>Nk0-n-;6io$;w`S~F$yuVWDj`pL_gm_8)8cpUbOde`h?af|Vg zyIog=;itG)8z&!sx8wD>^97invtSDs@=d;K$XpZG*IM`~;dDKo~ zgLM(ZOgG1XeGhG;=N_>6kSN5Yxns)7bEZYqSnNIw~$8RqP|D+BEOqr7CYHmHkh=o!l}X zul--86~iWZ$aT4b0c%p~B3`NEi=0-?l*?+U?18?`OR5ReaGk zU*EO2cYi-t|D(EZ-|x)-SF$}6u5W7N5@Fix{8mh@)hX+!+6)d+`33{c^OmlcbAnFI zJ5qL@uea1^&!g#YuQX3-mT)-LB`g>#b{XhFQ{$#r^7(7$yW|hS~{uNu=qK%J#zaKAYtr@7O zSTrM%LFMkkMG-LtRlL3bF13{2_;oOkJNW&#pVwIJC&^x72#`9MQvT8Z#~pWX75g16 znyjkI9o!SQoM8|a=(+bI$2OMX$d>}uIt{NGsm+$%A_sylsVF+GYS{3suDtuiz_{@<&)=j%So_nhV3`s(jjxBWYoI4zo@VQ`W6 z>Bgpyt}?eIb~^ znqtxsez)dIotW&JkK69<|En%NdR2jd#wrI1Qv(m9Q+2I3g_Z`gGo3wk_ngX|3Fj_}UFCLi zS|0q`t)DS%<82*x?O?w<+~-nnxfq3TH@GTSx-?p5m%7fJ%Imn}q)yrqQp36Drd(cd)T>op$3A zne}-8s`UVEDd%@9r`|?vxhMeS_ zkuZFiWMyh^K46~ln`A_wegrn0KT5D9wGG0oxhp#hw!ja*vmOgdoq^XCsr^f}fO>3E8 z5n~6 zJz1#kAmqUD;^p)tQI}`y_VWMxp1$|Vg_A3Pa`7|F)Su`hoIA<%;UWH$S6eUsd&Pe5 zw|f7sS4sDT&s}HqQmbP~Y`f8#-(6(7h;y2a*$q~WuJoreKP=4*Dr(;DI`v}LzyH6C z@Be?3{#iHG_^SWc2-eSYgl%v7$Zt!`+qUob?f)NV`WHT(IB%Iku$S|W%lbAIFCP5m zzmsnLH7+oDhi>GFMQ7U>^&?ybT|}HXyiE7SJXjjS>MP>-U``y%A>l|9v2|Z&*FHGF zTz;qU_Q%KWM>XPCE!3Y=?z8sSi4QNF^>^3&{`Pi_p9rh1X;w+e+IM|yl6!VKeAwn6 zEdS$(c>e#{=kHlXN-qoMKeeRw%h{g!mOmQg#1HCm-ZkQ`I=xK5=^EqY0!!}l%d8+}=OC)se7 zx(aPrZngVD{rPvo`~PI?TT~^@2`^sYIql1&jv%>$b@Fp|f2+-}e-b*qC_W(1ZROIh zLKm3Dg?vgcR)1SiEOPtToVcy)f8^cV_Ow-h=Z}^C_E+s0W~=u8Q|M)UyIee=_&QJg z?_EFZ2h~E=;QbiTAV$0_SOLo>tB& zzRXYN8E>MuTeaJqHw)vYty(5Bak9oDMGsl$jiNKHU;NasTkX2f%wDj|?;?g!z zd*Upgbkuu83s2J=?<0Y4MPja6ynlTY4qi2-Az4hID|G(SEk3Eb0QEVWy zCurl0{b?Ki9sIucYhd`>Gw-=4Mbzvl65X^`T3NS?*Fs2Dfk)tA$lmv79O|DgoNo7~ zysrGTX!sVXZyQ{y8P(c%?w=oLD!t~c@w!c-fqS!alFApqfAV71$05d@A5bEDae*wKe|L;R4hhBkCnyH;P0$soL5Bch0_=PQDhNy=t?*^ zb&3!EiPJc-8iGI)9Lbb zH+LhCqBnz(UgN{(CsZq@_nvxM!X2K&A=uco+RMq~1*eW7gTPjo9RJK*6}4ScWu4Z9 zZmU1yZg92J?0?Y&Zhx1VGOMjGMJxCk&A8(lwk|8~!On@3lpmfk<6mNx_iNvvHAKb24%(I;#Qs;8o}2e{9ZjR{A8xu)0bXVoeDczx>eYHk0s65 zn6Z}U&bHSljO!k&EiZ0EABQ)dK| z{sx^)vac0=AuDeCth9d5yW{^a-+6E$WU+kpp(Qcv6N=`^{XcT@arO6iQ&pA9)LySF zoFZ~$WlzAXzkMHmxIE<6oT1?N=_$AJ$)@1&tgNW?V}AEPpSAw}=H}YRO9VV-^%ne6 zm8**S^+3zNN`L>KQ(s@3PkJyx{#DQ36O!7Of1a8(@#}5<9RWuaH5p0@XFdq2eY<>r z#qoucAKOT>EsjWGDrh?;#yI)$fkRI=S{~bU;;lnd%Zc=)l)Za8ef_yx_$|4*uD0_S zA2|Q*RzuE)|4!iyitR>|wru_o+i`WZlKok~)jn~YvN!WSt)9MKO8enkwL3TGH*AmR z=x1SjX3ccPJojD@hgPXl?p@Y{T>mc@D|W?uaGY$6T)5)B(aiJ5!qzFjnij#4Cb4?; z1Kz{!_36(qt?8Ytd@u5b*8$m-M~9YIK3FrQn{AqkN8f5e>jVR~2QzbAgkC&Z{UL>c zXOr}U4-*%g->LWon2U*9;s56dgG4Cg;fUF12n@T=);|KBI&|6iKEzvPX?`vr-K z7oUX1oZI=-^3Ju^S=&si9SqG)Z%WDUE_yv}YpL1IGc|HN6;eGXy&4zvO8Ypi?Pp|) zfBX7&;ZIRKj~zeeH}Bb$e+O*xV{Uv%%CU{fF3QR(t4sUa_SLkW?VZ&m(E`~Hefin)XFw z=9e+{TL0;RV0Ql&CyOSV^q8ovJ2za2nKA$F-q&Yh%bj|d*9S4Dop?T5Vz%7h8Ly`0 zc5PBBbvLTmzPR+ogLTpQl3(1p6O<;~s^0Ov+rzH-=+(>Jsz+uVU1__iX`{k1k*&Mb zpa1`OLMd}E@7jF3{A@wzzK`BBUl#~&-u3^kkjhQ(B?4QwM6zD}{^kEBwaBLtTlROD zL`|JJd+zpV8&$z+O5P!k-cB7pt0cL*><(3QvpMS>a0=)-#J$;tEzSV%iR>=Na%l_w;`M(}b&$p@i zV)6T}r~C4_lr6JW8_&3EU3t{08JSt@-nMA7#H_itJAd!XuYbs06Q6$iTX#g}ITJRu%_r z^SK{CzNvlW?Vh#;*RIc+GuPs8u>Hp;&-T0%=d={5OI>GZvf*GA|0MO`$ehB0jPT^M z>EGs^FzS*?W=jlaJMCzE_3YM{O|2T2>-J?9|F2#Cevfle&w*lw`O&fBuX=m?Yf5rY z|K!ZSnR&MH!LOGuUoB)WzgzZt!uuUfTQtrxawzOsuP=5}v8Iq==8Tln){rWl@d2z_K{$>e9AL?^M!GAAfhEg;UpP zlB{Uf|Lb}Czt7aKxcV~lo!HZ6#W}2B%va@DJ&AdBZ_nAwM=w3N#(RDJ@6+33eqPA^ z%9Wp5x<_8YblRmPcW$T9~H?i9{c(l-eP>(9E##`u>_XkLy3&N}m5``ssd| zdp34)(HnMaH=U_w8yi>oeGKRF?I;)&PK z0G7-RbM!J|3J$hTkE_be`QELn|4~NI<<@_vKHk1RKl&v4yA9P;N(`?3-naAljVC;p ztLBTRH?0u){CP_0&hHx*FS%BJ%a|c9tEc}(R8_6Zxu?v=Mh2JroV?ORX3p2lY2LIg zx7bm}bMx7yNnQa;dEPI1H7zqeTMleHbMFhMx6$Ewb2g|OslRBM{LSx)mebB%GI35U zUspa^)An(@8#Rj<@sYVs*Ty^FQ+ z7n7nZ&l}!fARl6-YC8ANbUb!H$1joT=^p1TH8)F<;H_I=Pum& z^Ww^r>vq3qZk)Va$4igXKe%GbsRRa{Cm&SVKQI=k*_<{J<=VadkHywj|J$BQwwYS- zPcl|?9Ma{=Yb>vNzvuO~z18o<8!u_whd+@}yLk2N>}_#{M?t4)R$*O$YC)~)@qxnS#Px|ISlSXGhqd>2~-%Q>pITI@Kd#7wndL^rX#_+;Hey z-l5+3sb?q2tjxQ;MP|zuy_?FC%TC`dQrh4B@vYs`0HMVb7-xh(IRCfa!>&9qmvdF< zr-N)4mc3wox}2%%sCrDuV%3bU6=kocWPV^;QZ+Nw>*SW5{u8&lxy61HZ*$d`+UQ*u z!6dZfg+_HIEr|L!uV99*t8A2vD$l+Kq1qYZ4n_ymmY7r+C#<_?Zf5%T zZGU~u|BuNv3_?sg*_SWBELi{dj*hzHPnH{p{bgi#eSg=#@2#$R?Wf7ICM%b3@KgD~ zsPN&($>iOYzdISP#|v^8F_hk6P*FU^YGU7(Bd8%3Zx-A(<=c@bGxP8MK3o0%@3Si+ z+jFE;{k)2AR9BvUyfyn;Y~j)Gh3SH!sv3t+FnoGaz0U2d$b~#*AtNiRQ(2*J!g%7O zO`FsH9{PQt`n&Cn)xtgNcV+ds`fhMscv&@R{ac}VkGfS|Jx>2zAY$jv#g@Nr#jcWz zI!=n`lM~fva7QLq^D9~^WFA^`Bz~u!Dr;f8Jzc&VOprLdBbD`UzKVsr zvT4$KmG9G+X`XD9IDF)h!|q#TKaRb7zVC-Ra-m;VjF$$R7_+ff~g->2|@XrUo?|-}? zdwW$~e86mr*LRDSxM=ET9je?Fw8sDVArFR(TYYmg<{kXTdu9HgDQ9nQ58n}fZ0?I* ziE8nvzs8>zU%q_Xf4=3{i~Tjf&R!3Bw>!VYEH~6~!ON^kZyZxvSQuy2K02~-@9*zI zEPU<(`D_a9e1dMGstp-mavWlm7@pPYr_=?r96CSF%FZ~vOE-i9zf^xf?Z^(_ws@4j(EJ8!F8XskN(f+(wp5sx9q6Qa^bzRE(oy-Crw*+Fipl}i}ajV z@zuw&Hmj_bFPWymD8duZ@TTaMj>?1;9ik67KD)>q+{_g8PI1){zr%YTKD%B2S9KfT z1A`s>f|(M=r~c31^}S*G8;y5=)1N)Ndv#rro0EcyAg_c$-7&%XIS2m#-z?A1%+{<@ zB%rW?Q%s>~Qh)1H z5MhbDkea9()2-UDgeg6%+xYU@pRL#S_En!)ET8NDy_o;-^l4#l%M^e8UZW#hcYJO6 z{=diD>)!8QZ}WbR|G%s5QQE6hT8$Hx)`b)_d3^izS2};s$650K6!xjVsqy<@nZB`I zDtXOue^!AVeS7EaHEmq>uzJtd*X#B_%Z~rAb=<3wzp-ZKlAkwj+{izFURS30jP1{f zn_630J6S(1sJXg`YsHo)@>6tX?0DNK{!ldPn9|FwDd$=LJh>L#Ev#U)_@GEYpRpEG z&o)J$q+M*KPsL;p-r1nN=(W?ENH(^_T_G*+6?eF)JzMLyT~g=m!6%y*Wq&+<<3N;x zW|GFV|DHbA+EXTlo7VZxSaSE|hp_O;GE-&VhF+Rcqi%TWNX0&x9op&)(SkR+jy3!K zcCLT8@m2YupSgEe@i;fi&*Ai4&@pvm+nS7hPcB|aww)iO;n1$fa^`~z3zI+zkE9Uq zWCgXtjLr@fW!5c|x>|Q$jQAX8@gRKF=4)|3p0D2b^NskvlFHu5)AP+XcF$;<`FU~K zu6Z2a7~S98uKcf>Z~yE>v-RGsLcyj9&W`UUIG)I`kdHDFc5U9EV}HFZfp`Cr*A3h9 z?4K-|{60bI!NP#~%x~UKDih0}WIZjc@6OKR>&yQ=m5=}YYU%p=sn+bqKUL=@uG^xw z%<|>*jwQuwPWY9r|9`R6{@2C+DNkMP<-V#tmugd1i)>i^#Chun--a!}XIlI-3JabX^Dbsm;`9l! zo3*%}C>*MK7QpQDd)s8^c@nd{7spt%=vaQRY%!i-J?Fv#!9Qnv6&LPPRLaTq$lkMI zRjXMd`^v|z-^1RyJ>SCl)IIjWrQ8KSwDosdbg4!@o3?AwTG`$V&!q+mhZN^M6f~)q zW-&C1O0KG#)F^pqP3I$%n=N<6HoDEsxGh^zI)A#=Pvh-ifeq-l&Z(g_a)l2SW|MQr>^yb3f`9B{#O~3nj#b2vC{128D z38pMfSTbpv`t{Ux7yt1Fy?(rnXUlQ#nu~XDZ8g}xtM>Oc_rGHMAD<}oIl8g^Tj7@K z8;>4wZvXq_!t8aw-&E`U{LR0ozO?eWg!&S!#j}-q(=k1v1 zbwSWxYnPP(OUR!|jH%o*yO-a4`95aPU+Me5j(uPE?_JjQdw*BPE)Z9b_R?)EJ7l~t zxLu}bM*YTY`&4hECr{N+ay+zbVU5@SJ=I9iQtWNZlK6wGZe~nWG&%2kU{U5YheeZ) za|tr<)zo~#AGt+p!J5kXj>{O{_R3!A+3$X2;_8o5l3MJBAC2eL9x`O-+F}$Qs^$0M zRIko4*DLW!3T7G!HI*|$+3da^xWsT;_^E`^oamxMhBH)SPnldYjJSHId4K!Cb3W{f zYdFQ~n`i!?zHHLrIY(Rzlg_nt80@>`{!}Vs?=+@OGacki{#J18WtipI7{MsZGDFm( zE8l2Ong#nzWpStM{|^qhc-fj=*mQ5ne6~q<6IUL2$g->@XR+A5r(VW&r@t}E|9`G; z|Gz(O>!bBLM#f*9U*CI_{&i$V}s{h=PV?8MQd768qc-7m()5N#eKDGb%PB(wo)6d~=Z^v#` zUG%k{e_yud$A`1h0t+}--Ey7X^RqGKef#y;)$V4h3oJqxaLzP7az-Flu3-PK{W~x3 z-mzn~OuAs1gi_J;NBPT=Uvz_bP+CF{!)M;;TZ9!zb$$XGcy}Ijy)_E&f-) z>02?Ejx9Kw`EKX5wYOeO|952FvK_W-ENpwV1s(;m%*)SswxsLY+NB25SGAU|VBh>y zTdLaYf`5g{BjL#|r0GQU~xw{_a`>h0&h z*4flVu&zWZOdZcAaDI%|=*jQ^RLMlH-) zB3l?Ob`>}&g!OB0^^$5dvb5AypLl(RY0qTKtD&<6Vocd`B1=_y{d6rAKWP|R>z;kr zH|gf-KSgzuU(RUy-lfjOsUf(n>*MR*wGw|ns=WBv8WS$0om#Bq*uCU$X3nOtciD4h zuFR|pblG-8-X+~3=vPc^heunu>MqV3RT&GaqvxjtBrlwj9W0}`;-ZScwAi(I%lF&d zj;wle{{I(2ce&EbXSdfq3Xb2CE0}6+HGP9*fWz78H?;rm+`r?~=C}W{&sV+euDGKX zvudlyq@u)K`)hveyZnCt7uo&ar#!EJ-)?@hag!e7&wX>2%ndf~2oH$UI-}+nIPFRI zdZzI7w5ZR~-z%@=`^#6H*km8^$bJ9YwRi1=4}8mB_wUY8@&7Mot=|56NBnnYhjSS# zWAa)(Ex4j?o)vm>^6;4zb{8LiXTG*;b-Qep#nr`iEw}%ykQQ7&^_g_av@c59VV0 z(JZqS*LCb3YV1*5e5fZ|Os%O|`(RGl>IZ%rnj14@w`qNxwn*=7w@9DInts6(l6rzQ zXSBo?o^+VBY^k3{#QTt>TNY0%9+vJ<6#e1$W!mzn)xm$~9+$2C@bme;-#2#4C+1gY z_}<;My8713{C%H<=fC>IRS}nH83ve{uQWESJwm$9=zaGpxMp=rad-Prn)b zPiCy%+suFCTch{+r|Iecen;ICb^LmJ_Om;GpR81TzF?EaIh)@;sjt6Zw+hzQIDc;Y zyYm0SavzJg8;Khkl!kwgjd{5AKl?hJ_`f&L$NZdLzpwPU-@G~EPOEn1T$(g*Vb;o= z-J(UOgl67Nx;LTg=VI=Q@8atZm+lrT|NQJP>picx)f1)jc1^sjcwh2FU8yPW9sQZd zpI!KJ<;=o%xl`VET0BcFABJnKIgrKiRKY_rM^b#9lehD;1=*oetP@?QMn;|DaxL-p z(@0vAqkM3EWtY6ox6JpACsL<3oL;VU;n2@nF%pwj2exosIQMhLWVe}KrP*CiT}x|A zm<&3&b}q0nk7X^}`(%nT+sRE=TJL#W^6ftpYwrB)L*nAH>#oxd{1SGEEN8UZC*+*- zUg)*d-p{KtcPLE0v1!??^qf9+9nbI*CuVNmsZIyeFI@BrHah(5)TY@xzJD-0G%-{t zW8=5^uk`<&VSZovvNHeHw)0|j531Xkd+VMrs73w&OC_Pk;4vq@;HJ@9y5(W$G~@9juS z-S$aRX5qE)*rlH$CxwJPE1tIhgl^kg>%OW>!DZ*p9iIPg?b$EU?Cx$u6!`Tbcn>8h5oXSwhafC&sg+0 z!^5-a;g4fVZ+X02FRt*OG5^x6XVJlH=i2|C@L0d@d1Q3D?R|Bn|2sX+e%uY;_otO3 zzV2xJnyo)A1;w^xx=iF}N~u54^oO~=O!d6Q-e3Lk7Ps%^-VgeEdKSx_<*;(*Af-D4JJ9>D46Q(nSRe|zR1JASZh_0 zr>ky$TGG$4_Zs8x_vdrttY6F9qy)6KY+N?$;-f8Xy~hq5vPi$)UdQ+>W^*#{`Mk^! zajT-qUroMOYk%4%;-@4j*A`Y}XL|Qjw?dhl|2ofKbCv`LIu{71csdjwn)#slYuB&I zii=|`EICrQKCJ88{qZGJp!7)_p9MwvGY+WVKe_YHJ^80Dn--?r+~#m>LXP0(E1hO%7us)Gd$CI)_T=q<=I42(?(=GVoqr`U zOJ?%<{wxO7MBf!3+MCaOG&$!}|MMZg&AUz9_jVafUt+QIS#181iW58RZpYjFO+80K+4Fpjonxww-rxJMr~HF-sZT%5|MO$_ z^q4<0%VQ1xPo73)@xpv9sf!>%WSKax$CXayr@kQwo!H0_UP`JHRVWG_>}70 z>1tb@72PM^-2YGEnX;aqxeu?!=8$j--?UQPh=N(bc@As zLT+co+K9dRCOrP<9!+`HX4xB7BIsC zS|YvHueq^alq+~y=TlDZ8jeYi1ZH#Q&k{&c6zDqk{iIrp;DhH!mjAjt^W3Auas}(X z@72EhGiUu#qkScBFC1Z8Y3lafeBM8yy4p9%;dPVZJ3k(sxs~^(@1dF>b`K7nwzsjj z|G((@+&g){%UcVIHym!aDQ5WJXOS^q`v&`;gU0n0m-W6emYLt0_%U$OR8jp+KMYpR zxt;zz?D?}OcA1L*|NqX&-TUsJ_inyBdy8LM-~V^{``+#4f4^Sdw$`hTElO56x^AhH z!&VW$KBcT`rYqX^vF8;Cx+6+>5)*X=D=_JweX}igi#oqbGuDq)`7&-cs z4_uhe#&qL;)ARVrW(C>Ff7G9yIew=tv!D6tCaI3=K1<(=B>lSQaB}&5$?5<*(Ibq; zSwUWr&7V{kER5W+@4>+^v%2!8?Xf5Qo=u2#p5AudIqdwJuXY=SOam6*ty*bc@bc=h zQ*U}N+5NBfzB^&rs-TZ;B6pLmjvdh0uQ`WpvthT{6W=qNxDCEB^=)^`6KPNM-v3xa z=JTO?WAEo?5=n0li|4912q`^dOYszH;57cu^u>^FWlS=~NY`Mv#o z_4n%EZzJoQG7`Q{54@}%JMTTaO!0|BzxAt+E3)TpFTZnzeSJu2n9O=rmIa&^8%|BC zJpFC4-2WffzSV9osV=|2_4ls*e{a`YK3;qIdaO0S(PK5!_w^j=lh=Hgb+1_%`6kJ8 z*^dT$wFhlQ+JAInulZ}HncjKo_x{dA_j`YDB>UgkmC7z7{LTA8_(3msjwcI@zwMg8 zE%U@(El%zu1;$0aezF(DuP81KT2XR@t1siLP|_yB1|_BKDlVUozUjMLy=m^ouYGa# zsfC;c1s$2*KR1T&){D`9$bY=iW)3Td4`+{{bePPujHAA50uHU~mT5gTJvm{D^tRAG z(Zf5-d6&Q0ct-c>eGB%kMSa4v4g51+bFHst+;S{lJYA^KF*5dezUX?Ka)IdF%N#!{@)t7ESm!;Y{PA@|~ZrzgsU?dZSNU&-V2N<}~ZS zs{7;xtR+;mXYJ;)(|ROe-@j?{bG!8CQT%^rw%_?Yqxyc;Vwa&C1G%X|Y|&Ne>qotqCp4xv*R)XF>Xxw;$%l)h(YM|7KCfn#AmLEjxu2 zX9x?Y{+3yuvTnKN!iAEPRlgtdGxVwJ$ac+%zChEUE5{|7TBOuVOa>Bo=R^Dgsh z1TTs@bw5zz7-t`YvZfQ?ikm98_RXI(%kivjvDNkoQhq9HtAEG}PT#Vd`;<}L8y*p?(M1-Jk&Nz z$CFd|y3Vy#(_<`5(-!c4ZasEuzU%kq_x0bu$5tG(Fv8ZJNNCb>xta&_y73Q{Qb7rZ-&!fjrblUH-E1!TPF7N;_BM()gRv5rQQB?>X7*V zzw7UR*mXDl=Ow=TmNyq#-kz9bIQtCmT2*iVl%qOgqDu0I8Vy^f+Ul=k*1Gcc%7WXL z3HO`*EZ*H?mnoP~dp)q4@BcERB-6VFCT|is<&vb8+-|ONSg|4|T!>F}tI{7|>$Ww* zOfwB%ZH|e*HH*P@cig_zg_>ORmkP~p4iuRD;i>=45ZZ;T(-#%vS)u*=BT`m^W4yStCy{gy6Y@S*O{sok~yH&X6O z9*yi<#~zTs>h|xi@qd1@zuotDw*2pI{{64#YHz&8AcbfTK zG5`O}$&Bhx`xB)OnCw?B`xSlfYa{=E-}%$qitc5b@7ZkWS+U?p9Cy>OtYGRi9k=JdP z*yk=V;%&L6@kfB;(4UjPCnc=&X4%K_=+gYstL?06f&7aPzmk5`lfy3UbaPFCWu;Se zM^hm8i3O%dd04 zW@?J9qmYu%X~8Emc5yK&PW$*~^F&R%`+I6HG|Ts}%sugMQ~1 zN2PPJ(P{UJFYdH2J+yF-{)uZn|4Qf0*n7y|>nQK_@O}Tz@Yg(iGYqCp#H z$;!mvrzff2+E8;+Qk64E^P0zE?*}{Tf0ym+PP3kLO!Tixz~LVX>C0~Uc!~ZgsWqzw-aSGvNAOF7C%aVBTJOul(W6@B6M#{H3-}fJwc&Y1UijxUye2>wjJB|NN9en#nOq;Y9lVhl;zt z`EcyFxD&tU``z!=|5Km8-Jjgp?)o5FY_-#UJ%`1I*6;m1cfI93x#aCalk*iB7G6!& zirv^$ydmV(sVx(V=WIzik-hs#%QcBK&1UuA?|0At`K%#@HL$C5*}bBxN3+W3`l9yF=U6byu{h~3qm+g$x?n?RGju-r&7@NkuKApxX9`jpT`g zf{gYZ6FAe7!!*M#J#L+vy;1DeO+6W>Ct(eXUv1yRHuVdGs!8%n#Z_yCkLO!{+#&7B z>5#F8JyLOtKtr;F!_wbrYEDK!95*LC+%j*+7a2p<>R|5r-zW9gY<(`#_x5$vo+s@K zum0zWHC@nm+#q*xeUzEq^eRk3TPBp)$$DaKb(%)gm zKI!9Z#%;}yd>8#Q3bYLEUfam3_HTEXZ<<1bgh%9w z;xtu3367;}8+()t@3r4aIP*nAoAt)ClSNDyUM+rN@}TX$qX|cEs^`QT&9*`dRJFWj z&a^vzXvvwRtyT(g%~DgR@a^>LS<~pbPJ?69qJRBex&^=f9zE*1NrB^$0^8d|+nOHe zt1(aCq!F^YU%x_?Cy9UJ+@-b zmyf4p1UOo1J$Kx-t@v-*_Hws;p}@P{pT$~_zA-*-8~mr_On2PBY5j3O`+Ksg>dqBk z_MI3ok<(^&?s~fiI}ZPQGU@a8yJp81PEHWrylfk5>AUx7Mwf%cXQgc7FT1}~gu5(R!;SCeOZg{FERa0R&%$xBYpK$6*XlK4QJJEVr9~2J)dIO5 ztj&_1c}!~ZL&f^63Da1vEofr6xw`e(!ex01Yg~Rv?PNW(Gi+bhV_%bJZoLzu#k|hB zp;3>TU#3R%#ng>q+dB^gweDJfJ|Vf`(0hfL8)>Ub z3q#m6uRVJBMB$%DzuVlK3*{Duhza*`#0bTn@^QF+TH4~|ihj<6A`7;Dxf9@`utw)< zPe!U{+xmIVMlJ1}M^elMR1P!W*nVf@mm`zs|Nbj2_A^ktYGHls>7_XjUE41&+`s?c z{4M%yr&Sl;SupA6<3E2tG?&#p*i~REr^^HGn3D;7%2zgdtV)}+Vy4gYiwlKVHe6tgTla3Qg=^RemSPbP zj+RrqShNDA7q>k1&)lM>xm)mc)RL5cUK?^7{+wp~<|@hG5E6d&d%bGT%g__vuF4G` zUM59eD%;}}5Y}lnPmC#wD^2x!y})6P!-ozVO)hS^)*%_WG-BR$bn!OarS%a5+#S@`_1 zU)4cV^Lx)0+bb`v?l3NUGg-9lF#ICp}hyKkFXxn2b5wPC;c6`-^!uI&GiWV zmtMy|HGQ7BZbpF2p%+<(Dt%TSPx=(S7GGGZ;>pvw(n-)-G2QECX{Pk7KM_j2!AC2m zcC|I|E1NB_oNI7*(M88K**Pr^Mk<$YhRwR$&i za~F5gX1QzEUrMHn*gx<8ms8}KaaA>3`$?fmiz|1(n|`TbdV0F)tjW@ome!mUXWH2$ zdo?}lo$8ivUrevx|8r#WyxOm4z3=kCis7%*VX+2Y!w|r~S55?d6 zzHj=>Z=bO34*QAdqiQ*e%d5BA|J@_L|IvE;pGT)|d&_JgXvFwTL2<29+30i0J#!LrVmi{h#gKiy-K3}I4$FLB9n8Ew zQ}S29f;r#9F~K-s^dFZ`z^*66f8=aFfS+LbHI^Or4jVxja+Ml{;Qa>?~}z%>FXhFY0PkbN*T#-OG{} zu4eE#ayieADi3rpWb*qyG)t-ygSYkgsmc{(DAHsm<|$_n|#6^H%Qv8mV9P_Wu9R z&uir$gu2A@Z((^QU-SQf+}FsO4|w1vVr)lui1AeHcsTv!HojZh*^#sK z_MX+6$uC&n{AbqOMisY@F75vg>nUcLCLY(`)}n8^_?}mqr+34QhILn_zWMn&>g$d3 zBERkH--YiI3g%(|DP;UYfaAsqDV30X=6U>FYvxZnKS}#9r&UMd%&!+`t9W%E{u%h~ z;TqrK5~ka0;@tUzNTz9j7-sI_Sm-3bHE-5$UXDap zw`8C8f*Rp8$Hen9f2_LvJAd}`#gcb9GCB{mEb!l_&51ar)z23yENk(OYI@{y^pH*>^O|ElTZ<1g9gcs%qFD2AMVAPBk!Qm+ zhP`>N-U}x3Px+X;X+dWnw_2v$FR#ndMVx(Ux}5E*g`8G80h`quJ2EfLo%wRxf2N*= zrMcDN!I^%1+q9$B{&TWeCD?c7VBmHxKaTE*^FLQDa9F4$%oyZ-h&@0t#muW=rs1lO zDT@`Pr(V}u9Lb$O%lKPE_G!M~n>aV*gxq9}cn;UuE zw!L{%ntttF#fiQBJATNf>zygseqf*Lny+;`6m<`u-{z%M#C%6UjiXWih=!_GWTZm- zhOB+3E)~pC^paOmc76PNnSfHs$soO32hVtfu6(E<#-y6t6%(evL-F@~#T~k*&$>=n z=rPMD*nz>5Q#)^xmkooVYywS`GE7r`)oWyl#eaan; zNZ*FEZJH7BZSkub0zA|jH$Hmvu%l7@8n?3K(mFM?& ztiJp9!><3oHkxo`R^~kyNK9Gq@!_WF-EO;T-dt?o^L$Y;-<@;b%X8%go`2nx@y}rM zhwJY)@K^lO)c<>C`u^=%_l2L8v!B`)9;O^Gx1n6PG%B0_@$>9^AKP+`Pp_R;Ywr*$ zXvesYfnDj50Eg2#7o(09^B?5&O(-o{{Oqn_mbq!^q#Ii6i)OTS+-2rCnEyqkOH$1F zjQ^#Z@ln;>0-`oY3-*Tczs_gdK3KD)Fgi`(*~lTuCB-yTY6^q<@vO#|Rh$6|jH$=|9Al6_#F=FB zW|w7R_z{PX*{7-x$M6;{5Wehh|-V{3Sgw({I>5L#xQ6&t#(UDW(k25*_qrT3Mu z6Q)aTUv@J#R=9DR`0A|7Pq@4yy^J=o$S>kiJi^J>1wP? zW{}ktCBHL8XSKuR_7`c@x;@oct8}8v|334hU0KXJ{v1o1K2>Wiw2RSAOqIx*vG~%# z>0%o@Cg@nsn_71D-14F~`exCWw74})jyA6RrE)T2m5y%YF}~^U)O}Re_PUbdM|VJTFc8D zZ11nTsls@9@fvRR1V`CU9TeYoEy1B8H~_ELJbpExqUI zU;nVa=JBnq=bHWtE%j6>s9z8&ru@w9!+F~;`=-zPU-gY~?zyPllkbVQa2b7aeU&O> zm-W#*sNrNliuL{!FP($Gwym6Cx=BQD^Q5niqVlD|fdYP0>I0;gTJ15?+?CR|>Gq0H zsZ|#be=3+Dc}(B((~(*GxKCHkFp<#ZWD0xs=2o>gU%|>1P9?`RHn|8)ceFUDs9Arc zKjz@7(=5hsSJYe<;1Ezy2rg>ki+F!mZCQhZ=aosx49u0WO0$iQYpB)>Oj(_Fy?FNA z`0Ga`80BZM%`UBccs!%;l-AXSQ&rAA^~@GtSzR|P!JX0X(DbPjj);|*t!jR@YX8+1 z=WHjYf^uo$TSo+zD@|cp{g1Ex<+cfHn`9;{KFm-&*3^0+R6R`3gi(@dP6J2Z452=Y zE6u_!1s+ltpSjnHulv=XKkv($>2G5;+P%3eQOsQW)b}D|!P%Boi_@dGzTC(9Ugm4O zbln3^_f7maHeS77p|vzdY^K@yo$?oE?abZycgga7KVIM8CAFt9RrAwNo4fq2YxNVR z#%ugu+Ag=gwn0{{azRmuiGGo1_uQn-FC9fStY!#ol~R`6$(eM--M27Smt~FJ=W`BI zInAQGj>sE@7#mKBH$1RxnQKhHw;^+tO|^r`94>3Njt~x znMc(6r!`k+UEd>pfqB!dD^4u#TN1p~a<7%u?NnA!kn%aQfYWL6v~pQvmiP?8!#ulG z_B2fG>W)17!F^hhcjW|DQ=S=KQC{L(Vz`c9dF=J4L3g5Rd=b|PTcx#U7+RdGSbq}R!N zif(^-!=!0`?w4nmbD6-@Ud|O8^ll2NWOQ)Mm{w}BZc!TZ%Xg7B0wFDzx)umDc?5jD zSSrBiysu%RtKXmS@bH~|X1AXcc|4>1*d+E$lke>7gjl z?XX;>sZ3|}mQ6)o%uhQrPqu&aoA9f3)0v2i&s^KXQm+0`-0-|*z4$j7HRYZHle0@B zvyA7L*%+A2XTEacPEVs}=`~GmQ-=xR0!!Nsa&^O|IBl`jeA0MyLC6#l-7OciSXJC~ zW-6VoihFX6L-^XIHKw<7^M9V%|L^(bdDXY_;`Sx1PxbLOi{4SWqJWK2Hie;L*Iui` z%74CFcE!uxOFy{nzQw|)xpQVOPF-kvH~Z|LAARrM&o6mpzOR-y^RveH?OS3}rv-fY zsyy$b(JObmKXvb|-uGAv9bKD!SX!9v`k}*3QvGc|XFtAjAw=xat*LhfDoQ!IwjK+L zzWeM}1IO#uIOEJib+yvD3zK!5r*hqFp0umr@PcRU)svFkyv;P0Y<=mTnT=vx%!Y-PSJe{#xrID!`B3f1!+-c>gZAD_O|ml+KE<$XvDkLy z)LD_Jw-FW`6GV1Ad8i#}tdf?pv`);4HPNU}`_MO;I*(iL&(u8o9AEkCbKI`t+{Wik zLF-ok*l;G|_4lsAOS|${m7Qkyn)myLqVk+d+b@jAW52E2Ty~~>d9)2ns$=BV8G`@R zx9i(IJd$4f)!O{iUY49IEIjv{9dh(Czsi05Fu&@$<@(5s^&9v--t(?qy>v_Hn)6Oe zyyd-S=}awTId(7Qbl%xtDr}1?d&K7jwKnCuep*nuXiAH2CC5+s<=;L`Rjm^=k9p)Idq8p?_pd9V@wLZ3`$xwm z&vdhwy5X=xKX2Wu`K&f6j}{+&Z?N|4wrO&|f{(|R9h8iIzVy{bfB7l4*A9K#x8UEG z-tBAc{v8Sa_j>pBB40Mg##D~;KBuymvwyRF82?xPyZ!q&*U$gpJt642Zo(5sO*Y=m zlWus2Bm}wrz1kpbTxPcQjZ$P)^al4yQ(sZO@T+RdX+sD_?xeM*c*{%+Yyw?0Aj!k~rbA8R(viVc%b_A~b)hs#dN}too%oyvI1NW2;&3x0eb;%@8qjR1U6<3!` zRbiZ2v_hBlgwn~26KpkNS!Q^#3Z6WmbHvpwf09!i%kPHze`ogFzh>3HeKq#Mcjlbf z9P^g5yxUW+pX+>3Atw}7Td5zaD^M)++oBBe|E!(U6nf_S zW*xSAyRInHWwnJ<=4_4s+uFY8^O?)fZg<~epV7VV zUjL0y-Ay{{w>)V`?+`Yct&qjhaNR;RtwPl)GWm&jxc8jE5(id8uT5Wq4{ZwlARYcC zri;<;`U$f4ZR&2F{j|27sSfr34ImpnV-ldvYN{Omi4r3qU@V#+@on^!Yy zI$hIvr~a5vI_7<0!|{h%9%e#mhnQI$TPMwRtDMoHxmsqu8>jXCE*;m0&fNl2B+t!A zE(}VuH0zr#&p%tO;iJ=IUY~i^b=MYIJz@J;;kmuz`8V@_R=pp2g}3f^d$=R&l>yPwrStV* zSgFOspEo_*uL)gE;^(-L9yhOB!}g{CZ;+<`2dU*gPRhYWSsba;S{A#Q9-Z~1#Z!Ct zcH2imst20o=LG4zI5D+GWi!Kr%*-5_S9hu<`Fn24GUU5neD+g|$9@8fw7^2mG7UfV ziv~-3=4c5BJY3-VAx40QC54k)SSqbkAfVU9&AZKmZF!*G4AYHYkLkT~Z#7cN=uK;^ zoGzHjBoXSn_{Z$e`e|zeH!S`!WA)V{i-hpZ4cV^OB$)gk@f%+3{bc$fYEvL<8qZTL zK~JVFKf5xud$-0W{cz0KVJ=v0b*Ro$t;+jKkBIl~gPf8b3ns2n4gOrr5uJN#zG3)Kzz#Jn)Q}moe{fVy@~@wT8?G*Xv%U z-zz+JI{o*aYfax-Z~kq&bk^ndbcUkb+023W)CyT<6-q5QzL8<$qNmd|4{;kFdc|QN zlKn4-W684D-4{%}b~!F~W=py;$7cHsb=|+~LnJ@VS{9@m$ur^Bx7@!{i#N;u|4{o* z#lYCy`=&#Hc*6wU#8v%MWIjG!`{QP@)x^|Q-JWZf9Nl?3DeC!L@uG>7Tce7E%PzAh zoXuJ|ePWxw!?~MB)VF;xFIdWW$x9~MLZPbY%R;RU?X&JqNSv~H;{@+>auJd4SKEqS zbARjdy`>a=QR39n&fD88k_6t~(vy(XuB)4Kv#9ujYCw+asom`d1O=H?a(!gq_)Y4R zc(XuJ>E>(S^!&DSM=>a%-OytYt{Lh3E}m5PO3^~=WSIkFJkZ3Z|rbZwGb9EJ-Wj-**QsX zhiT_mC*JmylPgu3eO&vNbOhvFIi&5R8O**>S3$ioG}}{DTKwX9PVdE>zP&Bl9_?vT z&nL{cTHqfbx^GK(_M+g5{S5Q}obuw7*zzmCBD=N#>?M*Vo3*@bGfjsp9PR%xf)| zS%1bO46%b7js zY37xdhH9;}vkA?KA(F=qA9)hlm3ydarCl4_&1u#5retrN^o?V}`e2VP=2^L{MfDtN zGUAyME{n9Bj!m2PZ_UJ-$w`anH_GoUU=mRK-Ej5apW}A_R*LU?Q+m4g-qV?Sp#tk( zXiM$)6xjA@mbtk6&bsnd+l{tvdwp^Lw+{3D-uR%H!*=y{ z9bs{uwl`eeJ~`Nn@3N^Y%aMy^Do?IQ8O#5jUH|K_ecj)r?AKE3t2O4`=a{K@Nc`o2 zpK})8NQqeWU9A4OdHqA)<^Lc0{Qp*#zwuNN$5ba~#`m4S|CyTq`R93l-@j?1f9oP6 zE(%?`-hXg&u$>v_{=d@u|7~fu(QN;xo-BGKqu&uly!?VeJeiwI$_RE%z zg{tS3Ef@Zh*yyNnTazul;e&p6N3xLfUN&Jx`DZK2rytGc{@^On)b4dDk8RD(wgb+} zv#vO|)}2an@H~*k;yI&XrRc<%=*Rnf5MexRZb6gNlbMR*uG}zq;;=-=I}k4)ppy*&0A70 ziOVF5?STzPVBo#lHOo{Rs>?QhT5Nsn?b7JK3{l(9%T87~^hMBR!Rcf3b42BLaW35C z&U?Z+=k|BbB8BM+CLAd$(>|;Jk}*|d=-8LUs2CY~&gI5y?p~&r{hgcEGKj3_fBXPm3)*nRorJw5=+IL3HwXmy6$B+j8lF1Jl@@r``n{Xm$J%r zWjkM~%nCepd&PxQRw=Kup3iv0Rm3l-Hc9C7lLL|LGU?Z1g*O{&znNzBOgH>eZF7Ip zdgJd4`)mI6$N#-{^qbi}d4*+1|9sy!{lH>*sfDQ`OeWFw9kb6pZfCv2T=6Km?(fy* zbB%8AYJT42_1#N-;qJfZw*UKmOMUL2H?zyPg}rSnI6T!TJXASv%iZ|ePr`NIBh~+{ zU-^eS^~Z_@taV-N3wc!9FSVb!eJ6cg3{R6PQY8cyVb>I(NmDvv)~^@v4Q&PoMTX&N;I52Z#Bo^u4{c*K9PW28T{xbMl4Z z45kg96*UY=JYAclv@>kp{9kz|u=tHey~eFwsVv6-yb>>VWxn1L=vLO0)5)JZ_Xx9z zPj0Lr-*l&-Bo$WyZ&p6VC$1B;)i$blGrB$Fa1;N|ueEROxn(!m_q;#<@0;j)`|`E6 z@3q^u6bQfNHo1PFaTb4Ni9$5rhou{K{yV2`|Lx-Xij&2+c`lzbzh2C7`J3&-Yj>{i z|9V*6_U)D1JJf8tfu5u z;O!>19kvN8brMCC+IPgwH2j!;<-7*(>obp;1(E}fJ@0e8*KM4>Sk(8NVEY-3-4~ZQ z6%{G1;fM+7dGOIT?y3;8ZRCYn%xjiD^;3!tn$nZT`eRki(TP)f9-R>KP-zuAk?N_@ zlL0#m;8H|XJ+K(Pu*W!F8E!h6m$EWDpAmEG}&4qZIrFkQ3Qm3_GnTkIqD%_;^W zCl{pdy*lgtw(ar%4(_k|I{V(mxls?;Ws|2q(c0*w*~wtc^x9!3|J;{$zZMp(C z^XKUKd9OZ4nR9Q7xaI17-}}d->-&EnS-x+=ef`bpUVHPUlioe|yS?nxreE1_@144~ z^WW`zU%cj7TgyVPw1P zLC4AsZ5|2F=UO@~P~>cx;Sf~QzqnA$Mx9kHZ{s_^qz4X)i%T?h`dB8FC`!&b*~u_{ zr-xtPhCt8N3!)g!xD0pNw23TXvR$}tRdP?k8nw36O=n*fN2JX#K9zL#xsfKb)!Jq@ z#iHcZ-s}qkm&rDm*Gh6#uGHuZ7vQ?^%I3(54Hx+4J1bc99$6t|%GE4cb1`hr%Acq0 zK1^R<|N5u)+}d3->_4YB++evOFDsM&xq8loulc=E`3Z@6*~Rbe*_iZJSL~|G{wk^d z?_T%3@=qc4>AUBKEim1!bt|j>S9ko+Z^84*UinYksed+H_{@a=&sQJ1I$3dL!?zsEYrPQgMtA@A9eb+t zPBSS;E$Doy;AECqet?5tfaSYltkwUh3{p)bu@U%xu7DcmqFQAlI&9yn&QOQ z1}5+XKlrggn#Zee;{DHSl03IQPbil<^g}A&#M)-Ec~@`Jy6lZd+ONegFg$nhnkCbs zOs1vZc#q%OSkJlOnu)4f>65j|KlYkTKJU1kqHCs}-HGuO~A$WZsm*L+3eEbg%pMt?0g2Q~&Yjd8?08 z(rsocMn`cZ*gBQvPx~z}|No`!^FQ@Wzq8S2{dalY1*fd9EPwC1qNOA&Ki=%^mTAj( zmCyOY?w|4XO-H1nbLjlc)Tk@V&-+b1;HJqF$n~gKt8Y@j)k@9->r;Epvv%HE@WIJ% zzpMY`n8?_DfBSB)+xM&bdVGB?@B9=7CxJDU{G12*=Xr-t6!1Cl=9c*%&S#s2qqpUJ z6pDzwxN2di?;-{fqe#`}}ridHlbFH*d}qxBb7;Cjauw4|nxmS=UpZtASyncP{P*^~HYRV-cd>aualAw6Nw?ei?AO-Y^C7Zn>D6%`d3 z8F}s?|6kurB7ci!*!<5rck9|(9l@YYNe@=uyluL56F09?Mqy4?o2o>%W}U#1>c*Nc z*H785?d7p!{qT0a%^9ECX+KomO*RNggscjR^A0U?TJ`2}*sMnGyFCwscFAPUwRPKg zB)@HU@s9FeEC$QYJoes_>3YyCZlT*5x04_Dx$1rX_F*dX1jAd$bf($;d(yv`^Thjr zo9wmf`jt=od;Yz8k~C{U`L+*{9BZN#6Hc|CII3ZySR*XElv|1An7}j7iLp*M?G_l9 z|8spmd**!Wr;`4&UVZG~OV-maJjw+?mU&a@TDCykU(nyWO{%g#4%J z^4}i(|8qY76%%8|J`v`;z2D;$1l>>AHAy*dQ(7G+_E9x$YfQ|h6H;nCDIS+r zv(9&Xc>Yu6r#NO?<$sq>En=$?4((L=_cv#MCP zIA#gSe6KlR<)#+svZgTP=7RpoUBzyV;TBopFa8Idkgd4T&Z(X4Z1=wOOyKVx0~hNJ z3vFbZmS41=Wt4O;phoAh*Ny9`YoIz#o)^R>U;`5b+h}wnSpG_S$A?B;5;th zy?oyMwn%wCgL;hO_VKzi&)a3(^fhS7r$d=XMDMGFM#vw!v-E}dviAO8_ts2c zJ!*ED{a0$zv8qQ`Lw}dKPVq=GQSW%bzA)zKLZ@{W&-#1siCIi)TWNSGX6=OnBfX$Q z&J7MtbJxxMwzS95kp0H>FFb6FyuaqY%$(O%(91Tb<%PV@6NL@a#4PrF%8I&ln|tRo z!`tlE%o>br8J)ZvzGX3qpK&Zti+wQb#)nx&u`RybcYazky#7AB?ESgWkiFBl#$P(T ztvx+${~6{cHD}}8;upr7(^e;Ezh-&IzJXt1-L>~~vVIf`{=4g$y_F;S@>k2|h|3Hc zX9zXOdtMZpoF}yHoY}6o{6DNGa0ov<=}K|7g>O zgCdH>rq5QWyy!7YZJllW%%D$Y`Kw(~D}s!7HgKra$6OKYc@*n0@o2&RJt>R-bRFF- z`O)&Ep{_OK;tfk>UcEJl1XN98_O*NKeu)ZO@#|u!rGrgDMW) z)cI{7_{<|&`b>bW*0oTX_|222uu9%C;hohiD`nZO5dU?{wLiTVwy-6?3V)FKt4F3x z;?~w}+1iV~Oj&-a(fC@;r!@ga%HDa`AKUzDj|e$qkRCG4$30Kr!{?}Z2kXAAP2Zbc zwyXHlWI5xjch63*cGeN(Vd(UFZFhxphvNdRHD~@gN!Trq+I|1iEOCAPcYjVyo&RVy z`<$OQdKO7-*yZ(jNAI?`JNx5)`rrP3^V6^JIaYTMzu>aH_FW?L%k;BvZ*T7w@F-HL zH!+&pnO|gdy6^XqC8EcsS8qGERY;Qkc=9H8UFKDGCM`;7&z1D%dvTp+|8nhAl+~tw z<+)o;tEb9YOf`?w?VGb|=b5SMYHy?_>ZGzf)HR<-Q!+9#d!*0*& zbpGl3G1`8b>fH;gW(I6}b63??=S{=5vtK8i`(C{1&k^ghyw`qw50i-R>WxZdk_cv4 zeU|gBub$hEG-NgI??Ya-P;X%g{b0MDFIJ%`fZ}OAn{5jZK)#x->i2+d+8kDWkjb zX?zv8XUA>aQuOQo-^1y<-!|SCD1Rc7I9)${&wFS2z1MB~tUhw?H|8~S4vqWW{^X5L z`P5p!)EgR6oA`ICEv*V(>Fn(i*;^3uLCQE}ind|ci|B1Pju?AcT-ak9A!^{Svwqpb zy3(1Gf8XW#waZxK#HLVhv4Cmu#gm?F;4jEhn3S1vN@KG~fAq{nZ}W2Jedz3++Wl#@ zw#Tk58Cv_=KYHd`oxPCPsUzjkRq1_dLDC^zJDzLvT)oo&q+Wbtspom8=hBJX>a$Z4 z4sUt+Y)8WykHflE0aFc|gc4pdH~F3v{3V@eesG!JF2NZSH@%i&T)9GdYj@8{RqmxF zXSw`L7Tno!Y7g&a(S6$+z2-k#?y^JHMb*SmHMT!>qS(=<`Nu^k;gt51)wN@5o0%bjMGJ33DlXJ+a-&Wni-7T?~XuGx5J@)8D7^H;l=pGh3d zly(ZQHeO%#_om3tll{MQ{XVBx?20+}`mn6C9mB$_vAjpQa<1RHYnD`&^>vSN+|Qop z`~S$>eLY$?KVSB;i{R$O^^Tn>~r0>h5WnD8~%RmD+)1i|>Vg(R_9NRKBx~ zf5xWj4U>NBwt!9e z@Z$X!*p_;PKIZIWgl#ubb}i{9$+H#`XhI!Dajhm?KLpt)vUJroRt#eLb5o$X&*1pQFH$iK4&eoz?#0 zeLL3UQpyxQ*+y9Fu>BqGkSyeaI~+Svd^XEP6SB|IlET49giL*Ycj!PuUae<#gCRd#ODyz0K4#SgSVjG{B{&db36v&vZ z%%UyN%E`@~ZgRAzoDca8Uax=Prig6YiKf+$HxdYrliywF($G{C9i}&5@Un{Fh8p{X-#+h~ zKA)?&^1tdAul=*|rr?{}EUR6QmDaJP|J(Ha-_65vpDyqD>$^4OzQ8u&gmY?_^cZe# z(h)uDX}I<6&d1p+gChHbWUCy54!bq0IIc?55NF@CZPtpNjngcYvI-M6t=Kkmhpnlx zv8l1C?P2yM?QinG7_IKQv+LH~tygQeq(ZB`+{6xY~9^XR}%Fe9_BXCzem!a?QAA|62FrCuR(`zSn$@_UCO8Ogj_UE&0t| z+2T=3Yo3TAM?<95&yR(Mn|7oxU1Y4Y$}rXZL-x*vp+Z4|>KOuFE8?>MiLSTIF3Wqk z@&D)Rl@E>gcP2AQF1@{#S3u^J$Jq~m`il3PkQ!Tx6Z`OWh`PPxA4W$w2% zJ=fU`88wetOJB>?n)~aAy8Z6z%+fTo{>^475pz8z-B5e9N_w_nQ}2wJi8jCZe<*aG zJr?#Pk*`iqSN{vY9+sAtUa@70yw0N>t=+TU{A#k_8nn^tei7s30uC3=3rl8P`}Ou& z?yd{p#01vM%x>KCeTi&a{1?VGA^Dx*#>?NUwgeV&CanAVr}|Uf0vE|l)(_bmgjIs~ zFVp4Y<_=gIpdNrNC0yE9i$$FFXkmg2OhHa@}$Z|^<7QkPa&mN*uEq|7djdj&ytD zpszD|3yY4ZCH%fvZvEV zR$;1YyuNYa%#d|@!8e-~=Hvv1YaP@)ojh}eRF=e-hqqUCe4E@?_{YONoApQldrb4( z+@xhSiH5nx+L0X>>ns>IWfdrANvCu^c)nxVPp;B;Q_paf`90?rEZ33AR0vrSVq({( z#l^xpW%7)}M=s>(-CWFHcPR7i^>0mwEe>zRkHqB2wZTJ(&Tte84Iewm%~e=YmWcgafKIvi3~ zQpKA$tE}z*wVkD6I|Uyg^)GMW?^{^V4>!-7s_ZYNnDyG9kqd#*xGGMjuf zlshbC__;fpQyREe9SfW!UljTJ?4Flr)BiowuNR1)QS@>ekAt0qA@{P%z{h@PtsYP8 zjn!(Ld!dBi?#Y7pe;%kmbntA*S@d>ie*N#=b2L})PGazpzZSgm>}nIaYilAeF|LhT zmMYY9gb zDKdrmykk`P*ta)jLX4UaM^eZR+fCPe)hCC1{gd-+roX}A^HPjW7J=#o5);}&eJ-`F zQOP%5^*rLsmE~tQ?PL1j=@9hbfxwT2p;7$H1aEwKXfZ=ka?aMNq1tWN^?XD%@9_Qf z&XZDCTz?~*r6VNqVMI^<IePmt@lgHe$4=1B$ zBlF>7Wu<=tCzeh>q&|I#?%A4HH=SiRs@fbGoZ4Yw913jlhlB*wL#A96QI{`S>m2^7 zQQjrO@xZ?~8IY zr_~(Y_;bIV)?56>yHOmSj)93+vYa;Hi)_*T{w`J+=T7q&7BsdcYDS;(th z()ROZ=OF3j;^vEw!PVk~ot>ySz#)BJ=O-re^& zR1XKGTwgbL&ezKd6C7C=hr}qkiKb1+|L#3w%9=?zj#&riv2L=Rck{~xw%F}SHc?jk zeXmN&-bEd;Qrhv#yMCFmbPa zIST})?-CK6&ew5I;7!Huk6UKEQIg5?DAd2Ts?z8uOF~!CYPLYNcGzKcE++M$$`6-vo?yZvgnX+!d z+L!5k6;tfz$+@w5&T3y3(ju$$@kiwKW53=-P1ihL7XBya*{N5D4uxrPiH6N(skY;t ze>pTuYgerE?kS=3Y?G!>dX|#cF0^4ud?ZI~(!Kx95?6g~6E4muOFvh$K>34P#Kj|t zPIEk*SdO1#sQJQQoYKg-$wK7Lf)%%zHnd3jSD(F6aD0aP;)+*VQ>z~fn$7OMy)^5p zo%g%ACFW*~IoAr_$ayvF4KQ0bAwJ=7`L2rr5_g@uO+N^&Rn)$3=Gl|_%GGenY@BzE2lT0A3b$29FmBXPeIn&y)nJ=C@+c&!y!Em-+> z|L+C0>Gz6H?)KYpTyR_BciAmoS~3f+1a@jxyZMQFY`XjCEZ?3(ljY~nd|2M_|Igz3 z{nblPujtrW;2Fhs;?%`F)=ya+i`Ll}uVT8@(m2DjPx5+J>W#-L&+eQ&*C%^>d+u#F z$%j*%r|Qg@5nML?u%GLtV;nzAmYZx%*X}+q8fLGPpKI6p=upaiW{SGNcBIR`{g$KyTgu6VyoIil zo##$4eKYw9L&D7I8CTysxbdbaPz*(Q_zZQouK#uZtMnwm6tX35uSa^I_3 z^6K2|YX_zl?CsioFH|y9O(fOhqsPldXWJfSJe+8Glj~o&tHcDiL%UUdtR$4HXRg-i z?KFw${k_rKVUnTaS@Bu5wvhrE4>y-6awNH}v1?$EX<}(w_i-xEvLi}z&!*40WTN#Y z#)_B8CvMM`$&=@6>)E}Yk<7Ps>-7DdtTSKCS9>ORsF7df zJJ0&_o$~EJ7S1?0O+2dXe(QA3@4MOMDj4ponK~rMS|+H)%oGM60DLEo6S0 z>h$S#`kp8pD(WtrHD&Z4Y{` z-q5NmZ}nke*WM)(P5w^oztXyEo3y6&Z@cSpp(U~R7@Oy1pJ#tUw-l9z^ejm~I>AIG zqhZptIVa`<{*Smi4cDnpWw!^1QRK$uH|!l1&bt&kn8l5POHk z@GeevKA^-ZyG%E8ZE0_q(cRlePoA&V+xcML@uE+M`{eHD-kI37k5NIH`PBi*1xf!HaGUOb-rH(yp)+Nh86W*_ESaaL9=`h$HIKvw{M?y#9Zq@=iVeIz{MT+{U0Shf>V0hhGgUc5X~&U42uuY1f=b z2UIizcFFj>{u$J^js4}>mhWd8SHGK+CEwu1pro%+zW5QhS#?}~0S9-Z#4fQJ{7w_s zOycvLvGDY#^_Qb>=Fk7eu2*%t@VMMV?~2b|3)L6?cJ^&lj`a_^H_y!`{gO-7>OZHv ztE-;B`f~Do<9*j;sDY+@<<~p-QJX__CtmV?|-OA$q@j%~o)}V`QHplBeU*j|1^B^U1^T*xG zOw_ez&N%Rpf7^*q!K&8YS28l@e``(u|4(-Irgd}8v!5^KVx*KFSZ zJfch3o1r=3n4*4$xGG1Dqb=}ex!>89w!4IKqJB2LQp6WQm;i%B0@KWo?S z#)^Z^G_u47r`^yriM&9z?Ut6q7rWK=CEb;`e{wBThC z)AI@L&#uHM@ud~0^e-w=RftG!^*X7O>F8O}@;Pi*(tq`vjg|@yJPY^VdZl~rOP+l~ z;!l4)o9{m!zk7Lp&5UWCTYv1`pSt&`9N#AvOHRd%No!_o$Z}bI_Owdat?2ydo4>xK z&#$@~8eVyJsb$coBR$!Ui;wPQuWNrWz3$=j9sVo#drnJe+z`%j=fk1MkT}`msW&?( zZR9E!G*17%?c{RJGAT3i7pFO-s1^x7u{st)IEb;d(uhQ?b@#&N$_d?X!;Ox zeBXuJ50^8oNFO301+_v&d(FtKsU<7* z|4b?tzr020@6|VbkFFnC_2kN2`^eB^vsQGj->x}byCbpc%GF6Xc_lBgPUFfA`CZs6 z=oEZd)K~8lhj^5kvvs>1bM9OozK!40y{G;2Fie@E{d3aF?sH!E`RgxvG&&?tU_Q0! zYWchNZBB327rxt{yzl=#?(-D~_V&O0tgGzz#hi%=+_KXSP&hhztGHaw*5{& zo@ran+#`4j>y|PFjfJJzi_B=R>XXlsCK)RlRsLj;XP+7HwFwnBVAA6KbO#H2W zq~E*&-oc-5n|H?~`ckr+I=HAyCA?~N^@+pvog~`#PT4=WYJH;7ITfL8M zwwZEf{mS2yPd^AZ=&sbfaIW<9;TaD*lLJk!9<-G)l|IwzT4Kt6VBu2En~p28GY-2==WB;LL9pHcDX(Qge=InZ4m?pMMx<%%{dM#UIA@zw=(l z6rPOa-}QgvoIfAJznO<{d@S8|Y1;W>g-quIOHRCJ`o#47r}eaS|GIbD|DJx1Px^9Q z>Vmn()e2poRoDMp8UKA3lmBzZVZMK7-Tx^uH?3xv-Db8k>*X2E+8Z`+Pv0oLni|e$ zyrXo+#7_e5Vq0vvk67+Im89OZO(b}lzf7j5bZFLUPW~v>2;+j%Yd;=65c(;&Sxl{a z+w$u*k2;G4pY6@xWzuDMc6HX(jL>zH^0ZcN6RmJc8zvmvvb^F!qd>&qo=z~`eSF0k4=)Z z%GTbEoO`e8c+l^c=W8E^{{JPqPr>WGwr-PJ`_qQho8JS&x0k%Xaq;%gKg(?|&o}gE zZsWJ96TV%>D5fUK++q{B=6UocjUO|6{CB(MZQqoWbWiKVrK?-+o=pfy-mw1PtSxIh zfA(BuUaID~#&GV8^{h8e>;Kht;1n~hTaa5i^|u~(@n@O$8#)7&6K_8Jv5hOy>j1l= z@a?DG=8f#KQZtiWed0o`gj-TW56)j#H`Tj;L;X*sRU*qCHL5VJcHYidRF}osaWF6@ zTl&LF>D+RS=^s=hKN}hx7k(puXPRg0+CAdyPnq&0sh+i6H*NNx!aPs@uBWC={)C_-QX3*>~-|E&D3^=dY8lsE?NGZ>~vmfvk5&DO|}1-yQL{`Z~5^!&haGJl`B@6n~r@9Y0u{3fuv_WG3X z=Ocb|NAqYmrbXRsza$X#XNf`f|GC^A+wK9pANQ zG*5RiY*G@JO$eBv%%>%F(PeUiPmlU>4~B!d>%XlE&Hj6RRn_XStJOE(+Z7l5Tsi;$kK=ZK78)dkxNvqdO9Lw@LbDMeJ>0`CG7ll^64+v)!cCpI3 zmylfhsPW+gJw5)bA5sErn2wm&nO`%nb-A$Br}tCM&pF=CRl4l^t>*6 za*pA}tS|a6EKXhgeKP)Npzk%SD=zxJsdL}N%13D33t?IFEy?fnE^E_U%R?}a%H$i*Q`Ig z4h9_3+p3w+WHT}PmXGsH{<*Hgu7xMo#_oOoeA(t^`P!r2^8Y@x3o3qFR&`pM$&f4J zfK1cY(zPSBF;&9hJEeylwIqs@HZ&+n^l-s&x7I=%Xpb@*h?nd$7` z=Ueail-d7#gZ{6k^VRF$xm|e`z`6UPrHeFIqRfY%Vd?EL@{F6lZ(|FW6Yp?o@jjYy zAew&TBjyIc{$05Q&ZIv^Zs_bgk$`|Hi@- z+{P7NqPO}MI$v;^(KaRS(0hqv-_jGeFL)}+;-RjfcJ$K869Kn5k4$zF;^U2J6Y*2o z>RMhPWsfXBRJ&W^LW(6sBx#>v)YrH&Npwv-jd%9~-Y`)mZG^ zU|I2%|Nntxxu1z2SNxpfZZX4J(EXGO1Iy)xCt2bL9fi;Q_;EmPf@ZzJEP=oKzhs`T z`5avrUVXMh@x+GtrMm+b#(tUjIMd>oxySeI-`3l_3^cd>y?S4Y(S>~fH1E5N9T#U` zFq`fp%y*4hd=i(HPMd&Z^G z@UKH$3&V%lFMqylactw>t+DIc41>2l(Tz*WvZCxtu6Ul9taDkoFDa&E1(TTf0TxfY z6MTsRpIY|*FUWuU;8W|#t@4#Ox#d2;=>Jxv>^f_K+vF0t1o;e+MmF__hf4CCm_E*% zZ#(b%{h2mTU&jA`wtbK2gc7+!Z#Nn1oszFjOsJ~+zjyn)eZPh6KRrvYzih1LeD}qX zDaQ(IF3GWb9OrPT46!~Nz#nr@Vp3`CORw7{e(Z-N%a>U>?_DTXIp>OYqe1D9M}K+6 zJUm}6I9e2RRrk&DKeiPoB<)o?KNalVr_v_k-0i%;|4d~@pu)T8?u#8>(W)0EN(H)u zB7*}LhQ+;He2znxD=InW^&F*bDo2I$8g=-c1@ms$J=yzGdEfMH8krN$_eH!uchcye zz?5*6Egn{DPkwcFU-)nGn9YqZWhx%91I_5b+#&ENk; zd4^nNn|`agtVh59)vo^~zc0&g{5dDT=GD!E_bT2;9l5b6^2j6R_!mBlXU^x%Ia;+P zZ1ZIG>b^Kr!LrI}_IXSPug})Y+?2G3$3RHu<&JYkc6To?PBPGS$YbI=`TpM$OCBEi zY=;G`N3CSS{|h=FH4<2}Z{e!shZ!EBYBM+{`tGe1+P`Bj~UG9PLub| zR+|;F$a#_Q3&uXx{N~3(%h!F|(IpeTWBI2^B5w~Zl5+C8A9LnTP0QmNm(_g}Hwy<9 zxi0E;YA}h)s&1QjbCuhxDo^F@_g5M%|GNC(w?+-w9czlEezHE%jA4pu*u}Iu_I}j$ z=zoF+CAF)!`Upw#=h)poyu;_;lbY5yGlXXS-xiiT?XKw!{fsc3n-`V?euKkxk>UIweUAXtX73~u|vE$s~&;?s_lzWw?F?u^BOWpckz@^N7 zXP(LxpX1Np-IlX|`ZE6avhDx&Epn?^>blVL;o9F~_1`+1(!c-z_2%9=Vfo6-+iO2x zHcR=Su&(p7tNL8V3rS&rSPmGjo44E5V6sPJ>yfX#f?HB-gATl!(E5L4)2mf|yF%;& z1b-K1Ofso(DzTCIym)%yn#3lB(nE{-!(+Ud?lZkwddvSEqiNr*m390J)^G_1RbHFC zKJhbGojhNHrI^Dn?!yvJT$0yB*4w@ls7|#iu67N4m#zJF$zq$yk1X1J4qx-`I<=kg zLD60r^BCP58S8&6yuG5+M0md9X05rNd@j3mckXa>dhW3|@`y&1d24iwa>nkB26{VJ zUA5J$SUtO>V&2ksn<|f6*>?3tvrGzhvf1@_P4eElInUR;I8k$5KR9Mng`RNyf%Uzg z4xHswIC-r;ga5ITp#Q&&qGKBDER}cEp1QQA*-bFf6 z>*b7pv|aTRC_ZcZWR275)13{oQd}j>W_=Rq6MLKP-BlOw9;@B>z5a7_T|c|Vi}__$ z=V$cYn_$1^`Ok!^yj`C&`RCXCHvc=h_>SFy<12b+c%4t^mfiB0rOf8%RTJ|Gd#9lnJ!rAgEf0a^U00`P|2oEaAibAykzyv3OvZDYCE2A#nU?)!-S*Z(cVt~Jwa&b= z*?G+)2h~mSPaWpWex$yZ;gqrJ(~Gfv`YDxLRW|;sba%DAJ1K~>t|gC4UnQw8{dHQ} z@jW%OX0Nvre12^4wXSD=KY1R!`1XB~z23RvurJl68>P(`dY@5!YN7FzZO+aU9I5w? z-bvYUb>>Su#qVpJFNa!Ii&i}Sh_dIhb06;9Ianep)u%3!nqT%TVp&s(@y%B+ z8CZ<0I2ffpnu;#nv!C~KXTh@vQ}ydFKDK)%7<0``ZKK+)LuGxF8Ry>n-0=EdNqhQv z)xh^!JNGi4(QvYr{wZCNcX(EPXf_j}vT`~M#4 z-_`kI|IWC>87#R!l_j@2`CcsUy}OtFv669eLg2%ei}sJZk2Qb1+!fQbmN`Odg_!FD z@5JzlpS9DTa7BDww(-iuaDmH(iVLSIvmat=OX5*b^ZPSpg8AolCd9xULTmYzR7>3s!5x9Fr=gV-)ZkIBpnzsp*-9xf9)`fBZl(4Mq)AB%6YSKCxS zN$Q^O#(gVGULobncEzG9<^6N-9a@vbbXnQ67$dwSN{UY@g1Pq0^F zk(KQFvf`aC|3q$V`tpBy@O#F7xuR{~o~Za3+{`&4b3V&IBrV5}nM24ZWUJA&rCf&^ zbfruJ8|(!q?wRi6DIB&v$!nIu=EK)Ff4ls7_V4xkKJWCeIOG1-znpWcj@gXolF}JT z_Ba2ns|%gOd-qsM_vycu{D$r+iWga?l!zv5DSat*{qOv*$F}dY)w}KzvMNw5*2_MV z+ndjN%I4p<{p+60eE;*=@_F&r4?+}7Ohm6bI4L|Wx^67Sqsw{GF@$C234Rtu>CLaZ ztpj}fQsU3FJbS88xz5p6MmBXum4?^ZjW(fQqKM-|@SE54o=y|5&4>>scZIvTbi(g$-^yhOaNO-mW>Fj0KCJHWEd$jAE^w-!I zeebtw&0FyN-K3nYTDo_CUAQzYk>{f8Gv-Gw6OY_5zPKpXoYyGBe3K#j!(D6dcidgv zs~5+RcjS8Ox2OY4CP%C&dhGMzc8Y_=<`XPWzvXY+6ryS@{`pDAha;w&+N_>4ZVbNM zu`=97@bd!xN>`tLzb${x`uuoSF!#9lk%{fi4L=XeQY$x_V%EQLqtoiSGqkR8<{Yxz zwW?!^o2F{~`9D10cD$=ke0-{Z&l`5TZyWn>-rV~vD(?09GmpBLX+)LhCNKJ%eCP79 z{U@Kf`Rqw@IxF8>dHD0Y4`<@@^J`vS-uFy*|IcU^(F+0PeR&O2*CfB{c4n7uetTQ~ z>xK0C)7Nv>zK#n1qWDR}Rp0e+W@*x{%RQ+p#A+n(eomYj(cdqocFQhZ=U~YugDspY zo_20U79}e$1tiY+c-U+X=aHAasw)@GkZI1?+Tq~8aYkn^lj}ZForqti_tu{@I&hGQ znSCqYac$2D4_~Xv=sUd7m{BOL;9t<1>3pdFs+Pv-iyzd$rc#3T}|IER;A~ZKOeMVVXH?KU{OY|7sMGr!&q|97E$ z^Y?VMk5_}4y4J1JI573Tyt}PH+s5zWzRabuiMdX@Z{)nP(qH?G>EFX&PqSage-gd_ zYuWujhj$zdd?&x`wvtlOqv&5ehH^gF`OEA+esiBMExU%%<<08#dymYKp7gO}+d27V zIYs>pb5hh=sd0T}VKmQl0sqFOjmK}^zQ-6Z zT_(D6|64)Ybm7{%c?ZvTMEk9p+cFg!*?!uMK5A3tv2+$wlTw^O~^ z+M1=z(KX5mZvW^+UpRvn#O%pYoJtmMoB6aMpeP_PQvA zy0^AT`>kT)Upmcmo!)pv;xXTce-A^BJ@PKBIMw;=*Rfkxw|lqh-cM-z#&N{9Ql$3L z9U1f3_kM|cCa;$DirSfV`|QSPYO*13qgS~opNcxiaok0mjUoBKWyY8-QvJ)Uf;he> z@cOZ`gu1U_Z|?MBe|_M znQt<~l{)sX7dt#T4jQyJ^K=G!$1U2g-mEv;o)LCUK zva28~#W3Vm&>ZhKC-|B*dPmJn^@+7Lh%uUi=UE4wqlNO&wLv_m%3$_r1Tkk1n2d>QoOQ=Z%c2O-~Y>V9r8As zz3+}okFCG@mE7=zGeGM{?<5+P3j; z*7gT9ZwT2papqQmrHjL#t+CSfFMSq== ze;51B#SdH9d@t=t32|P+qQoL>+obS#^~PP#UTYmO>{dG}vs*E;DR!HH+QxSEZI%1& ztN%~m^WwMt%l9>NoF?9xwq50&>7!Q_ht9JfvP)QgQtH5+v`mG2e#@`#;O603{=4bv zy~hQ6iVL2dI{4(}rtm2_u(JT-zw+kSTz=makep)}JvZcyxBnLXzOsXj@3o5fX2_pW zc+S1qL}GPaq1uTs^G5e0GH+Qd10&}h*z(8bqE_nKnHRgx-45Hd^x`6k-LXkK`3jFk zawM-ZPL2*}c`5H?eEZRkdG9u}I83;1*xRh}`oxjN+mAUiOfdUU=*9Nw-Mx8n65`?2 z9GhaEJ6Gpi=~46MJn7SNS!*7w7wUJyOfvL^kp6C1qO)S)zvD`2Ng>Ck&FjB; zL$3boqemS(cl|4z^x*eGZUs@cR`&kTcZ<;V8@Dy`$6Q@JW zqnNnnO>GP_l^-3y(e}O|A^+rCo*F0JP`4B64muCqA}@6<3pVeb_vplgNu9d{kH~zm zy=^=1XXRDd|Bo))zbyRqF4Tpk<)Ui2h_{T|?W?D!+dk!xFWfnQeacJeLysTc(u+5c z^4rG0ecr#V_kYIUI}&|w%lGYfOB~jnQ9ZpR{7QR2*R`0yi(cV{I-d8qxb^cU2t*p` zY;)6DQz7zLYxO4$mE$h{Jj*PjV?t<@fHdUVX@vTe5bdDWx{Mj|FbnT2E zZHqGgpM3e@MU9)tCc!U{RnNPW{n&QmA;U~>JG-Wgz}5ywr&xBs?F(j^-f)}y{fEfh zOOwMY=D9_LE9|sCI9*1$t#IRn{UOHe@mr?DBr$bW>Q8lZiWh_y|8y)e?Sk3JG>(eR_GZ1HGB^E$pfRh|qC5Eo{>z@Lz2KPl({g*|kK}T@_uuya zJ+bl3$zqX@GiQq!W{PG{IL^Xy{-?k@+nFEb51q)mn9$p;Z{2Jh|6BL`&;I{E%}aDw z@U8c{5XgFV#>3A($GYCPUeG#cc+fUoX7SV;JgnJYJ>Cy4apn-gQsXYxeHXzg_rIc7w-PL@tP@5ZQUl54_rM5raqsx_Um28 zH4?u>o-KOJF`uR5!)py+*HsBYJu>;?GMhx~G#Pg=UiLCA30hKF+5e&PUvE)V_`#^E zZ{poNOv_)o-||a}%&s|8we@(`*C(4hluU|`xO`H~n%Z`v^TTr+o#q(_&s|9<`?zH* zpyS3x?a7qif{`_nEh{M8f*7-fR zDsyYAr-xt4dB>|)^VoR*-|7D!udlqdH1>Cb{+r@wC$2yF;uI+)Vz?iEi8)hvZ2hWEV($Std8^gqLLy3Yezw)!$ zh%d>Le8FfO#_e~nhDEl3vE_k9-*&g2tJ|y_F72On=&;1ShxU3e&Gi;};OU$?u(^J(&Wjfm8$G&e`=)Lf=(xoyX zUZZ(G)<5iA;{WniYu&OZMzP!+2gOd#4ce^hr2e0cQ+8*C)?o{u%^j0AnEITs<;?y2 z=H})z{?~YQWlbyBO`5!Cc2kFey1=BprcIf~uE*0l799-O5^;3h{5j4te&*M|)%`en z|Lc$Abt3+y74iKWN>i=(JUS>;a))L9$|e7kUY(9})(hc1KKu9K;`^W8p8tO|{?~ra zQoF2gYiC_q{&!2K+45EDYZByd`-ca5^FIig^O3{;o|Bf(Gn)X5WR~Y_%f*y3J6oO5&Xsa>kv==`bIg*Su8W5%5+P5m=IuARCwR3~38X;RPgJj2y{{T3|s z5;78*dm<`z@sl0xx*TN|rxwQ^Yw^3gnA1|g^VQk6En(glCI)R<8#{4Z@{_&346hO{ z*Sv8TZVi9KI)BxV*FP3zdHvUZyyCpUmVg6lSN@yNI2G)$h?@l#iqN9*4Z5KI#T?iD}Yg2f1iBe!}+soem^d@ZcpF$cE0`l=XL+? zZ#sRnOE&v+%A&k|mXTWy&+YPSD``FQ?8Mw9OOHC9ZkFb2zrpmjAT6Ru@F8c{fmJt- z=!nl*6C8+?u?%rg7=jh;2)*>ilX=dU)kgmVx@jO|RFo$poF=>3HjSw6lu(LV>GR z5+B2L=5^gQc)srPox?&K<~=#$yY0M@n15ad-!VB2X^)oF6Hy0zGB^rsJ}b`oBQWvc z$(3J2AM|i&C}mDK(>ra(qip}P-lgBJu}^>hV_*HRm-9ar>2l^5Tzj+A?L1fY;g5 zeS#~JS^HL>*t_Il`lQ_aV*7;R@(o}8_y6vj|7T|XVc~mk0+er^@oAHkKV)BAwJz-< zi_wj(ORQUBj&9;-V8hBInzJ6fgPpnEfP`K&yyInJaO=fO*Cvi!(@WbY-$2?ti zoHl1BG)Nv_rn|ww|MJzm_*0u1^mLWn&-gx*nV3{qTgGr;zWtHUGDrISWFpM%=h{U5 zTe6i=TUf(M|4j9a)!UsGy#IYji*CR+7LJk-jPG|TB+_WQ2rjgkgWC$1+(HGxMYxdT||#%nLO z|EYYUB250_=ZB2j%8s*tpDX$IEBC(l*7kor=bsXuf9u7|?3o+mxl`xwOOSQ$6Fk=A zx%7o!!(ICaQymxE)?NI4hW$=`!NbV=AMafM_vL&+tfR#arS$IY0(l-nB4;nC}wEP`@}R1SSyvT&bvfPO!V(YkXn_dSXe7TvbaIymusane;zbKad9 zb9e5Y#x+y8`PcDjGA7pkqFc7ij&0(f`J?dL1f!^{PCeznE*G>3KTo{kl%Mx$_IsO* z0}=tRnS%U<8+`nnu7}02?3^R{;nCK=cenmv)hqDe`0-F_!rYuK(zfYr@{H86|PZl|z-`kie3k9bQ(GqO*;7 z_^wOq_Wv`pZ6hxh9pH(`J)^DbczNBYJ=|7?e!V;LZfp~Euil)%cp|xA%d|8r-&RG*q5 z!xO1VDuELNPK8w7vQ}ocw+x$@_TrVowYmEqyLuJbxvUpzW?9hpL^?~RYHgxPBa2h_ znpGBJ0*v>sp7V}6w$pJ9Q+lM+fzTOk8)}T6YW3c=SGaXZBuyr`Ieo$+&QEvtpFg@N z=6^!k4i|}=l$Gx*NErQl7lj*7duUr?I_)ABgn$;WBoYHBK$+X-looz za>vr`4H<4SPI<3w#xAJ&J56Br<+S;xN_id!+GkD{)Be1yT1H$_<8Fju)s3L#D><8b z?zzVFN8K_NAQtl>rmQYHsCm^Zna1=jgMa>Q7RpFPS&%v1Kd&L$|QGe2pjL z9v%3#{`mfnN$qd`?fMwUypYlJ&lh`6UW@Ig=T_9l-n{YZyBpKDln2$P3}tSH83$c- zVNYRq@Z&`MG_492N_d=Uvbcd#ZRA$H>e(ekTK(G)@|n`UioGlq0db2%=&M> z%gr)0&VMV%YZt%!LJZR_JtH+6jfFFlx1BS+bJp`sv&Qi}kMQ^k#iThK4kiaL6A&=$ zQ!?(`yHh37z=Tsm^l6ih>l>v`(X73K-=6yYI5@H4xuUCKVNU(@*Z=hY-Ak{#H`#t^ zgSCy}=AD5XRHl1s}Ne=d6Cid#?8R=eUovuK#QL{?Dvs ztxsNevGKy-HBXmwZPg6O{Q0hS!jY0oi|n&*KgeL2QITFH7hfB(*r%ab)amxRtc=6} z4P&O6EIxg)+>{`mfRwr}5 zY9HKLEUrf;?63N&wf6|)(|L?NzgYU_JnUxeFnndPOyg96%H=0H^4Iv6ZNFQ^ zU24S;$f!8OdG95e^1Dl2jkkUEc(_x}kZWy_sQjDVJ2{SCb&f4r^W0G2&gO-&)8;Um zXt$N9ruR+U8j$FgF!5uj1mBTRqqmDR#AZJGFmtAu@J`i5YqwqPosi-*4+0 zS@rbO)6<$fj8Z!tB>0=}o;>)l-R_N|7{_`QhcEXfd$*fyf90PyRm1UnQNp7YA|AWb zBY3axn8qq>xTh#LLg%iYUwP&JhA(!9czfkroa16!GQ;flvAgTGMZ7JE^m#58VfioC z;X%vfqah`$el@BHPc*4{wWIZ6)GO_U^BVJ3ZAvptOu4>w*TwI1*LK~EjJbOx=`ip1 zSO%$Y%ucU1IjP)Q<}G|-`3<3GK@QU<3ZCdWz3#fyuf~jd&m3|Wd?-A?KI5&Z@+Fz= z(^qPAPEb@&IiMb?lcluis-lP^Oe`q z|Nixt6|mcJtV^i%%xw5?s*VH;N~ z*a>k6ynFIm=2+Ny@!|#Kp+hoN=%FQBdHi9jH=j8orAy+kF0R zg@rf$c!hh)bdLPxVe1Xk>5VH2Q@?%nmgw(!KRB=UY)F+*FurUhzhHx&oh$1fy@M{T zPkW0+<}N!jBXQ+p&qhBFMyJ=84~d*z>h}4H?%YC!9ZVNI3Zs}pR)_yAF`gZ>+QRjc zQuMc6(FejO_UMZ<>|UC9<;!EkwVxKou60ap2&?G}+bJTj_onQws~7sFy~^2IB(t+% zhG0h~)6}Tv6OR<6pH5CR=X#ho>Bv+W?$I>Z zQf1G2IaIOV*k`J3-p_UY>+HT;-v1a`|9*0L`MO-cFUcuydS@&-bMj6{EBE7<`|b&E zu)cfnulIDl*gX{!JCB&xJpF$#A@}i_t@qG`D+-*z+&9P%hZ>NjD<$B7Zu;CRs2fm z%bod-^Lv+Oa!c4n8SV=kmlSMe;l8YUe3EXHOy4=fi48BEg|4aki(bxDWfih7RrJuj zAoOADVRZv}xtzXlc0a$}KDX(}Ys+Y*_21-5-pEPsFcxQtUbUZrh3chEt=CpW&RTq?Yc~dPnV$yO_BJldGCJHE?!CYDCs#C)6Ls!r=_M9u(8K1ii9ijh(Sg@xwbuXDe-! znrG^;e2>odj(->D|5|W`o;)Zv*?2m`UC1>2=6sQ64H>(v#WCDW zE4?l$aYo2RTozf)v$^@!OwW+guaQT&^snC5I=w{2$WwglQ+e+5HbHlv3E6Xgi1LrB z+PN}l^R5C*t<~Bx*|XWcTuAHQDU}@Mc;RKljZhXX3BHVi3G5epZJHIfaoyVEqouZ~ zbH`G}XfySVhcC8dKmE;abL{cjsvnEzYMMWl`2M71ig4(>mL~;U*m&G+7C!8~dheax zNAm-w&pg_cu5Z0nk#=W#WcKIGxwF<7+VB078vo--{g0pXPa3rdu2EjRv%UGv>+9-& z&Tvl_^!X`seszQ2%=sdXFL%0#p8s9^@qa8`;< zJ=M)0lEbray;Jqmy7g1%R8aEit)2TfXk`cAU@?FB(f)(g^OZ*FiXle6TU=k{bev<3 zu+wI@+mdrpd*?)Xo^5>V_uVh}bv6E<>l`hsk}NM-zVdeI@N4Jp{hGkPto&p9f4MJ* z!XKpmH~97T{@+-qI-bmvEYm+8-u)uw6mLoN3EO9lp8uGX?l3P8OB9ZXy|HCa_B$L4t$dv_e{T3ZyUFuQqO+~`&RU;knJCisrmD>S-Mb?KvX55X zIuZ8s%Zqhqm$ybrAFF!3|1wit1;_NLm3eb!eXUgRsR&uB%W>I7!~VlzfhUbD*BGvJ z#o*shQ*#-4)Vjo!*<})ouJAg|)BI7juW5m;#f`u2 z@jv!&D!e!U)lFZ$`56(O@!KDKkxZ5 zPR@Pv_paOXGV4r^Y9_}bT^Zpg7f#Ms4?1(?--P^`YybbWes3r7ab3+_t_S^kPhYS3 zp~pN!qtN}gb+hpONArF@cyyDucCX?jM&Ip~Q7l~h9FO$eJ{=plhVK-|rh5hppI*qB z6!pP(hMUSvvsqgO3QC%UtLvMW_K528%>Cn19QrBP&hl9KyQm`dwc8FipFQ}r`}cdR z{ri9S`v1Puez#0G^b70l*0~ptP5sJ!{o1*hiVy6)+s@q**!PNGl8+~yv3(DJ&ExBJ ze|@hUdvVE8k7hWQh_rB6#FwMfjA+2vTgBSWG% zMQYaSmwo?guKwRM=W;xQ+>U(~k8ZRC-g>lu^3DtEZs_jiI%PE7=1s>=xs^vslq`Ja z@f+&Yyq@*p%Ys*Tb{2mSY;!hZIvBNk^Dk9~NAlM3pI97OXKi>F%vf-P<6vaG^xbcD z=AVTmEu?K?B+?~f46gD#6wQmd)-SzW>y^pg-*Fn#Bl*59yR#oDWkTp>x#Ws@UW+o$Xjo2Rc-d?NpJkJIf&Cn^>z43_>-4ms?2uZAOQ zZQj1j8P=CS?tXt;e*N5sKY90kTs+raym!lb`8RLkjC;Li8tf5Py2EEudwz1}e(MM2 zwfcMhOtt^|M|{r&$!Og)2EE>G{GZl(<}J3}?tRj8+0nD+VP2~`x({EhUiW6-OaA{! z&jVtm)b%zg&EHw!s-C^tFMmaPLXaQ_`{axN3aY-&-uF#2yZw7F+w~u!Y>k=|wfn66 z51mg=5Y~2_-n_bF^|^3C(N#ZI?-JtM9y&Wpx6V6Uz%nLNFJ?`rA`@8=3Mf0t*eXVWxo!jpF zNgE~`*>(B-+t>A+zq|k6g10Aq&F#M&KDYnB^PbEA^<(n)PQU$;_Tx*z+w}T>Uw=)V zxMTh4jLvfxKQ^iDTzbYR@79I>Ukgus>{#tAv(Lh0V~R#_Q*x5s`%puzAlbw=#%&5Y z>r|gDteSJ=<;)kIbHgr%T{?fcDOPrQEW?6+jdgvRCnNqZ`|Cbd>R-BN|4vZE{H^D&9Q%`=x|?+mgee-`N|V#AfTQs$+AI z6tZGDs2;w0bL;iBOuq6};eY^JM-)HOH{&i1|%GbWL|2fCM=F6>r zqJ0+Of69-iuUi)@aqpAk`~MI7@9lWWyyNd-wwARHN4oNwj5~HL-@Ui^$K>^Ye;(X- z&+@q8CR6^jy6HX33@;@ViOi|Fd?R_~k6_y+Cl0(bjJ?@sYwCF1DsP+NlgEeDKCe48 z<$T!E@T+2_1+OHyp5%ooZM!ftB>tkyso4ydyPo*jHg2m}^m#_uM~+{OzvLKtKW?-< z^sO{}uHKJVyZ=?TPv0uYuX{$}*_J7VFDC~-k^E)%>dBIA9bSA@0v6q2ED6&zirnhi z)*L+9$a*kT>CyH@Dck#29jtg=y8p*~y9e98|K7Fy|Knam3+ou+=})ZAyYpFovvQX# z*yzq5R&-aziL2Vp_WQxd^Q@cKhVT0oUw5B7?i6owrsf6Bn~RFOUOI<)u24IorRkY* zdiIG`Dms(5uE^&%kN+=S|HJirOyv*OeLoGJz0TB0_|>%9i6{F|$%g%hPc3ktuH-rW ze@$fOF5}4AHjhvLzbGtU|GR(RFZH^=y!m_H@2fu0zl2@jGM9|#F5U@NiWcWMSW=C( zCFfR5smyk5(RO+{MX#p{FVRb1O6REV8efEeWcOv%KiVf>mGf*|M{=JB#(Mb%)zcVu9Nb8y|$m-tYWnC(q#WoHI3l% z%-pRzjBPgC-`Mjwbbal|>-7)sy$jW|&(HnPGIhOl0pp8=_ouF|EjBL{dg__xu%=l3 zaY6m;#E%>Me=X>*ez*CB`MJsyhZ$p+v^m^3xpqT-!3&woAJ!%nKE*PN5HxHXuy zDXNIO<6P?EV~(8Xm9{k8JnE)kzF><|q0NMu&x0kkj4vNNA?j$m;N~&gX1@iWh^ zGfVU)aiwQ&bU1ChukBs7U8TKpU+K11KJ&E#eLin}c8agPtn+MrpFqpQ#YZLCP9E2u z@u+&ZHDwlQA4yCveAmAHsQvrI`P6mQPv4j>2)7aX!7{ZeR<3Fq!`8KaR;iLQOU)V7&zfJB33n9! zds1=@Po#T6vLb_{sI|d;lWXS2kAJgx{PIy+8?>Zr(Uw&`+h1Ao^0`Or*W8S)vH!Mu z-lx{)uiAU2w4L6uhl4|RntGlEb5U-2JL`ipKa2M~eVg$1QT+RLdq0`3uYJc|&l0d~ zt(r-_?_z^2`^%H#4EH(-oSpDpM@#BqL6*J(PsgHn4sv||=imRCzy9ad?X~yR@7vv} z?mw4YBCGRm!3O`^595|5acSNS`22LkIu)5C{VN>>Un^}}?fb4+ZT9c`-kPuSq*$s9 zN}p;>E6Dip(yD94jmIL(INmN=eM0u1%6Y?87qyOe9_h%7netumNpR!ZjFsO`EMeXh zv0(O8+xoPlqMu6Zr$28lZ7G@HS>{$QU6ICf{7TK$VAu9T3-;?C7L^SvaQa_ju(Q7U z&(!$OXYVXb-@(#j^r3OG=w7oJZT00WA1X81rTGf4=ocMY9QA2pkH30%Fk|cEzDW`3 zOC>HXeE2ZoteT1|cl_CnNgr>ri9NAg{BgoO&A$l;P4+tEb8=5rHC0dhzTnOxxz9%y zgf6tX6yE*IM)!r-o4l}wXT;uH0z-7znYchMh|Dsf17Qyao1Mc8-G4t z|J(k2?+el9gD%EfJde)5ar5A|!vafndwz0Ej}-kQ^g!p?st^-}GiD22HBXb(|8Bf~zv^@Iye}Q>ynM@RcF#($d%=6Ip-eBfi(7T@o-197B zt}v7B`y)cfqd&0iQtOrF^c9`HMd_86kir-9=MmXa2|I$8n7Y{SJG4IT($C)t$lc&+y3wd;Sp zTL1sCeeLsy1+W_P+x?XmOck4m_))vWDZ@Zw8vAK&Uk@wEJ$ z7rg&81wu}}NSgA^*y@Xl?5`QM7jpYWzqrb4&TQvfnXy<&sB_+gR*z>_f_~cQP1@nE zniCzm_i^~Srt{a5)<=tZ%x?)j^EkNYv|id=mL-#U=d82vzv%l`o=I=nlfu6jKio1=^4gc?-Ax-M482?rZ8>VRJWO<=!P8Dg$1m;Aa|KD7(Jyp!fS*@%v}S-u`w^@7||hnJWeP z+OymLEIajVt@Y#R`cI|%zu2Cywo^Ru}p+8y=1Ci7*YpZzpHp}F`^i$=!J_3N*{ zK3@0reu?DwyaR_>*Y+J(G>Pw6uw+~9p3>vVb02nGjB{|D6tL*{TjgZ|J%(#to1`~C z`EXMp(_iGe11}#ROVkZh9oLRen>U^?o9(!LO5}6RgG?LD_nfFa(EYCFY(YW`cewlhk44w_J^Px!t7=1KY59rsf}cfq z&o(>uzVi6|%RgQ;2#Gm%i*Dfw`8EIgy=uc{(=&|f1uO*S9xL6Tw=bbjZrl7PDhqb# zFS_s5y_nPe<17xADf4G{DRtdgI*se(kwo5_H`-Q*K6(_0?u-?>{Fq(wmR$X$z%`+H zi&)azGp6m@`!eGDr>kyXcvu~srXP`=_lRHKm!UNG$lj^FFni|G)PzK)-dazuBv)p7sjDb`Ro&WLPhs>rME-SycD3 zuI`)+OOstijUjIw3Tm773EgHJ0l>vu~SR9AT8*1qW5`@xl0aQ{3Gpu%W~ZX ziS=9l%4P1^&d{TrBK5KDiNu-*4vPz7pJYb9eE7h!_^h^Bu!;YYhs8hRE;h<_y09dA zD)_Tx?c{Y>>aOK_Y@J+pANREn4;z9z4mdVs3#Xr(^DvUTfJfA>#CVmi)8mHX>LQC9 zzYb2n>&ozRS9;COjO6koi{}+p)fn7)G;@FW{jbG^*SFieXv$nI9Lcaz{aHfPj?za5 zMbsymZQFS9@u@tn=t*~so=sjZw$XZZ2)9JNs?tgk8M77HHU7Vz+W-Ca|JStp|5oY$ zf8<_sLAh*4sO8<8_ay!Pzma|ay^;U%InIUEToH5HKeA@*O0&4O{`Ti73bPMeSU!l` z6;*QJ{oEIfWrs8xOLj=-$4-^r*uQ-5pL1O5Jtp%DdAaOUn6R~S;UkHuHUk;pv${#P56w1lJ{FS=*FMr4-foy$#|LYm(&9nkL`ZH zx8(TgxG%G=|Fc;vx9m9EflrL;Z#_+w_N}ver1Wm{qf@OxE5C;4zOvZ5@$;Dpi9sHs z40d;=-{}>VIa#b}W2uvxcxcg+X?m*y+nJLZRm8jwz1dnmGort~Hp+H_w9YezosM%t zukL-ZRoDKJ#2T($9_zO6%HlWGzV^!?x;SLz^W2`zR$fYa3(hPkIiixTQV z#cTf(UiZoWTlxJ?^~?G7x6S+5!c&X4ocsMZ{?De}aaGUzUxYa1^S;t^sJwe=$s?<> zJC+ADCiC17DlCW#bl7);i*Lt6k-IFYx9`r>6f=|z4QE^ zVR-+Kz|9}oybZVXozK{Cyy8G(#rz`~wcT51O)m*&ka{a;S+my#C0E5X0^#d)UHtjzna=i8OMI`E=*dthf8 zZ-@TWfJTwOhcmdJFL5!tJA31|RU9j-z4;U7Hn(nnv##Ni!&S@3EvnPRR IvRcNV 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 GGywp&$%+F2 literal 0 HcmV?d00001 diff --git a/package-lock.json b/package-lock.json index d5fb907..69879e1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { - "name": "pi-model-quotas", - "version": "0.4.0", + "name": "pi-token-tank", + "version": "0.5.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "pi-model-quotas", - "version": "0.4.0", + "name": "pi-token-tank", + "version": "0.5.0", "license": "MIT", "devDependencies": { "@earendil-works/pi-coding-agent": "^0.80.6", diff --git a/package.json b/package.json index 3e8bf87..d32d143 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { - "name": "pi-model-quotas", - "version": "0.4.0", - "description": "Provider-neutral subscription quota status for Pi", + "name": "pi-token-tank", + "version": "0.5.0", + "description": "Token Tank — provider-aware subscription quota status for Pi", "license": "MIT", "author": "Iury Souza", "keywords": [ @@ -16,10 +16,10 @@ ], "repository": { "type": "git", - "url": "git+https://github.com/iurysza/pi-model-quotas.git" + "url": "git+https://github.com/iurysza/pi-token-tank.git" }, - "bugs": "https://github.com/iurysza/pi-model-quotas/issues", - "homepage": "https://github.com/iurysza/pi-model-quotas#readme", + "bugs": "https://github.com/iurysza/pi-token-tank/issues", + "homepage": "https://github.com/iurysza/pi-token-tank#readme", "type": "module", "main": "src/index.ts", "pi": { @@ -29,6 +29,7 @@ }, "files": [ "src", + "assets", "README.md", "LICENSE" ], diff --git a/src/index.ts b/src/index.ts index 7bf0e25..1607663 100644 --- a/src/index.ts +++ b/src/index.ts @@ -9,8 +9,8 @@ import { loadFooterMode, saveFooterMode, type FooterMode } from "./preferences.j import { providerForModel as findProviderForModel, providers } from "./providers.js"; import type { ProviderId, ProviderQuota, QuotaProvider, QuotaSnapshot } from "./types.js"; -const STATUS_KEY = "pi-model-quotas"; -const WIDGET_KEY = "pi-model-quotas"; +const STATUS_KEY = "pi-token-tank"; +const WIDGET_KEY = "pi-token-tank"; const FRESHNESS_MS = 5 * 60 * 1000; interface CacheEntry { @@ -89,7 +89,7 @@ export function providerForModel(model: ExtensionContext["model"]): ProviderId | return findProviderForModel(model)?.id; } -export function createPiModelQuotas( +export function createTokenTank( pi: ExtensionAPI, storageOverride?: AuthStorageLike, preferenceFile?: string, @@ -175,6 +175,6 @@ export function createPiModelQuotas( export { providers } from "./providers.js"; export type { QuotaProvider } from "./types.js"; -export default function piCodexKimiUsage(pi: ExtensionAPI) { - return createPiModelQuotas(pi); +export default function tokenTank(pi: ExtensionAPI) { + return createTokenTank(pi); } diff --git a/src/preferences.ts b/src/preferences.ts index 2364cec..98c6d23 100644 --- a/src/preferences.ts +++ b/src/preferences.ts @@ -5,7 +5,7 @@ import { getAgentDir } from "@earendil-works/pi-coding-agent"; export type FooterMode = "minimal" | "full"; export function preferencePath(agentDir = getAgentDir()): string { - return join(agentDir, "pi-model-quotas.json"); + return join(agentDir, "pi-token-tank.json"); } export async function loadFooterMode(path = preferencePath()): Promise { diff --git a/tests/index.test.ts b/tests/index.test.ts index e0e3599..63e5d04 100644 --- a/tests/index.test.ts +++ b/tests/index.test.ts @@ -3,7 +3,7 @@ import assert from "node:assert/strict"; import { mkdtemp, readFile, rm } from "node:fs/promises"; import { join } from "node:path"; import { tmpdir } from "node:os"; -import { createPiModelQuotas, providerForModel } from "../src/index.js"; +import { createTokenTank, providerForModel } from "../src/index.js"; import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent"; import type { AuthStorageLike } from "../src/auth.js"; import type { QuotaProvider } from "../src/types.js"; @@ -78,7 +78,7 @@ function fakeAPI(provider = "openai-codex") { }; } -describe("createPiModelQuotas", () => { +describe("createTokenTank", () => { it("routes supported model families and rejects unsupported providers", () => { assert.equal(providerForModel({ provider: "openai", id: "gpt" } as ExtensionContext["model"]), "codex"); assert.equal(providerForModel({ provider: "openai-codex", id: "gpt" } as ExtensionContext["model"]), "codex"); @@ -102,9 +102,9 @@ describe("createPiModelQuotas", () => { footerWindows: { minimal: ["monthly"], full: ["monthly"] }, }; const f = fakeAPI("future"); - createPiModelQuotas(f.api, fakeStorage(), undefined, [future]); + createTokenTank(f.api, fakeStorage(), undefined, [future]); await f.fire("session_start", {}); - assert.ok(f.status["pi-model-quotas"]?.includes("42%")); + assert.ok(f.status["pi-token-tank"]?.includes("42%")); }); it("registers /quotas and not /usage", () => { @@ -116,7 +116,7 @@ describe("createPiModelQuotas", () => { registered.push(name); }, } as unknown as ExtensionAPI; - createPiModelQuotas(pi, fakeStorage()); + createTokenTank(pi, fakeStorage()); assert.ok(registered.includes("quotas")); assert.ok(!registered.includes("usage")); }); @@ -125,12 +125,12 @@ describe("createPiModelQuotas", () => { "sets footer on session_start", withMockFetch(async () => { const f = fakeAPI(); - createPiModelQuotas(f.api, fakeStorage()); + createTokenTank(f.api, fakeStorage()); await f.fire("session_start", { type: "session_start", reason: "startup" }); - assert.ok(f.status["pi-model-quotas"], "status should be set"); + assert.ok(f.status["pi-token-tank"], "status should be set"); f.ctx.model = { provider: "anthropic", id: "claude" } as ExtensionContext["model"]; await f.fire("model_select", { type: "model_select", model: f.ctx.model, source: "set" }); - assert.equal(f.status["pi-model-quotas"], undefined); + assert.equal(f.status["pi-token-tank"], undefined); }), ); @@ -148,11 +148,11 @@ describe("createPiModelQuotas", () => { ? { type: "oauth", access: "token", accountId: "acc-1" } : { type: "api_key", key: "token" }, } as unknown as AuthStorageLike; - createPiModelQuotas(f.api, storage); + createTokenTank(f.api, storage); await f.commands.quotas!.handler("", f.ctx); - assert.ok(f.widgets["pi-model-quotas"]?.includes("Run /quotas again to hide.")); + assert.ok(f.widgets["pi-token-tank"]?.includes("Run /quotas again to hide.")); await f.commands.quotas!.handler("", f.ctx); - assert.equal(f.widgets["pi-model-quotas"], undefined); + assert.equal(f.widgets["pi-token-tank"], undefined); } finally { globalThis.fetch = original; } @@ -166,13 +166,13 @@ describe("createPiModelQuotas", () => { const storage = { ...fakeStorage(), get: (provider: string) => provider === "openai-codex" ? { type: "oauth", access: "token", accountId: "acc-1" } : { type: "api_key", key: "token" } } as unknown as AuthStorageLike; - createPiModelQuotas(f.api, storage); + createTokenTank(f.api, storage); await f.fire("session_start", {}); - const codexFooter = f.status["pi-model-quotas"]; + const codexFooter = f.status["pi-token-tank"]; f.ctx.model = { provider: "kimi-coding", id: "kimi" } as ExtensionContext["model"]; await f.fire("model_select", { model: f.ctx.model }); - assert.notEqual(f.status["pi-model-quotas"], codexFooter); - assert.ok(f.status["pi-model-quotas"]?.includes("18")); + assert.notEqual(f.status["pi-token-tank"], codexFooter); + assert.ok(f.status["pi-token-tank"]?.includes("18")); } finally { globalThis.fetch = original; } }); @@ -181,10 +181,10 @@ describe("createPiModelQuotas", () => { const path = join(dir, "preference.json"); try { const f = fakeAPI(); - createPiModelQuotas(f.api, fakeStorage(), path); + createTokenTank(f.api, fakeStorage(), path); await f.commands.quotas!.handler("full", f.ctx); assert.deepEqual(JSON.parse(await readFile(path, "utf8")), { footerMode: "full" }); - assert.ok(f.status["pi-model-quotas"]); + assert.ok(f.status["pi-token-tank"]); } finally { await rm(dir, { recursive: true, force: true }); } }); @@ -192,11 +192,11 @@ describe("createPiModelQuotas", () => { "cleans up on session_shutdown", withMockFetch(async () => { const f = fakeAPI(); - createPiModelQuotas(f.api, fakeStorage()); + createTokenTank(f.api, fakeStorage()); await f.fire("session_start", { type: "session_start", reason: "startup" }); await f.fire("session_shutdown", { type: "session_shutdown", reason: "quit" }); - assert.equal(f.status["pi-model-quotas"], undefined); - assert.equal(f.widgets["pi-model-quotas"], undefined); + assert.equal(f.status["pi-token-tank"], undefined); + assert.equal(f.widgets["pi-token-tank"], undefined); }), ); }); -- 2.51.2 From bf8b9a9e77457e6a433d82299deb9ff537205821 Mon Sep 17 00:00:00 2001 From: Iury Souza Date: Sun, 12 Jul 2026 14:23:08 +0200 Subject: [PATCH 08/19] docs: sharpen Token Tank fuel gauge logo --- assets/token-tank.png | Bin 174403 -> 215504 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/token-tank.png b/assets/token-tank.png index 04a3b0493ee91a517bd585898da12fafca060788..ef5cae01f7863e4d8e1402a7fe400f3eb799842a 100644 GIT binary patch literal 215504 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

546Vi{^DZR(x5{=ilpZx}0eWLjp(P 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

- Token Tank icon + Token Tank fuel gauge banner

pi-token-tank

diff --git a/assets/token-tank-banner.png b/assets/token-tank-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..0ba254a736d71522452954262bacad4d48b46852 GIT binary patch literal 178637 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≫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�$RW?+zNi6ErRla+7WzN%e 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

546Vi{^DZR(x5{=ilpZx}0eWLjp(P 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

Keep an eye on the tank.

-Provider-aware subscription quota status for Pi. It follows the active model, fetches only that provider’s quota, and keeps the footer quiet for unsupported providers. +Provider-aware subscription quota status for Pi. It follows the active model and fetches that provider’s quota. ```text ▰▱▱▱ 24% ↻ 3:25 @@ -21,8 +21,6 @@ Provider-aware subscription quota status for Pi. It follows the active model, fe Unsupported model providers produce no footer status. -OpenCode Go is intentionally not supported yet. Its proposed API-key-authenticated usage endpoint is still unmerged upstream; current alternatives require scraping console HTML with an expiring browser cookie. Once an official endpoint ships, its 5-hour, weekly, and monthly limits can be added as a normal provider adapter. - ## Install ```sh @@ -53,7 +51,7 @@ Full mode adds the configured secondary window: ``` - Four gauge cells represent 25-point usage buckets. -- Only the percentage receives threshold color: green below 70%, yellow from 70–89%, red at 90% or higher. +- Percentage colors show urgency: green under 70%, yellow under 90%, red at 90%+. - `~` after a percentage means the extension is showing stale last-good data. - Reset timestamps use local time. @@ -76,20 +74,6 @@ The selected mode is stored in `pi-token-tank.json` under Pi’s agent directory - Keeps last-good data and marks it stale if a later request fails. - Shows `—` when credentials are missing and `!` when a request fails without cached data. -## Privacy - -- Uses direct, read-only provider quota endpoints. -- Reuses Pi’s `AuthStorage`; no separate login flow. -- Does not read browser cookies, scrape dashboards, probe models, or spawn subprocesses. -- Never persists tokens, account IDs, raw responses, or quota data. - -Current data sources: - -- Codex: `https://chatgpt.com/backend-api/wham/usage` -- Kimi: `https://api.kimi.com/coding/v1/usages` - -These are provider-controlled surfaces and may change. - ## Development ```sh @@ -99,8 +83,6 @@ npm test npm pack --dry-run ``` -Tests cover response parsing, credential refresh, dynamic provider registration, cache isolation, formatting, preference persistence, and extension lifecycle behavior. - ## Troubleshooting - `—`: authenticate the active model provider. diff --git a/ai-artifacts/provider-adapters.md b/ai-artifacts/provider-adapters.md index a43d362..2e180b6 100644 --- a/ai-artifacts/provider-adapters.md +++ b/ai-artifacts/provider-adapters.md @@ -45,7 +45,17 @@ const provider: QuotaProvider = { ## Security boundary -Use direct read-only quota endpoints and Pi `AuthStorage`. Do not add browser-cookie extraction, dashboard scraping, model probes, subprocess fallbacks, credential persistence, or quota persistence without an explicit product decision. +- Use direct, read-only quota endpoints. +- Reuse Pi `AuthStorage`; do not add a separate login flow. +- Do not read browser cookies, scrape dashboards, probe models, or spawn subprocess fallbacks. +- Never persist tokens, account IDs, raw provider responses, or quota data. + +Current provider-controlled data sources: + +- Codex: `https://chatgpt.com/backend-api/wham/usage` +- Kimi: `https://api.kimi.com/coding/v1/usages` + +These surfaces may change. Any expansion of this boundary requires an explicit product decision. ## OpenCode Go -- 2.51.2 From 512a811a8e8e1991c0dc3516e6e47138a14a7c03 Mon Sep 17 00:00:00 2001 From: iury souza Date: Sun, 12 Jul 2026 15:44:49 +0200 Subject: [PATCH 11/19] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 91faa83..1fb1525 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

pi-token-tank

-

Keep an eye on the tank.

+

Your token mileage at a glance.

Provider-aware subscription quota status for Pi. It follows the active model and fetches that provider’s quota. -- 2.51.2 From 437eddb2246f8cdd054e5af933103ba76a49c60f Mon Sep 17 00:00:00 2001 From: Iury Souza Date: Sun, 12 Jul 2026 21:46:16 +0200 Subject: [PATCH 12/19] fix: handle temporarily disabled quota windows --- package-lock.json | 4 ++-- package.json | 2 +- src/codex.ts | 14 +++++++++++--- src/format.ts | 6 ++++-- tests/codex.test.ts | 24 ++++++++++++++++++++++++ tests/format.test.ts | 9 +++++++++ 6 files changed, 51 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 69879e1..6168ddf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pi-token-tank", - "version": "0.5.0", + "version": "0.5.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pi-token-tank", - "version": "0.5.0", + "version": "0.5.1", "license": "MIT", "devDependencies": { "@earendil-works/pi-coding-agent": "^0.80.6", diff --git a/package.json b/package.json index d32d143..e4f66e2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pi-token-tank", - "version": "0.5.0", + "version": "0.5.1", "description": "Token Tank — provider-aware subscription quota status for Pi", "license": "MIT", "author": "Iury Souza", diff --git a/src/codex.ts b/src/codex.ts index 590c86f..4ac8eab 100644 --- a/src/codex.ts +++ b/src/codex.ts @@ -7,6 +7,7 @@ const FETCH_TIMEOUT_MS = 10_000; interface CodexWindow { used_percent?: unknown; + limit_window_seconds?: unknown; reset_at?: unknown; [key: string]: unknown; } @@ -35,12 +36,18 @@ function clampPercent(value: number): number { function parseWindow( value: unknown, - window: Pick, + fallback: Pick, ): QuotaWindow | undefined { if (!value || typeof value !== "object" || Array.isArray(value)) return undefined; const record = value as Record; const usedPercent = toNumber(record.used_percent); if (usedPercent === undefined) return undefined; + const durationSeconds = toNumber(record.limit_window_seconds); + const window = durationSeconds === 5 * 60 * 60 + ? { id: "five-hour", shortLabel: "5h", longLabel: "5h", resetStyle: "time" as const } + : durationSeconds === 7 * 24 * 60 * 60 + ? { id: "weekly", shortLabel: "7d", longLabel: "Weekly", resetStyle: "weekday-time" as const } + : fallback; const resetRaw = toNumber(record.reset_at); const resetsAt = resetRaw === undefined @@ -66,12 +73,13 @@ function parseCodexBody(body: unknown): Omit Boolean(window)); + if (windows.length === 0) { throw new Error("Invalid Codex usage response: missing rate-limit windows"); } return { plan: typeof record.plan_type === "string" ? record.plan_type : undefined, - windows: [primary, secondary], + windows, }; } diff --git a/src/format.ts b/src/format.ts index d12be93..40da866 100644 --- a/src/format.ts +++ b/src/format.ts @@ -63,13 +63,15 @@ export function formatFooter( if (quota.state === "missing") return theme.fg("dim", "—"); if (quota.state === "error") return theme.fg("dim", "!"); const ids = windowIds ?? quota.windows.slice(0, mode === "minimal" ? 1 : 2).map((window) => window.id); - const windows = ids + const selected = ids .map((id) => quota.windows.find((window) => window.id === id)) .filter((window): window is QuotaWindow => Boolean(window)); + const windows = selected.length > 0 ? selected : quota.windows.slice(0, 1); if (windows.length === 0) return theme.fg("dim", "—"); const stale = quota.state === "stale"; + const showLabels = mode === "full" || selected.length === 0; return windows - .map((window) => formatFooterWindow(window, mode === "full", stale, theme)) + .map((window) => formatFooterWindow(window, showLabels, stale, theme)) .join(theme.fg("dim", " · ")); } diff --git a/tests/codex.test.ts b/tests/codex.test.ts index b075e59..2bb2f22 100644 --- a/tests/codex.test.ts +++ b/tests/codex.test.ts @@ -53,6 +53,30 @@ describe("fetchCodexQuota", () => { } }); + it("accepts a weekly-only response when the 5-hour limit is disabled", async () => { + const body = { + plan_type: "prolite", + rate_limit: { + primary_window: { + used_percent: 34, + limit_window_seconds: 604800, + reset_at: 1752687600, + }, + secondary_window: null, + }, + }; + const restore = mockFetch(() => new Response(JSON.stringify(body), { status: 200 })); + try { + const quota = await fetchCodexQuota(mockStorage()); + assert.equal(quota.state, "live"); + assert.equal(quota.windows.length, 1); + assert.equal(quota.windows[0]?.id, "weekly"); + assert.equal(quota.windows[0]?.usedPercent, 34); + } finally { + restore(); + } + }); + it("returns missing state when credentials are absent", async () => { const quota = await fetchCodexQuota(mockStorage({ noCredential: true })); assert.equal(quota.state, "missing"); diff --git a/tests/format.test.ts b/tests/format.test.ts index ba5af03..96107f9 100644 --- a/tests/format.test.ts +++ b/tests/format.test.ts @@ -32,6 +32,15 @@ describe("footer gauges", () => { assert.equal(formatFooter(quota, "full", plainTheme), "5h ▰▱▱▱ 24% ↻ 3:25 · 7d ▰▱▱▱ 15% ↻ Sun 9:00"); }); + it("falls back to and labels a remaining weekly window", () => { + const quota = liveQuota("codex", 24, 34); + quota.windows = quota.windows.filter((window) => window.id === "weekly"); + assert.equal( + formatFooter(quota, "minimal", plainTheme, ["five-hour"]), + "7d ▰▰▱▱ 34% ↻ Sun 9:00", + ); + }); + it("marks cached quota percentages as stale", () => { const quota = liveQuota("kimi", 48, 35); quota.state = "stale"; -- 2.51.2 From 7058d0c7025867c68034502dfd8f3f0676bb9f4a Mon Sep 17 00:00:00 2001 From: Iury Souza Date: Sun, 12 Jul 2026 21:54:09 +0200 Subject: [PATCH 13/19] feat: rename quota command to token-tank --- README.md | 12 +++++++----- package-lock.json | 4 ++-- package.json | 2 +- src/format.ts | 3 ++- src/index.ts | 6 +++--- tests/format.test.ts | 3 ++- tests/index.test.ts | 14 +++++++------- 7 files changed, 24 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 1fb1525..27e5cdc 100644 --- a/README.md +++ b/README.md @@ -59,9 +59,11 @@ Full mode adds the configured secondary window: | Command | Action | | --- | --- | -| `/quotas` | Toggle detailed quota data for every configured provider | -| `/quotas minimal` | Show only the active provider’s primary window | -| `/quotas full` | Show the active provider’s configured full window set | +| `/token-tank` | Toggle detailed quota data for every configured provider | +| `/token-tank minimal` | Use the compact footer with the primary quota window | +| `/token-tank full` | Use the bigger footer with every configured quota window | + +The details panel also reminds you about `minimal` and `full`, so the larger view is easy to discover. The selected mode is stored in `pi-token-tank.json` under Pi’s agent directory. The file contains only `{ "footerMode": "minimal" | "full" }`—never credentials or quota data. @@ -70,7 +72,7 @@ The selected mode is stored in `pi-token-tank.json` under Pi’s agent directory - Fetches the active provider on session start. - Refreshes after turns and model switches when cached data is older than five minutes. - Routes immediately when the active model changes. -- Opening `/quotas` forces all registered providers to refresh independently. +- Opening `/token-tank` forces all registered providers to refresh independently. - Keeps last-good data and marks it stale if a later request fails. - Shows `—` when credentials are missing and `!` when a request fails without cached data. @@ -87,4 +89,4 @@ npm pack --dry-run - `—`: authenticate the active model provider. - `!`: verify credentials and network access. -- Missing footer segment with a custom footer: the custom `ctx.ui.setFooter()` implementation must render extension statuses. `/quotas` remains available. +- Missing footer segment with a custom footer: the custom `ctx.ui.setFooter()` implementation must render extension statuses. `/token-tank` remains available. diff --git a/package-lock.json b/package-lock.json index 6168ddf..6299a3f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pi-token-tank", - "version": "0.5.1", + "version": "0.6.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pi-token-tank", - "version": "0.5.1", + "version": "0.6.0", "license": "MIT", "devDependencies": { "@earendil-works/pi-coding-agent": "^0.80.6", diff --git a/package.json b/package.json index e4f66e2..2da863c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pi-token-tank", - "version": "0.5.1", + "version": "0.6.0", "description": "Token Tank — provider-aware subscription quota status for Pi", "license": "MIT", "author": "Iury Souza", diff --git a/src/format.ts b/src/format.ts index 40da866..0db9152 100644 --- a/src/format.ts +++ b/src/format.ts @@ -120,7 +120,8 @@ export function formatWidget( const updated = formatUpdatedTime(registry.map((provider) => snapshot[provider.id]?.fetchedAt).find(Boolean)); lines.push(theme.fg("dim", `Updated ${updated}`)); - lines.push(theme.fg("dim", "Run /quotas again to hide.")); + lines.push(theme.fg("dim", "Footer size: /token-tank minimal · /token-tank full")); + lines.push(theme.fg("dim", "Run /token-tank again to hide.")); return lines; } diff --git a/src/index.ts b/src/index.ts index 1607663..a68bf96 100644 --- a/src/index.ts +++ b/src/index.ts @@ -143,7 +143,7 @@ export function createTokenTank( coordinator.clear(); }); - pi.registerCommand("quotas", { + pi.registerCommand("token-tank", { description: "Toggle details or set footer mode: minimal | full", getArgumentCompletions: (prefix) => ["minimal", "full"] .filter((value) => value.startsWith(prefix.trim())) @@ -157,11 +157,11 @@ export function createTokenTank( return; } if (argument) { - ctx.ui.notify("Usage: /quotas [minimal|full]", "warning"); + ctx.ui.notify("Usage: /token-tank [minimal|full]", "warning"); return; } if (ctx.mode !== "tui") { - ctx.ui.notify("/quotas requires TUI mode", "warning"); + ctx.ui.notify("/token-tank requires TUI mode", "warning"); return; } widgetVisible = !widgetVisible; diff --git a/tests/format.test.ts b/tests/format.test.ts index 96107f9..d1693e0 100644 --- a/tests/format.test.ts +++ b/tests/format.test.ts @@ -69,6 +69,7 @@ describe("formatWidget", () => { assert.ok(text.includes("Codex")); assert.ok(text.includes("Kimi")); assert.ok(text.includes("24% used")); - assert.ok(text.includes("Run /quotas again to hide.")); + assert.ok(text.includes("Footer size: /token-tank minimal · /token-tank full")); + assert.ok(text.includes("Run /token-tank again to hide.")); }); }); diff --git a/tests/index.test.ts b/tests/index.test.ts index 63e5d04..59e9feb 100644 --- a/tests/index.test.ts +++ b/tests/index.test.ts @@ -107,7 +107,7 @@ describe("createTokenTank", () => { assert.ok(f.status["pi-token-tank"]?.includes("42%")); }); - it("registers /quotas and not /usage", () => { + it("registers /token-tank and not /usage", () => { fakeAPI(); const registered: string[] = []; const pi = { @@ -117,7 +117,7 @@ describe("createTokenTank", () => { }, } as unknown as ExtensionAPI; createTokenTank(pi, fakeStorage()); - assert.ok(registered.includes("quotas")); + assert.ok(registered.includes("token-tank")); assert.ok(!registered.includes("usage")); }); @@ -134,7 +134,7 @@ describe("createTokenTank", () => { }), ); - it("toggles the /quotas widget", async () => { + it("toggles the /token-tank widget", async () => { const original = globalThis.fetch; globalThis.fetch = (async (url) => { const body = String(url).includes("chatgpt.com") ? codexUsage : kimiUsage; @@ -149,9 +149,9 @@ describe("createTokenTank", () => { : { type: "api_key", key: "token" }, } as unknown as AuthStorageLike; createTokenTank(f.api, storage); - await f.commands.quotas!.handler("", f.ctx); - assert.ok(f.widgets["pi-token-tank"]?.includes("Run /quotas again to hide.")); - await f.commands.quotas!.handler("", f.ctx); + await f.commands["token-tank"]!.handler("", f.ctx); + assert.ok(f.widgets["pi-token-tank"]?.includes("Run /token-tank again to hide.")); + await f.commands["token-tank"]!.handler("", f.ctx); assert.equal(f.widgets["pi-token-tank"], undefined); } finally { globalThis.fetch = original; @@ -182,7 +182,7 @@ describe("createTokenTank", () => { try { const f = fakeAPI(); createTokenTank(f.api, fakeStorage(), path); - await f.commands.quotas!.handler("full", f.ctx); + await f.commands["token-tank"]!.handler("full", f.ctx); assert.deepEqual(JSON.parse(await readFile(path, "utf8")), { footerMode: "full" }); assert.ok(f.status["pi-token-tank"]); } finally { await rm(dir, { recursive: true, force: true }); } -- 2.51.2 From 438877fcfb6bc5baf9accfff1c2fcdcf1e345496 Mon Sep 17 00:00:00 2001 From: Iury Souza Date: Sun, 12 Jul 2026 21:56:04 +0200 Subject: [PATCH 14/19] fix: keep footer-size hint visible --- package-lock.json | 4 ++-- package.json | 2 +- src/format.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6299a3f..95f69e6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pi-token-tank", - "version": "0.6.0", + "version": "0.6.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pi-token-tank", - "version": "0.6.0", + "version": "0.6.1", "license": "MIT", "devDependencies": { "@earendil-works/pi-coding-agent": "^0.80.6", diff --git a/package.json b/package.json index 2da863c..c8d33b4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pi-token-tank", - "version": "0.6.0", + "version": "0.6.1", "description": "Token Tank — provider-aware subscription quota status for Pi", "license": "MIT", "author": "Iury Souza", diff --git a/src/format.ts b/src/format.ts index 0db9152..e61efc9 100644 --- a/src/format.ts +++ b/src/format.ts @@ -83,6 +83,7 @@ export function formatWidget( ): string[] { const lines: string[] = []; lines.push(theme.fg("accent", "Quota usage")); + lines.push(theme.fg("dim", "Footer size: /token-tank minimal · /token-tank full")); lines.push(""); for (const provider of registry) { @@ -120,7 +121,6 @@ export function formatWidget( const updated = formatUpdatedTime(registry.map((provider) => snapshot[provider.id]?.fetchedAt).find(Boolean)); lines.push(theme.fg("dim", `Updated ${updated}`)); - lines.push(theme.fg("dim", "Footer size: /token-tank minimal · /token-tank full")); lines.push(theme.fg("dim", "Run /token-tank again to hide.")); return lines; -- 2.51.2 From a12c280f34c4bac5350669030040fae749e1e4d9 Mon Sep 17 00:00:00 2001 From: Iury Souza Date: Sat, 18 Jul 2026 08:43:13 +0200 Subject: [PATCH 15/19] fix: use Pi public credential APIs --- AGENTS.md | 2 +- ai-artifacts/provider-adapters.md | 5 +- package-lock.json | 36 +++---- package.json | 4 +- src/auth.ts | 152 ++++++++++++++++++------------ src/codex.ts | 9 +- src/index.ts | 42 ++++++--- src/kimi.ts | 27 ++---- src/types.ts | 4 +- tests/auth.test.ts | 106 +++++++++++++++++++++ tests/codex.test.ts | 40 ++++---- tests/coordinator.test.ts | 25 ++--- tests/index.test.ts | 45 ++++----- tests/kimi.test.ts | 80 +++++++--------- 14 files changed, 350 insertions(+), 227 deletions(-) create mode 100644 tests/auth.test.ts diff --git a/AGENTS.md b/AGENTS.md index 7c60127..68ba706 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -7,6 +7,6 @@ Before changing provider contracts, routing, caching, or adding a provider, read Rules: - Use direct read-only quota endpoints. -- Reuse Pi `AuthStorage`; never persist credentials or quota data. +- Resolve keys through `ctx.modelRegistry`; use exported `readStoredCredential` only for read-only metadata. Never persist credentials or quota data. - Keep provider-specific auth and parsing inside its adapter/fetcher. - Run `npm run check`, `npm test`, and `npm pack --dry-run` before shipping. diff --git a/ai-artifacts/provider-adapters.md b/ai-artifacts/provider-adapters.md index 2e180b6..58451ed 100644 --- a/ai-artifacts/provider-adapters.md +++ b/ai-artifacts/provider-adapters.md @@ -46,8 +46,9 @@ const provider: QuotaProvider = { ## Security boundary - Use direct, read-only quota endpoints. -- Reuse Pi `AuthStorage`; do not add a separate login flow. -- Do not read browser cookies, scrape dashboards, probe models, or spawn subprocess fallbacks. +- Resolve keys through `ctx.modelRegistry`; use exported `readStoredCredential` only for read-only credential metadata. +- Let the registered provider own OAuth refresh. A forced 401 refresh may be cached in process, but Token Tank never writes Pi credentials. +- Do not add a separate login flow, read browser cookies, scrape dashboards, probe models, or spawn subprocess fallbacks. - Never persist tokens, account IDs, raw provider responses, or quota data. Current provider-controlled data sources: diff --git a/package-lock.json b/package-lock.json index 95f69e6..18062fe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,8 +9,8 @@ "version": "0.6.1", "license": "MIT", "devDependencies": { - "@earendil-works/pi-coding-agent": "^0.80.6", - "@earendil-works/pi-tui": "^0.80.6", + "@earendil-works/pi-coding-agent": "^0.80.9", + "@earendil-works/pi-tui": "^0.80.9", "@types/node": "^24.12.4", "typescript": "^5.9.3" }, @@ -23,16 +23,16 @@ } }, "node_modules/@earendil-works/pi-coding-agent": { - "version": "0.80.6", - "resolved": "https://registry.npmjs.org/@earendil-works/pi-coding-agent/-/pi-coding-agent-0.80.6.tgz", - "integrity": "sha512-vcfD6tOk402isLl3Cm/qbn2O10TvgroMp1+/fEGM24ZdvETFCdOYv5VZ7m59EI5fPsjfSJh+CpQ5bhBrhfOg7g==", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/@earendil-works/pi-coding-agent/-/pi-coding-agent-0.80.9.tgz", + "integrity": "sha512-Clgx2Bg5NbMcCpGxusSDQwE+GC0g/d6sCBluE9aypPgSgtJ6n8VmZIIT6auXObMskpRgkr+XZ77wG5hf+cSDtg==", "dev": true, "hasShrinkwrap": true, "license": "MIT", "dependencies": { - "@earendil-works/pi-agent-core": "^0.80.6", - "@earendil-works/pi-ai": "^0.80.6", - "@earendil-works/pi-tui": "^0.80.6", + "@earendil-works/pi-agent-core": "^0.80.9", + "@earendil-works/pi-ai": "^0.80.9", + "@earendil-works/pi-tui": "^0.80.9", "@silvia-odwyer/photon-node": "0.3.4", "chalk": "5.6.2", "cross-spawn": "7.0.6", @@ -522,12 +522,12 @@ } }, "node_modules/@earendil-works/pi-coding-agent/node_modules/@earendil-works/pi-agent-core": { - "version": "0.80.6", - "resolved": "https://registry.npmjs.org/@earendil-works/pi-agent-core/-/pi-agent-core-0.80.6.tgz", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/@earendil-works/pi-agent-core/-/pi-agent-core-0.80.9.tgz", "dev": true, "license": "MIT", "dependencies": { - "@earendil-works/pi-ai": "^0.80.6", + "@earendil-works/pi-ai": "^0.80.9", "ignore": "7.0.5", "typebox": "1.1.38", "yaml": "2.9.0" @@ -537,8 +537,8 @@ } }, "node_modules/@earendil-works/pi-coding-agent/node_modules/@earendil-works/pi-ai": { - "version": "0.80.6", - "resolved": "https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.80.6.tgz", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.80.9.tgz", "dev": true, "license": "MIT", "dependencies": { @@ -562,8 +562,8 @@ } }, "node_modules/@earendil-works/pi-coding-agent/node_modules/@earendil-works/pi-tui": { - "version": "0.80.6", - "resolved": "https://registry.npmjs.org/@earendil-works/pi-tui/-/pi-tui-0.80.6.tgz", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/@earendil-works/pi-tui/-/pi-tui-0.80.9.tgz", "dev": true, "license": "MIT", "dependencies": { @@ -1996,9 +1996,9 @@ } }, "node_modules/@earendil-works/pi-tui": { - "version": "0.80.6", - "resolved": "https://registry.npmjs.org/@earendil-works/pi-tui/-/pi-tui-0.80.6.tgz", - "integrity": "sha512-bSuzS4EVSqEPj/Qr/p9eqCESfKsGuDNbl77EGci8Iaqqt/C/XCBZL1MjXaxSWW1NsT5afjp/Cb0NTPzOLv/aPA==", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/@earendil-works/pi-tui/-/pi-tui-0.80.9.tgz", + "integrity": "sha512-unPTW8hRgIHEGjV8mJJ2jqm+fzgnRubes6V2FPk9ay1W9ZLofcpYQ3NDfrODXSci+oKbBpX9JyYUMfQV6jCA/A==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index c8d33b4..7b9f89a 100644 --- a/package.json +++ b/package.json @@ -44,8 +44,8 @@ "@earendil-works/pi-tui": "*" }, "devDependencies": { - "@earendil-works/pi-coding-agent": "^0.80.6", - "@earendil-works/pi-tui": "^0.80.6", + "@earendil-works/pi-coding-agent": "^0.80.9", + "@earendil-works/pi-tui": "^0.80.9", "@types/node": "^24.12.4", "typescript": "^5.9.3" }, diff --git a/src/auth.ts b/src/auth.ts index 909c334..a2777b4 100644 --- a/src/auth.ts +++ b/src/auth.ts @@ -1,13 +1,17 @@ -import { AuthStorage } from "@earendil-works/pi-coding-agent"; -import type { AuthCredential } from "@earendil-works/pi-coding-agent"; +import { + readStoredCredential, + type ModelRegistry, +} from "@earendil-works/pi-coding-agent"; -export type AuthStorageLike = Pick< - AuthStorage, - "get" | "getApiKey" | "reload" | "getOAuthProviders" | "set" +export type ModelRegistryLike = Pick< + ModelRegistry, + "getApiKeyForProvider" | "getRegisteredProviderConfig" >; -export function getAuthStorage(): AuthStorage { - return AuthStorage.create(); +export interface CredentialSourceLike { + getApiKey(providerId: string): Promise; + readCredential(providerId: string): unknown; + refreshOAuthToken(providerId: string, currentKey: string): Promise; } interface OAuthLikeCredential { @@ -16,6 +20,12 @@ interface OAuthLikeCredential { access?: string; refresh?: string; expires?: number; + [key: string]: unknown; +} + +interface TransientCredential { + baseAccess: string; + value: OAuthLikeCredential; } function toOAuthLike(cred: unknown): OAuthLikeCredential | undefined { @@ -23,6 +33,74 @@ function toOAuthLike(cred: unknown): OAuthLikeCredential | undefined { return cred as OAuthLikeCredential; } +export function createCredentialSource( + modelRegistry: ModelRegistryLike, + readCredential: (providerId: string) => unknown = readStoredCredential, +): CredentialSourceLike { + const transient = new Map(); + + function readCurrentCredential(providerId: string): unknown { + const stored = toOAuthLike(readCredential(providerId)); + const cached = transient.get(providerId); + if (stored?.type === "oauth" && cached && cached.baseAccess === stored.access) { + return cached.value; + } + if (cached) transient.delete(providerId); + return stored; + } + + return { + async getApiKey(providerId) { + const stored = toOAuthLike(readCredential(providerId)); + const cached = transient.get(providerId); + if ( + stored?.type === "oauth" && + cached && + cached.baseAccess === stored.access && + cached.value.access + ) { + return cached.value.access; + } + if (cached) transient.delete(providerId); + return modelRegistry.getApiKeyForProvider(providerId); + }, + + readCredential: readCurrentCredential, + + async refreshOAuthToken(providerId, currentKey) { + const stored = toOAuthLike(readCredential(providerId)); + if (stored?.type !== "oauth") return null; + if (stored.access && stored.access !== currentKey && stored.expires && Date.now() < stored.expires) { + return stored.access; + } + if (!stored.refresh) return null; + + const oauth = modelRegistry.getRegisteredProviderConfig(providerId)?.oauth; + if (!oauth) return null; + + try { + const refreshed = await oauth.refreshToken({ + ...stored, + access: stored.access ?? currentKey, + refresh: stored.refresh, + expires: stored.expires ?? 0, + }); + const access = oauth.getApiKey(refreshed); + if (!access || access === currentKey || !refreshed.refresh || !Number.isFinite(refreshed.expires)) { + return null; + } + transient.set(providerId, { + baseAccess: stored.access ?? currentKey, + value: { ...stored, ...refreshed, type: "oauth" }, + }); + return access; + } catch { + return null; + } + }, + }; +} + function extractAccountId(cred: unknown): string | undefined { const o = toOAuthLike(cred); if (o?.accountId && typeof o.accountId === "string" && o.accountId.length > 0) { @@ -49,13 +127,13 @@ export type CodexAuthResult = | { error: string }; export async function getCodexAuth( - storage: AuthStorageLike, + credentials: CredentialSourceLike, ): Promise { - const token = await storage.getApiKey("openai-codex", { includeFallback: false }); + const token = await credentials.getApiKey("openai-codex"); if (!token) { return { error: "Codex credentials missing. Run /login openai-codex." }; } - const cred = storage.get("openai-codex"); + const cred = credentials.readCredential("openai-codex"); let accountId = extractAccountId(cred); if (!accountId) { accountId = extractAccountIdFromJwt(token); @@ -73,9 +151,9 @@ export type KimiAuthResult = | { error: string }; export async function getKimiAuth( - storage: AuthStorageLike, + credentials: CredentialSourceLike, ): Promise { - const token = await storage.getApiKey("kimi-coding"); + const token = await credentials.getApiKey("kimi-coding"); if (!token) { const envKey = process.env.KIMI_API_KEY?.trim(); if (envKey) { @@ -83,54 +161,6 @@ export async function getKimiAuth( } return { error: "Kimi credentials missing. Run /login kimi-coding or set KIMI_API_KEY." }; } - const cred = storage.get("kimi-coding"); + const cred = credentials.readCredential("kimi-coding"); return { token, type: toOAuthLike(cred)?.type === "oauth" ? "oauth" : "api_key" }; } - -export async function refreshKimiToken( - storage: AuthStorageLike, - currentKey: string, -): Promise { - storage.reload(); - const cred = storage.get("kimi-coding"); - if (!cred || toOAuthLike(cred)?.type !== "oauth") { - return null; - } - const oauth = toOAuthLike(cred)!; - if (oauth.access && oauth.access !== currentKey && oauth.expires && Date.now() < oauth.expires) { - return oauth.access; - } - if (!oauth.refresh) return null; - - const providers = storage.getOAuthProviders(); - const provider = providers.find((p) => p.id === "kimi-coding"); - if (!provider) return null; - - try { - const refreshed = await provider.refreshToken({ - access: oauth.access ?? currentKey, - refresh: oauth.refresh, - expires: oauth.expires ?? 0, - }); - storage.reload(); - const after = storage.get("kimi-coding"); - const afterOAuth = toOAuthLike(after); - if (afterOAuth?.access && afterOAuth.access !== currentKey) { - return afterOAuth.access; - } - if (!refreshed.access || !refreshed.refresh || !Number.isFinite(refreshed.expires)) { - return null; - } - const newCred = { - ...cred, - type: "oauth" as const, - access: refreshed.access, - refresh: refreshed.refresh, - expires: refreshed.expires, - }; - storage.set("kimi-coding", newCred as AuthCredential); - return refreshed.access; - } catch { - return null; - } -} diff --git a/src/codex.ts b/src/codex.ts index 4ac8eab..e665844 100644 --- a/src/codex.ts +++ b/src/codex.ts @@ -1,4 +1,4 @@ -import type { AuthStorageLike, CodexAuthResult } from "./auth.js"; +import type { CodexAuthResult, CredentialSourceLike } from "./auth.js"; import { getCodexAuth } from "./auth.js"; import type { ProviderQuota, QuotaWindow } from "./types.js"; @@ -133,8 +133,8 @@ async function performCodexFetch( }; } -export async function fetchCodexQuota(storage: AuthStorageLike): Promise { - let auth: CodexAuthResult = await getCodexAuth(storage); +export async function fetchCodexQuota(credentials: CredentialSourceLike): Promise { + const auth: CodexAuthResult = await getCodexAuth(credentials); if ("error" in auth) { return { provider: "codex", state: "missing", windows: [], error: auth.error }; } @@ -145,8 +145,7 @@ export async function fetchCodexQuota(storage: AuthStorageLike): Promise; } -export function createCoordinator(storage: AuthStorageLike, registry: readonly QuotaProvider[]) { +export function createCoordinator(credentials: CredentialSourceLike, registry: readonly QuotaProvider[]) { const caches = new Map(registry.map((provider) => [provider.id, {}])); const providerById = new Map(registry.map((provider) => [provider.id, provider])); @@ -31,7 +31,7 @@ export function createCoordinator(storage: AuthStorageLike, registry: readonly Q } if (cache.inflight) return cache.inflight; - cache.inflight = provider.fetch(storage) + cache.inflight = provider.fetch(credentials) .then((quota) => { const previous = cache.data; if ( @@ -91,42 +91,53 @@ export function providerForModel(model: ExtensionContext["model"]): ProviderId | export function createTokenTank( pi: ExtensionAPI, - storageOverride?: AuthStorageLike, + credentialSourceOverride?: CredentialSourceLike, preferenceFile?: string, registry: readonly QuotaProvider[] = providers, ) { - const storage = storageOverride ?? getAuthStorage(); - const coordinator = createCoordinator(storage, registry); + let coordinator: ReturnType | undefined; let widgetVisible = false; let footerMode: FooterMode = "minimal"; + function getCoordinator(ctx: ExtensionContext) { + coordinator ??= createCoordinator( + credentialSourceOverride ?? createCredentialSource(ctx.modelRegistry), + registry, + ); + return coordinator; + } + function updateFooter(ctx: ExtensionContext) { const provider = findProviderForModel(ctx.model, registry); if (!provider) { ctx.ui.setStatus(STATUS_KEY, undefined); return; } - const quota = coordinator.getSnapshot()[provider.id]; + const quota = getCoordinator(ctx).getSnapshot()[provider.id]; ctx.ui.setStatus( STATUS_KEY, formatFooter(quota, footerMode, makeThemeLike(ctx.ui), provider.footerWindows[footerMode]), ); } - function updateWidget(ctx: ExtensionContext["ui"]) { + function updateWidget(ctx: ExtensionContext) { if (!widgetVisible) { - ctx.setWidget(WIDGET_KEY, undefined); + ctx.ui.setWidget(WIDGET_KEY, undefined); return; } - ctx.setWidget(WIDGET_KEY, formatWidget(coordinator.getSnapshot(), registry, makeThemeLike(ctx), Date.now())); + ctx.ui.setWidget( + WIDGET_KEY, + formatWidget(getCoordinator(ctx).getSnapshot(), registry, makeThemeLike(ctx.ui), Date.now()), + ); } async function refreshAndRender(ctx: ExtensionContext, force: boolean) { + const activeCoordinator = getCoordinator(ctx); const provider = findProviderForModel(ctx.model, registry); updateFooter(ctx); - if (provider) await coordinator.refresh(provider.id, force); + if (provider) await activeCoordinator.refresh(provider.id, force); updateFooter(ctx); - if (widgetVisible) updateWidget(ctx.ui); + if (widgetVisible) updateWidget(ctx); } pi.on("session_start", async (_event, ctx) => { @@ -140,7 +151,8 @@ export function createTokenTank( pi.on("session_shutdown", async (_event, ctx) => { ctx.ui.setStatus(STATUS_KEY, undefined); ctx.ui.setWidget(WIDGET_KEY, undefined); - coordinator.clear(); + coordinator?.clear(); + coordinator = undefined; }); pi.registerCommand("token-tank", { @@ -165,9 +177,9 @@ export function createTokenTank( return; } widgetVisible = !widgetVisible; - if (widgetVisible) await coordinator.refreshAll(true); + if (widgetVisible) await getCoordinator(ctx).refreshAll(true); updateFooter(ctx); - updateWidget(ctx.ui); + updateWidget(ctx); }, }); } diff --git a/src/kimi.ts b/src/kimi.ts index b321813..536d571 100644 --- a/src/kimi.ts +++ b/src/kimi.ts @@ -1,5 +1,5 @@ -import type { AuthStorageLike, KimiAuthResult } from "./auth.js"; -import { getKimiAuth, refreshKimiToken } from "./auth.js"; +import type { CredentialSourceLike, KimiAuthResult } from "./auth.js"; +import { getKimiAuth } from "./auth.js"; import type { ProviderQuota, QuotaWindow } from "./types.js"; const KIMI_USAGE_URL = "https://api.kimi.com/coding/v1/usages"; @@ -194,8 +194,8 @@ async function performKimiFetch(token: string): Promise { }; } -export async function fetchKimiQuota(storage: AuthStorageLike): Promise { - let auth: KimiAuthResult = await getKimiAuth(storage); +export async function fetchKimiQuota(credentials: CredentialSourceLike): Promise { + const auth: KimiAuthResult = await getKimiAuth(credentials); if ("error" in auth) { return { provider: "kimi", state: "missing", windows: [], error: auth.error }; } @@ -205,21 +205,10 @@ export async function fetchKimiQuota(storage: AuthStorageLike): Promise; + fetch(credentials: CredentialSourceLike): Promise; credentialsHint: string; footerWindows: { minimal: string[]; diff --git a/tests/auth.test.ts b/tests/auth.test.ts new file mode 100644 index 0000000..f7487c1 --- /dev/null +++ b/tests/auth.test.ts @@ -0,0 +1,106 @@ +import assert from "node:assert/strict"; +import { describe, it } from "node:test"; + +import { createCredentialSource, type ModelRegistryLike } from "../src/auth.js"; + +function fakeRegistry(overrides: Partial = {}): ModelRegistryLike { + return { + getApiKeyForProvider: async () => "registry-token", + getRegisteredProviderConfig: () => undefined, + ...overrides, + }; +} + +describe("createCredentialSource", () => { + it("resolves normal API keys through the model registry", async () => { + const source = createCredentialSource( + fakeRegistry({ getApiKeyForProvider: async (providerId) => `${providerId}-token` }), + () => ({ type: "oauth", access: "raw-stored-token", refresh: "refresh", expires: Date.now() + 60_000 }), + ); + + assert.equal(await source.getApiKey("kimi-coding"), "kimi-coding-token"); + }); + + it("reads stored metadata without changing the credential", () => { + const credential = { + type: "oauth", + access: "access-token", + refresh: "refresh-token", + expires: Date.now() + 60_000, + accountId: "account-1", + }; + const before = structuredClone(credential); + const source = createCredentialSource(fakeRegistry(), () => credential); + + assert.deepEqual(source.readCredential("openai-codex"), before); + assert.deepEqual(credential, before); + }); + + it("caches forced OAuth refreshes only in process", async () => { + const stored = { + type: "oauth", + access: "old-access", + refresh: "old-refresh", + expires: Date.now() + 60_000, + }; + let refreshes = 0; + const source = createCredentialSource( + fakeRegistry({ + getApiKeyForProvider: async () => "old-access", + getRegisteredProviderConfig: () => ({ + oauth: { + name: "Kimi", + login: async () => stored, + refreshToken: async (credential) => { + refreshes++; + assert.equal(credential.refresh, "old-refresh"); + return { + ...credential, + access: "new-access", + refresh: "new-refresh", + expires: Date.now() + 120_000, + }; + }, + getApiKey: (credential) => credential.access, + }, + }), + }), + () => stored, + ); + + assert.equal(await source.refreshOAuthToken("kimi-coding", "old-access"), "new-access"); + assert.equal(await source.getApiKey("kimi-coding"), "new-access"); + assert.equal(refreshes, 1); + assert.equal(stored.access, "old-access"); + assert.equal(stored.refresh, "old-refresh"); + }); + + it("never refreshes API-key credentials and swallows OAuth refresh errors", async () => { + let refreshes = 0; + const registry = fakeRegistry({ + getRegisteredProviderConfig: () => ({ + oauth: { + name: "Kimi", + login: async () => ({ access: "", refresh: "", expires: 0 }), + refreshToken: async () => { + refreshes++; + throw new Error("refresh-token secret"); + }, + getApiKey: (credential) => credential.access, + }, + }), + }); + + const apiKey = createCredentialSource(registry, () => ({ type: "api_key", key: "secret" })); + assert.equal(await apiKey.refreshOAuthToken("kimi-coding", "secret"), null); + + const oauth = createCredentialSource(registry, () => ({ + type: "oauth", + access: "old-access", + refresh: "refresh-token", + expires: Date.now() + 60_000, + })); + assert.equal(await oauth.refreshOAuthToken("kimi-coding", "old-access"), null); + assert.equal(refreshes, 1); + }); +}); diff --git a/tests/codex.test.ts b/tests/codex.test.ts index 2bb2f22..eb3ae89 100644 --- a/tests/codex.test.ts +++ b/tests/codex.test.ts @@ -1,17 +1,17 @@ import { describe, it } from "node:test"; import assert from "node:assert/strict"; import { fetchCodexQuota } from "../src/codex.js"; -import type { AuthStorageLike } from "../src/auth.js"; +import type { CredentialSourceLike } from "../src/auth.js"; import codexUsage from "./fixtures/codex-usage.json" with { type: "json" }; -function mockStorage(overrides?: { +function mockCredentials(overrides?: { token?: string; accountId?: string; noCredential?: boolean; -}): AuthStorageLike { +}): CredentialSourceLike { return { getApiKey: async () => (overrides?.noCredential ? undefined : overrides?.token ?? "token"), - get: () => + readCredential: () => overrides?.noCredential ? undefined : { @@ -19,10 +19,8 @@ function mockStorage(overrides?: { access: overrides?.token ?? "token", accountId: overrides?.accountId ?? "acc-1", }, - reload: () => {}, - getOAuthProviders: () => [], - set: () => {}, - } as unknown as AuthStorageLike; + refreshOAuthToken: async () => null, + }; } function mockFetch(response: (url: string, init: RequestInit) => Response | Promise) { @@ -39,7 +37,7 @@ describe("fetchCodexQuota", () => { new Response(JSON.stringify(codexUsage), { status: 200 }) ); try { - const quota = await fetchCodexQuota(mockStorage()); + const quota = await fetchCodexQuota(mockCredentials()); assert.equal(quota.provider, "codex"); assert.equal(quota.state, "live"); assert.equal(quota.plan, "plus"); @@ -67,7 +65,7 @@ describe("fetchCodexQuota", () => { }; const restore = mockFetch(() => new Response(JSON.stringify(body), { status: 200 })); try { - const quota = await fetchCodexQuota(mockStorage()); + const quota = await fetchCodexQuota(mockCredentials()); assert.equal(quota.state, "live"); assert.equal(quota.windows.length, 1); assert.equal(quota.windows[0]?.id, "weekly"); @@ -78,7 +76,7 @@ describe("fetchCodexQuota", () => { }); it("returns missing state when credentials are absent", async () => { - const quota = await fetchCodexQuota(mockStorage({ noCredential: true })); + const quota = await fetchCodexQuota(mockCredentials({ noCredential: true })); assert.equal(quota.state, "missing"); assert.equal(quota.windows.length, 0); }); @@ -86,20 +84,20 @@ describe("fetchCodexQuota", () => { it("retries once when the access token changes after a 401", async () => { let calls = 0; const tokens: string[] = []; - const storage = { - ...mockStorage({ token: "old-token", accountId: "acc-1" }), - getApiKey: async (_provider: string, _opts?: unknown) => { + const credentials = { + ...mockCredentials({ token: "old-token", accountId: "acc-1" }), + getApiKey: async () => { calls++; return calls === 1 ? "old-token" : "new-token"; }, - get: (_provider: string) => { + readCredential: () => { return { type: "oauth", access: calls === 1 ? "old-token" : "new-token", accountId: "acc-1", }; }, - } as unknown as AuthStorageLike; + } as CredentialSourceLike; const restore = mockFetch((_url, init) => { const auth = (init.headers as Record)["Authorization"]; @@ -111,7 +109,7 @@ describe("fetchCodexQuota", () => { }); try { - const quota = await fetchCodexQuota(storage); + const quota = await fetchCodexQuota(credentials); assert.equal(quota.state, "live"); assert.equal(tokens.length, 2); assert.equal(tokens[0], "Bearer old-token"); @@ -121,15 +119,15 @@ describe("fetchCodexQuota", () => { } }); - it("does not retry when the token is unchanged after reload", async () => { + it("does not retry when registry resolution returns the same token", async () => { let calls = 0; - const storage = mockStorage({ token: "same-token", accountId: "acc-1" }); + const credentials = mockCredentials({ token: "same-token", accountId: "acc-1" }); const restore = mockFetch(() => { calls++; return new Response("unauthorized", { status: 401 }); }); try { - const quota = await fetchCodexQuota(storage); + const quota = await fetchCodexQuota(credentials); assert.equal(quota.state, "error"); assert.equal(calls, 1); assert.ok(!quota.error?.includes("same-token")); @@ -143,7 +141,7 @@ describe("fetchCodexQuota", () => { new Response(JSON.stringify({ unexpected: true }), { status: 200 }) ); try { - const quota = await fetchCodexQuota(mockStorage()); + const quota = await fetchCodexQuota(mockCredentials()); assert.equal(quota.state, "error"); assert.ok(!quota.error?.includes("unexpected")); } finally { diff --git a/tests/coordinator.test.ts b/tests/coordinator.test.ts index 856d20d..a1e11b7 100644 --- a/tests/coordinator.test.ts +++ b/tests/coordinator.test.ts @@ -1,14 +1,15 @@ import { describe, it } from "node:test"; import assert from "node:assert/strict"; import { createCoordinator } from "../src/index.js"; -import type { AuthStorageLike } from "../src/auth.js"; +import type { CredentialSourceLike } from "../src/auth.js"; import type { ProviderId, ProviderQuota, QuotaProvider } from "../src/types.js"; -function mockStorage(): AuthStorageLike { +function mockCredentials(): CredentialSourceLike { return { - getApiKey: async () => "token", get: () => undefined, reload: () => {}, - getOAuthProviders: () => [], set: () => {}, - } as unknown as AuthStorageLike; + getApiKey: async () => "token", + readCredential: () => undefined, + refreshOAuthToken: async () => null, + }; } function live(provider: ProviderId, percent: number): ProviderQuota { @@ -35,7 +36,7 @@ function registry(codexFetch: QuotaProvider["fetch"], kimiFetch: QuotaProvider[" describe("createCoordinator", () => { it("fetches every registered provider", async () => { - const c = createCoordinator(mockStorage(), registry( + const c = createCoordinator(mockCredentials(), registry( async () => live("codex", 10), async () => live("kimi", 20), )); const snapshot = await c.refreshAll(true); @@ -44,14 +45,14 @@ describe("createCoordinator", () => { }); it("supports adding a provider without coordinator changes", async () => { - const c = createCoordinator(mockStorage(), [adapter("future", async () => live("future", 30))]); + const c = createCoordinator(mockCredentials(), [adapter("future", async () => live("future", 30))]); const snapshot = await c.refreshAll(true); assert.equal(snapshot.future?.windows[0]?.usedPercent, 30); }); it("deduplicates concurrent refreshes", async () => { let calls = 0; - const c = createCoordinator(mockStorage(), [adapter("codex", async () => { + const c = createCoordinator(mockCredentials(), [adapter("codex", async () => { calls++; await new Promise((resolve) => setTimeout(resolve, 20)); return live("codex", 10); @@ -64,7 +65,7 @@ describe("createCoordinator", () => { it("uses fresh cache", async () => { let calls = 0; - const c = createCoordinator(mockStorage(), [adapter("codex", async () => { + const c = createCoordinator(mockCredentials(), [adapter("codex", async () => { calls++; return live("codex", 10); })]); @@ -75,7 +76,7 @@ describe("createCoordinator", () => { it("keeps last-good data as stale", async () => { let succeed = true; - const c = createCoordinator(mockStorage(), [adapter("codex", async () => succeed + const c = createCoordinator(mockCredentials(), [adapter("codex", async () => succeed ? live("codex", 10) : { provider: "codex", state: "error", windows: [], error: "network down" })]); await c.refreshAll(true); @@ -86,7 +87,7 @@ describe("createCoordinator", () => { }); it("isolates provider failures", async () => { - const c = createCoordinator(mockStorage(), registry( + const c = createCoordinator(mockCredentials(), registry( async () => { throw new Error("secret-bearing failure"); }, async () => live("kimi", 20), )); @@ -96,7 +97,7 @@ describe("createCoordinator", () => { }); it("clears dynamic caches", async () => { - const c = createCoordinator(mockStorage(), [adapter("future", async () => live("future", 30))]); + const c = createCoordinator(mockCredentials(), [adapter("future", async () => live("future", 30))]); await c.refreshAll(true); c.clear(); assert.equal(c.getSnapshot().future?.state, "missing"); diff --git a/tests/index.test.ts b/tests/index.test.ts index 59e9feb..2500c8b 100644 --- a/tests/index.test.ts +++ b/tests/index.test.ts @@ -5,19 +5,17 @@ import { join } from "node:path"; import { tmpdir } from "node:os"; import { createTokenTank, providerForModel } from "../src/index.js"; import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent"; -import type { AuthStorageLike } from "../src/auth.js"; +import type { CredentialSourceLike } from "../src/auth.js"; import type { QuotaProvider } from "../src/types.js"; import codexUsage from "./fixtures/codex-usage.json" with { type: "json" }; import kimiUsage from "./fixtures/kimi-usage.json" with { type: "json" }; -function fakeStorage(): AuthStorageLike { +function fakeCredentials(): CredentialSourceLike { return { getApiKey: async () => "token", - get: () => undefined, - reload: () => {}, - getOAuthProviders: () => [], - set: () => {}, - } as unknown as AuthStorageLike; + readCredential: () => undefined, + refreshOAuthToken: async () => null, + }; } function withMockFetch(fn: () => Promise): () => Promise { @@ -102,12 +100,12 @@ describe("createTokenTank", () => { footerWindows: { minimal: ["monthly"], full: ["monthly"] }, }; const f = fakeAPI("future"); - createTokenTank(f.api, fakeStorage(), undefined, [future]); + createTokenTank(f.api, fakeCredentials(), undefined, [future]); await f.fire("session_start", {}); assert.ok(f.status["pi-token-tank"]?.includes("42%")); }); - it("registers /token-tank and not /usage", () => { + it("registers without eagerly creating credential storage", () => { fakeAPI(); const registered: string[] = []; const pi = { @@ -116,7 +114,7 @@ describe("createTokenTank", () => { registered.push(name); }, } as unknown as ExtensionAPI; - createTokenTank(pi, fakeStorage()); + createTokenTank(pi); assert.ok(registered.includes("token-tank")); assert.ok(!registered.includes("usage")); }); @@ -125,7 +123,7 @@ describe("createTokenTank", () => { "sets footer on session_start", withMockFetch(async () => { const f = fakeAPI(); - createTokenTank(f.api, fakeStorage()); + createTokenTank(f.api, fakeCredentials()); await f.fire("session_start", { type: "session_start", reason: "startup" }); assert.ok(f.status["pi-token-tank"], "status should be set"); f.ctx.model = { provider: "anthropic", id: "claude" } as ExtensionContext["model"]; @@ -142,13 +140,13 @@ describe("createTokenTank", () => { }) as typeof fetch; try { const f = fakeAPI(); - const storage = { - ...fakeStorage(), - get: (provider: string) => provider === "openai-codex" + const credentials = { + ...fakeCredentials(), + readCredential: (provider: string) => provider === "openai-codex" ? { type: "oauth", access: "token", accountId: "acc-1" } : { type: "api_key", key: "token" }, - } as unknown as AuthStorageLike; - createTokenTank(f.api, storage); + } as CredentialSourceLike; + createTokenTank(f.api, credentials); await f.commands["token-tank"]!.handler("", f.ctx); assert.ok(f.widgets["pi-token-tank"]?.includes("Run /token-tank again to hide.")); await f.commands["token-tank"]!.handler("", f.ctx); @@ -163,10 +161,13 @@ describe("createTokenTank", () => { globalThis.fetch = (async (url) => new Response(JSON.stringify(String(url).includes("chatgpt.com") ? codexUsage : kimiUsage))) as typeof fetch; try { const f = fakeAPI("openai-codex"); - const storage = { ...fakeStorage(), get: (provider: string) => provider === "openai-codex" - ? { type: "oauth", access: "token", accountId: "acc-1" } - : { type: "api_key", key: "token" } } as unknown as AuthStorageLike; - createTokenTank(f.api, storage); + const credentials = { + ...fakeCredentials(), + readCredential: (provider: string) => provider === "openai-codex" + ? { type: "oauth", access: "token", accountId: "acc-1" } + : { type: "api_key", key: "token" }, + } as CredentialSourceLike; + createTokenTank(f.api, credentials); await f.fire("session_start", {}); const codexFooter = f.status["pi-token-tank"]; f.ctx.model = { provider: "kimi-coding", id: "kimi" } as ExtensionContext["model"]; @@ -181,7 +182,7 @@ describe("createTokenTank", () => { const path = join(dir, "preference.json"); try { const f = fakeAPI(); - createTokenTank(f.api, fakeStorage(), path); + createTokenTank(f.api, fakeCredentials(), path); await f.commands["token-tank"]!.handler("full", f.ctx); assert.deepEqual(JSON.parse(await readFile(path, "utf8")), { footerMode: "full" }); assert.ok(f.status["pi-token-tank"]); @@ -192,7 +193,7 @@ describe("createTokenTank", () => { "cleans up on session_shutdown", withMockFetch(async () => { const f = fakeAPI(); - createTokenTank(f.api, fakeStorage()); + createTokenTank(f.api, fakeCredentials()); await f.fire("session_start", { type: "session_start", reason: "startup" }); await f.fire("session_shutdown", { type: "session_shutdown", reason: "quit" }); assert.equal(f.status["pi-token-tank"], undefined); diff --git a/tests/kimi.test.ts b/tests/kimi.test.ts index 06d7a49..2965b77 100644 --- a/tests/kimi.test.ts +++ b/tests/kimi.test.ts @@ -1,18 +1,18 @@ import { describe, it } from "node:test"; import assert from "node:assert/strict"; import { fetchKimiQuota } from "../src/kimi.js"; -import type { AuthStorageLike } from "../src/auth.js"; +import type { CredentialSourceLike } from "../src/auth.js"; import kimiUsage from "./fixtures/kimi-usage.json" with { type: "json" }; import kimiNumeric from "./fixtures/kimi-usage-numeric-strings.json" with { type: "json" }; -function mockStorage(overrides?: { +function mockCredentials(overrides?: { token?: string; type?: "oauth" | "api_key"; noCredential?: boolean; -}): AuthStorageLike { +}): CredentialSourceLike { return { getApiKey: async () => (overrides?.noCredential ? undefined : overrides?.token ?? "token"), - get: () => + readCredential: () => overrides?.noCredential ? undefined : overrides?.type === "api_key" @@ -23,10 +23,8 @@ function mockStorage(overrides?: { refresh: "refresh-token", expires: Date.now() + 3600_000, }, - reload: () => {}, - getOAuthProviders: () => [], - set: () => {}, - } as unknown as AuthStorageLike; + refreshOAuthToken: async () => null, + }; } function mockFetch(response: (url: string, init: RequestInit) => Response | Promise) { @@ -41,7 +39,7 @@ describe("fetchKimiQuota", () => { it("parses a valid usage response", async () => { const restore = mockFetch(() => new Response(JSON.stringify(kimiUsage), { status: 200 })); try { - const quota = await fetchKimiQuota(mockStorage()); + const quota = await fetchKimiQuota(mockCredentials()); assert.equal(quota.provider, "kimi"); assert.equal(quota.state, "live"); assert.equal(quota.plan, "Allegro"); @@ -58,7 +56,7 @@ describe("fetchKimiQuota", () => { it("handles numeric strings and derived usage", async () => { const restore = mockFetch(() => new Response(JSON.stringify(kimiNumeric), { status: 200 })); try { - const quota = await fetchKimiQuota(mockStorage()); + const quota = await fetchKimiQuota(mockCredentials()); assert.equal(quota.plan, "Vivace"); assert.equal(quota.windows[1]?.usedPercent, 43); // (200-114)/200 assert.equal(quota.windows[0]?.usedPercent, 22.5); @@ -69,27 +67,27 @@ describe("fetchKimiQuota", () => { it("returns missing state when credentials are absent", async () => { const restore = mockFetch(() => new Response(JSON.stringify(kimiUsage), { status: 200 })); + const originalKey = process.env.KIMI_API_KEY; + delete process.env.KIMI_API_KEY; try { - const quota = await fetchKimiQuota(mockStorage({ noCredential: true })); + const quota = await fetchKimiQuota(mockCredentials({ noCredential: true })); assert.equal(quota.state, "missing"); } finally { restore(); + if (originalKey === undefined) delete process.env.KIMI_API_KEY; + else process.env.KIMI_API_KEY = originalKey; } }); it("forces one OAuth refresh on 401", async () => { - const refreshed: string[] = []; - const provider = { - id: "kimi-coding", - refreshToken: async () => { - refreshed.push("yes"); - return { access: "new-access", refresh: "new-refresh", expires: Date.now() + 3600_000 }; + let refreshes = 0; + const credentials: CredentialSourceLike = { + ...mockCredentials({ token: "old-token", type: "oauth" }), + refreshOAuthToken: async () => { + refreshes++; + return "new-access"; }, }; - const storage = { - ...mockStorage({ token: "old-token", type: "oauth" }), - getOAuthProviders: () => [provider], - } as unknown as AuthStorageLike; const restore = mockFetch((_url, init) => { const auth = (init.headers as Record)["Authorization"]; @@ -100,29 +98,23 @@ describe("fetchKimiQuota", () => { }); try { - const quota = await fetchKimiQuota(storage); + const quota = await fetchKimiQuota(credentials); assert.equal(quota.state, "live"); - assert.equal(refreshed.length, 1); + assert.equal(refreshes, 1); } finally { restore(); } }); it("returns a sanitized error when OAuth refresh fails", async () => { - const provider = { - id: "kimi-coding", - refreshToken: async () => { - throw new Error("refresh-token secret leaked by provider"); - }, + const credentials: CredentialSourceLike = { + ...mockCredentials({ token: "old-token", type: "oauth" }), + refreshOAuthToken: async () => null, }; - const storage = { - ...mockStorage({ token: "old-token", type: "oauth" }), - getOAuthProviders: () => [provider], - } as unknown as AuthStorageLike; const restore = mockFetch(() => new Response("unauthorized", { status: 401 })); try { - const quota = await fetchKimiQuota(storage); + const quota = await fetchKimiQuota(credentials); assert.equal(quota.state, "error"); assert.ok(!quota.error?.includes("refresh-token")); } finally { @@ -131,24 +123,18 @@ describe("fetchKimiQuota", () => { }); it("does not attempt OAuth refresh for API keys", async () => { - const provider = { - id: "kimi-coding", - refreshToken: async () => ({ access: "x", refresh: "y", expires: Date.now() }), - }; - const storage = { - ...mockStorage({ token: "api-key", type: "api_key" }), - getOAuthProviders: () => [provider], - } as unknown as AuthStorageLike; - let refreshed = false; - provider.refreshToken = async () => { - refreshed = true; - return { access: "x", refresh: "y", expires: Date.now() }; + const credentials: CredentialSourceLike = { + ...mockCredentials({ token: "api-key", type: "api_key" }), + refreshOAuthToken: async () => { + refreshed = true; + return "new-access"; + }, }; const restore = mockFetch(() => new Response("unauthorized", { status: 401 })); try { - const quota = await fetchKimiQuota(storage); + const quota = await fetchKimiQuota(credentials); assert.equal(quota.state, "error"); assert.equal(refreshed, false); } finally { @@ -159,7 +145,7 @@ describe("fetchKimiQuota", () => { it("rejects invalid schemas", async () => { const restore = mockFetch(() => new Response(JSON.stringify({ usage: {} }), { status: 200 })); try { - const quota = await fetchKimiQuota(mockStorage()); + const quota = await fetchKimiQuota(mockCredentials()); assert.equal(quota.state, "error"); } finally { restore(); -- 2.51.2 From a430677121f9337da597745f4e3b0dc48da3afb6 Mon Sep 17 00:00:00 2001 From: Iury Souza Date: Sat, 18 Jul 2026 12:20:59 +0200 Subject: [PATCH 16/19] feat(copilot): show monthly quota --- AGENTS.md | 5 +- README.md | 8 + ai-artifacts/provider-adapters.md | 11 +- .../2026-07-18-github-copilot-quota-design.md | 21 ++ package.json | 3 +- src/auth.ts | 36 ++ src/copilot.ts | 203 ++++++++++ src/providers.ts | 9 + tests/auth.test.ts | 97 ++++- tests/copilot.test.ts | 347 ++++++++++++++++++ tests/fixtures/copilot-free-usage.json | 12 + tests/fixtures/copilot-usage.json | 18 + tests/index.test.ts | 17 +- 13 files changed, 778 insertions(+), 9 deletions(-) create mode 100644 docs/plans/2026-07-18-github-copilot-quota-design.md create mode 100644 src/copilot.ts create mode 100644 tests/copilot.test.ts create mode 100644 tests/fixtures/copilot-free-usage.json create mode 100644 tests/fixtures/copilot-usage.json diff --git a/AGENTS.md b/AGENTS.md index 68ba706..d7fb2c0 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -2,11 +2,12 @@ Provider-neutral Pi quota extension. Keep the README user-facing. -Before changing provider contracts, routing, caching, or adding a provider, read [[ai-artifacts/MOC]] and [[ai-artifacts/provider-adapters]]. +Before changing provider contracts, routing, caching, or adding a provider, read [[ai-artifacts/MOC]] and [ai-artifacts/provider-adapters.md](ai-artifacts/provider-adapters.md). Rules: - Use direct read-only quota endpoints. -- Resolve keys through `ctx.modelRegistry`; use exported `readStoredCredential` only for read-only metadata. Never persist credentials or quota data. +- Resolve keys through `ctx.modelRegistry`; use exported `readStoredCredential` only for read-only metadata, except for the explicitly approved callback-scoped Copilot OAuth `refresh` read documented in `ai-artifacts/provider-adapters.md`. +- Never persist credentials, raw responses, or normalized quota. The coordinator may cache normalized quota in memory for five minutes and stale fallback. - Keep provider-specific auth and parsing inside its adapter/fetcher. - Run `npm run check`, `npm test`, and `npm pack --dry-run` before shipping. diff --git a/README.md b/README.md index 27e5cdc..1b4cd0e 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,7 @@ Provider-aware subscription quota status for Pi. It follows the active model and | --- | --- | --- | --- | | `openai`, `openai-codex` | OpenAI Codex | Pi `/login openai-codex` | 5 hour, weekly | | `kimi-coding` | Kimi Coding | Pi `/login kimi-coding` or `KIMI_API_KEY` | 5 hour, weekly | +| `github-copilot` | GitHub Copilot | Pi `/login github-copilot` | Monthly AI credits/premium requests | Unsupported model providers produce no footer status. @@ -32,6 +33,7 @@ Then authenticate the provider you use: ```text /login openai-codex /login kimi-coding +/login github-copilot ``` Reload Pi after installation. @@ -76,6 +78,12 @@ The selected mode is stored in `pi-token-tank.json` under Pi’s agent directory - Keeps last-good data and marks it stale if a later request fails. - Shows `—` when credentials are missing and `!` when a request fails without cached data. +## Provider API notes + +GitHub Copilot quota uses the read-only, undocumented `https://api.github.com/copilot_internal/user` endpoint. It supports GitHub.com, including Enterprise Cloud seats hosted on GitHub.com; custom GitHub Enterprise Server domains are rejected before any request. Token Tank reads Pi's stored GitHub OAuth token only in memory for that request. Tokens and raw responses are never logged, cached, or persisted. Normalized quota uses the existing in-memory five-minute/stale cache and is never persisted. The endpoint may change without notice. + +Cursor is not supported. Pi has no core Cursor provider, and Cursor does not expose a safe official individual-plan quota API. Token Tank will not read browser sessions or scrape Cursor dashboards. + ## Development ```sh diff --git a/ai-artifacts/provider-adapters.md b/ai-artifacts/provider-adapters.md index 58451ed..7986c27 100644 --- a/ai-artifacts/provider-adapters.md +++ b/ai-artifacts/provider-adapters.md @@ -46,17 +46,22 @@ const provider: QuotaProvider = { ## Security boundary - Use direct, read-only quota endpoints. -- Resolve keys through `ctx.modelRegistry`; use exported `readStoredCredential` only for read-only credential metadata. +- Resolve keys through `ctx.modelRegistry`; use exported `readStoredCredential` only for read-only credential metadata, except for the explicitly approved Copilot case below. - Let the registered provider own OAuth refresh. A forced 401 refresh may be cached in process, but Token Tank never writes Pi credentials. - Do not add a separate login flow, read browser cookies, scrape dashboards, probe models, or spawn subprocess fallbacks. -- Never persist tokens, account IDs, raw provider responses, or quota data. +- Never persist tokens, account IDs, raw provider responses, or normalized quota. Tokens and raw responses are never cached; normalized quota intentionally uses the coordinator's in-memory five-minute/stale cache. Current provider-controlled data sources: - Codex: `https://chatgpt.com/backend-api/wham/usage` - Kimi: `https://api.kimi.com/coding/v1/usages` +- GitHub Copilot: `https://api.github.com/copilot_internal/user` -These surfaces may change. Any expansion of this boundary requires an explicit product decision. +Copilot is the only approved exception to metadata-only stored-credential access. Pi's public model registry exposes the short-lived Copilot session token, but GitHub's quota endpoint requires the stored GitHub OAuth token. The adapter may read the OAuth `refresh` field in memory solely for that direct GET. It must never log, return, refresh, mutate, cache, or persist the token or raw response. The fixed endpoint supports GitHub.com, including Enterprise Cloud seats hosted there; stored custom GitHub Enterprise Server domains are rejected before any request. The endpoint is undocumented and may change without notice. + +Cursor remains outside the boundary: Pi has no core Cursor provider, and Cursor has no safe official individual-plan quota API. Do not read browser sessions or scrape Cursor dashboards. + +These surfaces may change. Any further expansion of this boundary requires an explicit product decision. ## OpenCode Go diff --git a/docs/plans/2026-07-18-github-copilot-quota-design.md b/docs/plans/2026-07-18-github-copilot-quota-design.md new file mode 100644 index 0000000..0edd35e --- /dev/null +++ b/docs/plans/2026-07-18-github-copilot-quota-design.md @@ -0,0 +1,21 @@ +# GitHub Copilot quota adapter design + +## Goal + +Show GitHub Copilot individual quota when the active Pi model provider is `github-copilot`, without changing Codex or Kimi behavior. Cursor remains unsupported until Pi has a provider and Cursor exposes a safe official individual quota API. + +## Data flow + +`src/providers.ts` routes `github-copilot` models to a new Copilot adapter. The adapter reads Pi's stored OAuth credential through the existing public read-only credential seam and callback-scopes its `refresh` token to one GET of `https://api.github.com/copilot_internal/user`. It never logs, returns, refreshes, mutates, caches, or persists the token or raw response. Normalized quota intentionally uses the coordinator's existing in-memory five-minute/stale cache and is never persisted. + +The paid parser prefers `quota_snapshots.premium_interactions`, then finite `chat` or `completions` snapshots. It prefers `quota_remaining` over `remaining`, uses finite `percent_remaining` for the percentage, and otherwise derives percentage from counts. Free responses without snapshots pair `monthly_quotas` limits with `limited_user_quotas` remaining, preferring chat then completions. Values are clamped to 0–100% and normalized to at most one decimal. Per-snapshot `quota_reset_at` takes precedence over top-level UTC/date resets; Free uses `limited_user_reset_date`. Unlimited, unavailable, placeholder, or organization-managed snapshots without a finite individual quota produce a live empty result rather than an invented limit. + +## Failure and security behavior + +Missing, non-OAuth, or blank credentials produce the normal missing state and `/login github-copilot` guidance. Stored custom GitHub Enterprise Server domains produce a fixed unsupported state before any network call; GitHub Enterprise Cloud seats hosted on GitHub.com remain supported. The request rejects redirects and applies one ten-second timeout through response-body parsing. HTTP errors expose only status codes; malformed schemas expose fixed parser errors; arbitrary network errors collapse to a generic message. Response bodies and credential values never appear in errors. + +The GitHub.com endpoint is undocumented and may change. This is an explicitly approved narrow exception to Token Tank's metadata-only stored-credential rule because Pi's model registry exposes only the short-lived Copilot session token, while the quota endpoint requires the original GitHub OAuth token. + +## Validation + +Unit tests cover credential immutability, current and alternate response fields, percentage fallback, clamping, reset variants, free-plan fallback, unlimited quotas, malformed bodies, routing, widget visibility, and secret-safe failures. Release checks are `npm run check`, `npm test`, `npm pack --dry-run`, plus the official isolated Pi extension loader when feasible without credentials. diff --git a/package.json b/package.json index 7b9f89a..2350f69 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,8 @@ "usage", "footer", "codex", - "kimi" + "kimi", + "copilot" ], "repository": { "type": "git", diff --git a/src/auth.ts b/src/auth.ts index a2777b4..329b4d5 100644 --- a/src/auth.ts +++ b/src/auth.ts @@ -144,6 +144,42 @@ export async function getCodexAuth( return { token, accountId }; } +export type GitHubCopilotAuthResult = + | { authenticated: true } + | { error: string }; + +function isGitHubDotCom(value: string): boolean { + try { + const trimmed = value.trim(); + const url = new URL(trimmed.includes("://") ? trimmed : `https://${trimmed}`); + return url.hostname.toLowerCase() === "github.com"; + } catch { + return false; + } +} + +export async function withGitHubCopilotAuth( + credentials: CredentialSourceLike, + fetchQuota: (token: string) => Promise, +): Promise { + const credential = toOAuthLike(credentials.readCredential("github-copilot")); + if ( + typeof credential?.enterpriseUrl === "string" && + credential.enterpriseUrl.trim() && + !isGitHubDotCom(credential.enterpriseUrl) + ) { + return { error: "GitHub Copilot quota supports GitHub.com only; custom enterprise domains are unsupported." }; + } + const token = credential?.type === "oauth" && typeof credential.refresh === "string" + ? credential.refresh.trim() + : ""; + if (!token) { + return { error: "GitHub Copilot credentials missing. Run /login github-copilot." }; + } + await fetchQuota(token); + return { authenticated: true }; +} + export type KimiCredentialType = "oauth" | "api_key"; export type KimiAuthResult = diff --git a/src/copilot.ts b/src/copilot.ts new file mode 100644 index 0000000..8bd8fd4 --- /dev/null +++ b/src/copilot.ts @@ -0,0 +1,203 @@ +import type { CredentialSourceLike } from "./auth.js"; +import { withGitHubCopilotAuth } from "./auth.js"; +import type { ProviderQuota, QuotaWindow } from "./types.js"; + +const COPILOT_USAGE_URL = "https://api.github.com/copilot_internal/user"; +const FETCH_TIMEOUT_MS = 10_000; +const COPILOT_HEADERS = { + Accept: "application/json", + "X-GitHub-Api-Version": "2026-06-01", + "User-Agent": "GitHubCopilotChat/0.35.0", + "Editor-Version": "vscode/1.107.0", + "Editor-Plugin-Version": "copilot-chat/0.35.0", + "Copilot-Integration-Id": "vscode-chat", +} as const; + +interface CopilotUsageBody { + copilot_plan?: unknown; + limited_user_quotas?: unknown; + limited_user_reset_date?: unknown; + monthly_quotas?: unknown; + quota_reset_date?: unknown; + quota_reset_date_utc?: unknown; + quota_snapshots?: unknown; + [key: string]: unknown; +} + +function toNumber(value: unknown): number | undefined { + if (typeof value === "number" && Number.isFinite(value)) return value; + if (typeof value === "string" && value.trim()) { + const parsed = Number(value); + if (Number.isFinite(parsed)) return parsed; + } + return undefined; +} + +function clamp(value: number, minimum: number, maximum: number): number { + return Math.max(minimum, Math.min(maximum, value)); +} + +function roundedPercent(value: number): number { + return Math.round(clamp(value, 0, 100) * 10) / 10; +} + +function parseDate(value: unknown): number | undefined { + if (typeof value === "number" && Number.isFinite(value)) { + return value < 1_000_000_000_000 ? value * 1000 : value; + } + if (typeof value !== "string" || !value.trim()) return undefined; + if (/^\d+$/.test(value.trim())) { + const timestamp = Number(value); + return timestamp < 1_000_000_000_000 ? timestamp * 1000 : timestamp; + } + const timestamp = Date.parse(value); + return Number.isFinite(timestamp) ? timestamp : undefined; +} + +function monthlyWindow(usedPercent: number, resetsAt?: number, used?: number, limit?: number): QuotaWindow { + return { + id: "monthly", + shortLabel: "30d", + longLabel: "Monthly", + resetStyle: "weekday-time", + usedPercent: roundedPercent(usedPercent), + used, + limit, + resetsAt, + }; +} + +function parseSnapshot(value: unknown, fallbackResetsAt?: number): QuotaWindow | undefined { + if (!value || typeof value !== "object" || Array.isArray(value)) return undefined; + const record = value as Record; + if (record.unlimited === true || record.has_quota === false) return undefined; + + const hasEntitlement = Object.hasOwn(record, "entitlement"); + const entitlement = toNumber(record.entitlement); + if (hasEntitlement && (entitlement === undefined || entitlement <= 0)) return undefined; + + const hasRemaining = Object.hasOwn(record, "quota_remaining") || Object.hasOwn(record, "remaining"); + const remaining = toNumber(record.quota_remaining) ?? toNumber(record.remaining); + if (hasRemaining && remaining === undefined) return undefined; + + const resetsAt = parseDate(record.quota_reset_at) ?? fallbackResetsAt; + const percentRemaining = toNumber(record.percent_remaining); + if (percentRemaining !== undefined) { + if (entitlement !== undefined && remaining !== undefined) { + const used = clamp(entitlement - remaining, 0, entitlement); + return monthlyWindow(100 - percentRemaining, resetsAt, used, entitlement); + } + if (!hasEntitlement) return monthlyWindow(100 - percentRemaining, resetsAt); + } + + if (entitlement !== undefined && remaining !== undefined) { + const used = clamp(entitlement - remaining, 0, entitlement); + return monthlyWindow((used / entitlement) * 100, resetsAt, used, entitlement); + } + return undefined; +} + +function parseFreeQuota(record: CopilotUsageBody): QuotaWindow | undefined { + if (!record.monthly_quotas || typeof record.monthly_quotas !== "object" || Array.isArray(record.monthly_quotas)) return undefined; + if (!record.limited_user_quotas || typeof record.limited_user_quotas !== "object" || Array.isArray(record.limited_user_quotas)) return undefined; + const limits = record.monthly_quotas as Record; + const remaining = record.limited_user_quotas as Record; + const resetsAt = parseDate(record.limited_user_reset_date); + + for (const key of ["chat", "completions"]) { + const limit = toNumber(limits[key]); + const left = toNumber(remaining[key]); + if (limit !== undefined && limit > 0 && left !== undefined) { + const used = clamp(limit - left, 0, limit); + return monthlyWindow((used / limit) * 100, resetsAt, used, limit); + } + } + return undefined; +} + +function parseCopilotBody( + body: unknown, +): Omit { + if (!body || typeof body !== "object" || Array.isArray(body)) { + throw new Error("Invalid GitHub Copilot usage response: expected object"); + } + const record = body as CopilotUsageBody; + let monthly: QuotaWindow | undefined; + + if (record.quota_snapshots && typeof record.quota_snapshots === "object" && !Array.isArray(record.quota_snapshots)) { + const snapshots = record.quota_snapshots as Record; + const resetsAt = parseDate(record.quota_reset_date_utc) ?? parseDate(record.quota_reset_date); + monthly = ["premium_interactions", "chat", "completions"] + .map((key) => parseSnapshot(snapshots[key], resetsAt)) + .find(Boolean); + } else { + monthly = parseFreeQuota(record); + if (!monthly) throw new Error("Invalid GitHub Copilot usage response: missing quota data"); + } + + return { + plan: typeof record.copilot_plan === "string" && record.copilot_plan.trim() + ? record.copilot_plan + : undefined, + windows: monthly ? [monthly] : [], + }; +} + +async function performCopilotFetch(token: string): Promise { + const controller = new AbortController(); + const id = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS); + try { + const response = await fetch(COPILOT_USAGE_URL, { + method: "GET", + redirect: "error", + signal: controller.signal, + headers: { + ...COPILOT_HEADERS, + Authorization: `Bearer ${token}`, + }, + }); + if (!response.ok) { + throw new Error(`GitHub Copilot quota request failed (${response.status})`); + } + const parsed = parseCopilotBody(await response.json()); + return { + provider: "copilot", + state: "live", + fetchedAt: Date.now(), + ...parsed, + }; + } finally { + clearTimeout(id); + } +} + +function sanitizeError(error: unknown): string { + const message = error instanceof Error ? error.message : ""; + if (message.startsWith("Invalid GitHub Copilot usage response:")) return message; + if (/^GitHub Copilot quota request failed \(\d{3}\)$/.test(message)) return message; + if (error instanceof Error && (error.name === "AbortError" || error.name === "TimeoutError")) { + return "GitHub Copilot quota request timed out"; + } + return "GitHub Copilot quota request failed"; +} + +export async function fetchCopilotQuota(credentials: CredentialSourceLike): Promise { + try { + let quota: ProviderQuota | undefined; + const auth = await withGitHubCopilotAuth(credentials, async (token) => { + quota = await performCopilotFetch(token); + }); + if ("error" in auth) { + const state = auth.error.includes("custom enterprise domains") ? "error" : "missing"; + return { provider: "copilot", state, windows: [], error: auth.error }; + } + return quota!; + } catch (error) { + return { + provider: "copilot", + state: "error", + windows: [], + error: sanitizeError(error), + }; + } +} diff --git a/src/providers.ts b/src/providers.ts index ffcf9dc..708dd54 100644 --- a/src/providers.ts +++ b/src/providers.ts @@ -1,4 +1,5 @@ import { fetchCodexQuota } from "./codex.js"; +import { fetchCopilotQuota } from "./copilot.js"; import { fetchKimiQuota } from "./kimi.js"; import type { QuotaProvider } from "./types.js"; @@ -22,6 +23,14 @@ export const providers: readonly QuotaProvider[] = [ credentialsHint: "Run /login kimi-coding or set KIMI_API_KEY.", footerWindows: { minimal: ["five-hour"], full: ["five-hour", "weekly"] }, }, + { + id: "copilot", + label: "GitHub Copilot", + matchesModel: (model) => model?.provider.toLowerCase() === "github-copilot", + fetch: fetchCopilotQuota, + credentialsHint: "Run /login github-copilot.", + footerWindows: { minimal: ["monthly"], full: ["monthly"] }, + }, ]; export function providerForModel( diff --git a/tests/auth.test.ts b/tests/auth.test.ts index f7487c1..013a961 100644 --- a/tests/auth.test.ts +++ b/tests/auth.test.ts @@ -1,7 +1,12 @@ import assert from "node:assert/strict"; import { describe, it } from "node:test"; -import { createCredentialSource, type ModelRegistryLike } from "../src/auth.js"; +import { + createCredentialSource, + type CredentialSourceLike, + type ModelRegistryLike, + withGitHubCopilotAuth, +} from "../src/auth.js"; function fakeRegistry(overrides: Partial = {}): ModelRegistryLike { return { @@ -11,6 +16,96 @@ function fakeRegistry(overrides: Partial = {}): ModelRegistry }; } +describe("withGitHubCopilotAuth", () => { + it("uses the stored OAuth refresh token without mutating the credential", async () => { + const credential = { + type: "oauth", + access: "copilot-session-token", + refresh: "github-oauth-token", + expires: Date.now() + 60_000, + }; + const before = structuredClone(credential); + const credentials = { + getApiKey: async () => undefined, + readCredential: (providerId: string) => { + assert.equal(providerId, "github-copilot"); + return credential; + }, + refreshOAuthToken: async () => null, + } satisfies CredentialSourceLike; + + let receivedToken = ""; + const result = await withGitHubCopilotAuth(credentials, async (token) => { + receivedToken = token; + }); + + assert.deepEqual(result, { authenticated: true }); + assert.equal(receivedToken, "github-oauth-token"); + assert.deepEqual(credential, before); + }); + + it("allows explicit GitHub.com enterprise URL forms", async () => { + for (const enterpriseUrl of ["github.com", "https://github.com/"]) { + let called = false; + const credentials = { + getApiKey: async () => undefined, + readCredential: () => ({ + type: "oauth", + refresh: "github-oauth-token", + enterpriseUrl, + }), + refreshOAuthToken: async () => null, + } satisfies CredentialSourceLike; + + const result = await withGitHubCopilotAuth(credentials, async () => { called = true; }); + + assert.deepEqual(result, { authenticated: true }); + assert.equal(called, true); + } + }); + + it("rejects a custom enterprise domain before token use", async () => { + let called = false; + const credentials = { + getApiKey: async () => undefined, + readCredential: () => ({ + type: "oauth", + refresh: "github-oauth-token", + enterpriseUrl: "github.example.test", + }), + refreshOAuthToken: async () => null, + } satisfies CredentialSourceLike; + + const result = await withGitHubCopilotAuth(credentials, async () => { called = true; }); + + assert.deepEqual(result, { + error: "GitHub Copilot quota supports GitHub.com only; custom enterprise domains are unsupported.", + }); + assert.equal(called, false); + }); + + it("rejects missing, API-key, and blank OAuth credentials safely", async () => { + for (const credential of [ + undefined, + { type: "api_key", key: "secret-api-key" }, + { type: "oauth", refresh: " " }, + ]) { + let called = false; + const credentials = { + getApiKey: async () => undefined, + readCredential: () => credential, + refreshOAuthToken: async () => null, + } satisfies CredentialSourceLike; + const result = await withGitHubCopilotAuth(credentials, async () => { + called = true; + }); + assert.ok("error" in result); + assert.equal(called, false); + assert.ok(!("error" in result) || !result.error.includes("secret-api-key")); + } + }); +}); + describe("createCredentialSource", () => { it("resolves normal API keys through the model registry", async () => { const source = createCredentialSource( diff --git a/tests/copilot.test.ts b/tests/copilot.test.ts new file mode 100644 index 0000000..3823b21 --- /dev/null +++ b/tests/copilot.test.ts @@ -0,0 +1,347 @@ +import assert from "node:assert/strict"; +import { describe, it } from "node:test"; + +import type { CredentialSourceLike } from "../src/auth.js"; +import { fetchCopilotQuota } from "../src/copilot.js"; +import copilotFreeUsage from "./fixtures/copilot-free-usage.json" with { type: "json" }; +import copilotUsage from "./fixtures/copilot-usage.json" with { type: "json" }; + +const OAUTH_TOKEN = "github-oauth-secret"; + +function mockCredentials(credential: unknown = { + type: "oauth", + access: "copilot-session-token", + refresh: OAUTH_TOKEN, + expires: Date.now() + 60_000, +}): CredentialSourceLike { + return { + getApiKey: async () => undefined, + readCredential: () => credential, + refreshOAuthToken: async () => null, + }; +} + +function mockFetch(response: (url: string, init: RequestInit) => Response | Promise) { + const original = globalThis.fetch; + globalThis.fetch = (async (url, init) => response(url as string, init as RequestInit)) as typeof fetch; + return () => { + globalThis.fetch = original; + }; +} + +function response(body: unknown): Response { + return new Response(JSON.stringify(body), { status: 200 }); +} + +describe("fetchCopilotQuota", () => { + it("fetches and parses the monthly premium-interactions quota", async () => { + const restore = mockFetch((url, init) => { + assert.equal(url, "https://api.github.com/copilot_internal/user"); + assert.equal(init.method, "GET"); + assert.equal(init.redirect, "error"); + assert.ok(init.signal instanceof AbortSignal); + const headers = init.headers as Record; + assert.equal(headers.Authorization, `Bearer ${OAUTH_TOKEN}`); + assert.equal(headers.Accept, "application/json"); + assert.equal(headers["Copilot-Integration-Id"], "vscode-chat"); + return response(copilotUsage); + }); + try { + const quota = await fetchCopilotQuota(mockCredentials()); + assert.equal(quota.provider, "copilot"); + assert.equal(quota.state, "live"); + assert.equal(quota.plan, "individual_pro"); + assert.equal(quota.windows.length, 1); + assert.deepEqual(quota.windows[0], { + id: "monthly", + shortLabel: "30d", + longLabel: "Monthly", + resetStyle: "weekday-time", + usedPercent: 25, + used: 75, + limit: 300, + resetsAt: Date.parse("2026-08-01"), + }); + } finally { + restore(); + } + }); + + it("prefers quota_remaining and server percentage without float artifacts", async () => { + const body = { + quota_reset_date: "2026-08-01", + quota_reset_date_utc: "2026-08-01T12:30:00Z", + quota_snapshots: { + premium_interactions: { + entitlement: 100, + remaining: 50, + quota_remaining: 12.25, + percent_remaining: 33.34, + }, + }, + }; + const restore = mockFetch(() => response(body)); + try { + const quota = await fetchCopilotQuota(mockCredentials()); + assert.equal(quota.windows[0]?.usedPercent, 66.7); + assert.equal(quota.windows[0]?.used, 87.75); + assert.equal(quota.windows[0]?.limit, 100); + assert.equal(quota.windows[0]?.resetsAt, Date.parse("2026-08-01T12:30:00Z")); + } finally { + restore(); + } + }); + + it("parses paired Free limits and remaining values without snapshots", async () => { + const restore = mockFetch(() => response(copilotFreeUsage)); + try { + const quota = await fetchCopilotQuota(mockCredentials()); + assert.equal(quota.plan, "free"); + assert.deepEqual(quota.windows[0], { + id: "monthly", + shortLabel: "30d", + longLabel: "Monthly", + resetStyle: "weekday-time", + usedPercent: 76, + used: 38, + limit: 50, + resetsAt: Date.parse("2026-09-01T00:00:00Z"), + }); + } finally { + restore(); + } + }); + + it("uses percent_remaining when exact counts are unavailable", async () => { + const restore = mockFetch(() => response({ + quota_snapshots: { premium_interactions: { percent_remaining: "37.5" } }, + })); + try { + const quota = await fetchCopilotQuota(mockCredentials()); + assert.equal(quota.windows[0]?.usedPercent, 62.5); + assert.equal(quota.windows[0]?.used, undefined); + assert.equal(quota.windows[0]?.limit, undefined); + } finally { + restore(); + } + }); + + it("clamps exact and percentage-derived quota pressure", async () => { + const bodies = [ + { quota_snapshots: { premium_interactions: { entitlement: 100, remaining: 150 } } }, + { quota_snapshots: { premium_interactions: { entitlement: 100, remaining: -20 } } }, + { quota_snapshots: { premium_interactions: { percent_remaining: -10 } } }, + { quota_snapshots: { premium_interactions: { percent_remaining: 120 } } }, + ]; + const expected = [0, 100, 100, 0]; + let call = 0; + const restore = mockFetch(() => response(bodies[call++])); + try { + for (const usedPercent of expected) { + const quota = await fetchCopilotQuota(mockCredentials()); + assert.equal(quota.windows[0]?.usedPercent, usedPercent); + } + } finally { + restore(); + } + }); + + it("falls back to a finite free-plan chat quota", async () => { + const restore = mockFetch(() => response({ + copilot_plan: "free", + quota_reset_date: "2026-08-01", + quota_snapshots: { + chat: { entitlement: 50, remaining: 10 }, + completions: { unlimited: true }, + }, + })); + try { + const quota = await fetchCopilotQuota(mockCredentials()); + assert.equal(quota.state, "live"); + assert.equal(quota.windows[0]?.usedPercent, 80); + assert.equal(quota.windows[0]?.used, 40); + assert.equal(quota.windows[0]?.limit, 50); + } finally { + restore(); + } + }); + + it("skips invalid snapshots and retains finite chat/completions fallback", async () => { + const invalidSnapshots = [ + { unlimited: true, percent_remaining: 12 }, + { has_quota: false, percent_remaining: 12 }, + { entitlement: -1, percent_remaining: 12 }, + { entitlement: 0, percent_remaining: 12 }, + { entitlement: "managed", percent_remaining: 12 }, + { entitlement: Number.POSITIVE_INFINITY, percent_remaining: 12 }, + { entitlement: 100, remaining: "managed", percent_remaining: 12 }, + ]; + let call = 0; + const restore = mockFetch(() => response({ + quota_snapshots: { + premium_interactions: invalidSnapshots[call++], + chat: { entitlement: 50, remaining: 10 }, + }, + })); + try { + for (const _ of invalidSnapshots) { + const quota = await fetchCopilotQuota(mockCredentials()); + assert.equal(quota.windows[0]?.usedPercent, 80); + } + } finally { + restore(); + } + }); + + it("allows percent-only fallback only when entitlement is absent", async () => { + const restore = mockFetch(() => response({ + quota_snapshots: { + premium_interactions: { entitlement: "managed", percent_remaining: 25 }, + chat: { percent_remaining: 37.5 }, + }, + })); + try { + const quota = await fetchCopilotQuota(mockCredentials()); + assert.equal(quota.windows[0]?.usedPercent, 62.5); + } finally { + restore(); + } + }); + + it("prefers snapshot reset seconds over top-level date variants", async () => { + const resetSeconds = 1_788_134_400; + const restore = mockFetch(() => response({ + quota_reset_date: "2026-08-01", + quota_reset_date_utc: "2026-08-02T00:00:00Z", + quota_snapshots: { + premium_interactions: { entitlement: 100, remaining: 50, quota_reset_at: resetSeconds }, + }, + })); + try { + const quota = await fetchCopilotQuota(mockCredentials()); + assert.equal(quota.windows[0]?.resetsAt, resetSeconds * 1000); + } finally { + restore(); + } + }); + + it("keeps the abort timer alive while consuming the response body", async () => { + const originalSetTimeout = globalThis.setTimeout; + const originalClearTimeout = globalThis.clearTimeout; + let cleared = false; + globalThis.setTimeout = (() => 123 as unknown as NodeJS.Timeout) as unknown as typeof setTimeout; + globalThis.clearTimeout = (() => { cleared = true; }) as typeof clearTimeout; + const restore = mockFetch((_url, init) => ({ + ok: true, + json: async () => { + assert.equal(cleared, false); + assert.ok(init.signal instanceof AbortSignal); + return copilotUsage; + }, + }) as Response); + try { + const quota = await fetchCopilotQuota(mockCredentials()); + assert.equal(quota.state, "live"); + assert.equal(cleared, true); + } finally { + restore(); + globalThis.setTimeout = originalSetTimeout; + globalThis.clearTimeout = originalClearTimeout; + } + }); + + it("fetches with an explicit GitHub.com enterprise URL", async () => { + let fetches = 0; + const restore = mockFetch(() => { + fetches += 1; + return response(copilotUsage); + }); + try { + const quota = await fetchCopilotQuota(mockCredentials({ + type: "oauth", + refresh: OAUTH_TOKEN, + enterpriseUrl: "https://github.com/", + })); + assert.equal(quota.state, "live"); + assert.equal(quota.windows[0]?.id, "monthly"); + assert.equal(fetches, 1); + } finally { + restore(); + } + }); + + it("rejects custom enterprise domains before any network call", async () => { + let fetches = 0; + const restore = mockFetch(() => { + fetches += 1; + return response(copilotUsage); + }); + try { + const quota = await fetchCopilotQuota(mockCredentials({ + type: "oauth", + refresh: OAUTH_TOKEN, + enterpriseUrl: "https://github.example.test", + })); + assert.equal(quota.state, "error"); + assert.equal(quota.error, "GitHub Copilot quota supports GitHub.com only; custom enterprise domains are unsupported."); + assert.equal(fetches, 0); + } finally { + restore(); + } + }); + + it("returns missing without a supported OAuth credential or network call", async () => { + let fetched = false; + const restore = mockFetch(() => { + fetched = true; + return response(copilotUsage); + }); + try { + const quota = await fetchCopilotQuota(mockCredentials({ type: "api_key", key: "secret-key" })); + assert.equal(quota.state, "missing"); + assert.equal(fetched, false); + assert.ok(!quota.error?.includes("secret-key")); + } finally { + restore(); + } + }); + + it("rejects malformed responses without exposing raw bodies", async () => { + const restore = mockFetch(() => response({ quota_snapshots: "raw-secret-body" })); + try { + const quota = await fetchCopilotQuota(mockCredentials()); + assert.equal(quota.state, "error"); + assert.ok(quota.error?.includes("missing quota data")); + assert.ok(!quota.error?.includes("raw-secret-body")); + assert.ok(!quota.error?.includes(OAUTH_TOKEN)); + } finally { + restore(); + } + }); + + it("sanitizes HTTP and thrown errors without reading secrets or bodies", async () => { + let restore = mockFetch(() => new Response("private-response-body", { status: 401 })); + try { + const quota = await fetchCopilotQuota(mockCredentials()); + assert.equal(quota.state, "error"); + assert.equal(quota.error, "GitHub Copilot quota request failed (401)"); + assert.ok(!quota.error.includes("private-response-body")); + assert.ok(!quota.error.includes(OAUTH_TOKEN)); + } finally { + restore(); + } + + restore = mockFetch(() => { + throw new Error(`network failed ${OAUTH_TOKEN} private-response-body`); + }); + try { + const quota = await fetchCopilotQuota(mockCredentials()); + assert.equal(quota.state, "error"); + assert.equal(quota.error, "GitHub Copilot quota request failed"); + assert.ok(!quota.error.includes(OAUTH_TOKEN)); + assert.ok(!quota.error.includes("private-response-body")); + } finally { + restore(); + } + }); +}); diff --git a/tests/fixtures/copilot-free-usage.json b/tests/fixtures/copilot-free-usage.json new file mode 100644 index 0000000..4c0be52 --- /dev/null +++ b/tests/fixtures/copilot-free-usage.json @@ -0,0 +1,12 @@ +{ + "copilot_plan": "free", + "limited_user_quotas": { + "chat": 12, + "completions": 900 + }, + "monthly_quotas": { + "chat": 50, + "completions": 2000 + }, + "limited_user_reset_date": "2026-09-01T00:00:00Z" +} diff --git a/tests/fixtures/copilot-usage.json b/tests/fixtures/copilot-usage.json new file mode 100644 index 0000000..054dbd0 --- /dev/null +++ b/tests/fixtures/copilot-usage.json @@ -0,0 +1,18 @@ +{ + "copilot_plan": "individual_pro", + "quota_reset_date": "2026-08-01", + "quota_snapshots": { + "premium_interactions": { + "entitlement": 300, + "remaining": 225, + "percent_remaining": 75, + "unlimited": false + }, + "chat": { + "unlimited": true + }, + "completions": { + "unlimited": true + } + } +} diff --git a/tests/index.test.ts b/tests/index.test.ts index 2500c8b..7d8146c 100644 --- a/tests/index.test.ts +++ b/tests/index.test.ts @@ -8,6 +8,7 @@ import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-a import type { CredentialSourceLike } from "../src/auth.js"; import type { QuotaProvider } from "../src/types.js"; import codexUsage from "./fixtures/codex-usage.json" with { type: "json" }; +import copilotUsage from "./fixtures/copilot-usage.json" with { type: "json" }; import kimiUsage from "./fixtures/kimi-usage.json" with { type: "json" }; function fakeCredentials(): CredentialSourceLike { @@ -81,6 +82,7 @@ describe("createTokenTank", () => { assert.equal(providerForModel({ provider: "openai", id: "gpt" } as ExtensionContext["model"]), "codex"); assert.equal(providerForModel({ provider: "openai-codex", id: "gpt" } as ExtensionContext["model"]), "codex"); assert.equal(providerForModel({ provider: "kimi-coding", id: "kimi" } as ExtensionContext["model"]), "kimi"); + assert.equal(providerForModel({ provider: "github-copilot", id: "gpt" } as ExtensionContext["model"]), "copilot"); assert.equal(providerForModel({ provider: "anthropic", id: "claude" } as ExtensionContext["model"]), undefined); }); @@ -135,7 +137,12 @@ describe("createTokenTank", () => { it("toggles the /token-tank widget", async () => { const original = globalThis.fetch; globalThis.fetch = (async (url) => { - const body = String(url).includes("chatgpt.com") ? codexUsage : kimiUsage; + const value = String(url); + const body = value.includes("chatgpt.com") + ? codexUsage + : value.includes("api.github.com") + ? copilotUsage + : kimiUsage; return new Response(JSON.stringify(body), { status: 200 }); }) as typeof fetch; try { @@ -144,10 +151,16 @@ describe("createTokenTank", () => { ...fakeCredentials(), readCredential: (provider: string) => provider === "openai-codex" ? { type: "oauth", access: "token", accountId: "acc-1" } - : { type: "api_key", key: "token" }, + : provider === "github-copilot" + ? { type: "oauth", access: "copilot-session-token", refresh: "github-oauth-token" } + : { type: "api_key", key: "token" }, } as CredentialSourceLike; createTokenTank(f.api, credentials); await f.commands["token-tank"]!.handler("", f.ctx); + const widget = f.widgets["pi-token-tank"]?.join("\n") ?? ""; + assert.ok(widget.includes("GitHub Copilot")); + assert.ok(widget.includes("Monthly")); + assert.ok(widget.includes("25% used")); assert.ok(f.widgets["pi-token-tank"]?.includes("Run /token-tank again to hide.")); await f.commands["token-tank"]!.handler("", f.ctx); assert.equal(f.widgets["pi-token-tank"], undefined); -- 2.51.2 From cbdb50c65c4d81d69bb6593d6d52af243b379ada Mon Sep 17 00:00:00 2001 From: Iury Souza Date: Sat, 18 Jul 2026 14:28:10 +0200 Subject: [PATCH 17/19] feat(cursor): show dashboard quota --- AGENTS.md | 1 + README.md | 27 +- ai-artifacts/provider-adapters.md | 9 +- docs/plans/2026-07-18-cursor-quota-design.md | 59 ++++ package.json | 3 +- src/cursor.ts | 234 ++++++++++++++++ src/index.ts | 78 +++++- src/providers.ts | 25 ++ tests/cursor.test.ts | 270 +++++++++++++++++++ tests/fixtures/cursor-enterprise-usage.json | 23 ++ tests/fixtures/cursor-usage.json | 24 ++ tests/format.test.ts | 16 ++ tests/index.test.ts | 221 ++++++++++++++- tests/loader.test.ts | 62 +++++ 14 files changed, 1030 insertions(+), 22 deletions(-) create mode 100644 docs/plans/2026-07-18-cursor-quota-design.md create mode 100644 src/cursor.ts create mode 100644 tests/cursor.test.ts create mode 100644 tests/fixtures/cursor-enterprise-usage.json create mode 100644 tests/fixtures/cursor-usage.json create mode 100644 tests/loader.test.ts diff --git a/AGENTS.md b/AGENTS.md index d7fb2c0..f190abe 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -8,6 +8,7 @@ Rules: - Use direct read-only quota endpoints. - Resolve keys through `ctx.modelRegistry`; use exported `readStoredCredential` only for read-only metadata, except for the explicitly approved callback-scoped Copilot OAuth `refresh` read documented in `ai-artifacts/provider-adapters.md`. +- Cursor is the second explicit exception: detect provider id `cursor` only through Pi ModelRegistry. Capture an explicitly supplied `CURSOR_SESSION_TOKEN` when the extension registers, delete it from `process.env` before Pi tools run, and keep it only in process memory so extension reloads retain auth. Never discover browser cookies or read Cursor Desktop/Agent auth databases. - Never persist credentials, raw responses, or normalized quota. The coordinator may cache normalized quota in memory for five minutes and stale fallback. - Keep provider-specific auth and parsing inside its adapter/fetcher. - Run `npm run check`, `npm test`, and `npm pack --dry-run` before shipping. diff --git a/README.md b/README.md index 1b4cd0e..2bbd931 100644 --- a/README.md +++ b/README.md @@ -19,8 +19,9 @@ Provider-aware subscription quota status for Pi. It follows the active model and | `openai`, `openai-codex` | OpenAI Codex | Pi `/login openai-codex` | 5 hour, weekly | | `kimi-coding` | Kimi Coding | Pi `/login kimi-coding` or `KIMI_API_KEY` | 5 hour, weekly | | `github-copilot` | GitHub Copilot | Pi `/login github-copilot` | Monthly AI credits/premium requests | +| `cursor` | Cursor | Registered Pi Cursor provider + `CURSOR_SESSION_TOKEN` | Billing-cycle total, Auto, API | -Unsupported model providers produce no footer status. +Unsupported model providers produce no footer status. Cursor appears only when Pi reports a registered `cursor` provider or a Cursor model is active. ## Install @@ -36,7 +37,21 @@ Then authenticate the provider you use: /login github-copilot ``` -Reload Pi after installation. +### Cursor setup + +Token Tank detects Cursor through Pi's public ModelRegistry. Install and configure a Pi extension that registers provider id `cursor`, such as `pi-cursor-sdk`; Token Tank does not depend on or import it. + +Cursor's SDK API key cannot read dashboard quota. For personal quota, copy the **value only** of the `WorkosCursorSessionToken` cookie from a signed-in `cursor.com` browser session and expose it to the process that launches Pi: + +```sh +read -rs CURSOR_SESSION_TOKEN +CURSOR_SESSION_TOKEN="$CURSOR_SESSION_TOKEN" pi +unset CURSOR_SESSION_TOKEN +``` + +The value is a sensitive, short-lived browser session credential. The shell variable is not broadly exported. Token Tank captures it when the extension registers, immediately removes it from Pi's `process.env` so tools do not inherit it, and keeps it only in process memory across extension reloads. It never discovers, refreshes, logs, or persists it. An expired value shows `—`, or a stale last-good result when one exists, until Pi restarts with a replacement. Do not put the value in project files or command-line arguments. + +Reload Pi after installation or environment changes. ## Footer modes @@ -46,7 +61,7 @@ Minimal mode is the default and shows the provider’s primary window: ▰▱▱▱ 24% ↻ 3:25 ``` -Full mode adds the configured secondary window: +Full mode adds the configured detail windows: ```text 5h ▰▱▱▱ 24% ↻ 3:25 · 7d ▰▱▱▱ 15% ↻ Sun 9:00 @@ -82,7 +97,9 @@ The selected mode is stored in `pi-token-tank.json` under Pi’s agent directory GitHub Copilot quota uses the read-only, undocumented `https://api.github.com/copilot_internal/user` endpoint. It supports GitHub.com, including Enterprise Cloud seats hosted on GitHub.com; custom GitHub Enterprise Server domains are rejected before any request. Token Tank reads Pi's stored GitHub OAuth token only in memory for that request. Tokens and raw responses are never logged, cached, or persisted. Normalized quota uses the existing in-memory five-minute/stale cache and is never persisted. The endpoint may change without notice. -Cursor is not supported. Pi has no core Cursor provider, and Cursor does not expose a safe official individual-plan quota API. Token Tank will not read browser sessions or scrape Cursor dashboards. +Cursor quota uses the read-only, undocumented `https://cursor.com/api/usage-summary` dashboard endpoint. Detection uses only Pi's public ModelRegistry (`cursor` registered or active); package/filesystem detection is never used. Authentication is explicit opt-in through `CURSOR_SESSION_TOKEN`; Token Tank does not inspect browser cookie stores, Cursor Desktop/Agent auth databases, or `pi-cursor-sdk` internals. The Pi Cursor API key and `pi-cursor-sdk-cursor-api-key-placeholder` are never treated as dashboard auth. + +The adapter prefers Cursor's own total plan percentage, then a finite plan ratio, Enterprise personal cap, or Enterprise pooled ratio. It does not infer quota from model calls. The session token is retained only in the non-environment process slot described above and is never logged or persisted. Raw responses are never logged, cached, or persisted; only normalized quota enters the existing process-memory five-minute/stale cache. The private endpoint may change without notice. ## Development @@ -95,6 +112,6 @@ npm pack --dry-run ## Troubleshooting -- `—`: authenticate the active model provider. +- `—`: authenticate the active model provider; for Cursor, refresh `CURSOR_SESSION_TOKEN`. - `!`: verify credentials and network access. - Missing footer segment with a custom footer: the custom `ctx.ui.setFooter()` implementation must render extension statuses. `/token-tank` remains available. diff --git a/ai-artifacts/provider-adapters.md b/ai-artifacts/provider-adapters.md index 7986c27..0913440 100644 --- a/ai-artifacts/provider-adapters.md +++ b/ai-artifacts/provider-adapters.md @@ -10,7 +10,7 @@ - a safe credential hint - ordered window IDs for minimal and full footer modes -The generic coordinator derives per-provider caches from the registry. It handles freshness, in-flight deduplication, independent refreshes, stale last-good fallback, snapshots, and cleanup. Formatting consumes normalized window metadata; it must not branch on provider IDs. +The generic coordinator derives per-provider caches from the runtime registry. `providersForRuntime()` adds Cursor only when Pi's public ModelRegistry reports provider id `cursor` or the active model uses it; an absent Cursor extension therefore changes nothing. The coordinator handles freshness, in-flight deduplication, independent refreshes, stale last-good fallback, snapshots, and cleanup. Formatting consumes normalized window metadata; it must not branch on provider IDs. ## Normalized data @@ -48,18 +48,19 @@ const provider: QuotaProvider = { - Use direct, read-only quota endpoints. - Resolve keys through `ctx.modelRegistry`; use exported `readStoredCredential` only for read-only credential metadata, except for the explicitly approved Copilot case below. - Let the registered provider own OAuth refresh. A forced 401 refresh may be cached in process, but Token Tank never writes Pi credentials. -- Do not add a separate login flow, read browser cookies, scrape dashboards, probe models, or spawn subprocess fallbacks. -- Never persist tokens, account IDs, raw provider responses, or normalized quota. Tokens and raw responses are never cached; normalized quota intentionally uses the coordinator's in-memory five-minute/stale cache. +- Do not add a separate login flow, automatically read browser cookies, scrape dashboard pages, probe models, or spawn subprocess fallbacks. +- Never persist tokens, account IDs, raw provider responses, or normalized quota. Raw responses are never cached; normalized quota intentionally uses the coordinator's in-memory five-minute/stale cache. The Cursor session token is retained only in the process-only slot documented below, never in the coordinator cache. Current provider-controlled data sources: - Codex: `https://chatgpt.com/backend-api/wham/usage` - Kimi: `https://api.kimi.com/coding/v1/usages` - GitHub Copilot: `https://api.github.com/copilot_internal/user` +- Cursor: `https://cursor.com/api/usage-summary` Copilot is the only approved exception to metadata-only stored-credential access. Pi's public model registry exposes the short-lived Copilot session token, but GitHub's quota endpoint requires the stored GitHub OAuth token. The adapter may read the OAuth `refresh` field in memory solely for that direct GET. It must never log, return, refresh, mutate, cache, or persist the token or raw response. The fixed endpoint supports GitHub.com, including Enterprise Cloud seats hosted there; stored custom GitHub Enterprise Server domains are rejected before any request. The endpoint is undocumented and may change without notice. -Cursor remains outside the boundary: Pi has no core Cursor provider, and Cursor has no safe official individual-plan quota API. Do not read browser sessions or scrape Cursor dashboards. +Cursor is an explicitly approved private-endpoint exception. Runtime detection uses only `ctx.modelRegistry.getRegisteredProviderIds()` and the active model provider; Token Tank never scans packages or filesystems. At extension registration, Token Tank captures the value supplied in `CURSOR_SESSION_TOKEN`, stores it in a process-only non-environment slot that survives extension reloads, and deletes it from `process.env` so Pi tools cannot inherit it. The adapter validates the captured value against header injection and sends it as `WorkosCursorSessionToken` to the read-only dashboard usage summary. It never discovers browser cookies, reads Cursor Desktop/Agent auth databases, imports `pi-cursor-sdk` or `@cursor/sdk`, probes a model, refreshes the session, or treats the SDK placeholder as auth. Cursor's own total percentage wins; finite plan, Enterprise personal, and Enterprise pooled ratios are ordered fallbacks. The endpoint is undocumented and may change without notice. These surfaces may change. Any further expansion of this boundary requires an explicit product decision. diff --git a/docs/plans/2026-07-18-cursor-quota-design.md b/docs/plans/2026-07-18-cursor-quota-design.md new file mode 100644 index 0000000..d37e629 --- /dev/null +++ b/docs/plans/2026-07-18-cursor-quota-design.md @@ -0,0 +1,59 @@ +# Cursor quota design + +## Goal + +Show truthful Cursor personal and Enterprise quota only when a Pi extension registers provider id `cursor`. Keep Token Tank standalone and leave behavior unchanged when Cursor is absent. + +## Detection + +At runtime, build the provider registry from Pi's public ModelRegistry. Add Cursor when `getRegisteredProviderIds()` includes `cursor` or the active model provider is `cursor`. This matches `pi-cursor-sdk`, which calls `pi.registerProvider("cursor", ...)`, without importing or depending on that package. + +Provider registration proves availability, not authentication or quota. The `pi-cursor-sdk-cursor-api-key-placeholder` sentinel must never count as configured quota auth. + +## Data and authentication + +Cursor exposes no official personal quota API. The signed-in dashboard uses the private read-only endpoint: + +```text +GET https://cursor.com/api/usage-summary +``` + +The user explicitly approved this private-dashboard path. Token Tank accepts only an explicitly supplied `CURSOR_SESSION_TOKEN`, representing the value of the `WorkosCursorSessionToken` cookie. It captures the value when the extension registers, moves it into a process-only non-environment slot that survives extension reloads, and immediately deletes it from `process.env`, preventing Pi tools and child processes from inheriting it. It does not inspect browser cookie stores, Cursor Desktop/Agent databases, Pi credential files, or subprocess output. The captured token is validated against cookie-header injection and is never refreshed, logged, or persisted. + +Cursor's SDK API key is a separate credential and cannot authenticate the dashboard endpoint. + +## Normalization + +Use Cursor's dashboard values in this order: + +1. `individualUsage.plan.totalPercentUsed` +2. finite `individualUsage.plan.used / limit` +3. finite Enterprise `individualUsage.overall.used / limit` +4. finite Enterprise `teamUsage.pooled.used / limit` + +The primary window is the billing-cycle total. Optional `autoPercentUsed` and `apiPercentUsed` become detail windows. `billingCycleEnd` supplies the reset timestamp. Missing finite quota data is an error; registration or unlimited data never becomes a fabricated `0%` quota. + +## Failure behavior + +- Cursor absent: no provider, request, widget row, or footer change. +- Cursor detected without a session token: missing state and setup guidance. +- Session rejected with 401/403: missing state. +- Other HTTP, timeout, redirect, or schema failures: sanitized error state. +- A previous live result may remain as stale through the existing process-memory coordinator cache. + +Raw response bodies and credentials never enter errors or persistence. + +## Testing + +- Personal, Enterprise personal-cap, and pooled response fixtures. +- Cookie construction, injection rejection, timeout lifetime, and error redaction tests. +- Mocked ModelRegistry tests for absent, registered, active-model, and registration-before-model-selection lifecycles. +- Official Pi `discoverAndLoadExtensions()` package-loader smoke. +- Existing Codex, Kimi, and Copilot suites remain unchanged. + +## Sources + +- [`pi-cursor-sdk` provider registration](https://github.com/fitchmultz/pi-cursor-sdk/blob/main/src/index.ts) +- [Cursor TypeScript SDK authentication](https://cursor.com/docs/sdk/typescript) +- [CodexBar Cursor provider notes](https://github.com/steipete/CodexBar/blob/main/docs/cursor.md) +- [CodexBar Cursor parser and Enterprise fixtures](https://github.com/steipete/CodexBar/tree/main/Sources/CodexBarCore/Providers/Cursor) diff --git a/package.json b/package.json index 2350f69..8334cfe 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,8 @@ "footer", "codex", "kimi", - "copilot" + "copilot", + "cursor" ], "repository": { "type": "git", diff --git a/src/cursor.ts b/src/cursor.ts new file mode 100644 index 0000000..7d80186 --- /dev/null +++ b/src/cursor.ts @@ -0,0 +1,234 @@ +import type { ProviderQuota, QuotaWindow } from "./types.js"; + +const CURSOR_USAGE_URL = "https://cursor.com/api/usage-summary"; +const CURSOR_SESSION_ENV = "CURSOR_SESSION_TOKEN"; +const CURSOR_API_KEY_PLACEHOLDER = "pi-cursor-sdk-cursor-api-key-placeholder"; +const FETCH_TIMEOUT_MS = 10_000; +const MAX_SESSION_TOKEN_LENGTH = 16_384; +const MAX_RESPONSE_BYTES = 1_000_000; +const CURSOR_SESSION_STATE = Symbol.for("pi-token-tank.cursor-session-token"); + +interface CursorUsageBody { + billingCycleEnd?: unknown; + individualUsage?: unknown; + membershipType?: unknown; + teamUsage?: unknown; + [key: string]: unknown; +} + +function toRecord(value: unknown): Record | undefined { + if (!value || typeof value !== "object" || Array.isArray(value)) return undefined; + return value as Record; +} + +function toNumber(value: unknown): number | undefined { + if (typeof value === "number" && Number.isFinite(value) && value >= 0) return value; + return undefined; +} + +function clampPercent(value: number): number { + return Math.round(Math.max(0, Math.min(100, value)) * 10) / 10; +} + +function parseDate(value: unknown): number | undefined { + if (typeof value !== "string" || !value.trim()) return undefined; + const timestamp = Date.parse(value); + return Number.isFinite(timestamp) ? timestamp : undefined; +} + +function percentFromBlock(block: Record | undefined): number | undefined { + if (!block) return undefined; + const used = toNumber(block.used); + const limit = toNumber(block.limit); + if (used === undefined || limit === undefined || limit <= 0) return undefined; + return clampPercent((used / limit) * 100); +} + +function window( + id: string, + shortLabel: string, + longLabel: string, + usedPercent: number, + resetsAt?: number, + block?: Record, +): QuotaWindow { + return { + id, + shortLabel, + longLabel, + resetStyle: "weekday-time", + usedPercent: clampPercent(usedPercent), + used: toNumber(block?.used), + limit: toNumber(block?.limit), + resetsAt, + }; +} + +export function parseCursorUsage(body: unknown, fetchedAt = Date.now()): ProviderQuota { + const record = toRecord(body) as CursorUsageBody | undefined; + if (!record) throw new Error("Invalid Cursor usage response: expected object"); + if (record.isUnlimited === true) { + throw new Error("Invalid Cursor usage response: missing finite quota data"); + } + + const individual = toRecord(record.individualUsage); + const plan = toRecord(individual?.plan); + const overall = toRecord(individual?.overall); + const team = toRecord(record.teamUsage); + const pooled = toRecord(team?.pooled); + const resetsAt = parseDate(record.billingCycleEnd); + + const totalPercent = toNumber(plan?.totalPercentUsed); + const primaryBlock = totalPercent !== undefined || percentFromBlock(plan) !== undefined + ? plan + : percentFromBlock(overall) !== undefined + ? overall + : pooled; + const primaryPercent = totalPercent !== undefined + ? clampPercent(totalPercent) + : percentFromBlock(primaryBlock); + + if (primaryPercent === undefined) { + throw new Error("Invalid Cursor usage response: missing quota data"); + } + + const windows: QuotaWindow[] = [ + window("billing-cycle", "cycle", "Total", primaryPercent, resetsAt, primaryBlock), + ]; + const autoPercent = toNumber(plan?.autoPercentUsed); + if (autoPercent !== undefined) { + windows.push(window("auto", "auto", "Auto", autoPercent, resetsAt)); + } + const apiPercent = toNumber(plan?.apiPercentUsed); + if (apiPercent !== undefined) { + windows.push(window("api", "api", "API", apiPercent, resetsAt)); + } + + return { + provider: "cursor", + state: "live", + fetchedAt, + plan: typeof record.membershipType === "string" && /^[A-Za-z0-9._ -]{1,40}$/.test(record.membershipType.trim()) + ? record.membershipType.trim() + : undefined, + windows, + }; +} + +function takeEnvironmentSessionToken(): string | undefined { + const token = process.env[CURSOR_SESSION_ENV]; + delete process.env[CURSOR_SESSION_ENV]; + return token; +} + +export function captureCursorSessionToken(): string | undefined { + const state = process as NodeJS.Process & Record; + const token = takeEnvironmentSessionToken(); + if (token !== undefined) { + Object.defineProperty(state, CURSOR_SESSION_STATE, { + value: token, + writable: true, + configurable: true, + enumerable: false, + }); + } + const captured = state[CURSOR_SESSION_STATE]; + return typeof captured === "string" ? captured : undefined; +} + +function validateSessionToken(value: string | undefined): string | undefined { + const token = value?.trim(); + if (!token || token === CURSOR_API_KEY_PLACEHOLDER) return undefined; + if (token.length > MAX_SESSION_TOKEN_LENGTH || /[;\r\n]/.test(token)) { + throw new Error("Cursor dashboard session token is invalid"); + } + return token; +} + +async function readJsonBounded(response: Response): Promise { + if (!response.body) throw new Error("Invalid Cursor usage response: expected object"); + const reader = response.body.getReader(); + const chunks: Uint8Array[] = []; + let length = 0; + try { + while (true) { + const { done, value } = await reader.read(); + if (done) break; + length += value.byteLength; + if (length > MAX_RESPONSE_BYTES) { + await reader.cancel(); + throw new Error("Cursor quota response exceeded size limit"); + } + chunks.push(value); + } + } finally { + reader.releaseLock(); + } + + const bytes = new Uint8Array(length); + let offset = 0; + for (const chunk of chunks) { + bytes.set(chunk, offset); + offset += chunk.byteLength; + } + return JSON.parse(new TextDecoder().decode(bytes)) as unknown; +} + +function sanitizeError(error: unknown): string { + const message = error instanceof Error ? error.message : ""; + if (message.startsWith("Invalid Cursor usage response:")) return message; + if (message === "Cursor dashboard session token is invalid") return message; + if (/^Cursor quota request failed \(\d{3}\)$/.test(message)) return message; + if (error instanceof Error && (error.name === "AbortError" || error.name === "TimeoutError")) { + return "Cursor quota request timed out"; + } + return "Cursor quota request failed"; +} + +export async function fetchCursorQuotaWithToken(sessionToken: string | undefined): Promise { + let token: string | undefined; + try { + token = validateSessionToken(sessionToken); + } catch (error) { + return { provider: "cursor", state: "error", windows: [], error: sanitizeError(error) }; + } + if (!token) { + return { provider: "cursor", state: "missing", windows: [] }; + } + + const controller = new AbortController(); + const id = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS); + try { + const response = await fetch(CURSOR_USAGE_URL, { + method: "GET", + redirect: "error", + signal: controller.signal, + headers: { + Accept: "application/json", + Cookie: `WorkosCursorSessionToken=${token}`, + }, + }); + if (response.status === 401 || response.status === 403) { + await response.body?.cancel().catch(() => undefined); + return { provider: "cursor", state: "missing", windows: [] }; + } + if (!response.ok) { + await response.body?.cancel().catch(() => undefined); + throw new Error(`Cursor quota request failed (${response.status})`); + } + return parseCursorUsage(await readJsonBounded(response)); + } catch (error) { + return { + provider: "cursor", + state: "error", + windows: [], + error: sanitizeError(error), + }; + } finally { + clearTimeout(id); + } +} + +export async function fetchCursorQuota(): Promise { + return fetchCursorQuotaWithToken(takeEnvironmentSessionToken()); +} diff --git a/src/index.ts b/src/index.ts index 8074f2e..ef54985 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,9 +4,15 @@ import type { } from "@earendil-works/pi-coding-agent"; import { createCredentialSource, type CredentialSourceLike } from "./auth.js"; +import { captureCursorSessionToken, fetchCursorQuotaWithToken } from "./cursor.js"; import { formatFooter, formatWidget } from "./format.js"; import { loadFooterMode, saveFooterMode, type FooterMode } from "./preferences.js"; -import { providerForModel as findProviderForModel, providers } from "./providers.js"; +import { + createCursorProvider, + providerForModel as findProviderForModel, + providers, + providersForRuntime, +} from "./providers.js"; import type { ProviderId, ProviderQuota, QuotaProvider, QuotaSnapshot } from "./types.js"; const STATUS_KEY = "pi-token-tank"; @@ -18,8 +24,15 @@ interface CacheEntry { inflight?: Promise; } -export function createCoordinator(credentials: CredentialSourceLike, registry: readonly QuotaProvider[]) { - const caches = new Map(registry.map((provider) => [provider.id, {}])); +export function createCoordinator( + credentials: CredentialSourceLike, + registry: readonly QuotaProvider[], + initialSnapshot: QuotaSnapshot = {}, +) { + const caches = new Map(registry.map((provider) => [ + provider.id, + { data: initialSnapshot[provider.id] }, + ])); const providerById = new Map(registry.map((provider) => [provider.id, provider])); async function refresh(providerId: ProviderId, force: boolean): Promise { @@ -86,7 +99,7 @@ function makeThemeLike(ctx: ExtensionContext["ui"]) { } export function providerForModel(model: ExtensionContext["model"]): ProviderId | undefined { - return findProviderForModel(model)?.id; + return findProviderForModel(model, providersForRuntime([], model))?.id; } export function createTokenTank( @@ -95,25 +108,55 @@ export function createTokenTank( preferenceFile?: string, registry: readonly QuotaProvider[] = providers, ) { + const cursorSessionToken = captureCursorSessionToken(); + const detectedCursorProvider = createCursorProvider( + () => fetchCursorQuotaWithToken(cursorSessionToken), + ); let coordinator: ReturnType | undefined; + let runtimeRegistry: readonly QuotaProvider[] = registry; + let pendingProviderIds: ProviderId[] = []; + let credentials = credentialSourceOverride; let widgetVisible = false; let footerMode: FooterMode = "minimal"; + function sameRegistry(left: readonly QuotaProvider[], right: readonly QuotaProvider[]): boolean { + return left.length === right.length && left.every((provider, index) => provider.id === right[index]?.id); + } + function getCoordinator(ctx: ExtensionContext) { - coordinator ??= createCoordinator( - credentialSourceOverride ?? createCredentialSource(ctx.modelRegistry), + const registryWithOptionalDetection = ctx.modelRegistry as unknown as { + getRegisteredProviderIds?: () => readonly string[]; + }; + const registeredProviderIds = registryWithOptionalDetection.getRegisteredProviderIds?.() ?? []; + const nextRegistry = providersForRuntime( + registeredProviderIds, + ctx.model, registry, + detectedCursorProvider, ); + if (!coordinator || !sameRegistry(runtimeRegistry, nextRegistry)) { + const previousCoordinator = coordinator; + const previousSnapshot = previousCoordinator?.getSnapshot(); + const previousIds = new Set(runtimeRegistry.map((provider) => provider.id)); + previousCoordinator?.clear(); + runtimeRegistry = nextRegistry; + pendingProviderIds = previousCoordinator + ? runtimeRegistry.filter((provider) => !previousIds.has(provider.id)).map((provider) => provider.id) + : []; + credentials ??= createCredentialSource(ctx.modelRegistry); + coordinator = createCoordinator(credentials, runtimeRegistry, previousSnapshot); + } return coordinator; } function updateFooter(ctx: ExtensionContext) { - const provider = findProviderForModel(ctx.model, registry); + const activeCoordinator = getCoordinator(ctx); + const provider = findProviderForModel(ctx.model, runtimeRegistry); if (!provider) { ctx.ui.setStatus(STATUS_KEY, undefined); return; } - const quota = getCoordinator(ctx).getSnapshot()[provider.id]; + const quota = activeCoordinator.getSnapshot()[provider.id]; ctx.ui.setStatus( STATUS_KEY, formatFooter(quota, footerMode, makeThemeLike(ctx.ui), provider.footerWindows[footerMode]), @@ -125,17 +168,25 @@ export function createTokenTank( ctx.ui.setWidget(WIDGET_KEY, undefined); return; } + const activeCoordinator = getCoordinator(ctx); ctx.ui.setWidget( WIDGET_KEY, - formatWidget(getCoordinator(ctx).getSnapshot(), registry, makeThemeLike(ctx.ui), Date.now()), + formatWidget(activeCoordinator.getSnapshot(), runtimeRegistry, makeThemeLike(ctx.ui), Date.now()), ); } async function refreshAndRender(ctx: ExtensionContext, force: boolean) { const activeCoordinator = getCoordinator(ctx); - const provider = findProviderForModel(ctx.model, registry); + const provider = findProviderForModel(ctx.model, runtimeRegistry); updateFooter(ctx); if (provider) await activeCoordinator.refresh(provider.id, force); + if (widgetVisible && pendingProviderIds.length > 0) { + const addedProviderIds = pendingProviderIds; + pendingProviderIds = []; + await Promise.all(addedProviderIds + .filter((providerId) => providerId !== provider?.id) + .map((providerId) => activeCoordinator.refresh(providerId, force))); + } updateFooter(ctx); if (widgetVisible) updateWidget(ctx); } @@ -153,6 +204,8 @@ export function createTokenTank( ctx.ui.setWidget(WIDGET_KEY, undefined); coordinator?.clear(); coordinator = undefined; + runtimeRegistry = registry; + pendingProviderIds = []; }); pi.registerCommand("token-tank", { @@ -177,7 +230,10 @@ export function createTokenTank( return; } widgetVisible = !widgetVisible; - if (widgetVisible) await getCoordinator(ctx).refreshAll(true); + if (widgetVisible) { + await getCoordinator(ctx).refreshAll(true); + pendingProviderIds = []; + } updateFooter(ctx); updateWidget(ctx); }, diff --git a/src/providers.ts b/src/providers.ts index 708dd54..0bf7998 100644 --- a/src/providers.ts +++ b/src/providers.ts @@ -1,5 +1,6 @@ import { fetchCodexQuota } from "./codex.js"; import { fetchCopilotQuota } from "./copilot.js"; +import { fetchCursorQuota } from "./cursor.js"; import { fetchKimiQuota } from "./kimi.js"; import type { QuotaProvider } from "./types.js"; @@ -33,6 +34,30 @@ export const providers: readonly QuotaProvider[] = [ }, ]; +export function createCursorProvider(fetch: QuotaProvider["fetch"] = fetchCursorQuota): QuotaProvider { + return { + id: "cursor", + label: "Cursor", + matchesModel: (model) => model?.provider.toLowerCase() === "cursor", + fetch, + credentialsHint: "Set CURSOR_SESSION_TOKEN to your cursor.com WorkosCursorSessionToken cookie value.", + footerWindows: { minimal: ["billing-cycle"], full: ["billing-cycle", "auto", "api"] }, + }; +} + +export const cursorProvider = createCursorProvider(); + +export function providersForRuntime( + registeredProviderIds: readonly string[], + model: Parameters[0], + registry: readonly QuotaProvider[] = providers, + detectedCursorProvider: QuotaProvider = cursorProvider, +): readonly QuotaProvider[] { + const cursorDetected = registeredProviderIds.includes("cursor") || model?.provider.toLowerCase() === "cursor"; + if (!cursorDetected || registry.some((provider) => provider.id === "cursor")) return registry; + return [...registry, detectedCursorProvider]; +} + export function providerForModel( model: Parameters[0], registry: readonly QuotaProvider[] = providers, diff --git a/tests/cursor.test.ts b/tests/cursor.test.ts new file mode 100644 index 0000000..256603d --- /dev/null +++ b/tests/cursor.test.ts @@ -0,0 +1,270 @@ +import assert from "node:assert/strict"; +import { describe, it } from "node:test"; + +import { fetchCursorQuota, parseCursorUsage } from "../src/cursor.js"; +import cursorEnterpriseUsage from "./fixtures/cursor-enterprise-usage.json" with { type: "json" }; +import cursorUsage from "./fixtures/cursor-usage.json" with { type: "json" }; + +const SESSION_TOKEN = "auth0%7Cuser_123%3A%3Aheader.payload.signature"; +const PLACEHOLDER = "pi-cursor-sdk-cursor-api-key-placeholder"; + +function mockFetch(response: (url: string, init: RequestInit) => Response | Promise) { + const original = globalThis.fetch; + globalThis.fetch = (async (url, init) => response(String(url), init ?? {})) as typeof fetch; + return () => { + globalThis.fetch = original; + }; +} + +async function withSessionToken(value: string | undefined, run: () => Promise): Promise { + const original = process.env.CURSOR_SESSION_TOKEN; + if (value === undefined) delete process.env.CURSOR_SESSION_TOKEN; + else process.env.CURSOR_SESSION_TOKEN = value; + try { + await run(); + } finally { + if (original === undefined) delete process.env.CURSOR_SESSION_TOKEN; + else process.env.CURSOR_SESSION_TOKEN = original; + } +} + +describe("parseCursorUsage", () => { + it("parses dashboard plan and lane percentages", () => { + const quota = parseCursorUsage(cursorUsage, 1_750_000_000_000); + assert.equal(quota.provider, "cursor"); + assert.equal(quota.state, "live"); + assert.equal(quota.plan, "pro"); + assert.equal(quota.fetchedAt, 1_750_000_000_000); + assert.deepEqual(quota.windows, [ + { + id: "billing-cycle", + shortLabel: "cycle", + longLabel: "Total", + resetStyle: "weekday-time", + usedPercent: 19.4, + used: 388, + limit: 2000, + resetsAt: Date.parse("2026-08-01T00:00:00.000Z"), + }, + { + id: "auto", + shortLabel: "auto", + longLabel: "Auto", + resetStyle: "weekday-time", + usedPercent: 12.5, + used: undefined, + limit: undefined, + resetsAt: Date.parse("2026-08-01T00:00:00.000Z"), + }, + { + id: "api", + shortLabel: "api", + longLabel: "API", + resetStyle: "weekday-time", + usedPercent: 26.3, + used: undefined, + limit: undefined, + resetsAt: Date.parse("2026-08-01T00:00:00.000Z"), + }, + ]); + }); + + it("prefers an Enterprise personal cap over the shared pool", () => { + const quota = parseCursorUsage(cursorEnterpriseUsage); + assert.equal(quota.plan, "enterprise"); + assert.equal(quota.windows[0]?.usedPercent, 73.8); + assert.equal(quota.windows[0]?.used, 7384); + assert.equal(quota.windows[0]?.limit, 10000); + }); + + it("falls back to a finite Enterprise pooled quota", () => { + const quota = parseCursorUsage({ + membershipType: "enterprise", + teamUsage: { pooled: { used: 12_725_135, limit: 28_122_000 } }, + }); + assert.equal(quota.windows[0]?.usedPercent, 45.2); + }); + + it("drops unsafe membership labels", () => { + const quota = parseCursorUsage({ + membershipType: "enterprise\u001b[2J", + individualUsage: { overall: { used: 50, limit: 100 } }, + }); + assert.equal(quota.plan, undefined); + }); + + it("rejects unlimited, negative, malformed, and non-quota responses without raw values", () => { + for (const body of [ + undefined, + [], + { isUnlimited: true, individualUsage: { plan: { totalPercentUsed: 0 } } }, + { individualUsage: { plan: { totalPercentUsed: -1 } } }, + { individualUsage: { overall: { used: -1, limit: 100 } } }, + { individualUsage: { plan: { note: "raw-secret-body" } } }, + ]) { + assert.throws( + () => parseCursorUsage(body), + (error: unknown) => error instanceof Error + && error.message.startsWith("Invalid Cursor usage response:") + && !error.message.includes("raw-secret-body"), + ); + } + }); +}); + +describe("fetchCursorQuota", () => { + it("uses only the configured dashboard cookie on the read-only endpoint", async () => { + const restore = mockFetch((url, init) => { + assert.equal(url, "https://cursor.com/api/usage-summary"); + assert.equal(init.method, "GET"); + assert.equal(init.redirect, "error"); + assert.ok(init.signal instanceof AbortSignal); + assert.deepEqual(init.headers, { + Accept: "application/json", + Cookie: `WorkosCursorSessionToken=${SESSION_TOKEN}`, + }); + return new Response(JSON.stringify(cursorUsage), { status: 200 }); + }); + try { + await withSessionToken(SESSION_TOKEN, async () => { + const quota = await fetchCursorQuota(); + assert.equal(process.env.CURSOR_SESSION_TOKEN, undefined); + assert.equal(quota.state, "live"); + assert.equal(quota.windows[0]?.usedPercent, 19.4); + }); + } finally { + restore(); + } + }); + + it("does not fetch when the session token is absent or is the SDK placeholder", async () => { + let fetched = false; + const restore = mockFetch(() => { + fetched = true; + return new Response(JSON.stringify(cursorUsage)); + }); + try { + for (const value of [undefined, "", PLACEHOLDER]) { + await withSessionToken(value, async () => { + const quota = await fetchCursorQuota(); + assert.equal(quota.state, "missing"); + }); + } + assert.equal(fetched, false); + } finally { + restore(); + } + }); + + it("rejects cookie-header injection before any request", async () => { + let fetched = false; + const restore = mockFetch(() => { + fetched = true; + return new Response(JSON.stringify(cursorUsage)); + }); + try { + await withSessionToken(`${SESSION_TOKEN}; injected=value`, async () => { + const quota = await fetchCursorQuota(); + assert.equal(quota.state, "error"); + assert.equal(quota.error, "Cursor dashboard session token is invalid"); + }); + assert.equal(fetched, false); + } finally { + restore(); + } + }); + + it("treats rejected sessions as missing and cancels response bodies", async () => { + let cancelled = false; + const restore = mockFetch(() => new Response(new ReadableStream({ + cancel: () => { cancelled = true; }, + }), { status: 401 })); + try { + await withSessionToken(SESSION_TOKEN, async () => { + const quota = await fetchCursorQuota(); + assert.equal(quota.state, "missing"); + assert.equal(cancelled, true); + assert.ok(!quota.error?.includes(SESSION_TOKEN)); + }); + } finally { + restore(); + } + }); + + it("sanitizes HTTP, schema, and thrown errors", async () => { + let restore = mockFetch(() => new Response("private-response-body", { status: 500 })); + try { + await withSessionToken(SESSION_TOKEN, async () => { + const quota = await fetchCursorQuota(); + assert.equal(quota.error, "Cursor quota request failed (500)"); + }); + } finally { + restore(); + } + + restore = mockFetch(() => new Response(JSON.stringify({ secret: "private-response-body" }), { status: 200 })); + try { + await withSessionToken(SESSION_TOKEN, async () => { + const quota = await fetchCursorQuota(); + assert.equal(quota.error, "Invalid Cursor usage response: missing quota data"); + assert.ok(!quota.error?.includes("private-response-body")); + }); + } finally { + restore(); + } + + restore = mockFetch(() => { + throw new Error(`${SESSION_TOKEN} private-response-body`); + }); + try { + await withSessionToken(SESSION_TOKEN, async () => { + const quota = await fetchCursorQuota(); + assert.equal(quota.error, "Cursor quota request failed"); + }); + } finally { + restore(); + } + }); + + it("keeps the timeout active while consuming the response body", async () => { + const originalSetTimeout = globalThis.setTimeout; + const originalClearTimeout = globalThis.clearTimeout; + let cleared = false; + globalThis.setTimeout = (() => 123 as unknown as NodeJS.Timeout) as unknown as typeof setTimeout; + globalThis.clearTimeout = (() => { cleared = true; }) as typeof clearTimeout; + const restore = mockFetch((_url, init) => new Response(new ReadableStream({ + pull(controller) { + assert.equal(cleared, false); + assert.ok(init.signal instanceof AbortSignal); + controller.enqueue(new TextEncoder().encode(JSON.stringify(cursorUsage))); + controller.close(); + }, + }), { status: 200 })); + try { + await withSessionToken(SESSION_TOKEN, async () => { + const quota = await fetchCursorQuota(); + assert.equal(quota.state, "live"); + assert.equal(cleared, true); + }); + } finally { + restore(); + globalThis.setTimeout = originalSetTimeout; + globalThis.clearTimeout = originalClearTimeout; + } + }); + + it("rejects oversized decompressed response bodies", async () => { + const restore = mockFetch(() => new Response(JSON.stringify({ + padding: "x".repeat(1_000_001), + }), { status: 200 })); + try { + await withSessionToken(SESSION_TOKEN, async () => { + const quota = await fetchCursorQuota(); + assert.equal(quota.state, "error"); + assert.equal(quota.error, "Cursor quota request failed"); + }); + } finally { + restore(); + } + }); +}); diff --git a/tests/fixtures/cursor-enterprise-usage.json b/tests/fixtures/cursor-enterprise-usage.json new file mode 100644 index 0000000..62d56fd --- /dev/null +++ b/tests/fixtures/cursor-enterprise-usage.json @@ -0,0 +1,23 @@ +{ + "billingCycleStart": "2026-07-01T00:00:00.000Z", + "billingCycleEnd": "2026-08-01T00:00:00.000Z", + "membershipType": "enterprise", + "limitType": "team", + "isUnlimited": false, + "individualUsage": { + "overall": { + "enabled": true, + "used": 7384, + "limit": 10000, + "remaining": 2616 + } + }, + "teamUsage": { + "pooled": { + "enabled": true, + "used": 12725135, + "limit": 28122000, + "remaining": 15396865 + } + } +} diff --git a/tests/fixtures/cursor-usage.json b/tests/fixtures/cursor-usage.json new file mode 100644 index 0000000..698ff7e --- /dev/null +++ b/tests/fixtures/cursor-usage.json @@ -0,0 +1,24 @@ +{ + "billingCycleStart": "2026-07-01T00:00:00.000Z", + "billingCycleEnd": "2026-08-01T00:00:00.000Z", + "membershipType": "pro", + "limitType": "user", + "isUnlimited": false, + "individualUsage": { + "plan": { + "enabled": true, + "used": 388, + "limit": 2000, + "remaining": 1612, + "autoPercentUsed": 12.5, + "apiPercentUsed": 26.3, + "totalPercentUsed": 19.4 + }, + "onDemand": { + "enabled": false, + "used": 0, + "limit": null, + "remaining": null + } + } +} diff --git a/tests/format.test.ts b/tests/format.test.ts index d1693e0..0c674cc 100644 --- a/tests/format.test.ts +++ b/tests/format.test.ts @@ -41,6 +41,22 @@ describe("footer gauges", () => { ); }); + it("shows Cursor total, Auto, and API windows in full mode", () => { + const quota: ProviderQuota = { + provider: "cursor", + state: "live", + windows: [ + { id: "billing-cycle", shortLabel: "cycle", longLabel: "Total", resetStyle: "weekday-time", usedPercent: 19.4 }, + { id: "auto", shortLabel: "auto", longLabel: "Auto", resetStyle: "weekday-time", usedPercent: 12.5 }, + { id: "api", shortLabel: "api", longLabel: "API", resetStyle: "weekday-time", usedPercent: 26.3 }, + ], + }; + assert.equal( + formatFooter(quota, "full", plainTheme, ["billing-cycle", "auto", "api"]), + "cycle ▰▱▱▱ 19.4% · auto ▰▱▱▱ 12.5% · api ▰▰▱▱ 26.3%", + ); + }); + it("marks cached quota percentages as stale", () => { const quota = liveQuota("kimi", 48, 35); quota.state = "stale"; diff --git a/tests/index.test.ts b/tests/index.test.ts index 7d8146c..5899a40 100644 --- a/tests/index.test.ts +++ b/tests/index.test.ts @@ -9,6 +9,7 @@ import type { CredentialSourceLike } from "../src/auth.js"; import type { QuotaProvider } from "../src/types.js"; import codexUsage from "./fixtures/codex-usage.json" with { type: "json" }; import copilotUsage from "./fixtures/copilot-usage.json" with { type: "json" }; +import cursorUsage from "./fixtures/cursor-usage.json" with { type: "json" }; import kimiUsage from "./fixtures/kimi-usage.json" with { type: "json" }; function fakeCredentials(): CredentialSourceLike { @@ -31,7 +32,7 @@ function withMockFetch(fn: () => Promise): () => Promise { }; } -function fakeAPI(provider = "openai-codex") { +function fakeAPI(provider = "openai-codex", registeredProviderIds: string[] = []) { const handlers: Record Promise)[]> = {}; const status: Record = {}; const widgets: Record = {}; @@ -40,6 +41,9 @@ function fakeAPI(provider = "openai-codex") { const ctx: ExtensionContext = { mode: "tui", model: { provider, id: "test-model" } as ExtensionContext["model"], + modelRegistry: { + getRegisteredProviderIds: () => registeredProviderIds, + } as unknown as ExtensionContext["modelRegistry"], ui: { setStatus: (key: string, text: string | undefined) => { status[key] = text; @@ -83,9 +87,224 @@ describe("createTokenTank", () => { assert.equal(providerForModel({ provider: "openai-codex", id: "gpt" } as ExtensionContext["model"]), "codex"); assert.equal(providerForModel({ provider: "kimi-coding", id: "kimi" } as ExtensionContext["model"]), "kimi"); assert.equal(providerForModel({ provider: "github-copilot", id: "gpt" } as ExtensionContext["model"]), "copilot"); + assert.equal(providerForModel({ provider: "cursor", id: "composer" } as ExtensionContext["model"]), "cursor"); assert.equal(providerForModel({ provider: "anthropic", id: "claude" } as ExtensionContext["model"]), undefined); }); + it( + "keeps existing providers working when registry detection is unavailable", + withMockFetch(async () => { + const f = fakeAPI("anthropic"); + f.ctx.modelRegistry = {} as ExtensionContext["modelRegistry"]; + createTokenTank(f.api, fakeCredentials()); + await assert.doesNotReject(f.fire("session_start", {})); + assert.equal(f.status["pi-token-tank"], undefined); + }), + ); + + it( + "leaves the widget unchanged when Cursor is not registered or active", + withMockFetch(async () => { + const f = fakeAPI("anthropic"); + createTokenTank(f.api, fakeCredentials()); + await f.commands["token-tank"]!.handler("", f.ctx); + const widget = f.widgets["pi-token-tank"]?.join("\n") ?? ""; + assert.ok(!widget.includes("Cursor")); + }), + ); + + it( + "detects a registered Cursor provider while another model is active", + withMockFetch(async () => { + const originalToken = process.env.CURSOR_SESSION_TOKEN; + delete process.env.CURSOR_SESSION_TOKEN; + try { + const f = fakeAPI("anthropic", ["cursor"]); + createTokenTank(f.api, fakeCredentials()); + await f.commands["token-tank"]!.handler("", f.ctx); + const widget = f.widgets["pi-token-tank"]?.join("\n") ?? ""; + assert.ok(widget.includes("Cursor")); + assert.ok(widget.includes("Credentials missing")); + } finally { + if (originalToken === undefined) delete process.env.CURSOR_SESSION_TOKEN; + else process.env.CURSOR_SESSION_TOKEN = originalToken; + } + }), + ); + + it("detects a registered Cursor provider and renders its dashboard quota", async () => { + const originalFetch = globalThis.fetch; + const originalToken = process.env.CURSOR_SESSION_TOKEN; + process.env.CURSOR_SESSION_TOKEN = "user%3A%3Aheader.payload.signature"; + globalThis.fetch = (async (url) => String(url).includes("cursor.com") + ? new Response(JSON.stringify(cursorUsage), { status: 200 }) + : new Response("unauthorized", { status: 401 })) as typeof fetch; + try { + const f = fakeAPI("cursor", ["cursor"]); + createTokenTank(f.api, fakeCredentials()); + assert.equal(process.env.CURSOR_SESSION_TOKEN, undefined); + const sessionSymbol = Symbol.for("pi-token-tank.cursor-session-token"); + assert.equal(Object.prototype.propertyIsEnumerable.call(process, sessionSymbol), false); + assert.equal((process as NodeJS.Process & Record)[sessionSymbol], "user%3A%3Aheader.payload.signature"); + assert.equal(({ ...process } as Record)[sessionSymbol], undefined); + await f.fire("session_start", {}); + assert.ok(f.status["pi-token-tank"]?.includes("19.4%")); + await f.commands["token-tank"]!.handler("", f.ctx); + const widget = f.widgets["pi-token-tank"]?.join("\n") ?? ""; + assert.ok(widget.includes("Cursor")); + assert.ok(widget.includes("19% used")); + } finally { + globalThis.fetch = originalFetch; + if (originalToken === undefined) delete process.env.CURSOR_SESSION_TOKEN; + else process.env.CURSOR_SESSION_TOKEN = originalToken; + } + }); + + it("refreshes Cursor when registration appears while the widget is visible", async () => { + const originalFetch = globalThis.fetch; + const originalToken = process.env.CURSOR_SESSION_TOKEN; + process.env.CURSOR_SESSION_TOKEN = "visible-user%3A%3Aheader.payload.signature"; + globalThis.fetch = (async (url) => String(url).includes("cursor.com") + ? new Response(JSON.stringify(cursorUsage), { status: 200 }) + : new Response("unauthorized", { status: 401 })) as typeof fetch; + try { + const registeredProviderIds: string[] = []; + const f = fakeAPI("anthropic", registeredProviderIds); + createTokenTank(f.api, fakeCredentials()); + await f.commands["token-tank"]!.handler("", f.ctx); + assert.ok(!f.widgets["pi-token-tank"]?.join("\n").includes("Cursor")); + + registeredProviderIds.push("cursor"); + await f.fire("turn_end", {}); + const widget = f.widgets["pi-token-tank"]?.join("\n") ?? ""; + assert.ok(widget.includes("Cursor")); + assert.ok(widget.includes("19% used")); + assert.ok(!widget.includes("Credentials missing. Set CURSOR_SESSION_TOKEN")); + } finally { + globalThis.fetch = originalFetch; + if (originalToken === undefined) delete process.env.CURSOR_SESSION_TOKEN; + else process.env.CURSOR_SESSION_TOKEN = originalToken; + } + }); + + it("retains the captured session token across extension instances", async () => { + const originalFetch = globalThis.fetch; + const originalToken = process.env.CURSOR_SESSION_TOKEN; + process.env.CURSOR_SESSION_TOKEN = "reload-user%3A%3Aheader.payload.signature"; + globalThis.fetch = (async (url) => String(url).includes("cursor.com") + ? new Response(JSON.stringify(cursorUsage), { status: 200 }) + : new Response("unauthorized", { status: 401 })) as typeof fetch; + try { + const first = fakeAPI("anthropic", ["cursor"]); + createTokenTank(first.api, fakeCredentials()); + assert.equal(process.env.CURSOR_SESSION_TOKEN, undefined); + + const reloaded = fakeAPI("cursor", ["cursor"]); + createTokenTank(reloaded.api, fakeCredentials()); + await reloaded.fire("session_start", {}); + assert.ok(reloaded.status["pi-token-tank"]?.includes("19.4%")); + } finally { + globalThis.fetch = originalFetch; + if (originalToken === undefined) delete process.env.CURSOR_SESSION_TOKEN; + else process.env.CURSOR_SESSION_TOKEN = originalToken; + } + }); + + it("detects Cursor when extension registration appears before model selection", async () => { + const originalFetch = globalThis.fetch; + const originalToken = process.env.CURSOR_SESSION_TOKEN; + process.env.CURSOR_SESSION_TOKEN = "user%3A%3Aheader.payload.signature"; + globalThis.fetch = (async (url) => String(url).includes("cursor.com") + ? new Response(JSON.stringify(cursorUsage), { status: 200 }) + : new Response("unauthorized", { status: 401 })) as typeof fetch; + try { + const registeredProviderIds: string[] = []; + const f = fakeAPI("anthropic", registeredProviderIds); + createTokenTank(f.api, fakeCredentials()); + await f.fire("session_start", {}); + assert.equal(f.status["pi-token-tank"], undefined); + + registeredProviderIds.push("cursor"); + f.ctx.model = { provider: "cursor", id: "composer" } as ExtensionContext["model"]; + await f.fire("model_select", { model: f.ctx.model }); + assert.ok(String(f.status["pi-token-tank"] ?? "").includes("19.4%")); + } finally { + globalThis.fetch = originalFetch; + if (originalToken === undefined) delete process.env.CURSOR_SESSION_TOKEN; + else process.env.CURSOR_SESSION_TOKEN = originalToken; + } + }); + + it("preserves existing provider snapshots when Cursor appears", async () => { + const originalFetch = globalThis.fetch; + const originalToken = process.env.CURSOR_SESSION_TOKEN; + process.env.CURSOR_SESSION_TOKEN = "user%3A%3Aheader.payload.signature"; + globalThis.fetch = (async (url) => String(url).includes("cursor.com") + ? new Response(JSON.stringify(cursorUsage), { status: 200 }) + : new Response("unauthorized", { status: 401 })) as typeof fetch; + try { + const registeredProviderIds: string[] = []; + const existing: QuotaProvider = { + id: "existing", + label: "Existing", + matchesModel: (model) => model?.provider === "existing", + fetch: async () => ({ + provider: "existing", + state: "live", + fetchedAt: Date.now(), + windows: [{ + id: "monthly", + shortLabel: "30d", + longLabel: "Monthly", + resetStyle: "weekday-time", + usedPercent: 42, + }], + }), + credentialsHint: "Configure Existing.", + footerWindows: { minimal: ["monthly"], full: ["monthly"] }, + }; + const f = fakeAPI("existing", registeredProviderIds); + createTokenTank(f.api, fakeCredentials(), undefined, [existing]); + await f.fire("session_start", {}); + assert.ok(f.status["pi-token-tank"]?.includes("42%")); + + registeredProviderIds.push("cursor"); + f.ctx.model = { provider: "cursor", id: "composer" } as ExtensionContext["model"]; + await f.fire("model_select", { model: f.ctx.model }); + await f.commands["token-tank"]!.handler("", f.ctx); + const widget = f.widgets["pi-token-tank"]?.join("\n") ?? ""; + assert.ok(widget.includes("Existing")); + assert.ok(widget.includes("42% used")); + assert.ok(widget.includes("Cursor")); + } finally { + globalThis.fetch = originalFetch; + if (originalToken === undefined) delete process.env.CURSOR_SESSION_TOKEN; + else process.env.CURSOR_SESSION_TOKEN = originalToken; + } + }); + + it("never claims Cursor quota from an active model alone", async () => { + const originalFetch = globalThis.fetch; + const originalToken = process.env.CURSOR_SESSION_TOKEN; + process.env.CURSOR_SESSION_TOKEN = "pi-cursor-sdk-cursor-api-key-placeholder"; + globalThis.fetch = async () => new Response("unauthorized", { status: 401 }); + try { + const f = fakeAPI("cursor", []); + createTokenTank(f.api, fakeCredentials()); + await f.fire("session_start", {}); + assert.equal(f.status["pi-token-tank"], "—"); + await f.commands["token-tank"]!.handler("", f.ctx); + const widget = f.widgets["pi-token-tank"]?.join("\n") ?? ""; + assert.ok(widget.includes("Cursor")); + assert.ok(widget.includes("Credentials missing")); + assert.ok(!widget.includes("0% used")); + } finally { + globalThis.fetch = originalFetch; + if (originalToken === undefined) delete process.env.CURSOR_SESSION_TOKEN; + else process.env.CURSOR_SESSION_TOKEN = originalToken; + } + }); + it("routes and renders an injected provider adapter", async () => { const future: QuotaProvider = { id: "future", diff --git a/tests/loader.test.ts b/tests/loader.test.ts new file mode 100644 index 0000000..427aaaa --- /dev/null +++ b/tests/loader.test.ts @@ -0,0 +1,62 @@ +import assert from "node:assert/strict"; +import { mkdtemp, rm } from "node:fs/promises"; +import { tmpdir } from "node:os"; +import { join, resolve } from "node:path"; +import { describe, it } from "node:test"; + +import { + discoverAndLoadExtensions, + type ExtensionContext, +} from "@earendil-works/pi-coding-agent"; +import cursorUsage from "./fixtures/cursor-usage.json" with { type: "json" }; + +describe("official Pi extension loader", () => { + it("loads Token Tank and retains Cursor auth across loader evaluations", async () => { + const projectDir = resolve(process.cwd()); + const agentDir = await mkdtemp(join(tmpdir(), "pi-token-tank-loader-")); + const originalFetch = globalThis.fetch; + const originalToken = process.env.CURSOR_SESSION_TOKEN; + process.env.CURSOR_SESSION_TOKEN = "loader-user%3A%3Aheader.payload.signature"; + globalThis.fetch = async (url) => String(url).includes("cursor.com") + ? new Response(JSON.stringify(cursorUsage), { status: 200 }) + : new Response("unauthorized", { status: 401 }); + try { + const first = await discoverAndLoadExtensions([projectDir], projectDir, agentDir); + assert.deepEqual(first.errors, []); + assert.equal(first.extensions.length, 1); + assert.equal(process.env.CURSOR_SESSION_TOKEN, undefined); + + const second = await discoverAndLoadExtensions([projectDir], projectDir, agentDir); + assert.deepEqual(second.errors, []); + assert.equal(second.extensions.length, 1); + const extension = second.extensions[0]!; + assert.equal(extension.resolvedPath, resolve(projectDir, "src/index.ts")); + assert.ok(extension.commands.has("token-tank")); + assert.ok(extension.handlers.has("session_start")); + assert.ok(extension.handlers.has("model_select")); + assert.ok(extension.handlers.has("session_shutdown")); + + const statuses: Record = {}; + const ctx = { + mode: "tui", + model: { provider: "cursor", id: "composer" }, + modelRegistry: { getRegisteredProviderIds: () => ["cursor"] }, + ui: { + setStatus: (key: string, value: string | undefined) => { statuses[key] = value; }, + setWidget: () => {}, + theme: { fg: (_color: string, text: string) => text }, + }, + } as unknown as ExtensionContext; + const sessionStart = extension.handlers.get("session_start")?.[0] as unknown as + ((event: unknown, context: ExtensionContext) => Promise) | undefined; + assert.ok(sessionStart); + await sessionStart({ type: "session_start", reason: "startup" }, ctx); + assert.ok(statuses["pi-token-tank"]?.includes("19.4%")); + } finally { + globalThis.fetch = originalFetch; + if (originalToken === undefined) delete process.env.CURSOR_SESSION_TOKEN; + else process.env.CURSOR_SESSION_TOKEN = originalToken; + await rm(agentDir, { recursive: true, force: true }); + } + }); +}); -- 2.51.2 From 70b61502de8dd8440cf8dcef948f84a0f3235ba9 Mon Sep 17 00:00:00 2001 From: Iury Souza Date: Sat, 18 Jul 2026 20:27:21 +0200 Subject: [PATCH 18/19] fix(widget): keep all providers visible --- README.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- src/format.ts | 47 ++++++++++++++++---------------------------- src/index.ts | 20 ++++++++++++------- tests/format.test.ts | 22 +++++++++++++++------ tests/index.test.ts | 29 ++++++++++++++++++++++++--- 7 files changed, 76 insertions(+), 50 deletions(-) diff --git a/README.md b/README.md index 2bbd931..2625305 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,7 @@ Full mode adds the configured detail windows: | `/token-tank minimal` | Use the compact footer with the primary quota window | | `/token-tank full` | Use the bigger footer with every configured quota window | -The details panel also reminds you about `minimal` and `full`, so the larger view is easy to discover. +The details widget keeps every configured provider on one width-aware line, including all available quota windows, so it stays below Pi's 10-line widget cap instead of dropping later providers. It also reminds you about `minimal` and `full`. The selected mode is stored in `pi-token-tank.json` under Pi’s agent directory. The file contains only `{ "footerMode": "minimal" | "full" }`—never credentials or quota data. diff --git a/package-lock.json b/package-lock.json index 18062fe..550b86b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pi-token-tank", - "version": "0.6.1", + "version": "0.6.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pi-token-tank", - "version": "0.6.1", + "version": "0.6.2", "license": "MIT", "devDependencies": { "@earendil-works/pi-coding-agent": "^0.80.9", diff --git a/package.json b/package.json index 8334cfe..c0b5ea1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pi-token-tank", - "version": "0.6.1", + "version": "0.6.2", "description": "Token Tank — provider-aware subscription quota status for Pi", "license": "MIT", "author": "Iury Souza", diff --git a/src/format.ts b/src/format.ts index e61efc9..a8b6a5d 100644 --- a/src/format.ts +++ b/src/format.ts @@ -81,48 +81,35 @@ export function formatWidget( theme: ThemeLike, nowMs: number, ): string[] { - const lines: string[] = []; - lines.push(theme.fg("accent", "Quota usage")); - lines.push(theme.fg("dim", "Footer size: /token-tank minimal · /token-tank full")); - lines.push(""); + const lines = [ + `${theme.fg("accent", "Quota usage")}${theme.fg("dim", " · footer /token-tank minimal|full")}`, + ]; for (const provider of registry) { const q = snapshot[provider.id]; if (!q) continue; - const label = provider.label; - const plan = q.plan ?? "—"; - const state = q.state; - lines.push( - `${theme.fg("accent", label)}${theme.fg("dim", ` · ${plan} · ${state}`)}`, - ); + const prefix = `${theme.fg("accent", provider.label)}${theme.fg("dim", ` · ${q.plan ?? "—"} · ${q.state}`)}`; if (q.state === "missing") { - lines.push(theme.fg("dim", ` Credentials missing. ${provider.credentialsHint}`)); - } else if (q.state === "error" && q.error) { - lines.push(theme.fg("error", ` ${q.error}`)); - } else { - for (const w of q.windows) { - const labelText = w.longLabel.padEnd(7); - const percentText = `${Math.round(w.usedPercent)}% used`; - const resetText = w.resetsAt ? `resets ${formatResetDuration(w.resetsAt - nowMs)}` : ""; - const color = thresholdColor(w.usedPercent); - const parts = [` ${labelText}`, theme.fg(color, percentText)]; - if (resetText) parts.push(theme.fg("dim", resetText)); - lines.push(parts.join(" ")); - } + lines.push(`${prefix}${theme.fg("dim", ` · Credentials missing. ${provider.credentialsHint}`)}`); + continue; } - - if (q.error && q.state === "stale") { - lines.push(theme.fg("warning", ` ${q.error}`)); + if (q.state === "error") { + lines.push(`${prefix}${theme.fg("error", ` · ${q.error ?? "Quota unavailable."}`)}`); + continue; } - lines.push(""); + const windows = q.windows.map((window) => { + const reset = window.resetsAt ? ` ↻ ${formatResetDuration(window.resetsAt - nowMs)}` : ""; + return `${window.longLabel} ${theme.fg(thresholdColor(window.usedPercent), `${Math.round(window.usedPercent)}% used`)}${theme.fg("dim", reset)}`; + }); + const details = windows.length > 0 ? windows.join(theme.fg("dim", " · ")) : theme.fg("dim", "No quota windows"); + const staleError = q.error && q.state === "stale" ? theme.fg("warning", ` · ${q.error}`) : ""; + lines.push(`${prefix}${theme.fg("dim", " · ")}${details}${staleError}`); } const updated = formatUpdatedTime(registry.map((provider) => snapshot[provider.id]?.fetchedAt).find(Boolean)); - lines.push(theme.fg("dim", `Updated ${updated}`)); - lines.push(theme.fg("dim", "Run /token-tank again to hide.")); - + lines.push(theme.fg("dim", `Updated ${updated} · /token-tank hides`)); return lines; } diff --git a/src/index.ts b/src/index.ts index ef54985..ead9449 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,6 +2,7 @@ import type { ExtensionAPI, ExtensionContext, } from "@earendil-works/pi-coding-agent"; +import { truncateToWidth } from "@earendil-works/pi-tui"; import { createCredentialSource, type CredentialSourceLike } from "./auth.js"; import { captureCursorSessionToken, fetchCursorQuotaWithToken } from "./cursor.js"; @@ -92,9 +93,9 @@ export function createCoordinator( return { refresh, refreshAll, getSnapshot, clear }; } -function makeThemeLike(ctx: ExtensionContext["ui"]) { +function makeThemeLike(theme: ExtensionContext["ui"]["theme"]) { return { - fg: (color: Parameters[0], text: string) => ctx.theme.fg(color, text), + fg: (color: Parameters[0], text: string) => theme.fg(color, text), }; } @@ -159,7 +160,7 @@ export function createTokenTank( const quota = activeCoordinator.getSnapshot()[provider.id]; ctx.ui.setStatus( STATUS_KEY, - formatFooter(quota, footerMode, makeThemeLike(ctx.ui), provider.footerWindows[footerMode]), + formatFooter(quota, footerMode, makeThemeLike(ctx.ui.theme), provider.footerWindows[footerMode]), ); } @@ -169,10 +170,15 @@ export function createTokenTank( return; } const activeCoordinator = getCoordinator(ctx); - ctx.ui.setWidget( - WIDGET_KEY, - formatWidget(activeCoordinator.getSnapshot(), runtimeRegistry, makeThemeLike(ctx.ui), Date.now()), - ); + const snapshot = activeCoordinator.getSnapshot(); + const widgetRegistry = runtimeRegistry; + ctx.ui.setWidget(WIDGET_KEY, (_tui, theme) => ({ + render(width: number) { + return formatWidget(snapshot, widgetRegistry, makeThemeLike(theme), Date.now()) + .map((line) => truncateToWidth(line, Math.max(1, width), "…")); + }, + invalidate() {}, + })); } async function refreshAndRender(ctx: ExtensionContext, force: boolean) { diff --git a/tests/format.test.ts b/tests/format.test.ts index 0c674cc..7cfd82a 100644 --- a/tests/format.test.ts +++ b/tests/format.test.ts @@ -1,7 +1,7 @@ import { describe, it } from "node:test"; import assert from "node:assert/strict"; import { formatFooter, formatGauge, formatResetTime, formatWidget } from "../src/format.js"; -import { providers } from "../src/providers.js"; +import { createCursorProvider, providers } from "../src/providers.js"; import type { ProviderQuota, QuotaSnapshot } from "../src/types.js"; const theme = { fg: (color: string, text: string) => `[${color}:${text}]` }; @@ -79,13 +79,23 @@ describe("footer gauges", () => { }); describe("formatWidget", () => { - it("retains both provider details", () => { - const snapshot: QuotaSnapshot = { codex: liveQuota("codex", 24, 61), kimi: liveQuota("kimi", 18, 43) }; - const text = formatWidget(snapshot, providers, theme, 1752306000000).join("\n"); + it("keeps every provider to one line below Pi's widget cap", () => { + const registry = [...providers, createCursorProvider()]; + const snapshot: QuotaSnapshot = { + codex: liveQuota("codex", 24, 61), + kimi: liveQuota("kimi", 18, 43), + copilot: { provider: "copilot", state: "missing", windows: [] }, + cursor: { provider: "cursor", state: "missing", windows: [] }, + }; + const lines = formatWidget(snapshot, registry, theme, 1752306000000); + const text = lines.join("\n"); + assert.equal(lines.length, 6); assert.ok(text.includes("Codex")); assert.ok(text.includes("Kimi")); + assert.ok(text.includes("GitHub Copilot")); + assert.ok(text.includes("Cursor")); assert.ok(text.includes("24% used")); - assert.ok(text.includes("Footer size: /token-tank minimal · /token-tank full")); - assert.ok(text.includes("Run /token-tank again to hide.")); + assert.ok(text.includes("/token-tank minimal|full")); + assert.ok(text.includes("/token-tank hides")); }); }); diff --git a/tests/index.test.ts b/tests/index.test.ts index 5899a40..838d10b 100644 --- a/tests/index.test.ts +++ b/tests/index.test.ts @@ -5,6 +5,7 @@ import { join } from "node:path"; import { tmpdir } from "node:os"; import { createTokenTank, providerForModel } from "../src/index.js"; import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent"; +import { visibleWidth } from "@earendil-works/pi-tui"; import type { CredentialSourceLike } from "../src/auth.js"; import type { QuotaProvider } from "../src/types.js"; import codexUsage from "./fixtures/codex-usage.json" with { type: "json" }; @@ -36,6 +37,8 @@ function fakeAPI(provider = "openai-codex", registeredProviderIds: string[] = [] const handlers: Record Promise)[]> = {}; const status: Record = {}; const widgets: Record = {}; + const widgetKinds: Record = {}; + const widgetRenderers: Record string[]) | undefined> = {}; const commands: Record Promise }> = {}; const ctx: ExtensionContext = { @@ -48,8 +51,23 @@ function fakeAPI(provider = "openai-codex", registeredProviderIds: string[] = [] setStatus: (key: string, text: string | undefined) => { status[key] = text; }, - setWidget: (key: string, content: string[] | undefined) => { - widgets[key] = content; + setWidget: (key: string, content: unknown) => { + if (typeof content === "function") { + widgetKinds[key] = "component"; + const component = (content as ( + tui: unknown, + theme: { fg: (color: string, text: string) => string }, + ) => { render: (width: number) => string[] })( + {}, + { fg: (_color: string, text: string) => text }, + ); + widgetRenderers[key] = component.render; + widgets[key] = component.render(96); + } else { + widgetKinds[key] = content === undefined ? undefined : "lines"; + widgetRenderers[key] = undefined; + widgets[key] = content as string[] | undefined; + } }, theme: { fg: (_color: string, text: string) => text, @@ -70,6 +88,8 @@ function fakeAPI(provider = "openai-codex", registeredProviderIds: string[] = [] handlers, status, widgets, + widgetKinds, + widgetRenderers, commands, ctx, async fire(event: string, payload: unknown) { @@ -380,7 +400,10 @@ describe("createTokenTank", () => { assert.ok(widget.includes("GitHub Copilot")); assert.ok(widget.includes("Monthly")); assert.ok(widget.includes("25% used")); - assert.ok(f.widgets["pi-token-tank"]?.includes("Run /token-tank again to hide.")); + assert.equal(f.widgetKinds["pi-token-tank"], "component"); + assert.ok((f.widgets["pi-token-tank"]?.length ?? Infinity) <= 5); + assert.ok(f.widgets["pi-token-tank"]?.some((line) => line.includes("/token-tank hides"))); + assert.ok(f.widgetRenderers["pi-token-tank"]?.(32).every((line) => visibleWidth(line) <= 32)); await f.commands["token-tank"]!.handler("", f.ctx); assert.equal(f.widgets["pi-token-tank"], undefined); } finally { -- 2.51.2 From 89504d88dade517753b89cdb23922f7c8898f2b5 Mon Sep 17 00:00:00 2001 From: "openai-code-agent[bot]" <242516109+Codex@users.noreply.github.com> Date: Tue, 21 Jul 2026 08:19:58 +0000 Subject: [PATCH 19/19] Use relative reset countdowns in footer (hours/days) to match widget behavior Agent-Logs-Url: https://github.com/iurysza/pi-token-tank/sessions/e6d6917a-626b-4221-992c-fdaa61c15946 Co-authored-by: iurysza <4378161+iurysza@users.noreply.github.com> --- README.md | 8 ++++---- src/format.ts | 15 ++++++++++----- tests/format.test.ts | 17 ++++++++++------- 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 2625305..5b7d008 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Provider-aware subscription quota status for Pi. It follows the active model and fetches that provider’s quota. ```text -▰▱▱▱ 24% ↻ 3:25 +▰▱▱▱ 24% ↻ 3h 25m ``` ## Supported providers @@ -58,19 +58,19 @@ Reload Pi after installation or environment changes. Minimal mode is the default and shows the provider’s primary window: ```text -▰▱▱▱ 24% ↻ 3:25 +▰▱▱▱ 24% ↻ 3h 25m ``` Full mode adds the configured detail windows: ```text -5h ▰▱▱▱ 24% ↻ 3:25 · 7d ▰▱▱▱ 15% ↻ Sun 9:00 +5h ▰▱▱▱ 24% ↻ 3h 25m · 7d ▰▱▱▱ 15% ↻ 4d 11h ``` - Four gauge cells represent 25-point usage buckets. - Percentage colors show urgency: green under 70%, yellow under 90%, red at 90%+. - `~` after a percentage means the extension is showing stale last-good data. -- Reset timestamps use local time. +- Reset countdowns show relative time (`3h 25m`, `4d 11h`, or `soon`). ## Commands diff --git a/src/format.ts b/src/format.ts index a8b6a5d..d64f75e 100644 --- a/src/format.ts +++ b/src/format.ts @@ -45,11 +45,15 @@ export function formatResetTime(resetsAt: number, weekly: boolean): string { return weekly ? `${date.toLocaleDateString("en-US", { weekday: "short" })} ${time}` : time; } -function formatFooterWindow(window: QuotaWindow, label: boolean, stale: boolean, theme: ThemeLike): string { +function formatFooterWindow( + window: QuotaWindow, + label: boolean, + stale: boolean, + theme: ThemeLike, + nowMs: number, +): string { const percent = `${window.usedPercent}%${stale ? "~" : ""}`; - const reset = window.resetsAt - ? ` ↻${label ? " " : " "}${formatResetTime(window.resetsAt, window.resetStyle === "weekday-time")}` - : ""; + const reset = window.resetsAt ? ` ↻ ${formatResetDuration(window.resetsAt - nowMs)}` : ""; const prefix = label ? `${window.shortLabel} ` : ""; return `${theme.fg("dim", `${prefix}${formatGauge(window.usedPercent)} `)}${theme.fg(thresholdColor(window.usedPercent), percent)}${theme.fg("dim", reset)}`; } @@ -59,6 +63,7 @@ export function formatFooter( mode: FooterMode, theme: ThemeLike, windowIds?: readonly string[], + nowMs = Date.now(), ): string { if (quota.state === "missing") return theme.fg("dim", "—"); if (quota.state === "error") return theme.fg("dim", "!"); @@ -71,7 +76,7 @@ export function formatFooter( const stale = quota.state === "stale"; const showLabels = mode === "full" || selected.length === 0; return windows - .map((window) => formatFooterWindow(window, showLabels, stale, theme)) + .map((window) => formatFooterWindow(window, showLabels, stale, theme, nowMs)) .join(theme.fg("dim", " · ")); } diff --git a/tests/format.test.ts b/tests/format.test.ts index 7cfd82a..3827f54 100644 --- a/tests/format.test.ts +++ b/tests/format.test.ts @@ -6,14 +6,17 @@ import type { ProviderQuota, QuotaSnapshot } from "../src/types.js"; const theme = { fg: (color: string, text: string) => `[${color}:${text}]` }; const plainTheme = { fg: (_color: string, text: string) => text }; +const NOW_MS = Date.UTC(2025, 6, 12, 0, 0, 0); +const FIVE_HOUR_RESET_MS = NOW_MS + (3 * 60 + 25) * 60_000; +const WEEKLY_RESET_MS = NOW_MS + ((4 * 24 + 11) * 60) * 60_000; function liveQuota(provider: ProviderQuota["provider"], five: number, weekly: number): ProviderQuota { return { provider, state: "live", fetchedAt: 1752306000000, plan: provider === "codex" ? "plus" : "Allegro", windows: [ - { id: "five-hour", shortLabel: "5h", longLabel: "5h", resetStyle: "time", usedPercent: five, resetsAt: new Date(2025, 6, 12, 3, 25).getTime() }, - { id: "weekly", shortLabel: "7d", longLabel: "Weekly", resetStyle: "weekday-time", usedPercent: weekly, resetsAt: new Date(2025, 6, 13, 9, 0).getTime() }, + { id: "five-hour", shortLabel: "5h", longLabel: "5h", resetStyle: "time", usedPercent: five, resetsAt: FIVE_HOUR_RESET_MS }, + { id: "weekly", shortLabel: "7d", longLabel: "Weekly", resetStyle: "weekday-time", usedPercent: weekly, resetsAt: WEEKLY_RESET_MS }, ], }; } @@ -28,16 +31,16 @@ describe("footer gauges", () => { it("renders exact minimal and full shapes", () => { const quota = liveQuota("codex", 24, 15); - assert.equal(formatFooter(quota, "minimal", plainTheme), "▰▱▱▱ 24% ↻ 3:25"); - assert.equal(formatFooter(quota, "full", plainTheme), "5h ▰▱▱▱ 24% ↻ 3:25 · 7d ▰▱▱▱ 15% ↻ Sun 9:00"); + assert.equal(formatFooter(quota, "minimal", plainTheme, undefined, NOW_MS), "▰▱▱▱ 24% ↻ 3h 25m"); + assert.equal(formatFooter(quota, "full", plainTheme, undefined, NOW_MS), "5h ▰▱▱▱ 24% ↻ 3h 25m · 7d ▰▱▱▱ 15% ↻ 4d 11h"); }); it("falls back to and labels a remaining weekly window", () => { const quota = liveQuota("codex", 24, 34); quota.windows = quota.windows.filter((window) => window.id === "weekly"); assert.equal( - formatFooter(quota, "minimal", plainTheme, ["five-hour"]), - "7d ▰▰▱▱ 34% ↻ Sun 9:00", + formatFooter(quota, "minimal", plainTheme, ["five-hour"], NOW_MS), + "7d ▰▰▱▱ 34% ↻ 4d 11h", ); }); @@ -60,7 +63,7 @@ describe("footer gauges", () => { it("marks cached quota percentages as stale", () => { const quota = liveQuota("kimi", 48, 35); quota.state = "stale"; - assert.equal(formatFooter(quota, "minimal", plainTheme), "▰▰▱▱ 48%~ ↻ 3:25"); + assert.equal(formatFooter(quota, "minimal", plainTheme, undefined, NOW_MS), "▰▰▱▱ 48%~ ↻ 3h 25m"); }); it("colors only exact percentages at thresholds", () => {

IXRdu{J>51&jDT6aNt?W@Z*M{du* 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 L)z4*}Q$iB}Xu1s^ -- 2.51.2 From 4a9ecfe40db8e8f998d1776a4fbca73b276459fd Mon Sep 17 00:00:00 2001 From: Iury Souza Date: Sun, 12 Jul 2026 15:32:04 +0200 Subject: [PATCH 10/19] docs: tighten user-facing README --- README.md | 22 ++-------------------- ai-artifacts/provider-adapters.md | 12 +++++++++++- 2 files changed, 13 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 54123ea..91faa83 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@

IXRdu{J>51&jDT6aNt?W@Z*M{du* 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 L)z4*}Q$iB}Xu1s^ literal 174403 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 IvRcNV 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 GGywp&$%+F2 -- 2.51.2 From 5980327345174706f268bc87e9fe83202eb27397 Mon Sep 17 00:00:00 2001 From: Iury Souza Date: Sun, 12 Jul 2026 15:23:38 +0200 Subject: [PATCH 09/19] docs: use centered horizontal Token Tank banner --- README.md | 2 +- assets/token-tank-banner.png | Bin 0 -> 178637 bytes assets/token-tank.png | Bin 215504 -> 0 bytes 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 assets/token-tank-banner.png delete mode 100644 assets/token-tank.png diff --git a/README.md b/README.md index ae89353..54123ea 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@