@ghx-dev/core 0.1.2 → 0.2.1
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/.claude-plugin/plugin.json +21 -0
- package/README.md +49 -45
- package/dist/cards/issue.assignees.add.yaml +51 -0
- package/dist/cards/issue.assignees.remove.yaml +51 -0
- package/dist/cards/issue.assignees.set.yaml +48 -0
- package/dist/cards/issue.close.yaml +17 -2
- package/dist/cards/issue.comments.create.yaml +17 -2
- package/dist/cards/issue.comments.list.yaml +1 -0
- package/dist/cards/issue.create.yaml +12 -0
- package/dist/cards/issue.delete.yaml +17 -2
- package/dist/cards/issue.labels.add.yaml +49 -0
- package/dist/cards/issue.labels.remove.yaml +51 -0
- package/dist/cards/issue.labels.set.yaml +48 -0
- package/dist/cards/issue.list.yaml +1 -0
- package/dist/cards/issue.milestone.clear.yaml +41 -0
- package/dist/cards/issue.milestone.set.yaml +24 -4
- package/dist/{core/registry/cards/issue.blocked_by.add.yaml → cards/issue.relations.blocked_by.add.yaml} +4 -2
- package/dist/cards/{issue.blocked_by.remove.yaml → issue.relations.blocked_by.remove.yaml} +2 -1
- package/dist/cards/{issue.parent.remove.yaml → issue.relations.parent.remove.yaml} +12 -1
- package/dist/{core/registry/cards/issue.parent.set.yaml → cards/issue.relations.parent.set.yaml} +4 -2
- package/dist/{core/registry/cards/issue.linked_prs.list.yaml → cards/issue.relations.prs.list.yaml} +2 -1
- package/dist/cards/{issue.relations.get.yaml → issue.relations.view.yaml} +2 -1
- package/dist/cards/issue.reopen.yaml +17 -2
- package/dist/cards/issue.update.yaml +17 -2
- package/dist/cards/issue.view.yaml +8 -5
- package/dist/cards/pr.assignees.add.yaml +33 -0
- package/dist/cards/pr.assignees.remove.yaml +33 -0
- package/dist/cards/pr.branch.update.yaml +6 -2
- package/dist/{core/registry/cards/pr.status.checks.yaml → cards/pr.checks.list.yaml} +15 -2
- package/dist/{core/registry/cards/pr.checks.rerun_all.yaml → cards/pr.checks.rerun.all.yaml} +2 -4
- package/dist/{core/registry/cards/pr.checks.rerun_failed.yaml → cards/pr.checks.rerun.failed.yaml} +3 -5
- package/dist/cards/pr.create.yaml +34 -0
- package/dist/cards/{pr.diff.list_files.yaml → pr.diff.files.yaml} +2 -1
- package/dist/cards/{pr.ready_for_review.set.yaml → pr.diff.view.yaml} +6 -8
- package/dist/cards/pr.list.yaml +1 -0
- package/dist/{core/registry/cards/pr.mergeability.view.yaml → cards/pr.merge.status.yaml} +7 -3
- package/dist/{core/registry/cards/pr.merge.execute.yaml → cards/pr.merge.yaml} +10 -4
- package/dist/cards/pr.reviews.list.yaml +2 -1
- package/dist/cards/{pr.reviewers.request.yaml → pr.reviews.request.yaml} +7 -4
- package/dist/cards/pr.reviews.submit.yaml +68 -0
- package/dist/cards/{pr.comments.list.yaml → pr.threads.list.yaml} +3 -2
- package/dist/cards/{pr.comment.reply.yaml → pr.threads.reply.yaml} +5 -2
- package/dist/{core/registry/cards/pr.comment.resolve.yaml → cards/pr.threads.resolve.yaml} +2 -1
- package/dist/cards/{pr.comment.unresolve.yaml → pr.threads.unresolve.yaml} +2 -1
- package/dist/cards/pr.update.yaml +34 -0
- package/dist/cards/pr.view.yaml +8 -5
- package/dist/cards/project_v2.fields.list.yaml +18 -2
- package/dist/cards/{project_v2.item.field.update.yaml → project_v2.items.field.update.yaml} +9 -6
- package/dist/cards/{project_v2.item.add_issue.yaml → project_v2.items.issue.add.yaml} +10 -6
- package/dist/cards/project_v2.items.issue.remove.yaml +26 -0
- package/dist/cards/project_v2.items.list.yaml +8 -2
- package/dist/{core/registry/cards/project_v2.org.get.yaml → cards/project_v2.org.view.yaml} +7 -3
- package/dist/cards/{project_v2.user.get.yaml → project_v2.user.view.yaml} +7 -3
- package/dist/{core/registry/cards/release.create_draft.yaml → cards/release.create.yaml} +1 -1
- package/dist/cards/release.list.yaml +8 -3
- package/dist/cards/{release.publish_draft.yaml → release.publish.yaml} +1 -1
- package/dist/cards/{release.get.yaml → release.view.yaml} +9 -5
- package/dist/cards/repo.issue_types.list.yaml +7 -3
- package/dist/cards/repo.labels.list.yaml +7 -2
- package/dist/cards/repo.view.yaml +3 -4
- package/dist/cards/{workflow_dispatch.run.yaml → workflow.dispatch.yaml} +1 -1
- package/dist/cards/{workflow_job.logs.get.yaml → workflow.job.logs.raw.yaml} +2 -2
- package/dist/{core/registry/cards/workflow_job.logs.analyze.yaml → cards/workflow.job.logs.view.yaml} +1 -1
- package/dist/{core/registry/cards/workflow_run.artifacts.list.yaml → cards/workflow.run.artifacts.list.yaml} +1 -1
- package/dist/cards/{workflow_run.cancel.yaml → workflow.run.cancel.yaml} +1 -1
- package/dist/cards/{workflow_run.rerun_all.yaml → workflow.run.rerun.all.yaml} +3 -3
- package/dist/{core/registry/cards/workflow_run.rerun_failed.yaml → cards/workflow.run.rerun.failed.yaml} +3 -3
- package/dist/{core/registry/cards/workflow_run.get.yaml → cards/workflow.run.view.yaml} +19 -4
- package/dist/cards/{workflow_runs.list.yaml → workflow.runs.list.yaml} +1 -1
- package/dist/cards/{workflow.get.yaml → workflow.view.yaml} +2 -2
- package/dist/chunk-3DU2WHXF.js +15 -0
- package/dist/chunk-3DU2WHXF.js.map +1 -0
- package/dist/chunk-7HUKYNI2.js +536 -0
- package/dist/chunk-7HUKYNI2.js.map +1 -0
- package/dist/chunk-GQO6BHJV.js +98 -0
- package/dist/chunk-GQO6BHJV.js.map +1 -0
- package/dist/chunk-H7CLZHRO.js +280 -0
- package/dist/chunk-H7CLZHRO.js.map +1 -0
- package/dist/chunk-HEHONZTO.js +121 -0
- package/dist/chunk-HEHONZTO.js.map +1 -0
- package/dist/chunk-M5PJLKL5.js +6132 -0
- package/dist/chunk-M5PJLKL5.js.map +1 -0
- package/dist/chunk-NQ53ETYV.js +128 -0
- package/dist/chunk-NQ53ETYV.js.map +1 -0
- package/dist/chunk-OQWLEFAH.js +436 -0
- package/dist/chunk-OQWLEFAH.js.map +1 -0
- package/dist/chunk-Q2NW7DJE.js +878 -0
- package/dist/chunk-Q2NW7DJE.js.map +1 -0
- package/dist/chunk-QRHKAMRY.js +211 -0
- package/dist/chunk-QRHKAMRY.js.map +1 -0
- package/dist/chunk-R3CBGJZX.js +12 -0
- package/dist/chunk-R3CBGJZX.js.map +1 -0
- package/dist/chunk-TGL33GEA.js +132 -0
- package/dist/chunk-TGL33GEA.js.map +1 -0
- package/dist/chunk-TPQYVCAS.js +15 -0
- package/dist/chunk-TPQYVCAS.js.map +1 -0
- package/dist/chunk-ZGBVX2VG.js +32 -0
- package/dist/chunk-ZGBVX2VG.js.map +1 -0
- package/dist/cli/index.js +268 -22
- package/dist/cli/index.js.map +1 -1
- package/dist/core/registry/cards/issue.assignees.add.yaml +51 -0
- package/dist/core/registry/cards/issue.assignees.remove.yaml +51 -0
- package/dist/core/registry/cards/issue.assignees.set.yaml +48 -0
- package/dist/core/registry/cards/issue.close.yaml +17 -2
- package/dist/core/registry/cards/issue.comments.create.yaml +17 -2
- package/dist/core/registry/cards/issue.comments.list.yaml +1 -0
- package/dist/core/registry/cards/issue.create.yaml +12 -0
- package/dist/core/registry/cards/issue.delete.yaml +17 -2
- package/dist/core/registry/cards/issue.labels.add.yaml +49 -0
- package/dist/core/registry/cards/issue.labels.remove.yaml +51 -0
- package/dist/core/registry/cards/issue.labels.set.yaml +48 -0
- package/dist/core/registry/cards/issue.list.yaml +1 -0
- package/dist/core/registry/cards/issue.milestone.clear.yaml +41 -0
- package/dist/core/registry/cards/issue.milestone.set.yaml +24 -4
- package/dist/{cards/issue.blocked_by.add.yaml → core/registry/cards/issue.relations.blocked_by.add.yaml} +4 -2
- package/dist/core/registry/cards/{issue.blocked_by.remove.yaml → issue.relations.blocked_by.remove.yaml} +2 -1
- package/dist/core/registry/cards/{issue.parent.remove.yaml → issue.relations.parent.remove.yaml} +12 -1
- package/dist/{cards/issue.parent.set.yaml → core/registry/cards/issue.relations.parent.set.yaml} +4 -2
- package/dist/{cards/issue.linked_prs.list.yaml → core/registry/cards/issue.relations.prs.list.yaml} +2 -1
- package/dist/core/registry/cards/{issue.relations.get.yaml → issue.relations.view.yaml} +2 -1
- package/dist/core/registry/cards/issue.reopen.yaml +17 -2
- package/dist/core/registry/cards/issue.update.yaml +17 -2
- package/dist/core/registry/cards/issue.view.yaml +8 -5
- package/dist/core/registry/cards/pr.assignees.add.yaml +33 -0
- package/dist/core/registry/cards/pr.assignees.remove.yaml +33 -0
- package/dist/core/registry/cards/pr.branch.update.yaml +6 -2
- package/dist/{cards/pr.status.checks.yaml → core/registry/cards/pr.checks.list.yaml} +15 -2
- package/dist/{cards/pr.checks.rerun_all.yaml → core/registry/cards/pr.checks.rerun.all.yaml} +2 -4
- package/dist/{cards/pr.checks.rerun_failed.yaml → core/registry/cards/pr.checks.rerun.failed.yaml} +3 -5
- package/dist/core/registry/cards/pr.create.yaml +34 -0
- package/dist/core/registry/cards/{pr.diff.list_files.yaml → pr.diff.files.yaml} +2 -1
- package/dist/core/registry/cards/{pr.ready_for_review.set.yaml → pr.diff.view.yaml} +6 -8
- package/dist/core/registry/cards/pr.list.yaml +1 -0
- package/dist/{cards/pr.mergeability.view.yaml → core/registry/cards/pr.merge.status.yaml} +7 -3
- package/dist/{cards/pr.merge.execute.yaml → core/registry/cards/pr.merge.yaml} +10 -4
- package/dist/core/registry/cards/pr.reviews.list.yaml +2 -1
- package/dist/core/registry/cards/{pr.reviewers.request.yaml → pr.reviews.request.yaml} +7 -4
- package/dist/core/registry/cards/pr.reviews.submit.yaml +68 -0
- package/dist/core/registry/cards/{pr.comments.list.yaml → pr.threads.list.yaml} +3 -2
- package/dist/core/registry/cards/{pr.comment.reply.yaml → pr.threads.reply.yaml} +5 -2
- package/dist/{cards/pr.comment.resolve.yaml → core/registry/cards/pr.threads.resolve.yaml} +2 -1
- package/dist/core/registry/cards/{pr.comment.unresolve.yaml → pr.threads.unresolve.yaml} +2 -1
- package/dist/core/registry/cards/pr.update.yaml +34 -0
- package/dist/core/registry/cards/pr.view.yaml +8 -5
- package/dist/core/registry/cards/project_v2.fields.list.yaml +18 -2
- package/dist/core/registry/cards/{project_v2.item.field.update.yaml → project_v2.items.field.update.yaml} +9 -6
- package/dist/core/registry/cards/{project_v2.item.add_issue.yaml → project_v2.items.issue.add.yaml} +10 -6
- package/dist/core/registry/cards/project_v2.items.issue.remove.yaml +26 -0
- package/dist/core/registry/cards/project_v2.items.list.yaml +8 -2
- package/dist/{cards/project_v2.org.get.yaml → core/registry/cards/project_v2.org.view.yaml} +7 -3
- package/dist/core/registry/cards/{project_v2.user.get.yaml → project_v2.user.view.yaml} +7 -3
- package/dist/{cards/release.create_draft.yaml → core/registry/cards/release.create.yaml} +1 -1
- package/dist/core/registry/cards/release.list.yaml +8 -3
- package/dist/core/registry/cards/{release.publish_draft.yaml → release.publish.yaml} +1 -1
- package/dist/core/registry/cards/{release.get.yaml → release.view.yaml} +9 -5
- package/dist/core/registry/cards/repo.issue_types.list.yaml +7 -3
- package/dist/core/registry/cards/repo.labels.list.yaml +7 -2
- package/dist/core/registry/cards/repo.view.yaml +3 -4
- package/dist/core/registry/cards/{workflow_dispatch.run.yaml → workflow.dispatch.yaml} +1 -1
- package/dist/core/registry/cards/{workflow_job.logs.get.yaml → workflow.job.logs.raw.yaml} +2 -2
- package/dist/{cards/workflow_job.logs.analyze.yaml → core/registry/cards/workflow.job.logs.view.yaml} +1 -1
- package/dist/{cards/workflow_run.artifacts.list.yaml → core/registry/cards/workflow.run.artifacts.list.yaml} +1 -1
- package/dist/core/registry/cards/{workflow_run.cancel.yaml → workflow.run.cancel.yaml} +1 -1
- package/dist/core/registry/cards/{workflow_run.rerun_all.yaml → workflow.run.rerun.all.yaml} +3 -3
- package/dist/{cards/workflow_run.rerun_failed.yaml → core/registry/cards/workflow.run.rerun.failed.yaml} +3 -3
- package/dist/{cards/workflow_run.get.yaml → core/registry/cards/workflow.run.view.yaml} +19 -4
- package/dist/core/registry/cards/{workflow_runs.list.yaml → workflow.runs.list.yaml} +1 -1
- package/dist/core/registry/cards/{workflow.get.yaml → workflow.view.yaml} +2 -2
- package/dist/index.d.ts +671 -35
- package/dist/index.js +41 -5
- package/dist/index.js.map +1 -1
- package/dist/issue-mutations-OW464JP3.js +645 -0
- package/dist/issue-mutations-OW464JP3.js.map +1 -0
- package/dist/issue-queries-ORG3VPK4.js +93 -0
- package/dist/issue-queries-ORG3VPK4.js.map +1 -0
- package/dist/pr-mutations-WOTG6FAB.js +484 -0
- package/dist/pr-mutations-WOTG6FAB.js.map +1 -0
- package/dist/pr-queries-6CJJW7BT.js +143 -0
- package/dist/pr-queries-6CJJW7BT.js.map +1 -0
- package/dist/project-QFSCYDDW.js +429 -0
- package/dist/project-QFSCYDDW.js.map +1 -0
- package/dist/release-33236BBA.js +57 -0
- package/dist/release-33236BBA.js.map +1 -0
- package/dist/repo-M6DKCWBG.js +82 -0
- package/dist/repo-M6DKCWBG.js.map +1 -0
- package/package.json +19 -16
- package/skills/using-ghx/SKILL.md +127 -0
- package/dist/agent.d.ts +0 -32
- package/dist/agent.js +0 -36
- package/dist/agent.js.map +0 -1
- package/dist/cards/check_run.annotations.list.yaml +0 -35
- package/dist/cards/issue.assignees.update.yaml +0 -27
- package/dist/cards/issue.labels.update.yaml +0 -27
- package/dist/cards/pr.assignees.update.yaml +0 -38
- package/dist/cards/pr.checks.get_failed.yaml +0 -42
- package/dist/cards/pr.review.submit_approve.yaml +0 -26
- package/dist/cards/pr.review.submit_comment.yaml +0 -26
- package/dist/cards/pr.review.submit_request_changes.yaml +0 -26
- package/dist/cards/workflow_run.jobs.list.yaml +0 -35
- package/dist/chunk-2FCPR3XZ.js +0 -54
- package/dist/chunk-2FCPR3XZ.js.map +0 -1
- package/dist/chunk-RDUPMVHG.js +0 -4139
- package/dist/chunk-RDUPMVHG.js.map +0 -1
- package/dist/chunk-UN5YHUNK.js +0 -245
- package/dist/chunk-UN5YHUNK.js.map +0 -1
- package/dist/cli/assets/skills/ghx/SKILL.md +0 -57
- package/dist/core/registry/cards/check_run.annotations.list.yaml +0 -35
- package/dist/core/registry/cards/issue.assignees.update.yaml +0 -27
- package/dist/core/registry/cards/issue.labels.update.yaml +0 -27
- package/dist/core/registry/cards/pr.assignees.update.yaml +0 -38
- package/dist/core/registry/cards/pr.checks.get_failed.yaml +0 -42
- package/dist/core/registry/cards/pr.review.submit_approve.yaml +0 -26
- package/dist/core/registry/cards/pr.review.submit_comment.yaml +0 -26
- package/dist/core/registry/cards/pr.review.submit_request_changes.yaml +0 -26
- package/dist/core/registry/cards/workflow_run.jobs.list.yaml +0 -35
- package/dist/envelope-BpF6MNCv.d.ts +0 -55
|
@@ -0,0 +1,484 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getSdk as getSdk2,
|
|
3
|
+
getSdk10 as getSdk11,
|
|
4
|
+
getSdk11 as getSdk12,
|
|
5
|
+
getSdk12 as getSdk13,
|
|
6
|
+
getSdk13 as getSdk14,
|
|
7
|
+
getSdk14 as getSdk15,
|
|
8
|
+
getSdk2 as getSdk3,
|
|
9
|
+
getSdk3 as getSdk4,
|
|
10
|
+
getSdk4 as getSdk5,
|
|
11
|
+
getSdk5 as getSdk6,
|
|
12
|
+
getSdk6 as getSdk7,
|
|
13
|
+
getSdk7 as getSdk8,
|
|
14
|
+
getSdk8 as getSdk9,
|
|
15
|
+
getSdk9 as getSdk10
|
|
16
|
+
} from "./chunk-7HUKYNI2.js";
|
|
17
|
+
import {
|
|
18
|
+
getSdk
|
|
19
|
+
} from "./chunk-ZGBVX2VG.js";
|
|
20
|
+
import "./chunk-R3CBGJZX.js";
|
|
21
|
+
import {
|
|
22
|
+
asRecord,
|
|
23
|
+
assertPrAssigneesInput,
|
|
24
|
+
assertPrBranchUpdateInput,
|
|
25
|
+
assertPrCommentsListInput,
|
|
26
|
+
assertPrCreateInput,
|
|
27
|
+
assertPrMergeInput,
|
|
28
|
+
assertPrReviewSubmitInput,
|
|
29
|
+
assertPrReviewsRequestInput,
|
|
30
|
+
assertPrUpdateInput,
|
|
31
|
+
assertReplyToReviewThreadInput,
|
|
32
|
+
assertReviewThreadInput
|
|
33
|
+
} from "./chunk-OQWLEFAH.js";
|
|
34
|
+
import {
|
|
35
|
+
createGraphqlRequestClient
|
|
36
|
+
} from "./chunk-HEHONZTO.js";
|
|
37
|
+
|
|
38
|
+
// src/gql/operations/review-thread-state.generated.ts
|
|
39
|
+
var ReviewThreadStateDocument = `
|
|
40
|
+
query ReviewThreadState($threadId: ID!) {
|
|
41
|
+
node(id: $threadId) {
|
|
42
|
+
... on PullRequestReviewThread {
|
|
43
|
+
id
|
|
44
|
+
isResolved
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
`;
|
|
49
|
+
var defaultWrapper = (action, _operationName, _operationType, _variables) => action();
|
|
50
|
+
function getSdk16(client, withWrapper = defaultWrapper) {
|
|
51
|
+
return {
|
|
52
|
+
ReviewThreadState(variables, requestHeaders, signal) {
|
|
53
|
+
return withWrapper(
|
|
54
|
+
(wrappedRequestHeaders) => client.request({
|
|
55
|
+
document: ReviewThreadStateDocument,
|
|
56
|
+
variables,
|
|
57
|
+
requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders },
|
|
58
|
+
signal
|
|
59
|
+
}),
|
|
60
|
+
"ReviewThreadState",
|
|
61
|
+
"query",
|
|
62
|
+
variables
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// src/gql/domains/pr-mutations.ts
|
|
69
|
+
var MAX_PR_REVIEW_THREAD_SCAN_PAGES = 5;
|
|
70
|
+
async function fetchPrNodeId(client, owner, name, prNumber) {
|
|
71
|
+
const result = await getSdk11(client).PrNodeId({ owner, name, prNumber });
|
|
72
|
+
const id = result.repository?.pullRequest?.id;
|
|
73
|
+
if (!id) throw new Error(`Pull request #${prNumber} not found in ${owner}/${name}`);
|
|
74
|
+
return id;
|
|
75
|
+
}
|
|
76
|
+
function normalizePrReviewThreadComment(comment) {
|
|
77
|
+
const commentRecord = asRecord(comment);
|
|
78
|
+
if (!commentRecord || typeof commentRecord.id !== "string") {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
const author = asRecord(commentRecord.author);
|
|
82
|
+
const url = commentRecord.url;
|
|
83
|
+
return {
|
|
84
|
+
id: commentRecord.id,
|
|
85
|
+
authorLogin: typeof author?.login === "string" ? author.login : null,
|
|
86
|
+
body: typeof commentRecord.body === "string" ? commentRecord.body : "",
|
|
87
|
+
createdAt: typeof commentRecord.createdAt === "string" ? commentRecord.createdAt : "",
|
|
88
|
+
url: typeof url === "string" ? url : String(url ?? "")
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
function normalizePrReviewThread(thread) {
|
|
92
|
+
const threadRecord = asRecord(thread);
|
|
93
|
+
if (!threadRecord || typeof threadRecord.id !== "string") {
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
const comments = asRecord(threadRecord.comments);
|
|
97
|
+
const commentNodes = Array.isArray(comments?.nodes) ? comments.nodes : [];
|
|
98
|
+
const resolvedBy = asRecord(threadRecord.resolvedBy);
|
|
99
|
+
return {
|
|
100
|
+
id: threadRecord.id,
|
|
101
|
+
path: typeof threadRecord.path === "string" ? threadRecord.path : null,
|
|
102
|
+
line: typeof threadRecord.line === "number" ? threadRecord.line : null,
|
|
103
|
+
startLine: typeof threadRecord.startLine === "number" ? threadRecord.startLine : null,
|
|
104
|
+
diffSide: typeof threadRecord.diffSide === "string" ? threadRecord.diffSide : null,
|
|
105
|
+
subjectType: typeof threadRecord.subjectType === "string" ? threadRecord.subjectType : null,
|
|
106
|
+
isResolved: Boolean(threadRecord.isResolved),
|
|
107
|
+
isOutdated: Boolean(threadRecord.isOutdated),
|
|
108
|
+
viewerCanReply: Boolean(threadRecord.viewerCanReply),
|
|
109
|
+
viewerCanResolve: Boolean(threadRecord.viewerCanResolve),
|
|
110
|
+
viewerCanUnresolve: Boolean(threadRecord.viewerCanUnresolve),
|
|
111
|
+
resolvedByLogin: typeof resolvedBy?.login === "string" ? resolvedBy.login : null,
|
|
112
|
+
comments: commentNodes.map((comment) => normalizePrReviewThreadComment(comment)).flatMap((comment) => comment ? [comment] : [])
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
async function runPrCommentsList(transport, input) {
|
|
116
|
+
assertPrCommentsListInput(input);
|
|
117
|
+
const unresolvedOnly = input.unresolvedOnly ?? true;
|
|
118
|
+
const includeOutdated = input.includeOutdated ?? true;
|
|
119
|
+
const sdk = getSdk8(createGraphqlRequestClient(transport));
|
|
120
|
+
const filteredThreads = [];
|
|
121
|
+
let sourceEndCursor = input.after ?? null;
|
|
122
|
+
let sourceHasNextPage = false;
|
|
123
|
+
let pagesScanned = 0;
|
|
124
|
+
let sourceItemsScanned = 0;
|
|
125
|
+
while (pagesScanned < MAX_PR_REVIEW_THREAD_SCAN_PAGES && filteredThreads.length < input.first) {
|
|
126
|
+
const result = await sdk.PrCommentsList({
|
|
127
|
+
owner: input.owner,
|
|
128
|
+
name: input.name,
|
|
129
|
+
prNumber: input.prNumber,
|
|
130
|
+
first: input.first,
|
|
131
|
+
after: sourceEndCursor
|
|
132
|
+
});
|
|
133
|
+
const repository = asRecord(result.repository);
|
|
134
|
+
const pullRequest = asRecord(repository?.pullRequest);
|
|
135
|
+
const reviewThreads = asRecord(pullRequest?.reviewThreads);
|
|
136
|
+
if (!reviewThreads) {
|
|
137
|
+
throw new Error("Pull request review threads not found");
|
|
138
|
+
}
|
|
139
|
+
const pageInfo = asRecord(reviewThreads.pageInfo);
|
|
140
|
+
const threadEdges = Array.isArray(reviewThreads.edges) ? reviewThreads.edges.map((edge) => {
|
|
141
|
+
const edgeRecord = asRecord(edge);
|
|
142
|
+
if (!edgeRecord) {
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
return {
|
|
146
|
+
cursor: typeof edgeRecord.cursor === "string" ? edgeRecord.cursor : null,
|
|
147
|
+
node: edgeRecord.node
|
|
148
|
+
};
|
|
149
|
+
}).flatMap((edge) => edge ? [edge] : []) : [];
|
|
150
|
+
const threadNodes = threadEdges.length > 0 ? threadEdges : Array.isArray(reviewThreads.nodes) ? reviewThreads.nodes.map((node) => ({ cursor: null, node })) : [];
|
|
151
|
+
pagesScanned += 1;
|
|
152
|
+
sourceItemsScanned += threadNodes.length;
|
|
153
|
+
for (const threadNode of threadNodes) {
|
|
154
|
+
const normalized = normalizePrReviewThread(threadNode.node);
|
|
155
|
+
if (!normalized) {
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
if (unresolvedOnly && normalized.isResolved) {
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
if (!includeOutdated && normalized.isOutdated) {
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
filteredThreads.push({ thread: normalized, cursor: threadNode.cursor });
|
|
165
|
+
}
|
|
166
|
+
sourceHasNextPage = Boolean(pageInfo?.hasNextPage);
|
|
167
|
+
sourceEndCursor = typeof pageInfo?.endCursor === "string" ? pageInfo.endCursor : null;
|
|
168
|
+
if (!sourceHasNextPage) {
|
|
169
|
+
break;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
const hasBufferedFilteredItems = filteredThreads.length > input.first;
|
|
173
|
+
const returnedThreads = filteredThreads.slice(0, input.first);
|
|
174
|
+
const endCursor = returnedThreads.length > 0 ? returnedThreads[returnedThreads.length - 1]?.cursor ?? sourceEndCursor : sourceEndCursor;
|
|
175
|
+
const scanTruncated = sourceHasNextPage && pagesScanned >= MAX_PR_REVIEW_THREAD_SCAN_PAGES;
|
|
176
|
+
return {
|
|
177
|
+
items: returnedThreads.map((entry) => entry.thread),
|
|
178
|
+
pageInfo: {
|
|
179
|
+
hasNextPage: hasBufferedFilteredItems || sourceHasNextPage,
|
|
180
|
+
endCursor: hasBufferedFilteredItems || sourceHasNextPage ? endCursor : null
|
|
181
|
+
},
|
|
182
|
+
filterApplied: {
|
|
183
|
+
unresolvedOnly,
|
|
184
|
+
includeOutdated
|
|
185
|
+
},
|
|
186
|
+
scan: {
|
|
187
|
+
pagesScanned,
|
|
188
|
+
sourceItemsScanned,
|
|
189
|
+
scanTruncated
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
function parseReviewThreadMutationResult(result, mutationKey) {
|
|
194
|
+
const root = asRecord(result);
|
|
195
|
+
const mutation = asRecord(root?.[mutationKey]);
|
|
196
|
+
const thread = asRecord(mutation?.thread);
|
|
197
|
+
if (!thread || typeof thread.id !== "string") {
|
|
198
|
+
throw new Error("Review thread mutation failed");
|
|
199
|
+
}
|
|
200
|
+
return {
|
|
201
|
+
id: thread.id,
|
|
202
|
+
isResolved: Boolean(thread.isResolved)
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
async function runReplyToReviewThread(transport, input) {
|
|
206
|
+
assertReplyToReviewThreadInput(input);
|
|
207
|
+
const client = createGraphqlRequestClient(transport);
|
|
208
|
+
const replyResult = await getSdk5(client).PrCommentReply({
|
|
209
|
+
threadId: input.threadId,
|
|
210
|
+
body: input.body
|
|
211
|
+
});
|
|
212
|
+
const mutation = asRecord(replyResult.addPullRequestReviewThreadReply);
|
|
213
|
+
const comment = asRecord(mutation?.comment);
|
|
214
|
+
if (!comment || typeof comment.id !== "string") {
|
|
215
|
+
throw new Error("Review thread mutation failed");
|
|
216
|
+
}
|
|
217
|
+
const threadStateResult = await getSdk16(client).ReviewThreadState({
|
|
218
|
+
threadId: input.threadId
|
|
219
|
+
});
|
|
220
|
+
const threadNode = asRecord(threadStateResult.node);
|
|
221
|
+
if (!threadNode || typeof threadNode.id !== "string") {
|
|
222
|
+
throw new Error("Review thread state lookup failed");
|
|
223
|
+
}
|
|
224
|
+
return {
|
|
225
|
+
id: input.threadId,
|
|
226
|
+
isResolved: Boolean(threadNode.isResolved),
|
|
227
|
+
commentId: comment.id,
|
|
228
|
+
commentUrl: typeof comment.url === "string" ? comment.url : ""
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
async function runResolveReviewThread(transport, input) {
|
|
232
|
+
assertReviewThreadInput(input);
|
|
233
|
+
const result = await getSdk6(
|
|
234
|
+
createGraphqlRequestClient(transport)
|
|
235
|
+
).PrCommentResolve({
|
|
236
|
+
threadId: input.threadId
|
|
237
|
+
});
|
|
238
|
+
return parseReviewThreadMutationResult(result, "resolveReviewThread");
|
|
239
|
+
}
|
|
240
|
+
async function runUnresolveReviewThread(transport, input) {
|
|
241
|
+
assertReviewThreadInput(input);
|
|
242
|
+
const result = await getSdk7(
|
|
243
|
+
createGraphqlRequestClient(transport)
|
|
244
|
+
).PrCommentUnresolve({
|
|
245
|
+
threadId: input.threadId
|
|
246
|
+
});
|
|
247
|
+
return parseReviewThreadMutationResult(result, "unresolveReviewThread");
|
|
248
|
+
}
|
|
249
|
+
async function runSubmitPrReview(transport, input) {
|
|
250
|
+
assertPrReviewSubmitInput(input);
|
|
251
|
+
const client = createGraphqlRequestClient(transport);
|
|
252
|
+
const prIdResult = await getSdk11(client).PrNodeId({
|
|
253
|
+
owner: input.owner,
|
|
254
|
+
name: input.name,
|
|
255
|
+
prNumber: input.prNumber
|
|
256
|
+
});
|
|
257
|
+
const pullRequestId = prIdResult.repository?.pullRequest?.id;
|
|
258
|
+
if (!pullRequestId) {
|
|
259
|
+
throw new Error("Failed to retrieve pull request ID");
|
|
260
|
+
}
|
|
261
|
+
const threads = input.comments ? input.comments.map((comment) => ({
|
|
262
|
+
path: comment.path,
|
|
263
|
+
body: comment.body,
|
|
264
|
+
line: comment.line,
|
|
265
|
+
...comment.side ? { side: comment.side } : {},
|
|
266
|
+
...comment.startLine ? { startLine: comment.startLine } : {},
|
|
267
|
+
...comment.startSide ? { startSide: comment.startSide } : {}
|
|
268
|
+
})) : [];
|
|
269
|
+
const result = await getSdk12(client).PrReviewSubmit({
|
|
270
|
+
pullRequestId,
|
|
271
|
+
event: input.event,
|
|
272
|
+
...input.body === void 0 ? {} : { body: input.body },
|
|
273
|
+
...threads.length === 0 ? {} : { threads }
|
|
274
|
+
});
|
|
275
|
+
const review = asRecord(asRecord(result.addPullRequestReview)?.pullRequestReview);
|
|
276
|
+
if (!review || typeof review.id !== "string") {
|
|
277
|
+
throw new Error("Failed to parse pull request review response");
|
|
278
|
+
}
|
|
279
|
+
return {
|
|
280
|
+
id: review.id,
|
|
281
|
+
state: typeof review.state === "string" ? review.state : "",
|
|
282
|
+
url: typeof review.url === "string" ? review.url : "",
|
|
283
|
+
body: typeof review.body === "string" ? review.body : null
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
async function runPrCreate(transport, input) {
|
|
287
|
+
assertPrCreateInput(input);
|
|
288
|
+
const client = createGraphqlRequestClient(transport);
|
|
289
|
+
const repoResult = await getSdk(client).IssueCreateRepositoryId({
|
|
290
|
+
owner: input.owner,
|
|
291
|
+
name: input.name
|
|
292
|
+
});
|
|
293
|
+
const repositoryId = repoResult.repository?.id;
|
|
294
|
+
if (!repositoryId) {
|
|
295
|
+
throw new Error(`Repository ${input.owner}/${input.name} not found`);
|
|
296
|
+
}
|
|
297
|
+
const result = await getSdk9(client).PrCreate({
|
|
298
|
+
repositoryId,
|
|
299
|
+
baseRefName: input.baseRefName,
|
|
300
|
+
headRefName: input.headRefName,
|
|
301
|
+
title: input.title,
|
|
302
|
+
...input.body !== void 0 ? { body: input.body } : {},
|
|
303
|
+
...input.draft !== void 0 ? { draft: input.draft } : {}
|
|
304
|
+
});
|
|
305
|
+
const pr = result.createPullRequest?.pullRequest;
|
|
306
|
+
if (!pr) {
|
|
307
|
+
throw new Error("Failed to create pull request");
|
|
308
|
+
}
|
|
309
|
+
return {
|
|
310
|
+
number: pr.number,
|
|
311
|
+
url: String(pr.url),
|
|
312
|
+
title: pr.title,
|
|
313
|
+
state: String(pr.state),
|
|
314
|
+
draft: pr.isDraft
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
async function runPrUpdate(transport, input) {
|
|
318
|
+
assertPrUpdateInput(input);
|
|
319
|
+
if (input.draft !== void 0) {
|
|
320
|
+
throw new Error("draft update operation not available via GraphQL route");
|
|
321
|
+
}
|
|
322
|
+
const client = createGraphqlRequestClient(transport);
|
|
323
|
+
const pullRequestId = await fetchPrNodeId(client, input.owner, input.name, input.prNumber);
|
|
324
|
+
const result = await getSdk14(client).PrUpdate({
|
|
325
|
+
pullRequestId,
|
|
326
|
+
...input.title !== void 0 ? { title: input.title } : {},
|
|
327
|
+
...input.body !== void 0 ? { body: input.body } : {}
|
|
328
|
+
});
|
|
329
|
+
const pr = result.updatePullRequest?.pullRequest;
|
|
330
|
+
if (!pr) {
|
|
331
|
+
throw new Error("Failed to update pull request");
|
|
332
|
+
}
|
|
333
|
+
return {
|
|
334
|
+
number: pr.number,
|
|
335
|
+
url: String(pr.url),
|
|
336
|
+
title: pr.title,
|
|
337
|
+
state: String(pr.state),
|
|
338
|
+
draft: pr.isDraft
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
async function runPrMerge(transport, input) {
|
|
342
|
+
assertPrMergeInput(input);
|
|
343
|
+
if (input.deleteBranch === true) {
|
|
344
|
+
throw new Error(
|
|
345
|
+
"deleteBranch operation not available via GraphQL mergePullRequest mutation; use the CLI route to delete the branch after merging"
|
|
346
|
+
);
|
|
347
|
+
}
|
|
348
|
+
const client = createGraphqlRequestClient(transport);
|
|
349
|
+
const pullRequestId = await fetchPrNodeId(client, input.owner, input.name, input.prNumber);
|
|
350
|
+
const result = await getSdk10(client).PrMerge({
|
|
351
|
+
pullRequestId,
|
|
352
|
+
...input.mergeMethod !== void 0 ? { mergeMethod: input.mergeMethod } : {}
|
|
353
|
+
});
|
|
354
|
+
const pr = result.mergePullRequest?.pullRequest;
|
|
355
|
+
if (!pr) {
|
|
356
|
+
throw new Error("Failed to merge pull request");
|
|
357
|
+
}
|
|
358
|
+
return {
|
|
359
|
+
prNumber: input.prNumber,
|
|
360
|
+
// method echoes the input mergeMethod rather than reading from the GQL response,
|
|
361
|
+
// since GitHub's mergePullRequest mutation does not return the merge method used.
|
|
362
|
+
// isMethodAssumed is true when the caller did not specify a merge method; the
|
|
363
|
+
// returned value of "merge" is an assumption, not confirmed by GitHub.
|
|
364
|
+
method: input.mergeMethod?.toLowerCase() ?? "merge",
|
|
365
|
+
isMethodAssumed: input.mergeMethod === void 0,
|
|
366
|
+
// Note: GitHub GraphQL API does not expose merge queue state; queued is always false
|
|
367
|
+
queued: false,
|
|
368
|
+
deleteBranch: input.deleteBranch ?? false
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
async function runPrBranchUpdate(transport, input) {
|
|
372
|
+
assertPrBranchUpdateInput(input);
|
|
373
|
+
const client = createGraphqlRequestClient(transport);
|
|
374
|
+
const pullRequestId = await fetchPrNodeId(client, input.owner, input.name, input.prNumber);
|
|
375
|
+
const result = await getSdk4(client).PrBranchUpdate({
|
|
376
|
+
pullRequestId,
|
|
377
|
+
...input.updateMethod !== void 0 ? { updateMethod: input.updateMethod } : {}
|
|
378
|
+
});
|
|
379
|
+
const pr = result.updatePullRequestBranch?.pullRequest;
|
|
380
|
+
if (!pr) {
|
|
381
|
+
throw new Error("Failed to update pull request branch");
|
|
382
|
+
}
|
|
383
|
+
return {
|
|
384
|
+
prNumber: input.prNumber,
|
|
385
|
+
updated: true
|
|
386
|
+
};
|
|
387
|
+
}
|
|
388
|
+
async function resolveUserNodeIds(client, logins) {
|
|
389
|
+
const results = await Promise.all(
|
|
390
|
+
logins.map((login) => getSdk15(client).UserNodeId({ login }))
|
|
391
|
+
);
|
|
392
|
+
return logins.map((login, i) => {
|
|
393
|
+
const id = results[i]?.user?.id;
|
|
394
|
+
if (!id) throw new Error(`Could not resolve user: ${login}`);
|
|
395
|
+
return id;
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
async function runPrAssigneesAdd(transport, input) {
|
|
399
|
+
assertPrAssigneesInput(input);
|
|
400
|
+
const client = createGraphqlRequestClient(transport);
|
|
401
|
+
const pullRequestId = await fetchPrNodeId(client, input.owner, input.name, input.prNumber);
|
|
402
|
+
const userIds = await resolveUserNodeIds(client, input.assignees);
|
|
403
|
+
const result = await getSdk2(client).PrAssigneesAdd({
|
|
404
|
+
assignableId: pullRequestId,
|
|
405
|
+
assigneeIds: userIds
|
|
406
|
+
});
|
|
407
|
+
const assignable = result.addAssigneesToAssignable?.assignable;
|
|
408
|
+
const prAssignable = assignable?.__typename === "PullRequest" ? assignable : null;
|
|
409
|
+
if (!prAssignable) {
|
|
410
|
+
throw new Error("Failed to add assignees to pull request");
|
|
411
|
+
}
|
|
412
|
+
const confirmedLogins = (prAssignable.assignees.nodes ?? []).filter((node) => node !== null).map((node) => node.login);
|
|
413
|
+
return {
|
|
414
|
+
prNumber: input.prNumber,
|
|
415
|
+
added: confirmedLogins
|
|
416
|
+
};
|
|
417
|
+
}
|
|
418
|
+
async function runPrAssigneesRemove(transport, input) {
|
|
419
|
+
assertPrAssigneesInput(input);
|
|
420
|
+
const client = createGraphqlRequestClient(transport);
|
|
421
|
+
const pullRequestId = await fetchPrNodeId(client, input.owner, input.name, input.prNumber);
|
|
422
|
+
const userIds = await resolveUserNodeIds(client, input.assignees);
|
|
423
|
+
const result = await getSdk3(client).PrAssigneesRemove({
|
|
424
|
+
assignableId: pullRequestId,
|
|
425
|
+
assigneeIds: userIds
|
|
426
|
+
});
|
|
427
|
+
const assignable = result.removeAssigneesFromAssignable?.assignable;
|
|
428
|
+
const prAssignable = assignable?.__typename === "PullRequest" ? assignable : null;
|
|
429
|
+
if (!prAssignable) {
|
|
430
|
+
throw new Error("Failed to remove assignees from pull request");
|
|
431
|
+
}
|
|
432
|
+
const remainingLogins = (prAssignable.assignees.nodes ?? []).filter((node) => node !== null).map((node) => node.login);
|
|
433
|
+
const removed = input.assignees.filter((login) => !remainingLogins.includes(login));
|
|
434
|
+
return {
|
|
435
|
+
prNumber: input.prNumber,
|
|
436
|
+
removed
|
|
437
|
+
};
|
|
438
|
+
}
|
|
439
|
+
async function runPrReviewsRequest(transport, input) {
|
|
440
|
+
assertPrReviewsRequestInput(input);
|
|
441
|
+
const client = createGraphqlRequestClient(transport);
|
|
442
|
+
const pullRequestId = await fetchPrNodeId(client, input.owner, input.name, input.prNumber);
|
|
443
|
+
const reviewerUserIds = await resolveUserNodeIds(client, input.reviewers);
|
|
444
|
+
const result = await getSdk13(client).PrReviewsRequest({
|
|
445
|
+
pullRequestId,
|
|
446
|
+
userIds: reviewerUserIds,
|
|
447
|
+
reviewRequestsFirst: Math.min(Math.max(reviewerUserIds.length, 1), 100)
|
|
448
|
+
});
|
|
449
|
+
const pr = result.requestReviews?.pullRequest;
|
|
450
|
+
if (!pr) {
|
|
451
|
+
throw new Error("Failed to request pull request reviews");
|
|
452
|
+
}
|
|
453
|
+
const reviewRequests = (pr.reviewRequests?.nodes ?? []).flatMap((node) => {
|
|
454
|
+
if (!node) return [];
|
|
455
|
+
const reviewer = node.requestedReviewer;
|
|
456
|
+
if (reviewer?.__typename === "User" && "login" in reviewer) {
|
|
457
|
+
return [reviewer.login];
|
|
458
|
+
}
|
|
459
|
+
if (reviewer?.__typename === "Team" && "slug" in reviewer) {
|
|
460
|
+
return [reviewer.slug];
|
|
461
|
+
}
|
|
462
|
+
return [];
|
|
463
|
+
});
|
|
464
|
+
return {
|
|
465
|
+
prNumber: input.prNumber,
|
|
466
|
+
reviewers: reviewRequests,
|
|
467
|
+
updated: true
|
|
468
|
+
};
|
|
469
|
+
}
|
|
470
|
+
export {
|
|
471
|
+
runPrAssigneesAdd,
|
|
472
|
+
runPrAssigneesRemove,
|
|
473
|
+
runPrBranchUpdate,
|
|
474
|
+
runPrCommentsList,
|
|
475
|
+
runPrCreate,
|
|
476
|
+
runPrMerge,
|
|
477
|
+
runPrReviewsRequest,
|
|
478
|
+
runPrUpdate,
|
|
479
|
+
runReplyToReviewThread,
|
|
480
|
+
runResolveReviewThread,
|
|
481
|
+
runSubmitPrReview,
|
|
482
|
+
runUnresolveReviewThread
|
|
483
|
+
};
|
|
484
|
+
//# sourceMappingURL=pr-mutations-WOTG6FAB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/gql/operations/review-thread-state.generated.ts","../src/gql/domains/pr-mutations.ts"],"sourcesContent":["import type { GraphQLClient, RequestOptions } from \"graphql-request\"\nimport type * as Types from \"./base-types.js\"\n\ntype GraphQLClientRequestHeaders = RequestOptions[\"requestHeaders\"]\nexport type ReviewThreadStateQueryVariables = Types.Exact<{\n threadId: Types.Scalars[\"ID\"][\"input\"]\n}>\n\nexport type ReviewThreadStateQuery = {\n __typename?: \"Query\"\n node?:\n | { __typename?: \"AddedToMergeQueueEvent\" }\n | { __typename?: \"AddedToProjectEvent\" }\n | { __typename?: \"AddedToProjectV2Event\" }\n | { __typename?: \"App\" }\n | { __typename?: \"AssignedEvent\" }\n | { __typename?: \"AutoMergeDisabledEvent\" }\n | { __typename?: \"AutoMergeEnabledEvent\" }\n | { __typename?: \"AutoRebaseEnabledEvent\" }\n | { __typename?: \"AutoSquashEnabledEvent\" }\n | { __typename?: \"AutomaticBaseChangeFailedEvent\" }\n | { __typename?: \"AutomaticBaseChangeSucceededEvent\" }\n | { __typename?: \"BaseRefChangedEvent\" }\n | { __typename?: \"BaseRefDeletedEvent\" }\n | { __typename?: \"BaseRefForcePushedEvent\" }\n | { __typename?: \"Blob\" }\n | { __typename?: \"BlockedByAddedEvent\" }\n | { __typename?: \"BlockedByRemovedEvent\" }\n | { __typename?: \"BlockingAddedEvent\" }\n | { __typename?: \"BlockingRemovedEvent\" }\n | { __typename?: \"Bot\" }\n | { __typename?: \"BranchProtectionRule\" }\n | { __typename?: \"BypassForcePushAllowance\" }\n | { __typename?: \"BypassPullRequestAllowance\" }\n | { __typename?: \"CWE\" }\n | { __typename?: \"CheckRun\" }\n | { __typename?: \"CheckSuite\" }\n | { __typename?: \"ClosedEvent\" }\n | { __typename?: \"CodeOfConduct\" }\n | { __typename?: \"CommentDeletedEvent\" }\n | { __typename?: \"Commit\" }\n | { __typename?: \"CommitComment\" }\n | { __typename?: \"CommitCommentThread\" }\n | { __typename?: \"Comparison\" }\n | { __typename?: \"ConnectedEvent\" }\n | { __typename?: \"ConvertToDraftEvent\" }\n | { __typename?: \"ConvertedFromDraftEvent\" }\n | { __typename?: \"ConvertedNoteToIssueEvent\" }\n | { __typename?: \"ConvertedToDiscussionEvent\" }\n | { __typename?: \"CrossReferencedEvent\" }\n | { __typename?: \"DemilestonedEvent\" }\n | { __typename?: \"DependencyGraphManifest\" }\n | { __typename?: \"DeployKey\" }\n | { __typename?: \"DeployedEvent\" }\n | { __typename?: \"Deployment\" }\n | { __typename?: \"DeploymentEnvironmentChangedEvent\" }\n | { __typename?: \"DeploymentReview\" }\n | { __typename?: \"DeploymentStatus\" }\n | { __typename?: \"DisconnectedEvent\" }\n | { __typename?: \"Discussion\" }\n | { __typename?: \"DiscussionCategory\" }\n | { __typename?: \"DiscussionComment\" }\n | { __typename?: \"DiscussionPoll\" }\n | { __typename?: \"DiscussionPollOption\" }\n | { __typename?: \"DraftIssue\" }\n | { __typename?: \"Enterprise\" }\n | { __typename?: \"EnterpriseAdministratorInvitation\" }\n | { __typename?: \"EnterpriseIdentityProvider\" }\n | { __typename?: \"EnterpriseMemberInvitation\" }\n | { __typename?: \"EnterpriseRepositoryInfo\" }\n | { __typename?: \"EnterpriseServerInstallation\" }\n | { __typename?: \"EnterpriseServerUserAccount\" }\n | { __typename?: \"EnterpriseServerUserAccountEmail\" }\n | { __typename?: \"EnterpriseServerUserAccountsUpload\" }\n | { __typename?: \"EnterpriseUserAccount\" }\n | { __typename?: \"Environment\" }\n | { __typename?: \"ExternalIdentity\" }\n | { __typename?: \"Gist\" }\n | { __typename?: \"GistComment\" }\n | { __typename?: \"HeadRefDeletedEvent\" }\n | { __typename?: \"HeadRefForcePushedEvent\" }\n | { __typename?: \"HeadRefRestoredEvent\" }\n | { __typename?: \"IpAllowListEntry\" }\n | { __typename?: \"Issue\" }\n | { __typename?: \"IssueComment\" }\n | { __typename?: \"IssueType\" }\n | { __typename?: \"IssueTypeAddedEvent\" }\n | { __typename?: \"IssueTypeChangedEvent\" }\n | { __typename?: \"IssueTypeRemovedEvent\" }\n | { __typename?: \"Label\" }\n | { __typename?: \"LabeledEvent\" }\n | { __typename?: \"Language\" }\n | { __typename?: \"License\" }\n | { __typename?: \"LinkedBranch\" }\n | { __typename?: \"LockedEvent\" }\n | { __typename?: \"Mannequin\" }\n | { __typename?: \"MarkedAsDuplicateEvent\" }\n | { __typename?: \"MarketplaceCategory\" }\n | { __typename?: \"MarketplaceListing\" }\n | { __typename?: \"MemberFeatureRequestNotification\" }\n | { __typename?: \"MembersCanDeleteReposClearAuditEntry\" }\n | { __typename?: \"MembersCanDeleteReposDisableAuditEntry\" }\n | { __typename?: \"MembersCanDeleteReposEnableAuditEntry\" }\n | { __typename?: \"MentionedEvent\" }\n | { __typename?: \"MergeQueue\" }\n | { __typename?: \"MergeQueueEntry\" }\n | { __typename?: \"MergedEvent\" }\n | { __typename?: \"MigrationSource\" }\n | { __typename?: \"Milestone\" }\n | { __typename?: \"MilestonedEvent\" }\n | { __typename?: \"MovedColumnsInProjectEvent\" }\n | { __typename?: \"OIDCProvider\" }\n | { __typename?: \"OauthApplicationCreateAuditEntry\" }\n | { __typename?: \"OrgAddBillingManagerAuditEntry\" }\n | { __typename?: \"OrgAddMemberAuditEntry\" }\n | { __typename?: \"OrgBlockUserAuditEntry\" }\n | { __typename?: \"OrgConfigDisableCollaboratorsOnlyAuditEntry\" }\n | { __typename?: \"OrgConfigEnableCollaboratorsOnlyAuditEntry\" }\n | { __typename?: \"OrgCreateAuditEntry\" }\n | { __typename?: \"OrgDisableOauthAppRestrictionsAuditEntry\" }\n | { __typename?: \"OrgDisableSamlAuditEntry\" }\n | { __typename?: \"OrgDisableTwoFactorRequirementAuditEntry\" }\n | { __typename?: \"OrgEnableOauthAppRestrictionsAuditEntry\" }\n | { __typename?: \"OrgEnableSamlAuditEntry\" }\n | { __typename?: \"OrgEnableTwoFactorRequirementAuditEntry\" }\n | { __typename?: \"OrgInviteMemberAuditEntry\" }\n | { __typename?: \"OrgInviteToBusinessAuditEntry\" }\n | { __typename?: \"OrgOauthAppAccessApprovedAuditEntry\" }\n | { __typename?: \"OrgOauthAppAccessBlockedAuditEntry\" }\n | { __typename?: \"OrgOauthAppAccessDeniedAuditEntry\" }\n | { __typename?: \"OrgOauthAppAccessRequestedAuditEntry\" }\n | { __typename?: \"OrgOauthAppAccessUnblockedAuditEntry\" }\n | { __typename?: \"OrgRemoveBillingManagerAuditEntry\" }\n | { __typename?: \"OrgRemoveMemberAuditEntry\" }\n | { __typename?: \"OrgRemoveOutsideCollaboratorAuditEntry\" }\n | { __typename?: \"OrgRestoreMemberAuditEntry\" }\n | { __typename?: \"OrgUnblockUserAuditEntry\" }\n | { __typename?: \"OrgUpdateDefaultRepositoryPermissionAuditEntry\" }\n | { __typename?: \"OrgUpdateMemberAuditEntry\" }\n | { __typename?: \"OrgUpdateMemberRepositoryCreationPermissionAuditEntry\" }\n | { __typename?: \"OrgUpdateMemberRepositoryInvitationPermissionAuditEntry\" }\n | { __typename?: \"Organization\" }\n | { __typename?: \"OrganizationIdentityProvider\" }\n | { __typename?: \"OrganizationInvitation\" }\n | { __typename?: \"OrganizationMigration\" }\n | { __typename?: \"Package\" }\n | { __typename?: \"PackageFile\" }\n | { __typename?: \"PackageTag\" }\n | { __typename?: \"PackageVersion\" }\n | { __typename?: \"ParentIssueAddedEvent\" }\n | { __typename?: \"ParentIssueRemovedEvent\" }\n | { __typename?: \"PinnedDiscussion\" }\n | { __typename?: \"PinnedEnvironment\" }\n | { __typename?: \"PinnedEvent\" }\n | { __typename?: \"PinnedIssue\" }\n | { __typename?: \"PrivateRepositoryForkingDisableAuditEntry\" }\n | { __typename?: \"PrivateRepositoryForkingEnableAuditEntry\" }\n | { __typename?: \"Project\" }\n | { __typename?: \"ProjectCard\" }\n | { __typename?: \"ProjectColumn\" }\n | { __typename?: \"ProjectV2\" }\n | { __typename?: \"ProjectV2Field\" }\n | { __typename?: \"ProjectV2Item\" }\n | { __typename?: \"ProjectV2ItemFieldDateValue\" }\n | { __typename?: \"ProjectV2ItemFieldIterationValue\" }\n | { __typename?: \"ProjectV2ItemFieldNumberValue\" }\n | { __typename?: \"ProjectV2ItemFieldSingleSelectValue\" }\n | { __typename?: \"ProjectV2ItemFieldTextValue\" }\n | { __typename?: \"ProjectV2ItemStatusChangedEvent\" }\n | { __typename?: \"ProjectV2IterationField\" }\n | { __typename?: \"ProjectV2SingleSelectField\" }\n | { __typename?: \"ProjectV2StatusUpdate\" }\n | { __typename?: \"ProjectV2View\" }\n | { __typename?: \"ProjectV2Workflow\" }\n | { __typename?: \"PublicKey\" }\n | { __typename?: \"PullRequest\" }\n | { __typename?: \"PullRequestCommit\" }\n | { __typename?: \"PullRequestCommitCommentThread\" }\n | { __typename?: \"PullRequestReview\" }\n | { __typename?: \"PullRequestReviewComment\" }\n | { __typename?: \"PullRequestReviewThread\"; id: string; isResolved: boolean }\n | { __typename?: \"PullRequestThread\" }\n | { __typename?: \"Push\" }\n | { __typename?: \"PushAllowance\" }\n | { __typename?: \"Query\" }\n | { __typename?: \"Reaction\" }\n | { __typename?: \"ReadyForReviewEvent\" }\n | { __typename?: \"Ref\" }\n | { __typename?: \"ReferencedEvent\" }\n | { __typename?: \"Release\" }\n | { __typename?: \"ReleaseAsset\" }\n | { __typename?: \"RemovedFromMergeQueueEvent\" }\n | { __typename?: \"RemovedFromProjectEvent\" }\n | { __typename?: \"RemovedFromProjectV2Event\" }\n | { __typename?: \"RenamedTitleEvent\" }\n | { __typename?: \"ReopenedEvent\" }\n | { __typename?: \"RepoAccessAuditEntry\" }\n | { __typename?: \"RepoAddMemberAuditEntry\" }\n | { __typename?: \"RepoAddTopicAuditEntry\" }\n | { __typename?: \"RepoArchivedAuditEntry\" }\n | { __typename?: \"RepoChangeMergeSettingAuditEntry\" }\n | { __typename?: \"RepoConfigDisableAnonymousGitAccessAuditEntry\" }\n | { __typename?: \"RepoConfigDisableCollaboratorsOnlyAuditEntry\" }\n | { __typename?: \"RepoConfigDisableContributorsOnlyAuditEntry\" }\n | { __typename?: \"RepoConfigDisableSockpuppetDisallowedAuditEntry\" }\n | { __typename?: \"RepoConfigEnableAnonymousGitAccessAuditEntry\" }\n | { __typename?: \"RepoConfigEnableCollaboratorsOnlyAuditEntry\" }\n | { __typename?: \"RepoConfigEnableContributorsOnlyAuditEntry\" }\n | { __typename?: \"RepoConfigEnableSockpuppetDisallowedAuditEntry\" }\n | { __typename?: \"RepoConfigLockAnonymousGitAccessAuditEntry\" }\n | { __typename?: \"RepoConfigUnlockAnonymousGitAccessAuditEntry\" }\n | { __typename?: \"RepoCreateAuditEntry\" }\n | { __typename?: \"RepoDestroyAuditEntry\" }\n | { __typename?: \"RepoRemoveMemberAuditEntry\" }\n | { __typename?: \"RepoRemoveTopicAuditEntry\" }\n | { __typename?: \"Repository\" }\n | { __typename?: \"RepositoryCustomProperty\" }\n | { __typename?: \"RepositoryInvitation\" }\n | { __typename?: \"RepositoryMigration\" }\n | { __typename?: \"RepositoryRule\" }\n | { __typename?: \"RepositoryRuleset\" }\n | { __typename?: \"RepositoryRulesetBypassActor\" }\n | { __typename?: \"RepositoryTopic\" }\n | { __typename?: \"RepositoryVisibilityChangeDisableAuditEntry\" }\n | { __typename?: \"RepositoryVisibilityChangeEnableAuditEntry\" }\n | { __typename?: \"RepositoryVulnerabilityAlert\" }\n | { __typename?: \"ReviewDismissalAllowance\" }\n | { __typename?: \"ReviewDismissedEvent\" }\n | { __typename?: \"ReviewRequest\" }\n | { __typename?: \"ReviewRequestRemovedEvent\" }\n | { __typename?: \"ReviewRequestedEvent\" }\n | { __typename?: \"SavedReply\" }\n | { __typename?: \"SecurityAdvisory\" }\n | { __typename?: \"SponsorsActivity\" }\n | { __typename?: \"SponsorsListing\" }\n | { __typename?: \"SponsorsListingFeaturedItem\" }\n | { __typename?: \"SponsorsTier\" }\n | { __typename?: \"Sponsorship\" }\n | { __typename?: \"SponsorshipNewsletter\" }\n | { __typename?: \"Status\" }\n | { __typename?: \"StatusCheckRollup\" }\n | { __typename?: \"StatusContext\" }\n | { __typename?: \"SubIssueAddedEvent\" }\n | { __typename?: \"SubIssueRemovedEvent\" }\n | { __typename?: \"SubscribedEvent\" }\n | { __typename?: \"Tag\" }\n | { __typename?: \"Team\" }\n | { __typename?: \"TeamAddMemberAuditEntry\" }\n | { __typename?: \"TeamAddRepositoryAuditEntry\" }\n | { __typename?: \"TeamChangeParentTeamAuditEntry\" }\n | { __typename?: \"TeamRemoveMemberAuditEntry\" }\n | { __typename?: \"TeamRemoveRepositoryAuditEntry\" }\n | { __typename?: \"Topic\" }\n | { __typename?: \"TransferredEvent\" }\n | { __typename?: \"Tree\" }\n | { __typename?: \"UnassignedEvent\" }\n | { __typename?: \"UnlabeledEvent\" }\n | { __typename?: \"UnlockedEvent\" }\n | { __typename?: \"UnmarkedAsDuplicateEvent\" }\n | { __typename?: \"UnpinnedEvent\" }\n | { __typename?: \"UnsubscribedEvent\" }\n | { __typename?: \"User\" }\n | { __typename?: \"UserBlockedEvent\" }\n | { __typename?: \"UserContentEdit\" }\n | { __typename?: \"UserList\" }\n | { __typename?: \"UserNamespaceRepository\" }\n | { __typename?: \"UserStatus\" }\n | { __typename?: \"VerifiableDomain\" }\n | { __typename?: \"Workflow\" }\n | { __typename?: \"WorkflowRun\" }\n | { __typename?: \"WorkflowRunFile\" }\n | null\n}\n\nexport const ReviewThreadStateDocument = `\n query ReviewThreadState($threadId: ID!) {\n node(id: $threadId) {\n ... on PullRequestReviewThread {\n id\n isResolved\n }\n }\n}\n `\n\nexport type SdkFunctionWrapper = <T>(\n action: (requestHeaders?: Record<string, string>) => Promise<T>,\n operationName: string,\n operationType?: string,\n variables?: any,\n) => Promise<T>\n\nconst defaultWrapper: SdkFunctionWrapper = (action, _operationName, _operationType, _variables) =>\n action()\n\nexport function getSdk(client: GraphQLClient, withWrapper: SdkFunctionWrapper = defaultWrapper) {\n return {\n ReviewThreadState(\n variables: ReviewThreadStateQueryVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit[\"signal\"],\n ): Promise<ReviewThreadStateQuery> {\n return withWrapper(\n (wrappedRequestHeaders) =>\n client.request<ReviewThreadStateQuery>({\n document: ReviewThreadStateDocument,\n variables,\n requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders },\n signal,\n }),\n \"ReviewThreadState\",\n \"query\",\n variables,\n )\n },\n }\n}\nexport type Sdk = ReturnType<typeof getSdk>\n","import type { GraphQLClient } from \"graphql-request\"\nimport {\n asRecord,\n assertPrAssigneesInput,\n assertPrBranchUpdateInput,\n assertPrCommentsListInput,\n assertPrCreateInput,\n assertPrMergeInput,\n assertPrReviewSubmitInput,\n assertPrReviewsRequestInput,\n assertPrUpdateInput,\n assertReplyToReviewThreadInput,\n assertReviewThreadInput,\n} from \"../assertions.js\"\nimport type * as Types from \"../operations/base-types.js\"\nimport { getSdk as getIssueCreateRepositoryIdSdk } from \"../operations/issue-create-repository-id.generated.js\"\nimport { getSdk as getPrAssigneesAddSdk } from \"../operations/pr-assignees-add.generated.js\"\nimport { getSdk as getPrAssigneesRemoveSdk } from \"../operations/pr-assignees-remove.generated.js\"\nimport { getSdk as getPrBranchUpdateSdk } from \"../operations/pr-branch-update.generated.js\"\nimport { getSdk as getPrCommentReplySdk } from \"../operations/pr-comment-reply.generated.js\"\nimport { getSdk as getPrCommentResolveSdk } from \"../operations/pr-comment-resolve.generated.js\"\nimport { getSdk as getPrCommentUnresolveSdk } from \"../operations/pr-comment-unresolve.generated.js\"\nimport { getSdk as getPrCommentsListSdk } from \"../operations/pr-comments-list.generated.js\"\nimport { getSdk as getPrCreateSdk } from \"../operations/pr-create.generated.js\"\nimport { getSdk as getPrMergeSdk } from \"../operations/pr-merge.generated.js\"\nimport { getSdk as getPrNodeIdSdk } from \"../operations/pr-node-id.generated.js\"\nimport {\n getSdk as getPrReviewSubmitSdk,\n type PrReviewSubmitMutationVariables,\n} from \"../operations/pr-review-submit.generated.js\"\nimport { getSdk as getPrReviewsRequestSdk } from \"../operations/pr-reviews-request.generated.js\"\nimport { getSdk as getPrUpdateSdk } from \"../operations/pr-update.generated.js\"\nimport { getSdk as getReviewThreadStateSdk } from \"../operations/review-thread-state.generated.js\"\nimport { getSdk as getUserNodeIdSdk } from \"../operations/user-node-id.generated.js\"\nimport type { GraphqlTransport } from \"../transport.js\"\nimport { createGraphqlRequestClient } from \"../transport.js\"\nimport type {\n DraftComment,\n PrAssigneesAddData,\n PrAssigneesAddInput,\n PrAssigneesRemoveData,\n PrAssigneesRemoveInput,\n PrBranchUpdateData,\n PrBranchUpdateInput,\n PrCommentsListData,\n PrCommentsListInput,\n PrCreateData,\n PrCreateInput,\n PrMergeData,\n PrMergeInput,\n PrReviewSubmitData,\n PrReviewSubmitInput,\n PrReviewsRequestData,\n PrReviewsRequestInput,\n PrReviewThreadCommentData,\n PrReviewThreadData,\n PrUpdateData,\n PrUpdateInput,\n ReplyToReviewThreadData,\n ReplyToReviewThreadInput,\n ReviewThreadMutationData,\n ReviewThreadMutationInput,\n} from \"../types.js\"\n\nconst MAX_PR_REVIEW_THREAD_SCAN_PAGES = 5\n\nasync function fetchPrNodeId(\n client: GraphQLClient,\n owner: string,\n name: string,\n prNumber: number,\n): Promise<string> {\n const result = await getPrNodeIdSdk(client).PrNodeId({ owner, name, prNumber })\n const id = result.repository?.pullRequest?.id\n if (!id) throw new Error(`Pull request #${prNumber} not found in ${owner}/${name}`)\n return id\n}\n\nfunction normalizePrReviewThreadComment(comment: unknown): PrReviewThreadCommentData | null {\n const commentRecord = asRecord(comment)\n if (!commentRecord || typeof commentRecord.id !== \"string\") {\n return null\n }\n\n const author = asRecord(commentRecord.author)\n const url = commentRecord.url\n\n return {\n id: commentRecord.id,\n authorLogin: typeof author?.login === \"string\" ? author.login : null,\n body: typeof commentRecord.body === \"string\" ? commentRecord.body : \"\",\n createdAt: typeof commentRecord.createdAt === \"string\" ? commentRecord.createdAt : \"\",\n url: typeof url === \"string\" ? url : String(url ?? \"\"),\n }\n}\n\nfunction normalizePrReviewThread(thread: unknown): PrReviewThreadData | null {\n const threadRecord = asRecord(thread)\n if (!threadRecord || typeof threadRecord.id !== \"string\") {\n return null\n }\n\n const comments = asRecord(threadRecord.comments)\n const commentNodes = Array.isArray(comments?.nodes) ? comments.nodes : []\n const resolvedBy = asRecord(threadRecord.resolvedBy)\n\n return {\n id: threadRecord.id,\n path: typeof threadRecord.path === \"string\" ? threadRecord.path : null,\n line: typeof threadRecord.line === \"number\" ? threadRecord.line : null,\n startLine: typeof threadRecord.startLine === \"number\" ? threadRecord.startLine : null,\n diffSide: typeof threadRecord.diffSide === \"string\" ? threadRecord.diffSide : null,\n subjectType: typeof threadRecord.subjectType === \"string\" ? threadRecord.subjectType : null,\n isResolved: Boolean(threadRecord.isResolved),\n isOutdated: Boolean(threadRecord.isOutdated),\n viewerCanReply: Boolean(threadRecord.viewerCanReply),\n viewerCanResolve: Boolean(threadRecord.viewerCanResolve),\n viewerCanUnresolve: Boolean(threadRecord.viewerCanUnresolve),\n resolvedByLogin: typeof resolvedBy?.login === \"string\" ? resolvedBy.login : null,\n comments: commentNodes\n .map((comment) => normalizePrReviewThreadComment(comment))\n .flatMap((comment) => (comment ? [comment] : [])),\n }\n}\n\nexport async function runPrCommentsList(\n transport: GraphqlTransport,\n input: PrCommentsListInput,\n): Promise<PrCommentsListData> {\n assertPrCommentsListInput(input)\n\n const unresolvedOnly = input.unresolvedOnly ?? true\n const includeOutdated = input.includeOutdated ?? true\n\n const sdk = getPrCommentsListSdk(createGraphqlRequestClient(transport))\n\n const filteredThreads: Array<{ thread: PrReviewThreadData; cursor: string | null }> = []\n let sourceEndCursor: string | null = input.after ?? null\n let sourceHasNextPage = false\n let pagesScanned = 0\n let sourceItemsScanned = 0\n\n while (pagesScanned < MAX_PR_REVIEW_THREAD_SCAN_PAGES && filteredThreads.length < input.first) {\n const result = await sdk.PrCommentsList({\n owner: input.owner,\n name: input.name,\n prNumber: input.prNumber,\n first: input.first,\n after: sourceEndCursor,\n })\n\n const repository = asRecord(result.repository)\n const pullRequest = asRecord(repository?.pullRequest)\n const reviewThreads = asRecord(pullRequest?.reviewThreads)\n if (!reviewThreads) {\n throw new Error(\"Pull request review threads not found\")\n }\n\n const pageInfo = asRecord(reviewThreads.pageInfo)\n const threadEdges = Array.isArray(reviewThreads.edges)\n ? reviewThreads.edges\n .map((edge) => {\n const edgeRecord = asRecord(edge)\n if (!edgeRecord) {\n return null\n }\n\n return {\n cursor: typeof edgeRecord.cursor === \"string\" ? edgeRecord.cursor : null,\n node: edgeRecord.node,\n }\n })\n .flatMap((edge) => (edge ? [edge] : []))\n : []\n\n const threadNodes =\n threadEdges.length > 0\n ? threadEdges\n : Array.isArray(reviewThreads.nodes)\n ? reviewThreads.nodes.map((node) => ({ cursor: null, node }))\n : []\n\n pagesScanned += 1\n sourceItemsScanned += threadNodes.length\n\n for (const threadNode of threadNodes) {\n const normalized = normalizePrReviewThread(threadNode.node)\n if (!normalized) {\n continue\n }\n\n if (unresolvedOnly && normalized.isResolved) {\n continue\n }\n\n if (!includeOutdated && normalized.isOutdated) {\n continue\n }\n\n filteredThreads.push({ thread: normalized, cursor: threadNode.cursor })\n }\n\n sourceHasNextPage = Boolean(pageInfo?.hasNextPage)\n sourceEndCursor = typeof pageInfo?.endCursor === \"string\" ? pageInfo.endCursor : null\n\n if (!sourceHasNextPage) {\n break\n }\n }\n\n const hasBufferedFilteredItems = filteredThreads.length > input.first\n const returnedThreads = filteredThreads.slice(0, input.first)\n const endCursor =\n returnedThreads.length > 0\n ? (returnedThreads[returnedThreads.length - 1]?.cursor ?? sourceEndCursor)\n : sourceEndCursor\n const scanTruncated = sourceHasNextPage && pagesScanned >= MAX_PR_REVIEW_THREAD_SCAN_PAGES\n\n return {\n items: returnedThreads.map((entry) => entry.thread),\n pageInfo: {\n hasNextPage: hasBufferedFilteredItems || sourceHasNextPage,\n endCursor: hasBufferedFilteredItems || sourceHasNextPage ? endCursor : null,\n },\n filterApplied: {\n unresolvedOnly,\n includeOutdated,\n },\n scan: {\n pagesScanned,\n sourceItemsScanned,\n scanTruncated,\n },\n }\n}\n\nfunction parseReviewThreadMutationResult(\n result: unknown,\n mutationKey: string,\n): ReviewThreadMutationData {\n const root = asRecord(result)\n const mutation = asRecord(root?.[mutationKey])\n const thread = asRecord(mutation?.thread)\n if (!thread || typeof thread.id !== \"string\") {\n throw new Error(\"Review thread mutation failed\")\n }\n\n return {\n id: thread.id,\n isResolved: Boolean(thread.isResolved),\n }\n}\n\nexport async function runReplyToReviewThread(\n transport: GraphqlTransport,\n input: ReplyToReviewThreadInput,\n): Promise<ReplyToReviewThreadData> {\n assertReplyToReviewThreadInput(input)\n\n const client = createGraphqlRequestClient(transport)\n const replyResult = await getPrCommentReplySdk(client).PrCommentReply({\n threadId: input.threadId,\n body: input.body,\n })\n const mutation = asRecord(replyResult.addPullRequestReviewThreadReply)\n const comment = asRecord(mutation?.comment)\n if (!comment || typeof comment.id !== \"string\") {\n throw new Error(\"Review thread mutation failed\")\n }\n\n const threadStateResult = await getReviewThreadStateSdk(client).ReviewThreadState({\n threadId: input.threadId,\n })\n const threadNode = asRecord(threadStateResult.node)\n if (!threadNode || typeof threadNode.id !== \"string\") {\n throw new Error(\"Review thread state lookup failed\")\n }\n\n return {\n id: input.threadId,\n isResolved: Boolean(threadNode.isResolved),\n commentId: comment.id,\n commentUrl: typeof comment.url === \"string\" ? comment.url : \"\",\n }\n}\n\nexport async function runResolveReviewThread(\n transport: GraphqlTransport,\n input: ReviewThreadMutationInput,\n): Promise<ReviewThreadMutationData> {\n assertReviewThreadInput(input)\n\n const result = await getPrCommentResolveSdk(\n createGraphqlRequestClient(transport),\n ).PrCommentResolve({\n threadId: input.threadId,\n })\n return parseReviewThreadMutationResult(result, \"resolveReviewThread\")\n}\n\nexport async function runUnresolveReviewThread(\n transport: GraphqlTransport,\n input: ReviewThreadMutationInput,\n): Promise<ReviewThreadMutationData> {\n assertReviewThreadInput(input)\n\n const result = await getPrCommentUnresolveSdk(\n createGraphqlRequestClient(transport),\n ).PrCommentUnresolve({\n threadId: input.threadId,\n })\n return parseReviewThreadMutationResult(result, \"unresolveReviewThread\")\n}\n\nexport async function runSubmitPrReview(\n transport: GraphqlTransport,\n input: PrReviewSubmitInput,\n): Promise<PrReviewSubmitData> {\n assertPrReviewSubmitInput(input)\n\n const client = createGraphqlRequestClient(transport)\n const prIdResult = await getPrNodeIdSdk(client).PrNodeId({\n owner: input.owner,\n name: input.name,\n prNumber: input.prNumber,\n })\n\n const pullRequestId = prIdResult.repository?.pullRequest?.id\n if (!pullRequestId) {\n throw new Error(\"Failed to retrieve pull request ID\")\n }\n\n const threads = input.comments\n ? input.comments.map((comment: DraftComment) => ({\n path: comment.path,\n body: comment.body,\n line: comment.line,\n ...(comment.side ? { side: comment.side } : {}),\n ...(comment.startLine ? { startLine: comment.startLine } : {}),\n ...(comment.startSide ? { startSide: comment.startSide } : {}),\n }))\n : []\n\n const result = await getPrReviewSubmitSdk(client).PrReviewSubmit({\n pullRequestId,\n event: input.event as PrReviewSubmitMutationVariables[\"event\"],\n ...(input.body === undefined ? {} : { body: input.body }),\n ...(threads.length === 0 ? {} : { threads }),\n })\n\n const review = asRecord(asRecord(result.addPullRequestReview)?.pullRequestReview)\n if (!review || typeof review.id !== \"string\") {\n throw new Error(\"Failed to parse pull request review response\")\n }\n\n return {\n id: review.id,\n state: typeof review.state === \"string\" ? review.state : \"\",\n url: typeof review.url === \"string\" ? review.url : \"\",\n body: typeof review.body === \"string\" ? review.body : null,\n }\n}\n\nexport async function runPrCreate(\n transport: GraphqlTransport,\n input: PrCreateInput,\n): Promise<PrCreateData> {\n assertPrCreateInput(input)\n const client = createGraphqlRequestClient(transport)\n\n const repoResult = await getIssueCreateRepositoryIdSdk(client).IssueCreateRepositoryId({\n owner: input.owner,\n name: input.name,\n })\n\n const repositoryId = repoResult.repository?.id\n if (!repositoryId) {\n throw new Error(`Repository ${input.owner}/${input.name} not found`)\n }\n\n const result = await getPrCreateSdk(client).PrCreate({\n repositoryId,\n baseRefName: input.baseRefName,\n headRefName: input.headRefName,\n title: input.title,\n ...(input.body !== undefined ? { body: input.body } : {}),\n ...(input.draft !== undefined ? { draft: input.draft } : {}),\n })\n\n const pr = result.createPullRequest?.pullRequest\n if (!pr) {\n throw new Error(\"Failed to create pull request\")\n }\n\n return {\n number: pr.number,\n url: String(pr.url),\n title: pr.title,\n state: String(pr.state),\n draft: pr.isDraft,\n }\n}\n\nexport async function runPrUpdate(\n transport: GraphqlTransport,\n input: PrUpdateInput,\n): Promise<PrUpdateData> {\n assertPrUpdateInput(input)\n\n if (input.draft !== undefined) {\n throw new Error(\"draft update operation not available via GraphQL route\")\n }\n\n const client = createGraphqlRequestClient(transport)\n const pullRequestId = await fetchPrNodeId(client, input.owner, input.name, input.prNumber)\n\n const result = await getPrUpdateSdk(client).PrUpdate({\n pullRequestId,\n ...(input.title !== undefined ? { title: input.title } : {}),\n ...(input.body !== undefined ? { body: input.body } : {}),\n })\n\n const pr = result.updatePullRequest?.pullRequest\n if (!pr) {\n throw new Error(\"Failed to update pull request\")\n }\n\n return {\n number: pr.number,\n url: String(pr.url),\n title: pr.title,\n state: String(pr.state),\n draft: pr.isDraft,\n }\n}\n\nexport async function runPrMerge(\n transport: GraphqlTransport,\n input: PrMergeInput,\n): Promise<PrMergeData> {\n assertPrMergeInput(input)\n\n if (input.deleteBranch === true) {\n throw new Error(\n \"deleteBranch operation not available via GraphQL mergePullRequest mutation; use the CLI route to delete the branch after merging\",\n )\n }\n\n const client = createGraphqlRequestClient(transport)\n const pullRequestId = await fetchPrNodeId(client, input.owner, input.name, input.prNumber)\n\n const result = await getPrMergeSdk(client).PrMerge({\n pullRequestId,\n ...(input.mergeMethod !== undefined\n ? { mergeMethod: input.mergeMethod as Types.PullRequestMergeMethod }\n : {}),\n })\n\n const pr = result.mergePullRequest?.pullRequest\n if (!pr) {\n throw new Error(\"Failed to merge pull request\")\n }\n\n return {\n prNumber: input.prNumber,\n // method echoes the input mergeMethod rather than reading from the GQL response,\n // since GitHub's mergePullRequest mutation does not return the merge method used.\n // isMethodAssumed is true when the caller did not specify a merge method; the\n // returned value of \"merge\" is an assumption, not confirmed by GitHub.\n method: input.mergeMethod?.toLowerCase() ?? \"merge\",\n isMethodAssumed: input.mergeMethod === undefined,\n // Note: GitHub GraphQL API does not expose merge queue state; queued is always false\n queued: false,\n deleteBranch: input.deleteBranch ?? false,\n }\n}\n\nexport async function runPrBranchUpdate(\n transport: GraphqlTransport,\n input: PrBranchUpdateInput,\n): Promise<PrBranchUpdateData> {\n assertPrBranchUpdateInput(input)\n const client = createGraphqlRequestClient(transport)\n const pullRequestId = await fetchPrNodeId(client, input.owner, input.name, input.prNumber)\n\n const result = await getPrBranchUpdateSdk(client).PrBranchUpdate({\n pullRequestId,\n ...(input.updateMethod !== undefined\n ? { updateMethod: input.updateMethod as Types.PullRequestBranchUpdateMethod }\n : {}),\n })\n\n const pr = result.updatePullRequestBranch?.pullRequest\n if (!pr) {\n throw new Error(\"Failed to update pull request branch\")\n }\n\n // updated: true is a success indicator — if no error was thrown, the branch update succeeded.\n // This is not a delta-detection flag; GitHub does not return whether the branch was already up to date.\n return {\n prNumber: input.prNumber,\n updated: true,\n }\n}\n\nasync function resolveUserNodeIds(client: GraphQLClient, logins: string[]): Promise<string[]> {\n // N+1 pattern: each login requires a separate UserNodeId query.\n // GitHub's GraphQL API does not support bulk user-to-node-ID resolution.\n // Acceptable for typical 1-3 user operations; revisit if bulk use cases emerge.\n const results = await Promise.all(\n logins.map((login) => getUserNodeIdSdk(client).UserNodeId({ login })),\n )\n return logins.map((login, i) => {\n const id = results[i]?.user?.id\n if (!id) throw new Error(`Could not resolve user: ${login}`)\n return id\n })\n}\n\nexport async function runPrAssigneesAdd(\n transport: GraphqlTransport,\n input: PrAssigneesAddInput,\n): Promise<PrAssigneesAddData> {\n assertPrAssigneesInput(input)\n const client = createGraphqlRequestClient(transport)\n const pullRequestId = await fetchPrNodeId(client, input.owner, input.name, input.prNumber)\n\n const userIds = await resolveUserNodeIds(client, input.assignees)\n\n const result = await getPrAssigneesAddSdk(client).PrAssigneesAdd({\n assignableId: pullRequestId,\n assigneeIds: userIds,\n })\n\n const assignable = result.addAssigneesToAssignable?.assignable\n const prAssignable =\n assignable?.__typename === \"PullRequest\"\n ? (assignable as {\n id: string\n assignees: { nodes?: Array<{ login: string } | null> | null }\n })\n : null\n\n if (!prAssignable) {\n throw new Error(\"Failed to add assignees to pull request\")\n }\n\n const confirmedLogins = (prAssignable.assignees.nodes ?? [])\n .filter((node): node is { login: string } => node !== null)\n .map((node) => node.login)\n\n return {\n prNumber: input.prNumber,\n added: confirmedLogins,\n }\n}\n\nexport async function runPrAssigneesRemove(\n transport: GraphqlTransport,\n input: PrAssigneesRemoveInput,\n): Promise<PrAssigneesRemoveData> {\n assertPrAssigneesInput(input)\n const client = createGraphqlRequestClient(transport)\n const pullRequestId = await fetchPrNodeId(client, input.owner, input.name, input.prNumber)\n\n const userIds = await resolveUserNodeIds(client, input.assignees)\n\n const result = await getPrAssigneesRemoveSdk(client).PrAssigneesRemove({\n assignableId: pullRequestId,\n assigneeIds: userIds,\n })\n\n const assignable = result.removeAssigneesFromAssignable?.assignable\n const prAssignable =\n assignable?.__typename === \"PullRequest\"\n ? (assignable as {\n id: string\n assignees: { nodes?: Array<{ login: string } | null> | null }\n })\n : null\n\n if (!prAssignable) {\n throw new Error(\"Failed to remove assignees from pull request\")\n }\n\n const remainingLogins = (prAssignable.assignees.nodes ?? [])\n .filter((node): node is { login: string } => node !== null)\n .map((node) => node.login)\n\n const removed = input.assignees.filter((login) => !remainingLogins.includes(login))\n\n return {\n prNumber: input.prNumber,\n removed,\n }\n}\n\nexport async function runPrReviewsRequest(\n transport: GraphqlTransport,\n input: PrReviewsRequestInput,\n): Promise<PrReviewsRequestData> {\n assertPrReviewsRequestInput(input)\n const client = createGraphqlRequestClient(transport)\n const pullRequestId = await fetchPrNodeId(client, input.owner, input.name, input.prNumber)\n\n const reviewerUserIds = await resolveUserNodeIds(client, input.reviewers)\n\n const result = await getPrReviewsRequestSdk(client).PrReviewsRequest({\n pullRequestId,\n userIds: reviewerUserIds,\n reviewRequestsFirst: Math.min(Math.max(reviewerUserIds.length, 1), 100),\n })\n\n const pr = result.requestReviews?.pullRequest\n if (!pr) {\n throw new Error(\"Failed to request pull request reviews\")\n }\n\n const reviewRequests = (pr.reviewRequests?.nodes ?? []).flatMap((node) => {\n if (!node) return []\n const reviewer = node.requestedReviewer\n if (reviewer?.__typename === \"User\" && \"login\" in reviewer) {\n return [reviewer.login]\n }\n if (reviewer?.__typename === \"Team\" && \"slug\" in reviewer) {\n return [reviewer.slug as string]\n }\n return []\n })\n\n return {\n prNumber: input.prNumber,\n reviewers: reviewRequests,\n updated: true,\n }\n}\n"],"mappings":"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","names":["getSdk","getSdk"]}
|