github-issue-tower-defence-management 2.6.0 → 2.7.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 (96) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +0 -2
  3. package/bin/adapter/entry-points/cli/index.js +0 -5
  4. package/bin/adapter/entry-points/cli/index.js.map +1 -1
  5. package/bin/adapter/entry-points/cli/projectConfig.js +0 -3
  6. package/bin/adapter/entry-points/cli/projectConfig.js.map +1 -1
  7. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js +1 -3
  8. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js.map +1 -1
  9. package/bin/adapter/entry-points/handlers/tokenExhaustionHandover.js +2 -1
  10. package/bin/adapter/entry-points/handlers/tokenExhaustionHandover.js.map +1 -1
  11. package/bin/adapter/repositories/GitHubIssueCheckpointRepository.js +37 -0
  12. package/bin/adapter/repositories/GitHubIssueCheckpointRepository.js.map +1 -0
  13. package/bin/domain/usecases/CheckIssueReviewReadinessUseCase.js +4 -2
  14. package/bin/domain/usecases/CheckIssueReviewReadinessUseCase.js.map +1 -1
  15. package/bin/domain/usecases/HandleScheduledEventUseCase.js +1 -6
  16. package/bin/domain/usecases/HandleScheduledEventUseCase.js.map +1 -1
  17. package/bin/domain/usecases/IssueRejectionEvaluator.js +0 -23
  18. package/bin/domain/usecases/IssueRejectionEvaluator.js.map +1 -1
  19. package/bin/domain/usecases/NotifyFinishedIssuePreparationUseCase.js +39 -69
  20. package/bin/domain/usecases/NotifyFinishedIssuePreparationUseCase.js.map +1 -1
  21. package/bin/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.js +3 -2
  22. package/bin/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.js.map +1 -1
  23. package/bin/domain/usecases/RevertOrphanedPreparationUseCase.js +0 -43
  24. package/bin/domain/usecases/RevertOrphanedPreparationUseCase.js.map +1 -1
  25. package/bin/domain/usecases/TokenExhaustionHandoverUseCase.js +10 -2
  26. package/bin/domain/usecases/TokenExhaustionHandoverUseCase.js.map +1 -1
  27. package/bin/domain/usecases/adapter-interfaces/IssueCheckpointRepository.js +3 -0
  28. package/bin/domain/usecases/adapter-interfaces/IssueCheckpointRepository.js.map +1 -0
  29. package/bin/domain/usecases/autoStatusCheckComments.js +1 -11
  30. package/bin/domain/usecases/autoStatusCheckComments.js.map +1 -1
  31. package/bin/domain/usecases/extractNextStepAgentFromComments.js +14 -0
  32. package/bin/domain/usecases/extractNextStepAgentFromComments.js.map +1 -0
  33. package/bin/domain/usecases/triagerAgentName.js +7 -0
  34. package/bin/domain/usecases/triagerAgentName.js.map +1 -0
  35. package/package.json +1 -1
  36. package/src/adapter/entry-points/cli/index.test.ts +0 -2
  37. package/src/adapter/entry-points/cli/index.ts +0 -9
  38. package/src/adapter/entry-points/cli/projectConfig.ts +0 -8
  39. package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts +0 -7
  40. package/src/adapter/entry-points/handlers/tokenExhaustionHandover.ts +2 -0
  41. package/src/adapter/repositories/GitHubIssueCheckpointRepository.test.ts +51 -0
  42. package/src/adapter/repositories/GitHubIssueCheckpointRepository.ts +47 -0
  43. package/src/domain/usecases/CheckIssueReviewReadinessUseCase.test.ts +26 -4
  44. package/src/domain/usecases/CheckIssueReviewReadinessUseCase.ts +5 -3
  45. package/src/domain/usecases/HandleScheduledEventUseCase.test.ts +0 -28
  46. package/src/domain/usecases/HandleScheduledEventUseCase.ts +0 -6
  47. package/src/domain/usecases/IssueRejectionEvaluator.test.ts +0 -119
  48. package/src/domain/usecases/IssueRejectionEvaluator.ts +0 -21
  49. package/src/domain/usecases/NotifyFinishedIssuePreparationUseCase.test.ts +185 -327
  50. package/src/domain/usecases/NotifyFinishedIssuePreparationUseCase.ts +68 -138
  51. package/src/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.test.ts +4 -4
  52. package/src/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.ts +11 -5
  53. package/src/domain/usecases/RevertOrphanedPreparationUseCase.test.ts +0 -313
  54. package/src/domain/usecases/RevertOrphanedPreparationUseCase.ts +1 -102
  55. package/src/domain/usecases/TokenExhaustionHandoverUseCase.test.ts +87 -3
  56. package/src/domain/usecases/TokenExhaustionHandoverUseCase.ts +14 -1
  57. package/src/domain/usecases/adapter-interfaces/IssueCheckpointRepository.ts +3 -0
  58. package/src/domain/usecases/autoStatusCheckComments.ts +0 -17
  59. package/src/domain/usecases/extractNextStepAgentFromComments.ts +13 -0
  60. package/src/domain/usecases/isHumanComment.test.ts +0 -13
  61. package/src/domain/usecases/triagerAgentName.ts +4 -0
  62. package/types/adapter/entry-points/cli/index.d.ts.map +1 -1
  63. package/types/adapter/entry-points/cli/projectConfig.d.ts +0 -1
  64. package/types/adapter/entry-points/cli/projectConfig.d.ts.map +1 -1
  65. package/types/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.d.ts.map +1 -1
  66. package/types/adapter/entry-points/handlers/tokenExhaustionHandover.d.ts.map +1 -1
  67. package/types/adapter/repositories/GitHubIssueCheckpointRepository.d.ts +8 -0
  68. package/types/adapter/repositories/GitHubIssueCheckpointRepository.d.ts.map +1 -0
  69. package/types/domain/usecases/CheckIssueReviewReadinessUseCase.d.ts.map +1 -1
  70. package/types/domain/usecases/HandleScheduledEventUseCase.d.ts +1 -3
  71. package/types/domain/usecases/HandleScheduledEventUseCase.d.ts.map +1 -1
  72. package/types/domain/usecases/IssueRejectionEvaluator.d.ts +0 -1
  73. package/types/domain/usecases/IssueRejectionEvaluator.d.ts.map +1 -1
  74. package/types/domain/usecases/NotifyFinishedIssuePreparationUseCase.d.ts +0 -1
  75. package/types/domain/usecases/NotifyFinishedIssuePreparationUseCase.d.ts.map +1 -1
  76. package/types/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.d.ts.map +1 -1
  77. package/types/domain/usecases/RevertOrphanedPreparationUseCase.d.ts +0 -1
  78. package/types/domain/usecases/RevertOrphanedPreparationUseCase.d.ts.map +1 -1
  79. package/types/domain/usecases/TokenExhaustionHandoverUseCase.d.ts +3 -1
  80. package/types/domain/usecases/TokenExhaustionHandoverUseCase.d.ts.map +1 -1
  81. package/types/domain/usecases/adapter-interfaces/IssueCheckpointRepository.d.ts +4 -0
  82. package/types/domain/usecases/adapter-interfaces/IssueCheckpointRepository.d.ts.map +1 -0
  83. package/types/domain/usecases/autoStatusCheckComments.d.ts +0 -4
  84. package/types/domain/usecases/autoStatusCheckComments.d.ts.map +1 -1
  85. package/types/domain/usecases/extractNextStepAgentFromComments.d.ts +5 -0
  86. package/types/domain/usecases/extractNextStepAgentFromComments.d.ts.map +1 -0
  87. package/types/domain/usecases/triagerAgentName.d.ts +3 -0
  88. package/types/domain/usecases/triagerAgentName.d.ts.map +1 -0
  89. package/src/domain/usecases/TriagerApprovalDispatchUseCase.test.ts +0 -1051
  90. package/src/domain/usecases/TriagerApprovalDispatchUseCase.ts +0 -274
  91. package/src/domain/usecases/awaitingOwnerApprovalMessage.ts +0 -5
  92. package/src/domain/usecases/isPullRequestDeclaredUnnecessary.test.ts +0 -162
  93. package/src/domain/usecases/isPullRequestDeclaredUnnecessary.ts +0 -29
  94. package/src/domain/usecases/isWaitingForOwnerApproval.test.ts +0 -91
  95. package/src/domain/usecases/isWaitingForOwnerApproval.ts +0 -17
  96. package/src/domain/usecases/returnedToAwaitingWorkspaceMessage.ts +0 -5
@@ -739,125 +739,6 @@ describe('IssueRejectionEvaluator', () => {
739
739
  });
740
740
  });
741
741
 
742
- describe('pullRequestRequired: false in issue body', () => {
743
- it('should not reject and not call findRelatedOpenPRs when body ends with JSON block containing pullRequestRequired: false', async () => {
744
- const body = '```json\n{"pullRequestRequired": false}\n```';
745
-
746
- const result = await evaluator.evaluate({
747
- url: 'https://github.com/user/repo/issues/1',
748
- labels: [],
749
- isPr: false,
750
- body,
751
- });
752
-
753
- expect(mockIssueRepository.findRelatedOpenPRs).not.toHaveBeenCalled();
754
- expect(result.rejections).toHaveLength(0);
755
- expect(result.approvedPrUrl).toBeNull();
756
- });
757
-
758
- it('should not reject even with trailing whitespace after the closing JSON block', async () => {
759
- const body = '```json\n{"pullRequestRequired": false}\n```\n ';
760
-
761
- const result = await evaluator.evaluate({
762
- url: 'https://github.com/user/repo/issues/1',
763
- labels: [],
764
- isPr: false,
765
- body,
766
- });
767
-
768
- expect(mockIssueRepository.findRelatedOpenPRs).not.toHaveBeenCalled();
769
- expect(result.rejections).toHaveLength(0);
770
- });
771
-
772
- it('should still require PR when body has pullRequestRequired: true', async () => {
773
- mockIssueRepository.findRelatedOpenPRs.mockResolvedValue([]);
774
- const body = '```json\n{"pullRequestRequired": true}\n```';
775
-
776
- const result = await evaluator.evaluate({
777
- url: 'https://github.com/user/repo/issues/1',
778
- labels: [],
779
- isPr: false,
780
- body,
781
- });
782
-
783
- expect(result.rejections).toHaveLength(1);
784
- expect(result.rejections[0].type).toBe('PULL_REQUEST_NOT_FOUND');
785
- });
786
-
787
- it('should still require PR when body is null', async () => {
788
- mockIssueRepository.findRelatedOpenPRs.mockResolvedValue([]);
789
-
790
- const result = await evaluator.evaluate({
791
- url: 'https://github.com/user/repo/issues/1',
792
- labels: [],
793
- isPr: false,
794
- body: null,
795
- });
796
-
797
- expect(result.rejections).toHaveLength(1);
798
- expect(result.rejections[0].type).toBe('PULL_REQUEST_NOT_FOUND');
799
- });
800
-
801
- it('should still require PR when body is undefined', async () => {
802
- mockIssueRepository.findRelatedOpenPRs.mockResolvedValue([]);
803
-
804
- const result = await evaluator.evaluate({
805
- url: 'https://github.com/user/repo/issues/1',
806
- labels: [],
807
- isPr: false,
808
- });
809
-
810
- expect(result.rejections).toHaveLength(1);
811
- expect(result.rejections[0].type).toBe('PULL_REQUEST_NOT_FOUND');
812
- });
813
-
814
- it('should still require PR when JSON block with pullRequestRequired: false is not at end of body', async () => {
815
- mockIssueRepository.findRelatedOpenPRs.mockResolvedValue([]);
816
- const body =
817
- '```json\n{"pullRequestRequired": false}\n```\n\nsome text after';
818
-
819
- const result = await evaluator.evaluate({
820
- url: 'https://github.com/user/repo/issues/1',
821
- labels: [],
822
- isPr: false,
823
- body,
824
- });
825
-
826
- expect(result.rejections).toHaveLength(1);
827
- expect(result.rejections[0].type).toBe('PULL_REQUEST_NOT_FOUND');
828
- });
829
-
830
- it('should still require PR when body has invalid JSON in code block', async () => {
831
- mockIssueRepository.findRelatedOpenPRs.mockResolvedValue([]);
832
- const body = '```json\n{invalid json}\n```';
833
-
834
- const result = await evaluator.evaluate({
835
- url: 'https://github.com/user/repo/issues/1',
836
- labels: [],
837
- isPr: false,
838
- body,
839
- });
840
-
841
- expect(result.rejections).toHaveLength(1);
842
- expect(result.rejections[0].type).toBe('PULL_REQUEST_NOT_FOUND');
843
- });
844
-
845
- it('should still require PR when body has pullRequestRequired not set to false', async () => {
846
- mockIssueRepository.findRelatedOpenPRs.mockResolvedValue([]);
847
- const body = '```json\n{"someOtherField": true}\n```';
848
-
849
- const result = await evaluator.evaluate({
850
- url: 'https://github.com/user/repo/issues/1',
851
- labels: [],
852
- isPr: false,
853
- body,
854
- });
855
-
856
- expect(result.rejections).toHaveLength(1);
857
- expect(result.rejections[0].type).toBe('PULL_REQUEST_NOT_FOUND');
858
- });
859
- });
860
-
861
742
  describe('detectConflictEvenIfEvaluationSkipped option', () => {
862
743
  it('should call findRelatedOpenPRs and return PULL_REQUEST_CONFLICTED when relatedOpenPrUrls is null and PR is conflicted', async () => {
863
744
  mockIssueRepository.findRelatedOpenPRs.mockResolvedValue([
@@ -2,7 +2,6 @@ import {
2
2
  IssueRepository,
3
3
  RelatedPullRequest,
4
4
  } from './adapter-interfaces/IssueRepository';
5
- import { normalizeReportBody } from './normalizeReportBody';
6
5
 
7
6
  export type PrRejectedReasonType =
8
7
  | 'PULL_REQUEST_NOT_FOUND'
@@ -243,7 +242,6 @@ export class IssueRejectionEvaluator {
243
242
  return (
244
243
  !isNonDeveloperAgent &&
245
244
  !hasLabelNotRequiringPullRequest &&
246
- this.isPullRequestRequiredByBody(issue.body) &&
247
245
  (categoryLabels.length <= 0 || categoryLabels.includes('category:e2e'))
248
246
  );
249
247
  };
@@ -337,23 +335,4 @@ export class IssueRejectionEvaluator {
337
335
  targetPath: string,
338
336
  ): boolean =>
339
337
  filePath === targetPath || filePath.startsWith(`${targetPath}/`);
340
-
341
- private isPullRequestRequiredByBody = (
342
- body: string | null | undefined,
343
- ): boolean => {
344
- if (!body) return true;
345
- const match = normalizeReportBody(body)
346
- .trimEnd()
347
- .match(/```json\n([\s\S]*?)\n```\s*$/);
348
- if (!match || !match[1]) return true;
349
- let config: unknown;
350
- try {
351
- config = JSON.parse(match[1]);
352
- } catch {
353
- return true;
354
- }
355
- if (typeof config !== 'object' || config === null) return true;
356
- if (!('pullRequestRequired' in config)) return true;
357
- return Reflect.get(config, 'pullRequestRequired') !== false;
358
- };
359
338
  }