github-issue-tower-defence-management 1.41.0 → 1.42.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.
@@ -147,6 +147,7 @@ describe('StartPreparationUseCase', () => {
147
147
  maximumPreparingIssuesCount: null,
148
148
  utilizationPercentageThreshold: 90,
149
149
  allowedIssueAuthors: null,
150
+ codexHomeCandidates: null,
150
151
  });
151
152
 
152
153
  expect(mockProjectRepository.prepareStatus).toHaveBeenCalledTimes(2);
@@ -191,6 +192,7 @@ describe('StartPreparationUseCase', () => {
191
192
  maximumPreparingIssuesCount: null,
192
193
  utilizationPercentageThreshold: 90,
193
194
  allowedIssueAuthors: null,
195
+ codexHomeCandidates: null,
194
196
  });
195
197
  expect(mockIssueRepository.update.mock.calls).toHaveLength(1);
196
198
  expect(mockIssueRepository.update.mock.calls[0][0]).toMatchObject({
@@ -253,6 +255,7 @@ describe('StartPreparationUseCase', () => {
253
255
  maximumPreparingIssuesCount: null,
254
256
  utilizationPercentageThreshold: 90,
255
257
  allowedIssueAuthors: null,
258
+ codexHomeCandidates: null,
256
259
  });
257
260
  expect(mockLocalCommandRunner.runCommand.mock.calls).toHaveLength(1);
258
261
  expect(mockLocalCommandRunner.runCommand.mock.calls[0]).toEqual([
@@ -308,6 +311,7 @@ describe('StartPreparationUseCase', () => {
308
311
  maximumPreparingIssuesCount: null,
309
312
  utilizationPercentageThreshold: 90,
310
313
  allowedIssueAuthors: null,
314
+ codexHomeCandidates: null,
311
315
  });
312
316
  expect(mockLocalCommandRunner.runCommand.mock.calls).toHaveLength(1);
313
317
  expect(mockLocalCommandRunner.runCommand.mock.calls[0]).toEqual([
@@ -356,6 +360,7 @@ describe('StartPreparationUseCase', () => {
356
360
  maximumPreparingIssuesCount: null,
357
361
  utilizationPercentageThreshold: 90,
358
362
  allowedIssueAuthors: null,
363
+ codexHomeCandidates: null,
359
364
  });
360
365
  expect(mockLocalCommandRunner.runCommand.mock.calls).toHaveLength(0);
361
366
  expect(mockIssueRepository.update.mock.calls).toHaveLength(0);
@@ -403,6 +408,7 @@ describe('StartPreparationUseCase', () => {
403
408
  maximumPreparingIssuesCount: null,
404
409
  utilizationPercentageThreshold: 90,
405
410
  allowedIssueAuthors: null,
411
+ codexHomeCandidates: null,
406
412
  });
407
413
  expect(mockLocalCommandRunner.runCommand.mock.calls).toHaveLength(0);
408
414
  expect(mockIssueRepository.update.mock.calls).toHaveLength(0);
@@ -449,6 +455,7 @@ describe('StartPreparationUseCase', () => {
449
455
  maximumPreparingIssuesCount: null,
450
456
  utilizationPercentageThreshold: 90,
451
457
  allowedIssueAuthors: null,
458
+ codexHomeCandidates: null,
452
459
  });
453
460
  expect(mockLocalCommandRunner.runCommand.mock.calls).toHaveLength(0);
454
461
  expect(mockIssueRepository.update.mock.calls).toHaveLength(0);
@@ -506,6 +513,7 @@ describe('StartPreparationUseCase', () => {
506
513
  maximumPreparingIssuesCount: null,
507
514
  utilizationPercentageThreshold: 90,
508
515
  allowedIssueAuthors: null,
516
+ codexHomeCandidates: null,
509
517
  });
510
518
  expect(mockLocalCommandRunner.runCommand.mock.calls).toHaveLength(0);
511
519
  expect(mockIssueRepository.update.mock.calls).toHaveLength(0);
@@ -555,6 +563,7 @@ describe('StartPreparationUseCase', () => {
555
563
  maximumPreparingIssuesCount: null,
556
564
  utilizationPercentageThreshold: 90,
557
565
  allowedIssueAuthors: null,
566
+ codexHomeCandidates: null,
558
567
  });
559
568
  expect(mockLocalCommandRunner.runCommand.mock.calls).toHaveLength(0);
560
569
  expect(mockIssueRepository.update.mock.calls).toHaveLength(0);
@@ -599,6 +608,7 @@ describe('StartPreparationUseCase', () => {
599
608
  maximumPreparingIssuesCount: null,
600
609
  utilizationPercentageThreshold: 90,
601
610
  allowedIssueAuthors: null,
611
+ codexHomeCandidates: null,
602
612
  });
603
613
  // Both awaiting issues should be updated (forward iteration: url1 first, then url2)
604
614
  expect(mockIssueRepository.update.mock.calls).toHaveLength(2);
@@ -656,6 +666,7 @@ describe('StartPreparationUseCase', () => {
656
666
  maximumPreparingIssuesCount: null,
657
667
  utilizationPercentageThreshold: 90,
658
668
  allowedIssueAuthors: null,
669
+ codexHomeCandidates: null,
659
670
  });
660
671
  // Loop doesn't run because we're already at max (6 >= 6)
661
672
  expect(mockIssueRepository.update.mock.calls).toHaveLength(0);
@@ -691,6 +702,7 @@ describe('StartPreparationUseCase', () => {
691
702
  maximumPreparingIssuesCount: null,
692
703
  utilizationPercentageThreshold: 90,
693
704
  allowedIssueAuthors: null,
705
+ codexHomeCandidates: null,
694
706
  });
695
707
  expect(mockLocalCommandRunner.runCommand.mock.calls).toHaveLength(1);
696
708
  expect(mockLocalCommandRunner.runCommand.mock.calls[0]).toEqual([
@@ -736,6 +748,7 @@ describe('StartPreparationUseCase', () => {
736
748
  maximumPreparingIssuesCount: null,
737
749
  utilizationPercentageThreshold: 90,
738
750
  allowedIssueAuthors: null,
751
+ codexHomeCandidates: null,
739
752
  });
740
753
  expect(mockLocalCommandRunner.runCommand.mock.calls).toHaveLength(1);
741
754
  expect(mockLocalCommandRunner.runCommand.mock.calls[0]).toEqual([
@@ -781,6 +794,7 @@ describe('StartPreparationUseCase', () => {
781
794
  maximumPreparingIssuesCount: null,
782
795
  utilizationPercentageThreshold: 90,
783
796
  allowedIssueAuthors: null,
797
+ codexHomeCandidates: null,
784
798
  });
785
799
  expect(mockLocalCommandRunner.runCommand.mock.calls).toHaveLength(1);
786
800
  expect(mockLocalCommandRunner.runCommand.mock.calls[0]).toEqual([
@@ -826,6 +840,7 @@ describe('StartPreparationUseCase', () => {
826
840
  maximumPreparingIssuesCount: null,
827
841
  utilizationPercentageThreshold: 90,
828
842
  allowedIssueAuthors: null,
843
+ codexHomeCandidates: null,
829
844
  });
830
845
  expect(mockLocalCommandRunner.runCommand.mock.calls).toHaveLength(1);
831
846
  expect(mockLocalCommandRunner.runCommand.mock.calls[0]).toEqual([
@@ -871,6 +886,7 @@ describe('StartPreparationUseCase', () => {
871
886
  maximumPreparingIssuesCount: null,
872
887
  utilizationPercentageThreshold: 90,
873
888
  allowedIssueAuthors: null,
889
+ codexHomeCandidates: null,
874
890
  });
875
891
  expect(mockLocalCommandRunner.runCommand.mock.calls).toHaveLength(1);
876
892
  expect(mockLocalCommandRunner.runCommand.mock.calls[0]).toEqual([
@@ -916,6 +932,7 @@ describe('StartPreparationUseCase', () => {
916
932
  maximumPreparingIssuesCount: null,
917
933
  utilizationPercentageThreshold: 90,
918
934
  allowedIssueAuthors: null,
935
+ codexHomeCandidates: null,
919
936
  });
920
937
  expect(mockLocalCommandRunner.runCommand.mock.calls).toHaveLength(1);
921
938
  expect(mockLocalCommandRunner.runCommand.mock.calls[0]).toEqual([
@@ -964,6 +981,7 @@ describe('StartPreparationUseCase', () => {
964
981
  maximumPreparingIssuesCount: null,
965
982
  utilizationPercentageThreshold: 90,
966
983
  allowedIssueAuthors: null,
984
+ codexHomeCandidates: null,
967
985
  });
968
986
  expect(consoleErrorSpy).toHaveBeenCalledWith(
969
987
  'No LLM model configured for issue url1. Provide --defaultLlmModelName or add an llm-model: label.',
@@ -1012,6 +1030,7 @@ describe('StartPreparationUseCase', () => {
1012
1030
  maximumPreparingIssuesCount: null,
1013
1031
  utilizationPercentageThreshold: 90,
1014
1032
  allowedIssueAuthors: null,
1033
+ codexHomeCandidates: null,
1015
1034
  });
1016
1035
  expect(consoleErrorSpy).toHaveBeenCalledWith(
1017
1036
  'No LLM model configured for issue url1. Provide --defaultLlmModelName or add an llm-model: label.',
@@ -1062,6 +1081,7 @@ describe('StartPreparationUseCase', () => {
1062
1081
  maximumPreparingIssuesCount: null,
1063
1082
  utilizationPercentageThreshold: 90,
1064
1083
  allowedIssueAuthors: null,
1084
+ codexHomeCandidates: null,
1065
1085
  });
1066
1086
  // No issues are in 'Awaiting Workspace' status, so no updates should happen
1067
1087
  expect(mockIssueRepository.update.mock.calls).toHaveLength(0);
@@ -1097,6 +1117,7 @@ describe('StartPreparationUseCase', () => {
1097
1117
  maximumPreparingIssuesCount: 3,
1098
1118
  utilizationPercentageThreshold: 90,
1099
1119
  allowedIssueAuthors: null,
1120
+ codexHomeCandidates: null,
1100
1121
  });
1101
1122
  expect(mockIssueRepository.update.mock.calls).toHaveLength(3);
1102
1123
  expect(mockLocalCommandRunner.runCommand.mock.calls).toHaveLength(3);
@@ -1131,6 +1152,7 @@ describe('StartPreparationUseCase', () => {
1131
1152
  maximumPreparingIssuesCount: null,
1132
1153
  utilizationPercentageThreshold: 90,
1133
1154
  allowedIssueAuthors: null,
1155
+ codexHomeCandidates: null,
1134
1156
  });
1135
1157
  expect(mockIssueRepository.update.mock.calls).toHaveLength(6);
1136
1158
  expect(mockLocalCommandRunner.runCommand.mock.calls).toHaveLength(6);
@@ -1198,6 +1220,7 @@ describe('StartPreparationUseCase', () => {
1198
1220
  maximumPreparingIssuesCount: null,
1199
1221
  utilizationPercentageThreshold: 90,
1200
1222
  allowedIssueAuthors: null,
1223
+ codexHomeCandidates: null,
1201
1224
  });
1202
1225
 
1203
1226
  expect(mockIssueRepository.update.mock.calls).toHaveLength(2);
@@ -1238,6 +1261,7 @@ describe('StartPreparationUseCase', () => {
1238
1261
  maximumPreparingIssuesCount: null,
1239
1262
  utilizationPercentageThreshold: 90,
1240
1263
  allowedIssueAuthors: null,
1264
+ codexHomeCandidates: null,
1241
1265
  });
1242
1266
 
1243
1267
  expect(mockIssueRepository.update.mock.calls).toHaveLength(0);
@@ -1281,6 +1305,7 @@ describe('StartPreparationUseCase', () => {
1281
1305
  maximumPreparingIssuesCount: null,
1282
1306
  utilizationPercentageThreshold: 90,
1283
1307
  allowedIssueAuthors: null,
1308
+ codexHomeCandidates: null,
1284
1309
  });
1285
1310
 
1286
1311
  expect(mockIssueRepository.update.mock.calls).toHaveLength(1);
@@ -1323,6 +1348,7 @@ describe('StartPreparationUseCase', () => {
1323
1348
  maximumPreparingIssuesCount: null,
1324
1349
  utilizationPercentageThreshold: 90,
1325
1350
  allowedIssueAuthors: null,
1351
+ codexHomeCandidates: null,
1326
1352
  });
1327
1353
 
1328
1354
  const weeklyUtilization = 91;
@@ -1369,6 +1395,7 @@ describe('StartPreparationUseCase', () => {
1369
1395
  maximumPreparingIssuesCount: null,
1370
1396
  utilizationPercentageThreshold: 90,
1371
1397
  allowedIssueAuthors: null,
1398
+ codexHomeCandidates: null,
1372
1399
  });
1373
1400
 
1374
1401
  expect(mockIssueRepository.update.mock.calls).toHaveLength(0);
@@ -1410,6 +1437,7 @@ describe('StartPreparationUseCase', () => {
1410
1437
  maximumPreparingIssuesCount: null,
1411
1438
  utilizationPercentageThreshold: 100,
1412
1439
  allowedIssueAuthors: null,
1440
+ codexHomeCandidates: null,
1413
1441
  });
1414
1442
 
1415
1443
  expect(mockIssueRepository.update.mock.calls).toHaveLength(6);
@@ -1446,6 +1474,7 @@ describe('StartPreparationUseCase', () => {
1446
1474
  maximumPreparingIssuesCount: null,
1447
1475
  utilizationPercentageThreshold: 90,
1448
1476
  allowedIssueAuthors: null,
1477
+ codexHomeCandidates: null,
1449
1478
  });
1450
1479
 
1451
1480
  expect(mockProjectRepository.getByUrl).not.toHaveBeenCalled();
@@ -1489,6 +1518,7 @@ describe('StartPreparationUseCase', () => {
1489
1518
  maximumPreparingIssuesCount: null,
1490
1519
  utilizationPercentageThreshold: 90,
1491
1520
  allowedIssueAuthors: null,
1521
+ codexHomeCandidates: null,
1492
1522
  });
1493
1523
 
1494
1524
  const normalizedUtilizationBeyondThreshold = (95 - 90) / (100 - 90);
@@ -1518,6 +1548,7 @@ describe('StartPreparationUseCase', () => {
1518
1548
  maximumPreparingIssuesCount: null,
1519
1549
  utilizationPercentageThreshold: 90,
1520
1550
  allowedIssueAuthors: null,
1551
+ codexHomeCandidates: null,
1521
1552
  }),
1522
1553
  ).rejects.toThrow('Claude credentials file not found');
1523
1554
 
@@ -1555,6 +1586,7 @@ describe('StartPreparationUseCase', () => {
1555
1586
  maximumPreparingIssuesCount: null,
1556
1587
  utilizationPercentageThreshold: 70,
1557
1588
  allowedIssueAuthors: null,
1589
+ codexHomeCandidates: null,
1558
1590
  });
1559
1591
 
1560
1592
  expect(mockIssueRepository.update.mock.calls).toHaveLength(0);
@@ -1597,6 +1629,7 @@ describe('StartPreparationUseCase', () => {
1597
1629
  maximumPreparingIssuesCount: null,
1598
1630
  utilizationPercentageThreshold: 80,
1599
1631
  allowedIssueAuthors: null,
1632
+ codexHomeCandidates: null,
1600
1633
  });
1601
1634
 
1602
1635
  expect(mockIssueRepository.update.mock.calls).toHaveLength(1);
@@ -1644,6 +1677,7 @@ describe('StartPreparationUseCase', () => {
1644
1677
  maximumPreparingIssuesCount: null,
1645
1678
  utilizationPercentageThreshold: 90,
1646
1679
  allowedIssueAuthors: null,
1680
+ codexHomeCandidates: null,
1647
1681
  });
1648
1682
 
1649
1683
  expect(mockIssueRepository.update.mock.calls).toHaveLength(1);
@@ -1702,6 +1736,7 @@ describe('StartPreparationUseCase', () => {
1702
1736
  maximumPreparingIssuesCount: null,
1703
1737
  utilizationPercentageThreshold: 90,
1704
1738
  allowedIssueAuthors: null,
1739
+ codexHomeCandidates: null,
1705
1740
  });
1706
1741
 
1707
1742
  expect(mockIssueRepository.update.mock.calls).toHaveLength(1);
@@ -1763,6 +1798,7 @@ describe('StartPreparationUseCase', () => {
1763
1798
  maximumPreparingIssuesCount: null,
1764
1799
  utilizationPercentageThreshold: 90,
1765
1800
  allowedIssueAuthors: null,
1801
+ codexHomeCandidates: null,
1766
1802
  });
1767
1803
 
1768
1804
  expect(mockIssueRepository.update.mock.calls).toHaveLength(1);
@@ -1813,6 +1849,7 @@ describe('StartPreparationUseCase', () => {
1813
1849
  maximumPreparingIssuesCount: null,
1814
1850
  utilizationPercentageThreshold: 90,
1815
1851
  allowedIssueAuthors: null,
1852
+ codexHomeCandidates: null,
1816
1853
  });
1817
1854
 
1818
1855
  expect(mockIssueRepository.update.mock.calls).toHaveLength(1);
@@ -1863,6 +1900,7 @@ describe('StartPreparationUseCase', () => {
1863
1900
  maximumPreparingIssuesCount: null,
1864
1901
  utilizationPercentageThreshold: 90,
1865
1902
  allowedIssueAuthors: null,
1903
+ codexHomeCandidates: null,
1866
1904
  });
1867
1905
 
1868
1906
  expect(mockIssueRepository.update.mock.calls).toHaveLength(1);
@@ -1913,6 +1951,7 @@ describe('StartPreparationUseCase', () => {
1913
1951
  maximumPreparingIssuesCount: null,
1914
1952
  utilizationPercentageThreshold: 90,
1915
1953
  allowedIssueAuthors: null,
1954
+ codexHomeCandidates: null,
1916
1955
  });
1917
1956
 
1918
1957
  expect(mockIssueRepository.update.mock.calls).toHaveLength(1);
@@ -1970,6 +2009,7 @@ describe('StartPreparationUseCase', () => {
1970
2009
  maximumPreparingIssuesCount: null,
1971
2010
  utilizationPercentageThreshold: 90,
1972
2011
  allowedIssueAuthors: ['user1', 'user2'],
2012
+ codexHomeCandidates: null,
1973
2013
  });
1974
2014
 
1975
2015
  expect(mockIssueRepository.update.mock.calls).toHaveLength(1);
@@ -2018,6 +2058,7 @@ describe('StartPreparationUseCase', () => {
2018
2058
  maximumPreparingIssuesCount: null,
2019
2059
  utilizationPercentageThreshold: 90,
2020
2060
  allowedIssueAuthors: null,
2061
+ codexHomeCandidates: null,
2021
2062
  });
2022
2063
 
2023
2064
  expect(mockIssueRepository.update.mock.calls).toHaveLength(2);
@@ -2065,6 +2106,7 @@ describe('StartPreparationUseCase', () => {
2065
2106
  maximumPreparingIssuesCount: null,
2066
2107
  utilizationPercentageThreshold: 90,
2067
2108
  allowedIssueAuthors: ['user1', 'user2'],
2109
+ codexHomeCandidates: null,
2068
2110
  });
2069
2111
 
2070
2112
  expect(mockIssueRepository.update.mock.calls).toHaveLength(2);
@@ -2114,9 +2156,244 @@ describe('StartPreparationUseCase', () => {
2114
2156
  maximumPreparingIssuesCount: null,
2115
2157
  utilizationPercentageThreshold: 90,
2116
2158
  allowedIssueAuthors: ['user1'],
2159
+ codexHomeCandidates: null,
2117
2160
  });
2118
2161
 
2119
2162
  expect(mockIssueRepository.update.mock.calls).toHaveLength(1);
2120
2163
  expect(mockLocalCommandRunner.runCommand.mock.calls).toHaveLength(1);
2121
2164
  });
2165
+
2166
+ it('should not pass --codexHome when codexHomeCandidates is null', async () => {
2167
+ const awaitingIssues: Issue[] = [
2168
+ createMockIssue({
2169
+ url: 'url1',
2170
+ title: 'Issue 1',
2171
+ labels: ['category:impl'],
2172
+ status: 'Awaiting Workspace',
2173
+ }),
2174
+ ];
2175
+ mockProjectRepository.getByUrl.mockResolvedValue(mockProject);
2176
+ mockIssueRepository.getStoryObjectMap.mockResolvedValue(
2177
+ createMockStoryObjectMap(awaitingIssues),
2178
+ );
2179
+ mockIssueRepository.getAllOpened.mockResolvedValueOnce(awaitingIssues);
2180
+ mockLocalCommandRunner.runCommand.mockResolvedValue({
2181
+ stdout: '',
2182
+ stderr: '',
2183
+ exitCode: 0,
2184
+ });
2185
+
2186
+ await useCase.run({
2187
+ projectUrl: 'https://github.com/user/repo',
2188
+ awaitingWorkspaceStatus: 'Awaiting Workspace',
2189
+ preparationStatus: 'Preparation',
2190
+ defaultAgentName: 'agent1',
2191
+ defaultLlmModelName: 'claude-opus',
2192
+ defaultLlmAgentName: null,
2193
+ configFilePath: '/path/to/config.yml',
2194
+ maximumPreparingIssuesCount: null,
2195
+ utilizationPercentageThreshold: 90,
2196
+ allowedIssueAuthors: null,
2197
+ codexHomeCandidates: null,
2198
+ });
2199
+
2200
+ expect(mockLocalCommandRunner.runCommand.mock.calls).toHaveLength(1);
2201
+ expect(mockLocalCommandRunner.runCommand.mock.calls[0]).toEqual([
2202
+ 'aw',
2203
+ [
2204
+ 'url1',
2205
+ 'impl',
2206
+ 'claude-opus',
2207
+ '--configFilePath',
2208
+ '/path/to/config.yml',
2209
+ '--branch',
2210
+ 'i1',
2211
+ ],
2212
+ ]);
2213
+ });
2214
+
2215
+ it('should not pass --codexHome when codexHomeCandidates is empty array', async () => {
2216
+ const awaitingIssues: Issue[] = [
2217
+ createMockIssue({
2218
+ url: 'url1',
2219
+ title: 'Issue 1',
2220
+ labels: ['category:impl'],
2221
+ status: 'Awaiting Workspace',
2222
+ }),
2223
+ ];
2224
+ mockProjectRepository.getByUrl.mockResolvedValue(mockProject);
2225
+ mockIssueRepository.getStoryObjectMap.mockResolvedValue(
2226
+ createMockStoryObjectMap(awaitingIssues),
2227
+ );
2228
+ mockIssueRepository.getAllOpened.mockResolvedValueOnce(awaitingIssues);
2229
+ mockLocalCommandRunner.runCommand.mockResolvedValue({
2230
+ stdout: '',
2231
+ stderr: '',
2232
+ exitCode: 0,
2233
+ });
2234
+
2235
+ await useCase.run({
2236
+ projectUrl: 'https://github.com/user/repo',
2237
+ awaitingWorkspaceStatus: 'Awaiting Workspace',
2238
+ preparationStatus: 'Preparation',
2239
+ defaultAgentName: 'agent1',
2240
+ defaultLlmModelName: 'claude-opus',
2241
+ defaultLlmAgentName: null,
2242
+ configFilePath: '/path/to/config.yml',
2243
+ maximumPreparingIssuesCount: null,
2244
+ utilizationPercentageThreshold: 90,
2245
+ allowedIssueAuthors: null,
2246
+ codexHomeCandidates: [],
2247
+ });
2248
+
2249
+ expect(mockLocalCommandRunner.runCommand.mock.calls).toHaveLength(1);
2250
+ expect(mockLocalCommandRunner.runCommand.mock.calls[0]).toEqual([
2251
+ 'aw',
2252
+ [
2253
+ 'url1',
2254
+ 'impl',
2255
+ 'claude-opus',
2256
+ '--configFilePath',
2257
+ '/path/to/config.yml',
2258
+ '--branch',
2259
+ 'i1',
2260
+ ],
2261
+ ]);
2262
+ });
2263
+
2264
+ it('should pass --codexHome with the candidate when codexHomeCandidates has one entry', async () => {
2265
+ const awaitingIssues: Issue[] = [
2266
+ createMockIssue({
2267
+ url: 'url1',
2268
+ title: 'Issue 1',
2269
+ labels: ['category:impl'],
2270
+ status: 'Awaiting Workspace',
2271
+ }),
2272
+ ];
2273
+ mockProjectRepository.getByUrl.mockResolvedValue(mockProject);
2274
+ mockIssueRepository.getStoryObjectMap.mockResolvedValue(
2275
+ createMockStoryObjectMap(awaitingIssues),
2276
+ );
2277
+ mockIssueRepository.getAllOpened.mockResolvedValueOnce(awaitingIssues);
2278
+ mockLocalCommandRunner.runCommand.mockResolvedValue({
2279
+ stdout: '',
2280
+ stderr: '',
2281
+ exitCode: 0,
2282
+ });
2283
+
2284
+ await useCase.run({
2285
+ projectUrl: 'https://github.com/user/repo',
2286
+ awaitingWorkspaceStatus: 'Awaiting Workspace',
2287
+ preparationStatus: 'Preparation',
2288
+ defaultAgentName: 'agent1',
2289
+ defaultLlmModelName: 'claude-opus',
2290
+ defaultLlmAgentName: null,
2291
+ configFilePath: '/path/to/config.yml',
2292
+ maximumPreparingIssuesCount: null,
2293
+ utilizationPercentageThreshold: 90,
2294
+ allowedIssueAuthors: null,
2295
+ codexHomeCandidates: ['.codex-dev1'],
2296
+ });
2297
+
2298
+ expect(mockLocalCommandRunner.runCommand.mock.calls).toHaveLength(1);
2299
+ expect(mockLocalCommandRunner.runCommand.mock.calls[0]).toEqual([
2300
+ 'aw',
2301
+ [
2302
+ 'url1',
2303
+ 'impl',
2304
+ 'claude-opus',
2305
+ '--configFilePath',
2306
+ '/path/to/config.yml',
2307
+ '--branch',
2308
+ 'i1',
2309
+ '--codexHome',
2310
+ '.codex-dev1',
2311
+ ],
2312
+ ]);
2313
+ });
2314
+
2315
+ it('should cycle through codexHomeCandidates across multiple issues', async () => {
2316
+ const awaitingIssues: Issue[] = [
2317
+ createMockIssue({
2318
+ url: 'url1',
2319
+ title: 'Issue 1',
2320
+ labels: ['category:impl'],
2321
+ status: 'Awaiting Workspace',
2322
+ number: 1,
2323
+ itemId: 'item-1',
2324
+ }),
2325
+ createMockIssue({
2326
+ url: 'url2',
2327
+ title: 'Issue 2',
2328
+ labels: ['category:impl'],
2329
+ status: 'Awaiting Workspace',
2330
+ number: 2,
2331
+ itemId: 'item-2',
2332
+ }),
2333
+ createMockIssue({
2334
+ url: 'url3',
2335
+ title: 'Issue 3',
2336
+ labels: ['category:impl'],
2337
+ status: 'Awaiting Workspace',
2338
+ number: 3,
2339
+ itemId: 'item-3',
2340
+ }),
2341
+ ];
2342
+ mockProjectRepository.getByUrl.mockResolvedValue(mockProject);
2343
+ mockIssueRepository.getStoryObjectMap.mockResolvedValue(
2344
+ createMockStoryObjectMap(awaitingIssues),
2345
+ );
2346
+ mockIssueRepository.getAllOpened.mockResolvedValueOnce(awaitingIssues);
2347
+ mockLocalCommandRunner.runCommand.mockResolvedValue({
2348
+ stdout: '',
2349
+ stderr: '',
2350
+ exitCode: 0,
2351
+ });
2352
+
2353
+ await useCase.run({
2354
+ projectUrl: 'https://github.com/user/repo',
2355
+ awaitingWorkspaceStatus: 'Awaiting Workspace',
2356
+ preparationStatus: 'Preparation',
2357
+ defaultAgentName: 'agent1',
2358
+ defaultLlmModelName: 'claude-opus',
2359
+ defaultLlmAgentName: null,
2360
+ configFilePath: '/path/to/config.yml',
2361
+ maximumPreparingIssuesCount: null,
2362
+ utilizationPercentageThreshold: 90,
2363
+ allowedIssueAuthors: null,
2364
+ codexHomeCandidates: ['.codex-dev1', '.codex-dev2'],
2365
+ });
2366
+
2367
+ expect(mockLocalCommandRunner.runCommand.mock.calls).toHaveLength(3);
2368
+ expect(mockLocalCommandRunner.runCommand.mock.calls[0][1]).toContain(
2369
+ '--codexHome',
2370
+ );
2371
+ expect(
2372
+ mockLocalCommandRunner.runCommand.mock.calls[0][1][
2373
+ mockLocalCommandRunner.runCommand.mock.calls[0][1].indexOf(
2374
+ '--codexHome',
2375
+ ) + 1
2376
+ ],
2377
+ ).toBe('.codex-dev1');
2378
+ expect(mockLocalCommandRunner.runCommand.mock.calls[1][1]).toContain(
2379
+ '--codexHome',
2380
+ );
2381
+ expect(
2382
+ mockLocalCommandRunner.runCommand.mock.calls[1][1][
2383
+ mockLocalCommandRunner.runCommand.mock.calls[1][1].indexOf(
2384
+ '--codexHome',
2385
+ ) + 1
2386
+ ],
2387
+ ).toBe('.codex-dev2');
2388
+ expect(mockLocalCommandRunner.runCommand.mock.calls[2][1]).toContain(
2389
+ '--codexHome',
2390
+ );
2391
+ expect(
2392
+ mockLocalCommandRunner.runCommand.mock.calls[2][1][
2393
+ mockLocalCommandRunner.runCommand.mock.calls[2][1].indexOf(
2394
+ '--codexHome',
2395
+ ) + 1
2396
+ ],
2397
+ ).toBe('.codex-dev1');
2398
+ });
2122
2399
  });
@@ -32,6 +32,7 @@ export class StartPreparationUseCase {
32
32
  maximumPreparingIssuesCount: number | null;
33
33
  utilizationPercentageThreshold: number;
34
34
  allowedIssueAuthors: string[] | null;
35
+ codexHomeCandidates: string[] | null;
35
36
  }): Promise<void> => {
36
37
  const claudeUsages = await this.claudeRepository.getUsage();
37
38
  const weeklyWindowHours = 168;
@@ -103,6 +104,7 @@ export class StartPreparationUseCase {
103
104
  (issue) => issue.status === params.preparationStatus,
104
105
  ).length;
105
106
  let updatedCurrentPreparationIssueCount = currentPreparationIssueCount;
107
+ let startedInThisRunCount = 0;
106
108
 
107
109
  const now = new Date();
108
110
  const currentHour = now.getHours();
@@ -212,7 +214,7 @@ export class StartPreparationUseCase {
212
214
  issue.status = params.preparationStatus;
213
215
  await this.issueRepository.update(issue, project);
214
216
 
215
- await this.localCommandRunner.runCommand('aw', [
217
+ const awArgs: string[] = [
216
218
  issue.url,
217
219
  agent,
218
220
  model,
@@ -220,7 +222,19 @@ export class StartPreparationUseCase {
220
222
  params.configFilePath,
221
223
  '--branch',
222
224
  branchName,
223
- ]);
225
+ ];
226
+ if (
227
+ params.codexHomeCandidates !== null &&
228
+ params.codexHomeCandidates.length > 0
229
+ ) {
230
+ const codexHome =
231
+ params.codexHomeCandidates[
232
+ startedInThisRunCount % params.codexHomeCandidates.length
233
+ ];
234
+ awArgs.push('--codexHome', codexHome);
235
+ }
236
+ await this.localCommandRunner.runCommand('aw', awArgs);
237
+ startedInThisRunCount++;
224
238
  updatedCurrentPreparationIssueCount++;
225
239
  }
226
240
  };
@@ -16,6 +16,7 @@ type ConfigFile = {
16
16
  workflowBlockerResolvedWebhookUrl?: string;
17
17
  projectName?: string;
18
18
  preparationProcessCheckCommand?: string;
19
+ codexHomeCandidates?: string[];
19
20
  };
20
21
  export declare const loadConfigFile: (configFilePath: string) => ConfigFile;
21
22
  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;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,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,8BAA8B,CAAC,EAAE,MAAM,CAAC;IACxC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,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;AA+CF,eAAO,MAAM,cAAc,GAAI,gBAAgB,MAAM,KAAG,UAiDvD,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,QAAQ,MAAM,KAAG,UAqDzD,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,YAAY,UAAU,EACtB,cAAc,UAAU,EACxB,iBAAiB,UAAU,KAC1B,UAuDD,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,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,8BAA8B,CAAC,EAAE,MAAM,CAAC;IACxC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,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;IACxC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;CAChC,CAAC;AAiEF,eAAO,MAAM,cAAc,GAAI,gBAAgB,MAAM,KAAG,UAkDvD,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,QAAQ,MAAM,KAAG,UAsDzD,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,YAAY,UAAU,EACtB,cAAc,UAAU,EACxB,iBAAiB,UAAU,KAC1B,UA2DD,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"}
@@ -73,6 +73,7 @@ export declare class HandleScheduledEventUseCase {
73
73
  utilizationPercentageThreshold?: number;
74
74
  allowedIssueAuthors?: string[] | null;
75
75
  preparationProcessCheckCommand?: string;
76
+ codexHomeCandidates?: string[] | null;
76
77
  } | null;
77
78
  notifyFinishedPreparation?: {
78
79
  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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"}
@@ -19,6 +19,7 @@ export declare class StartPreparationUseCase {
19
19
  maximumPreparingIssuesCount: number | null;
20
20
  utilizationPercentageThreshold: number;
21
21
  allowedIssueAuthors: string[] | null;
22
+ codexHomeCandidates: string[] | null;
22
23
  }) => Promise<void>;
23
24
  }
24
25
  //# sourceMappingURL=StartPreparationUseCase.d.ts.map
@@ -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;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAEzE,qBAAa,uBAAuB;IAEhC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAIlC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAQhC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBAblB,iBAAiB,EAAE,IAAI,CACtC,iBAAiB,EACjB,UAAU,GAAG,eAAe,CAC7B,EACgB,eAAe,EAAE,IAAI,CACpC,eAAe,EACb,cAAc,GACd,mBAAmB,GACnB,QAAQ,GACR,oBAAoB,GACpB,oBAAoB,CACvB,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,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;QACnC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;QACnC,cAAc,EAAE,MAAM,CAAC;QACvB,2BAA2B,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3C,8BAA8B,EAAE,MAAM,CAAC;QACvC,mBAAmB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;KACtC,KAAG,OAAO,CAAC,IAAI,CAAC,CA+Lf;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;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAEzE,qBAAa,uBAAuB;IAEhC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAIlC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAQhC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBAblB,iBAAiB,EAAE,IAAI,CACtC,iBAAiB,EACjB,UAAU,GAAG,eAAe,CAC7B,EACgB,eAAe,EAAE,IAAI,CACpC,eAAe,EACb,cAAc,GACd,mBAAmB,GACnB,QAAQ,GACR,oBAAoB,GACpB,oBAAoB,CACvB,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,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;QACnC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;QACnC,cAAc,EAAE,MAAM,CAAC;QACvB,2BAA2B,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3C,8BAA8B,EAAE,MAAM,CAAC;QACvC,mBAAmB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACrC,mBAAmB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;KACtC,KAAG,OAAO,CAAC,IAAI,CAAC,CA4Mf;CACH"}