pullfrog 0.1.98 → 0.1.100

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.100",
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
  }
@@ -14474,9 +14475,9 @@ var providers = {
14474
14475
  models: {
14475
14476
  "gemini-pro": {
14476
14477
  displayName: "Gemini Pro",
14477
- resolve: "google/gemini-3.1-pro-preview",
14478
+ resolve: "google/gemini-4-argon",
14478
14479
  effort: ["low", "medium", "high"],
14479
- openRouterResolve: "openrouter/google/gemini-3.1-pro-preview",
14480
+ openRouterResolve: "openrouter/google/gemini-4-argon",
14480
14481
  preferred: true
14481
14482
  // Inherit (subagents stay on Pro). Google has no in-between tier;
14482
14483
  // dropping to Flash for review work was a meaningful capability cliff
@@ -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"
@@ -14663,7 +14667,7 @@ var providers = {
14663
14667
  displayName: "Kimi K3",
14664
14668
  description: "1M context, but only on Allegretto and above \xB7 Moderato caps it at 256K",
14665
14669
  resolve: "kimi-code-plan-cn/k3",
14666
- effort: ["low", "high", "max"],
14670
+ effort: ["none", "low", "high", "max"],
14667
14671
  subagentModel: "kimi-k2"
14668
14672
  },
14669
14673
  // `preferred` sits on the 256K variant rather than the 1M flagship, which
@@ -14678,7 +14682,7 @@ var providers = {
14678
14682
  displayName: "Kimi K3 256K",
14679
14683
  description: "Same model at 256K for ~half the quota \xB7 Moderato or above",
14680
14684
  resolve: "kimi-code-plan-cn/k3-256k",
14681
- effort: ["low", "high", "max"],
14685
+ effort: ["none", "low", "high", "max"],
14682
14686
  preferred: true,
14683
14687
  subagentModel: "kimi-k2"
14684
14688
  },
@@ -14686,9 +14690,10 @@ var providers = {
14686
14690
  displayName: "Kimi K2",
14687
14691
  description: "Included in every Kimi membership tier",
14688
14692
  resolve: "kimi-code-plan-cn/kimi-for-coding",
14689
- // models.dev published this ladder on 2026-09-14; the catalog gate
14690
- // mirrors it, so main was red until the alias carried it too.
14691
- effort: ["low", "high", "max"]
14693
+ // models.dev published `low, high, max` on 2026-09-14 and added `none`
14694
+ // on 2026-10-19; the catalog gate mirrors it, so main was red until the
14695
+ // alias carried it too.
14696
+ effort: ["none", "low", "high", "max"]
14692
14697
  },
14693
14698
  "kimi-k2-highspeed": {
14694
14699
  displayName: "Kimi K2 HighSpeed",
@@ -14778,6 +14783,7 @@ var providers = {
14778
14783
  displayName: "Claude Haiku",
14779
14784
  resolve: "opencode/claude-haiku-5-5",
14780
14785
  effort: ["low", "medium", "high", "xhigh", "max"],
14786
+ openRouterEffort: ["none", "low", "medium", "high", "xhigh", "max"],
14781
14787
  openRouterResolve: "openrouter/anthropic/claude-haiku-5.5"
14782
14788
  },
14783
14789
  "gpt-sol": {
@@ -14857,9 +14863,9 @@ var providers = {
14857
14863
  },
14858
14864
  "gemini-pro": {
14859
14865
  displayName: "Gemini Pro",
14860
- resolve: "opencode/gemini-3.1-pro",
14866
+ resolve: "opencode/gemini-4-argon",
14861
14867
  effort: ["low", "medium", "high"],
14862
- openRouterResolve: "openrouter/google/gemini-3.1-pro-preview"
14868
+ openRouterResolve: "openrouter/google/gemini-4-argon"
14863
14869
  // Inherit — see google/gemini-pro for rationale.
14864
14870
  },
14865
14871
  "gemini-flash": {
@@ -14875,7 +14881,7 @@ var providers = {
14875
14881
  resolve: "opencode/kimi-k3",
14876
14882
  // Zen publishes a single rung for K3 where OpenRouter publishes three.
14877
14883
  effort: ["max"],
14878
- openRouterEffort: ["low", "high", "max"],
14884
+ openRouterEffort: ["none", "low", "high", "max"],
14879
14885
  openRouterResolve: "openrouter/moonshotai/kimi-k3",
14880
14886
  subagentModel: "kimi-k2"
14881
14887
  },
@@ -14971,7 +14977,11 @@ var providers = {
14971
14977
  effort: ["minimal", "low", "medium", "high", "xhigh"],
14972
14978
  // free to run, still gated on the provider's own OPENCODE_API_KEY —
14973
14979
  // see the big-pickle note above (#1077).
14974
- isFree: true
14980
+ isFree: true,
14981
+ // Zen answers "Model muse-spark-1.3-contributor-free has been deprecated."
14982
+ // since 2026-10-17 and has no free Muse Spark left; stored picks land on
14983
+ // Big Pickle, as `exo` does, rather than on the paid `muse-spark`.
14984
+ fallback: "opencode/big-pickle"
14975
14985
  },
14976
14986
  // Zen's FREE stealth preview (listed 2026-09-16), the big-pickle shape: an
14977
14987
  // anonymous vendor's model at $0 for a limited time. OpenRouter's listing:
@@ -15000,7 +15010,10 @@ var providers = {
15000
15010
  effort: ["low", "medium", "high", "xhigh", "max"],
15001
15011
  // free to run, still gated on the provider's own OPENCODE_API_KEY —
15002
15012
  // see the big-pickle note above (#1077).
15003
- isFree: true
15013
+ isFree: true,
15014
+ // Zen dropped the free id from `/v1/models` and models.dev deprecated it
15015
+ // by 2026-10-19; stored picks land on Big Pickle, as `step-5-preview` does.
15016
+ fallback: "opencode/big-pickle"
15004
15017
  },
15005
15018
  // Zen's FREE Meituan preview (listed 2026-09-25). Zen's docs: zero
15006
15019
  // retention, no training. Go lists the same free id, but one key reaches
@@ -15038,11 +15051,14 @@ var providers = {
15038
15051
  effort: ["high"],
15039
15052
  // free to run, still gated on the provider's own OPENCODE_API_KEY —
15040
15053
  // see the big-pickle note above (#1077).
15041
- isFree: true
15054
+ isFree: true,
15055
+ // Zen answers "Model exo-free has been deprecated." on both lanes since
15056
+ // 2026-10-09; stored picks land on Big Pickle, as `fledge-alpha` does.
15057
+ fallback: "opencode/big-pickle"
15042
15058
  },
15043
15059
  // Zen's FREE StepFun preview (listed 2026-10-08), the seventh promo. Zen's
15044
15060
  // docs: zero retention, no training. Go lists the same free id; one key
15045
- // reaches both. hidden until a published `pullfrog` resolves it.
15061
+ // reaches both.
15046
15062
  "step-5-preview": {
15047
15063
  displayName: "Step 5 Preview",
15048
15064
  description: "StepFun preview, free for a limited time",
@@ -15051,7 +15067,9 @@ var providers = {
15051
15067
  // free to run, still gated on the provider's own OPENCODE_API_KEY —
15052
15068
  // see the big-pickle note above (#1077).
15053
15069
  isFree: true,
15054
- hidden: true
15070
+ // Zen dropped the free id from `/v1/models` and models.dev deprecated it
15071
+ // by 2026-10-15; stored picks land on Big Pickle, as `exo` does.
15072
+ fallback: "opencode/big-pickle"
15055
15073
  },
15056
15074
  // Zen's live free MiMo, and the second free row in a menu that big-pickle
15057
15075
  // was alone in since `mimo-v2-pro-free` lost its model.
@@ -15140,7 +15158,7 @@ var providers = {
15140
15158
  // Go publishes a single rung for K3 where the OpenRouter route
15141
15159
  // publishes three, so every position lands on `max` here.
15142
15160
  effort: ["max"],
15143
- openRouterEffort: ["low", "high", "max"],
15161
+ openRouterEffort: ["none", "low", "high", "max"],
15144
15162
  openRouterResolve: "openrouter/moonshotai/kimi-k3",
15145
15163
  subagentModel: "kimi-k2"
15146
15164
  },
@@ -15197,7 +15215,10 @@ var providers = {
15197
15215
  "minimax-m2.5": {
15198
15216
  displayName: "MiniMax M2",
15199
15217
  resolve: "opencode-go/minimax-m2.7",
15200
- openRouterResolve: "openrouter/minimax/minimax-m2.7"
15218
+ openRouterResolve: "openrouter/minimax/minimax-m2.7",
15219
+ // models.dev deprecated Go's m2.7 by 2026-10-15 and Go lists no other
15220
+ // M2; M3 is the same vendor at the same $0.30 input price.
15221
+ fallback: "opencode-go/minimax-m3"
15201
15222
  },
15202
15223
  // Xiaomi — Go-only; Zen serves the free `mimo-v2-pro-free` promo instead.
15203
15224
  "mimo-pro": {
@@ -15339,7 +15360,7 @@ var providers = {
15339
15360
  resolve: "openrouter/~anthropic/claude-haiku-latest",
15340
15361
  // the rolling alias moved to Haiku 5.5 on 2026-10-07, which publishes
15341
15362
  // the ladder Haiku 4.5 did not.
15342
- effort: ["low", "medium", "high", "xhigh", "max"],
15363
+ effort: ["none", "low", "medium", "high", "xhigh", "max"],
15343
15364
  openRouterResolve: "openrouter/~anthropic/claude-haiku-latest"
15344
15365
  },
15345
15366
  // pinned to the explicit Sol/Terra/Luna tiers (not the ~openai/gpt-latest
@@ -15453,7 +15474,7 @@ var providers = {
15453
15474
  "deepseek-pro": {
15454
15475
  displayName: "DeepSeek Pro",
15455
15476
  resolve: "openrouter/deepseek/deepseek-v4-pro-0813",
15456
- effort: ["low", "high", "max"],
15477
+ effort: ["none", "low", "high", "max"],
15457
15478
  openRouterResolve: "openrouter/deepseek/deepseek-v4-pro-0813"
15458
15479
  },
15459
15480
  // the V4.1 id, not the bare one — see `deepseek/deepseek-flash` for why
@@ -15462,7 +15483,7 @@ var providers = {
15462
15483
  "deepseek-flash": {
15463
15484
  displayName: "DeepSeek Flash",
15464
15485
  resolve: "openrouter/deepseek/deepseek-v4.1-flash",
15465
- effort: ["low", "high", "max"],
15486
+ effort: ["none", "low", "high", "max"],
15466
15487
  openRouterResolve: "openrouter/deepseek/deepseek-v4.1-flash"
15467
15488
  },
15468
15489
  // legacy alias — deepseek retires this on 2026-07-24; transparently
@@ -15481,7 +15502,7 @@ var providers = {
15481
15502
  "kimi-k3": {
15482
15503
  displayName: "Kimi K3",
15483
15504
  resolve: "openrouter/moonshotai/kimi-k3",
15484
- effort: ["low", "high", "max"],
15505
+ effort: ["none", "low", "high", "max"],
15485
15506
  openRouterResolve: "openrouter/moonshotai/kimi-k3"
15486
15507
  },
15487
15508
  // slug pins the m2 line for DB stability; resolve tracks the current m2.7.
@@ -15576,8 +15597,8 @@ var providers = {
15576
15597
  },
15577
15598
  "gemini-pro": {
15578
15599
  displayName: "Gemini Pro",
15579
- resolve: "vercel/google/gemini-3.1-pro-preview",
15580
- effort: ["low", "high"]
15600
+ resolve: "vercel/google/gemini-4-argon",
15601
+ effort: ["low", "medium", "high"]
15581
15602
  },
15582
15603
  "gemini-flash": {
15583
15604
  displayName: "Gemini Flash",
@@ -15605,17 +15626,17 @@ var providers = {
15605
15626
  "kimi-k3": {
15606
15627
  displayName: "Kimi K3",
15607
15628
  resolve: "vercel/moonshotai/kimi-k3",
15608
- effort: ["none", "low", "high", "max"]
15629
+ effort: ["low", "high", "max"]
15609
15630
  },
15610
15631
  "muse-spark": {
15611
15632
  displayName: "Muse Spark",
15612
15633
  resolve: "vercel/meta/muse-spark-1.3",
15613
- effort: ["minimal", "low", "medium", "high", "xhigh"]
15634
+ effort: ["minimal", "low", "medium", "high", "xhigh", "max"]
15614
15635
  },
15615
15636
  "mistral-large": {
15616
15637
  displayName: "Mistral Large",
15617
15638
  resolve: "vercel/mistral/mistral-large-4",
15618
- effort: ["none", "low", "medium", "high"]
15639
+ effort: ["none", "high"]
15619
15640
  }
15620
15641
  }
15621
15642
  })
@@ -17188,6 +17209,14 @@ var selectedCredentialSchema = external_exports.object({
17188
17209
  function subscriptionLabel(input) {
17189
17210
  return input.email ?? `\u2022\u2022\u2022\u2022 ${input.suffix}`;
17190
17211
  }
17212
+ function subscriptionStatusText(subscription) {
17213
+ if (subscription.status === "rejected") return "Rejected";
17214
+ if (subscription.status !== "exhausted") return null;
17215
+ if (!subscription.resetAt) return "Limit reached";
17216
+ const resetAt = new Date(subscription.resetAt);
17217
+ if (resetAt.getTime() <= Date.now()) return null;
17218
+ return `Limit reached \xB7 resets ${resetAt.toLocaleString(void 0, { month: "short", day: "numeric", hour: "numeric", minute: "2-digit" })}`;
17219
+ }
17191
17220
 
17192
17221
  // utils/xaiOAuth.ts
17193
17222
  var XAI_OAUTH_CLIENT_ID = "b1a00492-073a-47ea-816f-4c329264a828";
@@ -17529,6 +17558,7 @@ export {
17529
17558
  subscriptionListSchema,
17530
17559
  subscriptionNameSchema,
17531
17560
  subscriptionSchema,
17561
+ subscriptionStatusText,
17532
17562
  truncateAtLineBoundary,
17533
17563
  updateProgressComment,
17534
17564
  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.100",
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": {