pullfrog 0.1.98 → 0.1.99

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.
package/dist/internal.js CHANGED
@@ -8,7 +8,7 @@ var __export = (target, all) => {
8
8
  // package.json
9
9
  var package_default = {
10
10
  name: "pullfrog",
11
- version: "0.1.98",
11
+ version: "0.1.99",
12
12
  cliContractVersion: "1",
13
13
  type: "module",
14
14
  bin: {
@@ -74,7 +74,7 @@ var package_default = {
74
74
  undici: "^7.22.0",
75
75
  vitest: "^4.0.17",
76
76
  yaml: "^2.8.2",
77
- yes: "0.2.3",
77
+ yes: "0.2.4",
78
78
  zod: "4.3.6"
79
79
  },
80
80
  repository: {
@@ -14358,6 +14358,7 @@ var providers = {
14358
14358
  displayName: "Claude Haiku",
14359
14359
  resolve: "anthropic/claude-haiku-5-5",
14360
14360
  effort: ["low", "medium", "high", "xhigh", "max"],
14361
+ openRouterEffort: ["none", "low", "medium", "high", "xhigh", "max"],
14361
14362
  openRouterResolve: "openrouter/anthropic/claude-haiku-5.5"
14362
14363
  }
14363
14364
  }
@@ -14513,8 +14514,9 @@ var providers = {
14513
14514
  "grok-4.3": {
14514
14515
  displayName: "Grok 4.3",
14515
14516
  resolve: "xai/grok-4.3",
14516
- effort: ["none", "low", "medium", "high"],
14517
- openRouterResolve: "openrouter/x-ai/grok-4.3"
14517
+ effort: ["none", "low", "medium", "high", "xhigh"],
14518
+ openRouterResolve: "openrouter/x-ai/grok-4.3",
14519
+ openRouterEffort: ["none", "low", "medium", "high"]
14518
14520
  },
14519
14521
  // legacy aliases — xAI retired the entire fast/code-fast line on
14520
14522
  // 2026-05-15 (https://docs.x.ai/developers/migration/may-15-deprecation)
@@ -14561,6 +14563,7 @@ var providers = {
14561
14563
  // models.dev gave the direct id V4.1-Flash's ladder on 2026-09-21, which
14562
14564
  // is what DeepSeek now serves under it — and the same as the Router pin's.
14563
14565
  effort: ["low", "high", "max"],
14566
+ openRouterEffort: ["none", "low", "high", "max"],
14564
14567
  openRouterResolve: "openrouter/deepseek/deepseek-v4-pro-0813",
14565
14568
  preferred: true
14566
14569
  },
@@ -14580,7 +14583,7 @@ var providers = {
14580
14583
  displayName: "DeepSeek Flash",
14581
14584
  resolve: "deepseek/deepseek-flash",
14582
14585
  effort: ["low", "high", "max"],
14583
- openRouterEffort: ["low", "high", "max"],
14586
+ openRouterEffort: ["none", "low", "high", "max"],
14584
14587
  openRouterResolve: "openrouter/deepseek/deepseek-v4.1-flash"
14585
14588
  },
14586
14589
  // legacy aliases — deepseek retires these on 2026-07-24; transparently
@@ -14610,6 +14613,7 @@ var providers = {
14610
14613
  displayName: "Kimi K3",
14611
14614
  resolve: "moonshotai/kimi-k3",
14612
14615
  effort: ["low", "high", "max"],
14616
+ openRouterEffort: ["none", "low", "high", "max"],
14613
14617
  openRouterResolve: "openrouter/moonshotai/kimi-k3",
14614
14618
  preferred: true,
14615
14619
  subagentModel: "kimi-k2"
@@ -14778,6 +14782,7 @@ var providers = {
14778
14782
  displayName: "Claude Haiku",
14779
14783
  resolve: "opencode/claude-haiku-5-5",
14780
14784
  effort: ["low", "medium", "high", "xhigh", "max"],
14785
+ openRouterEffort: ["none", "low", "medium", "high", "xhigh", "max"],
14781
14786
  openRouterResolve: "openrouter/anthropic/claude-haiku-5.5"
14782
14787
  },
14783
14788
  "gpt-sol": {
@@ -14875,7 +14880,7 @@ var providers = {
14875
14880
  resolve: "opencode/kimi-k3",
14876
14881
  // Zen publishes a single rung for K3 where OpenRouter publishes three.
14877
14882
  effort: ["max"],
14878
- openRouterEffort: ["low", "high", "max"],
14883
+ openRouterEffort: ["none", "low", "high", "max"],
14879
14884
  openRouterResolve: "openrouter/moonshotai/kimi-k3",
14880
14885
  subagentModel: "kimi-k2"
14881
14886
  },
@@ -14971,7 +14976,11 @@ var providers = {
14971
14976
  effort: ["minimal", "low", "medium", "high", "xhigh"],
14972
14977
  // free to run, still gated on the provider's own OPENCODE_API_KEY —
14973
14978
  // see the big-pickle note above (#1077).
14974
- isFree: true
14979
+ isFree: true,
14980
+ // Zen answers "Model muse-spark-1.3-contributor-free has been deprecated."
14981
+ // since 2026-10-17 and has no free Muse Spark left; stored picks land on
14982
+ // Big Pickle, as `exo` does, rather than on the paid `muse-spark`.
14983
+ fallback: "opencode/big-pickle"
14975
14984
  },
14976
14985
  // Zen's FREE stealth preview (listed 2026-09-16), the big-pickle shape: an
14977
14986
  // anonymous vendor's model at $0 for a limited time. OpenRouter's listing:
@@ -15000,7 +15009,10 @@ var providers = {
15000
15009
  effort: ["low", "medium", "high", "xhigh", "max"],
15001
15010
  // free to run, still gated on the provider's own OPENCODE_API_KEY —
15002
15011
  // see the big-pickle note above (#1077).
15003
- isFree: true
15012
+ isFree: true,
15013
+ // Zen dropped the free id from `/v1/models` and models.dev deprecated it
15014
+ // by 2026-10-19; stored picks land on Big Pickle, as `step-5-preview` does.
15015
+ fallback: "opencode/big-pickle"
15004
15016
  },
15005
15017
  // Zen's FREE Meituan preview (listed 2026-09-25). Zen's docs: zero
15006
15018
  // retention, no training. Go lists the same free id, but one key reaches
@@ -15038,11 +15050,14 @@ var providers = {
15038
15050
  effort: ["high"],
15039
15051
  // free to run, still gated on the provider's own OPENCODE_API_KEY —
15040
15052
  // see the big-pickle note above (#1077).
15041
- isFree: true
15053
+ isFree: true,
15054
+ // Zen answers "Model exo-free has been deprecated." on both lanes since
15055
+ // 2026-10-09; stored picks land on Big Pickle, as `fledge-alpha` does.
15056
+ fallback: "opencode/big-pickle"
15042
15057
  },
15043
15058
  // Zen's FREE StepFun preview (listed 2026-10-08), the seventh promo. Zen's
15044
15059
  // docs: zero retention, no training. Go lists the same free id; one key
15045
- // reaches both. hidden until a published `pullfrog` resolves it.
15060
+ // reaches both.
15046
15061
  "step-5-preview": {
15047
15062
  displayName: "Step 5 Preview",
15048
15063
  description: "StepFun preview, free for a limited time",
@@ -15051,7 +15066,9 @@ var providers = {
15051
15066
  // free to run, still gated on the provider's own OPENCODE_API_KEY —
15052
15067
  // see the big-pickle note above (#1077).
15053
15068
  isFree: true,
15054
- hidden: true
15069
+ // Zen dropped the free id from `/v1/models` and models.dev deprecated it
15070
+ // by 2026-10-15; stored picks land on Big Pickle, as `exo` does.
15071
+ fallback: "opencode/big-pickle"
15055
15072
  },
15056
15073
  // Zen's live free MiMo, and the second free row in a menu that big-pickle
15057
15074
  // was alone in since `mimo-v2-pro-free` lost its model.
@@ -15140,7 +15157,7 @@ var providers = {
15140
15157
  // Go publishes a single rung for K3 where the OpenRouter route
15141
15158
  // publishes three, so every position lands on `max` here.
15142
15159
  effort: ["max"],
15143
- openRouterEffort: ["low", "high", "max"],
15160
+ openRouterEffort: ["none", "low", "high", "max"],
15144
15161
  openRouterResolve: "openrouter/moonshotai/kimi-k3",
15145
15162
  subagentModel: "kimi-k2"
15146
15163
  },
@@ -15197,7 +15214,10 @@ var providers = {
15197
15214
  "minimax-m2.5": {
15198
15215
  displayName: "MiniMax M2",
15199
15216
  resolve: "opencode-go/minimax-m2.7",
15200
- openRouterResolve: "openrouter/minimax/minimax-m2.7"
15217
+ openRouterResolve: "openrouter/minimax/minimax-m2.7",
15218
+ // models.dev deprecated Go's m2.7 by 2026-10-15 and Go lists no other
15219
+ // M2; M3 is the same vendor at the same $0.30 input price.
15220
+ fallback: "opencode-go/minimax-m3"
15201
15221
  },
15202
15222
  // Xiaomi — Go-only; Zen serves the free `mimo-v2-pro-free` promo instead.
15203
15223
  "mimo-pro": {
@@ -15339,7 +15359,7 @@ var providers = {
15339
15359
  resolve: "openrouter/~anthropic/claude-haiku-latest",
15340
15360
  // the rolling alias moved to Haiku 5.5 on 2026-10-07, which publishes
15341
15361
  // the ladder Haiku 4.5 did not.
15342
- effort: ["low", "medium", "high", "xhigh", "max"],
15362
+ effort: ["none", "low", "medium", "high", "xhigh", "max"],
15343
15363
  openRouterResolve: "openrouter/~anthropic/claude-haiku-latest"
15344
15364
  },
15345
15365
  // pinned to the explicit Sol/Terra/Luna tiers (not the ~openai/gpt-latest
@@ -15453,7 +15473,7 @@ var providers = {
15453
15473
  "deepseek-pro": {
15454
15474
  displayName: "DeepSeek Pro",
15455
15475
  resolve: "openrouter/deepseek/deepseek-v4-pro-0813",
15456
- effort: ["low", "high", "max"],
15476
+ effort: ["none", "low", "high", "max"],
15457
15477
  openRouterResolve: "openrouter/deepseek/deepseek-v4-pro-0813"
15458
15478
  },
15459
15479
  // the V4.1 id, not the bare one — see `deepseek/deepseek-flash` for why
@@ -15462,7 +15482,7 @@ var providers = {
15462
15482
  "deepseek-flash": {
15463
15483
  displayName: "DeepSeek Flash",
15464
15484
  resolve: "openrouter/deepseek/deepseek-v4.1-flash",
15465
- effort: ["low", "high", "max"],
15485
+ effort: ["none", "low", "high", "max"],
15466
15486
  openRouterResolve: "openrouter/deepseek/deepseek-v4.1-flash"
15467
15487
  },
15468
15488
  // legacy alias — deepseek retires this on 2026-07-24; transparently
@@ -15481,7 +15501,7 @@ var providers = {
15481
15501
  "kimi-k3": {
15482
15502
  displayName: "Kimi K3",
15483
15503
  resolve: "openrouter/moonshotai/kimi-k3",
15484
- effort: ["low", "high", "max"],
15504
+ effort: ["none", "low", "high", "max"],
15485
15505
  openRouterResolve: "openrouter/moonshotai/kimi-k3"
15486
15506
  },
15487
15507
  // slug pins the m2 line for DB stability; resolve tracks the current m2.7.
@@ -15605,17 +15625,17 @@ var providers = {
15605
15625
  "kimi-k3": {
15606
15626
  displayName: "Kimi K3",
15607
15627
  resolve: "vercel/moonshotai/kimi-k3",
15608
- effort: ["none", "low", "high", "max"]
15628
+ effort: ["low", "high", "max"]
15609
15629
  },
15610
15630
  "muse-spark": {
15611
15631
  displayName: "Muse Spark",
15612
15632
  resolve: "vercel/meta/muse-spark-1.3",
15613
- effort: ["minimal", "low", "medium", "high", "xhigh"]
15633
+ effort: ["minimal", "low", "medium", "high", "xhigh", "max"]
15614
15634
  },
15615
15635
  "mistral-large": {
15616
15636
  displayName: "Mistral Large",
15617
15637
  resolve: "vercel/mistral/mistral-large-4",
15618
- effort: ["none", "low", "medium", "high"]
15638
+ effort: ["none", "high"]
15619
15639
  }
15620
15640
  }
15621
15641
  })
@@ -17188,6 +17208,14 @@ var selectedCredentialSchema = external_exports.object({
17188
17208
  function subscriptionLabel(input) {
17189
17209
  return input.email ?? `\u2022\u2022\u2022\u2022 ${input.suffix}`;
17190
17210
  }
17211
+ function subscriptionStatusText(subscription) {
17212
+ if (subscription.status === "rejected") return "Rejected";
17213
+ if (subscription.status !== "exhausted") return null;
17214
+ if (!subscription.resetAt) return "Limit reached";
17215
+ const resetAt = new Date(subscription.resetAt);
17216
+ if (resetAt.getTime() <= Date.now()) return null;
17217
+ return `Limit reached \xB7 resets ${resetAt.toLocaleString(void 0, { month: "short", day: "numeric", hour: "numeric", minute: "2-digit" })}`;
17218
+ }
17191
17219
 
17192
17220
  // utils/xaiOAuth.ts
17193
17221
  var XAI_OAUTH_CLIENT_ID = "b1a00492-073a-47ea-816f-4c329264a828";
@@ -17529,6 +17557,7 @@ export {
17529
17557
  subscriptionListSchema,
17530
17558
  subscriptionNameSchema,
17531
17559
  subscriptionSchema,
17560
+ subscriptionStatusText,
17532
17561
  truncateAtLineBoundary,
17533
17562
  updateProgressComment,
17534
17563
  verifyCredential
@@ -32,6 +32,7 @@ export declare function runSandboxed(params: {
32
32
  env: Record<string, string | undefined>;
33
33
  cwd: string;
34
34
  timeout: number;
35
+ seal: boolean;
35
36
  /** live-stream chunks as they arrive, on top of the buffered `output`.
36
37
  * lifecycle hooks use this to keep a long `pnpm test` visible in the
37
38
  * workflow log instead of silent until it exits. */
@@ -34,7 +34,7 @@ export interface CodexAuthBody {
34
34
  refresh_rejected_at?: string;
35
35
  }
36
36
  /** OAuth client id Codex CLI and OpenCode both use against `auth.openai.com`.
37
- * Same chain — a refresh token minted via `codex login --device-auth` can be
37
+ * Same chain — a refresh token minted via `codex login` can be
38
38
  * refreshed against this client_id. */
39
39
  export declare const CODEX_OAUTH_CLIENT_ID = "app_EMoamEEZ73f0CkXaXp7hrann";
40
40
  export declare const CODEX_OAUTH_TOKEN_URL = "https://auth.openai.com/oauth/token";
@@ -75,7 +75,7 @@ export declare function fetchIdTokenFromStash(creds: OidcCredentials): Promise<s
75
75
  * own retry still re-mints. Mid-run refreshes take the stashed-credentials path
76
76
  * (`opts.oidc`) and deliberately bypass this.
77
77
  */
78
- export declare const mintIdToken: (() => Promise<string>) & yes.CacheMethods<undefined, undefined>;
78
+ export declare const mintIdToken: (() => Promise<string>) & yes.AttemptMethod<[], string> & yes.CacheMethods<undefined, undefined, () => Promise<string>>;
79
79
  /**
80
80
  * ensure a GitHub token is available in the environment.
81
81
  *
@@ -88,3 +88,5 @@ export declare function subscriptionLabel(input: {
88
88
  email: string | null;
89
89
  suffix: string;
90
90
  }): string;
91
+ /** the provider's last verdict on a subscription, or null when it last worked. */
92
+ export declare function subscriptionStatusText(subscription: Subscription): string | null;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * the Vercel protection-bypass secret for a request to `url`, if it should carry one. only
3
+ * Pullfrog preview deployments sit behind deployment protection, and the env var is Vercel's
4
+ * own name, so a workflow may hold a different project's secret: it never goes anywhere else.
5
+ */
6
+ export declare function vercelBypassSecretFor(url: URL): string | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pullfrog",
3
- "version": "0.1.98",
3
+ "version": "0.1.99",
4
4
  "cliContractVersion": "1",
5
5
  "type": "module",
6
6
  "bin": {
@@ -66,7 +66,7 @@
66
66
  "undici": "^7.22.0",
67
67
  "vitest": "^4.0.17",
68
68
  "yaml": "^2.8.2",
69
- "yes": "0.2.3",
69
+ "yes": "0.2.4",
70
70
  "zod": "4.3.6"
71
71
  },
72
72
  "repository": {