github-issue-tower-defence-management 2.12.1 → 2.14.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/bin/adapter/entry-points/console/ui-dist/assets/{index-D6QOQvoN.js → index-BTFgj8n5.js} +31 -31
- package/bin/adapter/entry-points/console/ui-dist/index.html +1 -1
- package/bin/domain/usecases/ActionAnnouncementUseCase.js +4 -2
- package/bin/domain/usecases/ActionAnnouncementUseCase.js.map +1 -1
- package/bin/domain/usecases/AnalyzeStoriesUseCase.js +1 -1
- package/bin/domain/usecases/AnalyzeStoriesUseCase.js.map +1 -1
- package/bin/domain/usecases/CliErrorReportUseCase.js +1 -1
- package/bin/domain/usecases/CliErrorReportUseCase.js.map +1 -1
- package/bin/domain/usecases/CreateEstimationIssueUseCase.js +2 -1
- package/bin/domain/usecases/CreateEstimationIssueUseCase.js.map +1 -1
- package/bin/domain/usecases/DailySecurityScanUseCase.js +3 -3
- package/bin/domain/usecases/DailySecurityScanUseCase.js.map +1 -1
- package/bin/domain/usecases/HandleScheduledEventUseCase.js +3 -3
- package/bin/domain/usecases/HandleScheduledEventUseCase.js.map +1 -1
- package/bin/domain/usecases/NotifyFinishedIssuePreparationUseCase.js +4 -0
- package/bin/domain/usecases/NotifyFinishedIssuePreparationUseCase.js.map +1 -1
- package/bin/domain/usecases/SubscriptionDisabledIssueUseCase.js +1 -1
- package/bin/domain/usecases/SubscriptionDisabledIssueUseCase.js.map +1 -1
- package/package.json +1 -1
- package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleOfflinePendingActionsPanel.stories.tsx +115 -0
- package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleOfflinePendingActionsPanel.test.tsx +262 -0
- package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleOfflinePendingActionsPanel.tsx +123 -0
- package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleActionQueue.test.ts +283 -0
- package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleActionQueue.ts +146 -4
- package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleOperations.ts +28 -1
- package/src/adapter/entry-points/console/ui/src/features/console/lib/consoleApi.ts +2 -2
- package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsoleItemDetailContainer.tsx +103 -1
- package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsolePage.tsx +128 -0
- package/src/adapter/entry-points/console/ui-dist/assets/{index-D6QOQvoN.js → index-BTFgj8n5.js} +31 -31
- package/src/adapter/entry-points/console/ui-dist/index.html +1 -1
- package/src/domain/usecases/ActionAnnouncementUseCase.test.ts +91 -0
- package/src/domain/usecases/ActionAnnouncementUseCase.ts +4 -2
- package/src/domain/usecases/AnalyzeStoriesUseCase.test.ts +2 -0
- package/src/domain/usecases/AnalyzeStoriesUseCase.ts +1 -1
- package/src/domain/usecases/CliErrorReportUseCase.test.ts +11 -0
- package/src/domain/usecases/CliErrorReportUseCase.ts +1 -1
- package/src/domain/usecases/CreateEstimationIssueUseCase.test.ts +2 -0
- package/src/domain/usecases/CreateEstimationIssueUseCase.ts +2 -1
- package/src/domain/usecases/DailySecurityScanUseCase.test.ts +6 -0
- package/src/domain/usecases/DailySecurityScanUseCase.ts +3 -3
- package/src/domain/usecases/HandleScheduledEventUseCase.test.ts +25 -0
- package/src/domain/usecases/HandleScheduledEventUseCase.ts +3 -3
- package/src/domain/usecases/NotifyFinishedIssuePreparationUseCase.test.ts +20 -0
- package/src/domain/usecases/NotifyFinishedIssuePreparationUseCase.ts +4 -0
- package/src/domain/usecases/SubscriptionDisabledIssueUseCase.test.ts +3 -0
- package/src/domain/usecases/SubscriptionDisabledIssueUseCase.ts +1 -1
- package/types/domain/usecases/ActionAnnouncementUseCase.d.ts.map +1 -1
- package/types/domain/usecases/CreateEstimationIssueUseCase.d.ts.map +1 -1
- package/types/domain/usecases/NotifyFinishedIssuePreparationUseCase.d.ts.map +1 -1
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>TDPM Console</title>
|
|
7
|
-
<script type="module" crossorigin src="/assets/index-
|
|
7
|
+
<script type="module" crossorigin src="/assets/index-BTFgj8n5.js"></script>
|
|
8
8
|
<link rel="stylesheet" crossorigin href="/assets/index-CLHvrafO.css">
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { mock } from 'jest-mock-extended';
|
|
2
|
+
import { IssueRepository } from './adapter-interfaces/IssueRepository';
|
|
3
|
+
import { ActionAnnouncementUseCase } from './ActionAnnouncementUseCase';
|
|
4
|
+
import { Issue } from '../entities/Issue';
|
|
5
|
+
import { Project } from '../entities/Project';
|
|
6
|
+
|
|
7
|
+
describe('ActionAnnouncementUseCase', () => {
|
|
8
|
+
const mockIssueRepository = mock<IssueRepository>();
|
|
9
|
+
const useCase = new ActionAnnouncementUseCase(mockIssueRepository);
|
|
10
|
+
|
|
11
|
+
beforeEach(() => {
|
|
12
|
+
jest.clearAllMocks();
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
const mockProject = mock<Project>();
|
|
16
|
+
|
|
17
|
+
const announcementIssue: Issue = {
|
|
18
|
+
...mock<Issue>(),
|
|
19
|
+
org: 'test-org',
|
|
20
|
+
repo: 'test-repo',
|
|
21
|
+
number: 10,
|
|
22
|
+
title: 'Q2 Policy Update',
|
|
23
|
+
labels: ['action:announcement'],
|
|
24
|
+
state: 'OPEN',
|
|
25
|
+
nextActionDate: null,
|
|
26
|
+
url: 'https://github.com/test-org/test-repo/issues/10',
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
describe('run', () => {
|
|
30
|
+
beforeEach(() => {
|
|
31
|
+
jest.useFakeTimers();
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
afterEach(() => {
|
|
35
|
+
jest.useRealTimers();
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it('includes From: :robot: prefix in the announcement issue body', async () => {
|
|
39
|
+
mockIssueRepository.createNewIssue.mockResolvedValue(11);
|
|
40
|
+
|
|
41
|
+
const runPromise = useCase.run({
|
|
42
|
+
targetDates: [new Date('2024-01-02T10:00:00Z')],
|
|
43
|
+
project: mockProject,
|
|
44
|
+
issues: [announcementIssue],
|
|
45
|
+
cacheUsed: false,
|
|
46
|
+
members: ['dev-alice'],
|
|
47
|
+
manager: 'manager-bob',
|
|
48
|
+
});
|
|
49
|
+
await jest.runAllTimersAsync();
|
|
50
|
+
await runPromise;
|
|
51
|
+
|
|
52
|
+
expect(mockIssueRepository.createNewIssue).toHaveBeenCalledTimes(1);
|
|
53
|
+
const body = mockIssueRepository.createNewIssue.mock.calls[0][3];
|
|
54
|
+
expect(body).toContain('From: :robot: ActionAnnouncementUseCase');
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it('includes From: :robot: prefix in the error recovery issue body', async () => {
|
|
58
|
+
mockIssueRepository.createNewIssue
|
|
59
|
+
.mockRejectedValueOnce(new Error('network error'))
|
|
60
|
+
.mockResolvedValueOnce(12);
|
|
61
|
+
|
|
62
|
+
const runPromise = useCase.run({
|
|
63
|
+
targetDates: [new Date('2024-01-02T10:00:00Z')],
|
|
64
|
+
project: mockProject,
|
|
65
|
+
issues: [announcementIssue],
|
|
66
|
+
cacheUsed: false,
|
|
67
|
+
members: ['dev-alice'],
|
|
68
|
+
manager: 'manager-bob',
|
|
69
|
+
});
|
|
70
|
+
await jest.runAllTimersAsync();
|
|
71
|
+
await runPromise;
|
|
72
|
+
|
|
73
|
+
expect(mockIssueRepository.createNewIssue).toHaveBeenCalledTimes(2);
|
|
74
|
+
const errorBody = mockIssueRepository.createNewIssue.mock.calls[1][3];
|
|
75
|
+
expect(errorBody).toContain('From: :robot: ActionAnnouncementUseCase');
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
it('returns early when cacheUsed is true', async () => {
|
|
79
|
+
await useCase.run({
|
|
80
|
+
targetDates: [new Date('2024-01-02T10:00:00Z')],
|
|
81
|
+
project: mockProject,
|
|
82
|
+
issues: [announcementIssue],
|
|
83
|
+
cacheUsed: true,
|
|
84
|
+
members: ['dev-alice'],
|
|
85
|
+
manager: 'manager-bob',
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
expect(mockIssueRepository.createNewIssue).not.toHaveBeenCalled();
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
});
|
|
@@ -41,7 +41,9 @@ export class ActionAnnouncementUseCase {
|
|
|
41
41
|
issue.org,
|
|
42
42
|
issue.repo,
|
|
43
43
|
`Announcement #${issue.number}: ${issue.title} / ${member}`,
|
|
44
|
-
`
|
|
44
|
+
`From: :robot: ActionAnnouncementUseCase
|
|
45
|
+
|
|
46
|
+
Hi @${member},
|
|
45
47
|
|
|
46
48
|
Please take a look at the announcement in the issue ${issue.url} and take necessary actions :pray:
|
|
47
49
|
`,
|
|
@@ -58,7 +60,7 @@ Please take a look at the announcement in the issue ${issue.url} and take necess
|
|
|
58
60
|
issue.org,
|
|
59
61
|
issue.repo,
|
|
60
62
|
`Error occured while creating working report for ${member}`,
|
|
61
|
-
|
|
63
|
+
`From: :robot: ActionAnnouncementUseCase\n\n${JSON.stringify(e)}`,
|
|
62
64
|
[input.manager],
|
|
63
65
|
['bug'],
|
|
64
66
|
);
|
|
@@ -57,6 +57,8 @@ describe('AnalyzeStoriesUseCase', () => {
|
|
|
57
57
|
await useCase.run({ ...commonInput, targetDates: [matchingDate] });
|
|
58
58
|
|
|
59
59
|
expect(mockIssueRepository.createNewIssue).toHaveBeenCalledTimes(1);
|
|
60
|
+
const body = mockIssueRepository.createNewIssue.mock.calls[0][3];
|
|
61
|
+
expect(body).toContain('From: :robot: AnalyzeStoriesUseCase');
|
|
60
62
|
});
|
|
61
63
|
|
|
62
64
|
it('returns early when project has no story field', async () => {
|
|
@@ -139,7 +139,7 @@ export class AnalyzeStoriesUseCase {
|
|
|
139
139
|
urlOfStoryView: string,
|
|
140
140
|
members: Member['name'][],
|
|
141
141
|
) => {
|
|
142
|
-
return
|
|
142
|
+
return `From: :robot: AnalyzeStoriesUseCase\n\n${this.createSummaryIssueBodyPhase(summaryStoryIssue, urlOfStoryView, storyObjectMap)}
|
|
143
143
|
${this.createSummaryIssueBodyAssignedIssueCount(project, issues, storyObjectMap, urlOfStoryView, members)}
|
|
144
144
|
`;
|
|
145
145
|
};
|
|
@@ -131,6 +131,17 @@ describe('CliErrorReportUseCase', () => {
|
|
|
131
131
|
expect(bodyArg).toContain(commandLine);
|
|
132
132
|
});
|
|
133
133
|
|
|
134
|
+
it('should include the From: :robot: prefix in the new issue body', async () => {
|
|
135
|
+
const error = new Error('prefix check');
|
|
136
|
+
mockIssueRepository.searchIssue.mockResolvedValue([]);
|
|
137
|
+
mockIssueRepository.createNewIssue.mockResolvedValue(5);
|
|
138
|
+
|
|
139
|
+
await useCase.run({ error, owner, repo, commandLine });
|
|
140
|
+
|
|
141
|
+
const bodyArg = mockIssueRepository.createNewIssue.mock.calls[0][3];
|
|
142
|
+
expect(bodyArg).toContain('From: :robot: CliErrorReportUseCase');
|
|
143
|
+
});
|
|
144
|
+
|
|
134
145
|
it('should handle non-Error values', async () => {
|
|
135
146
|
const error = 'plain string error';
|
|
136
147
|
mockIssueRepository.searchIssue.mockResolvedValue([]);
|
|
@@ -220,6 +220,8 @@ describe('CreateEstimationIssueUseCase', () => {
|
|
|
220
220
|
'completion-field',
|
|
221
221
|
issueInStory,
|
|
222
222
|
);
|
|
223
|
+
const body = mockIssueRepository.createNewIssue.mock.calls[0]?.[3];
|
|
224
|
+
expect(body).toContain('From: :robot: CreateEstimationIssueUseCase');
|
|
223
225
|
});
|
|
224
226
|
});
|
|
225
227
|
});
|
|
@@ -133,7 +133,8 @@ export class CreateEstimationIssueUseCase {
|
|
|
133
133
|
urlObStoryView: string,
|
|
134
134
|
project: Project,
|
|
135
135
|
): string => {
|
|
136
|
-
return `
|
|
136
|
+
return `From: :robot: CreateEstimationIssueUseCase
|
|
137
|
+
|
|
137
138
|
This issue is experimental workflow :pray:
|
|
138
139
|
- Target story: ${storyObject.storyIssue.url}
|
|
139
140
|
|
|
@@ -127,6 +127,9 @@ describe('DailySecurityScanUseCase', () => {
|
|
|
127
127
|
expect(mockIssueRepository.createNewIssue.mock.calls[0][4]).toEqual([
|
|
128
128
|
'manager-name',
|
|
129
129
|
]);
|
|
130
|
+
expect(mockIssueRepository.createNewIssue.mock.calls[0][3]).toContain(
|
|
131
|
+
'From: :robot: DailySecurityScanUseCase',
|
|
132
|
+
);
|
|
130
133
|
});
|
|
131
134
|
|
|
132
135
|
const buildDefaultBranchScanRunner = () => {
|
|
@@ -667,6 +670,9 @@ describe('DailySecurityScanUseCase', () => {
|
|
|
667
670
|
);
|
|
668
671
|
expect(kevIssueCalls[0][3]).toContain('CVE-2024-0001');
|
|
669
672
|
expect(kevIssueCalls[0][3]).not.toContain('CVE-2023-9999');
|
|
673
|
+
expect(kevIssueCalls[0][3]).toContain(
|
|
674
|
+
'From: :robot: DailySecurityScanUseCase',
|
|
675
|
+
);
|
|
670
676
|
});
|
|
671
677
|
|
|
672
678
|
it('does not create a KEV report issue when there are no new additions', async () => {
|
|
@@ -324,7 +324,7 @@ export class DailySecurityScanUseCase {
|
|
|
324
324
|
repositoryOrg,
|
|
325
325
|
repositoryName,
|
|
326
326
|
'Daily security scan findings',
|
|
327
|
-
findingsBody
|
|
327
|
+
`From: :robot: DailySecurityScanUseCase\n\n${findingsBody}`,
|
|
328
328
|
[manager],
|
|
329
329
|
[],
|
|
330
330
|
);
|
|
@@ -456,7 +456,7 @@ export class DailySecurityScanUseCase {
|
|
|
456
456
|
org,
|
|
457
457
|
config.kevReportRepo,
|
|
458
458
|
`CISA KEV new additions since ${reportBoundaryDateAdded}`,
|
|
459
|
-
affectingKevEntries
|
|
459
|
+
`From: :robot: DailySecurityScanUseCase\n\n${affectingKevEntries
|
|
460
460
|
.map((entry) =>
|
|
461
461
|
[
|
|
462
462
|
`- ${entry.vulnerability.dateAdded} ${entry.vulnerability.cveID} ${entry.vulnerability.vulnerabilityName}`,
|
|
@@ -466,7 +466,7 @@ export class DailySecurityScanUseCase {
|
|
|
466
466
|
),
|
|
467
467
|
].join('\n'),
|
|
468
468
|
)
|
|
469
|
-
.join('\n')
|
|
469
|
+
.join('\n')}`,
|
|
470
470
|
[manager],
|
|
471
471
|
[],
|
|
472
472
|
);
|
|
@@ -752,6 +752,21 @@ describe('HandleScheduledEventUseCase', () => {
|
|
|
752
752
|
expect(capturedLogs[0]).toContain('feature / StoryOne');
|
|
753
753
|
});
|
|
754
754
|
|
|
755
|
+
it('should include From: :robot: prefix in story issue body', async () => {
|
|
756
|
+
const runPromise = useCase.run(storyInput);
|
|
757
|
+
await jest.runAllTimersAsync();
|
|
758
|
+
await runPromise;
|
|
759
|
+
|
|
760
|
+
const storyIssueCalls =
|
|
761
|
+
mockIssueRepository.createNewIssue.mock.calls.filter(
|
|
762
|
+
(call) => Array.isArray(call[5]) && call[5].includes('story'),
|
|
763
|
+
);
|
|
764
|
+
expect(storyIssueCalls).toHaveLength(1);
|
|
765
|
+
expect(storyIssueCalls[0][3]).toContain(
|
|
766
|
+
'From: :robot: HandleScheduledEventUseCase',
|
|
767
|
+
);
|
|
768
|
+
});
|
|
769
|
+
|
|
755
770
|
it('should emit Polling for issue log before each 30s sleep', async () => {
|
|
756
771
|
const runPromise = useCase.run(storyInput);
|
|
757
772
|
await jest.runAllTimersAsync();
|
|
@@ -1110,6 +1125,14 @@ describe('HandleScheduledEventUseCase', () => {
|
|
|
1110
1125
|
['test-manager'],
|
|
1111
1126
|
['error'],
|
|
1112
1127
|
);
|
|
1128
|
+
expect(mockIssueRepository.createNewIssue).toHaveBeenCalledWith(
|
|
1129
|
+
'test-org',
|
|
1130
|
+
'test-repo',
|
|
1131
|
+
'Error in HandleScheduledEvent / workflow incident',
|
|
1132
|
+
expect.stringContaining('From: :robot: HandleScheduledEventUseCase'),
|
|
1133
|
+
['test-manager'],
|
|
1134
|
+
['error'],
|
|
1135
|
+
);
|
|
1113
1136
|
expect(mockIssueRepository.createCommentByUrl).not.toHaveBeenCalled();
|
|
1114
1137
|
});
|
|
1115
1138
|
|
|
@@ -1317,6 +1340,7 @@ describe('HandleScheduledEventUseCase', () => {
|
|
|
1317
1340
|
expect(body).toContain('Operation: read');
|
|
1318
1341
|
expect(body).toContain('boom on getSheet');
|
|
1319
1342
|
expect(body).toContain(readError.stack ?? '');
|
|
1343
|
+
expect(body).toContain('From: :robot: HandleScheduledEventUseCase');
|
|
1320
1344
|
});
|
|
1321
1345
|
|
|
1322
1346
|
it('should create an error issue and rethrow when spreadsheet write fails in findTargetDateAndUpdateLastExecutionDateTime', async () => {
|
|
@@ -1343,6 +1367,7 @@ describe('HandleScheduledEventUseCase', () => {
|
|
|
1343
1367
|
expect(body).toContain('Operation: write');
|
|
1344
1368
|
expect(body).toContain('boom on updateCell');
|
|
1345
1369
|
expect(body).toContain(writeError.stack ?? '');
|
|
1370
|
+
expect(body).toContain('From: :robot: HandleScheduledEventUseCase');
|
|
1346
1371
|
});
|
|
1347
1372
|
});
|
|
1348
1373
|
|
|
@@ -253,7 +253,7 @@ export class HandleScheduledEventUseCase {
|
|
|
253
253
|
input.org,
|
|
254
254
|
input.workingReport.repo,
|
|
255
255
|
storyObject.story.name,
|
|
256
|
-
storyObject.story.description
|
|
256
|
+
`From: :robot: HandleScheduledEventUseCase\n\n${storyObject.story.description}`,
|
|
257
257
|
[input.manager],
|
|
258
258
|
['story'],
|
|
259
259
|
);
|
|
@@ -379,7 +379,7 @@ ${JSON.stringify(e)}
|
|
|
379
379
|
input.org,
|
|
380
380
|
input.workingReport.repo,
|
|
381
381
|
WORKFLOW_INCIDENT_ISSUE_TITLE,
|
|
382
|
-
errorBody
|
|
382
|
+
`From: :robot: HandleScheduledEventUseCase\n\n${errorBody}`,
|
|
383
383
|
[input.manager],
|
|
384
384
|
['error'],
|
|
385
385
|
);
|
|
@@ -673,7 +673,7 @@ ${JSON.stringify(e)}
|
|
|
673
673
|
org,
|
|
674
674
|
repo,
|
|
675
675
|
`Error in HandleScheduledEvent / spreadsheet ${operation} failure`,
|
|
676
|
-
`
|
|
676
|
+
`From: :robot: HandleScheduledEventUseCase\n\nSpreadsheet URL: ${spreadsheetUrl}
|
|
677
677
|
Operation: ${operation}
|
|
678
678
|
|
|
679
679
|
${e.message}
|
|
@@ -4197,6 +4197,16 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
|
|
|
4197
4197
|
['alice'],
|
|
4198
4198
|
[],
|
|
4199
4199
|
);
|
|
4200
|
+
expect(mockIssueRepository.createNewIssue).toHaveBeenCalledWith(
|
|
4201
|
+
'user',
|
|
4202
|
+
'repo',
|
|
4203
|
+
taskIssueTitle,
|
|
4204
|
+
expect.stringContaining(
|
|
4205
|
+
'From: :robot: NotifyFinishedIssuePreparationUseCase',
|
|
4206
|
+
),
|
|
4207
|
+
['alice'],
|
|
4208
|
+
[],
|
|
4209
|
+
);
|
|
4200
4210
|
expect(mockIssueRepository.setDependedIssueUrl).toHaveBeenCalledWith(
|
|
4201
4211
|
issueUrl,
|
|
4202
4212
|
mockProject,
|
|
@@ -4516,6 +4526,16 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
|
|
|
4516
4526
|
[],
|
|
4517
4527
|
[],
|
|
4518
4528
|
);
|
|
4529
|
+
expect(mockIssueRepository.createNewIssue).toHaveBeenCalledWith(
|
|
4530
|
+
'user',
|
|
4531
|
+
'repo',
|
|
4532
|
+
expect.stringContaining('unknown-agent'),
|
|
4533
|
+
expect.stringContaining(
|
|
4534
|
+
'From: :robot: NotifyFinishedIssuePreparationUseCase',
|
|
4535
|
+
),
|
|
4536
|
+
[],
|
|
4537
|
+
[],
|
|
4538
|
+
);
|
|
4519
4539
|
expect(mockIssueRepository.setDependedIssueUrl).toHaveBeenCalledWith(
|
|
4520
4540
|
issueUrl,
|
|
4521
4541
|
mockProject,
|
|
@@ -529,6 +529,8 @@ export class NotifyFinishedIssuePreparationUseCase {
|
|
|
529
529
|
taskIssueUrl = exactMatch.url;
|
|
530
530
|
} else {
|
|
531
531
|
const body = [
|
|
532
|
+
`From: :robot: NotifyFinishedIssuePreparationUseCase`,
|
|
533
|
+
'',
|
|
532
534
|
`The preparation worker for ${issue.url} failed because the agent definition \`${missingAgentName}\` was not found.`,
|
|
533
535
|
'',
|
|
534
536
|
`- Missing agent name: \`${missingAgentName}\``,
|
|
@@ -599,6 +601,8 @@ export class NotifyFinishedIssuePreparationUseCase {
|
|
|
599
601
|
blockerIssueUrl = exactMatch.url;
|
|
600
602
|
} else {
|
|
601
603
|
const body = [
|
|
604
|
+
`From: :robot: NotifyFinishedIssuePreparationUseCase`,
|
|
605
|
+
'',
|
|
602
606
|
`The last agent report on ${issue.url} designated \`nextStepAgent\` as \`${nextStepAgent}\`, which is absent from the configured agents list.`,
|
|
603
607
|
'',
|
|
604
608
|
`- Missing agent name: \`${nextStepAgent}\``,
|
|
@@ -60,6 +60,9 @@ describe('SubscriptionDisabledIssueUseCase', () => {
|
|
|
60
60
|
expect(mockIssueRepository.createNewIssue.mock.calls[0][3]).toContain(
|
|
61
61
|
'dev3',
|
|
62
62
|
);
|
|
63
|
+
expect(mockIssueRepository.createNewIssue.mock.calls[0][3]).toContain(
|
|
64
|
+
'From: :robot: SubscriptionDisabledIssueUseCase',
|
|
65
|
+
);
|
|
63
66
|
expect(mockIssueRepository.createCommentByUrl.mock.calls).toHaveLength(0);
|
|
64
67
|
});
|
|
65
68
|
|
|
@@ -62,7 +62,7 @@ export class SubscriptionDisabledIssueUseCase {
|
|
|
62
62
|
org,
|
|
63
63
|
repo,
|
|
64
64
|
issueTitle,
|
|
65
|
-
`
|
|
65
|
+
`From: :robot: SubscriptionDisabledIssueUseCase\n\nThe Claude subscription access for the token displayed as \`${tokenName}\` has been disabled.\n\nPlease restore the account's Claude Code subscription access to resume operations.`,
|
|
66
66
|
[],
|
|
67
67
|
[],
|
|
68
68
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionAnnouncementUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/ActionAnnouncementUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,qBAAa,yBAAyB;IAElC,QAAQ,CAAC,eAAe,EAAE,IAAI,CAC5B,eAAe,EACf,gBAAgB,GAAG,aAAa,CACjC;gBAHQ,eAAe,EAAE,IAAI,CAC5B,eAAe,EACf,gBAAgB,GAAG,aAAa,CACjC;IAGH,GAAG,GAAU,OAAO;QAClB,WAAW,EAAE,IAAI,EAAE,CAAC;QACpB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;KACzB,KAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"ActionAnnouncementUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/ActionAnnouncementUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,qBAAa,yBAAyB;IAElC,QAAQ,CAAC,eAAe,EAAE,IAAI,CAC5B,eAAe,EACf,gBAAgB,GAAG,aAAa,CACjC;gBAHQ,eAAe,EAAE,IAAI,CAC5B,eAAe,EACf,gBAAgB,GAAG,aAAa,CACjC;IAGH,GAAG,GAAU,OAAO;QAClB,WAAW,EAAE,IAAI,EAAE,CAAC;QACpB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;KACzB,KAAG,OAAO,CAAC,IAAI,CAAC,CAwDf;CACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateEstimationIssueUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/CreateEstimationIssueUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAI5D,qBAAa,4BAA4B;IAErC,QAAQ,CAAC,eAAe,EAAE,IAAI,CAC5B,eAAe,EACf,gBAAgB,GAAG,mBAAmB,GAAG,eAAe,CACzD;IACD,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,yBAAyB,CAAC;gBAJ/D,eAAe,EAAE,IAAI,CAC5B,eAAe,EACf,gBAAgB,GAAG,mBAAmB,GAAG,eAAe,CACzD,EACQ,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,yBAAyB,CAAC;IAG1E,GAAG,GAAU,OAAO;QAClB,WAAW,EAAE,IAAI,EAAE,CAAC;QACpB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACxB,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,cAAc,CAAC;KAChC,KAAG,OAAO,CAAC,IAAI,CAAC,CAkGf;IACF,yBAAyB,GACvB,aAAa;QACX,UAAU,EAAE,KAAK,CAAC;QAClB,MAAM,EAAE,KAAK,EAAE,CAAC;KACjB,EACD,gBAAgB,MAAM,EACtB,SAAS,OAAO,KACf,MAAM,
|
|
1
|
+
{"version":3,"file":"CreateEstimationIssueUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/CreateEstimationIssueUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAI5D,qBAAa,4BAA4B;IAErC,QAAQ,CAAC,eAAe,EAAE,IAAI,CAC5B,eAAe,EACf,gBAAgB,GAAG,mBAAmB,GAAG,eAAe,CACzD;IACD,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,yBAAyB,CAAC;gBAJ/D,eAAe,EAAE,IAAI,CAC5B,eAAe,EACf,gBAAgB,GAAG,mBAAmB,GAAG,eAAe,CACzD,EACQ,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,yBAAyB,CAAC;IAG1E,GAAG,GAAU,OAAO;QAClB,WAAW,EAAE,IAAI,EAAE,CAAC;QACpB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACxB,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,cAAc,CAAC;KAChC,KAAG,OAAO,CAAC,IAAI,CAAC,CAkGf;IACF,yBAAyB,GACvB,aAAa;QACX,UAAU,EAAE,KAAK,CAAC;QAClB,MAAM,EAAE,KAAK,EAAE,CAAC;KACjB,EACD,gBAAgB,MAAM,EACtB,SAAS,OAAO,KACf,MAAM,CAuBP;IACF,sBAAsB,GACpB,mBAAmB,GAAG,CACpB,MAAM,EACN,CAAC,KAAK,GAAG;QACP,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,EAAE,CACL,EACD,gBAAgB,MAAM,KACrB,MAAM,CAmCP;CACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotifyFinishedIssuePreparationUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/NotifyFinishedIssuePreparationUseCase.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;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAmCnF,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,QAAQ,EAAE,MAAM;CAI7B;AACD,qBAAa,uBAAwB,SAAQ,KAAK;gBAE9C,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,GAAG,IAAI,EAC5B,cAAc,EAAE,MAAM,GAAG,IAAI;CAOhC;AAID,qBAAa,qCAAqC;IAK9C,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAIlC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAsBhC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IAIvC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAIlC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IAtCzC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA0B;IAClE,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CAAkC;gBAG/D,iBAAiB,EAAE,IAAI,CACtC,iBAAiB,EACjB,UAAU,GAAG,iBAAiB,GAAG,aAAa,CAC/C,EACgB,eAAe,EAAE,IAAI,CACpC,eAAe,EACb,KAAK,GACL,QAAQ,GACR,cAAc,GACd,cAAc,GACd,kBAAkB,GAClB,oBAAoB,GACpB,mBAAmB,GACnB,oBAAoB,GACpB,gCAAgC,GAChC,oBAAoB,GACpB,iCAAiC,GACjC,qBAAqB,GACrB,oBAAoB,GACpB,aAAa,GACb,gBAAgB,GAChB,sBAAsB,GACtB,aAAa,GACb,mBAAmB,GACnB,eAAe,CAClB,EACgB,sBAAsB,EAAE,IAAI,CAC3C,sBAAsB,EACtB,sBAAsB,GAAG,eAAe,CACzC,EACgB,iBAAiB,EAAE,IAAI,CACtC,iBAAiB,EACjB,gBAAgB,CACjB,EACgB,qBAAqB,CAAC,GAAE,qBAAqB,GAAG,IAAI,aAAA;IAQvE,GAAG,GAAU,QAAQ;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,sBAAsB,EAAE,MAAM,CAAC;QAC/B,wBAAwB,CAAC,EAAE,MAAM,CAAC;QAClC,iCAAiC,EAAE,MAAM,GAAG,IAAI,CAAC;QACjD,mBAAmB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACtC,oBAAoB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACvC,6BAA6B,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAChD,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;QACxD,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACzB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACjC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACjC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,mBAAmB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACtC,gBAAgB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;KACnC,KAAG,OAAO,CAAC,IAAI,CAAC,CAoWf;IAEF,OAAO,CAAC,8BAA8B,CAwBpC;IAEF,OAAO,CAAC,4BAA4B,
|
|
1
|
+
{"version":3,"file":"NotifyFinishedIssuePreparationUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/NotifyFinishedIssuePreparationUseCase.ts"],"names":[],"mappings":"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"}
|