pullfrog 0.1.72 → 0.1.74

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/index.js CHANGED
@@ -17639,12 +17639,12 @@ var require_lib = __commonJS({
17639
17639
  throw new Error("Client has already been disposed.");
17640
17640
  }
17641
17641
  const parsedUrl = new URL(requestUrl);
17642
- let info2 = this._prepareRequest(verb, parsedUrl, headers);
17642
+ let info3 = this._prepareRequest(verb, parsedUrl, headers);
17643
17643
  const maxTries = this._allowRetries && RetryableHttpVerbs.includes(verb) ? this._maxRetries + 1 : 1;
17644
17644
  let numTries = 0;
17645
17645
  let response;
17646
17646
  do {
17647
- response = yield this.requestRaw(info2, data);
17647
+ response = yield this.requestRaw(info3, data);
17648
17648
  if (response && response.message && response.message.statusCode === HttpCodes.Unauthorized) {
17649
17649
  let authenticationHandler;
17650
17650
  for (const handler2 of this.handlers) {
@@ -17654,7 +17654,7 @@ var require_lib = __commonJS({
17654
17654
  }
17655
17655
  }
17656
17656
  if (authenticationHandler) {
17657
- return authenticationHandler.handleAuthentication(this, info2, data);
17657
+ return authenticationHandler.handleAuthentication(this, info3, data);
17658
17658
  } else {
17659
17659
  return response;
17660
17660
  }
@@ -17677,8 +17677,8 @@ var require_lib = __commonJS({
17677
17677
  }
17678
17678
  }
17679
17679
  }
17680
- info2 = this._prepareRequest(verb, parsedRedirectUrl, headers);
17681
- response = yield this.requestRaw(info2, data);
17680
+ info3 = this._prepareRequest(verb, parsedRedirectUrl, headers);
17681
+ response = yield this.requestRaw(info3, data);
17682
17682
  redirectsRemaining--;
17683
17683
  }
17684
17684
  if (!response.message.statusCode || !HttpResponseRetryCodes.includes(response.message.statusCode)) {
@@ -17707,7 +17707,7 @@ var require_lib = __commonJS({
17707
17707
  * @param info
17708
17708
  * @param data
17709
17709
  */
17710
- requestRaw(info2, data) {
17710
+ requestRaw(info3, data) {
17711
17711
  return __awaiter(this, void 0, void 0, function* () {
17712
17712
  return new Promise((resolve3, reject) => {
17713
17713
  function callbackForResult(err, res) {
@@ -17719,7 +17719,7 @@ var require_lib = __commonJS({
17719
17719
  resolve3(res);
17720
17720
  }
17721
17721
  }
17722
- this.requestRawWithCallback(info2, data, callbackForResult);
17722
+ this.requestRawWithCallback(info3, data, callbackForResult);
17723
17723
  });
17724
17724
  });
17725
17725
  }
@@ -17729,12 +17729,12 @@ var require_lib = __commonJS({
17729
17729
  * @param data
17730
17730
  * @param onResult
17731
17731
  */
17732
- requestRawWithCallback(info2, data, onResult) {
17732
+ requestRawWithCallback(info3, data, onResult) {
17733
17733
  if (typeof data === "string") {
17734
- if (!info2.options.headers) {
17735
- info2.options.headers = {};
17734
+ if (!info3.options.headers) {
17735
+ info3.options.headers = {};
17736
17736
  }
17737
- info2.options.headers["Content-Length"] = Buffer.byteLength(data, "utf8");
17737
+ info3.options.headers["Content-Length"] = Buffer.byteLength(data, "utf8");
17738
17738
  }
17739
17739
  let callbackCalled = false;
17740
17740
  function handleResult2(err, res) {
@@ -17743,7 +17743,7 @@ var require_lib = __commonJS({
17743
17743
  onResult(err, res);
17744
17744
  }
17745
17745
  }
17746
- const req = info2.httpModule.request(info2.options, (msg) => {
17746
+ const req = info3.httpModule.request(info3.options, (msg) => {
17747
17747
  const res = new HttpClientResponse(msg);
17748
17748
  handleResult2(void 0, res);
17749
17749
  });
@@ -17755,7 +17755,7 @@ var require_lib = __commonJS({
17755
17755
  if (socket) {
17756
17756
  socket.end();
17757
17757
  }
17758
- handleResult2(new Error(`Request timeout: ${info2.options.path}`));
17758
+ handleResult2(new Error(`Request timeout: ${info3.options.path}`));
17759
17759
  });
17760
17760
  req.on("error", function(err) {
17761
17761
  handleResult2(err);
@@ -17791,27 +17791,27 @@ var require_lib = __commonJS({
17791
17791
  return this._getProxyAgentDispatcher(parsedUrl, proxyUrl);
17792
17792
  }
17793
17793
  _prepareRequest(method, requestUrl, headers) {
17794
- const info2 = {};
17795
- info2.parsedUrl = requestUrl;
17796
- const usingSsl = info2.parsedUrl.protocol === "https:";
17797
- info2.httpModule = usingSsl ? https2 : http2;
17794
+ const info3 = {};
17795
+ info3.parsedUrl = requestUrl;
17796
+ const usingSsl = info3.parsedUrl.protocol === "https:";
17797
+ info3.httpModule = usingSsl ? https2 : http2;
17798
17798
  const defaultPort = usingSsl ? 443 : 80;
17799
- info2.options = {};
17800
- info2.options.host = info2.parsedUrl.hostname;
17801
- info2.options.port = info2.parsedUrl.port ? parseInt(info2.parsedUrl.port) : defaultPort;
17802
- info2.options.path = (info2.parsedUrl.pathname || "") + (info2.parsedUrl.search || "");
17803
- info2.options.method = method;
17804
- info2.options.headers = this._mergeHeaders(headers);
17799
+ info3.options = {};
17800
+ info3.options.host = info3.parsedUrl.hostname;
17801
+ info3.options.port = info3.parsedUrl.port ? parseInt(info3.parsedUrl.port) : defaultPort;
17802
+ info3.options.path = (info3.parsedUrl.pathname || "") + (info3.parsedUrl.search || "");
17803
+ info3.options.method = method;
17804
+ info3.options.headers = this._mergeHeaders(headers);
17805
17805
  if (this.userAgent != null) {
17806
- info2.options.headers["user-agent"] = this.userAgent;
17806
+ info3.options.headers["user-agent"] = this.userAgent;
17807
17807
  }
17808
- info2.options.agent = this._getAgent(info2.parsedUrl);
17808
+ info3.options.agent = this._getAgent(info3.parsedUrl);
17809
17809
  if (this.handlers) {
17810
17810
  for (const handler2 of this.handlers) {
17811
- handler2.prepareRequest(info2.options);
17811
+ handler2.prepareRequest(info3.options);
17812
17812
  }
17813
17813
  }
17814
- return info2;
17814
+ return info3;
17815
17815
  }
17816
17816
  _mergeHeaders(headers) {
17817
17817
  if (this.requestOptions && this.requestOptions.headers) {
@@ -19793,18 +19793,18 @@ Support boolean input list: \`true | True | TRUE | false | False | FALSE\``);
19793
19793
  (0, command_1.issueCommand)("error", (0, utils_1.toCommandProperties)(properties), message instanceof Error ? message.toString() : message);
19794
19794
  }
19795
19795
  exports.error = error62;
19796
- function warning3(message, properties = {}) {
19796
+ function warning4(message, properties = {}) {
19797
19797
  (0, command_1.issueCommand)("warning", (0, utils_1.toCommandProperties)(properties), message instanceof Error ? message.toString() : message);
19798
19798
  }
19799
- exports.warning = warning3;
19799
+ exports.warning = warning4;
19800
19800
  function notice(message, properties = {}) {
19801
19801
  (0, command_1.issueCommand)("notice", (0, utils_1.toCommandProperties)(properties), message instanceof Error ? message.toString() : message);
19802
19802
  }
19803
19803
  exports.notice = notice;
19804
- function info2(message) {
19804
+ function info3(message) {
19805
19805
  process.stdout.write(message + os2.EOL);
19806
19806
  }
19807
- exports.info = info2;
19807
+ exports.info = info3;
19808
19808
  function startGroup3(name) {
19809
19809
  (0, command_1.issue)("group", name);
19810
19810
  }
@@ -19834,10 +19834,10 @@ Support boolean input list: \`true | True | TRUE | false | False | FALSE\``);
19834
19834
  (0, command_1.issueCommand)("save-state", { name }, (0, utils_1.toCommandValue)(value2));
19835
19835
  }
19836
19836
  exports.saveState = saveState3;
19837
- function getState(name) {
19837
+ function getState2(name) {
19838
19838
  return process.env[`STATE_${name}`] || "";
19839
19839
  }
19840
- exports.getState = getState;
19840
+ exports.getState = getState2;
19841
19841
  function getIDToken2(aud) {
19842
19842
  return __awaiter(this, void 0, void 0, function* () {
19843
19843
  return yield oidc_utils_1.OidcClient.getIDToken(aud);
@@ -27621,11 +27621,11 @@ var require_mode = __commonJS({
27621
27621
  var require_isexe = __commonJS({
27622
27622
  "node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/index.js"(exports, module) {
27623
27623
  var fs5 = __require("fs");
27624
- var core11;
27624
+ var core12;
27625
27625
  if (process.platform === "win32" || global.TESTING_WINDOWS) {
27626
- core11 = require_windows();
27626
+ core12 = require_windows();
27627
27627
  } else {
27628
- core11 = require_mode();
27628
+ core12 = require_mode();
27629
27629
  }
27630
27630
  module.exports = isexe;
27631
27631
  isexe.sync = sync;
@@ -27648,7 +27648,7 @@ var require_isexe = __commonJS({
27648
27648
  });
27649
27649
  });
27650
27650
  }
27651
- core11(path4, options || {}, function(er, is) {
27651
+ core12(path4, options || {}, function(er, is) {
27652
27652
  if (er) {
27653
27653
  if (er.code === "EACCES" || options && options.ignoreErrors) {
27654
27654
  er = null;
@@ -27660,7 +27660,7 @@ var require_isexe = __commonJS({
27660
27660
  }
27661
27661
  function sync(path4, options) {
27662
27662
  try {
27663
- return core11.sync(path4, options || {});
27663
+ return core12.sync(path4, options || {});
27664
27664
  } catch (er) {
27665
27665
  if (options && options.ignoreErrors || er.code === "EACCES") {
27666
27666
  return false;
@@ -38449,8 +38449,8 @@ var require_socks5_proxy_agent = __commonJS({
38449
38449
  const timeout = setTimeout(() => {
38450
38450
  reject(new Error("SOCKS5 connection timeout"));
38451
38451
  }, 5e3);
38452
- const onConnected = (info2) => {
38453
- debug3("SOCKS5 tunnel established to", targetHost, targetPort, "via", info2);
38452
+ const onConnected = (info3) => {
38453
+ debug3("SOCKS5 tunnel established to", targetHost, targetPort, "via", info3);
38454
38454
  clearTimeout(timeout);
38455
38455
  socks5Client.removeListener("error", onError);
38456
38456
  resolve3();
@@ -80800,7 +80800,7 @@ var require_core3 = __commonJS({
80800
80800
  Object.defineProperty(exports, "__esModule", { value: true });
80801
80801
  var id_1 = require_id();
80802
80802
  var ref_1 = require_ref();
80803
- var core11 = [
80803
+ var core12 = [
80804
80804
  "$schema",
80805
80805
  "$id",
80806
80806
  "$defs",
@@ -80810,7 +80810,7 @@ var require_core3 = __commonJS({
80810
80810
  id_1.default,
80811
80811
  ref_1.default
80812
80812
  ];
80813
- exports.default = core11;
80813
+ exports.default = core12;
80814
80814
  }
80815
80815
  });
80816
80816
 
@@ -109795,7 +109795,8 @@ var import_semver = __toESM(require_semver2(), 1);
109795
109795
  // package.json
109796
109796
  var package_default = {
109797
109797
  name: "pullfrog",
109798
- version: "0.1.72",
109798
+ version: "0.1.74",
109799
+ cliContractVersion: "1",
109799
109800
  type: "module",
109800
109801
  bin: {
109801
109802
  pullfrog: "dist/cli.mjs",
@@ -109861,7 +109862,8 @@ var package_default = {
109861
109862
  typescript: "^5.9.3",
109862
109863
  undici: "^7.22.0",
109863
109864
  vitest: "^4.0.17",
109864
- yaml: "^2.8.2"
109865
+ yaml: "^2.8.2",
109866
+ zod: "4.3.6"
109865
109867
  },
109866
109868
  repository: {
109867
109869
  type: "git",
@@ -111974,7 +111976,7 @@ var claude = agent({
111974
111976
  });
111975
111977
 
111976
111978
  // agents/codex.ts
111977
- var core2 = __toESM(require_core(), 1);
111979
+ var core3 = __toESM(require_core(), 1);
111978
111980
  import { existsSync as existsSync5, mkdirSync as mkdirSync6, readFileSync as readFileSync3, writeFileSync as writeFileSync5 } from "node:fs";
111979
111981
  import { join as join6 } from "node:path";
111980
111982
  import { performance as performance6 } from "node:perf_hooks";
@@ -112202,6 +112204,64 @@ function bootstrapPullfrogDataDir() {
112202
112204
  }
112203
112205
  }
112204
112206
 
112207
+ // utils/oauthWriteback.ts
112208
+ var core2 = __toESM(require_core(), 1);
112209
+
112210
+ // utils/apiUrl.ts
112211
+ function isLocalUrl(url4) {
112212
+ return url4.hostname === "localhost" || url4.hostname === "127.0.0.1";
112213
+ }
112214
+ function getApiUrl() {
112215
+ const raw2 = process.env.API_URL || "https://pullfrog.com";
112216
+ const parsed2 = new URL(raw2);
112217
+ if (parsed2.protocol !== "https:" && !isLocalUrl(parsed2)) {
112218
+ throw new Error(
112219
+ `API_URL must use https:// (got ${parsed2.protocol}). only localhost is exempt.`
112220
+ );
112221
+ }
112222
+ log.debug(`resolved API_URL: ${raw2}`);
112223
+ return raw2;
112224
+ }
112225
+ function isLocalApiUrl() {
112226
+ try {
112227
+ return isLocalUrl(new URL(getApiUrl()));
112228
+ } catch {
112229
+ return false;
112230
+ }
112231
+ }
112232
+
112233
+ // utils/apiFetch.ts
112234
+ async function apiFetch(options) {
112235
+ const apiUrl = getApiUrl();
112236
+ const url4 = new URL(options.path, apiUrl);
112237
+ const bypassSecret = process.env.VERCEL_AUTOMATION_BYPASS_SECRET;
112238
+ if (bypassSecret) {
112239
+ url4.searchParams.set("x-vercel-protection-bypass", bypassSecret);
112240
+ }
112241
+ const headers = {
112242
+ ...options.headers
112243
+ };
112244
+ if (bypassSecret) {
112245
+ headers["x-vercel-protection-bypass"] = bypassSecret;
112246
+ }
112247
+ if (!options.body) {
112248
+ for (const key of Object.keys(headers)) {
112249
+ if (key.toLowerCase() === "content-type") delete headers[key];
112250
+ }
112251
+ }
112252
+ log.debug(`api fetch: ${options.method ?? "GET"} ${url4.pathname}`);
112253
+ const init = {
112254
+ method: options.method ?? "GET",
112255
+ headers
112256
+ };
112257
+ if (options.body) init.body = options.body;
112258
+ if (options.signal) init.signal = options.signal;
112259
+ return fetch(url4.toString(), init);
112260
+ }
112261
+
112262
+ // utils/oauthWriteback.ts
112263
+ var OAUTH_WRITEBACK_STATE = "oauth_writeback";
112264
+
112205
112265
  // utils/secrets.ts
112206
112266
  var SENSITIVE_PATTERNS = [
112207
112267
  /_KEY$/i,
@@ -112770,8 +112830,8 @@ var codex = agent({
112770
112830
  effortRung: effort.rung && CODEX_EFFORTS.includes(effort.rung) ? effort.rung : void 0
112771
112831
  });
112772
112832
  if (codexHomeAuth) {
112773
- core2.saveState(
112774
- "oauth_writeback",
112833
+ core3.saveState(
112834
+ OAUTH_WRITEBACK_STATE,
112775
112835
  JSON.stringify({
112776
112836
  apiToken: ctx.apiToken,
112777
112837
  entries: [
@@ -112855,7 +112915,7 @@ var codex = agent({
112855
112915
  });
112856
112916
 
112857
112917
  // agents/opencode.ts
112858
- var core3 = __toESM(require_core(), 1);
112918
+ var core4 = __toESM(require_core(), 1);
112859
112919
  import { spawn as nodeSpawn2 } from "node:child_process";
112860
112920
  import { mkdirSync as mkdirSync7, writeFileSync as writeFileSync6 } from "node:fs";
112861
112921
  import { join as join7 } from "node:path";
@@ -119264,8 +119324,8 @@ var opencode = agent({
119264
119324
  });
119265
119325
  }
119266
119326
  if (writebacks.length > 0) {
119267
- core3.saveState(
119268
- "oauth_writeback",
119327
+ core4.saveState(
119328
+ OAUTH_WRITEBACK_STATE,
119269
119329
  JSON.stringify({ apiToken: ctx.apiToken, entries: writebacks })
119270
119330
  );
119271
119331
  }
@@ -125151,25 +125211,25 @@ var Protocol = class {
125151
125211
  });
125152
125212
  }
125153
125213
  _resetTimeout(messageId) {
125154
- const info2 = this._timeoutInfo.get(messageId);
125155
- if (!info2)
125214
+ const info3 = this._timeoutInfo.get(messageId);
125215
+ if (!info3)
125156
125216
  return false;
125157
- const totalElapsed = Date.now() - info2.startTime;
125158
- if (info2.maxTotalTimeout && totalElapsed >= info2.maxTotalTimeout) {
125217
+ const totalElapsed = Date.now() - info3.startTime;
125218
+ if (info3.maxTotalTimeout && totalElapsed >= info3.maxTotalTimeout) {
125159
125219
  this._timeoutInfo.delete(messageId);
125160
125220
  throw McpError.fromError(ErrorCode.RequestTimeout, "Maximum total timeout exceeded", {
125161
- maxTotalTimeout: info2.maxTotalTimeout,
125221
+ maxTotalTimeout: info3.maxTotalTimeout,
125162
125222
  totalElapsed
125163
125223
  });
125164
125224
  }
125165
- clearTimeout(info2.timeoutId);
125166
- info2.timeoutId = setTimeout(info2.onTimeout, info2.timeout);
125225
+ clearTimeout(info3.timeoutId);
125226
+ info3.timeoutId = setTimeout(info3.onTimeout, info3.timeout);
125167
125227
  return true;
125168
125228
  }
125169
125229
  _cleanupTimeout(messageId) {
125170
- const info2 = this._timeoutInfo.get(messageId);
125171
- if (info2) {
125172
- clearTimeout(info2.timeoutId);
125230
+ const info3 = this._timeoutInfo.get(messageId);
125231
+ if (info3) {
125232
+ clearTimeout(info3.timeoutId);
125173
125233
  this._timeoutInfo.delete(messageId);
125174
125234
  }
125175
125235
  }
@@ -125214,8 +125274,8 @@ var Protocol = class {
125214
125274
  this._progressHandlers.clear();
125215
125275
  this._taskProgressTokens.clear();
125216
125276
  this._pendingDebouncedNotifications.clear();
125217
- for (const info2 of this._timeoutInfo.values()) {
125218
- clearTimeout(info2.timeoutId);
125277
+ for (const info3 of this._timeoutInfo.values()) {
125278
+ clearTimeout(info3.timeoutId);
125219
125279
  }
125220
125280
  this._timeoutInfo.clear();
125221
125281
  for (const controller of this._requestHandlerAbortControllers.values()) {
@@ -135465,24 +135525,24 @@ var Protocol2 = class {
135465
135525
  });
135466
135526
  }
135467
135527
  _resetTimeout(messageId) {
135468
- const info2 = this._timeoutInfo.get(messageId);
135469
- if (!info2) return false;
135470
- const totalElapsed = Date.now() - info2.startTime;
135471
- if (info2.maxTotalTimeout && totalElapsed >= info2.maxTotalTimeout) {
135528
+ const info3 = this._timeoutInfo.get(messageId);
135529
+ if (!info3) return false;
135530
+ const totalElapsed = Date.now() - info3.startTime;
135531
+ if (info3.maxTotalTimeout && totalElapsed >= info3.maxTotalTimeout) {
135472
135532
  this._timeoutInfo.delete(messageId);
135473
135533
  throw new SdkError(SdkErrorCode.RequestTimeout, "Maximum total timeout exceeded", {
135474
- maxTotalTimeout: info2.maxTotalTimeout,
135534
+ maxTotalTimeout: info3.maxTotalTimeout,
135475
135535
  totalElapsed
135476
135536
  });
135477
135537
  }
135478
- clearTimeout(info2.timeoutId);
135479
- info2.timeoutId = setTimeout(info2.onTimeout, info2.timeout);
135538
+ clearTimeout(info3.timeoutId);
135539
+ info3.timeoutId = setTimeout(info3.onTimeout, info3.timeout);
135480
135540
  return true;
135481
135541
  }
135482
135542
  _cleanupTimeout(messageId) {
135483
- const info2 = this._timeoutInfo.get(messageId);
135484
- if (info2) {
135485
- clearTimeout(info2.timeoutId);
135543
+ const info3 = this._timeoutInfo.get(messageId);
135544
+ if (info3) {
135545
+ clearTimeout(info3.timeoutId);
135486
135546
  this._timeoutInfo.delete(messageId);
135487
135547
  }
135488
135548
  }
@@ -135527,7 +135587,7 @@ var Protocol2 = class {
135527
135587
  this._responseHandlers = /* @__PURE__ */ new Map();
135528
135588
  this._progressHandlers.clear();
135529
135589
  this._pendingDebouncedNotifications.clear();
135530
- for (const info2 of this._timeoutInfo.values()) clearTimeout(info2.timeoutId);
135590
+ for (const info3 of this._timeoutInfo.values()) clearTimeout(info3.timeoutId);
135531
135591
  this._timeoutInfo.clear();
135532
135592
  const requestHandlerAbortControllers = this._requestHandlerAbortControllers;
135533
135593
  this._requestHandlerAbortControllers = /* @__PURE__ */ new Map();
@@ -136176,7 +136236,7 @@ function validateToolName(name) {
136176
136236
  function issueToolNameWarning(name, warnings) {
136177
136237
  if (warnings.length > 0) {
136178
136238
  console.warn(`Tool name validation warning for "${name}":`);
136179
- for (const warning3 of warnings) console.warn(` - ${warning3}`);
136239
+ for (const warning4 of warnings) console.warn(` - ${warning4}`);
136180
136240
  console.warn("Tool registration will proceed, but this may cause compatibility issues.");
136181
136241
  console.warn("Consider updating the tool name to conform to the MCP tool naming standard.");
136182
136242
  console.warn("See SEP: Specify Format for Tool Names (https://github.com/modelcontextprotocol/modelcontextprotocol/issues/986) for more details.");
@@ -140132,7 +140192,7 @@ var require_core$2 = /* @__PURE__ */ __commonJSMin(((exports) => {
140132
140192
  Object.defineProperty(exports, "__esModule", { value: true });
140133
140193
  const id_1 = require_id2();
140134
140194
  const ref_1 = require_ref2();
140135
- const core11 = [
140195
+ const core12 = [
140136
140196
  "$schema",
140137
140197
  "$id",
140138
140198
  "$defs",
@@ -140142,7 +140202,7 @@ var require_core$2 = /* @__PURE__ */ __commonJSMin(((exports) => {
140142
140202
  id_1.default,
140143
140203
  ref_1.default
140144
140204
  ];
140145
- exports.default = core11;
140205
+ exports.default = core12;
140146
140206
  }));
140147
140207
  var require_limitNumber2 = /* @__PURE__ */ __commonJSMin(((exports) => {
140148
140208
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -142280,7 +142340,7 @@ var require_json_schema_2019_09 = /* @__PURE__ */ __commonJSMin(((exports) => {
142280
142340
  const metaSchema = require_schema$1();
142281
142341
  const applicator = require_applicator$1();
142282
142342
  const content = require_content$1();
142283
- const core11 = require_core$1();
142343
+ const core12 = require_core$1();
142284
142344
  const format2 = require_format3();
142285
142345
  const metadata = require_meta_data$1();
142286
142346
  const validation = require_validation$1();
@@ -142290,7 +142350,7 @@ var require_json_schema_2019_09 = /* @__PURE__ */ __commonJSMin(((exports) => {
142290
142350
  metaSchema,
142291
142351
  applicator,
142292
142352
  content,
142293
- core11,
142353
+ core12,
142294
142354
  with$data(this, format2),
142295
142355
  metadata,
142296
142356
  with$data(this, validation)
@@ -142730,7 +142790,7 @@ var require_json_schema_2020_12 = /* @__PURE__ */ __commonJSMin(((exports) => {
142730
142790
  const applicator = require_applicator2();
142731
142791
  const unevaluated = require_unevaluated();
142732
142792
  const content = require_content();
142733
- const core11 = require_core4();
142793
+ const core12 = require_core4();
142734
142794
  const format2 = require_format_annotation();
142735
142795
  const metadata = require_meta_data();
142736
142796
  const validation = require_validation2();
@@ -142741,7 +142801,7 @@ var require_json_schema_2020_12 = /* @__PURE__ */ __commonJSMin(((exports) => {
142741
142801
  applicator,
142742
142802
  unevaluated,
142743
142803
  content,
142744
- core11,
142804
+ core12,
142745
142805
  with$data(this, format2),
142746
142806
  metadata,
142747
142807
  with$data(this, validation)
@@ -149606,24 +149666,24 @@ var Protocol3 = class {
149606
149666
  });
149607
149667
  }
149608
149668
  _resetTimeout(messageId) {
149609
- const info2 = this._timeoutInfo.get(messageId);
149610
- if (!info2) return false;
149611
- const totalElapsed = Date.now() - info2.startTime;
149612
- if (info2.maxTotalTimeout && totalElapsed >= info2.maxTotalTimeout) {
149669
+ const info3 = this._timeoutInfo.get(messageId);
149670
+ if (!info3) return false;
149671
+ const totalElapsed = Date.now() - info3.startTime;
149672
+ if (info3.maxTotalTimeout && totalElapsed >= info3.maxTotalTimeout) {
149613
149673
  this._timeoutInfo.delete(messageId);
149614
149674
  throw new SdkError2(SdkErrorCode2.RequestTimeout, "Maximum total timeout exceeded", {
149615
- maxTotalTimeout: info2.maxTotalTimeout,
149675
+ maxTotalTimeout: info3.maxTotalTimeout,
149616
149676
  totalElapsed
149617
149677
  });
149618
149678
  }
149619
- clearTimeout(info2.timeoutId);
149620
- info2.timeoutId = setTimeout(info2.onTimeout, info2.timeout);
149679
+ clearTimeout(info3.timeoutId);
149680
+ info3.timeoutId = setTimeout(info3.onTimeout, info3.timeout);
149621
149681
  return true;
149622
149682
  }
149623
149683
  _cleanupTimeout(messageId) {
149624
- const info2 = this._timeoutInfo.get(messageId);
149625
- if (info2) {
149626
- clearTimeout(info2.timeoutId);
149684
+ const info3 = this._timeoutInfo.get(messageId);
149685
+ if (info3) {
149686
+ clearTimeout(info3.timeoutId);
149627
149687
  this._timeoutInfo.delete(messageId);
149628
149688
  }
149629
149689
  }
@@ -149668,7 +149728,7 @@ var Protocol3 = class {
149668
149728
  this._responseHandlers = /* @__PURE__ */ new Map();
149669
149729
  this._progressHandlers.clear();
149670
149730
  this._pendingDebouncedNotifications.clear();
149671
- for (const info2 of this._timeoutInfo.values()) clearTimeout(info2.timeoutId);
149731
+ for (const info3 of this._timeoutInfo.values()) clearTimeout(info3.timeoutId);
149672
149732
  this._timeoutInfo.clear();
149673
149733
  const requestHandlerAbortControllers = this._requestHandlerAbortControllers;
149674
149734
  this._requestHandlerAbortControllers = /* @__PURE__ */ new Map();
@@ -154183,7 +154243,7 @@ var require_core$22 = /* @__PURE__ */ __commonJSMin2(((exports) => {
154183
154243
  Object.defineProperty(exports, "__esModule", { value: true });
154184
154244
  const id_1 = require_id3();
154185
154245
  const ref_1 = require_ref3();
154186
- const core11 = [
154246
+ const core12 = [
154187
154247
  "$schema",
154188
154248
  "$id",
154189
154249
  "$defs",
@@ -154193,7 +154253,7 @@ var require_core$22 = /* @__PURE__ */ __commonJSMin2(((exports) => {
154193
154253
  id_1.default,
154194
154254
  ref_1.default
154195
154255
  ];
154196
- exports.default = core11;
154256
+ exports.default = core12;
154197
154257
  }));
154198
154258
  var require_limitNumber3 = /* @__PURE__ */ __commonJSMin2(((exports) => {
154199
154259
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -156331,7 +156391,7 @@ var require_json_schema_2019_092 = /* @__PURE__ */ __commonJSMin2(((exports) =>
156331
156391
  const metaSchema = require_schema$12();
156332
156392
  const applicator = require_applicator$12();
156333
156393
  const content = require_content$12();
156334
- const core11 = require_core$12();
156394
+ const core12 = require_core$12();
156335
156395
  const format2 = require_format4();
156336
156396
  const metadata = require_meta_data$12();
156337
156397
  const validation = require_validation$12();
@@ -156341,7 +156401,7 @@ var require_json_schema_2019_092 = /* @__PURE__ */ __commonJSMin2(((exports) =>
156341
156401
  metaSchema,
156342
156402
  applicator,
156343
156403
  content,
156344
- core11,
156404
+ core12,
156345
156405
  with$data(this, format2),
156346
156406
  metadata,
156347
156407
  with$data(this, validation)
@@ -156781,7 +156841,7 @@ var require_json_schema_2020_122 = /* @__PURE__ */ __commonJSMin2(((exports) =>
156781
156841
  const applicator = require_applicator3();
156782
156842
  const unevaluated = require_unevaluated2();
156783
156843
  const content = require_content2();
156784
- const core11 = require_core5();
156844
+ const core12 = require_core5();
156785
156845
  const format2 = require_format_annotation2();
156786
156846
  const metadata = require_meta_data2();
156787
156847
  const validation = require_validation3();
@@ -156792,7 +156852,7 @@ var require_json_schema_2020_122 = /* @__PURE__ */ __commonJSMin2(((exports) =>
156792
156852
  applicator,
156793
156853
  unevaluated,
156794
156854
  content,
156795
- core11,
156855
+ core12,
156796
156856
  with$data(this, format2),
156797
156857
  metadata,
156798
156858
  with$data(this, validation)
@@ -186528,7 +186588,7 @@ this usually means your local branch has commits that were never pushed \u2014 s
186528
186588
  }
186529
186589
 
186530
186590
  // utils/github.ts
186531
- var core4 = __toESM(require_core(), 1);
186591
+ var core5 = __toESM(require_core(), 1);
186532
186592
  import { createSign } from "node:crypto";
186533
186593
  import { rename, writeFile } from "node:fs/promises";
186534
186594
  import { dirname as dirname3, join as join11 } from "node:path";
@@ -186703,8 +186763,8 @@ function throttling(octokit, octokitOptions) {
186703
186763
  "error",
186704
186764
  (e) => octokit.log.warn("Error in throttling-plugin limit handler", e)
186705
186765
  );
186706
- state.retryLimiter.on("failed", async function(error62, info2) {
186707
- const [state2, request2, options] = info2.args;
186766
+ state.retryLimiter.on("failed", async function(error62, info3) {
186767
+ const [state2, request2, options] = info3.args;
186708
186768
  const { pathname } = new URL(options.url, "http://github.test");
186709
186769
  const shouldRetryGraphQL = pathname.startsWith("/graphql") && error62.status !== 401;
186710
186770
  if (!(shouldRetryGraphQL || error62.status === 403 || error62.status === 429)) {
@@ -190733,58 +190793,6 @@ var Octokit2 = Octokit.plugin(requestLog, legacyRestEndpointMethods, paginateRes
190733
190793
  }
190734
190794
  );
190735
190795
 
190736
- // utils/apiUrl.ts
190737
- function isLocalUrl(url4) {
190738
- return url4.hostname === "localhost" || url4.hostname === "127.0.0.1";
190739
- }
190740
- function getApiUrl() {
190741
- const raw2 = process.env.API_URL || "https://pullfrog.com";
190742
- const parsed2 = new URL(raw2);
190743
- if (parsed2.protocol !== "https:" && !isLocalUrl(parsed2)) {
190744
- throw new Error(
190745
- `API_URL must use https:// (got ${parsed2.protocol}). only localhost is exempt.`
190746
- );
190747
- }
190748
- log.debug(`resolved API_URL: ${raw2}`);
190749
- return raw2;
190750
- }
190751
- function isLocalApiUrl() {
190752
- try {
190753
- return isLocalUrl(new URL(getApiUrl()));
190754
- } catch {
190755
- return false;
190756
- }
190757
- }
190758
-
190759
- // utils/apiFetch.ts
190760
- async function apiFetch(options) {
190761
- const apiUrl = getApiUrl();
190762
- const url4 = new URL(options.path, apiUrl);
190763
- const bypassSecret = process.env.VERCEL_AUTOMATION_BYPASS_SECRET;
190764
- if (bypassSecret) {
190765
- url4.searchParams.set("x-vercel-protection-bypass", bypassSecret);
190766
- }
190767
- const headers = {
190768
- ...options.headers
190769
- };
190770
- if (bypassSecret) {
190771
- headers["x-vercel-protection-bypass"] = bypassSecret;
190772
- }
190773
- if (!options.body) {
190774
- for (const key of Object.keys(headers)) {
190775
- if (key.toLowerCase() === "content-type") delete headers[key];
190776
- }
190777
- }
190778
- log.debug(`api fetch: ${options.method ?? "GET"} ${url4.pathname}`);
190779
- const init = {
190780
- method: options.method ?? "GET",
190781
- headers
190782
- };
190783
- if (options.body) init.body = options.body;
190784
- if (options.signal) init.signal = options.signal;
190785
- return fetch(url4.toString(), init);
190786
- }
190787
-
190788
190796
  // utils/github.ts
190789
190797
  var OIDC_AUDIENCE = "pullfrog-api";
190790
190798
  function isObject4(value2) {
@@ -190830,7 +190838,7 @@ async function fetchIdTokenFromStash(creds) {
190830
190838
  throw new Error("ID token response has no value field");
190831
190839
  }
190832
190840
  if (isGitHubActions) {
190833
- core4.setSecret(body.value);
190841
+ core5.setSecret(body.value);
190834
190842
  }
190835
190843
  return body.value;
190836
190844
  }
@@ -190843,7 +190851,7 @@ function translateIdTokenError(error62) {
190843
190851
  var mintIdToken = op(
190844
190852
  async () => {
190845
190853
  try {
190846
- return await core4.getIDToken(OIDC_AUDIENCE);
190854
+ return await core5.getIDToken(OIDC_AUDIENCE);
190847
190855
  } catch (error62) {
190848
190856
  throw translateIdTokenError(error62);
190849
190857
  }
@@ -192513,11 +192521,6 @@ function buildTrialDisclosure(owner) {
192513
192521
  }
192514
192522
  function buildPullfrogFooter(params) {
192515
192523
  const parts = [];
192516
- if (params.shaPinned) {
192517
- parts.push(
192518
- "\u26A0\uFE0F this action is pinned to a commit SHA, which [freezes the cleanup step](https://docs.pullfrog.com/versioning) \u2014 switch to `@v0` or keep the SHA fresh with Dependabot"
192519
- );
192520
- }
192521
192524
  if (params.customParts) {
192522
192525
  parts.push(...params.customParts);
192523
192526
  }
@@ -192702,7 +192705,6 @@ function buildCommentFooter(ctx, customParts) {
192702
192705
  fallbackFrom: ctx.toolState.modelFallback?.from,
192703
192706
  clamped: ctx.toolState.modelClamped,
192704
192707
  unselectedProxyDefault: ctx.toolState.unselectedProxyDefault,
192705
- shaPinned: ctx.toolState.shaPinned,
192706
192708
  oss: ctx.oss,
192707
192709
  owner: ctx.repo.owner
192708
192710
  });
@@ -193702,7 +193704,6 @@ async function createAndSubmitWithFooter(ctx, params, opts) {
193702
193704
  fallbackFrom: ctx.toolState.modelFallback?.from,
193703
193705
  clamped: ctx.toolState.modelClamped,
193704
193706
  unselectedProxyDefault: ctx.toolState.unselectedProxyDefault,
193705
- shaPinned: ctx.toolState.shaPinned,
193706
193707
  oss: ctx.oss,
193707
193708
  owner: ctx.repo.owner
193708
193709
  });
@@ -195710,12 +195711,14 @@ async function runSandboxed(params) {
195710
195711
  cwd: params.cwd,
195711
195712
  stdio: ["ignore", "pipe", "pipe"]
195712
195713
  });
195713
- let stdout = "", stderr = "", timedOut = false, exited = false, spawnError = "";
195714
+ const stdout = new TailBuffer(DEFAULT_MAX_RETAINED_BYTES);
195715
+ const stderr = new TailBuffer(DEFAULT_MAX_RETAINED_BYTES);
195716
+ let timedOut = false, exited = false, spawnError = "";
195714
195717
  proc.stdout?.on("data", (chunk) => {
195715
- stdout += chunk.toString();
195718
+ stdout.append(chunk.toString());
195716
195719
  });
195717
195720
  proc.stderr?.on("data", (chunk) => {
195718
- stderr += chunk.toString();
195721
+ stderr.append(chunk.toString());
195719
195722
  });
195720
195723
  const timeoutId = setTimeout(async () => {
195721
195724
  if (!exited) {
@@ -195737,8 +195740,10 @@ async function runSandboxed(params) {
195737
195740
  });
195738
195741
  proc.stdout?.destroy();
195739
195742
  proc.stderr?.destroy();
195740
- let output2 = stderr ? stdout ? `${stdout}
195741
- ${stderr}` : stderr : stdout;
195743
+ const outText = stdout.toString();
195744
+ const errText = stderr.toString();
195745
+ let output2 = errText ? outText ? `${outText}
195746
+ ${errText}` : errText : outText;
195742
195747
  if (spawnError) output2 = output2 ? `${output2}
195743
195748
  ${spawnError}` : spawnError;
195744
195749
  if (timedOut)
@@ -195755,7 +195760,7 @@ function capOutput(output2) {
195755
195760
  const fullPath = join20(getTempDir(), `shell-${randomUUID4().slice(0, 8)}.log`);
195756
195761
  writeFileSync12(fullPath, output2);
195757
195762
  const elided = output2.length - MAX_OUTPUT_CHARS;
195758
- return `... [${elided} chars truncated; full output saved to ${fullPath}] ...
195763
+ return `... [${elided} chars truncated; output saved to ${fullPath}] ...
195759
195764
  ${output2.slice(-MAX_OUTPUT_CHARS)}`;
195760
195765
  }
195761
195766
  function isGitCommand(command) {
@@ -195777,7 +195782,7 @@ Use this tool to:
195777
195782
  - Execute build tools (npm, pnpm, cargo, make, etc.)
195778
195783
  - Run tests and linters
195779
195784
 
195780
- Output is capped at ${MAX_OUTPUT_CHARS} chars: if exceeded, only the tail is returned and the full body is saved to a tempfile (path included in the response). Re-read the tempfile with cat/tail/grep when you need more.
195785
+ Output is capped at ${MAX_OUTPUT_CHARS} chars: if exceeded, only the tail is returned and the captured output is saved to a tempfile (path included in the response). Re-read the tempfile with cat/tail/grep when you need more.
195781
195786
 
195782
195787
  Do NOT use this tool for git commands \u2014 use the dedicated git tools instead.`,
195783
195788
  parameters: ShellParams,
@@ -196464,7 +196469,6 @@ function buildPrBodyWithFooter(ctx, body) {
196464
196469
  fallbackFrom: ctx.toolState.modelFallback?.from,
196465
196470
  clamped: ctx.toolState.modelClamped,
196466
196471
  unselectedProxyDefault: ctx.toolState.unselectedProxyDefault,
196467
- shaPinned: ctx.toolState.shaPinned,
196468
196472
  oss: ctx.oss,
196469
196473
  owner: ctx.repo.owner
196470
196474
  });
@@ -197545,8 +197549,8 @@ function CheckoutRepoTool(ctx) {
197545
197549
  const state = ensureRepoState(ctx.toolState, { owner, name: repo, dir, access });
197546
197550
  const rc = resolveRepoCtx(ctx, repo);
197547
197551
  try {
197548
- const info2 = await rc.octokit.rest.repos.get({ owner, repo });
197549
- const defaultBranch = info2.data.default_branch;
197552
+ const info3 = await rc.octokit.rest.repos.get({ owner, repo });
197553
+ const defaultBranch = info3.data.default_branch;
197550
197554
  state.defaultBranch = defaultBranch;
197551
197555
  const url4 = `https://github.com/${owner}/${repo}.git`;
197552
197556
  $("git", ["init", "-q"], { cwd: dir });
@@ -199239,7 +199243,7 @@ function buildModelAccessError(input2) {
199239
199243
  }
199240
199244
 
199241
199245
  // utils/normalizeEnv.ts
199242
- var core5 = __toESM(require_core(), 1);
199246
+ var core6 = __toESM(require_core(), 1);
199243
199247
  function hasControlCharacter(value2) {
199244
199248
  return [...value2].some((ch) => {
199245
199249
  const code = ch.charCodeAt(0);
@@ -199265,7 +199269,7 @@ function sanitizeSecret(key, value2) {
199265
199269
  `\xBB stripped whitespace from ${key} (whitespace in secret values breaks GitHub Actions log masking)`
199266
199270
  );
199267
199271
  }
199268
- core5.setSecret(trimmed);
199272
+ core6.setSecret(trimmed);
199269
199273
  return trimmed;
199270
199274
  }
199271
199275
  function normalizeEnv() {
@@ -199309,7 +199313,7 @@ function normalizeEnv() {
199309
199313
  }
199310
199314
 
199311
199315
  // utils/overrides.ts
199312
- var core6 = __toESM(require_core(), 1);
199316
+ var core7 = __toESM(require_core(), 1);
199313
199317
  var DENIED_OVERRIDE_NAMES = /* @__PURE__ */ new Set([
199314
199318
  "GITHUB_TOKEN",
199315
199319
  "GH_TOKEN",
@@ -199355,7 +199359,7 @@ function applyOverrides(params) {
199355
199359
  denied.push(key);
199356
199360
  continue;
199357
199361
  }
199358
- if (value2.length > 0) core6.setSecret(value2);
199362
+ if (value2.length > 0) core7.setSecret(value2);
199359
199363
  params.env[key] = value2;
199360
199364
  applied.push(key);
199361
199365
  }
@@ -199364,7 +199368,7 @@ function applyOverrides(params) {
199364
199368
  }
199365
199369
 
199366
199370
  // utils/payload.ts
199367
- var core7 = __toESM(require_core(), 1);
199371
+ var core8 = __toESM(require_core(), 1);
199368
199372
  import { readFileSync as readFileSync7 } from "node:fs";
199369
199373
  import { isAbsolute as isAbsolute2, resolve as resolve2 } from "node:path";
199370
199374
 
@@ -199498,8 +199502,8 @@ function assertDispatchPayloadIntact(promptInput) {
199498
199502
  );
199499
199503
  }
199500
199504
  function resolvePromptInput() {
199501
- const promptInput = core7.getInput("prompt");
199502
- const promptFile = core7.getInput("prompt_file");
199505
+ const promptInput = core8.getInput("prompt");
199506
+ const promptFile = core8.getInput("prompt_file");
199503
199507
  if (promptInput && promptFile) {
199504
199508
  throw new Error("set exactly one of 'prompt' or 'prompt_file' inputs, not both.");
199505
199509
  }
@@ -199533,7 +199537,7 @@ function resolvePromptFile(input2) {
199533
199537
  }
199534
199538
  function warnIfDeprecatedStatusChecks(value2) {
199535
199539
  if (value2 !== void 0) {
199536
- core7.warning(
199540
+ core8.warning(
199537
199541
  "`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."
199538
199542
  );
199539
199543
  }
@@ -199541,15 +199545,15 @@ function warnIfDeprecatedStatusChecks(value2) {
199541
199545
  }
199542
199546
  function resolveNonPromptInputs() {
199543
199547
  return Inputs.omit("prompt", "prompt_file").assert({
199544
- model: core7.getInput("model") || void 0,
199545
- effort: core7.getInput("effort") || void 0,
199546
- debug: core7.getInput("debug") || void 0,
199547
- timeout: core7.getInput("timeout") || void 0,
199548
- cwd: core7.getInput("cwd") || void 0,
199549
- push: core7.getInput("push") || void 0,
199550
- shell: core7.getInput("shell") || void 0,
199551
- status_checks: warnIfDeprecatedStatusChecks(core7.getInput("status_checks") || void 0),
199552
- progress_comments: core7.getInput("progress_comments") || void 0
199548
+ model: core8.getInput("model") || void 0,
199549
+ effort: core8.getInput("effort") || void 0,
199550
+ debug: core8.getInput("debug") || void 0,
199551
+ timeout: core8.getInput("timeout") || void 0,
199552
+ cwd: core8.getInput("cwd") || void 0,
199553
+ push: core8.getInput("push") || void 0,
199554
+ shell: core8.getInput("shell") || void 0,
199555
+ status_checks: warnIfDeprecatedStatusChecks(core8.getInput("status_checks") || void 0),
199556
+ progress_comments: core8.getInput("progress_comments") || void 0
199553
199557
  });
199554
199558
  }
199555
199559
  function resolvePayload(resolvedPromptInput, repoSettings) {
@@ -199619,7 +199623,7 @@ function resolvePayload(resolvedPromptInput, repoSettings) {
199619
199623
  };
199620
199624
  }
199621
199625
  function resolveOutputSchema() {
199622
- const raw2 = core7.getInput("output_schema");
199626
+ const raw2 = core8.getInput("output_schema");
199623
199627
  if (!raw2) return void 0;
199624
199628
  let parsed2;
199625
199629
  try {
@@ -199635,10 +199639,10 @@ function resolveOutputSchema() {
199635
199639
  }
199636
199640
 
199637
199641
  // utils/proxy.ts
199638
- var core9 = __toESM(require_core(), 1);
199642
+ var core10 = __toESM(require_core(), 1);
199639
199643
 
199640
199644
  // utils/token.ts
199641
- var core8 = __toESM(require_core(), 1);
199645
+ var core9 = __toESM(require_core(), 1);
199642
199646
  import assert2 from "node:assert/strict";
199643
199647
  var mcpTokenValue;
199644
199648
  var refreshMcpTokenFn;
@@ -199646,7 +199650,7 @@ function getMcpTokenRefresh() {
199646
199650
  return refreshMcpTokenFn;
199647
199651
  }
199648
199652
  function getJobToken() {
199649
- const inputToken = core8.getInput("token");
199653
+ const inputToken = core9.getInput("token");
199650
199654
  if (inputToken) {
199651
199655
  return inputToken;
199652
199656
  }
@@ -199662,7 +199666,7 @@ async function resolveTokens(params) {
199662
199666
  if (externalToken) {
199663
199667
  mcpTokenValue = externalToken;
199664
199668
  if (isGitHubActions) {
199665
- core8.setSecret(externalToken);
199669
+ core9.setSecret(externalToken);
199666
199670
  }
199667
199671
  log.info("\xBB using external GH_TOKEN for both git and MCP");
199668
199672
  return {
@@ -199686,7 +199690,7 @@ async function resolveTokens(params) {
199686
199690
  permissions: gitPermissions
199687
199691
  });
199688
199692
  if (isGitHubActions) {
199689
- core8.setSecret(gitToken);
199693
+ core9.setSecret(gitToken);
199690
199694
  }
199691
199695
  log.info(
199692
199696
  `\xBB acquired git token (${Object.entries(gitPermissions).map((e) => e.join(":")).join(", ")})`
@@ -199707,7 +199711,7 @@ async function resolveTokens(params) {
199707
199711
  permissions: mcpPermissions
199708
199712
  });
199709
199713
  if (isGitHubActions) {
199710
- core8.setSecret(mcpToken);
199714
+ core9.setSecret(mcpToken);
199711
199715
  }
199712
199716
  log.info(
199713
199717
  `\xBB acquired scoped MCP token (${Object.entries(mcpPermissions).map((e) => e.join(":")).join(", ")})`
@@ -199716,7 +199720,7 @@ async function resolveTokens(params) {
199716
199720
  let ghToken;
199717
199721
  if (ghPermissions) {
199718
199722
  ghToken = await acquireNewToken({ permissions: ghPermissions });
199719
- if (isGitHubActions) core8.setSecret(ghToken);
199723
+ if (isGitHubActions) core9.setSecret(ghToken);
199720
199724
  log.info(
199721
199725
  `\xBB acquired gh token mirroring ${params.authorPermission} (${formatPermissions(ghPermissions)})`
199722
199726
  );
@@ -199728,7 +199732,7 @@ async function resolveTokens(params) {
199728
199732
  xrepoGrant: params.xrepoGrant,
199729
199733
  permissions: { contents: "read" }
199730
199734
  });
199731
- if (isGitHubActions) core8.setSecret(readToken);
199735
+ if (isGitHubActions) core9.setSecret(readToken);
199732
199736
  log.info(`\xBB acquired cross-repo read token (contents:read, ${params.xrepo.read.length} repos)`);
199733
199737
  }
199734
199738
  mcpTokenValue = mcpToken;
@@ -199748,7 +199752,7 @@ async function resolveTokens(params) {
199748
199752
  oidc: params.oidc ?? void 0
199749
199753
  }).then((fresh) => {
199750
199754
  if (isGitHubActions) {
199751
- core8.setSecret(fresh);
199755
+ core9.setSecret(fresh);
199752
199756
  }
199753
199757
  mcpTokenValue = fresh;
199754
199758
  currentMcpToken = fresh;
@@ -199770,7 +199774,7 @@ async function resolveTokens(params) {
199770
199774
  permissions: gitPermissions,
199771
199775
  oidc: params.oidc ?? void 0
199772
199776
  }).then((fresh) => {
199773
- if (isGitHubActions) core8.setSecret(fresh);
199777
+ if (isGitHubActions) core9.setSecret(fresh);
199774
199778
  void revokeGitHubInstallationToken(currentGitToken);
199775
199779
  currentGitToken = fresh;
199776
199780
  log.warning("\xBB GitHub rejected the git token; re-acquired a fresh git token");
@@ -199788,7 +199792,7 @@ async function resolveTokens(params) {
199788
199792
  permissions: { contents: "read" },
199789
199793
  oidc: params.oidc ?? void 0
199790
199794
  }).then((fresh) => {
199791
- if (isGitHubActions) core8.setSecret(fresh);
199795
+ if (isGitHubActions) core9.setSecret(fresh);
199792
199796
  void revokeGitHubInstallationToken(read2);
199793
199797
  currentReadToken = fresh;
199794
199798
  log.warning("\xBB GitHub rejected the read token; re-acquired a fresh read token");
@@ -199882,7 +199886,6 @@ ${ctx.error}` : ctx.error;
199882
199886
  fallbackFrom: ctx.toolState.modelFallback?.from,
199883
199887
  clamped: ctx.toolState.modelClamped,
199884
199888
  unselectedProxyDefault: ctx.toolState.unselectedProxyDefault,
199885
- shaPinned: ctx.toolState.shaPinned,
199886
199889
  oss: ctx.toolState.oss,
199887
199890
  owner: repoContext.owner
199888
199891
  });
@@ -200003,7 +200006,7 @@ async function resolveProxyModel(ctx) {
200003
200006
  });
200004
200007
  if (!key) return;
200005
200008
  process.env.OPENROUTER_API_KEY = key;
200006
- core9.setSecret(key);
200009
+ core10.setSecret(key);
200007
200010
  ctx.payload.proxyModel = ctx.proxyModel;
200008
200011
  ctx.toolState.model = ctx.proxyModel;
200009
200012
  const label = ctx.oss ? "oss" : "router";
@@ -200081,7 +200084,7 @@ async function resolveTrialFallback(ctx) {
200081
200084
  });
200082
200085
  if (!key) return false;
200083
200086
  process.env.OPENROUTER_API_KEY = key;
200084
- core9.setSecret(key);
200087
+ core10.setSecret(key);
200085
200088
  ctx.payload.proxyModel = DEFAULT_PROXY_MODEL;
200086
200089
  ctx.toolState.model = DEFAULT_PROXY_MODEL;
200087
200090
  ctx.toolState.modelClamped = {
@@ -200317,23 +200320,11 @@ async function fetchRunContext(params) {
200317
200320
  }
200318
200321
 
200319
200322
  // utils/runContextData.ts
200320
- function isActionPinnedToSha() {
200321
- const ref = process.env.GITHUB_ACTION_REF;
200322
- return !!ref && /^[0-9a-f]{40}$/i.test(ref);
200323
- }
200324
- function warnIfPinnedToSha() {
200325
- if (isActionPinnedToSha()) {
200326
- log.warning(
200327
- `\xBB pinned to a commit SHA (${process.env.GITHUB_ACTION_REF}); the post-run cleanup step is frozen at that commit and won't receive fixes. keep the SHA fresh with Dependabot, or pin to \`pullfrog/pullfrog@v0\` if your org doesn't require full-SHA action pinning \u2014 see https://docs.pullfrog.com/versioning`
200328
- );
200329
- }
200330
- }
200331
200323
  async function resolveRunContextData(params) {
200332
200324
  const actionRef = process.env.GITHUB_ACTION_REF;
200333
200325
  log.info(
200334
200326
  `\xBB running Pullfrog v${package_default.version}${actionRef ? ` (ref: ${actionRef})` : ""}...`
200335
200327
  );
200336
- warnIfPinnedToSha();
200337
200328
  const repoContext = parseRepoContext();
200338
200329
  let oidcToken;
200339
200330
  try {
@@ -200767,7 +200758,7 @@ ${genericBody}`,
200767
200758
  }
200768
200759
 
200769
200760
  // utils/runLifecycle.ts
200770
- var core10 = __toESM(require_core(), 1);
200761
+ var core11 = __toESM(require_core(), 1);
200771
200762
 
200772
200763
  // utils/autoMerge.ts
200773
200764
  function hasBlockingHumanReview(reviews) {
@@ -201163,7 +201154,7 @@ async function finalizeSuccessRun(input2) {
201163
201154
  }
201164
201155
  if (input2.toolState.output) {
201165
201156
  log.info(`::pullfrog-output::${Buffer.from(input2.toolState.output).toString("base64")}`);
201166
- core10.setOutput("result", input2.toolState.output);
201157
+ core11.setOutput("result", input2.toolState.output);
201167
201158
  }
201168
201159
  if (input2.result.success) {
201169
201160
  await approveAfterFix(input2.toolContext).catch((error62) => {
@@ -201463,7 +201454,6 @@ async function main() {
201463
201454
  });
201464
201455
  toolState.model = payload.model;
201465
201456
  toolState.oss = runContext.oss;
201466
- toolState.shaPinned = isActionPinnedToSha();
201467
201457
  if (payload.event.issue_number !== void 0) {
201468
201458
  primaryRepoState(toolState).issueNumber = payload.event.issue_number;
201469
201459
  }