pullfrog 0.1.41 → 0.1.42

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.
@@ -8,6 +8,9 @@ import { type AgentResult, type AgentRunContext, type AgentUsage, type PostRunIs
8
8
  *
9
9
  * the gate is anchored to `hadProgressComment` so silent runs (non-issue
10
10
  * events, dispatcher skipped seeding) don't fire a nudge there's no UI for.
11
+ * `expectsReviewOutput` overrides that anchor for runs where the dispatcher
12
+ * deliberately skipped seeding under `progressComments: disabled` — those still
13
+ * owe a review, and reading "no comment" as "no UI" would silently retire the gate.
11
14
  *
12
15
  * `Review` and `IncrementalReview` have different valid exits:
13
16
  * - Review: only `create_pull_request_review` counts. `report_progress` is
@@ -20,7 +23,7 @@ import { type AgentResult, type AgentRunContext, type AgentUsage, type PostRunIs
20
23
  * `task`-dispatched `reviewfrog` lens) calls `report_progress` and silences
21
24
  * the gate even though the orchestrator never submitted a review.
22
25
  */
23
- export declare function getUnsubmittedReview(toolState: ToolState): "Review" | "IncrementalReview" | null;
26
+ export declare function getUnsubmittedReview(toolState: ToolState, expectsReviewOutput?: boolean): "Review" | "IncrementalReview" | null;
24
27
  /**
25
28
  * run the user-configured stop hook.
26
29
  *
package/dist/cli.mjs CHANGED
@@ -101765,8 +101765,8 @@ var providers = {
101765
101765
  },
101766
101766
  "claude-opus": {
101767
101767
  displayName: "Claude Opus",
101768
- resolve: "anthropic/claude-opus-4-8",
101769
- openRouterResolve: "openrouter/anthropic/claude-opus-4.8",
101768
+ resolve: "anthropic/claude-opus-5",
101769
+ openRouterResolve: "openrouter/anthropic/claude-opus-5",
101770
101770
  preferred: true,
101771
101771
  subagentModel: "claude-sonnet"
101772
101772
  },
@@ -101964,8 +101964,8 @@ var providers = {
101964
101964
  },
101965
101965
  "claude-opus": {
101966
101966
  displayName: "Claude Opus",
101967
- resolve: "opencode/claude-opus-4-8",
101968
- openRouterResolve: "openrouter/anthropic/claude-opus-4.8",
101967
+ resolve: "opencode/claude-opus-5",
101968
+ openRouterResolve: "openrouter/anthropic/claude-opus-5",
101969
101969
  subagentModel: "claude-sonnet"
101970
101970
  },
101971
101971
  "claude-sonnet": {
@@ -103022,7 +103022,7 @@ var import_semver = __toESM(require_semver2(), 1);
103022
103022
  // package.json
103023
103023
  var package_default = {
103024
103024
  name: "pullfrog",
103025
- version: "0.1.41",
103025
+ version: "0.1.42",
103026
103026
  type: "module",
103027
103027
  bin: {
103028
103028
  pullfrog: "dist/cli.mjs",
@@ -104288,15 +104288,20 @@ var NON_COMMITTING_MODES = /* @__PURE__ */ new Set([
104288
104288
  ]);
104289
104289
 
104290
104290
  // agents/postRun.ts
104291
- function getUnsubmittedReview(toolState) {
104291
+ function getUnsubmittedReview(toolState, expectsReviewOutput2 = toolState.hadProgressComment) {
104292
104292
  const mode = toolState.selectedMode;
104293
- if (!toolState.hadProgressComment) return null;
104293
+ if (!expectsReviewOutput2) return null;
104294
104294
  if (mode === "Review") return toolState.review ? null : "Review";
104295
104295
  if (mode === "IncrementalReview") {
104296
104296
  return toolState.review || toolState.finalSummaryWritten ? null : "IncrementalReview";
104297
104297
  }
104298
104298
  return null;
104299
104299
  }
104300
+ function expectsReviewOutput(ctx) {
104301
+ if (ctx.toolState.hadProgressComment) return true;
104302
+ if (ctx.payload.progressComments) return false;
104303
+ return ctx.payload.event.silent !== true && ctx.payload.event.issue_number !== void 0;
104304
+ }
104300
104305
  function buildStopHookPrompt(failure2) {
104301
104306
  return [
104302
104307
  `STOP HOOK FAILED \u2014 the repo-configured stop hook exited with code ${failure2.exitCode}. your work is not done until the hook exits cleanly. address the issue below and push any resulting changes to a pull request.`,
@@ -104360,7 +104365,7 @@ async function collectPostRunIssues(ctx, options = {}) {
104360
104365
  const stale = await isSummaryUnchanged(summaryFilePath2, summarySeed);
104361
104366
  if (stale) issues.summaryStale = { filePath: summaryFilePath2 };
104362
104367
  }
104363
- const unsubmittedMode = getUnsubmittedReview(ctx.toolState);
104368
+ const unsubmittedMode = getUnsubmittedReview(ctx.toolState, expectsReviewOutput(ctx));
104364
104369
  if (unsubmittedMode) issues.unsubmittedReview = unsubmittedMode;
104365
104370
  return issues;
104366
104371
  }
@@ -160072,6 +160077,7 @@ function validateCompatibility(payloadVersion, actionVersion) {
160072
160077
  var ShellPermissionInput = type.enumerated("disabled", "restricted", "enabled");
160073
160078
  var PushPermissionInput = type.enumerated("disabled", "restricted", "enabled");
160074
160079
  var StatusChecksInput = type.enumerated("disabled", "enabled");
160080
+ var ProgressCommentsInput = type.enumerated("disabled", "enabled");
160075
160081
  var JsonPayload = type({
160076
160082
  "~pullfrog": "true",
160077
160083
  version: "string",
@@ -160111,6 +160117,7 @@ var Inputs = type({
160111
160117
  "push?": PushPermissionInput.or("undefined"),
160112
160118
  "shell?": ShellPermissionInput.or("undefined"),
160113
160119
  "status_checks?": StatusChecksInput.or("undefined"),
160120
+ "progress_comments?": ProgressCommentsInput.or("undefined"),
160114
160121
  "cwd?": type.string.or("undefined"),
160115
160122
  "output_schema?": type.string.or("undefined")
160116
160123
  });
@@ -160164,7 +160171,8 @@ function resolveNonPromptInputs() {
160164
160171
  cwd: core4.getInput("cwd") || void 0,
160165
160172
  push: core4.getInput("push") || void 0,
160166
160173
  shell: core4.getInput("shell") || void 0,
160167
- status_checks: core4.getInput("status_checks") || void 0
160174
+ status_checks: core4.getInput("status_checks") || void 0,
160175
+ progress_comments: core4.getInput("progress_comments") || void 0
160168
160176
  });
160169
160177
  }
160170
160178
  var isPullfrog = (actor) => {
@@ -160214,6 +160222,9 @@ function resolvePayload(resolvedPromptInput, repoSettings) {
160214
160222
  // opt-in commit-status check-runs (branch protection). workflow-level
160215
160223
  // static input, off unless the repo's pullfrog.yml sets status_checks: enabled.
160216
160224
  statusChecks: inputs.status_checks === "enabled",
160225
+ // temporary progress chrome. the workflow input is the source of truth when
160226
+ // set (mirrors `push`); otherwise the repo setting decides. defaults to true.
160227
+ progressComments: inputs.progress_comments === void 0 ? repoSettings.progressComments : inputs.progress_comments === "enabled",
160217
160228
  // set by proxy logic in main.ts when routing through OpenRouter
160218
160229
  proxyModel: void 0
160219
160230
  };
@@ -160367,6 +160378,9 @@ async function reportProgress(ctx, params) {
160367
160378
  if (ctx.payload.event.silent) {
160368
160379
  return { body, action: "skipped" };
160369
160380
  }
160381
+ if (params.liveProgress && !ctx.payload.progressComments) {
160382
+ return { body, action: "skipped" };
160383
+ }
160370
160384
  const issueNumber = ctx.payload.event.issue_number ?? primaryRepoState(ctx.toolState).issueNumber;
160371
160385
  const isPlanMode = ctx.toolState.selectedMode === "Plan";
160372
160386
  const apiCtx = { octokit: ctx.octokit, owner: ctx.repo.owner, repo: ctx.repo.name };
@@ -160520,6 +160534,7 @@ ${collapsible}`;
160520
160534
  async function deleteProgressComment(ctx) {
160521
160535
  const existing = ctx.toolState.progressComment;
160522
160536
  if (!existing) {
160537
+ ctx.toolState.progressComment = null;
160523
160538
  return false;
160524
160539
  }
160525
160540
  try {
@@ -166926,7 +166941,9 @@ async function handleAgentResult(ctx) {
166926
166941
  const toolState = ctx.toolContext.toolState;
166927
166942
  const mode = toolState.selectedMode;
166928
166943
  const isReviewMode = mode === "Review" || mode === "IncrementalReview";
166929
- if (!isReviewMode && !toolState.wasUpdated && toolState.hadProgressComment && !ctx.silent) {
166944
+ const payload = ctx.toolContext.payload;
166945
+ const hasCommentTarget = toolState.hadProgressComment || !payload.progressComments && payload.event.issue_number !== void 0;
166946
+ if (!isReviewMode && !toolState.wasUpdated && hasCommentTarget && !ctx.silent) {
166930
166947
  const tracker = toolState.todoTracker;
166931
166948
  if (tracker) {
166932
166949
  tracker.cancel();
@@ -166982,6 +166999,7 @@ var defaultSettings = {
166982
166999
  prApproveEnabled: false,
166983
167000
  autoMergeEnabled: false,
166984
167001
  signedCommits: false,
167002
+ progressComments: true,
166985
167003
  modeInstructions: {},
166986
167004
  learnings: null,
166987
167005
  learningsHeadings: [],
@@ -167890,6 +167908,9 @@ async function main() {
167890
167908
  toolState.model = payload.model;
167891
167909
  toolState.oss = runContext.oss;
167892
167910
  toolState.shaPinned = isActionPinnedToSha();
167911
+ if (payload.event.issue_number !== void 0) {
167912
+ primaryRepoState(toolState).issueNumber = payload.event.issue_number;
167913
+ }
167893
167914
  if (payload.event.trigger === "pull_request_synchronize") {
167894
167915
  primaryRepoState(toolState).beforeSha = payload.event.before_sha;
167895
167916
  }
@@ -169309,7 +169330,7 @@ async function runCli4(input) {
169309
169330
  }
169310
169331
 
169311
169332
  // cli.ts
169312
- var VERSION10 = "0.1.41";
169333
+ var VERSION10 = "0.1.42";
169313
169334
  var bin = basename2(process.argv[1] || "");
169314
169335
  var PROG = bin === "pf" || bin === "pullfrog" ? bin : "pullfrog";
169315
169336
  var rawArgs = process.argv.slice(2);
package/dist/index.js CHANGED
@@ -99836,8 +99836,8 @@ var providers = {
99836
99836
  },
99837
99837
  "claude-opus": {
99838
99838
  displayName: "Claude Opus",
99839
- resolve: "anthropic/claude-opus-4-8",
99840
- openRouterResolve: "openrouter/anthropic/claude-opus-4.8",
99839
+ resolve: "anthropic/claude-opus-5",
99840
+ openRouterResolve: "openrouter/anthropic/claude-opus-5",
99841
99841
  preferred: true,
99842
99842
  subagentModel: "claude-sonnet"
99843
99843
  },
@@ -100035,8 +100035,8 @@ var providers = {
100035
100035
  },
100036
100036
  "claude-opus": {
100037
100037
  displayName: "Claude Opus",
100038
- resolve: "opencode/claude-opus-4-8",
100039
- openRouterResolve: "openrouter/anthropic/claude-opus-4.8",
100038
+ resolve: "opencode/claude-opus-5",
100039
+ openRouterResolve: "openrouter/anthropic/claude-opus-5",
100040
100040
  subagentModel: "claude-sonnet"
100041
100041
  },
100042
100042
  "claude-sonnet": {
@@ -101093,7 +101093,7 @@ var import_semver = __toESM(require_semver2(), 1);
101093
101093
  // package.json
101094
101094
  var package_default = {
101095
101095
  name: "pullfrog",
101096
- version: "0.1.41",
101096
+ version: "0.1.42",
101097
101097
  type: "module",
101098
101098
  bin: {
101099
101099
  pullfrog: "dist/cli.mjs",
@@ -102359,15 +102359,20 @@ var NON_COMMITTING_MODES = /* @__PURE__ */ new Set([
102359
102359
  ]);
102360
102360
 
102361
102361
  // agents/postRun.ts
102362
- function getUnsubmittedReview(toolState) {
102362
+ function getUnsubmittedReview(toolState, expectsReviewOutput2 = toolState.hadProgressComment) {
102363
102363
  const mode = toolState.selectedMode;
102364
- if (!toolState.hadProgressComment) return null;
102364
+ if (!expectsReviewOutput2) return null;
102365
102365
  if (mode === "Review") return toolState.review ? null : "Review";
102366
102366
  if (mode === "IncrementalReview") {
102367
102367
  return toolState.review || toolState.finalSummaryWritten ? null : "IncrementalReview";
102368
102368
  }
102369
102369
  return null;
102370
102370
  }
102371
+ function expectsReviewOutput(ctx) {
102372
+ if (ctx.toolState.hadProgressComment) return true;
102373
+ if (ctx.payload.progressComments) return false;
102374
+ return ctx.payload.event.silent !== true && ctx.payload.event.issue_number !== void 0;
102375
+ }
102371
102376
  function buildStopHookPrompt(failure2) {
102372
102377
  return [
102373
102378
  `STOP HOOK FAILED \u2014 the repo-configured stop hook exited with code ${failure2.exitCode}. your work is not done until the hook exits cleanly. address the issue below and push any resulting changes to a pull request.`,
@@ -102431,7 +102436,7 @@ async function collectPostRunIssues(ctx, options = {}) {
102431
102436
  const stale = await isSummaryUnchanged(summaryFilePath2, summarySeed);
102432
102437
  if (stale) issues.summaryStale = { filePath: summaryFilePath2 };
102433
102438
  }
102434
- const unsubmittedMode = getUnsubmittedReview(ctx.toolState);
102439
+ const unsubmittedMode = getUnsubmittedReview(ctx.toolState, expectsReviewOutput(ctx));
102435
102440
  if (unsubmittedMode) issues.unsubmittedReview = unsubmittedMode;
102436
102441
  return issues;
102437
102442
  }
@@ -158185,6 +158190,7 @@ function validateCompatibility(payloadVersion, actionVersion) {
158185
158190
  var ShellPermissionInput = type.enumerated("disabled", "restricted", "enabled");
158186
158191
  var PushPermissionInput = type.enumerated("disabled", "restricted", "enabled");
158187
158192
  var StatusChecksInput = type.enumerated("disabled", "enabled");
158193
+ var ProgressCommentsInput = type.enumerated("disabled", "enabled");
158188
158194
  var JsonPayload = type({
158189
158195
  "~pullfrog": "true",
158190
158196
  version: "string",
@@ -158224,6 +158230,7 @@ var Inputs = type({
158224
158230
  "push?": PushPermissionInput.or("undefined"),
158225
158231
  "shell?": ShellPermissionInput.or("undefined"),
158226
158232
  "status_checks?": StatusChecksInput.or("undefined"),
158233
+ "progress_comments?": ProgressCommentsInput.or("undefined"),
158227
158234
  "cwd?": type.string.or("undefined"),
158228
158235
  "output_schema?": type.string.or("undefined")
158229
158236
  });
@@ -158277,7 +158284,8 @@ function resolveNonPromptInputs() {
158277
158284
  cwd: core4.getInput("cwd") || void 0,
158278
158285
  push: core4.getInput("push") || void 0,
158279
158286
  shell: core4.getInput("shell") || void 0,
158280
- status_checks: core4.getInput("status_checks") || void 0
158287
+ status_checks: core4.getInput("status_checks") || void 0,
158288
+ progress_comments: core4.getInput("progress_comments") || void 0
158281
158289
  });
158282
158290
  }
158283
158291
  var isPullfrog = (actor) => {
@@ -158327,6 +158335,9 @@ function resolvePayload(resolvedPromptInput, repoSettings) {
158327
158335
  // opt-in commit-status check-runs (branch protection). workflow-level
158328
158336
  // static input, off unless the repo's pullfrog.yml sets status_checks: enabled.
158329
158337
  statusChecks: inputs.status_checks === "enabled",
158338
+ // temporary progress chrome. the workflow input is the source of truth when
158339
+ // set (mirrors `push`); otherwise the repo setting decides. defaults to true.
158340
+ progressComments: inputs.progress_comments === void 0 ? repoSettings.progressComments : inputs.progress_comments === "enabled",
158330
158341
  // set by proxy logic in main.ts when routing through OpenRouter
158331
158342
  proxyModel: void 0
158332
158343
  };
@@ -158480,6 +158491,9 @@ async function reportProgress(ctx, params) {
158480
158491
  if (ctx.payload.event.silent) {
158481
158492
  return { body, action: "skipped" };
158482
158493
  }
158494
+ if (params.liveProgress && !ctx.payload.progressComments) {
158495
+ return { body, action: "skipped" };
158496
+ }
158483
158497
  const issueNumber = ctx.payload.event.issue_number ?? primaryRepoState(ctx.toolState).issueNumber;
158484
158498
  const isPlanMode = ctx.toolState.selectedMode === "Plan";
158485
158499
  const apiCtx = { octokit: ctx.octokit, owner: ctx.repo.owner, repo: ctx.repo.name };
@@ -158633,6 +158647,7 @@ ${collapsible}`;
158633
158647
  async function deleteProgressComment(ctx) {
158634
158648
  const existing = ctx.toolState.progressComment;
158635
158649
  if (!existing) {
158650
+ ctx.toolState.progressComment = null;
158636
158651
  return false;
158637
158652
  }
158638
158653
  try {
@@ -165039,7 +165054,9 @@ async function handleAgentResult(ctx) {
165039
165054
  const toolState = ctx.toolContext.toolState;
165040
165055
  const mode = toolState.selectedMode;
165041
165056
  const isReviewMode = mode === "Review" || mode === "IncrementalReview";
165042
- if (!isReviewMode && !toolState.wasUpdated && toolState.hadProgressComment && !ctx.silent) {
165057
+ const payload = ctx.toolContext.payload;
165058
+ const hasCommentTarget = toolState.hadProgressComment || !payload.progressComments && payload.event.issue_number !== void 0;
165059
+ if (!isReviewMode && !toolState.wasUpdated && hasCommentTarget && !ctx.silent) {
165043
165060
  const tracker = toolState.todoTracker;
165044
165061
  if (tracker) {
165045
165062
  tracker.cancel();
@@ -165095,6 +165112,7 @@ var defaultSettings = {
165095
165112
  prApproveEnabled: false,
165096
165113
  autoMergeEnabled: false,
165097
165114
  signedCommits: false,
165115
+ progressComments: true,
165098
165116
  modeInstructions: {},
165099
165117
  learnings: null,
165100
165118
  learningsHeadings: [],
@@ -166003,6 +166021,9 @@ async function main() {
166003
166021
  toolState.model = payload.model;
166004
166022
  toolState.oss = runContext.oss;
166005
166023
  toolState.shaPinned = isActionPinnedToSha();
166024
+ if (payload.event.issue_number !== void 0) {
166025
+ primaryRepoState(toolState).issueNumber = payload.event.issue_number;
166026
+ }
166006
166027
  if (payload.event.trigger === "pull_request_synchronize") {
166007
166028
  primaryRepoState(toolState).beforeSha = payload.event.before_sha;
166008
166029
  }
package/dist/internal.js CHANGED
@@ -27,8 +27,8 @@ var providers = {
27
27
  },
28
28
  "claude-opus": {
29
29
  displayName: "Claude Opus",
30
- resolve: "anthropic/claude-opus-4-8",
31
- openRouterResolve: "openrouter/anthropic/claude-opus-4.8",
30
+ resolve: "anthropic/claude-opus-5",
31
+ openRouterResolve: "openrouter/anthropic/claude-opus-5",
32
32
  preferred: true,
33
33
  subagentModel: "claude-sonnet"
34
34
  },
@@ -226,8 +226,8 @@ var providers = {
226
226
  },
227
227
  "claude-opus": {
228
228
  displayName: "Claude Opus",
229
- resolve: "opencode/claude-opus-4-8",
230
- openRouterResolve: "openrouter/anthropic/claude-opus-4.8",
229
+ resolve: "opencode/claude-opus-5",
230
+ openRouterResolve: "openrouter/anthropic/claude-opus-5",
231
231
  subagentModel: "claude-sonnet"
232
232
  },
233
233
  "claude-sonnet": {
@@ -32,6 +32,7 @@ export declare const Inputs: import("arktype/internal/variants/object.ts").Objec
32
32
  push?: "disabled" | "enabled" | "restricted" | undefined;
33
33
  shell?: "disabled" | "enabled" | "restricted" | undefined;
34
34
  status_checks?: "disabled" | "enabled" | undefined;
35
+ progress_comments?: "disabled" | "enabled" | undefined;
35
36
  cwd?: string | undefined;
36
37
  output_schema?: string | undefined;
37
38
  }, {}>;
@@ -71,6 +72,7 @@ export declare function resolvePayload(resolvedPromptInput: ResolvedPromptInput,
71
72
  push: import("../external.ts").PushPermission;
72
73
  shell: import("../external.ts").ShellPermission;
73
74
  statusChecks: boolean;
75
+ progressComments: boolean;
74
76
  proxyModel: string | undefined;
75
77
  };
76
78
  export type ResolvedPayload = ReturnType<typeof resolvePayload>;
@@ -33,6 +33,7 @@ export interface RepoSettings {
33
33
  prApproveEnabled: boolean;
34
34
  autoMergeEnabled: boolean;
35
35
  signedCommits: boolean;
36
+ progressComments: boolean;
36
37
  modeInstructions: Record<string, string>;
37
38
  learnings: string | null;
38
39
  learningsHeadings: LearningsHeading[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pullfrog",
3
- "version": "0.1.41",
3
+ "version": "0.1.42",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "pullfrog": "dist/cli.mjs",