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,1552 +0,0 @@
1
- import { HTTPError } from 'ky';
2
- import { BaseGitHubRepository } from '../BaseGitHubRepository';
3
- import { postGithubGraphqlJson } from '../githubGraphqlClient';
4
- import { Project } from '../../../domain/entities/Project';
5
- import { Issue } from '../../../domain/entities/Issue';
6
- export type ProjectItem = {
7
- id: string;
8
- nameWithOwner: string;
9
- number: number;
10
- title: string;
11
- state: 'OPEN' | 'CLOSED' | 'MERGED';
12
- url: string;
13
- body: string | null;
14
- labels: string[];
15
- assignees: string[];
16
- createdAt: string;
17
- updatedAt: string;
18
- author: string;
19
- closingIssueReferenceUrls: string[];
20
- isRepoArchived: boolean;
21
- stateReason: 'COMPLETED' | 'NOT_PLANNED' | 'REOPENED' | null;
22
- customFields: {
23
- name: string;
24
- value: string | null;
25
- }[];
26
- };
27
- export type ProjectItemLight = {
28
- id: string;
29
- updatedAt: string;
30
- url: string;
31
- number: number;
32
- };
33
- type ProjectV2ItemFieldValueNode = {
34
- text?: string;
35
- number?: number;
36
- date?: string;
37
- name?: string;
38
- field: {
39
- name: string;
40
- };
41
- };
42
- type ProjectV2ItemContentNode = {
43
- repository: { nameWithOwner: string; isArchived: boolean };
44
- number: number;
45
- title: string;
46
- state: string;
47
- url: string;
48
- body?: string | null;
49
- createdAt: string;
50
- updatedAt: string;
51
- author: { login: string } | null;
52
- labels: { nodes: { name: string }[] };
53
- assignees: { nodes: { login: string }[] };
54
- closingIssuesReferences?: { nodes: { url: string }[] };
55
- stateReason?: string | null;
56
- };
57
- type ProjectV2ItemNode = {
58
- id: string;
59
- fieldValues: {
60
- nodes: ProjectV2ItemFieldValueNode[];
61
- };
62
- content: ProjectV2ItemContentNode;
63
- };
64
- // Rate-limit cost of a GraphQL query grows with the number of requested
65
- // nodes (roughly totalNodes / 100, see
66
- // https://docs.github.com/en/graphql/overview/rate-limits-and-node-limits-for-the-graphql-api).
67
- // The previous values (labels first: 100, assignees first: 20) requested far
68
- // more nodes than any issue in the managed projects actually carries: no
69
- // operational issue has more than 20 labels or more than 10 assignees, so
70
- // these reduced limits do not drop any data while cutting the per-item node
71
- // budget to roughly one third.
72
- export const PROJECT_ITEM_LABELS_FIRST = 20;
73
- export const PROJECT_ITEM_ASSIGNEES_FIRST = 10;
74
-
75
- const PROJECT_V2_ITEM_FIELD_VALUES_AND_CONTENT_SELECTION = `
76
- fieldValues(first: 10) {
77
- nodes {
78
- ... on ProjectV2ItemFieldTextValue {
79
- text
80
- field {
81
- ... on ProjectV2Field{
82
- name
83
- }
84
- }
85
- }
86
- ... on ProjectV2ItemFieldNumberValue {
87
- number
88
- id
89
- field {
90
- ... on ProjectV2Field{
91
- name
92
- }
93
- }
94
- }
95
- ... on ProjectV2ItemFieldDateValue {
96
- date
97
- field {
98
- ... on ProjectV2Field{
99
- name
100
- }
101
- }
102
- }
103
- ... on ProjectV2ItemFieldSingleSelectValue {
104
- name
105
- field {
106
- ... on ProjectV2SingleSelectField {
107
- name
108
- }
109
- }
110
- }
111
- ... on ProjectV2ItemFieldIterationValue {
112
- title
113
- field {
114
- ... on ProjectV2Field{
115
- name
116
- }
117
- }
118
- }
119
- }
120
- }
121
- content {
122
- ... on Issue {
123
- number
124
- title
125
- state
126
- stateReason
127
- url
128
- body
129
- createdAt
130
- updatedAt
131
- author {
132
- login
133
- }
134
- labels(first: ${PROJECT_ITEM_LABELS_FIRST}) {
135
- nodes {
136
- name
137
- }
138
- }
139
- assignees(first: ${PROJECT_ITEM_ASSIGNEES_FIRST}) {
140
- nodes {
141
- login
142
- }
143
- }
144
- repository {
145
- nameWithOwner
146
- isArchived
147
- }
148
- }
149
- ... on PullRequest {
150
- number
151
- title
152
- state
153
- url
154
- createdAt
155
- updatedAt
156
- author {
157
- login
158
- }
159
- labels(first: ${PROJECT_ITEM_LABELS_FIRST}) {
160
- nodes {
161
- name
162
- }
163
- }
164
- assignees(first: ${PROJECT_ITEM_ASSIGNEES_FIRST}) {
165
- nodes {
166
- login
167
- }
168
- }
169
- repository {
170
- nameWithOwner
171
- isArchived
172
- }
173
- closingIssuesReferences(first: 50) {
174
- nodes {
175
- url
176
- }
177
- }
178
- }
179
- }`;
180
- export const PAGINATION_DELAY_MS = 5000;
181
- export const FETCH_PROJECT_ITEMS_INITIAL_PAGE_SIZE = 100;
182
- export const FETCH_PROJECT_ITEMS_BY_IDS_BATCH_SIZE = 100;
183
- export const FETCH_PROJECT_ITEMS_GRAPHQL_ERROR_PAYLOAD_MAX_LENGTH = 4000;
184
- export const RATE_LIMIT_MAX_RETRIES = 6;
185
- export const RATE_LIMIT_MIN_BACKOFF_MS = 1000;
186
- export const RATE_LIMIT_DEFAULT_BACKOFF_MS = 60000;
187
- export const RATE_LIMIT_MAX_BACKOFF_MS = 300000;
188
-
189
- const sleep = (ms: number): Promise<void> =>
190
- new Promise((resolve) => setTimeout(resolve, ms));
191
-
192
- const toStateReason = (
193
- value: string | null | undefined,
194
- ): 'COMPLETED' | 'NOT_PLANNED' | 'REOPENED' | null => {
195
- if (
196
- value === 'COMPLETED' ||
197
- value === 'NOT_PLANNED' ||
198
- value === 'REOPENED'
199
- ) {
200
- return value;
201
- }
202
- return null;
203
- };
204
-
205
- const parseNonNegativeIntegerHeader = (value: string | null): number | null => {
206
- if (value === null) {
207
- return null;
208
- }
209
- const trimmed = value.trim();
210
- if (!/^\d+$/.test(trimmed)) {
211
- return null;
212
- }
213
- const parsed = Number.parseInt(trimmed, 10);
214
- return Number.isFinite(parsed) ? parsed : null;
215
- };
216
-
217
- const computeRateLimitBackoffMs = (
218
- headers: Headers | undefined,
219
- attempt: number,
220
- nowMs: number,
221
- ): number => {
222
- const exponentialMs = Math.min(
223
- RATE_LIMIT_MAX_BACKOFF_MS,
224
- RATE_LIMIT_DEFAULT_BACKOFF_MS * Math.pow(2, attempt),
225
- );
226
- const retryAfterSeconds = parseNonNegativeIntegerHeader(
227
- headers?.get('retry-after') ?? null,
228
- );
229
- if (retryAfterSeconds !== null) {
230
- return Math.min(
231
- RATE_LIMIT_MAX_BACKOFF_MS,
232
- Math.max(RATE_LIMIT_MIN_BACKOFF_MS, retryAfterSeconds * 1000),
233
- );
234
- }
235
- const remaining = parseNonNegativeIntegerHeader(
236
- headers?.get('x-ratelimit-remaining') ?? null,
237
- );
238
- const resetEpochSeconds = parseNonNegativeIntegerHeader(
239
- headers?.get('x-ratelimit-reset') ?? null,
240
- );
241
- if (remaining === 0 && resetEpochSeconds !== null) {
242
- const waitMs = resetEpochSeconds * 1000 - nowMs;
243
- return Math.min(
244
- RATE_LIMIT_MAX_BACKOFF_MS,
245
- Math.max(RATE_LIMIT_MIN_BACKOFF_MS, waitMs),
246
- );
247
- }
248
- return Math.max(RATE_LIMIT_MIN_BACKOFF_MS, exponentialMs);
249
- };
250
-
251
- const isRateLimitStatus = (status: number): boolean =>
252
- status === 429 || status === 403;
253
-
254
- export const callWithRateLimitRetry = async <T>(
255
- request: () => Promise<T>,
256
- ): Promise<T> => {
257
- let attempt = 0;
258
- for (;;) {
259
- try {
260
- return await request();
261
- } catch (error) {
262
- if (
263
- !(error instanceof HTTPError) ||
264
- !isRateLimitStatus(error.response.status) ||
265
- attempt >= RATE_LIMIT_MAX_RETRIES
266
- ) {
267
- throw error;
268
- }
269
- const backoffMs = computeRateLimitBackoffMs(
270
- error.response.headers,
271
- attempt,
272
- Date.now(),
273
- );
274
- console.log(
275
- `fetchProjectItems: GitHub returned ${error.response.status} (rate limit). Backing off ${backoffMs}ms before retry ${attempt + 1}/${RATE_LIMIT_MAX_RETRIES}.`,
276
- );
277
- await sleep(backoffMs);
278
- attempt++;
279
- }
280
- }
281
- };
282
-
283
- const stringifyGraphqlErrorsForLog = (
284
- errors: { message: string }[],
285
- ): string => {
286
- const serialized = JSON.stringify(errors);
287
- if (
288
- serialized.length <= FETCH_PROJECT_ITEMS_GRAPHQL_ERROR_PAYLOAD_MAX_LENGTH
289
- ) {
290
- return serialized;
291
- }
292
- return `${serialized.slice(0, FETCH_PROJECT_ITEMS_GRAPHQL_ERROR_PAYLOAD_MAX_LENGTH)}...[truncated]`;
293
- };
294
-
295
- export class GraphqlProjectItemRepository extends BaseGitHubRepository {
296
- fetchItemId = async (
297
- projectId: string,
298
- owner: string,
299
- repositoryName: string,
300
- issueNumber: number,
301
- ): Promise<string | undefined> => {
302
- const graphqlQuery = {
303
- query: `query GetProjectItemID( $owner: String!, $name: String!, $issueNumber: Int!) {
304
- repository(owner: $owner, name: $name) {
305
- issue(number: $issueNumber) {
306
- projectItems(first: 2) {
307
- nodes {
308
- id
309
- project {
310
- id
311
- }
312
- }
313
- }
314
- }
315
- }
316
- }`,
317
- variables: {
318
- projectID: projectId,
319
- owner: owner,
320
- name: repositoryName,
321
- issueNumber: issueNumber,
322
- },
323
- };
324
-
325
- try {
326
- const response = await postGithubGraphqlJson<{
327
- data?: {
328
- repository: {
329
- issue: {
330
- projectItems: {
331
- nodes: {
332
- id: string;
333
- project: { id: string };
334
- }[];
335
- };
336
- };
337
- };
338
- };
339
- errors?: { message: string }[];
340
- }>({
341
- ghToken: this.ghToken,
342
- query: graphqlQuery.query,
343
- variables: graphqlQuery.variables,
344
- });
345
-
346
- if (!response.data) {
347
- const errorMessages = response.errors
348
- ? response.errors.map((e) => e.message).join('; ')
349
- : 'no data field in response';
350
- throw new Error(
351
- `GitHub GraphQL API returned no data for fetchItemId: ${errorMessages}`,
352
- );
353
- }
354
- const projectItems: {
355
- id: string;
356
- project: { id: string };
357
- }[] = response.data.repository.issue.projectItems.nodes;
358
- const projectItemId = projectItems.find(
359
- (item) => item.project.id === projectId,
360
- )?.id;
361
- return projectItemId;
362
- } catch (error) {
363
- console.error('Error fetching GitHub Project V2 ID:', error);
364
- return undefined;
365
- }
366
- };
367
- fetchProjectItems = async (
368
- projectId: string,
369
- query?: string,
370
- ): Promise<ProjectItem[]> => {
371
- const graphqlQueryString = `
372
- query GetProjectItems($projectId: ID!, $after: String, $first: Int!, $query: String) {
373
- node(id: $projectId) {
374
- ... on ProjectV2 {
375
- items(first: $first, after: $after, query: $query) {
376
- totalCount
377
- pageInfo {
378
- endCursor
379
- hasNextPage
380
- }
381
- nodes {
382
- id${PROJECT_V2_ITEM_FIELD_VALUES_AND_CONTENT_SELECTION}
383
- }
384
- }
385
- }
386
- }
387
- }
388
- `;
389
- const callGraphql = async (
390
- projectId: string,
391
- after: string | null,
392
- first: number,
393
- ): Promise<{
394
- node: {
395
- items: {
396
- totalCount: number;
397
- pageInfo: {
398
- endCursor: string;
399
- startCursor: string;
400
- hasNextPage: boolean;
401
- };
402
- nodes: {
403
- id: string;
404
- fieldValues: {
405
- nodes: {
406
- text: string;
407
- number: number;
408
- date: string;
409
- field: {
410
- name: string;
411
- };
412
- }[];
413
- };
414
- content: {
415
- repository: { nameWithOwner: string; isArchived: boolean };
416
- number: number;
417
- title: string;
418
- state: string;
419
- url: string;
420
- body?: string | null;
421
- createdAt: string;
422
- updatedAt: string;
423
- author: { login: string } | null;
424
- labels: { nodes: { name: string }[] };
425
- assignees: { nodes: { login: string }[] };
426
- closingIssuesReferences?: { nodes: { url: string }[] };
427
- };
428
- }[];
429
- };
430
- };
431
- }> => {
432
- const graphqlQuery = {
433
- query: graphqlQueryString,
434
- variables: {
435
- projectId: projectId,
436
- after: after,
437
- first: first,
438
- query: query ?? null,
439
- },
440
- };
441
- const response = await callWithRateLimitRetry(() =>
442
- postGithubGraphqlJson<{
443
- data: {
444
- node: {
445
- items: {
446
- totalCount: number;
447
- pageInfo: {
448
- endCursor: string;
449
- startCursor: string;
450
- hasNextPage: boolean;
451
- };
452
- nodes: {
453
- id: string;
454
- fieldValues: {
455
- nodes: {
456
- text: string;
457
- number: number;
458
- date: string;
459
- field: {
460
- name: string;
461
- };
462
- }[];
463
- };
464
- content: {
465
- repository: { nameWithOwner: string; isArchived: boolean };
466
- number: number;
467
- title: string;
468
- state: string;
469
- url: string;
470
- body?: string | null;
471
- createdAt: string;
472
- updatedAt: string;
473
- author: { login: string } | null;
474
- labels: { nodes: { name: string }[] };
475
- assignees: { nodes: { login: string }[] };
476
- closingIssuesReferences?: { nodes: { url: string }[] };
477
- };
478
- }[];
479
- };
480
- } | null;
481
- } | null;
482
- errors?: { message: string }[];
483
- }>({
484
- ghToken: this.ghToken,
485
- query: graphqlQuery.query,
486
- variables: graphqlQuery.variables,
487
- }),
488
- );
489
- if (response.errors && response.errors.length > 0) {
490
- throw new Error(
491
- `GitHub GraphQL errors: ${stringifyGraphqlErrorsForLog(response.errors)}`,
492
- );
493
- }
494
- const rawData = response.data;
495
- if (!rawData) {
496
- throw new Error('No data returned from GitHub API');
497
- }
498
- const rawNode = rawData.node;
499
- if (rawNode === null) {
500
- throw new Error('No data returned from GitHub API');
501
- }
502
- return { node: rawNode };
503
- };
504
- const callGraphqlWithHalvingFallback = async (
505
- after: string | null,
506
- ): Promise<{
507
- node: {
508
- items: {
509
- totalCount: number;
510
- pageInfo: {
511
- endCursor: string;
512
- startCursor: string;
513
- hasNextPage: boolean;
514
- };
515
- nodes: {
516
- id: string;
517
- fieldValues: {
518
- nodes: {
519
- text: string;
520
- number: number;
521
- date: string;
522
- field: {
523
- name: string;
524
- };
525
- }[];
526
- };
527
- content: {
528
- repository: { nameWithOwner: string; isArchived: boolean };
529
- number: number;
530
- title: string;
531
- state: string;
532
- url: string;
533
- body?: string | null;
534
- createdAt: string;
535
- updatedAt: string;
536
- author: { login: string } | null;
537
- labels: { nodes: { name: string }[] };
538
- assignees: { nodes: { login: string }[] };
539
- closingIssuesReferences?: { nodes: { url: string }[] };
540
- };
541
- }[];
542
- };
543
- };
544
- }> => {
545
- let attemptFirst = FETCH_PROJECT_ITEMS_INITIAL_PAGE_SIZE;
546
- let lastError: unknown = null;
547
- while (attemptFirst >= 1) {
548
- try {
549
- return await callGraphql(projectId, after, attemptFirst);
550
- } catch (error) {
551
- lastError = error;
552
- if (
553
- error instanceof HTTPError &&
554
- isRateLimitStatus(error.response.status)
555
- ) {
556
- throw error;
557
- }
558
- if (attemptFirst === 1) {
559
- throw error;
560
- }
561
- const nextFirst = Math.max(1, Math.floor(attemptFirst / 2));
562
- console.log(
563
- `fetchProjectItems: page request with first=${attemptFirst} failed, halving to first=${nextFirst}: ${error instanceof Error ? error.message : String(error)}`,
564
- );
565
- attemptFirst = nextFirst;
566
- }
567
- }
568
- throw lastError instanceof Error
569
- ? lastError
570
- : new Error(String(lastError));
571
- };
572
- const issues: ProjectItem[] = [];
573
- let after: string | null = null;
574
- let hasNextPage = true;
575
- let totalCount = 0;
576
- let cumulativeRawNodes = 0;
577
- let pageIndex = 0;
578
-
579
- while (hasNextPage) {
580
- if (after !== null) {
581
- await new Promise((resolve) =>
582
- setTimeout(resolve, PAGINATION_DELAY_MS),
583
- );
584
- }
585
- const data = await callGraphqlWithHalvingFallback(after);
586
- const pageNodes = data.node.items.nodes;
587
- const pageInfo = data.node.items.pageInfo;
588
- totalCount = data.node.items.totalCount;
589
- cumulativeRawNodes += pageNodes.length;
590
- pageIndex++;
591
- console.log(
592
- `fetchProjectItems: page ${pageIndex}, nodes: ${pageNodes.length}, cumulative: ${cumulativeRawNodes}/${totalCount}`,
593
- );
594
- const nodes: ProjectV2ItemNode[] = pageNodes;
595
- nodes.forEach((item) => {
596
- const projectItem = this.mapProjectV2ItemNodeToProjectItem(item);
597
- if (projectItem) {
598
- issues.push(projectItem);
599
- }
600
- });
601
- if (
602
- pageNodes.length > 0 &&
603
- !pageInfo.hasNextPage &&
604
- cumulativeRawNodes < totalCount
605
- ) {
606
- throw new Error(
607
- `fetchProjectItems: page ${pageIndex} has ${pageNodes.length} nodes with hasNextPage=false but only ${cumulativeRawNodes}/${totalCount} items accumulated`,
608
- );
609
- }
610
- hasNextPage = pageInfo.hasNextPage;
611
- after = pageInfo.endCursor;
612
- }
613
- console.log(
614
- `fetchProjectItems: completed, totalCount: ${totalCount}, cumulativeRawNodes: ${cumulativeRawNodes}, issues: ${issues.length}`,
615
- );
616
- if (cumulativeRawNodes !== totalCount) {
617
- throw new Error(
618
- `fetchProjectItems: expected ${totalCount} items but accumulated ${cumulativeRawNodes}`,
619
- );
620
- }
621
- return issues;
622
- };
623
- private mapProjectV2ItemNodeToProjectItem = (
624
- item: ProjectV2ItemNode | null,
625
- ): ProjectItem | null => {
626
- if (!item || !item.content || !item.content.repository) {
627
- console.warn(
628
- `fetchProjectItems: skipping item with null content or repository. itemId: ${item?.id ?? 'unknown'}`,
629
- );
630
- return null;
631
- }
632
- return {
633
- id: item.id,
634
- nameWithOwner: item.content.repository.nameWithOwner,
635
- number: item.content.number,
636
- title: item.content.title,
637
- state: this.convertStrToState(item.content.state),
638
- url: item.content.url,
639
- body: item.content.body ?? null,
640
- labels: item.content.labels?.nodes?.map((l) => l.name) || [],
641
- assignees: item.content.assignees?.nodes?.map((a) => a.login) || [],
642
- createdAt: item.content.createdAt || new Date().toISOString(),
643
- updatedAt:
644
- item.content.updatedAt ||
645
- item.content.createdAt ||
646
- new Date().toISOString(),
647
- author: item.content.author?.login || '',
648
- closingIssueReferenceUrls:
649
- item.content.closingIssuesReferences?.nodes
650
- ?.map((node) => node.url)
651
- .filter((url) => url.length > 0) || [],
652
- isRepoArchived: item.content.repository.isArchived ?? false,
653
- stateReason: toStateReason(item.content.stateReason),
654
- customFields: item.fieldValues.nodes
655
- .filter((field) => !!field.field)
656
- .map((field) => {
657
- return {
658
- name: field.field.name,
659
- value:
660
- field.name ??
661
- field.text ??
662
- field.number?.toString() ??
663
- field.date ??
664
- null,
665
- };
666
- }),
667
- };
668
- };
669
- fetchProjectItemsLight = async (
670
- projectId: string,
671
- query?: string,
672
- ): Promise<ProjectItemLight[]> => {
673
- const graphqlQueryString = `
674
- query GetProjectItemsLight($projectId: ID!, $after: String, $first: Int!, $query: String) {
675
- node(id: $projectId) {
676
- ... on ProjectV2 {
677
- items(first: $first, after: $after, query: $query) {
678
- totalCount
679
- pageInfo {
680
- endCursor
681
- hasNextPage
682
- }
683
- nodes {
684
- id
685
- updatedAt
686
- content {
687
- ... on Issue {
688
- url
689
- number
690
- }
691
- ... on PullRequest {
692
- url
693
- number
694
- }
695
- }
696
- }
697
- }
698
- }
699
- }
700
- }
701
- `;
702
- const callGraphql = async (
703
- after: string | null,
704
- ): Promise<{
705
- totalCount: number;
706
- pageInfo: { endCursor: string; hasNextPage: boolean };
707
- nodes: {
708
- id: string;
709
- updatedAt: string;
710
- content: { url: string; number: number } | null;
711
- }[];
712
- }> => {
713
- const response = await callWithRateLimitRetry(() =>
714
- postGithubGraphqlJson<{
715
- data: {
716
- node: {
717
- items: {
718
- totalCount: number;
719
- pageInfo: { endCursor: string; hasNextPage: boolean };
720
- nodes: {
721
- id: string;
722
- updatedAt: string;
723
- content: { url: string; number: number } | null;
724
- }[];
725
- };
726
- } | null;
727
- } | null;
728
- errors?: { message: string }[];
729
- }>({
730
- ghToken: this.ghToken,
731
- query: graphqlQueryString,
732
- variables: {
733
- projectId: projectId,
734
- after: after,
735
- first: FETCH_PROJECT_ITEMS_INITIAL_PAGE_SIZE,
736
- query: query ?? null,
737
- },
738
- }),
739
- );
740
- if (response.errors && response.errors.length > 0) {
741
- throw new Error(
742
- `GitHub GraphQL errors: ${stringifyGraphqlErrorsForLog(response.errors)}`,
743
- );
744
- }
745
- const rawData = response.data;
746
- if (!rawData || rawData.node === null) {
747
- throw new Error('No data returned from GitHub API');
748
- }
749
- return rawData.node.items;
750
- };
751
- const fetchAllLightPages = async (): Promise<{
752
- lightItems: ProjectItemLight[];
753
- inconsistencyMessage: string | null;
754
- }> => {
755
- const lightItems: ProjectItemLight[] = [];
756
- let after: string | null = null;
757
- let hasNextPage = true;
758
- let totalCount = 0;
759
- let cumulativeRawNodes = 0;
760
- let pageIndex = 0;
761
- let inconsistencyMessage: string | null = null;
762
- while (hasNextPage) {
763
- if (after !== null) {
764
- await new Promise((resolve) =>
765
- setTimeout(resolve, PAGINATION_DELAY_MS),
766
- );
767
- }
768
- const items = await callGraphql(after);
769
- const pageNodes = items.nodes;
770
- const pageInfo = items.pageInfo;
771
- totalCount = items.totalCount;
772
- cumulativeRawNodes += pageNodes.length;
773
- pageIndex++;
774
- console.log(
775
- `fetchProjectItemsLight: page ${pageIndex}, nodes: ${pageNodes.length}, cumulative: ${cumulativeRawNodes}/${totalCount}`,
776
- );
777
- pageNodes.forEach((node) => {
778
- if (!node || !node.content || !node.content.url) {
779
- return;
780
- }
781
- lightItems.push({
782
- id: node.id,
783
- updatedAt: node.updatedAt,
784
- url: node.content.url,
785
- number: node.content.number,
786
- });
787
- });
788
- if (
789
- pageNodes.length > 0 &&
790
- !pageInfo.hasNextPage &&
791
- cumulativeRawNodes < totalCount
792
- ) {
793
- inconsistencyMessage = `fetchProjectItemsLight: page ${pageIndex} has ${pageNodes.length} nodes with hasNextPage=false but only ${cumulativeRawNodes}/${totalCount} items accumulated`;
794
- }
795
- hasNextPage = pageInfo.hasNextPage;
796
- after = pageInfo.endCursor;
797
- }
798
- console.log(
799
- `fetchProjectItemsLight: completed, totalCount: ${totalCount}, cumulativeRawNodes: ${cumulativeRawNodes}, items: ${lightItems.length}`,
800
- );
801
- if (inconsistencyMessage === null && cumulativeRawNodes !== totalCount) {
802
- inconsistencyMessage = `fetchProjectItemsLight: expected ${totalCount} items but accumulated ${cumulativeRawNodes}`;
803
- }
804
- return { lightItems, inconsistencyMessage };
805
- };
806
- const firstAttempt = await fetchAllLightPages();
807
- if (firstAttempt.inconsistencyMessage === null) {
808
- return firstAttempt.lightItems;
809
- }
810
- console.warn(
811
- `${firstAttempt.inconsistencyMessage}, retrying full fetch once`,
812
- );
813
- const retryAttempt = await fetchAllLightPages();
814
- if (retryAttempt.inconsistencyMessage === null) {
815
- return retryAttempt.lightItems;
816
- }
817
- console.warn(
818
- `${retryAttempt.inconsistencyMessage}, continuing with accumulated items after retry`,
819
- );
820
- return retryAttempt.lightItems;
821
- };
822
- fetchProjectItemsByIds = async (ids: string[]): Promise<ProjectItem[]> => {
823
- if (ids.length === 0) {
824
- return [];
825
- }
826
- const graphqlQueryString = `
827
- query GetProjectItemsByIds($ids: [ID!]!) {
828
- nodes(ids: $ids) {
829
- ... on ProjectV2Item {
830
- id${PROJECT_V2_ITEM_FIELD_VALUES_AND_CONTENT_SELECTION}
831
- }
832
- }
833
- }
834
- `;
835
- const callGraphql = async (
836
- batchIds: string[],
837
- ): Promise<(ProjectV2ItemNode | null)[]> => {
838
- const response = await callWithRateLimitRetry(() =>
839
- postGithubGraphqlJson<{
840
- data: { nodes: (ProjectV2ItemNode | null)[] } | null;
841
- errors?: { message: string }[];
842
- }>({
843
- ghToken: this.ghToken,
844
- query: graphqlQueryString,
845
- variables: {
846
- ids: batchIds,
847
- },
848
- }),
849
- );
850
- if (response.errors && response.errors.length > 0) {
851
- throw new Error(
852
- `GitHub GraphQL errors: ${stringifyGraphqlErrorsForLog(response.errors)}`,
853
- );
854
- }
855
- if (!response.data) {
856
- throw new Error('No data returned from GitHub API');
857
- }
858
- return response.data.nodes;
859
- };
860
- const items: ProjectItem[] = [];
861
- let batchIndex = 0;
862
- for (
863
- let start = 0;
864
- start < ids.length;
865
- start += FETCH_PROJECT_ITEMS_BY_IDS_BATCH_SIZE
866
- ) {
867
- if (start > 0) {
868
- await new Promise((resolve) =>
869
- setTimeout(resolve, PAGINATION_DELAY_MS),
870
- );
871
- }
872
- const batchIds = ids.slice(
873
- start,
874
- start + FETCH_PROJECT_ITEMS_BY_IDS_BATCH_SIZE,
875
- );
876
- const nodes = await callGraphql(batchIds);
877
- batchIndex++;
878
- console.log(
879
- `fetchProjectItemsByIds: batch ${batchIndex}, ids: ${batchIds.length}, nodes: ${nodes.length}`,
880
- );
881
- nodes.forEach((node) => {
882
- const projectItem = this.mapProjectV2ItemNodeToProjectItem(node);
883
- if (projectItem) {
884
- items.push(projectItem);
885
- }
886
- });
887
- }
888
- return items;
889
- };
890
- getProjectItemFieldsFromIssueUrl = async (
891
- issueUrl: string,
892
- ): Promise<
893
- {
894
- fieldName: string;
895
- fieldValue: string;
896
- }[]
897
- > => {
898
- const { owner, repo, issueNumber } = this.extractIssueFromUrl(issueUrl);
899
- return this.getProjectItemFields(owner, repo, issueNumber);
900
- };
901
-
902
- getProjectItemFields = async (
903
- owner: string,
904
- repositoryName: string,
905
- issueNumber: number,
906
- ): Promise<
907
- {
908
- fieldName: string;
909
- fieldValue: string;
910
- }[]
911
- > => {
912
- const graphqlQueryString = `
913
- query GetProjectFields($owner: String!, $repository: String!, $issueNumber: Int!){
914
- repository(owner: $owner, name: $repository) {
915
- issue(number: $issueNumber) {
916
- projectItems(first: 2) {
917
- nodes {
918
- id
919
- fieldValues(first: 10) {
920
- totalCount
921
- nodes {
922
- __typename
923
- ... on ProjectV2ItemFieldDateValue {
924
- date
925
- field {
926
- ... on ProjectV2Field {
927
- name
928
- }
929
- }
930
- }
931
- ... on ProjectV2ItemFieldSingleSelectValue {
932
- name
933
- field {
934
- ... on ProjectV2SingleSelectField {
935
- name
936
- }
937
- }
938
- }
939
- ... on ProjectV2ItemFieldUserValue {
940
- users {
941
- totalCount
942
- nodes {
943
- login
944
- }
945
- }
946
- field {
947
- ... on ProjectV2Field {
948
- name
949
- }
950
- }
951
- }
952
- ... on ProjectV2ItemFieldRepositoryValue {
953
- repository {
954
- name
955
- }
956
- field {
957
- __typename
958
- ... on ProjectV2Field {
959
- name
960
- }
961
- }
962
- }
963
- ... on ProjectV2ItemFieldTextValue {
964
- text
965
- }
966
- }
967
- }
968
- }
969
- }
970
- }
971
- }
972
- }
973
-
974
- `;
975
- const graphqlQuery = {
976
- query: graphqlQueryString,
977
- variables: {
978
- owner: owner,
979
- repository: repositoryName,
980
- issueNumber: issueNumber,
981
- },
982
- };
983
- const response = await postGithubGraphqlJson<{
984
- data?: {
985
- repository: {
986
- issue: {
987
- projectItems: {
988
- nodes: {
989
- id: string;
990
- fieldValues: {
991
- nodes: {
992
- __typename: string;
993
- field: { name: string };
994
- date: string;
995
- name: string;
996
- text: string;
997
- repository: { name: string };
998
- user: { login: string };
999
- }[];
1000
- };
1001
- }[];
1002
- };
1003
- };
1004
- };
1005
- };
1006
- errors?: { message: string }[];
1007
- }>({
1008
- ghToken: this.ghToken,
1009
- query: graphqlQuery.query,
1010
- variables: graphqlQuery.variables,
1011
- });
1012
-
1013
- if (!response.data) {
1014
- const errorMessages = response.errors
1015
- ? response.errors.map((e) => e.message).join('; ')
1016
- : 'no data field in response';
1017
- throw new Error(
1018
- `GitHub GraphQL API returned no data for getProjectItemFields: ${errorMessages}`,
1019
- );
1020
- }
1021
- const data = response.data;
1022
- const issueFields: {
1023
- fieldName: string;
1024
- fieldValue: string;
1025
- }[] = [];
1026
- if (!data.repository.issue) {
1027
- return issueFields;
1028
- }
1029
- const projectItems: {
1030
- __typename: string;
1031
- field: {
1032
- name: string;
1033
- };
1034
- user?: {
1035
- login: string;
1036
- };
1037
- repository?: {
1038
- name: string;
1039
- };
1040
- date?: string;
1041
- name?: string;
1042
- text?: string;
1043
- }[] = data.repository.issue.projectItems.nodes[0].fieldValues.nodes;
1044
- projectItems.forEach((item) => {
1045
- issueFields.push({
1046
- fieldName: item.field?.name ?? '',
1047
- fieldValue:
1048
- item.date ??
1049
- item.name ??
1050
- item.text ??
1051
- item.repository?.name ??
1052
- item.user?.login ??
1053
- '',
1054
- });
1055
- });
1056
- return issueFields;
1057
- };
1058
- fetchProjectItemByUrl = async (
1059
- issueUrl: string,
1060
- projectId?: string,
1061
- ): Promise<ProjectItem | null> => {
1062
- const { owner, repo, issueNumber } = this.extractIssueFromUrl(issueUrl);
1063
- const graphql = `query GetIssueOrPullRequest($owner: String!, $repo: String!, $number: Int!) {
1064
- repository(owner: $owner, name: $repo) {
1065
- issue(number: $number) {
1066
- number
1067
- title
1068
- state
1069
- stateReason
1070
- url
1071
- body
1072
- createdAt
1073
- updatedAt
1074
- author {
1075
- login
1076
- }
1077
- labels(first: ${PROJECT_ITEM_LABELS_FIRST}) {
1078
- nodes {
1079
- name
1080
- }
1081
- }
1082
- assignees(first: ${PROJECT_ITEM_ASSIGNEES_FIRST}) {
1083
- nodes {
1084
- login
1085
- }
1086
- }
1087
- repository {
1088
- nameWithOwner
1089
- isArchived
1090
- }
1091
- projectItems(first: 10) {
1092
- nodes {
1093
- id
1094
- project {
1095
- id
1096
- }
1097
- fieldValues(first: 10) {
1098
- nodes {
1099
- ... on ProjectV2ItemFieldTextValue {
1100
- text
1101
- field {
1102
- ... on ProjectV2Field {
1103
- name
1104
- }
1105
- }
1106
- }
1107
- ... on ProjectV2ItemFieldNumberValue {
1108
- number
1109
- id
1110
- field {
1111
- ... on ProjectV2Field {
1112
- name
1113
- }
1114
- }
1115
- }
1116
- ... on ProjectV2ItemFieldDateValue {
1117
- date
1118
- field {
1119
- ... on ProjectV2Field {
1120
- name
1121
- }
1122
- }
1123
- }
1124
- ... on ProjectV2ItemFieldSingleSelectValue {
1125
- name
1126
- field {
1127
- ... on ProjectV2SingleSelectField {
1128
- name
1129
- }
1130
- }
1131
- }
1132
- ... on ProjectV2ItemFieldIterationValue {
1133
- title
1134
- field {
1135
- ... on ProjectV2Field {
1136
- name
1137
- }
1138
- }
1139
- }
1140
- }
1141
- }
1142
- }
1143
- }
1144
- }
1145
- pullRequest(number: $number) {
1146
- number
1147
- title
1148
- state
1149
- url
1150
- body
1151
- createdAt
1152
- updatedAt
1153
- author {
1154
- login
1155
- }
1156
- labels(first: ${PROJECT_ITEM_LABELS_FIRST}) {
1157
- nodes {
1158
- name
1159
- }
1160
- }
1161
- assignees(first: ${PROJECT_ITEM_ASSIGNEES_FIRST}) {
1162
- nodes {
1163
- login
1164
- }
1165
- }
1166
- repository {
1167
- nameWithOwner
1168
- isArchived
1169
- }
1170
- closingIssuesReferences(first: 50) {
1171
- nodes {
1172
- url
1173
- }
1174
- }
1175
- projectItems(first: 10) {
1176
- nodes {
1177
- id
1178
- project {
1179
- id
1180
- }
1181
- fieldValues(first: 10) {
1182
- nodes {
1183
- ... on ProjectV2ItemFieldTextValue {
1184
- text
1185
- field {
1186
- ... on ProjectV2Field {
1187
- name
1188
- }
1189
- }
1190
- }
1191
- ... on ProjectV2ItemFieldNumberValue {
1192
- number
1193
- id
1194
- field {
1195
- ... on ProjectV2Field {
1196
- name
1197
- }
1198
- }
1199
- }
1200
- ... on ProjectV2ItemFieldDateValue {
1201
- date
1202
- field {
1203
- ... on ProjectV2Field {
1204
- name
1205
- }
1206
- }
1207
- }
1208
- ... on ProjectV2ItemFieldSingleSelectValue {
1209
- name
1210
- field {
1211
- ... on ProjectV2SingleSelectField {
1212
- name
1213
- }
1214
- }
1215
- }
1216
- ... on ProjectV2ItemFieldIterationValue {
1217
- title
1218
- field {
1219
- ... on ProjectV2Field {
1220
- name
1221
- }
1222
- }
1223
- }
1224
- }
1225
- }
1226
- }
1227
- }
1228
- }
1229
- }
1230
- }`;
1231
- const graphqlQuery = {
1232
- query: graphql,
1233
- variables: {
1234
- owner: owner,
1235
- repo: repo,
1236
- number: issueNumber,
1237
- },
1238
- };
1239
- type ContentNode = {
1240
- number: number;
1241
- title: string;
1242
- state: string;
1243
- stateReason?: string | null;
1244
- url: string;
1245
- body: string;
1246
- createdAt: string;
1247
- updatedAt: string;
1248
- author: { login: string } | null;
1249
- labels: { nodes: { name: string }[] };
1250
- assignees: { nodes: { login: string }[] };
1251
- repository: { nameWithOwner: string; isArchived: boolean };
1252
- closingIssuesReferences?: { nodes: { url: string }[] };
1253
- projectItems: {
1254
- nodes: {
1255
- id: string;
1256
- project: { id: string } | null;
1257
- fieldValues: {
1258
- nodes: {
1259
- text: string;
1260
- number: number;
1261
- date: string;
1262
- name: string;
1263
- field: {
1264
- name: string;
1265
- };
1266
- }[];
1267
- };
1268
- }[];
1269
- };
1270
- };
1271
- const response = await postGithubGraphqlJson<{
1272
- data?: {
1273
- repository: {
1274
- issue: ContentNode | null;
1275
- pullRequest: ContentNode | null;
1276
- } | null;
1277
- };
1278
- errors?: { message: string }[];
1279
- }>({
1280
- ghToken: this.ghToken,
1281
- query: graphqlQuery.query,
1282
- variables: graphqlQuery.variables,
1283
- });
1284
- if (!response.data) {
1285
- const errorMessages = response.errors
1286
- ? response.errors.map((e) => e.message).join('; ')
1287
- : 'no data field in response';
1288
- throw new Error(
1289
- `GitHub GraphQL API returned no data for fetchProjectItemByUrl: ${errorMessages}`,
1290
- );
1291
- }
1292
- const data = response.data;
1293
- if (!data.repository) {
1294
- return null;
1295
- }
1296
- const content = data.repository.issue ?? data.repository.pullRequest;
1297
- if (!content) {
1298
- return null;
1299
- }
1300
- const projectItems = content.projectItems.nodes;
1301
- const item = projectId
1302
- ? projectItems.find((node) => node.project?.id === projectId)
1303
- : projectItems[0];
1304
- if (!item) {
1305
- console.warn(
1306
- projectId
1307
- ? `No project item found for issue ${issueUrl} on project ${projectId}`
1308
- : `No project item found for issue ${issueUrl}`,
1309
- );
1310
- return null;
1311
- }
1312
- return {
1313
- id: item.id,
1314
- nameWithOwner: content.repository.nameWithOwner,
1315
- number: content.number,
1316
- title: content.title,
1317
- state: this.convertStrToState(content.state),
1318
- url: content.url,
1319
- body: content.body,
1320
- labels: content.labels?.nodes?.map((l) => l.name) || [],
1321
- assignees: content.assignees?.nodes?.map((a) => a.login) || [],
1322
- createdAt: content.createdAt || new Date().toISOString(),
1323
- updatedAt:
1324
- content.updatedAt || content.createdAt || new Date().toISOString(),
1325
- author: content.author?.login || '',
1326
- closingIssueReferenceUrls:
1327
- content.closingIssuesReferences?.nodes
1328
- ?.map((node) => node.url)
1329
- .filter((url) => url.length > 0) || [],
1330
- isRepoArchived: content.repository.isArchived ?? false,
1331
- stateReason: toStateReason(content.stateReason),
1332
- customFields: item.fieldValues.nodes
1333
- .filter((field) => !!field.field)
1334
- .map((field) => {
1335
- return {
1336
- name: field.field.name,
1337
- value:
1338
- field.name ??
1339
- field.text ??
1340
- field.number?.toString() ??
1341
- field.date ??
1342
- null,
1343
- };
1344
- }),
1345
- };
1346
- };
1347
- convertStrToState = (state: string): 'OPEN' | 'CLOSED' | 'MERGED' => {
1348
- return state === 'MERGED'
1349
- ? 'MERGED'
1350
- : state === 'CLOSED'
1351
- ? 'CLOSED'
1352
- : state === 'OPEN'
1353
- ? 'OPEN'
1354
- : 'OPEN';
1355
- };
1356
-
1357
- updateProjectField = async (
1358
- projectId: string,
1359
- fieldId: string,
1360
- itemId: string,
1361
- value:
1362
- | { text: string }
1363
- | { number: number }
1364
- | { date: string }
1365
- | { singleSelectOptionId: string },
1366
- ): Promise<void> => {
1367
- const graphqlQuery = {
1368
- query: `mutation {
1369
- updateProjectV2ItemFieldValue(input: {
1370
- projectId: "${projectId}"
1371
- fieldId: "${fieldId}"
1372
- itemId: "${itemId}"
1373
- value: ${JSON.stringify(value).replace(/"([^"]+)":/g, '$1:')},
1374
- }) {
1375
- clientMutationId
1376
- }
1377
- }`,
1378
- };
1379
-
1380
- const res = await postGithubGraphqlJson<{
1381
- data: {
1382
- updateProjectV2ItemFieldValue: {
1383
- clientMutationId: string;
1384
- };
1385
- };
1386
- errors: { message: string }[];
1387
- }>({
1388
- ghToken: this.ghToken,
1389
- query: graphqlQuery.query,
1390
- });
1391
- if (res.errors) {
1392
- throw new Error(res.errors.map((e) => e.message).join('\n'));
1393
- }
1394
- };
1395
-
1396
- clearProjectField = async (
1397
- projectId: string,
1398
- fieldId: string,
1399
- itemId: string,
1400
- ): Promise<void> => {
1401
- const graphqlQuery = {
1402
- query: `mutation {
1403
- clearProjectV2ItemFieldValue(input: {
1404
- projectId: "${projectId}"
1405
- fieldId: "${fieldId}"
1406
- itemId: "${itemId}"
1407
- }) {
1408
- clientMutationId
1409
- }
1410
- }`,
1411
- };
1412
-
1413
- const res = await postGithubGraphqlJson<{
1414
- data: {
1415
- clearProjectV2ItemFieldValue: {
1416
- clientMutationId: string;
1417
- };
1418
- };
1419
- errors: { message: string }[];
1420
- }>({
1421
- ghToken: this.ghToken,
1422
- query: graphqlQuery.query,
1423
- });
1424
- if (res.errors) {
1425
- throw new Error(res.errors.map((e) => e.message).join('\n'));
1426
- }
1427
- };
1428
- updateProjectTextField = async (
1429
- project: Project['id'],
1430
- fieldId: string,
1431
- issue: Issue['itemId'],
1432
- text: string,
1433
- ): Promise<void> => {
1434
- await this.updateProjectField(project, fieldId, issue, { text });
1435
- };
1436
-
1437
- removeItemFromProject = async (
1438
- projectId: string,
1439
- itemId: string,
1440
- ): Promise<void> => {
1441
- const graphqlQuery = {
1442
- query: `mutation RemoveProjectV2Item($projectId: ID!, $itemId: ID!) {
1443
- deleteProjectV2Item(input: { projectId: $projectId, itemId: $itemId }) {
1444
- clientMutationId
1445
- }
1446
- }`,
1447
- variables: {
1448
- projectId,
1449
- itemId,
1450
- },
1451
- };
1452
-
1453
- const res = await postGithubGraphqlJson<{
1454
- data: {
1455
- deleteProjectV2Item: {
1456
- clientMutationId: string;
1457
- };
1458
- };
1459
- errors?: { message: string }[];
1460
- }>({
1461
- ghToken: this.ghToken,
1462
- query: graphqlQuery.query,
1463
- variables: graphqlQuery.variables,
1464
- });
1465
-
1466
- if (res.errors) {
1467
- throw new Error(res.errors.map((e) => e.message).join('\n'));
1468
- }
1469
- };
1470
-
1471
- removeItemFromProjectByIssueUrl = async (
1472
- issueUrl: string,
1473
- projectId: string,
1474
- ): Promise<void> => {
1475
- const { owner, repo, issueNumber } = this.extractIssueFromUrl(issueUrl);
1476
- const itemId = await this.fetchItemId(projectId, owner, repo, issueNumber);
1477
- if (!itemId) {
1478
- throw new Error(
1479
- `Issue not found in project. URL: ${issueUrl}, Project ID: ${projectId}`,
1480
- );
1481
- }
1482
- await this.removeItemFromProject(projectId, itemId);
1483
- };
1484
-
1485
- addIssueToProject = async (
1486
- projectId: string,
1487
- issueUrl: string,
1488
- ): Promise<string> => {
1489
- const { owner, repo, issueNumber } = this.extractIssueFromUrl(issueUrl);
1490
- const nodeIdQuery = {
1491
- query: `query GetContentNodeId($owner: String!, $repo: String!, $number: Int!) {
1492
- repository(owner: $owner, name: $repo) {
1493
- issueOrPullRequest(number: $number) {
1494
- ... on Issue {
1495
- id
1496
- }
1497
- ... on PullRequest {
1498
- id
1499
- }
1500
- }
1501
- }
1502
- }`,
1503
- variables: { owner, repo, number: issueNumber },
1504
- };
1505
- const nodeIdRes = await postGithubGraphqlJson<{
1506
- data: {
1507
- repository: {
1508
- issueOrPullRequest: {
1509
- id: string;
1510
- } | null;
1511
- };
1512
- };
1513
- errors?: { message: string }[];
1514
- }>({
1515
- ghToken: this.ghToken,
1516
- query: nodeIdQuery.query,
1517
- variables: nodeIdQuery.variables,
1518
- });
1519
- if (nodeIdRes.errors) {
1520
- throw new Error(nodeIdRes.errors.map((e) => e.message).join('\n'));
1521
- }
1522
- const contentId = nodeIdRes.data.repository.issueOrPullRequest?.id;
1523
- if (!contentId) {
1524
- throw new Error(`Content not found for url ${issueUrl}`);
1525
- }
1526
-
1527
- const addQuery = {
1528
- query: `mutation AddIssueToProject($projectId: ID!, $contentId: ID!) {
1529
- addProjectV2ItemById(input: { projectId: $projectId, contentId: $contentId }) {
1530
- item { id }
1531
- }
1532
- }`,
1533
- variables: { projectId, contentId },
1534
- };
1535
- const addRes = await postGithubGraphqlJson<{
1536
- data: {
1537
- addProjectV2ItemById: {
1538
- item: { id: string };
1539
- };
1540
- };
1541
- errors?: { message: string }[];
1542
- }>({
1543
- ghToken: this.ghToken,
1544
- query: addQuery.query,
1545
- variables: addQuery.variables,
1546
- });
1547
- if (addRes.errors) {
1548
- throw new Error(addRes.errors.map((e) => e.message).join('\n'));
1549
- }
1550
- return addRes.data.addProjectV2ItemById.item.id;
1551
- };
1552
- }