github-issue-tower-defence-management 1.37.0 → 1.38.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 (30) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +5 -0
  3. package/bin/adapter/entry-points/cli/index.js +19 -0
  4. package/bin/adapter/entry-points/cli/index.js.map +1 -1
  5. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js +9 -3
  6. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js.map +1 -1
  7. package/bin/adapter/repositories/issue/GraphqlProjectItemRepository.js +30 -7
  8. package/bin/adapter/repositories/issue/GraphqlProjectItemRepository.js.map +1 -1
  9. package/bin/domain/usecases/HandleScheduledEventUseCase.js +11 -1
  10. package/bin/domain/usecases/HandleScheduledEventUseCase.js.map +1 -1
  11. package/bin/domain/usecases/RevertOrphanedPreparationUseCase.js +36 -0
  12. package/bin/domain/usecases/RevertOrphanedPreparationUseCase.js.map +1 -0
  13. package/package.json +1 -1
  14. package/src/adapter/entry-points/cli/index.ts +37 -0
  15. package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts +8 -0
  16. package/src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.test.ts +21 -0
  17. package/src/adapter/repositories/issue/GraphqlProjectItemRepository.test.ts +175 -3
  18. package/src/adapter/repositories/issue/GraphqlProjectItemRepository.ts +73 -37
  19. package/src/domain/usecases/HandleScheduledEventUseCase.test.ts +4 -0
  20. package/src/domain/usecases/HandleScheduledEventUseCase.ts +14 -0
  21. package/src/domain/usecases/RevertOrphanedPreparationUseCase.test.ts +302 -0
  22. package/src/domain/usecases/RevertOrphanedPreparationUseCase.ts +72 -0
  23. package/types/adapter/entry-points/cli/index.d.ts +1 -0
  24. package/types/adapter/entry-points/cli/index.d.ts.map +1 -1
  25. package/types/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.d.ts.map +1 -1
  26. package/types/adapter/repositories/issue/GraphqlProjectItemRepository.d.ts.map +1 -1
  27. package/types/domain/usecases/HandleScheduledEventUseCase.d.ts +4 -1
  28. package/types/domain/usecases/HandleScheduledEventUseCase.d.ts.map +1 -1
  29. package/types/domain/usecases/RevertOrphanedPreparationUseCase.d.ts +17 -0
  30. package/types/domain/usecases/RevertOrphanedPreparationUseCase.d.ts.map +1 -0
@@ -0,0 +1,302 @@
1
+ import { RevertOrphanedPreparationUseCase } from './RevertOrphanedPreparationUseCase';
2
+ import { IssueRepository } from './adapter-interfaces/IssueRepository';
3
+ import { ProjectRepository } from './adapter-interfaces/ProjectRepository';
4
+ import { LocalCommandRunner } from './adapter-interfaces/LocalCommandRunner';
5
+ import { Issue } from '../entities/Issue';
6
+ import { Project } from '../entities/Project';
7
+
8
+ type Mocked<T> = jest.Mocked<T> & jest.MockedObject<T>;
9
+
10
+ const createMockIssue = (overrides: Partial<Issue> = {}): Issue => ({
11
+ nameWithOwner: 'user/repo',
12
+ number: 1,
13
+ title: 'Test Issue',
14
+ state: 'OPEN',
15
+ status: 'Backlog',
16
+ story: 'Default Story',
17
+ nextActionDate: null,
18
+ nextActionHour: null,
19
+ estimationMinutes: null,
20
+ dependedIssueUrls: [],
21
+ completionDate50PercentConfidence: null,
22
+ url: 'https://github.com/user/repo/issues/1',
23
+ assignees: [],
24
+ labels: [],
25
+ org: 'user',
26
+ repo: 'repo',
27
+ body: '',
28
+ itemId: 'item-1',
29
+ isPr: false,
30
+ isInProgress: false,
31
+ isClosed: false,
32
+ createdAt: new Date(),
33
+ ...overrides,
34
+ });
35
+
36
+ const createMockProject = (): Project => ({
37
+ id: 'project-1',
38
+ url: 'https://github.com/orgs/user/projects/1',
39
+ databaseId: 1,
40
+ name: 'Test Project',
41
+ status: {
42
+ name: 'Status',
43
+ fieldId: 'status-field-id',
44
+ statuses: [
45
+ { id: '1', name: 'Awaiting Workspace', color: 'GRAY', description: '' },
46
+ { id: '2', name: 'Preparation', color: 'YELLOW', description: '' },
47
+ { id: '3', name: 'Done', color: 'GREEN', description: '' },
48
+ ],
49
+ },
50
+ nextActionDate: null,
51
+ nextActionHour: null,
52
+ story: {
53
+ name: 'Story',
54
+ fieldId: 'story-field-id',
55
+ databaseId: 1,
56
+ stories: [
57
+ {
58
+ id: 'story-1',
59
+ name: 'Default Story',
60
+ color: 'GRAY',
61
+ description: '',
62
+ },
63
+ ],
64
+ workflowManagementStory: {
65
+ id: 'wf-1',
66
+ name: 'Workflow Management',
67
+ },
68
+ },
69
+ remainingEstimationMinutes: null,
70
+ dependedIssueUrlSeparatedByComma: null,
71
+ completionDate50PercentConfidence: null,
72
+ });
73
+
74
+ describe('RevertOrphanedPreparationUseCase', () => {
75
+ let useCase: RevertOrphanedPreparationUseCase;
76
+ let mockProjectRepository: Mocked<
77
+ Pick<ProjectRepository, 'findProjectIdByUrl' | 'getProject'>
78
+ >;
79
+ let mockIssueRepository: Mocked<
80
+ Pick<IssueRepository, 'getAllIssues' | 'updateStatus' | 'createComment'>
81
+ >;
82
+ let mockLocalCommandRunner: Mocked<LocalCommandRunner>;
83
+ let mockProject: Project;
84
+
85
+ beforeEach(() => {
86
+ jest.resetAllMocks();
87
+ mockProject = createMockProject();
88
+ mockProjectRepository = {
89
+ findProjectIdByUrl: jest.fn().mockResolvedValue('project-1'),
90
+ getProject: jest.fn().mockResolvedValue(mockProject),
91
+ };
92
+ mockIssueRepository = {
93
+ getAllIssues: jest
94
+ .fn()
95
+ .mockResolvedValue({ issues: [], cacheUsed: false }),
96
+ updateStatus: jest.fn().mockResolvedValue(undefined),
97
+ createComment: jest.fn().mockResolvedValue(undefined),
98
+ };
99
+ mockLocalCommandRunner = {
100
+ runCommand: jest.fn(),
101
+ };
102
+ useCase = new RevertOrphanedPreparationUseCase(
103
+ mockProjectRepository,
104
+ mockIssueRepository,
105
+ mockLocalCommandRunner,
106
+ );
107
+ });
108
+
109
+ it('should revert stuck-Preparation issue to Awaiting Workspace when check command exits non-zero', async () => {
110
+ const stuckIssue = createMockIssue({
111
+ url: 'https://github.com/user/repo/issues/10',
112
+ status: 'Preparation',
113
+ });
114
+ mockIssueRepository.getAllIssues.mockResolvedValue({
115
+ issues: [stuckIssue],
116
+ cacheUsed: false,
117
+ });
118
+ mockLocalCommandRunner.runCommand.mockResolvedValue({
119
+ stdout: '',
120
+ stderr: '',
121
+ exitCode: 1,
122
+ });
123
+
124
+ await useCase.run({
125
+ projectUrl: 'https://github.com/user/repo',
126
+ preparationStatus: 'Preparation',
127
+ awaitingWorkspaceStatus: 'Awaiting Workspace',
128
+ allowIssueCacheMinutes: 60,
129
+ preparationProcessCheckCommand: 'pgrep -fa "claude-agent.*{URL}"',
130
+ });
131
+
132
+ expect(mockIssueRepository.updateStatus.mock.calls).toHaveLength(1);
133
+ expect(mockIssueRepository.updateStatus.mock.calls[0][0]).toBe(mockProject);
134
+ expect(mockIssueRepository.updateStatus.mock.calls[0][1]).toBe(stuckIssue);
135
+ expect(mockIssueRepository.updateStatus.mock.calls[0][2]).toBe('1');
136
+ expect(mockIssueRepository.createComment.mock.calls).toHaveLength(1);
137
+ expect(mockIssueRepository.createComment.mock.calls[0][0]).toBe(stuckIssue);
138
+ expect(mockLocalCommandRunner.runCommand.mock.calls).toHaveLength(1);
139
+ expect(mockLocalCommandRunner.runCommand.mock.calls[0][0]).toBe(
140
+ 'pgrep -fa "claude-agent.*https://github.com/user/repo/issues/10"',
141
+ );
142
+ });
143
+
144
+ it('should leave in-flight Preparation issue untouched when check command exits zero', async () => {
145
+ const inFlightIssue = createMockIssue({
146
+ url: 'https://github.com/user/repo/issues/20',
147
+ status: 'Preparation',
148
+ });
149
+ mockIssueRepository.getAllIssues.mockResolvedValue({
150
+ issues: [inFlightIssue],
151
+ cacheUsed: false,
152
+ });
153
+ mockLocalCommandRunner.runCommand.mockResolvedValue({
154
+ stdout: 'claude-agent process found',
155
+ stderr: '',
156
+ exitCode: 0,
157
+ });
158
+
159
+ await useCase.run({
160
+ projectUrl: 'https://github.com/user/repo',
161
+ preparationStatus: 'Preparation',
162
+ awaitingWorkspaceStatus: 'Awaiting Workspace',
163
+ allowIssueCacheMinutes: 60,
164
+ preparationProcessCheckCommand: 'pgrep -fa "claude-agent.*{URL}"',
165
+ });
166
+
167
+ expect(mockIssueRepository.updateStatus.mock.calls).toHaveLength(0);
168
+ expect(mockIssueRepository.createComment.mock.calls).toHaveLength(0);
169
+ });
170
+
171
+ it('should only process issues in Preparation status and skip others', async () => {
172
+ const preparationIssue = createMockIssue({
173
+ url: 'https://github.com/user/repo/issues/10',
174
+ status: 'Preparation',
175
+ });
176
+ const awaitingIssue = createMockIssue({
177
+ url: 'https://github.com/user/repo/issues/11',
178
+ status: 'Awaiting Workspace',
179
+ });
180
+ mockIssueRepository.getAllIssues.mockResolvedValue({
181
+ issues: [preparationIssue, awaitingIssue],
182
+ cacheUsed: false,
183
+ });
184
+ mockLocalCommandRunner.runCommand.mockResolvedValue({
185
+ stdout: '',
186
+ stderr: '',
187
+ exitCode: 1,
188
+ });
189
+
190
+ await useCase.run({
191
+ projectUrl: 'https://github.com/user/repo',
192
+ preparationStatus: 'Preparation',
193
+ awaitingWorkspaceStatus: 'Awaiting Workspace',
194
+ allowIssueCacheMinutes: 60,
195
+ preparationProcessCheckCommand: 'check {URL}',
196
+ });
197
+
198
+ expect(mockLocalCommandRunner.runCommand.mock.calls).toHaveLength(1);
199
+ expect(mockLocalCommandRunner.runCommand.mock.calls[0][0]).toBe(
200
+ 'check https://github.com/user/repo/issues/10',
201
+ );
202
+ expect(mockIssueRepository.updateStatus.mock.calls).toHaveLength(1);
203
+ });
204
+
205
+ it('should handle mixed in-flight and stuck Preparation issues correctly', async () => {
206
+ const stuckIssue = createMockIssue({
207
+ url: 'https://github.com/user/repo/issues/10',
208
+ status: 'Preparation',
209
+ });
210
+ const inFlightIssue = createMockIssue({
211
+ url: 'https://github.com/user/repo/issues/20',
212
+ status: 'Preparation',
213
+ });
214
+ mockIssueRepository.getAllIssues.mockResolvedValue({
215
+ issues: [stuckIssue, inFlightIssue],
216
+ cacheUsed: false,
217
+ });
218
+ mockLocalCommandRunner.runCommand
219
+ .mockResolvedValueOnce({ stdout: '', stderr: '', exitCode: 1 })
220
+ .mockResolvedValueOnce({
221
+ stdout: 'found',
222
+ stderr: '',
223
+ exitCode: 0,
224
+ });
225
+
226
+ await useCase.run({
227
+ projectUrl: 'https://github.com/user/repo',
228
+ preparationStatus: 'Preparation',
229
+ awaitingWorkspaceStatus: 'Awaiting Workspace',
230
+ allowIssueCacheMinutes: 60,
231
+ preparationProcessCheckCommand: 'check {URL}',
232
+ });
233
+
234
+ expect(mockIssueRepository.updateStatus.mock.calls).toHaveLength(1);
235
+ expect(mockIssueRepository.updateStatus.mock.calls[0][1]).toBe(stuckIssue);
236
+ expect(mockIssueRepository.createComment.mock.calls).toHaveLength(1);
237
+ });
238
+
239
+ it('should throw when project is not found by URL', async () => {
240
+ mockProjectRepository.findProjectIdByUrl.mockResolvedValue(null);
241
+
242
+ await expect(
243
+ useCase.run({
244
+ projectUrl: 'https://github.com/user/repo',
245
+ preparationStatus: 'Preparation',
246
+ awaitingWorkspaceStatus: 'Awaiting Workspace',
247
+ allowIssueCacheMinutes: 0,
248
+ preparationProcessCheckCommand: 'check {URL}',
249
+ }),
250
+ ).rejects.toThrow('Project not found');
251
+ });
252
+
253
+ it('should do nothing when there are no Preparation issues', async () => {
254
+ mockIssueRepository.getAllIssues.mockResolvedValue({
255
+ issues: [
256
+ createMockIssue({ status: 'Awaiting Workspace' }),
257
+ createMockIssue({ status: 'Done' }),
258
+ ],
259
+ cacheUsed: false,
260
+ });
261
+
262
+ await useCase.run({
263
+ projectUrl: 'https://github.com/user/repo',
264
+ preparationStatus: 'Preparation',
265
+ awaitingWorkspaceStatus: 'Awaiting Workspace',
266
+ allowIssueCacheMinutes: 60,
267
+ preparationProcessCheckCommand: 'check {URL}',
268
+ });
269
+
270
+ expect(mockLocalCommandRunner.runCommand.mock.calls).toHaveLength(0);
271
+ expect(mockIssueRepository.updateStatus.mock.calls).toHaveLength(0);
272
+ });
273
+
274
+ it('should substitute {URL} placeholder with the issue URL in the check command', async () => {
275
+ const issue = createMockIssue({
276
+ url: 'https://github.com/org/project/issues/99',
277
+ status: 'Preparation',
278
+ });
279
+ mockIssueRepository.getAllIssues.mockResolvedValue({
280
+ issues: [issue],
281
+ cacheUsed: false,
282
+ });
283
+ mockLocalCommandRunner.runCommand.mockResolvedValue({
284
+ stdout: '',
285
+ stderr: '',
286
+ exitCode: 0,
287
+ });
288
+
289
+ await useCase.run({
290
+ projectUrl: 'https://github.com/user/repo',
291
+ preparationStatus: 'Preparation',
292
+ awaitingWorkspaceStatus: 'Awaiting Workspace',
293
+ allowIssueCacheMinutes: 0,
294
+ preparationProcessCheckCommand: 'pgrep -fa "claude-agent.*{URL}"',
295
+ });
296
+
297
+ expect(mockLocalCommandRunner.runCommand.mock.calls).toHaveLength(1);
298
+ expect(mockLocalCommandRunner.runCommand.mock.calls[0][0]).toBe(
299
+ 'pgrep -fa "claude-agent.*https://github.com/org/project/issues/99"',
300
+ );
301
+ });
302
+ });
@@ -0,0 +1,72 @@
1
+ import { IssueRepository } from './adapter-interfaces/IssueRepository';
2
+ import { ProjectRepository } from './adapter-interfaces/ProjectRepository';
3
+ import { LocalCommandRunner } from './adapter-interfaces/LocalCommandRunner';
4
+
5
+ export class RevertOrphanedPreparationUseCase {
6
+ constructor(
7
+ readonly projectRepository: Pick<
8
+ ProjectRepository,
9
+ 'findProjectIdByUrl' | 'getProject'
10
+ >,
11
+ readonly issueRepository: Pick<
12
+ IssueRepository,
13
+ 'getAllIssues' | 'updateStatus' | 'createComment'
14
+ >,
15
+ readonly localCommandRunner: LocalCommandRunner,
16
+ ) {}
17
+
18
+ run = async (params: {
19
+ projectUrl: string;
20
+ preparationStatus: string;
21
+ awaitingWorkspaceStatus: string;
22
+ allowIssueCacheMinutes: number;
23
+ preparationProcessCheckCommand: string;
24
+ }): Promise<void> => {
25
+ const projectId = await this.projectRepository.findProjectIdByUrl(
26
+ params.projectUrl,
27
+ );
28
+ if (!projectId) {
29
+ throw new Error(`Project not found. projectUrl: ${params.projectUrl}`);
30
+ }
31
+ const project = await this.projectRepository.getProject(projectId);
32
+ if (!project) {
33
+ throw new Error(
34
+ `Project not found. projectId: ${projectId} projectUrl: ${params.projectUrl}`,
35
+ );
36
+ }
37
+ const { issues } = await this.issueRepository.getAllIssues(
38
+ projectId,
39
+ params.allowIssueCacheMinutes,
40
+ );
41
+
42
+ const preparationIssues = issues.filter(
43
+ (issue) => issue.status === params.preparationStatus,
44
+ );
45
+
46
+ const awaitingWorkspaceStatusOption = project.status.statuses.find(
47
+ (s) => s.name === params.awaitingWorkspaceStatus,
48
+ );
49
+ if (!awaitingWorkspaceStatusOption) {
50
+ return;
51
+ }
52
+
53
+ for (const issue of preparationIssues) {
54
+ const command = params.preparationProcessCheckCommand.replace(
55
+ '{URL}',
56
+ issue.url,
57
+ );
58
+ const { exitCode } = await this.localCommandRunner.runCommand(command);
59
+ if (exitCode !== 0) {
60
+ await this.issueRepository.updateStatus(
61
+ project,
62
+ issue,
63
+ awaitingWorkspaceStatusOption.id,
64
+ );
65
+ await this.issueRepository.createComment(
66
+ issue,
67
+ `Orphaned preparation detected: no live worker process found for ${issue.url}. Status reverted to ${params.awaitingWorkspaceStatus}.`,
68
+ );
69
+ }
70
+ }
71
+ };
72
+ }
@@ -12,6 +12,7 @@ type ConfigFile = {
12
12
  thresholdForAutoReject?: number;
13
13
  workflowBlockerResolvedWebhookUrl?: string;
14
14
  projectName?: string;
15
+ preparationProcessCheckCommand?: string;
15
16
  };
16
17
  export declare const loadConfigFile: (configFilePath: string) => ConfigFile;
17
18
  export declare const parseProjectReadmeConfig: (readme: string) => ConfigFile;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC,KAAK,UAAU,GAAG;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,iCAAiC,CAAC,EAAE,MAAM,CAAC;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AA2CF,eAAO,MAAM,cAAc,GAAI,gBAAgB,MAAM,KAAG,UAuCvD,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,QAAQ,MAAM,KAAG,UA2CzD,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,YAAY,UAAU,EACtB,cAAc,UAAU,EACxB,iBAAiB,UAAU,KAC1B,UAuCD,CAAC;AAkBH,eAAO,MAAM,kBAAkB,GAC7B,YAAY,MAAM,EAClB,OAAO,MAAM,KACZ,OAAO,CAAC,MAAM,GAAG,IAAI,CAyDvB,CAAC;AAsBF,eAAO,MAAM,OAAO,SAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,KAAK,UAAU,GAAG;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,iCAAiC,CAAC,EAAE,MAAM,CAAC;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8BAA8B,CAAC,EAAE,MAAM,CAAC;CACzC,CAAC;AA4CF,eAAO,MAAM,cAAc,GAAI,gBAAgB,MAAM,KAAG,UA2CvD,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,QAAQ,MAAM,KAAG,UA+CzD,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,YAAY,UAAU,EACtB,cAAc,UAAU,EACxB,iBAAiB,UAAU,KAC1B,UA2CD,CAAC;AAkBH,eAAO,MAAM,kBAAkB,GAC7B,YAAY,MAAM,EAClB,OAAO,MAAM,KACZ,OAAO,CAAC,MAAM,GAAG,IAAI,CAyDvB,CAAC;AAsBF,eAAO,MAAM,OAAO,SAAgB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"HandleScheduledEventUseCaseHandler.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAoB3D,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,CAqKP;CACH"}
1
+ {"version":3,"file":"HandleScheduledEventUseCaseHandler.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAqB3D,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,CA4KP;CACH"}
@@ -1 +1 @@
1
- {"version":3,"file":"GraphqlProjectItemRepository.d.ts","sourceRoot":"","sources":["../../../../src/adapter/repositories/issue/GraphqlProjectItemRepository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;KACtB,EAAE,CAAC;CACL,CAAC;AACF,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,qBAAa,4BAA6B,SAAQ,oBAAoB;IACpE,WAAW,GACT,WAAW,MAAM,EACjB,OAAO,MAAM,EACb,gBAAgB,MAAM,EACtB,aAAa,MAAM,KAClB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA2D5B;IACF,iBAAiB,GAAU,WAAW,MAAM,KAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAqRnE;IACF,gCAAgC,GAC9B,UAAU,MAAM,KACf,OAAO,CACR;QACE,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;KACpB,EAAE,CACJ,CAGC;IAEF,oBAAoB,GAClB,OAAO,MAAM,EACb,gBAAgB,MAAM,EACtB,aAAa,MAAM,KAClB,OAAO,CACR;QACE,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;KACpB,EAAE,CACJ,CA4IC;IACF,qBAAqB,GACnB,UAAU,MAAM,KACf,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CA6K5B;IACF,iBAAiB,GAAI,OAAO,MAAM,KAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAQ/D;IAEF,kBAAkB,GAChB,WAAW,MAAM,EACjB,SAAS,MAAM,EACf,QAAQ,MAAM,EACd,OACI;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAChB;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAClB;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAChB;QAAE,oBAAoB,EAAE,MAAM,CAAA;KAAE,KACnC,OAAO,CAAC,IAAI,CAAC,CAgCd;IAEF,iBAAiB,GACf,WAAW,MAAM,EACjB,SAAS,MAAM,EACf,QAAQ,MAAM,KACb,OAAO,CAAC,IAAI,CAAC,CA+Bd;IACF,sBAAsB,GACpB,SAAS,OAAO,CAAC,IAAI,CAAC,EACtB,SAAS,MAAM,EACf,OAAO,KAAK,CAAC,QAAQ,CAAC,EACtB,MAAM,MAAM,KACX,OAAO,CAAC,IAAI,CAAC,CAEd;IAEF,qBAAqB,GACnB,WAAW,MAAM,EACjB,QAAQ,MAAM,KACb,OAAO,CAAC,IAAI,CAAC,CAgCd;IAEF,+BAA+B,GAC7B,UAAU,MAAM,EAChB,WAAW,MAAM,KAChB,OAAO,CAAC,IAAI,CAAC,CASd;CACH"}
1
+ {"version":3,"file":"GraphqlProjectItemRepository.d.ts","sourceRoot":"","sources":["../../../../src/adapter/repositories/issue/GraphqlProjectItemRepository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;KACtB,EAAE,CAAC;CACL,CAAC;AACF,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,qBAAa,4BAA6B,SAAQ,oBAAoB;IACpE,WAAW,GACT,WAAW,MAAM,EACjB,OAAO,MAAM,EACb,gBAAgB,MAAM,EACtB,aAAa,MAAM,KAClB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA2D5B;IACF,iBAAiB,GAAU,WAAW,MAAM,KAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAyTnE;IACF,gCAAgC,GAC9B,UAAU,MAAM,KACf,OAAO,CACR;QACE,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;KACpB,EAAE,CACJ,CAGC;IAEF,oBAAoB,GAClB,OAAO,MAAM,EACb,gBAAgB,MAAM,EACtB,aAAa,MAAM,KAClB,OAAO,CACR;QACE,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;KACpB,EAAE,CACJ,CA4IC;IACF,qBAAqB,GACnB,UAAU,MAAM,KACf,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CA6K5B;IACF,iBAAiB,GAAI,OAAO,MAAM,KAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAQ/D;IAEF,kBAAkB,GAChB,WAAW,MAAM,EACjB,SAAS,MAAM,EACf,QAAQ,MAAM,EACd,OACI;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAChB;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAClB;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAChB;QAAE,oBAAoB,EAAE,MAAM,CAAA;KAAE,KACnC,OAAO,CAAC,IAAI,CAAC,CAgCd;IAEF,iBAAiB,GACf,WAAW,MAAM,EACjB,SAAS,MAAM,EACf,QAAQ,MAAM,KACb,OAAO,CAAC,IAAI,CAAC,CA+Bd;IACF,sBAAsB,GACpB,SAAS,OAAO,CAAC,IAAI,CAAC,EACtB,SAAS,MAAM,EACf,OAAO,KAAK,CAAC,QAAQ,CAAC,EACtB,MAAM,MAAM,KACX,OAAO,CAAC,IAAI,CAAC,CAEd;IAEF,qBAAqB,GACnB,WAAW,MAAM,EACjB,QAAQ,MAAM,KACb,OAAO,CAAC,IAAI,CAAC,CAgCd;IAEF,+BAA+B,GAC7B,UAAU,MAAM,EAChB,WAAW,MAAM,KAChB,OAAO,CAAC,IAAI,CAAC,CASd;CACH"}
@@ -21,6 +21,7 @@ import { AssignNoAssigneeIssueToManagerUseCase } from './AssignNoAssigneeIssueTo
21
21
  import { UpdateIssueStatusByLabelUseCase } from './UpdateIssueStatusByLabelUseCase';
22
22
  import { StartPreparationUseCase } from './StartPreparationUseCase';
23
23
  import { NotifyFinishedIssuePreparationUseCase } from './NotifyFinishedIssuePreparationUseCase';
24
+ import { RevertOrphanedPreparationUseCase } from './RevertOrphanedPreparationUseCase';
24
25
  export declare class ProjectNotFoundError extends Error {
25
26
  constructor(message: string);
26
27
  }
@@ -40,11 +41,12 @@ export declare class HandleScheduledEventUseCase {
40
41
  readonly updateIssueStatusByLabelUseCase: UpdateIssueStatusByLabelUseCase;
41
42
  readonly startPreparationUseCase: StartPreparationUseCase;
42
43
  readonly notifyFinishedIssuePreparationUseCase: NotifyFinishedIssuePreparationUseCase;
44
+ readonly revertOrphanedPreparationUseCase: RevertOrphanedPreparationUseCase;
43
45
  readonly dateRepository: DateRepository;
44
46
  readonly spreadsheetRepository: SpreadsheetRepository;
45
47
  readonly projectRepository: ProjectRepository;
46
48
  readonly issueRepository: IssueRepository;
47
- constructor(actionAnnouncementUseCase: ActionAnnouncementUseCase, setWorkflowManagementIssueToStoryUseCase: SetWorkflowManagementIssueToStoryUseCase, clearPastNextActionUseCase: ClearPastNextActionDateHourUseCase, analyzeProblemByIssueUseCase: AnalyzeProblemByIssueUseCase, analyzeStoriesUseCase: AnalyzeStoriesUseCase, clearDependedIssueURLUseCase: ClearDependedIssueURLUseCase, createEstimationIssueUseCase: CreateEstimationIssueUseCase, convertCheckboxToIssueInStoryIssueUseCase: ConvertCheckboxToIssueInStoryIssueUseCase, changeStatusByStoryColorUseCase: ChangeStatusByStoryColorUseCase, setNoStoryIssueToStoryUseCase: SetNoStoryIssueToStoryUseCase, createNewStoryByLabelUseCase: CreateNewStoryByLabelUseCase, assignNoAssigneeIssueToManagerUseCase: AssignNoAssigneeIssueToManagerUseCase, updateIssueStatusByLabelUseCase: UpdateIssueStatusByLabelUseCase, startPreparationUseCase: StartPreparationUseCase, notifyFinishedIssuePreparationUseCase: NotifyFinishedIssuePreparationUseCase, dateRepository: DateRepository, spreadsheetRepository: SpreadsheetRepository, projectRepository: ProjectRepository, issueRepository: IssueRepository);
49
+ constructor(actionAnnouncementUseCase: ActionAnnouncementUseCase, setWorkflowManagementIssueToStoryUseCase: SetWorkflowManagementIssueToStoryUseCase, clearPastNextActionUseCase: ClearPastNextActionDateHourUseCase, analyzeProblemByIssueUseCase: AnalyzeProblemByIssueUseCase, analyzeStoriesUseCase: AnalyzeStoriesUseCase, clearDependedIssueURLUseCase: ClearDependedIssueURLUseCase, createEstimationIssueUseCase: CreateEstimationIssueUseCase, convertCheckboxToIssueInStoryIssueUseCase: ConvertCheckboxToIssueInStoryIssueUseCase, changeStatusByStoryColorUseCase: ChangeStatusByStoryColorUseCase, setNoStoryIssueToStoryUseCase: SetNoStoryIssueToStoryUseCase, createNewStoryByLabelUseCase: CreateNewStoryByLabelUseCase, assignNoAssigneeIssueToManagerUseCase: AssignNoAssigneeIssueToManagerUseCase, updateIssueStatusByLabelUseCase: UpdateIssueStatusByLabelUseCase, startPreparationUseCase: StartPreparationUseCase, notifyFinishedIssuePreparationUseCase: NotifyFinishedIssuePreparationUseCase, revertOrphanedPreparationUseCase: RevertOrphanedPreparationUseCase, dateRepository: DateRepository, spreadsheetRepository: SpreadsheetRepository, projectRepository: ProjectRepository, issueRepository: IssueRepository);
48
50
  run: (input: {
49
51
  projectName: string;
50
52
  org: string;
@@ -66,6 +68,7 @@ export declare class HandleScheduledEventUseCase {
66
68
  defaultAgentName: string;
67
69
  logFilePath?: string;
68
70
  maximumPreparingIssuesCount: number | null;
71
+ preparationProcessCheckCommand?: string;
69
72
  } | null;
70
73
  notifyFinishedPreparation?: {
71
74
  preparationStatus: string;
@@ -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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"}
@@ -0,0 +1,17 @@
1
+ import { IssueRepository } from './adapter-interfaces/IssueRepository';
2
+ import { ProjectRepository } from './adapter-interfaces/ProjectRepository';
3
+ import { LocalCommandRunner } from './adapter-interfaces/LocalCommandRunner';
4
+ export declare class RevertOrphanedPreparationUseCase {
5
+ readonly projectRepository: Pick<ProjectRepository, 'findProjectIdByUrl' | 'getProject'>;
6
+ readonly issueRepository: Pick<IssueRepository, 'getAllIssues' | 'updateStatus' | 'createComment'>;
7
+ readonly localCommandRunner: LocalCommandRunner;
8
+ constructor(projectRepository: Pick<ProjectRepository, 'findProjectIdByUrl' | 'getProject'>, issueRepository: Pick<IssueRepository, 'getAllIssues' | 'updateStatus' | 'createComment'>, localCommandRunner: LocalCommandRunner);
9
+ run: (params: {
10
+ projectUrl: string;
11
+ preparationStatus: string;
12
+ awaitingWorkspaceStatus: string;
13
+ allowIssueCacheMinutes: number;
14
+ preparationProcessCheckCommand: string;
15
+ }) => Promise<void>;
16
+ }
17
+ //# sourceMappingURL=RevertOrphanedPreparationUseCase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RevertOrphanedPreparationUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/RevertOrphanedPreparationUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAE7E,qBAAa,gCAAgC;IAEzC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,CAC9B,iBAAiB,EACjB,oBAAoB,GAAG,YAAY,CACpC;IACD,QAAQ,CAAC,eAAe,EAAE,IAAI,CAC5B,eAAe,EACf,cAAc,GAAG,cAAc,GAAG,eAAe,CAClD;IACD,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB;gBARtC,iBAAiB,EAAE,IAAI,CAC9B,iBAAiB,EACjB,oBAAoB,GAAG,YAAY,CACpC,EACQ,eAAe,EAAE,IAAI,CAC5B,eAAe,EACf,cAAc,GAAG,cAAc,GAAG,eAAe,CAClD,EACQ,kBAAkB,EAAE,kBAAkB;IAGjD,GAAG,GAAU,QAAQ;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,uBAAuB,EAAE,MAAM,CAAC;QAChC,sBAAsB,EAAE,MAAM,CAAC;QAC/B,8BAA8B,EAAE,MAAM,CAAC;KACxC,KAAG,OAAO,CAAC,IAAI,CAAC,CA+Cf;CACH"}