github-issue-tower-defence-management 2.63.3 → 2.63.5

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 (25) hide show
  1. package/bin/adapter/repositories/GitHubIssueCommentRepository.js +15 -0
  2. package/bin/adapter/repositories/GitHubIssueCommentRepository.js.map +1 -1
  3. package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js +16 -9
  4. package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js.map +1 -1
  5. package/bin/adapter/repositories/issue/RestIssueRepository.js +107 -29
  6. package/bin/adapter/repositories/issue/RestIssueRepository.js.map +1 -1
  7. package/bin/adapter/repositories/issue/githubRateLimitRetry.js +148 -3
  8. package/bin/adapter/repositories/issue/githubRateLimitRetry.js.map +1 -1
  9. package/bin/adapter/repositories/issue/githubSecondaryRateLimitBreaker.js +126 -0
  10. package/bin/adapter/repositories/issue/githubSecondaryRateLimitBreaker.js.map +1 -0
  11. package/bin/domain/usecases/CliErrorReportUseCase.js +1 -1
  12. package/bin/domain/usecases/CliErrorReportUseCase.js.map +1 -1
  13. package/bin/domain/usecases/NotifyFinishedIssuePreparationUseCase.js +6 -6
  14. package/bin/domain/usecases/NotifyFinishedIssuePreparationUseCase.js.map +1 -1
  15. package/package.json +1 -1
  16. package/types/adapter/repositories/GitHubIssueCommentRepository.d.ts.map +1 -1
  17. package/types/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.d.ts +7 -0
  18. package/types/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.d.ts.map +1 -1
  19. package/types/adapter/repositories/issue/RestIssueRepository.d.ts +12 -0
  20. package/types/adapter/repositories/issue/RestIssueRepository.d.ts.map +1 -1
  21. package/types/adapter/repositories/issue/githubRateLimitRetry.d.ts +53 -1
  22. package/types/adapter/repositories/issue/githubRateLimitRetry.d.ts.map +1 -1
  23. package/types/adapter/repositories/issue/githubSecondaryRateLimitBreaker.d.ts +49 -0
  24. package/types/adapter/repositories/issue/githubSecondaryRateLimitBreaker.d.ts.map +1 -0
  25. package/types/domain/usecases/NotifyFinishedIssuePreparationUseCase.d.ts.map +1 -1
@@ -37,6 +37,7 @@ exports.RestIssueRepository = void 0;
37
37
  const ky_1 = __importStar(require("ky"));
38
38
  const BaseGitHubRepository_1 = require("../BaseGitHubRepository");
39
39
  const githubRateLimitRetry_1 = require("./githubRateLimitRetry");
40
+ const githubSecondaryRateLimitBreaker_1 = require("./githubSecondaryRateLimitBreaker");
40
41
  const commentDeduplication_1 = require("../commentDeduplication");
41
42
  function isStringRecord(value) {
42
43
  return typeof value === 'object' && value !== null;
@@ -59,6 +60,7 @@ class RestIssueRepository extends BaseGitHubRepository_1.BaseGitHubRepository {
59
60
  return { author: '', body: comment, createdAt: now, url: null };
60
61
  }
61
62
  }
63
+ this.checkBreakerOrThrow();
62
64
  let result;
63
65
  try {
64
66
  result = await ky_1.default
@@ -69,6 +71,7 @@ class RestIssueRepository extends BaseGitHubRepository_1.BaseGitHubRepository {
69
71
  .json();
70
72
  }
71
73
  catch (e) {
74
+ await this.detectAndRecordSecondaryRateLimit(e);
72
75
  if (e instanceof ky_1.HTTPError) {
73
76
  let bodyText = '';
74
77
  try {
@@ -93,13 +96,20 @@ class RestIssueRepository extends BaseGitHubRepository_1.BaseGitHubRepository {
93
96
  };
94
97
  };
95
98
  this.createNewIssue = async (owner, repo, title, body, assignees, labels) => {
96
- const response = await ky_1.default
97
- .post(`https://api.github.com/repos/${owner}/${repo}/issues`, {
98
- json: { title, body, assignees, labels },
99
- headers: { Authorization: `token ${this.ghToken}` },
100
- })
101
- .json();
102
- return response.number;
99
+ this.checkBreakerOrThrow();
100
+ try {
101
+ const response = await ky_1.default
102
+ .post(`https://api.github.com/repos/${owner}/${repo}/issues`, {
103
+ json: { title, body, assignees, labels },
104
+ headers: { Authorization: `token ${this.ghToken}` },
105
+ })
106
+ .json();
107
+ return response.number;
108
+ }
109
+ catch (e) {
110
+ await this.detectAndRecordSecondaryRateLimit(e);
111
+ throw e;
112
+ }
103
113
  };
104
114
  this.getIssue = async (issueUrl) => {
105
115
  const { owner, repo, issueNumber } = this.extractIssueFromUrl(issueUrl);
@@ -122,6 +132,7 @@ class RestIssueRepository extends BaseGitHubRepository_1.BaseGitHubRepository {
122
132
  };
123
133
  };
124
134
  this.updateIssue = async (issue) => {
135
+ this.checkBreakerOrThrow();
125
136
  try {
126
137
  await ky_1.default.patch(`https://api.github.com/repos/${issue.org}/${issue.repo}/issues/${issue.number}`, {
127
138
  json: {
@@ -135,6 +146,7 @@ class RestIssueRepository extends BaseGitHubRepository_1.BaseGitHubRepository {
135
146
  });
136
147
  }
137
148
  catch (e) {
149
+ await this.detectAndRecordSecondaryRateLimit(e);
138
150
  if (e instanceof ky_1.HTTPError) {
139
151
  const bodyText = await e.response
140
152
  .clone()
@@ -148,22 +160,37 @@ class RestIssueRepository extends BaseGitHubRepository_1.BaseGitHubRepository {
148
160
  }
149
161
  };
150
162
  this.updateIssueBody = async (issue, body) => {
151
- await ky_1.default.patch(`https://api.github.com/repos/${issue.org}/${issue.repo}/issues/${issue.number}`, {
152
- json: { body },
153
- headers: { Authorization: `token ${this.ghToken}` },
154
- });
163
+ this.checkBreakerOrThrow();
164
+ try {
165
+ await ky_1.default.patch(`https://api.github.com/repos/${issue.org}/${issue.repo}/issues/${issue.number}`, {
166
+ json: { body },
167
+ headers: { Authorization: `token ${this.ghToken}` },
168
+ });
169
+ }
170
+ catch (e) {
171
+ await this.detectAndRecordSecondaryRateLimit(e);
172
+ throw e;
173
+ }
155
174
  };
156
175
  this.updateLabels = async (issue, labels) => {
157
- await ky_1.default.put(`https://api.github.com/repos/${issue.org}/${issue.repo}/issues/${issue.number}/labels`, {
158
- json: { labels },
159
- headers: {
160
- Authorization: `token ${this.ghToken}`,
161
- Accept: 'application/vnd.github.v3+json',
162
- },
163
- });
176
+ this.checkBreakerOrThrow();
177
+ try {
178
+ await ky_1.default.put(`https://api.github.com/repos/${issue.org}/${issue.repo}/issues/${issue.number}/labels`, {
179
+ json: { labels },
180
+ headers: {
181
+ Authorization: `token ${this.ghToken}`,
182
+ Accept: 'application/vnd.github.v3+json',
183
+ },
184
+ });
185
+ }
186
+ catch (e) {
187
+ await this.detectAndRecordSecondaryRateLimit(e);
188
+ throw e;
189
+ }
164
190
  return;
165
191
  };
166
192
  this.removeLabel = async (issue, label) => {
193
+ this.checkBreakerOrThrow();
167
194
  try {
168
195
  await ky_1.default.delete(`https://api.github.com/repos/${issue.org}/${issue.repo}/issues/${issue.number}/labels/${encodeURIComponent(label)}`, {
169
196
  headers: {
@@ -173,6 +200,7 @@ class RestIssueRepository extends BaseGitHubRepository_1.BaseGitHubRepository {
173
200
  });
174
201
  }
175
202
  catch (e) {
203
+ await this.detectAndRecordSecondaryRateLimit(e);
176
204
  if (e instanceof ky_1.HTTPError && e.response.status === 404) {
177
205
  return;
178
206
  }
@@ -190,13 +218,20 @@ class RestIssueRepository extends BaseGitHubRepository_1.BaseGitHubRepository {
190
218
  }
191
219
  catch (e) {
192
220
  if (e instanceof ky_1.HTTPError && e.response.status === 404) {
193
- await ky_1.default.post(`https://api.github.com/repos/${org}/${repo}/labels`, {
194
- json: { name: labelName, color: 'ededed' },
195
- headers: {
196
- Authorization: `token ${this.ghToken}`,
197
- Accept: 'application/vnd.github.v3+json',
198
- },
199
- });
221
+ this.checkBreakerOrThrow();
222
+ try {
223
+ await ky_1.default.post(`https://api.github.com/repos/${org}/${repo}/labels`, {
224
+ json: { name: labelName, color: 'ededed' },
225
+ headers: {
226
+ Authorization: `token ${this.ghToken}`,
227
+ Accept: 'application/vnd.github.v3+json',
228
+ },
229
+ });
230
+ }
231
+ catch (postErr) {
232
+ await this.detectAndRecordSecondaryRateLimit(postErr);
233
+ throw postErr;
234
+ }
200
235
  }
201
236
  else {
202
237
  throw e;
@@ -204,10 +239,17 @@ class RestIssueRepository extends BaseGitHubRepository_1.BaseGitHubRepository {
204
239
  }
205
240
  };
206
241
  this.updateAssigneeList = async (issue, assigneeList) => {
207
- await ky_1.default.patch(`https://api.github.com/repos/${issue.org}/${issue.repo}/issues/${issue.number}`, {
208
- json: { assignees: assigneeList },
209
- headers: { Authorization: `token ${this.ghToken}` },
210
- });
242
+ this.checkBreakerOrThrow();
243
+ try {
244
+ await ky_1.default.patch(`https://api.github.com/repos/${issue.org}/${issue.repo}/issues/${issue.number}`, {
245
+ json: { assignees: assigneeList },
246
+ headers: { Authorization: `token ${this.ghToken}` },
247
+ });
248
+ }
249
+ catch (e) {
250
+ await this.detectAndRecordSecondaryRateLimit(e);
251
+ throw e;
252
+ }
211
253
  };
212
254
  this.searchIssues = async (query) => {
213
255
  const perPage = 100;
@@ -292,6 +334,42 @@ class RestIssueRepository extends BaseGitHubRepository_1.BaseGitHubRepository {
292
334
  }
293
335
  return comments;
294
336
  }
337
+ get stateFilePath() {
338
+ return (0, githubSecondaryRateLimitBreaker_1.secondaryRateLimitStateFilePath)();
339
+ }
340
+ /**
341
+ * Throws GitHubRateLimitError when the shared secondary rate-limit circuit
342
+ * breaker is open. Call before every content-creating request.
343
+ */
344
+ checkBreakerOrThrow() {
345
+ const nowMs = Date.now();
346
+ const breaker = (0, githubSecondaryRateLimitBreaker_1.checkSecondaryRateLimitBreaker)(nowMs, this.stateFilePath);
347
+ if (breaker.isBlocked && breaker.resetTimeMs !== null) {
348
+ throw new githubRateLimitRetry_1.GitHubRateLimitError(`GitHub secondary rate limit is active until ${new Date(breaker.resetTimeMs).toISOString()}`, new Date(breaker.resetTimeMs).toISOString());
349
+ }
350
+ }
351
+ /**
352
+ * If `e` is an HTTPError caused by a secondary rate limit, records the block
353
+ * to the shared state file and re-throws as GitHubRateLimitError.
354
+ * Returns without throwing when `e` is not a secondary rate limit.
355
+ */
356
+ async detectAndRecordSecondaryRateLimit(e) {
357
+ if (!(e instanceof ky_1.HTTPError))
358
+ return;
359
+ let bodyText = '';
360
+ try {
361
+ bodyText = await e.response.clone().text();
362
+ }
363
+ catch {
364
+ // ky 2.x may have already consumed the body
365
+ }
366
+ const nowMs = Date.now();
367
+ if (!(0, githubRateLimitRetry_1.isSecondaryRateLimit)(e.response.headers, bodyText))
368
+ return;
369
+ const backoffMs = (0, githubRateLimitRetry_1.computeSecondaryRateLimitBackoffMs)(e.response.headers, nowMs);
370
+ (0, githubSecondaryRateLimitBreaker_1.writeSecondaryRateLimitState)(nowMs + backoffMs, nowMs, this.stateFilePath);
371
+ throw new githubRateLimitRetry_1.GitHubRateLimitError(`HTTP ${e.response.status} GitHub API secondary rate limit exceeded`, new Date(nowMs + backoffMs).toISOString());
372
+ }
295
373
  }
296
374
  exports.RestIssueRepository = RestIssueRepository;
297
375
  //# sourceMappingURL=RestIssueRepository.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RestIssueRepository.js","sourceRoot":"","sources":["../../../../src/adapter/repositories/issue/RestIssueRepository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RestIssueRepository.js","sourceRoot":"","sources":["../../../../src/adapter/repositories/issue/RestIssueRepository.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.fetchWithGitHubRateLimitRetry = exports.computeBoundedBackoffMs = exports.computeRateLimitResetIso = exports.hasRateLimitSignals = exports.realSleep = exports.RATE_LIMIT_BASE_BACKOFF_MS = exports.RATE_LIMIT_TOTAL_BACKOFF_CAP_MS = exports.RATE_LIMIT_MAX_RETRIES = exports.GitHubRateLimitError = void 0;
3
+ exports.fetchWithGitHubRateLimitRetry = exports.computeBoundedBackoffMs = exports.computeRateLimitResetIso = exports.computeSecondaryRateLimitBackoffMs = exports.isSecondaryRateLimit = exports.hasRateLimitSignals = exports.realSleep = exports.SECONDARY_RATE_LIMIT_FLOOR_MS = exports.RATE_LIMIT_BASE_BACKOFF_MS = exports.RATE_LIMIT_TOTAL_BACKOFF_CAP_MS = exports.RATE_LIMIT_MAX_RETRIES = exports.GitHubRateLimitError = void 0;
4
+ const githubSecondaryRateLimitBreaker_1 = require("./githubSecondaryRateLimitBreaker");
4
5
  class GitHubRateLimitError extends Error {
5
6
  constructor(message, rateLimitResetAt = null) {
6
7
  super(message);
@@ -12,7 +13,9 @@ exports.GitHubRateLimitError = GitHubRateLimitError;
12
13
  exports.RATE_LIMIT_MAX_RETRIES = 3;
13
14
  exports.RATE_LIMIT_TOTAL_BACKOFF_CAP_MS = 5000;
14
15
  exports.RATE_LIMIT_BASE_BACKOFF_MS = 250;
16
+ exports.SECONDARY_RATE_LIMIT_FLOOR_MS = 60000;
15
17
  const RATE_LIMIT_MESSAGE_PATTERN = /rate limit|secondary rate limit|abuse/i;
18
+ const SECONDARY_RATE_LIMIT_BODY_PATTERN = /secondary rate limit/i;
16
19
  const realSleep = (milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds));
17
20
  exports.realSleep = realSleep;
18
21
  const parseNonNegativeIntegerHeader = (value) => {
@@ -39,6 +42,56 @@ const hasRateLimitSignals = (status, headers, bodyText) => {
39
42
  return RATE_LIMIT_MESSAGE_PATTERN.test(bodyText);
40
43
  };
41
44
  exports.hasRateLimitSignals = hasRateLimitSignals;
45
+ /**
46
+ * Returns true when the response indicates a secondary (content-creation)
47
+ * rate limit, detected by two signals documented by GitHub:
48
+ * 1. Response body contains "secondary rate limit".
49
+ * 2. A retry-after header is present.
50
+ *
51
+ * Secondary rate limits require a minimum 60-second wait before any retry,
52
+ * which is incompatible with the 5-second primary-limit budget cap.
53
+ *
54
+ * Note: x-ratelimit-remaining=0 with a future x-ratelimit-reset and no
55
+ * retry-after is the primary hourly-quota exhaustion signature, NOT a
56
+ * secondary rate limit. That case is handled separately in
57
+ * fetchWithGitHubRateLimitRetry to avoid contaminating the shared circuit
58
+ * breaker state file with a primary-quota event.
59
+ */
60
+ const isSecondaryRateLimit = (headers, bodyText) => {
61
+ // Signal 1: body explicitly names the secondary rate limit
62
+ if (SECONDARY_RATE_LIMIT_BODY_PATTERN.test(bodyText)) {
63
+ return true;
64
+ }
65
+ // Signal 2: retry-after header is present
66
+ if (headers.get('retry-after') !== null) {
67
+ return true;
68
+ }
69
+ return false;
70
+ };
71
+ exports.isSecondaryRateLimit = isSecondaryRateLimit;
72
+ /**
73
+ * Computes how long to wait before retrying after a secondary rate limit
74
+ * response. Respects retry-after and x-ratelimit-reset when present, and
75
+ * enforces a minimum of SECONDARY_RATE_LIMIT_FLOOR_MS (60 s) regardless of
76
+ * what the headers say, as required by the GitHub REST API documentation.
77
+ * The 5-second primary-limit budget cap does NOT apply here.
78
+ */
79
+ const computeSecondaryRateLimitBackoffMs = (headers, nowMs) => {
80
+ // Prefer retry-after if the server provided one
81
+ const retryAfterSeconds = parseNonNegativeIntegerHeader(headers.get('retry-after'));
82
+ if (retryAfterSeconds !== null) {
83
+ return Math.max(retryAfterSeconds * 1000, exports.SECONDARY_RATE_LIMIT_FLOOR_MS);
84
+ }
85
+ // Fall back to computing the wait from x-ratelimit-reset
86
+ const resetEpochSeconds = parseNonNegativeIntegerHeader(headers.get('x-ratelimit-reset'));
87
+ if (resetEpochSeconds !== null) {
88
+ const waitMs = resetEpochSeconds * 1000 - nowMs;
89
+ return Math.max(waitMs, exports.SECONDARY_RATE_LIMIT_FLOOR_MS);
90
+ }
91
+ // No header guidance available: use the floor
92
+ return exports.SECONDARY_RATE_LIMIT_FLOOR_MS;
93
+ };
94
+ exports.computeSecondaryRateLimitBackoffMs = computeSecondaryRateLimitBackoffMs;
42
95
  const computeRateLimitResetIso = (headers) => {
43
96
  const resetEpochSeconds = parseNonNegativeIntegerHeader(headers.get('x-ratelimit-reset'));
44
97
  if (resetEpochSeconds === null) {
@@ -58,20 +111,112 @@ const computeBoundedBackoffMs = (headers, attempt, elapsedMs) => {
58
111
  return Math.min(requestedMs, remainingBudgetMs);
59
112
  };
60
113
  exports.computeBoundedBackoffMs = computeBoundedBackoffMs;
61
- const fetchWithGitHubRateLimitRetry = async (request, sleep = exports.realSleep, now = Date.now) => {
114
+ /**
115
+ * Wraps a GitHub API request with rate-limit-aware retry logic.
116
+ *
117
+ * Two classes of rate limit are handled differently:
118
+ *
119
+ * Secondary rate limits (content-creation blocks) — detected by
120
+ * `isSecondaryRateLimit` — require a minimum 60-second wait which exceeds
121
+ * the primary-limit budget cap. When `retryOnSecondaryRateLimit` is false
122
+ * (the default, appropriate for interactive console operations) the function
123
+ * returns the error response immediately without retrying, so exactly one
124
+ * request is spent and the caller can surface the reset timestamp to the
125
+ * user. When true, up to RATE_LIMIT_MAX_RETRIES retries are performed with
126
+ * `computeSecondaryRateLimitBackoffMs` (60-second floor, no budget cap).
127
+ *
128
+ * Circuit breaker (content-creating requests only):
129
+ * When `isContentCreating` is true, the function checks a shared on-disk
130
+ * state file before issuing the request. If another process has already
131
+ * recorded an active secondary rate limit block, the request is not issued
132
+ * and a synthetic 403 response is returned immediately, naming the reset
133
+ * time. When a secondary rate limit is detected in a response, the block
134
+ * is written to the shared state file so every other process on the host
135
+ * benefits from the discovery.
136
+ *
137
+ * Primary rate limits follow the original sub-second exponential schedule
138
+ * bounded by RATE_LIMIT_TOTAL_BACKOFF_CAP_MS. Non-rate-limit failures are
139
+ * returned immediately without retrying.
140
+ */
141
+ const fetchWithGitHubRateLimitRetry = async (request, sleep = exports.realSleep, now = Date.now, retryOnSecondaryRateLimit = false, isContentCreating = false, stateFilePath = (0, githubSecondaryRateLimitBreaker_1.secondaryRateLimitStateFilePath)()) => {
62
142
  const startMs = now();
63
143
  let attempt = 0;
64
144
  for (;;) {
145
+ // Circuit breaker: before the first request attempt, check whether another
146
+ // process has already recorded a live secondary rate limit block. This
147
+ // prevents the fleet from hammering GitHub in parallel once one process
148
+ // has discovered the block. The check is limited to the first attempt so
149
+ // that the non-interactive retry path (retryOnSecondaryRateLimit: true)
150
+ // can honour its own recorded wait without blocking itself on a state it
151
+ // just wrote.
152
+ if (isContentCreating && attempt === 0) {
153
+ const nowBeforeMs = now();
154
+ const breaker = (0, githubSecondaryRateLimitBreaker_1.checkSecondaryRateLimitBreaker)(nowBeforeMs, stateFilePath);
155
+ if (breaker.isBlocked && breaker.resetTimeMs !== null) {
156
+ const resetIso = new Date(breaker.resetTimeMs).toISOString();
157
+ return new Response(JSON.stringify({
158
+ message: `GitHub secondary rate limit is active until ${resetIso}; retry later`,
159
+ }), { status: 403 });
160
+ }
161
+ }
65
162
  const response = await request();
66
163
  if (response.ok) {
67
164
  return response;
68
165
  }
69
166
  const bodyText = await response.clone().text();
167
+ const nowMs = now();
168
+ // Secondary rate limit detection and circuit-breaker writes are scoped to
169
+ // content-creating operations. Read operations (isContentCreating: false)
170
+ // fall directly through to the primary rate-limit handler so that a
171
+ // transient 429/retry-after on a read is still retried rather than
172
+ // silently dropped. Secondary rate limits are caused exclusively by
173
+ // content-creation activity, so detecting them on reads would produce
174
+ // false positives and contaminate the shared state file.
175
+ if (isContentCreating && (0, exports.isSecondaryRateLimit)(response.headers, bodyText)) {
176
+ // Record the block in the shared state file so other processes on this
177
+ // host can skip their pending content-creating requests immediately.
178
+ const backoffMs = (0, exports.computeSecondaryRateLimitBackoffMs)(response.headers, nowMs);
179
+ (0, githubSecondaryRateLimitBreaker_1.writeSecondaryRateLimitState)(nowMs + backoffMs, nowMs, stateFilePath);
180
+ if (!retryOnSecondaryRateLimit) {
181
+ // Interactive callers: fail immediately so the reset timestamp
182
+ // already present in the error message reaches the user without
183
+ // spending three more blocked requests across two seconds.
184
+ return response;
185
+ }
186
+ if (attempt >= exports.RATE_LIMIT_MAX_RETRIES) {
187
+ return response;
188
+ }
189
+ console.log(`GitHub returned ${response.status} (secondary rate limit). Backing off ${backoffMs}ms before retry ${attempt + 1}/${exports.RATE_LIMIT_MAX_RETRIES}.`);
190
+ await sleep(backoffMs);
191
+ attempt++;
192
+ continue;
193
+ }
194
+ // Primary hourly-quota exhaustion: x-ratelimit-remaining is 0 with a
195
+ // future x-ratelimit-reset and no retry-after means the hourly quota is
196
+ // fully spent. The reset is up to 3,600 s away, making the 250/500/1000 ms
197
+ // sub-second backoff useless — four identical blocked requests are spent for
198
+ // no gain. Return immediately so the caller surfaces the reset time.
199
+ //
200
+ // Discriminator from the secondary case: secondary rate limits carry
201
+ // retry-after (signal 2) or an explicit secondary-rate-limit body phrase
202
+ // (signal 1) and are already handled above when isContentCreating is true.
203
+ // A response with neither — only remaining=0 and a future reset — is a
204
+ // primary exhaustion.
205
+ const quotaRemaining = parseNonNegativeIntegerHeader(response.headers.get('x-ratelimit-remaining'));
206
+ const resetEpoch = parseNonNegativeIntegerHeader(response.headers.get('x-ratelimit-reset'));
207
+ if (quotaRemaining === 0 &&
208
+ response.headers.get('retry-after') === null &&
209
+ resetEpoch !== null &&
210
+ resetEpoch * 1000 > nowMs) {
211
+ return response;
212
+ }
213
+ // Primary rate limit or other transient error: existing sub-second
214
+ // exponential schedule bounded by RATE_LIMIT_TOTAL_BACKOFF_CAP_MS.
70
215
  if (attempt >= exports.RATE_LIMIT_MAX_RETRIES ||
71
216
  !(0, exports.hasRateLimitSignals)(response.status, response.headers, bodyText)) {
72
217
  return response;
73
218
  }
74
- const elapsedMs = now() - startMs;
219
+ const elapsedMs = nowMs - startMs;
75
220
  const backoffMs = (0, exports.computeBoundedBackoffMs)(response.headers, attempt, elapsedMs);
76
221
  if (backoffMs <= 0) {
77
222
  return response;
@@ -1 +1 @@
1
- {"version":3,"file":"githubRateLimitRetry.js","sourceRoot":"","sources":["../../../../src/adapter/repositories/issue/githubRateLimitRetry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"githubRateLimitRetry.js","sourceRoot":"","sources":["../../../../src/adapter/repositories/issue/githubRateLimitRetry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.checkSecondaryRateLimitBreaker = exports.writeSecondaryRateLimitState = exports.readSecondaryRateLimitState = exports.secondaryRateLimitStateFilePath = exports.STALE_STATE_MAX_AGE_MS = exports.SECONDARY_RATE_LIMIT_STATE_FILE_ENV_VAR = void 0;
37
+ const fs = __importStar(require("node:fs"));
38
+ const path = __importStar(require("node:path"));
39
+ const localStorageCacheDirectory_1 = require("../localStorageCacheDirectory");
40
+ /**
41
+ * Environment variable that overrides the path of the shared secondary rate
42
+ * limit state file. When absent the file lives under the TDPM cache
43
+ * directory so all processes on the host share the same path automatically.
44
+ */
45
+ exports.SECONDARY_RATE_LIMIT_STATE_FILE_ENV_VAR = 'TDPM_GH_SECONDARY_RATE_LIMIT_STATE_FILE';
46
+ /**
47
+ * State older than this is treated as non-blocking. A crashed writer cannot
48
+ * wedge the fleet permanently beyond one hour.
49
+ */
50
+ exports.STALE_STATE_MAX_AGE_MS = 60 * 60 * 1000; // 1 hour
51
+ const isRecord = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);
52
+ const isSecondaryRateLimitState = (value) => {
53
+ if (!isRecord(value)) {
54
+ return false;
55
+ }
56
+ return (typeof value.resetTimeMs === 'number' &&
57
+ typeof value.detectedAtMs === 'number');
58
+ };
59
+ const secondaryRateLimitStateFilePath = () => process.env[exports.SECONDARY_RATE_LIMIT_STATE_FILE_ENV_VAR] ??
60
+ path.join((0, localStorageCacheDirectory_1.tdpmCacheDirectory)(), 'gh-secondary-rate-limit.json');
61
+ exports.secondaryRateLimitStateFilePath = secondaryRateLimitStateFilePath;
62
+ /**
63
+ * Reads the shared state file. Returns null on any I/O or parse error so
64
+ * the caller always falls back to the non-blocking path rather than
65
+ * crashing.
66
+ */
67
+ const readSecondaryRateLimitState = (filePath = (0, exports.secondaryRateLimitStateFilePath)()) => {
68
+ try {
69
+ const raw = fs.readFileSync(filePath, 'utf8');
70
+ const parsed = JSON.parse(raw);
71
+ return isSecondaryRateLimitState(parsed) ? parsed : null;
72
+ }
73
+ catch {
74
+ return null;
75
+ }
76
+ };
77
+ exports.readSecondaryRateLimitState = readSecondaryRateLimitState;
78
+ /**
79
+ * Writes the state file atomically (temp-file then rename) so a concurrent
80
+ * reader never sees a partial file. Errors are swallowed: failure to write
81
+ * means other processes simply do not benefit from this detection, which
82
+ * degrades gracefully to the pre-breaker behaviour.
83
+ */
84
+ const writeSecondaryRateLimitState = (resetTimeMs, detectedAtMs, filePath = (0, exports.secondaryRateLimitStateFilePath)()) => {
85
+ const state = { resetTimeMs, detectedAtMs };
86
+ const dir = path.dirname(filePath);
87
+ try {
88
+ fs.mkdirSync(dir, { recursive: true });
89
+ const tmpPath = path.join(dir, `.gh-secondary-rate-limit-${process.pid}.tmp`);
90
+ fs.writeFileSync(tmpPath, JSON.stringify(state), { encoding: 'utf8' });
91
+ fs.renameSync(tmpPath, filePath);
92
+ }
93
+ catch {
94
+ // Best-effort: if the write fails, the breaker simply does not protect
95
+ // other processes for this block.
96
+ }
97
+ };
98
+ exports.writeSecondaryRateLimitState = writeSecondaryRateLimitState;
99
+ /**
100
+ * Checks whether a previously recorded secondary rate limit block is still
101
+ * active.
102
+ *
103
+ * Returns { isBlocked: false } in every error or edge case:
104
+ * - State file is missing, unreadable, or malformed.
105
+ * - State file is stale (detectedAtMs more than one hour ago).
106
+ * - Reset time has already passed.
107
+ *
108
+ * This ensures a crashed or hung writer cannot wedge the fleet permanently.
109
+ */
110
+ const checkSecondaryRateLimitBreaker = (nowMs, filePath = (0, exports.secondaryRateLimitStateFilePath)()) => {
111
+ const state = (0, exports.readSecondaryRateLimitState)(filePath);
112
+ if (state === null) {
113
+ return { isBlocked: false, resetTimeMs: null };
114
+ }
115
+ // Guard against a stale file left by a crashed writer
116
+ if (nowMs - state.detectedAtMs > exports.STALE_STATE_MAX_AGE_MS) {
117
+ return { isBlocked: false, resetTimeMs: null };
118
+ }
119
+ // Block has expired
120
+ if (nowMs >= state.resetTimeMs) {
121
+ return { isBlocked: false, resetTimeMs: null };
122
+ }
123
+ return { isBlocked: true, resetTimeMs: state.resetTimeMs };
124
+ };
125
+ exports.checkSecondaryRateLimitBreaker = checkSecondaryRateLimitBreaker;
126
+ //# sourceMappingURL=githubSecondaryRateLimitBreaker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"githubSecondaryRateLimitBreaker.js","sourceRoot":"","sources":["../../../../src/adapter/repositories/issue/githubSecondaryRateLimitBreaker.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ const isGitHubRateLimitError = (error) => {
8
8
  if (error.name === 'GitHubRateLimitError') {
9
9
  return true;
10
10
  }
11
- return (/\b(403|429)\b/.test(error.message) ||
11
+ return (/:\s*(403|429)\b/.test(error.message) ||
12
12
  /rate limit|secondary rate limit|abuse/i.test(error.message));
13
13
  };
14
14
  class CliErrorReportUseCase {
@@ -1 +1 @@
1
- {"version":3,"file":"CliErrorReportUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/CliErrorReportUseCase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CliErrorReportUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/CliErrorReportUseCase.ts"],"names":[],"mappings":"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"}