github-issue-tower-defence-management 1.172.2 → 1.173.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/CHANGELOG.md +14 -0
- package/README.md +2 -0
- package/bin/adapter/entry-points/console/consoleReadApi.js +126 -48
- package/bin/adapter/entry-points/console/consoleReadApi.js.map +1 -1
- package/bin/adapter/entry-points/console/ui-dist/assets/{index-ZYMkO0fm.js → index-BcnLfodS.js} +1 -1
- package/bin/adapter/entry-points/console/ui-dist/index.html +1 -1
- package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js +3 -1
- package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js.map +1 -1
- package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js +19 -17
- package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js.map +1 -1
- package/bin/adapter/repositories/issue/githubRateLimitRetry.js +8 -1
- package/bin/adapter/repositories/issue/githubRateLimitRetry.js.map +1 -1
- package/bin/domain/usecases/HandleScheduledEventUseCase.js +17 -3
- package/bin/domain/usecases/HandleScheduledEventUseCase.js.map +1 -1
- package/bin/domain/usecases/QualityCheckAdvanceUseCase.js +50 -0
- package/bin/domain/usecases/QualityCheckAdvanceUseCase.js.map +1 -0
- package/package.json +1 -1
- package/src/adapter/entry-points/console/consoleReadApi.test.ts +254 -0
- package/src/adapter/entry-points/console/consoleReadApi.ts +133 -55
- package/src/adapter/entry-points/console/ui/src/features/console/lib/consoleApi.test.ts +10 -0
- package/src/adapter/entry-points/console/ui/src/features/console/lib/consoleApi.ts +14 -1
- package/src/adapter/entry-points/console/ui-dist/assets/{index-ZYMkO0fm.js → index-BcnLfodS.js} +1 -1
- package/src/adapter/entry-points/console/ui-dist/index.html +1 -1
- package/src/adapter/entry-points/console/webServer.test.ts +35 -0
- package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts +6 -0
- package/src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.ts +47 -19
- package/src/adapter/repositories/issue/githubRateLimitRetry.ts +4 -0
- package/src/domain/usecases/HandleScheduledEventUseCase.test.ts +116 -0
- package/src/domain/usecases/HandleScheduledEventUseCase.ts +21 -0
- package/src/domain/usecases/QualityCheckAdvanceUseCase.test.ts +387 -0
- package/src/domain/usecases/QualityCheckAdvanceUseCase.ts +75 -0
- package/types/adapter/entry-points/console/consoleReadApi.d.ts +2 -0
- package/types/adapter/entry-points/console/consoleReadApi.d.ts.map +1 -1
- package/types/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.d.ts.map +1 -1
- package/types/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.d.ts +1 -0
- package/types/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.d.ts.map +1 -1
- package/types/adapter/repositories/issue/githubRateLimitRetry.d.ts +3 -0
- package/types/adapter/repositories/issue/githubRateLimitRetry.d.ts.map +1 -1
- package/types/domain/usecases/HandleScheduledEventUseCase.d.ts +5 -2
- package/types/domain/usecases/HandleScheduledEventUseCase.d.ts.map +1 -1
- package/types/domain/usecases/QualityCheckAdvanceUseCase.d.ts +14 -0
- package/types/domain/usecases/QualityCheckAdvanceUseCase.d.ts.map +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
## [1.173.1](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.173.0...v1.173.1) (2026-08-23)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **console:** return 429 with rate limit message instead of 500 on GitHub rate limit ([#1680](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/1680)) ([1dca110](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/1dca110c68862312a889301ed3e1c4f621bb5626)), closes [#1671](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/1671)
|
|
7
|
+
|
|
8
|
+
# [1.173.0](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.172.2...v1.173.0) (2026-08-23)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* **AdvanceQualityCheckUseCase:** auto-advance Awaiting Quality Check items to Done ([#1686](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/1686)) ([0d33826](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/0d3382625e5d3113212240c2ef67de6c02517b0a)), closes [#1681](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/1681)
|
|
14
|
+
|
|
1
15
|
## [1.172.2](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.172.1...v1.172.2) (2026-08-23)
|
|
2
16
|
|
|
3
17
|
|
package/README.md
CHANGED
|
@@ -225,6 +225,7 @@ startPreparation?: # Optional: Enable automatic issue preparation workflow
|
|
|
225
225
|
allowedIssueAuthors?: string[] | null # Optional: Only start preparation for issues from these authors (null = all authors)
|
|
226
226
|
preparationProcessCheckCommand?: string # Optional: Shell command template with {URL} placeholder to check if a preparation process is alive. When set, orphaned Preparation issues (process exits non-zero, or stale aw log) are evaluated for completion: if work is done they advance to Awaiting Quality Check; otherwise they fall back to Awaiting Workspace
|
|
227
227
|
awaitingQualityCheckStatus?: string | null # Optional: Project status name for issues awaiting quality check. When set with preparationProcessCheckCommand, orphaned issues with no rejections advance to this status instead of awaitingWorkspaceStatus
|
|
228
|
+
autoAdvanceQualityCheckEnabled?: boolean # Optional: When true, issues in the Awaiting Quality Check status are automatically advanced to Done on each scheduled cycle. Default false (issues remain in Awaiting Quality Check for human review). Use awaitingQualityCheckStatus to configure the status name when it differs from the default
|
|
228
229
|
codexHomeCandidates?: string[] | null # Optional: Ordered list of CODEX_HOME directory paths. Each launched Codex job cycles through the list; absent or empty keeps current behavior
|
|
229
230
|
awLogDirectoryPath?: string # Optional: Directory path where aw log files named {org}_{repo}_{number}_* are written. Used with awLogStaleThresholdMinutes to detect zombie-wrapper orphans
|
|
230
231
|
awLogStaleThresholdMinutes?: number # Optional: Minutes since last aw log mtime after which a Preparation issue is considered orphaned even when pgrep still returns 0 (outer wrapper alive but inner claude dead). Requires awLogDirectoryPath
|
|
@@ -278,6 +279,7 @@ startPreparation:
|
|
|
278
279
|
utilizationPercentageThreshold: 90
|
|
279
280
|
preparationProcessCheckCommand: 'pgrep -fa "claude-agent.*{URL}"'
|
|
280
281
|
awaitingQualityCheckStatus: 'Awaiting Quality Check'
|
|
282
|
+
autoAdvanceQualityCheckEnabled: false # set to true to auto-advance to Done without human review
|
|
281
283
|
awLogDirectoryPath: '/home/user/logs-aw'
|
|
282
284
|
awLogStaleThresholdMinutes: 15
|
|
283
285
|
labelsAsLlmAgentName:
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.handlePullRequestStatus = exports.handleIssueTitle = exports.handleRelatedPrs = exports.handlePrCommits = exports.handlePrFiles = exports.handleComments = exports.handleItemBody = exports.PullRequestStatusCache = exports.IssueTitleStateCache = exports.deriveMergeableStatus = exports.PULL_REQUEST_STATUS_CACHE_TTL_MS = exports.ISSUE_TITLE_CACHE_TTL_MS = void 0;
|
|
4
|
+
const githubRateLimitRetry_1 = require("../../repositories/issue/githubRateLimitRetry");
|
|
4
5
|
exports.ISSUE_TITLE_CACHE_TTL_MS = 300 * 1000;
|
|
5
6
|
exports.PULL_REQUEST_STATUS_CACHE_TTL_MS = 30 * 1000;
|
|
6
7
|
const deriveMergeableStatus = (mergeable) => {
|
|
@@ -30,6 +31,10 @@ class IssueTitleStateCache {
|
|
|
30
31
|
}
|
|
31
32
|
return entry.state;
|
|
32
33
|
};
|
|
34
|
+
this.getStale = (url) => {
|
|
35
|
+
const entry = this.entries.get(url);
|
|
36
|
+
return entry?.state ?? null;
|
|
37
|
+
};
|
|
33
38
|
this.set = (url, state) => {
|
|
34
39
|
this.entries.set(url, { state, fetchedAtMs: this.nowMs() });
|
|
35
40
|
};
|
|
@@ -50,12 +55,17 @@ class PullRequestStatusCache {
|
|
|
50
55
|
}
|
|
51
56
|
return entry.status;
|
|
52
57
|
};
|
|
58
|
+
this.getStale = (url) => {
|
|
59
|
+
const entry = this.entries.get(url);
|
|
60
|
+
return entry?.status ?? null;
|
|
61
|
+
};
|
|
53
62
|
this.set = (url, status) => {
|
|
54
63
|
this.entries.set(url, { status, fetchedAtMs: this.nowMs() });
|
|
55
64
|
};
|
|
56
65
|
}
|
|
57
66
|
}
|
|
58
67
|
exports.PullRequestStatusCache = PullRequestStatusCache;
|
|
68
|
+
const isGitHubRateLimitError = (error) => error instanceof githubRateLimitRetry_1.GitHubRateLimitError;
|
|
59
69
|
const badRequest = (message) => ({
|
|
60
70
|
statusCode: 400,
|
|
61
71
|
body: { error: message },
|
|
@@ -64,6 +74,10 @@ const ok = (body) => ({
|
|
|
64
74
|
statusCode: 200,
|
|
65
75
|
body,
|
|
66
76
|
});
|
|
77
|
+
const rateLimited = (error) => ({
|
|
78
|
+
statusCode: 429,
|
|
79
|
+
body: { error: error.message },
|
|
80
|
+
});
|
|
67
81
|
const serializeComments = (comments) => comments.map((comment) => ({
|
|
68
82
|
author: comment.author,
|
|
69
83
|
body: comment.body,
|
|
@@ -79,60 +93,100 @@ const handleItemBody = async (issueRepository, url) => {
|
|
|
79
93
|
if (!url) {
|
|
80
94
|
return badRequest('url query parameter is required');
|
|
81
95
|
}
|
|
82
|
-
|
|
83
|
-
|
|
96
|
+
try {
|
|
97
|
+
const body = await issueRepository.getIssueOrPullRequestBody(url);
|
|
98
|
+
return ok({ body });
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
if (isGitHubRateLimitError(error)) {
|
|
102
|
+
return rateLimited(error);
|
|
103
|
+
}
|
|
104
|
+
throw error;
|
|
105
|
+
}
|
|
84
106
|
};
|
|
85
107
|
exports.handleItemBody = handleItemBody;
|
|
86
108
|
const handleComments = async (issueRepository, url) => {
|
|
87
109
|
if (!url) {
|
|
88
110
|
return badRequest('url query parameter is required');
|
|
89
111
|
}
|
|
90
|
-
|
|
91
|
-
|
|
112
|
+
try {
|
|
113
|
+
const comments = await issueRepository.getIssueOrPullRequestComments(url);
|
|
114
|
+
return ok({ comments: serializeComments(comments) });
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
if (isGitHubRateLimitError(error)) {
|
|
118
|
+
return rateLimited(error);
|
|
119
|
+
}
|
|
120
|
+
throw error;
|
|
121
|
+
}
|
|
92
122
|
};
|
|
93
123
|
exports.handleComments = handleComments;
|
|
94
124
|
const handlePrFiles = async (issueRepository, url) => {
|
|
95
125
|
if (!url) {
|
|
96
126
|
return badRequest('url query parameter is required');
|
|
97
127
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
128
|
+
try {
|
|
129
|
+
const detail = await issueRepository.getPullRequestDetail(url);
|
|
130
|
+
if (detail === null) {
|
|
131
|
+
return ok({ files: null });
|
|
132
|
+
}
|
|
133
|
+
return ok({ files: detail.files });
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
if (isGitHubRateLimitError(error)) {
|
|
137
|
+
return rateLimited(error);
|
|
138
|
+
}
|
|
139
|
+
throw error;
|
|
101
140
|
}
|
|
102
|
-
return ok({ files: detail.files });
|
|
103
141
|
};
|
|
104
142
|
exports.handlePrFiles = handlePrFiles;
|
|
105
143
|
const handlePrCommits = async (issueRepository, url) => {
|
|
106
144
|
if (!url) {
|
|
107
145
|
return badRequest('url query parameter is required');
|
|
108
146
|
}
|
|
109
|
-
|
|
110
|
-
|
|
147
|
+
try {
|
|
148
|
+
const commits = await issueRepository.getPullRequestCommits(url);
|
|
149
|
+
return ok({ commits: serializeCommits(commits) });
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
if (isGitHubRateLimitError(error)) {
|
|
153
|
+
return rateLimited(error);
|
|
154
|
+
}
|
|
155
|
+
throw error;
|
|
156
|
+
}
|
|
111
157
|
};
|
|
112
158
|
exports.handlePrCommits = handlePrCommits;
|
|
113
159
|
const handleRelatedPrs = async (issueRepository, url) => {
|
|
114
160
|
if (!url) {
|
|
115
161
|
return badRequest('url query parameter is required');
|
|
116
162
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
const
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
163
|
+
try {
|
|
164
|
+
const relatedPullRequests = await issueRepository.findRelatedOpenPRs(url);
|
|
165
|
+
const withSummaries = await Promise.all(relatedPullRequests.map(async (relatedPullRequest) => {
|
|
166
|
+
const summary = await issueRepository.getPullRequestSummary(relatedPullRequest.url);
|
|
167
|
+
return {
|
|
168
|
+
url: relatedPullRequest.url,
|
|
169
|
+
branchName: relatedPullRequest.branchName,
|
|
170
|
+
createdAt: relatedPullRequest.createdAt.toISOString(),
|
|
171
|
+
isDraft: relatedPullRequest.isDraft,
|
|
172
|
+
isConflicted: relatedPullRequest.isConflicted,
|
|
173
|
+
mergeableStatus: (0, exports.deriveMergeableStatus)(relatedPullRequest.mergeable),
|
|
174
|
+
isPassedAllCiJob: relatedPullRequest.isPassedAllCiJob,
|
|
175
|
+
isCiStateSuccess: relatedPullRequest.isCiStateSuccess,
|
|
176
|
+
isResolvedAllReviewComments: relatedPullRequest.isResolvedAllReviewComments,
|
|
177
|
+
isBranchOutOfDate: relatedPullRequest.isBranchOutOfDate,
|
|
178
|
+
missingRequiredCheckNames: relatedPullRequest.missingRequiredCheckNames,
|
|
179
|
+
summary,
|
|
180
|
+
};
|
|
181
|
+
}));
|
|
182
|
+
return ok({ relatedPullRequests: withSummaries });
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
if (isGitHubRateLimitError(error)) {
|
|
186
|
+
return rateLimited(error);
|
|
187
|
+
}
|
|
188
|
+
throw error;
|
|
189
|
+
}
|
|
136
190
|
};
|
|
137
191
|
exports.handleRelatedPrs = handleRelatedPrs;
|
|
138
192
|
const handleIssueTitle = async (issueRepository, cache, url) => {
|
|
@@ -143,9 +197,21 @@ const handleIssueTitle = async (issueRepository, cache, url) => {
|
|
|
143
197
|
if (cached !== null) {
|
|
144
198
|
return ok(cached);
|
|
145
199
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
200
|
+
try {
|
|
201
|
+
const state = await issueRepository.getIssueOrPullRequestState(url);
|
|
202
|
+
cache.set(url, state);
|
|
203
|
+
return ok(state);
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
if (isGitHubRateLimitError(error)) {
|
|
207
|
+
const stale = cache.getStale(url);
|
|
208
|
+
if (stale !== null) {
|
|
209
|
+
return ok(stale);
|
|
210
|
+
}
|
|
211
|
+
return rateLimited(error);
|
|
212
|
+
}
|
|
213
|
+
throw error;
|
|
214
|
+
}
|
|
149
215
|
};
|
|
150
216
|
exports.handleIssueTitle = handleIssueTitle;
|
|
151
217
|
const handlePullRequestStatus = async (issueRepository, cache, url) => {
|
|
@@ -156,22 +222,34 @@ const handlePullRequestStatus = async (issueRepository, cache, url) => {
|
|
|
156
222
|
if (cached !== null) {
|
|
157
223
|
return ok(cached);
|
|
158
224
|
}
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
225
|
+
try {
|
|
226
|
+
const pullRequest = await issueRepository.getOpenPullRequestCiStatus(url);
|
|
227
|
+
const response = pullRequest === null
|
|
228
|
+
? { found: false, status: null }
|
|
229
|
+
: {
|
|
230
|
+
found: true,
|
|
231
|
+
status: {
|
|
232
|
+
isConflicted: pullRequest.isConflicted,
|
|
233
|
+
mergeableStatus: (0, exports.deriveMergeableStatus)(pullRequest.mergeable),
|
|
234
|
+
isPassedAllCiJob: pullRequest.isPassedAllCiJob,
|
|
235
|
+
isCiStateSuccess: pullRequest.isCiStateSuccess,
|
|
236
|
+
isBranchOutOfDate: pullRequest.isBranchOutOfDate,
|
|
237
|
+
missingRequiredCheckNames: pullRequest.missingRequiredCheckNames,
|
|
238
|
+
},
|
|
239
|
+
};
|
|
240
|
+
cache.set(url, response);
|
|
241
|
+
return ok(response);
|
|
242
|
+
}
|
|
243
|
+
catch (error) {
|
|
244
|
+
if (isGitHubRateLimitError(error)) {
|
|
245
|
+
const stale = cache.getStale(url);
|
|
246
|
+
if (stale !== null) {
|
|
247
|
+
return ok(stale);
|
|
248
|
+
}
|
|
249
|
+
return rateLimited(error);
|
|
250
|
+
}
|
|
251
|
+
throw error;
|
|
252
|
+
}
|
|
175
253
|
};
|
|
176
254
|
exports.handlePullRequestStatus = handlePullRequestStatus;
|
|
177
255
|
//# sourceMappingURL=consoleReadApi.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consoleReadApi.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/console/consoleReadApi.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"consoleReadApi.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/console/consoleReadApi.ts"],"names":[],"mappings":"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"}
|