pi-multikey 1.9.0 → 1.10.0

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/package.json +1 -1
  2. package/presets.ts +30 -7
  3. package/tui.ts +3 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-multikey",
3
- "version": "1.9.0",
3
+ "version": "1.10.0",
4
4
  "description": "One pi provider backed by many API keys: automatic 429 rotation, per-request key leases for concurrent subagents, and a /multikey management TUI",
5
5
  "keywords": [
6
6
  "pi-package",
package/presets.ts CHANGED
@@ -188,7 +188,7 @@ export const PRESETS: Preset[] = [
188
188
  id: "cline-free",
189
189
  name: "Cline Free",
190
190
  description:
191
- "api.cline.bot — Cline account free tier: DeepSeek V4 Flash, Longcat 2.0, Laguna S 2.1, GLM 5.2 (daily per-model quota, lineup rotates)",
191
+ "api.cline.bot — Cline account free tier: DeepSeek V4 Flash, Longcat 2.0, Laguna S 2.1, GLM 5.3, Solar Pro 4, Muse Spark 1.3 (daily per-model quota, lineup rotates)",
192
192
  defaultPoolId: "cline",
193
193
  baseUrl: "https://api.cline.bot/api/v1",
194
194
  api: "openai-completions",
@@ -215,16 +215,39 @@ export const PRESETS: Preset[] = [
215
215
  name: "Laguna S 2.1 (Free)",
216
216
  reasoning: true,
217
217
  input: ["text"],
218
- // Poolside doesn't publish the window; safe default, tune if needed.
219
- contextWindow: 128_000,
220
- maxTokens: 16_384,
218
+ // Window/output measured from the live free tier (tuned in multikey.json).
219
+ contextWindow: 262_144,
220
+ maxTokens: 32_768,
221
+ },
222
+ {
223
+ // z-ai/glm-5.2:free retired from the Cline lineup (id answers "model not found");
224
+ // succeeded by glm-5.3-flash. Always-on reasoning, no effort tiers; vision input.
225
+ id: "z-ai/glm-5.3-flash",
226
+ name: "GLM 5.3 (Free)",
227
+ reasoning: true,
228
+ input: ["text", "image"],
229
+ contextWindow: 1_048_576,
230
+ maxTokens: 128_000,
221
231
  },
222
232
  {
223
- id: "z-ai/glm-5.2:free",
224
- name: "GLM 5.2 (Free)",
233
+ id: "upstage/solar-pro4",
234
+ name: "Upstage Solar Pro 4",
225
235
  reasoning: true,
226
236
  input: ["text"],
227
- contextWindow: 200_000,
237
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
238
+ contextWindow: 524_000,
239
+ maxTokens: 16_384,
240
+ },
241
+ {
242
+ // Same Meta model as OpenCode Zen's muse-spark-1.3-contributor-free, served
243
+ // through Cline's chat-completions endpoint (no Responses API / session
244
+ // affinity needed). Always-on reasoning; text + image input.
245
+ id: "meta/muse-spark-1.3-contributor",
246
+ name: "Meta Muse Spark 1.3 Contributor",
247
+ reasoning: true,
248
+ input: ["text", "image"],
249
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
250
+ contextWindow: 1_048_576,
228
251
  maxTokens: 131_072,
229
252
  },
230
253
  ],
package/tui.ts CHANGED
@@ -267,7 +267,9 @@ export async function pickMany(
267
267
  if (v.length === 0) {
268
268
  add(theme.fg("warning", " No matches."));
269
269
  } else {
270
- for (let i = 0; i < Math.min(v.length, maxVisible); i++) {
270
+ const start = Math.max(0, Math.min(cursor - Math.floor(maxVisible / 2), Math.max(0, v.length - maxVisible)));
271
+ const end = Math.min(v.length, start + maxVisible);
272
+ for (let i = start; i < end; i++) {
271
273
  const item = v[i]!;
272
274
  const active = i === cursor;
273
275
  const check = selected.has(item.value) ? theme.fg("accent", "✓") : " ";