github-issue-tower-defence-management 1.74.0 → 1.75.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.
- package/CHANGELOG.md +14 -0
- package/README.md +10 -0
- package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js +66 -25
- package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js.map +1 -1
- package/bin/adapter/repositories/KyHttpRepository.js +16 -0
- package/bin/adapter/repositories/KyHttpRepository.js.map +1 -0
- package/bin/domain/usecases/DailySecurityScanUseCase.js +108 -0
- package/bin/domain/usecases/DailySecurityScanUseCase.js.map +1 -0
- package/bin/domain/usecases/HandleScheduledEventUseCase.js +18 -3
- package/bin/domain/usecases/HandleScheduledEventUseCase.js.map +1 -1
- package/bin/domain/usecases/RevertNotReadyAwaitingQualityCheckUseCase.js +1 -1
- package/bin/domain/usecases/RevertNotReadyAwaitingQualityCheckUseCase.js.map +1 -1
- package/bin/domain/usecases/adapter-interfaces/HttpRepository.js +3 -0
- package/bin/domain/usecases/adapter-interfaces/HttpRepository.js.map +1 -0
- package/bin/domain/usecases/resolveLabelsAsLlmAgentName.js +8 -0
- package/bin/domain/usecases/resolveLabelsAsLlmAgentName.js.map +1 -0
- package/package.json +1 -1
- package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts +11 -0
- package/src/adapter/repositories/KyHttpRepository.ts +8 -0
- package/src/domain/usecases/DailySecurityScanUseCase.test.ts +412 -0
- package/src/domain/usecases/DailySecurityScanUseCase.ts +200 -0
- package/src/domain/usecases/HandleScheduledEventUseCase.test.ts +3 -0
- package/src/domain/usecases/HandleScheduledEventUseCase.ts +23 -4
- package/src/domain/usecases/RevertNotReadyAwaitingQualityCheckUseCase.test.ts +93 -0
- package/src/domain/usecases/RevertNotReadyAwaitingQualityCheckUseCase.ts +5 -1
- package/src/domain/usecases/adapter-interfaces/HttpRepository.ts +3 -0
- package/src/domain/usecases/resolveLabelsAsLlmAgentName.test.ts +42 -0
- package/src/domain/usecases/resolveLabelsAsLlmAgentName.ts +6 -0
- package/types/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.d.ts.map +1 -1
- package/types/adapter/repositories/KyHttpRepository.d.ts +5 -0
- package/types/adapter/repositories/KyHttpRepository.d.ts.map +1 -0
- package/types/domain/usecases/DailySecurityScanUseCase.d.ts +25 -0
- package/types/domain/usecases/DailySecurityScanUseCase.d.ts.map +1 -0
- package/types/domain/usecases/HandleScheduledEventUseCase.d.ts +5 -1
- package/types/domain/usecases/HandleScheduledEventUseCase.d.ts.map +1 -1
- package/types/domain/usecases/RevertNotReadyAwaitingQualityCheckUseCase.d.ts +1 -0
- package/types/domain/usecases/RevertNotReadyAwaitingQualityCheckUseCase.d.ts.map +1 -1
- package/types/domain/usecases/adapter-interfaces/HttpRepository.d.ts +4 -0
- package/types/domain/usecases/adapter-interfaces/HttpRepository.d.ts.map +1 -0
- package/types/domain/usecases/resolveLabelsAsLlmAgentName.d.ts +5 -0
- package/types/domain/usecases/resolveLabelsAsLlmAgentName.d.ts.map +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
# [1.75.0](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.74.1...v1.75.0) (2026-06-10)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* **core:** add DailySecurityScanUseCase for daily OSV-Scanner and CISA KEV monitoring ([ddaa341](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/ddaa34158029bd8cf3116a9268b0f05bcc628d3c)), closes [#665](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/665)
|
|
7
|
+
|
|
8
|
+
## [1.74.1](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.74.0...v1.74.1) (2026-06-10)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* **tdpm:** exempt labelsAsLlmAgentName issues from auto status check rejection ([9879678](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/98796788f3bdc2fdd244febd10179f64ea1c78ee)), closes [#784](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/784)
|
|
14
|
+
|
|
1
15
|
# [1.74.0](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.73.3...v1.74.0) (2026-06-08)
|
|
2
16
|
|
|
3
17
|
|
package/README.md
CHANGED
|
@@ -120,6 +120,11 @@ startPreparation?: # Optional: Enable automatic issue preparation workflow
|
|
|
120
120
|
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
|
|
121
121
|
labelsAsLlmAgentName?: string[] | null # Optional: List of issue labels that are themselves agent names. When an issue carries any label that is included in this list, that label name is used as the agent name. Selection precedence is: (1) explicit `llm-agent:` label, (2) labelsAsLlmAgentName entry match, (3) `category:` label, (4) defaultLlmAgentName, (5) defaultAgentName
|
|
122
122
|
claudeCodeOauthTokenListJsonPath?: string # Optional: Path to a JSON file listing long-term Claude Code OAuth tokens to rotate across (see "Claude OAuth Token Rotation" below). Declared at the top level (sibling of startPreparation), not inside it.
|
|
123
|
+
dailySecurityScan?: # Optional: Run a daily OSV-Scanner security scan across locally cloned repositories of the org. Declared at the top level (sibling of startPreparation).
|
|
124
|
+
scanBaseDirectory: string # Base directory searched (4 levels deep) for cloned repositories to scan
|
|
125
|
+
targetHourUtc: number # UTC hour (0-23) at which the scan runs once per day; the scan runs only when a target date matches this hour at minute zero
|
|
126
|
+
enableKevNvdReport?: boolean # Optional: When true, also report CISA KEV catalog additions since the previous day
|
|
127
|
+
kevReportRepo?: string # Optional: Repository name (within org) where the CISA KEV additions issue is created. Required for KEV reporting
|
|
123
128
|
```
|
|
124
129
|
|
|
125
130
|
Example:
|
|
@@ -163,6 +168,11 @@ startPreparation:
|
|
|
163
168
|
labelsAsLlmAgentName:
|
|
164
169
|
- story
|
|
165
170
|
- story:body-condition
|
|
171
|
+
dailySecurityScan:
|
|
172
|
+
scanBaseDirectory: '/home/user/repos'
|
|
173
|
+
targetHourUtc: 0
|
|
174
|
+
enableKevNvdReport: true
|
|
175
|
+
kevReportRepo: 'security-reports'
|
|
166
176
|
```
|
|
167
177
|
|
|
168
178
|
### startDaemon and notifyFinishedIssuePreparation Commands Config
|
|
@@ -77,14 +77,16 @@ const RevertOrphanedPreparationUseCase_1 = require("../../../domain/usecases/Rev
|
|
|
77
77
|
const RevertNotReadyAwaitingQualityCheckUseCase_1 = require("../../../domain/usecases/RevertNotReadyAwaitingQualityCheckUseCase");
|
|
78
78
|
const GitHubIssueCommentRepository_1 = require("../../repositories/GitHubIssueCommentRepository");
|
|
79
79
|
const SetupTowerDefenceProjectUseCase_1 = require("../../../domain/usecases/SetupTowerDefenceProjectUseCase");
|
|
80
|
+
const DailySecurityScanUseCase_1 = require("../../../domain/usecases/DailySecurityScanUseCase");
|
|
81
|
+
const KyHttpRepository_1 = require("../../repositories/KyHttpRepository");
|
|
80
82
|
const WorkflowStatus_1 = require("../../../domain/entities/WorkflowStatus");
|
|
81
83
|
class HandleScheduledEventUseCaseHandler {
|
|
82
84
|
constructor() {
|
|
83
85
|
this.handle = async (configFilePath, _verbose) => {
|
|
84
86
|
const configFileContent = fs_1.default.readFileSync(configFilePath, 'utf8');
|
|
85
87
|
const input = yaml_1.default.parse(configFileContent);
|
|
86
|
-
if (!(() => { const _io0 = input => "string" === typeof input.projectName && "string" === typeof input.org && "string" === typeof input.projectUrl && "string" === typeof input.manager && ("object" === typeof input.workingReport && null !== input.workingReport && _io1(input.workingReport)) && "string" === typeof input.urlOfStoryView && "boolean" === typeof input.disabled && "number" === typeof input.allowIssueCacheMinutes && (null === input.startPreparation || undefined === input.startPreparation || "object" === typeof input.startPreparation && null !== input.startPreparation && _io2(input.startPreparation)) && (undefined === input.thresholdForAutoReject || "number" === typeof input.thresholdForAutoReject) && (undefined === input.claudeCodeOauthTokenListJsonPath || "string" === typeof input.claudeCodeOauthTokenListJsonPath) && ("object" === typeof input.credentials && null !== input.credentials &&
|
|
87
|
-
throw new Error(`Invalid input: ${JSON.stringify(input)}\n\n${JSON.stringify((() => { const _io0 = input => "string" === typeof input.projectName && "string" === typeof input.org && "string" === typeof input.projectUrl && "string" === typeof input.manager && ("object" === typeof input.workingReport && null !== input.workingReport && _io1(input.workingReport)) && "string" === typeof input.urlOfStoryView && "boolean" === typeof input.disabled && "number" === typeof input.allowIssueCacheMinutes && (null === input.startPreparation || undefined === input.startPreparation || "object" === typeof input.startPreparation && null !== input.startPreparation && _io2(input.startPreparation)) && (undefined === input.thresholdForAutoReject || "number" === typeof input.thresholdForAutoReject) && (undefined === input.claudeCodeOauthTokenListJsonPath || "string" === typeof input.claudeCodeOauthTokenListJsonPath) && ("object" === typeof input.credentials && null !== input.credentials &&
|
|
88
|
+
if (!(() => { const _io0 = input => "string" === typeof input.projectName && "string" === typeof input.org && "string" === typeof input.projectUrl && "string" === typeof input.manager && ("object" === typeof input.workingReport && null !== input.workingReport && _io1(input.workingReport)) && "string" === typeof input.urlOfStoryView && "boolean" === typeof input.disabled && "number" === typeof input.allowIssueCacheMinutes && (null === input.labelsAsLlmAgentName || undefined === input.labelsAsLlmAgentName || Array.isArray(input.labelsAsLlmAgentName) && input.labelsAsLlmAgentName.every(elem => "string" === typeof elem)) && (null === input.startPreparation || undefined === input.startPreparation || "object" === typeof input.startPreparation && null !== input.startPreparation && _io2(input.startPreparation)) && (undefined === input.thresholdForAutoReject || "number" === typeof input.thresholdForAutoReject) && (null === input.dailySecurityScan || undefined === input.dailySecurityScan || "object" === typeof input.dailySecurityScan && null !== input.dailySecurityScan && _io3(input.dailySecurityScan)) && (undefined === input.claudeCodeOauthTokenListJsonPath || "string" === typeof input.claudeCodeOauthTokenListJsonPath) && ("object" === typeof input.credentials && null !== input.credentials && _io4(input.credentials)); const _io1 = input => "string" === typeof input.repo && (Array.isArray(input.members) && input.members.every(elem => "string" === typeof elem)) && "string" === typeof input.spreadsheetUrl; const _io2 = input => "string" === typeof input.defaultAgentName && (null === input.defaultLlmModelName || undefined === input.defaultLlmModelName || "string" === typeof input.defaultLlmModelName) && (null === input.fallbackLlmModelName || undefined === input.fallbackLlmModelName || "string" === typeof input.fallbackLlmModelName) && (null === input.defaultLlmAgentName || undefined === input.defaultLlmAgentName || "string" === typeof input.defaultLlmAgentName) && "string" === typeof input.configFilePath && (null === input.maximumPreparingIssuesCount || "number" === typeof input.maximumPreparingIssuesCount) && (undefined === input.utilizationPercentageThreshold || "number" === typeof input.utilizationPercentageThreshold) && (null === input.allowedIssueAuthors || undefined === input.allowedIssueAuthors || Array.isArray(input.allowedIssueAuthors) && input.allowedIssueAuthors.every(elem => "string" === typeof elem)) && (undefined === input.preparationProcessCheckCommand || "string" === typeof input.preparationProcessCheckCommand) && (null === input.codexHomeCandidates || undefined === input.codexHomeCandidates || Array.isArray(input.codexHomeCandidates) && input.codexHomeCandidates.every(elem => "string" === typeof elem)) && (undefined === input.awLogDirectoryPath || "string" === typeof input.awLogDirectoryPath) && (undefined === input.awLogStaleThresholdMinutes || "number" === typeof input.awLogStaleThresholdMinutes) && (null === input.awaitingQualityCheckStatus || undefined === input.awaitingQualityCheckStatus || "string" === typeof input.awaitingQualityCheckStatus) && (null === input.labelsAsLlmAgentName || undefined === input.labelsAsLlmAgentName || Array.isArray(input.labelsAsLlmAgentName) && input.labelsAsLlmAgentName.every(elem => "string" === typeof elem)); const _io3 = input => "string" === typeof input.scanBaseDirectory && "number" === typeof input.targetHourUtc && (undefined === input.enableKevNvdReport || "boolean" === typeof input.enableKevNvdReport) && (undefined === input.kevReportRepo || "string" === typeof input.kevReportRepo); const _io4 = input => "object" === typeof input.manager && null !== input.manager && _io5(input.manager) && ("object" === typeof input.bot && null !== input.bot && _io9(input.bot)); const _io5 = input => "object" === typeof input.github && null !== input.github && _io6(input.github) && ("object" === typeof input.slack && null !== input.slack && _io7(input.slack)) && ("object" === typeof input.googleServiceAccount && null !== input.googleServiceAccount && _io8(input.googleServiceAccount)); const _io6 = input => "string" === typeof input.token; const _io7 = input => "string" === typeof input.userToken; const _io8 = input => "string" === typeof input.serviceAccountKey; const _io9 = input => "object" === typeof input.github && null !== input.github && _io10(input.github); const _io10 = input => "string" === typeof input.token; return input => "object" === typeof input && null !== input && _io0(input); })()(input)) {
|
|
89
|
+
throw new Error(`Invalid input: ${JSON.stringify(input)}\n\n${JSON.stringify((() => { const _io0 = input => "string" === typeof input.projectName && "string" === typeof input.org && "string" === typeof input.projectUrl && "string" === typeof input.manager && ("object" === typeof input.workingReport && null !== input.workingReport && _io1(input.workingReport)) && "string" === typeof input.urlOfStoryView && "boolean" === typeof input.disabled && "number" === typeof input.allowIssueCacheMinutes && (null === input.labelsAsLlmAgentName || undefined === input.labelsAsLlmAgentName || Array.isArray(input.labelsAsLlmAgentName) && input.labelsAsLlmAgentName.every(elem => "string" === typeof elem)) && (null === input.startPreparation || undefined === input.startPreparation || "object" === typeof input.startPreparation && null !== input.startPreparation && _io2(input.startPreparation)) && (undefined === input.thresholdForAutoReject || "number" === typeof input.thresholdForAutoReject) && (null === input.dailySecurityScan || undefined === input.dailySecurityScan || "object" === typeof input.dailySecurityScan && null !== input.dailySecurityScan && _io3(input.dailySecurityScan)) && (undefined === input.claudeCodeOauthTokenListJsonPath || "string" === typeof input.claudeCodeOauthTokenListJsonPath) && ("object" === typeof input.credentials && null !== input.credentials && _io4(input.credentials)); const _io1 = input => "string" === typeof input.repo && (Array.isArray(input.members) && input.members.every(elem => "string" === typeof elem)) && "string" === typeof input.spreadsheetUrl; const _io2 = input => "string" === typeof input.defaultAgentName && (null === input.defaultLlmModelName || undefined === input.defaultLlmModelName || "string" === typeof input.defaultLlmModelName) && (null === input.fallbackLlmModelName || undefined === input.fallbackLlmModelName || "string" === typeof input.fallbackLlmModelName) && (null === input.defaultLlmAgentName || undefined === input.defaultLlmAgentName || "string" === typeof input.defaultLlmAgentName) && "string" === typeof input.configFilePath && (null === input.maximumPreparingIssuesCount || "number" === typeof input.maximumPreparingIssuesCount) && (undefined === input.utilizationPercentageThreshold || "number" === typeof input.utilizationPercentageThreshold) && (null === input.allowedIssueAuthors || undefined === input.allowedIssueAuthors || Array.isArray(input.allowedIssueAuthors) && input.allowedIssueAuthors.every(elem => "string" === typeof elem)) && (undefined === input.preparationProcessCheckCommand || "string" === typeof input.preparationProcessCheckCommand) && (null === input.codexHomeCandidates || undefined === input.codexHomeCandidates || Array.isArray(input.codexHomeCandidates) && input.codexHomeCandidates.every(elem => "string" === typeof elem)) && (undefined === input.awLogDirectoryPath || "string" === typeof input.awLogDirectoryPath) && (undefined === input.awLogStaleThresholdMinutes || "number" === typeof input.awLogStaleThresholdMinutes) && (null === input.awaitingQualityCheckStatus || undefined === input.awaitingQualityCheckStatus || "string" === typeof input.awaitingQualityCheckStatus) && (null === input.labelsAsLlmAgentName || undefined === input.labelsAsLlmAgentName || Array.isArray(input.labelsAsLlmAgentName) && input.labelsAsLlmAgentName.every(elem => "string" === typeof elem)); const _io3 = input => "string" === typeof input.scanBaseDirectory && "number" === typeof input.targetHourUtc && (undefined === input.enableKevNvdReport || "boolean" === typeof input.enableKevNvdReport) && (undefined === input.kevReportRepo || "string" === typeof input.kevReportRepo); const _io4 = input => "object" === typeof input.manager && null !== input.manager && _io5(input.manager) && ("object" === typeof input.bot && null !== input.bot && _io9(input.bot)); const _io5 = input => "object" === typeof input.github && null !== input.github && _io6(input.github) && ("object" === typeof input.slack && null !== input.slack && _io7(input.slack)) && ("object" === typeof input.googleServiceAccount && null !== input.googleServiceAccount && _io8(input.googleServiceAccount)); const _io6 = input => "string" === typeof input.token; const _io7 = input => "string" === typeof input.userToken; const _io8 = input => "string" === typeof input.serviceAccountKey; const _io9 = input => "object" === typeof input.github && null !== input.github && _io10(input.github); const _io10 = input => "string" === typeof input.token; const _vo0 = (input, _path, _exceptionable = true) => ["string" === typeof input.projectName || _report(_exceptionable, {
|
|
88
90
|
path: _path + ".projectName",
|
|
89
91
|
expected: "string",
|
|
90
92
|
value: input.projectName
|
|
@@ -120,6 +122,18 @@ class HandleScheduledEventUseCaseHandler {
|
|
|
120
122
|
path: _path + ".allowIssueCacheMinutes",
|
|
121
123
|
expected: "number",
|
|
122
124
|
value: input.allowIssueCacheMinutes
|
|
125
|
+
}), null === input.labelsAsLlmAgentName || undefined === input.labelsAsLlmAgentName || (Array.isArray(input.labelsAsLlmAgentName) || _report(_exceptionable, {
|
|
126
|
+
path: _path + ".labelsAsLlmAgentName",
|
|
127
|
+
expected: "(Array<string> | null | undefined)",
|
|
128
|
+
value: input.labelsAsLlmAgentName
|
|
129
|
+
})) && input.labelsAsLlmAgentName.map((elem, _index6) => "string" === typeof elem || _report(_exceptionable, {
|
|
130
|
+
path: _path + ".labelsAsLlmAgentName[" + _index6 + "]",
|
|
131
|
+
expected: "string",
|
|
132
|
+
value: elem
|
|
133
|
+
})).every(flag => flag) || _report(_exceptionable, {
|
|
134
|
+
path: _path + ".labelsAsLlmAgentName",
|
|
135
|
+
expected: "(Array<string> | null | undefined)",
|
|
136
|
+
value: input.labelsAsLlmAgentName
|
|
123
137
|
}), null === input.startPreparation || undefined === input.startPreparation || ("object" === typeof input.startPreparation && null !== input.startPreparation || _report(_exceptionable, {
|
|
124
138
|
path: _path + ".startPreparation",
|
|
125
139
|
expected: "(__type.o1 | null | undefined)",
|
|
@@ -132,6 +146,14 @@ class HandleScheduledEventUseCaseHandler {
|
|
|
132
146
|
path: _path + ".thresholdForAutoReject",
|
|
133
147
|
expected: "(number | undefined)",
|
|
134
148
|
value: input.thresholdForAutoReject
|
|
149
|
+
}), null === input.dailySecurityScan || undefined === input.dailySecurityScan || ("object" === typeof input.dailySecurityScan && null !== input.dailySecurityScan || _report(_exceptionable, {
|
|
150
|
+
path: _path + ".dailySecurityScan",
|
|
151
|
+
expected: "(DailySecurityScanConfig | null | undefined)",
|
|
152
|
+
value: input.dailySecurityScan
|
|
153
|
+
})) && _vo3(input.dailySecurityScan, _path + ".dailySecurityScan", true && _exceptionable) || _report(_exceptionable, {
|
|
154
|
+
path: _path + ".dailySecurityScan",
|
|
155
|
+
expected: "(DailySecurityScanConfig | null | undefined)",
|
|
156
|
+
value: input.dailySecurityScan
|
|
135
157
|
}), undefined === input.claudeCodeOauthTokenListJsonPath || "string" === typeof input.claudeCodeOauthTokenListJsonPath || _report(_exceptionable, {
|
|
136
158
|
path: _path + ".claudeCodeOauthTokenListJsonPath",
|
|
137
159
|
expected: "(string | undefined)",
|
|
@@ -140,7 +162,7 @@ class HandleScheduledEventUseCaseHandler {
|
|
|
140
162
|
path: _path + ".credentials",
|
|
141
163
|
expected: "__type.o2",
|
|
142
164
|
value: input.credentials
|
|
143
|
-
})) &&
|
|
165
|
+
})) && _vo4(input.credentials, _path + ".credentials", true && _exceptionable) || _report(_exceptionable, {
|
|
144
166
|
path: _path + ".credentials",
|
|
145
167
|
expected: "__type.o2",
|
|
146
168
|
value: input.credentials
|
|
@@ -152,8 +174,8 @@ class HandleScheduledEventUseCaseHandler {
|
|
|
152
174
|
path: _path + ".members",
|
|
153
175
|
expected: "Array<string>",
|
|
154
176
|
value: input.members
|
|
155
|
-
})) && input.members.map((elem,
|
|
156
|
-
path: _path + ".members[" +
|
|
177
|
+
})) && input.members.map((elem, _index7) => "string" === typeof elem || _report(_exceptionable, {
|
|
178
|
+
path: _path + ".members[" + _index7 + "]",
|
|
157
179
|
expected: "string",
|
|
158
180
|
value: elem
|
|
159
181
|
})).every(flag => flag) || _report(_exceptionable, {
|
|
@@ -196,8 +218,8 @@ class HandleScheduledEventUseCaseHandler {
|
|
|
196
218
|
path: _path + ".allowedIssueAuthors",
|
|
197
219
|
expected: "(Array<string> | null | undefined)",
|
|
198
220
|
value: input.allowedIssueAuthors
|
|
199
|
-
})) && input.allowedIssueAuthors.map((elem,
|
|
200
|
-
path: _path + ".allowedIssueAuthors[" +
|
|
221
|
+
})) && input.allowedIssueAuthors.map((elem, _index8) => "string" === typeof elem || _report(_exceptionable, {
|
|
222
|
+
path: _path + ".allowedIssueAuthors[" + _index8 + "]",
|
|
201
223
|
expected: "string",
|
|
202
224
|
value: elem
|
|
203
225
|
})).every(flag => flag) || _report(_exceptionable, {
|
|
@@ -212,8 +234,8 @@ class HandleScheduledEventUseCaseHandler {
|
|
|
212
234
|
path: _path + ".codexHomeCandidates",
|
|
213
235
|
expected: "(Array<string> | null | undefined)",
|
|
214
236
|
value: input.codexHomeCandidates
|
|
215
|
-
})) && input.codexHomeCandidates.map((elem,
|
|
216
|
-
path: _path + ".codexHomeCandidates[" +
|
|
237
|
+
})) && input.codexHomeCandidates.map((elem, _index9) => "string" === typeof elem || _report(_exceptionable, {
|
|
238
|
+
path: _path + ".codexHomeCandidates[" + _index9 + "]",
|
|
217
239
|
expected: "string",
|
|
218
240
|
value: elem
|
|
219
241
|
})).every(flag => flag) || _report(_exceptionable, {
|
|
@@ -236,19 +258,35 @@ class HandleScheduledEventUseCaseHandler {
|
|
|
236
258
|
path: _path + ".labelsAsLlmAgentName",
|
|
237
259
|
expected: "(Array<string> | null | undefined)",
|
|
238
260
|
value: input.labelsAsLlmAgentName
|
|
239
|
-
})) && input.labelsAsLlmAgentName.map((elem,
|
|
240
|
-
path: _path + ".labelsAsLlmAgentName[" +
|
|
261
|
+
})) && input.labelsAsLlmAgentName.map((elem, _index10) => "string" === typeof elem || _report(_exceptionable, {
|
|
262
|
+
path: _path + ".labelsAsLlmAgentName[" + _index10 + "]",
|
|
241
263
|
expected: "string",
|
|
242
264
|
value: elem
|
|
243
265
|
})).every(flag => flag) || _report(_exceptionable, {
|
|
244
266
|
path: _path + ".labelsAsLlmAgentName",
|
|
245
267
|
expected: "(Array<string> | null | undefined)",
|
|
246
268
|
value: input.labelsAsLlmAgentName
|
|
247
|
-
})].every(flag => flag); const _vo3 = (input, _path, _exceptionable = true) => [
|
|
269
|
+
})].every(flag => flag); const _vo3 = (input, _path, _exceptionable = true) => ["string" === typeof input.scanBaseDirectory || _report(_exceptionable, {
|
|
270
|
+
path: _path + ".scanBaseDirectory",
|
|
271
|
+
expected: "string",
|
|
272
|
+
value: input.scanBaseDirectory
|
|
273
|
+
}), "number" === typeof input.targetHourUtc || _report(_exceptionable, {
|
|
274
|
+
path: _path + ".targetHourUtc",
|
|
275
|
+
expected: "number",
|
|
276
|
+
value: input.targetHourUtc
|
|
277
|
+
}), undefined === input.enableKevNvdReport || "boolean" === typeof input.enableKevNvdReport || _report(_exceptionable, {
|
|
278
|
+
path: _path + ".enableKevNvdReport",
|
|
279
|
+
expected: "(boolean | undefined)",
|
|
280
|
+
value: input.enableKevNvdReport
|
|
281
|
+
}), undefined === input.kevReportRepo || "string" === typeof input.kevReportRepo || _report(_exceptionable, {
|
|
282
|
+
path: _path + ".kevReportRepo",
|
|
283
|
+
expected: "(string | undefined)",
|
|
284
|
+
value: input.kevReportRepo
|
|
285
|
+
})].every(flag => flag); const _vo4 = (input, _path, _exceptionable = true) => [("object" === typeof input.manager && null !== input.manager || _report(_exceptionable, {
|
|
248
286
|
path: _path + ".manager",
|
|
249
287
|
expected: "__type.o3",
|
|
250
288
|
value: input.manager
|
|
251
|
-
})) &&
|
|
289
|
+
})) && _vo5(input.manager, _path + ".manager", true && _exceptionable) || _report(_exceptionable, {
|
|
252
290
|
path: _path + ".manager",
|
|
253
291
|
expected: "__type.o3",
|
|
254
292
|
value: input.manager
|
|
@@ -256,15 +294,15 @@ class HandleScheduledEventUseCaseHandler {
|
|
|
256
294
|
path: _path + ".bot",
|
|
257
295
|
expected: "__type.o7",
|
|
258
296
|
value: input.bot
|
|
259
|
-
})) &&
|
|
297
|
+
})) && _vo9(input.bot, _path + ".bot", true && _exceptionable) || _report(_exceptionable, {
|
|
260
298
|
path: _path + ".bot",
|
|
261
299
|
expected: "__type.o7",
|
|
262
300
|
value: input.bot
|
|
263
|
-
})].every(flag => flag); const
|
|
301
|
+
})].every(flag => flag); const _vo5 = (input, _path, _exceptionable = true) => [("object" === typeof input.github && null !== input.github || _report(_exceptionable, {
|
|
264
302
|
path: _path + ".github",
|
|
265
303
|
expected: "__type.o4",
|
|
266
304
|
value: input.github
|
|
267
|
-
})) &&
|
|
305
|
+
})) && _vo6(input.github, _path + ".github", true && _exceptionable) || _report(_exceptionable, {
|
|
268
306
|
path: _path + ".github",
|
|
269
307
|
expected: "__type.o4",
|
|
270
308
|
value: input.github
|
|
@@ -272,7 +310,7 @@ class HandleScheduledEventUseCaseHandler {
|
|
|
272
310
|
path: _path + ".slack",
|
|
273
311
|
expected: "__type.o5",
|
|
274
312
|
value: input.slack
|
|
275
|
-
})) &&
|
|
313
|
+
})) && _vo7(input.slack, _path + ".slack", true && _exceptionable) || _report(_exceptionable, {
|
|
276
314
|
path: _path + ".slack",
|
|
277
315
|
expected: "__type.o5",
|
|
278
316
|
value: input.slack
|
|
@@ -280,31 +318,31 @@ class HandleScheduledEventUseCaseHandler {
|
|
|
280
318
|
path: _path + ".googleServiceAccount",
|
|
281
319
|
expected: "__type.o6",
|
|
282
320
|
value: input.googleServiceAccount
|
|
283
|
-
})) &&
|
|
321
|
+
})) && _vo8(input.googleServiceAccount, _path + ".googleServiceAccount", true && _exceptionable) || _report(_exceptionable, {
|
|
284
322
|
path: _path + ".googleServiceAccount",
|
|
285
323
|
expected: "__type.o6",
|
|
286
324
|
value: input.googleServiceAccount
|
|
287
|
-
})].every(flag => flag); const
|
|
325
|
+
})].every(flag => flag); const _vo6 = (input, _path, _exceptionable = true) => ["string" === typeof input.token || _report(_exceptionable, {
|
|
288
326
|
path: _path + ".token",
|
|
289
327
|
expected: "string",
|
|
290
328
|
value: input.token
|
|
291
|
-
})].every(flag => flag); const
|
|
329
|
+
})].every(flag => flag); const _vo7 = (input, _path, _exceptionable = true) => ["string" === typeof input.userToken || _report(_exceptionable, {
|
|
292
330
|
path: _path + ".userToken",
|
|
293
331
|
expected: "string",
|
|
294
332
|
value: input.userToken
|
|
295
|
-
})].every(flag => flag); const
|
|
333
|
+
})].every(flag => flag); const _vo8 = (input, _path, _exceptionable = true) => ["string" === typeof input.serviceAccountKey || _report(_exceptionable, {
|
|
296
334
|
path: _path + ".serviceAccountKey",
|
|
297
335
|
expected: "string",
|
|
298
336
|
value: input.serviceAccountKey
|
|
299
|
-
})].every(flag => flag); const
|
|
337
|
+
})].every(flag => flag); const _vo9 = (input, _path, _exceptionable = true) => [("object" === typeof input.github && null !== input.github || _report(_exceptionable, {
|
|
300
338
|
path: _path + ".github",
|
|
301
339
|
expected: "__type.o8",
|
|
302
340
|
value: input.github
|
|
303
|
-
})) &&
|
|
341
|
+
})) && _vo10(input.github, _path + ".github", true && _exceptionable) || _report(_exceptionable, {
|
|
304
342
|
path: _path + ".github",
|
|
305
343
|
expected: "__type.o8",
|
|
306
344
|
value: input.github
|
|
307
|
-
})].every(flag => flag); const
|
|
345
|
+
})].every(flag => flag); const _vo10 = (input, _path, _exceptionable = true) => ["string" === typeof input.token || _report(_exceptionable, {
|
|
308
346
|
path: _path + ".token",
|
|
309
347
|
expected: "string",
|
|
310
348
|
value: input.token
|
|
@@ -428,7 +466,10 @@ class HandleScheduledEventUseCaseHandler {
|
|
|
428
466
|
const issueCommentRepository = new GitHubIssueCommentRepository_1.GitHubIssueCommentRepository(input.credentials.bot.github.token);
|
|
429
467
|
const revertOrphanedPreparationUseCase = new RevertOrphanedPreparationUseCase_1.RevertOrphanedPreparationUseCase(projectRepository, issueRepository, issueCommentRepository, nodeLocalCommandRunner);
|
|
430
468
|
const revertNotReadyAwaitingQualityCheckUseCase = new RevertNotReadyAwaitingQualityCheckUseCase_1.RevertNotReadyAwaitingQualityCheckUseCase(projectRepository, issueRepository, issueCommentRepository);
|
|
431
|
-
const
|
|
469
|
+
const dailySecurityScanUseCase = mergedInput.dailySecurityScan
|
|
470
|
+
? new DailySecurityScanUseCase_1.DailySecurityScanUseCase(nodeLocalCommandRunner, issueRepository, new KyHttpRepository_1.KyHttpRepository())
|
|
471
|
+
: null;
|
|
472
|
+
const handleScheduledEventUseCase = new HandleScheduledEventUseCase_1.HandleScheduledEventUseCase(setupTowerDefenceProjectUseCase, actionAnnouncement, setWorkflowManagementIssueToStoryUseCase, clearPastNextActionUseCase, analyzeProblemByIssueUseCase, analyzeStoriesUseCase, clearDependedIssueURLUseCase, setDependedIssueUrlForOpenTaskPRsUseCase, createEstimationIssueUseCase, convertCheckboxToIssueInStoryIssueUseCase, changeStatusByStoryColorUseCase, setNoStoryIssueToStoryUseCase, createNewStoryByLabel, assignNoAssigneeIssueToManagerUseCase, updateIssueStatusByLabelUseCase, startPreparationUseCase, revertOrphanedPreparationUseCase, revertNotReadyAwaitingQualityCheckUseCase, updateRateLimitCacheUseCase, dailySecurityScanUseCase, systemDateRepository, googleSpreadsheetRepository, projectRepository, issueRepository);
|
|
432
473
|
const result = await handleScheduledEventUseCase.run(mergedInput);
|
|
433
474
|
if (result) {
|
|
434
475
|
if (result.rotationOrder !== null) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HandleScheduledEventUseCaseHandler.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAwB;AACxB,kDAA0B;AAC1B,4CAAoB;AACpB,+DAA2D;AAC3D,uEAAmE;AACnE,wDAG8B;AAC9B,kFAA+E;AAC/E,sFAAmF;AACnF,gGAA6F;AAC7F,0FAAuF;AACvF,wFAAqF;AACrF,sFAAmF;AACnF,wGAAqG;AACrG,8GAA2G;AAC3G,sGAAmG;AACnG,gGAA6F;AAC7F,kGAA+F;AAC/F,gIAA6H;AAC7H,oHAAiH;AACjH,wGAAqG;AAIrG,0FAAuF;AACvF,wGAAqG;AACrG,gIAA6H;AAC7H,wGAAqG;AACrG,kIAA+H;AAC/H,8GAA2G;AAC3G,0GAAuG;AACvG,wGAAqG;AACrG,0HAAuH;AACvH,8GAA2G;AAC3G,8FAA2F;AAC3F,sFAAmF;AACnF,wGAAqG;AACrG,oGAAiG;AACjG,sGAAmG;AACnG,gHAA6G;AAC7G,kIAA+H;AAC/H,kGAA+F;AAC/F,8GAA2G;AAC3G,4EAKiD;AAEjD,MAAa,kCAAkC;IAA/C;QACE,WAAM,GAAG,KAAK,EACZ,cAAsB,EACtB,QAAiB,EAMT,EAAE;YACV,MAAM,iBAAiB,GAAG,YAAE,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;YAClE,MAAM,KAAK,GAAY,cAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YAuBrD,IAAI,
|
|
1
|
+
{"version":3,"file":"HandleScheduledEventUseCaseHandler.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.KyHttpRepository = void 0;
|
|
7
|
+
const ky_1 = __importDefault(require("ky"));
|
|
8
|
+
class KyHttpRepository {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.get = async (url) => {
|
|
11
|
+
return ky_1.default.get(url).text();
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.KyHttpRepository = KyHttpRepository;
|
|
16
|
+
//# sourceMappingURL=KyHttpRepository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KyHttpRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/KyHttpRepository.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AAGpB,MAAa,gBAAgB;IAA7B;QACE,QAAG,GAAG,KAAK,EAAE,GAAW,EAAmB,EAAE;YAC3C,OAAO,YAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5B,CAAC,CAAC;IACJ,CAAC;CAAA;AAJD,4CAIC"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DailySecurityScanUseCase = void 0;
|
|
4
|
+
const isKevVulnerability = (value) => {
|
|
5
|
+
if (typeof value !== 'object' || value === null) {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
const record = { ...value };
|
|
9
|
+
return (typeof record.cveID === 'string' &&
|
|
10
|
+
typeof record.vulnerabilityName === 'string' &&
|
|
11
|
+
typeof record.dateAdded === 'string');
|
|
12
|
+
};
|
|
13
|
+
const isKevCatalog = (value) => {
|
|
14
|
+
if (typeof value !== 'object' || value === null) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
const record = { ...value };
|
|
18
|
+
return (Array.isArray(record.vulnerabilities) &&
|
|
19
|
+
record.vulnerabilities.every(isKevVulnerability));
|
|
20
|
+
};
|
|
21
|
+
const KEV_CATALOG_URL = 'https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json';
|
|
22
|
+
class DailySecurityScanUseCase {
|
|
23
|
+
constructor(localCommandRunner, issueRepository, httpRepository) {
|
|
24
|
+
this.localCommandRunner = localCommandRunner;
|
|
25
|
+
this.issueRepository = issueRepository;
|
|
26
|
+
this.httpRepository = httpRepository;
|
|
27
|
+
this.run = async (input) => {
|
|
28
|
+
const shouldRun = input.targetDates.some((targetDate) => targetDate.getUTCHours() === input.dailySecurityScan.targetHourUtc &&
|
|
29
|
+
targetDate.getUTCMinutes() === 0);
|
|
30
|
+
if (!shouldRun) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const lastTargetDate = input.targetDates[input.targetDates.length - 1];
|
|
34
|
+
const today = lastTargetDate.toISOString().slice(0, 10);
|
|
35
|
+
await this.scanRepositories(input.org, input.manager, today, input.dailySecurityScan);
|
|
36
|
+
await this.reportKevAdditions(input.org, input.manager, lastTargetDate, input.dailySecurityScan);
|
|
37
|
+
};
|
|
38
|
+
this.scanRepositories = async (org, manager, today, config) => {
|
|
39
|
+
const { stdout: findOutput } = await this.localCommandRunner.runCommand('find', [
|
|
40
|
+
config.scanBaseDirectory,
|
|
41
|
+
'-mindepth',
|
|
42
|
+
'4',
|
|
43
|
+
'-maxdepth',
|
|
44
|
+
'4',
|
|
45
|
+
'-name',
|
|
46
|
+
'.git',
|
|
47
|
+
'-type',
|
|
48
|
+
'd',
|
|
49
|
+
]);
|
|
50
|
+
const repositoryDirectories = findOutput
|
|
51
|
+
.split('\n')
|
|
52
|
+
.filter((line) => line.length > 0)
|
|
53
|
+
.map((gitDirectory) => gitDirectory.replace(/\/\.git$/, ''));
|
|
54
|
+
for (const repositoryDirectory of repositoryDirectories) {
|
|
55
|
+
const { stdout: remoteUrl, exitCode: remoteExitCode } = await this.localCommandRunner.runCommand('git', [
|
|
56
|
+
'-C',
|
|
57
|
+
repositoryDirectory,
|
|
58
|
+
'remote',
|
|
59
|
+
'get-url',
|
|
60
|
+
'origin',
|
|
61
|
+
]);
|
|
62
|
+
if (remoteExitCode !== 0) {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
const remoteMatch = remoteUrl
|
|
66
|
+
.trim()
|
|
67
|
+
.match(/github\.com[:/]([^/]+)\/([^/.]+)/);
|
|
68
|
+
if (!remoteMatch || remoteMatch[1] !== org) {
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
const repositoryOrg = remoteMatch[1];
|
|
72
|
+
const repositoryName = remoteMatch[2];
|
|
73
|
+
const { stdout: scanOutput, exitCode: scanExitCode } = await this.localCommandRunner.runCommand('osv-scanner', [
|
|
74
|
+
'scan',
|
|
75
|
+
'source',
|
|
76
|
+
'-r',
|
|
77
|
+
repositoryDirectory,
|
|
78
|
+
]);
|
|
79
|
+
if (scanExitCode !== 1) {
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
await this.issueRepository.createNewIssue(repositoryOrg, repositoryName, `Daily security scan findings: ${today}`, `## OSV-Scanner findings\n\n\`\`\`\n${scanOutput}\n\`\`\``, [manager], []);
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
this.reportKevAdditions = async (org, manager, lastTargetDate, config) => {
|
|
86
|
+
if (!config.enableKevNvdReport || !config.kevReportRepo) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const yesterday = new Date(lastTargetDate);
|
|
90
|
+
yesterday.setUTCDate(yesterday.getUTCDate() - 1);
|
|
91
|
+
const yesterdayYmd = yesterday.toISOString().slice(0, 10);
|
|
92
|
+
const kevJson = await this.httpRepository.get(KEV_CATALOG_URL);
|
|
93
|
+
const parsedKev = JSON.parse(kevJson);
|
|
94
|
+
if (!isKevCatalog(parsedKev)) {
|
|
95
|
+
throw new Error(`Unexpected CISA KEV catalog format from ${KEV_CATALOG_URL}`);
|
|
96
|
+
}
|
|
97
|
+
const newKevEntries = parsedKev.vulnerabilities
|
|
98
|
+
.filter((vulnerability) => vulnerability.dateAdded >= yesterdayYmd)
|
|
99
|
+
.map((vulnerability) => `- ${vulnerability.dateAdded} ${vulnerability.cveID} ${vulnerability.vulnerabilityName}`);
|
|
100
|
+
if (newKevEntries.length === 0) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
await this.issueRepository.createNewIssue(org, config.kevReportRepo, `CISA KEV new additions since ${yesterdayYmd}`, newKevEntries.join('\n'), [manager], []);
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
exports.DailySecurityScanUseCase = DailySecurityScanUseCase;
|
|
108
|
+
//# sourceMappingURL=DailySecurityScanUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DailySecurityScanUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/DailySecurityScanUseCase.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.HandleScheduledEventUseCase = exports.ProjectNotFoundError = void 0;
|
|
4
|
+
const resolveLabelsAsLlmAgentName_1 = require("./resolveLabelsAsLlmAgentName");
|
|
4
5
|
class ProjectNotFoundError extends Error {
|
|
5
6
|
constructor(message) {
|
|
6
7
|
super(message);
|
|
@@ -10,7 +11,7 @@ class ProjectNotFoundError extends Error {
|
|
|
10
11
|
exports.ProjectNotFoundError = ProjectNotFoundError;
|
|
11
12
|
const SLOW_SWEEP_INTERVAL_SECONDS = 600;
|
|
12
13
|
class HandleScheduledEventUseCase {
|
|
13
|
-
constructor(setupTowerDefenceProjectUseCase, actionAnnouncementUseCase, setWorkflowManagementIssueToStoryUseCase, clearPastNextActionUseCase, analyzeProblemByIssueUseCase, analyzeStoriesUseCase, clearDependedIssueURLUseCase, setDependedIssueUrlForOpenTaskPRsUseCase, createEstimationIssueUseCase, convertCheckboxToIssueInStoryIssueUseCase, changeStatusByStoryColorUseCase, setNoStoryIssueToStoryUseCase, createNewStoryByLabelUseCase, assignNoAssigneeIssueToManagerUseCase, updateIssueStatusByLabelUseCase, startPreparationUseCase, revertOrphanedPreparationUseCase, revertNotReadyAwaitingQualityCheckUseCase, updateRateLimitCacheUseCase, dateRepository, spreadsheetRepository, projectRepository, issueRepository) {
|
|
14
|
+
constructor(setupTowerDefenceProjectUseCase, actionAnnouncementUseCase, setWorkflowManagementIssueToStoryUseCase, clearPastNextActionUseCase, analyzeProblemByIssueUseCase, analyzeStoriesUseCase, clearDependedIssueURLUseCase, setDependedIssueUrlForOpenTaskPRsUseCase, createEstimationIssueUseCase, convertCheckboxToIssueInStoryIssueUseCase, changeStatusByStoryColorUseCase, setNoStoryIssueToStoryUseCase, createNewStoryByLabelUseCase, assignNoAssigneeIssueToManagerUseCase, updateIssueStatusByLabelUseCase, startPreparationUseCase, revertOrphanedPreparationUseCase, revertNotReadyAwaitingQualityCheckUseCase, updateRateLimitCacheUseCase, dailySecurityScanUseCase, dateRepository, spreadsheetRepository, projectRepository, issueRepository) {
|
|
14
15
|
this.setupTowerDefenceProjectUseCase = setupTowerDefenceProjectUseCase;
|
|
15
16
|
this.actionAnnouncementUseCase = actionAnnouncementUseCase;
|
|
16
17
|
this.setWorkflowManagementIssueToStoryUseCase = setWorkflowManagementIssueToStoryUseCase;
|
|
@@ -30,6 +31,7 @@ class HandleScheduledEventUseCase {
|
|
|
30
31
|
this.revertOrphanedPreparationUseCase = revertOrphanedPreparationUseCase;
|
|
31
32
|
this.revertNotReadyAwaitingQualityCheckUseCase = revertNotReadyAwaitingQualityCheckUseCase;
|
|
32
33
|
this.updateRateLimitCacheUseCase = updateRateLimitCacheUseCase;
|
|
34
|
+
this.dailySecurityScanUseCase = dailySecurityScanUseCase;
|
|
33
35
|
this.dateRepository = dateRepository;
|
|
34
36
|
this.spreadsheetRepository = spreadsheetRepository;
|
|
35
37
|
this.projectRepository = projectRepository;
|
|
@@ -132,10 +134,23 @@ ${JSON.stringify(e)}
|
|
|
132
134
|
if (runSlowSweep) {
|
|
133
135
|
await this.runSlowSweepUseCases(input, project, issues, cacheUsed, targetDateTimes, storyObjectMap);
|
|
134
136
|
}
|
|
137
|
+
const labelsAsLlmAgentName = (0, resolveLabelsAsLlmAgentName_1.resolveLabelsAsLlmAgentName)({
|
|
138
|
+
topLevel: input.labelsAsLlmAgentName,
|
|
139
|
+
startPreparation: input.startPreparation?.labelsAsLlmAgentName,
|
|
140
|
+
});
|
|
135
141
|
await this.revertNotReadyAwaitingQualityCheckUseCase.run({
|
|
136
142
|
projectUrl: input.projectUrl,
|
|
137
143
|
allowIssueCacheMinutes: input.allowIssueCacheMinutes,
|
|
144
|
+
labelsAsLlmAgentName,
|
|
138
145
|
});
|
|
146
|
+
if (this.dailySecurityScanUseCase !== null && input.dailySecurityScan) {
|
|
147
|
+
await this.dailySecurityScanUseCase.run({
|
|
148
|
+
targetDates: targetDateTimes,
|
|
149
|
+
org: input.org,
|
|
150
|
+
manager: input.manager,
|
|
151
|
+
dailySecurityScan: input.dailySecurityScan,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
139
154
|
if (input.startPreparation) {
|
|
140
155
|
if (this.updateRateLimitCacheUseCase !== null) {
|
|
141
156
|
await this.updateRateLimitCacheUseCase.run({
|
|
@@ -151,7 +166,7 @@ ${JSON.stringify(e)}
|
|
|
151
166
|
awLogDirectoryPath: input.startPreparation.awLogDirectoryPath,
|
|
152
167
|
awLogStaleThresholdMinutes: input.startPreparation.awLogStaleThresholdMinutes,
|
|
153
168
|
awaitingQualityCheckStatus: input.startPreparation.awaitingQualityCheckStatus ?? undefined,
|
|
154
|
-
labelsAsLlmAgentName
|
|
169
|
+
labelsAsLlmAgentName,
|
|
155
170
|
});
|
|
156
171
|
}
|
|
157
172
|
const preparationResult = await this.startPreparationUseCase.run({
|
|
@@ -166,7 +181,7 @@ ${JSON.stringify(e)}
|
|
|
166
181
|
allowedIssueAuthors: input.startPreparation.allowedIssueAuthors ?? null,
|
|
167
182
|
codexHomeCandidates: input.startPreparation.codexHomeCandidates ?? null,
|
|
168
183
|
allowIssueCacheMinutes: input.allowIssueCacheMinutes,
|
|
169
|
-
labelsAsLlmAgentName
|
|
184
|
+
labelsAsLlmAgentName,
|
|
170
185
|
});
|
|
171
186
|
return { rotationOrder: preparationResult.rotationOrder };
|
|
172
187
|
}
|