pullfrog 0.1.21 → 0.1.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.mjs CHANGED
@@ -101018,6 +101018,18 @@ var providers = {
101018
101018
  }
101019
101019
  }
101020
101020
  }),
101021
+ "opencode-go": provider({
101022
+ displayName: "OpenCode Go",
101023
+ envVars: ["OPENCODE_API_KEY"],
101024
+ models: {
101025
+ "glm-5.1": {
101026
+ displayName: "GLM 5.1",
101027
+ resolve: "opencode-go/glm-5.1",
101028
+ openRouterResolve: "openrouter/z-ai/glm-5.1",
101029
+ preferred: true
101030
+ }
101031
+ }
101032
+ }),
101021
101033
  bedrock: provider({
101022
101034
  displayName: "Amazon Bedrock",
101023
101035
  envVars: ["AWS_BEARER_TOKEN_BEDROCK", "AWS_REGION", "BEDROCK_MODEL_ID"],
@@ -101855,7 +101867,7 @@ var import_semver = __toESM(require_semver2(), 1);
101855
101867
  // package.json
101856
101868
  var package_default = {
101857
101869
  name: "pullfrog",
101858
- version: "0.1.21",
101870
+ version: "0.1.23",
101859
101871
  type: "module",
101860
101872
  bin: {
101861
101873
  pullfrog: "dist/cli.mjs",
@@ -107929,8 +107941,12 @@ function buildSecurityConfig(ctx, model) {
107929
107941
  const slashIndex = model.indexOf("/");
107930
107942
  if (slashIndex > 0) {
107931
107943
  config3.enabled_providers = [model.slice(0, slashIndex).toLowerCase()];
107932
- if (model.startsWith("openrouter/moonshotai/")) {
107933
- const modelID = model.slice(slashIndex + 1);
107944
+ if (model.startsWith("openrouter/")) {
107945
+ const openrouterModelIDs = /* @__PURE__ */ new Set([model.slice(slashIndex + 1)]);
107946
+ const reviewerModel = deriveSubagentModels(model).reviewer;
107947
+ if (reviewerModel?.startsWith("openrouter/")) {
107948
+ openrouterModelIDs.add(reviewerModel.slice(reviewerModel.indexOf("/") + 1));
107949
+ }
107934
107950
  config3.provider = {
107935
107951
  ...config3.provider,
107936
107952
  openrouter: {
@@ -107939,7 +107955,7 @@ function buildSecurityConfig(ctx, model) {
107939
107955
  baseURL: "https://openrouter.ai/api/v1",
107940
107956
  apiKey: "{env:OPENROUTER_API_KEY}"
107941
107957
  },
107942
- models: { [modelID]: {} }
107958
+ models: Object.fromEntries([...openrouterModelIDs].map((id) => [id, {}]))
107943
107959
  }
107944
107960
  };
107945
107961
  }
@@ -117130,6 +117146,9 @@ function formatModelLabel(params) {
117130
117146
  // still render a friendly display name.
117131
117147
  modelAliases.find((a) => a.resolve === params.model || a.openRouterResolve === params.model);
117132
117148
  const displayName = alias?.displayName ?? params.model;
117149
+ if (params.oss) {
117150
+ return `\`${displayName}\` (free via [Pullfrog for OSS](https://pullfrog.com/for-oss))`;
117151
+ }
117133
117152
  const base = alias?.isFree ? `\`${displayName}\` (free)` : `\`${displayName}\``;
117134
117153
  if (!params.fallbackFrom) return base;
117135
117154
  return `${base} (credentials for ${providerDisplayName(params.fallbackFrom)} not configured)`;
@@ -117151,7 +117170,7 @@ function buildPullfrogFooter(params) {
117151
117170
  }
117152
117171
  if (params.model) {
117153
117172
  parts.push(
117154
- `Using ${formatModelLabel({ model: params.model, fallbackFrom: params.fallbackFrom })}`
117173
+ `Using ${formatModelLabel({ model: params.model, fallbackFrom: params.fallbackFrom, oss: params.oss })}`
117155
117174
  );
117156
117175
  }
117157
117176
  const allParts = [...parts, "[\u{1D54F}](https://x.com/pullfrogai)"];
@@ -117946,7 +117965,8 @@ function buildCommentFooter(ctx, customParts) {
117946
117965
  } : void 0,
117947
117966
  customParts,
117948
117967
  model: ctx.toolState.model,
117949
- fallbackFrom: ctx.toolState.modelFallback?.from
117968
+ fallbackFrom: ctx.toolState.modelFallback?.from,
117969
+ oss: ctx.oss
117950
117970
  });
117951
117971
  }
117952
117972
  function buildImplementPlanLink(ctx, issueNumber, commentId) {
@@ -152814,7 +152834,8 @@ async function createAndSubmitWithFooter(ctx, params, opts) {
152814
152834
  workflowRun: ctx.runId ? { owner: ctx.repo.owner, repo: ctx.repo.name, runId: ctx.runId, jobId: ctx.jobId } : void 0,
152815
152835
  customParts,
152816
152836
  model: ctx.toolState.model,
152817
- fallbackFrom: ctx.toolState.modelFallback?.from
152837
+ fallbackFrom: ctx.toolState.modelFallback?.from,
152838
+ oss: ctx.oss
152818
152839
  });
152819
152840
  return await ctx.octokit.rest.pulls.submitReview({
152820
152841
  owner: params.owner,
@@ -154238,7 +154259,8 @@ function buildPrBodyWithFooter(ctx, body) {
154238
154259
  triggeredBy: true,
154239
154260
  workflowRun: ctx.runId ? { owner: ctx.repo.owner, repo: ctx.repo.name, runId: ctx.runId, jobId: ctx.jobId } : void 0,
154240
154261
  model: ctx.toolState.model,
154241
- fallbackFrom: ctx.toolState.modelFallback?.from
154262
+ fallbackFrom: ctx.toolState.modelFallback?.from,
154263
+ oss: ctx.oss
154242
154264
  });
154243
154265
  const bodyWithoutFooter = stripExistingFooter(fixDoubleEscapedString(body));
154244
154266
  return `${bodyWithoutFooter}${footer}`;
@@ -160764,7 +160786,8 @@ ${ctx.error}` : ctx.error;
160764
160786
  workflowRun: runId ? { owner: repoContext.owner, repo: repoContext.name, runId } : void 0,
160765
160787
  customParts,
160766
160788
  model: ctx.toolState.model,
160767
- fallbackFrom: ctx.toolState.modelFallback?.from
160789
+ fallbackFrom: ctx.toolState.modelFallback?.from,
160790
+ oss: ctx.toolState.oss
160768
160791
  });
160769
160792
  const body = `${formattedError}${footer}`;
160770
160793
  const comment = ctx.toolState.progressComment;
@@ -161736,6 +161759,7 @@ async function main() {
161736
161759
  }
161737
161760
  const payload = resolvePayload(resolvedPromptInput, runContext.repoSettings);
161738
161761
  toolState.model = payload.model;
161762
+ toolState.oss = runContext.oss;
161739
161763
  if (payload.event.trigger === "pull_request_synchronize") {
161740
161764
  toolState.beforeSha = payload.event.before_sha;
161741
161765
  }
@@ -162980,7 +163004,7 @@ async function run2() {
162980
163004
  }
162981
163005
 
162982
163006
  // cli.ts
162983
- var VERSION10 = "0.1.21";
163007
+ var VERSION10 = "0.1.23";
162984
163008
  var bin = basename2(process.argv[1] || "");
162985
163009
  var PROG = bin === "pf" || bin === "pullfrog" ? bin : "pullfrog";
162986
163010
  var rawArgs = process.argv.slice(2);
package/dist/index.js CHANGED
@@ -99218,6 +99218,18 @@ var providers = {
99218
99218
  }
99219
99219
  }
99220
99220
  }),
99221
+ "opencode-go": provider({
99222
+ displayName: "OpenCode Go",
99223
+ envVars: ["OPENCODE_API_KEY"],
99224
+ models: {
99225
+ "glm-5.1": {
99226
+ displayName: "GLM 5.1",
99227
+ resolve: "opencode-go/glm-5.1",
99228
+ openRouterResolve: "openrouter/z-ai/glm-5.1",
99229
+ preferred: true
99230
+ }
99231
+ }
99232
+ }),
99221
99233
  bedrock: provider({
99222
99234
  displayName: "Amazon Bedrock",
99223
99235
  envVars: ["AWS_BEARER_TOKEN_BEDROCK", "AWS_REGION", "BEDROCK_MODEL_ID"],
@@ -100055,7 +100067,7 @@ var import_semver = __toESM(require_semver2(), 1);
100055
100067
  // package.json
100056
100068
  var package_default = {
100057
100069
  name: "pullfrog",
100058
- version: "0.1.21",
100070
+ version: "0.1.23",
100059
100071
  type: "module",
100060
100072
  bin: {
100061
100073
  pullfrog: "dist/cli.mjs",
@@ -106171,8 +106183,12 @@ function buildSecurityConfig(ctx, model) {
106171
106183
  const slashIndex = model.indexOf("/");
106172
106184
  if (slashIndex > 0) {
106173
106185
  config3.enabled_providers = [model.slice(0, slashIndex).toLowerCase()];
106174
- if (model.startsWith("openrouter/moonshotai/")) {
106175
- const modelID = model.slice(slashIndex + 1);
106186
+ if (model.startsWith("openrouter/")) {
106187
+ const openrouterModelIDs = /* @__PURE__ */ new Set([model.slice(slashIndex + 1)]);
106188
+ const reviewerModel = deriveSubagentModels(model).reviewer;
106189
+ if (reviewerModel?.startsWith("openrouter/")) {
106190
+ openrouterModelIDs.add(reviewerModel.slice(reviewerModel.indexOf("/") + 1));
106191
+ }
106176
106192
  config3.provider = {
106177
106193
  ...config3.provider,
106178
106194
  openrouter: {
@@ -106181,7 +106197,7 @@ function buildSecurityConfig(ctx, model) {
106181
106197
  baseURL: "https://openrouter.ai/api/v1",
106182
106198
  apiKey: "{env:OPENROUTER_API_KEY}"
106183
106199
  },
106184
- models: { [modelID]: {} }
106200
+ models: Object.fromEntries([...openrouterModelIDs].map((id) => [id, {}]))
106185
106201
  }
106186
106202
  };
106187
106203
  }
@@ -115372,6 +115388,9 @@ function formatModelLabel(params) {
115372
115388
  // still render a friendly display name.
115373
115389
  modelAliases.find((a) => a.resolve === params.model || a.openRouterResolve === params.model);
115374
115390
  const displayName = alias?.displayName ?? params.model;
115391
+ if (params.oss) {
115392
+ return `\`${displayName}\` (free via [Pullfrog for OSS](https://pullfrog.com/for-oss))`;
115393
+ }
115375
115394
  const base = alias?.isFree ? `\`${displayName}\` (free)` : `\`${displayName}\``;
115376
115395
  if (!params.fallbackFrom) return base;
115377
115396
  return `${base} (credentials for ${providerDisplayName(params.fallbackFrom)} not configured)`;
@@ -115393,7 +115412,7 @@ function buildPullfrogFooter(params) {
115393
115412
  }
115394
115413
  if (params.model) {
115395
115414
  parts.push(
115396
- `Using ${formatModelLabel({ model: params.model, fallbackFrom: params.fallbackFrom })}`
115415
+ `Using ${formatModelLabel({ model: params.model, fallbackFrom: params.fallbackFrom, oss: params.oss })}`
115397
115416
  );
115398
115417
  }
115399
115418
  const allParts = [...parts, "[\u{1D54F}](https://x.com/pullfrogai)"];
@@ -116188,7 +116207,8 @@ function buildCommentFooter(ctx, customParts) {
116188
116207
  } : void 0,
116189
116208
  customParts,
116190
116209
  model: ctx.toolState.model,
116191
- fallbackFrom: ctx.toolState.modelFallback?.from
116210
+ fallbackFrom: ctx.toolState.modelFallback?.from,
116211
+ oss: ctx.oss
116192
116212
  });
116193
116213
  }
116194
116214
  function buildImplementPlanLink(ctx, issueNumber, commentId) {
@@ -151056,7 +151076,8 @@ async function createAndSubmitWithFooter(ctx, params, opts) {
151056
151076
  workflowRun: ctx.runId ? { owner: ctx.repo.owner, repo: ctx.repo.name, runId: ctx.runId, jobId: ctx.jobId } : void 0,
151057
151077
  customParts,
151058
151078
  model: ctx.toolState.model,
151059
- fallbackFrom: ctx.toolState.modelFallback?.from
151079
+ fallbackFrom: ctx.toolState.modelFallback?.from,
151080
+ oss: ctx.oss
151060
151081
  });
151061
151082
  return await ctx.octokit.rest.pulls.submitReview({
151062
151083
  owner: params.owner,
@@ -152480,7 +152501,8 @@ function buildPrBodyWithFooter(ctx, body) {
152480
152501
  triggeredBy: true,
152481
152502
  workflowRun: ctx.runId ? { owner: ctx.repo.owner, repo: ctx.repo.name, runId: ctx.runId, jobId: ctx.jobId } : void 0,
152482
152503
  model: ctx.toolState.model,
152483
- fallbackFrom: ctx.toolState.modelFallback?.from
152504
+ fallbackFrom: ctx.toolState.modelFallback?.from,
152505
+ oss: ctx.oss
152484
152506
  });
152485
152507
  const bodyWithoutFooter = stripExistingFooter(fixDoubleEscapedString(body));
152486
152508
  return `${bodyWithoutFooter}${footer}`;
@@ -159006,7 +159028,8 @@ ${ctx.error}` : ctx.error;
159006
159028
  workflowRun: runId ? { owner: repoContext.owner, repo: repoContext.name, runId } : void 0,
159007
159029
  customParts,
159008
159030
  model: ctx.toolState.model,
159009
- fallbackFrom: ctx.toolState.modelFallback?.from
159031
+ fallbackFrom: ctx.toolState.modelFallback?.from,
159032
+ oss: ctx.toolState.oss
159010
159033
  });
159011
159034
  const body = `${formattedError}${footer}`;
159012
159035
  const comment = ctx.toolState.progressComment;
@@ -159978,6 +160001,7 @@ async function main() {
159978
160001
  }
159979
160002
  const payload = resolvePayload(resolvedPromptInput, runContext.repoSettings);
159980
160003
  toolState.model = payload.model;
160004
+ toolState.oss = runContext.oss;
159981
160005
  if (payload.event.trigger === "pull_request_synchronize") {
159982
160006
  toolState.beforeSha = payload.event.before_sha;
159983
160007
  }
package/dist/internal.js CHANGED
@@ -284,6 +284,18 @@ var providers = {
284
284
  }
285
285
  }
286
286
  }),
287
+ "opencode-go": provider({
288
+ displayName: "OpenCode Go",
289
+ envVars: ["OPENCODE_API_KEY"],
290
+ models: {
291
+ "glm-5.1": {
292
+ displayName: "GLM 5.1",
293
+ resolve: "opencode-go/glm-5.1",
294
+ openRouterResolve: "openrouter/z-ai/glm-5.1",
295
+ preferred: true
296
+ }
297
+ }
298
+ }),
287
299
  bedrock: provider({
288
300
  displayName: "Amazon Bedrock",
289
301
  envVars: ["AWS_BEARER_TOKEN_BEDROCK", "AWS_REGION", "BEDROCK_MODEL_ID"],
@@ -1127,6 +1139,9 @@ function formatModelLabel(params) {
1127
1139
  // still render a friendly display name.
1128
1140
  modelAliases.find((a) => a.resolve === params.model || a.openRouterResolve === params.model);
1129
1141
  const displayName = alias?.displayName ?? params.model;
1142
+ if (params.oss) {
1143
+ return `\`${displayName}\` (free via [Pullfrog for OSS](https://pullfrog.com/for-oss))`;
1144
+ }
1130
1145
  const base = alias?.isFree ? `\`${displayName}\` (free)` : `\`${displayName}\``;
1131
1146
  if (!params.fallbackFrom) return base;
1132
1147
  return `${base} (credentials for ${providerDisplayName(params.fallbackFrom)} not configured)`;
@@ -1148,7 +1163,7 @@ function buildPullfrogFooter(params) {
1148
1163
  }
1149
1164
  if (params.model) {
1150
1165
  parts.push(
1151
- `Using ${formatModelLabel({ model: params.model, fallbackFrom: params.fallbackFrom })}`
1166
+ `Using ${formatModelLabel({ model: params.model, fallbackFrom: params.fallbackFrom, oss: params.oss })}`
1152
1167
  );
1153
1168
  }
1154
1169
  const allParts = [...parts, "[\u{1D54F}](https://x.com/pullfrogai)"];
package/dist/models.d.ts CHANGED
@@ -85,6 +85,7 @@ export declare const providers: {
85
85
  deepseek: ProviderConfig;
86
86
  moonshotai: ProviderConfig;
87
87
  opencode: ProviderConfig;
88
+ "opencode-go": ProviderConfig;
88
89
  bedrock: ProviderConfig;
89
90
  vertex: ProviderConfig;
90
91
  openrouter: ProviderConfig;
@@ -108,6 +108,7 @@ export interface ToolState {
108
108
  modelFallback?: {
109
109
  from: string;
110
110
  } | undefined;
111
+ oss?: boolean | undefined;
111
112
  todoTracker?: TodoTracker | undefined;
112
113
  diffCoverage?: DiffCoverageState | undefined;
113
114
  agentDiagnostic?: AgentDiagnostic | undefined;
@@ -24,6 +24,12 @@ export interface BuildPullfrogFooterParams {
24
24
  * so the substitution is visible in PR comments + reviews.
25
25
  */
26
26
  fallbackFrom?: string | undefined;
27
+ /**
28
+ * true when the run's model costs are covered by the Pullfrog for OSS
29
+ * program — the footer renders `Using <model> (free via Pullfrog for OSS)`
30
+ * with the phrase linking to the OSS application page.
31
+ */
32
+ oss?: boolean | undefined;
27
33
  }
28
34
  /**
29
35
  * build a pullfrog footer with configurable parts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pullfrog",
3
- "version": "0.1.21",
3
+ "version": "0.1.23",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "pullfrog": "dist/cli.mjs",