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