pullfrog 0.1.82 → 0.1.83
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/claudePretoolGate.d.ts +6 -6
- package/dist/cli.mjs +307 -200
- package/dist/index.js +292 -188
- package/dist/internal.js +124 -82
- package/dist/mcp/searchIssues.d.ts +8 -0
- package/dist/mcp/server.d.ts +1 -0
- package/dist/utils/normalizeEnv.d.ts +1 -1
- package/dist/utils/overrides.d.ts +1 -1
- package/dist/utils/runContext.d.ts +1 -0
- package/dist/utils/secretCommands.d.ts +20 -0
- package/package.json +3 -2
package/dist/index.js
CHANGED
|
@@ -19718,10 +19718,10 @@ var require_core = __commonJS({
|
|
|
19718
19718
|
(0, command_1.issueCommand)("set-env", { name }, convertedVal);
|
|
19719
19719
|
}
|
|
19720
19720
|
exports.exportVariable = exportVariable;
|
|
19721
|
-
function
|
|
19721
|
+
function setSecret2(secret) {
|
|
19722
19722
|
(0, command_1.issueCommand)("add-mask", {}, secret);
|
|
19723
19723
|
}
|
|
19724
|
-
exports.setSecret =
|
|
19724
|
+
exports.setSecret = setSecret2;
|
|
19725
19725
|
function addPath(inputPath) {
|
|
19726
19726
|
const filePath = process.env["GITHUB_PATH"] || "";
|
|
19727
19727
|
if (filePath) {
|
|
@@ -19763,7 +19763,7 @@ var require_core = __commonJS({
|
|
|
19763
19763
|
Support boolean input list: \`true | True | TRUE | false | False | FALSE\``);
|
|
19764
19764
|
}
|
|
19765
19765
|
exports.getBooleanInput = getBooleanInput;
|
|
19766
|
-
function
|
|
19766
|
+
function setOutput3(name, value2) {
|
|
19767
19767
|
const filePath = process.env["GITHUB_OUTPUT"] || "";
|
|
19768
19768
|
if (filePath) {
|
|
19769
19769
|
return (0, file_command_1.issueFileCommand)("OUTPUT", (0, file_command_1.prepareKeyValueMessage)(name, value2));
|
|
@@ -19771,7 +19771,7 @@ Support boolean input list: \`true | True | TRUE | false | False | FALSE\``);
|
|
|
19771
19771
|
process.stdout.write(os2.EOL);
|
|
19772
19772
|
(0, command_1.issueCommand)("set-output", { name }, (0, utils_1.toCommandValue)(value2));
|
|
19773
19773
|
}
|
|
19774
|
-
exports.setOutput =
|
|
19774
|
+
exports.setOutput = setOutput3;
|
|
19775
19775
|
function setCommandEcho(enabled) {
|
|
19776
19776
|
(0, command_1.issue)("echo", enabled ? "on" : "off");
|
|
19777
19777
|
}
|
|
@@ -19826,14 +19826,14 @@ Support boolean input list: \`true | True | TRUE | false | False | FALSE\``);
|
|
|
19826
19826
|
});
|
|
19827
19827
|
}
|
|
19828
19828
|
exports.group = group2;
|
|
19829
|
-
function
|
|
19829
|
+
function saveState2(name, value2) {
|
|
19830
19830
|
const filePath = process.env["GITHUB_STATE"] || "";
|
|
19831
19831
|
if (filePath) {
|
|
19832
19832
|
return (0, file_command_1.issueFileCommand)("STATE", (0, file_command_1.prepareKeyValueMessage)(name, value2));
|
|
19833
19833
|
}
|
|
19834
19834
|
(0, command_1.issueCommand)("save-state", { name }, (0, utils_1.toCommandValue)(value2));
|
|
19835
19835
|
}
|
|
19836
|
-
exports.saveState =
|
|
19836
|
+
exports.saveState = saveState2;
|
|
19837
19837
|
function getState2(name) {
|
|
19838
19838
|
return process.env[`STATE_${name}`] || "";
|
|
19839
19839
|
}
|
|
@@ -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 core8;
|
|
27625
27625
|
if (process.platform === "win32" || global.TESTING_WINDOWS) {
|
|
27626
|
-
|
|
27626
|
+
core8 = require_windows();
|
|
27627
27627
|
} else {
|
|
27628
|
-
|
|
27628
|
+
core8 = 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
|
+
core8(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 core8.sync(path4, options || {});
|
|
27664
27664
|
} catch (er) {
|
|
27665
27665
|
if (options && options.ignoreErrors || er.code === "EACCES") {
|
|
27666
27666
|
return false;
|
|
@@ -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 core8 = [
|
|
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 = core8;
|
|
80814
80814
|
}
|
|
80815
80815
|
});
|
|
80816
80816
|
|
|
@@ -107771,19 +107771,19 @@ var providers = {
|
|
|
107771
107771
|
// API is the source of truth (#959).
|
|
107772
107772
|
"claude-fable": {
|
|
107773
107773
|
displayName: "Claude Fable",
|
|
107774
|
-
resolve: "anthropic/claude-fable-5",
|
|
107774
|
+
resolve: "anthropic/claude-fable-5-1",
|
|
107775
107775
|
effort: ["low", "medium", "high", "xhigh", "max"],
|
|
107776
107776
|
// rolling alias: models.dev's OpenRouter mirror lags brand-new pinned
|
|
107777
|
-
// versions (claude-fable-5
|
|
107777
|
+
// versions (claude-fable-5 was missing there when this was added), so track ~…-latest to
|
|
107778
107778
|
// stay catalog-valid and auto-follow version bumps.
|
|
107779
107779
|
openRouterResolve: "openrouter/~anthropic/claude-fable-latest",
|
|
107780
107780
|
subagentModel: "claude-sonnet"
|
|
107781
107781
|
},
|
|
107782
107782
|
"claude-opus": {
|
|
107783
107783
|
displayName: "Claude Opus",
|
|
107784
|
-
resolve: "anthropic/claude-opus-5",
|
|
107784
|
+
resolve: "anthropic/claude-opus-5-5",
|
|
107785
107785
|
effort: ["low", "medium", "high", "xhigh", "max"],
|
|
107786
|
-
openRouterResolve: "openrouter/anthropic/claude-opus-5",
|
|
107786
|
+
openRouterResolve: "openrouter/anthropic/claude-opus-5.5",
|
|
107787
107787
|
preferred: true,
|
|
107788
107788
|
subagentModel: "claude-sonnet"
|
|
107789
107789
|
},
|
|
@@ -107818,9 +107818,9 @@ var providers = {
|
|
|
107818
107818
|
},
|
|
107819
107819
|
"gpt-sol": {
|
|
107820
107820
|
displayName: "GPT Sol",
|
|
107821
|
-
resolve: "openai/gpt-
|
|
107821
|
+
resolve: "openai/gpt-6-sol",
|
|
107822
107822
|
effort: ["none", "low", "medium", "high", "xhigh", "max"],
|
|
107823
|
-
openRouterResolve: "openrouter/openai/gpt-
|
|
107823
|
+
openRouterResolve: "openrouter/openai/gpt-6-sol",
|
|
107824
107824
|
preferred: true,
|
|
107825
107825
|
subagentModel: "gpt-terra"
|
|
107826
107826
|
},
|
|
@@ -107830,9 +107830,9 @@ var providers = {
|
|
|
107830
107830
|
"gpt-sol-pro": {
|
|
107831
107831
|
displayName: "GPT Sol Pro",
|
|
107832
107832
|
description: "Maximum reasoning effort",
|
|
107833
|
-
resolve: "openai/gpt-
|
|
107833
|
+
resolve: "openai/gpt-6-sol",
|
|
107834
107834
|
effort: ["none", "low", "medium", "high", "xhigh", "max"],
|
|
107835
|
-
openRouterResolve: "openrouter/openai/gpt-
|
|
107835
|
+
openRouterResolve: "openrouter/openai/gpt-6-sol-pro",
|
|
107836
107836
|
subagentModel: "gpt-sol"
|
|
107837
107837
|
},
|
|
107838
107838
|
// gpt-5.6's balanced mid-tier. selectable on its own and doubles as Sol's
|
|
@@ -107845,9 +107845,9 @@ var providers = {
|
|
|
107845
107845
|
},
|
|
107846
107846
|
"gpt-luna": {
|
|
107847
107847
|
displayName: "GPT Luna",
|
|
107848
|
-
resolve: "openai/gpt-
|
|
107848
|
+
resolve: "openai/gpt-6-luna",
|
|
107849
107849
|
effort: ["none", "low", "medium", "high", "xhigh", "max"],
|
|
107850
|
-
openRouterResolve: "openrouter/openai/gpt-
|
|
107850
|
+
openRouterResolve: "openrouter/openai/gpt-6-luna"
|
|
107851
107851
|
},
|
|
107852
107852
|
// legacy aliases — openai unified the codex line into the main GPT family
|
|
107853
107853
|
// and is shutting down every "-codex" snapshot on 2026-07-23. transparently
|
|
@@ -107941,9 +107941,9 @@ var providers = {
|
|
|
107941
107941
|
models: {
|
|
107942
107942
|
grok: {
|
|
107943
107943
|
displayName: "Grok",
|
|
107944
|
-
resolve: "xai/grok-4.
|
|
107944
|
+
resolve: "xai/grok-4.7",
|
|
107945
107945
|
effort: ["low", "medium", "high", "xhigh"],
|
|
107946
|
-
openRouterResolve: "openrouter/x-ai/grok-4.
|
|
107946
|
+
openRouterResolve: "openrouter/x-ai/grok-4.7",
|
|
107947
107947
|
preferred: true
|
|
107948
107948
|
},
|
|
107949
107949
|
// the Smart ladder's cheap rung: 1.25/2.5 against 4.6's 2/6, and a 0.2
|
|
@@ -107958,17 +107958,17 @@ var providers = {
|
|
|
107958
107958
|
// 2026-05-15 (https://docs.x.ai/developers/migration/may-15-deprecation)
|
|
107959
107959
|
// and now redirects every deprecated text-model slug to grok-4.3 at
|
|
107960
107960
|
// standard pricing. fall back to the live `xai/grok` so the alias
|
|
107961
|
-
// chain resolves to grok-4.
|
|
107961
|
+
// chain resolves to grok-4.7 for both direct-key and OpenRouter users.
|
|
107962
107962
|
"grok-fast": {
|
|
107963
107963
|
displayName: "Grok Fast",
|
|
107964
107964
|
resolve: "xai/grok-4-1-fast",
|
|
107965
|
-
openRouterResolve: "openrouter/x-ai/grok-4.
|
|
107965
|
+
openRouterResolve: "openrouter/x-ai/grok-4.7",
|
|
107966
107966
|
fallback: "xai/grok"
|
|
107967
107967
|
},
|
|
107968
107968
|
"grok-code-fast": {
|
|
107969
107969
|
displayName: "Grok Code Fast",
|
|
107970
107970
|
resolve: "xai/grok-code-fast-1",
|
|
107971
|
-
openRouterResolve: "openrouter/x-ai/grok-4.
|
|
107971
|
+
openRouterResolve: "openrouter/x-ai/grok-4.7",
|
|
107972
107972
|
fallback: "xai/grok"
|
|
107973
107973
|
}
|
|
107974
107974
|
}
|
|
@@ -107996,8 +107996,9 @@ var providers = {
|
|
|
107996
107996
|
"deepseek-pro": {
|
|
107997
107997
|
displayName: "DeepSeek Pro",
|
|
107998
107998
|
resolve: "deepseek/deepseek-v4-pro",
|
|
107999
|
-
|
|
108000
|
-
|
|
107999
|
+
// models.dev gave the direct id V4.1-Flash's ladder on 2026-09-21, which
|
|
108000
|
+
// is what DeepSeek now serves under it — and the same as the Router pin's.
|
|
108001
|
+
effort: ["low", "high", "max"],
|
|
108001
108002
|
openRouterResolve: "openrouter/deepseek/deepseek-v4-pro-0813",
|
|
108002
108003
|
preferred: true
|
|
108003
108004
|
},
|
|
@@ -108195,24 +108196,15 @@ var providers = {
|
|
|
108195
108196
|
},
|
|
108196
108197
|
"claude-opus": {
|
|
108197
108198
|
displayName: "Claude Opus",
|
|
108198
|
-
resolve: "opencode/claude-opus-5",
|
|
108199
|
+
resolve: "opencode/claude-opus-5-5",
|
|
108199
108200
|
effort: ["low", "medium", "high", "xhigh", "max"],
|
|
108200
|
-
openRouterResolve: "openrouter/anthropic/claude-opus-5",
|
|
108201
|
-
subagentModel: "claude-sonnet"
|
|
108202
|
-
//
|
|
108203
|
-
//
|
|
108204
|
-
//
|
|
108205
|
-
//
|
|
108206
|
-
//
|
|
108207
|
-
// claude-fable-5 all 200 on the same key). opencode retries above the AI
|
|
108208
|
-
// SDK emitting no part.updated, so a run just produces nothing until it is
|
|
108209
|
-
// killed — metaideas/init logged six zero-output failures from 2026-08-23.
|
|
108210
|
-
// The 503 has since cleared and the model is STILL unusable: re-measured
|
|
108211
|
-
// 2026-08-26, direct POST /zen/v1/messages is 10/10 200 at 1.3-4.1s while
|
|
108212
|
-
// `opencode run --model opencode/claude-opus-5` on the same trivial prompt
|
|
108213
|
-
// emitted nothing for 240s in CI. A raw-endpoint 200 is not runtime
|
|
108214
|
-
// availability. see wiki/opencode-silent-stall.md
|
|
108215
|
-
fallback: "opencode/claude-sonnet"
|
|
108201
|
+
openRouterResolve: "openrouter/anthropic/claude-opus-5.5",
|
|
108202
|
+
subagentModel: "claude-sonnet"
|
|
108203
|
+
// fell back to Sonnet from 2026-08-25 to 2026-09-25: Zen listed
|
|
108204
|
+
// claude-opus-5 while `opencode run` on it emitted nothing for 240s. A
|
|
108205
|
+
// raw-endpoint 200 is not runtime availability — the fallback was cleared
|
|
108206
|
+
// only once `opencode run` completed on both claude-opus-5 and 5-5. see
|
|
108207
|
+
// wiki/opencode-silent-stall.md
|
|
108216
108208
|
},
|
|
108217
108209
|
"claude-sonnet": {
|
|
108218
108210
|
displayName: "Claude Sonnet",
|
|
@@ -108227,9 +108219,9 @@ var providers = {
|
|
|
108227
108219
|
},
|
|
108228
108220
|
"gpt-sol": {
|
|
108229
108221
|
displayName: "GPT Sol",
|
|
108230
|
-
resolve: "opencode/gpt-
|
|
108222
|
+
resolve: "opencode/gpt-6-sol",
|
|
108231
108223
|
effort: ["none", "low", "medium", "high", "xhigh", "max"],
|
|
108232
|
-
openRouterResolve: "openrouter/openai/gpt-
|
|
108224
|
+
openRouterResolve: "openrouter/openai/gpt-6-sol",
|
|
108233
108225
|
subagentModel: "gpt-terra"
|
|
108234
108226
|
},
|
|
108235
108227
|
"gpt-astra": {
|
|
@@ -108243,9 +108235,9 @@ var providers = {
|
|
|
108243
108235
|
"gpt-sol-pro": {
|
|
108244
108236
|
displayName: "GPT Sol Pro",
|
|
108245
108237
|
description: "Maximum reasoning effort",
|
|
108246
|
-
resolve: "opencode/gpt-
|
|
108238
|
+
resolve: "opencode/gpt-6-sol",
|
|
108247
108239
|
effort: ["none", "low", "medium", "high", "xhigh", "max"],
|
|
108248
|
-
openRouterResolve: "openrouter/openai/gpt-
|
|
108240
|
+
openRouterResolve: "openrouter/openai/gpt-6-sol-pro",
|
|
108249
108241
|
subagentModel: "gpt-sol"
|
|
108250
108242
|
},
|
|
108251
108243
|
// gpt-5.6 balanced mid-tier — selectable + Sol's subagent. see openai above.
|
|
@@ -108257,9 +108249,9 @@ var providers = {
|
|
|
108257
108249
|
},
|
|
108258
108250
|
"gpt-luna": {
|
|
108259
108251
|
displayName: "GPT Luna",
|
|
108260
|
-
resolve: "opencode/gpt-
|
|
108252
|
+
resolve: "opencode/gpt-6-luna",
|
|
108261
108253
|
effort: ["none", "low", "medium", "high", "xhigh", "max"],
|
|
108262
|
-
openRouterResolve: "openrouter/openai/gpt-
|
|
108254
|
+
openRouterResolve: "openrouter/openai/gpt-6-luna"
|
|
108263
108255
|
},
|
|
108264
108256
|
// legacy aliases — see openai provider above for context.
|
|
108265
108257
|
"gpt-codex": {
|
|
@@ -108358,9 +108350,34 @@ var providers = {
|
|
|
108358
108350
|
},
|
|
108359
108351
|
grok: {
|
|
108360
108352
|
displayName: "Grok",
|
|
108361
|
-
resolve: "opencode/grok-4.
|
|
108353
|
+
resolve: "opencode/grok-4.7",
|
|
108362
108354
|
effort: ["low", "medium", "high", "xhigh"],
|
|
108363
|
-
openRouterResolve: "openrouter/x-ai/grok-4.
|
|
108355
|
+
openRouterResolve: "openrouter/x-ai/grok-4.7"
|
|
108356
|
+
},
|
|
108357
|
+
// Zen began listing Qwen's Max and Flash tiers in late 2026-09 (Max on
|
|
108358
|
+
// 09-25); until then `opencode-go` was the only Qwen route, so a Zen
|
|
108359
|
+
// subscriber without Go had none. Plus is still Go-only. Zen's Max entry
|
|
108360
|
+
// publishes a reasoning toggle but no effort rungs.
|
|
108361
|
+
"qwen-max": {
|
|
108362
|
+
displayName: "Qwen Max",
|
|
108363
|
+
resolve: "opencode/qwen3.8-max",
|
|
108364
|
+
openRouterEffort: ["minimal", "low", "medium", "high", "xhigh"],
|
|
108365
|
+
openRouterResolve: "openrouter/qwen/qwen3.8-max-0902",
|
|
108366
|
+
// unlisted until a published `pullfrog` carries this alias (the
|
|
108367
|
+
// merge-vs-publish rule in wiki/models-catalog.md). unhide in the release
|
|
108368
|
+
// that ships it.
|
|
108369
|
+
hidden: true
|
|
108370
|
+
},
|
|
108371
|
+
"qwen-flash": {
|
|
108372
|
+
displayName: "Qwen Flash",
|
|
108373
|
+
resolve: "opencode/qwen3.8-flash",
|
|
108374
|
+
effort: ["low", "medium", "xhigh"],
|
|
108375
|
+
openRouterEffort: [],
|
|
108376
|
+
openRouterResolve: "openrouter/qwen/qwen3.8-flash",
|
|
108377
|
+
// unlisted until a published `pullfrog` carries this alias (the
|
|
108378
|
+
// merge-vs-publish rule in wiki/models-catalog.md). unhide in the release
|
|
108379
|
+
// that ships it.
|
|
108380
|
+
hidden: true
|
|
108364
108381
|
},
|
|
108365
108382
|
"gpt-5-nano": {
|
|
108366
108383
|
displayName: "GPT Nano",
|
|
@@ -108409,11 +108426,31 @@ var providers = {
|
|
|
108409
108426
|
// model, as `minimax-m2.5-free` does.
|
|
108410
108427
|
fallback: "opencode/big-pickle"
|
|
108411
108428
|
},
|
|
108429
|
+
// Zen's FREE stealth preview (listed 2026-09-23), the third after
|
|
108430
|
+
// big-pickle and union-alpha. OpenRouter's listing: prompts and
|
|
108431
|
+
// completions may be retained by the provider, not trained on. unlike the
|
|
108432
|
+
// first two it publishes an effort ladder, so the gate mirrors one here.
|
|
108433
|
+
"space-bunny": {
|
|
108434
|
+
displayName: "Space Bunny",
|
|
108435
|
+
description: "Stealth preview; prompts may be retained",
|
|
108436
|
+
resolve: "opencode/space-bunny-free",
|
|
108437
|
+
effort: ["low", "medium", "high", "xhigh", "max"],
|
|
108438
|
+
// free to run, still gated on the provider's own OPENCODE_API_KEY —
|
|
108439
|
+
// see the big-pickle note above (#1077).
|
|
108440
|
+
isFree: true,
|
|
108441
|
+
// unlisted until a published `pullfrog` carries this alias: 0.1.82
|
|
108442
|
+
// predates it, so a run passes `opencode/space-bunny` through raw and
|
|
108443
|
+
// Zen answers a 500. unhide in the release that ships it.
|
|
108444
|
+
hidden: true
|
|
108445
|
+
},
|
|
108412
108446
|
// Zen's live free MiMo, and the second free row in a menu that big-pickle
|
|
108413
108447
|
// was alone in since `mimo-v2-pro-free` lost its model.
|
|
108414
108448
|
mimo: {
|
|
108415
108449
|
displayName: "MiMo",
|
|
108416
|
-
|
|
108450
|
+
// models.dev deprecated `mimo-v2.5-free` on 2026-09-22. V2.6-Flash is
|
|
108451
|
+
// the only other MiMo Zen serves, so the slug follows it across the
|
|
108452
|
+
// tier rather than leaving stored picks on a dying id.
|
|
108453
|
+
resolve: "opencode/mimo-v2.6-flash-free",
|
|
108417
108454
|
// free to run, still gated on the provider's own OPENCODE_API_KEY —
|
|
108418
108455
|
// see the big-pickle note above (#1077).
|
|
108419
108456
|
isFree: true
|
|
@@ -108442,11 +108479,12 @@ var providers = {
|
|
|
108442
108479
|
// OpenCode Go is a separate $10/mo subscription from Zen, served on its own
|
|
108443
108480
|
// base URL (`https://opencode.ai/zen/go/v1`) but authenticated with the SAME
|
|
108444
108481
|
// `OPENCODE_API_KEY`. it carries the open-weight coding models plus a couple
|
|
108445
|
-
// of frontier ones,
|
|
108446
|
-
// does not list qwen3.7
|
|
108482
|
+
// of frontier ones, four of which are served ONLY here — Zen's `/v1/models`
|
|
108483
|
+
// does not list qwen3.7-plus, mimo-v2.6-pro, longcat-2.0 or hy3. (it listed
|
|
108447
108484
|
// no glm-5.3* either until 2026-09, which is why `opencode/glm` trailed on
|
|
108448
|
-
// 5.2.) so for a Go subscriber this
|
|
108449
|
-
//
|
|
108485
|
+
// 5.2, and no qwen3.8-* until late 2026-09.) so for a Go subscriber this
|
|
108486
|
+
// provider is not a duplicate route to Zen, it is the only route to a large
|
|
108487
|
+
// part of what they pay for.
|
|
108450
108488
|
// like `opencode` and `openrouter` this is a ROUTER, not a vendor: slugs and
|
|
108451
108489
|
// display names mirror the upstream brand tier, and the picker groups them
|
|
108452
108490
|
// under the upstream vendor.
|
|
@@ -108506,7 +108544,8 @@ var providers = {
|
|
|
108506
108544
|
// picker row that fails for almost everyone is worse than none. DeepSeek
|
|
108507
108545
|
// stays reachable ungated via `deepseek/*`, `opencode/*` and
|
|
108508
108546
|
// `openrouter/*`; both remain runnable by full specifier once opted in.
|
|
108509
|
-
// Alibaba —
|
|
108547
|
+
// Alibaba — Zen serves Max and Flash too (see `opencode/qwen-max`); Plus
|
|
108548
|
+
// is Go-only.
|
|
108510
108549
|
"qwen-max": {
|
|
108511
108550
|
displayName: "Qwen Max",
|
|
108512
108551
|
resolve: "opencode-go/qwen3.8-max",
|
|
@@ -108549,8 +108588,8 @@ var providers = {
|
|
|
108549
108588
|
// Xiaomi — Go-only; Zen serves the free `mimo-v2-pro-free` promo instead.
|
|
108550
108589
|
"mimo-pro": {
|
|
108551
108590
|
displayName: "MiMo Pro",
|
|
108552
|
-
resolve: "opencode-go/mimo-v2.
|
|
108553
|
-
openRouterResolve: "openrouter/xiaomi/mimo-v2.
|
|
108591
|
+
resolve: "opencode-go/mimo-v2.6-pro",
|
|
108592
|
+
openRouterResolve: "openrouter/xiaomi/mimo-v2.6-pro"
|
|
108554
108593
|
},
|
|
108555
108594
|
// Meituan — Go-only.
|
|
108556
108595
|
longcat: {
|
|
@@ -108576,15 +108615,15 @@ var providers = {
|
|
|
108576
108615
|
// wiki/models-catalog.md on `opencode/kimi-k2`.
|
|
108577
108616
|
grok: {
|
|
108578
108617
|
displayName: "Grok",
|
|
108579
|
-
resolve: "opencode-go/grok-4.
|
|
108618
|
+
resolve: "opencode-go/grok-4.7",
|
|
108580
108619
|
effort: ["low", "medium", "high", "xhigh"],
|
|
108581
|
-
openRouterResolve: "openrouter/x-ai/grok-4.
|
|
108620
|
+
openRouterResolve: "openrouter/x-ai/grok-4.7"
|
|
108582
108621
|
},
|
|
108583
108622
|
"gpt-luna": {
|
|
108584
108623
|
displayName: "GPT Luna",
|
|
108585
|
-
resolve: "opencode-go/gpt-
|
|
108624
|
+
resolve: "opencode-go/gpt-6-luna",
|
|
108586
108625
|
effort: ["none", "low", "medium", "high", "xhigh", "max"],
|
|
108587
|
-
openRouterResolve: "openrouter/openai/gpt-
|
|
108626
|
+
openRouterResolve: "openrouter/openai/gpt-6-luna"
|
|
108588
108627
|
}
|
|
108589
108628
|
}
|
|
108590
108629
|
}),
|
|
@@ -108686,15 +108725,15 @@ var providers = {
|
|
|
108686
108725
|
resolve: "openrouter/~anthropic/claude-haiku-latest",
|
|
108687
108726
|
openRouterResolve: "openrouter/~anthropic/claude-haiku-latest"
|
|
108688
108727
|
},
|
|
108689
|
-
// pinned to the explicit
|
|
108690
|
-
// alias): after
|
|
108728
|
+
// pinned to the explicit Sol/Terra/Luna tiers (not the ~openai/gpt-latest
|
|
108729
|
+
// rolling alias): after that rename, ~gpt-mini-latest no longer maps
|
|
108691
108730
|
// to Luna, so rolling aliases would silently diverge `gpt`/`gpt-mini` from
|
|
108692
108731
|
// the chosen tiers across funding paths.
|
|
108693
108732
|
"gpt-sol": {
|
|
108694
108733
|
displayName: "GPT Sol",
|
|
108695
|
-
resolve: "openrouter/openai/gpt-
|
|
108734
|
+
resolve: "openrouter/openai/gpt-6-sol",
|
|
108696
108735
|
effort: ["none", "low", "medium", "high", "xhigh", "max"],
|
|
108697
|
-
openRouterResolve: "openrouter/openai/gpt-
|
|
108736
|
+
openRouterResolve: "openrouter/openai/gpt-6-sol",
|
|
108698
108737
|
subagentModel: "gpt-terra"
|
|
108699
108738
|
},
|
|
108700
108739
|
"gpt-astra": {
|
|
@@ -108708,9 +108747,9 @@ var providers = {
|
|
|
108708
108747
|
"gpt-sol-pro": {
|
|
108709
108748
|
displayName: "GPT Sol Pro",
|
|
108710
108749
|
description: "Maximum reasoning effort",
|
|
108711
|
-
resolve: "openrouter/openai/gpt-
|
|
108750
|
+
resolve: "openrouter/openai/gpt-6-sol-pro",
|
|
108712
108751
|
effort: ["none", "low", "medium", "high", "xhigh", "max"],
|
|
108713
|
-
openRouterResolve: "openrouter/openai/gpt-
|
|
108752
|
+
openRouterResolve: "openrouter/openai/gpt-6-sol-pro",
|
|
108714
108753
|
subagentModel: "gpt-sol"
|
|
108715
108754
|
},
|
|
108716
108755
|
// gpt-5.6 balanced mid-tier — selectable + Sol's subagent. see openai above.
|
|
@@ -108722,9 +108761,9 @@ var providers = {
|
|
|
108722
108761
|
},
|
|
108723
108762
|
"gpt-luna": {
|
|
108724
108763
|
displayName: "GPT Luna",
|
|
108725
|
-
resolve: "openrouter/openai/gpt-
|
|
108764
|
+
resolve: "openrouter/openai/gpt-6-luna",
|
|
108726
108765
|
effort: ["none", "low", "medium", "high", "xhigh", "max"],
|
|
108727
|
-
openRouterResolve: "openrouter/openai/gpt-
|
|
108766
|
+
openRouterResolve: "openrouter/openai/gpt-6-luna"
|
|
108728
108767
|
},
|
|
108729
108768
|
// legacy aliases — see openai provider for context.
|
|
108730
108769
|
"gpt-codex": {
|
|
@@ -108788,9 +108827,9 @@ var providers = {
|
|
|
108788
108827
|
},
|
|
108789
108828
|
grok: {
|
|
108790
108829
|
displayName: "Grok",
|
|
108791
|
-
resolve: "openrouter/x-ai/grok-4.
|
|
108830
|
+
resolve: "openrouter/x-ai/grok-4.7",
|
|
108792
108831
|
effort: ["low", "medium", "high", "xhigh"],
|
|
108793
|
-
openRouterResolve: "openrouter/x-ai/grok-4.
|
|
108832
|
+
openRouterResolve: "openrouter/x-ai/grok-4.7"
|
|
108794
108833
|
},
|
|
108795
108834
|
// dated pin, not the bare id — see `deepseek/deepseek-pro` for why
|
|
108796
108835
|
// OpenRouter's unversioned `deepseek-v4-pro` is the stale April preview.
|
|
@@ -108861,8 +108900,10 @@ var providers = {
|
|
|
108861
108900
|
vercel: provider({
|
|
108862
108901
|
// Vercel AI Gateway — one key serves every model it fronts. model IDs use
|
|
108863
108902
|
// the models.dev `vercel` catalog's own naming (dotted versions, e.g.
|
|
108864
|
-
// `anthropic/claude-opus-5`, `zai/glm-5.3`)
|
|
108865
|
-
//
|
|
108903
|
+
// `anthropic/claude-opus-5.5`, `zai/glm-5.3`). effort ladders come from the
|
|
108904
|
+
// gateway's OWN `/v1/models`, not models.dev — the two disagree routinely
|
|
108905
|
+
// (on 2026-09-22 they disagreed on all ten entries that drifted), and the
|
|
108906
|
+
// drift test reads the gateway for that reason. deliberately no
|
|
108866
108907
|
// `openRouterResolve`: a gateway pick is BYOK-only — silently rerouting it
|
|
108867
108908
|
// over the Router proxy would bill the wallet for traffic the user pointed
|
|
108868
108909
|
// at their own gateway.
|
|
@@ -108871,7 +108912,7 @@ var providers = {
|
|
|
108871
108912
|
models: {
|
|
108872
108913
|
"claude-opus": {
|
|
108873
108914
|
displayName: "Claude Opus",
|
|
108874
|
-
resolve: "vercel/anthropic/claude-opus-5",
|
|
108915
|
+
resolve: "vercel/anthropic/claude-opus-5.5",
|
|
108875
108916
|
effort: ["low", "medium", "high", "xhigh", "max"],
|
|
108876
108917
|
preferred: true,
|
|
108877
108918
|
subagentModel: "claude-sonnet"
|
|
@@ -108879,7 +108920,7 @@ var providers = {
|
|
|
108879
108920
|
"claude-sonnet": {
|
|
108880
108921
|
displayName: "Claude Sonnet",
|
|
108881
108922
|
resolve: "vercel/anthropic/claude-sonnet-5",
|
|
108882
|
-
effort: ["low", "medium", "high", "xhigh"]
|
|
108923
|
+
effort: ["none", "low", "medium", "high", "xhigh", "max"]
|
|
108883
108924
|
},
|
|
108884
108925
|
"claude-haiku": {
|
|
108885
108926
|
displayName: "Claude Haiku",
|
|
@@ -108887,7 +108928,7 @@ var providers = {
|
|
|
108887
108928
|
},
|
|
108888
108929
|
"gpt-sol": {
|
|
108889
108930
|
displayName: "GPT Sol",
|
|
108890
|
-
resolve: "vercel/openai/gpt-
|
|
108931
|
+
resolve: "vercel/openai/gpt-6-sol",
|
|
108891
108932
|
effort: ["none", "low", "medium", "high", "xhigh", "max"],
|
|
108892
108933
|
subagentModel: "gpt-terra"
|
|
108893
108934
|
},
|
|
@@ -108900,35 +108941,35 @@ var providers = {
|
|
|
108900
108941
|
"gpt-terra": {
|
|
108901
108942
|
displayName: "GPT Terra",
|
|
108902
108943
|
resolve: "vercel/openai/gpt-5.6-terra",
|
|
108903
|
-
effort: ["none", "low", "medium", "high", "xhigh", "max"]
|
|
108944
|
+
effort: ["none", "minimal", "low", "medium", "high", "xhigh", "max"]
|
|
108904
108945
|
},
|
|
108905
108946
|
"gpt-luna": {
|
|
108906
108947
|
displayName: "GPT Luna",
|
|
108907
|
-
resolve: "vercel/openai/gpt-
|
|
108948
|
+
resolve: "vercel/openai/gpt-6-luna",
|
|
108908
108949
|
effort: ["none", "low", "medium", "high", "xhigh", "max"]
|
|
108909
108950
|
},
|
|
108910
108951
|
"gemini-pro": {
|
|
108911
108952
|
displayName: "Gemini Pro",
|
|
108912
108953
|
resolve: "vercel/google/gemini-3.1-pro-preview",
|
|
108913
|
-
effort: ["low", "
|
|
108954
|
+
effort: ["low", "high"]
|
|
108914
108955
|
},
|
|
108915
108956
|
"gemini-flash": {
|
|
108916
108957
|
displayName: "Gemini Flash",
|
|
108917
108958
|
resolve: "vercel/google/gemini-3.8-flash",
|
|
108918
|
-
effort: ["low", "
|
|
108959
|
+
effort: ["low", "high"]
|
|
108919
108960
|
},
|
|
108920
108961
|
"deepseek-pro": {
|
|
108921
108962
|
displayName: "DeepSeek Pro",
|
|
108922
108963
|
resolve: "vercel/deepseek/deepseek-v4-pro-0813",
|
|
108923
|
-
effort: ["high", "
|
|
108964
|
+
effort: ["none", "high", "max"]
|
|
108924
108965
|
},
|
|
108925
108966
|
// the gateway's bare `deepseek-v4-flash` is the April preview — the same
|
|
108926
108967
|
// fork trap as OpenRouter, with `deepseek-v4-flash-0731` beside it — so
|
|
108927
|
-
// this entry sat on the preview until V4.1.
|
|
108928
|
-
// effort ladder for the V4.1 id.
|
|
108968
|
+
// this entry sat on the preview until V4.1.
|
|
108929
108969
|
"deepseek-flash": {
|
|
108930
108970
|
displayName: "DeepSeek Flash",
|
|
108931
|
-
resolve: "vercel/deepseek/deepseek-v4.1-flash"
|
|
108971
|
+
resolve: "vercel/deepseek/deepseek-v4.1-flash",
|
|
108972
|
+
effort: ["none", "high", "max"]
|
|
108932
108973
|
},
|
|
108933
108974
|
glm: {
|
|
108934
108975
|
displayName: "GLM",
|
|
@@ -108938,12 +108979,12 @@ var providers = {
|
|
|
108938
108979
|
"kimi-k3": {
|
|
108939
108980
|
displayName: "Kimi K3",
|
|
108940
108981
|
resolve: "vercel/moonshotai/kimi-k3",
|
|
108941
|
-
effort: ["low", "high", "max"]
|
|
108982
|
+
effort: ["none", "low", "high", "max"]
|
|
108942
108983
|
},
|
|
108943
|
-
// the gateway publishes no effort ladder for this id.
|
|
108944
108984
|
"muse-spark": {
|
|
108945
108985
|
displayName: "Muse Spark",
|
|
108946
|
-
resolve: "vercel/meta/muse-spark-1.3"
|
|
108986
|
+
resolve: "vercel/meta/muse-spark-1.3",
|
|
108987
|
+
effort: ["minimal", "low", "medium", "high", "xhigh"]
|
|
108947
108988
|
}
|
|
108948
108989
|
}
|
|
108949
108990
|
})
|
|
@@ -110005,7 +110046,7 @@ var import_semver = __toESM(require_semver2(), 1);
|
|
|
110005
110046
|
// package.json
|
|
110006
110047
|
var package_default = {
|
|
110007
110048
|
name: "pullfrog",
|
|
110008
|
-
version: "0.1.
|
|
110049
|
+
version: "0.1.83",
|
|
110009
110050
|
cliContractVersion: "1",
|
|
110010
110051
|
type: "module",
|
|
110011
110052
|
bin: {
|
|
@@ -110022,6 +110063,7 @@ var package_default = {
|
|
|
110022
110063
|
typecheck: "tsc --noEmit",
|
|
110023
110064
|
build: "node esbuild.config.js && tsc -p tsconfig.exports.json",
|
|
110024
110065
|
"check:entrypoints": "nub scripts/check-entrypoint-imports.ts",
|
|
110066
|
+
"check:secret-commands": "nub scripts/check-secret-commands.ts",
|
|
110025
110067
|
docker: "nub docker.ts",
|
|
110026
110068
|
play: "nub play.ts",
|
|
110027
110069
|
runtest: "nub test/run.ts",
|
|
@@ -110032,7 +110074,7 @@ var package_default = {
|
|
|
110032
110074
|
},
|
|
110033
110075
|
devDependencies: {
|
|
110034
110076
|
"@actions/core": "^1.11.1",
|
|
110035
|
-
"@anthropic-ai/claude-code": "2.1.
|
|
110077
|
+
"@anthropic-ai/claude-code": "2.1.280",
|
|
110036
110078
|
"@ark/fs": "0.56.0",
|
|
110037
110079
|
"@ark/util": "0.56.0",
|
|
110038
110080
|
"@clack/prompts": "^1.2.0",
|
|
@@ -110642,7 +110684,7 @@ process.stdin.on("end", () => {
|
|
|
110642
110684
|
});
|
|
110643
110685
|
`;
|
|
110644
110686
|
}
|
|
110645
|
-
function buildClaudePretoolGateSettings(scriptAbsolutePath,
|
|
110687
|
+
function buildClaudePretoolGateSettings(scriptAbsolutePath, denyRules) {
|
|
110646
110688
|
return {
|
|
110647
110689
|
hooks: {
|
|
110648
110690
|
PreToolUse: [
|
|
@@ -110662,7 +110704,7 @@ function buildClaudePretoolGateSettings(scriptAbsolutePath, execToolDenyRules) {
|
|
|
110662
110704
|
}
|
|
110663
110705
|
]
|
|
110664
110706
|
},
|
|
110665
|
-
permissions: { deny:
|
|
110707
|
+
permissions: { deny: denyRules }
|
|
110666
110708
|
};
|
|
110667
110709
|
}
|
|
110668
110710
|
|
|
@@ -111525,12 +111567,22 @@ async function installClaudeCli() {
|
|
|
111525
111567
|
installDependencies: true
|
|
111526
111568
|
});
|
|
111527
111569
|
}
|
|
111528
|
-
var CLAUDE_EXEC_TOOLS = ["Bash", "Monitor", "REPL", "Workflow"];
|
|
111529
|
-
var
|
|
111570
|
+
var CLAUDE_EXEC_TOOLS = ["Bash", "PowerShell", "Monitor", "REPL", "Workflow"];
|
|
111571
|
+
var CLAUDE_DENIED_TOOLS = [
|
|
111530
111572
|
...CLAUDE_EXEC_TOOLS,
|
|
111531
|
-
|
|
111573
|
+
"DesignSync",
|
|
111574
|
+
"Artifact",
|
|
111575
|
+
"ShareOnboardingGuide",
|
|
111576
|
+
"SendMessage",
|
|
111577
|
+
"ListAgents",
|
|
111578
|
+
"PushNotification",
|
|
111579
|
+
"RemoteTrigger"
|
|
111580
|
+
];
|
|
111581
|
+
var CLAUDE_DENY_RULES = [
|
|
111582
|
+
...CLAUDE_DENIED_TOOLS,
|
|
111583
|
+
...CLAUDE_DENIED_TOOLS.map((t) => `Agent(${t})`)
|
|
111532
111584
|
];
|
|
111533
|
-
var CLAUDE_DISALLOWED_TOOLS =
|
|
111585
|
+
var CLAUDE_DISALLOWED_TOOLS = CLAUDE_DENY_RULES.join(",");
|
|
111534
111586
|
function writeMcpConfig(ctx) {
|
|
111535
111587
|
const configDir = join4(ctx.tmpdir, ".claude");
|
|
111536
111588
|
mkdirSync4(configDir, { recursive: true });
|
|
@@ -111963,14 +112015,11 @@ function buildClaudeSettings(params) {
|
|
|
111963
112015
|
`Glob(${path4}/**)`,
|
|
111964
112016
|
`Glob(/${path4}/**)`
|
|
111965
112017
|
]);
|
|
111966
|
-
const gate = buildClaudePretoolGateSettings(
|
|
111967
|
-
params.pretoolGateScriptPath,
|
|
111968
|
-
CLAUDE_EXEC_TOOL_DENY_RULES
|
|
111969
|
-
);
|
|
112018
|
+
const gate = buildClaudePretoolGateSettings(params.pretoolGateScriptPath, CLAUDE_DENY_RULES);
|
|
111970
112019
|
const base = {
|
|
111971
112020
|
permissions: {
|
|
111972
112021
|
deny: [
|
|
111973
|
-
//
|
|
112022
|
+
// CLAUDE_DENIED_TOOLS — the authoritative, bypass-immune deny.
|
|
111974
112023
|
// `--disallowedTools` (a cliArg-source deny) leaked under
|
|
111975
112024
|
// `--dangerously-skip-permissions`; policySettings denies survive
|
|
111976
112025
|
// bypassPermissions mode. covers top-level + Agent(...) subagent use.
|
|
@@ -112184,7 +112233,6 @@ var claude = agent({
|
|
|
112184
112233
|
});
|
|
112185
112234
|
|
|
112186
112235
|
// agents/codex.ts
|
|
112187
|
-
var core3 = __toESM(require_core(), 1);
|
|
112188
112236
|
import { existsSync as existsSync5, mkdirSync as mkdirSync6, readFileSync as readFileSync3, writeFileSync as writeFileSync5 } from "node:fs";
|
|
112189
112237
|
import { join as join6 } from "node:path";
|
|
112190
112238
|
import { performance as performance6 } from "node:perf_hooks";
|
|
@@ -112470,6 +112518,15 @@ async function apiFetch(options) {
|
|
|
112470
112518
|
// utils/oauthWriteback.ts
|
|
112471
112519
|
var OAUTH_WRITEBACK_STATE = "oauth_writeback";
|
|
112472
112520
|
|
|
112521
|
+
// utils/secretCommands.ts
|
|
112522
|
+
var core3 = __toESM(require_core(), 1);
|
|
112523
|
+
function maskSecret(value2) {
|
|
112524
|
+
if (isGitHubActions) core3.setSecret(value2);
|
|
112525
|
+
}
|
|
112526
|
+
function saveSecretState(name, value2) {
|
|
112527
|
+
if (isGitHubActions) core3.saveState(name, value2);
|
|
112528
|
+
}
|
|
112529
|
+
|
|
112473
112530
|
// utils/secrets.ts
|
|
112474
112531
|
var SENSITIVE_PATTERNS = [
|
|
112475
112532
|
/_KEY$/i,
|
|
@@ -112818,8 +112875,8 @@ function toTodoWriteInput(item) {
|
|
|
112818
112875
|
}
|
|
112819
112876
|
var CODEX_MODEL_PRICING = {
|
|
112820
112877
|
"gpt-6-astra": { input: 10, cacheRead: 1, cacheWrite: 12.5, output: 50 },
|
|
112821
|
-
"gpt-
|
|
112822
|
-
"gpt-
|
|
112878
|
+
"gpt-6-sol": { input: 2, cacheRead: 0.2, cacheWrite: 2.5, output: 10 },
|
|
112879
|
+
"gpt-6-luna": { input: 0.1, cacheRead: 0.01, cacheWrite: 0.125, output: 0.5 },
|
|
112823
112880
|
"gpt-5.6-terra": { input: 2, cacheRead: 0.2, cacheWrite: 2.5, output: 12 }
|
|
112824
112881
|
};
|
|
112825
112882
|
function codexCostUsd(params) {
|
|
@@ -113057,7 +113114,7 @@ var codex = agent({
|
|
|
113057
113114
|
gatewayUrl: codexHomeAuth ? void 0 : getProviderGatewayUrl("openai/")
|
|
113058
113115
|
});
|
|
113059
113116
|
if (codexHomeAuth) {
|
|
113060
|
-
|
|
113117
|
+
saveSecretState(
|
|
113061
113118
|
OAUTH_WRITEBACK_STATE,
|
|
113062
113119
|
JSON.stringify({
|
|
113063
113120
|
apiToken: ctx.apiToken,
|
|
@@ -113142,7 +113199,6 @@ var codex = agent({
|
|
|
113142
113199
|
});
|
|
113143
113200
|
|
|
113144
113201
|
// agents/opencode.ts
|
|
113145
|
-
var core4 = __toESM(require_core(), 1);
|
|
113146
113202
|
import { spawn as nodeSpawn2 } from "node:child_process";
|
|
113147
113203
|
import { mkdirSync as mkdirSync7, writeFileSync as writeFileSync6 } from "node:fs";
|
|
113148
113204
|
import { join as join7 } from "node:path";
|
|
@@ -119584,7 +119640,7 @@ var opencode = agent({
|
|
|
119584
119640
|
});
|
|
119585
119641
|
}
|
|
119586
119642
|
if (writebacks.length > 0) {
|
|
119587
|
-
|
|
119643
|
+
saveSecretState(
|
|
119588
119644
|
OAUTH_WRITEBACK_STATE,
|
|
119589
119645
|
JSON.stringify({ apiToken: ctx.apiToken, entries: writebacks })
|
|
119590
119646
|
);
|
|
@@ -130679,7 +130735,7 @@ var Hono2 = class extends Hono {
|
|
|
130679
130735
|
}
|
|
130680
130736
|
};
|
|
130681
130737
|
|
|
130682
|
-
// node_modules/.pnpm/mcp-proxy@6.7.
|
|
130738
|
+
// node_modules/.pnpm/mcp-proxy@6.7.12/node_modules/mcp-proxy/dist/startStdioServer-C9HzKfjR.mjs
|
|
130683
130739
|
import { createRequire } from "node:module";
|
|
130684
130740
|
import { randomUUID as randomUUID2, timingSafeEqual } from "node:crypto";
|
|
130685
130741
|
|
|
@@ -140452,7 +140508,7 @@ var require_core$2 = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
140452
140508
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
140453
140509
|
const id_1 = require_id2();
|
|
140454
140510
|
const ref_1 = require_ref2();
|
|
140455
|
-
const
|
|
140511
|
+
const core8 = [
|
|
140456
140512
|
"$schema",
|
|
140457
140513
|
"$id",
|
|
140458
140514
|
"$defs",
|
|
@@ -140462,7 +140518,7 @@ var require_core$2 = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
140462
140518
|
id_1.default,
|
|
140463
140519
|
ref_1.default
|
|
140464
140520
|
];
|
|
140465
|
-
exports.default =
|
|
140521
|
+
exports.default = core8;
|
|
140466
140522
|
}));
|
|
140467
140523
|
var require_limitNumber2 = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
140468
140524
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -142600,7 +142656,7 @@ var require_json_schema_2019_09 = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
142600
142656
|
const metaSchema = require_schema$1();
|
|
142601
142657
|
const applicator = require_applicator$1();
|
|
142602
142658
|
const content = require_content$1();
|
|
142603
|
-
const
|
|
142659
|
+
const core8 = require_core$1();
|
|
142604
142660
|
const format2 = require_format3();
|
|
142605
142661
|
const metadata = require_meta_data$1();
|
|
142606
142662
|
const validation = require_validation$1();
|
|
@@ -142610,7 +142666,7 @@ var require_json_schema_2019_09 = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
142610
142666
|
metaSchema,
|
|
142611
142667
|
applicator,
|
|
142612
142668
|
content,
|
|
142613
|
-
|
|
142669
|
+
core8,
|
|
142614
142670
|
with$data(this, format2),
|
|
142615
142671
|
metadata,
|
|
142616
142672
|
with$data(this, validation)
|
|
@@ -143050,7 +143106,7 @@ var require_json_schema_2020_12 = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
143050
143106
|
const applicator = require_applicator2();
|
|
143051
143107
|
const unevaluated = require_unevaluated();
|
|
143052
143108
|
const content = require_content();
|
|
143053
|
-
const
|
|
143109
|
+
const core8 = require_core4();
|
|
143054
143110
|
const format2 = require_format_annotation();
|
|
143055
143111
|
const metadata = require_meta_data();
|
|
143056
143112
|
const validation = require_validation2();
|
|
@@ -143061,7 +143117,7 @@ var require_json_schema_2020_12 = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
143061
143117
|
applicator,
|
|
143062
143118
|
unevaluated,
|
|
143063
143119
|
content,
|
|
143064
|
-
|
|
143120
|
+
core8,
|
|
143065
143121
|
with$data(this, format2),
|
|
143066
143122
|
metadata,
|
|
143067
143123
|
with$data(this, validation)
|
|
@@ -146278,7 +146334,7 @@ function createMcpHandler(factory, options = {}) {
|
|
|
146278
146334
|
};
|
|
146279
146335
|
}
|
|
146280
146336
|
|
|
146281
|
-
// node_modules/.pnpm/mcp-proxy@6.7.
|
|
146337
|
+
// node_modules/.pnpm/mcp-proxy@6.7.12/node_modules/mcp-proxy/dist/startStdioServer-C9HzKfjR.mjs
|
|
146282
146338
|
import http from "http";
|
|
146283
146339
|
import { Http2ServerRequest } from "http2";
|
|
146284
146340
|
import { Readable } from "stream";
|
|
@@ -154503,7 +154559,7 @@ var require_core$22 = /* @__PURE__ */ __commonJSMin2(((exports) => {
|
|
|
154503
154559
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
154504
154560
|
const id_1 = require_id3();
|
|
154505
154561
|
const ref_1 = require_ref3();
|
|
154506
|
-
const
|
|
154562
|
+
const core8 = [
|
|
154507
154563
|
"$schema",
|
|
154508
154564
|
"$id",
|
|
154509
154565
|
"$defs",
|
|
@@ -154513,7 +154569,7 @@ var require_core$22 = /* @__PURE__ */ __commonJSMin2(((exports) => {
|
|
|
154513
154569
|
id_1.default,
|
|
154514
154570
|
ref_1.default
|
|
154515
154571
|
];
|
|
154516
|
-
exports.default =
|
|
154572
|
+
exports.default = core8;
|
|
154517
154573
|
}));
|
|
154518
154574
|
var require_limitNumber3 = /* @__PURE__ */ __commonJSMin2(((exports) => {
|
|
154519
154575
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -156651,7 +156707,7 @@ var require_json_schema_2019_092 = /* @__PURE__ */ __commonJSMin2(((exports) =>
|
|
|
156651
156707
|
const metaSchema = require_schema$12();
|
|
156652
156708
|
const applicator = require_applicator$12();
|
|
156653
156709
|
const content = require_content$12();
|
|
156654
|
-
const
|
|
156710
|
+
const core8 = require_core$12();
|
|
156655
156711
|
const format2 = require_format4();
|
|
156656
156712
|
const metadata = require_meta_data$12();
|
|
156657
156713
|
const validation = require_validation$12();
|
|
@@ -156661,7 +156717,7 @@ var require_json_schema_2019_092 = /* @__PURE__ */ __commonJSMin2(((exports) =>
|
|
|
156661
156717
|
metaSchema,
|
|
156662
156718
|
applicator,
|
|
156663
156719
|
content,
|
|
156664
|
-
|
|
156720
|
+
core8,
|
|
156665
156721
|
with$data(this, format2),
|
|
156666
156722
|
metadata,
|
|
156667
156723
|
with$data(this, validation)
|
|
@@ -157101,7 +157157,7 @@ var require_json_schema_2020_122 = /* @__PURE__ */ __commonJSMin2(((exports) =>
|
|
|
157101
157157
|
const applicator = require_applicator3();
|
|
157102
157158
|
const unevaluated = require_unevaluated2();
|
|
157103
157159
|
const content = require_content2();
|
|
157104
|
-
const
|
|
157160
|
+
const core8 = require_core5();
|
|
157105
157161
|
const format2 = require_format_annotation2();
|
|
157106
157162
|
const metadata = require_meta_data2();
|
|
157107
157163
|
const validation = require_validation3();
|
|
@@ -157112,7 +157168,7 @@ var require_json_schema_2020_122 = /* @__PURE__ */ __commonJSMin2(((exports) =>
|
|
|
157112
157168
|
applicator,
|
|
157113
157169
|
unevaluated,
|
|
157114
157170
|
content,
|
|
157115
|
-
|
|
157171
|
+
core8,
|
|
157116
157172
|
with$data(this, format2),
|
|
157117
157173
|
metadata,
|
|
157118
157174
|
with$data(this, validation)
|
|
@@ -157683,7 +157739,7 @@ var SseError = class extends Error {
|
|
|
157683
157739
|
}
|
|
157684
157740
|
};
|
|
157685
157741
|
|
|
157686
|
-
// node_modules/.pnpm/mcp-proxy@6.7.
|
|
157742
|
+
// node_modules/.pnpm/mcp-proxy@6.7.12/node_modules/mcp-proxy/dist/startStdioServer-C9HzKfjR.mjs
|
|
157687
157743
|
var __create4 = Object.create;
|
|
157688
157744
|
var __defProp$1 = Object.defineProperty;
|
|
157689
157745
|
var __getOwnPropDesc4 = Object.getOwnPropertyDescriptor;
|
|
@@ -174696,6 +174752,10 @@ var applyCorsHeaders = (req, res, corsOptions) => {
|
|
|
174696
174752
|
console.error("[mcp-proxy] error parsing origin", error62);
|
|
174697
174753
|
}
|
|
174698
174754
|
};
|
|
174755
|
+
var canServeModernRoute = (server) => {
|
|
174756
|
+
const target = server instanceof McpServer ? server.server : server;
|
|
174757
|
+
return Array.isArray(target._supportedProtocolVersions);
|
|
174758
|
+
};
|
|
174699
174759
|
var createModernLeg = ({ createServer: createServer4, onClose, onConnect, onListenSubscriptions }) => {
|
|
174700
174760
|
const requestContext = new AsyncLocalStorage2();
|
|
174701
174761
|
const createInstance = async ({ authResult, body, req }) => {
|
|
@@ -174715,6 +174775,18 @@ var createModernLeg = ({ createServer: createServer4, onClose, onConnect, onList
|
|
|
174715
174775
|
};
|
|
174716
174776
|
target.onclose = teardown;
|
|
174717
174777
|
try {
|
|
174778
|
+
if (!canServeModernRoute(server)) throw new Response(JSON.stringify({
|
|
174779
|
+
error: {
|
|
174780
|
+
code: -32e3,
|
|
174781
|
+
data: { reason: "server_missing_modern_protocol_support" },
|
|
174782
|
+
message: "Unsupported protocol version: the server instance cannot serve the 2026-07-28 protocol revision. It was built by the 1.x MCP SDK (e.g. fastmcp <=4.x pulling mcp-proxy through its `^6.4.6` range), which does not declare `_supportedProtocolVersions`. Upgrade the framework that builds it, or serve only 2025-era clients (`modern: false`)."
|
|
174783
|
+
},
|
|
174784
|
+
id: getRequestId(body),
|
|
174785
|
+
jsonrpc: "2.0"
|
|
174786
|
+
}), {
|
|
174787
|
+
headers: { "content-type": "application/json" },
|
|
174788
|
+
status: 400
|
|
174789
|
+
});
|
|
174718
174790
|
if (onListenSubscriptions) {
|
|
174719
174791
|
const listenUris = readListenSubscriptions(body);
|
|
174720
174792
|
if (listenUris.length > 0) releaseSubscriptions = await onListenSubscriptions(listenUris);
|
|
@@ -187817,7 +187889,7 @@ this usually means your local branch has commits that were never pushed \u2014 s
|
|
|
187817
187889
|
}
|
|
187818
187890
|
|
|
187819
187891
|
// utils/github.ts
|
|
187820
|
-
var
|
|
187892
|
+
var core4 = __toESM(require_core(), 1);
|
|
187821
187893
|
import { createSign } from "node:crypto";
|
|
187822
187894
|
import { rename, writeFile } from "node:fs/promises";
|
|
187823
187895
|
import { dirname as dirname3, join as join12 } from "node:path";
|
|
@@ -192066,9 +192138,7 @@ async function fetchIdTokenFromStash(creds) {
|
|
|
192066
192138
|
if (!body.value) {
|
|
192067
192139
|
throw new Error("ID token response has no value field");
|
|
192068
192140
|
}
|
|
192069
|
-
|
|
192070
|
-
core5.setSecret(body.value);
|
|
192071
|
-
}
|
|
192141
|
+
maskSecret(body.value);
|
|
192072
192142
|
return body.value;
|
|
192073
192143
|
}
|
|
192074
192144
|
function translateIdTokenError(error62) {
|
|
@@ -192080,7 +192150,7 @@ function translateIdTokenError(error62) {
|
|
|
192080
192150
|
var mintIdToken = op(
|
|
192081
192151
|
async () => {
|
|
192082
192152
|
try {
|
|
192083
|
-
return await
|
|
192153
|
+
return await core4.getIDToken(OIDC_AUDIENCE);
|
|
192084
192154
|
} catch (error62) {
|
|
192085
192155
|
throw translateIdTokenError(error62);
|
|
192086
192156
|
}
|
|
@@ -193418,6 +193488,15 @@ function buildImplementPlanLink(ctx, issueNumber, commentId) {
|
|
|
193418
193488
|
const apiUrl = getApiUrl();
|
|
193419
193489
|
return `[Implement plan \u2794](${apiUrl}/trigger/${ctx.repo.owner}/${ctx.repo.name}/${issueNumber}?action=implement&comment_id=${commentId})`;
|
|
193420
193490
|
}
|
|
193491
|
+
function buildEnrichmentLinks(ctx) {
|
|
193492
|
+
const event = ctx.payload.event;
|
|
193493
|
+
if (event.trigger !== "issues_opened" || event.is_pr || ctx.payload.prompt || ctx.toolState.selectedMode === "Build") {
|
|
193494
|
+
return [];
|
|
193495
|
+
}
|
|
193496
|
+
return [
|
|
193497
|
+
`[Implement a fix \u2794](${getApiUrl()}/trigger/${ctx.repo.owner}/${ctx.repo.name}/${event.issue_number}?action=build)`
|
|
193498
|
+
];
|
|
193499
|
+
}
|
|
193421
193500
|
function addFooter(ctx, body) {
|
|
193422
193501
|
if (/<br\s*\/?>[ \t]*\n(?!\s*\n)/i.test(body)) {
|
|
193423
193502
|
throw new Error(
|
|
@@ -193454,13 +193533,14 @@ function CreateCommentTool(ctx) {
|
|
|
193454
193533
|
if (issueNumber === ctx.payload.event.issue_number) {
|
|
193455
193534
|
ctx.toolState.standaloneCommentId = result.data.id;
|
|
193456
193535
|
}
|
|
193457
|
-
|
|
193458
|
-
|
|
193536
|
+
const enrichmentLinks = issueNumber === ctx.payload.event.issue_number ? buildEnrichmentLinks(ctx) : [];
|
|
193537
|
+
if (commentType === "Plan" || enrichmentLinks.length > 0) {
|
|
193538
|
+
if (commentType === "Plan" && result.data.node_id) {
|
|
193459
193539
|
await patchWorkflowRunFields(ctx, { planCommentNodeId: result.data.node_id });
|
|
193460
193540
|
}
|
|
193461
|
-
const customParts = [buildImplementPlanLink(ctx, issueNumber, result.data.id)];
|
|
193541
|
+
const customParts = commentType === "Plan" ? [buildImplementPlanLink(ctx, issueNumber, result.data.id)] : enrichmentLinks;
|
|
193462
193542
|
const footer = buildCommentFooter(ctx, customParts);
|
|
193463
|
-
const bodyWithPlanLink = `${stripExistingFooter(
|
|
193543
|
+
const bodyWithPlanLink = `${stripExistingFooter(bodyWithFooter)}${footer}`;
|
|
193464
193544
|
const updateResult = await ctx.octokit.rest.issues.updateComment({
|
|
193465
193545
|
owner: ctx.repo.owner,
|
|
193466
193546
|
repo: ctx.repo.name,
|
|
@@ -193532,6 +193612,7 @@ async function reportProgress(ctx, params) {
|
|
|
193532
193612
|
}
|
|
193533
193613
|
const issueNumber = ctx.payload.event.issue_number ?? primaryRepoState(ctx.toolState).issueNumber;
|
|
193534
193614
|
const isPlanMode = ctx.toolState.selectedMode === "Plan";
|
|
193615
|
+
const enrichmentLinks = params.liveProgress ? [] : buildEnrichmentLinks(ctx);
|
|
193535
193616
|
const apiCtx = { octokit: ctx.octokit, owner: ctx.repo.owner, repo: ctx.repo.name };
|
|
193536
193617
|
if (target_plan_comment === true && ctx.toolState.existingPlanCommentId === void 0) {
|
|
193537
193618
|
log.warning("target_plan_comment requested but no existingPlanCommentId in tool state");
|
|
@@ -193539,7 +193620,7 @@ async function reportProgress(ctx, params) {
|
|
|
193539
193620
|
if (target_plan_comment === true && ctx.toolState.existingPlanCommentId !== void 0) {
|
|
193540
193621
|
const commentId = ctx.toolState.existingPlanCommentId;
|
|
193541
193622
|
const customParts = issueNumber !== void 0 ? [buildImplementPlanLink(ctx, issueNumber, commentId)] : void 0;
|
|
193542
|
-
const bodyWithoutFooter = stripExistingFooter(body);
|
|
193623
|
+
const bodyWithoutFooter = stripExistingFooter(fixDoubleEscapedString(body));
|
|
193543
193624
|
const footer = buildCommentFooter(ctx, customParts);
|
|
193544
193625
|
const bodyWithFooter = `${bodyWithoutFooter}${footer}`;
|
|
193545
193626
|
const result = await updateProgressComment(
|
|
@@ -193560,8 +193641,8 @@ async function reportProgress(ctx, params) {
|
|
|
193560
193641
|
}
|
|
193561
193642
|
const existingComment = ctx.toolState.progressComment;
|
|
193562
193643
|
if (existingComment) {
|
|
193563
|
-
const customParts = isPlanMode && issueNumber !== void 0 ? [buildImplementPlanLink(ctx, issueNumber, existingComment.id)] :
|
|
193564
|
-
const bodyWithoutFooter = stripExistingFooter(body);
|
|
193644
|
+
const customParts = isPlanMode && issueNumber !== void 0 ? [buildImplementPlanLink(ctx, issueNumber, existingComment.id)] : enrichmentLinks;
|
|
193645
|
+
const bodyWithoutFooter = stripExistingFooter(fixDoubleEscapedString(body));
|
|
193565
193646
|
const footer = buildCommentFooter(ctx, customParts);
|
|
193566
193647
|
const bodyWithFooter = `${bodyWithoutFooter}${footer}`;
|
|
193567
193648
|
let result;
|
|
@@ -193613,13 +193694,13 @@ async function reportProgress(ctx, params) {
|
|
|
193613
193694
|
);
|
|
193614
193695
|
ctx.toolState.progressComment = created.comment;
|
|
193615
193696
|
if (!params.liveProgress) ctx.toolState.wasUpdated = true;
|
|
193616
|
-
if (isPlanMode) {
|
|
193617
|
-
const customParts = [buildImplementPlanLink(ctx, issueNumber, created.comment.id)];
|
|
193618
|
-
const bodyWithoutFooter = stripExistingFooter(
|
|
193697
|
+
if (isPlanMode || enrichmentLinks.length > 0) {
|
|
193698
|
+
const customParts = isPlanMode ? [buildImplementPlanLink(ctx, issueNumber, created.comment.id)] : enrichmentLinks;
|
|
193699
|
+
const bodyWithoutFooter = stripExistingFooter(initialBody);
|
|
193619
193700
|
const footer = buildCommentFooter(ctx, customParts);
|
|
193620
193701
|
const bodyWithPlanLink = `${bodyWithoutFooter}${footer}`;
|
|
193621
193702
|
const updateResult = await updateProgressComment(apiCtx, created.comment, bodyWithPlanLink);
|
|
193622
|
-
if (updateResult.node_id) {
|
|
193703
|
+
if (isPlanMode && updateResult.node_id) {
|
|
193623
193704
|
await patchWorkflowRunFields(ctx, { planCommentNodeId: updateResult.node_id });
|
|
193624
193705
|
}
|
|
193625
193706
|
return {
|
|
@@ -197534,6 +197615,37 @@ function ResolveReviewThreadTool(ctx) {
|
|
|
197534
197615
|
});
|
|
197535
197616
|
}
|
|
197536
197617
|
|
|
197618
|
+
// mcp/searchIssues.ts
|
|
197619
|
+
var SearchIssues = type({
|
|
197620
|
+
terms: type.string.matching(/^[\p{L}\p{N}_./-]+$/u).atMostLength(40).array().atLeastLength(1).atMostLength(5).describe("1-5 keywords from the issue; no GitHub qualifiers or query operators")
|
|
197621
|
+
});
|
|
197622
|
+
function SearchIssuesTool(ctx) {
|
|
197623
|
+
return tool({
|
|
197624
|
+
name: "search_issues",
|
|
197625
|
+
description: "Find open or closed issues in this repository by keyword. Inspect promising matches with get_issue before deciding whether they are duplicates or related. Results are bounded, not an exhaustive duplicate check.",
|
|
197626
|
+
parameters: SearchIssues,
|
|
197627
|
+
execute: execute(async (params) => {
|
|
197628
|
+
const repoPath = `/repos/${ctx.repo.owner}/${ctx.repo.name}`.toLowerCase();
|
|
197629
|
+
const terms = params.terms.map((term) => `"${term}"`).join(" ");
|
|
197630
|
+
const response = await ctx.octokit.rest.search.issuesAndPullRequests({
|
|
197631
|
+
q: `repo:${ctx.repo.owner}/${ctx.repo.name} is:issue ${terms}`,
|
|
197632
|
+
per_page: 20
|
|
197633
|
+
});
|
|
197634
|
+
return {
|
|
197635
|
+
incomplete: response.data.incomplete_results || response.data.total_count > 20,
|
|
197636
|
+
issues: response.data.items.filter(
|
|
197637
|
+
(issue3) => new URL(issue3.repository_url).pathname.toLowerCase() === repoPath && !issue3.pull_request && issue3.number !== ctx.payload.event.issue_number
|
|
197638
|
+
).map((issue3) => ({
|
|
197639
|
+
number: issue3.number,
|
|
197640
|
+
title: issue3.title,
|
|
197641
|
+
url: issue3.html_url,
|
|
197642
|
+
state: issue3.state
|
|
197643
|
+
}))
|
|
197644
|
+
};
|
|
197645
|
+
})
|
|
197646
|
+
});
|
|
197647
|
+
}
|
|
197648
|
+
|
|
197537
197649
|
// mcp/selectMode.ts
|
|
197538
197650
|
var SelectModeParams = type({
|
|
197539
197651
|
mode: type.string.describe(
|
|
@@ -197948,6 +198060,9 @@ function buildCommonTools(ctx, outputSchema) {
|
|
|
197948
198060
|
if (hasSimilarIssues({ repoIntelligence: ctx.repoIntelligence, event: ctx.payload.event })) {
|
|
197949
198061
|
tools.push(SimilarIssuesTool(ctx));
|
|
197950
198062
|
}
|
|
198063
|
+
if (ctx.payload.event.issue_number !== void 0 && !ctx.payload.event.is_pr) {
|
|
198064
|
+
tools.push(SearchIssuesTool(ctx));
|
|
198065
|
+
}
|
|
197951
198066
|
const isStandalone = ctx.payload.event.trigger === "unknown";
|
|
197952
198067
|
if (isStandalone || outputSchema) {
|
|
197953
198068
|
tools.push(SetOutputTool(ctx, outputSchema));
|
|
@@ -199673,7 +199788,6 @@ function buildModelAccessError(input2) {
|
|
|
199673
199788
|
}
|
|
199674
199789
|
|
|
199675
199790
|
// utils/normalizeEnv.ts
|
|
199676
|
-
var core6 = __toESM(require_core(), 1);
|
|
199677
199791
|
function hasControlCharacter(value2) {
|
|
199678
199792
|
return [...value2].some((ch) => {
|
|
199679
199793
|
const code = ch.charCodeAt(0);
|
|
@@ -199699,7 +199813,7 @@ function sanitizeSecret(key, value2) {
|
|
|
199699
199813
|
`\xBB stripped whitespace from ${key} (whitespace in secret values breaks GitHub Actions log masking)`
|
|
199700
199814
|
);
|
|
199701
199815
|
}
|
|
199702
|
-
|
|
199816
|
+
maskSecret(trimmed);
|
|
199703
199817
|
return trimmed;
|
|
199704
199818
|
}
|
|
199705
199819
|
function normalizeEnv() {
|
|
@@ -199743,7 +199857,6 @@ function normalizeEnv() {
|
|
|
199743
199857
|
}
|
|
199744
199858
|
|
|
199745
199859
|
// utils/overrides.ts
|
|
199746
|
-
var core7 = __toESM(require_core(), 1);
|
|
199747
199860
|
var DENIED_OVERRIDE_NAMES = /* @__PURE__ */ new Set([
|
|
199748
199861
|
"GITHUB_TOKEN",
|
|
199749
199862
|
"GH_TOKEN",
|
|
@@ -199789,7 +199902,7 @@ function applyOverrides(params) {
|
|
|
199789
199902
|
denied.push(key);
|
|
199790
199903
|
continue;
|
|
199791
199904
|
}
|
|
199792
|
-
if (value2.length > 0)
|
|
199905
|
+
if (value2.length > 0) maskSecret(value2);
|
|
199793
199906
|
params.env[key] = value2;
|
|
199794
199907
|
applied.push(key);
|
|
199795
199908
|
}
|
|
@@ -199798,7 +199911,7 @@ function applyOverrides(params) {
|
|
|
199798
199911
|
}
|
|
199799
199912
|
|
|
199800
199913
|
// utils/payload.ts
|
|
199801
|
-
var
|
|
199914
|
+
var core5 = __toESM(require_core(), 1);
|
|
199802
199915
|
import { readFileSync as readFileSync7 } from "node:fs";
|
|
199803
199916
|
import { isAbsolute as isAbsolute2, resolve as resolve2 } from "node:path";
|
|
199804
199917
|
|
|
@@ -199941,8 +200054,8 @@ function assertDispatchPayloadIntact(promptInput) {
|
|
|
199941
200054
|
);
|
|
199942
200055
|
}
|
|
199943
200056
|
function resolvePromptInput() {
|
|
199944
|
-
const promptInput =
|
|
199945
|
-
const promptFile =
|
|
200057
|
+
const promptInput = core5.getInput("prompt");
|
|
200058
|
+
const promptFile = core5.getInput("prompt_file");
|
|
199946
200059
|
if (promptInput && promptFile) {
|
|
199947
200060
|
throw new Error("set exactly one of 'prompt' or 'prompt_file' inputs, not both.");
|
|
199948
200061
|
}
|
|
@@ -199976,7 +200089,7 @@ function resolvePromptFile(input2) {
|
|
|
199976
200089
|
}
|
|
199977
200090
|
function warnIfDeprecatedStatusChecks(value2) {
|
|
199978
200091
|
if (value2 !== void 0) {
|
|
199979
|
-
|
|
200092
|
+
core5.warning(
|
|
199980
200093
|
"`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."
|
|
199981
200094
|
);
|
|
199982
200095
|
}
|
|
@@ -199984,15 +200097,15 @@ function warnIfDeprecatedStatusChecks(value2) {
|
|
|
199984
200097
|
}
|
|
199985
200098
|
function resolveNonPromptInputs() {
|
|
199986
200099
|
return Inputs.omit("prompt", "prompt_file").assert({
|
|
199987
|
-
model:
|
|
199988
|
-
effort:
|
|
199989
|
-
debug:
|
|
199990
|
-
timeout:
|
|
199991
|
-
cwd:
|
|
199992
|
-
push:
|
|
199993
|
-
shell:
|
|
199994
|
-
status_checks: warnIfDeprecatedStatusChecks(
|
|
199995
|
-
progress_comments:
|
|
200100
|
+
model: core5.getInput("model") || void 0,
|
|
200101
|
+
effort: core5.getInput("effort") || void 0,
|
|
200102
|
+
debug: core5.getInput("debug") || void 0,
|
|
200103
|
+
timeout: core5.getInput("timeout") || void 0,
|
|
200104
|
+
cwd: core5.getInput("cwd") || void 0,
|
|
200105
|
+
push: core5.getInput("push") || void 0,
|
|
200106
|
+
shell: core5.getInput("shell") || void 0,
|
|
200107
|
+
status_checks: warnIfDeprecatedStatusChecks(core5.getInput("status_checks") || void 0),
|
|
200108
|
+
progress_comments: core5.getInput("progress_comments") || void 0
|
|
199996
200109
|
});
|
|
199997
200110
|
}
|
|
199998
200111
|
function resolvePayload(resolvedPromptInput, repoSettings) {
|
|
@@ -200063,7 +200176,7 @@ function resolvePayload(resolvedPromptInput, repoSettings) {
|
|
|
200063
200176
|
};
|
|
200064
200177
|
}
|
|
200065
200178
|
function resolveOutputSchema() {
|
|
200066
|
-
const raw2 =
|
|
200179
|
+
const raw2 = core5.getInput("output_schema");
|
|
200067
200180
|
if (!raw2) return void 0;
|
|
200068
200181
|
let parsed2;
|
|
200069
200182
|
try {
|
|
@@ -200078,11 +200191,8 @@ function resolveOutputSchema() {
|
|
|
200078
200191
|
return parsed2;
|
|
200079
200192
|
}
|
|
200080
200193
|
|
|
200081
|
-
// utils/proxy.ts
|
|
200082
|
-
var core10 = __toESM(require_core(), 1);
|
|
200083
|
-
|
|
200084
200194
|
// utils/token.ts
|
|
200085
|
-
var
|
|
200195
|
+
var core6 = __toESM(require_core(), 1);
|
|
200086
200196
|
import assert2 from "node:assert/strict";
|
|
200087
200197
|
var mcpTokenValue;
|
|
200088
200198
|
var refreshMcpTokenFn;
|
|
@@ -200090,7 +200200,7 @@ function getMcpTokenRefresh() {
|
|
|
200090
200200
|
return refreshMcpTokenFn;
|
|
200091
200201
|
}
|
|
200092
200202
|
function getJobToken() {
|
|
200093
|
-
const inputToken =
|
|
200203
|
+
const inputToken = core6.getInput("token");
|
|
200094
200204
|
if (inputToken) {
|
|
200095
200205
|
return inputToken;
|
|
200096
200206
|
}
|
|
@@ -200105,9 +200215,7 @@ async function resolveTokens(params) {
|
|
|
200105
200215
|
const externalToken = process.env.GH_TOKEN;
|
|
200106
200216
|
if (externalToken) {
|
|
200107
200217
|
mcpTokenValue = externalToken;
|
|
200108
|
-
|
|
200109
|
-
core9.setSecret(externalToken);
|
|
200110
|
-
}
|
|
200218
|
+
maskSecret(externalToken);
|
|
200111
200219
|
log.info("\xBB using external GH_TOKEN for both git and MCP");
|
|
200112
200220
|
return {
|
|
200113
200221
|
gitToken: externalToken,
|
|
@@ -200129,9 +200237,7 @@ async function resolveTokens(params) {
|
|
|
200129
200237
|
xrepoGrant: params.xrepoGrant,
|
|
200130
200238
|
permissions: gitPermissions
|
|
200131
200239
|
});
|
|
200132
|
-
|
|
200133
|
-
core9.setSecret(gitToken);
|
|
200134
|
-
}
|
|
200240
|
+
maskSecret(gitToken);
|
|
200135
200241
|
log.info(
|
|
200136
200242
|
`\xBB acquired git token (${Object.entries(gitPermissions).map((e) => e.join(":")).join(", ")})`
|
|
200137
200243
|
);
|
|
@@ -200150,9 +200256,7 @@ async function resolveTokens(params) {
|
|
|
200150
200256
|
xrepoGrant: params.xrepoGrant,
|
|
200151
200257
|
permissions: mcpPermissions
|
|
200152
200258
|
});
|
|
200153
|
-
|
|
200154
|
-
core9.setSecret(mcpToken);
|
|
200155
|
-
}
|
|
200259
|
+
maskSecret(mcpToken);
|
|
200156
200260
|
log.info(
|
|
200157
200261
|
`\xBB acquired scoped MCP token (${Object.entries(mcpPermissions).map((e) => e.join(":")).join(", ")})`
|
|
200158
200262
|
);
|
|
@@ -200160,7 +200264,7 @@ async function resolveTokens(params) {
|
|
|
200160
200264
|
let ghToken;
|
|
200161
200265
|
if (ghPermissions) {
|
|
200162
200266
|
ghToken = await acquireNewToken({ permissions: ghPermissions });
|
|
200163
|
-
|
|
200267
|
+
maskSecret(ghToken);
|
|
200164
200268
|
log.info(
|
|
200165
200269
|
`\xBB acquired gh token mirroring ${params.authorPermission} (${formatPermissions(ghPermissions)})`
|
|
200166
200270
|
);
|
|
@@ -200172,7 +200276,7 @@ async function resolveTokens(params) {
|
|
|
200172
200276
|
xrepoGrant: params.xrepoGrant,
|
|
200173
200277
|
permissions: { contents: "read" }
|
|
200174
200278
|
});
|
|
200175
|
-
|
|
200279
|
+
maskSecret(readToken);
|
|
200176
200280
|
log.info(`\xBB acquired cross-repo read token (contents:read, ${params.xrepo.read.length} repos)`);
|
|
200177
200281
|
}
|
|
200178
200282
|
mcpTokenValue = mcpToken;
|
|
@@ -200191,9 +200295,7 @@ async function resolveTokens(params) {
|
|
|
200191
200295
|
permissions: mcpPermissions,
|
|
200192
200296
|
oidc: params.oidc ?? void 0
|
|
200193
200297
|
}).then((fresh) => {
|
|
200194
|
-
|
|
200195
|
-
core9.setSecret(fresh);
|
|
200196
|
-
}
|
|
200298
|
+
maskSecret(fresh);
|
|
200197
200299
|
mcpTokenValue = fresh;
|
|
200198
200300
|
currentMcpToken = fresh;
|
|
200199
200301
|
log.warning("\xBB GitHub rejected the MCP token; re-acquired a fresh scoped MCP token");
|
|
@@ -200214,7 +200316,7 @@ async function resolveTokens(params) {
|
|
|
200214
200316
|
permissions: gitPermissions,
|
|
200215
200317
|
oidc: params.oidc ?? void 0
|
|
200216
200318
|
}).then((fresh) => {
|
|
200217
|
-
|
|
200319
|
+
maskSecret(fresh);
|
|
200218
200320
|
void revokeGitHubInstallationToken(currentGitToken);
|
|
200219
200321
|
currentGitToken = fresh;
|
|
200220
200322
|
log.warning("\xBB GitHub rejected the git token; re-acquired a fresh git token");
|
|
@@ -200232,7 +200334,7 @@ async function resolveTokens(params) {
|
|
|
200232
200334
|
permissions: { contents: "read" },
|
|
200233
200335
|
oidc: params.oidc ?? void 0
|
|
200234
200336
|
}).then((fresh) => {
|
|
200235
|
-
|
|
200337
|
+
maskSecret(fresh);
|
|
200236
200338
|
void revokeGitHubInstallationToken(read2);
|
|
200237
200339
|
currentReadToken = fresh;
|
|
200238
200340
|
log.warning("\xBB GitHub rejected the read token; re-acquired a fresh read token");
|
|
@@ -200446,7 +200548,7 @@ async function resolveProxyModel(ctx) {
|
|
|
200446
200548
|
});
|
|
200447
200549
|
if (!key) return;
|
|
200448
200550
|
process.env.OPENROUTER_API_KEY = key;
|
|
200449
|
-
|
|
200551
|
+
maskSecret(key);
|
|
200450
200552
|
ctx.payload.proxyModel = ctx.proxyModel;
|
|
200451
200553
|
ctx.toolState.model = ctx.proxyModel;
|
|
200452
200554
|
const label = ctx.oss ? "oss" : "router";
|
|
@@ -200524,7 +200626,7 @@ async function resolveTrialFallback(ctx) {
|
|
|
200524
200626
|
});
|
|
200525
200627
|
if (!key) return false;
|
|
200526
200628
|
process.env.OPENROUTER_API_KEY = key;
|
|
200527
|
-
|
|
200629
|
+
maskSecret(key);
|
|
200528
200630
|
ctx.payload.proxyModel = DEFAULT_PROXY_MODEL;
|
|
200529
200631
|
ctx.toolState.model = DEFAULT_PROXY_MODEL;
|
|
200530
200632
|
ctx.toolState.modelClamped = {
|
|
@@ -200675,6 +200777,7 @@ var defaultSettings = {
|
|
|
200675
200777
|
push: "restricted",
|
|
200676
200778
|
shell: "restricted",
|
|
200677
200779
|
prApproveEnabled: false,
|
|
200780
|
+
reviewDrafts: false,
|
|
200678
200781
|
autoMergeEnabled: false,
|
|
200679
200782
|
codexAgent: false,
|
|
200680
200783
|
signedCommits: false,
|
|
@@ -201228,7 +201331,7 @@ ${genericBody}`,
|
|
|
201228
201331
|
}
|
|
201229
201332
|
|
|
201230
201333
|
// utils/runLifecycle.ts
|
|
201231
|
-
var
|
|
201334
|
+
var core7 = __toESM(require_core(), 1);
|
|
201232
201335
|
|
|
201233
201336
|
// utils/autoMerge.ts
|
|
201234
201337
|
function hasBlockingHumanReview(reviews) {
|
|
@@ -201372,7 +201475,7 @@ async function dispatchFollowUpReReview(ctx, reviewedSha) {
|
|
|
201372
201475
|
});
|
|
201373
201476
|
if (pr.data.head.sha === reviewedSha) return;
|
|
201374
201477
|
if (pr.data.state !== "open") return;
|
|
201375
|
-
if (pr.data.draft) return;
|
|
201478
|
+
if (pr.data.draft && !ctx.reviewDrafts) return;
|
|
201376
201479
|
log.info(
|
|
201377
201480
|
`safety net: pr HEAD moved from ${reviewedSha.slice(0, 7)} to ${pr.data.head.sha.slice(0, 7)} and agent did not review inline \u2014 dispatching follow-up re-review`
|
|
201378
201481
|
);
|
|
@@ -201624,7 +201727,7 @@ async function finalizeSuccessRun(input2) {
|
|
|
201624
201727
|
}
|
|
201625
201728
|
if (input2.toolState.output) {
|
|
201626
201729
|
log.info(`::pullfrog-output::${Buffer.from(input2.toolState.output).toString("base64")}`);
|
|
201627
|
-
|
|
201730
|
+
core7.setOutput("result", input2.toolState.output);
|
|
201628
201731
|
}
|
|
201629
201732
|
if (input2.result.success) {
|
|
201630
201733
|
await approveAfterFix(input2.toolContext).catch((error62) => {
|
|
@@ -202205,6 +202308,7 @@ async function main() {
|
|
|
202205
202308
|
postCheckoutScript: runContext.repoSettings.postCheckoutScript,
|
|
202206
202309
|
prepushScript: runContext.repoSettings.prepushScript,
|
|
202207
202310
|
prApproveEnabled: runContext.repoSettings.prApproveEnabled,
|
|
202311
|
+
reviewDrafts: runContext.repoSettings.reviewDrafts,
|
|
202208
202312
|
autoMergeEnabled: runContext.repoSettings.autoMergeEnabled,
|
|
202209
202313
|
signedCommits: runContext.repoSettings.signedCommits,
|
|
202210
202314
|
repoIntelligence: runContext.repoSettings.repoIntelligence,
|
|
@@ -202536,7 +202640,7 @@ ieee754/index.js:
|
|
|
202536
202640
|
* MIT Licensed
|
|
202537
202641
|
*)
|
|
202538
202642
|
|
|
202539
|
-
mcp-proxy/dist/startStdioServer-
|
|
202643
|
+
mcp-proxy/dist/startStdioServer-C9HzKfjR.mjs:
|
|
202540
202644
|
(*!
|
|
202541
202645
|
* content-type
|
|
202542
202646
|
* Copyright(c) 2015 Douglas Christopher Wilson
|