npm-cli-gh-issue-preparator 1.13.0 → 1.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 CHANGED
@@ -1,3 +1,10 @@
1
+ # [1.14.0](https://github.com/HiromiShikata/npm-cli-gh-issue-preparator/compare/v1.13.0...v1.14.0) (2026-02-23)
2
+
3
+
4
+ ### Features
5
+
6
+ * **core:** skip aw command for issues with dependency or future nextActionHour ([7d3adfb](https://github.com/HiromiShikata/npm-cli-gh-issue-preparator/commit/7d3adfbfec6695aa01e572652ad15eda361a6f70)), closes [#59](https://github.com/HiromiShikata/npm-cli-gh-issue-preparator/issues/59)
7
+
1
8
  # [1.13.0](https://github.com/HiromiShikata/npm-cli-gh-issue-preparator/compare/v1.12.0...v1.13.0) (2026-02-18)
2
9
 
3
10
 
@@ -29,6 +29,7 @@ class StartPreparationUseCase {
29
29
  .filter((issue) => issue.status === params.awaitingWorkspaceStatus);
30
30
  const currentPreparationIssueCount = allIssues.filter((issue) => issue.status === params.preparationStatus).length;
31
31
  let updatedCurrentPreparationIssueCount = currentPreparationIssueCount;
32
+ const currentHour = new Date().getHours();
32
33
  for (let i = 0; i < awaitingWorkspaceIssues.length &&
33
34
  updatedCurrentPreparationIssueCount < maximumPreparingIssuesCount; i++) {
34
35
  const issue = awaitingWorkspaceIssues[i];
@@ -37,6 +38,12 @@ class StartPreparationUseCase {
37
38
  !blockerIssueUrls.includes(issue.url)) {
38
39
  continue;
39
40
  }
41
+ if (issue.dependedIssueUrls.length > 0) {
42
+ continue;
43
+ }
44
+ if (issue.nextActionHour !== null && currentHour < issue.nextActionHour) {
45
+ continue;
46
+ }
40
47
  const agent = issue.labels
41
48
  .find((label) => label.startsWith('category:'))
42
49
  ?.replace('category:', '')
@@ -1 +1 @@
1
- {"version":3,"file":"StartPreparationUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/StartPreparationUseCase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StartPreparationUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/StartPreparationUseCase.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "npm-cli-gh-issue-preparator",
3
- "version": "1.13.0",
3
+ "version": "1.14.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "scripts": {
@@ -695,4 +695,151 @@ describe('StartPreparationUseCase', () => {
695
695
  expect(mockIssueRepository.update.mock.calls).toHaveLength(1);
696
696
  expect(mockLocalCommandRunner.runCommand.mock.calls).toHaveLength(1);
697
697
  });
698
+
699
+ it('should skip issues that have dependedIssueUrls', async () => {
700
+ const issueWithDependency = createMockIssue({
701
+ url: 'https://github.com/user/repo/issues/1',
702
+ title: 'Issue with dependency',
703
+ labels: [],
704
+ status: 'Awaiting Workspace',
705
+ dependedIssueUrls: ['https://github.com/user/repo/issues/2'],
706
+ });
707
+ const issueWithoutDependency = createMockIssue({
708
+ url: 'https://github.com/user/repo/issues/3',
709
+ title: 'Issue without dependency',
710
+ labels: [],
711
+ status: 'Awaiting Workspace',
712
+ dependedIssueUrls: [],
713
+ });
714
+
715
+ mockProjectRepository.getByUrl.mockResolvedValue(mockProject);
716
+ mockIssueRepository.getStoryObjectMap.mockResolvedValue(
717
+ createMockStoryObjectMap([issueWithDependency, issueWithoutDependency]),
718
+ );
719
+ mockIssueRepository.getAllOpened.mockResolvedValueOnce([
720
+ issueWithDependency,
721
+ issueWithoutDependency,
722
+ ]);
723
+ mockLocalCommandRunner.runCommand.mockResolvedValue({
724
+ stdout: '',
725
+ stderr: '',
726
+ exitCode: 0,
727
+ });
728
+
729
+ await useCase.run({
730
+ projectUrl: 'https://github.com/user/repo',
731
+ awaitingWorkspaceStatus: 'Awaiting Workspace',
732
+ preparationStatus: 'Preparation',
733
+ defaultAgentName: 'agent1',
734
+ maximumPreparingIssuesCount: null,
735
+ });
736
+
737
+ expect(mockIssueRepository.update.mock.calls).toHaveLength(1);
738
+ expect(mockIssueRepository.update.mock.calls[0][0]).toMatchObject({
739
+ url: 'https://github.com/user/repo/issues/3',
740
+ status: 'Preparation',
741
+ });
742
+ expect(mockLocalCommandRunner.runCommand.mock.calls).toHaveLength(1);
743
+ });
744
+
745
+ it('should skip issues where nextActionHour is in the future', async () => {
746
+ jest.useFakeTimers();
747
+ try {
748
+ jest.setSystemTime(new Date('2024-01-01T10:00:00'));
749
+
750
+ const issueWithFutureNextActionHour = createMockIssue({
751
+ url: 'https://github.com/user/repo/issues/1',
752
+ title: 'Issue with future next action hour',
753
+ labels: [],
754
+ status: 'Awaiting Workspace',
755
+ nextActionHour: 15,
756
+ });
757
+ const issueWithoutNextActionHour = createMockIssue({
758
+ url: 'https://github.com/user/repo/issues/2',
759
+ title: 'Issue without next action hour',
760
+ labels: [],
761
+ status: 'Awaiting Workspace',
762
+ nextActionHour: null,
763
+ });
764
+
765
+ mockProjectRepository.getByUrl.mockResolvedValue(mockProject);
766
+ mockIssueRepository.getStoryObjectMap.mockResolvedValue(
767
+ createMockStoryObjectMap([
768
+ issueWithFutureNextActionHour,
769
+ issueWithoutNextActionHour,
770
+ ]),
771
+ );
772
+ mockIssueRepository.getAllOpened.mockResolvedValueOnce([
773
+ issueWithFutureNextActionHour,
774
+ issueWithoutNextActionHour,
775
+ ]);
776
+ mockLocalCommandRunner.runCommand.mockResolvedValue({
777
+ stdout: '',
778
+ stderr: '',
779
+ exitCode: 0,
780
+ });
781
+
782
+ await useCase.run({
783
+ projectUrl: 'https://github.com/user/repo',
784
+ awaitingWorkspaceStatus: 'Awaiting Workspace',
785
+ preparationStatus: 'Preparation',
786
+ defaultAgentName: 'agent1',
787
+ maximumPreparingIssuesCount: null,
788
+ });
789
+
790
+ expect(mockIssueRepository.update.mock.calls).toHaveLength(1);
791
+ expect(mockIssueRepository.update.mock.calls[0][0]).toMatchObject({
792
+ url: 'https://github.com/user/repo/issues/2',
793
+ status: 'Preparation',
794
+ });
795
+ expect(mockLocalCommandRunner.runCommand.mock.calls).toHaveLength(1);
796
+ } finally {
797
+ jest.useRealTimers();
798
+ }
799
+ });
800
+
801
+ it('should not skip issues where nextActionHour is in the past or current hour', async () => {
802
+ jest.useFakeTimers();
803
+ try {
804
+ jest.setSystemTime(new Date('2024-01-01T15:00:00'));
805
+
806
+ const issueWithPastNextActionHour = createMockIssue({
807
+ url: 'https://github.com/user/repo/issues/1',
808
+ title: 'Issue with past next action hour',
809
+ labels: [],
810
+ status: 'Awaiting Workspace',
811
+ nextActionHour: 10,
812
+ });
813
+
814
+ mockProjectRepository.getByUrl.mockResolvedValue(mockProject);
815
+ mockIssueRepository.getStoryObjectMap.mockResolvedValue(
816
+ createMockStoryObjectMap([issueWithPastNextActionHour]),
817
+ );
818
+ mockIssueRepository.getAllOpened.mockResolvedValueOnce([
819
+ issueWithPastNextActionHour,
820
+ ]);
821
+ mockLocalCommandRunner.runCommand.mockResolvedValue({
822
+ stdout: '',
823
+ stderr: '',
824
+ exitCode: 0,
825
+ });
826
+
827
+ await useCase.run({
828
+ projectUrl: 'https://github.com/user/repo',
829
+ awaitingWorkspaceStatus: 'Awaiting Workspace',
830
+ preparationStatus: 'Preparation',
831
+ defaultAgentName: 'agent1',
832
+ maximumPreparingIssuesCount: null,
833
+ });
834
+
835
+ expect(mockIssueRepository.update.mock.calls).toHaveLength(1);
836
+ expect(mockIssueRepository.update.mock.calls[0][0]).toMatchObject({
837
+ url: 'https://github.com/user/repo/issues/1',
838
+ status: 'Preparation',
839
+ });
840
+ expect(mockLocalCommandRunner.runCommand.mock.calls).toHaveLength(1);
841
+ } finally {
842
+ jest.useRealTimers();
843
+ }
844
+ });
698
845
  });
@@ -54,6 +54,8 @@ export class StartPreparationUseCase {
54
54
  ).length;
55
55
  let updatedCurrentPreparationIssueCount = currentPreparationIssueCount;
56
56
 
57
+ const currentHour = new Date().getHours();
58
+
57
59
  for (
58
60
  let i = 0;
59
61
  i < awaitingWorkspaceIssues.length &&
@@ -71,6 +73,12 @@ export class StartPreparationUseCase {
71
73
  ) {
72
74
  continue;
73
75
  }
76
+ if (issue.dependedIssueUrls.length > 0) {
77
+ continue;
78
+ }
79
+ if (issue.nextActionHour !== null && currentHour < issue.nextActionHour) {
80
+ continue;
81
+ }
74
82
  const agent =
75
83
  issue.labels
76
84
  .find((label) => label.startsWith('category:'))
@@ -1 +1 @@
1
- {"version":3,"file":"StartPreparationUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/StartPreparationUseCase.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,OAAO,EAAe,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAEzE,qBAAa,uBAAuB;IAEhC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAIhC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBANlB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,EACtD,eAAe,EAAE,IAAI,CACpC,eAAe,EACf,cAAc,GAAG,mBAAmB,GAAG,QAAQ,CAChD,EACgB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,EACpD,kBAAkB,EAAE,kBAAkB;IAGzD,GAAG,GAAU,QAAQ;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,uBAAuB,EAAE,MAAM,CAAC;QAChC,iBAAiB,EAAE,MAAM,CAAC;QAC1B,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,2BAA2B,EAAE,MAAM,GAAG,IAAI,CAAC;KAC5C,KAAG,OAAO,CAAC,IAAI,CAAC,CAgEf;IACF,yBAAyB,GACvB,gBAAgB,cAAc,KAC7B;QACD,OAAO,EAAE,MAAM,CAAC;QAChB,gBAAgB,EAAE,MAAM,EAAE,CAAC;KAC5B,EAAE,CAyBD;CACH"}
1
+ {"version":3,"file":"StartPreparationUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/StartPreparationUseCase.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,OAAO,EAAe,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAEzE,qBAAa,uBAAuB;IAEhC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAIhC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBANlB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,EACtD,eAAe,EAAE,IAAI,CACpC,eAAe,EACf,cAAc,GAAG,mBAAmB,GAAG,QAAQ,CAChD,EACgB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,EACpD,kBAAkB,EAAE,kBAAkB;IAGzD,GAAG,GAAU,QAAQ;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,uBAAuB,EAAE,MAAM,CAAC;QAChC,iBAAiB,EAAE,MAAM,CAAC;QAC1B,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,2BAA2B,EAAE,MAAM,GAAG,IAAI,CAAC;KAC5C,KAAG,OAAO,CAAC,IAAI,CAAC,CAwEf;IACF,yBAAyB,GACvB,gBAAgB,cAAc,KAC7B;QACD,OAAO,EAAE,MAAM,CAAC;QAChB,gBAAgB,EAAE,MAAM,EAAE,CAAC;KAC5B,EAAE,CAyBD;CACH"}