pullfrog 0.1.82 → 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/cli.mjs CHANGED
@@ -19991,10 +19991,10 @@ var require_core = __commonJS({
19991
19991
  (0, command_1.issueCommand)("set-env", { name }, convertedVal);
19992
19992
  }
19993
19993
  exports.exportVariable = exportVariable;
19994
- function setSecret7(secret) {
19994
+ function setSecret2(secret) {
19995
19995
  (0, command_1.issueCommand)("add-mask", {}, secret);
19996
19996
  }
19997
- exports.setSecret = setSecret7;
19997
+ exports.setSecret = setSecret2;
19998
19998
  function addPath(inputPath) {
19999
19999
  const filePath = process.env["GITHUB_PATH"] || "";
20000
20000
  if (filePath) {
@@ -20099,14 +20099,14 @@ Support boolean input list: \`true | True | TRUE | false | False | FALSE\``);
20099
20099
  });
20100
20100
  }
20101
20101
  exports.group = group2;
20102
- function saveState4(name, value2) {
20102
+ function saveState2(name, value2) {
20103
20103
  const filePath = process.env["GITHUB_STATE"] || "";
20104
20104
  if (filePath) {
20105
20105
  return (0, file_command_1.issueFileCommand)("STATE", (0, file_command_1.prepareKeyValueMessage)(name, value2));
20106
20106
  }
20107
20107
  (0, command_1.issueCommand)("save-state", { name }, (0, utils_1.toCommandValue)(value2));
20108
20108
  }
20109
- exports.saveState = saveState4;
20109
+ exports.saveState = saveState2;
20110
20110
  function getState3(name) {
20111
20111
  return process.env[`STATE_${name}`] || "";
20112
20112
  }
@@ -27894,11 +27894,11 @@ var require_mode = __commonJS({
27894
27894
  var require_isexe = __commonJS({
27895
27895
  "node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/index.js"(exports, module) {
27896
27896
  var fs5 = __require("fs");
27897
- var core13;
27897
+ var core9;
27898
27898
  if (process.platform === "win32" || global.TESTING_WINDOWS) {
27899
- core13 = require_windows();
27899
+ core9 = require_windows();
27900
27900
  } else {
27901
- core13 = require_mode();
27901
+ core9 = require_mode();
27902
27902
  }
27903
27903
  module.exports = isexe;
27904
27904
  isexe.sync = sync;
@@ -27921,7 +27921,7 @@ var require_isexe = __commonJS({
27921
27921
  });
27922
27922
  });
27923
27923
  }
27924
- core13(path4, options || {}, function(er, is) {
27924
+ core9(path4, options || {}, function(er, is) {
27925
27925
  if (er) {
27926
27926
  if (er.code === "EACCES" || options && options.ignoreErrors) {
27927
27927
  er = null;
@@ -27933,7 +27933,7 @@ var require_isexe = __commonJS({
27933
27933
  }
27934
27934
  function sync(path4, options) {
27935
27935
  try {
27936
- return core13.sync(path4, options || {});
27936
+ return core9.sync(path4, options || {});
27937
27937
  } catch (er) {
27938
27938
  if (options && options.ignoreErrors || er.code === "EACCES") {
27939
27939
  return false;
@@ -81073,7 +81073,7 @@ var require_core3 = __commonJS({
81073
81073
  Object.defineProperty(exports, "__esModule", { value: true });
81074
81074
  var id_1 = require_id();
81075
81075
  var ref_1 = require_ref();
81076
- var core13 = [
81076
+ var core9 = [
81077
81077
  "$schema",
81078
81078
  "$id",
81079
81079
  "$defs",
@@ -81083,7 +81083,7 @@ var require_core3 = __commonJS({
81083
81083
  id_1.default,
81084
81084
  ref_1.default
81085
81085
  ];
81086
- exports.default = core13;
81086
+ exports.default = core9;
81087
81087
  }
81088
81088
  });
81089
81089
 
@@ -123005,7 +123005,7 @@ var import_picocolors = __toESM(require_picocolors(), 1);
123005
123005
  // package.json
123006
123006
  var package_default = {
123007
123007
  name: "pullfrog",
123008
- version: "0.1.82",
123008
+ version: "0.1.83",
123009
123009
  cliContractVersion: "1",
123010
123010
  type: "module",
123011
123011
  bin: {
@@ -123022,6 +123022,7 @@ var package_default = {
123022
123022
  typecheck: "tsc --noEmit",
123023
123023
  build: "node esbuild.config.js && tsc -p tsconfig.exports.json",
123024
123024
  "check:entrypoints": "nub scripts/check-entrypoint-imports.ts",
123025
+ "check:secret-commands": "nub scripts/check-secret-commands.ts",
123025
123026
  docker: "nub docker.ts",
123026
123027
  play: "nub play.ts",
123027
123028
  runtest: "nub test/run.ts",
@@ -123032,7 +123033,7 @@ var package_default = {
123032
123033
  },
123033
123034
  devDependencies: {
123034
123035
  "@actions/core": "^1.11.1",
123035
- "@anthropic-ai/claude-code": "2.1.150",
123036
+ "@anthropic-ai/claude-code": "2.1.280",
123036
123037
  "@ark/fs": "0.56.0",
123037
123038
  "@ark/util": "0.56.0",
123038
123039
  "@clack/prompts": "^1.2.0",
@@ -124579,7 +124580,7 @@ without a terminal, only print its URL.`
124579
124580
  }
124580
124581
 
124581
124582
  // commands/gha.ts
124582
- var core12 = __toESM(require_core(), 1);
124583
+ var core8 = __toESM(require_core(), 1);
124583
124584
  var import_arg5 = __toESM(require_arg(), 1);
124584
124585
  import { dirname as dirname6 } from "node:path";
124585
124586
 
@@ -124995,19 +124996,19 @@ var providers = {
124995
124996
  // API is the source of truth (#959).
124996
124997
  "claude-fable": {
124997
124998
  displayName: "Claude Fable",
124998
- resolve: "anthropic/claude-fable-5",
124999
+ resolve: "anthropic/claude-fable-5-1",
124999
125000
  effort: ["low", "medium", "high", "xhigh", "max"],
125000
125001
  // rolling alias: models.dev's OpenRouter mirror lags brand-new pinned
125001
- // versions (claude-fable-5 isn't indexed yet), so track ~…-latest to
125002
+ // versions (claude-fable-5 was missing there when this was added), so track ~…-latest to
125002
125003
  // stay catalog-valid and auto-follow version bumps.
125003
125004
  openRouterResolve: "openrouter/~anthropic/claude-fable-latest",
125004
125005
  subagentModel: "claude-sonnet"
125005
125006
  },
125006
125007
  "claude-opus": {
125007
125008
  displayName: "Claude Opus",
125008
- resolve: "anthropic/claude-opus-5",
125009
+ resolve: "anthropic/claude-opus-5-5",
125009
125010
  effort: ["low", "medium", "high", "xhigh", "max"],
125010
- openRouterResolve: "openrouter/anthropic/claude-opus-5",
125011
+ openRouterResolve: "openrouter/anthropic/claude-opus-5.5",
125011
125012
  preferred: true,
125012
125013
  subagentModel: "claude-sonnet"
125013
125014
  },
@@ -125042,9 +125043,9 @@ var providers = {
125042
125043
  },
125043
125044
  "gpt-sol": {
125044
125045
  displayName: "GPT Sol",
125045
- resolve: "openai/gpt-5.6-sol",
125046
+ resolve: "openai/gpt-6-sol",
125046
125047
  effort: ["none", "low", "medium", "high", "xhigh", "max"],
125047
- openRouterResolve: "openrouter/openai/gpt-5.6-sol",
125048
+ openRouterResolve: "openrouter/openai/gpt-6-sol",
125048
125049
  preferred: true,
125049
125050
  subagentModel: "gpt-terra"
125050
125051
  },
@@ -125054,9 +125055,9 @@ var providers = {
125054
125055
  "gpt-sol-pro": {
125055
125056
  displayName: "GPT Sol Pro",
125056
125057
  description: "Maximum reasoning effort",
125057
- resolve: "openai/gpt-5.6-sol",
125058
+ resolve: "openai/gpt-6-sol",
125058
125059
  effort: ["none", "low", "medium", "high", "xhigh", "max"],
125059
- openRouterResolve: "openrouter/openai/gpt-5.6-sol-pro",
125060
+ openRouterResolve: "openrouter/openai/gpt-6-sol-pro",
125060
125061
  subagentModel: "gpt-sol"
125061
125062
  },
125062
125063
  // gpt-5.6's balanced mid-tier. selectable on its own and doubles as Sol's
@@ -125069,9 +125070,9 @@ var providers = {
125069
125070
  },
125070
125071
  "gpt-luna": {
125071
125072
  displayName: "GPT Luna",
125072
- resolve: "openai/gpt-5.6-luna",
125073
+ resolve: "openai/gpt-6-luna",
125073
125074
  effort: ["none", "low", "medium", "high", "xhigh", "max"],
125074
- openRouterResolve: "openrouter/openai/gpt-5.6-luna"
125075
+ openRouterResolve: "openrouter/openai/gpt-6-luna"
125075
125076
  },
125076
125077
  // legacy aliases — openai unified the codex line into the main GPT family
125077
125078
  // and is shutting down every "-codex" snapshot on 2026-07-23. transparently
@@ -125165,9 +125166,9 @@ var providers = {
125165
125166
  models: {
125166
125167
  grok: {
125167
125168
  displayName: "Grok",
125168
- resolve: "xai/grok-4.6",
125169
+ resolve: "xai/grok-4.7",
125169
125170
  effort: ["low", "medium", "high", "xhigh"],
125170
- openRouterResolve: "openrouter/x-ai/grok-4.6",
125171
+ openRouterResolve: "openrouter/x-ai/grok-4.7",
125171
125172
  preferred: true
125172
125173
  },
125173
125174
  // the Smart ladder's cheap rung: 1.25/2.5 against 4.6's 2/6, and a 0.2
@@ -125182,17 +125183,17 @@ var providers = {
125182
125183
  // 2026-05-15 (https://docs.x.ai/developers/migration/may-15-deprecation)
125183
125184
  // and now redirects every deprecated text-model slug to grok-4.3 at
125184
125185
  // standard pricing. fall back to the live `xai/grok` so the alias
125185
- // chain resolves to grok-4.6 for both direct-key and OpenRouter users.
125186
+ // chain resolves to grok-4.7 for both direct-key and OpenRouter users.
125186
125187
  "grok-fast": {
125187
125188
  displayName: "Grok Fast",
125188
125189
  resolve: "xai/grok-4-1-fast",
125189
- openRouterResolve: "openrouter/x-ai/grok-4.6",
125190
+ openRouterResolve: "openrouter/x-ai/grok-4.7",
125190
125191
  fallback: "xai/grok"
125191
125192
  },
125192
125193
  "grok-code-fast": {
125193
125194
  displayName: "Grok Code Fast",
125194
125195
  resolve: "xai/grok-code-fast-1",
125195
- openRouterResolve: "openrouter/x-ai/grok-4.6",
125196
+ openRouterResolve: "openrouter/x-ai/grok-4.7",
125196
125197
  fallback: "xai/grok"
125197
125198
  }
125198
125199
  }
@@ -125220,8 +125221,9 @@ var providers = {
125220
125221
  "deepseek-pro": {
125221
125222
  displayName: "DeepSeek Pro",
125222
125223
  resolve: "deepseek/deepseek-v4-pro",
125223
- effort: ["high", "max"],
125224
- openRouterEffort: ["low", "high", "max"],
125224
+ // models.dev gave the direct id V4.1-Flash's ladder on 2026-09-21, which
125225
+ // is what DeepSeek now serves under it — and the same as the Router pin's.
125226
+ effort: ["low", "high", "max"],
125225
125227
  openRouterResolve: "openrouter/deepseek/deepseek-v4-pro-0813",
125226
125228
  preferred: true
125227
125229
  },
@@ -125419,24 +125421,15 @@ var providers = {
125419
125421
  },
125420
125422
  "claude-opus": {
125421
125423
  displayName: "Claude Opus",
125422
- resolve: "opencode/claude-opus-5",
125424
+ resolve: "opencode/claude-opus-5-5",
125423
125425
  effort: ["low", "medium", "high", "xhigh", "max"],
125424
- openRouterResolve: "openrouter/anthropic/claude-opus-5",
125425
- subagentModel: "claude-sonnet",
125426
- // TEMPORARY — clear this ONLY when opus completes a run through opencode,
125427
- // never when the endpoint merely answers. Zen LISTS claude-opus-5 in
125428
- // /zen/v1/models, so the catalog test passes; on 2026-08-25 the endpoint
125429
- // itself answered 503 `Upstream request failed: Endpoint is unavailable.`
125430
- // (measured 5/5; claude-sonnet-5, claude-opus-4-8, claude-haiku-4-5 and
125431
- // claude-fable-5 all 200 on the same key). opencode retries above the AI
125432
- // SDK emitting no part.updated, so a run just produces nothing until it is
125433
- // killed — metaideas/init logged six zero-output failures from 2026-08-23.
125434
- // The 503 has since cleared and the model is STILL unusable: re-measured
125435
- // 2026-08-26, direct POST /zen/v1/messages is 10/10 200 at 1.3-4.1s while
125436
- // `opencode run --model opencode/claude-opus-5` on the same trivial prompt
125437
- // emitted nothing for 240s in CI. A raw-endpoint 200 is not runtime
125438
- // availability. see wiki/opencode-silent-stall.md
125439
- fallback: "opencode/claude-sonnet"
125426
+ openRouterResolve: "openrouter/anthropic/claude-opus-5.5",
125427
+ subagentModel: "claude-sonnet"
125428
+ // fell back to Sonnet from 2026-08-25 to 2026-09-25: Zen listed
125429
+ // claude-opus-5 while `opencode run` on it emitted nothing for 240s. A
125430
+ // raw-endpoint 200 is not runtime availability — the fallback was cleared
125431
+ // only once `opencode run` completed on both claude-opus-5 and 5-5. see
125432
+ // wiki/opencode-silent-stall.md
125440
125433
  },
125441
125434
  "claude-sonnet": {
125442
125435
  displayName: "Claude Sonnet",
@@ -125451,9 +125444,9 @@ var providers = {
125451
125444
  },
125452
125445
  "gpt-sol": {
125453
125446
  displayName: "GPT Sol",
125454
- resolve: "opencode/gpt-5.6-sol",
125447
+ resolve: "opencode/gpt-6-sol",
125455
125448
  effort: ["none", "low", "medium", "high", "xhigh", "max"],
125456
- openRouterResolve: "openrouter/openai/gpt-5.6-sol",
125449
+ openRouterResolve: "openrouter/openai/gpt-6-sol",
125457
125450
  subagentModel: "gpt-terra"
125458
125451
  },
125459
125452
  "gpt-astra": {
@@ -125467,9 +125460,9 @@ var providers = {
125467
125460
  "gpt-sol-pro": {
125468
125461
  displayName: "GPT Sol Pro",
125469
125462
  description: "Maximum reasoning effort",
125470
- resolve: "opencode/gpt-5.6-sol",
125463
+ resolve: "opencode/gpt-6-sol",
125471
125464
  effort: ["none", "low", "medium", "high", "xhigh", "max"],
125472
- openRouterResolve: "openrouter/openai/gpt-5.6-sol-pro",
125465
+ openRouterResolve: "openrouter/openai/gpt-6-sol-pro",
125473
125466
  subagentModel: "gpt-sol"
125474
125467
  },
125475
125468
  // gpt-5.6 balanced mid-tier — selectable + Sol's subagent. see openai above.
@@ -125481,9 +125474,9 @@ var providers = {
125481
125474
  },
125482
125475
  "gpt-luna": {
125483
125476
  displayName: "GPT Luna",
125484
- resolve: "opencode/gpt-5.6-luna",
125477
+ resolve: "opencode/gpt-6-luna",
125485
125478
  effort: ["none", "low", "medium", "high", "xhigh", "max"],
125486
- openRouterResolve: "openrouter/openai/gpt-5.6-luna"
125479
+ openRouterResolve: "openrouter/openai/gpt-6-luna"
125487
125480
  },
125488
125481
  // legacy aliases — see openai provider above for context.
125489
125482
  "gpt-codex": {
@@ -125582,9 +125575,34 @@ var providers = {
125582
125575
  },
125583
125576
  grok: {
125584
125577
  displayName: "Grok",
125585
- resolve: "opencode/grok-4.6",
125578
+ resolve: "opencode/grok-4.7",
125586
125579
  effort: ["low", "medium", "high", "xhigh"],
125587
- openRouterResolve: "openrouter/x-ai/grok-4.6"
125580
+ openRouterResolve: "openrouter/x-ai/grok-4.7"
125581
+ },
125582
+ // Zen began listing Qwen's Max and Flash tiers in late 2026-09 (Max on
125583
+ // 09-25); until then `opencode-go` was the only Qwen route, so a Zen
125584
+ // subscriber without Go had none. Plus is still Go-only. Zen's Max entry
125585
+ // publishes a reasoning toggle but no effort rungs.
125586
+ "qwen-max": {
125587
+ displayName: "Qwen Max",
125588
+ resolve: "opencode/qwen3.8-max",
125589
+ openRouterEffort: ["minimal", "low", "medium", "high", "xhigh"],
125590
+ openRouterResolve: "openrouter/qwen/qwen3.8-max-0902",
125591
+ // unlisted until a published `pullfrog` carries this alias (the
125592
+ // merge-vs-publish rule in wiki/models-catalog.md). unhide in the release
125593
+ // that ships it.
125594
+ hidden: true
125595
+ },
125596
+ "qwen-flash": {
125597
+ displayName: "Qwen Flash",
125598
+ resolve: "opencode/qwen3.8-flash",
125599
+ effort: ["low", "medium", "xhigh"],
125600
+ openRouterEffort: [],
125601
+ openRouterResolve: "openrouter/qwen/qwen3.8-flash",
125602
+ // unlisted until a published `pullfrog` carries this alias (the
125603
+ // merge-vs-publish rule in wiki/models-catalog.md). unhide in the release
125604
+ // that ships it.
125605
+ hidden: true
125588
125606
  },
125589
125607
  "gpt-5-nano": {
125590
125608
  displayName: "GPT Nano",
@@ -125633,11 +125651,31 @@ var providers = {
125633
125651
  // model, as `minimax-m2.5-free` does.
125634
125652
  fallback: "opencode/big-pickle"
125635
125653
  },
125654
+ // Zen's FREE stealth preview (listed 2026-09-23), the third after
125655
+ // big-pickle and union-alpha. OpenRouter's listing: prompts and
125656
+ // completions may be retained by the provider, not trained on. unlike the
125657
+ // first two it publishes an effort ladder, so the gate mirrors one here.
125658
+ "space-bunny": {
125659
+ displayName: "Space Bunny",
125660
+ description: "Stealth preview; prompts may be retained",
125661
+ resolve: "opencode/space-bunny-free",
125662
+ effort: ["low", "medium", "high", "xhigh", "max"],
125663
+ // free to run, still gated on the provider's own OPENCODE_API_KEY —
125664
+ // see the big-pickle note above (#1077).
125665
+ isFree: true,
125666
+ // unlisted until a published `pullfrog` carries this alias: 0.1.82
125667
+ // predates it, so a run passes `opencode/space-bunny` through raw and
125668
+ // Zen answers a 500. unhide in the release that ships it.
125669
+ hidden: true
125670
+ },
125636
125671
  // Zen's live free MiMo, and the second free row in a menu that big-pickle
125637
125672
  // was alone in since `mimo-v2-pro-free` lost its model.
125638
125673
  mimo: {
125639
125674
  displayName: "MiMo",
125640
- resolve: "opencode/mimo-v2.5-free",
125675
+ // models.dev deprecated `mimo-v2.5-free` on 2026-09-22. V2.6-Flash is
125676
+ // the only other MiMo Zen serves, so the slug follows it across the
125677
+ // tier rather than leaving stored picks on a dying id.
125678
+ resolve: "opencode/mimo-v2.6-flash-free",
125641
125679
  // free to run, still gated on the provider's own OPENCODE_API_KEY —
125642
125680
  // see the big-pickle note above (#1077).
125643
125681
  isFree: true
@@ -125666,11 +125704,12 @@ var providers = {
125666
125704
  // OpenCode Go is a separate $10/mo subscription from Zen, served on its own
125667
125705
  // base URL (`https://opencode.ai/zen/go/v1`) but authenticated with the SAME
125668
125706
  // `OPENCODE_API_KEY`. it carries the open-weight coding models plus a couple
125669
- // of frontier ones, six of which are served ONLY here — Zen's `/v1/models`
125670
- // does not list qwen3.7/3.8-*, mimo-v2.5-pro, longcat-2.0 or hy3. (it listed
125707
+ // of frontier ones, four of which are served ONLY here — Zen's `/v1/models`
125708
+ // does not list qwen3.7-plus, mimo-v2.6-pro, longcat-2.0 or hy3. (it listed
125671
125709
  // no glm-5.3* either until 2026-09, which is why `opencode/glm` trailed on
125672
- // 5.2.) so for a Go subscriber this provider is not a duplicate route to Zen,
125673
- // it is the only route to a large part of what they pay for.
125710
+ // 5.2, and no qwen3.8-* until late 2026-09.) so for a Go subscriber this
125711
+ // provider is not a duplicate route to Zen, it is the only route to a large
125712
+ // part of what they pay for.
125674
125713
  // like `opencode` and `openrouter` this is a ROUTER, not a vendor: slugs and
125675
125714
  // display names mirror the upstream brand tier, and the picker groups them
125676
125715
  // under the upstream vendor.
@@ -125730,7 +125769,8 @@ var providers = {
125730
125769
  // picker row that fails for almost everyone is worse than none. DeepSeek
125731
125770
  // stays reachable ungated via `deepseek/*`, `opencode/*` and
125732
125771
  // `openrouter/*`; both remain runnable by full specifier once opted in.
125733
- // Alibaba — new vendor family for the catalog; Zen serves neither tier.
125772
+ // Alibaba — Zen serves Max and Flash too (see `opencode/qwen-max`); Plus
125773
+ // is Go-only.
125734
125774
  "qwen-max": {
125735
125775
  displayName: "Qwen Max",
125736
125776
  resolve: "opencode-go/qwen3.8-max",
@@ -125773,8 +125813,8 @@ var providers = {
125773
125813
  // Xiaomi — Go-only; Zen serves the free `mimo-v2-pro-free` promo instead.
125774
125814
  "mimo-pro": {
125775
125815
  displayName: "MiMo Pro",
125776
- resolve: "opencode-go/mimo-v2.5-pro",
125777
- openRouterResolve: "openrouter/xiaomi/mimo-v2.5-pro"
125816
+ resolve: "opencode-go/mimo-v2.6-pro",
125817
+ openRouterResolve: "openrouter/xiaomi/mimo-v2.6-pro"
125778
125818
  },
125779
125819
  // Meituan — Go-only.
125780
125820
  longcat: {
@@ -125800,15 +125840,15 @@ var providers = {
125800
125840
  // wiki/models-catalog.md on `opencode/kimi-k2`.
125801
125841
  grok: {
125802
125842
  displayName: "Grok",
125803
- resolve: "opencode-go/grok-4.6",
125843
+ resolve: "opencode-go/grok-4.7",
125804
125844
  effort: ["low", "medium", "high", "xhigh"],
125805
- openRouterResolve: "openrouter/x-ai/grok-4.6"
125845
+ openRouterResolve: "openrouter/x-ai/grok-4.7"
125806
125846
  },
125807
125847
  "gpt-luna": {
125808
125848
  displayName: "GPT Luna",
125809
- resolve: "opencode-go/gpt-5.6-luna",
125849
+ resolve: "opencode-go/gpt-6-luna",
125810
125850
  effort: ["none", "low", "medium", "high", "xhigh", "max"],
125811
- openRouterResolve: "openrouter/openai/gpt-5.6-luna"
125851
+ openRouterResolve: "openrouter/openai/gpt-6-luna"
125812
125852
  }
125813
125853
  }
125814
125854
  }),
@@ -125910,15 +125950,15 @@ var providers = {
125910
125950
  resolve: "openrouter/~anthropic/claude-haiku-latest",
125911
125951
  openRouterResolve: "openrouter/~anthropic/claude-haiku-latest"
125912
125952
  },
125913
- // pinned to the explicit gpt-5.6 tiers (not the ~openai/gpt-latest rolling
125914
- // alias): after the Sol/Terra/Luna rename, ~gpt-mini-latest no longer maps
125953
+ // pinned to the explicit Sol/Terra/Luna tiers (not the ~openai/gpt-latest
125954
+ // rolling alias): after that rename, ~gpt-mini-latest no longer maps
125915
125955
  // to Luna, so rolling aliases would silently diverge `gpt`/`gpt-mini` from
125916
125956
  // the chosen tiers across funding paths.
125917
125957
  "gpt-sol": {
125918
125958
  displayName: "GPT Sol",
125919
- resolve: "openrouter/openai/gpt-5.6-sol",
125959
+ resolve: "openrouter/openai/gpt-6-sol",
125920
125960
  effort: ["none", "low", "medium", "high", "xhigh", "max"],
125921
- openRouterResolve: "openrouter/openai/gpt-5.6-sol",
125961
+ openRouterResolve: "openrouter/openai/gpt-6-sol",
125922
125962
  subagentModel: "gpt-terra"
125923
125963
  },
125924
125964
  "gpt-astra": {
@@ -125932,9 +125972,9 @@ var providers = {
125932
125972
  "gpt-sol-pro": {
125933
125973
  displayName: "GPT Sol Pro",
125934
125974
  description: "Maximum reasoning effort",
125935
- resolve: "openrouter/openai/gpt-5.6-sol-pro",
125975
+ resolve: "openrouter/openai/gpt-6-sol-pro",
125936
125976
  effort: ["none", "low", "medium", "high", "xhigh", "max"],
125937
- openRouterResolve: "openrouter/openai/gpt-5.6-sol-pro",
125977
+ openRouterResolve: "openrouter/openai/gpt-6-sol-pro",
125938
125978
  subagentModel: "gpt-sol"
125939
125979
  },
125940
125980
  // gpt-5.6 balanced mid-tier — selectable + Sol's subagent. see openai above.
@@ -125946,9 +125986,9 @@ var providers = {
125946
125986
  },
125947
125987
  "gpt-luna": {
125948
125988
  displayName: "GPT Luna",
125949
- resolve: "openrouter/openai/gpt-5.6-luna",
125989
+ resolve: "openrouter/openai/gpt-6-luna",
125950
125990
  effort: ["none", "low", "medium", "high", "xhigh", "max"],
125951
- openRouterResolve: "openrouter/openai/gpt-5.6-luna"
125991
+ openRouterResolve: "openrouter/openai/gpt-6-luna"
125952
125992
  },
125953
125993
  // legacy aliases — see openai provider for context.
125954
125994
  "gpt-codex": {
@@ -126012,9 +126052,9 @@ var providers = {
126012
126052
  },
126013
126053
  grok: {
126014
126054
  displayName: "Grok",
126015
- resolve: "openrouter/x-ai/grok-4.6",
126055
+ resolve: "openrouter/x-ai/grok-4.7",
126016
126056
  effort: ["low", "medium", "high", "xhigh"],
126017
- openRouterResolve: "openrouter/x-ai/grok-4.6"
126057
+ openRouterResolve: "openrouter/x-ai/grok-4.7"
126018
126058
  },
126019
126059
  // dated pin, not the bare id — see `deepseek/deepseek-pro` for why
126020
126060
  // OpenRouter's unversioned `deepseek-v4-pro` is the stale April preview.
@@ -126085,8 +126125,10 @@ var providers = {
126085
126125
  vercel: provider({
126086
126126
  // Vercel AI Gateway — one key serves every model it fronts. model IDs use
126087
126127
  // the models.dev `vercel` catalog's own naming (dotted versions, e.g.
126088
- // `anthropic/claude-opus-5`, `zai/glm-5.3`), and effort ladders mirror that
126089
- // catalog's entries, not the upstream vendor's. deliberately no
126128
+ // `anthropic/claude-opus-5.5`, `zai/glm-5.3`). effort ladders come from the
126129
+ // gateway's OWN `/v1/models`, not models.dev — the two disagree routinely
126130
+ // (on 2026-09-22 they disagreed on all ten entries that drifted), and the
126131
+ // drift test reads the gateway for that reason. deliberately no
126090
126132
  // `openRouterResolve`: a gateway pick is BYOK-only — silently rerouting it
126091
126133
  // over the Router proxy would bill the wallet for traffic the user pointed
126092
126134
  // at their own gateway.
@@ -126095,7 +126137,7 @@ var providers = {
126095
126137
  models: {
126096
126138
  "claude-opus": {
126097
126139
  displayName: "Claude Opus",
126098
- resolve: "vercel/anthropic/claude-opus-5",
126140
+ resolve: "vercel/anthropic/claude-opus-5.5",
126099
126141
  effort: ["low", "medium", "high", "xhigh", "max"],
126100
126142
  preferred: true,
126101
126143
  subagentModel: "claude-sonnet"
@@ -126103,7 +126145,7 @@ var providers = {
126103
126145
  "claude-sonnet": {
126104
126146
  displayName: "Claude Sonnet",
126105
126147
  resolve: "vercel/anthropic/claude-sonnet-5",
126106
- effort: ["low", "medium", "high", "xhigh"]
126148
+ effort: ["none", "low", "medium", "high", "xhigh", "max"]
126107
126149
  },
126108
126150
  "claude-haiku": {
126109
126151
  displayName: "Claude Haiku",
@@ -126111,7 +126153,7 @@ var providers = {
126111
126153
  },
126112
126154
  "gpt-sol": {
126113
126155
  displayName: "GPT Sol",
126114
- resolve: "vercel/openai/gpt-5.6-sol",
126156
+ resolve: "vercel/openai/gpt-6-sol",
126115
126157
  effort: ["none", "low", "medium", "high", "xhigh", "max"],
126116
126158
  subagentModel: "gpt-terra"
126117
126159
  },
@@ -126124,35 +126166,35 @@ var providers = {
126124
126166
  "gpt-terra": {
126125
126167
  displayName: "GPT Terra",
126126
126168
  resolve: "vercel/openai/gpt-5.6-terra",
126127
- effort: ["none", "low", "medium", "high", "xhigh", "max"]
126169
+ effort: ["none", "minimal", "low", "medium", "high", "xhigh", "max"]
126128
126170
  },
126129
126171
  "gpt-luna": {
126130
126172
  displayName: "GPT Luna",
126131
- resolve: "vercel/openai/gpt-5.6-luna",
126173
+ resolve: "vercel/openai/gpt-6-luna",
126132
126174
  effort: ["none", "low", "medium", "high", "xhigh", "max"]
126133
126175
  },
126134
126176
  "gemini-pro": {
126135
126177
  displayName: "Gemini Pro",
126136
126178
  resolve: "vercel/google/gemini-3.1-pro-preview",
126137
- effort: ["low", "medium", "high"]
126179
+ effort: ["low", "high"]
126138
126180
  },
126139
126181
  "gemini-flash": {
126140
126182
  displayName: "Gemini Flash",
126141
126183
  resolve: "vercel/google/gemini-3.8-flash",
126142
- effort: ["low", "medium", "high"]
126184
+ effort: ["low", "high"]
126143
126185
  },
126144
126186
  "deepseek-pro": {
126145
126187
  displayName: "DeepSeek Pro",
126146
126188
  resolve: "vercel/deepseek/deepseek-v4-pro-0813",
126147
- effort: ["high", "xhigh"]
126189
+ effort: ["none", "high", "max"]
126148
126190
  },
126149
126191
  // the gateway's bare `deepseek-v4-flash` is the April preview — the same
126150
126192
  // fork trap as OpenRouter, with `deepseek-v4-flash-0731` beside it — so
126151
- // this entry sat on the preview until V4.1. the gateway publishes no
126152
- // effort ladder for the V4.1 id.
126193
+ // this entry sat on the preview until V4.1.
126153
126194
  "deepseek-flash": {
126154
126195
  displayName: "DeepSeek Flash",
126155
- resolve: "vercel/deepseek/deepseek-v4.1-flash"
126196
+ resolve: "vercel/deepseek/deepseek-v4.1-flash",
126197
+ effort: ["none", "high", "max"]
126156
126198
  },
126157
126199
  glm: {
126158
126200
  displayName: "GLM",
@@ -126162,12 +126204,12 @@ var providers = {
126162
126204
  "kimi-k3": {
126163
126205
  displayName: "Kimi K3",
126164
126206
  resolve: "vercel/moonshotai/kimi-k3",
126165
- effort: ["low", "high", "max"]
126207
+ effort: ["none", "low", "high", "max"]
126166
126208
  },
126167
- // the gateway publishes no effort ladder for this id.
126168
126209
  "muse-spark": {
126169
126210
  displayName: "Muse Spark",
126170
- resolve: "vercel/meta/muse-spark-1.3"
126211
+ resolve: "vercel/meta/muse-spark-1.3",
126212
+ effort: ["minimal", "low", "medium", "high", "xhigh"]
126171
126213
  }
126172
126214
  }
126173
126215
  })
@@ -127749,7 +127791,7 @@ process.stdin.on("end", () => {
127749
127791
  });
127750
127792
  `;
127751
127793
  }
127752
- function buildClaudePretoolGateSettings(scriptAbsolutePath, execToolDenyRules) {
127794
+ function buildClaudePretoolGateSettings(scriptAbsolutePath, denyRules) {
127753
127795
  return {
127754
127796
  hooks: {
127755
127797
  PreToolUse: [
@@ -127769,7 +127811,7 @@ function buildClaudePretoolGateSettings(scriptAbsolutePath, execToolDenyRules) {
127769
127811
  }
127770
127812
  ]
127771
127813
  },
127772
- permissions: { deny: execToolDenyRules }
127814
+ permissions: { deny: denyRules }
127773
127815
  };
127774
127816
  }
127775
127817
 
@@ -128632,12 +128674,22 @@ async function installClaudeCli() {
128632
128674
  installDependencies: true
128633
128675
  });
128634
128676
  }
128635
- var CLAUDE_EXEC_TOOLS = ["Bash", "Monitor", "REPL", "Workflow"];
128636
- var CLAUDE_EXEC_TOOL_DENY_RULES = [
128677
+ var CLAUDE_EXEC_TOOLS = ["Bash", "PowerShell", "Monitor", "REPL", "Workflow"];
128678
+ var CLAUDE_DENIED_TOOLS = [
128637
128679
  ...CLAUDE_EXEC_TOOLS,
128638
- ...CLAUDE_EXEC_TOOLS.map((t2) => `Agent(${t2})`)
128680
+ "DesignSync",
128681
+ "Artifact",
128682
+ "ShareOnboardingGuide",
128683
+ "SendMessage",
128684
+ "ListAgents",
128685
+ "PushNotification",
128686
+ "RemoteTrigger"
128639
128687
  ];
128640
- var CLAUDE_DISALLOWED_TOOLS = CLAUDE_EXEC_TOOL_DENY_RULES.join(",");
128688
+ var CLAUDE_DENY_RULES = [
128689
+ ...CLAUDE_DENIED_TOOLS,
128690
+ ...CLAUDE_DENIED_TOOLS.map((t2) => `Agent(${t2})`)
128691
+ ];
128692
+ var CLAUDE_DISALLOWED_TOOLS = CLAUDE_DENY_RULES.join(",");
128641
128693
  function writeMcpConfig(ctx) {
128642
128694
  const configDir = join5(ctx.tmpdir, ".claude");
128643
128695
  mkdirSync4(configDir, { recursive: true });
@@ -129070,14 +129122,11 @@ function buildClaudeSettings(params) {
129070
129122
  `Glob(${path4}/**)`,
129071
129123
  `Glob(/${path4}/**)`
129072
129124
  ]);
129073
- const gate = buildClaudePretoolGateSettings(
129074
- params.pretoolGateScriptPath,
129075
- CLAUDE_EXEC_TOOL_DENY_RULES
129076
- );
129125
+ const gate = buildClaudePretoolGateSettings(params.pretoolGateScriptPath, CLAUDE_DENY_RULES);
129077
129126
  const base = {
129078
129127
  permissions: {
129079
129128
  deny: [
129080
- // native exec tools — the authoritative, bypass-immune deny.
129129
+ // CLAUDE_DENIED_TOOLS — the authoritative, bypass-immune deny.
129081
129130
  // `--disallowedTools` (a cliArg-source deny) leaked under
129082
129131
  // `--dangerously-skip-permissions`; policySettings denies survive
129083
129132
  // bypassPermissions mode. covers top-level + Agent(...) subagent use.
@@ -129291,7 +129340,6 @@ var claude = agent({
129291
129340
  });
129292
129341
 
129293
129342
  // agents/codex.ts
129294
- var core3 = __toESM(require_core(), 1);
129295
129343
  import { existsSync as existsSync7, mkdirSync as mkdirSync6, readFileSync as readFileSync5, writeFileSync as writeFileSync6 } from "node:fs";
129296
129344
  import { join as join7 } from "node:path";
129297
129345
  import { performance as performance6 } from "node:perf_hooks";
@@ -129653,6 +129701,18 @@ async function writeBackEntry(apiToken, entry) {
129653
129701
  }
129654
129702
  }
129655
129703
 
129704
+ // utils/secretCommands.ts
129705
+ var core3 = __toESM(require_core(), 1);
129706
+ function maskSecret(value2) {
129707
+ if (isGitHubActions) core3.setSecret(value2);
129708
+ }
129709
+ function saveSecretState(name, value2) {
129710
+ if (isGitHubActions) core3.saveState(name, value2);
129711
+ }
129712
+ function setSecretOutput(name, value2) {
129713
+ if (isGitHubActions) core3.setOutput(name, value2);
129714
+ }
129715
+
129656
129716
  // utils/secrets.ts
129657
129717
  var SENSITIVE_PATTERNS = [
129658
129718
  /_KEY$/i,
@@ -130001,8 +130061,8 @@ function toTodoWriteInput(item) {
130001
130061
  }
130002
130062
  var CODEX_MODEL_PRICING = {
130003
130063
  "gpt-6-astra": { input: 10, cacheRead: 1, cacheWrite: 12.5, output: 50 },
130004
- "gpt-5.6-sol": { input: 5, cacheRead: 0.5, cacheWrite: 6.25, output: 30 },
130005
- "gpt-5.6-luna": { input: 0.2, cacheRead: 0.02, cacheWrite: 0.25, output: 1.2 },
130064
+ "gpt-6-sol": { input: 2, cacheRead: 0.2, cacheWrite: 2.5, output: 10 },
130065
+ "gpt-6-luna": { input: 0.1, cacheRead: 0.01, cacheWrite: 0.125, output: 0.5 },
130006
130066
  "gpt-5.6-terra": { input: 2, cacheRead: 0.2, cacheWrite: 2.5, output: 12 }
130007
130067
  };
130008
130068
  function codexCostUsd(params) {
@@ -130240,7 +130300,7 @@ var codex = agent({
130240
130300
  gatewayUrl: codexHomeAuth ? void 0 : getProviderGatewayUrl("openai/")
130241
130301
  });
130242
130302
  if (codexHomeAuth) {
130243
- core3.saveState(
130303
+ saveSecretState(
130244
130304
  OAUTH_WRITEBACK_STATE,
130245
130305
  JSON.stringify({
130246
130306
  apiToken: ctx.apiToken,
@@ -130325,7 +130385,6 @@ var codex = agent({
130325
130385
  });
130326
130386
 
130327
130387
  // agents/opencode.ts
130328
- var core4 = __toESM(require_core(), 1);
130329
130388
  import { spawn as nodeSpawn2 } from "node:child_process";
130330
130389
  import { mkdirSync as mkdirSync7, writeFileSync as writeFileSync7 } from "node:fs";
130331
130390
  import { join as join8 } from "node:path";
@@ -136767,7 +136826,7 @@ var opencode = agent({
136767
136826
  });
136768
136827
  }
136769
136828
  if (writebacks.length > 0) {
136770
- core4.saveState(
136829
+ saveSecretState(
136771
136830
  OAUTH_WRITEBACK_STATE,
136772
136831
  JSON.stringify({ apiToken: ctx.apiToken, entries: writebacks })
136773
136832
  );
@@ -147862,7 +147921,7 @@ var Hono2 = class extends Hono {
147862
147921
  }
147863
147922
  };
147864
147923
 
147865
- // node_modules/.pnpm/mcp-proxy@6.7.11/node_modules/mcp-proxy/dist/startStdioServer-C4sEMMHS.mjs
147924
+ // node_modules/.pnpm/mcp-proxy@6.7.12/node_modules/mcp-proxy/dist/startStdioServer-C9HzKfjR.mjs
147866
147925
  import { createRequire } from "node:module";
147867
147926
  import { randomUUID as randomUUID2, timingSafeEqual } from "node:crypto";
147868
147927
 
@@ -157635,7 +157694,7 @@ var require_core$2 = /* @__PURE__ */ __commonJSMin(((exports) => {
157635
157694
  Object.defineProperty(exports, "__esModule", { value: true });
157636
157695
  const id_1 = require_id2();
157637
157696
  const ref_1 = require_ref2();
157638
- const core13 = [
157697
+ const core9 = [
157639
157698
  "$schema",
157640
157699
  "$id",
157641
157700
  "$defs",
@@ -157645,7 +157704,7 @@ var require_core$2 = /* @__PURE__ */ __commonJSMin(((exports) => {
157645
157704
  id_1.default,
157646
157705
  ref_1.default
157647
157706
  ];
157648
- exports.default = core13;
157707
+ exports.default = core9;
157649
157708
  }));
157650
157709
  var require_limitNumber2 = /* @__PURE__ */ __commonJSMin(((exports) => {
157651
157710
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -159783,7 +159842,7 @@ var require_json_schema_2019_09 = /* @__PURE__ */ __commonJSMin(((exports) => {
159783
159842
  const metaSchema = require_schema$1();
159784
159843
  const applicator = require_applicator$1();
159785
159844
  const content = require_content$1();
159786
- const core13 = require_core$1();
159845
+ const core9 = require_core$1();
159787
159846
  const format2 = require_format3();
159788
159847
  const metadata = require_meta_data$1();
159789
159848
  const validation = require_validation$1();
@@ -159793,7 +159852,7 @@ var require_json_schema_2019_09 = /* @__PURE__ */ __commonJSMin(((exports) => {
159793
159852
  metaSchema,
159794
159853
  applicator,
159795
159854
  content,
159796
- core13,
159855
+ core9,
159797
159856
  with$data(this, format2),
159798
159857
  metadata,
159799
159858
  with$data(this, validation)
@@ -160233,7 +160292,7 @@ var require_json_schema_2020_12 = /* @__PURE__ */ __commonJSMin(((exports) => {
160233
160292
  const applicator = require_applicator2();
160234
160293
  const unevaluated = require_unevaluated();
160235
160294
  const content = require_content();
160236
- const core13 = require_core4();
160295
+ const core9 = require_core4();
160237
160296
  const format2 = require_format_annotation();
160238
160297
  const metadata = require_meta_data();
160239
160298
  const validation = require_validation2();
@@ -160244,7 +160303,7 @@ var require_json_schema_2020_12 = /* @__PURE__ */ __commonJSMin(((exports) => {
160244
160303
  applicator,
160245
160304
  unevaluated,
160246
160305
  content,
160247
- core13,
160306
+ core9,
160248
160307
  with$data(this, format2),
160249
160308
  metadata,
160250
160309
  with$data(this, validation)
@@ -163461,7 +163520,7 @@ function createMcpHandler(factory, options = {}) {
163461
163520
  };
163462
163521
  }
163463
163522
 
163464
- // node_modules/.pnpm/mcp-proxy@6.7.11/node_modules/mcp-proxy/dist/startStdioServer-C4sEMMHS.mjs
163523
+ // node_modules/.pnpm/mcp-proxy@6.7.12/node_modules/mcp-proxy/dist/startStdioServer-C9HzKfjR.mjs
163465
163524
  import http from "http";
163466
163525
  import { Http2ServerRequest } from "http2";
163467
163526
  import { Readable } from "stream";
@@ -171686,7 +171745,7 @@ var require_core$22 = /* @__PURE__ */ __commonJSMin2(((exports) => {
171686
171745
  Object.defineProperty(exports, "__esModule", { value: true });
171687
171746
  const id_1 = require_id3();
171688
171747
  const ref_1 = require_ref3();
171689
- const core13 = [
171748
+ const core9 = [
171690
171749
  "$schema",
171691
171750
  "$id",
171692
171751
  "$defs",
@@ -171696,7 +171755,7 @@ var require_core$22 = /* @__PURE__ */ __commonJSMin2(((exports) => {
171696
171755
  id_1.default,
171697
171756
  ref_1.default
171698
171757
  ];
171699
- exports.default = core13;
171758
+ exports.default = core9;
171700
171759
  }));
171701
171760
  var require_limitNumber3 = /* @__PURE__ */ __commonJSMin2(((exports) => {
171702
171761
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -173834,7 +173893,7 @@ var require_json_schema_2019_092 = /* @__PURE__ */ __commonJSMin2(((exports) =>
173834
173893
  const metaSchema = require_schema$12();
173835
173894
  const applicator = require_applicator$12();
173836
173895
  const content = require_content$12();
173837
- const core13 = require_core$12();
173896
+ const core9 = require_core$12();
173838
173897
  const format2 = require_format4();
173839
173898
  const metadata = require_meta_data$12();
173840
173899
  const validation = require_validation$12();
@@ -173844,7 +173903,7 @@ var require_json_schema_2019_092 = /* @__PURE__ */ __commonJSMin2(((exports) =>
173844
173903
  metaSchema,
173845
173904
  applicator,
173846
173905
  content,
173847
- core13,
173906
+ core9,
173848
173907
  with$data(this, format2),
173849
173908
  metadata,
173850
173909
  with$data(this, validation)
@@ -174284,7 +174343,7 @@ var require_json_schema_2020_122 = /* @__PURE__ */ __commonJSMin2(((exports) =>
174284
174343
  const applicator = require_applicator3();
174285
174344
  const unevaluated = require_unevaluated2();
174286
174345
  const content = require_content2();
174287
- const core13 = require_core5();
174346
+ const core9 = require_core5();
174288
174347
  const format2 = require_format_annotation2();
174289
174348
  const metadata = require_meta_data2();
174290
174349
  const validation = require_validation3();
@@ -174295,7 +174354,7 @@ var require_json_schema_2020_122 = /* @__PURE__ */ __commonJSMin2(((exports) =>
174295
174354
  applicator,
174296
174355
  unevaluated,
174297
174356
  content,
174298
- core13,
174357
+ core9,
174299
174358
  with$data(this, format2),
174300
174359
  metadata,
174301
174360
  with$data(this, validation)
@@ -174866,7 +174925,7 @@ var SseError = class extends Error {
174866
174925
  }
174867
174926
  };
174868
174927
 
174869
- // node_modules/.pnpm/mcp-proxy@6.7.11/node_modules/mcp-proxy/dist/startStdioServer-C4sEMMHS.mjs
174928
+ // node_modules/.pnpm/mcp-proxy@6.7.12/node_modules/mcp-proxy/dist/startStdioServer-C9HzKfjR.mjs
174870
174929
  var __create4 = Object.create;
174871
174930
  var __defProp$1 = Object.defineProperty;
174872
174931
  var __getOwnPropDesc4 = Object.getOwnPropertyDescriptor;
@@ -191879,6 +191938,10 @@ var applyCorsHeaders = (req, res, corsOptions) => {
191879
191938
  console.error("[mcp-proxy] error parsing origin", error109);
191880
191939
  }
191881
191940
  };
191941
+ var canServeModernRoute = (server) => {
191942
+ const target = server instanceof McpServer ? server.server : server;
191943
+ return Array.isArray(target._supportedProtocolVersions);
191944
+ };
191882
191945
  var createModernLeg = ({ createServer: createServer4, onClose, onConnect, onListenSubscriptions }) => {
191883
191946
  const requestContext = new AsyncLocalStorage2();
191884
191947
  const createInstance = async ({ authResult, body, req }) => {
@@ -191898,6 +191961,18 @@ var createModernLeg = ({ createServer: createServer4, onClose, onConnect, onList
191898
191961
  };
191899
191962
  target.onclose = teardown;
191900
191963
  try {
191964
+ if (!canServeModernRoute(server)) throw new Response(JSON.stringify({
191965
+ error: {
191966
+ code: -32e3,
191967
+ data: { reason: "server_missing_modern_protocol_support" },
191968
+ message: "Unsupported protocol version: the server instance cannot serve the 2026-07-28 protocol revision. It was built by the 1.x MCP SDK (e.g. fastmcp <=4.x pulling mcp-proxy through its `^6.4.6` range), which does not declare `_supportedProtocolVersions`. Upgrade the framework that builds it, or serve only 2025-era clients (`modern: false`)."
191969
+ },
191970
+ id: getRequestId(body),
191971
+ jsonrpc: "2.0"
191972
+ }), {
191973
+ headers: { "content-type": "application/json" },
191974
+ status: 400
191975
+ });
191901
191976
  if (onListenSubscriptions) {
191902
191977
  const listenUris = readListenSubscriptions(body);
191903
191978
  if (listenUris.length > 0) releaseSubscriptions = await onListenSubscriptions(listenUris);
@@ -205000,7 +205075,7 @@ this usually means your local branch has commits that were never pushed \u2014 s
205000
205075
  }
205001
205076
 
205002
205077
  // utils/github.ts
205003
- var core5 = __toESM(require_core(), 1);
205078
+ var core4 = __toESM(require_core(), 1);
205004
205079
  import { createSign } from "node:crypto";
205005
205080
  import { rename, writeFile } from "node:fs/promises";
205006
205081
  import { dirname as dirname3, join as join13 } from "node:path";
@@ -209249,9 +209324,7 @@ async function fetchIdTokenFromStash(creds) {
209249
209324
  if (!body.value) {
209250
209325
  throw new Error("ID token response has no value field");
209251
209326
  }
209252
- if (isGitHubActions) {
209253
- core5.setSecret(body.value);
209254
- }
209327
+ maskSecret(body.value);
209255
209328
  return body.value;
209256
209329
  }
209257
209330
  function translateIdTokenError(error109) {
@@ -209263,7 +209336,7 @@ function translateIdTokenError(error109) {
209263
209336
  var mintIdToken = op(
209264
209337
  async () => {
209265
209338
  try {
209266
- return await core5.getIDToken(OIDC_AUDIENCE);
209339
+ return await core4.getIDToken(OIDC_AUDIENCE);
209267
209340
  } catch (error109) {
209268
209341
  throw translateIdTokenError(error109);
209269
209342
  }
@@ -210601,6 +210674,15 @@ function buildImplementPlanLink(ctx, issueNumber, commentId) {
210601
210674
  const apiUrl = getApiUrl();
210602
210675
  return `[Implement plan \u2794](${apiUrl}/trigger/${ctx.repo.owner}/${ctx.repo.name}/${issueNumber}?action=implement&comment_id=${commentId})`;
210603
210676
  }
210677
+ function buildEnrichmentLinks(ctx) {
210678
+ const event = ctx.payload.event;
210679
+ if (event.trigger !== "issues_opened" || event.is_pr || ctx.payload.prompt || ctx.toolState.selectedMode === "Build") {
210680
+ return [];
210681
+ }
210682
+ return [
210683
+ `[Implement a fix \u2794](${getApiUrl()}/trigger/${ctx.repo.owner}/${ctx.repo.name}/${event.issue_number}?action=build)`
210684
+ ];
210685
+ }
210604
210686
  function addFooter(ctx, body) {
210605
210687
  if (/<br\s*\/?>[ \t]*\n(?!\s*\n)/i.test(body)) {
210606
210688
  throw new Error(
@@ -210637,13 +210719,14 @@ function CreateCommentTool(ctx) {
210637
210719
  if (issueNumber === ctx.payload.event.issue_number) {
210638
210720
  ctx.toolState.standaloneCommentId = result.data.id;
210639
210721
  }
210640
- if (commentType === "Plan") {
210641
- if (result.data.node_id) {
210722
+ const enrichmentLinks = issueNumber === ctx.payload.event.issue_number ? buildEnrichmentLinks(ctx) : [];
210723
+ if (commentType === "Plan" || enrichmentLinks.length > 0) {
210724
+ if (commentType === "Plan" && result.data.node_id) {
210642
210725
  await patchWorkflowRunFields(ctx, { planCommentNodeId: result.data.node_id });
210643
210726
  }
210644
- const customParts = [buildImplementPlanLink(ctx, issueNumber, result.data.id)];
210727
+ const customParts = commentType === "Plan" ? [buildImplementPlanLink(ctx, issueNumber, result.data.id)] : enrichmentLinks;
210645
210728
  const footer = buildCommentFooter(ctx, customParts);
210646
- const bodyWithPlanLink = `${stripExistingFooter(body)}${footer}`;
210729
+ const bodyWithPlanLink = `${stripExistingFooter(bodyWithFooter)}${footer}`;
210647
210730
  const updateResult = await ctx.octokit.rest.issues.updateComment({
210648
210731
  owner: ctx.repo.owner,
210649
210732
  repo: ctx.repo.name,
@@ -210715,6 +210798,7 @@ async function reportProgress(ctx, params) {
210715
210798
  }
210716
210799
  const issueNumber = ctx.payload.event.issue_number ?? primaryRepoState(ctx.toolState).issueNumber;
210717
210800
  const isPlanMode = ctx.toolState.selectedMode === "Plan";
210801
+ const enrichmentLinks = params.liveProgress ? [] : buildEnrichmentLinks(ctx);
210718
210802
  const apiCtx = { octokit: ctx.octokit, owner: ctx.repo.owner, repo: ctx.repo.name };
210719
210803
  if (target_plan_comment === true && ctx.toolState.existingPlanCommentId === void 0) {
210720
210804
  log2.warning("target_plan_comment requested but no existingPlanCommentId in tool state");
@@ -210722,7 +210806,7 @@ async function reportProgress(ctx, params) {
210722
210806
  if (target_plan_comment === true && ctx.toolState.existingPlanCommentId !== void 0) {
210723
210807
  const commentId = ctx.toolState.existingPlanCommentId;
210724
210808
  const customParts = issueNumber !== void 0 ? [buildImplementPlanLink(ctx, issueNumber, commentId)] : void 0;
210725
- const bodyWithoutFooter = stripExistingFooter(body);
210809
+ const bodyWithoutFooter = stripExistingFooter(fixDoubleEscapedString(body));
210726
210810
  const footer = buildCommentFooter(ctx, customParts);
210727
210811
  const bodyWithFooter = `${bodyWithoutFooter}${footer}`;
210728
210812
  const result = await updateProgressComment(
@@ -210743,8 +210827,8 @@ async function reportProgress(ctx, params) {
210743
210827
  }
210744
210828
  const existingComment = ctx.toolState.progressComment;
210745
210829
  if (existingComment) {
210746
- const customParts = isPlanMode && issueNumber !== void 0 ? [buildImplementPlanLink(ctx, issueNumber, existingComment.id)] : void 0;
210747
- const bodyWithoutFooter = stripExistingFooter(body);
210830
+ const customParts = isPlanMode && issueNumber !== void 0 ? [buildImplementPlanLink(ctx, issueNumber, existingComment.id)] : enrichmentLinks;
210831
+ const bodyWithoutFooter = stripExistingFooter(fixDoubleEscapedString(body));
210748
210832
  const footer = buildCommentFooter(ctx, customParts);
210749
210833
  const bodyWithFooter = `${bodyWithoutFooter}${footer}`;
210750
210834
  let result;
@@ -210796,13 +210880,13 @@ async function reportProgress(ctx, params) {
210796
210880
  );
210797
210881
  ctx.toolState.progressComment = created.comment;
210798
210882
  if (!params.liveProgress) ctx.toolState.wasUpdated = true;
210799
- if (isPlanMode) {
210800
- const customParts = [buildImplementPlanLink(ctx, issueNumber, created.comment.id)];
210801
- const bodyWithoutFooter = stripExistingFooter(body);
210883
+ if (isPlanMode || enrichmentLinks.length > 0) {
210884
+ const customParts = isPlanMode ? [buildImplementPlanLink(ctx, issueNumber, created.comment.id)] : enrichmentLinks;
210885
+ const bodyWithoutFooter = stripExistingFooter(initialBody);
210802
210886
  const footer = buildCommentFooter(ctx, customParts);
210803
210887
  const bodyWithPlanLink = `${bodyWithoutFooter}${footer}`;
210804
210888
  const updateResult = await updateProgressComment(apiCtx, created.comment, bodyWithPlanLink);
210805
- if (updateResult.node_id) {
210889
+ if (isPlanMode && updateResult.node_id) {
210806
210890
  await patchWorkflowRunFields(ctx, { planCommentNodeId: updateResult.node_id });
210807
210891
  }
210808
210892
  return {
@@ -214717,6 +214801,37 @@ function ResolveReviewThreadTool(ctx) {
214717
214801
  });
214718
214802
  }
214719
214803
 
214804
+ // mcp/searchIssues.ts
214805
+ var SearchIssues = type({
214806
+ terms: type.string.matching(/^[\p{L}\p{N}_./-]+$/u).atMostLength(40).array().atLeastLength(1).atMostLength(5).describe("1-5 keywords from the issue; no GitHub qualifiers or query operators")
214807
+ });
214808
+ function SearchIssuesTool(ctx) {
214809
+ return tool({
214810
+ name: "search_issues",
214811
+ description: "Find open or closed issues in this repository by keyword. Inspect promising matches with get_issue before deciding whether they are duplicates or related. Results are bounded, not an exhaustive duplicate check.",
214812
+ parameters: SearchIssues,
214813
+ execute: execute(async (params) => {
214814
+ const repoPath = `/repos/${ctx.repo.owner}/${ctx.repo.name}`.toLowerCase();
214815
+ const terms = params.terms.map((term) => `"${term}"`).join(" ");
214816
+ const response = await ctx.octokit.rest.search.issuesAndPullRequests({
214817
+ q: `repo:${ctx.repo.owner}/${ctx.repo.name} is:issue ${terms}`,
214818
+ per_page: 20
214819
+ });
214820
+ return {
214821
+ incomplete: response.data.incomplete_results || response.data.total_count > 20,
214822
+ issues: response.data.items.filter(
214823
+ (issue4) => new URL(issue4.repository_url).pathname.toLowerCase() === repoPath && !issue4.pull_request && issue4.number !== ctx.payload.event.issue_number
214824
+ ).map((issue4) => ({
214825
+ number: issue4.number,
214826
+ title: issue4.title,
214827
+ url: issue4.html_url,
214828
+ state: issue4.state
214829
+ }))
214830
+ };
214831
+ })
214832
+ });
214833
+ }
214834
+
214720
214835
  // mcp/selectMode.ts
214721
214836
  var SelectModeParams = type({
214722
214837
  mode: type.string.describe(
@@ -215131,6 +215246,9 @@ function buildCommonTools(ctx, outputSchema) {
215131
215246
  if (hasSimilarIssues({ repoIntelligence: ctx.repoIntelligence, event: ctx.payload.event })) {
215132
215247
  tools.push(SimilarIssuesTool(ctx));
215133
215248
  }
215249
+ if (ctx.payload.event.issue_number !== void 0 && !ctx.payload.event.is_pr) {
215250
+ tools.push(SearchIssuesTool(ctx));
215251
+ }
215134
215252
  const isStandalone = ctx.payload.event.trigger === "unknown";
215135
215253
  if (isStandalone || outputSchema) {
215136
215254
  tools.push(SetOutputTool(ctx, outputSchema));
@@ -216856,7 +216974,6 @@ function buildModelAccessError(input2) {
216856
216974
  }
216857
216975
 
216858
216976
  // utils/normalizeEnv.ts
216859
- var core6 = __toESM(require_core(), 1);
216860
216977
  function hasControlCharacter(value2) {
216861
216978
  return [...value2].some((ch) => {
216862
216979
  const code = ch.charCodeAt(0);
@@ -216882,7 +216999,7 @@ function sanitizeSecret(key, value2) {
216882
216999
  `\xBB stripped whitespace from ${key} (whitespace in secret values breaks GitHub Actions log masking)`
216883
217000
  );
216884
217001
  }
216885
- core6.setSecret(trimmed);
217002
+ maskSecret(trimmed);
216886
217003
  return trimmed;
216887
217004
  }
216888
217005
  function normalizeEnv() {
@@ -216926,7 +217043,6 @@ function normalizeEnv() {
216926
217043
  }
216927
217044
 
216928
217045
  // utils/overrides.ts
216929
- var core7 = __toESM(require_core(), 1);
216930
217046
  var DENIED_OVERRIDE_NAMES = /* @__PURE__ */ new Set([
216931
217047
  "GITHUB_TOKEN",
216932
217048
  "GH_TOKEN",
@@ -216972,7 +217088,7 @@ function applyOverrides(params) {
216972
217088
  denied.push(key);
216973
217089
  continue;
216974
217090
  }
216975
- if (value2.length > 0) core7.setSecret(value2);
217091
+ if (value2.length > 0) maskSecret(value2);
216976
217092
  params.env[key] = value2;
216977
217093
  applied.push(key);
216978
217094
  }
@@ -216981,7 +217097,7 @@ function applyOverrides(params) {
216981
217097
  }
216982
217098
 
216983
217099
  // utils/payload.ts
216984
- var core8 = __toESM(require_core(), 1);
217100
+ var core5 = __toESM(require_core(), 1);
216985
217101
  import { readFileSync as readFileSync9 } from "node:fs";
216986
217102
  import { isAbsolute as isAbsolute2, resolve as resolve2 } from "node:path";
216987
217103
 
@@ -217124,8 +217240,8 @@ function assertDispatchPayloadIntact(promptInput) {
217124
217240
  );
217125
217241
  }
217126
217242
  function resolvePromptInput() {
217127
- const promptInput = core8.getInput("prompt");
217128
- const promptFile = core8.getInput("prompt_file");
217243
+ const promptInput = core5.getInput("prompt");
217244
+ const promptFile = core5.getInput("prompt_file");
217129
217245
  if (promptInput && promptFile) {
217130
217246
  throw new Error("set exactly one of 'prompt' or 'prompt_file' inputs, not both.");
217131
217247
  }
@@ -217159,7 +217275,7 @@ function resolvePromptFile(input2) {
217159
217275
  }
217160
217276
  function warnIfDeprecatedStatusChecks(value2) {
217161
217277
  if (value2 !== void 0) {
217162
- core8.warning(
217278
+ core5.warning(
217163
217279
  "`status_checks` is deprecated. Both checks are now repository settings \u2014 open the Pullfrog console for this repo (Automations \u2192 Review PRs) and set them there, then remove `status_checks` from your workflow. It keeps working until you do."
217164
217280
  );
217165
217281
  }
@@ -217167,15 +217283,15 @@ function warnIfDeprecatedStatusChecks(value2) {
217167
217283
  }
217168
217284
  function resolveNonPromptInputs() {
217169
217285
  return Inputs.omit("prompt", "prompt_file").assert({
217170
- model: core8.getInput("model") || void 0,
217171
- effort: core8.getInput("effort") || void 0,
217172
- debug: core8.getInput("debug") || void 0,
217173
- timeout: core8.getInput("timeout") || void 0,
217174
- cwd: core8.getInput("cwd") || void 0,
217175
- push: core8.getInput("push") || void 0,
217176
- shell: core8.getInput("shell") || void 0,
217177
- status_checks: warnIfDeprecatedStatusChecks(core8.getInput("status_checks") || void 0),
217178
- progress_comments: core8.getInput("progress_comments") || void 0
217286
+ model: core5.getInput("model") || void 0,
217287
+ effort: core5.getInput("effort") || void 0,
217288
+ debug: core5.getInput("debug") || void 0,
217289
+ timeout: core5.getInput("timeout") || void 0,
217290
+ cwd: core5.getInput("cwd") || void 0,
217291
+ push: core5.getInput("push") || void 0,
217292
+ shell: core5.getInput("shell") || void 0,
217293
+ status_checks: warnIfDeprecatedStatusChecks(core5.getInput("status_checks") || void 0),
217294
+ progress_comments: core5.getInput("progress_comments") || void 0
217179
217295
  });
217180
217296
  }
217181
217297
  function resolvePayload(resolvedPromptInput, repoSettings) {
@@ -217246,7 +217362,7 @@ function resolvePayload(resolvedPromptInput, repoSettings) {
217246
217362
  };
217247
217363
  }
217248
217364
  function resolveOutputSchema() {
217249
- const raw2 = core8.getInput("output_schema");
217365
+ const raw2 = core5.getInput("output_schema");
217250
217366
  if (!raw2) return void 0;
217251
217367
  let parsed2;
217252
217368
  try {
@@ -217261,11 +217377,8 @@ function resolveOutputSchema() {
217261
217377
  return parsed2;
217262
217378
  }
217263
217379
 
217264
- // utils/proxy.ts
217265
- var core10 = __toESM(require_core(), 1);
217266
-
217267
217380
  // utils/token.ts
217268
- var core9 = __toESM(require_core(), 1);
217381
+ var core6 = __toESM(require_core(), 1);
217269
217382
  import assert3 from "node:assert/strict";
217270
217383
  var mcpTokenValue;
217271
217384
  var refreshMcpTokenFn;
@@ -217273,7 +217386,7 @@ function getMcpTokenRefresh() {
217273
217386
  return refreshMcpTokenFn;
217274
217387
  }
217275
217388
  function getJobToken() {
217276
- const inputToken = core9.getInput("token");
217389
+ const inputToken = core6.getInput("token");
217277
217390
  if (inputToken) {
217278
217391
  return inputToken;
217279
217392
  }
@@ -217288,9 +217401,7 @@ async function resolveTokens(params) {
217288
217401
  const externalToken = process.env.GH_TOKEN;
217289
217402
  if (externalToken) {
217290
217403
  mcpTokenValue = externalToken;
217291
- if (isGitHubActions) {
217292
- core9.setSecret(externalToken);
217293
- }
217404
+ maskSecret(externalToken);
217294
217405
  log2.info("\xBB using external GH_TOKEN for both git and MCP");
217295
217406
  return {
217296
217407
  gitToken: externalToken,
@@ -217312,9 +217423,7 @@ async function resolveTokens(params) {
217312
217423
  xrepoGrant: params.xrepoGrant,
217313
217424
  permissions: gitPermissions
217314
217425
  });
217315
- if (isGitHubActions) {
217316
- core9.setSecret(gitToken);
217317
- }
217426
+ maskSecret(gitToken);
217318
217427
  log2.info(
217319
217428
  `\xBB acquired git token (${Object.entries(gitPermissions).map((e) => e.join(":")).join(", ")})`
217320
217429
  );
@@ -217333,9 +217442,7 @@ async function resolveTokens(params) {
217333
217442
  xrepoGrant: params.xrepoGrant,
217334
217443
  permissions: mcpPermissions
217335
217444
  });
217336
- if (isGitHubActions) {
217337
- core9.setSecret(mcpToken);
217338
- }
217445
+ maskSecret(mcpToken);
217339
217446
  log2.info(
217340
217447
  `\xBB acquired scoped MCP token (${Object.entries(mcpPermissions).map((e) => e.join(":")).join(", ")})`
217341
217448
  );
@@ -217343,7 +217450,7 @@ async function resolveTokens(params) {
217343
217450
  let ghToken;
217344
217451
  if (ghPermissions) {
217345
217452
  ghToken = await acquireNewToken({ permissions: ghPermissions });
217346
- if (isGitHubActions) core9.setSecret(ghToken);
217453
+ maskSecret(ghToken);
217347
217454
  log2.info(
217348
217455
  `\xBB acquired gh token mirroring ${params.authorPermission} (${formatPermissions(ghPermissions)})`
217349
217456
  );
@@ -217355,7 +217462,7 @@ async function resolveTokens(params) {
217355
217462
  xrepoGrant: params.xrepoGrant,
217356
217463
  permissions: { contents: "read" }
217357
217464
  });
217358
- if (isGitHubActions) core9.setSecret(readToken);
217465
+ maskSecret(readToken);
217359
217466
  log2.info(`\xBB acquired cross-repo read token (contents:read, ${params.xrepo.read.length} repos)`);
217360
217467
  }
217361
217468
  mcpTokenValue = mcpToken;
@@ -217374,9 +217481,7 @@ async function resolveTokens(params) {
217374
217481
  permissions: mcpPermissions,
217375
217482
  oidc: params.oidc ?? void 0
217376
217483
  }).then((fresh) => {
217377
- if (isGitHubActions) {
217378
- core9.setSecret(fresh);
217379
- }
217484
+ maskSecret(fresh);
217380
217485
  mcpTokenValue = fresh;
217381
217486
  currentMcpToken = fresh;
217382
217487
  log2.warning("\xBB GitHub rejected the MCP token; re-acquired a fresh scoped MCP token");
@@ -217397,7 +217502,7 @@ async function resolveTokens(params) {
217397
217502
  permissions: gitPermissions,
217398
217503
  oidc: params.oidc ?? void 0
217399
217504
  }).then((fresh) => {
217400
- if (isGitHubActions) core9.setSecret(fresh);
217505
+ maskSecret(fresh);
217401
217506
  void revokeGitHubInstallationToken(currentGitToken);
217402
217507
  currentGitToken = fresh;
217403
217508
  log2.warning("\xBB GitHub rejected the git token; re-acquired a fresh git token");
@@ -217415,7 +217520,7 @@ async function resolveTokens(params) {
217415
217520
  permissions: { contents: "read" },
217416
217521
  oidc: params.oidc ?? void 0
217417
217522
  }).then((fresh) => {
217418
- if (isGitHubActions) core9.setSecret(fresh);
217523
+ maskSecret(fresh);
217419
217524
  void revokeGitHubInstallationToken(read2);
217420
217525
  currentReadToken = fresh;
217421
217526
  log2.warning("\xBB GitHub rejected the read token; re-acquired a fresh read token");
@@ -217629,7 +217734,7 @@ async function resolveProxyModel(ctx) {
217629
217734
  });
217630
217735
  if (!key) return;
217631
217736
  process.env.OPENROUTER_API_KEY = key;
217632
- core10.setSecret(key);
217737
+ maskSecret(key);
217633
217738
  ctx.payload.proxyModel = ctx.proxyModel;
217634
217739
  ctx.toolState.model = ctx.proxyModel;
217635
217740
  const label = ctx.oss ? "oss" : "router";
@@ -217707,7 +217812,7 @@ async function resolveTrialFallback(ctx) {
217707
217812
  });
217708
217813
  if (!key) return false;
217709
217814
  process.env.OPENROUTER_API_KEY = key;
217710
- core10.setSecret(key);
217815
+ maskSecret(key);
217711
217816
  ctx.payload.proxyModel = DEFAULT_PROXY_MODEL;
217712
217817
  ctx.toolState.model = DEFAULT_PROXY_MODEL;
217713
217818
  ctx.toolState.modelClamped = {
@@ -217858,6 +217963,7 @@ var defaultSettings = {
217858
217963
  push: "restricted",
217859
217964
  shell: "restricted",
217860
217965
  prApproveEnabled: false,
217966
+ reviewDrafts: false,
217861
217967
  autoMergeEnabled: false,
217862
217968
  codexAgent: false,
217863
217969
  signedCommits: false,
@@ -218411,7 +218517,7 @@ ${genericBody}`,
218411
218517
  }
218412
218518
 
218413
218519
  // utils/runLifecycle.ts
218414
- var core11 = __toESM(require_core(), 1);
218520
+ var core7 = __toESM(require_core(), 1);
218415
218521
 
218416
218522
  // utils/autoMerge.ts
218417
218523
  function hasBlockingHumanReview(reviews) {
@@ -218555,7 +218661,7 @@ async function dispatchFollowUpReReview(ctx, reviewedSha) {
218555
218661
  });
218556
218662
  if (pr.data.head.sha === reviewedSha) return;
218557
218663
  if (pr.data.state !== "open") return;
218558
- if (pr.data.draft) return;
218664
+ if (pr.data.draft && !ctx.reviewDrafts) return;
218559
218665
  log2.info(
218560
218666
  `safety net: pr HEAD moved from ${reviewedSha.slice(0, 7)} to ${pr.data.head.sha.slice(0, 7)} and agent did not review inline \u2014 dispatching follow-up re-review`
218561
218667
  );
@@ -218807,7 +218913,7 @@ async function finalizeSuccessRun(input2) {
218807
218913
  }
218808
218914
  if (input2.toolState.output) {
218809
218915
  log2.info(`::pullfrog-output::${Buffer.from(input2.toolState.output).toString("base64")}`);
218810
- core11.setOutput("result", input2.toolState.output);
218916
+ core7.setOutput("result", input2.toolState.output);
218811
218917
  }
218812
218918
  if (input2.result.success) {
218813
218919
  await approveAfterFix(input2.toolContext).catch((error109) => {
@@ -219388,6 +219494,7 @@ async function main() {
219388
219494
  postCheckoutScript: runContext.repoSettings.postCheckoutScript,
219389
219495
  prepushScript: runContext.repoSettings.prepushScript,
219390
219496
  prApproveEnabled: runContext.repoSettings.prApproveEnabled,
219497
+ reviewDrafts: runContext.repoSettings.reviewDrafts,
219391
219498
  autoMergeEnabled: runContext.repoSettings.autoMergeEnabled,
219392
219499
  signedCommits: runContext.repoSettings.signedCommits,
219393
219500
  repoIntelligence: runContext.repoSettings.repoIntelligence,
@@ -219698,27 +219805,27 @@ async function runMain() {
219698
219805
  }
219699
219806
  } catch (error109) {
219700
219807
  const errorMessage = error109 instanceof Error ? error109.message : "unknown error occurred";
219701
- core12.setFailed(`action failed: ${errorMessage}`);
219808
+ core8.setFailed(`action failed: ${errorMessage}`);
219702
219809
  }
219703
219810
  }
219704
219811
  async function tokenMain() {
219705
- const reposInput = core12.getInput("repos");
219812
+ const reposInput = core8.getInput("repos");
219706
219813
  const additionalRepos = reposInput ? reposInput.split(",").map((r2) => r2.trim()).filter(Boolean) : [];
219707
219814
  const token = await acquireNewToken({ repos: additionalRepos });
219708
- core12.setSecret(token);
219709
- core12.saveState(STATE_TOKEN, token);
219710
- core12.setOutput("token", token);
219815
+ maskSecret(token);
219816
+ saveSecretState(STATE_TOKEN, token);
219817
+ setSecretOutput("token", token);
219711
219818
  const scope2 = additionalRepos.length ? `current repo + ${additionalRepos.join(", ")}` : "current repo only";
219712
- core12.info(`\xBB installation token acquired (${scope2})`);
219819
+ core8.info(`\xBB installation token acquired (${scope2})`);
219713
219820
  }
219714
219821
  async function tokenPost() {
219715
- const token = core12.getState(STATE_TOKEN);
219822
+ const token = core8.getState(STATE_TOKEN);
219716
219823
  if (!token) {
219717
- core12.debug("no token found in state, skipping revocation");
219824
+ core8.debug("no token found in state, skipping revocation");
219718
219825
  return;
219719
219826
  }
219720
219827
  await revokeGitHubInstallationToken(token);
219721
- core12.info("\xBB installation token revoked");
219828
+ core8.info("\xBB installation token revoked");
219722
219829
  }
219723
219830
  function printGhaUsage(params) {
219724
219831
  params.stream(`usage: ${params.prog} gha [subcommand]
@@ -219825,7 +219932,7 @@ async function runCli5(params) {
219825
219932
  }
219826
219933
  async function run(args2) {
219827
219934
  if (args2.includes("--post") && !args2.includes("token")) {
219828
- await runOAuthWriteback().catch((error109) => core12.warning(`oauth post-hook: ${error109}`));
219935
+ await runOAuthWriteback().catch((error109) => core8.warning(`oauth post-hook: ${error109}`));
219829
219936
  return;
219830
219937
  }
219831
219938
  try {
@@ -219840,7 +219947,7 @@ async function run(args2) {
219840
219947
  }
219841
219948
  } catch (error109) {
219842
219949
  const message = error109 instanceof Error ? error109.message : String(error109);
219843
- core12.setFailed(message);
219950
+ core8.setFailed(message);
219844
219951
  }
219845
219952
  }
219846
219953
 
@@ -220227,7 +220334,7 @@ function resolveTarget2(repo) {
220227
220334
  return { owner: match3[1], repo: match3[2] };
220228
220335
  }
220229
220336
  function cliVersion() {
220230
- const parts = /^(\d+)\.(\d+)\.(\d+)$/.exec("0.1.82");
220337
+ const parts = /^(\d+)\.(\d+)\.(\d+)$/.exec("0.1.83");
220231
220338
  if (!parts) return "0.0.0";
220232
220339
  return `${Number(parts[1])}.${Number(parts[2])}.${Number(parts[3])}`;
220233
220340
  }
@@ -220394,7 +220501,7 @@ async function runCli8(input2) {
220394
220501
  }
220395
220502
 
220396
220503
  // cli.ts
220397
- var VERSION10 = "0.1.82";
220504
+ var VERSION10 = "0.1.83";
220398
220505
  var bin = basename2(process.argv[1] || "");
220399
220506
  var PROG = bin === "pf" || bin === "pullfrog" ? bin : "pullfrog";
220400
220507
  var rawArgs = process.argv.slice(2);
@@ -220550,7 +220657,7 @@ ieee754/index.js:
220550
220657
  * MIT Licensed
220551
220658
  *)
220552
220659
 
220553
- mcp-proxy/dist/startStdioServer-C4sEMMHS.mjs:
220660
+ mcp-proxy/dist/startStdioServer-C9HzKfjR.mjs:
220554
220661
  (*!
220555
220662
  * content-type
220556
220663
  * Copyright(c) 2015 Douglas Christopher Wilson