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/cli.mjs +29270 -14571
- package/dist/cliContract.d.ts +5 -0
- package/dist/configuration.d.ts +45 -0
- package/dist/index.js +208 -218
- package/dist/internal/index.d.ts +3 -0
- package/dist/internal.js +14276 -16
- package/dist/toolState.d.ts +0 -1
- package/dist/utils/buildPullfrogFooter.d.ts +0 -6
- package/dist/utils/oauthWriteback.d.ts +29 -0
- package/dist/utils/runContextData.d.ts +0 -10
- package/package.json +4 -2
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
|
|
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(
|
|
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,
|
|
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
|
-
|
|
17681
|
-
response = yield this.requestRaw(
|
|
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(
|
|
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(
|
|
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(
|
|
17732
|
+
requestRawWithCallback(info3, data, onResult) {
|
|
17733
17733
|
if (typeof data === "string") {
|
|
17734
|
-
if (!
|
|
17735
|
-
|
|
17734
|
+
if (!info3.options.headers) {
|
|
17735
|
+
info3.options.headers = {};
|
|
17736
17736
|
}
|
|
17737
|
-
|
|
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 =
|
|
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: ${
|
|
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
|
|
17795
|
-
|
|
17796
|
-
const usingSsl =
|
|
17797
|
-
|
|
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
|
-
|
|
17800
|
-
|
|
17801
|
-
|
|
17802
|
-
|
|
17803
|
-
|
|
17804
|
-
|
|
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
|
-
|
|
17806
|
+
info3.options.headers["user-agent"] = this.userAgent;
|
|
17807
17807
|
}
|
|
17808
|
-
|
|
17808
|
+
info3.options.agent = this._getAgent(info3.parsedUrl);
|
|
17809
17809
|
if (this.handlers) {
|
|
17810
17810
|
for (const handler2 of this.handlers) {
|
|
17811
|
-
handler2.prepareRequest(
|
|
17811
|
+
handler2.prepareRequest(info3.options);
|
|
17812
17812
|
}
|
|
17813
17813
|
}
|
|
17814
|
-
return
|
|
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
|
|
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 =
|
|
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
|
|
19804
|
+
function info3(message) {
|
|
19805
19805
|
process.stdout.write(message + os2.EOL);
|
|
19806
19806
|
}
|
|
19807
|
-
exports.info =
|
|
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
|
|
19837
|
+
function getState2(name) {
|
|
19838
19838
|
return process.env[`STATE_${name}`] || "";
|
|
19839
19839
|
}
|
|
19840
|
-
exports.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
|
|
27624
|
+
var core12;
|
|
27625
27625
|
if (process.platform === "win32" || global.TESTING_WINDOWS) {
|
|
27626
|
-
|
|
27626
|
+
core12 = require_windows();
|
|
27627
27627
|
} else {
|
|
27628
|
-
|
|
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
|
-
|
|
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
|
|
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 = (
|
|
38453
|
-
debug3("SOCKS5 tunnel established to", targetHost, targetPort, "via",
|
|
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
|
|
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 =
|
|
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.
|
|
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
|
|
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
|
-
|
|
112774
|
-
|
|
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
|
|
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
|
-
|
|
119268
|
-
|
|
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
|
|
125155
|
-
if (!
|
|
125214
|
+
const info3 = this._timeoutInfo.get(messageId);
|
|
125215
|
+
if (!info3)
|
|
125156
125216
|
return false;
|
|
125157
|
-
const totalElapsed = Date.now() -
|
|
125158
|
-
if (
|
|
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:
|
|
125221
|
+
maxTotalTimeout: info3.maxTotalTimeout,
|
|
125162
125222
|
totalElapsed
|
|
125163
125223
|
});
|
|
125164
125224
|
}
|
|
125165
|
-
clearTimeout(
|
|
125166
|
-
|
|
125225
|
+
clearTimeout(info3.timeoutId);
|
|
125226
|
+
info3.timeoutId = setTimeout(info3.onTimeout, info3.timeout);
|
|
125167
125227
|
return true;
|
|
125168
125228
|
}
|
|
125169
125229
|
_cleanupTimeout(messageId) {
|
|
125170
|
-
const
|
|
125171
|
-
if (
|
|
125172
|
-
clearTimeout(
|
|
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
|
|
125218
|
-
clearTimeout(
|
|
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
|
|
135469
|
-
if (!
|
|
135470
|
-
const totalElapsed = Date.now() -
|
|
135471
|
-
if (
|
|
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:
|
|
135534
|
+
maxTotalTimeout: info3.maxTotalTimeout,
|
|
135475
135535
|
totalElapsed
|
|
135476
135536
|
});
|
|
135477
135537
|
}
|
|
135478
|
-
clearTimeout(
|
|
135479
|
-
|
|
135538
|
+
clearTimeout(info3.timeoutId);
|
|
135539
|
+
info3.timeoutId = setTimeout(info3.onTimeout, info3.timeout);
|
|
135480
135540
|
return true;
|
|
135481
135541
|
}
|
|
135482
135542
|
_cleanupTimeout(messageId) {
|
|
135483
|
-
const
|
|
135484
|
-
if (
|
|
135485
|
-
clearTimeout(
|
|
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
|
|
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
|
|
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
|
|
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 =
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
149610
|
-
if (!
|
|
149611
|
-
const totalElapsed = Date.now() -
|
|
149612
|
-
if (
|
|
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:
|
|
149675
|
+
maxTotalTimeout: info3.maxTotalTimeout,
|
|
149616
149676
|
totalElapsed
|
|
149617
149677
|
});
|
|
149618
149678
|
}
|
|
149619
|
-
clearTimeout(
|
|
149620
|
-
|
|
149679
|
+
clearTimeout(info3.timeoutId);
|
|
149680
|
+
info3.timeoutId = setTimeout(info3.onTimeout, info3.timeout);
|
|
149621
149681
|
return true;
|
|
149622
149682
|
}
|
|
149623
149683
|
_cleanupTimeout(messageId) {
|
|
149624
|
-
const
|
|
149625
|
-
if (
|
|
149626
|
-
clearTimeout(
|
|
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
|
|
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
|
|
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 =
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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,
|
|
186707
|
-
const [state2, request2, options] =
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
195718
|
+
stdout.append(chunk.toString());
|
|
195716
195719
|
});
|
|
195717
195720
|
proc.stderr?.on("data", (chunk) => {
|
|
195718
|
-
stderr
|
|
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
|
-
|
|
195741
|
-
|
|
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;
|
|
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
|
|
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
|
|
197549
|
-
const defaultBranch =
|
|
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
|
|
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
|
-
|
|
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
|
|
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)
|
|
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
|
|
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 =
|
|
199502
|
-
const promptFile =
|
|
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
|
-
|
|
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:
|
|
199545
|
-
effort:
|
|
199546
|
-
debug:
|
|
199547
|
-
timeout:
|
|
199548
|
-
cwd:
|
|
199549
|
-
push:
|
|
199550
|
-
shell:
|
|
199551
|
-
status_checks: warnIfDeprecatedStatusChecks(
|
|
199552
|
-
progress_comments:
|
|
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 =
|
|
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
|
|
199642
|
+
var core10 = __toESM(require_core(), 1);
|
|
199639
199643
|
|
|
199640
199644
|
// utils/token.ts
|
|
199641
|
-
var
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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)
|
|
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)
|
|
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
|
-
|
|
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)
|
|
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)
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
}
|