github-issue-tower-defence-management 1.128.1 → 1.130.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 (60) hide show
  1. package/.github/workflows/console-ui.yml +1 -1
  2. package/.github/workflows/empty-format-test-job.yml +1 -1
  3. package/.github/workflows/format.yml +1 -1
  4. package/.github/workflows/publish.yml +1 -1
  5. package/.github/workflows/test.yml +1 -1
  6. package/CHANGELOG.md +14 -0
  7. package/README.md +9 -8
  8. package/bin/adapter/entry-points/console/consoleDataDelivery.js +1 -0
  9. package/bin/adapter/entry-points/console/consoleDataDelivery.js.map +1 -1
  10. package/bin/adapter/entry-points/console/consoleDoneStore.js +1 -0
  11. package/bin/adapter/entry-points/console/consoleDoneStore.js.map +1 -1
  12. package/bin/adapter/entry-points/console/ui-dist/assets/index-Bz0KvgIG.js +103 -0
  13. package/bin/adapter/entry-points/console/ui-dist/index.html +1 -1
  14. package/bin/adapter/entry-points/handlers/consoleListsWriter.js +1 -0
  15. package/bin/adapter/entry-points/handlers/consoleListsWriter.js.map +1 -1
  16. package/bin/domain/entities/WorkflowStatus.js +6 -1
  17. package/bin/domain/entities/WorkflowStatus.js.map +1 -1
  18. package/bin/domain/usecases/console/GenerateConsoleListsUseCase.js +2 -0
  19. package/bin/domain/usecases/console/GenerateConsoleListsUseCase.js.map +1 -1
  20. package/package.json +3 -3
  21. package/src/adapter/entry-points/console/consoleDataDelivery.test.ts +6 -0
  22. package/src/adapter/entry-points/console/consoleDataDelivery.ts +1 -0
  23. package/src/adapter/entry-points/console/consoleDoneStore.test.ts +4 -0
  24. package/src/adapter/entry-points/console/consoleDoneStore.ts +1 -0
  25. package/src/adapter/entry-points/console/ui/e2e/consoleTestHarness.ts +10 -0
  26. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTabList.stories.tsx +4 -0
  27. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTabList.test.tsx +2 -0
  28. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleNextActionDateActions.stories.tsx +2 -2
  29. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleNextActionDateActions.test.tsx +5 -5
  30. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleNextActionDateActions.tsx +3 -3
  31. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleOperationMenu.stories.tsx +8 -0
  32. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleOperationMenu.test.tsx +15 -0
  33. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleOperationMenu.tsx +2 -2
  34. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleNavigation.test.ts +1 -0
  35. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleTabData.test.ts +2 -1
  36. package/src/adapter/entry-points/console/ui/src/features/console/logic/actionToast.test.ts +6 -2
  37. package/src/adapter/entry-points/console/ui/src/features/console/logic/actionToast.ts +7 -6
  38. package/src/adapter/entry-points/console/ui/src/features/console/logic/operations.test.ts +7 -5
  39. package/src/adapter/entry-points/console/ui/src/features/console/logic/operations.ts +3 -2
  40. package/src/adapter/entry-points/console/ui/src/features/console/logic/tabAdvance.test.ts +11 -1
  41. package/src/adapter/entry-points/console/ui/src/features/console/logic/types.ts +3 -1
  42. package/src/adapter/entry-points/console/ui/src/features/console/testing/fixtures.ts +1 -0
  43. package/src/adapter/entry-points/console/ui-dist/assets/index-Bz0KvgIG.js +103 -0
  44. package/src/adapter/entry-points/console/ui-dist/index.html +1 -1
  45. package/src/adapter/entry-points/console/webServer.test.ts +1 -0
  46. package/src/adapter/entry-points/handlers/consoleListsWriter.test.ts +21 -1
  47. package/src/adapter/entry-points/handlers/consoleListsWriter.ts +1 -0
  48. package/src/domain/entities/WorkflowStatus.ts +5 -0
  49. package/src/domain/usecases/SetupTowerDefenceProjectUseCase.test.ts +92 -2
  50. package/src/domain/usecases/console/GenerateConsoleListsUseCase.test.ts +28 -0
  51. package/src/domain/usecases/console/GenerateConsoleListsUseCase.ts +9 -1
  52. package/types/adapter/entry-points/console/consoleDataDelivery.d.ts.map +1 -1
  53. package/types/adapter/entry-points/console/consoleDoneStore.d.ts.map +1 -1
  54. package/types/adapter/entry-points/handlers/consoleListsWriter.d.ts.map +1 -1
  55. package/types/domain/entities/WorkflowStatus.d.ts +1 -0
  56. package/types/domain/entities/WorkflowStatus.d.ts.map +1 -1
  57. package/types/domain/usecases/console/GenerateConsoleListsUseCase.d.ts +2 -1
  58. package/types/domain/usecases/console/GenerateConsoleListsUseCase.d.ts.map +1 -1
  59. package/bin/adapter/entry-points/console/ui-dist/assets/index-CufymFM1.js +0 -103
  60. package/src/adapter/entry-points/console/ui-dist/assets/index-CufymFM1.js +0 -103
@@ -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-CufymFM1.js"></script>
7
+ <script type="module" crossorigin src="/assets/index-Bz0KvgIG.js"></script>
8
8
  <link rel="stylesheet" crossorigin href="/assets/index-N9M1qhkw.css">
9
9
  </head>
10
10
  <body>
@@ -82,6 +82,7 @@ describe('webServer pure helpers', () => {
82
82
  true,
83
83
  );
84
84
  expect(isConsoleAppRoute('/projects/utage3/todo-by-human')).toBe(true);
85
+ expect(isConsoleAppRoute('/projects/utage3/todo-by-agent')).toBe(true);
85
86
  });
86
87
 
87
88
  it('does not match data, api, or unknown tab routes', () => {
@@ -87,7 +87,7 @@ describe('writeConsoleLists', () => {
87
87
  const tabFile = (tab: string): string =>
88
88
  path.join(outDir, 'demo', tab, 'list.json');
89
89
 
90
- it('writes all five tab list.json files', () => {
90
+ it('writes every console tab list.json file', () => {
91
91
  writeConsoleLists({
92
92
  consoleDataOutputDir: outDir,
93
93
  pjcode: 'demo',
@@ -104,6 +104,7 @@ describe('writeConsoleLists', () => {
104
104
  'unread',
105
105
  'failed-preparation',
106
106
  'todo-by-human',
107
+ 'todo-by-agent',
107
108
  ]) {
108
109
  expect(fs.existsSync(tabFile(tab))).toBe(true);
109
110
  }
@@ -172,6 +173,25 @@ describe('writeConsoleLists', () => {
172
173
  expect(isUnknownArray(items) ? items.length : 0).toBe(1);
173
174
  });
174
175
 
176
+ it('writes todo-by-agent items selected by the Todo by agent status', () => {
177
+ writeConsoleLists({
178
+ consoleDataOutputDir: outDir,
179
+ pjcode: 'demo',
180
+ assigneeLogin: ASSIGNEE,
181
+ project,
182
+ issues: [makeIssue({ status: 'Todo by agent' })],
183
+ generatedAt: '2026-06-14T07:22:33Z',
184
+ });
185
+
186
+ const raw: unknown = JSON.parse(
187
+ fs.readFileSync(tabFile('todo-by-agent'), 'utf8'),
188
+ );
189
+ expect(isRecord(raw)).toBe(true);
190
+ const items: unknown = isRecord(raw) ? raw.items : undefined;
191
+ expect(isUnknownArray(items)).toBe(true);
192
+ expect(isUnknownArray(items) ? items.length : 0).toBe(1);
193
+ });
194
+
175
195
  it('writes items with no body field', () => {
176
196
  writeConsoleLists({
177
197
  consoleDataOutputDir: outDir,
@@ -26,6 +26,7 @@ const CONSOLE_TAB_NAMES: ConsoleTabName[] = [
26
26
  'unread',
27
27
  'failed-preparation',
28
28
  'todo-by-human',
29
+ 'todo-by-agent',
29
30
  ];
30
31
 
31
32
  export const formatConsoleGeneratedAt = (date: Date): string =>
@@ -6,6 +6,7 @@ export const PREPARATION_STATUS_NAME = 'Preparation';
6
6
  export const FAILED_PREPARATION_STATUS_NAME = 'Failed Preparation';
7
7
  export const AWAITING_QUALITY_CHECK_STATUS_NAME = 'Awaiting Quality Check';
8
8
  export const TODO_STATUS_NAME = 'Todo by human';
9
+ export const TODO_BY_AGENT_STATUS_NAME = 'Todo by agent';
9
10
  export const PC_TODO_STATUS_NAME = 'PC Todo';
10
11
  export const IN_TMUX_STATUS_NAME = 'In Tmux by human';
11
12
  export const IN_TMUX_BY_AGENT_STATUS_NAME = 'In Tmux by agent';
@@ -47,6 +48,10 @@ export const REQUIRED_WORKFLOW_STATUSES: WorkflowStatusDefinition[] = [
47
48
  name: TODO_STATUS_NAME,
48
49
  color: 'PINK',
49
50
  },
51
+ {
52
+ name: TODO_BY_AGENT_STATUS_NAME,
53
+ color: 'BLUE',
54
+ },
50
55
  {
51
56
  name: IN_TMUX_STATUS_NAME,
52
57
  color: 'RED',
@@ -19,6 +19,7 @@ import {
19
19
  PC_TODO_STATUS_NAME,
20
20
  PREPARATION_STATUS_NAME,
21
21
  REQUIRED_WORKFLOW_STATUSES,
22
+ TODO_BY_AGENT_STATUS_NAME,
22
23
  TODO_STATUS_NAME,
23
24
  } from '../entities/WorkflowStatus';
24
25
 
@@ -77,7 +78,7 @@ const buildIssue = (overrides: Partial<Issue>): Issue => ({
77
78
  });
78
79
 
79
80
  describe('SetupTowerDefenceProjectUseCase', () => {
80
- it('should define exactly the 10 required statuses in the documented order with the documented colors and no descriptions', () => {
81
+ it('should define exactly the 11 required statuses in the documented order with the documented colors and no descriptions', () => {
81
82
  expect(REQUIRED_WORKFLOW_STATUSES).toEqual([
82
83
  { name: DEFAULT_STATUS_NAME, color: 'ORANGE' },
83
84
  { name: AWAITING_WORKSPACE_STATUS_NAME, color: 'BLUE' },
@@ -85,6 +86,7 @@ describe('SetupTowerDefenceProjectUseCase', () => {
85
86
  { name: FAILED_PREPARATION_STATUS_NAME, color: 'RED' },
86
87
  { name: AWAITING_QUALITY_CHECK_STATUS_NAME, color: 'GREEN' },
87
88
  { name: TODO_STATUS_NAME, color: 'PINK' },
89
+ { name: TODO_BY_AGENT_STATUS_NAME, color: 'BLUE' },
88
90
  { name: IN_TMUX_STATUS_NAME, color: 'RED' },
89
91
  { name: IN_TMUX_BY_AGENT_STATUS_NAME, color: 'YELLOW' },
90
92
  { name: DONE_STATUS_NAME, color: 'PURPLE' },
@@ -253,6 +255,12 @@ describe('SetupTowerDefenceProjectUseCase', () => {
253
255
  color: 'PINK',
254
256
  description: '',
255
257
  },
258
+ {
259
+ id: null,
260
+ name: TODO_BY_AGENT_STATUS_NAME,
261
+ color: 'BLUE',
262
+ description: '',
263
+ },
256
264
  {
257
265
  id: null,
258
266
  name: IN_TMUX_STATUS_NAME,
@@ -324,6 +332,7 @@ describe('SetupTowerDefenceProjectUseCase', () => {
324
332
  FAILED_PREPARATION_STATUS_NAME,
325
333
  AWAITING_QUALITY_CHECK_STATUS_NAME,
326
334
  TODO_STATUS_NAME,
335
+ TODO_BY_AGENT_STATUS_NAME,
327
336
  IN_TMUX_STATUS_NAME,
328
337
  IN_TMUX_BY_AGENT_STATUS_NAME,
329
338
  DONE_STATUS_NAME,
@@ -432,12 +441,90 @@ describe('SetupTowerDefenceProjectUseCase', () => {
432
441
  const [, payload] = mockProjectRepository.updateStatusList.mock.calls[0];
433
442
  const inTmuxEntry = payload.find((s) => s.name === IN_TMUX_STATUS_NAME);
434
443
  expect(inTmuxEntry).toBeDefined();
435
- expect(inTmuxEntry?.id).toBe('id-6');
444
+ expect(inTmuxEntry?.id).toBe('id-7');
436
445
  expect(payload.some((s) => s.name === LEGACY_IN_TMUX_STATUS_NAME)).toBe(
437
446
  false,
438
447
  );
439
448
  });
440
449
 
450
+ it('should create the "Todo by agent" status with blue color when it is missing', async () => {
451
+ const mockProjectRepository =
452
+ mock<Pick<ProjectRepository, 'getByUrl' | 'updateStatusList'>>();
453
+ const mockIssueRepository =
454
+ mock<Pick<IssueRepository, 'getAllIssues' | 'updateStatus'>>();
455
+ const statuses = buildCanonicalStatuses().filter(
456
+ (s) => s.name !== TODO_BY_AGENT_STATUS_NAME,
457
+ );
458
+ const project = buildProject(statuses);
459
+ mockProjectRepository.getByUrl.mockResolvedValue(project);
460
+ mockProjectRepository.updateStatusList.mockResolvedValue([]);
461
+ mockIssueRepository.getAllIssues.mockResolvedValue({
462
+ project: mock<Project>(),
463
+ issues: [],
464
+ cacheUsed: false,
465
+ });
466
+
467
+ const useCase = new SetupTowerDefenceProjectUseCase(
468
+ mockProjectRepository,
469
+ mockIssueRepository,
470
+ );
471
+ await useCase.run({ projectUrl: project.url });
472
+
473
+ expect(mockProjectRepository.updateStatusList).toHaveBeenCalledTimes(1);
474
+ const [, payload] = mockProjectRepository.updateStatusList.mock.calls[0];
475
+ const todoByAgentEntry = payload.find(
476
+ (s) => s.name === TODO_BY_AGENT_STATUS_NAME,
477
+ );
478
+ expect(todoByAgentEntry).toBeDefined();
479
+ expect(todoByAgentEntry?.id).toBeNull();
480
+ expect(todoByAgentEntry?.color).toBe('BLUE');
481
+ const names = payload.map((s) => s.name);
482
+ expect(names.indexOf(TODO_BY_AGENT_STATUS_NAME)).toBe(
483
+ names.indexOf(TODO_STATUS_NAME) + 1,
484
+ );
485
+ });
486
+
487
+ it('should leave an already-present "Todo by agent" option unchanged by reusing its existing option ID', async () => {
488
+ const mockProjectRepository =
489
+ mock<Pick<ProjectRepository, 'getByUrl' | 'updateStatusList'>>();
490
+ const mockIssueRepository =
491
+ mock<Pick<IssueRepository, 'getAllIssues' | 'updateStatus'>>();
492
+ const statuses = buildCanonicalStatuses().map((s) => {
493
+ if (s.name === TODO_BY_AGENT_STATUS_NAME) {
494
+ return { ...s, id: 'preexisting-todo-agent-id' };
495
+ }
496
+ if (s.name === DEFAULT_STATUS_NAME) {
497
+ return { ...s, description: 'stale description' };
498
+ }
499
+ return s;
500
+ });
501
+ const project = buildProject(statuses);
502
+ mockProjectRepository.getByUrl.mockResolvedValue(project);
503
+ mockProjectRepository.updateStatusList.mockResolvedValue([]);
504
+ mockIssueRepository.getAllIssues.mockResolvedValue({
505
+ project: mock<Project>(),
506
+ issues: [],
507
+ cacheUsed: false,
508
+ });
509
+
510
+ const useCase = new SetupTowerDefenceProjectUseCase(
511
+ mockProjectRepository,
512
+ mockIssueRepository,
513
+ );
514
+ await useCase.run({ projectUrl: project.url });
515
+
516
+ expect(mockProjectRepository.updateStatusList).toHaveBeenCalledTimes(1);
517
+ const [, payload] = mockProjectRepository.updateStatusList.mock.calls[0];
518
+ const todoByAgentEntry = payload.find(
519
+ (s) => s.name === TODO_BY_AGENT_STATUS_NAME,
520
+ );
521
+ expect(todoByAgentEntry?.id).toBe('preexisting-todo-agent-id');
522
+ expect(todoByAgentEntry?.color).toBe('BLUE');
523
+ expect(
524
+ payload.filter((s) => s.name === TODO_BY_AGENT_STATUS_NAME),
525
+ ).toHaveLength(1);
526
+ });
527
+
441
528
  it('should create the "In Tmux by agent" status with yellow color when it is missing', async () => {
442
529
  const mockProjectRepository =
443
530
  mock<Pick<ProjectRepository, 'getByUrl' | 'updateStatusList'>>();
@@ -627,6 +714,7 @@ describe('SetupTowerDefenceProjectUseCase', () => {
627
714
  FAILED_PREPARATION_STATUS_NAME,
628
715
  AWAITING_QUALITY_CHECK_STATUS_NAME,
629
716
  TODO_STATUS_NAME,
717
+ TODO_BY_AGENT_STATUS_NAME,
630
718
  IN_TMUX_STATUS_NAME,
631
719
  IN_TMUX_BY_AGENT_STATUS_NAME,
632
720
  DONE_STATUS_NAME,
@@ -764,6 +852,7 @@ describe('SetupTowerDefenceProjectUseCase', () => {
764
852
  FAILED_PREPARATION_STATUS_NAME,
765
853
  AWAITING_QUALITY_CHECK_STATUS_NAME,
766
854
  TODO_STATUS_NAME,
855
+ TODO_BY_AGENT_STATUS_NAME,
767
856
  IN_TMUX_STATUS_NAME,
768
857
  IN_TMUX_BY_AGENT_STATUS_NAME,
769
858
  DONE_STATUS_NAME,
@@ -917,6 +1006,7 @@ describe('SetupTowerDefenceProjectUseCase', () => {
917
1006
  FAILED_PREPARATION_STATUS_NAME,
918
1007
  AWAITING_QUALITY_CHECK_STATUS_NAME,
919
1008
  TODO_STATUS_NAME,
1009
+ TODO_BY_AGENT_STATUS_NAME,
920
1010
  IN_TMUX_STATUS_NAME,
921
1011
  IN_TMUX_BY_AGENT_STATUS_NAME,
922
1012
  DONE_STATUS_NAME,
@@ -23,6 +23,7 @@ const STATUS_OPTIONS: FieldOption[] = [
23
23
  storyOption('st-failed', 'Failed Preparation', 'RED'),
24
24
  storyOption('st-aqc', 'Awaiting Quality Check', 'GREEN'),
25
25
  storyOption('st-todo', 'Todo by human', 'PINK'),
26
+ storyOption('st-todo-agent', 'Todo by agent', 'BLUE'),
26
27
  storyOption('st-tmux', 'In Tmux by human', 'RED'),
27
28
  storyOption('st-tmux-agent', 'In Tmux by agent', 'YELLOW'),
28
29
  storyOption('st-done', 'Done', 'PURPLE'),
@@ -200,6 +201,25 @@ describe('GenerateConsoleListsUseCase', () => {
200
201
  expect(result['todo-by-human'].items).toHaveLength(0);
201
202
  });
202
203
 
204
+ it('selects todo-by-agent items for the exact status only', () => {
205
+ const result = run([
206
+ makeIssue({ status: 'Todo by agent' }),
207
+ makeIssue({ status: 'todo by agent' }),
208
+ makeIssue({ status: 'Todo by human' }),
209
+ makeIssue({ status: 'Unread' }),
210
+ ]);
211
+ expect(result['todo-by-agent'].items.map((item) => item.number)).toEqual([
212
+ 1,
213
+ ]);
214
+ });
215
+
216
+ it('rejects a non-actionable todo-by-agent issue', () => {
217
+ const result = run([
218
+ makeIssue({ status: 'Todo by agent', nextActionHour: 9 }),
219
+ ]);
220
+ expect(result['todo-by-agent'].items).toHaveLength(0);
221
+ });
222
+
203
223
  it('selects no-story items case-insensitively for triage', () => {
204
224
  const result = run([
205
225
  makeIssue({ story: 'regular / NO STORY; SET STORY FIELD' }),
@@ -430,6 +450,7 @@ describe('GenerateConsoleListsUseCase', () => {
430
450
  'Unread',
431
451
  'In Tmux by human',
432
452
  'In Tmux by agent',
453
+ 'Todo by agent',
433
454
  ]) {
434
455
  expect(names).not.toContain(excluded);
435
456
  }
@@ -443,6 +464,13 @@ describe('GenerateConsoleListsUseCase', () => {
443
464
  expect(names).toContain('Awaiting Workspace');
444
465
  });
445
466
 
467
+ it('excludes todo by agent and done from todo-by-agent status options', () => {
468
+ const names = run([])['todo-by-agent'].statusOptions.map((o) => o.name);
469
+ expect(names).not.toContain('Todo by agent');
470
+ expect(names).not.toContain('Done');
471
+ expect(names).toContain('Awaiting Workspace');
472
+ });
473
+
446
474
  it('emits all story options for triage and no statusOptions key', () => {
447
475
  const triage = run([]).triage;
448
476
  expect(triage.storyOptions.map((o) => o.name)).toEqual([
@@ -3,6 +3,7 @@ import { FieldOption, Project } from '../../entities/Project';
3
3
  import {
4
4
  IN_TMUX_BY_AGENT_STATUS_NAME,
5
5
  LEGACY_TODO_STATUS_NAME,
6
+ TODO_BY_AGENT_STATUS_NAME,
6
7
  TODO_STATUS_NAME,
7
8
  } from '../../entities/WorkflowStatus';
8
9
 
@@ -56,7 +57,8 @@ export type ConsoleTabName =
56
57
  | 'triage'
57
58
  | 'unread'
58
59
  | 'failed-preparation'
59
- | 'todo-by-human';
60
+ | 'todo-by-human'
61
+ | 'todo-by-agent';
60
62
 
61
63
  export type ConsoleLists = {
62
64
  'workflow-blocker': ConsoleStatusTab;
@@ -65,6 +67,7 @@ export type ConsoleLists = {
65
67
  unread: ConsoleStatusTab;
66
68
  'failed-preparation': ConsoleStatusTab;
67
69
  'todo-by-human': ConsoleStatusTab;
70
+ 'todo-by-agent': ConsoleStatusTab;
68
71
  };
69
72
 
70
73
  export type GenerateConsoleListsInput = {
@@ -146,6 +149,7 @@ export class GenerateConsoleListsUseCase {
146
149
  'unread',
147
150
  'in tmux by human',
148
151
  'in tmux by agent',
152
+ 'todo by agent',
149
153
  ],
150
154
  ),
151
155
  'todo-by-human': buildStatusTab(
@@ -154,6 +158,10 @@ export class GenerateConsoleListsUseCase {
154
158
  issue.status === LEGACY_TODO_STATUS_NAME,
155
159
  [TODO_STATUS_NAME.toLowerCase(), 'done'],
156
160
  ),
161
+ 'todo-by-agent': buildStatusTab(
162
+ (issue) => issue.status === TODO_BY_AGENT_STATUS_NAME,
163
+ [TODO_BY_AGENT_STATUS_NAME.toLowerCase(), 'done'],
164
+ ),
157
165
  triage: {
158
166
  pjcode,
159
167
  generatedAt,
@@ -1 +1 @@
1
- {"version":3,"file":"consoleDataDelivery.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/console/consoleDataDelivery.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,sBAAsB,EAAE,MAAM,EAO1C,CAAC;AAEF,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC5D;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC;AAO9D,eAAO,MAAM,qBAAqB,GAChC,aAAa,MAAM,KAClB,gBAAgB,GAAG,IAoCrB,CAAC;AA0CF,MAAM,MAAM,mBAAmB,GAAG;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACnC,sBAAsB,MAAM,EAC5B,OAAO,gBAAgB,KACtB,mBA6CF,CAAC"}
1
+ {"version":3,"file":"consoleDataDelivery.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/console/consoleDataDelivery.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,sBAAsB,EAAE,MAAM,EAQ1C,CAAC;AAEF,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC5D;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC;AAO9D,eAAO,MAAM,qBAAqB,GAChC,aAAa,MAAM,KAClB,gBAAgB,GAAG,IAoCrB,CAAC;AA0CF,MAAM,MAAM,mBAAmB,GAAG;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACnC,sBAAsB,MAAM,EAC5B,OAAO,gBAAgB,KACtB,mBA6CF,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,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,EAS1C,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":"consoleListsWriter.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/consoleListsWriter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAQhE,MAAM,MAAM,wBAAwB,GAAG;IACrC,oBAAoB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAChD,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAClC,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,wBAAwB,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAWF,eAAO,MAAM,wBAAwB,GAAI,MAAM,IAAI,KAAG,MACR,CAAC;AAU/C,eAAO,MAAM,iBAAiB,GAAI,QAAQ,wBAAwB,KAAG,IAyBpE,CAAC"}
1
+ {"version":3,"file":"consoleListsWriter.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/consoleListsWriter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAQhE,MAAM,MAAM,wBAAwB,GAAG;IACrC,oBAAoB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAChD,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAClC,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,wBAAwB,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAYF,eAAO,MAAM,wBAAwB,GAAI,MAAM,IAAI,KAAG,MACR,CAAC;AAU/C,eAAO,MAAM,iBAAiB,GAAI,QAAQ,wBAAwB,KAAG,IAyBpE,CAAC"}
@@ -5,6 +5,7 @@ export declare const PREPARATION_STATUS_NAME = "Preparation";
5
5
  export declare const FAILED_PREPARATION_STATUS_NAME = "Failed Preparation";
6
6
  export declare const AWAITING_QUALITY_CHECK_STATUS_NAME = "Awaiting Quality Check";
7
7
  export declare const TODO_STATUS_NAME = "Todo by human";
8
+ export declare const TODO_BY_AGENT_STATUS_NAME = "Todo by agent";
8
9
  export declare const PC_TODO_STATUS_NAME = "PC Todo";
9
10
  export declare const IN_TMUX_STATUS_NAME = "In Tmux by human";
10
11
  export declare const IN_TMUX_BY_AGENT_STATUS_NAME = "In Tmux by agent";
@@ -1 +1 @@
1
- {"version":3,"file":"WorkflowStatus.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/WorkflowStatus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAC5C,eAAO,MAAM,8BAA8B,uBAAuB,CAAC;AACnE,eAAO,MAAM,uBAAuB,gBAAgB,CAAC;AACrD,eAAO,MAAM,8BAA8B,uBAAuB,CAAC;AACnE,eAAO,MAAM,kCAAkC,2BAA2B,CAAC;AAC3E,eAAO,MAAM,gBAAgB,kBAAkB,CAAC;AAChD,eAAO,MAAM,mBAAmB,YAAY,CAAC;AAC7C,eAAO,MAAM,mBAAmB,qBAAqB,CAAC;AACtD,eAAO,MAAM,4BAA4B,qBAAqB,CAAC;AAC/D,eAAO,MAAM,gBAAgB,SAAS,CAAC;AACvC,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAE3C,eAAO,MAAM,uBAAuB,SAAS,CAAC;AAC9C,eAAO,MAAM,0BAA0B,YAAY,CAAC;AACpD,eAAO,MAAM,0CAA0C,4BAC5B,CAAC;AAE5B,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,wBAAwB,EAyChE,CAAC"}
1
+ {"version":3,"file":"WorkflowStatus.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/WorkflowStatus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAC5C,eAAO,MAAM,8BAA8B,uBAAuB,CAAC;AACnE,eAAO,MAAM,uBAAuB,gBAAgB,CAAC;AACrD,eAAO,MAAM,8BAA8B,uBAAuB,CAAC;AACnE,eAAO,MAAM,kCAAkC,2BAA2B,CAAC;AAC3E,eAAO,MAAM,gBAAgB,kBAAkB,CAAC;AAChD,eAAO,MAAM,yBAAyB,kBAAkB,CAAC;AACzD,eAAO,MAAM,mBAAmB,YAAY,CAAC;AAC7C,eAAO,MAAM,mBAAmB,qBAAqB,CAAC;AACtD,eAAO,MAAM,4BAA4B,qBAAqB,CAAC;AAC/D,eAAO,MAAM,gBAAgB,SAAS,CAAC;AACvC,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAE3C,eAAO,MAAM,uBAAuB,SAAS,CAAC;AAC9C,eAAO,MAAM,0BAA0B,YAAY,CAAC;AACpD,eAAO,MAAM,0CAA0C,4BAC5B,CAAC;AAE5B,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,wBAAwB,EA6ChE,CAAC"}
@@ -41,7 +41,7 @@ export type ConsoleTriageTab = {
41
41
  storyColors: Record<string, ConsoleColor>;
42
42
  items: ConsoleListItem[];
43
43
  };
44
- export type ConsoleTabName = 'workflow-blocker' | 'prs' | 'triage' | 'unread' | 'failed-preparation' | 'todo-by-human';
44
+ export type ConsoleTabName = 'workflow-blocker' | 'prs' | 'triage' | 'unread' | 'failed-preparation' | 'todo-by-human' | 'todo-by-agent';
45
45
  export type ConsoleLists = {
46
46
  'workflow-blocker': ConsoleStatusTab;
47
47
  prs: ConsoleStatusTab;
@@ -49,6 +49,7 @@ export type ConsoleLists = {
49
49
  unread: ConsoleStatusTab;
50
50
  'failed-preparation': ConsoleStatusTab;
51
51
  'todo-by-human': ConsoleStatusTab;
52
+ 'todo-by-agent': ConsoleStatusTab;
52
53
  };
53
54
  export type GenerateConsoleListsInput = {
54
55
  project: Project;
@@ -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;AAO9D,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,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;CACnB,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,QAAQ,GACR,oBAAoB,GACpB,eAAe,CAAC;AAEpB,MAAM,MAAM,YAAY,GAAG;IACzB,kBAAkB,EAAE,gBAAgB,CAAC;IACrC,GAAG,EAAE,gBAAgB,CAAC;IACtB,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,gBAAgB,CAAC;IACzB,oBAAoB,EAAE,gBAAgB,CAAC;IACvC,eAAe,EAAE,gBAAgB,CAAC;CACnC,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;CACzC,CAAC;AAIF,qBAAa,2BAA2B;IACtC,GAAG,GAAI,OAAO,yBAAyB,KAAG,YAAY,CA+FpD;IAEF,OAAO,CAAC,YAAY,CAKY;IAEhC,OAAO,CAAC,uBAAuB,CAS7B;IAEF,OAAO,CAAC,WAAW,CAiBhB;IAEH,OAAO,CAAC,iBAAiB,CAYjB;IAER,OAAO,CAAC,sBAAsB,CAQ5B;IAEF,OAAO,CAAC,sBAAsB,CAQ5B;IAEF,OAAO,CAAC,gBAAgB,CAetB;CACH"}
1
+ {"version":3,"file":"GenerateConsoleListsUseCase.d.ts","sourceRoot":"","sources":["../../../../src/domain/usecases/console/GenerateConsoleListsUseCase.ts"],"names":[],"mappings":"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"}