pullfrog 0.1.97 → 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.97",
11
+ version: "0.1.99",
12
12
  cliContractVersion: "1",
13
13
  type: "module",
14
14
  bin: {
@@ -36,7 +36,7 @@ var package_default = {
36
36
  },
37
37
  devDependencies: {
38
38
  "@actions/core": "^1.11.1",
39
- "@anthropic-ai/claude-code": "2.1.284",
39
+ "@anthropic-ai/claude-code": "2.1.293",
40
40
  "@ark/fs": "0.56.0",
41
41
  "@ark/util": "0.56.0",
42
42
  "@clack/prompts": "^1.2.0",
@@ -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: {
@@ -14356,8 +14356,10 @@ var providers = {
14356
14356
  },
14357
14357
  "claude-haiku": {
14358
14358
  displayName: "Claude Haiku",
14359
- resolve: "anthropic/claude-haiku-4-5",
14360
- openRouterResolve: "openrouter/anthropic/claude-haiku-4.5"
14359
+ resolve: "anthropic/claude-haiku-5-5",
14360
+ effort: ["low", "medium", "high", "xhigh", "max"],
14361
+ openRouterEffort: ["none", "low", "medium", "high", "xhigh", "max"],
14362
+ openRouterResolve: "openrouter/anthropic/claude-haiku-5.5"
14361
14363
  }
14362
14364
  }
14363
14365
  }),
@@ -14512,8 +14514,9 @@ var providers = {
14512
14514
  "grok-4.3": {
14513
14515
  displayName: "Grok 4.3",
14514
14516
  resolve: "xai/grok-4.3",
14515
- effort: ["none", "low", "medium", "high"],
14516
- 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"]
14517
14520
  },
14518
14521
  // legacy aliases — xAI retired the entire fast/code-fast line on
14519
14522
  // 2026-05-15 (https://docs.x.ai/developers/migration/may-15-deprecation)
@@ -14560,6 +14563,7 @@ var providers = {
14560
14563
  // models.dev gave the direct id V4.1-Flash's ladder on 2026-09-21, which
14561
14564
  // is what DeepSeek now serves under it — and the same as the Router pin's.
14562
14565
  effort: ["low", "high", "max"],
14566
+ openRouterEffort: ["none", "low", "high", "max"],
14563
14567
  openRouterResolve: "openrouter/deepseek/deepseek-v4-pro-0813",
14564
14568
  preferred: true
14565
14569
  },
@@ -14579,7 +14583,7 @@ var providers = {
14579
14583
  displayName: "DeepSeek Flash",
14580
14584
  resolve: "deepseek/deepseek-flash",
14581
14585
  effort: ["low", "high", "max"],
14582
- openRouterEffort: ["low", "high", "max"],
14586
+ openRouterEffort: ["none", "low", "high", "max"],
14583
14587
  openRouterResolve: "openrouter/deepseek/deepseek-v4.1-flash"
14584
14588
  },
14585
14589
  // legacy aliases — deepseek retires these on 2026-07-24; transparently
@@ -14609,6 +14613,7 @@ var providers = {
14609
14613
  displayName: "Kimi K3",
14610
14614
  resolve: "moonshotai/kimi-k3",
14611
14615
  effort: ["low", "high", "max"],
14616
+ openRouterEffort: ["none", "low", "high", "max"],
14612
14617
  openRouterResolve: "openrouter/moonshotai/kimi-k3",
14613
14618
  preferred: true,
14614
14619
  subagentModel: "kimi-k2"
@@ -14775,8 +14780,10 @@ var providers = {
14775
14780
  },
14776
14781
  "claude-haiku": {
14777
14782
  displayName: "Claude Haiku",
14778
- resolve: "opencode/claude-haiku-4-5",
14779
- openRouterResolve: "openrouter/anthropic/claude-haiku-4.5"
14783
+ resolve: "opencode/claude-haiku-5-5",
14784
+ effort: ["low", "medium", "high", "xhigh", "max"],
14785
+ openRouterEffort: ["none", "low", "medium", "high", "xhigh", "max"],
14786
+ openRouterResolve: "openrouter/anthropic/claude-haiku-5.5"
14780
14787
  },
14781
14788
  "gpt-sol": {
14782
14789
  displayName: "GPT Sol",
@@ -14873,7 +14880,7 @@ var providers = {
14873
14880
  resolve: "opencode/kimi-k3",
14874
14881
  // Zen publishes a single rung for K3 where OpenRouter publishes three.
14875
14882
  effort: ["max"],
14876
- openRouterEffort: ["low", "high", "max"],
14883
+ openRouterEffort: ["none", "low", "high", "max"],
14877
14884
  openRouterResolve: "openrouter/moonshotai/kimi-k3",
14878
14885
  subagentModel: "kimi-k2"
14879
14886
  },
@@ -14933,13 +14940,12 @@ var providers = {
14933
14940
  openRouterResolve: "openrouter/qwen/qwen3.8-flash"
14934
14941
  },
14935
14942
  // Zen lists Mistral Large 4 at half its list price for launch, level with
14936
- // the routers. hidden until a published `pullfrog` resolves it, as there.
14943
+ // the routers.
14937
14944
  "mistral-large": {
14938
14945
  displayName: "Mistral Large",
14939
14946
  resolve: "opencode/mistral-large-4",
14940
14947
  effort: ["none", "high"],
14941
- openRouterResolve: "openrouter/mistralai/mistral-large-4-0",
14942
- hidden: true
14948
+ openRouterResolve: "openrouter/mistralai/mistral-large-4-0"
14943
14949
  },
14944
14950
  "gpt-5-nano": {
14945
14951
  displayName: "GPT Nano",
@@ -14970,7 +14976,11 @@ var providers = {
14970
14976
  effort: ["minimal", "low", "medium", "high", "xhigh"],
14971
14977
  // free to run, still gated on the provider's own OPENCODE_API_KEY —
14972
14978
  // see the big-pickle note above (#1077).
14973
- 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"
14974
14984
  },
14975
14985
  // Zen's FREE stealth preview (listed 2026-09-16), the big-pickle shape: an
14976
14986
  // anonymous vendor's model at $0 for a limited time. OpenRouter's listing:
@@ -14999,7 +15009,10 @@ var providers = {
14999
15009
  effort: ["low", "medium", "high", "xhigh", "max"],
15000
15010
  // free to run, still gated on the provider's own OPENCODE_API_KEY —
15001
15011
  // see the big-pickle note above (#1077).
15002
- 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"
15003
15016
  },
15004
15017
  // Zen's FREE Meituan preview (listed 2026-09-25). Zen's docs: zero
15005
15018
  // retention, no training. Go lists the same free id, but one key reaches
@@ -15021,10 +15034,14 @@ var providers = {
15021
15034
  effort: ["low", "high", "max"],
15022
15035
  // free to run, still gated on the provider's own OPENCODE_API_KEY —
15023
15036
  // see the big-pickle note above (#1077).
15024
- isFree: true
15037
+ isFree: true,
15038
+ // Zen dropped the id from `/v1/models` and its docs on 2026-10-08 and
15039
+ // answers a 500 for it; stored picks land on the other free stealth
15040
+ // model, as `union-alpha` does.
15041
+ fallback: "opencode/big-pickle"
15025
15042
  },
15026
15043
  // Zen's FREE preview (listed 2026-10-06), the sixth promo, on Fledge
15027
- // Alpha's terms. hidden until a published `pullfrog` resolves it.
15044
+ // Alpha's terms.
15028
15045
  exo: {
15029
15046
  displayName: "Exo",
15030
15047
  description: "Preview; data may be used to improve it",
@@ -15034,7 +15051,24 @@ var providers = {
15034
15051
  // free to run, still gated on the provider's own OPENCODE_API_KEY —
15035
15052
  // see the big-pickle note above (#1077).
15036
15053
  isFree: true,
15037
- hidden: 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"
15057
+ },
15058
+ // Zen's FREE StepFun preview (listed 2026-10-08), the seventh promo. Zen's
15059
+ // docs: zero retention, no training. Go lists the same free id; one key
15060
+ // reaches both.
15061
+ "step-5-preview": {
15062
+ displayName: "Step 5 Preview",
15063
+ description: "StepFun preview, free for a limited time",
15064
+ resolve: "opencode/step-5-preview-free",
15065
+ effort: ["low", "medium", "high"],
15066
+ // free to run, still gated on the provider's own OPENCODE_API_KEY —
15067
+ // see the big-pickle note above (#1077).
15068
+ isFree: 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"
15038
15072
  },
15039
15073
  // Zen's live free MiMo, and the second free row in a menu that big-pickle
15040
15074
  // was alone in since `mimo-v2-pro-free` lost its model.
@@ -15123,7 +15157,7 @@ var providers = {
15123
15157
  // Go publishes a single rung for K3 where the OpenRouter route
15124
15158
  // publishes three, so every position lands on `max` here.
15125
15159
  effort: ["max"],
15126
- openRouterEffort: ["low", "high", "max"],
15160
+ openRouterEffort: ["none", "low", "high", "max"],
15127
15161
  openRouterResolve: "openrouter/moonshotai/kimi-k3",
15128
15162
  subagentModel: "kimi-k2"
15129
15163
  },
@@ -15180,7 +15214,10 @@ var providers = {
15180
15214
  "minimax-m2.5": {
15181
15215
  displayName: "MiniMax M2",
15182
15216
  resolve: "opencode-go/minimax-m2.7",
15183
- 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"
15184
15221
  },
15185
15222
  // Xiaomi — Go-only; Zen serves the free `mimo-v2-pro-free` promo instead.
15186
15223
  "mimo-pro": {
@@ -15320,6 +15357,9 @@ var providers = {
15320
15357
  "claude-haiku": {
15321
15358
  displayName: "Claude Haiku",
15322
15359
  resolve: "openrouter/~anthropic/claude-haiku-latest",
15360
+ // the rolling alias moved to Haiku 5.5 on 2026-10-07, which publishes
15361
+ // the ladder Haiku 4.5 did not.
15362
+ effort: ["none", "low", "medium", "high", "xhigh", "max"],
15323
15363
  openRouterResolve: "openrouter/~anthropic/claude-haiku-latest"
15324
15364
  },
15325
15365
  // pinned to the explicit Sol/Terra/Luna tiers (not the ~openai/gpt-latest
@@ -15433,7 +15473,7 @@ var providers = {
15433
15473
  "deepseek-pro": {
15434
15474
  displayName: "DeepSeek Pro",
15435
15475
  resolve: "openrouter/deepseek/deepseek-v4-pro-0813",
15436
- effort: ["low", "high", "max"],
15476
+ effort: ["none", "low", "high", "max"],
15437
15477
  openRouterResolve: "openrouter/deepseek/deepseek-v4-pro-0813"
15438
15478
  },
15439
15479
  // the V4.1 id, not the bare one — see `deepseek/deepseek-flash` for why
@@ -15442,7 +15482,7 @@ var providers = {
15442
15482
  "deepseek-flash": {
15443
15483
  displayName: "DeepSeek Flash",
15444
15484
  resolve: "openrouter/deepseek/deepseek-v4.1-flash",
15445
- effort: ["low", "high", "max"],
15485
+ effort: ["none", "low", "high", "max"],
15446
15486
  openRouterResolve: "openrouter/deepseek/deepseek-v4.1-flash"
15447
15487
  },
15448
15488
  // legacy alias — deepseek retires this on 2026-07-24; transparently
@@ -15461,7 +15501,7 @@ var providers = {
15461
15501
  "kimi-k3": {
15462
15502
  displayName: "Kimi K3",
15463
15503
  resolve: "openrouter/moonshotai/kimi-k3",
15464
- effort: ["low", "high", "max"],
15504
+ effort: ["none", "low", "high", "max"],
15465
15505
  openRouterResolve: "openrouter/moonshotai/kimi-k3"
15466
15506
  },
15467
15507
  // slug pins the m2 line for DB stability; resolve tracks the current m2.7.
@@ -15492,16 +15532,13 @@ var providers = {
15492
15532
  effort: ["minimal", "low", "medium", "high", "xhigh", "max"],
15493
15533
  openRouterResolve: "openrouter/meta/muse-spark-1.3-contributor"
15494
15534
  },
15495
- // Mistral's flagship (public preview, 2026-10-06), on the routers only:
15496
- // the catalog carries no direct Mistral provider. out of the pickers
15497
- // until a published `pullfrog` resolves the slug; see "A new alias
15498
- // reaches the picker at merge".
15535
+ // Mistral's flagship (public preview, 2026-10-06), on the routers and
15536
+ // Zen only: the catalog carries no direct Mistral provider.
15499
15537
  "mistral-large": {
15500
15538
  displayName: "Mistral Large",
15501
15539
  resolve: "openrouter/mistralai/mistral-large-4-0",
15502
15540
  effort: ["none", "high"],
15503
- openRouterResolve: "openrouter/mistralai/mistral-large-4-0",
15504
- hidden: true
15541
+ openRouterResolve: "openrouter/mistralai/mistral-large-4-0"
15505
15542
  }
15506
15543
  }
15507
15544
  }),
@@ -15532,7 +15569,8 @@ var providers = {
15532
15569
  },
15533
15570
  "claude-haiku": {
15534
15571
  displayName: "Claude Haiku",
15535
- resolve: "vercel/anthropic/claude-haiku-4.5"
15572
+ resolve: "vercel/anthropic/claude-haiku-5.5",
15573
+ effort: ["none", "low", "medium", "high", "xhigh", "max"]
15536
15574
  },
15537
15575
  "gpt-sol": {
15538
15576
  displayName: "GPT Sol",
@@ -15587,19 +15625,17 @@ var providers = {
15587
15625
  "kimi-k3": {
15588
15626
  displayName: "Kimi K3",
15589
15627
  resolve: "vercel/moonshotai/kimi-k3",
15590
- effort: ["none", "low", "high", "max"]
15628
+ effort: ["low", "high", "max"]
15591
15629
  },
15592
15630
  "muse-spark": {
15593
15631
  displayName: "Muse Spark",
15594
15632
  resolve: "vercel/meta/muse-spark-1.3",
15595
- effort: ["minimal", "low", "medium", "high", "xhigh"]
15633
+ effort: ["minimal", "low", "medium", "high", "xhigh", "max"]
15596
15634
  },
15597
- // hidden until a published `pullfrog` resolves it, as on OpenRouter.
15598
15635
  "mistral-large": {
15599
15636
  displayName: "Mistral Large",
15600
15637
  resolve: "vercel/mistral/mistral-large-4",
15601
- effort: ["none", "low", "medium", "high"],
15602
- hidden: true
15638
+ effort: ["none", "high"]
15603
15639
  }
15604
15640
  }
15605
15641
  })
@@ -17172,6 +17208,14 @@ var selectedCredentialSchema = external_exports.object({
17172
17208
  function subscriptionLabel(input) {
17173
17209
  return input.email ?? `\u2022\u2022\u2022\u2022 ${input.suffix}`;
17174
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
+ }
17175
17219
 
17176
17220
  // utils/xaiOAuth.ts
17177
17221
  var XAI_OAUTH_CLIENT_ID = "b1a00492-073a-47ea-816f-4c329264a828";
@@ -17513,6 +17557,7 @@ export {
17513
17557
  subscriptionListSchema,
17514
17558
  subscriptionNameSchema,
17515
17559
  subscriptionSchema,
17560
+ subscriptionStatusText,
17516
17561
  truncateAtLineBoundary,
17517
17562
  updateProgressComment,
17518
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.97",
3
+ "version": "0.1.99",
4
4
  "cliContractVersion": "1",
5
5
  "type": "module",
6
6
  "bin": {
@@ -28,7 +28,7 @@
28
28
  },
29
29
  "devDependencies": {
30
30
  "@actions/core": "^1.11.1",
31
- "@anthropic-ai/claude-code": "2.1.284",
31
+ "@anthropic-ai/claude-code": "2.1.293",
32
32
  "@ark/fs": "0.56.0",
33
33
  "@ark/util": "0.56.0",
34
34
  "@clack/prompts": "^1.2.0",
@@ -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": {