@magpie-community/opencode-qoder-auth 0.2.12 → 0.2.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +10 -4
  2. package/index.mjs +29 -3
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -91,17 +91,23 @@ itself.
91
91
  ## Models
92
92
 
93
93
  The `provider.models` hook reads the account's own list, as Qoder's client
94
- asks for it (`/algo/api/v2/model/list`). It keeps the enabled chat models
95
- and leaves out "auto" and "default", which route inside Qoder. It takes
94
+ asks for it (`/algo/api/v2/model/list`). It keeps the enabled models of the
95
+ listing's `app` scene, the list Qoder's app shows and the one a request
96
+ names (`session_type: "app"`), and adds any model only the `chat` scene
97
+ still lists after the model it follows there, so a model picked before
98
+ stays served (since 0.2.13, #97: the app listed Fast, 0.8×, where chat
99
+ lists Performance, 1.1×). It leaves out "auto" and "default", which route
100
+ inside Qoder. It takes
96
101
  each model's reasoning levels from its `thinking_config`, and its context
97
102
  from its `context_config`: the largest window it offers (Qoder's docs
98
103
  give Qwen3.8-Flash 200K, 400K and 1M), not `max_input_tokens` (180K
99
104
  there), which is only what a request naming no window gets. A model listed
100
105
  with no windows keeps `max_input_tokens`.
101
106
 
102
- The `config` hook declares the list as it was on 2026-09-30:
107
+ The `config` hook declares the list as it was on 2026-09-30, with the
108
+ app's Fast from 2026-10-12:
103
109
 
104
- - Ultimate, Performance, Efficient
110
+ - Ultimate, Fast, Performance, Efficient
105
111
  - Sonus, Cantus
106
112
  - Qwen3.8-Max, Qwen3.8-Flash, Qwen3.7-Max, Qwen3.7-Plus
107
113
  - Kimi-K3, Kimi-K2.8-Preview
package/index.mjs CHANGED
@@ -340,9 +340,11 @@ async function refreshJob(site, refresh, user) {
340
340
  const EFFORT_ORDER = ["minimal", "low", "medium", "high", "xhigh", "max"]
341
341
  const EFF5 = ["low", "medium", "high", "xhigh", "max"]
342
342
 
343
- // Qoder's list when the account's can't be asked (as it was on 2026-09-30).
343
+ // Qoder's list when the account's can't be asked (as it was on 2026-09-30,
344
+ // with the app's Fast from 2026-10-12).
344
345
  const MODELS = [
345
346
  { id: "ultimate", name: "Ultimate", context: 1_000_000, efforts: EFF5 },
347
+ { id: "fast", name: "Fast", context: 1_000_000 },
346
348
  { id: "performance", name: "Performance", context: 1_000_000, efforts: EFF5 },
347
349
  { id: "efficient", name: "Efficient", context: 200_000 },
348
350
  { id: "smodel", name: "Sonus", context: 180_000, efforts: EFF5 },
@@ -485,10 +487,34 @@ function modelInfo(raw) {
485
487
  return m
486
488
  }
487
489
 
488
- // modelInfos is the listing's enabled chat models an agent can pick: "auto"
490
+ // sceneModels is the models an agent can pick from the listing: the "app"
491
+ // scene's, which is what Qoder's app shows and what a request names
492
+ // (qoderBody's product and session_type "app"), in its order, then any
493
+ // "chat" model the app no longer lists, after the model it followed there,
494
+ // so a pick made before stays served. On 2026-10-12 the app listed Fast
495
+ // (fast, 0.8×) where Performance (1.1×) had been, and chat still listed
496
+ // Performance (magpie-community/plugins#97). A listing with only one scene
497
+ // gives that one. Each key once: the app's entry wins.
498
+ function sceneModels(listing) {
499
+ const app = Array.isArray(listing?.app) ? listing.app : []
500
+ const chat = Array.isArray(listing?.chat) ? listing.chat : []
501
+ const out = [...app]
502
+ let after = -1
503
+ for (const m of chat) {
504
+ const i = out.findIndex((x) => x?.key === m?.key)
505
+ if (i >= 0) {
506
+ after = i
507
+ continue
508
+ }
509
+ out.splice(++after, 0, m)
510
+ }
511
+ return out
512
+ }
513
+
514
+ // modelInfos is the listing's enabled models an agent can pick: "auto"
489
515
  // and "default" route inside Qoder and aren't one model.
490
516
  function modelInfos(listing) {
491
- return (listing?.chat ?? [])
517
+ return sceneModels(listing)
492
518
  .filter((m) => m?.enable && !["", "auto", "default"].includes(String(m.key ?? "").trim()))
493
519
  .map(modelInfo)
494
520
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@magpie-community/opencode-qoder-auth",
3
- "version": "0.2.12",
3
+ "version": "0.2.13",
4
4
  "description": "Qoder subscriptions in OpenCode and magpie: Qoder (qoder.com) and Qoder CN (qoder.cn)",
5
5
  "type": "module",
6
6
  "main": "./index.mjs",