pullfrog 0.1.81 → 0.1.83
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/agents/claudePretoolGate.d.ts +6 -6
- package/dist/agents/opencodePlugin.d.ts +5 -0
- package/dist/cli.mjs +376 -214
- package/dist/index.js +361 -202
- package/dist/internal.js +156 -95
- package/dist/mcp/searchIssues.d.ts +8 -0
- package/dist/mcp/server.d.ts +1 -0
- package/dist/utils/normalizeEnv.d.ts +1 -1
- package/dist/utils/overrides.d.ts +1 -1
- package/dist/utils/runContext.d.ts +1 -0
- package/dist/utils/runErrorRenderer.d.ts +5 -0
- package/dist/utils/secretCommands.d.ts +20 -0
- package/package.json +3 -2
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.
|
|
11
|
+
version: "0.1.83",
|
|
12
12
|
cliContractVersion: "1",
|
|
13
13
|
type: "module",
|
|
14
14
|
bin: {
|
|
@@ -25,6 +25,7 @@ var package_default = {
|
|
|
25
25
|
typecheck: "tsc --noEmit",
|
|
26
26
|
build: "node esbuild.config.js && tsc -p tsconfig.exports.json",
|
|
27
27
|
"check:entrypoints": "nub scripts/check-entrypoint-imports.ts",
|
|
28
|
+
"check:secret-commands": "nub scripts/check-secret-commands.ts",
|
|
28
29
|
docker: "nub docker.ts",
|
|
29
30
|
play: "nub play.ts",
|
|
30
31
|
runtest: "nub test/run.ts",
|
|
@@ -35,7 +36,7 @@ var package_default = {
|
|
|
35
36
|
},
|
|
36
37
|
devDependencies: {
|
|
37
38
|
"@actions/core": "^1.11.1",
|
|
38
|
-
"@anthropic-ai/claude-code": "2.1.
|
|
39
|
+
"@anthropic-ai/claude-code": "2.1.280",
|
|
39
40
|
"@ark/fs": "0.56.0",
|
|
40
41
|
"@ark/util": "0.56.0",
|
|
41
42
|
"@clack/prompts": "^1.2.0",
|
|
@@ -14339,19 +14340,19 @@ var providers = {
|
|
|
14339
14340
|
// API is the source of truth (#959).
|
|
14340
14341
|
"claude-fable": {
|
|
14341
14342
|
displayName: "Claude Fable",
|
|
14342
|
-
resolve: "anthropic/claude-fable-5",
|
|
14343
|
+
resolve: "anthropic/claude-fable-5-1",
|
|
14343
14344
|
effort: ["low", "medium", "high", "xhigh", "max"],
|
|
14344
14345
|
// rolling alias: models.dev's OpenRouter mirror lags brand-new pinned
|
|
14345
|
-
// versions (claude-fable-5
|
|
14346
|
+
// versions (claude-fable-5 was missing there when this was added), so track ~…-latest to
|
|
14346
14347
|
// stay catalog-valid and auto-follow version bumps.
|
|
14347
14348
|
openRouterResolve: "openrouter/~anthropic/claude-fable-latest",
|
|
14348
14349
|
subagentModel: "claude-sonnet"
|
|
14349
14350
|
},
|
|
14350
14351
|
"claude-opus": {
|
|
14351
14352
|
displayName: "Claude Opus",
|
|
14352
|
-
resolve: "anthropic/claude-opus-5",
|
|
14353
|
+
resolve: "anthropic/claude-opus-5-5",
|
|
14353
14354
|
effort: ["low", "medium", "high", "xhigh", "max"],
|
|
14354
|
-
openRouterResolve: "openrouter/anthropic/claude-opus-5",
|
|
14355
|
+
openRouterResolve: "openrouter/anthropic/claude-opus-5.5",
|
|
14355
14356
|
preferred: true,
|
|
14356
14357
|
subagentModel: "claude-sonnet"
|
|
14357
14358
|
},
|
|
@@ -14386,9 +14387,9 @@ var providers = {
|
|
|
14386
14387
|
},
|
|
14387
14388
|
"gpt-sol": {
|
|
14388
14389
|
displayName: "GPT Sol",
|
|
14389
|
-
resolve: "openai/gpt-
|
|
14390
|
+
resolve: "openai/gpt-6-sol",
|
|
14390
14391
|
effort: ["none", "low", "medium", "high", "xhigh", "max"],
|
|
14391
|
-
openRouterResolve: "openrouter/openai/gpt-
|
|
14392
|
+
openRouterResolve: "openrouter/openai/gpt-6-sol",
|
|
14392
14393
|
preferred: true,
|
|
14393
14394
|
subagentModel: "gpt-terra"
|
|
14394
14395
|
},
|
|
@@ -14398,9 +14399,9 @@ var providers = {
|
|
|
14398
14399
|
"gpt-sol-pro": {
|
|
14399
14400
|
displayName: "GPT Sol Pro",
|
|
14400
14401
|
description: "Maximum reasoning effort",
|
|
14401
|
-
resolve: "openai/gpt-
|
|
14402
|
+
resolve: "openai/gpt-6-sol",
|
|
14402
14403
|
effort: ["none", "low", "medium", "high", "xhigh", "max"],
|
|
14403
|
-
openRouterResolve: "openrouter/openai/gpt-
|
|
14404
|
+
openRouterResolve: "openrouter/openai/gpt-6-sol-pro",
|
|
14404
14405
|
subagentModel: "gpt-sol"
|
|
14405
14406
|
},
|
|
14406
14407
|
// gpt-5.6's balanced mid-tier. selectable on its own and doubles as Sol's
|
|
@@ -14413,9 +14414,9 @@ var providers = {
|
|
|
14413
14414
|
},
|
|
14414
14415
|
"gpt-luna": {
|
|
14415
14416
|
displayName: "GPT Luna",
|
|
14416
|
-
resolve: "openai/gpt-
|
|
14417
|
+
resolve: "openai/gpt-6-luna",
|
|
14417
14418
|
effort: ["none", "low", "medium", "high", "xhigh", "max"],
|
|
14418
|
-
openRouterResolve: "openrouter/openai/gpt-
|
|
14419
|
+
openRouterResolve: "openrouter/openai/gpt-6-luna"
|
|
14419
14420
|
},
|
|
14420
14421
|
// legacy aliases — openai unified the codex line into the main GPT family
|
|
14421
14422
|
// and is shutting down every "-codex" snapshot on 2026-07-23. transparently
|
|
@@ -14509,9 +14510,9 @@ var providers = {
|
|
|
14509
14510
|
models: {
|
|
14510
14511
|
grok: {
|
|
14511
14512
|
displayName: "Grok",
|
|
14512
|
-
resolve: "xai/grok-4.
|
|
14513
|
+
resolve: "xai/grok-4.7",
|
|
14513
14514
|
effort: ["low", "medium", "high", "xhigh"],
|
|
14514
|
-
openRouterResolve: "openrouter/x-ai/grok-4.
|
|
14515
|
+
openRouterResolve: "openrouter/x-ai/grok-4.7",
|
|
14515
14516
|
preferred: true
|
|
14516
14517
|
},
|
|
14517
14518
|
// the Smart ladder's cheap rung: 1.25/2.5 against 4.6's 2/6, and a 0.2
|
|
@@ -14526,17 +14527,17 @@ var providers = {
|
|
|
14526
14527
|
// 2026-05-15 (https://docs.x.ai/developers/migration/may-15-deprecation)
|
|
14527
14528
|
// and now redirects every deprecated text-model slug to grok-4.3 at
|
|
14528
14529
|
// standard pricing. fall back to the live `xai/grok` so the alias
|
|
14529
|
-
// chain resolves to grok-4.
|
|
14530
|
+
// chain resolves to grok-4.7 for both direct-key and OpenRouter users.
|
|
14530
14531
|
"grok-fast": {
|
|
14531
14532
|
displayName: "Grok Fast",
|
|
14532
14533
|
resolve: "xai/grok-4-1-fast",
|
|
14533
|
-
openRouterResolve: "openrouter/x-ai/grok-4.
|
|
14534
|
+
openRouterResolve: "openrouter/x-ai/grok-4.7",
|
|
14534
14535
|
fallback: "xai/grok"
|
|
14535
14536
|
},
|
|
14536
14537
|
"grok-code-fast": {
|
|
14537
14538
|
displayName: "Grok Code Fast",
|
|
14538
14539
|
resolve: "xai/grok-code-fast-1",
|
|
14539
|
-
openRouterResolve: "openrouter/x-ai/grok-4.
|
|
14540
|
+
openRouterResolve: "openrouter/x-ai/grok-4.7",
|
|
14540
14541
|
fallback: "xai/grok"
|
|
14541
14542
|
}
|
|
14542
14543
|
}
|
|
@@ -14564,8 +14565,9 @@ var providers = {
|
|
|
14564
14565
|
"deepseek-pro": {
|
|
14565
14566
|
displayName: "DeepSeek Pro",
|
|
14566
14567
|
resolve: "deepseek/deepseek-v4-pro",
|
|
14567
|
-
|
|
14568
|
-
|
|
14568
|
+
// models.dev gave the direct id V4.1-Flash's ladder on 2026-09-21, which
|
|
14569
|
+
// is what DeepSeek now serves under it — and the same as the Router pin's.
|
|
14570
|
+
effort: ["low", "high", "max"],
|
|
14569
14571
|
openRouterResolve: "openrouter/deepseek/deepseek-v4-pro-0813",
|
|
14570
14572
|
preferred: true
|
|
14571
14573
|
},
|
|
@@ -14629,12 +14631,20 @@ var providers = {
|
|
|
14629
14631
|
// the same models as `moonshotai` above, billed against a Kimi membership
|
|
14630
14632
|
// instead of a Moonshot API balance — a separate endpoint, separate model
|
|
14631
14633
|
// ids and a separate key, which is why it is a provider rather than a second
|
|
14632
|
-
// `envVars` entry. no provider injection is needed: models.dev carries
|
|
14633
|
-
//
|
|
14634
|
-
// `@ai-sdk/
|
|
14634
|
+
// `envVars` entry. no provider injection is needed: models.dev carries the
|
|
14635
|
+
// provider (api `https://api.kimi.com/coding/v1`, npm
|
|
14636
|
+
// `@ai-sdk/openai-compatible`) and opencode's env loop enables it from a bare
|
|
14635
14637
|
// `KIMI_API_KEY`, verified against our pinned opencode-ai@1.18.5 — all four
|
|
14636
14638
|
// ids list in `opencode models` and a run reaches Kimi's own auth check.
|
|
14637
14639
|
//
|
|
14640
|
+
// models.dev renamed that provider on 2026-09-18: `kimi-for-coding` became
|
|
14641
|
+
// `kimi-code-plan-cn` (api.kimi.com — where the console mints the key) and
|
|
14642
|
+
// `kimi-code-plan-global` (api.kimi.ai). opencode resolves providers from
|
|
14643
|
+
// its models.dev cache, so a `resolve` still spelling the old key names a
|
|
14644
|
+
// provider it does not know. the `resolve` targets track models.dev's key;
|
|
14645
|
+
// the provider KEY below is Pullfrog's slug and stays put. see
|
|
14646
|
+
// wiki/kimi-code.md.
|
|
14647
|
+
//
|
|
14638
14648
|
// NO `openRouterResolve` ON PURPOSE. OpenRouter cannot serve a Kimi
|
|
14639
14649
|
// membership, so a Router path here would silently bill the wallet for
|
|
14640
14650
|
// Moonshot pay-as-you-go under a slug picked for the opposite reason. The
|
|
@@ -14644,9 +14654,11 @@ var providers = {
|
|
|
14644
14654
|
// keyless Router pick to the default subsidy model with `noRouterPath`.
|
|
14645
14655
|
"kimi-for-coding": provider({
|
|
14646
14656
|
// "Kimi Code" is the product name on kimi.com/code and in the console the
|
|
14647
|
-
// key is minted from.
|
|
14648
|
-
//
|
|
14649
|
-
// `
|
|
14657
|
+
// key is minted from. the provider KEY stays `kimi-for-coding`: it is the
|
|
14658
|
+
// slug prefix every stored pick, `--model` flag and BYOK card spells, and
|
|
14659
|
+
// it is not what reaches opencode — `enabled_providers` is derived from
|
|
14660
|
+
// the `resolve` prefix (`action/agents/opencode.ts`), which is why the
|
|
14661
|
+
// two may differ here and nowhere else in this file.
|
|
14650
14662
|
displayName: "Kimi Code",
|
|
14651
14663
|
envVars: ["KIMI_API_KEY"],
|
|
14652
14664
|
models: {
|
|
@@ -14657,7 +14669,7 @@ var providers = {
|
|
|
14657
14669
|
"kimi-k3": {
|
|
14658
14670
|
displayName: "Kimi K3",
|
|
14659
14671
|
description: "1M context, but only on Allegretto and above \xB7 Moderato caps it at 256K",
|
|
14660
|
-
resolve: "kimi-
|
|
14672
|
+
resolve: "kimi-code-plan-cn/k3",
|
|
14661
14673
|
effort: ["low", "high", "max"],
|
|
14662
14674
|
subagentModel: "kimi-k2"
|
|
14663
14675
|
},
|
|
@@ -14672,7 +14684,7 @@ var providers = {
|
|
|
14672
14684
|
"kimi-k3-256k": {
|
|
14673
14685
|
displayName: "Kimi K3 256K",
|
|
14674
14686
|
description: "Same model at 256K for ~half the quota \xB7 Moderato or above",
|
|
14675
|
-
resolve: "kimi-
|
|
14687
|
+
resolve: "kimi-code-plan-cn/k3-256k",
|
|
14676
14688
|
effort: ["low", "high", "max"],
|
|
14677
14689
|
preferred: true,
|
|
14678
14690
|
subagentModel: "kimi-k2"
|
|
@@ -14680,7 +14692,7 @@ var providers = {
|
|
|
14680
14692
|
"kimi-k2": {
|
|
14681
14693
|
displayName: "Kimi K2",
|
|
14682
14694
|
description: "Included in every Kimi membership tier",
|
|
14683
|
-
resolve: "kimi-
|
|
14695
|
+
resolve: "kimi-code-plan-cn/kimi-for-coding",
|
|
14684
14696
|
// models.dev published this ladder on 2026-09-14; the catalog gate
|
|
14685
14697
|
// mirrors it, so main was red until the alias carried it too.
|
|
14686
14698
|
effort: ["low", "high", "max"]
|
|
@@ -14688,7 +14700,7 @@ var providers = {
|
|
|
14688
14700
|
"kimi-k2-highspeed": {
|
|
14689
14701
|
displayName: "Kimi K2 HighSpeed",
|
|
14690
14702
|
description: "~6x output speed for ~3x quota \xB7 needs Allegretto or above",
|
|
14691
|
-
resolve: "kimi-
|
|
14703
|
+
resolve: "kimi-code-plan-cn/kimi-for-coding-highspeed"
|
|
14692
14704
|
}
|
|
14693
14705
|
}
|
|
14694
14706
|
}),
|
|
@@ -14753,24 +14765,15 @@ var providers = {
|
|
|
14753
14765
|
},
|
|
14754
14766
|
"claude-opus": {
|
|
14755
14767
|
displayName: "Claude Opus",
|
|
14756
|
-
resolve: "opencode/claude-opus-5",
|
|
14768
|
+
resolve: "opencode/claude-opus-5-5",
|
|
14757
14769
|
effort: ["low", "medium", "high", "xhigh", "max"],
|
|
14758
|
-
openRouterResolve: "openrouter/anthropic/claude-opus-5",
|
|
14759
|
-
subagentModel: "claude-sonnet"
|
|
14760
|
-
//
|
|
14761
|
-
//
|
|
14762
|
-
//
|
|
14763
|
-
//
|
|
14764
|
-
//
|
|
14765
|
-
// claude-fable-5 all 200 on the same key). opencode retries above the AI
|
|
14766
|
-
// SDK emitting no part.updated, so a run just produces nothing until it is
|
|
14767
|
-
// killed — metaideas/init logged six zero-output failures from 2026-08-23.
|
|
14768
|
-
// The 503 has since cleared and the model is STILL unusable: re-measured
|
|
14769
|
-
// 2026-08-26, direct POST /zen/v1/messages is 10/10 200 at 1.3-4.1s while
|
|
14770
|
-
// `opencode run --model opencode/claude-opus-5` on the same trivial prompt
|
|
14771
|
-
// emitted nothing for 240s in CI. A raw-endpoint 200 is not runtime
|
|
14772
|
-
// availability. see wiki/opencode-silent-stall.md
|
|
14773
|
-
fallback: "opencode/claude-sonnet"
|
|
14770
|
+
openRouterResolve: "openrouter/anthropic/claude-opus-5.5",
|
|
14771
|
+
subagentModel: "claude-sonnet"
|
|
14772
|
+
// fell back to Sonnet from 2026-08-25 to 2026-09-25: Zen listed
|
|
14773
|
+
// claude-opus-5 while `opencode run` on it emitted nothing for 240s. A
|
|
14774
|
+
// raw-endpoint 200 is not runtime availability — the fallback was cleared
|
|
14775
|
+
// only once `opencode run` completed on both claude-opus-5 and 5-5. see
|
|
14776
|
+
// wiki/opencode-silent-stall.md
|
|
14774
14777
|
},
|
|
14775
14778
|
"claude-sonnet": {
|
|
14776
14779
|
displayName: "Claude Sonnet",
|
|
@@ -14785,9 +14788,9 @@ var providers = {
|
|
|
14785
14788
|
},
|
|
14786
14789
|
"gpt-sol": {
|
|
14787
14790
|
displayName: "GPT Sol",
|
|
14788
|
-
resolve: "opencode/gpt-
|
|
14791
|
+
resolve: "opencode/gpt-6-sol",
|
|
14789
14792
|
effort: ["none", "low", "medium", "high", "xhigh", "max"],
|
|
14790
|
-
openRouterResolve: "openrouter/openai/gpt-
|
|
14793
|
+
openRouterResolve: "openrouter/openai/gpt-6-sol",
|
|
14791
14794
|
subagentModel: "gpt-terra"
|
|
14792
14795
|
},
|
|
14793
14796
|
"gpt-astra": {
|
|
@@ -14801,9 +14804,9 @@ var providers = {
|
|
|
14801
14804
|
"gpt-sol-pro": {
|
|
14802
14805
|
displayName: "GPT Sol Pro",
|
|
14803
14806
|
description: "Maximum reasoning effort",
|
|
14804
|
-
resolve: "opencode/gpt-
|
|
14807
|
+
resolve: "opencode/gpt-6-sol",
|
|
14805
14808
|
effort: ["none", "low", "medium", "high", "xhigh", "max"],
|
|
14806
|
-
openRouterResolve: "openrouter/openai/gpt-
|
|
14809
|
+
openRouterResolve: "openrouter/openai/gpt-6-sol-pro",
|
|
14807
14810
|
subagentModel: "gpt-sol"
|
|
14808
14811
|
},
|
|
14809
14812
|
// gpt-5.6 balanced mid-tier — selectable + Sol's subagent. see openai above.
|
|
@@ -14815,9 +14818,9 @@ var providers = {
|
|
|
14815
14818
|
},
|
|
14816
14819
|
"gpt-luna": {
|
|
14817
14820
|
displayName: "GPT Luna",
|
|
14818
|
-
resolve: "opencode/gpt-
|
|
14821
|
+
resolve: "opencode/gpt-6-luna",
|
|
14819
14822
|
effort: ["none", "low", "medium", "high", "xhigh", "max"],
|
|
14820
|
-
openRouterResolve: "openrouter/openai/gpt-
|
|
14823
|
+
openRouterResolve: "openrouter/openai/gpt-6-luna"
|
|
14821
14824
|
},
|
|
14822
14825
|
// legacy aliases — see openai provider above for context.
|
|
14823
14826
|
"gpt-codex": {
|
|
@@ -14916,9 +14919,34 @@ var providers = {
|
|
|
14916
14919
|
},
|
|
14917
14920
|
grok: {
|
|
14918
14921
|
displayName: "Grok",
|
|
14919
|
-
resolve: "opencode/grok-4.
|
|
14922
|
+
resolve: "opencode/grok-4.7",
|
|
14920
14923
|
effort: ["low", "medium", "high", "xhigh"],
|
|
14921
|
-
openRouterResolve: "openrouter/x-ai/grok-4.
|
|
14924
|
+
openRouterResolve: "openrouter/x-ai/grok-4.7"
|
|
14925
|
+
},
|
|
14926
|
+
// Zen began listing Qwen's Max and Flash tiers in late 2026-09 (Max on
|
|
14927
|
+
// 09-25); until then `opencode-go` was the only Qwen route, so a Zen
|
|
14928
|
+
// subscriber without Go had none. Plus is still Go-only. Zen's Max entry
|
|
14929
|
+
// publishes a reasoning toggle but no effort rungs.
|
|
14930
|
+
"qwen-max": {
|
|
14931
|
+
displayName: "Qwen Max",
|
|
14932
|
+
resolve: "opencode/qwen3.8-max",
|
|
14933
|
+
openRouterEffort: ["minimal", "low", "medium", "high", "xhigh"],
|
|
14934
|
+
openRouterResolve: "openrouter/qwen/qwen3.8-max-0902",
|
|
14935
|
+
// unlisted until a published `pullfrog` carries this alias (the
|
|
14936
|
+
// merge-vs-publish rule in wiki/models-catalog.md). unhide in the release
|
|
14937
|
+
// that ships it.
|
|
14938
|
+
hidden: true
|
|
14939
|
+
},
|
|
14940
|
+
"qwen-flash": {
|
|
14941
|
+
displayName: "Qwen Flash",
|
|
14942
|
+
resolve: "opencode/qwen3.8-flash",
|
|
14943
|
+
effort: ["low", "medium", "xhigh"],
|
|
14944
|
+
openRouterEffort: [],
|
|
14945
|
+
openRouterResolve: "openrouter/qwen/qwen3.8-flash",
|
|
14946
|
+
// unlisted until a published `pullfrog` carries this alias (the
|
|
14947
|
+
// merge-vs-publish rule in wiki/models-catalog.md). unhide in the release
|
|
14948
|
+
// that ships it.
|
|
14949
|
+
hidden: true
|
|
14922
14950
|
},
|
|
14923
14951
|
"gpt-5-nano": {
|
|
14924
14952
|
displayName: "GPT Nano",
|
|
@@ -14931,8 +14959,12 @@ var providers = {
|
|
|
14931
14959
|
"muse-spark": {
|
|
14932
14960
|
displayName: "Muse Spark",
|
|
14933
14961
|
resolve: "opencode/muse-spark-1.3",
|
|
14934
|
-
|
|
14935
|
-
|
|
14962
|
+
// models.dev dropped `max` from Zen's ladder on 2026-09-19 while the
|
|
14963
|
+
// OpenRouter and direct `meta/` routes kept it; the catalog gate
|
|
14964
|
+
// mirrors what is published per route.
|
|
14965
|
+
effort: ["minimal", "low", "medium", "high", "xhigh"],
|
|
14966
|
+
openRouterResolve: "openrouter/meta/muse-spark-1.3",
|
|
14967
|
+
openRouterEffort: ["minimal", "low", "medium", "high", "xhigh", "max"]
|
|
14936
14968
|
},
|
|
14937
14969
|
// Zen's FREE contributor tier: the same model at $0 because Meta trains
|
|
14938
14970
|
// on the prompts and completions. Zen served it to our key on 2026-09-12
|
|
@@ -14956,13 +14988,38 @@ var providers = {
|
|
|
14956
14988
|
resolve: "opencode/union-alpha",
|
|
14957
14989
|
// free to run, still gated on the provider's own OPENCODE_API_KEY —
|
|
14958
14990
|
// see the big-pickle note above (#1077).
|
|
14959
|
-
isFree: true
|
|
14991
|
+
isFree: true,
|
|
14992
|
+
// Zen dropped the id from `/v1/models` on 2026-09-18, two days after it
|
|
14993
|
+
// listed it, and answers a 500 for it. a stealth preview has no same-
|
|
14994
|
+
// family successor, so stored picks land on the other free stealth
|
|
14995
|
+
// model, as `minimax-m2.5-free` does.
|
|
14996
|
+
fallback: "opencode/big-pickle"
|
|
14997
|
+
},
|
|
14998
|
+
// Zen's FREE stealth preview (listed 2026-09-23), the third after
|
|
14999
|
+
// big-pickle and union-alpha. OpenRouter's listing: prompts and
|
|
15000
|
+
// completions may be retained by the provider, not trained on. unlike the
|
|
15001
|
+
// first two it publishes an effort ladder, so the gate mirrors one here.
|
|
15002
|
+
"space-bunny": {
|
|
15003
|
+
displayName: "Space Bunny",
|
|
15004
|
+
description: "Stealth preview; prompts may be retained",
|
|
15005
|
+
resolve: "opencode/space-bunny-free",
|
|
15006
|
+
effort: ["low", "medium", "high", "xhigh", "max"],
|
|
15007
|
+
// free to run, still gated on the provider's own OPENCODE_API_KEY —
|
|
15008
|
+
// see the big-pickle note above (#1077).
|
|
15009
|
+
isFree: true,
|
|
15010
|
+
// unlisted until a published `pullfrog` carries this alias: 0.1.82
|
|
15011
|
+
// predates it, so a run passes `opencode/space-bunny` through raw and
|
|
15012
|
+
// Zen answers a 500. unhide in the release that ships it.
|
|
15013
|
+
hidden: true
|
|
14960
15014
|
},
|
|
14961
15015
|
// Zen's live free MiMo, and the second free row in a menu that big-pickle
|
|
14962
15016
|
// was alone in since `mimo-v2-pro-free` lost its model.
|
|
14963
15017
|
mimo: {
|
|
14964
15018
|
displayName: "MiMo",
|
|
14965
|
-
|
|
15019
|
+
// models.dev deprecated `mimo-v2.5-free` on 2026-09-22. V2.6-Flash is
|
|
15020
|
+
// the only other MiMo Zen serves, so the slug follows it across the
|
|
15021
|
+
// tier rather than leaving stored picks on a dying id.
|
|
15022
|
+
resolve: "opencode/mimo-v2.6-flash-free",
|
|
14966
15023
|
// free to run, still gated on the provider's own OPENCODE_API_KEY —
|
|
14967
15024
|
// see the big-pickle note above (#1077).
|
|
14968
15025
|
isFree: true
|
|
@@ -14991,11 +15048,12 @@ var providers = {
|
|
|
14991
15048
|
// OpenCode Go is a separate $10/mo subscription from Zen, served on its own
|
|
14992
15049
|
// base URL (`https://opencode.ai/zen/go/v1`) but authenticated with the SAME
|
|
14993
15050
|
// `OPENCODE_API_KEY`. it carries the open-weight coding models plus a couple
|
|
14994
|
-
// of frontier ones,
|
|
14995
|
-
// does not list qwen3.7
|
|
15051
|
+
// of frontier ones, four of which are served ONLY here — Zen's `/v1/models`
|
|
15052
|
+
// does not list qwen3.7-plus, mimo-v2.6-pro, longcat-2.0 or hy3. (it listed
|
|
14996
15053
|
// no glm-5.3* either until 2026-09, which is why `opencode/glm` trailed on
|
|
14997
|
-
// 5.2.) so for a Go subscriber this
|
|
14998
|
-
//
|
|
15054
|
+
// 5.2, and no qwen3.8-* until late 2026-09.) so for a Go subscriber this
|
|
15055
|
+
// provider is not a duplicate route to Zen, it is the only route to a large
|
|
15056
|
+
// part of what they pay for.
|
|
14999
15057
|
// like `opencode` and `openrouter` this is a ROUTER, not a vendor: slugs and
|
|
15000
15058
|
// display names mirror the upstream brand tier, and the picker groups them
|
|
15001
15059
|
// under the upstream vendor.
|
|
@@ -15055,7 +15113,8 @@ var providers = {
|
|
|
15055
15113
|
// picker row that fails for almost everyone is worse than none. DeepSeek
|
|
15056
15114
|
// stays reachable ungated via `deepseek/*`, `opencode/*` and
|
|
15057
15115
|
// `openrouter/*`; both remain runnable by full specifier once opted in.
|
|
15058
|
-
// Alibaba —
|
|
15116
|
+
// Alibaba — Zen serves Max and Flash too (see `opencode/qwen-max`); Plus
|
|
15117
|
+
// is Go-only.
|
|
15059
15118
|
"qwen-max": {
|
|
15060
15119
|
displayName: "Qwen Max",
|
|
15061
15120
|
resolve: "opencode-go/qwen3.8-max",
|
|
@@ -15098,8 +15157,8 @@ var providers = {
|
|
|
15098
15157
|
// Xiaomi — Go-only; Zen serves the free `mimo-v2-pro-free` promo instead.
|
|
15099
15158
|
"mimo-pro": {
|
|
15100
15159
|
displayName: "MiMo Pro",
|
|
15101
|
-
resolve: "opencode-go/mimo-v2.
|
|
15102
|
-
openRouterResolve: "openrouter/xiaomi/mimo-v2.
|
|
15160
|
+
resolve: "opencode-go/mimo-v2.6-pro",
|
|
15161
|
+
openRouterResolve: "openrouter/xiaomi/mimo-v2.6-pro"
|
|
15103
15162
|
},
|
|
15104
15163
|
// Meituan — Go-only.
|
|
15105
15164
|
longcat: {
|
|
@@ -15125,15 +15184,15 @@ var providers = {
|
|
|
15125
15184
|
// wiki/models-catalog.md on `opencode/kimi-k2`.
|
|
15126
15185
|
grok: {
|
|
15127
15186
|
displayName: "Grok",
|
|
15128
|
-
resolve: "opencode-go/grok-4.
|
|
15187
|
+
resolve: "opencode-go/grok-4.7",
|
|
15129
15188
|
effort: ["low", "medium", "high", "xhigh"],
|
|
15130
|
-
openRouterResolve: "openrouter/x-ai/grok-4.
|
|
15189
|
+
openRouterResolve: "openrouter/x-ai/grok-4.7"
|
|
15131
15190
|
},
|
|
15132
15191
|
"gpt-luna": {
|
|
15133
15192
|
displayName: "GPT Luna",
|
|
15134
|
-
resolve: "opencode-go/gpt-
|
|
15193
|
+
resolve: "opencode-go/gpt-6-luna",
|
|
15135
15194
|
effort: ["none", "low", "medium", "high", "xhigh", "max"],
|
|
15136
|
-
openRouterResolve: "openrouter/openai/gpt-
|
|
15195
|
+
openRouterResolve: "openrouter/openai/gpt-6-luna"
|
|
15137
15196
|
}
|
|
15138
15197
|
}
|
|
15139
15198
|
}),
|
|
@@ -15235,15 +15294,15 @@ var providers = {
|
|
|
15235
15294
|
resolve: "openrouter/~anthropic/claude-haiku-latest",
|
|
15236
15295
|
openRouterResolve: "openrouter/~anthropic/claude-haiku-latest"
|
|
15237
15296
|
},
|
|
15238
|
-
// pinned to the explicit
|
|
15239
|
-
// alias): after
|
|
15297
|
+
// pinned to the explicit Sol/Terra/Luna tiers (not the ~openai/gpt-latest
|
|
15298
|
+
// rolling alias): after that rename, ~gpt-mini-latest no longer maps
|
|
15240
15299
|
// to Luna, so rolling aliases would silently diverge `gpt`/`gpt-mini` from
|
|
15241
15300
|
// the chosen tiers across funding paths.
|
|
15242
15301
|
"gpt-sol": {
|
|
15243
15302
|
displayName: "GPT Sol",
|
|
15244
|
-
resolve: "openrouter/openai/gpt-
|
|
15303
|
+
resolve: "openrouter/openai/gpt-6-sol",
|
|
15245
15304
|
effort: ["none", "low", "medium", "high", "xhigh", "max"],
|
|
15246
|
-
openRouterResolve: "openrouter/openai/gpt-
|
|
15305
|
+
openRouterResolve: "openrouter/openai/gpt-6-sol",
|
|
15247
15306
|
subagentModel: "gpt-terra"
|
|
15248
15307
|
},
|
|
15249
15308
|
"gpt-astra": {
|
|
@@ -15257,9 +15316,9 @@ var providers = {
|
|
|
15257
15316
|
"gpt-sol-pro": {
|
|
15258
15317
|
displayName: "GPT Sol Pro",
|
|
15259
15318
|
description: "Maximum reasoning effort",
|
|
15260
|
-
resolve: "openrouter/openai/gpt-
|
|
15319
|
+
resolve: "openrouter/openai/gpt-6-sol-pro",
|
|
15261
15320
|
effort: ["none", "low", "medium", "high", "xhigh", "max"],
|
|
15262
|
-
openRouterResolve: "openrouter/openai/gpt-
|
|
15321
|
+
openRouterResolve: "openrouter/openai/gpt-6-sol-pro",
|
|
15263
15322
|
subagentModel: "gpt-sol"
|
|
15264
15323
|
},
|
|
15265
15324
|
// gpt-5.6 balanced mid-tier — selectable + Sol's subagent. see openai above.
|
|
@@ -15271,9 +15330,9 @@ var providers = {
|
|
|
15271
15330
|
},
|
|
15272
15331
|
"gpt-luna": {
|
|
15273
15332
|
displayName: "GPT Luna",
|
|
15274
|
-
resolve: "openrouter/openai/gpt-
|
|
15333
|
+
resolve: "openrouter/openai/gpt-6-luna",
|
|
15275
15334
|
effort: ["none", "low", "medium", "high", "xhigh", "max"],
|
|
15276
|
-
openRouterResolve: "openrouter/openai/gpt-
|
|
15335
|
+
openRouterResolve: "openrouter/openai/gpt-6-luna"
|
|
15277
15336
|
},
|
|
15278
15337
|
// legacy aliases — see openai provider for context.
|
|
15279
15338
|
"gpt-codex": {
|
|
@@ -15337,9 +15396,9 @@ var providers = {
|
|
|
15337
15396
|
},
|
|
15338
15397
|
grok: {
|
|
15339
15398
|
displayName: "Grok",
|
|
15340
|
-
resolve: "openrouter/x-ai/grok-4.
|
|
15399
|
+
resolve: "openrouter/x-ai/grok-4.7",
|
|
15341
15400
|
effort: ["low", "medium", "high", "xhigh"],
|
|
15342
|
-
openRouterResolve: "openrouter/x-ai/grok-4.
|
|
15401
|
+
openRouterResolve: "openrouter/x-ai/grok-4.7"
|
|
15343
15402
|
},
|
|
15344
15403
|
// dated pin, not the bare id — see `deepseek/deepseek-pro` for why
|
|
15345
15404
|
// OpenRouter's unversioned `deepseek-v4-pro` is the stale April preview.
|
|
@@ -15410,8 +15469,10 @@ var providers = {
|
|
|
15410
15469
|
vercel: provider({
|
|
15411
15470
|
// Vercel AI Gateway — one key serves every model it fronts. model IDs use
|
|
15412
15471
|
// the models.dev `vercel` catalog's own naming (dotted versions, e.g.
|
|
15413
|
-
// `anthropic/claude-opus-5`, `zai/glm-5.3`)
|
|
15414
|
-
//
|
|
15472
|
+
// `anthropic/claude-opus-5.5`, `zai/glm-5.3`). effort ladders come from the
|
|
15473
|
+
// gateway's OWN `/v1/models`, not models.dev — the two disagree routinely
|
|
15474
|
+
// (on 2026-09-22 they disagreed on all ten entries that drifted), and the
|
|
15475
|
+
// drift test reads the gateway for that reason. deliberately no
|
|
15415
15476
|
// `openRouterResolve`: a gateway pick is BYOK-only — silently rerouting it
|
|
15416
15477
|
// over the Router proxy would bill the wallet for traffic the user pointed
|
|
15417
15478
|
// at their own gateway.
|
|
@@ -15420,7 +15481,7 @@ var providers = {
|
|
|
15420
15481
|
models: {
|
|
15421
15482
|
"claude-opus": {
|
|
15422
15483
|
displayName: "Claude Opus",
|
|
15423
|
-
resolve: "vercel/anthropic/claude-opus-5",
|
|
15484
|
+
resolve: "vercel/anthropic/claude-opus-5.5",
|
|
15424
15485
|
effort: ["low", "medium", "high", "xhigh", "max"],
|
|
15425
15486
|
preferred: true,
|
|
15426
15487
|
subagentModel: "claude-sonnet"
|
|
@@ -15428,7 +15489,7 @@ var providers = {
|
|
|
15428
15489
|
"claude-sonnet": {
|
|
15429
15490
|
displayName: "Claude Sonnet",
|
|
15430
15491
|
resolve: "vercel/anthropic/claude-sonnet-5",
|
|
15431
|
-
effort: ["low", "medium", "high", "xhigh"]
|
|
15492
|
+
effort: ["none", "low", "medium", "high", "xhigh", "max"]
|
|
15432
15493
|
},
|
|
15433
15494
|
"claude-haiku": {
|
|
15434
15495
|
displayName: "Claude Haiku",
|
|
@@ -15436,7 +15497,7 @@ var providers = {
|
|
|
15436
15497
|
},
|
|
15437
15498
|
"gpt-sol": {
|
|
15438
15499
|
displayName: "GPT Sol",
|
|
15439
|
-
resolve: "vercel/openai/gpt-
|
|
15500
|
+
resolve: "vercel/openai/gpt-6-sol",
|
|
15440
15501
|
effort: ["none", "low", "medium", "high", "xhigh", "max"],
|
|
15441
15502
|
subagentModel: "gpt-terra"
|
|
15442
15503
|
},
|
|
@@ -15449,35 +15510,35 @@ var providers = {
|
|
|
15449
15510
|
"gpt-terra": {
|
|
15450
15511
|
displayName: "GPT Terra",
|
|
15451
15512
|
resolve: "vercel/openai/gpt-5.6-terra",
|
|
15452
|
-
effort: ["none", "low", "medium", "high", "xhigh", "max"]
|
|
15513
|
+
effort: ["none", "minimal", "low", "medium", "high", "xhigh", "max"]
|
|
15453
15514
|
},
|
|
15454
15515
|
"gpt-luna": {
|
|
15455
15516
|
displayName: "GPT Luna",
|
|
15456
|
-
resolve: "vercel/openai/gpt-
|
|
15517
|
+
resolve: "vercel/openai/gpt-6-luna",
|
|
15457
15518
|
effort: ["none", "low", "medium", "high", "xhigh", "max"]
|
|
15458
15519
|
},
|
|
15459
15520
|
"gemini-pro": {
|
|
15460
15521
|
displayName: "Gemini Pro",
|
|
15461
15522
|
resolve: "vercel/google/gemini-3.1-pro-preview",
|
|
15462
|
-
effort: ["low", "
|
|
15523
|
+
effort: ["low", "high"]
|
|
15463
15524
|
},
|
|
15464
15525
|
"gemini-flash": {
|
|
15465
15526
|
displayName: "Gemini Flash",
|
|
15466
15527
|
resolve: "vercel/google/gemini-3.8-flash",
|
|
15467
|
-
effort: ["low", "
|
|
15528
|
+
effort: ["low", "high"]
|
|
15468
15529
|
},
|
|
15469
15530
|
"deepseek-pro": {
|
|
15470
15531
|
displayName: "DeepSeek Pro",
|
|
15471
15532
|
resolve: "vercel/deepseek/deepseek-v4-pro-0813",
|
|
15472
|
-
effort: ["high", "
|
|
15533
|
+
effort: ["none", "high", "max"]
|
|
15473
15534
|
},
|
|
15474
15535
|
// the gateway's bare `deepseek-v4-flash` is the April preview — the same
|
|
15475
15536
|
// fork trap as OpenRouter, with `deepseek-v4-flash-0731` beside it — so
|
|
15476
|
-
// this entry sat on the preview until V4.1.
|
|
15477
|
-
// effort ladder for the V4.1 id.
|
|
15537
|
+
// this entry sat on the preview until V4.1.
|
|
15478
15538
|
"deepseek-flash": {
|
|
15479
15539
|
displayName: "DeepSeek Flash",
|
|
15480
|
-
resolve: "vercel/deepseek/deepseek-v4.1-flash"
|
|
15540
|
+
resolve: "vercel/deepseek/deepseek-v4.1-flash",
|
|
15541
|
+
effort: ["none", "high", "max"]
|
|
15481
15542
|
},
|
|
15482
15543
|
glm: {
|
|
15483
15544
|
displayName: "GLM",
|
|
@@ -15487,12 +15548,12 @@ var providers = {
|
|
|
15487
15548
|
"kimi-k3": {
|
|
15488
15549
|
displayName: "Kimi K3",
|
|
15489
15550
|
resolve: "vercel/moonshotai/kimi-k3",
|
|
15490
|
-
effort: ["low", "high", "max"]
|
|
15551
|
+
effort: ["none", "low", "high", "max"]
|
|
15491
15552
|
},
|
|
15492
|
-
// the gateway publishes no effort ladder for this id.
|
|
15493
15553
|
"muse-spark": {
|
|
15494
15554
|
displayName: "Muse Spark",
|
|
15495
|
-
resolve: "vercel/meta/muse-spark-1.3"
|
|
15555
|
+
resolve: "vercel/meta/muse-spark-1.3",
|
|
15556
|
+
effort: ["minimal", "low", "medium", "high", "xhigh"]
|
|
15496
15557
|
}
|
|
15497
15558
|
}
|
|
15498
15559
|
})
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ToolContext } from "./server.ts";
|
|
2
|
+
export declare function SearchIssuesTool(ctx: ToolContext): import("fastmcp").Tool<any, import("@standard-schema/spec").StandardSchemaV1<{
|
|
3
|
+
terms: string[];
|
|
4
|
+
}, {
|
|
5
|
+
terms: string[];
|
|
6
|
+
}>> & {
|
|
7
|
+
mutates?: boolean;
|
|
8
|
+
};
|
package/dist/mcp/server.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* that re-emits parts of it leaks the unmasked tail. Trimming canonicalises
|
|
6
6
|
* the value so the mask matches exactly what downstream tools will print.
|
|
7
7
|
*
|
|
8
|
-
* Masking is delegated to `
|
|
8
|
+
* Masking is delegated to `maskSecret` (not raw `console.log`) so the
|
|
9
9
|
* toolkit percent-encodes `\r`/`\n`; the runner V2 parser decodes them and
|
|
10
10
|
* registers the full value plus every non-empty line as separate masks. That
|
|
11
11
|
* keeps us safe for embedded-newline values (PEMs, kubeconfigs, JSON blobs)
|
|
@@ -27,7 +27,7 @@ export declare function parseOverrides(raw: string): Record<string, string>;
|
|
|
27
27
|
/**
|
|
28
28
|
* Mutate `params.env` in place with the supplied JSON overrides, skipping any
|
|
29
29
|
* names in `DENIED_OVERRIDE_NAMES`. Each applied value is registered with
|
|
30
|
-
* `
|
|
30
|
+
* `maskSecret` so the runner masks it in subsequent log output, and the
|
|
31
31
|
* raw `UNSAFE_OVERRIDES` env var is deleted so spawned subprocesses don't
|
|
32
32
|
* inherit the original JSON (which would defeat both the deny-list and the
|
|
33
33
|
* masking by exposing the values verbatim).
|
|
@@ -31,6 +31,11 @@
|
|
|
31
31
|
* provider declines to route it on this account's plan (OpenCode Zen's
|
|
32
32
|
* own refusal string). Same "pick another model" CTA, different reason.
|
|
33
33
|
*
|
|
34
|
+
* 4a'. Zen free-tier gate (#1377) — Zen 403s a free-tier request whose tool
|
|
35
|
+
* list is missing a built-in it expects. The harness keeps `bash` listed,
|
|
36
|
+
* but opencode's auto-compaction request carries no tools, so a long
|
|
37
|
+
* free-Zen run can still die mid-flight on the raw upstream string.
|
|
38
|
+
*
|
|
34
39
|
* 4b. Context-window overflow (#1116) — terminal `Prompt is too long` /
|
|
35
40
|
* `maximum context length is N tokens`. Actionable, so it renders on
|
|
36
41
|
* both surfaces rather than collapsing to the one-line comment.
|