forge-cc 1.0.3 → 2.0.0

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 (66) hide show
  1. package/.forge.json +6 -5
  2. package/README.md +7 -7
  3. package/dist/cli.js +193 -131
  4. package/dist/cli.js.map +1 -1
  5. package/dist/codex-poll.d.ts +38 -0
  6. package/dist/codex-poll.js +70 -0
  7. package/dist/codex-poll.js.map +1 -0
  8. package/dist/config/schema.d.ts +0 -28
  9. package/dist/config/schema.js +0 -7
  10. package/dist/config/schema.js.map +1 -1
  11. package/dist/graph/index.d.ts +6 -0
  12. package/dist/graph/index.js +11 -0
  13. package/dist/graph/index.js.map +1 -0
  14. package/dist/graph/query.d.ts +52 -0
  15. package/dist/graph/query.js +319 -0
  16. package/dist/graph/query.js.map +1 -0
  17. package/dist/graph/reader.d.ts +13 -0
  18. package/dist/graph/reader.js +140 -0
  19. package/dist/graph/reader.js.map +1 -0
  20. package/dist/graph/schemas.d.ts +215 -0
  21. package/dist/graph/schemas.js +54 -0
  22. package/dist/graph/schemas.js.map +1 -0
  23. package/dist/graph/types.d.ts +109 -0
  24. package/dist/graph/types.js +2 -0
  25. package/dist/graph/types.js.map +1 -0
  26. package/dist/graph/validator.d.ts +32 -0
  27. package/dist/graph/validator.js +253 -0
  28. package/dist/graph/validator.js.map +1 -0
  29. package/dist/graph/writer.d.ts +18 -0
  30. package/dist/graph/writer.js +159 -0
  31. package/dist/graph/writer.js.map +1 -0
  32. package/dist/linear/client.d.ts +94 -4
  33. package/dist/linear/client.js +203 -20
  34. package/dist/linear/client.js.map +1 -1
  35. package/dist/linear/sync.d.ts +11 -14
  36. package/dist/linear/sync.js +63 -83
  37. package/dist/linear/sync.js.map +1 -1
  38. package/dist/runner/loop.d.ts +1 -1
  39. package/dist/runner/loop.js +93 -100
  40. package/dist/runner/loop.js.map +1 -1
  41. package/dist/runner/prompt.d.ts +7 -9
  42. package/dist/runner/prompt.js +27 -30
  43. package/dist/runner/prompt.js.map +1 -1
  44. package/dist/setup.js +14 -0
  45. package/dist/setup.js.map +1 -1
  46. package/dist/types.d.ts +0 -23
  47. package/package.json +3 -5
  48. package/skills/README.md +35 -33
  49. package/skills/forge-build.md +344 -0
  50. package/skills/forge-capture.md +204 -0
  51. package/skills/forge-fix.md +207 -0
  52. package/skills/forge-plan.md +335 -0
  53. package/skills/forge-quick.md +154 -0
  54. package/skills/forge-setup.md +2 -2
  55. package/skills/ref/adversarial-review.md +117 -0
  56. package/skills/ref/graph-correction.md +88 -0
  57. package/skills/ref/requirement-sizing.md +146 -0
  58. package/dist/server.d.ts +0 -6
  59. package/dist/server.js +0 -51
  60. package/dist/server.js.map +0 -1
  61. package/dist/state/status.d.ts +0 -66
  62. package/dist/state/status.js +0 -96
  63. package/dist/state/status.js.map +0 -1
  64. package/skills/forge-go.md +0 -583
  65. package/skills/forge-spec.md +0 -367
  66. package/skills/forge-triage.md +0 -179
package/.forge.json CHANGED
@@ -1,5 +1,6 @@
1
- {
2
- "gates": ["types", "lint", "tests"],
3
- "maxIterations": 5,
4
- "verifyFreshness": 600000
5
- }
1
+ {
2
+ "gates": ["types", "lint", "tests"],
3
+ "linearTeam": "Forge Plugin",
4
+ "maxIterations": 5,
5
+ "verifyFreshness": 600000
6
+ }
package/README.md CHANGED
@@ -142,7 +142,7 @@ Forge manages your Linear project lifecycle end-to-end. Every state transition h
142
142
  | | | | |
143
143
  Forge Action: triage /forge:spec /forge:go /forge:go user merges,
144
144
  creates generates PRD, starts last milestone runs
145
- projects syncs milestones milestone completes linear-sync done
145
+ projects syncs milestones milestone completes linear sync-done
146
146
  ```
147
147
 
148
148
  State names are configurable via `linearStates` in `.forge.json` (default: "Planned", "In Progress", "In Review", "Done").
@@ -251,11 +251,11 @@ npx forge setup --skills-only # Only sync skill files
251
251
  npx forge doctor # Environment health check
252
252
  npx forge update # Check for and install updates
253
253
 
254
- # Linear sync (used by skills, can also be called directly)
255
- npx forge linear-sync start --slug <slug> --milestone <n>
256
- npx forge linear-sync complete --slug <slug> --milestone <n> [--last] [--pr-url <url>]
257
- npx forge linear-sync done --slug <slug>
258
- npx forge linear-sync list-issues --slug <slug>
254
+ # Linear commands (used by skills, can also be called directly)
255
+ npx forge linear sync-start --slug <slug> --milestone <n>
256
+ npx forge linear sync-complete --slug <slug> --milestone <n> [--last]
257
+ npx forge linear sync-done --slug <slug>
258
+ npx forge linear list-issues --slug <slug>
259
259
  ```
260
260
 
261
261
  ### Skill Commands
@@ -331,7 +331,7 @@ The pre-commit hook requires a passing verification cached in `.forge/last-verif
331
331
 
332
332
  ### Linear sync runs but does nothing
333
333
 
334
- If `forge linear-sync` produces no output, check:
334
+ If `forge linear sync-*` commands produce no output, check:
335
335
  1. `LINEAR_API_KEY` is set in your environment
336
336
  2. Your `.planning/status/<slug>.json` has `linearTeamId` and `linearProjectId` populated (these are set during `/forge:spec`)
337
337
  3. Run `npx forge doctor` to validate the API key and team configuration
package/dist/cli.js CHANGED
@@ -6,15 +6,30 @@ import { typesGate } from './gates/types-gate.js';
6
6
  import { lintGate } from './gates/lint-gate.js';
7
7
  import { testsGate } from './gates/tests-gate.js';
8
8
  import { writeVerifyCache } from './state/cache.js';
9
- import { readStatus, discoverStatuses, findNextPending } from './state/status.js';
10
- import { ForgeLinearClient } from './linear/client.js';
11
- import { syncMilestoneStart, syncMilestoneComplete, syncProjectDone } from './linear/sync.js';
9
+ import { ForgeLinearClient, IssueRelationType } from './linear/client.js';
12
10
  import { readFileSync } from 'fs';
13
11
  import { fileURLToPath } from 'url';
14
12
  import { dirname, resolve } from 'path';
13
+ import { discoverGraphs, loadIndex } from './graph/reader.js';
14
+ import { findReady, isProjectComplete } from './graph/query.js';
15
15
  const __filename = fileURLToPath(import.meta.url);
16
16
  const __dirname = dirname(__filename);
17
17
  const pkg = JSON.parse(readFileSync(resolve(__dirname, '..', 'package.json'), 'utf8'));
18
+ function requireApiKey() {
19
+ const apiKey = process.env.LINEAR_API_KEY;
20
+ if (!apiKey) {
21
+ console.error(JSON.stringify({ error: 'LINEAR_API_KEY not set' }));
22
+ process.exit(1);
23
+ }
24
+ return apiKey;
25
+ }
26
+ function handleResult(result) {
27
+ if (!result.success) {
28
+ console.error(JSON.stringify({ error: result.error }));
29
+ process.exit(1);
30
+ }
31
+ return result.data;
32
+ }
18
33
  program
19
34
  .name('forge')
20
35
  .version(pkg.version)
@@ -58,39 +73,47 @@ program
58
73
  });
59
74
  program
60
75
  .command('run')
61
- .description('Execute milestones via Ralph loop')
62
- .requiredOption('--prd <slug>', 'PRD slug to execute')
76
+ .description('Execute graph requirements')
77
+ .requiredOption('--prd <slug>', 'Slug to execute')
63
78
  .action(async (opts) => {
64
- const { runRalphLoop } = await import('./runner/loop.js');
65
- await runRalphLoop({ slug: opts.prd, projectDir: process.cwd() });
79
+ const projectDir = process.cwd();
80
+ const { runGraphLoop } = await import('./runner/loop.js');
81
+ await runGraphLoop({ slug: opts.prd, projectDir });
66
82
  });
67
83
  program
68
84
  .command('status')
69
- .description('Show PRD progress')
85
+ .description('Show project progress')
70
86
  .action(async () => {
71
87
  const projectDir = process.cwd();
72
- const statuses = await discoverStatuses(projectDir);
73
- if (statuses.length === 0) {
74
- console.log('No PRD status files found.');
88
+ // Collect rows from graph directories
89
+ const rows = [];
90
+ // Graph-based projects
91
+ const graphSlugs = await discoverGraphs(projectDir);
92
+ for (const slug of graphSlugs) {
93
+ try {
94
+ const index = await loadIndex(projectDir, slug);
95
+ const reqs = Object.values(index.requirements);
96
+ const total = reqs.length;
97
+ const complete = reqs.filter(r => r.status === 'complete').length;
98
+ const ready = findReady(index);
99
+ const next = isProjectComplete(index) ? '(done)' : ready.length > 0 ? ready[0] : '(blocked)';
100
+ const linearState = index.linear?.projectId ? 'linked' : '-';
101
+ rows.push({
102
+ project: index.project,
103
+ branch: index.branch,
104
+ progress: `${complete}/${total}`,
105
+ next,
106
+ linear: linearState,
107
+ });
108
+ }
109
+ catch {
110
+ // skip invalid graphs
111
+ }
112
+ }
113
+ if (rows.length === 0) {
114
+ console.log('No projects found.');
75
115
  return;
76
116
  }
77
- const pending = findNextPending(statuses);
78
- const pendingMap = new Map(pending.map((p) => [p.slug, p.milestone]));
79
- // Calculate column widths
80
- const rows = statuses.map((s) => {
81
- const keys = Object.keys(s.milestones);
82
- const complete = keys.filter((k) => s.milestones[k].status === 'complete').length;
83
- const total = keys.length;
84
- const next = pendingMap.get(s.slug);
85
- const linearState = s.linearProjectId ? 'linked' : '-';
86
- return {
87
- project: s.project,
88
- branch: s.branch,
89
- progress: `${complete}/${total}`,
90
- next: complete === total ? '(done)' : next ?? '-',
91
- linear: linearState,
92
- };
93
- });
94
117
  const headers = { project: 'Project', branch: 'Branch', progress: 'Progress', next: 'Next', linear: 'Linear' };
95
118
  const cols = Object.keys(headers).map((key) => {
96
119
  const max = Math.max(headers[key].length, ...rows.map((r) => r[key].length));
@@ -111,120 +134,149 @@ program
111
134
  const { runSetup } = await import('./setup.js');
112
135
  await runSetup({ projectDir: process.cwd(), skillsOnly: opts.skillsOnly });
113
136
  });
114
- const linearSync = program
115
- .command('linear-sync')
116
- .description('Sync milestone state with Linear');
117
- linearSync
118
- .command('start')
119
- .description('Start a milestone sync')
120
- .requiredOption('--slug <slug>', 'PRD slug')
121
- .requiredOption('--milestone <n>', 'Milestone number')
137
+ const linear = program
138
+ .command('linear')
139
+ .description('Linear project management commands');
140
+ // --- Create commands ---
141
+ linear
142
+ .command('create-project')
143
+ .description('Create a new Linear project')
144
+ .requiredOption('--name <name>', 'Project name')
145
+ .requiredOption('--team <teamId>', 'Team ID')
146
+ .option('--description <desc>', 'Project description')
147
+ .option('--priority <n>', 'Priority (0-4)', parseInt)
122
148
  .action(async (opts) => {
123
- const apiKey = process.env.LINEAR_API_KEY;
124
- if (!apiKey) {
125
- console.log('[forge] LINEAR_API_KEY not set, skipping Linear sync');
126
- return;
127
- }
128
- try {
129
- const projectDir = process.cwd();
130
- const status = await readStatus(projectDir, opts.slug);
131
- if (!status.linearTeamId) {
132
- console.log('[forge] No linearTeamId in status file, skipping Linear sync');
133
- return;
134
- }
135
- const client = new ForgeLinearClient({ apiKey, teamId: status.linearTeamId });
136
- const config = await loadConfig(projectDir);
137
- await syncMilestoneStart(client, config, status, opts.milestone);
138
- console.log(`[forge] linear-sync start complete for ${opts.slug} ${opts.milestone}`);
139
- }
140
- catch (err) {
141
- console.warn('[forge] linear-sync start failed:', err);
142
- }
149
+ const client = new ForgeLinearClient({ apiKey: requireApiKey() });
150
+ const result = await client.createProject({
151
+ name: opts.name,
152
+ description: opts.description,
153
+ teamIds: [opts.team],
154
+ priority: opts.priority,
155
+ });
156
+ console.log(JSON.stringify(handleResult(result)));
143
157
  });
144
- linearSync
145
- .command('complete')
146
- .description('Complete a milestone sync')
147
- .requiredOption('--slug <slug>', 'PRD slug')
148
- .requiredOption('--milestone <n>', 'Milestone number')
149
- .option('--last', 'This is the last milestone')
150
- .option('--pr-url <url>', 'PR URL to include in comments')
158
+ linear
159
+ .command('create-milestone')
160
+ .description('Create a milestone within a project')
161
+ .requiredOption('--project <id>', 'Project ID')
162
+ .requiredOption('--name <name>', 'Milestone name')
163
+ .option('--description <desc>', 'Milestone description')
151
164
  .action(async (opts) => {
152
- const apiKey = process.env.LINEAR_API_KEY;
153
- if (!apiKey) {
154
- console.log('[forge] LINEAR_API_KEY not set, skipping Linear sync');
155
- return;
156
- }
157
- try {
158
- const projectDir = process.cwd();
159
- const status = await readStatus(projectDir, opts.slug);
160
- if (!status.linearTeamId) {
161
- console.log('[forge] No linearTeamId in status file, skipping Linear sync');
162
- return;
163
- }
164
- const client = new ForgeLinearClient({ apiKey, teamId: status.linearTeamId });
165
- const config = await loadConfig(projectDir);
166
- await syncMilestoneComplete(client, config, status, opts.milestone, !!opts.last);
167
- console.log(`[forge] linear-sync complete finished for ${opts.slug} ${opts.milestone}`);
168
- }
169
- catch (err) {
170
- console.warn('[forge] linear-sync complete failed:', err);
171
- }
165
+ const client = new ForgeLinearClient({ apiKey: requireApiKey() });
166
+ const result = await client.createMilestone({
167
+ name: opts.name,
168
+ description: opts.description,
169
+ projectId: opts.project,
170
+ });
171
+ console.log(JSON.stringify(handleResult(result)));
172
172
  });
173
- linearSync
174
- .command('done')
175
- .description('Mark project as done in Linear')
176
- .requiredOption('--slug <slug>', 'PRD slug')
173
+ linear
174
+ .command('create-issue')
175
+ .description('Create a single Linear issue')
176
+ .requiredOption('--team <teamId>', 'Team ID')
177
+ .requiredOption('--title <title>', 'Issue title')
178
+ .option('--project <id>', 'Project ID')
179
+ .option('--milestone <id>', 'Milestone ID')
180
+ .option('--description <desc>', 'Issue description')
181
+ .option('--priority <n>', 'Priority (0-4)', parseInt)
177
182
  .action(async (opts) => {
178
- const apiKey = process.env.LINEAR_API_KEY;
179
- if (!apiKey) {
180
- console.log('[forge] LINEAR_API_KEY not set, skipping Linear sync');
181
- return;
182
- }
183
+ const client = new ForgeLinearClient({ apiKey: requireApiKey(), teamId: opts.team });
184
+ const result = await client.createIssue({
185
+ title: opts.title,
186
+ description: opts.description,
187
+ teamId: opts.team,
188
+ projectId: opts.project,
189
+ projectMilestoneId: opts.milestone,
190
+ priority: opts.priority,
191
+ });
192
+ console.log(JSON.stringify(handleResult(result)));
193
+ });
194
+ linear
195
+ .command('create-issue-batch')
196
+ .description('Create multiple issues in a batch')
197
+ .requiredOption('--team <teamId>', 'Team ID')
198
+ .requiredOption('--project <id>', 'Project ID')
199
+ .requiredOption('--milestone <id>', 'Milestone ID')
200
+ .requiredOption('--issues <json>', 'JSON array of issues [{title, description?, priority?}]')
201
+ .action(async (opts) => {
202
+ const apiKey = requireApiKey();
203
+ let parsed;
183
204
  try {
184
- const projectDir = process.cwd();
185
- const status = await readStatus(projectDir, opts.slug);
186
- if (!status.linearTeamId) {
187
- console.log('[forge] No linearTeamId in status file, skipping Linear sync');
188
- return;
189
- }
190
- const client = new ForgeLinearClient({ apiKey, teamId: status.linearTeamId });
191
- const config = await loadConfig(projectDir);
192
- await syncProjectDone(client, config, status);
193
- console.log(`[forge] linear-sync done complete for ${opts.slug}`);
205
+ parsed = JSON.parse(opts.issues);
194
206
  }
195
- catch (err) {
196
- console.warn('[forge] linear-sync done failed:', err);
207
+ catch {
208
+ console.error(JSON.stringify({ error: 'Invalid JSON for --issues' }));
209
+ process.exit(1);
197
210
  }
211
+ if (!Array.isArray(parsed)) {
212
+ console.error(JSON.stringify({ error: '--issues must be a JSON array' }));
213
+ process.exit(1);
214
+ }
215
+ const client = new ForgeLinearClient({ apiKey, teamId: opts.team });
216
+ const issues = parsed.map((i) => ({
217
+ title: i.title,
218
+ description: i.description,
219
+ teamId: opts.team,
220
+ projectId: opts.project,
221
+ projectMilestoneId: opts.milestone,
222
+ priority: i.priority,
223
+ }));
224
+ const result = await client.createIssueBatch(issues);
225
+ console.log(JSON.stringify(handleResult(result)));
198
226
  });
199
- linearSync
200
- .command('list-issues')
201
- .description('List all Linear issue identifiers for a PRD slug')
202
- .requiredOption('--slug <slug>', 'PRD slug')
227
+ linear
228
+ .command('create-project-relation')
229
+ .description('Create a relation between two projects')
230
+ .requiredOption('--project <id>', 'Project ID')
231
+ .requiredOption('--related-project <id>', 'Related project ID')
232
+ .requiredOption('--type <type>', 'Relation type (blocks|related)')
203
233
  .action(async (opts) => {
204
- const apiKey = process.env.LINEAR_API_KEY;
205
- if (!apiKey) {
206
- console.log('[forge] LINEAR_API_KEY not set, skipping Linear sync');
207
- return;
208
- }
209
- try {
210
- const projectDir = process.cwd();
211
- const status = await readStatus(projectDir, opts.slug);
212
- if (!status.linearProjectId) {
213
- console.log('[forge] No linearProjectId in status file');
214
- return;
215
- }
216
- if (!status.linearTeamId) {
217
- console.log('[forge] No linearTeamId in status file, skipping list-issues');
218
- return;
219
- }
220
- const client = new ForgeLinearClient({ apiKey, teamId: status.linearTeamId });
221
- const issues = await client.listIssuesByProject(status.linearProjectId);
222
- const identifiers = issues.map((i) => i.identifier);
223
- console.log(JSON.stringify(identifiers));
224
- }
225
- catch (err) {
226
- console.warn('[forge] linear-sync list-issues failed:', err);
234
+ const client = new ForgeLinearClient({ apiKey: requireApiKey() });
235
+ const result = await client.createProjectRelation({
236
+ projectId: opts.project,
237
+ relatedProjectId: opts.relatedProject,
238
+ type: opts.type,
239
+ });
240
+ console.log(JSON.stringify(handleResult(result)));
241
+ });
242
+ linear
243
+ .command('create-issue-relation')
244
+ .description('Create a relation between two issues')
245
+ .requiredOption('--issue <id>', 'Issue ID')
246
+ .requiredOption('--related-issue <id>', 'Related issue ID')
247
+ .requiredOption('--type <type>', 'Relation type (blocks|duplicate|related)')
248
+ .action(async (opts) => {
249
+ const apiKey = requireApiKey();
250
+ const validTypes = Object.values(IssueRelationType);
251
+ if (!validTypes.includes(opts.type)) {
252
+ console.error(JSON.stringify({ error: `Invalid relation type "${opts.type}". Valid: ${validTypes.join(', ')}` }));
253
+ process.exit(1);
227
254
  }
255
+ const client = new ForgeLinearClient({ apiKey });
256
+ const result = await client.createIssueRelation({
257
+ issueId: opts.issue,
258
+ relatedIssueId: opts.relatedIssue,
259
+ type: opts.type,
260
+ });
261
+ console.log(JSON.stringify(handleResult(result)));
262
+ });
263
+ // --- List commands ---
264
+ linear
265
+ .command('list-teams')
266
+ .description('List all Linear teams')
267
+ .action(async () => {
268
+ const client = new ForgeLinearClient({ apiKey: requireApiKey() });
269
+ const teams = await client.listTeams();
270
+ console.log(JSON.stringify(teams));
271
+ });
272
+ linear
273
+ .command('list-projects')
274
+ .description('List projects for a team')
275
+ .requiredOption('--team <teamId>', 'Team ID')
276
+ .action(async (opts) => {
277
+ const client = new ForgeLinearClient({ apiKey: requireApiKey() });
278
+ const projects = await client.listProjects(opts.team);
279
+ console.log(JSON.stringify(projects));
228
280
  });
229
281
  program
230
282
  .command('doctor')
@@ -246,5 +298,15 @@ program
246
298
  const { checkForUpdate } = await import('./runner/update.js');
247
299
  await checkForUpdate(process.cwd());
248
300
  });
301
+ program
302
+ .command('codex-poll')
303
+ .description('Poll GitHub PR for Codex review comments')
304
+ .requiredOption('--owner <owner>', 'Repository owner')
305
+ .requiredOption('--repo <repo>', 'Repository name')
306
+ .requiredOption('--pr <number>', 'PR number')
307
+ .action(async (opts) => {
308
+ const { pollForCodexReview } = await import('./codex-poll.js');
309
+ await pollForCodexReview(opts);
310
+ });
249
311
  program.parse();
250
312
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ export interface CodexPollOptions {
2
+ owner: string;
3
+ repo: string;
4
+ pr: string;
5
+ }
6
+ export interface GitHubReview {
7
+ id: number;
8
+ state: string;
9
+ body: string;
10
+ user?: {
11
+ login: string;
12
+ };
13
+ performed_via_github_app?: {
14
+ slug: string;
15
+ };
16
+ }
17
+ export interface GitHubComment {
18
+ id: number;
19
+ body: string;
20
+ path?: string;
21
+ user?: {
22
+ login: string;
23
+ };
24
+ performed_via_github_app?: {
25
+ slug: string;
26
+ };
27
+ }
28
+ /** Fetch all pages from a GitHub API list endpoint. */
29
+ export declare function fetchAllPages<T>(url: string, headers: Record<string, string>): Promise<T[]>;
30
+ export declare function isCodexActivity(item: {
31
+ user?: {
32
+ login: string;
33
+ };
34
+ performed_via_github_app?: {
35
+ slug: string;
36
+ };
37
+ }): boolean;
38
+ export declare function pollForCodexReview(opts: CodexPollOptions): Promise<void>;
@@ -0,0 +1,70 @@
1
+ /** Known Codex bot login names. */
2
+ const CODEX_LOGINS = ["codex-bot", "github-codex", "codex"];
3
+ /** Fetch all pages from a GitHub API list endpoint. */
4
+ export async function fetchAllPages(url, headers) {
5
+ const results = [];
6
+ let nextUrl = `${url}${url.includes("?") ? "&" : "?"}per_page=100`;
7
+ while (nextUrl) {
8
+ const res = await fetch(nextUrl, { headers });
9
+ if (!res.ok) {
10
+ throw new Error(`GitHub API error: ${res.status} ${res.statusText}`);
11
+ }
12
+ const page = await res.json();
13
+ results.push(...page);
14
+ // Parse Link header for next page
15
+ const link = res.headers.get("link");
16
+ const next = link?.match(/<([^>]+)>;\s*rel="next"/);
17
+ nextUrl = next ? next[1] : null;
18
+ }
19
+ return results;
20
+ }
21
+ export function isCodexActivity(item) {
22
+ const login = item.user?.login?.toLowerCase();
23
+ if (login && CODEX_LOGINS.includes(login))
24
+ return true;
25
+ return item.performed_via_github_app?.slug === "codex";
26
+ }
27
+ export async function pollForCodexReview(opts) {
28
+ const { owner, repo, pr } = opts;
29
+ const token = process.env.GITHUB_TOKEN;
30
+ if (!token) {
31
+ console.error(JSON.stringify({ found: false, error: "GITHUB_TOKEN not set" }));
32
+ process.exit(1);
33
+ }
34
+ const headers = {
35
+ Authorization: `Bearer ${token}`,
36
+ Accept: "application/vnd.github+json",
37
+ "X-GitHub-Api-Version": "2022-11-28",
38
+ };
39
+ const maxPolls = 8;
40
+ const pollInterval = 60_000; // 60 seconds
41
+ for (let i = 0; i < maxPolls; i++) {
42
+ if (i > 0) {
43
+ await new Promise((resolve) => setTimeout(resolve, pollInterval));
44
+ }
45
+ console.error(`[forge] Polling for Codex review (attempt ${i + 1}/${maxPolls})...`);
46
+ try {
47
+ const reviewsUrl = `https://api.github.com/repos/${owner}/${repo}/pulls/${pr}/reviews`;
48
+ const reviews = await fetchAllPages(reviewsUrl, headers);
49
+ const commentsUrl = `https://api.github.com/repos/${owner}/${repo}/pulls/${pr}/comments`;
50
+ const comments = await fetchAllPages(commentsUrl, headers);
51
+ const codexReviews = reviews.filter(isCodexActivity);
52
+ const codexComments = comments.filter(isCodexActivity);
53
+ if (codexReviews.length > 0 || codexComments.length > 0) {
54
+ const result = {
55
+ found: true,
56
+ reviews: codexReviews.map((r) => ({ id: r.id, state: r.state, body: r.body, user: r.user?.login })),
57
+ comments: codexComments.map((c) => ({ id: c.id, body: c.body, path: c.path, user: c.user?.login })),
58
+ };
59
+ console.log(JSON.stringify(result, null, 2));
60
+ process.exit(0);
61
+ }
62
+ }
63
+ catch (err) {
64
+ console.error(`[forge] Poll attempt ${i + 1} failed: ${err instanceof Error ? err.message : String(err)}`);
65
+ }
66
+ }
67
+ console.log(JSON.stringify({ found: false, error: "No Codex review found after 8 minutes" }));
68
+ process.exit(1);
69
+ }
70
+ //# sourceMappingURL=codex-poll.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-poll.js","sourceRoot":"","sources":["../src/codex-poll.ts"],"names":[],"mappings":"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"}
@@ -4,22 +4,6 @@ export declare const forgeConfigSchema: z.ZodObject<{
4
4
  gateTimeouts: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodNumber>>;
5
5
  maxIterations: z.ZodDefault<z.ZodNumber>;
6
6
  linearTeam: z.ZodDefault<z.ZodString>;
7
- linearStates: z.ZodDefault<z.ZodObject<{
8
- planned: z.ZodDefault<z.ZodString>;
9
- inProgress: z.ZodDefault<z.ZodString>;
10
- inReview: z.ZodDefault<z.ZodString>;
11
- done: z.ZodDefault<z.ZodString>;
12
- }, "strict", z.ZodTypeAny, {
13
- planned: string;
14
- inProgress: string;
15
- inReview: string;
16
- done: string;
17
- }, {
18
- planned?: string | undefined;
19
- inProgress?: string | undefined;
20
- inReview?: string | undefined;
21
- done?: string | undefined;
22
- }>>;
23
7
  verifyFreshness: z.ZodDefault<z.ZodNumber>;
24
8
  forgeVersion: z.ZodDefault<z.ZodString>;
25
9
  }, "strict", z.ZodTypeAny, {
@@ -27,12 +11,6 @@ export declare const forgeConfigSchema: z.ZodObject<{
27
11
  gateTimeouts: Record<string, number>;
28
12
  maxIterations: number;
29
13
  linearTeam: string;
30
- linearStates: {
31
- planned: string;
32
- inProgress: string;
33
- inReview: string;
34
- done: string;
35
- };
36
14
  verifyFreshness: number;
37
15
  forgeVersion: string;
38
16
  }, {
@@ -40,12 +18,6 @@ export declare const forgeConfigSchema: z.ZodObject<{
40
18
  gateTimeouts?: Record<string, number> | undefined;
41
19
  maxIterations?: number | undefined;
42
20
  linearTeam?: string | undefined;
43
- linearStates?: {
44
- planned?: string | undefined;
45
- inProgress?: string | undefined;
46
- inReview?: string | undefined;
47
- done?: string | undefined;
48
- } | undefined;
49
21
  verifyFreshness?: number | undefined;
50
22
  forgeVersion?: string | undefined;
51
23
  }>;