pullfrog 0.1.101 → 0.1.103

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.
@@ -1,6 +1,6 @@
1
1
  import type { Octokit } from "@octokit/rest";
2
2
  import type { ToolContext } from "./server.ts";
3
- export declare const REVIEW_THREADS_QUERY = "\nquery ($owner: String!, $name: String!, $prNumber: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $prNumber) {\n reviewThreads(first: 100, after: $cursor) {\n pageInfo { hasNextPage endCursor }\n nodes {\n id\n path\n line\n startLine\n diffSide\n isResolved\n isOutdated\n comments(first: 50) {\n nodes {\n fullDatabaseId\n body\n bodyHTML\n createdAt\n diffHunk\n line\n startLine\n originalLine\n originalStartLine\n author { login }\n pullRequestReview {\n databaseId\n author { login }\n }\n reactionGroups {\n content\n reactors(first: 10) {\n nodes {\n ... on Actor { login }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n}\n";
3
+ export declare const REVIEW_THREADS_QUERY = "\nquery ($owner: String!, $name: String!, $prNumber: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $prNumber) {\n reviewThreads(first: 100, after: $cursor) {\n pageInfo { hasNextPage endCursor }\n nodes {\n id\n path\n line\n startLine\n diffSide\n isResolved\n isOutdated\n comments(first: 50) {\n nodes {\n fullDatabaseId\n body\n bodyHTML\n createdAt\n diffHunk\n line\n startLine\n originalLine\n originalStartLine\n author { login __typename }\n pullRequestReview {\n databaseId\n author { login }\n }\n reactionGroups {\n content\n reactors(first: 10) {\n nodes {\n ... on Actor { login }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n}\n";
4
4
  export type ReviewThreadComment = {
5
5
  fullDatabaseId: string | null;
6
6
  body: string;
@@ -13,6 +13,7 @@ export type ReviewThreadComment = {
13
13
  originalStartLine: number | null;
14
14
  author: {
15
15
  login: string;
16
+ __typename: string;
16
17
  } | null;
17
18
  pullRequestReview: {
18
19
  databaseId: number | null;
@@ -141,6 +142,8 @@ interface GetReviewDataInput {
141
142
  * to the dispatching review exactly as before.
142
143
  */
143
144
  addressScope?: "all" | "mentions" | undefined;
145
+ /** whether this run can push, which is what makes a comment's author matter */
146
+ canPush: boolean;
144
147
  tmpdir: string;
145
148
  githubToken: string;
146
149
  }
@@ -9,6 +9,7 @@ export declare const ShellParams: import("arktype/internal/variants/object.ts").
9
9
  export type SandboxMethod = "unshare" | "sudo-unshare" | "userns-unshare" | "none";
10
10
  /** get the current sandbox method (for testing/diagnostics) */
11
11
  export declare function getSandboxMethod(): SandboxMethod;
12
+ export declare function resolveRepoRoot(): string;
12
13
  /** chars of shell output kept inline in the agent reply. anything past this
13
14
  * blows the agent's context budget on commands that dump big logs (test
14
15
  * runners, build tools, grep on large trees), so the overflow is spilled
@@ -135,6 +135,7 @@ export interface ToolState {
135
135
  xrepoLearningsFilePath?: string;
136
136
  xrepoLearningsSeed?: string;
137
137
  xrepoLearningsPersistAttempted?: boolean;
138
+ learningsLocked?: boolean;
138
139
  output?: string | undefined;
139
140
  usageEntries: AgentUsage[];
140
141
  model?: string | undefined;
@@ -70,7 +70,7 @@ export declare function commercialPaywallBody(params: {
70
70
  /**
71
71
  * commercial-gate copy for action runs, linked to the account billing card.
72
72
  *
73
- * if this fires on a `pullfrog/preview-*` repo it is an infrastructure bug, not
73
+ * if this fires on a `PullfrogDev/preview-*` repo it is an infrastructure bug, not
74
74
  * a billing state — those repos have no real billing state to refuse. the
75
75
  * original cause was the gate comparing the subscription's originating host
76
76
  * with strict equality, which no preview could satisfy against a cloned
@@ -38,10 +38,18 @@ export declare function countLines(params: {
38
38
  export declare function parseDiffTocEntries(params: {
39
39
  toc: string;
40
40
  }): DiffTocEntry[];
41
+ /**
42
+ * one entry per section of an incremental (range-diff) diff, which opens on an
43
+ * `@@ <file>[: <function>]` hunk header or a `## <file>[ (new)] ##` file header,
44
+ * either of which may be the only line naming its file.
45
+ */
46
+ export declare function parseIncrementalDiffEntries(params: {
47
+ content: string;
48
+ }): DiffTocEntry[];
41
49
  export declare function createDiffCoverageState(params: {
42
50
  diffPath: string;
43
51
  totalLines: number;
44
- toc: string;
52
+ tocEntries: DiffTocEntry[];
45
53
  previous?: DiffCoverageState | undefined;
46
54
  }): DiffCoverageState;
47
55
  export declare function recordDiffReadFromToolUse(params: {
@@ -0,0 +1,10 @@
1
+ /**
2
+ * files whose hunks carry nothing a reviewer weighs — lockfiles, minified and
3
+ * generated output, snapshots, images and fonts, built trees, migration
4
+ * metadata. the router's scorer reads a one-line stub in their place and its
5
+ * heuristic skips their lines; a review's diff keeps them but leaves them off
6
+ * its coverage checklist. `build/` and `vendor/` are deliberately not here: the
7
+ * router eval set has source under both (`src/build/expo-brand.ts`, a vendored
8
+ * crate patched in the PR), and hiding a patch is worse than reading a copy.
9
+ */
10
+ export declare const GENERATED: RegExp;
@@ -75,7 +75,7 @@ export declare function fetchIdTokenFromStash(creds: OidcCredentials): Promise<s
75
75
  * own retry still re-mints. Mid-run refreshes take the stashed-credentials path
76
76
  * (`opts.oidc`) and deliberately bypass this.
77
77
  */
78
- export declare const mintIdToken: (() => Promise<string>) & yes.AttemptMethod<[], string> & yes.CacheMethods<undefined, undefined, () => Promise<string>>;
78
+ export declare const mintIdToken: yes.Cached<() => Promise<string>>;
79
79
  /**
80
80
  * ensure a GitHub token is available in the environment.
81
81
  *
@@ -39,6 +39,11 @@ export declare const JsonPayload: import("arktype/internal/variants/object.ts").
39
39
  generateSummary?: boolean | undefined;
40
40
  codexArm?: boolean | undefined;
41
41
  }, {}>;
42
+ /**
43
+ * a run steered by someone resolved as unable to push here. an absent permission
44
+ * is a run no outside author steers (CI fix, a review bot on Pullfrog's own PR).
45
+ */
46
+ export declare function isOutsideAuthor(event: PayloadEvent): boolean;
42
47
  export declare const Inputs: import("arktype/internal/variants/object.ts").ObjectType<{
43
48
  prompt?: string | undefined;
44
49
  prompt_file?: string | undefined;
@@ -64,7 +64,9 @@ export declare function computeIncrementalDiff(params: ComputeIncrementalDiffPar
64
64
  *
65
65
  * uses a streaming approach: a ring buffer of before-context lines is flushed when
66
66
  * a change is hit, then afterCount lines of after-context are emitted directly.
67
- * nearest preceding ## / @@ headers are force-included when outside the context window.
67
+ * nearest preceding ## / @@ headers are force-included when outside the context window,
68
+ * and so is the outer `@@ <file>[: <function>]` hunk header, which is often the only
69
+ * line naming the file a change belongs to.
68
70
  */
69
71
  export declare function postProcessRangeDiff(raw: string, contextLines?: number): string | null;
70
72
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pullfrog",
3
- "version": "0.1.101",
3
+ "version": "0.1.103",
4
4
  "cliContractVersion": "1",
5
5
  "type": "module",
6
6
  "bin": {
@@ -27,12 +27,12 @@
27
27
  "prepare": "cd .. && husky"
28
28
  },
29
29
  "devDependencies": {
30
- "@actions/core": "^1.11.1",
30
+ "@actions/core": "^3.0.1",
31
31
  "@anthropic-ai/claude-code": "2.1.293",
32
32
  "@ark/fs": "0.56.0",
33
33
  "@ark/util": "0.56.0",
34
34
  "@clack/prompts": "^1.2.0",
35
- "@modelcontextprotocol/sdk": "^1.26.0",
35
+ "@modelcontextprotocol/sdk": "^1.32.0",
36
36
  "@octokit/plugin-throttling": "^11.0.3",
37
37
  "@octokit/rest": "^22.0.0",
38
38
  "@octokit/webhooks-types": "^7.6.1",
@@ -40,7 +40,7 @@
40
40
  "@openai/codex-sdk": "0.159.2",
41
41
  "@opencode-ai/sdk": "1.18.29",
42
42
  "@standard-schema/spec": "1.1.0",
43
- "@toon-format/toon": "^1.0.0",
43
+ "@toon-format/toon": "^2.3.1",
44
44
  "@types/node": "^24.7.2",
45
45
  "@types/semver": "^7.7.1",
46
46
  "@types/turndown": "^5.0.5",
@@ -53,7 +53,7 @@
53
53
  "esbuild": "^0.25.9",
54
54
  "execa": "^9.6.0",
55
55
  "fastmcp": "^3.34.0",
56
- "file-type": "^21.3.0",
56
+ "file-type": "^21.3.2",
57
57
  "husky": "^9.0.0",
58
58
  "opencode-ai": "1.18.29",
59
59
  "package-manager-detector": "^1.6.0",
@@ -64,10 +64,10 @@
64
64
  "turndown": "^7.2.0",
65
65
  "typescript": "^5.9.3",
66
66
  "undici": "^7.22.0",
67
- "vitest": "^4.0.17",
68
- "yaml": "^2.8.2",
69
- "yes": "0.2.4",
70
- "zod": "4.3.6"
67
+ "vitest": "^4.1.12",
68
+ "yaml": "^2.8.3",
69
+ "yes": "0.2.7",
70
+ "zod": "4.6.6"
71
71
  },
72
72
  "repository": {
73
73
  "type": "git",