codex-orchestrator 2.0.4 → 2.0.6

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.
Files changed (92) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/README.md +30 -3
  3. package/dist/src/v2/acceptance-proof.d.ts +12 -0
  4. package/dist/src/v2/acceptance-proof.d.ts.map +1 -1
  5. package/dist/src/v2/acceptance-proof.js +120 -6
  6. package/dist/src/v2/acceptance-proof.js.map +1 -1
  7. package/dist/src/v2/adapters/command.d.ts +2 -0
  8. package/dist/src/v2/adapters/command.d.ts.map +1 -1
  9. package/dist/src/v2/adapters/command.js +67 -8
  10. package/dist/src/v2/adapters/command.js.map +1 -1
  11. package/dist/src/v2/adapters/gh-issue-adapter.js +16 -5
  12. package/dist/src/v2/adapters/gh-issue-adapter.js.map +1 -1
  13. package/dist/src/v2/adapters/gh-pull-request-adapter.d.ts +7 -1
  14. package/dist/src/v2/adapters/gh-pull-request-adapter.d.ts.map +1 -1
  15. package/dist/src/v2/adapters/gh-pull-request-adapter.js +288 -0
  16. package/dist/src/v2/adapters/gh-pull-request-adapter.js.map +1 -1
  17. package/dist/src/v2/adapters/pull-requests.d.ts +69 -0
  18. package/dist/src/v2/adapters/pull-requests.d.ts.map +1 -1
  19. package/dist/src/v2/adapters/pull-requests.js +48 -0
  20. package/dist/src/v2/adapters/pull-requests.js.map +1 -1
  21. package/dist/src/v2/adapters/worktree.d.ts +1 -0
  22. package/dist/src/v2/adapters/worktree.d.ts.map +1 -1
  23. package/dist/src/v2/adapters/worktree.js +10 -1
  24. package/dist/src/v2/adapters/worktree.js.map +1 -1
  25. package/dist/src/v2/android-proof-runner.d.ts +93 -0
  26. package/dist/src/v2/android-proof-runner.d.ts.map +1 -0
  27. package/dist/src/v2/android-proof-runner.js +921 -0
  28. package/dist/src/v2/android-proof-runner.js.map +1 -0
  29. package/dist/src/v2/cli.d.ts +9 -0
  30. package/dist/src/v2/cli.d.ts.map +1 -1
  31. package/dist/src/v2/cli.js +38 -11
  32. package/dist/src/v2/cli.js.map +1 -1
  33. package/dist/src/v2/config.d.ts +13 -1
  34. package/dist/src/v2/config.d.ts.map +1 -1
  35. package/dist/src/v2/config.js +57 -4
  36. package/dist/src/v2/config.js.map +1 -1
  37. package/dist/src/v2/containment.d.ts +11 -2
  38. package/dist/src/v2/containment.d.ts.map +1 -1
  39. package/dist/src/v2/containment.js +35 -7
  40. package/dist/src/v2/containment.js.map +1 -1
  41. package/dist/src/v2/direct-delivery.d.ts +1 -1
  42. package/dist/src/v2/direct-delivery.d.ts.map +1 -1
  43. package/dist/src/v2/direct-delivery.js +9 -3
  44. package/dist/src/v2/direct-delivery.js.map +1 -1
  45. package/dist/src/v2/immutable-workflow-publisher.js +6 -1
  46. package/dist/src/v2/immutable-workflow-publisher.js.map +1 -1
  47. package/dist/src/v2/mobile-lease.d.ts +9 -0
  48. package/dist/src/v2/mobile-lease.d.ts.map +1 -1
  49. package/dist/src/v2/mobile-lease.js +27 -3
  50. package/dist/src/v2/mobile-lease.js.map +1 -1
  51. package/dist/src/v2/review-feedback-coordinator.d.ts +54 -0
  52. package/dist/src/v2/review-feedback-coordinator.d.ts.map +1 -0
  53. package/dist/src/v2/review-feedback-coordinator.js +245 -0
  54. package/dist/src/v2/review-feedback-coordinator.js.map +1 -0
  55. package/dist/src/v2/review-feedback.d.ts +127 -0
  56. package/dist/src/v2/review-feedback.d.ts.map +1 -0
  57. package/dist/src/v2/review-feedback.js +436 -0
  58. package/dist/src/v2/review-feedback.js.map +1 -0
  59. package/dist/src/v2/run-issue.d.ts +61 -0
  60. package/dist/src/v2/run-issue.d.ts.map +1 -1
  61. package/dist/src/v2/run-issue.js +843 -66
  62. package/dist/src/v2/run-issue.js.map +1 -1
  63. package/dist/src/v2/run-store.d.ts +48 -1
  64. package/dist/src/v2/run-store.d.ts.map +1 -1
  65. package/dist/src/v2/run-store.js +125 -5
  66. package/dist/src/v2/run-store.js.map +1 -1
  67. package/dist/src/v2/runtime.d.ts +37 -0
  68. package/dist/src/v2/runtime.d.ts.map +1 -1
  69. package/dist/src/v2/runtime.js +183 -15
  70. package/dist/src/v2/runtime.js.map +1 -1
  71. package/dist/src/v2/setup.js +1 -1
  72. package/dist/src/v2/setup.js.map +1 -1
  73. package/docs/deep-dive.md +71 -7
  74. package/internal-workflow/docs/agents/contract-test-ledger.md +11 -1
  75. package/internal-workflow/evals/coding-skill-evals.json +18 -0
  76. package/internal-workflow/manifest.json +1 -1
  77. package/internal-workflow/skills/acceptance-proof/SKILL.md +1 -1
  78. package/internal-workflow/skills/acceptance-proof/references/android.md +6 -6
  79. package/internal-workflow/skills/code-debugger/SKILL.md +3 -3
  80. package/internal-workflow/skills/code-review/SKILL.md +18 -6
  81. package/internal-workflow/skills/implementation-spec-maker/SKILL.md +10 -8
  82. package/internal-workflow/skills/implementation-spec-maker/agents/openai.yaml +1 -1
  83. package/internal-workflow/skills/implementation-spec-review/SKILL.md +17 -3
  84. package/internal-workflow/skills/implementation-spec-review/evals/evals.json +30 -0
  85. package/internal-workflow/skills/implementation-spec-review/references/review-loop.md +30 -6
  86. package/internal-workflow/skills/spec-implementer/references/review-loop.md +7 -1
  87. package/internal-workflow/skills/tdd/SKILL.md +5 -4
  88. package/internal-workflow/skills/tdd/evals/evals.json +18 -0
  89. package/internal-workflow/skills/tdd/mocking.md +3 -42
  90. package/internal-workflow/skills/tdd/refactoring.md +6 -8
  91. package/package.json +1 -1
  92. package/internal-workflow/skills/acceptance-proof/tools/android-lease.mjs +0 -280
@@ -6,12 +6,15 @@ function runSpawn(file, args, options) {
6
6
  let settled = false;
7
7
  let timedOut = false;
8
8
  let idleTimedOut = false;
9
+ let aborted = false;
9
10
  const callbackTasks = [];
11
+ const ownsProcessGroup = options.processGroup === true && process.platform !== 'win32';
10
12
  const child = spawn(file, args, {
11
13
  cwd: options.cwd,
12
14
  env: options.env ? { ...options.env } : process.env,
13
15
  shell: options.shell,
14
16
  stdio: ['pipe', 'pipe', 'pipe'],
17
+ detached: ownsProcessGroup,
15
18
  });
16
19
  let stdout = '';
17
20
  let stderr = '';
@@ -32,11 +35,10 @@ function runSpawn(file, args, options) {
32
35
  }
33
36
  idleTimeout = setTimeout(() => {
34
37
  idleTimedOut = true;
35
- child.kill('SIGTERM');
38
+ signalOwnedProcess(child.pid, ownsProcessGroup, 'SIGTERM');
36
39
  setTimeout(() => {
37
- if (!settled) {
38
- child.kill('SIGKILL');
39
- }
40
+ if (ownsProcessGroup || !settled)
41
+ signalOwnedProcess(child.pid, ownsProcessGroup, 'SIGKILL');
40
42
  }, 2_000).unref();
41
43
  }, options.idleTimeoutMs);
42
44
  idleTimeout.unref();
@@ -55,15 +57,26 @@ function runSpawn(file, args, options) {
55
57
  const timeout = options.timeoutMs && options.timeoutMs > 0
56
58
  ? setTimeout(() => {
57
59
  timedOut = true;
58
- child.kill('SIGTERM');
60
+ signalOwnedProcess(child.pid, ownsProcessGroup, 'SIGTERM');
59
61
  setTimeout(() => {
60
- if (!settled) {
61
- child.kill('SIGKILL');
62
- }
62
+ if (ownsProcessGroup || !settled)
63
+ signalOwnedProcess(child.pid, ownsProcessGroup, 'SIGKILL');
63
64
  }, 2_000).unref();
64
65
  }, options.timeoutMs)
65
66
  : undefined;
66
67
  timeout?.unref();
68
+ const abort = () => {
69
+ aborted = true;
70
+ signalOwnedProcess(child.pid, ownsProcessGroup, 'SIGTERM');
71
+ setTimeout(() => {
72
+ if (ownsProcessGroup || !settled)
73
+ signalOwnedProcess(child.pid, ownsProcessGroup, 'SIGKILL');
74
+ }, 2_000).unref();
75
+ };
76
+ if (options.signal?.aborted)
77
+ abort();
78
+ else
79
+ options.signal?.addEventListener('abort', abort, { once: true });
67
80
  child.on('error', (error) => {
68
81
  if (settled) {
69
82
  return;
@@ -75,6 +88,7 @@ function runSpawn(file, args, options) {
75
88
  if (idleTimeout) {
76
89
  clearTimeout(idleTimeout);
77
90
  }
91
+ options.signal?.removeEventListener('abort', abort);
78
92
  reject(error);
79
93
  });
80
94
  child.on('close', (exitCode) => {
@@ -88,8 +102,16 @@ function runSpawn(file, args, options) {
88
102
  if (idleTimeout) {
89
103
  clearTimeout(idleTimeout);
90
104
  }
105
+ options.signal?.removeEventListener('abort', abort);
91
106
  const finish = async () => {
92
107
  await Promise.all(callbackTasks);
108
+ if ((aborted || timedOut || idleTimedOut) && ownsProcessGroup && child.pid) {
109
+ await waitForProcessGroupAbsence(child.pid);
110
+ }
111
+ if (aborted) {
112
+ resolve({ stdout, stderr: stderr ? `${stderr}\nCommand cancelled.` : 'Command cancelled.', exitCode: 130 });
113
+ return;
114
+ }
93
115
  if (idleTimedOut) {
94
116
  const timeoutMessage = `Command idle timed out after ${options.idleTimeoutMs}ms.`;
95
117
  resolve({
@@ -120,4 +142,41 @@ function runSpawn(file, args, options) {
120
142
  }
121
143
  });
122
144
  }
145
+ function signalOwnedProcess(pid, processGroup, signal) {
146
+ if (!pid)
147
+ return;
148
+ try {
149
+ process.kill(processGroup ? -pid : pid, signal);
150
+ }
151
+ catch (error) {
152
+ if (error.code !== 'ESRCH')
153
+ throw error;
154
+ }
155
+ }
156
+ async function waitForProcessGroupAbsence(processGroupId) {
157
+ for (let attempt = 0; attempt < 50; attempt += 1) {
158
+ try {
159
+ process.kill(-processGroupId, 0);
160
+ }
161
+ catch (error) {
162
+ if (error.code === 'ESRCH')
163
+ return;
164
+ throw error;
165
+ }
166
+ await new Promise((resolveWait) => setTimeout(resolveWait, 100));
167
+ }
168
+ signalOwnedProcess(processGroupId, true, 'SIGKILL');
169
+ for (let attempt = 0; attempt < 50; attempt += 1) {
170
+ try {
171
+ process.kill(-processGroupId, 0);
172
+ }
173
+ catch (error) {
174
+ if (error.code === 'ESRCH')
175
+ return;
176
+ throw error;
177
+ }
178
+ await new Promise((resolveWait) => setTimeout(resolveWait, 100));
179
+ }
180
+ throw new Error('Command process group remained active after SIGKILL.');
181
+ }
123
182
  //# sourceMappingURL=command.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"command.js","sourceRoot":"","sources":["../../../../src/v2/adapters/command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../../../src/v2/adapters/command.ts"],"names":[],"mappings":"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"}
@@ -172,13 +172,24 @@ export class GhCliIssueAdapter {
172
172
  });
173
173
  }
174
174
  }
175
- const maxGitHubCommentBodyLength = 60_000;
175
+ const maxGitHubCommentBodyLength = 16_384;
176
176
  function truncateCommentBody(body) {
177
177
  if (body.length <= maxGitHubCommentBodyLength) {
178
178
  return body;
179
179
  }
180
- const suffix = `\n\n[truncated by codex-orchestrator: original comment was ${body.length} characters]`;
181
- return `${body.slice(0, maxGitHubCommentBodyLength - suffix.length)}${suffix}`;
180
+ const suffix = `\n\n[truncated by codex-orchestrator: original comment was ${body.length} UTF-16 code units]`;
181
+ let prefixLength = maxGitHubCommentBodyLength - suffix.length;
182
+ const splitsSurrogatePair = isHighSurrogate(body.charCodeAt(prefixLength - 1))
183
+ && isLowSurrogate(body.charCodeAt(prefixLength));
184
+ if (splitsSurrogatePair)
185
+ prefixLength -= 1;
186
+ return `${body.slice(0, prefixLength)}${suffix}`;
187
+ }
188
+ function isHighSurrogate(codeUnit) {
189
+ return codeUnit >= 0xD800 && codeUnit <= 0xDBFF;
190
+ }
191
+ function isLowSurrogate(codeUnit) {
192
+ return codeUnit >= 0xDC00 && codeUnit <= 0xDFFF;
182
193
  }
183
194
  function isIssueNotFound(error) {
184
195
  if (!(error instanceof Error)) {
@@ -222,7 +233,7 @@ function normalizeComment(input) {
222
233
  const record = input;
223
234
  const id = typeof record.id === 'string' ? record.id : '';
224
235
  const url = typeof record.url === 'string' ? record.url : '';
225
- const body = typeof record.body === 'string' ? record.body : '';
236
+ const body = typeof record.body === 'string' ? truncateCommentBody(record.body) : '';
226
237
  const createdAt = typeof record.createdAt === 'string' ? record.createdAt : '';
227
238
  const author = typeof record.author === 'object' && record.author !== null ? record.author : {};
228
239
  const login = typeof author.login === 'string' ? author.login : '';
@@ -240,7 +251,7 @@ function normalizeRestComment(input) {
240
251
  return {
241
252
  id: readDecimalString(record, 'id'),
242
253
  url: readString(record, 'html_url'),
243
- body: readString(record, 'body'),
254
+ body: truncateCommentBody(readString(record, 'body')),
244
255
  createdAt: readString(record, 'created_at'),
245
256
  updatedAt: readString(record, 'updated_at'),
246
257
  author: { login: readString(user, 'login'), id: readDecimalString(user, 'id') },
@@ -1 +1 @@
1
- {"version":3,"file":"gh-issue-adapter.js","sourceRoot":"","sources":["../../../../src/v2/adapters/gh-issue-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gh-issue-adapter.js","sourceRoot":"","sources":["../../../../src/v2/adapters/gh-issue-adapter.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { CommandExecutor } from './gh-cli.js';
2
- import type { CreateDraftPullRequestInput, GitHubPullRequest, GitHubPullRequestAdapter, GitHubPullRequestDetails } from './pull-requests.js';
2
+ import type { CreateDraftPullRequestInput, GitHubPullRequest, GitHubPullRequestAdapter, GitHubPullRequestConversationComment, GitHubPullRequestDetails, GitHubPullRequestReviewTarget, GitHubPullRequestReviewThread, GitHubSubmittedPullRequestReview } from './pull-requests.js';
3
3
  export declare class GhCliPullRequestAdapter implements GitHubPullRequestAdapter {
4
4
  private readonly owner;
5
5
  private readonly repo;
@@ -10,5 +10,11 @@ export declare class GhCliPullRequestAdapter implements GitHubPullRequestAdapter
10
10
  getPullRequest(number: number): Promise<GitHubPullRequest | undefined>;
11
11
  findMergedPullRequestByHeadBranch(headBranch: string): Promise<GitHubPullRequest | undefined>;
12
12
  findOpenPullRequestByHeadAndBase(headBranch: string, baseBranch: string): Promise<GitHubPullRequest | undefined>;
13
+ getReviewTarget(number: number): Promise<GitHubPullRequestReviewTarget | undefined>;
14
+ listReviewThreads(number: number): Promise<GitHubPullRequestReviewThread[]>;
15
+ listSubmittedReviews(number: number): Promise<GitHubSubmittedPullRequestReview[]>;
16
+ listConversationComments(number: number): Promise<GitHubPullRequestConversationComment[]>;
17
+ postConversationComment(number: number, body: string): Promise<GitHubPullRequestConversationComment>;
18
+ private listBoundedRestCollection;
13
19
  }
14
20
  //# sourceMappingURL=gh-pull-request-adapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gh-pull-request-adapter.d.ts","sourceRoot":"","sources":["../../../../src/v2/adapters/gh-pull-request-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,KAAK,EACV,2BAA2B,EAC3B,iBAAiB,EACjB,wBAAwB,EACxB,wBAAwB,EACzB,MAAM,oBAAoB,CAAC;AAE5B,qBAAa,uBAAwB,YAAW,wBAAwB;IACtE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;gBAExB,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,eAAmC;IAMhF,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,EAAE,CAAC;IAe5E,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA+BtF,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC;IActE,iCAAiC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC;IA8B7F,gCAAgC,CAC3C,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC;CAoB1C"}
1
+ {"version":3,"file":"gh-pull-request-adapter.d.ts","sourceRoot":"","sources":["../../../../src/v2/adapters/gh-pull-request-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,KAAK,EACV,2BAA2B,EAC3B,iBAAiB,EACjB,wBAAwB,EACxB,oCAAoC,EACpC,wBAAwB,EAExB,6BAA6B,EAC7B,6BAA6B,EAE7B,gCAAgC,EACjC,MAAM,oBAAoB,CAAC;AAM5B,qBAAa,uBAAwB,YAAW,wBAAwB;IACtE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;gBAExB,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,eAAmC;IAMhF,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,EAAE,CAAC;IAe5E,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA+BtF,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC;IActE,iCAAiC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC;IA8B7F,gCAAgC,CAC3C,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC;IAqB5B,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,6BAA6B,GAAG,SAAS,CAAC;IAyCnF,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,6BAA6B,EAAE,CAAC;IA8C3E,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gCAAgC,EAAE,CAAC;IAOjF,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,oCAAoC,EAAE,CAAC;IAOzF,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,oCAAoC,CAAC;YAYnG,yBAAyB;CAexC"}
@@ -1,4 +1,7 @@
1
1
  import { defaultGhExecutor } from './gh-cli.js';
2
+ const MAX_PAGES = 20;
3
+ const MAX_ITEMS = 2_000;
4
+ const MAX_TEXT_LENGTH = 131_072;
2
5
  export class GhCliPullRequestAdapter {
3
6
  owner;
4
7
  repo;
@@ -106,6 +109,285 @@ export class GhCliPullRequestAdapter {
106
109
  const pullRequests = JSON.parse(result.stdout);
107
110
  return pullRequests[0];
108
111
  }
112
+ async getReviewTarget(number) {
113
+ const result = await this.executor('gh', [
114
+ 'api', 'graphql',
115
+ '-f', `owner=${this.owner}`,
116
+ '-f', `repo=${this.repo.slice(this.owner.length + 1)}`,
117
+ '-F', `number=${number}`,
118
+ '-f', 'query=query($owner:String!,$repo:String!,$number:Int!){repository(owner:$owner,name:$repo){id name owner{id login} pullRequest(number:$number){id databaseId number url state isDraft isCrossRepository headRefName headRefOid baseRefName title body authorAssociation}}}',
119
+ ]);
120
+ const root = objectField(objectValue(JSON.parse(result.stdout), 'GitHub GraphQL response'), 'data');
121
+ const repositoryValue = root.repository;
122
+ if (repositoryValue === null)
123
+ return undefined;
124
+ const repository = objectValue(repositoryValue, 'GitHub GraphQL repository');
125
+ const pullRequestValue = repository.pullRequest;
126
+ if (pullRequestValue === null)
127
+ return undefined;
128
+ const pullRequest = objectValue(pullRequestValue, 'GitHub GraphQL pullRequest');
129
+ const owner = objectField(repository, 'owner');
130
+ const state = stringField(pullRequest, 'state');
131
+ if (!['OPEN', 'CLOSED', 'MERGED'].includes(state)) {
132
+ throw new Error('GitHub GraphQL pullRequest state is invalid');
133
+ }
134
+ return {
135
+ repository: {
136
+ nodeId: stringField(repository, 'id'),
137
+ name: stringField(repository, 'name'),
138
+ owner: { nodeId: stringField(owner, 'id'), login: stringField(owner, 'login') },
139
+ },
140
+ number: numberField(pullRequest, 'number'),
141
+ nodeId: stringField(pullRequest, 'id'),
142
+ url: stringField(pullRequest, 'url'),
143
+ state: state,
144
+ isDraft: booleanField(pullRequest, 'isDraft'),
145
+ isCrossRepository: booleanField(pullRequest, 'isCrossRepository'),
146
+ headRefName: stringField(pullRequest, 'headRefName'),
147
+ headRefOid: stringField(pullRequest, 'headRefOid'),
148
+ baseRefName: stringField(pullRequest, 'baseRefName'),
149
+ title: stringField(pullRequest, 'title'),
150
+ body: stringField(pullRequest, 'body'),
151
+ authorAssociation: stringField(pullRequest, 'authorAssociation'),
152
+ };
153
+ }
154
+ async listReviewThreads(number) {
155
+ const threads = [];
156
+ let cursor;
157
+ for (let page = 0; page < MAX_PAGES; page += 1) {
158
+ const result = await this.executor('gh', [
159
+ 'api', 'graphql',
160
+ '-f', `owner=${this.owner}`,
161
+ '-f', `repo=${this.repo.slice(this.owner.length + 1)}`,
162
+ '-F', `number=${number}`,
163
+ ...(cursor ? ['-f', `cursor=${cursor}`] : []),
164
+ '-f', 'query=query ReviewThreads($owner:String!,$repo:String!,$number:Int!,$cursor:String){repository(owner:$owner,name:$repo){pullRequest(number:$number){reviewThreads(first:100,after:$cursor){nodes{id isResolved isOutdated path line comments(first:100){nodes{id databaseId url body createdAt updatedAt author{__typename ... on User{id databaseId login} ... on Bot{id login}} commit{oid} originalCommit{oid}} pageInfo{hasNextPage endCursor}}} pageInfo{hasNextPage endCursor}}}}}',
165
+ ]);
166
+ const connection = reviewThreadsConnection(result.stdout);
167
+ for (const rawThread of arrayField(connection, 'nodes')) {
168
+ const thread = normalizeReviewThread(rawThread);
169
+ const raw = objectValue(rawThread, 'GitHub review thread');
170
+ const commentsConnection = objectField(raw, 'comments');
171
+ let comments = thread.comments;
172
+ let commentsPageInfo = pageInfo(commentsConnection, 'review thread comments');
173
+ let commentsCursor = commentsPageInfo.endCursor;
174
+ for (let commentPage = 1; commentsPageInfo.hasNextPage; commentPage += 1) {
175
+ if (commentPage >= MAX_PAGES || !commentsCursor) {
176
+ throw new Error('GitHub review thread comments pagination exceeded its bound or omitted endCursor');
177
+ }
178
+ const commentsResult = await this.executor('gh', [
179
+ 'api', 'graphql', '-f', `threadId=${thread.nodeId}`, '-f', `cursor=${commentsCursor}`,
180
+ '-f', 'query=query ReviewThreadComments($threadId:ID!,$cursor:String!){node(id:$threadId){... on PullRequestReviewThread{comments(first:100,after:$cursor){nodes{id databaseId url body createdAt updatedAt author{__typename ... on User{id databaseId login} ... on Bot{id login}} commit{oid} originalCommit{oid}} pageInfo{hasNextPage endCursor}}}}}',
181
+ ]);
182
+ const commentsRoot = objectField(graphqlData(commentsResult.stdout), 'node');
183
+ const nextConnection = objectField(commentsRoot, 'comments');
184
+ comments = comments.concat(arrayField(nextConnection, 'nodes').map(normalizeReviewComment));
185
+ requireItemBound(comments.length, 'review thread comments');
186
+ commentsPageInfo = pageInfo(nextConnection, 'review thread comments');
187
+ commentsCursor = commentsPageInfo.endCursor;
188
+ }
189
+ threads.push({ ...thread, comments });
190
+ requireItemBound(threads.length, 'review threads');
191
+ }
192
+ const info = pageInfo(connection, 'review threads');
193
+ if (!info.hasNextPage)
194
+ return threads;
195
+ if (!info.endCursor)
196
+ throw new Error('GitHub review threads pagination omitted endCursor');
197
+ cursor = info.endCursor;
198
+ }
199
+ throw new Error('GitHub review threads pagination exceeded its page bound');
200
+ }
201
+ async listSubmittedReviews(number) {
202
+ return (await this.listBoundedRestCollection(`repos/${this.repo}/pulls/${number}/reviews`, 'GitHub pull request reviews')).map(normalizeSubmittedReview);
203
+ }
204
+ async listConversationComments(number) {
205
+ return (await this.listBoundedRestCollection(`repos/${this.repo}/issues/${number}/comments`, 'GitHub pull request conversation comments')).map(normalizeConversationComment);
206
+ }
207
+ async postConversationComment(number, body) {
208
+ boundedText(body, 'pull request conversation comment body');
209
+ await this.executor('gh', [
210
+ 'api', '--method', 'POST', `repos/${this.repo}/issues/${number}/comments`, '-f', `body=${body}`,
211
+ ]);
212
+ const matches = (await this.listConversationComments(number)).filter((comment) => comment.body === body);
213
+ if (matches.length !== 1) {
214
+ throw new Error(`Posted pull request conversation comment read-back was ${matches.length === 0 ? 'missing' : 'ambiguous'}`);
215
+ }
216
+ return matches[0];
217
+ }
218
+ async listBoundedRestCollection(endpoint, description) {
219
+ const items = [];
220
+ for (let page = 1; page <= MAX_PAGES; page += 1) {
221
+ const result = await this.executor('gh', [
222
+ 'api', '--method', 'GET', endpoint,
223
+ '-f', 'per_page=100', '-f', `page=${page}`,
224
+ '--jq', '.[] | .id = (.id | tostring) | if .user then .user.id = (.user.id | tostring) else . end',
225
+ ]);
226
+ const next = parseJsonLines(result.stdout, description);
227
+ items.push(...next);
228
+ requireItemBound(items.length, description);
229
+ if (next.length < 100)
230
+ return items;
231
+ }
232
+ throw new Error(`${description} pagination exceeded its page bound`);
233
+ }
234
+ }
235
+ function reviewThreadsConnection(stdout) {
236
+ const repository = objectField(graphqlData(stdout), 'repository');
237
+ const pullRequest = objectField(repository, 'pullRequest');
238
+ return objectField(pullRequest, 'reviewThreads');
239
+ }
240
+ function graphqlData(stdout) {
241
+ return objectField(objectValue(JSON.parse(stdout), 'GitHub GraphQL response'), 'data');
242
+ }
243
+ function normalizeReviewThread(input) {
244
+ const value = objectValue(input, 'GitHub review thread');
245
+ const comments = objectField(value, 'comments');
246
+ return {
247
+ nodeId: stringField(value, 'id'),
248
+ isResolved: booleanField(value, 'isResolved'),
249
+ isOutdated: booleanField(value, 'isOutdated'),
250
+ path: boundedText(stringField(value, 'path'), 'review thread path'),
251
+ line: nullableIntegerField(value, 'line'),
252
+ comments: arrayField(comments, 'nodes').map(normalizeReviewComment),
253
+ };
254
+ }
255
+ function normalizeReviewComment(input) {
256
+ const value = objectValue(input, 'GitHub review comment');
257
+ const commitValue = value.originalCommit;
258
+ return {
259
+ nodeId: stringField(value, 'id'),
260
+ databaseId: decimalIdField(value, 'databaseId'),
261
+ url: stringField(value, 'url'),
262
+ body: boundedText(stringField(value, 'body'), 'review comment body'),
263
+ createdAt: timestampField(value, 'createdAt'),
264
+ updatedAt: timestampField(value, 'updatedAt'),
265
+ commitId: commitValue === null ? null : stringField(objectValue(commitValue, 'GitHub review comment commit'), 'oid'),
266
+ author: normalizeGraphqlActor(value.author),
267
+ };
268
+ }
269
+ function normalizeSubmittedReview(input) {
270
+ const value = objectValue(input, 'GitHub submitted pull request review');
271
+ const state = stringField(value, 'state').toUpperCase();
272
+ if (!['PENDING', 'COMMENTED', 'APPROVED', 'CHANGES_REQUESTED', 'DISMISSED'].includes(state)) {
273
+ throw new Error('GitHub pull request review state is invalid');
274
+ }
275
+ return {
276
+ nodeId: stringField(value, 'node_id'),
277
+ databaseId: decimalIdField(value, 'id'),
278
+ url: stringField(value, 'html_url'),
279
+ body: boundedText(nullableStringField(value, 'body'), 'pull request review body'),
280
+ state: state,
281
+ commitId: stringField(value, 'commit_id'),
282
+ submittedAt: nullableTimestampField(value, 'submitted_at'),
283
+ author: normalizeRestActor(value.user),
284
+ };
285
+ }
286
+ function normalizeConversationComment(input) {
287
+ const value = objectValue(input, 'GitHub pull request conversation comment');
288
+ return {
289
+ id: decimalIdField(value, 'id'),
290
+ url: stringField(value, 'html_url'),
291
+ body: boundedText(nullableStringField(value, 'body'), 'pull request conversation comment body'),
292
+ createdAt: timestampField(value, 'created_at'),
293
+ updatedAt: timestampField(value, 'updated_at'),
294
+ author: normalizeRestActor(value.user),
295
+ };
296
+ }
297
+ function normalizeGraphqlActor(input) {
298
+ if (input === null)
299
+ return null;
300
+ const value = objectValue(input, 'GitHub GraphQL actor');
301
+ const type = stringField(value, '__typename');
302
+ const login = stringField(value, 'login');
303
+ const nodeId = stringField(value, 'id');
304
+ return {
305
+ id: type === 'User' ? decimalIdField(value, 'databaseId') : nodeId,
306
+ nodeId,
307
+ login,
308
+ isBot: type === 'Bot' || login.endsWith('[bot]'),
309
+ };
310
+ }
311
+ function normalizeRestActor(input) {
312
+ if (input === null)
313
+ return null;
314
+ const value = objectValue(input, 'GitHub REST actor');
315
+ const login = stringField(value, 'login');
316
+ const type = stringField(value, 'type');
317
+ if (type !== 'User' && type !== 'Bot')
318
+ throw new Error('GitHub REST actor type is invalid');
319
+ return {
320
+ id: decimalIdField(value, 'id'),
321
+ login,
322
+ isBot: type === 'Bot' || login.endsWith('[bot]'),
323
+ };
324
+ }
325
+ function parseJsonLines(stdout, description) {
326
+ if (!stdout.trim())
327
+ return [];
328
+ return stdout.trim().split(/\r?\n/u).map((line, index) => {
329
+ try {
330
+ return JSON.parse(line);
331
+ }
332
+ catch {
333
+ throw new Error(`${description} line ${index + 1} is not valid JSON`);
334
+ }
335
+ });
336
+ }
337
+ function pageInfo(connection, description) {
338
+ const value = objectField(connection, 'pageInfo');
339
+ const hasNextPage = booleanField(value, 'hasNextPage');
340
+ const endCursor = value.endCursor;
341
+ if (endCursor !== null && typeof endCursor !== 'string') {
342
+ throw new Error(`${description} pageInfo endCursor must be null or a string`);
343
+ }
344
+ if (hasNextPage && !endCursor)
345
+ throw new Error(`${description} pagination omitted endCursor`);
346
+ return { hasNextPage, endCursor };
347
+ }
348
+ function arrayField(record, field) {
349
+ const value = record[field];
350
+ if (!Array.isArray(value))
351
+ throw new Error(`GitHub payload ${field} must be an array`);
352
+ return value;
353
+ }
354
+ function nullableIntegerField(record, field) {
355
+ const value = record[field];
356
+ if (value === null)
357
+ return null;
358
+ if (!Number.isSafeInteger(value))
359
+ throw new Error(`GitHub payload ${field} must be null or an integer`);
360
+ return value;
361
+ }
362
+ function nullableTimestampField(record, field) {
363
+ const value = record[field];
364
+ if (value === null)
365
+ return null;
366
+ return timestampField(record, field);
367
+ }
368
+ function timestampField(record, field) {
369
+ const value = stringField(record, field);
370
+ const parsed = Date.parse(value);
371
+ if (Number.isNaN(parsed))
372
+ throw new Error(`GitHub pull request payload ${field} must be a timestamp`);
373
+ return new Date(parsed).toISOString();
374
+ }
375
+ function decimalIdField(record, field) {
376
+ const value = record[field];
377
+ if (typeof value === 'string' && /^\d+$/u.test(value))
378
+ return value;
379
+ if (Number.isSafeInteger(value) && value >= 0)
380
+ return String(value);
381
+ throw new Error(`GitHub payload ${field} must be a decimal ID`);
382
+ }
383
+ function boundedText(value, description) {
384
+ if (value.length > MAX_TEXT_LENGTH)
385
+ throw new Error(`${description} exceeds the text bound`);
386
+ return value;
387
+ }
388
+ function requireItemBound(length, description) {
389
+ if (length > MAX_ITEMS)
390
+ throw new Error(`${description} exceeds the item bound`);
109
391
  }
110
392
  function normalizeDetailedPullRequest(input) {
111
393
  if (!input || typeof input !== 'object' || Array.isArray(input)) {
@@ -141,6 +423,12 @@ function objectField(record, field) {
141
423
  }
142
424
  return value;
143
425
  }
426
+ function objectValue(value, description) {
427
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
428
+ throw new Error(`${description} must be an object`);
429
+ }
430
+ return value;
431
+ }
144
432
  function stringField(record, field) {
145
433
  const value = record[field];
146
434
  if (typeof value !== 'string')