github-issue-tower-defence-management 2.1.2 → 2.3.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 (65) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +8 -0
  3. package/bin/adapter/entry-points/cli/fleetConfig.js +30 -12
  4. package/bin/adapter/entry-points/cli/fleetConfig.js.map +1 -1
  5. package/bin/adapter/entry-points/cli/index.js +5 -0
  6. package/bin/adapter/entry-points/cli/index.js.map +1 -1
  7. package/bin/adapter/entry-points/console/consoleDoneStore.js +0 -2
  8. package/bin/adapter/entry-points/console/consoleDoneStore.js.map +1 -1
  9. package/bin/adapter/entry-points/console/consoleTabNames.js +0 -1
  10. package/bin/adapter/entry-points/console/consoleTabNames.js.map +1 -1
  11. package/bin/adapter/entry-points/console/ui-dist/assets/index-C5cOzhyn.js +86 -0
  12. package/bin/adapter/entry-points/console/ui-dist/index.html +1 -1
  13. package/bin/domain/usecases/StartPreparationUseCase.js +13 -12
  14. package/bin/domain/usecases/StartPreparationUseCase.js.map +1 -1
  15. package/bin/domain/usecases/console/GenerateConsoleListsUseCase.js +0 -15
  16. package/bin/domain/usecases/console/GenerateConsoleListsUseCase.js.map +1 -1
  17. package/package.json +1 -1
  18. package/src/adapter/entry-points/cli/fleetConfig.test.ts +96 -0
  19. package/src/adapter/entry-points/cli/fleetConfig.ts +51 -6
  20. package/src/adapter/entry-points/cli/index.test.ts +2 -0
  21. package/src/adapter/entry-points/cli/index.ts +16 -0
  22. package/src/adapter/entry-points/console/consoleDataDelivery.test.ts +15 -9
  23. package/src/adapter/entry-points/console/consoleDoneStore.ts +0 -2
  24. package/src/adapter/entry-points/console/consoleItemUrlLookup.test.ts +1 -1
  25. package/src/adapter/entry-points/console/consoleTabNames.ts +0 -1
  26. package/src/adapter/entry-points/console/ui/e2e/consoleScenario.spec.ts +7 -115
  27. package/src/adapter/entry-points/console/ui/e2e/consoleTestHarness.ts +0 -16
  28. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleItemDetail.stories.tsx +1 -3
  29. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTabList.stories.tsx +0 -4
  30. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTabList.test.tsx +0 -1
  31. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleOperationMenu.stories.tsx +0 -10
  32. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleOperationMenu.test.tsx +2 -28
  33. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleOperationMenu.tsx +0 -10
  34. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleNavigation.test.ts +18 -14
  35. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleOverlay.test.ts +2 -2
  36. package/src/adapter/entry-points/console/ui/src/features/console/logic/actionToast.test.ts +1 -1
  37. package/src/adapter/entry-points/console/ui/src/features/console/logic/grouping.test.ts +7 -7
  38. package/src/adapter/entry-points/console/ui/src/features/console/logic/overlay.test.ts +10 -8
  39. package/src/adapter/entry-points/console/ui/src/features/console/logic/tabAdvance.test.ts +9 -11
  40. package/src/adapter/entry-points/console/ui/src/features/console/logic/types.ts +1 -12
  41. package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsoleItemDetailContainer.test.tsx +0 -12
  42. package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsoleItemDetailContainer.tsx +0 -3
  43. package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsolePage.tsx +10 -57
  44. package/src/adapter/entry-points/console/ui-dist/assets/index-C5cOzhyn.js +86 -0
  45. package/src/adapter/entry-points/console/ui-dist/index.html +1 -1
  46. package/src/adapter/entry-points/console/webServer.test.ts +2 -2
  47. package/src/adapter/entry-points/handlers/consoleListsWriter.test.ts +0 -1
  48. package/src/domain/usecases/StartPreparationUseCase.test.ts +97 -0
  49. package/src/domain/usecases/StartPreparationUseCase.ts +13 -3
  50. package/src/domain/usecases/console/GenerateConsoleListsUseCase.test.ts +2 -160
  51. package/src/domain/usecases/console/GenerateConsoleListsUseCase.ts +0 -37
  52. package/types/adapter/entry-points/cli/fleetConfig.d.ts +6 -0
  53. package/types/adapter/entry-points/cli/fleetConfig.d.ts.map +1 -1
  54. package/types/adapter/entry-points/cli/index.d.ts.map +1 -1
  55. package/types/adapter/entry-points/console/consoleDoneStore.d.ts.map +1 -1
  56. package/types/adapter/entry-points/console/consoleTabNames.d.ts.map +1 -1
  57. package/types/domain/usecases/StartPreparationUseCase.d.ts +3 -1
  58. package/types/domain/usecases/StartPreparationUseCase.d.ts.map +1 -1
  59. package/types/domain/usecases/console/GenerateConsoleListsUseCase.d.ts +1 -11
  60. package/types/domain/usecases/console/GenerateConsoleListsUseCase.d.ts.map +1 -1
  61. package/bin/adapter/entry-points/console/ui-dist/assets/index-BVyeR7xJ.js +0 -86
  62. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleStoryActions.stories.tsx +0 -80
  63. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleStoryActions.test.tsx +0 -39
  64. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleStoryActions.tsx +0 -42
  65. package/src/adapter/entry-points/console/ui-dist/assets/index-BVyeR7xJ.js +0 -86
@@ -4,7 +4,7 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>TDPM Console</title>
7
- <script type="module" crossorigin src="/assets/index-BVyeR7xJ.js"></script>
7
+ <script type="module" crossorigin src="/assets/index-C5cOzhyn.js"></script>
8
8
  <link rel="stylesheet" crossorigin href="/assets/index-CLHvrafO.css">
9
9
  </head>
10
10
  <body>
@@ -82,7 +82,7 @@ describe('webServer pure helpers', () => {
82
82
  it('matches a per-project tab route for every list tab', () => {
83
83
  expect(isConsoleAppRoute('/projects/acme/workflow-blocker')).toBe(true);
84
84
  expect(isConsoleAppRoute('/projects/acme/prs')).toBe(true);
85
- expect(isConsoleAppRoute('/projects/globex/triage')).toBe(true);
85
+ expect(isConsoleAppRoute('/projects/globex/todo-by-agent')).toBe(true);
86
86
  expect(isConsoleAppRoute('/projects/initech/todo-by-human')).toBe(true);
87
87
  expect(isConsoleAppRoute('/projects/umbrella/failed-preparation')).toBe(
88
88
  true,
@@ -379,7 +379,7 @@ describe('webServer integration', () => {
379
379
  port: 0,
380
380
  });
381
381
  try {
382
- const projectRoot = await requestServer(server, '/projects/acme/triage');
382
+ const projectRoot = await requestServer(server, '/projects/acme/prs');
383
383
  expect(projectRoot.statusCode).toBe(200);
384
384
  expect(projectRoot.body).toContain('TDPM Console');
385
385
  } finally {
@@ -99,7 +99,6 @@ describe('writeConsoleLists', () => {
99
99
  for (const tab of [
100
100
  'workflow-blocker',
101
101
  'prs',
102
- 'triage',
103
102
  'failed-preparation',
104
103
  'todo-by-human',
105
104
  'todo-by-agent',
@@ -7393,6 +7393,103 @@ describe('StartPreparationUseCase.getTokenConcurrentLimit', () => {
7393
7393
  it('never lets a selection weight take the limit below one slot', () => {
7394
7394
  expect(useCase.getTokenConcurrentLimit(0.1, 0.1, 0.01)).toBe(1);
7395
7395
  });
7396
+
7397
+ it('uses normalConcurrentLimit as the full-speed ceiling when both utilizations are low', () => {
7398
+ expect(useCase.getTokenConcurrentLimit(0.1, 0.1, undefined, 10)).toBe(10);
7399
+ });
7400
+
7401
+ it('tapers from normalConcurrentLimit when utilization is above the threshold', () => {
7402
+ expect(useCase.getTokenConcurrentLimit(0.1, 0.9, undefined, 10)).toBe(5);
7403
+ });
7404
+ });
7405
+
7406
+ describe('StartPreparationUseCase.run normalConcurrentLimit', () => {
7407
+ it('applies a custom normalConcurrentLimit to cap token concurrency per token', async () => {
7408
+ const mockProject = createMockProject();
7409
+ const awaitingIssue = createMockIssue({
7410
+ url: 'https://github.com/user/repo/issues/1',
7411
+ status: 'Awaiting Workspace',
7412
+ story: 'some-story',
7413
+ });
7414
+ const mockProjectRepository = {
7415
+ getByUrl: jest.fn().mockResolvedValue(mockProject),
7416
+ createField: jest.fn().mockResolvedValue(undefined),
7417
+ updateAgentList: jest.fn().mockResolvedValue([]),
7418
+ };
7419
+ const mockIssueRepository = {
7420
+ getStoryObjectMap: jest
7421
+ .fn()
7422
+ .mockResolvedValue(createMockStoryObjectMap([awaitingIssue])),
7423
+ getAllOpened: jest.fn().mockResolvedValue([awaitingIssue]),
7424
+ updateStatus: jest.fn().mockResolvedValue(undefined),
7425
+ findRelatedOpenPRs: jest.fn().mockResolvedValue([]),
7426
+ getOpenPullRequest: jest.fn().mockResolvedValue(null),
7427
+ closePullRequest: jest.fn().mockResolvedValue(undefined),
7428
+ deletePullRequestBranch: jest.fn().mockResolvedValue(undefined),
7429
+ createCommentByUrl: jest.fn().mockResolvedValue(undefined),
7430
+ setIssueAgentField: jest.fn().mockResolvedValue(undefined),
7431
+ removeLabel: jest.fn().mockResolvedValue(undefined),
7432
+ };
7433
+ const mockLocalCommandRunner = {
7434
+ runCommand: jest
7435
+ .fn()
7436
+ .mockResolvedValue({ stdout: '', stderr: '', exitCode: 0 }),
7437
+ spawnInteractive: jest.fn(),
7438
+ };
7439
+ const token = 'token-a';
7440
+ const mockClaudeTokenUsageRepository = {
7441
+ ensureObservable: jest.fn().mockResolvedValue(undefined),
7442
+ getAvailableTokenUsages: jest.fn().mockResolvedValue([
7443
+ {
7444
+ token,
7445
+ name: 'token-a',
7446
+ fiveHourUtilization: 0.0,
7447
+ sevenDayUtilization: 0.0,
7448
+ fiveHourRejected: false,
7449
+ blocked: false,
7450
+ blockedUntilEpoch: 0,
7451
+ modelWeeklyLimits: {},
7452
+ selectionWeight: undefined,
7453
+ },
7454
+ ]),
7455
+ getTokenInFlightCounts: jest.fn().mockResolvedValue({ [token]: 0 }),
7456
+ proxyBaseUrl: jest.fn().mockReturnValue('http://127.0.0.1:8787'),
7457
+ };
7458
+ const mockTakeOwnershipSpawnRepository = {
7459
+ listSpawns: jest.fn().mockReturnValue([]),
7460
+ listRunningIssueUrls: jest.fn().mockReturnValue([]),
7461
+ };
7462
+ const useCase = new StartPreparationUseCase(
7463
+ mockProjectRepository,
7464
+ mockIssueRepository,
7465
+ mockLocalCommandRunner,
7466
+ mockClaudeTokenUsageRepository,
7467
+ mockTakeOwnershipSpawnRepository,
7468
+ );
7469
+
7470
+ await useCase.run({
7471
+ projectUrl: 'https://github.com/users/user/projects/1',
7472
+ defaultAgentName: 'agent1',
7473
+ defaultLlmModelName: 'claude-opus',
7474
+ fallbackLlmModelName: null,
7475
+ defaultLlmAgentName: null,
7476
+ configFilePath: '/path/to/config.yml',
7477
+ maximumPreparingIssuesCount: 20,
7478
+ utilizationPercentageThreshold: 90,
7479
+ allowedIssueAuthors: ['testuser'],
7480
+ manager: 'manager-user',
7481
+ codexHomeCandidates: null,
7482
+ labelsAsLlmAgentName: null,
7483
+ normalConcurrentLimit: 10,
7484
+ });
7485
+
7486
+ expect(mockLocalCommandRunner.runCommand).toHaveBeenCalledTimes(1);
7487
+ expect(mockLocalCommandRunner.runCommand).toHaveBeenCalledWith(
7488
+ 'aw',
7489
+ expect.any(Array),
7490
+ expect.anything(),
7491
+ );
7492
+ });
7396
7493
  });
7397
7494
 
7398
7495
  describe('StartPreparationUseCase.fetchSpawnCandidateBranchSources', () => {
@@ -19,7 +19,7 @@ import { issueReactivationTriggerIsPending } from './issueReactivationTriggerIsP
19
19
  import { ensureAgentOptionAndGetId } from './ensureAgentOptionAndGetId';
20
20
  import { isAuthorAuthorizedForAutoStatusCheck } from './isAuthorAuthorizedForAutoStatusCheck';
21
21
 
22
- const NORMAL_CONCURRENT_LIMIT = 6;
22
+ export const NORMAL_CONCURRENT_LIMIT = 6;
23
23
  const SEVEN_DAY_THROTTLE_START_THRESHOLD = 0.8;
24
24
  const FIVE_HOUR_THROTTLE_START_THRESHOLD = 0.8;
25
25
  export const DEFAULT_FALLBACK_LLM_MODEL_NAME = 'claude-opus-4-8';
@@ -163,26 +163,30 @@ export class StartPreparationUseCase {
163
163
  private taperedConcurrentLimit = (
164
164
  utilization: number,
165
165
  throttleStartThreshold: number,
166
+ normalConcurrentLimit: number,
166
167
  ): number => {
167
168
  if (utilization < throttleStartThreshold) {
168
- return NORMAL_CONCURRENT_LIMIT;
169
+ return normalConcurrentLimit;
169
170
  }
170
171
  const remaining = (1 - utilization) / (1 - throttleStartThreshold);
171
- return Math.max(1, Math.ceil(NORMAL_CONCURRENT_LIMIT * remaining));
172
+ return Math.max(1, Math.ceil(normalConcurrentLimit * remaining));
172
173
  };
173
174
 
174
175
  getTokenConcurrentLimit = (
175
176
  fiveHourUtilization: number,
176
177
  sevenDayUtilization: number,
177
178
  selectionWeight?: number,
179
+ normalConcurrentLimit: number = NORMAL_CONCURRENT_LIMIT,
178
180
  ): number => {
179
181
  const sevenDayLimit = this.taperedConcurrentLimit(
180
182
  sevenDayUtilization,
181
183
  SEVEN_DAY_THROTTLE_START_THRESHOLD,
184
+ normalConcurrentLimit,
182
185
  );
183
186
  const fiveHourLimit = this.taperedConcurrentLimit(
184
187
  fiveHourUtilization,
185
188
  FIVE_HOUR_THROTTLE_START_THRESHOLD,
189
+ normalConcurrentLimit,
186
190
  );
187
191
  const weight = selectionWeight ?? DEFAULT_SELECTION_WEIGHT;
188
192
  return Math.max(
@@ -268,6 +272,7 @@ export class StartPreparationUseCase {
268
272
  defaultModelName: string | null,
269
273
  fallbackModelName: string | null,
270
274
  maxConcurrent: number,
275
+ normalConcurrentLimit: number,
271
276
  ): {
272
277
  tokens: string[];
273
278
  effectiveCap: number;
@@ -317,6 +322,7 @@ export class StartPreparationUseCase {
317
322
  usage.fiveHourUtilization,
318
323
  usage.sevenDayUtilization,
319
324
  usage.selectionWeight,
325
+ normalConcurrentLimit,
320
326
  ),
321
327
  secondsUntilSevenDayReset: this.secondsUntilSevenDayReset(
322
328
  usage,
@@ -414,7 +420,10 @@ export class StartPreparationUseCase {
414
420
  codexHomeCandidates: string[] | null;
415
421
  labelsAsLlmAgentName: string[] | null;
416
422
  agents?: string[] | null;
423
+ normalConcurrentLimit?: number;
417
424
  }): Promise<{ rotationOrder: RotationOrderEntry[] | null }> => {
425
+ const normalConcurrentLimit =
426
+ params.normalConcurrentLimit ?? NORMAL_CONCURRENT_LIMIT;
418
427
  const tokenUsages =
419
428
  await this.claudeTokenUsageRepository.getAvailableTokenUsages();
420
429
  let rotationTokens: string[] | null = null;
@@ -450,6 +459,7 @@ export class StartPreparationUseCase {
450
459
  params.defaultLlmModelName,
451
460
  fallbackLlmModelName,
452
461
  maximumPreparingIssuesCount,
462
+ normalConcurrentLimit,
453
463
  );
454
464
  if (selectedTokens.length === 0) {
455
465
  console.warn(
@@ -219,139 +219,6 @@ describe('GenerateConsoleListsUseCase', () => {
219
219
  ]);
220
220
  expect(result['todo-by-agent'].items).toHaveLength(0);
221
221
  });
222
-
223
- it('selects all actionable items for triage regardless of story', () => {
224
- const result = run([
225
- makeIssue({ story: 'regular / NO STORY; SET STORY FIELD' }),
226
- makeIssue({ story: 'no story please' }),
227
- makeIssue({ story: 'Story Alpha' }),
228
- makeIssue({ story: null }),
229
- ]);
230
- expect(result.triage.items).toHaveLength(4);
231
- });
232
-
233
- it('excludes In Tmux by agent items from triage regardless of story', () => {
234
- const result = run([
235
- makeIssue({ story: 'no story', status: 'In Tmux by agent' }),
236
- makeIssue({ story: 'no story', status: 'in tmux by agent' }),
237
- makeIssue({ story: 'no story', status: 'Unread' }),
238
- ]);
239
- const statuses = result.triage.items.map((item) => item.status);
240
- expect(statuses).toEqual(['Unread']);
241
- });
242
-
243
- it('excludes items with reactivation triggers from triage', () => {
244
- const result = run([
245
- makeIssue({
246
- story: 'no story',
247
- dependedIssueUrls: ['https://github.com/demo/repo/issues/99'],
248
- }),
249
- makeIssue({
250
- story: 'no story',
251
- nextActionDate: new Date('2026-08-20T00:00:00.000Z'),
252
- }),
253
- makeIssue({ story: 'no story', nextActionHour: 9 }),
254
- ]);
255
- expect(result.triage.items).toHaveLength(0);
256
- });
257
-
258
- it('includes pull requests in triage when assigned, excludes unassigned and closed', () => {
259
- const result = run([
260
- makeIssue({ story: 'no story', isPr: true }),
261
- makeIssue({ story: 'no story', assignees: ['someone-else'] }),
262
- makeIssue({ story: 'no story', isClosed: true }),
263
- ]);
264
- expect(result.triage.items).toHaveLength(1);
265
- });
266
-
267
- it('includes all actionable items in triage including those with a real story or null story', () => {
268
- const result = run([
269
- makeIssue({ story: null, status: 'Awaiting Workspace' }),
270
- makeIssue({ story: null, status: null }),
271
- makeIssue({ story: 'regular / NO STORY' }),
272
- makeIssue({ story: 'Story Alpha' }),
273
- ]);
274
- expect(result.triage.items).toHaveLength(4);
275
- });
276
-
277
- it('includes pull requests in triage, excludes unassigned and closed items with null story', () => {
278
- const result = run([
279
- makeIssue({ story: null, isPr: true }),
280
- makeIssue({ story: null, assignees: ['someone-else'] }),
281
- makeIssue({ story: null, isClosed: true }),
282
- ]);
283
- expect(result.triage.items).toHaveLength(1);
284
- });
285
-
286
- it('shows all actionable items in triage whatever status they carry, excluding In Tmux by agent', () => {
287
- const result = run([
288
- makeIssue({ story: 'no story', status: 'Unread' }),
289
- makeIssue({ story: 'no story', status: 'Awaiting Workspace' }),
290
- makeIssue({ story: 'no story', status: 'In Tmux by agent' }),
291
- makeIssue({ story: 'no story', status: 'Preparation' }),
292
- makeIssue({ story: 'no story', status: 'Failed Preparation' }),
293
- makeIssue({ story: 'no story', status: 'Awaiting Quality Check' }),
294
- makeIssue({ story: 'no story', status: 'Todo by human' }),
295
- makeIssue({ story: 'no story', status: 'Todo by agent' }),
296
- makeIssue({ story: 'no story', status: 'In Tmux by human' }),
297
- makeIssue({ story: 'no story', status: 'Done' }),
298
- makeIssue({ story: 'no story', status: 'Icebox' }),
299
- ]);
300
- expect(result.triage.items.map((item) => item.status)).toEqual([
301
- 'Unread',
302
- 'Awaiting Workspace',
303
- 'Preparation',
304
- 'Failed Preparation',
305
- 'Awaiting Quality Check',
306
- 'Todo by human',
307
- 'Todo by agent',
308
- 'In Tmux by human',
309
- 'Done',
310
- 'Icebox',
311
- ]);
312
- });
313
-
314
- it('shows items with any story in triage at every status except In Tmux by agent', () => {
315
- const result = run([
316
- makeIssue({ story: 'Story Alpha', status: 'Unread' }),
317
- makeIssue({ story: 'Story Alpha', status: 'Awaiting Workspace' }),
318
- makeIssue({ story: 'Story Alpha', status: 'In Tmux by agent' }),
319
- makeIssue({ story: 'Story Alpha', status: 'Preparation' }),
320
- makeIssue({ story: 'Story Alpha', status: 'Failed Preparation' }),
321
- makeIssue({ story: 'Story Alpha', status: 'Awaiting Quality Check' }),
322
- makeIssue({ story: 'Story Alpha', status: 'Todo by human' }),
323
- makeIssue({ story: 'Story Alpha', status: 'Todo by agent' }),
324
- makeIssue({ story: 'Story Alpha', status: 'In Tmux by human' }),
325
- makeIssue({ story: 'Story Alpha', status: 'Done' }),
326
- makeIssue({ story: 'Story Alpha', status: 'Icebox' }),
327
- ]);
328
- expect(result.triage.items).toHaveLength(10);
329
- });
330
-
331
- it('keeps a no-story item whose status is written in a different case', () => {
332
- const result = run([
333
- makeIssue({ story: 'no story', status: 'unread' }),
334
- makeIssue({ story: 'no story', status: 'awaiting workspace' }),
335
- makeIssue({ story: 'no story', status: 'failed preparation' }),
336
- ]);
337
- expect(result.triage.items.map((item) => item.status)).toEqual([
338
- 'unread',
339
- 'awaiting workspace',
340
- 'failed preparation',
341
- ]);
342
- });
343
-
344
- it('keeps an item carrying the story option this tool assigns automatically once its status has advanced', () => {
345
- const result = run([
346
- makeIssue({
347
- story: 'regular / NO STORY; SET STORY FIELD',
348
- status: 'Awaiting Quality Check',
349
- }),
350
- ]);
351
- expect(result.triage.items.map((item) => item.status)).toEqual([
352
- 'Awaiting Quality Check',
353
- ]);
354
- });
355
222
  });
356
223
 
357
224
  describe('workflow-blocker tab', () => {
@@ -420,7 +287,6 @@ describe('GenerateConsoleListsUseCase', () => {
420
287
  ) => [
421
288
  ...result['workflow-blocker'].items,
422
289
  ...result.prs.items,
423
- ...result.triage.items,
424
290
  ...result['failed-preparation'].items,
425
291
  ...result['todo-by-human'].items,
426
292
  ];
@@ -438,14 +304,13 @@ describe('GenerateConsoleListsUseCase', () => {
438
304
  expect(allTabItems(result)).toHaveLength(1);
439
305
  });
440
306
 
441
- it('hides a no-story In Tmux by agent issue from triage and all other tabs', () => {
307
+ it('hides a no-story In Tmux by agent issue from all tabs', () => {
442
308
  const result = run([
443
309
  makeIssue({
444
310
  story: 'no story',
445
311
  status: 'In Tmux by agent',
446
312
  }),
447
313
  ]);
448
- expect(result.triage.items).toHaveLength(0);
449
314
  expect(allTabItems(result)).toHaveLength(0);
450
315
  });
451
316
 
@@ -475,10 +340,8 @@ describe('GenerateConsoleListsUseCase', () => {
475
340
  expect(
476
341
  result['workflow-blocker'].items.map((item) => item.status).sort(),
477
342
  ).toEqual(['In Tmux by agent', 'In Tmux by human']);
478
- expect(result.triage.items.map((item) => item.number)).toEqual([3, 2]);
479
343
  expect(
480
344
  result.prs.items
481
- .concat(result.triage.items)
482
345
  .concat(result['failed-preparation'].items)
483
346
  .concat(result['todo-by-human'].items)
484
347
  .some((item) => item.status === 'In Tmux by agent'),
@@ -673,16 +536,6 @@ describe('GenerateConsoleListsUseCase', () => {
673
536
  expect(names).toContain('Awaiting Workspace');
674
537
  });
675
538
 
676
- it('emits all story options for triage and no statusOptions key', () => {
677
- const triage = run([]).triage;
678
- expect(triage.storyOptions.map((o) => o.name)).toEqual([
679
- 'regular / NO STORY; SET STORY FIELD',
680
- 'Story Alpha',
681
- 'Story Beta',
682
- ]);
683
- expect(triage).not.toHaveProperty('statusOptions');
684
- });
685
-
686
539
  it('builds storyOrder from story field option order', () => {
687
540
  expect(run([]).prs.storyOrder).toEqual([
688
541
  'regular / NO STORY; SET STORY FIELD',
@@ -700,19 +553,12 @@ describe('GenerateConsoleListsUseCase', () => {
700
553
  color: 'BLUE',
701
554
  });
702
555
  });
703
-
704
- it('uses plain string color values for triage', () => {
705
- const result = run([]);
706
- expect(result.triage.storyColors['Story Alpha']).toBe('BLUE');
707
- expect(result.triage.storyColors['Story Beta']).toBe('GREEN');
708
- });
709
556
  });
710
557
 
711
558
  describe('generatedAt and pjcode passthrough', () => {
712
559
  it('writes the provided generatedAt without milliseconds on every tab', () => {
713
560
  const result = run([]);
714
561
  expect(result.prs.generatedAt).toBe(generatedAt);
715
- expect(result.triage.generatedAt).toBe(generatedAt);
716
562
  expect(result['failed-preparation'].generatedAt).toBe(generatedAt);
717
563
  expect(generatedAt).not.toMatch(/\.\d{3}Z$/);
718
564
  });
@@ -720,7 +566,6 @@ describe('GenerateConsoleListsUseCase', () => {
720
566
  it('writes the configured pjcode on every tab', () => {
721
567
  const result = run([]);
722
568
  expect(result.prs.pjcode).toBe('demo');
723
- expect(result.triage.pjcode).toBe('demo');
724
569
  expect(result['failed-preparation'].pjcode).toBe('demo');
725
570
  });
726
571
  });
@@ -789,13 +634,10 @@ describe('GenerateConsoleListsUseCase', () => {
789
634
  describe('project without a story field', () => {
790
635
  const projectNoStory = baseProject(null);
791
636
 
792
- it('degrades story order, colors and triage options gracefully', () => {
637
+ it('degrades story order and colors gracefully', () => {
793
638
  const result = run([makeIssue({ story: 'no story' })], projectNoStory);
794
639
  expect(result.prs.storyOrder).toEqual([]);
795
640
  expect(result.prs.storyColors).toEqual({});
796
- expect(result.triage.storyOptions).toEqual([]);
797
- expect(result.triage.storyColors).toEqual({});
798
- expect(result.triage.items).toHaveLength(1);
799
641
  });
800
642
  });
801
643
 
@@ -45,19 +45,9 @@ export type ConsoleStatusTab = {
45
45
  items: ConsoleListItem[];
46
46
  };
47
47
 
48
- export type ConsoleTriageTab = {
49
- pjcode: string;
50
- generatedAt: string;
51
- storyOptions: ConsoleFieldOption[];
52
- storyOrder: string[];
53
- storyColors: Record<string, ConsoleColor>;
54
- items: ConsoleListItem[];
55
- };
56
-
57
48
  export type ConsoleTabName =
58
49
  | 'workflow-blocker'
59
50
  | 'prs'
60
- | 'triage'
61
51
  | 'failed-preparation'
62
52
  | 'todo-by-human'
63
53
  | 'todo-by-agent'
@@ -83,7 +73,6 @@ export type ConsoleStoriesTab = {
83
73
  export type ConsoleLists = {
84
74
  'workflow-blocker': ConsoleStatusTab;
85
75
  prs: ConsoleStatusTab;
86
- triage: ConsoleTriageTab;
87
76
  'failed-preparation': ConsoleStatusTab;
88
77
  'todo-by-human': ConsoleStatusTab;
89
78
  'todo-by-agent': ConsoleStatusTab;
@@ -217,22 +206,6 @@ export class GenerateConsoleListsUseCase {
217
206
  (issue) => issue.status === TODO_BY_AGENT_STATUS_NAME,
218
207
  [TODO_BY_AGENT_STATUS_NAME.toLowerCase(), 'done'],
219
208
  ),
220
- triage: {
221
- pjcode,
222
- generatedAt,
223
- storyOptions: this.buildFieldOptions(storyOptions, []),
224
- storyOrder,
225
- storyColors: this.buildStoryColorsString(storyOptions),
226
- items: this.sortByStoryOrder(
227
- actionableIssues.map((issue) =>
228
- this.projectItem(
229
- issue,
230
- relatedOpenPullRequestUrlsByIssueUrl.get(issue.url) ?? [],
231
- ),
232
- ),
233
- storyOrder,
234
- ),
235
- },
236
209
  stories: {
237
210
  pjcode,
238
211
  generatedAt,
@@ -332,16 +305,6 @@ export class GenerateConsoleListsUseCase {
332
305
  return result;
333
306
  };
334
307
 
335
- private buildStoryColorsString = (
336
- options: FieldOption[],
337
- ): Record<string, ConsoleColor> => {
338
- const result: Record<string, ConsoleColor> = {};
339
- for (const option of options) {
340
- result[option.name] = option.color;
341
- }
342
- return result;
343
- };
344
-
345
308
  private sortByStoryOrder = (
346
309
  items: ConsoleListItem[],
347
310
  storyOrder: string[],
@@ -1,6 +1,12 @@
1
1
  import { LiveSessionOauthTokenSelectionSettings } from '../../../domain/usecases/LiveSessionOauthTokenSelectUseCase';
2
2
  export declare const FLEET_CONFIG_FILE_PATH_ENVIRONMENT_VARIABLE = "TDPM_FLEET_CONFIG";
3
3
  export declare const LIVE_SESSION_OAUTH_TOKEN_SELECTION_SECTION_KEY = "liveSessionOauthTokenSelection";
4
+ export declare const PREPARATION_WORKER_SECTION_KEY = "preparationWorker";
5
+ export type PreparationWorkerSettings = {
6
+ normalConcurrentLimit: number;
7
+ };
8
+ export declare const DEFAULT_PREPARATION_WORKER_SETTINGS: PreparationWorkerSettings;
4
9
  export declare const resolveFleetConfigFilePath: (cliValue: string | null) => string | null;
5
10
  export declare const loadLiveSessionOauthTokenSelectionSettings: (fleetConfigFilePath: string | null) => LiveSessionOauthTokenSelectionSettings;
11
+ export declare const loadPreparationWorkerSettings: (fleetConfigFilePath: string | null) => PreparationWorkerSettings;
6
12
  //# sourceMappingURL=fleetConfig.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fleetConfig.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/cli/fleetConfig.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,sCAAsC,EACvC,MAAM,6DAA6D,CAAC;AAErE,eAAO,MAAM,2CAA2C,sBAAsB,CAAC;AAE/E,eAAO,MAAM,8CAA8C,mCACzB,CAAC;AAEnC,eAAO,MAAM,0BAA0B,GACrC,UAAU,MAAM,GAAG,IAAI,KACtB,MAAM,GAAG,IAUX,CAAC;AAwDF,eAAO,MAAM,0CAA0C,GACrD,qBAAqB,MAAM,GAAG,IAAI,KACjC,sCA0CF,CAAC"}
1
+ {"version":3,"file":"fleetConfig.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/cli/fleetConfig.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,sCAAsC,EACvC,MAAM,6DAA6D,CAAC;AAGrE,eAAO,MAAM,2CAA2C,sBAAsB,CAAC;AAE/E,eAAO,MAAM,8CAA8C,mCACzB,CAAC;AACnC,eAAO,MAAM,8BAA8B,sBAAsB,CAAC;AAElE,MAAM,MAAM,yBAAyB,GAAG;IACtC,qBAAqB,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,eAAO,MAAM,mCAAmC,EAAE,yBAEjD,CAAC;AAEF,eAAO,MAAM,0BAA0B,GACrC,UAAU,MAAM,GAAG,IAAI,KACtB,MAAM,GAAG,IAUX,CAAC;AA0DF,eAAO,MAAM,0CAA0C,GACrD,qBAAqB,MAAM,GAAG,IAAI,KACjC,sCAiDF,CAAC;AAEF,eAAO,MAAM,6BAA6B,GACxC,qBAAqB,MAAM,GAAG,IAAI,KACjC,yBAsBF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,wBAAwB,GACzB,MAAM,iBAAiB,CAAC;AA+OzB,eAAO,MAAM,OAAO,SAAgB,CAAC;AA0lCrC,eAAO,MAAM,uBAAuB,GAAI,OAAO,OAAO,KAAG,IAGxD,CAAC;AAwCF,eAAO,MAAM,aAAa,GACxB,MAAM,MAAM,EAAE,EACd,kBAAkB,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,KACzC,OAAO,CAAC,IAAI,CAqCd,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,wBAAwB,GACzB,MAAM,iBAAiB,CAAC;AAiPzB,eAAO,MAAM,OAAO,SAAgB,CAAC;AAwmCrC,eAAO,MAAM,uBAAuB,GAAI,OAAO,OAAO,KAAG,IAGxD,CAAC;AAwCF,eAAO,MAAM,aAAa,GACxB,MAAM,MAAM,EAAE,EACd,kBAAkB,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,KACzC,OAAO,CAAC,IAAI,CAqCd,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"consoleDoneStore.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/console/consoleDoneStore.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,sBAAsB,eAAe,CAAC;AAEnD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC;AAqBF,eAAO,MAAM,kBAAkB,GAC7B,sBAAsB,MAAM,EAC5B,QAAQ,MAAM,EACd,KAAK,MAAM,KACV,MACmE,CAAC;AAYvE,eAAO,MAAM,sBAAsB,GACjC,sBAAsB,MAAM,EAC5B,QAAQ,MAAM,EACd,KAAK,MAAM,KACV,MAAM,EASR,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,sBAAsB,MAAM,EAC5B,QAAQ,MAAM,EACd,KAAK,MAAM,EACX,eAAe,MAAM,KACpB,IAaF,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,MAAM,EAQ1C,CAAC;AAEF,eAAO,MAAM,sCAAsC,EAAE,MAAM,EAM1D,CAAC;AAEF,eAAO,MAAM,qCAAqC,EAAE,MAAM,EAGzD,CAAC;AAEF,eAAO,MAAM,8BAA8B,GACzC,sBAAsB,MAAM,EAC5B,QAAQ,MAAM,EACd,eAAe,MAAM,EACrB,UAAU,MAAM,EAAE,KACjB,IAIF,CAAC;AAEF,eAAO,MAAM,iCAAiC,GAC5C,sBAAsB,MAAM,EAC5B,QAAQ,MAAM,EACd,eAAe,MAAM,KACpB,IAIF,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,sBAAsB,MAAM,EAC5B,QAAQ,MAAM,EACd,KAAK,MAAM,KACV,IAGF,CAAC;AAEF,eAAO,MAAM,iCAAiC,GAC5C,sBAAsB,MAAM,EAC5B,QAAQ,MAAM,KACb,IAIF,CAAC"}
1
+ {"version":3,"file":"consoleDoneStore.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/console/consoleDoneStore.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,sBAAsB,eAAe,CAAC;AAEnD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC;AAqBF,eAAO,MAAM,kBAAkB,GAC7B,sBAAsB,MAAM,EAC5B,QAAQ,MAAM,EACd,KAAK,MAAM,KACV,MACmE,CAAC;AAYvE,eAAO,MAAM,sBAAsB,GACjC,sBAAsB,MAAM,EAC5B,QAAQ,MAAM,EACd,KAAK,MAAM,KACV,MAAM,EASR,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,sBAAsB,MAAM,EAC5B,QAAQ,MAAM,EACd,KAAK,MAAM,EACX,eAAe,MAAM,KACpB,IAaF,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,MAAM,EAO1C,CAAC;AAEF,eAAO,MAAM,sCAAsC,EAAE,MAAM,EAM1D,CAAC;AAEF,eAAO,MAAM,qCAAqC,EAAE,MAAM,EAEzD,CAAC;AAEF,eAAO,MAAM,8BAA8B,GACzC,sBAAsB,MAAM,EAC5B,QAAQ,MAAM,EACd,eAAe,MAAM,EACrB,UAAU,MAAM,EAAE,KACjB,IAIF,CAAC;AAEF,eAAO,MAAM,iCAAiC,GAC5C,sBAAsB,MAAM,EAC5B,QAAQ,MAAM,EACd,eAAe,MAAM,KACpB,IAIF,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,sBAAsB,MAAM,EAC5B,QAAQ,MAAM,EACd,KAAK,MAAM,KACV,IAGF,CAAC;AAEF,eAAO,MAAM,iCAAiC,GAC5C,sBAAsB,MAAM,EAC5B,QAAQ,MAAM,KACb,IAIF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"consoleTabNames.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/console/consoleTabNames.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8DAA8D,CAAC;AAEnG,eAAO,MAAM,sBAAsB,EAAE,cAAc,EAQlD,CAAC;AAOF,eAAO,MAAM,gBAAgB,GAC3B,OAAO,OAAO,EAAE,EAChB,YAAY,MAAM,EAAE,KACnB,OAAO,EAgBT,CAAC"}
1
+ {"version":3,"file":"consoleTabNames.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/console/consoleTabNames.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8DAA8D,CAAC;AAEnG,eAAO,MAAM,sBAAsB,EAAE,cAAc,EAOlD,CAAC;AAOF,eAAO,MAAM,gBAAgB,GAC3B,OAAO,OAAO,EAAE,EAChB,YAAY,MAAM,EAAE,KACnB,OAAO,EAgBT,CAAC"}
@@ -5,6 +5,7 @@ import { LocalCommandRunner } from './adapter-interfaces/LocalCommandRunner';
5
5
  import { ClaudeTokenUsageRepository } from './adapter-interfaces/ClaudeTokenUsageRepository';
6
6
  import { TakeOwnershipSpawnRepository } from './adapter-interfaces/TakeOwnershipSpawnRepository';
7
7
  import { ClaudeTokenUsage } from '../entities/ClaudeTokenUsage';
8
+ export declare const NORMAL_CONCURRENT_LIMIT = 6;
8
9
  export declare const DEFAULT_FALLBACK_LLM_MODEL_NAME = "claude-opus-4-8";
9
10
  export declare const SPAWN_CANDIDATE_BRANCH_SOURCE_CONCURRENCY = 8;
10
11
  export type SpawnCandidateExclusionReason = 'dependedIssueUrls' | 'futureNextActionDate' | 'nextActionHourNotReached' | 'authorNotAllowed' | 'notAssignedToManager';
@@ -35,7 +36,7 @@ export declare class StartPreparationUseCase {
35
36
  private secondsUntilSevenDayReset;
36
37
  private compareBySevenDayDeadlineThenUtilization;
37
38
  private taperedConcurrentLimit;
38
- getTokenConcurrentLimit: (fiveHourUtilization: number, sevenDayUtilization: number, selectionWeight?: number) => number;
39
+ getTokenConcurrentLimit: (fiveHourUtilization: number, sevenDayUtilization: number, selectionWeight?: number, normalConcurrentLimit?: number) => number;
39
40
  spawnCandidateExclusionReasonOf: (issue: Issue, allowedIssueAuthors: string[] | null, manager: string, now: Date) => SpawnCandidateExclusionReason | null;
40
41
  fetchSpawnCandidateBranchSources: (issueUrls: string[]) => Promise<Map<string, SpawnCandidateBranchSource>>;
41
42
  private selectRotationTokens;
@@ -54,6 +55,7 @@ export declare class StartPreparationUseCase {
54
55
  codexHomeCandidates: string[] | null;
55
56
  labelsAsLlmAgentName: string[] | null;
56
57
  agents?: string[] | null;
58
+ normalConcurrentLimit?: number;
57
59
  }) => Promise<{
58
60
  rotationOrder: RotationOrderEntry[] | null;
59
61
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"StartPreparationUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/StartPreparationUseCase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StartPreparationUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/StartPreparationUseCase.ts"],"names":[],"mappings":"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"}
@@ -35,15 +35,7 @@ export type ConsoleStatusTab = {
35
35
  }>;
36
36
  items: ConsoleListItem[];
37
37
  };
38
- export type ConsoleTriageTab = {
39
- pjcode: string;
40
- generatedAt: string;
41
- storyOptions: ConsoleFieldOption[];
42
- storyOrder: string[];
43
- storyColors: Record<string, ConsoleColor>;
44
- items: ConsoleListItem[];
45
- };
46
- export type ConsoleTabName = 'workflow-blocker' | 'prs' | 'triage' | 'failed-preparation' | 'todo-by-human' | 'todo-by-agent' | 'stories';
38
+ export type ConsoleTabName = 'workflow-blocker' | 'prs' | 'failed-preparation' | 'todo-by-human' | 'todo-by-agent' | 'stories';
47
39
  export type ConsoleStoryEntry = {
48
40
  storyName: string;
49
41
  storyOptionId: string;
@@ -64,7 +56,6 @@ export type ConsoleStoriesTab = {
64
56
  export type ConsoleLists = {
65
57
  'workflow-blocker': ConsoleStatusTab;
66
58
  prs: ConsoleStatusTab;
67
- triage: ConsoleTriageTab;
68
59
  'failed-preparation': ConsoleStatusTab;
69
60
  'todo-by-human': ConsoleStatusTab;
70
61
  'todo-by-agent': ConsoleStatusTab;
@@ -87,7 +78,6 @@ export declare class GenerateConsoleListsUseCase {
87
78
  private projectItem;
88
79
  private buildFieldOptions;
89
80
  private buildStoryColorsObject;
90
- private buildStoryColorsString;
91
81
  private sortByStoryOrder;
92
82
  }
93
83
  //# sourceMappingURL=GenerateConsoleListsUseCase.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GenerateConsoleListsUseCase.d.ts","sourceRoot":"","sources":["../../../../src/domain/usecases/console/GenerateConsoleListsUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAS9D,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;AAEhD,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,0BAA0B,EAAE,MAAM,EAAE,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,YAAY,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,kBAAkB,EAAE,CAAC;IACpC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,YAAY,CAAA;KAAE,CAAC,CAAC;IACrD,KAAK,EAAE,eAAe,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,kBAAkB,EAAE,CAAC;IACnC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC1C,KAAK,EAAE,eAAe,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,cAAc,GACtB,kBAAkB,GAClB,KAAK,GACL,QAAQ,GACR,oBAAoB,GACpB,eAAe,GACf,eAAe,GACf,SAAS,CAAC;AAEd,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,YAAY,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,YAAY,CAAA;KAAE,CAAC,CAAC;IACrD,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,kBAAkB,EAAE,gBAAgB,CAAC;IACrC,GAAG,EAAE,gBAAgB,CAAC;IACtB,MAAM,EAAE,gBAAgB,CAAC;IACzB,oBAAoB,EAAE,gBAAgB,CAAC;IACvC,eAAe,EAAE,gBAAgB,CAAC;IAClC,eAAe,EAAE,gBAAgB,CAAC;IAClC,OAAO,EAAE,iBAAiB,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,CAAC;AAIF,qBAAa,2BAA2B;IACtC,GAAG,GAAI,OAAO,yBAAyB,KAAG,YAAY,CA2IpD;IAEF,OAAO,CAAC,YAAY,CAKY;IAEhC,OAAO,CAAC,uBAAuB,CAS7B;IAEF,OAAO,CAAC,yCAAyC,CAoB/C;IAEF,OAAO,CAAC,WAAW,CAsBhB;IAEH,OAAO,CAAC,iBAAiB,CAYjB;IAER,OAAO,CAAC,sBAAsB,CAQ5B;IAEF,OAAO,CAAC,sBAAsB,CAQ5B;IAEF,OAAO,CAAC,gBAAgB,CAoBtB;CACH"}
1
+ {"version":3,"file":"GenerateConsoleListsUseCase.d.ts","sourceRoot":"","sources":["../../../../src/domain/usecases/console/GenerateConsoleListsUseCase.ts"],"names":[],"mappings":"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"}