github-issue-tower-defence-management 2.19.1 → 2.19.3

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 (795) hide show
  1. package/bin/adapter/entry-points/cli/index.js +1 -3
  2. package/bin/adapter/entry-points/cli/index.js.map +1 -1
  3. package/bin/adapter/entry-points/console/consoleOperationApi.js +6 -12
  4. package/bin/adapter/entry-points/console/consoleOperationApi.js.map +1 -1
  5. package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js +1 -1
  6. package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js.map +1 -1
  7. package/bin/adapter/repositories/issue/RestIssueRepository.js +9 -2
  8. package/bin/adapter/repositories/issue/RestIssueRepository.js.map +1 -1
  9. package/package.json +5 -1
  10. package/types/adapter/entry-points/cli/index.d.ts.map +1 -1
  11. package/types/adapter/entry-points/console/consoleOperationApi.d.ts.map +1 -1
  12. package/types/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.d.ts +1 -1
  13. package/types/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.d.ts.map +1 -1
  14. package/types/adapter/repositories/issue/RestIssueRepository.d.ts +5 -1
  15. package/types/adapter/repositories/issue/RestIssueRepository.d.ts.map +1 -1
  16. package/types/domain/usecases/adapter-interfaces/IssueRepository.d.ts +1 -1
  17. package/types/domain/usecases/adapter-interfaces/IssueRepository.d.ts.map +1 -1
  18. package/.env.example +0 -7
  19. package/.gitattributes +0 -2
  20. package/.github/CODEOWNERS +0 -6
  21. package/.github/copilot-instructions.md +0 -6
  22. package/.github/dependabot.yml +0 -19
  23. package/.github/instructions/code-review.instructions.md +0 -50
  24. package/.github/workflows/api-created_issue_pr.yml +0 -97
  25. package/.github/workflows/ci-failure-issue-creator.yml +0 -48
  26. package/.github/workflows/close-manual-prs.yml +0 -80
  27. package/.github/workflows/codeql.yml +0 -107
  28. package/.github/workflows/commit-lint.yml +0 -85
  29. package/.github/workflows/configs/commitlint.config.cjs +0 -32
  30. package/.github/workflows/configs/commitlint.config.js +0 -32
  31. package/.github/workflows/console-ui.yml +0 -68
  32. package/.github/workflows/create-pr.yml +0 -116
  33. package/.github/workflows/empty-format-test-job.yml +0 -34
  34. package/.github/workflows/format.yml +0 -28
  35. package/.github/workflows/publish.yml +0 -111
  36. package/.github/workflows/secret-scan.yml +0 -51
  37. package/.github/workflows/test.yml +0 -58
  38. package/.github/workflows/umino-project.yml +0 -207
  39. package/.gitleaks.toml +0 -22
  40. package/.prettierignore +0 -31
  41. package/.prettierrc +0 -5
  42. package/CHANGELOG.md +0 -4162
  43. package/CONTRIBUTING.md +0 -60
  44. package/bin/adapter/entry-points/handlers/resolveUnansweredOwnerCalls.js +0 -12
  45. package/bin/adapter/entry-points/handlers/resolveUnansweredOwnerCalls.js.map +0 -1
  46. package/bin/adapter/repositories/FileSystemSilentSessionNotifiedStateRepository.js +0 -125
  47. package/bin/adapter/repositories/FileSystemSilentSessionNotifiedStateRepository.js.map +0 -1
  48. package/bin/adapter/repositories/issue/issueTimelineUtils.js +0 -38
  49. package/bin/adapter/repositories/issue/issueTimelineUtils.js.map +0 -1
  50. package/bin/domain/entities/UnansweredOwnerCall.js +0 -3
  51. package/bin/domain/entities/UnansweredOwnerCall.js.map +0 -1
  52. package/bin/domain/entities/WorkingTime.js +0 -3
  53. package/bin/domain/entities/WorkingTime.js.map +0 -1
  54. package/bin/domain/usecases/ChangeStatusLongInReviewIssueUseCase.js +0 -37
  55. package/bin/domain/usecases/ChangeStatusLongInReviewIssueUseCase.js.map +0 -1
  56. package/bin/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.js +0 -118
  57. package/bin/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.js.map +0 -1
  58. package/bin/domain/usecases/GenerateWorkingTimeReportUseCase.js +0 -180
  59. package/bin/domain/usecases/GenerateWorkingTimeReportUseCase.js.map +0 -1
  60. package/bin/domain/usecases/TriagerApprovalDispatchUseCase.js +0 -160
  61. package/bin/domain/usecases/TriagerApprovalDispatchUseCase.js.map +0 -1
  62. package/bin/domain/usecases/adapter-interfaces/SilentSessionNotifiedStateRepository.js +0 -3
  63. package/bin/domain/usecases/adapter-interfaces/SilentSessionNotifiedStateRepository.js.map +0 -1
  64. package/bin/domain/usecases/awaitingOwnerApprovalMessage.js +0 -7
  65. package/bin/domain/usecases/awaitingOwnerApprovalMessage.js.map +0 -1
  66. package/bin/domain/usecases/findLastAgentDeclaringReport.js +0 -12
  67. package/bin/domain/usecases/findLastAgentDeclaringReport.js.map +0 -1
  68. package/bin/domain/usecases/isPullRequestDeclaredUnnecessary.js +0 -25
  69. package/bin/domain/usecases/isPullRequestDeclaredUnnecessary.js.map +0 -1
  70. package/bin/domain/usecases/isWaitingForOwnerApproval.js +0 -16
  71. package/bin/domain/usecases/isWaitingForOwnerApproval.js.map +0 -1
  72. package/bin/domain/usecases/returnedToAwaitingWorkspaceMessage.js +0 -7
  73. package/bin/domain/usecases/returnedToAwaitingWorkspaceMessage.js.map +0 -1
  74. package/commitlint.config.js +0 -6
  75. package/eslint.config.mjs +0 -76
  76. package/jest.config.js +0 -84
  77. package/jest.setup.js +0 -1
  78. package/lib/buffer-equal-constant-time-compat/index.js +0 -17
  79. package/lib/buffer-equal-constant-time-compat/index.test.js +0 -54
  80. package/lib/buffer-equal-constant-time-compat/package.json +0 -5
  81. package/lib/typescript-compat/bin/tsc +0 -2
  82. package/lib/typescript-compat/bin/tsserver +0 -2
  83. package/lib/typescript-compat/lib/typescript.js +0 -1
  84. package/lib/typescript-compat/package.json +0 -13
  85. package/renovate.json +0 -46
  86. package/scripts/copyConsoleUiDist.mjs +0 -35
  87. package/scripts/defaultBranchTipVerify.sh +0 -23
  88. package/scripts/testWorkflowRunVerify.sh +0 -47
  89. package/scripts/verifyConsoleUiDist.mjs +0 -96
  90. package/src/adapter/ci/consoleUiWorkflowTimeout.test.ts +0 -61
  91. package/src/adapter/ci/publishTestWorkflowGate.test.ts +0 -653
  92. package/src/adapter/ci/workflowRunCancellation.test.ts +0 -72
  93. package/src/adapter/entry-points/cli/fleetConfig.test.ts +0 -553
  94. package/src/adapter/entry-points/cli/fleetConfig.ts +0 -266
  95. package/src/adapter/entry-points/cli/index.test.ts +0 -2837
  96. package/src/adapter/entry-points/cli/index.ts +0 -1488
  97. package/src/adapter/entry-points/cli/projectConfig.test.ts +0 -342
  98. package/src/adapter/entry-points/cli/projectConfig.ts +0 -500
  99. package/src/adapter/entry-points/console/consoleAirplaneSnapshotApi.test.ts +0 -658
  100. package/src/adapter/entry-points/console/consoleAirplaneSnapshotApi.ts +0 -482
  101. package/src/adapter/entry-points/console/consoleDataDelivery.test.ts +0 -222
  102. package/src/adapter/entry-points/console/consoleDataDelivery.ts +0 -134
  103. package/src/adapter/entry-points/console/consoleDoneStore.test.ts +0 -169
  104. package/src/adapter/entry-points/console/consoleDoneStore.ts +0 -139
  105. package/src/adapter/entry-points/console/consoleGithubTokenResolver.test.ts +0 -275
  106. package/src/adapter/entry-points/console/consoleGithubTokenResolver.ts +0 -113
  107. package/src/adapter/entry-points/console/consoleImageProxy.test.ts +0 -140
  108. package/src/adapter/entry-points/console/consoleImageProxy.ts +0 -111
  109. package/src/adapter/entry-points/console/consoleItemUrlLookup.test.ts +0 -63
  110. package/src/adapter/entry-points/console/consoleItemUrlLookup.ts +0 -66
  111. package/src/adapter/entry-points/console/consoleOperationApi.test.ts +0 -2523
  112. package/src/adapter/entry-points/console/consoleOperationApi.ts +0 -936
  113. package/src/adapter/entry-points/console/consoleProjectResolver.test.ts +0 -246
  114. package/src/adapter/entry-points/console/consoleProjectResolver.ts +0 -111
  115. package/src/adapter/entry-points/console/consoleReadApi.test.ts +0 -714
  116. package/src/adapter/entry-points/console/consoleReadApi.ts +0 -361
  117. package/src/adapter/entry-points/console/consoleTabNames.test.ts +0 -52
  118. package/src/adapter/entry-points/console/consoleTabNames.ts +0 -37
  119. package/src/adapter/entry-points/console/consoleUiDistSync.test.ts +0 -66
  120. package/src/adapter/entry-points/console/dashboardComposeService.test.ts +0 -595
  121. package/src/adapter/entry-points/console/dashboardComposeService.ts +0 -256
  122. package/src/adapter/entry-points/console/dashboardEmitterComposerKey.test.ts +0 -180
  123. package/src/adapter/entry-points/console/ensureConsoleRunning.test.ts +0 -115
  124. package/src/adapter/entry-points/console/ensureConsoleRunning.ts +0 -64
  125. package/src/adapter/entry-points/console/ui/.storybook/main.ts +0 -12
  126. package/src/adapter/entry-points/console/ui/.storybook/preview.ts +0 -15
  127. package/src/adapter/entry-points/console/ui/biome.json +0 -53
  128. package/src/adapter/entry-points/console/ui/components.json +0 -20
  129. package/src/adapter/entry-points/console/ui/e2e/consoleScenario.spec.ts +0 -725
  130. package/src/adapter/entry-points/console/ui/e2e/consoleTestHarness.ts +0 -831
  131. package/src/adapter/entry-points/console/ui/e2e/playwright.config.ts +0 -30
  132. package/src/adapter/entry-points/console/ui/e2e/tsconfig.json +0 -18
  133. package/src/adapter/entry-points/console/ui/index.html +0 -12
  134. package/src/adapter/entry-points/console/ui/jest-globals.cjs +0 -26
  135. package/src/adapter/entry-points/console/ui/jest.setup.ts +0 -1
  136. package/src/adapter/entry-points/console/ui/jest.styleMock.js +0 -1
  137. package/src/adapter/entry-points/console/ui/public/sw.js +0 -60
  138. package/src/adapter/entry-points/console/ui/src/components/ui/badge.stories.tsx +0 -35
  139. package/src/adapter/entry-points/console/ui/src/components/ui/badge.tsx +0 -28
  140. package/src/adapter/entry-points/console/ui/src/components/ui/button.stories.tsx +0 -34
  141. package/src/adapter/entry-points/console/ui/src/components/ui/button.tsx +0 -50
  142. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleCopyCodeButton.stories.tsx +0 -28
  143. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleCopyCodeButton.test.tsx +0 -65
  144. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleCopyCodeButton.tsx +0 -19
  145. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleMarkdownContent.stories.tsx +0 -61
  146. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleMarkdownContent.test.tsx +0 -199
  147. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleMarkdownContent.tsx +0 -166
  148. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleMermaidDiagram.stories.tsx +0 -22
  149. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleMermaidDiagram.test.tsx +0 -74
  150. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleMermaidDiagram.tsx +0 -84
  151. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleMermaidDiagramModalScreen.stories.tsx +0 -27
  152. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleMermaidDiagramModalScreen.test.tsx +0 -85
  153. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleMermaidDiagramModalScreen.tsx +0 -97
  154. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleReferenceLink.stories.tsx +0 -76
  155. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleReferenceLink.test.tsx +0 -56
  156. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleReferenceLink.tsx +0 -39
  157. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleChangedFileList.stories.tsx +0 -32
  158. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleChangedFileList.test.tsx +0 -105
  159. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleChangedFileList.tsx +0 -157
  160. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCommentComposer.stories.tsx +0 -68
  161. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCommentComposer.test.tsx +0 -612
  162. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCommentComposer.tsx +0 -276
  163. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCommentList.stories.tsx +0 -33
  164. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCommentList.test.tsx +0 -57
  165. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCommentList.tsx +0 -76
  166. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCommitList.stories.tsx +0 -25
  167. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCommitList.test.tsx +0 -55
  168. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCommitList.tsx +0 -49
  169. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCopyUrlButton.stories.tsx +0 -24
  170. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCopyUrlButton.test.tsx +0 -63
  171. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCopyUrlButton.tsx +0 -19
  172. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleFetchFailureAlert.stories.tsx +0 -33
  173. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleFetchFailureAlert.test.tsx +0 -62
  174. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleFetchFailureAlert.tsx +0 -59
  175. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleFileDiff.stories.tsx +0 -38
  176. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleFileDiff.test.tsx +0 -151
  177. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleFileDiff.tsx +0 -245
  178. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleItemDetail.stories.tsx +0 -514
  179. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleItemDetail.test.tsx +0 -727
  180. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleItemDetail.tsx +0 -387
  181. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleItemIcon.stories.tsx +0 -82
  182. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleItemIcon.test.tsx +0 -52
  183. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleItemIcon.tsx +0 -32
  184. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsolePullRequestDetail.stories.tsx +0 -48
  185. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsolePullRequestDetail.test.tsx +0 -235
  186. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsolePullRequestDetail.tsx +0 -145
  187. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsolePullRequestMergeableChip.stories.tsx +0 -29
  188. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsolePullRequestMergeableChip.test.tsx +0 -30
  189. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsolePullRequestMergeableChip.tsx +0 -50
  190. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsolePullRequestStatusBadges.stories.tsx +0 -38
  191. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsolePullRequestStatusBadges.test.tsx +0 -54
  192. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsolePullRequestStatusBadges.tsx +0 -60
  193. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleAirplaneModeButton.stories.tsx +0 -56
  194. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleAirplaneModeButton.test.tsx +0 -111
  195. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleAirplaneModeButton.tsx +0 -92
  196. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsolePanel.stories.tsx +0 -51
  197. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsolePanel.test.tsx +0 -59
  198. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsolePanel.tsx +0 -39
  199. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTabList.stories.tsx +0 -207
  200. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTabList.test.tsx +0 -332
  201. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTabList.tsx +0 -211
  202. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTimerSettingsModalDialog.stories.tsx +0 -49
  203. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTimerSettingsModalDialog.test.tsx +0 -157
  204. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTimerSettingsModalDialog.tsx +0 -118
  205. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleCopyStoryNameButton.stories.tsx +0 -23
  206. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleCopyStoryNameButton.test.tsx +0 -40
  207. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleCopyStoryNameButton.tsx +0 -17
  208. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleItemList.stories.tsx +0 -101
  209. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleItemList.test.tsx +0 -102
  210. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleItemList.tsx +0 -75
  211. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleItemSummary.stories.tsx +0 -40
  212. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleItemSummary.test.tsx +0 -213
  213. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleItemSummary.tsx +0 -115
  214. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleQueuedItemRow.stories.tsx +0 -50
  215. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleQueuedItemRow.test.tsx +0 -98
  216. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleQueuedItemRow.tsx +0 -66
  217. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleQueuedList.stories.tsx +0 -69
  218. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleQueuedList.test.tsx +0 -101
  219. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleQueuedList.tsx +0 -75
  220. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleStoryList.stories.tsx +0 -137
  221. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleStoryList.test.tsx +0 -554
  222. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleStoryList.tsx +0 -400
  223. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleStoryReorderPanel.stories.tsx +0 -30
  224. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleStoryReorderPanel.test.tsx +0 -111
  225. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleStoryReorderPanel.tsx +0 -91
  226. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleStorySummary.stories.tsx +0 -27
  227. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleStorySummary.test.tsx +0 -24
  228. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleStorySummary.tsx +0 -28
  229. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleCloseActions.stories.tsx +0 -14
  230. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleCloseActions.test.tsx +0 -21
  231. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleCloseActions.tsx +0 -26
  232. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleDangerousActions.stories.tsx +0 -14
  233. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleDangerousActions.test.tsx +0 -40
  234. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleDangerousActions.tsx +0 -37
  235. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleErrorToast.stories.tsx +0 -33
  236. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleNextActionDateActions.stories.tsx +0 -20
  237. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleNextActionDateActions.test.tsx +0 -48
  238. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleNextActionDateActions.tsx +0 -42
  239. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleOfflinePendingActionsPanel.stories.tsx +0 -115
  240. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleOfflinePendingActionsPanel.test.tsx +0 -262
  241. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleOfflinePendingActionsPanel.tsx +0 -123
  242. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleOperationMenu.stories.tsx +0 -65
  243. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleOperationMenu.test.tsx +0 -159
  244. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleOperationMenu.tsx +0 -55
  245. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsolePullRequestReviewActions.stories.tsx +0 -20
  246. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsolePullRequestReviewActions.test.tsx +0 -93
  247. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsolePullRequestReviewActions.tsx +0 -45
  248. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleStatusActions.stories.tsx +0 -17
  249. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleStatusActions.test.tsx +0 -49
  250. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleStatusActions.tsx +0 -66
  251. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleUndoToast.stories.tsx +0 -47
  252. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleUndoToast.test.tsx +0 -95
  253. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleUndoToast.tsx +0 -62
  254. package/src/adapter/entry-points/console/ui/src/features/console/components/shared/ConsoleClipboardCopyButton.stories.tsx +0 -32
  255. package/src/adapter/entry-points/console/ui/src/features/console/components/shared/ConsoleClipboardCopyButton.test.tsx +0 -101
  256. package/src/adapter/entry-points/console/ui/src/features/console/components/shared/ConsoleClipboardCopyButton.tsx +0 -80
  257. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useAirplaneMode.test.ts +0 -304
  258. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useAirplaneMode.ts +0 -167
  259. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleActionQueue.test.ts +0 -498
  260. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleActionQueue.ts +0 -277
  261. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleCaches.test.ts +0 -99
  262. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleCaches.ts +0 -90
  263. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleDetailPrefetch.test.ts +0 -110
  264. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleDetailPrefetch.ts +0 -83
  265. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleFeaturesConfig.test.ts +0 -51
  266. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleFeaturesConfig.ts +0 -39
  267. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleItemDetailData.test.ts +0 -229
  268. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleItemDetailData.ts +0 -194
  269. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleNavigation.test.ts +0 -151
  270. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleNavigation.ts +0 -128
  271. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleOperations.test.ts +0 -629
  272. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleOperations.ts +0 -417
  273. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleOverlay.test.ts +0 -40
  274. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleOverlay.ts +0 -71
  275. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsolePjcode.test.ts +0 -24
  276. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsolePjcode.ts +0 -17
  277. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleProjectList.test.ts +0 -97
  278. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleProjectList.ts +0 -44
  279. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleProjectTimer.test.ts +0 -59
  280. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleProjectTimer.ts +0 -26
  281. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleReferenceLink.test.ts +0 -48
  282. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleReferenceLink.ts +0 -39
  283. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleResource.test.ts +0 -41
  284. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleResource.ts +0 -57
  285. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleSwipeNavigation.test.ts +0 -115
  286. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleSwipeNavigation.ts +0 -115
  287. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleTabData.test.ts +0 -546
  288. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleTabData.ts +0 -278
  289. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleTimerSettings.test.ts +0 -110
  290. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleTimerSettings.ts +0 -70
  291. package/src/adapter/entry-points/console/ui/src/features/console/lib/airplaneSnapshot.test.ts +0 -387
  292. package/src/adapter/entry-points/console/ui/src/features/console/lib/airplaneSnapshot.ts +0 -407
  293. package/src/adapter/entry-points/console/ui/src/features/console/lib/consoleApi.test.ts +0 -446
  294. package/src/adapter/entry-points/console/ui/src/features/console/lib/consoleApi.ts +0 -533
  295. package/src/adapter/entry-points/console/ui/src/features/console/lib/imageProxy.test.ts +0 -78
  296. package/src/adapter/entry-points/console/ui/src/features/console/lib/imageProxy.ts +0 -34
  297. package/src/adapter/entry-points/console/ui/src/features/console/lib/markdown.test.ts +0 -252
  298. package/src/adapter/entry-points/console/ui/src/features/console/lib/markdown.ts +0 -207
  299. package/src/adapter/entry-points/console/ui/src/features/console/lib/mermaidLoader.test.ts +0 -27
  300. package/src/adapter/entry-points/console/ui/src/features/console/lib/mermaidLoader.ts +0 -71
  301. package/src/adapter/entry-points/console/ui/src/features/console/lib/mermaidZoom.test.ts +0 -88
  302. package/src/adapter/entry-points/console/ui/src/features/console/lib/mermaidZoom.ts +0 -34
  303. package/src/adapter/entry-points/console/ui/src/features/console/lib/navigation.ts +0 -7
  304. package/src/adapter/entry-points/console/ui/src/features/console/lib/resourceCache.test.ts +0 -104
  305. package/src/adapter/entry-points/console/ui/src/features/console/lib/resourceCache.ts +0 -79
  306. package/src/adapter/entry-points/console/ui/src/features/console/logic/actionToast.test.ts +0 -200
  307. package/src/adapter/entry-points/console/ui/src/features/console/logic/actionToast.ts +0 -122
  308. package/src/adapter/entry-points/console/ui/src/features/console/logic/clipboard.test.ts +0 -90
  309. package/src/adapter/entry-points/console/ui/src/features/console/logic/clipboard.ts +0 -37
  310. package/src/adapter/entry-points/console/ui/src/features/console/logic/colors.test.ts +0 -34
  311. package/src/adapter/entry-points/console/ui/src/features/console/logic/colors.ts +0 -85
  312. package/src/adapter/entry-points/console/ui/src/features/console/logic/diff.test.ts +0 -81
  313. package/src/adapter/entry-points/console/ui/src/features/console/logic/diff.ts +0 -61
  314. package/src/adapter/entry-points/console/ui/src/features/console/logic/fileStatus.test.ts +0 -35
  315. package/src/adapter/entry-points/console/ui/src/features/console/logic/fileStatus.ts +0 -21
  316. package/src/adapter/entry-points/console/ui/src/features/console/logic/fileTree.test.ts +0 -96
  317. package/src/adapter/entry-points/console/ui/src/features/console/logic/fileTree.ts +0 -93
  318. package/src/adapter/entry-points/console/ui/src/features/console/logic/grouping.test.ts +0 -229
  319. package/src/adapter/entry-points/console/ui/src/features/console/logic/grouping.ts +0 -106
  320. package/src/adapter/entry-points/console/ui/src/features/console/logic/imageFile.test.ts +0 -18
  321. package/src/adapter/entry-points/console/ui/src/features/console/logic/imageFile.ts +0 -16
  322. package/src/adapter/entry-points/console/ui/src/features/console/logic/itemIcons.test.ts +0 -97
  323. package/src/adapter/entry-points/console/ui/src/features/console/logic/itemIcons.ts +0 -95
  324. package/src/adapter/entry-points/console/ui/src/features/console/logic/navigation.test.ts +0 -53
  325. package/src/adapter/entry-points/console/ui/src/features/console/logic/navigation.ts +0 -33
  326. package/src/adapter/entry-points/console/ui/src/features/console/logic/operations.test.ts +0 -72
  327. package/src/adapter/entry-points/console/ui/src/features/console/logic/operations.ts +0 -61
  328. package/src/adapter/entry-points/console/ui/src/features/console/logic/overlay.test.ts +0 -325
  329. package/src/adapter/entry-points/console/ui/src/features/console/logic/overlay.ts +0 -94
  330. package/src/adapter/entry-points/console/ui/src/features/console/logic/postedComments.test.ts +0 -44
  331. package/src/adapter/entry-points/console/ui/src/features/console/logic/postedComments.ts +0 -17
  332. package/src/adapter/entry-points/console/ui/src/features/console/logic/references.test.ts +0 -103
  333. package/src/adapter/entry-points/console/ui/src/features/console/logic/references.ts +0 -64
  334. package/src/adapter/entry-points/console/ui/src/features/console/logic/relativeTime.test.ts +0 -74
  335. package/src/adapter/entry-points/console/ui/src/features/console/logic/relativeTime.ts +0 -53
  336. package/src/adapter/entry-points/console/ui/src/features/console/logic/swipe.test.ts +0 -34
  337. package/src/adapter/entry-points/console/ui/src/features/console/logic/swipe.ts +0 -28
  338. package/src/adapter/entry-points/console/ui/src/features/console/logic/tabAdvance.test.ts +0 -89
  339. package/src/adapter/entry-points/console/ui/src/features/console/logic/tabAdvance.ts +0 -30
  340. package/src/adapter/entry-points/console/ui/src/features/console/logic/timerSettings.test.ts +0 -61
  341. package/src/adapter/entry-points/console/ui/src/features/console/logic/timerSettings.ts +0 -77
  342. package/src/adapter/entry-points/console/ui/src/features/console/logic/types.ts +0 -173
  343. package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsoleItemDetailContainer.test.tsx +0 -629
  344. package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsoleItemDetailContainer.tsx +0 -351
  345. package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsolePage.test.tsx +0 -1469
  346. package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsolePage.tsx +0 -736
  347. package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsoleReferenceLinkContainer.tsx +0 -25
  348. package/src/adapter/entry-points/console/ui/src/features/console/testing/fixtures.ts +0 -418
  349. package/src/adapter/entry-points/console/ui/src/index.css +0 -1592
  350. package/src/adapter/entry-points/console/ui/src/lib/utils.ts +0 -4
  351. package/src/adapter/entry-points/console/ui/src/main.tsx +0 -21
  352. package/src/adapter/entry-points/console/ui/src/vite-env.d.ts +0 -1
  353. package/src/adapter/entry-points/console/ui/tsconfig.json +0 -26
  354. package/src/adapter/entry-points/console/ui/vite.config.ts +0 -24
  355. package/src/adapter/entry-points/console/ui-dist/assets/index-BYDbK1Fj.js +0 -88
  356. package/src/adapter/entry-points/console/ui-dist/assets/index-KyQISRuQ.css +0 -2
  357. package/src/adapter/entry-points/console/ui-dist/index.html +0 -13
  358. package/src/adapter/entry-points/console/ui-dist/sw.js +0 -60
  359. package/src/adapter/entry-points/console/webServer.test.ts +0 -2945
  360. package/src/adapter/entry-points/console/webServer.ts +0 -940
  361. package/src/adapter/entry-points/function/getStoryObjectMap.ts +0 -3
  362. package/src/adapter/entry-points/handlers/FileSystemConsoleTabsRepository.test.ts +0 -218
  363. package/src/adapter/entry-points/handlers/FileSystemConsoleTabsRepository.ts +0 -113
  364. package/src/adapter/entry-points/handlers/GetStoryObjectMapUseCaseHandler.test.ts +0 -110
  365. package/src/adapter/entry-points/handlers/GetStoryObjectMapUseCaseHandler.ts +0 -116
  366. package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.test.ts +0 -859
  367. package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts +0 -984
  368. package/src/adapter/entry-points/handlers/InTmuxByHumanSessionTokenCountHandler.test.ts +0 -126
  369. package/src/adapter/entry-points/handlers/InTmuxByHumanSessionTokenCountHandler.ts +0 -80
  370. package/src/adapter/entry-points/handlers/LiveSessionOauthTokenSelectHandler.test.ts +0 -491
  371. package/src/adapter/entry-points/handlers/LiveSessionOauthTokenSelectHandler.ts +0 -137
  372. package/src/adapter/entry-points/handlers/OauthTokenSelectHandler.test.ts +0 -508
  373. package/src/adapter/entry-points/handlers/OauthTokenSelectHandler.ts +0 -156
  374. package/src/adapter/entry-points/handlers/consoleListsWriter.test.ts +0 -332
  375. package/src/adapter/entry-points/handlers/consoleListsWriter.ts +0 -60
  376. package/src/adapter/entry-points/handlers/dashboardRowWriter.test.ts +0 -112
  377. package/src/adapter/entry-points/handlers/dashboardRowWriter.ts +0 -51
  378. package/src/adapter/entry-points/handlers/inTmuxByHumanDataWriter.test.ts +0 -285
  379. package/src/adapter/entry-points/handlers/inTmuxByHumanDataWriter.ts +0 -109
  380. package/src/adapter/entry-points/handlers/inTmuxByHumanSessionReconciler.test.ts +0 -170
  381. package/src/adapter/entry-points/handlers/inTmuxByHumanSessionReconciler.ts +0 -40
  382. package/src/adapter/entry-points/handlers/machineStatusWriter.test.ts +0 -191
  383. package/src/adapter/entry-points/handlers/machineStatusWriter.ts +0 -110
  384. package/src/adapter/entry-points/handlers/notifySilentTmuxSessions.test.ts +0 -548
  385. package/src/adapter/entry-points/handlers/notifySilentTmuxSessions.ts +0 -192
  386. package/src/adapter/entry-points/handlers/ownerCallFileCleaner.test.ts +0 -111
  387. package/src/adapter/entry-points/handlers/ownerCallFileCleaner.ts +0 -25
  388. package/src/adapter/entry-points/handlers/ownerCallFileStore.test.ts +0 -286
  389. package/src/adapter/entry-points/handlers/ownerCallFileStore.ts +0 -145
  390. package/src/adapter/entry-points/handlers/ownerReplyMarkerDirectoryResolve.test.ts +0 -55
  391. package/src/adapter/entry-points/handlers/ownerReplyMarkerDirectoryResolve.ts +0 -36
  392. package/src/adapter/entry-points/handlers/resetDegeneratedTmuxSessions.test.ts +0 -72
  393. package/src/adapter/entry-points/handlers/resetDegeneratedTmuxSessions.ts +0 -74
  394. package/src/adapter/entry-points/handlers/rotationOrderFileWriter.test.ts +0 -181
  395. package/src/adapter/entry-points/handlers/rotationOrderFileWriter.ts +0 -18
  396. package/src/adapter/entry-points/handlers/situationFileWriter.test.ts +0 -489
  397. package/src/adapter/entry-points/handlers/situationFileWriter.ts +0 -176
  398. package/src/adapter/entry-points/handlers/staleTmuxSessionCleaner.test.ts +0 -169
  399. package/src/adapter/entry-points/handlers/staleTmuxSessionCleaner.ts +0 -32
  400. package/src/adapter/entry-points/handlers/subscriptionDisabledTokenHandler.ts +0 -41
  401. package/src/adapter/entry-points/handlers/tokenExhaustionHandover.ts +0 -81
  402. package/src/adapter/entry-points/handlers/tokenStatusWriter.test.ts +0 -266
  403. package/src/adapter/entry-points/handlers/tokenStatusWriter.ts +0 -262
  404. package/src/adapter/proxy/ClaudeMessageResponseParser.test.ts +0 -211
  405. package/src/adapter/proxy/ClaudeMessageResponseParser.ts +0 -181
  406. package/src/adapter/proxy/RateLimitCache.test.ts +0 -1077
  407. package/src/adapter/proxy/RateLimitCache.ts +0 -385
  408. package/src/adapter/proxy/TokenListLoader.test.ts +0 -183
  409. package/src/adapter/proxy/TokenListLoader.ts +0 -75
  410. package/src/adapter/proxy/ensureProxyRunning.test.ts +0 -85
  411. package/src/adapter/proxy/ensureProxyRunning.ts +0 -41
  412. package/src/adapter/proxy/proxyEntry.test.ts +0 -552
  413. package/src/adapter/proxy/proxyEntry.ts +0 -214
  414. package/src/adapter/repositories/BaseGitHubRepository.test.ts +0 -26
  415. package/src/adapter/repositories/BaseGitHubRepository.ts +0 -26
  416. package/src/adapter/repositories/BrowserGitHubProjectRepository.test.ts +0 -108
  417. package/src/adapter/repositories/BrowserGitHubProjectRepository.ts +0 -118
  418. package/src/adapter/repositories/CliGitHubGraphqlRateLimitRepository.test.ts +0 -71
  419. package/src/adapter/repositories/CliGitHubGraphqlRateLimitRepository.ts +0 -21
  420. package/src/adapter/repositories/ConfigurableSilentSessionMessageComposer.test.ts +0 -324
  421. package/src/adapter/repositories/ConfigurableSilentSessionMessageComposer.ts +0 -148
  422. package/src/adapter/repositories/FetchWebhookRepository.ts +0 -8
  423. package/src/adapter/repositories/FileHandoverStateRepository.test.ts +0 -114
  424. package/src/adapter/repositories/FileHandoverStateRepository.ts +0 -73
  425. package/src/adapter/repositories/FileSystemInteractiveLiveSessionTranscriptResolver.test.ts +0 -514
  426. package/src/adapter/repositories/FileSystemInteractiveLiveSessionTranscriptResolver.ts +0 -109
  427. package/src/adapter/repositories/FileSystemKevReportWatermarkRepository.test.ts +0 -284
  428. package/src/adapter/repositories/FileSystemKevReportWatermarkRepository.ts +0 -128
  429. package/src/adapter/repositories/FileSystemSessionAssistantTurnsRepository.test.ts +0 -138
  430. package/src/adapter/repositories/FileSystemSessionAssistantTurnsRepository.ts +0 -113
  431. package/src/adapter/repositories/FileSystemSessionDegenerationCooldownStateRepository.test.ts +0 -121
  432. package/src/adapter/repositories/FileSystemSessionDegenerationCooldownStateRepository.ts +0 -103
  433. package/src/adapter/repositories/FileSystemSessionOutputActivityRepository.test.ts +0 -360
  434. package/src/adapter/repositories/FileSystemSessionOutputActivityRepository.ts +0 -77
  435. package/src/adapter/repositories/FileSystemSessionRecordReader.test.ts +0 -59
  436. package/src/adapter/repositories/FileSystemSessionRecordReader.ts +0 -31
  437. package/src/adapter/repositories/FileSystemSilentSessionCandidateStateRepository.test.ts +0 -287
  438. package/src/adapter/repositories/FileSystemSilentSessionCandidateStateRepository.ts +0 -125
  439. package/src/adapter/repositories/FileSystemSilentSessionHubTaskStatusCacheRepository.test.ts +0 -285
  440. package/src/adapter/repositories/FileSystemSilentSessionHubTaskStatusCacheRepository.ts +0 -119
  441. package/src/adapter/repositories/FileSystemSubAgentLivenessResolver.test.ts +0 -237
  442. package/src/adapter/repositories/FileSystemSubAgentLivenessResolver.ts +0 -57
  443. package/src/adapter/repositories/FileSystemSubAgentSilentSecondsResolver.test.ts +0 -56
  444. package/src/adapter/repositories/FileSystemSubAgentSilentSecondsResolver.ts +0 -32
  445. package/src/adapter/repositories/FileSystemSubAgentTranscriptDirectoryResolver.test.ts +0 -68
  446. package/src/adapter/repositories/FileSystemSubAgentTranscriptDirectoryResolver.ts +0 -23
  447. package/src/adapter/repositories/GitHubIssueCheckpointRepository.test.ts +0 -51
  448. package/src/adapter/repositories/GitHubIssueCheckpointRepository.ts +0 -47
  449. package/src/adapter/repositories/GitHubIssueCommentRepository.test.ts +0 -278
  450. package/src/adapter/repositories/GitHubIssueCommentRepository.ts +0 -109
  451. package/src/adapter/repositories/GoogleSpreadsheetRepository.integration.test.ts +0 -265
  452. package/src/adapter/repositories/GoogleSpreadsheetRepository.test.ts +0 -431
  453. package/src/adapter/repositories/GoogleSpreadsheetRepository.ts +0 -268
  454. package/src/adapter/repositories/GraphqlProjectRepository.diskCache.test.ts +0 -272
  455. package/src/adapter/repositories/GraphqlProjectRepository.errorHandling.test.ts +0 -111
  456. package/src/adapter/repositories/GraphqlProjectRepository.fetchProjectId.test.ts +0 -254
  457. package/src/adapter/repositories/GraphqlProjectRepository.test.ts +0 -209
  458. package/src/adapter/repositories/GraphqlProjectRepository.ts +0 -707
  459. package/src/adapter/repositories/GraphqlProjectRepositoryProjectLocation.test.ts +0 -297
  460. package/src/adapter/repositories/KyHttpRepository.ts +0 -8
  461. package/src/adapter/repositories/KySlackRepository.test.ts +0 -172
  462. package/src/adapter/repositories/KySlackRepository.ts +0 -298
  463. package/src/adapter/repositories/LocalCommandIssueAttachmentRepository.test.ts +0 -193
  464. package/src/adapter/repositories/LocalCommandIssueAttachmentRepository.ts +0 -106
  465. package/src/adapter/repositories/LocalProcessLiveSessionProcessSnapshotProvider.test.ts +0 -190
  466. package/src/adapter/repositories/LocalProcessLiveSessionProcessSnapshotProvider.ts +0 -102
  467. package/src/adapter/repositories/LocalStorageCacheRepository.test.ts +0 -265
  468. package/src/adapter/repositories/LocalStorageCacheRepository.ts +0 -79
  469. package/src/adapter/repositories/LocalStorageRepository.integration.test.ts +0 -142
  470. package/src/adapter/repositories/LocalStorageRepository.test.ts +0 -173
  471. package/src/adapter/repositories/LocalStorageRepository.ts +0 -30
  472. package/src/adapter/repositories/NoUnansweredOwnerCallStatusProvider.test.ts +0 -15
  473. package/src/adapter/repositories/NoUnansweredOwnerCallStatusProvider.ts +0 -9
  474. package/src/adapter/repositories/NodeLocalCommandRunner.largeOutput.test.ts +0 -16
  475. package/src/adapter/repositories/NodeLocalCommandRunner.test.ts +0 -118
  476. package/src/adapter/repositories/NodeLocalCommandRunner.ts +0 -66
  477. package/src/adapter/repositories/NodeProcessSignalRepository.test.ts +0 -82
  478. package/src/adapter/repositories/NodeProcessSignalRepository.ts +0 -47
  479. package/src/adapter/repositories/NodeSubAgentProcessLister.test.ts +0 -44
  480. package/src/adapter/repositories/NodeSubAgentProcessLister.ts +0 -40
  481. package/src/adapter/repositories/NodeTmuxSessionRepository.test.ts +0 -546
  482. package/src/adapter/repositories/NodeTmuxSessionRepository.ts +0 -245
  483. package/src/adapter/repositories/OauthAPIClaudeRepository.ts +0 -279
  484. package/src/adapter/repositories/OauthAPIProxyClaudeRepository.test.ts +0 -166
  485. package/src/adapter/repositories/OauthAPIProxyClaudeRepository.ts +0 -32
  486. package/src/adapter/repositories/OauthProxyClaudeRepository.test.ts +0 -428
  487. package/src/adapter/repositories/OauthProxyClaudeRepository.ts +0 -124
  488. package/src/adapter/repositories/ProcClaudeHandoverSessionRepository.test.ts +0 -242
  489. package/src/adapter/repositories/ProcClaudeHandoverSessionRepository.ts +0 -261
  490. package/src/adapter/repositories/ProcClaudeInteractiveSessionRepository.test.ts +0 -184
  491. package/src/adapter/repositories/ProcClaudeInteractiveSessionRepository.ts +0 -138
  492. package/src/adapter/repositories/ProcClaudeLiveSessionRepository.test.ts +0 -208
  493. package/src/adapter/repositories/ProcClaudeLiveSessionRepository.ts +0 -130
  494. package/src/adapter/repositories/ProcFsProcessEnvironReader.test.ts +0 -60
  495. package/src/adapter/repositories/ProcFsProcessEnvironReader.ts +0 -38
  496. package/src/adapter/repositories/ProcHostMetricsRepository.test.ts +0 -207
  497. package/src/adapter/repositories/ProcHostMetricsRepository.ts +0 -181
  498. package/src/adapter/repositories/ProcTakeOwnershipSpawnRepository.test.ts +0 -231
  499. package/src/adapter/repositories/ProcTakeOwnershipSpawnRepository.ts +0 -134
  500. package/src/adapter/repositories/ProcessListSessionSubAgentActivityRepository.test.ts +0 -121
  501. package/src/adapter/repositories/ProcessListSessionSubAgentActivityRepository.ts +0 -58
  502. package/src/adapter/repositories/ProjectIssuesCacheRepository.test.ts +0 -218
  503. package/src/adapter/repositories/ProjectIssuesCacheRepository.ts +0 -141
  504. package/src/adapter/repositories/ProxyClaudeTokenUsageRepository.test.ts +0 -1195
  505. package/src/adapter/repositories/ProxyClaudeTokenUsageRepository.ts +0 -185
  506. package/src/adapter/repositories/ProxyRateLimitCacheRepository.test.ts +0 -116
  507. package/src/adapter/repositories/ProxyRateLimitCacheRepository.ts +0 -67
  508. package/src/adapter/repositories/RateLimitSnapshotRepository.ts +0 -50
  509. package/src/adapter/repositories/RealSleeper.test.ts +0 -19
  510. package/src/adapter/repositories/RealSleeper.ts +0 -12
  511. package/src/adapter/repositories/RestProjectRepository.test.ts +0 -277
  512. package/src/adapter/repositories/RestProjectRepository.ts +0 -129
  513. package/src/adapter/repositories/SqliteClaudeMessageResponseRepository.test.ts +0 -313
  514. package/src/adapter/repositories/SqliteClaudeMessageResponseRepository.ts +0 -164
  515. package/src/adapter/repositories/SystemDateRepository.test.ts +0 -60
  516. package/src/adapter/repositories/SystemDateRepository.ts +0 -34
  517. package/src/adapter/repositories/TmuxSilentSessionNotificationRepository.test.ts +0 -253
  518. package/src/adapter/repositories/TmuxSilentSessionNotificationRepository.ts +0 -158
  519. package/src/adapter/repositories/TranscriptOwnerCallStatusProvider.queuedReply.test.ts +0 -171
  520. package/src/adapter/repositories/TranscriptOwnerCallStatusProvider.singleScan.test.ts +0 -86
  521. package/src/adapter/repositories/TranscriptOwnerCallStatusProvider.test.ts +0 -996
  522. package/src/adapter/repositories/TranscriptOwnerCallStatusProvider.ts +0 -396
  523. package/src/adapter/repositories/TranscriptRefusalTailStatusProvider.test.ts +0 -208
  524. package/src/adapter/repositories/TranscriptRefusalTailStatusProvider.ts +0 -80
  525. package/src/adapter/repositories/TranscriptSessionSubAgentActivityRepository.test.ts +0 -1674
  526. package/src/adapter/repositories/TranscriptSessionSubAgentActivityRepository.ts +0 -459
  527. package/src/adapter/repositories/clSessionScopeUnitName.test.ts +0 -76
  528. package/src/adapter/repositories/clSessionScopeUnitName.ts +0 -5
  529. package/src/adapter/repositories/clSessionScopeUnitNameFromCgroupContent.test.ts +0 -34
  530. package/src/adapter/repositories/clSessionScopeUnitNameFromCgroupContent.ts +0 -8
  531. package/src/adapter/repositories/githubGraphqlClient.test.ts +0 -479
  532. package/src/adapter/repositories/githubGraphqlClient.ts +0 -243
  533. package/src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.test.ts +0 -5182
  534. package/src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.ts +0 -3303
  535. package/src/adapter/repositories/issue/ApiV3IssueRepository.test.ts +0 -46
  536. package/src/adapter/repositories/issue/ApiV3IssueRepository.ts +0 -88
  537. package/src/adapter/repositories/issue/GraphqlProjectItemRepository.test.ts +0 -1776
  538. package/src/adapter/repositories/issue/GraphqlProjectItemRepository.ts +0 -1552
  539. package/src/adapter/repositories/issue/RestIssueRepository.test.ts +0 -393
  540. package/src/adapter/repositories/issue/RestIssueRepository.ts +0 -252
  541. package/src/adapter/repositories/issue/gitHubRawUrl.test.ts +0 -29
  542. package/src/adapter/repositories/issue/gitHubRawUrl.ts +0 -30
  543. package/src/adapter/repositories/issue/githubRateLimitRetry.test.ts +0 -167
  544. package/src/adapter/repositories/issue/githubRateLimitRetry.ts +0 -109
  545. package/src/adapter/repositories/localStorageCacheDirectory.test.ts +0 -81
  546. package/src/adapter/repositories/localStorageCacheDirectory.ts +0 -13
  547. package/src/adapter/repositories/projectFieldDefinition.test.ts +0 -191
  548. package/src/adapter/repositories/projectFieldDefinition.ts +0 -144
  549. package/src/adapter/repositories/utils.test.ts +0 -55
  550. package/src/adapter/repositories/utils.ts +0 -45
  551. package/src/domain/entities/ClaudeHandoverSession.ts +0 -12
  552. package/src/domain/entities/ClaudeMessageResponse.ts +0 -31
  553. package/src/domain/entities/ClaudeTokenUsage.ts +0 -17
  554. package/src/domain/entities/ClaudeWindowUsage.ts +0 -5
  555. package/src/domain/entities/Comment.ts +0 -5
  556. package/src/domain/entities/InteractiveLiveSession.ts +0 -6
  557. package/src/domain/entities/Issue.ts +0 -31
  558. package/src/domain/entities/KevReportWatermark.ts +0 -4
  559. package/src/domain/entities/LiveSessionActivitySnapshot.ts +0 -14
  560. package/src/domain/entities/LiveSessionOutputActivity.ts +0 -4
  561. package/src/domain/entities/LiveSessionProcessSnapshot.ts +0 -18
  562. package/src/domain/entities/LiveTmuxSession.ts +0 -4
  563. package/src/domain/entities/Member.ts +0 -3
  564. package/src/domain/entities/OutputDegeneration.ts +0 -10
  565. package/src/domain/entities/Project.ts +0 -88
  566. package/src/domain/entities/ProjectField.ts +0 -3
  567. package/src/domain/entities/ProjectFieldName.ts +0 -2
  568. package/src/domain/entities/ProjectFieldSingleSelect.ts +0 -8
  569. package/src/domain/entities/ProjectFieldSingleSelectOption.ts +0 -8
  570. package/src/domain/entities/RequiredProjectField.ts +0 -68
  571. package/src/domain/entities/SearchedIssue.ts +0 -11
  572. package/src/domain/entities/StoryObjectMap.ts +0 -12
  573. package/src/domain/entities/TokenExhaustionHandoverState.ts +0 -8
  574. package/src/domain/entities/WorkflowStatus.ts +0 -66
  575. package/src/domain/usecases/ActionAnnouncementUseCase.test.ts +0 -91
  576. package/src/domain/usecases/ActionAnnouncementUseCase.ts +0 -78
  577. package/src/domain/usecases/AgentDesignationLabelAdoptUseCase.test.ts +0 -222
  578. package/src/domain/usecases/AgentDesignationLabelAdoptUseCase.ts +0 -76
  579. package/src/domain/usecases/AnalyzeProblemByIssueUseCase.test.ts +0 -118
  580. package/src/domain/usecases/AnalyzeProblemByIssueUseCase.ts +0 -112
  581. package/src/domain/usecases/AnalyzeStoriesUseCase.test.ts +0 -82
  582. package/src/domain/usecases/AnalyzeStoriesUseCase.ts +0 -296
  583. package/src/domain/usecases/AssignNoAssigneeIssueToManagerUseCase.test.ts +0 -578
  584. package/src/domain/usecases/AssignNoAssigneeIssueToManagerUseCase.ts +0 -137
  585. package/src/domain/usecases/CONTRIBUTING_FOR_TEST.md +0 -259
  586. package/src/domain/usecases/ChangeStatusByStoryColorUseCase.test.ts +0 -437
  587. package/src/domain/usecases/ChangeStatusByStoryColorUseCase.ts +0 -80
  588. package/src/domain/usecases/ChangeTargetPullRequestApprover.test.ts +0 -248
  589. package/src/domain/usecases/ChangeTargetPullRequestApprover.ts +0 -69
  590. package/src/domain/usecases/CheckIssueReviewReadinessUseCase.test.ts +0 -411
  591. package/src/domain/usecases/CheckIssueReviewReadinessUseCase.ts +0 -142
  592. package/src/domain/usecases/ClearDependedIssueURLUseCase.test.ts +0 -1120
  593. package/src/domain/usecases/ClearDependedIssueURLUseCase.ts +0 -161
  594. package/src/domain/usecases/ClearPastNextActionDateHourUseCase.test.ts +0 -345
  595. package/src/domain/usecases/ClearPastNextActionDateHourUseCase.ts +0 -81
  596. package/src/domain/usecases/CliErrorReportUseCase.test.ts +0 -162
  597. package/src/domain/usecases/CliErrorReportUseCase.ts +0 -72
  598. package/src/domain/usecases/ConflictedIssueRevertUseCase.test.ts +0 -886
  599. package/src/domain/usecases/ConflictedIssueRevertUseCase.ts +0 -146
  600. package/src/domain/usecases/CreateEstimationIssueUseCase.test.ts +0 -227
  601. package/src/domain/usecases/CreateEstimationIssueUseCase.ts +0 -205
  602. package/src/domain/usecases/CreateNewStoryByLabelUseCase.test.ts +0 -1084
  603. package/src/domain/usecases/CreateNewStoryByLabelUseCase.ts +0 -146
  604. package/src/domain/usecases/DailySecurityScanUseCase.test.ts +0 -1709
  605. package/src/domain/usecases/DailySecurityScanUseCase.ts +0 -476
  606. package/src/domain/usecases/DefaultSilentSessionMessageComposer.test.ts +0 -533
  607. package/src/domain/usecases/DefaultSilentSessionMessageComposer.ts +0 -122
  608. package/src/domain/usecases/GetStoryObjectMapUseCase.test.ts +0 -330
  609. package/src/domain/usecases/GetStoryObjectMapUseCase.ts +0 -79
  610. package/src/domain/usecases/HandleScheduledEventUseCase.test.ts +0 -1913
  611. package/src/domain/usecases/HandleScheduledEventUseCase.ts +0 -846
  612. package/src/domain/usecases/InTmuxByHumanSessionTokenCountUseCase.test.ts +0 -175
  613. package/src/domain/usecases/InTmuxByHumanSessionTokenCountUseCase.ts +0 -63
  614. package/src/domain/usecases/IssueNoStatusUpdateUseCase.test.ts +0 -165
  615. package/src/domain/usecases/IssueNoStatusUpdateUseCase.ts +0 -44
  616. package/src/domain/usecases/IssueRejectionEvaluator.test.ts +0 -1137
  617. package/src/domain/usecases/IssueRejectionEvaluator.ts +0 -340
  618. package/src/domain/usecases/LiveSessionOauthTokenSelectUseCase.test.ts +0 -679
  619. package/src/domain/usecases/LiveSessionOauthTokenSelectUseCase.ts +0 -178
  620. package/src/domain/usecases/NotifyFinishedIssuePreparationUseCase.test.ts +0 -5441
  621. package/src/domain/usecases/NotifyFinishedIssuePreparationUseCase.ts +0 -891
  622. package/src/domain/usecases/NotifySilentLiveSessionsUseCase.test.ts +0 -2069
  623. package/src/domain/usecases/NotifySilentLiveSessionsUseCase.ts +0 -489
  624. package/src/domain/usecases/OauthTokenSelectUseCase.test.ts +0 -662
  625. package/src/domain/usecases/OauthTokenSelectUseCase.ts +0 -274
  626. package/src/domain/usecases/OutputDegenerationDetector.test.ts +0 -167
  627. package/src/domain/usecases/OutputDegenerationDetector.ts +0 -169
  628. package/src/domain/usecases/ProjectRequiredFieldCreateUseCase.test.ts +0 -711
  629. package/src/domain/usecases/ProjectRequiredFieldCreateUseCase.ts +0 -146
  630. package/src/domain/usecases/QualityCheckAdvanceUseCase.test.ts +0 -421
  631. package/src/domain/usecases/QualityCheckAdvanceUseCase.ts +0 -76
  632. package/src/domain/usecases/ReopenedDoneIssueRevertUseCase.test.ts +0 -188
  633. package/src/domain/usecases/ReopenedDoneIssueRevertUseCase.ts +0 -57
  634. package/src/domain/usecases/ResolveInteractiveLiveSessionsUseCase.test.ts +0 -303
  635. package/src/domain/usecases/ResolveInteractiveLiveSessionsUseCase.ts +0 -155
  636. package/src/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.test.ts +0 -1838
  637. package/src/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.ts +0 -221
  638. package/src/domain/usecases/RevertOrphanedPreparationUseCase.test.ts +0 -2392
  639. package/src/domain/usecases/RevertOrphanedPreparationUseCase.ts +0 -499
  640. package/src/domain/usecases/SessionOutputDegenerationRecoveryUseCase.test.ts +0 -224
  641. package/src/domain/usecases/SessionOutputDegenerationRecoveryUseCase.ts +0 -142
  642. package/src/domain/usecases/SetDependedIssueUrlForOpenTaskPRsUseCase.test.ts +0 -360
  643. package/src/domain/usecases/SetDependedIssueUrlForOpenTaskPRsUseCase.ts +0 -70
  644. package/src/domain/usecases/SetNoStoryIssueToStoryUseCase.test.ts +0 -400
  645. package/src/domain/usecases/SetNoStoryIssueToStoryUseCase.ts +0 -48
  646. package/src/domain/usecases/SetWorkflowManagementIssueToStoryUseCase.test.ts +0 -696
  647. package/src/domain/usecases/SetWorkflowManagementIssueToStoryUseCase.ts +0 -201
  648. package/src/domain/usecases/SetupTowerDefenceProjectUseCase.test.ts +0 -1363
  649. package/src/domain/usecases/SetupTowerDefenceProjectUseCase.ts +0 -215
  650. package/src/domain/usecases/StaleTaskPullRequestCloseUseCase.test.ts +0 -170
  651. package/src/domain/usecases/StaleTaskPullRequestCloseUseCase.ts +0 -38
  652. package/src/domain/usecases/StaleTmuxSessionKillUseCase.test.ts +0 -283
  653. package/src/domain/usecases/StaleTmuxSessionKillUseCase.ts +0 -98
  654. package/src/domain/usecases/StartPreparationUseCase.test.ts +0 -7822
  655. package/src/domain/usecases/StartPreparationUseCase.ts +0 -876
  656. package/src/domain/usecases/SubscriptionDisabledIssueUseCase.test.ts +0 -200
  657. package/src/domain/usecases/SubscriptionDisabledIssueUseCase.ts +0 -74
  658. package/src/domain/usecases/TokenExhaustionHandoverUseCase.test.ts +0 -838
  659. package/src/domain/usecases/TokenExhaustionHandoverUseCase.ts +0 -439
  660. package/src/domain/usecases/UpdateIssueStatusByLabelUseCase.test.ts +0 -306
  661. package/src/domain/usecases/UpdateIssueStatusByLabelUseCase.ts +0 -64
  662. package/src/domain/usecases/UpdateRateLimitCacheUseCase.test.ts +0 -178
  663. package/src/domain/usecases/UpdateRateLimitCacheUseCase.ts +0 -22
  664. package/src/domain/usecases/adapter-interfaces/ClaudeHandoverSessionRepository.ts +0 -5
  665. package/src/domain/usecases/adapter-interfaces/ClaudeInteractiveSessionRepository.ts +0 -9
  666. package/src/domain/usecases/adapter-interfaces/ClaudeLiveSessionRepository.ts +0 -8
  667. package/src/domain/usecases/adapter-interfaces/ClaudeMessageResponseRepository.ts +0 -5
  668. package/src/domain/usecases/adapter-interfaces/ClaudeRepository.ts +0 -6
  669. package/src/domain/usecases/adapter-interfaces/ClaudeTokenUsageRepository.ts +0 -8
  670. package/src/domain/usecases/adapter-interfaces/ConsoleTabsRepository.ts +0 -12
  671. package/src/domain/usecases/adapter-interfaces/CopilotRepository.ts +0 -3
  672. package/src/domain/usecases/adapter-interfaces/DateRepository.ts +0 -7
  673. package/src/domain/usecases/adapter-interfaces/GitHubGraphqlRateLimitRepository.ts +0 -3
  674. package/src/domain/usecases/adapter-interfaces/HttpRepository.ts +0 -3
  675. package/src/domain/usecases/adapter-interfaces/InteractiveLiveSessionTranscriptResolver.ts +0 -7
  676. package/src/domain/usecases/adapter-interfaces/IssueAttachmentRepository.ts +0 -9
  677. package/src/domain/usecases/adapter-interfaces/IssueCheckpointRepository.ts +0 -3
  678. package/src/domain/usecases/adapter-interfaces/IssueCommentRepository.ts +0 -7
  679. package/src/domain/usecases/adapter-interfaces/IssueRepository.ts +0 -229
  680. package/src/domain/usecases/adapter-interfaces/KevReportWatermarkRepository.ts +0 -11
  681. package/src/domain/usecases/adapter-interfaces/LiveSessionProcessSnapshotProvider.ts +0 -5
  682. package/src/domain/usecases/adapter-interfaces/LocalCommandRunner.ts +0 -16
  683. package/src/domain/usecases/adapter-interfaces/OwnerCallStatusProvider.ts +0 -5
  684. package/src/domain/usecases/adapter-interfaces/ProcessEnvironReader.ts +0 -3
  685. package/src/domain/usecases/adapter-interfaces/ProcessSignalRepository.ts +0 -5
  686. package/src/domain/usecases/adapter-interfaces/ProjectRepository.ts +0 -29
  687. package/src/domain/usecases/adapter-interfaces/RateLimitCacheRepository.ts +0 -10
  688. package/src/domain/usecases/adapter-interfaces/RefusalTailStatusProvider.ts +0 -5
  689. package/src/domain/usecases/adapter-interfaces/SessionAssistantTurnsRepository.ts +0 -6
  690. package/src/domain/usecases/adapter-interfaces/SessionDegenerationCooldownStateRepository.ts +0 -4
  691. package/src/domain/usecases/adapter-interfaces/SessionOutputActivityRepository.ts +0 -7
  692. package/src/domain/usecases/adapter-interfaces/SessionRecordReader.ts +0 -3
  693. package/src/domain/usecases/adapter-interfaces/SessionSubAgentActivityRepository.ts +0 -8
  694. package/src/domain/usecases/adapter-interfaces/SilentSessionCandidateStateRepository.ts +0 -10
  695. package/src/domain/usecases/adapter-interfaces/SilentSessionHubTaskStatusCacheRepository.ts +0 -20
  696. package/src/domain/usecases/adapter-interfaces/SilentSessionMessageComposer.ts +0 -18
  697. package/src/domain/usecases/adapter-interfaces/SilentSessionNotificationRepository.ts +0 -6
  698. package/src/domain/usecases/adapter-interfaces/SlackRepository.ts +0 -20
  699. package/src/domain/usecases/adapter-interfaces/Sleeper.ts +0 -3
  700. package/src/domain/usecases/adapter-interfaces/SpreadsheetRepository.ts +0 -18
  701. package/src/domain/usecases/adapter-interfaces/StatusDefaultRepository.ts +0 -5
  702. package/src/domain/usecases/adapter-interfaces/SubAgentLivenessResolver.ts +0 -6
  703. package/src/domain/usecases/adapter-interfaces/SubAgentProcessLister.ts +0 -8
  704. package/src/domain/usecases/adapter-interfaces/SubAgentSilentSecondsResolver.ts +0 -3
  705. package/src/domain/usecases/adapter-interfaces/SubAgentTranscriptDirectoryResolver.ts +0 -6
  706. package/src/domain/usecases/adapter-interfaces/TakeOwnershipSpawnRepository.ts +0 -9
  707. package/src/domain/usecases/adapter-interfaces/TmuxSessionRepository.ts +0 -20
  708. package/src/domain/usecases/adapter-interfaces/TokenExhaustionHandoverStateRepository.ts +0 -6
  709. package/src/domain/usecases/adapter-interfaces/TokenRateLimitSnapshotRepository.ts +0 -22
  710. package/src/domain/usecases/adapter-interfaces/WebhookRepository.ts +0 -3
  711. package/src/domain/usecases/agentReportPrefix.ts +0 -1
  712. package/src/domain/usecases/autoStatusCheckComments.ts +0 -1
  713. package/src/domain/usecases/console/.gitkeep +0 -0
  714. package/src/domain/usecases/console/GenerateConsoleListsUseCase.test.ts +0 -887
  715. package/src/domain/usecases/console/GenerateConsoleListsUseCase.ts +0 -368
  716. package/src/domain/usecases/dashboard/ComposeDashboardUseCase.test.ts +0 -654
  717. package/src/domain/usecases/dashboard/ComposeDashboardUseCase.ts +0 -318
  718. package/src/domain/usecases/dashboard/DashboardProjectCode.test.ts +0 -34
  719. package/src/domain/usecases/dashboard/DashboardProjectCode.ts +0 -27
  720. package/src/domain/usecases/dashboard/GenerateDashboardRowUseCase.test.ts +0 -160
  721. package/src/domain/usecases/dashboard/GenerateDashboardRowUseCase.ts +0 -69
  722. package/src/domain/usecases/dashboard/GenerateTokenStatusUseCase.test.ts +0 -362
  723. package/src/domain/usecases/dashboard/GenerateTokenStatusUseCase.ts +0 -234
  724. package/src/domain/usecases/ensureAgentOptionAndGetId.ts +0 -47
  725. package/src/domain/usecases/extractFencedJsonBlocks.test.ts +0 -40
  726. package/src/domain/usecases/extractFencedJsonBlocks.ts +0 -21
  727. package/src/domain/usecases/extractNextStepAgent.test.ts +0 -58
  728. package/src/domain/usecases/extractNextStepAgent.ts +0 -18
  729. package/src/domain/usecases/extractNextStepAgentFromComments.ts +0 -13
  730. package/src/domain/usecases/findLastAgentReport.test.ts +0 -121
  731. package/src/domain/usecases/findLastAgentReport.ts +0 -14
  732. package/src/domain/usecases/intmux/GenerateInTmuxByHumanDataUseCase.test.ts +0 -339
  733. package/src/domain/usecases/intmux/GenerateInTmuxByHumanDataUseCase.ts +0 -188
  734. package/src/domain/usecases/intmux/InTmuxByHumanSessionReconcileUseCase.test.ts +0 -389
  735. package/src/domain/usecases/intmux/InTmuxByHumanSessionReconcileUseCase.ts +0 -103
  736. package/src/domain/usecases/intmux/OwnerCallFile.test.ts +0 -184
  737. package/src/domain/usecases/intmux/OwnerCallFile.ts +0 -80
  738. package/src/domain/usecases/isAgentReportBody.test.ts +0 -108
  739. package/src/domain/usecases/isAgentReportBody.ts +0 -52
  740. package/src/domain/usecases/isAuthorAuthorizedForAutoStatusCheck.ts +0 -12
  741. package/src/domain/usecases/isHumanComment.test.ts +0 -77
  742. package/src/domain/usecases/isHumanComment.ts +0 -23
  743. package/src/domain/usecases/isRecord.ts +0 -2
  744. package/src/domain/usecases/issueReactivationTriggerIsPending.test.ts +0 -541
  745. package/src/domain/usecases/issueReactivationTriggerIsPending.ts +0 -25
  746. package/src/domain/usecases/nextStepAgentDispatchRepeatedMessage.ts +0 -2
  747. package/src/domain/usecases/normalizeReportBody.test.ts +0 -24
  748. package/src/domain/usecases/normalizeReportBody.ts +0 -2
  749. package/src/domain/usecases/resolveAllowedIssueAuthors.test.ts +0 -51
  750. package/src/domain/usecases/resolveAllowedIssueAuthors.ts +0 -6
  751. package/src/domain/usecases/resolveLabelsAsLlmAgentName.test.ts +0 -42
  752. package/src/domain/usecases/resolveLabelsAsLlmAgentName.ts +0 -6
  753. package/src/domain/usecases/resolveLabelsNotRequiringPullRequest.test.ts +0 -33
  754. package/src/domain/usecases/resolveLabelsNotRequiringPullRequest.ts +0 -7
  755. package/src/domain/usecases/resolveNextStepAgentDispatchRepetition.test.ts +0 -337
  756. package/src/domain/usecases/resolveNextStepAgentDispatchRepetition.ts +0 -133
  757. package/src/domain/usecases/silentSessionReminderSentinel.ts +0 -9
  758. package/src/domain/usecases/triagerAgentName.ts +0 -4
  759. package/src/domain/usecases/utils.test.ts +0 -35
  760. package/src/domain/usecases/utils.ts +0 -6
  761. package/src/index.test.ts +0 -8
  762. package/src/index.ts +0 -10
  763. package/src/releaseConfig.test.ts +0 -40
  764. package/tsconfig.build.json +0 -18
  765. package/tsconfig.json +0 -25
  766. package/types/adapter/entry-points/handlers/resolveUnansweredOwnerCalls.d.ts +0 -13
  767. package/types/adapter/entry-points/handlers/resolveUnansweredOwnerCalls.d.ts.map +0 -1
  768. package/types/adapter/repositories/FileSystemSilentSessionNotifiedStateRepository.d.ts +0 -16
  769. package/types/adapter/repositories/FileSystemSilentSessionNotifiedStateRepository.d.ts.map +0 -1
  770. package/types/adapter/repositories/issue/issueTimelineUtils.d.ts +0 -12
  771. package/types/adapter/repositories/issue/issueTimelineUtils.d.ts.map +0 -1
  772. package/types/domain/entities/UnansweredOwnerCall.d.ts +0 -5
  773. package/types/domain/entities/UnansweredOwnerCall.d.ts.map +0 -1
  774. package/types/domain/entities/WorkingTime.d.ts +0 -8
  775. package/types/domain/entities/WorkingTime.d.ts.map +0 -1
  776. package/types/domain/usecases/ChangeStatusLongInReviewIssueUseCase.d.ts +0 -17
  777. package/types/domain/usecases/ChangeStatusLongInReviewIssueUseCase.d.ts.map +0 -1
  778. package/types/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.d.ts +0 -23
  779. package/types/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.d.ts.map +0 -1
  780. package/types/domain/usecases/GenerateWorkingTimeReportUseCase.d.ts +0 -50
  781. package/types/domain/usecases/GenerateWorkingTimeReportUseCase.d.ts.map +0 -1
  782. package/types/domain/usecases/TriagerApprovalDispatchUseCase.d.ts +0 -15
  783. package/types/domain/usecases/TriagerApprovalDispatchUseCase.d.ts.map +0 -1
  784. package/types/domain/usecases/adapter-interfaces/SilentSessionNotifiedStateRepository.d.ts +0 -11
  785. package/types/domain/usecases/adapter-interfaces/SilentSessionNotifiedStateRepository.d.ts.map +0 -1
  786. package/types/domain/usecases/awaitingOwnerApprovalMessage.d.ts +0 -3
  787. package/types/domain/usecases/awaitingOwnerApprovalMessage.d.ts.map +0 -1
  788. package/types/domain/usecases/findLastAgentDeclaringReport.d.ts +0 -5
  789. package/types/domain/usecases/findLastAgentDeclaringReport.d.ts.map +0 -1
  790. package/types/domain/usecases/isPullRequestDeclaredUnnecessary.d.ts +0 -5
  791. package/types/domain/usecases/isPullRequestDeclaredUnnecessary.d.ts.map +0 -1
  792. package/types/domain/usecases/isWaitingForOwnerApproval.d.ts +0 -2
  793. package/types/domain/usecases/isWaitingForOwnerApproval.d.ts.map +0 -1
  794. package/types/domain/usecases/returnedToAwaitingWorkspaceMessage.d.ts +0 -3
  795. package/types/domain/usecases/returnedToAwaitingWorkspaceMessage.d.ts.map +0 -1
@@ -1,1363 +0,0 @@
1
- import { mock } from 'jest-mock-extended';
2
- import { SetupTowerDefenceProjectUseCase } from './SetupTowerDefenceProjectUseCase';
3
- import { ProjectRepository } from './adapter-interfaces/ProjectRepository';
4
- import { IssueRepository } from './adapter-interfaces/IssueRepository';
5
- import { StatusDefaultRepository } from './adapter-interfaces/StatusDefaultRepository';
6
- import { FieldOption, Project } from '../entities/Project';
7
- import { Issue } from '../entities/Issue';
8
- import {
9
- AWAITING_QUALITY_CHECK_STATUS_NAME,
10
- AWAITING_WORKSPACE_STATUS_NAME,
11
- DONE_STATUS_NAME,
12
- FAILED_PREPARATION_STATUS_NAME,
13
- ICEBOX_STATUS_NAME,
14
- IN_TMUX_BY_AGENT_STATUS_NAME,
15
- IN_TMUX_STATUS_NAME,
16
- LEGACY_AWAITING_TASK_BREAKDOWN_STATUS_NAME,
17
- LEGACY_IN_TMUX_STATUS_NAME,
18
- LEGACY_TODO_STATUS_NAME,
19
- PC_TODO_STATUS_NAME,
20
- PREPARATION_STATUS_NAME,
21
- REQUIRED_WORKFLOW_STATUSES,
22
- TODO_BY_AGENT_STATUS_NAME,
23
- TODO_STATUS_NAME,
24
- } from '../entities/WorkflowStatus';
25
-
26
- const buildProject = (statuses: FieldOption[]): Project => ({
27
- id: 'project-1',
28
- url: 'https://github.com/orgs/test-org/projects/1',
29
- databaseId: 1,
30
- name: 'test-project',
31
- status: {
32
- name: 'Status',
33
- fieldId: 'status-field-1',
34
- statuses,
35
- },
36
- nextActionDate: null,
37
- nextActionHour: null,
38
- story: null,
39
- remainingEstimationMinutes: null,
40
- dependedIssueUrlSeparatedByComma: null,
41
- completionDate50PercentConfidence: null,
42
- agent: null,
43
- });
44
-
45
- const buildCanonicalStatuses = (): FieldOption[] =>
46
- REQUIRED_WORKFLOW_STATUSES.map((required, index) => ({
47
- id: `id-${index}`,
48
- name: required.name,
49
- color: required.color,
50
- description: '',
51
- }));
52
-
53
- const buildIssue = (overrides: Partial<Issue>): Issue => ({
54
- nameWithOwner: 'test-org/test-repo',
55
- number: 1,
56
- title: 'Test issue',
57
- state: 'OPEN',
58
- status: null,
59
- story: null,
60
- nextActionDate: null,
61
- nextActionHour: null,
62
- estimationMinutes: null,
63
- dependedIssueUrls: [],
64
- completionDate50PercentConfidence: null,
65
- url: 'https://github.com/test-org/test-repo/issues/1',
66
- assignees: [],
67
- labels: [],
68
- org: 'test-org',
69
- repo: 'test-repo',
70
- body: '',
71
- itemId: 'item-1',
72
- isPr: false,
73
- isInProgress: false,
74
- isClosed: false,
75
- createdAt: new Date('2024-01-01'),
76
- author: 'user',
77
- closingIssueReferenceUrls: [],
78
- agent: null,
79
- stateReason: null,
80
- ...overrides,
81
- });
82
-
83
- describe('SetupTowerDefenceProjectUseCase', () => {
84
- it('should define exactly the 10 required statuses in the documented order with the documented colors and no descriptions', () => {
85
- expect(REQUIRED_WORKFLOW_STATUSES).toEqual([
86
- { name: AWAITING_WORKSPACE_STATUS_NAME, color: 'BLUE' },
87
- { name: PREPARATION_STATUS_NAME, color: 'YELLOW' },
88
- { name: FAILED_PREPARATION_STATUS_NAME, color: 'RED' },
89
- { name: AWAITING_QUALITY_CHECK_STATUS_NAME, color: 'GREEN' },
90
- { name: TODO_STATUS_NAME, color: 'PINK' },
91
- { name: TODO_BY_AGENT_STATUS_NAME, color: 'BLUE' },
92
- { name: IN_TMUX_STATUS_NAME, color: 'RED' },
93
- { name: IN_TMUX_BY_AGENT_STATUS_NAME, color: 'YELLOW' },
94
- { name: DONE_STATUS_NAME, color: 'PURPLE' },
95
- { name: ICEBOX_STATUS_NAME, color: 'GRAY' },
96
- ]);
97
- for (const required of REQUIRED_WORKFLOW_STATUSES) {
98
- expect(required).not.toHaveProperty('description');
99
- }
100
- });
101
-
102
- it('should skip update when project already has required statuses in canonical order with no descriptions', async () => {
103
- const mockProjectRepository =
104
- mock<Pick<ProjectRepository, 'getByUrl' | 'updateStatusList'>>();
105
- const mockIssueRepository =
106
- mock<Pick<IssueRepository, 'getAllIssues' | 'updateStatus'>>();
107
- const project = buildProject(buildCanonicalStatuses());
108
- mockProjectRepository.getByUrl.mockResolvedValue(project);
109
- mockIssueRepository.getAllIssues.mockResolvedValue({
110
- project: mock<Project>(),
111
- issues: [],
112
- cacheUsed: false,
113
- });
114
-
115
- const mockStatusDefaultRepository =
116
- mock<Pick<StatusDefaultRepository, 'setStatusFieldDefault'>>();
117
- const useCase = new SetupTowerDefenceProjectUseCase(
118
- mockProjectRepository,
119
- mockIssueRepository,
120
- mockStatusDefaultRepository,
121
- );
122
- await useCase.run({ projectUrl: project.url });
123
-
124
- expect(mockProjectRepository.updateStatusList).not.toHaveBeenCalled();
125
- });
126
-
127
- it('should skip update when project already has required statuses plus extras after them', async () => {
128
- const mockProjectRepository =
129
- mock<Pick<ProjectRepository, 'getByUrl' | 'updateStatusList'>>();
130
- const mockIssueRepository =
131
- mock<Pick<IssueRepository, 'getAllIssues' | 'updateStatus'>>();
132
- const statuses = [
133
- ...buildCanonicalStatuses(),
134
- {
135
- id: 'extra-1',
136
- name: 'Custom Extra Status',
137
- color: 'GREEN' as const,
138
- description: '',
139
- },
140
- ];
141
- const project = buildProject(statuses);
142
- mockProjectRepository.getByUrl.mockResolvedValue(project);
143
- mockIssueRepository.getAllIssues.mockResolvedValue({
144
- project: mock<Project>(),
145
- issues: [],
146
- cacheUsed: false,
147
- });
148
-
149
- const mockStatusDefaultRepository =
150
- mock<Pick<StatusDefaultRepository, 'setStatusFieldDefault'>>();
151
- const useCase = new SetupTowerDefenceProjectUseCase(
152
- mockProjectRepository,
153
- mockIssueRepository,
154
- mockStatusDefaultRepository,
155
- );
156
- await useCase.run({ projectUrl: project.url });
157
-
158
- expect(mockProjectRepository.updateStatusList).not.toHaveBeenCalled();
159
- });
160
-
161
- it('should rewrite required statuses with empty descriptions when an existing status carries a description', async () => {
162
- const mockProjectRepository =
163
- mock<Pick<ProjectRepository, 'getByUrl' | 'updateStatusList'>>();
164
- const mockIssueRepository =
165
- mock<Pick<IssueRepository, 'getAllIssues' | 'updateStatus'>>();
166
- const statuses = buildCanonicalStatuses();
167
- statuses[0] = { ...statuses[0], description: 'stale description' };
168
- const project = buildProject(statuses);
169
- mockProjectRepository.getByUrl.mockResolvedValue(project);
170
- mockProjectRepository.updateStatusList.mockResolvedValue([]);
171
- mockIssueRepository.getAllIssues.mockResolvedValue({
172
- project: mock<Project>(),
173
- issues: [],
174
- cacheUsed: false,
175
- });
176
-
177
- const mockStatusDefaultRepository =
178
- mock<Pick<StatusDefaultRepository, 'setStatusFieldDefault'>>();
179
- const useCase = new SetupTowerDefenceProjectUseCase(
180
- mockProjectRepository,
181
- mockIssueRepository,
182
- mockStatusDefaultRepository,
183
- );
184
- await useCase.run({ projectUrl: project.url });
185
-
186
- expect(mockProjectRepository.updateStatusList).toHaveBeenCalledTimes(1);
187
- const [, payload] = mockProjectRepository.updateStatusList.mock.calls[0];
188
- expect(
189
- payload
190
- .slice(0, REQUIRED_WORKFLOW_STATUSES.length)
191
- .every((status) => status.description === ''),
192
- ).toBe(true);
193
- });
194
-
195
- it('should add missing required statuses while preserving existing custom statuses', async () => {
196
- const mockProjectRepository =
197
- mock<Pick<ProjectRepository, 'getByUrl' | 'updateStatusList'>>();
198
- const mockIssueRepository =
199
- mock<Pick<IssueRepository, 'getAllIssues' | 'updateStatus'>>();
200
- const statuses: FieldOption[] = [
201
- {
202
- id: 'aws-id',
203
- name: AWAITING_WORKSPACE_STATUS_NAME,
204
- color: 'BLUE',
205
- description: '',
206
- },
207
- {
208
- id: 'extra-1',
209
- name: 'Custom Extra Status',
210
- color: 'GREEN',
211
- description: '',
212
- },
213
- ];
214
- const project = buildProject(statuses);
215
- mockProjectRepository.getByUrl.mockResolvedValue(project);
216
- mockProjectRepository.updateStatusList.mockResolvedValue([]);
217
- mockIssueRepository.getAllIssues.mockResolvedValue({
218
- project: mock<Project>(),
219
- issues: [],
220
- cacheUsed: false,
221
- });
222
-
223
- const mockStatusDefaultRepository =
224
- mock<Pick<StatusDefaultRepository, 'setStatusFieldDefault'>>();
225
- const useCase = new SetupTowerDefenceProjectUseCase(
226
- mockProjectRepository,
227
- mockIssueRepository,
228
- mockStatusDefaultRepository,
229
- );
230
- await useCase.run({ projectUrl: project.url });
231
-
232
- expect(mockProjectRepository.updateStatusList).toHaveBeenCalledTimes(1);
233
- expect(mockProjectRepository.updateStatusList).toHaveBeenCalledWith(
234
- project,
235
- [
236
- {
237
- id: 'aws-id',
238
- name: AWAITING_WORKSPACE_STATUS_NAME,
239
- color: 'BLUE',
240
- description: '',
241
- },
242
- {
243
- id: null,
244
- name: PREPARATION_STATUS_NAME,
245
- color: 'YELLOW',
246
- description: '',
247
- },
248
- {
249
- id: null,
250
- name: FAILED_PREPARATION_STATUS_NAME,
251
- color: 'RED',
252
- description: '',
253
- },
254
- {
255
- id: null,
256
- name: AWAITING_QUALITY_CHECK_STATUS_NAME,
257
- color: 'GREEN',
258
- description: '',
259
- },
260
- {
261
- id: null,
262
- name: TODO_STATUS_NAME,
263
- color: 'PINK',
264
- description: '',
265
- },
266
- {
267
- id: null,
268
- name: TODO_BY_AGENT_STATUS_NAME,
269
- color: 'BLUE',
270
- description: '',
271
- },
272
- {
273
- id: null,
274
- name: IN_TMUX_STATUS_NAME,
275
- color: 'RED',
276
- description: '',
277
- },
278
- {
279
- id: null,
280
- name: IN_TMUX_BY_AGENT_STATUS_NAME,
281
- color: 'YELLOW',
282
- description: '',
283
- },
284
- {
285
- id: null,
286
- name: DONE_STATUS_NAME,
287
- color: 'PURPLE',
288
- description: '',
289
- },
290
- {
291
- id: null,
292
- name: ICEBOX_STATUS_NAME,
293
- color: 'GRAY',
294
- description: '',
295
- },
296
- {
297
- id: 'extra-1',
298
- name: 'Custom Extra Status',
299
- color: 'GREEN',
300
- description: '',
301
- },
302
- ],
303
- );
304
- });
305
-
306
- it('should reorder existing required statuses into canonical order when out of order', async () => {
307
- const mockProjectRepository =
308
- mock<Pick<ProjectRepository, 'getByUrl' | 'updateStatusList'>>();
309
- const mockIssueRepository =
310
- mock<Pick<IssueRepository, 'getAllIssues' | 'updateStatus'>>();
311
- const reversedStatuses: FieldOption[] = REQUIRED_WORKFLOW_STATUSES.slice()
312
- .reverse()
313
- .map((required, index) => ({
314
- id: `reversed-id-${index}`,
315
- name: required.name,
316
- color: required.color,
317
- description: '',
318
- }));
319
- const project = buildProject(reversedStatuses);
320
- mockProjectRepository.getByUrl.mockResolvedValue(project);
321
- mockProjectRepository.updateStatusList.mockResolvedValue([]);
322
- mockIssueRepository.getAllIssues.mockResolvedValue({
323
- project: mock<Project>(),
324
- issues: [],
325
- cacheUsed: false,
326
- });
327
-
328
- const mockStatusDefaultRepository =
329
- mock<Pick<StatusDefaultRepository, 'setStatusFieldDefault'>>();
330
- const useCase = new SetupTowerDefenceProjectUseCase(
331
- mockProjectRepository,
332
- mockIssueRepository,
333
- mockStatusDefaultRepository,
334
- );
335
- await useCase.run({ projectUrl: project.url });
336
-
337
- expect(mockProjectRepository.updateStatusList).toHaveBeenCalledTimes(1);
338
- const [, payload] = mockProjectRepository.updateStatusList.mock.calls[0];
339
- expect(payload.map((status) => status.name)).toEqual([
340
- AWAITING_WORKSPACE_STATUS_NAME,
341
- PREPARATION_STATUS_NAME,
342
- FAILED_PREPARATION_STATUS_NAME,
343
- AWAITING_QUALITY_CHECK_STATUS_NAME,
344
- TODO_STATUS_NAME,
345
- TODO_BY_AGENT_STATUS_NAME,
346
- IN_TMUX_STATUS_NAME,
347
- IN_TMUX_BY_AGENT_STATUS_NAME,
348
- DONE_STATUS_NAME,
349
- ICEBOX_STATUS_NAME,
350
- ]);
351
- });
352
-
353
- it('should fix color when an existing required status has wrong color', async () => {
354
- const mockProjectRepository =
355
- mock<Pick<ProjectRepository, 'getByUrl' | 'updateStatusList'>>();
356
- const mockIssueRepository =
357
- mock<Pick<IssueRepository, 'getAllIssues' | 'updateStatus'>>();
358
- const statuses = buildCanonicalStatuses();
359
- statuses[1] = { ...statuses[1], color: 'RED' };
360
- const project = buildProject(statuses);
361
- mockProjectRepository.getByUrl.mockResolvedValue(project);
362
- mockProjectRepository.updateStatusList.mockResolvedValue([]);
363
- mockIssueRepository.getAllIssues.mockResolvedValue({
364
- project: mock<Project>(),
365
- issues: [],
366
- cacheUsed: false,
367
- });
368
-
369
- const mockStatusDefaultRepository =
370
- mock<Pick<StatusDefaultRepository, 'setStatusFieldDefault'>>();
371
- const useCase = new SetupTowerDefenceProjectUseCase(
372
- mockProjectRepository,
373
- mockIssueRepository,
374
- mockStatusDefaultRepository,
375
- );
376
- await useCase.run({ projectUrl: project.url });
377
-
378
- expect(mockProjectRepository.updateStatusList).toHaveBeenCalledTimes(1);
379
- const [, payload] = mockProjectRepository.updateStatusList.mock.calls[0];
380
- expect(payload[1].color).toBe(REQUIRED_WORKFLOW_STATUSES[1].color);
381
- });
382
-
383
- it('should reuse the default template "Todo" option ID for Awaiting Workspace so a newly added item lands in Awaiting Workspace', async () => {
384
- const mockProjectRepository =
385
- mock<Pick<ProjectRepository, 'getByUrl' | 'updateStatusList'>>();
386
- const mockIssueRepository =
387
- mock<Pick<IssueRepository, 'getAllIssues' | 'updateStatus'>>();
388
- const statuses: FieldOption[] = [
389
- {
390
- id: 'template-todo',
391
- name: LEGACY_TODO_STATUS_NAME,
392
- color: 'PINK',
393
- description: '',
394
- },
395
- {
396
- id: 'template-in-progress',
397
- name: 'In progress',
398
- color: 'YELLOW',
399
- description: 'This is actively being worked on',
400
- },
401
- {
402
- id: 'template-done',
403
- name: DONE_STATUS_NAME,
404
- color: 'PURPLE',
405
- description: '',
406
- },
407
- ];
408
- const project = buildProject(statuses);
409
- mockProjectRepository.getByUrl.mockResolvedValue(project);
410
- mockProjectRepository.updateStatusList.mockResolvedValue([]);
411
- mockIssueRepository.getAllIssues.mockResolvedValue({
412
- project: mock<Project>(),
413
- issues: [],
414
- cacheUsed: false,
415
- });
416
-
417
- const mockStatusDefaultRepository =
418
- mock<Pick<StatusDefaultRepository, 'setStatusFieldDefault'>>();
419
- const useCase = new SetupTowerDefenceProjectUseCase(
420
- mockProjectRepository,
421
- mockIssueRepository,
422
- mockStatusDefaultRepository,
423
- );
424
- await useCase.run({ projectUrl: project.url });
425
-
426
- expect(mockProjectRepository.updateStatusList).toHaveBeenCalledTimes(1);
427
- const [, payload] = mockProjectRepository.updateStatusList.mock.calls[0];
428
- const awaitingWorkspaceEntry = payload.find(
429
- (s) => s.name === AWAITING_WORKSPACE_STATUS_NAME,
430
- );
431
- expect(awaitingWorkspaceEntry?.id).toBe('template-todo');
432
- const todoByHumanEntry = payload.find((s) => s.name === TODO_STATUS_NAME);
433
- expect(todoByHumanEntry?.id).toBeNull();
434
- expect(payload.some((s) => s.name === LEGACY_TODO_STATUS_NAME)).toBe(false);
435
- });
436
-
437
- it('should rename legacy "In Tmux" to "In Tmux by human" by reusing the existing option ID', async () => {
438
- const mockProjectRepository =
439
- mock<Pick<ProjectRepository, 'getByUrl' | 'updateStatusList'>>();
440
- const mockIssueRepository =
441
- mock<Pick<IssueRepository, 'getAllIssues' | 'updateStatus'>>();
442
- const statuses: FieldOption[] = REQUIRED_WORKFLOW_STATUSES.map(
443
- (required, index) => ({
444
- id: `id-${index}`,
445
- name:
446
- required.name === IN_TMUX_STATUS_NAME
447
- ? LEGACY_IN_TMUX_STATUS_NAME
448
- : required.name,
449
- color: required.color,
450
- description: '',
451
- }),
452
- );
453
- const project = buildProject(statuses);
454
- mockProjectRepository.getByUrl.mockResolvedValue(project);
455
- mockProjectRepository.updateStatusList.mockResolvedValue([]);
456
- mockIssueRepository.getAllIssues.mockResolvedValue({
457
- project: mock<Project>(),
458
- issues: [],
459
- cacheUsed: false,
460
- });
461
-
462
- const mockStatusDefaultRepository =
463
- mock<Pick<StatusDefaultRepository, 'setStatusFieldDefault'>>();
464
- const useCase = new SetupTowerDefenceProjectUseCase(
465
- mockProjectRepository,
466
- mockIssueRepository,
467
- mockStatusDefaultRepository,
468
- );
469
- await useCase.run({ projectUrl: project.url });
470
-
471
- expect(mockProjectRepository.updateStatusList).toHaveBeenCalledTimes(1);
472
- const [, payload] = mockProjectRepository.updateStatusList.mock.calls[0];
473
- const inTmuxEntry = payload.find((s) => s.name === IN_TMUX_STATUS_NAME);
474
- expect(inTmuxEntry).toBeDefined();
475
- expect(inTmuxEntry?.id).toBe('id-6');
476
- expect(payload.some((s) => s.name === LEGACY_IN_TMUX_STATUS_NAME)).toBe(
477
- false,
478
- );
479
- });
480
-
481
- it('should create the "Todo by agent" status with blue color when it is missing', async () => {
482
- const mockProjectRepository =
483
- mock<Pick<ProjectRepository, 'getByUrl' | 'updateStatusList'>>();
484
- const mockIssueRepository =
485
- mock<Pick<IssueRepository, 'getAllIssues' | 'updateStatus'>>();
486
- const statuses = buildCanonicalStatuses().filter(
487
- (s) => s.name !== TODO_BY_AGENT_STATUS_NAME,
488
- );
489
- const project = buildProject(statuses);
490
- mockProjectRepository.getByUrl.mockResolvedValue(project);
491
- mockProjectRepository.updateStatusList.mockResolvedValue([]);
492
- mockIssueRepository.getAllIssues.mockResolvedValue({
493
- project: mock<Project>(),
494
- issues: [],
495
- cacheUsed: false,
496
- });
497
-
498
- const mockStatusDefaultRepository =
499
- mock<Pick<StatusDefaultRepository, 'setStatusFieldDefault'>>();
500
- const useCase = new SetupTowerDefenceProjectUseCase(
501
- mockProjectRepository,
502
- mockIssueRepository,
503
- mockStatusDefaultRepository,
504
- );
505
- await useCase.run({ projectUrl: project.url });
506
-
507
- expect(mockProjectRepository.updateStatusList).toHaveBeenCalledTimes(1);
508
- const [, payload] = mockProjectRepository.updateStatusList.mock.calls[0];
509
- const todoByAgentEntry = payload.find(
510
- (s) => s.name === TODO_BY_AGENT_STATUS_NAME,
511
- );
512
- expect(todoByAgentEntry).toBeDefined();
513
- expect(todoByAgentEntry?.id).toBeNull();
514
- expect(todoByAgentEntry?.color).toBe('BLUE');
515
- const names = payload.map((s) => s.name);
516
- expect(names.indexOf(TODO_BY_AGENT_STATUS_NAME)).toBe(
517
- names.indexOf(TODO_STATUS_NAME) + 1,
518
- );
519
- });
520
-
521
- it('should leave an already-present "Todo by agent" option unchanged by reusing its existing option ID', async () => {
522
- const mockProjectRepository =
523
- mock<Pick<ProjectRepository, 'getByUrl' | 'updateStatusList'>>();
524
- const mockIssueRepository =
525
- mock<Pick<IssueRepository, 'getAllIssues' | 'updateStatus'>>();
526
- const statuses = buildCanonicalStatuses().map((s) => {
527
- if (s.name === TODO_BY_AGENT_STATUS_NAME) {
528
- return { ...s, id: 'preexisting-todo-agent-id' };
529
- }
530
- if (s.name === AWAITING_WORKSPACE_STATUS_NAME) {
531
- return { ...s, description: 'stale description' };
532
- }
533
- return s;
534
- });
535
- const project = buildProject(statuses);
536
- mockProjectRepository.getByUrl.mockResolvedValue(project);
537
- mockProjectRepository.updateStatusList.mockResolvedValue([]);
538
- mockIssueRepository.getAllIssues.mockResolvedValue({
539
- project: mock<Project>(),
540
- issues: [],
541
- cacheUsed: false,
542
- });
543
-
544
- const mockStatusDefaultRepository =
545
- mock<Pick<StatusDefaultRepository, 'setStatusFieldDefault'>>();
546
- const useCase = new SetupTowerDefenceProjectUseCase(
547
- mockProjectRepository,
548
- mockIssueRepository,
549
- mockStatusDefaultRepository,
550
- );
551
- await useCase.run({ projectUrl: project.url });
552
-
553
- expect(mockProjectRepository.updateStatusList).toHaveBeenCalledTimes(1);
554
- const [, payload] = mockProjectRepository.updateStatusList.mock.calls[0];
555
- const todoByAgentEntry = payload.find(
556
- (s) => s.name === TODO_BY_AGENT_STATUS_NAME,
557
- );
558
- expect(todoByAgentEntry?.id).toBe('preexisting-todo-agent-id');
559
- expect(todoByAgentEntry?.color).toBe('BLUE');
560
- expect(
561
- payload.filter((s) => s.name === TODO_BY_AGENT_STATUS_NAME),
562
- ).toHaveLength(1);
563
- });
564
-
565
- it('should create the "In Tmux by agent" status with yellow color when it is missing', async () => {
566
- const mockProjectRepository =
567
- mock<Pick<ProjectRepository, 'getByUrl' | 'updateStatusList'>>();
568
- const mockIssueRepository =
569
- mock<Pick<IssueRepository, 'getAllIssues' | 'updateStatus'>>();
570
- const statuses = buildCanonicalStatuses().filter(
571
- (s) => s.name !== IN_TMUX_BY_AGENT_STATUS_NAME,
572
- );
573
- const project = buildProject(statuses);
574
- mockProjectRepository.getByUrl.mockResolvedValue(project);
575
- mockProjectRepository.updateStatusList.mockResolvedValue([]);
576
- mockIssueRepository.getAllIssues.mockResolvedValue({
577
- project: mock<Project>(),
578
- issues: [],
579
- cacheUsed: false,
580
- });
581
-
582
- const mockStatusDefaultRepository =
583
- mock<Pick<StatusDefaultRepository, 'setStatusFieldDefault'>>();
584
- const useCase = new SetupTowerDefenceProjectUseCase(
585
- mockProjectRepository,
586
- mockIssueRepository,
587
- mockStatusDefaultRepository,
588
- );
589
- await useCase.run({ projectUrl: project.url });
590
-
591
- expect(mockProjectRepository.updateStatusList).toHaveBeenCalledTimes(1);
592
- const [, payload] = mockProjectRepository.updateStatusList.mock.calls[0];
593
- const inTmuxByAgentEntry = payload.find(
594
- (s) => s.name === IN_TMUX_BY_AGENT_STATUS_NAME,
595
- );
596
- expect(inTmuxByAgentEntry).toBeDefined();
597
- expect(inTmuxByAgentEntry?.id).toBeNull();
598
- expect(inTmuxByAgentEntry?.color).toBe('YELLOW');
599
- const names = payload.map((s) => s.name);
600
- expect(names.indexOf(IN_TMUX_BY_AGENT_STATUS_NAME)).toBe(
601
- names.indexOf(IN_TMUX_STATUS_NAME) + 1,
602
- );
603
- });
604
-
605
- it('should leave an already-present "In Tmux by agent" option unchanged by reusing its existing option ID', async () => {
606
- const mockProjectRepository =
607
- mock<Pick<ProjectRepository, 'getByUrl' | 'updateStatusList'>>();
608
- const mockIssueRepository =
609
- mock<Pick<IssueRepository, 'getAllIssues' | 'updateStatus'>>();
610
- const statuses = buildCanonicalStatuses().map((s) => {
611
- if (s.name === IN_TMUX_BY_AGENT_STATUS_NAME) {
612
- return { ...s, id: 'preexisting-agent-id' };
613
- }
614
- if (s.name === AWAITING_WORKSPACE_STATUS_NAME) {
615
- return { ...s, description: 'stale description' };
616
- }
617
- return s;
618
- });
619
- const project = buildProject(statuses);
620
- mockProjectRepository.getByUrl.mockResolvedValue(project);
621
- mockProjectRepository.updateStatusList.mockResolvedValue([]);
622
- mockIssueRepository.getAllIssues.mockResolvedValue({
623
- project: mock<Project>(),
624
- issues: [],
625
- cacheUsed: false,
626
- });
627
-
628
- const mockStatusDefaultRepository =
629
- mock<Pick<StatusDefaultRepository, 'setStatusFieldDefault'>>();
630
- const useCase = new SetupTowerDefenceProjectUseCase(
631
- mockProjectRepository,
632
- mockIssueRepository,
633
- mockStatusDefaultRepository,
634
- );
635
- await useCase.run({ projectUrl: project.url });
636
-
637
- expect(mockProjectRepository.updateStatusList).toHaveBeenCalledTimes(1);
638
- const [, payload] = mockProjectRepository.updateStatusList.mock.calls[0];
639
- const inTmuxByAgentEntry = payload.find(
640
- (s) => s.name === IN_TMUX_BY_AGENT_STATUS_NAME,
641
- );
642
- expect(inTmuxByAgentEntry?.id).toBe('preexisting-agent-id');
643
- expect(inTmuxByAgentEntry?.color).toBe('YELLOW');
644
- expect(
645
- payload.filter((s) => s.name === IN_TMUX_BY_AGENT_STATUS_NAME),
646
- ).toHaveLength(1);
647
- });
648
-
649
- it('should remove "PC Todo" from the status list and not include it in others', async () => {
650
- const mockProjectRepository =
651
- mock<Pick<ProjectRepository, 'getByUrl' | 'updateStatusList'>>();
652
- const mockIssueRepository =
653
- mock<Pick<IssueRepository, 'getAllIssues' | 'updateStatus'>>();
654
- const statuses: FieldOption[] = [
655
- ...buildCanonicalStatuses(),
656
- {
657
- id: 'pc-todo-id',
658
- name: PC_TODO_STATUS_NAME,
659
- color: 'PINK',
660
- description: '',
661
- },
662
- ];
663
- const project = buildProject(statuses);
664
- mockProjectRepository.getByUrl.mockResolvedValue(project);
665
- mockProjectRepository.updateStatusList.mockResolvedValue([]);
666
- mockIssueRepository.getAllIssues.mockResolvedValue({
667
- project: mock<Project>(),
668
- issues: [],
669
- cacheUsed: false,
670
- });
671
-
672
- const mockStatusDefaultRepository =
673
- mock<Pick<StatusDefaultRepository, 'setStatusFieldDefault'>>();
674
- const useCase = new SetupTowerDefenceProjectUseCase(
675
- mockProjectRepository,
676
- mockIssueRepository,
677
- mockStatusDefaultRepository,
678
- );
679
- await useCase.run({ projectUrl: project.url });
680
-
681
- expect(mockProjectRepository.updateStatusList).toHaveBeenCalledTimes(1);
682
- const [, payload] = mockProjectRepository.updateStatusList.mock.calls[0];
683
- expect(payload.some((s) => s.name === PC_TODO_STATUS_NAME)).toBe(false);
684
- });
685
-
686
- it('should migrate a project with legacy statuses: rename Todo and In Tmux by ID, remove PC Todo', async () => {
687
- const mockProjectRepository =
688
- mock<Pick<ProjectRepository, 'getByUrl' | 'updateStatusList'>>();
689
- const mockIssueRepository =
690
- mock<Pick<IssueRepository, 'getAllIssues' | 'updateStatus'>>();
691
- const statuses: FieldOption[] = [
692
- {
693
- id: 'id-0',
694
- name: AWAITING_WORKSPACE_STATUS_NAME,
695
- color: 'BLUE',
696
- description: '',
697
- },
698
- {
699
- id: 'id-1',
700
- name: PREPARATION_STATUS_NAME,
701
- color: 'YELLOW',
702
- description: '',
703
- },
704
- {
705
- id: 'id-2',
706
- name: FAILED_PREPARATION_STATUS_NAME,
707
- color: 'RED',
708
- description: '',
709
- },
710
- {
711
- id: 'id-3',
712
- name: AWAITING_QUALITY_CHECK_STATUS_NAME,
713
- color: 'GREEN',
714
- description: '',
715
- },
716
- {
717
- id: 'id-4',
718
- name: LEGACY_TODO_STATUS_NAME,
719
- color: 'PINK',
720
- description: '',
721
- },
722
- { id: 'id-5', name: PC_TODO_STATUS_NAME, color: 'PINK', description: '' },
723
- {
724
- id: 'id-6',
725
- name: LEGACY_IN_TMUX_STATUS_NAME,
726
- color: 'RED',
727
- description: '',
728
- },
729
- { id: 'id-7', name: DONE_STATUS_NAME, color: 'PURPLE', description: '' },
730
- { id: 'id-8', name: ICEBOX_STATUS_NAME, color: 'GRAY', description: '' },
731
- ];
732
- const project = buildProject(statuses);
733
- mockProjectRepository.getByUrl.mockResolvedValue(project);
734
- mockProjectRepository.updateStatusList.mockResolvedValue([]);
735
- mockIssueRepository.getAllIssues.mockResolvedValue({
736
- project: mock<Project>(),
737
- issues: [],
738
- cacheUsed: false,
739
- });
740
-
741
- const mockStatusDefaultRepository =
742
- mock<Pick<StatusDefaultRepository, 'setStatusFieldDefault'>>();
743
- const useCase = new SetupTowerDefenceProjectUseCase(
744
- mockProjectRepository,
745
- mockIssueRepository,
746
- mockStatusDefaultRepository,
747
- );
748
- await useCase.run({ projectUrl: project.url });
749
-
750
- expect(mockProjectRepository.updateStatusList).toHaveBeenCalledTimes(1);
751
- const [, payload] = mockProjectRepository.updateStatusList.mock.calls[0];
752
-
753
- expect(payload.map((s) => s.name)).toEqual([
754
- AWAITING_WORKSPACE_STATUS_NAME,
755
- PREPARATION_STATUS_NAME,
756
- FAILED_PREPARATION_STATUS_NAME,
757
- AWAITING_QUALITY_CHECK_STATUS_NAME,
758
- TODO_STATUS_NAME,
759
- TODO_BY_AGENT_STATUS_NAME,
760
- IN_TMUX_STATUS_NAME,
761
- IN_TMUX_BY_AGENT_STATUS_NAME,
762
- DONE_STATUS_NAME,
763
- ICEBOX_STATUS_NAME,
764
- ]);
765
-
766
- expect(payload.find((s) => s.name === TODO_STATUS_NAME)?.id).toBe('id-4');
767
- expect(payload.find((s) => s.name === IN_TMUX_STATUS_NAME)?.id).toBe(
768
- 'id-6',
769
- );
770
- expect(payload.some((s) => s.name === PC_TODO_STATUS_NAME)).toBe(false);
771
- expect(payload.some((s) => s.name === LEGACY_TODO_STATUS_NAME)).toBe(false);
772
- expect(payload.some((s) => s.name === LEGACY_IN_TMUX_STATUS_NAME)).toBe(
773
- false,
774
- );
775
- });
776
-
777
- it('should migrate issues from "Awaiting Task Breakdown" to "Todo by human" when that status exists', async () => {
778
- const mockProjectRepository =
779
- mock<Pick<ProjectRepository, 'getByUrl' | 'updateStatusList'>>();
780
- const mockIssueRepository =
781
- mock<Pick<IssueRepository, 'getAllIssues' | 'updateStatus'>>();
782
- const todoStatusId = 'todo-status-id';
783
- const statuses: FieldOption[] = [
784
- {
785
- id: 'atb-id',
786
- name: LEGACY_AWAITING_TASK_BREAKDOWN_STATUS_NAME,
787
- color: 'ORANGE',
788
- description: '',
789
- },
790
- {
791
- id: 'id-1',
792
- name: AWAITING_WORKSPACE_STATUS_NAME,
793
- color: 'BLUE',
794
- description: '',
795
- },
796
- {
797
- id: 'id-2',
798
- name: PREPARATION_STATUS_NAME,
799
- color: 'YELLOW',
800
- description: '',
801
- },
802
- {
803
- id: 'id-3',
804
- name: FAILED_PREPARATION_STATUS_NAME,
805
- color: 'RED',
806
- description: '',
807
- },
808
- {
809
- id: 'id-4',
810
- name: AWAITING_QUALITY_CHECK_STATUS_NAME,
811
- color: 'GREEN',
812
- description: '',
813
- },
814
- {
815
- id: todoStatusId,
816
- name: TODO_STATUS_NAME,
817
- color: 'PINK',
818
- description: '',
819
- },
820
- {
821
- id: 'id-6',
822
- name: IN_TMUX_STATUS_NAME,
823
- color: 'RED',
824
- description: '',
825
- },
826
- { id: 'id-7', name: DONE_STATUS_NAME, color: 'PURPLE', description: '' },
827
- { id: 'id-8', name: ICEBOX_STATUS_NAME, color: 'GRAY', description: '' },
828
- ];
829
- const project = buildProject(statuses);
830
- mockProjectRepository.getByUrl.mockResolvedValue(project);
831
- mockProjectRepository.updateStatusList.mockResolvedValue([]);
832
-
833
- const atbIssue1 = buildIssue({
834
- number: 10,
835
- url: 'https://github.com/test-org/test-repo/issues/10',
836
- itemId: 'item-10',
837
- status: LEGACY_AWAITING_TASK_BREAKDOWN_STATUS_NAME,
838
- });
839
- const atbIssue2 = buildIssue({
840
- number: 11,
841
- url: 'https://github.com/test-org/test-repo/issues/11',
842
- itemId: 'item-11',
843
- status: LEGACY_AWAITING_TASK_BREAKDOWN_STATUS_NAME,
844
- });
845
- const otherIssue = buildIssue({
846
- number: 12,
847
- url: 'https://github.com/test-org/test-repo/issues/12',
848
- itemId: 'item-12',
849
- status: AWAITING_WORKSPACE_STATUS_NAME,
850
- });
851
- mockIssueRepository.getAllIssues.mockResolvedValue({
852
- project: mock<Project>(),
853
- issues: [atbIssue1, atbIssue2, otherIssue],
854
- cacheUsed: false,
855
- });
856
- mockIssueRepository.updateStatus.mockResolvedValue(undefined);
857
-
858
- const mockStatusDefaultRepository =
859
- mock<Pick<StatusDefaultRepository, 'setStatusFieldDefault'>>();
860
- const useCase = new SetupTowerDefenceProjectUseCase(
861
- mockProjectRepository,
862
- mockIssueRepository,
863
- mockStatusDefaultRepository,
864
- );
865
- await useCase.run({ projectUrl: project.url });
866
-
867
- expect(mockIssueRepository.getAllIssues).toHaveBeenCalledWith(project.id);
868
- expect(mockIssueRepository.updateStatus).toHaveBeenCalledTimes(2);
869
- expect(mockIssueRepository.updateStatus).toHaveBeenCalledWith(
870
- project,
871
- atbIssue1,
872
- todoStatusId,
873
- );
874
- expect(mockIssueRepository.updateStatus).toHaveBeenCalledWith(
875
- project,
876
- atbIssue2,
877
- todoStatusId,
878
- );
879
-
880
- expect(mockProjectRepository.updateStatusList).toHaveBeenCalledTimes(1);
881
- const [, payload] = mockProjectRepository.updateStatusList.mock.calls[0];
882
- expect(
883
- payload.some(
884
- (s) => s.name === LEGACY_AWAITING_TASK_BREAKDOWN_STATUS_NAME,
885
- ),
886
- ).toBe(false);
887
- expect(payload.map((s) => s.name)).toEqual([
888
- AWAITING_WORKSPACE_STATUS_NAME,
889
- PREPARATION_STATUS_NAME,
890
- FAILED_PREPARATION_STATUS_NAME,
891
- AWAITING_QUALITY_CHECK_STATUS_NAME,
892
- TODO_STATUS_NAME,
893
- TODO_BY_AGENT_STATUS_NAME,
894
- IN_TMUX_STATUS_NAME,
895
- IN_TMUX_BY_AGENT_STATUS_NAME,
896
- DONE_STATUS_NAME,
897
- ICEBOX_STATUS_NAME,
898
- ]);
899
- });
900
-
901
- it('should skip issue migration when "Awaiting Task Breakdown" status does not exist', async () => {
902
- const mockProjectRepository =
903
- mock<Pick<ProjectRepository, 'getByUrl' | 'updateStatusList'>>();
904
- const mockIssueRepository =
905
- mock<Pick<IssueRepository, 'getAllIssues' | 'updateStatus'>>();
906
- const project = buildProject(buildCanonicalStatuses());
907
- mockProjectRepository.getByUrl.mockResolvedValue(project);
908
- mockIssueRepository.getAllIssues.mockResolvedValue({
909
- project: mock<Project>(),
910
- issues: [],
911
- cacheUsed: false,
912
- });
913
-
914
- const mockStatusDefaultRepository =
915
- mock<Pick<StatusDefaultRepository, 'setStatusFieldDefault'>>();
916
- const useCase = new SetupTowerDefenceProjectUseCase(
917
- mockProjectRepository,
918
- mockIssueRepository,
919
- mockStatusDefaultRepository,
920
- );
921
- await useCase.run({ projectUrl: project.url });
922
-
923
- expect(mockIssueRepository.updateStatus).not.toHaveBeenCalled();
924
- expect(mockProjectRepository.updateStatusList).not.toHaveBeenCalled();
925
- });
926
-
927
- it('should remove "Awaiting Task Breakdown" from the status list after migrating all affected issues', async () => {
928
- const mockProjectRepository =
929
- mock<Pick<ProjectRepository, 'getByUrl' | 'updateStatusList'>>();
930
- const mockIssueRepository =
931
- mock<Pick<IssueRepository, 'getAllIssues' | 'updateStatus'>>();
932
- const statuses: FieldOption[] = [
933
- ...buildCanonicalStatuses(),
934
- {
935
- id: 'atb-id',
936
- name: LEGACY_AWAITING_TASK_BREAKDOWN_STATUS_NAME,
937
- color: 'ORANGE',
938
- description: '',
939
- },
940
- ];
941
- const project = buildProject(statuses);
942
- mockProjectRepository.getByUrl.mockResolvedValue(project);
943
- mockProjectRepository.updateStatusList.mockResolvedValue([]);
944
- mockIssueRepository.getAllIssues.mockResolvedValue({
945
- project: mock<Project>(),
946
- issues: [],
947
- cacheUsed: false,
948
- });
949
- mockIssueRepository.updateStatus.mockResolvedValue(undefined);
950
-
951
- const mockStatusDefaultRepository =
952
- mock<Pick<StatusDefaultRepository, 'setStatusFieldDefault'>>();
953
- const useCase = new SetupTowerDefenceProjectUseCase(
954
- mockProjectRepository,
955
- mockIssueRepository,
956
- mockStatusDefaultRepository,
957
- );
958
- await useCase.run({ projectUrl: project.url });
959
-
960
- expect(mockProjectRepository.updateStatusList).toHaveBeenCalledTimes(1);
961
- const [, payload] = mockProjectRepository.updateStatusList.mock.calls[0];
962
- expect(
963
- payload.some(
964
- (s) => s.name === LEGACY_AWAITING_TASK_BREAKDOWN_STATUS_NAME,
965
- ),
966
- ).toBe(false);
967
- });
968
-
969
- it('should migrate a project with all legacy statuses including Awaiting Task Breakdown', async () => {
970
- const mockProjectRepository =
971
- mock<Pick<ProjectRepository, 'getByUrl' | 'updateStatusList'>>();
972
- const mockIssueRepository =
973
- mock<Pick<IssueRepository, 'getAllIssues' | 'updateStatus'>>();
974
- const statuses: FieldOption[] = [
975
- {
976
- id: 'id-0',
977
- name: LEGACY_AWAITING_TASK_BREAKDOWN_STATUS_NAME,
978
- color: 'ORANGE',
979
- description: '',
980
- },
981
- {
982
- id: 'id-2',
983
- name: AWAITING_WORKSPACE_STATUS_NAME,
984
- color: 'BLUE',
985
- description: '',
986
- },
987
- {
988
- id: 'id-3',
989
- name: PREPARATION_STATUS_NAME,
990
- color: 'YELLOW',
991
- description: '',
992
- },
993
- {
994
- id: 'id-4',
995
- name: FAILED_PREPARATION_STATUS_NAME,
996
- color: 'RED',
997
- description: '',
998
- },
999
- {
1000
- id: 'id-5',
1001
- name: AWAITING_QUALITY_CHECK_STATUS_NAME,
1002
- color: 'GREEN',
1003
- description: '',
1004
- },
1005
- {
1006
- id: 'id-6',
1007
- name: LEGACY_TODO_STATUS_NAME,
1008
- color: 'PINK',
1009
- description: '',
1010
- },
1011
- { id: 'id-7', name: PC_TODO_STATUS_NAME, color: 'PINK', description: '' },
1012
- {
1013
- id: 'id-8',
1014
- name: LEGACY_IN_TMUX_STATUS_NAME,
1015
- color: 'RED',
1016
- description: '',
1017
- },
1018
- { id: 'id-9', name: DONE_STATUS_NAME, color: 'PURPLE', description: '' },
1019
- { id: 'id-10', name: ICEBOX_STATUS_NAME, color: 'GRAY', description: '' },
1020
- ];
1021
- const project = buildProject(statuses);
1022
- mockProjectRepository.getByUrl.mockResolvedValue(project);
1023
- mockProjectRepository.updateStatusList.mockResolvedValue([]);
1024
- mockIssueRepository.getAllIssues.mockResolvedValue({
1025
- project: mock<Project>(),
1026
- issues: [],
1027
- cacheUsed: false,
1028
- });
1029
- mockIssueRepository.updateStatus.mockResolvedValue(undefined);
1030
-
1031
- const mockStatusDefaultRepository =
1032
- mock<Pick<StatusDefaultRepository, 'setStatusFieldDefault'>>();
1033
- const useCase = new SetupTowerDefenceProjectUseCase(
1034
- mockProjectRepository,
1035
- mockIssueRepository,
1036
- mockStatusDefaultRepository,
1037
- );
1038
- await useCase.run({ projectUrl: project.url });
1039
-
1040
- expect(mockProjectRepository.updateStatusList).toHaveBeenCalledTimes(1);
1041
- const [, payload] = mockProjectRepository.updateStatusList.mock.calls[0];
1042
-
1043
- expect(payload.map((s) => s.name)).toEqual([
1044
- AWAITING_WORKSPACE_STATUS_NAME,
1045
- PREPARATION_STATUS_NAME,
1046
- FAILED_PREPARATION_STATUS_NAME,
1047
- AWAITING_QUALITY_CHECK_STATUS_NAME,
1048
- TODO_STATUS_NAME,
1049
- TODO_BY_AGENT_STATUS_NAME,
1050
- IN_TMUX_STATUS_NAME,
1051
- IN_TMUX_BY_AGENT_STATUS_NAME,
1052
- DONE_STATUS_NAME,
1053
- ICEBOX_STATUS_NAME,
1054
- ]);
1055
-
1056
- expect(payload.find((s) => s.name === TODO_STATUS_NAME)?.id).toBe('id-6');
1057
- expect(payload.find((s) => s.name === IN_TMUX_STATUS_NAME)?.id).toBe(
1058
- 'id-8',
1059
- );
1060
- expect(payload.some((s) => s.name === PC_TODO_STATUS_NAME)).toBe(false);
1061
- expect(payload.some((s) => s.name === LEGACY_TODO_STATUS_NAME)).toBe(false);
1062
- expect(payload.some((s) => s.name === LEGACY_IN_TMUX_STATUS_NAME)).toBe(
1063
- false,
1064
- );
1065
- expect(
1066
- payload.some(
1067
- (s) => s.name === LEGACY_AWAITING_TASK_BREAKDOWN_STATUS_NAME,
1068
- ),
1069
- ).toBe(false);
1070
- });
1071
-
1072
- it('should move open issue with Done status to Awaiting Workspace even when project has canonical statuses', async () => {
1073
- const mockProjectRepository =
1074
- mock<Pick<ProjectRepository, 'getByUrl' | 'updateStatusList'>>();
1075
- const mockIssueRepository =
1076
- mock<Pick<IssueRepository, 'getAllIssues' | 'updateStatus'>>();
1077
- const canonicalStatuses = buildCanonicalStatuses();
1078
- const awaitingWorkspaceId = canonicalStatuses[0].id;
1079
- const project = buildProject(canonicalStatuses);
1080
- mockProjectRepository.getByUrl.mockResolvedValue(project);
1081
- const openDoneIssue = buildIssue({
1082
- number: 10,
1083
- url: 'https://github.com/test-org/test-repo/issues/10',
1084
- itemId: 'item-10',
1085
- state: 'OPEN',
1086
- status: DONE_STATUS_NAME,
1087
- });
1088
- mockIssueRepository.getAllIssues.mockResolvedValue({
1089
- project: mock<Project>(),
1090
- issues: [openDoneIssue],
1091
- cacheUsed: false,
1092
- });
1093
- mockIssueRepository.updateStatus.mockResolvedValue(undefined);
1094
-
1095
- const mockStatusDefaultRepository =
1096
- mock<Pick<StatusDefaultRepository, 'setStatusFieldDefault'>>();
1097
- const useCase = new SetupTowerDefenceProjectUseCase(
1098
- mockProjectRepository,
1099
- mockIssueRepository,
1100
- mockStatusDefaultRepository,
1101
- );
1102
- await useCase.run({ projectUrl: project.url });
1103
-
1104
- expect(mockIssueRepository.updateStatus).toHaveBeenCalledTimes(1);
1105
- expect(mockIssueRepository.updateStatus).toHaveBeenCalledWith(
1106
- project,
1107
- openDoneIssue,
1108
- awaitingWorkspaceId,
1109
- );
1110
- expect(mockProjectRepository.updateStatusList).not.toHaveBeenCalled();
1111
- });
1112
-
1113
- it('should move open issue with null status to Awaiting Workspace even when project has canonical statuses', async () => {
1114
- const mockProjectRepository =
1115
- mock<Pick<ProjectRepository, 'getByUrl' | 'updateStatusList'>>();
1116
- const mockIssueRepository =
1117
- mock<Pick<IssueRepository, 'getAllIssues' | 'updateStatus'>>();
1118
- const canonicalStatuses = buildCanonicalStatuses();
1119
- const awaitingWorkspaceId = canonicalStatuses[0].id;
1120
- const project = buildProject(canonicalStatuses);
1121
- mockProjectRepository.getByUrl.mockResolvedValue(project);
1122
- const openNullStatusIssue = buildIssue({
1123
- number: 11,
1124
- url: 'https://github.com/test-org/test-repo/issues/11',
1125
- itemId: 'item-11',
1126
- state: 'OPEN',
1127
- status: null,
1128
- });
1129
- mockIssueRepository.getAllIssues.mockResolvedValue({
1130
- project: mock<Project>(),
1131
- issues: [openNullStatusIssue],
1132
- cacheUsed: false,
1133
- });
1134
- mockIssueRepository.updateStatus.mockResolvedValue(undefined);
1135
-
1136
- const mockStatusDefaultRepository =
1137
- mock<Pick<StatusDefaultRepository, 'setStatusFieldDefault'>>();
1138
- const useCase = new SetupTowerDefenceProjectUseCase(
1139
- mockProjectRepository,
1140
- mockIssueRepository,
1141
- mockStatusDefaultRepository,
1142
- );
1143
- await useCase.run({ projectUrl: project.url });
1144
-
1145
- expect(mockIssueRepository.updateStatus).toHaveBeenCalledTimes(1);
1146
- expect(mockIssueRepository.updateStatus).toHaveBeenCalledWith(
1147
- project,
1148
- openNullStatusIssue,
1149
- awaitingWorkspaceId,
1150
- );
1151
- expect(mockProjectRepository.updateStatusList).not.toHaveBeenCalled();
1152
- });
1153
-
1154
- it('should not move closed issue with Done status to Awaiting Workspace', async () => {
1155
- const mockProjectRepository =
1156
- mock<Pick<ProjectRepository, 'getByUrl' | 'updateStatusList'>>();
1157
- const mockIssueRepository =
1158
- mock<Pick<IssueRepository, 'getAllIssues' | 'updateStatus'>>();
1159
- const project = buildProject(buildCanonicalStatuses());
1160
- mockProjectRepository.getByUrl.mockResolvedValue(project);
1161
- const closedDoneIssue = buildIssue({
1162
- number: 12,
1163
- url: 'https://github.com/test-org/test-repo/issues/12',
1164
- itemId: 'item-12',
1165
- state: 'CLOSED',
1166
- isClosed: true,
1167
- status: DONE_STATUS_NAME,
1168
- });
1169
- mockIssueRepository.getAllIssues.mockResolvedValue({
1170
- project: mock<Project>(),
1171
- issues: [closedDoneIssue],
1172
- cacheUsed: false,
1173
- });
1174
-
1175
- const mockStatusDefaultRepository =
1176
- mock<Pick<StatusDefaultRepository, 'setStatusFieldDefault'>>();
1177
- const useCase = new SetupTowerDefenceProjectUseCase(
1178
- mockProjectRepository,
1179
- mockIssueRepository,
1180
- mockStatusDefaultRepository,
1181
- );
1182
- await useCase.run({ projectUrl: project.url });
1183
-
1184
- expect(mockIssueRepository.updateStatus).not.toHaveBeenCalled();
1185
- expect(mockProjectRepository.updateStatusList).not.toHaveBeenCalled();
1186
- });
1187
-
1188
- it('should not move closed issue with null status to Awaiting Workspace', async () => {
1189
- const mockProjectRepository =
1190
- mock<Pick<ProjectRepository, 'getByUrl' | 'updateStatusList'>>();
1191
- const mockIssueRepository =
1192
- mock<Pick<IssueRepository, 'getAllIssues' | 'updateStatus'>>();
1193
- const project = buildProject(buildCanonicalStatuses());
1194
- mockProjectRepository.getByUrl.mockResolvedValue(project);
1195
- const closedNullStatusIssue = buildIssue({
1196
- number: 13,
1197
- url: 'https://github.com/test-org/test-repo/issues/13',
1198
- itemId: 'item-13',
1199
- state: 'CLOSED',
1200
- isClosed: true,
1201
- status: null,
1202
- });
1203
- mockIssueRepository.getAllIssues.mockResolvedValue({
1204
- project: mock<Project>(),
1205
- issues: [closedNullStatusIssue],
1206
- cacheUsed: false,
1207
- });
1208
-
1209
- const mockStatusDefaultRepository =
1210
- mock<Pick<StatusDefaultRepository, 'setStatusFieldDefault'>>();
1211
- const useCase = new SetupTowerDefenceProjectUseCase(
1212
- mockProjectRepository,
1213
- mockIssueRepository,
1214
- mockStatusDefaultRepository,
1215
- );
1216
- await useCase.run({ projectUrl: project.url });
1217
-
1218
- expect(mockIssueRepository.updateStatus).not.toHaveBeenCalled();
1219
- expect(mockProjectRepository.updateStatusList).not.toHaveBeenCalled();
1220
- });
1221
-
1222
- it('should migrate issues from Unread to Awaiting Workspace when both statuses exist in the project', async () => {
1223
- const mockProjectRepository =
1224
- mock<Pick<ProjectRepository, 'getByUrl' | 'updateStatusList'>>();
1225
- const mockIssueRepository =
1226
- mock<Pick<IssueRepository, 'getAllIssues' | 'updateStatus'>>();
1227
- const awaitingWorkspaceId = 'aws-status-id';
1228
- const statuses: FieldOption[] = [
1229
- { id: 'unread-id', name: 'Unread', color: 'ORANGE', description: '' },
1230
- {
1231
- id: awaitingWorkspaceId,
1232
- name: AWAITING_WORKSPACE_STATUS_NAME,
1233
- color: 'BLUE',
1234
- description: '',
1235
- },
1236
- ...buildCanonicalStatuses().filter(
1237
- (s) => s.name !== AWAITING_WORKSPACE_STATUS_NAME,
1238
- ),
1239
- ];
1240
- const project = buildProject(statuses);
1241
- mockProjectRepository.getByUrl.mockResolvedValue(project);
1242
- mockProjectRepository.updateStatusList.mockResolvedValue([]);
1243
-
1244
- const unreadIssue1 = buildIssue({
1245
- number: 1,
1246
- url: 'https://github.com/test-org/test-repo/issues/1',
1247
- itemId: 'item-1',
1248
- status: 'Unread',
1249
- });
1250
- const unreadIssue2 = buildIssue({
1251
- number: 2,
1252
- url: 'https://github.com/test-org/test-repo/issues/2',
1253
- itemId: 'item-2',
1254
- status: 'Unread',
1255
- });
1256
- const awsIssue = buildIssue({
1257
- number: 3,
1258
- url: 'https://github.com/test-org/test-repo/issues/3',
1259
- itemId: 'item-3',
1260
- status: AWAITING_WORKSPACE_STATUS_NAME,
1261
- });
1262
- mockIssueRepository.getAllIssues.mockResolvedValue({
1263
- project: mock<Project>(),
1264
- issues: [unreadIssue1, unreadIssue2, awsIssue],
1265
- cacheUsed: false,
1266
- });
1267
- mockIssueRepository.updateStatus.mockResolvedValue(undefined);
1268
-
1269
- const mockStatusDefaultRepository =
1270
- mock<Pick<StatusDefaultRepository, 'setStatusFieldDefault'>>();
1271
- const useCase = new SetupTowerDefenceProjectUseCase(
1272
- mockProjectRepository,
1273
- mockIssueRepository,
1274
- mockStatusDefaultRepository,
1275
- );
1276
- await useCase.run({ projectUrl: project.url });
1277
-
1278
- expect(mockIssueRepository.updateStatus).toHaveBeenCalledTimes(2);
1279
- expect(mockIssueRepository.updateStatus).toHaveBeenCalledWith(
1280
- project,
1281
- unreadIssue1,
1282
- awaitingWorkspaceId,
1283
- );
1284
- expect(mockIssueRepository.updateStatus).toHaveBeenCalledWith(
1285
- project,
1286
- unreadIssue2,
1287
- awaitingWorkspaceId,
1288
- );
1289
- });
1290
-
1291
- it('should call setStatusFieldDefault with Awaiting Workspace option id when statuses are already in canonical order', async () => {
1292
- const mockProjectRepository =
1293
- mock<Pick<ProjectRepository, 'getByUrl' | 'updateStatusList'>>();
1294
- const mockIssueRepository =
1295
- mock<Pick<IssueRepository, 'getAllIssues' | 'updateStatus'>>();
1296
- const canonicalStatuses = buildCanonicalStatuses();
1297
- const project = buildProject(canonicalStatuses);
1298
- mockProjectRepository.getByUrl.mockResolvedValue(project);
1299
- mockIssueRepository.getAllIssues.mockResolvedValue({
1300
- project: mock<Project>(),
1301
- issues: [],
1302
- cacheUsed: false,
1303
- });
1304
-
1305
- const mockStatusDefaultRepository =
1306
- mock<Pick<StatusDefaultRepository, 'setStatusFieldDefault'>>();
1307
- const useCase = new SetupTowerDefenceProjectUseCase(
1308
- mockProjectRepository,
1309
- mockIssueRepository,
1310
- mockStatusDefaultRepository,
1311
- );
1312
- await useCase.run({ projectUrl: project.url });
1313
-
1314
- expect(mockProjectRepository.updateStatusList).not.toHaveBeenCalled();
1315
- expect(
1316
- mockStatusDefaultRepository.setStatusFieldDefault,
1317
- ).toHaveBeenCalledTimes(1);
1318
- expect(
1319
- mockStatusDefaultRepository.setStatusFieldDefault,
1320
- ).toHaveBeenCalledWith(project, canonicalStatuses[0].id);
1321
- });
1322
-
1323
- it('should call setStatusFieldDefault with Awaiting Workspace option id after updateStatusList', async () => {
1324
- const mockProjectRepository =
1325
- mock<Pick<ProjectRepository, 'getByUrl' | 'updateStatusList'>>();
1326
- const mockIssueRepository =
1327
- mock<Pick<IssueRepository, 'getAllIssues' | 'updateStatus'>>();
1328
- const awaitingWorkspaceId = 'existing-aws-id';
1329
- const statuses: FieldOption[] = [
1330
- {
1331
- id: awaitingWorkspaceId,
1332
- name: AWAITING_WORKSPACE_STATUS_NAME,
1333
- color: 'BLUE',
1334
- description: 'stale description',
1335
- },
1336
- ];
1337
- const project = buildProject(statuses);
1338
- mockProjectRepository.getByUrl.mockResolvedValue(project);
1339
- mockProjectRepository.updateStatusList.mockResolvedValue([]);
1340
- mockIssueRepository.getAllIssues.mockResolvedValue({
1341
- project: mock<Project>(),
1342
- issues: [],
1343
- cacheUsed: false,
1344
- });
1345
-
1346
- const mockStatusDefaultRepository =
1347
- mock<Pick<StatusDefaultRepository, 'setStatusFieldDefault'>>();
1348
- const useCase = new SetupTowerDefenceProjectUseCase(
1349
- mockProjectRepository,
1350
- mockIssueRepository,
1351
- mockStatusDefaultRepository,
1352
- );
1353
- await useCase.run({ projectUrl: project.url });
1354
-
1355
- expect(mockProjectRepository.updateStatusList).toHaveBeenCalledTimes(1);
1356
- expect(
1357
- mockStatusDefaultRepository.setStatusFieldDefault,
1358
- ).toHaveBeenCalledTimes(1);
1359
- expect(
1360
- mockStatusDefaultRepository.setStatusFieldDefault,
1361
- ).toHaveBeenCalledWith(project, awaitingWorkspaceId);
1362
- });
1363
- });