Simon Shi
a6fd84691b
feat(qoder): port Kiro-style provider integration with COSY signing
Replaces the Qoder placeholder with a real free-tier provider:
- Device-flow OAuth: PKCE + nonce generated locally, user authorizes at
qoder.com/device/selectAccounts, poll openapi.qoder.sh until token
- COSY signing (RSA-1024 + AES-128-CBC + MD5) for chat / model-list
- WAF-bypass body encoding (custom-alphabet base64 + thirds rearrange)
- Live model_config catalog from /algo/api/v2/model/list, cached 1h
- 11 models registered (auto/ultimate/performance/efficient/lite +
6 frontier *model ids)
- Usage fetcher for openapi.qoder.sh/api/v2/quota/usage
- Dashboard live-models resolver, provider test, OAuth modal hookup
- 24 unit tests covering encoder, PKCE, COSY headers, sigPath stripping
2026-05-29 17:36:27 +07:00
..
2026-05-05 10:32:59 +07:00
2026-05-05 10:32:59 +07:00
2026-05-14 10:46:11 +07:00
2026-02-06 20:53:20 +07:00
2026-02-06 20:53:20 +07:00
2026-02-06 20:53:20 +07:00
2026-03-23 09:16:10 +07:00
2026-05-05 10:32:59 +07:00
2026-04-28 17:28:57 +07:00
2026-05-05 10:32:59 +07:00
2026-04-28 17:28:57 +07:00
2026-04-28 17:28:57 +07:00
2026-05-05 10:32:59 +07:00
2026-04-10 10:17:53 +07:00
2026-04-10 10:17:53 +07:00
2026-03-06 09:59:15 +07:00
2026-02-06 20:53:20 +07:00
2026-02-06 20:53:20 +07:00
2026-05-05 10:32:59 +07:00
2026-02-06 20:53:20 +07:00
2026-04-10 10:17:53 +07:00
2026-04-10 10:17:53 +07:00
2026-05-07 23:01:33 +07:00
2026-02-06 20:53:20 +07:00
2026-02-06 20:53:20 +07:00
2026-04-29 11:34:39 +07:00
2026-02-06 20:53:20 +07:00
2026-03-23 09:16:10 +07:00
2026-05-14 10:46:11 +07:00
2026-04-10 10:17:53 +07:00
2026-02-06 20:53:20 +07:00
2026-04-10 10:17:53 +07:00
2026-04-10 10:17:53 +07:00
2026-04-28 17:28:57 +07:00
2026-05-05 10:32:59 +07:00
2026-04-28 17:28:57 +07:00
2026-04-10 10:17:53 +07:00
2026-02-06 20:53:20 +07:00
2026-02-06 20:53:20 +07:00
2026-02-06 20:53:20 +07:00
2026-02-09 10:31:38 +07:00
2026-02-06 20:53:20 +07:00
2026-04-28 17:28:57 +07:00
2026-04-10 10:17:53 +07:00
2026-04-28 17:28:57 +07:00
2026-04-10 10:17:53 +07:00
2026-04-23 16:39:31 +07:00
2026-04-10 10:17:53 +07:00
2026-03-23 09:16:10 +07:00
2026-02-06 20:53:20 +07:00
2026-04-29 11:34:39 +07:00
2026-05-14 10:46:11 +07:00
2026-05-05 10:32:59 +07:00
2026-04-28 17:28:57 +07:00
2026-03-06 09:59:15 +07:00
2026-02-20 17:05:46 +07:00
2026-02-06 20:53:20 +07:00
2026-02-06 20:53:20 +07:00
2026-04-28 17:28:57 +07:00
2026-04-10 10:17:53 +07:00
2026-02-06 20:53:20 +07:00
2026-02-06 20:53:20 +07:00
2026-04-10 10:17:53 +07:00
2026-03-23 09:16:10 +07:00
2026-05-05 10:32:59 +07:00
2026-05-05 10:32:59 +07:00
2026-02-06 20:53:20 +07:00
2026-02-06 20:53:20 +07:00
2026-05-05 10:32:59 +07:00
2026-05-05 10:32:59 +07:00
2026-02-06 20:53:20 +07:00
2026-02-06 20:53:20 +07:00
2026-04-22 14:16:21 +07:00
2026-03-03 10:10:03 +07:00
2026-02-06 20:53:20 +07:00
2026-04-28 17:28:57 +07:00
2026-04-10 10:17:53 +07:00
2026-04-10 10:17:53 +07:00
2026-05-29 17:36:27 +07:00
2026-02-06 20:53:20 +07:00
2026-05-05 10:32:59 +07:00
2026-02-06 20:53:20 +07:00
2026-05-05 10:32:59 +07:00
2026-04-10 10:17:53 +07:00
2026-04-28 17:28:57 +07:00
2026-04-28 17:28:57 +07:00
2026-04-28 17:28:57 +07:00
2026-03-06 09:59:15 +07:00
2026-05-05 10:32:59 +07:00
2026-04-28 17:28:57 +07:00
2026-04-10 10:17:53 +07:00
2026-05-05 10:32:59 +07:00
2026-04-29 11:34:39 +07:00
2026-05-05 10:32:59 +07:00
2026-05-05 10:32:59 +07:00
2026-05-05 10:32:59 +07:00
2026-04-29 11:34:39 +07:00
2026-04-10 10:17:53 +07:00
2026-05-01 16:32:25 +07:00
2026-05-15 10:29:25 +07:00
2026-04-28 17:28:57 +07:00