github-issue-tower-defence-management 1.39.0 → 1.40.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.
@@ -1,4 +1,7 @@
1
- import { IssueRepository } from './adapter-interfaces/IssueRepository';
1
+ import {
2
+ IssueRepository,
3
+ RelatedPullRequest,
4
+ } from './adapter-interfaces/IssueRepository';
2
5
  import { ProjectRepository } from './adapter-interfaces/ProjectRepository';
3
6
  import { IssueCommentRepository } from './adapter-interfaces/IssueCommentRepository';
4
7
  import { WebhookRepository } from './adapter-interfaces/WebhookRepository';
@@ -23,6 +26,7 @@ export class IllegalIssueStatusError extends Error {
23
26
  }
24
27
  type RejectedReasonType =
25
28
  | 'NO_REPORT_FROM_AGENT_BOT'
29
+ | 'REPORT_HAS_NEXT_STEP'
26
30
  | 'PULL_REQUEST_NOT_FOUND'
27
31
  | 'MULTIPLE_PULL_REQUESTS_FOUND'
28
32
  | 'PULL_REQUEST_CONFLICTED'
@@ -38,7 +42,12 @@ export class NotifyFinishedIssuePreparationUseCase {
38
42
  >,
39
43
  private readonly issueRepository: Pick<
40
44
  IssueRepository,
41
- 'get' | 'update' | 'findRelatedOpenPRs' | 'getStoryObjectMap'
45
+ | 'get'
46
+ | 'update'
47
+ | 'updateNextActionDate'
48
+ | 'findRelatedOpenPRs'
49
+ | 'getStoryObjectMap'
50
+ | 'getOpenPullRequest'
42
51
  >,
43
52
  private readonly issueCommentRepository: Pick<
44
53
  IssueCommentRepository,
@@ -84,9 +93,61 @@ export class NotifyFinishedIssuePreparationUseCase {
84
93
  params.preparationStatus,
85
94
  );
86
95
  }
96
+
97
+ if (issue.dependedIssueUrls.length === 0) {
98
+ try {
99
+ const storyObjectMap =
100
+ await this.issueRepository.getStoryObjectMap(project);
101
+ for (const storyObject of storyObjectMap.values()) {
102
+ const towerDefenceIssue = storyObject.issues.find(
103
+ (i) => i.url === issue.url,
104
+ );
105
+ if (towerDefenceIssue) {
106
+ issue.dependedIssueUrls = towerDefenceIssue.dependedIssueUrls;
107
+ break;
108
+ }
109
+ }
110
+ } catch (error) {
111
+ console.warn(
112
+ 'Failed to enrich dependedIssueUrls from story object map:',
113
+ error,
114
+ );
115
+ }
116
+ }
117
+
118
+ if (issue.dependedIssueUrls.length > 0) {
119
+ issue.status = params.awaitingWorkspaceStatus;
120
+ await this.issueRepository.update(issue, project);
121
+ await this.issueCommentRepository.createComment(
122
+ issue,
123
+ `Issue has dependent issue URLs: ${issue.dependedIssueUrls.join(', ')}`,
124
+ );
125
+ return;
126
+ }
127
+
128
+ if (issue.nextActionDate !== null || issue.nextActionHour !== null) {
129
+ issue.status = params.awaitingWorkspaceStatus;
130
+ await this.issueRepository.update(issue, project);
131
+ await this.issueCommentRepository.createComment(
132
+ issue,
133
+ `Issue has next action date or hour set: nextActionDate=${issue.nextActionDate?.toISOString() ?? 'null'}, nextActionHour=${issue.nextActionHour ?? 'null'}`,
134
+ );
135
+ return;
136
+ }
137
+
87
138
  const comments =
88
139
  await this.issueCommentRepository.getCommentsFromIssue(issue);
89
140
 
141
+ const { rejections, approvedPrUrl } = await this.collectRejections(
142
+ issue,
143
+ comments,
144
+ );
145
+
146
+ const rejectionStatusMessage =
147
+ rejections.length > 0
148
+ ? `Auto Status Check: REJECTED\n${rejections.map((r) => `- ${r.detail}`).join('\n')}`
149
+ : 'Auto Status Check: APPROVED';
150
+
90
151
  const lastTargetComments = comments.slice(
91
152
  -params.thresholdForAutoReject * 2,
92
153
  );
@@ -95,15 +156,38 @@ export class NotifyFinishedIssuePreparationUseCase {
95
156
  comment.content.startsWith('Auto Status Check: REJECTED'),
96
157
  ).length >= params.thresholdForAutoReject &&
97
158
  !lastTargetComments.some((comment) =>
98
- comment.content.toLowerCase().startsWith('retry'),
159
+ comment.content
160
+ .toLowerCase()
161
+ .includes('failed to pass the check automatically'),
99
162
  )
100
163
  ) {
101
164
  issue.status = params.awaitingQualityCheckStatus;
102
165
  await this.issueRepository.update(issue, project);
166
+ const escalationStatusLine =
167
+ rejections.length > 0
168
+ ? rejectionStatusMessage
169
+ : 'Auto Status Check: APPROVED (escalated due to prior failures)';
170
+ if (rejections.length === 0 && approvedPrUrl !== null) {
171
+ await this.setPrNextActionDate(approvedPrUrl, project);
172
+ }
103
173
  await this.issueCommentRepository.createComment(
104
174
  issue,
105
- `Failed to pass the check autimatically for ${params.thresholdForAutoReject} times`,
175
+ `${escalationStatusLine}\n\nFailed to pass the check automatically for ${params.thresholdForAutoReject} times`,
176
+ );
177
+ await this.sendWorkflowBlockerNotification(
178
+ params.issueUrl,
179
+ params.workflowBlockerResolvedWebhookUrl,
180
+ project,
106
181
  );
182
+ return;
183
+ }
184
+
185
+ if (rejections.length <= 0) {
186
+ issue.status = params.awaitingQualityCheckStatus;
187
+ await this.issueRepository.update(issue, project);
188
+ if (approvedPrUrl !== null) {
189
+ await this.setPrNextActionDate(approvedPrUrl, project);
190
+ }
107
191
  await this.sendWorkflowBlockerNotification(
108
192
  params.issueUrl,
109
193
  params.workflowBlockerResolvedWebhookUrl,
@@ -112,34 +196,63 @@ export class NotifyFinishedIssuePreparationUseCase {
112
196
  return;
113
197
  }
114
198
 
199
+ issue.status = params.awaitingWorkspaceStatus;
200
+ await this.issueRepository.update(issue, project);
201
+
202
+ await this.issueCommentRepository.createComment(
203
+ issue,
204
+ rejectionStatusMessage,
205
+ );
206
+ };
207
+
208
+ private collectRejections = async (
209
+ issue: { url: string; labels: string[]; isPr: boolean },
210
+ comments: { content: string }[],
211
+ ): Promise<{
212
+ rejections: { type: RejectedReasonType; detail: string }[];
213
+ approvedPrUrl: string | null;
214
+ }> => {
115
215
  const rejections: { type: RejectedReasonType; detail: string }[] = [];
216
+ let approvedPrUrl: string | null = null;
116
217
  const lastComment = comments[comments.length - 1];
117
218
  if (!lastComment || !lastComment.content.startsWith('From:')) {
118
219
  rejections.push({
119
220
  type: 'NO_REPORT_FROM_AGENT_BOT',
120
221
  detail: 'NO_REPORT_FROM_AGENT_BOT',
121
222
  });
223
+ } else if (this.reportBodyHasNextStep(lastComment.content)) {
224
+ rejections.push({
225
+ type: 'REPORT_HAS_NEXT_STEP',
226
+ detail: 'REPORT_HAS_NEXT_STEP',
227
+ });
122
228
  }
123
229
 
124
230
  const categoryLabels = issue.labels.filter((label) =>
125
231
  label.startsWith('category:'),
126
232
  );
127
- if (categoryLabels.length <= 0 || categoryLabels.includes('category:e2e')) {
128
- const relatedOpenPrs = await this.issueRepository.findRelatedOpenPRs(
129
- issue.url,
130
- );
131
- if (relatedOpenPrs.length <= 0) {
233
+ const hasLlmAgentLabel = issue.labels.some(
234
+ (l) => l === 'llm-agent' || l.startsWith('llm-agent:'),
235
+ );
236
+ if (
237
+ !hasLlmAgentLabel &&
238
+ (categoryLabels.length <= 0 || categoryLabels.includes('category:e2e'))
239
+ ) {
240
+ const prsToCheck = issue.isPr
241
+ ? await this.resolveOpenPrsForPrItem(issue.url)
242
+ : await this.issueRepository.findRelatedOpenPRs(issue.url);
243
+
244
+ if (prsToCheck.length <= 0) {
132
245
  rejections.push({
133
246
  type: 'PULL_REQUEST_NOT_FOUND',
134
247
  detail: 'PULL_REQUEST_NOT_FOUND',
135
248
  });
136
- } else if (relatedOpenPrs.length > 1) {
249
+ } else if (prsToCheck.length > 1) {
137
250
  rejections.push({
138
251
  type: 'MULTIPLE_PULL_REQUESTS_FOUND',
139
- detail: `MULTIPLE_PULL_REQUESTS_FOUND: ${relatedOpenPrs.map((pr) => pr.url).join(', ')}`,
252
+ detail: `MULTIPLE_PULL_REQUESTS_FOUND: ${prsToCheck.map((pr) => pr.url).join(', ')}`,
140
253
  });
141
254
  } else {
142
- const pr = relatedOpenPrs[0];
255
+ const pr = prsToCheck[0];
143
256
  if (pr.isConflicted) {
144
257
  rejections.push({
145
258
  type: 'PULL_REQUEST_CONFLICTED',
@@ -170,26 +283,64 @@ export class NotifyFinishedIssuePreparationUseCase {
170
283
  detail: `ANY_REVIEW_COMMENT_NOT_RESOLVED: ${pr.url}`,
171
284
  });
172
285
  }
286
+ if (
287
+ !pr.isConflicted &&
288
+ pr.isPassedAllCiJob &&
289
+ pr.isResolvedAllReviewComments
290
+ ) {
291
+ approvedPrUrl = pr.url;
292
+ }
173
293
  }
174
294
  }
175
295
 
176
- if (rejections.length <= 0) {
177
- issue.status = params.awaitingQualityCheckStatus;
178
- await this.issueRepository.update(issue, project);
179
- await this.sendWorkflowBlockerNotification(
180
- params.issueUrl,
181
- params.workflowBlockerResolvedWebhookUrl,
182
- project,
183
- );
184
- return;
296
+ return { rejections, approvedPrUrl };
297
+ };
298
+
299
+ private resolveOpenPrsForPrItem = async (
300
+ prUrl: string,
301
+ ): Promise<RelatedPullRequest[]> => {
302
+ const pr = await this.issueRepository.getOpenPullRequest(prUrl);
303
+ if (pr === null) {
304
+ return [];
185
305
  }
306
+ return [pr];
307
+ };
186
308
 
187
- issue.status = params.awaitingWorkspaceStatus;
188
- await this.issueRepository.update(issue, project);
309
+ private reportBodyHasNextStep = (body: string): boolean => {
310
+ const reportMatch = body.match(/```json\n([\s\S]*?)\n```/);
311
+ if (!reportMatch || reportMatch.length < 2) {
312
+ return false;
313
+ }
314
+ let reportJson: unknown;
315
+ try {
316
+ reportJson = JSON.parse(reportMatch[1]);
317
+ } catch (error) {
318
+ console.warn(
319
+ 'Invalid JSON in report body while checking nextStep:',
320
+ error,
321
+ );
322
+ return false;
323
+ }
324
+ if (typeof reportJson !== 'object' || reportJson === null) {
325
+ return false;
326
+ }
327
+ if (!('nextStep' in reportJson)) {
328
+ return false;
329
+ }
330
+ const nextStepValue = Reflect.get(reportJson, 'nextStep');
331
+ return nextStepValue !== null && nextStepValue !== undefined;
332
+ };
189
333
 
190
- await this.issueCommentRepository.createComment(
191
- issue,
192
- `Auto Status Check: REJECTED\n${rejections.map((r) => `- ${r.detail}`).join('\n')}`,
334
+ private setPrNextActionDate = async (
335
+ prUrl: string,
336
+ project: Parameters<IssueRepository['get']>[1],
337
+ ): Promise<void> => {
338
+ const nextActionDate = new Date();
339
+ nextActionDate.setMonth(nextActionDate.getMonth() + 1);
340
+ await this.issueRepository.updateNextActionDate(
341
+ prUrl,
342
+ project,
343
+ nextActionDate,
193
344
  );
194
345
  };
195
346
 
@@ -29,12 +29,11 @@ export interface IssueRepository {
29
29
  ) => Promise<number>;
30
30
  updateIssue: (issue: Issue) => Promise<void>;
31
31
  updateNextActionDate: (
32
- project: Project & {
33
- nextActionDate: NonNullable<Project['nextActionDate']>;
34
- },
35
- issue: Issue,
32
+ issueUrl: string,
33
+ project: Project,
36
34
  date: Date,
37
35
  ) => Promise<void>;
36
+ getOpenPullRequest: (prUrl: string) => Promise<RelatedPullRequest | null>;
38
37
  updateNextActionHour: (
39
38
  project: Project & {
40
39
  nextActionHour: NonNullable<Project['nextActionHour']>;
@@ -32,9 +32,8 @@ export declare class ApiV3CheerioRestIssueRepository extends BaseGitHubRepositor
32
32
  createNewIssue: (org: string, repo: string, title: string, body: string, assignees: string[], labels: string[]) => Promise<number>;
33
33
  updateIssue: (issue: Issue) => Promise<void>;
34
34
  getIssueByUrl: (url: string) => Promise<Issue | null>;
35
- updateNextActionDate: (project: Project & {
36
- nextActionDate: Required<Project["nextActionDate"]>;
37
- }, issue: Issue, date: Date) => Promise<void>;
35
+ updateNextActionDate: (issueUrl: string, project: Project, date: Date) => Promise<void>;
36
+ getOpenPullRequest: (prUrl: string) => Promise<RelatedPullRequest | null>;
38
37
  updateNextActionHour: (project: Project & {
39
38
  nextActionHour: NonNullable<Project["nextActionHour"]>;
40
39
  }, issue: Issue, hour: number) => Promise<void>;
@@ -49,7 +48,7 @@ export declare class ApiV3CheerioRestIssueRepository extends BaseGitHubRepositor
49
48
  updateAssigneeList: (issue: Issue, assigneeList: Member["name"][]) => Promise<void>;
50
49
  get: (_issueUrl: string, _project: Project) => Promise<Issue | null>;
51
50
  update: (issue: Issue, _project: Project) => Promise<void>;
52
- findRelatedOpenPRs: (_issueUrl: string) => Promise<RelatedPullRequest[]>;
51
+ findRelatedOpenPRs: (issueUrl: string) => Promise<RelatedPullRequest[]>;
53
52
  getAllOpened: (_project: Project) => Promise<Issue[]>;
54
53
  getStoryObjectMap: (_project: Project) => Promise<StoryObjectMap>;
55
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ApiV3CheerioRestIssueRepository.d.ts","sourceRoot":"","sources":["../../../../src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ApiV3CheerioRestIssueRepository.d.ts","sourceRoot":"","sources":["../../../../src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,7 @@ export declare class NotifyFinishedIssuePreparationUseCase {
13
13
  private readonly issueRepository;
14
14
  private readonly issueCommentRepository;
15
15
  private readonly webhookRepository;
16
- constructor(projectRepository: Pick<ProjectRepository, 'getByUrl' | 'prepareStatus'>, issueRepository: Pick<IssueRepository, 'get' | 'update' | 'findRelatedOpenPRs' | 'getStoryObjectMap'>, issueCommentRepository: Pick<IssueCommentRepository, 'getCommentsFromIssue' | 'createComment'>, webhookRepository: Pick<WebhookRepository, 'sendGetRequest'>);
16
+ constructor(projectRepository: Pick<ProjectRepository, 'getByUrl' | 'prepareStatus'>, issueRepository: Pick<IssueRepository, 'get' | 'update' | 'updateNextActionDate' | 'findRelatedOpenPRs' | 'getStoryObjectMap' | 'getOpenPullRequest'>, issueCommentRepository: Pick<IssueCommentRepository, 'getCommentsFromIssue' | 'createComment'>, webhookRepository: Pick<WebhookRepository, 'sendGetRequest'>);
17
17
  run: (params: {
18
18
  projectUrl: string;
19
19
  issueUrl: string;
@@ -23,6 +23,10 @@ export declare class NotifyFinishedIssuePreparationUseCase {
23
23
  thresholdForAutoReject: number;
24
24
  workflowBlockerResolvedWebhookUrl: string | null;
25
25
  }) => Promise<void>;
26
+ private collectRejections;
27
+ private resolveOpenPrsForPrItem;
28
+ private reportBodyHasNextStep;
29
+ private setPrNextActionDate;
26
30
  private sendWorkflowBlockerNotification;
27
31
  }
28
32
  //# sourceMappingURL=NotifyFinishedIssuePreparationUseCase.d.ts.map
@@ -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;AAE3E,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;AAUD,qBAAa,qCAAqC;IAE9C,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAIlC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAIhC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IAIvC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAZjB,iBAAiB,EAAE,IAAI,CACtC,iBAAiB,EACjB,UAAU,GAAG,eAAe,CAC7B,EACgB,eAAe,EAAE,IAAI,CACpC,eAAe,EACf,KAAK,GAAG,QAAQ,GAAG,oBAAoB,GAAG,mBAAmB,CAC9D,EACgB,sBAAsB,EAAE,IAAI,CAC3C,sBAAsB,EACtB,sBAAsB,GAAG,eAAe,CACzC,EACgB,iBAAiB,EAAE,IAAI,CACtC,iBAAiB,EACjB,gBAAgB,CACjB;IAGH,GAAG,GAAU,QAAQ;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,uBAAuB,EAAE,MAAM,CAAC;QAChC,0BAA0B,EAAE,MAAM,CAAC;QACnC,sBAAsB,EAAE,MAAM,CAAC;QAC/B,iCAAiC,EAAE,MAAM,GAAG,IAAI,CAAC;KAClD,KAAG,OAAO,CAAC,IAAI,CAAC,CAqIf;IAEF,OAAO,CAAC,+BAA+B,CAgCrC;CACH"}
1
+ {"version":3,"file":"NotifyFinishedIssuePreparationUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/NotifyFinishedIssuePreparationUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAEhB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAE3E,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;AAWD,qBAAa,qCAAqC;IAE9C,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAIlC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAShC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IAIvC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAjBjB,iBAAiB,EAAE,IAAI,CACtC,iBAAiB,EACjB,UAAU,GAAG,eAAe,CAC7B,EACgB,eAAe,EAAE,IAAI,CACpC,eAAe,EACb,KAAK,GACL,QAAQ,GACR,sBAAsB,GACtB,oBAAoB,GACpB,mBAAmB,GACnB,oBAAoB,CACvB,EACgB,sBAAsB,EAAE,IAAI,CAC3C,sBAAsB,EACtB,sBAAsB,GAAG,eAAe,CACzC,EACgB,iBAAiB,EAAE,IAAI,CACtC,iBAAiB,EACjB,gBAAgB,CACjB;IAGH,GAAG,GAAU,QAAQ;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,uBAAuB,EAAE,MAAM,CAAC;QAChC,0BAA0B,EAAE,MAAM,CAAC;QACnC,sBAAsB,EAAE,MAAM,CAAC;QAC/B,iCAAiC,EAAE,MAAM,GAAG,IAAI,CAAC;KAClD,KAAG,OAAO,CAAC,IAAI,CAAC,CAwIf;IAEF,OAAO,CAAC,iBAAiB,CAyFvB;IAEF,OAAO,CAAC,uBAAuB,CAQ7B;IAEF,OAAO,CAAC,qBAAqB,CAuB3B;IAEF,OAAO,CAAC,mBAAmB,CAWzB;IAEF,OAAO,CAAC,+BAA+B,CAgCrC;CACH"}
@@ -19,9 +19,8 @@ export interface IssueRepository {
19
19
  getIssueByUrl: (url: string) => Promise<Issue | null>;
20
20
  createNewIssue: (org: string, repo: string, title: string, body: string, assignees: Member['name'][], labels: Label[]) => Promise<number>;
21
21
  updateIssue: (issue: Issue) => Promise<void>;
22
- updateNextActionDate: (project: Project & {
23
- nextActionDate: NonNullable<Project['nextActionDate']>;
24
- }, issue: Issue, date: Date) => Promise<void>;
22
+ updateNextActionDate: (issueUrl: string, project: Project, date: Date) => Promise<void>;
23
+ getOpenPullRequest: (prUrl: string) => Promise<RelatedPullRequest | null>;
25
24
  updateNextActionHour: (project: Project & {
26
25
  nextActionHour: NonNullable<Project['nextActionHour']>;
27
26
  }, issue: Issue, hour: number) => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"IssueRepository.d.ts","sourceRoot":"","sources":["../../../../src/domain/usecases/adapter-interfaces/IssueRepository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IssueRepository.d.ts","sourceRoot":"","sources":["../../../../src/domain/usecases/adapter-interfaces/IssueRepository.ts"],"names":[],"mappings":"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"}