pullfrog 0.1.34 → 0.1.35

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.
@@ -22,7 +22,7 @@ export declare function geminiHighThinkingOverrides(): Record<string, {
22
22
  *
23
23
  * Per-subagent `model:` override is driven by the registry in
24
24
  * `action/models.ts` via each alias's `subagentModel` field. Currently wired:
25
- * Anthropic opus → sonnet, OpenAI gpt-pro → gpt and gpt → gpt-5.4, Google
25
+ * Anthropic opus → sonnet, OpenAI gpt-pro → gpt and gpt → gpt-terra, Google
26
26
  * gemini-pro → gemini-flash. Other providers inherit (no override).
27
27
  */
28
28
  export declare function buildReviewerAgentConfig(orchestratorModel: string | undefined): Record<string, unknown>;
package/dist/cli.mjs CHANGED
@@ -101788,37 +101788,40 @@ var providers = {
101788
101788
  managedCredentials: ["CODEX_AUTH_JSON"],
101789
101789
  models: {
101790
101790
  gpt: {
101791
- displayName: "GPT",
101792
- resolve: "openai/gpt-5.5",
101793
- openRouterResolve: "openrouter/openai/gpt-5.5",
101791
+ displayName: "GPT Sol",
101792
+ resolve: "openai/gpt-5.6-sol",
101793
+ openRouterResolve: "openrouter/openai/gpt-5.6-sol",
101794
101794
  preferred: true,
101795
- subagentModel: "gpt-5.4"
101795
+ subagentModel: "gpt-terra"
101796
101796
  },
101797
+ // Sol served at reasoning.mode=pro — same $/token as Sol, just more tokens
101798
+ // burned; not a pricier premium tier. models.dev has no -pro id, so direct-key
101799
+ // (BYOK) resolves to plain Sol; only the Router/OpenRouter path gets sol-pro.
101797
101800
  "gpt-pro": {
101798
- displayName: "GPT Pro",
101799
- resolve: "openai/gpt-5.5-pro",
101800
- openRouterResolve: "openrouter/openai/gpt-5.5-pro",
101801
+ displayName: "GPT Sol Pro",
101802
+ description: "Maximum reasoning effort",
101803
+ resolve: "openai/gpt-5.6-sol",
101804
+ openRouterResolve: "openrouter/openai/gpt-5.6-sol-pro",
101801
101805
  subagentModel: "gpt"
101802
101806
  },
101803
- // hidden subagent target `gpt` lenses run against this. surfacing
101804
- // it in the picker would just confuse users (it's the prior-flagship,
101805
- // and they already have `gpt` and `gpt-mini` to choose from).
101806
- "gpt-5.4": {
101807
- displayName: "GPT 5.4",
101808
- resolve: "openai/gpt-5.4",
101809
- openRouterResolve: "openrouter/openai/gpt-5.4",
101810
- hidden: true
101807
+ // gpt-5.6's balanced mid-tier (Sol/Terra/Luna are durable capability tiers,
101808
+ // not version bumps). selectable on its own and doubles as `gpt`'s cheaper
101809
+ // lens-fanout subagent replaces the old hidden gpt-5.4 subagent target.
101810
+ "gpt-terra": {
101811
+ displayName: "GPT Terra",
101812
+ resolve: "openai/gpt-5.6-terra",
101813
+ openRouterResolve: "openrouter/openai/gpt-5.6-terra"
101811
101814
  },
101812
101815
  "gpt-mini": {
101813
- displayName: "GPT Mini",
101814
- resolve: "openai/gpt-5.4-mini",
101815
- openRouterResolve: "openrouter/openai/gpt-5.4-mini"
101816
+ displayName: "GPT Luna",
101817
+ resolve: "openai/gpt-5.6-luna",
101818
+ openRouterResolve: "openrouter/openai/gpt-5.6-luna"
101816
101819
  },
101817
101820
  // legacy aliases — openai unified the codex line into the main GPT family
101818
101821
  // and is shutting down every "-codex" snapshot on 2026-07-23. transparently
101819
101822
  // upgrade existing users via the fallback chain. UI display sites resolve
101820
101823
  // to the terminal alias's label (so dropdown trigger + PR footers show
101821
- // "GPT" / "GPT Mini", not the historical name).
101824
+ // "GPT Sol" / "GPT Luna", not the historical name).
101822
101825
  "gpt-codex": {
101823
101826
  displayName: "GPT Codex",
101824
101827
  resolve: "openai/gpt-5.3-codex",
@@ -101831,6 +101834,13 @@ var providers = {
101831
101834
  openRouterResolve: "openrouter/openai/gpt-5.1-codex-mini",
101832
101835
  fallback: "openai/gpt-mini"
101833
101836
  },
101837
+ // dropped hidden subagent tier — folds stored pins forward to gpt (Sol).
101838
+ "gpt-5.4": {
101839
+ displayName: "GPT 5.4",
101840
+ resolve: "openai/gpt-5.4",
101841
+ openRouterResolve: "openrouter/openai/gpt-5.4",
101842
+ fallback: "openai/gpt"
101843
+ },
101834
101844
  o3: {
101835
101845
  displayName: "O3",
101836
101846
  resolve: "openai/o3",
@@ -101960,28 +101970,29 @@ var providers = {
101960
101970
  openRouterResolve: "openrouter/anthropic/claude-haiku-4.5"
101961
101971
  },
101962
101972
  gpt: {
101963
- displayName: "GPT",
101964
- resolve: "opencode/gpt-5.5",
101965
- openRouterResolve: "openrouter/openai/gpt-5.5",
101966
- subagentModel: "gpt-5.4"
101973
+ displayName: "GPT Sol",
101974
+ resolve: "opencode/gpt-5.6-sol",
101975
+ openRouterResolve: "openrouter/openai/gpt-5.6-sol",
101976
+ subagentModel: "gpt-terra"
101967
101977
  },
101978
+ // see openai/gpt-pro — Zen has no -pro id, so direct resolves to plain Sol.
101968
101979
  "gpt-pro": {
101969
- displayName: "GPT Pro",
101970
- resolve: "opencode/gpt-5.5-pro",
101971
- openRouterResolve: "openrouter/openai/gpt-5.5-pro",
101980
+ displayName: "GPT Sol Pro",
101981
+ description: "Maximum reasoning effort",
101982
+ resolve: "opencode/gpt-5.6-sol",
101983
+ openRouterResolve: "openrouter/openai/gpt-5.6-sol-pro",
101972
101984
  subagentModel: "gpt"
101973
101985
  },
101974
- // hidden subagent target — see openai provider above for context.
101975
- "gpt-5.4": {
101976
- displayName: "GPT 5.4",
101977
- resolve: "opencode/gpt-5.4",
101978
- openRouterResolve: "openrouter/openai/gpt-5.4",
101979
- hidden: true
101986
+ // gpt-5.6 balanced mid-tierselectable + `gpt`'s subagent. see openai above.
101987
+ "gpt-terra": {
101988
+ displayName: "GPT Terra",
101989
+ resolve: "opencode/gpt-5.6-terra",
101990
+ openRouterResolve: "openrouter/openai/gpt-5.6-terra"
101980
101991
  },
101981
101992
  "gpt-mini": {
101982
- displayName: "GPT Mini",
101983
- resolve: "opencode/gpt-5.4-mini",
101984
- openRouterResolve: "openrouter/openai/gpt-5.4-mini"
101993
+ displayName: "GPT Luna",
101994
+ resolve: "opencode/gpt-5.6-luna",
101995
+ openRouterResolve: "openrouter/openai/gpt-5.6-luna"
101985
101996
  },
101986
101997
  // legacy aliases — see openai provider above for context.
101987
101998
  "gpt-codex": {
@@ -101996,6 +102007,13 @@ var providers = {
101996
102007
  openRouterResolve: "openrouter/openai/gpt-5.1-codex-mini",
101997
102008
  fallback: "opencode/gpt-mini"
101998
102009
  },
102010
+ // dropped hidden subagent tier — folds stored pins forward to gpt (Sol).
102011
+ "gpt-5.4": {
102012
+ displayName: "GPT 5.4",
102013
+ resolve: "opencode/gpt-5.4",
102014
+ openRouterResolve: "openrouter/openai/gpt-5.4",
102015
+ fallback: "opencode/gpt"
102016
+ },
101999
102017
  "gemini-pro": {
102000
102018
  displayName: "Gemini Pro",
102001
102019
  resolve: "opencode/gemini-3.1-pro",
@@ -102112,29 +102130,34 @@ var providers = {
102112
102130
  resolve: "openrouter/~anthropic/claude-haiku-latest",
102113
102131
  openRouterResolve: "openrouter/~anthropic/claude-haiku-latest"
102114
102132
  },
102133
+ // pinned to the explicit gpt-5.6 tiers (not the ~openai/gpt-latest rolling
102134
+ // alias): after the Sol/Terra/Luna rename, ~gpt-mini-latest no longer maps
102135
+ // to Luna, so rolling aliases would silently diverge `gpt`/`gpt-mini` from
102136
+ // the chosen tiers across funding paths.
102115
102137
  gpt: {
102116
- displayName: "GPT",
102117
- resolve: "openrouter/~openai/gpt-latest",
102118
- openRouterResolve: "openrouter/~openai/gpt-latest",
102119
- subagentModel: "gpt-5.4"
102138
+ displayName: "GPT Sol",
102139
+ resolve: "openrouter/openai/gpt-5.6-sol",
102140
+ openRouterResolve: "openrouter/openai/gpt-5.6-sol",
102141
+ subagentModel: "gpt-terra"
102120
102142
  },
102143
+ // see openai/gpt-pro. openrouter serves sol-pro directly on both routes.
102121
102144
  "gpt-pro": {
102122
- displayName: "GPT Pro",
102123
- resolve: "openrouter/openai/gpt-5.5-pro",
102124
- openRouterResolve: "openrouter/openai/gpt-5.5-pro",
102145
+ displayName: "GPT Sol Pro",
102146
+ description: "Maximum reasoning effort",
102147
+ resolve: "openrouter/openai/gpt-5.6-sol-pro",
102148
+ openRouterResolve: "openrouter/openai/gpt-5.6-sol-pro",
102125
102149
  subagentModel: "gpt"
102126
102150
  },
102127
- // hidden subagent target — see openai provider above for context.
102128
- "gpt-5.4": {
102129
- displayName: "GPT 5.4",
102130
- resolve: "openrouter/openai/gpt-5.4",
102131
- openRouterResolve: "openrouter/openai/gpt-5.4",
102132
- hidden: true
102151
+ // gpt-5.6 balanced mid-tierselectable + `gpt`'s subagent. see openai above.
102152
+ "gpt-terra": {
102153
+ displayName: "GPT Terra",
102154
+ resolve: "openrouter/openai/gpt-5.6-terra",
102155
+ openRouterResolve: "openrouter/openai/gpt-5.6-terra"
102133
102156
  },
102134
102157
  "gpt-mini": {
102135
- displayName: "GPT Mini",
102136
- resolve: "openrouter/~openai/gpt-mini-latest",
102137
- openRouterResolve: "openrouter/~openai/gpt-mini-latest"
102158
+ displayName: "GPT Luna",
102159
+ resolve: "openrouter/openai/gpt-5.6-luna",
102160
+ openRouterResolve: "openrouter/openai/gpt-5.6-luna"
102138
102161
  },
102139
102162
  // legacy aliases — see openai provider for context.
102140
102163
  "gpt-codex": {
@@ -102149,6 +102172,13 @@ var providers = {
102149
102172
  openRouterResolve: "openrouter/openai/gpt-5.1-codex-mini",
102150
102173
  fallback: "openrouter/gpt-mini"
102151
102174
  },
102175
+ // dropped hidden subagent tier — folds stored pins forward to gpt (Sol).
102176
+ "gpt-5.4": {
102177
+ displayName: "GPT 5.4",
102178
+ resolve: "openrouter/openai/gpt-5.4",
102179
+ openRouterResolve: "openrouter/openai/gpt-5.4",
102180
+ fallback: "openrouter/gpt"
102181
+ },
102152
102182
  "o4-mini": {
102153
102183
  displayName: "O4 Mini",
102154
102184
  resolve: "openrouter/openai/o4-mini",
@@ -102228,6 +102258,7 @@ var modelAliases = Object.entries(providers).flatMap(
102228
102258
  slug: `${providerKey}/${modelId}`,
102229
102259
  provider: providerKey,
102230
102260
  displayName: def.displayName,
102261
+ description: def.description,
102231
102262
  resolve: def.resolve,
102232
102263
  openRouterResolve: def.openRouterResolve,
102233
102264
  preferred: def.preferred ?? false,
@@ -102970,7 +103001,7 @@ var import_semver = __toESM(require_semver2(), 1);
102970
103001
  // package.json
102971
103002
  var package_default = {
102972
103003
  name: "pullfrog",
102973
- version: "0.1.34",
103004
+ version: "0.1.35",
102974
103005
  type: "module",
102975
103006
  bin: {
102976
103007
  pullfrog: "dist/cli.mjs",
@@ -168022,7 +168053,7 @@ async function runCli4(input) {
168022
168053
  }
168023
168054
 
168024
168055
  // cli.ts
168025
- var VERSION10 = "0.1.34";
168056
+ var VERSION10 = "0.1.35";
168026
168057
  var bin = basename2(process.argv[1] || "");
168027
168058
  var PROG = bin === "pf" || bin === "pullfrog" ? bin : "pullfrog";
168028
168059
  var rawArgs = process.argv.slice(2);
package/dist/index.js CHANGED
@@ -99859,37 +99859,40 @@ var providers = {
99859
99859
  managedCredentials: ["CODEX_AUTH_JSON"],
99860
99860
  models: {
99861
99861
  gpt: {
99862
- displayName: "GPT",
99863
- resolve: "openai/gpt-5.5",
99864
- openRouterResolve: "openrouter/openai/gpt-5.5",
99862
+ displayName: "GPT Sol",
99863
+ resolve: "openai/gpt-5.6-sol",
99864
+ openRouterResolve: "openrouter/openai/gpt-5.6-sol",
99865
99865
  preferred: true,
99866
- subagentModel: "gpt-5.4"
99866
+ subagentModel: "gpt-terra"
99867
99867
  },
99868
+ // Sol served at reasoning.mode=pro — same $/token as Sol, just more tokens
99869
+ // burned; not a pricier premium tier. models.dev has no -pro id, so direct-key
99870
+ // (BYOK) resolves to plain Sol; only the Router/OpenRouter path gets sol-pro.
99868
99871
  "gpt-pro": {
99869
- displayName: "GPT Pro",
99870
- resolve: "openai/gpt-5.5-pro",
99871
- openRouterResolve: "openrouter/openai/gpt-5.5-pro",
99872
+ displayName: "GPT Sol Pro",
99873
+ description: "Maximum reasoning effort",
99874
+ resolve: "openai/gpt-5.6-sol",
99875
+ openRouterResolve: "openrouter/openai/gpt-5.6-sol-pro",
99872
99876
  subagentModel: "gpt"
99873
99877
  },
99874
- // hidden subagent target `gpt` lenses run against this. surfacing
99875
- // it in the picker would just confuse users (it's the prior-flagship,
99876
- // and they already have `gpt` and `gpt-mini` to choose from).
99877
- "gpt-5.4": {
99878
- displayName: "GPT 5.4",
99879
- resolve: "openai/gpt-5.4",
99880
- openRouterResolve: "openrouter/openai/gpt-5.4",
99881
- hidden: true
99878
+ // gpt-5.6's balanced mid-tier (Sol/Terra/Luna are durable capability tiers,
99879
+ // not version bumps). selectable on its own and doubles as `gpt`'s cheaper
99880
+ // lens-fanout subagent replaces the old hidden gpt-5.4 subagent target.
99881
+ "gpt-terra": {
99882
+ displayName: "GPT Terra",
99883
+ resolve: "openai/gpt-5.6-terra",
99884
+ openRouterResolve: "openrouter/openai/gpt-5.6-terra"
99882
99885
  },
99883
99886
  "gpt-mini": {
99884
- displayName: "GPT Mini",
99885
- resolve: "openai/gpt-5.4-mini",
99886
- openRouterResolve: "openrouter/openai/gpt-5.4-mini"
99887
+ displayName: "GPT Luna",
99888
+ resolve: "openai/gpt-5.6-luna",
99889
+ openRouterResolve: "openrouter/openai/gpt-5.6-luna"
99887
99890
  },
99888
99891
  // legacy aliases — openai unified the codex line into the main GPT family
99889
99892
  // and is shutting down every "-codex" snapshot on 2026-07-23. transparently
99890
99893
  // upgrade existing users via the fallback chain. UI display sites resolve
99891
99894
  // to the terminal alias's label (so dropdown trigger + PR footers show
99892
- // "GPT" / "GPT Mini", not the historical name).
99895
+ // "GPT Sol" / "GPT Luna", not the historical name).
99893
99896
  "gpt-codex": {
99894
99897
  displayName: "GPT Codex",
99895
99898
  resolve: "openai/gpt-5.3-codex",
@@ -99902,6 +99905,13 @@ var providers = {
99902
99905
  openRouterResolve: "openrouter/openai/gpt-5.1-codex-mini",
99903
99906
  fallback: "openai/gpt-mini"
99904
99907
  },
99908
+ // dropped hidden subagent tier — folds stored pins forward to gpt (Sol).
99909
+ "gpt-5.4": {
99910
+ displayName: "GPT 5.4",
99911
+ resolve: "openai/gpt-5.4",
99912
+ openRouterResolve: "openrouter/openai/gpt-5.4",
99913
+ fallback: "openai/gpt"
99914
+ },
99905
99915
  o3: {
99906
99916
  displayName: "O3",
99907
99917
  resolve: "openai/o3",
@@ -100031,28 +100041,29 @@ var providers = {
100031
100041
  openRouterResolve: "openrouter/anthropic/claude-haiku-4.5"
100032
100042
  },
100033
100043
  gpt: {
100034
- displayName: "GPT",
100035
- resolve: "opencode/gpt-5.5",
100036
- openRouterResolve: "openrouter/openai/gpt-5.5",
100037
- subagentModel: "gpt-5.4"
100044
+ displayName: "GPT Sol",
100045
+ resolve: "opencode/gpt-5.6-sol",
100046
+ openRouterResolve: "openrouter/openai/gpt-5.6-sol",
100047
+ subagentModel: "gpt-terra"
100038
100048
  },
100049
+ // see openai/gpt-pro — Zen has no -pro id, so direct resolves to plain Sol.
100039
100050
  "gpt-pro": {
100040
- displayName: "GPT Pro",
100041
- resolve: "opencode/gpt-5.5-pro",
100042
- openRouterResolve: "openrouter/openai/gpt-5.5-pro",
100051
+ displayName: "GPT Sol Pro",
100052
+ description: "Maximum reasoning effort",
100053
+ resolve: "opencode/gpt-5.6-sol",
100054
+ openRouterResolve: "openrouter/openai/gpt-5.6-sol-pro",
100043
100055
  subagentModel: "gpt"
100044
100056
  },
100045
- // hidden subagent target — see openai provider above for context.
100046
- "gpt-5.4": {
100047
- displayName: "GPT 5.4",
100048
- resolve: "opencode/gpt-5.4",
100049
- openRouterResolve: "openrouter/openai/gpt-5.4",
100050
- hidden: true
100057
+ // gpt-5.6 balanced mid-tierselectable + `gpt`'s subagent. see openai above.
100058
+ "gpt-terra": {
100059
+ displayName: "GPT Terra",
100060
+ resolve: "opencode/gpt-5.6-terra",
100061
+ openRouterResolve: "openrouter/openai/gpt-5.6-terra"
100051
100062
  },
100052
100063
  "gpt-mini": {
100053
- displayName: "GPT Mini",
100054
- resolve: "opencode/gpt-5.4-mini",
100055
- openRouterResolve: "openrouter/openai/gpt-5.4-mini"
100064
+ displayName: "GPT Luna",
100065
+ resolve: "opencode/gpt-5.6-luna",
100066
+ openRouterResolve: "openrouter/openai/gpt-5.6-luna"
100056
100067
  },
100057
100068
  // legacy aliases — see openai provider above for context.
100058
100069
  "gpt-codex": {
@@ -100067,6 +100078,13 @@ var providers = {
100067
100078
  openRouterResolve: "openrouter/openai/gpt-5.1-codex-mini",
100068
100079
  fallback: "opencode/gpt-mini"
100069
100080
  },
100081
+ // dropped hidden subagent tier — folds stored pins forward to gpt (Sol).
100082
+ "gpt-5.4": {
100083
+ displayName: "GPT 5.4",
100084
+ resolve: "opencode/gpt-5.4",
100085
+ openRouterResolve: "openrouter/openai/gpt-5.4",
100086
+ fallback: "opencode/gpt"
100087
+ },
100070
100088
  "gemini-pro": {
100071
100089
  displayName: "Gemini Pro",
100072
100090
  resolve: "opencode/gemini-3.1-pro",
@@ -100183,29 +100201,34 @@ var providers = {
100183
100201
  resolve: "openrouter/~anthropic/claude-haiku-latest",
100184
100202
  openRouterResolve: "openrouter/~anthropic/claude-haiku-latest"
100185
100203
  },
100204
+ // pinned to the explicit gpt-5.6 tiers (not the ~openai/gpt-latest rolling
100205
+ // alias): after the Sol/Terra/Luna rename, ~gpt-mini-latest no longer maps
100206
+ // to Luna, so rolling aliases would silently diverge `gpt`/`gpt-mini` from
100207
+ // the chosen tiers across funding paths.
100186
100208
  gpt: {
100187
- displayName: "GPT",
100188
- resolve: "openrouter/~openai/gpt-latest",
100189
- openRouterResolve: "openrouter/~openai/gpt-latest",
100190
- subagentModel: "gpt-5.4"
100209
+ displayName: "GPT Sol",
100210
+ resolve: "openrouter/openai/gpt-5.6-sol",
100211
+ openRouterResolve: "openrouter/openai/gpt-5.6-sol",
100212
+ subagentModel: "gpt-terra"
100191
100213
  },
100214
+ // see openai/gpt-pro. openrouter serves sol-pro directly on both routes.
100192
100215
  "gpt-pro": {
100193
- displayName: "GPT Pro",
100194
- resolve: "openrouter/openai/gpt-5.5-pro",
100195
- openRouterResolve: "openrouter/openai/gpt-5.5-pro",
100216
+ displayName: "GPT Sol Pro",
100217
+ description: "Maximum reasoning effort",
100218
+ resolve: "openrouter/openai/gpt-5.6-sol-pro",
100219
+ openRouterResolve: "openrouter/openai/gpt-5.6-sol-pro",
100196
100220
  subagentModel: "gpt"
100197
100221
  },
100198
- // hidden subagent target — see openai provider above for context.
100199
- "gpt-5.4": {
100200
- displayName: "GPT 5.4",
100201
- resolve: "openrouter/openai/gpt-5.4",
100202
- openRouterResolve: "openrouter/openai/gpt-5.4",
100203
- hidden: true
100222
+ // gpt-5.6 balanced mid-tierselectable + `gpt`'s subagent. see openai above.
100223
+ "gpt-terra": {
100224
+ displayName: "GPT Terra",
100225
+ resolve: "openrouter/openai/gpt-5.6-terra",
100226
+ openRouterResolve: "openrouter/openai/gpt-5.6-terra"
100204
100227
  },
100205
100228
  "gpt-mini": {
100206
- displayName: "GPT Mini",
100207
- resolve: "openrouter/~openai/gpt-mini-latest",
100208
- openRouterResolve: "openrouter/~openai/gpt-mini-latest"
100229
+ displayName: "GPT Luna",
100230
+ resolve: "openrouter/openai/gpt-5.6-luna",
100231
+ openRouterResolve: "openrouter/openai/gpt-5.6-luna"
100209
100232
  },
100210
100233
  // legacy aliases — see openai provider for context.
100211
100234
  "gpt-codex": {
@@ -100220,6 +100243,13 @@ var providers = {
100220
100243
  openRouterResolve: "openrouter/openai/gpt-5.1-codex-mini",
100221
100244
  fallback: "openrouter/gpt-mini"
100222
100245
  },
100246
+ // dropped hidden subagent tier — folds stored pins forward to gpt (Sol).
100247
+ "gpt-5.4": {
100248
+ displayName: "GPT 5.4",
100249
+ resolve: "openrouter/openai/gpt-5.4",
100250
+ openRouterResolve: "openrouter/openai/gpt-5.4",
100251
+ fallback: "openrouter/gpt"
100252
+ },
100223
100253
  "o4-mini": {
100224
100254
  displayName: "O4 Mini",
100225
100255
  resolve: "openrouter/openai/o4-mini",
@@ -100299,6 +100329,7 @@ var modelAliases = Object.entries(providers).flatMap(
100299
100329
  slug: `${providerKey}/${modelId}`,
100300
100330
  provider: providerKey,
100301
100331
  displayName: def.displayName,
100332
+ description: def.description,
100302
100333
  resolve: def.resolve,
100303
100334
  openRouterResolve: def.openRouterResolve,
100304
100335
  preferred: def.preferred ?? false,
@@ -101041,7 +101072,7 @@ var import_semver = __toESM(require_semver2(), 1);
101041
101072
  // package.json
101042
101073
  var package_default = {
101043
101074
  name: "pullfrog",
101044
- version: "0.1.34",
101075
+ version: "0.1.35",
101045
101076
  type: "module",
101046
101077
  bin: {
101047
101078
  pullfrog: "dist/cli.mjs",
package/dist/internal.js CHANGED
@@ -50,37 +50,40 @@ var providers = {
50
50
  managedCredentials: ["CODEX_AUTH_JSON"],
51
51
  models: {
52
52
  gpt: {
53
- displayName: "GPT",
54
- resolve: "openai/gpt-5.5",
55
- openRouterResolve: "openrouter/openai/gpt-5.5",
53
+ displayName: "GPT Sol",
54
+ resolve: "openai/gpt-5.6-sol",
55
+ openRouterResolve: "openrouter/openai/gpt-5.6-sol",
56
56
  preferred: true,
57
- subagentModel: "gpt-5.4"
57
+ subagentModel: "gpt-terra"
58
58
  },
59
+ // Sol served at reasoning.mode=pro — same $/token as Sol, just more tokens
60
+ // burned; not a pricier premium tier. models.dev has no -pro id, so direct-key
61
+ // (BYOK) resolves to plain Sol; only the Router/OpenRouter path gets sol-pro.
59
62
  "gpt-pro": {
60
- displayName: "GPT Pro",
61
- resolve: "openai/gpt-5.5-pro",
62
- openRouterResolve: "openrouter/openai/gpt-5.5-pro",
63
+ displayName: "GPT Sol Pro",
64
+ description: "Maximum reasoning effort",
65
+ resolve: "openai/gpt-5.6-sol",
66
+ openRouterResolve: "openrouter/openai/gpt-5.6-sol-pro",
63
67
  subagentModel: "gpt"
64
68
  },
65
- // hidden subagent target `gpt` lenses run against this. surfacing
66
- // it in the picker would just confuse users (it's the prior-flagship,
67
- // and they already have `gpt` and `gpt-mini` to choose from).
68
- "gpt-5.4": {
69
- displayName: "GPT 5.4",
70
- resolve: "openai/gpt-5.4",
71
- openRouterResolve: "openrouter/openai/gpt-5.4",
72
- hidden: true
69
+ // gpt-5.6's balanced mid-tier (Sol/Terra/Luna are durable capability tiers,
70
+ // not version bumps). selectable on its own and doubles as `gpt`'s cheaper
71
+ // lens-fanout subagent replaces the old hidden gpt-5.4 subagent target.
72
+ "gpt-terra": {
73
+ displayName: "GPT Terra",
74
+ resolve: "openai/gpt-5.6-terra",
75
+ openRouterResolve: "openrouter/openai/gpt-5.6-terra"
73
76
  },
74
77
  "gpt-mini": {
75
- displayName: "GPT Mini",
76
- resolve: "openai/gpt-5.4-mini",
77
- openRouterResolve: "openrouter/openai/gpt-5.4-mini"
78
+ displayName: "GPT Luna",
79
+ resolve: "openai/gpt-5.6-luna",
80
+ openRouterResolve: "openrouter/openai/gpt-5.6-luna"
78
81
  },
79
82
  // legacy aliases — openai unified the codex line into the main GPT family
80
83
  // and is shutting down every "-codex" snapshot on 2026-07-23. transparently
81
84
  // upgrade existing users via the fallback chain. UI display sites resolve
82
85
  // to the terminal alias's label (so dropdown trigger + PR footers show
83
- // "GPT" / "GPT Mini", not the historical name).
86
+ // "GPT Sol" / "GPT Luna", not the historical name).
84
87
  "gpt-codex": {
85
88
  displayName: "GPT Codex",
86
89
  resolve: "openai/gpt-5.3-codex",
@@ -93,6 +96,13 @@ var providers = {
93
96
  openRouterResolve: "openrouter/openai/gpt-5.1-codex-mini",
94
97
  fallback: "openai/gpt-mini"
95
98
  },
99
+ // dropped hidden subagent tier — folds stored pins forward to gpt (Sol).
100
+ "gpt-5.4": {
101
+ displayName: "GPT 5.4",
102
+ resolve: "openai/gpt-5.4",
103
+ openRouterResolve: "openrouter/openai/gpt-5.4",
104
+ fallback: "openai/gpt"
105
+ },
96
106
  o3: {
97
107
  displayName: "O3",
98
108
  resolve: "openai/o3",
@@ -222,28 +232,29 @@ var providers = {
222
232
  openRouterResolve: "openrouter/anthropic/claude-haiku-4.5"
223
233
  },
224
234
  gpt: {
225
- displayName: "GPT",
226
- resolve: "opencode/gpt-5.5",
227
- openRouterResolve: "openrouter/openai/gpt-5.5",
228
- subagentModel: "gpt-5.4"
235
+ displayName: "GPT Sol",
236
+ resolve: "opencode/gpt-5.6-sol",
237
+ openRouterResolve: "openrouter/openai/gpt-5.6-sol",
238
+ subagentModel: "gpt-terra"
229
239
  },
240
+ // see openai/gpt-pro — Zen has no -pro id, so direct resolves to plain Sol.
230
241
  "gpt-pro": {
231
- displayName: "GPT Pro",
232
- resolve: "opencode/gpt-5.5-pro",
233
- openRouterResolve: "openrouter/openai/gpt-5.5-pro",
242
+ displayName: "GPT Sol Pro",
243
+ description: "Maximum reasoning effort",
244
+ resolve: "opencode/gpt-5.6-sol",
245
+ openRouterResolve: "openrouter/openai/gpt-5.6-sol-pro",
234
246
  subagentModel: "gpt"
235
247
  },
236
- // hidden subagent target — see openai provider above for context.
237
- "gpt-5.4": {
238
- displayName: "GPT 5.4",
239
- resolve: "opencode/gpt-5.4",
240
- openRouterResolve: "openrouter/openai/gpt-5.4",
241
- hidden: true
248
+ // gpt-5.6 balanced mid-tierselectable + `gpt`'s subagent. see openai above.
249
+ "gpt-terra": {
250
+ displayName: "GPT Terra",
251
+ resolve: "opencode/gpt-5.6-terra",
252
+ openRouterResolve: "openrouter/openai/gpt-5.6-terra"
242
253
  },
243
254
  "gpt-mini": {
244
- displayName: "GPT Mini",
245
- resolve: "opencode/gpt-5.4-mini",
246
- openRouterResolve: "openrouter/openai/gpt-5.4-mini"
255
+ displayName: "GPT Luna",
256
+ resolve: "opencode/gpt-5.6-luna",
257
+ openRouterResolve: "openrouter/openai/gpt-5.6-luna"
247
258
  },
248
259
  // legacy aliases — see openai provider above for context.
249
260
  "gpt-codex": {
@@ -258,6 +269,13 @@ var providers = {
258
269
  openRouterResolve: "openrouter/openai/gpt-5.1-codex-mini",
259
270
  fallback: "opencode/gpt-mini"
260
271
  },
272
+ // dropped hidden subagent tier — folds stored pins forward to gpt (Sol).
273
+ "gpt-5.4": {
274
+ displayName: "GPT 5.4",
275
+ resolve: "opencode/gpt-5.4",
276
+ openRouterResolve: "openrouter/openai/gpt-5.4",
277
+ fallback: "opencode/gpt"
278
+ },
261
279
  "gemini-pro": {
262
280
  displayName: "Gemini Pro",
263
281
  resolve: "opencode/gemini-3.1-pro",
@@ -374,29 +392,34 @@ var providers = {
374
392
  resolve: "openrouter/~anthropic/claude-haiku-latest",
375
393
  openRouterResolve: "openrouter/~anthropic/claude-haiku-latest"
376
394
  },
395
+ // pinned to the explicit gpt-5.6 tiers (not the ~openai/gpt-latest rolling
396
+ // alias): after the Sol/Terra/Luna rename, ~gpt-mini-latest no longer maps
397
+ // to Luna, so rolling aliases would silently diverge `gpt`/`gpt-mini` from
398
+ // the chosen tiers across funding paths.
377
399
  gpt: {
378
- displayName: "GPT",
379
- resolve: "openrouter/~openai/gpt-latest",
380
- openRouterResolve: "openrouter/~openai/gpt-latest",
381
- subagentModel: "gpt-5.4"
400
+ displayName: "GPT Sol",
401
+ resolve: "openrouter/openai/gpt-5.6-sol",
402
+ openRouterResolve: "openrouter/openai/gpt-5.6-sol",
403
+ subagentModel: "gpt-terra"
382
404
  },
405
+ // see openai/gpt-pro. openrouter serves sol-pro directly on both routes.
383
406
  "gpt-pro": {
384
- displayName: "GPT Pro",
385
- resolve: "openrouter/openai/gpt-5.5-pro",
386
- openRouterResolve: "openrouter/openai/gpt-5.5-pro",
407
+ displayName: "GPT Sol Pro",
408
+ description: "Maximum reasoning effort",
409
+ resolve: "openrouter/openai/gpt-5.6-sol-pro",
410
+ openRouterResolve: "openrouter/openai/gpt-5.6-sol-pro",
387
411
  subagentModel: "gpt"
388
412
  },
389
- // hidden subagent target — see openai provider above for context.
390
- "gpt-5.4": {
391
- displayName: "GPT 5.4",
392
- resolve: "openrouter/openai/gpt-5.4",
393
- openRouterResolve: "openrouter/openai/gpt-5.4",
394
- hidden: true
413
+ // gpt-5.6 balanced mid-tierselectable + `gpt`'s subagent. see openai above.
414
+ "gpt-terra": {
415
+ displayName: "GPT Terra",
416
+ resolve: "openrouter/openai/gpt-5.6-terra",
417
+ openRouterResolve: "openrouter/openai/gpt-5.6-terra"
395
418
  },
396
419
  "gpt-mini": {
397
- displayName: "GPT Mini",
398
- resolve: "openrouter/~openai/gpt-mini-latest",
399
- openRouterResolve: "openrouter/~openai/gpt-mini-latest"
420
+ displayName: "GPT Luna",
421
+ resolve: "openrouter/openai/gpt-5.6-luna",
422
+ openRouterResolve: "openrouter/openai/gpt-5.6-luna"
400
423
  },
401
424
  // legacy aliases — see openai provider for context.
402
425
  "gpt-codex": {
@@ -411,6 +434,13 @@ var providers = {
411
434
  openRouterResolve: "openrouter/openai/gpt-5.1-codex-mini",
412
435
  fallback: "openrouter/gpt-mini"
413
436
  },
437
+ // dropped hidden subagent tier — folds stored pins forward to gpt (Sol).
438
+ "gpt-5.4": {
439
+ displayName: "GPT 5.4",
440
+ resolve: "openrouter/openai/gpt-5.4",
441
+ openRouterResolve: "openrouter/openai/gpt-5.4",
442
+ fallback: "openrouter/gpt"
443
+ },
414
444
  "o4-mini": {
415
445
  displayName: "O4 Mini",
416
446
  resolve: "openrouter/openai/o4-mini",
@@ -499,6 +529,7 @@ var modelAliases = Object.entries(providers).flatMap(
499
529
  slug: `${providerKey}/${modelId}`,
500
530
  provider: providerKey,
501
531
  displayName: def.displayName,
532
+ description: def.description,
502
533
  resolve: def.resolve,
503
534
  openRouterResolve: def.openRouterResolve,
504
535
  preferred: def.preferred ?? false,
package/dist/models.d.ts CHANGED
@@ -28,6 +28,9 @@ export interface ModelAlias {
28
28
  provider: string;
29
29
  /** human-readable name shown in dropdowns */
30
30
  displayName: string;
31
+ /** optional one-line picker sub-label clarifying what the alias is (e.g.
32
+ * gpt-pro = "Maximum reasoning effort"). undefined for most aliases. */
33
+ description: string | undefined;
31
34
  /** concrete models.dev specifier, e.g. "anthropic/claude-opus-4-6". sentinel for routing entries — never passed to a CLI directly. */
32
35
  resolve: string;
33
36
  /** full models.dev specifier for the OpenRouter equivalent (undefined for free models and routing entries) */
@@ -48,12 +51,14 @@ export interface ModelAlias {
48
51
  * use as its lens-fanout subagent. e.g. claude-opus → "claude-sonnet". */
49
52
  subagentModel: string | undefined;
50
53
  /** hide from selectable lists (UI dropdowns, CLI pickers). does NOT affect
51
- * resolution — for that use `fallback`. used for internal-only tier targets
52
- * (e.g. gpt-5.4 as a subagent target without exposing it to users). */
54
+ * resolution — for that use `fallback`. used to keep a redundant alias out of
55
+ * pickers (e.g. the free `minimax-m2.5-free` duplicate). */
53
56
  hidden: boolean;
54
57
  }
55
58
  interface ModelDef {
56
59
  displayName: string;
60
+ /** optional one-line picker sub-label (e.g. "Maximum reasoning effort"). */
61
+ description?: string;
57
62
  /** concrete models.dev specifier, e.g. "anthropic/claude-opus-4-6" */
58
63
  resolve: string;
59
64
  /** full models.dev specifier for the OpenRouter equivalent, e.g. "openrouter/anthropic/claude-opus-4.6" */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pullfrog",
3
- "version": "0.1.34",
3
+ "version": "0.1.35",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "pullfrog": "dist/cli.mjs",