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.
Files changed (41) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +10 -0
  3. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js +66 -25
  4. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js.map +1 -1
  5. package/bin/adapter/repositories/KyHttpRepository.js +16 -0
  6. package/bin/adapter/repositories/KyHttpRepository.js.map +1 -0
  7. package/bin/domain/usecases/DailySecurityScanUseCase.js +108 -0
  8. package/bin/domain/usecases/DailySecurityScanUseCase.js.map +1 -0
  9. package/bin/domain/usecases/HandleScheduledEventUseCase.js +18 -3
  10. package/bin/domain/usecases/HandleScheduledEventUseCase.js.map +1 -1
  11. package/bin/domain/usecases/RevertNotReadyAwaitingQualityCheckUseCase.js +1 -1
  12. package/bin/domain/usecases/RevertNotReadyAwaitingQualityCheckUseCase.js.map +1 -1
  13. package/bin/domain/usecases/adapter-interfaces/HttpRepository.js +3 -0
  14. package/bin/domain/usecases/adapter-interfaces/HttpRepository.js.map +1 -0
  15. package/bin/domain/usecases/resolveLabelsAsLlmAgentName.js +8 -0
  16. package/bin/domain/usecases/resolveLabelsAsLlmAgentName.js.map +1 -0
  17. package/package.json +1 -1
  18. package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts +11 -0
  19. package/src/adapter/repositories/KyHttpRepository.ts +8 -0
  20. package/src/domain/usecases/DailySecurityScanUseCase.test.ts +412 -0
  21. package/src/domain/usecases/DailySecurityScanUseCase.ts +200 -0
  22. package/src/domain/usecases/HandleScheduledEventUseCase.test.ts +3 -0
  23. package/src/domain/usecases/HandleScheduledEventUseCase.ts +23 -4
  24. package/src/domain/usecases/RevertNotReadyAwaitingQualityCheckUseCase.test.ts +93 -0
  25. package/src/domain/usecases/RevertNotReadyAwaitingQualityCheckUseCase.ts +5 -1
  26. package/src/domain/usecases/adapter-interfaces/HttpRepository.ts +3 -0
  27. package/src/domain/usecases/resolveLabelsAsLlmAgentName.test.ts +42 -0
  28. package/src/domain/usecases/resolveLabelsAsLlmAgentName.ts +6 -0
  29. package/types/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.d.ts.map +1 -1
  30. package/types/adapter/repositories/KyHttpRepository.d.ts +5 -0
  31. package/types/adapter/repositories/KyHttpRepository.d.ts.map +1 -0
  32. package/types/domain/usecases/DailySecurityScanUseCase.d.ts +25 -0
  33. package/types/domain/usecases/DailySecurityScanUseCase.d.ts.map +1 -0
  34. package/types/domain/usecases/HandleScheduledEventUseCase.d.ts +5 -1
  35. package/types/domain/usecases/HandleScheduledEventUseCase.d.ts.map +1 -1
  36. package/types/domain/usecases/RevertNotReadyAwaitingQualityCheckUseCase.d.ts +1 -0
  37. package/types/domain/usecases/RevertNotReadyAwaitingQualityCheckUseCase.d.ts.map +1 -1
  38. package/types/domain/usecases/adapter-interfaces/HttpRepository.d.ts +4 -0
  39. package/types/domain/usecases/adapter-interfaces/HttpRepository.d.ts.map +1 -0
  40. package/types/domain/usecases/resolveLabelsAsLlmAgentName.d.ts +5 -0
  41. package/types/domain/usecases/resolveLabelsAsLlmAgentName.d.ts.map +1 -0
@@ -0,0 +1,200 @@
1
+ import { LocalCommandRunner } from './adapter-interfaces/LocalCommandRunner';
2
+ import { IssueRepository } from './adapter-interfaces/IssueRepository';
3
+ import { HttpRepository } from './adapter-interfaces/HttpRepository';
4
+ import { Member } from '../entities/Member';
5
+
6
+ export type DailySecurityScanConfig = {
7
+ scanBaseDirectory: string;
8
+ targetHourUtc: number;
9
+ enableKevNvdReport?: boolean;
10
+ kevReportRepo?: string;
11
+ };
12
+
13
+ type KevVulnerability = {
14
+ cveID: string;
15
+ vulnerabilityName: string;
16
+ dateAdded: string;
17
+ };
18
+
19
+ type KevCatalog = {
20
+ vulnerabilities: KevVulnerability[];
21
+ };
22
+
23
+ const isKevVulnerability = (value: unknown): value is KevVulnerability => {
24
+ if (typeof value !== 'object' || value === null) {
25
+ return false;
26
+ }
27
+ const record: Record<string, unknown> = { ...value };
28
+ return (
29
+ typeof record.cveID === 'string' &&
30
+ typeof record.vulnerabilityName === 'string' &&
31
+ typeof record.dateAdded === 'string'
32
+ );
33
+ };
34
+
35
+ const isKevCatalog = (value: unknown): value is KevCatalog => {
36
+ if (typeof value !== 'object' || value === null) {
37
+ return false;
38
+ }
39
+ const record: Record<string, unknown> = { ...value };
40
+ return (
41
+ Array.isArray(record.vulnerabilities) &&
42
+ record.vulnerabilities.every(isKevVulnerability)
43
+ );
44
+ };
45
+
46
+ const KEV_CATALOG_URL =
47
+ 'https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json';
48
+
49
+ export class DailySecurityScanUseCase {
50
+ constructor(
51
+ readonly localCommandRunner: LocalCommandRunner,
52
+ readonly issueRepository: Pick<IssueRepository, 'createNewIssue'>,
53
+ readonly httpRepository: HttpRepository,
54
+ ) {}
55
+
56
+ run = async (input: {
57
+ targetDates: Date[];
58
+ org: string;
59
+ manager: Member['name'];
60
+ dailySecurityScan: DailySecurityScanConfig;
61
+ }): Promise<void> => {
62
+ const shouldRun = input.targetDates.some(
63
+ (targetDate) =>
64
+ targetDate.getUTCHours() === input.dailySecurityScan.targetHourUtc &&
65
+ targetDate.getUTCMinutes() === 0,
66
+ );
67
+ if (!shouldRun) {
68
+ return;
69
+ }
70
+
71
+ const lastTargetDate = input.targetDates[input.targetDates.length - 1];
72
+ const today = lastTargetDate.toISOString().slice(0, 10);
73
+
74
+ await this.scanRepositories(
75
+ input.org,
76
+ input.manager,
77
+ today,
78
+ input.dailySecurityScan,
79
+ );
80
+
81
+ await this.reportKevAdditions(
82
+ input.org,
83
+ input.manager,
84
+ lastTargetDate,
85
+ input.dailySecurityScan,
86
+ );
87
+ };
88
+
89
+ private scanRepositories = async (
90
+ org: string,
91
+ manager: Member['name'],
92
+ today: string,
93
+ config: DailySecurityScanConfig,
94
+ ): Promise<void> => {
95
+ const { stdout: findOutput } = await this.localCommandRunner.runCommand(
96
+ 'find',
97
+ [
98
+ config.scanBaseDirectory,
99
+ '-mindepth',
100
+ '4',
101
+ '-maxdepth',
102
+ '4',
103
+ '-name',
104
+ '.git',
105
+ '-type',
106
+ 'd',
107
+ ],
108
+ );
109
+
110
+ const repositoryDirectories = findOutput
111
+ .split('\n')
112
+ .filter((line) => line.length > 0)
113
+ .map((gitDirectory) => gitDirectory.replace(/\/\.git$/, ''));
114
+
115
+ for (const repositoryDirectory of repositoryDirectories) {
116
+ const { stdout: remoteUrl, exitCode: remoteExitCode } =
117
+ await this.localCommandRunner.runCommand('git', [
118
+ '-C',
119
+ repositoryDirectory,
120
+ 'remote',
121
+ 'get-url',
122
+ 'origin',
123
+ ]);
124
+ if (remoteExitCode !== 0) {
125
+ continue;
126
+ }
127
+
128
+ const remoteMatch = remoteUrl
129
+ .trim()
130
+ .match(/github\.com[:/]([^/]+)\/([^/.]+)/);
131
+ if (!remoteMatch || remoteMatch[1] !== org) {
132
+ continue;
133
+ }
134
+ const repositoryOrg = remoteMatch[1];
135
+ const repositoryName = remoteMatch[2];
136
+
137
+ const { stdout: scanOutput, exitCode: scanExitCode } =
138
+ await this.localCommandRunner.runCommand('osv-scanner', [
139
+ 'scan',
140
+ 'source',
141
+ '-r',
142
+ repositoryDirectory,
143
+ ]);
144
+ if (scanExitCode !== 1) {
145
+ continue;
146
+ }
147
+
148
+ await this.issueRepository.createNewIssue(
149
+ repositoryOrg,
150
+ repositoryName,
151
+ `Daily security scan findings: ${today}`,
152
+ `## OSV-Scanner findings\n\n\`\`\`\n${scanOutput}\n\`\`\``,
153
+ [manager],
154
+ [],
155
+ );
156
+ }
157
+ };
158
+
159
+ private reportKevAdditions = async (
160
+ org: string,
161
+ manager: Member['name'],
162
+ lastTargetDate: Date,
163
+ config: DailySecurityScanConfig,
164
+ ): Promise<void> => {
165
+ if (!config.enableKevNvdReport || !config.kevReportRepo) {
166
+ return;
167
+ }
168
+
169
+ const yesterday = new Date(lastTargetDate);
170
+ yesterday.setUTCDate(yesterday.getUTCDate() - 1);
171
+ const yesterdayYmd = yesterday.toISOString().slice(0, 10);
172
+
173
+ const kevJson = await this.httpRepository.get(KEV_CATALOG_URL);
174
+ const parsedKev: unknown = JSON.parse(kevJson);
175
+ if (!isKevCatalog(parsedKev)) {
176
+ throw new Error(
177
+ `Unexpected CISA KEV catalog format from ${KEV_CATALOG_URL}`,
178
+ );
179
+ }
180
+
181
+ const newKevEntries = parsedKev.vulnerabilities
182
+ .filter((vulnerability) => vulnerability.dateAdded >= yesterdayYmd)
183
+ .map(
184
+ (vulnerability) =>
185
+ `- ${vulnerability.dateAdded} ${vulnerability.cveID} ${vulnerability.vulnerabilityName}`,
186
+ );
187
+ if (newKevEntries.length === 0) {
188
+ return;
189
+ }
190
+
191
+ await this.issueRepository.createNewIssue(
192
+ org,
193
+ config.kevReportRepo,
194
+ `CISA KEV new additions since ${yesterdayYmd}`,
195
+ newKevEntries.join('\n'),
196
+ [manager],
197
+ [],
198
+ );
199
+ };
200
+ }
@@ -25,6 +25,7 @@ import { RevertOrphanedPreparationUseCase } from './RevertOrphanedPreparationUse
25
25
  import { RevertNotReadyAwaitingQualityCheckUseCase } from './RevertNotReadyAwaitingQualityCheckUseCase';
26
26
  import { SetupTowerDefenceProjectUseCase } from './SetupTowerDefenceProjectUseCase';
27
27
  import { UpdateRateLimitCacheUseCase } from './UpdateRateLimitCacheUseCase';
28
+ import { DailySecurityScanUseCase } from './DailySecurityScanUseCase';
28
29
 
29
30
  describe('HandleScheduledEventUseCase', () => {
30
31
  describe('createTargetDateTimes', () => {
@@ -117,6 +118,7 @@ describe('HandleScheduledEventUseCase', () => {
117
118
  const mockRevertNotReadyAwaitingQualityCheckUseCase =
118
119
  mock<RevertNotReadyAwaitingQualityCheckUseCase>();
119
120
  const mockUpdateRateLimitCacheUseCase = mock<UpdateRateLimitCacheUseCase>();
121
+ const mockDailySecurityScanUseCase = mock<DailySecurityScanUseCase>();
120
122
  const mockDateRepository = mock<DateRepository>();
121
123
  const mockSpreadsheetRepository = mock<SpreadsheetRepository>();
122
124
  const mockProjectRepository = mock<ProjectRepository>();
@@ -142,6 +144,7 @@ describe('HandleScheduledEventUseCase', () => {
142
144
  mockRevertOrphanedPreparationUseCase,
143
145
  mockRevertNotReadyAwaitingQualityCheckUseCase,
144
146
  mockUpdateRateLimitCacheUseCase,
147
+ mockDailySecurityScanUseCase,
145
148
  mockDateRepository,
146
149
  mockSpreadsheetRepository,
147
150
  mockProjectRepository,
@@ -26,8 +26,13 @@ import {
26
26
  } from './StartPreparationUseCase';
27
27
  import { RevertOrphanedPreparationUseCase } from './RevertOrphanedPreparationUseCase';
28
28
  import { RevertNotReadyAwaitingQualityCheckUseCase } from './RevertNotReadyAwaitingQualityCheckUseCase';
29
+ import { resolveLabelsAsLlmAgentName } from './resolveLabelsAsLlmAgentName';
29
30
  import { SetupTowerDefenceProjectUseCase } from './SetupTowerDefenceProjectUseCase';
30
31
  import { UpdateRateLimitCacheUseCase } from './UpdateRateLimitCacheUseCase';
32
+ import {
33
+ DailySecurityScanConfig,
34
+ DailySecurityScanUseCase,
35
+ } from './DailySecurityScanUseCase';
31
36
 
32
37
  export class ProjectNotFoundError extends Error {
33
38
  constructor(message: string) {
@@ -59,6 +64,7 @@ export class HandleScheduledEventUseCase {
59
64
  readonly revertOrphanedPreparationUseCase: RevertOrphanedPreparationUseCase,
60
65
  readonly revertNotReadyAwaitingQualityCheckUseCase: RevertNotReadyAwaitingQualityCheckUseCase,
61
66
  readonly updateRateLimitCacheUseCase: UpdateRateLimitCacheUseCase | null,
67
+ readonly dailySecurityScanUseCase: DailySecurityScanUseCase | null,
62
68
  readonly dateRepository: DateRepository,
63
69
  readonly spreadsheetRepository: SpreadsheetRepository,
64
70
  readonly projectRepository: ProjectRepository,
@@ -78,6 +84,7 @@ export class HandleScheduledEventUseCase {
78
84
  urlOfStoryView: string;
79
85
  disabled: boolean;
80
86
  allowIssueCacheMinutes: number;
87
+ labelsAsLlmAgentName?: string[] | null;
81
88
  startPreparation?: {
82
89
  defaultAgentName: string;
83
90
  defaultLlmModelName?: string | null;
@@ -95,6 +102,7 @@ export class HandleScheduledEventUseCase {
95
102
  labelsAsLlmAgentName?: string[] | null;
96
103
  } | null;
97
104
  thresholdForAutoReject?: number;
105
+ dailySecurityScan?: DailySecurityScanConfig | null;
98
106
  }): Promise<{
99
107
  project: Project;
100
108
  issues: Issue[];
@@ -280,10 +288,23 @@ ${JSON.stringify(e)}
280
288
  storyObjectMap,
281
289
  );
282
290
  }
291
+ const labelsAsLlmAgentName = resolveLabelsAsLlmAgentName({
292
+ topLevel: input.labelsAsLlmAgentName,
293
+ startPreparation: input.startPreparation?.labelsAsLlmAgentName,
294
+ });
283
295
  await this.revertNotReadyAwaitingQualityCheckUseCase.run({
284
296
  projectUrl: input.projectUrl,
285
297
  allowIssueCacheMinutes: input.allowIssueCacheMinutes,
298
+ labelsAsLlmAgentName,
286
299
  });
300
+ if (this.dailySecurityScanUseCase !== null && input.dailySecurityScan) {
301
+ await this.dailySecurityScanUseCase.run({
302
+ targetDates: targetDateTimes,
303
+ org: input.org,
304
+ manager: input.manager,
305
+ dailySecurityScan: input.dailySecurityScan,
306
+ });
307
+ }
287
308
  if (input.startPreparation) {
288
309
  if (this.updateRateLimitCacheUseCase !== null) {
289
310
  await this.updateRateLimitCacheUseCase.run({
@@ -302,8 +323,7 @@ ${JSON.stringify(e)}
302
323
  input.startPreparation.awLogStaleThresholdMinutes,
303
324
  awaitingQualityCheckStatus:
304
325
  input.startPreparation.awaitingQualityCheckStatus ?? undefined,
305
- labelsAsLlmAgentName:
306
- input.startPreparation.labelsAsLlmAgentName ?? null,
326
+ labelsAsLlmAgentName,
307
327
  });
308
328
  }
309
329
  const preparationResult = await this.startPreparationUseCase.run({
@@ -321,8 +341,7 @@ ${JSON.stringify(e)}
321
341
  allowedIssueAuthors: input.startPreparation.allowedIssueAuthors ?? null,
322
342
  codexHomeCandidates: input.startPreparation.codexHomeCandidates ?? null,
323
343
  allowIssueCacheMinutes: input.allowIssueCacheMinutes,
324
- labelsAsLlmAgentName:
325
- input.startPreparation.labelsAsLlmAgentName ?? null,
344
+ labelsAsLlmAgentName,
326
345
  });
327
346
  return { rotationOrder: preparationResult.rotationOrder };
328
347
  }
@@ -189,6 +189,99 @@ describe('RevertNotReadyAwaitingQualityCheckUseCase', () => {
189
189
  );
190
190
  });
191
191
 
192
+ it('should not revert a story-labeled issue with no linked PR when story is in labelsAsLlmAgentName', async () => {
193
+ const issue = createMockIssue({
194
+ status: 'Awaiting Quality Check',
195
+ labels: ['story'],
196
+ });
197
+ mockIssueRepository.getAllIssues.mockResolvedValue({
198
+ issues: [issue],
199
+ cacheUsed: false,
200
+ });
201
+ mockIssueRepository.findRelatedOpenPRs.mockResolvedValue([]);
202
+
203
+ await useCase.run({
204
+ projectUrl: 'https://github.com/users/user/projects/1',
205
+ allowIssueCacheMinutes: 10,
206
+ labelsAsLlmAgentName: ['story', 'chore', 'accounting'],
207
+ });
208
+
209
+ expect(mockIssueRepository.updateStatus).not.toHaveBeenCalled();
210
+ expect(mockIssueCommentRepository.createComment).not.toHaveBeenCalled();
211
+ });
212
+
213
+ it('should not revert a chore-labeled issue with no linked PR when chore is in labelsAsLlmAgentName', async () => {
214
+ const issue = createMockIssue({
215
+ status: 'Awaiting Quality Check',
216
+ labels: ['chore'],
217
+ });
218
+ mockIssueRepository.getAllIssues.mockResolvedValue({
219
+ issues: [issue],
220
+ cacheUsed: false,
221
+ });
222
+ mockIssueRepository.findRelatedOpenPRs.mockResolvedValue([]);
223
+
224
+ await useCase.run({
225
+ projectUrl: 'https://github.com/users/user/projects/1',
226
+ allowIssueCacheMinutes: 10,
227
+ labelsAsLlmAgentName: ['story', 'chore'],
228
+ });
229
+
230
+ expect(mockIssueRepository.updateStatus).not.toHaveBeenCalled();
231
+ expect(mockIssueCommentRepository.createComment).not.toHaveBeenCalled();
232
+ });
233
+
234
+ it('should still revert a story-labeled issue with no linked PR when labelsAsLlmAgentName is not provided', async () => {
235
+ const issue = createMockIssue({
236
+ status: 'Awaiting Quality Check',
237
+ labels: ['story'],
238
+ });
239
+ mockIssueRepository.getAllIssues.mockResolvedValue({
240
+ issues: [issue],
241
+ cacheUsed: false,
242
+ });
243
+ mockIssueRepository.findRelatedOpenPRs.mockResolvedValue([]);
244
+
245
+ await useCase.run({
246
+ projectUrl: 'https://github.com/users/user/projects/1',
247
+ allowIssueCacheMinutes: 10,
248
+ });
249
+
250
+ expect(mockIssueRepository.updateStatus).toHaveBeenCalledWith(
251
+ mockProject,
252
+ issue,
253
+ 'awaiting-workspace-id',
254
+ );
255
+ expect(mockIssueCommentRepository.createComment).toHaveBeenCalledWith(
256
+ issue,
257
+ expect.stringContaining('PULL_REQUEST_NOT_FOUND'),
258
+ );
259
+ });
260
+
261
+ it('should not revert a story-labeled issue with no linked PR when labelsAsLlmAgentName is null', async () => {
262
+ const issue = createMockIssue({
263
+ status: 'Awaiting Quality Check',
264
+ labels: ['story'],
265
+ });
266
+ mockIssueRepository.getAllIssues.mockResolvedValue({
267
+ issues: [issue],
268
+ cacheUsed: false,
269
+ });
270
+ mockIssueRepository.findRelatedOpenPRs.mockResolvedValue([]);
271
+
272
+ await useCase.run({
273
+ projectUrl: 'https://github.com/users/user/projects/1',
274
+ allowIssueCacheMinutes: 10,
275
+ labelsAsLlmAgentName: null,
276
+ });
277
+
278
+ expect(mockIssueRepository.updateStatus).toHaveBeenCalledWith(
279
+ mockProject,
280
+ issue,
281
+ 'awaiting-workspace-id',
282
+ );
283
+ });
284
+
192
285
  it('should not revert issue when PR is ready', async () => {
193
286
  const issue = createMockIssue({
194
287
  status: 'Awaiting Quality Check',
@@ -40,6 +40,7 @@ export class RevertNotReadyAwaitingQualityCheckUseCase {
40
40
  run = async (params: {
41
41
  projectUrl: string;
42
42
  allowIssueCacheMinutes: number;
43
+ labelsAsLlmAgentName?: string[] | null;
43
44
  }): Promise<void> => {
44
45
  const projectId = await this.projectRepository.findProjectIdByUrl(
45
46
  params.projectUrl,
@@ -79,7 +80,10 @@ export class RevertNotReadyAwaitingQualityCheckUseCase {
79
80
  }
80
81
 
81
82
  const { rejections, approvedPrUrl } =
82
- await this.issueRejectionEvaluator.evaluate(issue);
83
+ await this.issueRejectionEvaluator.evaluate(
84
+ issue,
85
+ params.labelsAsLlmAgentName ?? [],
86
+ );
83
87
  if (rejections.length > 0) {
84
88
  await this.issueRepository.updateStatus(
85
89
  project,
@@ -0,0 +1,3 @@
1
+ export interface HttpRepository {
2
+ get: (url: string) => Promise<string>;
3
+ }
@@ -0,0 +1,42 @@
1
+ import { resolveLabelsAsLlmAgentName } from './resolveLabelsAsLlmAgentName';
2
+
3
+ describe('resolveLabelsAsLlmAgentName', () => {
4
+ it('returns the top-level value when it is present', () => {
5
+ expect(
6
+ resolveLabelsAsLlmAgentName({
7
+ topLevel: ['story', 'chore'],
8
+ startPreparation: ['accounting'],
9
+ }),
10
+ ).toEqual(['story', 'chore']);
11
+ });
12
+
13
+ it('falls back to the startPreparation value when the top-level value is null', () => {
14
+ expect(
15
+ resolveLabelsAsLlmAgentName({
16
+ topLevel: null,
17
+ startPreparation: ['story', 'chore'],
18
+ }),
19
+ ).toEqual(['story', 'chore']);
20
+ });
21
+
22
+ it('falls back to the startPreparation value when the top-level value is undefined', () => {
23
+ expect(
24
+ resolveLabelsAsLlmAgentName({
25
+ startPreparation: ['story'],
26
+ }),
27
+ ).toEqual(['story']);
28
+ });
29
+
30
+ it('returns an empty array when neither value is present', () => {
31
+ expect(resolveLabelsAsLlmAgentName({})).toEqual([]);
32
+ });
33
+
34
+ it('prefers an empty top-level array over the startPreparation fallback', () => {
35
+ expect(
36
+ resolveLabelsAsLlmAgentName({
37
+ topLevel: [],
38
+ startPreparation: ['story'],
39
+ }),
40
+ ).toEqual([]);
41
+ });
42
+ });
@@ -0,0 +1,6 @@
1
+ export const resolveLabelsAsLlmAgentName = (source: {
2
+ topLevel?: string[] | null;
3
+ startPreparation?: string[] | null;
4
+ }): string[] => {
5
+ return source.topLevel ?? source.startPreparation ?? [];
6
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"HandleScheduledEventUseCaseHandler.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AA4B3D,qBAAa,kCAAkC;IAC7C,MAAM,GACJ,gBAAgB,MAAM,EACtB,UAAU,OAAO,KAChB,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,eAAe,EAAE,IAAI,EAAE,CAAC;KACzB,GAAG,IAAI,CAAC,CAySP;CACH"}
1
+ {"version":3,"file":"HandleScheduledEventUseCaseHandler.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AA8B3D,qBAAa,kCAAkC;IAC7C,MAAM,GACJ,gBAAgB,MAAM,EACtB,UAAU,OAAO,KAChB,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,eAAe,EAAE,IAAI,EAAE,CAAC;KACzB,GAAG,IAAI,CAAC,CAkTP;CACH"}
@@ -0,0 +1,5 @@
1
+ import { HttpRepository } from '../../domain/usecases/adapter-interfaces/HttpRepository';
2
+ export declare class KyHttpRepository implements HttpRepository {
3
+ get: (url: string) => Promise<string>;
4
+ }
5
+ //# sourceMappingURL=KyHttpRepository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KyHttpRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/KyHttpRepository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,yDAAyD,CAAC;AAEzF,qBAAa,gBAAiB,YAAW,cAAc;IACrD,GAAG,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,CAExC;CACH"}
@@ -0,0 +1,25 @@
1
+ import { LocalCommandRunner } from './adapter-interfaces/LocalCommandRunner';
2
+ import { IssueRepository } from './adapter-interfaces/IssueRepository';
3
+ import { HttpRepository } from './adapter-interfaces/HttpRepository';
4
+ import { Member } from '../entities/Member';
5
+ export type DailySecurityScanConfig = {
6
+ scanBaseDirectory: string;
7
+ targetHourUtc: number;
8
+ enableKevNvdReport?: boolean;
9
+ kevReportRepo?: string;
10
+ };
11
+ export declare class DailySecurityScanUseCase {
12
+ readonly localCommandRunner: LocalCommandRunner;
13
+ readonly issueRepository: Pick<IssueRepository, 'createNewIssue'>;
14
+ readonly httpRepository: HttpRepository;
15
+ constructor(localCommandRunner: LocalCommandRunner, issueRepository: Pick<IssueRepository, 'createNewIssue'>, httpRepository: HttpRepository);
16
+ run: (input: {
17
+ targetDates: Date[];
18
+ org: string;
19
+ manager: Member["name"];
20
+ dailySecurityScan: DailySecurityScanConfig;
21
+ }) => Promise<void>;
22
+ private scanRepositories;
23
+ private reportKevAdditions;
24
+ }
25
+ //# sourceMappingURL=DailySecurityScanUseCase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DailySecurityScanUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/DailySecurityScanUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,MAAM,uBAAuB,GAAG;IACpC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAsCF,qBAAa,wBAAwB;IAEjC,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB;IAC/C,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,gBAAgB,CAAC;IACjE,QAAQ,CAAC,cAAc,EAAE,cAAc;gBAF9B,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,gBAAgB,CAAC,EACxD,cAAc,EAAE,cAAc;IAGzC,GAAG,GAAU,OAAO;QAClB,WAAW,EAAE,IAAI,EAAE,CAAC;QACpB,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACxB,iBAAiB,EAAE,uBAAuB,CAAC;KAC5C,KAAG,OAAO,CAAC,IAAI,CAAC,CA0Bf;IAEF,OAAO,CAAC,gBAAgB,CAoEtB;IAEF,OAAO,CAAC,kBAAkB,CAwCxB;CACH"}
@@ -25,6 +25,7 @@ import { RevertOrphanedPreparationUseCase } from './RevertOrphanedPreparationUse
25
25
  import { RevertNotReadyAwaitingQualityCheckUseCase } from './RevertNotReadyAwaitingQualityCheckUseCase';
26
26
  import { SetupTowerDefenceProjectUseCase } from './SetupTowerDefenceProjectUseCase';
27
27
  import { UpdateRateLimitCacheUseCase } from './UpdateRateLimitCacheUseCase';
28
+ import { DailySecurityScanConfig, DailySecurityScanUseCase } from './DailySecurityScanUseCase';
28
29
  export declare class ProjectNotFoundError extends Error {
29
30
  constructor(message: string);
30
31
  }
@@ -48,11 +49,12 @@ export declare class HandleScheduledEventUseCase {
48
49
  readonly revertOrphanedPreparationUseCase: RevertOrphanedPreparationUseCase;
49
50
  readonly revertNotReadyAwaitingQualityCheckUseCase: RevertNotReadyAwaitingQualityCheckUseCase;
50
51
  readonly updateRateLimitCacheUseCase: UpdateRateLimitCacheUseCase | null;
52
+ readonly dailySecurityScanUseCase: DailySecurityScanUseCase | null;
51
53
  readonly dateRepository: DateRepository;
52
54
  readonly spreadsheetRepository: SpreadsheetRepository;
53
55
  readonly projectRepository: ProjectRepository;
54
56
  readonly issueRepository: IssueRepository;
55
- constructor(setupTowerDefenceProjectUseCase: SetupTowerDefenceProjectUseCase, actionAnnouncementUseCase: ActionAnnouncementUseCase, setWorkflowManagementIssueToStoryUseCase: SetWorkflowManagementIssueToStoryUseCase, clearPastNextActionUseCase: ClearPastNextActionDateHourUseCase, analyzeProblemByIssueUseCase: AnalyzeProblemByIssueUseCase, analyzeStoriesUseCase: AnalyzeStoriesUseCase, clearDependedIssueURLUseCase: ClearDependedIssueURLUseCase, setDependedIssueUrlForOpenTaskPRsUseCase: SetDependedIssueUrlForOpenTaskPRsUseCase, createEstimationIssueUseCase: CreateEstimationIssueUseCase, convertCheckboxToIssueInStoryIssueUseCase: ConvertCheckboxToIssueInStoryIssueUseCase, changeStatusByStoryColorUseCase: ChangeStatusByStoryColorUseCase, setNoStoryIssueToStoryUseCase: SetNoStoryIssueToStoryUseCase, createNewStoryByLabelUseCase: CreateNewStoryByLabelUseCase, assignNoAssigneeIssueToManagerUseCase: AssignNoAssigneeIssueToManagerUseCase, updateIssueStatusByLabelUseCase: UpdateIssueStatusByLabelUseCase, startPreparationUseCase: StartPreparationUseCase, revertOrphanedPreparationUseCase: RevertOrphanedPreparationUseCase, revertNotReadyAwaitingQualityCheckUseCase: RevertNotReadyAwaitingQualityCheckUseCase, updateRateLimitCacheUseCase: UpdateRateLimitCacheUseCase | null, dateRepository: DateRepository, spreadsheetRepository: SpreadsheetRepository, projectRepository: ProjectRepository, issueRepository: IssueRepository);
57
+ constructor(setupTowerDefenceProjectUseCase: SetupTowerDefenceProjectUseCase, actionAnnouncementUseCase: ActionAnnouncementUseCase, setWorkflowManagementIssueToStoryUseCase: SetWorkflowManagementIssueToStoryUseCase, clearPastNextActionUseCase: ClearPastNextActionDateHourUseCase, analyzeProblemByIssueUseCase: AnalyzeProblemByIssueUseCase, analyzeStoriesUseCase: AnalyzeStoriesUseCase, clearDependedIssueURLUseCase: ClearDependedIssueURLUseCase, setDependedIssueUrlForOpenTaskPRsUseCase: SetDependedIssueUrlForOpenTaskPRsUseCase, createEstimationIssueUseCase: CreateEstimationIssueUseCase, convertCheckboxToIssueInStoryIssueUseCase: ConvertCheckboxToIssueInStoryIssueUseCase, changeStatusByStoryColorUseCase: ChangeStatusByStoryColorUseCase, setNoStoryIssueToStoryUseCase: SetNoStoryIssueToStoryUseCase, createNewStoryByLabelUseCase: CreateNewStoryByLabelUseCase, assignNoAssigneeIssueToManagerUseCase: AssignNoAssigneeIssueToManagerUseCase, updateIssueStatusByLabelUseCase: UpdateIssueStatusByLabelUseCase, startPreparationUseCase: StartPreparationUseCase, revertOrphanedPreparationUseCase: RevertOrphanedPreparationUseCase, revertNotReadyAwaitingQualityCheckUseCase: RevertNotReadyAwaitingQualityCheckUseCase, updateRateLimitCacheUseCase: UpdateRateLimitCacheUseCase | null, dailySecurityScanUseCase: DailySecurityScanUseCase | null, dateRepository: DateRepository, spreadsheetRepository: SpreadsheetRepository, projectRepository: ProjectRepository, issueRepository: IssueRepository);
56
58
  run: (input: {
57
59
  projectName: string;
58
60
  org: string;
@@ -66,6 +68,7 @@ export declare class HandleScheduledEventUseCase {
66
68
  urlOfStoryView: string;
67
69
  disabled: boolean;
68
70
  allowIssueCacheMinutes: number;
71
+ labelsAsLlmAgentName?: string[] | null;
69
72
  startPreparation?: {
70
73
  defaultAgentName: string;
71
74
  defaultLlmModelName?: string | null;
@@ -83,6 +86,7 @@ export declare class HandleScheduledEventUseCase {
83
86
  labelsAsLlmAgentName?: string[] | null;
84
87
  } | null;
85
88
  thresholdForAutoReject?: number;
89
+ dailySecurityScan?: DailySecurityScanConfig | null;
86
90
  }) => Promise<{
87
91
  project: Project;
88
92
  issues: Issue[];
@@ -1 +1 @@
1
- {"version":3,"file":"HandleScheduledEventUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/HandleScheduledEventUseCase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HandleScheduledEventUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/HandleScheduledEventUseCase.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,7 @@ export declare class RevertNotReadyAwaitingQualityCheckUseCase {
11
11
  run: (params: {
12
12
  projectUrl: string;
13
13
  allowIssueCacheMinutes: number;
14
+ labelsAsLlmAgentName?: string[] | null;
14
15
  }) => Promise<void>;
15
16
  }
16
17
  //# sourceMappingURL=RevertNotReadyAwaitingQualityCheckUseCase.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RevertNotReadyAwaitingQualityCheckUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/RevertNotReadyAwaitingQualityCheckUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAQrF,qBAAa,yCAAyC;IAKlD,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAIlC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAShC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IAjBzC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA0B;IAClE,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CAAkC;gBAG/D,iBAAiB,EAAE,IAAI,CACtC,iBAAiB,EACjB,oBAAoB,GAAG,YAAY,CACpC,EACgB,eAAe,EAAE,IAAI,CACpC,eAAe,EACb,cAAc,GACd,cAAc,GACd,oBAAoB,GACpB,oBAAoB,GACpB,gCAAgC,GAChC,oBAAoB,CACvB,EACgB,sBAAsB,EAAE,IAAI,CAC3C,sBAAsB,EACtB,eAAe,CAChB;IAQH,GAAG,GAAU,QAAQ;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,sBAAsB,EAAE,MAAM,CAAC;KAChC,KAAG,OAAO,CAAC,IAAI,CAAC,CA0Df;CACH"}
1
+ {"version":3,"file":"RevertNotReadyAwaitingQualityCheckUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/RevertNotReadyAwaitingQualityCheckUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAQrF,qBAAa,yCAAyC;IAKlD,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAIlC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAShC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IAjBzC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA0B;IAClE,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CAAkC;gBAG/D,iBAAiB,EAAE,IAAI,CACtC,iBAAiB,EACjB,oBAAoB,GAAG,YAAY,CACpC,EACgB,eAAe,EAAE,IAAI,CACpC,eAAe,EACb,cAAc,GACd,cAAc,GACd,oBAAoB,GACpB,oBAAoB,GACpB,gCAAgC,GAChC,oBAAoB,CACvB,EACgB,sBAAsB,EAAE,IAAI,CAC3C,sBAAsB,EACtB,eAAe,CAChB;IAQH,GAAG,GAAU,QAAQ;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,sBAAsB,EAAE,MAAM,CAAC;QAC/B,oBAAoB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;KACxC,KAAG,OAAO,CAAC,IAAI,CAAC,CA6Df;CACH"}
@@ -0,0 +1,4 @@
1
+ export interface HttpRepository {
2
+ get: (url: string) => Promise<string>;
3
+ }
4
+ //# sourceMappingURL=HttpRepository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpRepository.d.ts","sourceRoot":"","sources":["../../../../src/domain/usecases/adapter-interfaces/HttpRepository.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACvC"}
@@ -0,0 +1,5 @@
1
+ export declare const resolveLabelsAsLlmAgentName: (source: {
2
+ topLevel?: string[] | null;
3
+ startPreparation?: string[] | null;
4
+ }) => string[];
5
+ //# sourceMappingURL=resolveLabelsAsLlmAgentName.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveLabelsAsLlmAgentName.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/resolveLabelsAsLlmAgentName.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,2BAA2B,GAAI,QAAQ;IAClD,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CACpC,KAAG,MAAM,EAET,CAAC"}