github-issue-tower-defence-management 2.11.0 → 2.12.1

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 (46) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/bin/adapter/entry-points/console/consoleTabNames.js +1 -0
  3. package/bin/adapter/entry-points/console/consoleTabNames.js.map +1 -1
  4. package/bin/adapter/entry-points/console/ui-dist/assets/index-D6QOQvoN.js +88 -0
  5. package/bin/adapter/entry-points/console/ui-dist/index.html +1 -1
  6. package/bin/domain/usecases/console/GenerateConsoleListsUseCase.js +14 -0
  7. package/bin/domain/usecases/console/GenerateConsoleListsUseCase.js.map +1 -1
  8. package/package.json +1 -1
  9. package/src/adapter/entry-points/console/consoleTabNames.ts +1 -0
  10. package/src/adapter/entry-points/console/ui/e2e/consoleScenario.spec.ts +41 -0
  11. package/src/adapter/entry-points/console/ui/e2e/consoleTestHarness.ts +52 -2
  12. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTabList.stories.tsx +4 -0
  13. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTabList.test.tsx +1 -0
  14. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleItemList.stories.tsx +5 -1
  15. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleItemList.tsx +4 -0
  16. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleItemSummary.stories.tsx +9 -2
  17. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleItemSummary.test.tsx +37 -1
  18. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleItemSummary.tsx +13 -2
  19. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleQueuedItemRow.stories.tsx +50 -0
  20. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleQueuedItemRow.test.tsx +98 -0
  21. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleQueuedItemRow.tsx +66 -0
  22. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleQueuedList.stories.tsx +69 -0
  23. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleQueuedList.test.tsx +101 -0
  24. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleQueuedList.tsx +75 -0
  25. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleOkAndAwaitingWorkspaceActions.test.tsx +12 -0
  26. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleOkAndAwaitingWorkspaceActions.tsx +1 -9
  27. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleNavigation.test.ts +1 -0
  28. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleTabData.test.ts +71 -0
  29. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleTabData.ts +2 -0
  30. package/src/adapter/entry-points/console/ui/src/features/console/lib/airplaneSnapshot.test.ts +26 -0
  31. package/src/adapter/entry-points/console/ui/src/features/console/lib/airplaneSnapshot.ts +6 -0
  32. package/src/adapter/entry-points/console/ui/src/features/console/logic/colors.ts +12 -0
  33. package/src/adapter/entry-points/console/ui/src/features/console/logic/tabAdvance.test.ts +1 -0
  34. package/src/adapter/entry-points/console/ui/src/features/console/logic/types.ts +11 -1
  35. package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsolePage.test.tsx +58 -0
  36. package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsolePage.tsx +25 -9
  37. package/src/adapter/entry-points/console/ui/src/features/console/testing/fixtures.ts +14 -0
  38. package/src/adapter/entry-points/console/ui-dist/assets/index-D6QOQvoN.js +88 -0
  39. package/src/adapter/entry-points/console/ui-dist/index.html +1 -1
  40. package/src/domain/usecases/console/GenerateConsoleListsUseCase.test.ts +84 -0
  41. package/src/domain/usecases/console/GenerateConsoleListsUseCase.ts +39 -0
  42. package/types/adapter/entry-points/console/consoleTabNames.d.ts.map +1 -1
  43. package/types/domain/usecases/console/GenerateConsoleListsUseCase.d.ts +13 -1
  44. package/types/domain/usecases/console/GenerateConsoleListsUseCase.d.ts.map +1 -1
  45. package/bin/adapter/entry-points/console/ui-dist/assets/index-BSa2JTna.js +0 -88
  46. package/src/adapter/entry-points/console/ui-dist/assets/index-BSa2JTna.js +0 -88
@@ -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-BSa2JTna.js"></script>
7
+ <script type="module" crossorigin src="/assets/index-D6QOQvoN.js"></script>
8
8
  <link rel="stylesheet" crossorigin href="/assets/index-CLHvrafO.css">
9
9
  </head>
10
10
  <body>
@@ -800,4 +800,88 @@ describe('GenerateConsoleListsUseCase', () => {
800
800
  expect(result.prs.items[0].agent).toBe('chore');
801
801
  });
802
802
  });
803
+
804
+ describe('queued tab', () => {
805
+ it('includes Awaiting Workspace issues', () => {
806
+ const result = run([
807
+ makeIssue({
808
+ status: 'Awaiting Workspace',
809
+ assignees: ['other-person'],
810
+ }),
811
+ ]);
812
+ expect(result.queued.items).toHaveLength(1);
813
+ });
814
+
815
+ it('includes Preparation issues', () => {
816
+ const result = run([
817
+ makeIssue({ status: 'Preparation', assignees: ['other-person'] }),
818
+ ]);
819
+ expect(result.queued.items).toHaveLength(1);
820
+ });
821
+
822
+ it('excludes issues with statuses other than Awaiting Workspace and Preparation', () => {
823
+ const result = run([
824
+ makeIssue({ status: 'Todo by human' }),
825
+ makeIssue({ status: 'In Tmux by agent' }),
826
+ makeIssue({ status: 'Awaiting Quality Check' }),
827
+ makeIssue({ status: 'Done' }),
828
+ makeIssue({ status: 'Failed Preparation' }),
829
+ ]);
830
+ expect(result.queued.items).toHaveLength(0);
831
+ });
832
+
833
+ it('excludes closed issues', () => {
834
+ const result = run([
835
+ makeIssue({ status: 'Awaiting Workspace', isClosed: true }),
836
+ makeIssue({ status: 'Preparation', isClosed: true }),
837
+ ]);
838
+ expect(result.queued.items).toHaveLength(0);
839
+ });
840
+
841
+ it('excludes issues with dependedIssueUrls', () => {
842
+ const result = run([
843
+ makeIssue({
844
+ status: 'Awaiting Workspace',
845
+ dependedIssueUrls: ['https://github.com/demo/repo/issues/99'],
846
+ }),
847
+ makeIssue({
848
+ status: 'Preparation',
849
+ dependedIssueUrls: ['https://github.com/demo/repo/issues/100'],
850
+ }),
851
+ ]);
852
+ expect(result.queued.items).toHaveLength(0);
853
+ });
854
+
855
+ it('includes issues regardless of assignee', () => {
856
+ const result = run([
857
+ makeIssue({ status: 'Awaiting Workspace', assignees: [] }),
858
+ makeIssue({
859
+ status: 'Preparation',
860
+ assignees: ['completely-other-person'],
861
+ }),
862
+ makeIssue({ status: 'Awaiting Workspace', assignees: [ASSIGNEE] }),
863
+ ]);
864
+ expect(result.queued.items).toHaveLength(3);
865
+ });
866
+
867
+ it('propagates agentOptions from project.agent field', () => {
868
+ const agentOptions: FieldOption[] = [
869
+ storyOption('ag1', 'developer', 'GRAY'),
870
+ storyOption('ag2', 'chore', 'GRAY'),
871
+ ];
872
+ const projectWithAgent: Project = {
873
+ ...baseProject(projectWithStory.story),
874
+ agent: { name: 'Agent', fieldId: 'agent-field', options: agentOptions },
875
+ };
876
+ const result = run([], projectWithAgent);
877
+ expect(result.queued.agentOptions).toEqual(
878
+ agentOptions.map((o) => ({ id: o.id, name: o.name, color: o.color })),
879
+ );
880
+ });
881
+
882
+ it('provides empty agentOptions when project.agent is null', () => {
883
+ const result = run([]);
884
+ expect(result.queued.agentOptions).toEqual([]);
885
+ });
886
+ });
803
887
  });
@@ -1,8 +1,10 @@
1
1
  import { Issue } from '../../entities/Issue';
2
2
  import { FieldOption, Project } from '../../entities/Project';
3
3
  import {
4
+ AWAITING_WORKSPACE_STATUS_NAME,
4
5
  IN_TMUX_BY_AGENT_STATUS_NAME,
5
6
  LEGACY_TODO_STATUS_NAME,
7
+ PREPARATION_STATUS_NAME,
6
8
  TODO_BY_AGENT_STATUS_NAME,
7
9
  TODO_STATUS_NAME,
8
10
  } from '../../entities/WorkflowStatus';
@@ -45,12 +47,23 @@ export type ConsoleStatusTab = {
45
47
  items: ConsoleListItem[];
46
48
  };
47
49
 
50
+ export type ConsoleQueuedTab = {
51
+ pjcode: string;
52
+ generatedAt: string;
53
+ statusOptions: ConsoleFieldOption[];
54
+ agentOptions: ConsoleFieldOption[];
55
+ storyOrder: string[];
56
+ storyColors: Record<string, { color: ConsoleColor }>;
57
+ items: ConsoleListItem[];
58
+ };
59
+
48
60
  export type ConsoleTabName =
49
61
  | 'workflow-blocker'
50
62
  | 'prs'
51
63
  | 'failed-preparation'
52
64
  | 'todo-by-human'
53
65
  | 'todo-by-agent'
66
+ | 'queued'
54
67
  | 'stories';
55
68
 
56
69
  export type ConsoleStoryEntry = {
@@ -76,6 +89,7 @@ export type ConsoleLists = {
76
89
  'failed-preparation': ConsoleStatusTab;
77
90
  'todo-by-human': ConsoleStatusTab;
78
91
  'todo-by-agent': ConsoleStatusTab;
92
+ queued: ConsoleQueuedTab;
79
93
  stories: ConsoleStoriesTab;
80
94
  };
81
95
 
@@ -206,6 +220,31 @@ export class GenerateConsoleListsUseCase {
206
220
  (issue) => issue.status === TODO_BY_AGENT_STATUS_NAME,
207
221
  [TODO_BY_AGENT_STATUS_NAME.toLowerCase(), 'done'],
208
222
  ),
223
+ queued: {
224
+ pjcode,
225
+ generatedAt,
226
+ statusOptions: this.buildFieldOptions(statusOptions, []),
227
+ agentOptions: this.buildFieldOptions(project.agent?.options ?? [], []),
228
+ storyOrder,
229
+ storyColors: this.buildStoryColorsObject(storyOptions),
230
+ items: this.sortByStoryOrder(
231
+ visibleIssues
232
+ .filter(
233
+ (issue) =>
234
+ !issue.isClosed &&
235
+ (issue.status === AWAITING_WORKSPACE_STATUS_NAME ||
236
+ issue.status === PREPARATION_STATUS_NAME) &&
237
+ issue.dependedIssueUrls.length === 0,
238
+ )
239
+ .map((issue) =>
240
+ this.projectItem(
241
+ issue,
242
+ relatedOpenPullRequestUrlsByIssueUrl.get(issue.url) ?? [],
243
+ ),
244
+ ),
245
+ storyOrder,
246
+ ),
247
+ },
209
248
  stories: {
210
249
  pjcode,
211
250
  generatedAt,
@@ -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,EAOlD,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,EAQlD,CAAC;AAOF,eAAO,MAAM,gBAAgB,GAC3B,OAAO,OAAO,EAAE,EAChB,YAAY,MAAM,EAAE,KACnB,OAAO,EAgBT,CAAC"}
@@ -35,7 +35,18 @@ export type ConsoleStatusTab = {
35
35
  }>;
36
36
  items: ConsoleListItem[];
37
37
  };
38
- export type ConsoleTabName = 'workflow-blocker' | 'prs' | 'failed-preparation' | 'todo-by-human' | 'todo-by-agent' | 'stories';
38
+ export type ConsoleQueuedTab = {
39
+ pjcode: string;
40
+ generatedAt: string;
41
+ statusOptions: ConsoleFieldOption[];
42
+ agentOptions: ConsoleFieldOption[];
43
+ storyOrder: string[];
44
+ storyColors: Record<string, {
45
+ color: ConsoleColor;
46
+ }>;
47
+ items: ConsoleListItem[];
48
+ };
49
+ export type ConsoleTabName = 'workflow-blocker' | 'prs' | 'failed-preparation' | 'todo-by-human' | 'todo-by-agent' | 'queued' | 'stories';
39
50
  export type ConsoleStoryEntry = {
40
51
  storyName: string;
41
52
  storyOptionId: string;
@@ -59,6 +70,7 @@ export type ConsoleLists = {
59
70
  'failed-preparation': ConsoleStatusTab;
60
71
  'todo-by-human': ConsoleStatusTab;
61
72
  'todo-by-agent': ConsoleStatusTab;
73
+ queued: ConsoleQueuedTab;
62
74
  stories: ConsoleStoriesTab;
63
75
  };
64
76
  export type GenerateConsoleListsInput = {
@@ -1 +1 @@
1
- {"version":3,"file":"GenerateConsoleListsUseCase.d.ts","sourceRoot":"","sources":["../../../../src/domain/usecases/console/GenerateConsoleListsUseCase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GenerateConsoleListsUseCase.d.ts","sourceRoot":"","sources":["../../../../src/domain/usecases/console/GenerateConsoleListsUseCase.ts"],"names":[],"mappings":"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"}