pullfrog 0.1.83 → 0.1.84
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 +110818 -129054
- package/dist/external.d.ts +2 -2
- package/dist/index.js +6683 -11167
- package/dist/internal/index.d.ts +1 -0
- package/dist/internal.js +44 -19
- package/dist/mcp/review.d.ts +0 -14
- package/dist/utils/outstandingThreads.d.ts +25 -0
- package/dist/utils/payload.d.ts +2 -2
- package/dist/yes.js +1 -1
- package/package.json +3 -3
package/dist/internal/index.d.ts
CHANGED
|
@@ -20,6 +20,7 @@ export type { ResourceUsage, UsageSummary } from "../utils/github.ts";
|
|
|
20
20
|
export { isPullfrog } from "../utils/isPullfrog.ts";
|
|
21
21
|
export { isLeapingIntoActionCommentBody, LEAPING_INTO_ACTION_PREFIX, } from "../utils/leapingComment.ts";
|
|
22
22
|
export { MAX_LEARNINGS_LENGTH, truncateAtLineBoundary } from "../utils/learningsTruncate.ts";
|
|
23
|
+
export { countOutstandingPullfrogThreads } from "../utils/outstandingThreads.ts";
|
|
23
24
|
export type { CreateProgressCommentTarget, ProgressComment, ProgressCommentType, } from "../utils/progressComment.ts";
|
|
24
25
|
export { createLeapingProgressComment, deleteProgressCommentApi, getProgressComment, updateProgressComment, } from "../utils/progressComment.ts";
|
|
25
26
|
export { PROVIDER_DASHBOARDS, type ProviderDashboard } from "../utils/providerDashboards.ts";
|
package/dist/internal.js
CHANGED
|
@@ -8,7 +8,7 @@ var __export = (target, all) => {
|
|
|
8
8
|
// package.json
|
|
9
9
|
var package_default = {
|
|
10
10
|
name: "pullfrog",
|
|
11
|
-
version: "0.1.
|
|
11
|
+
version: "0.1.84",
|
|
12
12
|
cliContractVersion: "1",
|
|
13
13
|
type: "module",
|
|
14
14
|
bin: {
|
|
@@ -44,8 +44,8 @@ var package_default = {
|
|
|
44
44
|
"@octokit/plugin-throttling": "^11.0.3",
|
|
45
45
|
"@octokit/rest": "^22.0.0",
|
|
46
46
|
"@octokit/webhooks-types": "^7.6.1",
|
|
47
|
-
"@openai/codex": "0.
|
|
48
|
-
"@openai/codex-sdk": "0.
|
|
47
|
+
"@openai/codex": "0.157.0",
|
|
48
|
+
"@openai/codex-sdk": "0.157.0",
|
|
49
49
|
"@opencode-ai/sdk": "1.18.29",
|
|
50
50
|
"@standard-schema/spec": "1.1.0",
|
|
51
51
|
"@toon-format/toon": "^1.0.0",
|
|
@@ -14931,22 +14931,14 @@ var providers = {
|
|
|
14931
14931
|
displayName: "Qwen Max",
|
|
14932
14932
|
resolve: "opencode/qwen3.8-max",
|
|
14933
14933
|
openRouterEffort: ["minimal", "low", "medium", "high", "xhigh"],
|
|
14934
|
-
openRouterResolve: "openrouter/qwen/qwen3.8-max-0902"
|
|
14935
|
-
// unlisted until a published `pullfrog` carries this alias (the
|
|
14936
|
-
// merge-vs-publish rule in wiki/models-catalog.md). unhide in the release
|
|
14937
|
-
// that ships it.
|
|
14938
|
-
hidden: true
|
|
14934
|
+
openRouterResolve: "openrouter/qwen/qwen3.8-max-0902"
|
|
14939
14935
|
},
|
|
14940
14936
|
"qwen-flash": {
|
|
14941
14937
|
displayName: "Qwen Flash",
|
|
14942
14938
|
resolve: "opencode/qwen3.8-flash",
|
|
14943
14939
|
effort: ["low", "medium", "xhigh"],
|
|
14944
14940
|
openRouterEffort: [],
|
|
14945
|
-
openRouterResolve: "openrouter/qwen/qwen3.8-flash"
|
|
14946
|
-
// unlisted until a published `pullfrog` carries this alias (the
|
|
14947
|
-
// merge-vs-publish rule in wiki/models-catalog.md). unhide in the release
|
|
14948
|
-
// that ships it.
|
|
14949
|
-
hidden: true
|
|
14941
|
+
openRouterResolve: "openrouter/qwen/qwen3.8-flash"
|
|
14950
14942
|
},
|
|
14951
14943
|
"gpt-5-nano": {
|
|
14952
14944
|
displayName: "GPT Nano",
|
|
@@ -15006,11 +14998,7 @@ var providers = {
|
|
|
15006
14998
|
effort: ["low", "medium", "high", "xhigh", "max"],
|
|
15007
14999
|
// free to run, still gated on the provider's own OPENCODE_API_KEY —
|
|
15008
15000
|
// see the big-pickle note above (#1077).
|
|
15009
|
-
isFree: true
|
|
15010
|
-
// unlisted until a published `pullfrog` carries this alias: 0.1.82
|
|
15011
|
-
// predates it, so a run passes `opencode/space-bunny` through raw and
|
|
15012
|
-
// Zen answers a 500. unhide in the release that ships it.
|
|
15013
|
-
hidden: true
|
|
15001
|
+
isFree: true
|
|
15014
15002
|
},
|
|
15015
15003
|
// Zen's live free MiMo, and the second free row in a menu that big-pickle
|
|
15016
15004
|
// was alone in since `mimo-v2-pro-free` lost its model.
|
|
@@ -15963,7 +15951,7 @@ For simple, well-defined tasks, skip the plan phase and go straight to build.`
|
|
|
15963
15951
|
6. Finalize:
|
|
15964
15952
|
- **only if code changed**, ${finalizeStep} (same push/prepush guidance as Build mode in *SYSTEM*). If push/commit fails, report the exact error and STOP without claiming a fix or resolving its threads.
|
|
15965
15953
|
- reply ONCE per relevant thread via \`${t("reply_to_review_comment")}\`, including when no code changed. The \`comment_id\` is the root comment's numeric \`id=\`, NOT the \`thread=\` value from \`${t("get_review_comments")}\`. The runtime dedupes identical bodies within a session.
|
|
15966
|
-
- resolve a thread via \`${t("resolve_review_thread")}\` (using \`thread=\` as \`thread_id\`) only after its requested fix is fully on the remote,
|
|
15954
|
+
- resolve a thread via \`${t("resolve_review_thread")}\` (using \`thread=\` as \`thread_id\`) only after its requested fix is fully on the remote, the user explicitly asks to resolve it, or it is a Pullfrog finding you agree to withdraw. Leave other discussion-only replies, partial fixes, and disagreements open.
|
|
15967
15955
|
- call \`${t("report_progress")}\` with a brief summary. If your last \`${t("get_review_comments")}\` turned up threads you did not address, name them there \u2014 a review arriving this late is suppressed as a duplicate and nothing else will pick it up.`
|
|
15968
15956
|
},
|
|
15969
15957
|
// Review and IncrementalReview route the minimum reviewfrog specialists
|
|
@@ -16590,6 +16578,42 @@ function truncateAtLineBoundary(body, cap) {
|
|
|
16590
16578
|
return head.slice(0, lastNewline);
|
|
16591
16579
|
}
|
|
16592
16580
|
|
|
16581
|
+
// utils/outstandingThreads.ts
|
|
16582
|
+
var OUTSTANDING_THREADS_QUERY = `
|
|
16583
|
+
query ($owner: String!, $name: String!, $prNumber: Int!, $cursor: String) {
|
|
16584
|
+
repository(owner: $owner, name: $name) {
|
|
16585
|
+
pullRequest(number: $prNumber) {
|
|
16586
|
+
reviewThreads(first: 100, after: $cursor) {
|
|
16587
|
+
pageInfo { hasNextPage endCursor }
|
|
16588
|
+
nodes {
|
|
16589
|
+
isResolved
|
|
16590
|
+
comments(first: 1) { nodes { author { login } } }
|
|
16591
|
+
}
|
|
16592
|
+
}
|
|
16593
|
+
}
|
|
16594
|
+
}
|
|
16595
|
+
}
|
|
16596
|
+
`;
|
|
16597
|
+
async function countOutstandingPullfrogThreads(ctx, pullNumber) {
|
|
16598
|
+
let count = 0;
|
|
16599
|
+
let cursor = null;
|
|
16600
|
+
for (let page = 0; page < 50; page += 1) {
|
|
16601
|
+
const response = await ctx.octokit.graphql(
|
|
16602
|
+
OUTSTANDING_THREADS_QUERY,
|
|
16603
|
+
{ owner: ctx.repo.owner, name: ctx.repo.name, prNumber: pullNumber, cursor }
|
|
16604
|
+
);
|
|
16605
|
+
const conn = response.repository?.pullRequest?.reviewThreads;
|
|
16606
|
+
for (const thread of conn?.nodes ?? []) {
|
|
16607
|
+
if (!thread || thread.isResolved) continue;
|
|
16608
|
+
const root = thread.comments?.nodes?.find((c) => c != null);
|
|
16609
|
+
if (root && isPullfrog(root.author?.login)) count += 1;
|
|
16610
|
+
}
|
|
16611
|
+
if (!conn?.pageInfo.hasNextPage) break;
|
|
16612
|
+
cursor = conn.pageInfo.endCursor;
|
|
16613
|
+
}
|
|
16614
|
+
return count;
|
|
16615
|
+
}
|
|
16616
|
+
|
|
16593
16617
|
// utils/progressComment.ts
|
|
16594
16618
|
async function getProgressComment(ctx, comment) {
|
|
16595
16619
|
const result = await (comment.type === "review" ? ctx.octokit.rest.pulls.getReviewComment({
|
|
@@ -17021,6 +17045,7 @@ export {
|
|
|
17021
17045
|
configFields,
|
|
17022
17046
|
configResponseSchema,
|
|
17023
17047
|
configValueSchema,
|
|
17048
|
+
countOutstandingPullfrogThreads,
|
|
17024
17049
|
createLeapingProgressComment,
|
|
17025
17050
|
createRunStatusCheck,
|
|
17026
17051
|
decodeJwtExpMs,
|
package/dist/mcp/review.d.ts
CHANGED
|
@@ -23,20 +23,6 @@ export declare const TRANSIENT_REVIEW_RETRY_DELAYS_MS: number[];
|
|
|
23
23
|
*/
|
|
24
24
|
export declare function commentableLinesForFile(patch: string | undefined): CommentableLines;
|
|
25
25
|
export declare function buildCommentableMap(ctx: ToolContext, pullNumber: number): Promise<Map<string, CommentableLines>>;
|
|
26
|
-
/**
|
|
27
|
-
* count unresolved review threads on a PR whose root comment was authored by
|
|
28
|
-
* Pullfrog's bot. this is the full set of open Pullfrog findings on the PR —
|
|
29
|
-
* the basis for both the never-approve-with-outstanding-issues invariant (the
|
|
30
|
-
* approval gate below) and the `pullfrog-approval` status verdict. it is a
|
|
31
|
-
* function of all open findings, NOT just the latest commit's delta.
|
|
32
|
-
*
|
|
33
|
-
* outdated-but-unresolved threads still count — GitHub marks a thread
|
|
34
|
-
* `[OUTDATED]` when the anchor line moved (reformat, rename, force-push), which
|
|
35
|
-
* is not the same as the concern being addressed. human-reviewer threads are
|
|
36
|
-
* excluded: they belong to those reviewers to resolve. walks every page so a
|
|
37
|
-
* long-lived PR with >100 threads can't hide an outstanding finding.
|
|
38
|
-
*/
|
|
39
|
-
export declare function countOutstandingPullfrogThreads(ctx: ToolContext, pullNumber: number): Promise<number>;
|
|
40
26
|
/**
|
|
41
27
|
* proactive approve-when-clean for the Fix-all / Fix-👍s flow (`fix_review`
|
|
42
28
|
* trigger). when such a run completes successfully and every Pullfrog-originated
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** the slice of a run or webhook context the query needs — shared by the action and the server. */
|
|
2
|
+
export type OutstandingThreadsCtx = {
|
|
3
|
+
octokit: {
|
|
4
|
+
graphql: <T>(query: string, variables: Record<string, unknown>) => Promise<T>;
|
|
5
|
+
};
|
|
6
|
+
repo: {
|
|
7
|
+
owner: string;
|
|
8
|
+
name: string;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* count unresolved review threads on a PR whose root comment was authored by
|
|
13
|
+
* Pullfrog's bot. this is the full set of open Pullfrog findings on the PR —
|
|
14
|
+
* the basis for both the never-approve-with-outstanding-issues invariant (the
|
|
15
|
+
* approval gate in create_pull_request_review) and the `pullfrog-approval`
|
|
16
|
+
* status verdict. it is a function of all open findings, NOT just the latest
|
|
17
|
+
* commit's delta.
|
|
18
|
+
*
|
|
19
|
+
* outdated-but-unresolved threads still count — GitHub marks a thread
|
|
20
|
+
* `[OUTDATED]` when the anchor line moved (reformat, rename, force-push), which
|
|
21
|
+
* is not the same as the concern being addressed. human-reviewer threads are
|
|
22
|
+
* excluded: they belong to those reviewers to resolve. walks every page so a
|
|
23
|
+
* long-lived PR with >100 threads can't hide an outstanding finding.
|
|
24
|
+
*/
|
|
25
|
+
export declare function countOutstandingPullfrogThreads(ctx: OutstandingThreadsCtx, pullNumber: number): Promise<number>;
|
package/dist/utils/payload.d.ts
CHANGED
|
@@ -11,7 +11,7 @@ export declare const JsonPayload: import("arktype/internal/variants/object.ts").
|
|
|
11
11
|
tier: "minimal" | "light" | "standard" | "deep";
|
|
12
12
|
stakes: number;
|
|
13
13
|
workload: number;
|
|
14
|
-
source: "scorer" | "heuristic" | "fixed";
|
|
14
|
+
source: "jev" | "scorer" | "heuristic" | "fixed";
|
|
15
15
|
rationale: string;
|
|
16
16
|
} | undefined;
|
|
17
17
|
effort?: string | number | undefined;
|
|
@@ -65,7 +65,7 @@ export declare function resolvePayload(resolvedPromptInput: ResolvedPromptInput,
|
|
|
65
65
|
tier: "minimal" | "light" | "standard" | "deep";
|
|
66
66
|
stakes: number;
|
|
67
67
|
workload: number;
|
|
68
|
-
source: "scorer" | "heuristic" | "fixed";
|
|
68
|
+
source: "jev" | "scorer" | "heuristic" | "fixed";
|
|
69
69
|
rationale: string;
|
|
70
70
|
} | undefined;
|
|
71
71
|
effort: number | undefined;
|
package/dist/yes.js
CHANGED
|
@@ -413,7 +413,7 @@ var require_object_hash = __commonJS({
|
|
|
413
413
|
import { performance as performance2 } from "node:perf_hooks";
|
|
414
414
|
import { setTimeout as sleep } from "node:timers/promises";
|
|
415
415
|
|
|
416
|
-
// node_modules/.pnpm/lru-cache@11.5.
|
|
416
|
+
// node_modules/.pnpm/lru-cache@11.5.3/node_modules/lru-cache/dist/esm/node/index.min.js
|
|
417
417
|
import { tracingChannel as G, channel as P } from "node:diagnostics_channel";
|
|
418
418
|
var S = P("lru-cache:metrics");
|
|
419
419
|
var W = G("lru-cache");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pullfrog",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.84",
|
|
4
4
|
"cliContractVersion": "1",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -36,8 +36,8 @@
|
|
|
36
36
|
"@octokit/plugin-throttling": "^11.0.3",
|
|
37
37
|
"@octokit/rest": "^22.0.0",
|
|
38
38
|
"@octokit/webhooks-types": "^7.6.1",
|
|
39
|
-
"@openai/codex": "0.
|
|
40
|
-
"@openai/codex-sdk": "0.
|
|
39
|
+
"@openai/codex": "0.157.0",
|
|
40
|
+
"@openai/codex-sdk": "0.157.0",
|
|
41
41
|
"@opencode-ai/sdk": "1.18.29",
|
|
42
42
|
"@standard-schema/spec": "1.1.0",
|
|
43
43
|
"@toon-format/toon": "^1.0.0",
|