github-issue-tower-defence-management 2.19.0 → 2.19.2

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 (783) hide show
  1. package/README.md +1 -1
  2. package/bin/adapter/entry-points/cli/index.js +0 -0
  3. package/bin/domain/usecases/OauthTokenSelectUseCase.js +1 -1
  4. package/package.json +5 -1
  5. package/types/domain/usecases/OauthTokenSelectUseCase.d.ts +1 -1
  6. package/.env.example +0 -7
  7. package/.gitattributes +0 -2
  8. package/.github/CODEOWNERS +0 -6
  9. package/.github/copilot-instructions.md +0 -6
  10. package/.github/dependabot.yml +0 -19
  11. package/.github/instructions/code-review.instructions.md +0 -50
  12. package/.github/workflows/api-created_issue_pr.yml +0 -97
  13. package/.github/workflows/ci-failure-issue-creator.yml +0 -48
  14. package/.github/workflows/close-manual-prs.yml +0 -80
  15. package/.github/workflows/codeql.yml +0 -107
  16. package/.github/workflows/commit-lint.yml +0 -85
  17. package/.github/workflows/configs/commitlint.config.cjs +0 -32
  18. package/.github/workflows/configs/commitlint.config.js +0 -32
  19. package/.github/workflows/console-ui.yml +0 -68
  20. package/.github/workflows/create-pr.yml +0 -116
  21. package/.github/workflows/empty-format-test-job.yml +0 -34
  22. package/.github/workflows/format.yml +0 -28
  23. package/.github/workflows/publish.yml +0 -111
  24. package/.github/workflows/secret-scan.yml +0 -51
  25. package/.github/workflows/test.yml +0 -58
  26. package/.github/workflows/umino-project.yml +0 -207
  27. package/.gitleaks.toml +0 -22
  28. package/.prettierignore +0 -31
  29. package/.prettierrc +0 -5
  30. package/CHANGELOG.md +0 -4155
  31. package/CONTRIBUTING.md +0 -60
  32. package/bin/adapter/entry-points/handlers/resolveUnansweredOwnerCalls.js +0 -12
  33. package/bin/adapter/entry-points/handlers/resolveUnansweredOwnerCalls.js.map +0 -1
  34. package/bin/adapter/repositories/FileSystemSilentSessionNotifiedStateRepository.js +0 -125
  35. package/bin/adapter/repositories/FileSystemSilentSessionNotifiedStateRepository.js.map +0 -1
  36. package/bin/adapter/repositories/issue/issueTimelineUtils.js +0 -38
  37. package/bin/adapter/repositories/issue/issueTimelineUtils.js.map +0 -1
  38. package/bin/domain/entities/UnansweredOwnerCall.js +0 -3
  39. package/bin/domain/entities/UnansweredOwnerCall.js.map +0 -1
  40. package/bin/domain/entities/WorkingTime.js +0 -3
  41. package/bin/domain/entities/WorkingTime.js.map +0 -1
  42. package/bin/domain/usecases/ChangeStatusLongInReviewIssueUseCase.js +0 -37
  43. package/bin/domain/usecases/ChangeStatusLongInReviewIssueUseCase.js.map +0 -1
  44. package/bin/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.js +0 -118
  45. package/bin/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.js.map +0 -1
  46. package/bin/domain/usecases/GenerateWorkingTimeReportUseCase.js +0 -180
  47. package/bin/domain/usecases/GenerateWorkingTimeReportUseCase.js.map +0 -1
  48. package/bin/domain/usecases/TriagerApprovalDispatchUseCase.js +0 -160
  49. package/bin/domain/usecases/TriagerApprovalDispatchUseCase.js.map +0 -1
  50. package/bin/domain/usecases/adapter-interfaces/SilentSessionNotifiedStateRepository.js +0 -3
  51. package/bin/domain/usecases/adapter-interfaces/SilentSessionNotifiedStateRepository.js.map +0 -1
  52. package/bin/domain/usecases/awaitingOwnerApprovalMessage.js +0 -7
  53. package/bin/domain/usecases/awaitingOwnerApprovalMessage.js.map +0 -1
  54. package/bin/domain/usecases/findLastAgentDeclaringReport.js +0 -12
  55. package/bin/domain/usecases/findLastAgentDeclaringReport.js.map +0 -1
  56. package/bin/domain/usecases/isPullRequestDeclaredUnnecessary.js +0 -25
  57. package/bin/domain/usecases/isPullRequestDeclaredUnnecessary.js.map +0 -1
  58. package/bin/domain/usecases/isWaitingForOwnerApproval.js +0 -16
  59. package/bin/domain/usecases/isWaitingForOwnerApproval.js.map +0 -1
  60. package/bin/domain/usecases/returnedToAwaitingWorkspaceMessage.js +0 -7
  61. package/bin/domain/usecases/returnedToAwaitingWorkspaceMessage.js.map +0 -1
  62. package/commitlint.config.js +0 -6
  63. package/eslint.config.mjs +0 -76
  64. package/jest.config.js +0 -84
  65. package/jest.setup.js +0 -1
  66. package/lib/buffer-equal-constant-time-compat/index.js +0 -17
  67. package/lib/buffer-equal-constant-time-compat/index.test.js +0 -54
  68. package/lib/buffer-equal-constant-time-compat/package.json +0 -5
  69. package/lib/typescript-compat/bin/tsc +0 -2
  70. package/lib/typescript-compat/bin/tsserver +0 -2
  71. package/lib/typescript-compat/lib/typescript.js +0 -1
  72. package/lib/typescript-compat/package.json +0 -13
  73. package/renovate.json +0 -46
  74. package/scripts/copyConsoleUiDist.mjs +0 -35
  75. package/scripts/defaultBranchTipVerify.sh +0 -23
  76. package/scripts/testWorkflowRunVerify.sh +0 -47
  77. package/scripts/verifyConsoleUiDist.mjs +0 -96
  78. package/src/adapter/ci/consoleUiWorkflowTimeout.test.ts +0 -61
  79. package/src/adapter/ci/publishTestWorkflowGate.test.ts +0 -653
  80. package/src/adapter/ci/workflowRunCancellation.test.ts +0 -72
  81. package/src/adapter/entry-points/cli/fleetConfig.test.ts +0 -553
  82. package/src/adapter/entry-points/cli/fleetConfig.ts +0 -266
  83. package/src/adapter/entry-points/cli/index.test.ts +0 -2837
  84. package/src/adapter/entry-points/cli/index.ts +0 -1488
  85. package/src/adapter/entry-points/cli/projectConfig.test.ts +0 -342
  86. package/src/adapter/entry-points/cli/projectConfig.ts +0 -500
  87. package/src/adapter/entry-points/console/consoleAirplaneSnapshotApi.test.ts +0 -658
  88. package/src/adapter/entry-points/console/consoleAirplaneSnapshotApi.ts +0 -482
  89. package/src/adapter/entry-points/console/consoleDataDelivery.test.ts +0 -222
  90. package/src/adapter/entry-points/console/consoleDataDelivery.ts +0 -134
  91. package/src/adapter/entry-points/console/consoleDoneStore.test.ts +0 -169
  92. package/src/adapter/entry-points/console/consoleDoneStore.ts +0 -139
  93. package/src/adapter/entry-points/console/consoleGithubTokenResolver.test.ts +0 -275
  94. package/src/adapter/entry-points/console/consoleGithubTokenResolver.ts +0 -113
  95. package/src/adapter/entry-points/console/consoleImageProxy.test.ts +0 -140
  96. package/src/adapter/entry-points/console/consoleImageProxy.ts +0 -111
  97. package/src/adapter/entry-points/console/consoleItemUrlLookup.test.ts +0 -63
  98. package/src/adapter/entry-points/console/consoleItemUrlLookup.ts +0 -66
  99. package/src/adapter/entry-points/console/consoleOperationApi.test.ts +0 -2523
  100. package/src/adapter/entry-points/console/consoleOperationApi.ts +0 -936
  101. package/src/adapter/entry-points/console/consoleProjectResolver.test.ts +0 -246
  102. package/src/adapter/entry-points/console/consoleProjectResolver.ts +0 -111
  103. package/src/adapter/entry-points/console/consoleReadApi.test.ts +0 -714
  104. package/src/adapter/entry-points/console/consoleReadApi.ts +0 -361
  105. package/src/adapter/entry-points/console/consoleTabNames.test.ts +0 -52
  106. package/src/adapter/entry-points/console/consoleTabNames.ts +0 -37
  107. package/src/adapter/entry-points/console/consoleUiDistSync.test.ts +0 -66
  108. package/src/adapter/entry-points/console/dashboardComposeService.test.ts +0 -595
  109. package/src/adapter/entry-points/console/dashboardComposeService.ts +0 -256
  110. package/src/adapter/entry-points/console/dashboardEmitterComposerKey.test.ts +0 -180
  111. package/src/adapter/entry-points/console/ensureConsoleRunning.test.ts +0 -115
  112. package/src/adapter/entry-points/console/ensureConsoleRunning.ts +0 -64
  113. package/src/adapter/entry-points/console/ui/.storybook/main.ts +0 -12
  114. package/src/adapter/entry-points/console/ui/.storybook/preview.ts +0 -15
  115. package/src/adapter/entry-points/console/ui/biome.json +0 -53
  116. package/src/adapter/entry-points/console/ui/components.json +0 -20
  117. package/src/adapter/entry-points/console/ui/e2e/consoleScenario.spec.ts +0 -725
  118. package/src/adapter/entry-points/console/ui/e2e/consoleTestHarness.ts +0 -831
  119. package/src/adapter/entry-points/console/ui/e2e/playwright.config.ts +0 -30
  120. package/src/adapter/entry-points/console/ui/e2e/tsconfig.json +0 -18
  121. package/src/adapter/entry-points/console/ui/index.html +0 -12
  122. package/src/adapter/entry-points/console/ui/jest-globals.cjs +0 -26
  123. package/src/adapter/entry-points/console/ui/jest.setup.ts +0 -1
  124. package/src/adapter/entry-points/console/ui/jest.styleMock.js +0 -1
  125. package/src/adapter/entry-points/console/ui/public/sw.js +0 -60
  126. package/src/adapter/entry-points/console/ui/src/components/ui/badge.stories.tsx +0 -35
  127. package/src/adapter/entry-points/console/ui/src/components/ui/badge.tsx +0 -28
  128. package/src/adapter/entry-points/console/ui/src/components/ui/button.stories.tsx +0 -34
  129. package/src/adapter/entry-points/console/ui/src/components/ui/button.tsx +0 -50
  130. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleCopyCodeButton.stories.tsx +0 -28
  131. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleCopyCodeButton.test.tsx +0 -65
  132. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleCopyCodeButton.tsx +0 -19
  133. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleMarkdownContent.stories.tsx +0 -61
  134. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleMarkdownContent.test.tsx +0 -199
  135. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleMarkdownContent.tsx +0 -166
  136. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleMermaidDiagram.stories.tsx +0 -22
  137. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleMermaidDiagram.test.tsx +0 -74
  138. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleMermaidDiagram.tsx +0 -84
  139. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleMermaidDiagramModalScreen.stories.tsx +0 -27
  140. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleMermaidDiagramModalScreen.test.tsx +0 -85
  141. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleMermaidDiagramModalScreen.tsx +0 -97
  142. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleReferenceLink.stories.tsx +0 -76
  143. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleReferenceLink.test.tsx +0 -56
  144. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleReferenceLink.tsx +0 -39
  145. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleChangedFileList.stories.tsx +0 -32
  146. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleChangedFileList.test.tsx +0 -105
  147. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleChangedFileList.tsx +0 -157
  148. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCommentComposer.stories.tsx +0 -68
  149. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCommentComposer.test.tsx +0 -612
  150. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCommentComposer.tsx +0 -276
  151. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCommentList.stories.tsx +0 -33
  152. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCommentList.test.tsx +0 -57
  153. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCommentList.tsx +0 -76
  154. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCommitList.stories.tsx +0 -25
  155. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCommitList.test.tsx +0 -55
  156. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCommitList.tsx +0 -49
  157. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCopyUrlButton.stories.tsx +0 -24
  158. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCopyUrlButton.test.tsx +0 -63
  159. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCopyUrlButton.tsx +0 -19
  160. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleFetchFailureAlert.stories.tsx +0 -33
  161. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleFetchFailureAlert.test.tsx +0 -62
  162. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleFetchFailureAlert.tsx +0 -59
  163. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleFileDiff.stories.tsx +0 -38
  164. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleFileDiff.test.tsx +0 -151
  165. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleFileDiff.tsx +0 -245
  166. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleItemDetail.stories.tsx +0 -514
  167. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleItemDetail.test.tsx +0 -727
  168. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleItemDetail.tsx +0 -387
  169. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleItemIcon.stories.tsx +0 -82
  170. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleItemIcon.test.tsx +0 -52
  171. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleItemIcon.tsx +0 -32
  172. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsolePullRequestDetail.stories.tsx +0 -48
  173. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsolePullRequestDetail.test.tsx +0 -235
  174. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsolePullRequestDetail.tsx +0 -145
  175. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsolePullRequestMergeableChip.stories.tsx +0 -29
  176. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsolePullRequestMergeableChip.test.tsx +0 -30
  177. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsolePullRequestMergeableChip.tsx +0 -50
  178. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsolePullRequestStatusBadges.stories.tsx +0 -38
  179. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsolePullRequestStatusBadges.test.tsx +0 -54
  180. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsolePullRequestStatusBadges.tsx +0 -60
  181. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleAirplaneModeButton.stories.tsx +0 -56
  182. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleAirplaneModeButton.test.tsx +0 -111
  183. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleAirplaneModeButton.tsx +0 -92
  184. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsolePanel.stories.tsx +0 -51
  185. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsolePanel.test.tsx +0 -59
  186. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsolePanel.tsx +0 -39
  187. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTabList.stories.tsx +0 -207
  188. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTabList.test.tsx +0 -332
  189. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTabList.tsx +0 -211
  190. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTimerSettingsModalDialog.stories.tsx +0 -49
  191. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTimerSettingsModalDialog.test.tsx +0 -157
  192. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTimerSettingsModalDialog.tsx +0 -118
  193. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleCopyStoryNameButton.stories.tsx +0 -23
  194. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleCopyStoryNameButton.test.tsx +0 -40
  195. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleCopyStoryNameButton.tsx +0 -17
  196. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleItemList.stories.tsx +0 -101
  197. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleItemList.test.tsx +0 -102
  198. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleItemList.tsx +0 -75
  199. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleItemSummary.stories.tsx +0 -40
  200. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleItemSummary.test.tsx +0 -213
  201. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleItemSummary.tsx +0 -115
  202. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleQueuedItemRow.stories.tsx +0 -50
  203. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleQueuedItemRow.test.tsx +0 -98
  204. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleQueuedItemRow.tsx +0 -66
  205. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleQueuedList.stories.tsx +0 -69
  206. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleQueuedList.test.tsx +0 -101
  207. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleQueuedList.tsx +0 -75
  208. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleStoryList.stories.tsx +0 -137
  209. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleStoryList.test.tsx +0 -554
  210. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleStoryList.tsx +0 -400
  211. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleStoryReorderPanel.stories.tsx +0 -30
  212. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleStoryReorderPanel.test.tsx +0 -111
  213. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleStoryReorderPanel.tsx +0 -91
  214. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleStorySummary.stories.tsx +0 -27
  215. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleStorySummary.test.tsx +0 -24
  216. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleStorySummary.tsx +0 -28
  217. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleCloseActions.stories.tsx +0 -14
  218. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleCloseActions.test.tsx +0 -21
  219. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleCloseActions.tsx +0 -26
  220. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleDangerousActions.stories.tsx +0 -14
  221. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleDangerousActions.test.tsx +0 -40
  222. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleDangerousActions.tsx +0 -37
  223. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleErrorToast.stories.tsx +0 -33
  224. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleNextActionDateActions.stories.tsx +0 -20
  225. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleNextActionDateActions.test.tsx +0 -48
  226. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleNextActionDateActions.tsx +0 -42
  227. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleOfflinePendingActionsPanel.stories.tsx +0 -115
  228. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleOfflinePendingActionsPanel.test.tsx +0 -262
  229. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleOfflinePendingActionsPanel.tsx +0 -123
  230. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleOperationMenu.stories.tsx +0 -65
  231. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleOperationMenu.test.tsx +0 -159
  232. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleOperationMenu.tsx +0 -55
  233. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsolePullRequestReviewActions.stories.tsx +0 -20
  234. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsolePullRequestReviewActions.test.tsx +0 -93
  235. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsolePullRequestReviewActions.tsx +0 -45
  236. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleStatusActions.stories.tsx +0 -17
  237. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleStatusActions.test.tsx +0 -49
  238. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleStatusActions.tsx +0 -66
  239. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleUndoToast.stories.tsx +0 -47
  240. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleUndoToast.test.tsx +0 -95
  241. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleUndoToast.tsx +0 -62
  242. package/src/adapter/entry-points/console/ui/src/features/console/components/shared/ConsoleClipboardCopyButton.stories.tsx +0 -32
  243. package/src/adapter/entry-points/console/ui/src/features/console/components/shared/ConsoleClipboardCopyButton.test.tsx +0 -101
  244. package/src/adapter/entry-points/console/ui/src/features/console/components/shared/ConsoleClipboardCopyButton.tsx +0 -80
  245. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useAirplaneMode.test.ts +0 -304
  246. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useAirplaneMode.ts +0 -167
  247. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleActionQueue.test.ts +0 -498
  248. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleActionQueue.ts +0 -277
  249. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleCaches.test.ts +0 -99
  250. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleCaches.ts +0 -90
  251. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleDetailPrefetch.test.ts +0 -110
  252. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleDetailPrefetch.ts +0 -83
  253. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleFeaturesConfig.test.ts +0 -51
  254. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleFeaturesConfig.ts +0 -39
  255. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleItemDetailData.test.ts +0 -229
  256. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleItemDetailData.ts +0 -194
  257. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleNavigation.test.ts +0 -151
  258. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleNavigation.ts +0 -128
  259. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleOperations.test.ts +0 -629
  260. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleOperations.ts +0 -417
  261. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleOverlay.test.ts +0 -40
  262. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleOverlay.ts +0 -71
  263. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsolePjcode.test.ts +0 -24
  264. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsolePjcode.ts +0 -17
  265. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleProjectList.test.ts +0 -97
  266. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleProjectList.ts +0 -44
  267. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleProjectTimer.test.ts +0 -59
  268. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleProjectTimer.ts +0 -26
  269. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleReferenceLink.test.ts +0 -48
  270. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleReferenceLink.ts +0 -39
  271. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleResource.test.ts +0 -41
  272. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleResource.ts +0 -57
  273. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleSwipeNavigation.test.ts +0 -115
  274. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleSwipeNavigation.ts +0 -115
  275. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleTabData.test.ts +0 -546
  276. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleTabData.ts +0 -278
  277. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleTimerSettings.test.ts +0 -110
  278. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleTimerSettings.ts +0 -70
  279. package/src/adapter/entry-points/console/ui/src/features/console/lib/airplaneSnapshot.test.ts +0 -387
  280. package/src/adapter/entry-points/console/ui/src/features/console/lib/airplaneSnapshot.ts +0 -407
  281. package/src/adapter/entry-points/console/ui/src/features/console/lib/consoleApi.test.ts +0 -446
  282. package/src/adapter/entry-points/console/ui/src/features/console/lib/consoleApi.ts +0 -533
  283. package/src/adapter/entry-points/console/ui/src/features/console/lib/imageProxy.test.ts +0 -78
  284. package/src/adapter/entry-points/console/ui/src/features/console/lib/imageProxy.ts +0 -34
  285. package/src/adapter/entry-points/console/ui/src/features/console/lib/markdown.test.ts +0 -252
  286. package/src/adapter/entry-points/console/ui/src/features/console/lib/markdown.ts +0 -207
  287. package/src/adapter/entry-points/console/ui/src/features/console/lib/mermaidLoader.test.ts +0 -27
  288. package/src/adapter/entry-points/console/ui/src/features/console/lib/mermaidLoader.ts +0 -71
  289. package/src/adapter/entry-points/console/ui/src/features/console/lib/mermaidZoom.test.ts +0 -88
  290. package/src/adapter/entry-points/console/ui/src/features/console/lib/mermaidZoom.ts +0 -34
  291. package/src/adapter/entry-points/console/ui/src/features/console/lib/navigation.ts +0 -7
  292. package/src/adapter/entry-points/console/ui/src/features/console/lib/resourceCache.test.ts +0 -104
  293. package/src/adapter/entry-points/console/ui/src/features/console/lib/resourceCache.ts +0 -79
  294. package/src/adapter/entry-points/console/ui/src/features/console/logic/actionToast.test.ts +0 -200
  295. package/src/adapter/entry-points/console/ui/src/features/console/logic/actionToast.ts +0 -122
  296. package/src/adapter/entry-points/console/ui/src/features/console/logic/clipboard.test.ts +0 -90
  297. package/src/adapter/entry-points/console/ui/src/features/console/logic/clipboard.ts +0 -37
  298. package/src/adapter/entry-points/console/ui/src/features/console/logic/colors.test.ts +0 -34
  299. package/src/adapter/entry-points/console/ui/src/features/console/logic/colors.ts +0 -85
  300. package/src/adapter/entry-points/console/ui/src/features/console/logic/diff.test.ts +0 -81
  301. package/src/adapter/entry-points/console/ui/src/features/console/logic/diff.ts +0 -61
  302. package/src/adapter/entry-points/console/ui/src/features/console/logic/fileStatus.test.ts +0 -35
  303. package/src/adapter/entry-points/console/ui/src/features/console/logic/fileStatus.ts +0 -21
  304. package/src/adapter/entry-points/console/ui/src/features/console/logic/fileTree.test.ts +0 -96
  305. package/src/adapter/entry-points/console/ui/src/features/console/logic/fileTree.ts +0 -93
  306. package/src/adapter/entry-points/console/ui/src/features/console/logic/grouping.test.ts +0 -229
  307. package/src/adapter/entry-points/console/ui/src/features/console/logic/grouping.ts +0 -106
  308. package/src/adapter/entry-points/console/ui/src/features/console/logic/imageFile.test.ts +0 -18
  309. package/src/adapter/entry-points/console/ui/src/features/console/logic/imageFile.ts +0 -16
  310. package/src/adapter/entry-points/console/ui/src/features/console/logic/itemIcons.test.ts +0 -97
  311. package/src/adapter/entry-points/console/ui/src/features/console/logic/itemIcons.ts +0 -95
  312. package/src/adapter/entry-points/console/ui/src/features/console/logic/navigation.test.ts +0 -53
  313. package/src/adapter/entry-points/console/ui/src/features/console/logic/navigation.ts +0 -33
  314. package/src/adapter/entry-points/console/ui/src/features/console/logic/operations.test.ts +0 -72
  315. package/src/adapter/entry-points/console/ui/src/features/console/logic/operations.ts +0 -61
  316. package/src/adapter/entry-points/console/ui/src/features/console/logic/overlay.test.ts +0 -325
  317. package/src/adapter/entry-points/console/ui/src/features/console/logic/overlay.ts +0 -94
  318. package/src/adapter/entry-points/console/ui/src/features/console/logic/postedComments.test.ts +0 -44
  319. package/src/adapter/entry-points/console/ui/src/features/console/logic/postedComments.ts +0 -17
  320. package/src/adapter/entry-points/console/ui/src/features/console/logic/references.test.ts +0 -103
  321. package/src/adapter/entry-points/console/ui/src/features/console/logic/references.ts +0 -64
  322. package/src/adapter/entry-points/console/ui/src/features/console/logic/relativeTime.test.ts +0 -74
  323. package/src/adapter/entry-points/console/ui/src/features/console/logic/relativeTime.ts +0 -53
  324. package/src/adapter/entry-points/console/ui/src/features/console/logic/swipe.test.ts +0 -34
  325. package/src/adapter/entry-points/console/ui/src/features/console/logic/swipe.ts +0 -28
  326. package/src/adapter/entry-points/console/ui/src/features/console/logic/tabAdvance.test.ts +0 -89
  327. package/src/adapter/entry-points/console/ui/src/features/console/logic/tabAdvance.ts +0 -30
  328. package/src/adapter/entry-points/console/ui/src/features/console/logic/timerSettings.test.ts +0 -61
  329. package/src/adapter/entry-points/console/ui/src/features/console/logic/timerSettings.ts +0 -77
  330. package/src/adapter/entry-points/console/ui/src/features/console/logic/types.ts +0 -173
  331. package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsoleItemDetailContainer.test.tsx +0 -629
  332. package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsoleItemDetailContainer.tsx +0 -351
  333. package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsolePage.test.tsx +0 -1469
  334. package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsolePage.tsx +0 -736
  335. package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsoleReferenceLinkContainer.tsx +0 -25
  336. package/src/adapter/entry-points/console/ui/src/features/console/testing/fixtures.ts +0 -418
  337. package/src/adapter/entry-points/console/ui/src/index.css +0 -1592
  338. package/src/adapter/entry-points/console/ui/src/lib/utils.ts +0 -4
  339. package/src/adapter/entry-points/console/ui/src/main.tsx +0 -21
  340. package/src/adapter/entry-points/console/ui/src/vite-env.d.ts +0 -1
  341. package/src/adapter/entry-points/console/ui/tsconfig.json +0 -26
  342. package/src/adapter/entry-points/console/ui/vite.config.ts +0 -24
  343. package/src/adapter/entry-points/console/ui-dist/assets/index-BYDbK1Fj.js +0 -88
  344. package/src/adapter/entry-points/console/ui-dist/assets/index-KyQISRuQ.css +0 -2
  345. package/src/adapter/entry-points/console/ui-dist/index.html +0 -13
  346. package/src/adapter/entry-points/console/ui-dist/sw.js +0 -60
  347. package/src/adapter/entry-points/console/webServer.test.ts +0 -2945
  348. package/src/adapter/entry-points/console/webServer.ts +0 -940
  349. package/src/adapter/entry-points/function/getStoryObjectMap.ts +0 -3
  350. package/src/adapter/entry-points/handlers/FileSystemConsoleTabsRepository.test.ts +0 -218
  351. package/src/adapter/entry-points/handlers/FileSystemConsoleTabsRepository.ts +0 -113
  352. package/src/adapter/entry-points/handlers/GetStoryObjectMapUseCaseHandler.test.ts +0 -110
  353. package/src/adapter/entry-points/handlers/GetStoryObjectMapUseCaseHandler.ts +0 -116
  354. package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.test.ts +0 -859
  355. package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts +0 -984
  356. package/src/adapter/entry-points/handlers/InTmuxByHumanSessionTokenCountHandler.test.ts +0 -126
  357. package/src/adapter/entry-points/handlers/InTmuxByHumanSessionTokenCountHandler.ts +0 -80
  358. package/src/adapter/entry-points/handlers/LiveSessionOauthTokenSelectHandler.test.ts +0 -491
  359. package/src/adapter/entry-points/handlers/LiveSessionOauthTokenSelectHandler.ts +0 -137
  360. package/src/adapter/entry-points/handlers/OauthTokenSelectHandler.test.ts +0 -508
  361. package/src/adapter/entry-points/handlers/OauthTokenSelectHandler.ts +0 -156
  362. package/src/adapter/entry-points/handlers/consoleListsWriter.test.ts +0 -332
  363. package/src/adapter/entry-points/handlers/consoleListsWriter.ts +0 -60
  364. package/src/adapter/entry-points/handlers/dashboardRowWriter.test.ts +0 -112
  365. package/src/adapter/entry-points/handlers/dashboardRowWriter.ts +0 -51
  366. package/src/adapter/entry-points/handlers/inTmuxByHumanDataWriter.test.ts +0 -285
  367. package/src/adapter/entry-points/handlers/inTmuxByHumanDataWriter.ts +0 -109
  368. package/src/adapter/entry-points/handlers/inTmuxByHumanSessionReconciler.test.ts +0 -170
  369. package/src/adapter/entry-points/handlers/inTmuxByHumanSessionReconciler.ts +0 -40
  370. package/src/adapter/entry-points/handlers/machineStatusWriter.test.ts +0 -191
  371. package/src/adapter/entry-points/handlers/machineStatusWriter.ts +0 -110
  372. package/src/adapter/entry-points/handlers/notifySilentTmuxSessions.test.ts +0 -548
  373. package/src/adapter/entry-points/handlers/notifySilentTmuxSessions.ts +0 -192
  374. package/src/adapter/entry-points/handlers/ownerCallFileCleaner.test.ts +0 -111
  375. package/src/adapter/entry-points/handlers/ownerCallFileCleaner.ts +0 -25
  376. package/src/adapter/entry-points/handlers/ownerCallFileStore.test.ts +0 -286
  377. package/src/adapter/entry-points/handlers/ownerCallFileStore.ts +0 -145
  378. package/src/adapter/entry-points/handlers/ownerReplyMarkerDirectoryResolve.test.ts +0 -55
  379. package/src/adapter/entry-points/handlers/ownerReplyMarkerDirectoryResolve.ts +0 -36
  380. package/src/adapter/entry-points/handlers/resetDegeneratedTmuxSessions.test.ts +0 -72
  381. package/src/adapter/entry-points/handlers/resetDegeneratedTmuxSessions.ts +0 -74
  382. package/src/adapter/entry-points/handlers/rotationOrderFileWriter.test.ts +0 -181
  383. package/src/adapter/entry-points/handlers/rotationOrderFileWriter.ts +0 -18
  384. package/src/adapter/entry-points/handlers/situationFileWriter.test.ts +0 -489
  385. package/src/adapter/entry-points/handlers/situationFileWriter.ts +0 -176
  386. package/src/adapter/entry-points/handlers/staleTmuxSessionCleaner.test.ts +0 -169
  387. package/src/adapter/entry-points/handlers/staleTmuxSessionCleaner.ts +0 -32
  388. package/src/adapter/entry-points/handlers/subscriptionDisabledTokenHandler.ts +0 -41
  389. package/src/adapter/entry-points/handlers/tokenExhaustionHandover.ts +0 -81
  390. package/src/adapter/entry-points/handlers/tokenStatusWriter.test.ts +0 -266
  391. package/src/adapter/entry-points/handlers/tokenStatusWriter.ts +0 -262
  392. package/src/adapter/proxy/ClaudeMessageResponseParser.test.ts +0 -211
  393. package/src/adapter/proxy/ClaudeMessageResponseParser.ts +0 -181
  394. package/src/adapter/proxy/RateLimitCache.test.ts +0 -1077
  395. package/src/adapter/proxy/RateLimitCache.ts +0 -385
  396. package/src/adapter/proxy/TokenListLoader.test.ts +0 -183
  397. package/src/adapter/proxy/TokenListLoader.ts +0 -75
  398. package/src/adapter/proxy/ensureProxyRunning.test.ts +0 -85
  399. package/src/adapter/proxy/ensureProxyRunning.ts +0 -41
  400. package/src/adapter/proxy/proxyEntry.test.ts +0 -552
  401. package/src/adapter/proxy/proxyEntry.ts +0 -214
  402. package/src/adapter/repositories/BaseGitHubRepository.test.ts +0 -26
  403. package/src/adapter/repositories/BaseGitHubRepository.ts +0 -26
  404. package/src/adapter/repositories/BrowserGitHubProjectRepository.test.ts +0 -108
  405. package/src/adapter/repositories/BrowserGitHubProjectRepository.ts +0 -118
  406. package/src/adapter/repositories/CliGitHubGraphqlRateLimitRepository.test.ts +0 -71
  407. package/src/adapter/repositories/CliGitHubGraphqlRateLimitRepository.ts +0 -21
  408. package/src/adapter/repositories/ConfigurableSilentSessionMessageComposer.test.ts +0 -324
  409. package/src/adapter/repositories/ConfigurableSilentSessionMessageComposer.ts +0 -148
  410. package/src/adapter/repositories/FetchWebhookRepository.ts +0 -8
  411. package/src/adapter/repositories/FileHandoverStateRepository.test.ts +0 -114
  412. package/src/adapter/repositories/FileHandoverStateRepository.ts +0 -73
  413. package/src/adapter/repositories/FileSystemInteractiveLiveSessionTranscriptResolver.test.ts +0 -514
  414. package/src/adapter/repositories/FileSystemInteractiveLiveSessionTranscriptResolver.ts +0 -109
  415. package/src/adapter/repositories/FileSystemKevReportWatermarkRepository.test.ts +0 -284
  416. package/src/adapter/repositories/FileSystemKevReportWatermarkRepository.ts +0 -128
  417. package/src/adapter/repositories/FileSystemSessionAssistantTurnsRepository.test.ts +0 -138
  418. package/src/adapter/repositories/FileSystemSessionAssistantTurnsRepository.ts +0 -113
  419. package/src/adapter/repositories/FileSystemSessionDegenerationCooldownStateRepository.test.ts +0 -121
  420. package/src/adapter/repositories/FileSystemSessionDegenerationCooldownStateRepository.ts +0 -103
  421. package/src/adapter/repositories/FileSystemSessionOutputActivityRepository.test.ts +0 -360
  422. package/src/adapter/repositories/FileSystemSessionOutputActivityRepository.ts +0 -77
  423. package/src/adapter/repositories/FileSystemSessionRecordReader.test.ts +0 -59
  424. package/src/adapter/repositories/FileSystemSessionRecordReader.ts +0 -31
  425. package/src/adapter/repositories/FileSystemSilentSessionCandidateStateRepository.test.ts +0 -287
  426. package/src/adapter/repositories/FileSystemSilentSessionCandidateStateRepository.ts +0 -125
  427. package/src/adapter/repositories/FileSystemSilentSessionHubTaskStatusCacheRepository.test.ts +0 -285
  428. package/src/adapter/repositories/FileSystemSilentSessionHubTaskStatusCacheRepository.ts +0 -119
  429. package/src/adapter/repositories/FileSystemSubAgentLivenessResolver.test.ts +0 -237
  430. package/src/adapter/repositories/FileSystemSubAgentLivenessResolver.ts +0 -57
  431. package/src/adapter/repositories/FileSystemSubAgentSilentSecondsResolver.test.ts +0 -56
  432. package/src/adapter/repositories/FileSystemSubAgentSilentSecondsResolver.ts +0 -32
  433. package/src/adapter/repositories/FileSystemSubAgentTranscriptDirectoryResolver.test.ts +0 -68
  434. package/src/adapter/repositories/FileSystemSubAgentTranscriptDirectoryResolver.ts +0 -23
  435. package/src/adapter/repositories/GitHubIssueCheckpointRepository.test.ts +0 -51
  436. package/src/adapter/repositories/GitHubIssueCheckpointRepository.ts +0 -47
  437. package/src/adapter/repositories/GitHubIssueCommentRepository.test.ts +0 -278
  438. package/src/adapter/repositories/GitHubIssueCommentRepository.ts +0 -109
  439. package/src/adapter/repositories/GoogleSpreadsheetRepository.integration.test.ts +0 -265
  440. package/src/adapter/repositories/GoogleSpreadsheetRepository.test.ts +0 -431
  441. package/src/adapter/repositories/GoogleSpreadsheetRepository.ts +0 -268
  442. package/src/adapter/repositories/GraphqlProjectRepository.diskCache.test.ts +0 -272
  443. package/src/adapter/repositories/GraphqlProjectRepository.errorHandling.test.ts +0 -111
  444. package/src/adapter/repositories/GraphqlProjectRepository.fetchProjectId.test.ts +0 -254
  445. package/src/adapter/repositories/GraphqlProjectRepository.test.ts +0 -209
  446. package/src/adapter/repositories/GraphqlProjectRepository.ts +0 -707
  447. package/src/adapter/repositories/GraphqlProjectRepositoryProjectLocation.test.ts +0 -297
  448. package/src/adapter/repositories/KyHttpRepository.ts +0 -8
  449. package/src/adapter/repositories/KySlackRepository.test.ts +0 -172
  450. package/src/adapter/repositories/KySlackRepository.ts +0 -298
  451. package/src/adapter/repositories/LocalCommandIssueAttachmentRepository.test.ts +0 -193
  452. package/src/adapter/repositories/LocalCommandIssueAttachmentRepository.ts +0 -106
  453. package/src/adapter/repositories/LocalProcessLiveSessionProcessSnapshotProvider.test.ts +0 -190
  454. package/src/adapter/repositories/LocalProcessLiveSessionProcessSnapshotProvider.ts +0 -102
  455. package/src/adapter/repositories/LocalStorageCacheRepository.test.ts +0 -265
  456. package/src/adapter/repositories/LocalStorageCacheRepository.ts +0 -79
  457. package/src/adapter/repositories/LocalStorageRepository.integration.test.ts +0 -142
  458. package/src/adapter/repositories/LocalStorageRepository.test.ts +0 -173
  459. package/src/adapter/repositories/LocalStorageRepository.ts +0 -30
  460. package/src/adapter/repositories/NoUnansweredOwnerCallStatusProvider.test.ts +0 -15
  461. package/src/adapter/repositories/NoUnansweredOwnerCallStatusProvider.ts +0 -9
  462. package/src/adapter/repositories/NodeLocalCommandRunner.largeOutput.test.ts +0 -16
  463. package/src/adapter/repositories/NodeLocalCommandRunner.test.ts +0 -118
  464. package/src/adapter/repositories/NodeLocalCommandRunner.ts +0 -66
  465. package/src/adapter/repositories/NodeProcessSignalRepository.test.ts +0 -82
  466. package/src/adapter/repositories/NodeProcessSignalRepository.ts +0 -47
  467. package/src/adapter/repositories/NodeSubAgentProcessLister.test.ts +0 -44
  468. package/src/adapter/repositories/NodeSubAgentProcessLister.ts +0 -40
  469. package/src/adapter/repositories/NodeTmuxSessionRepository.test.ts +0 -546
  470. package/src/adapter/repositories/NodeTmuxSessionRepository.ts +0 -245
  471. package/src/adapter/repositories/OauthAPIClaudeRepository.ts +0 -279
  472. package/src/adapter/repositories/OauthAPIProxyClaudeRepository.test.ts +0 -166
  473. package/src/adapter/repositories/OauthAPIProxyClaudeRepository.ts +0 -32
  474. package/src/adapter/repositories/OauthProxyClaudeRepository.test.ts +0 -428
  475. package/src/adapter/repositories/OauthProxyClaudeRepository.ts +0 -124
  476. package/src/adapter/repositories/ProcClaudeHandoverSessionRepository.test.ts +0 -242
  477. package/src/adapter/repositories/ProcClaudeHandoverSessionRepository.ts +0 -261
  478. package/src/adapter/repositories/ProcClaudeInteractiveSessionRepository.test.ts +0 -184
  479. package/src/adapter/repositories/ProcClaudeInteractiveSessionRepository.ts +0 -138
  480. package/src/adapter/repositories/ProcClaudeLiveSessionRepository.test.ts +0 -208
  481. package/src/adapter/repositories/ProcClaudeLiveSessionRepository.ts +0 -130
  482. package/src/adapter/repositories/ProcFsProcessEnvironReader.test.ts +0 -60
  483. package/src/adapter/repositories/ProcFsProcessEnvironReader.ts +0 -38
  484. package/src/adapter/repositories/ProcHostMetricsRepository.test.ts +0 -207
  485. package/src/adapter/repositories/ProcHostMetricsRepository.ts +0 -181
  486. package/src/adapter/repositories/ProcTakeOwnershipSpawnRepository.test.ts +0 -231
  487. package/src/adapter/repositories/ProcTakeOwnershipSpawnRepository.ts +0 -134
  488. package/src/adapter/repositories/ProcessListSessionSubAgentActivityRepository.test.ts +0 -121
  489. package/src/adapter/repositories/ProcessListSessionSubAgentActivityRepository.ts +0 -58
  490. package/src/adapter/repositories/ProjectIssuesCacheRepository.test.ts +0 -218
  491. package/src/adapter/repositories/ProjectIssuesCacheRepository.ts +0 -141
  492. package/src/adapter/repositories/ProxyClaudeTokenUsageRepository.test.ts +0 -1195
  493. package/src/adapter/repositories/ProxyClaudeTokenUsageRepository.ts +0 -185
  494. package/src/adapter/repositories/ProxyRateLimitCacheRepository.test.ts +0 -116
  495. package/src/adapter/repositories/ProxyRateLimitCacheRepository.ts +0 -67
  496. package/src/adapter/repositories/RateLimitSnapshotRepository.ts +0 -50
  497. package/src/adapter/repositories/RealSleeper.test.ts +0 -19
  498. package/src/adapter/repositories/RealSleeper.ts +0 -12
  499. package/src/adapter/repositories/RestProjectRepository.test.ts +0 -277
  500. package/src/adapter/repositories/RestProjectRepository.ts +0 -129
  501. package/src/adapter/repositories/SqliteClaudeMessageResponseRepository.test.ts +0 -313
  502. package/src/adapter/repositories/SqliteClaudeMessageResponseRepository.ts +0 -164
  503. package/src/adapter/repositories/SystemDateRepository.test.ts +0 -60
  504. package/src/adapter/repositories/SystemDateRepository.ts +0 -34
  505. package/src/adapter/repositories/TmuxSilentSessionNotificationRepository.test.ts +0 -253
  506. package/src/adapter/repositories/TmuxSilentSessionNotificationRepository.ts +0 -158
  507. package/src/adapter/repositories/TranscriptOwnerCallStatusProvider.queuedReply.test.ts +0 -171
  508. package/src/adapter/repositories/TranscriptOwnerCallStatusProvider.singleScan.test.ts +0 -86
  509. package/src/adapter/repositories/TranscriptOwnerCallStatusProvider.test.ts +0 -996
  510. package/src/adapter/repositories/TranscriptOwnerCallStatusProvider.ts +0 -396
  511. package/src/adapter/repositories/TranscriptRefusalTailStatusProvider.test.ts +0 -208
  512. package/src/adapter/repositories/TranscriptRefusalTailStatusProvider.ts +0 -80
  513. package/src/adapter/repositories/TranscriptSessionSubAgentActivityRepository.test.ts +0 -1674
  514. package/src/adapter/repositories/TranscriptSessionSubAgentActivityRepository.ts +0 -459
  515. package/src/adapter/repositories/clSessionScopeUnitName.test.ts +0 -76
  516. package/src/adapter/repositories/clSessionScopeUnitName.ts +0 -5
  517. package/src/adapter/repositories/clSessionScopeUnitNameFromCgroupContent.test.ts +0 -34
  518. package/src/adapter/repositories/clSessionScopeUnitNameFromCgroupContent.ts +0 -8
  519. package/src/adapter/repositories/githubGraphqlClient.test.ts +0 -479
  520. package/src/adapter/repositories/githubGraphqlClient.ts +0 -243
  521. package/src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.test.ts +0 -5182
  522. package/src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.ts +0 -3303
  523. package/src/adapter/repositories/issue/ApiV3IssueRepository.test.ts +0 -46
  524. package/src/adapter/repositories/issue/ApiV3IssueRepository.ts +0 -88
  525. package/src/adapter/repositories/issue/GraphqlProjectItemRepository.test.ts +0 -1776
  526. package/src/adapter/repositories/issue/GraphqlProjectItemRepository.ts +0 -1552
  527. package/src/adapter/repositories/issue/RestIssueRepository.test.ts +0 -393
  528. package/src/adapter/repositories/issue/RestIssueRepository.ts +0 -252
  529. package/src/adapter/repositories/issue/gitHubRawUrl.test.ts +0 -29
  530. package/src/adapter/repositories/issue/gitHubRawUrl.ts +0 -30
  531. package/src/adapter/repositories/issue/githubRateLimitRetry.test.ts +0 -167
  532. package/src/adapter/repositories/issue/githubRateLimitRetry.ts +0 -109
  533. package/src/adapter/repositories/localStorageCacheDirectory.test.ts +0 -81
  534. package/src/adapter/repositories/localStorageCacheDirectory.ts +0 -13
  535. package/src/adapter/repositories/projectFieldDefinition.test.ts +0 -191
  536. package/src/adapter/repositories/projectFieldDefinition.ts +0 -144
  537. package/src/adapter/repositories/utils.test.ts +0 -55
  538. package/src/adapter/repositories/utils.ts +0 -45
  539. package/src/domain/entities/ClaudeHandoverSession.ts +0 -12
  540. package/src/domain/entities/ClaudeMessageResponse.ts +0 -31
  541. package/src/domain/entities/ClaudeTokenUsage.ts +0 -17
  542. package/src/domain/entities/ClaudeWindowUsage.ts +0 -5
  543. package/src/domain/entities/Comment.ts +0 -5
  544. package/src/domain/entities/InteractiveLiveSession.ts +0 -6
  545. package/src/domain/entities/Issue.ts +0 -31
  546. package/src/domain/entities/KevReportWatermark.ts +0 -4
  547. package/src/domain/entities/LiveSessionActivitySnapshot.ts +0 -14
  548. package/src/domain/entities/LiveSessionOutputActivity.ts +0 -4
  549. package/src/domain/entities/LiveSessionProcessSnapshot.ts +0 -18
  550. package/src/domain/entities/LiveTmuxSession.ts +0 -4
  551. package/src/domain/entities/Member.ts +0 -3
  552. package/src/domain/entities/OutputDegeneration.ts +0 -10
  553. package/src/domain/entities/Project.ts +0 -88
  554. package/src/domain/entities/ProjectField.ts +0 -3
  555. package/src/domain/entities/ProjectFieldName.ts +0 -2
  556. package/src/domain/entities/ProjectFieldSingleSelect.ts +0 -8
  557. package/src/domain/entities/ProjectFieldSingleSelectOption.ts +0 -8
  558. package/src/domain/entities/RequiredProjectField.ts +0 -68
  559. package/src/domain/entities/SearchedIssue.ts +0 -11
  560. package/src/domain/entities/StoryObjectMap.ts +0 -12
  561. package/src/domain/entities/TokenExhaustionHandoverState.ts +0 -8
  562. package/src/domain/entities/WorkflowStatus.ts +0 -66
  563. package/src/domain/usecases/ActionAnnouncementUseCase.test.ts +0 -91
  564. package/src/domain/usecases/ActionAnnouncementUseCase.ts +0 -78
  565. package/src/domain/usecases/AgentDesignationLabelAdoptUseCase.test.ts +0 -222
  566. package/src/domain/usecases/AgentDesignationLabelAdoptUseCase.ts +0 -76
  567. package/src/domain/usecases/AnalyzeProblemByIssueUseCase.test.ts +0 -118
  568. package/src/domain/usecases/AnalyzeProblemByIssueUseCase.ts +0 -112
  569. package/src/domain/usecases/AnalyzeStoriesUseCase.test.ts +0 -82
  570. package/src/domain/usecases/AnalyzeStoriesUseCase.ts +0 -296
  571. package/src/domain/usecases/AssignNoAssigneeIssueToManagerUseCase.test.ts +0 -578
  572. package/src/domain/usecases/AssignNoAssigneeIssueToManagerUseCase.ts +0 -137
  573. package/src/domain/usecases/CONTRIBUTING_FOR_TEST.md +0 -259
  574. package/src/domain/usecases/ChangeStatusByStoryColorUseCase.test.ts +0 -437
  575. package/src/domain/usecases/ChangeStatusByStoryColorUseCase.ts +0 -80
  576. package/src/domain/usecases/ChangeTargetPullRequestApprover.test.ts +0 -248
  577. package/src/domain/usecases/ChangeTargetPullRequestApprover.ts +0 -69
  578. package/src/domain/usecases/CheckIssueReviewReadinessUseCase.test.ts +0 -411
  579. package/src/domain/usecases/CheckIssueReviewReadinessUseCase.ts +0 -142
  580. package/src/domain/usecases/ClearDependedIssueURLUseCase.test.ts +0 -1120
  581. package/src/domain/usecases/ClearDependedIssueURLUseCase.ts +0 -161
  582. package/src/domain/usecases/ClearPastNextActionDateHourUseCase.test.ts +0 -345
  583. package/src/domain/usecases/ClearPastNextActionDateHourUseCase.ts +0 -81
  584. package/src/domain/usecases/CliErrorReportUseCase.test.ts +0 -162
  585. package/src/domain/usecases/CliErrorReportUseCase.ts +0 -72
  586. package/src/domain/usecases/ConflictedIssueRevertUseCase.test.ts +0 -886
  587. package/src/domain/usecases/ConflictedIssueRevertUseCase.ts +0 -146
  588. package/src/domain/usecases/CreateEstimationIssueUseCase.test.ts +0 -227
  589. package/src/domain/usecases/CreateEstimationIssueUseCase.ts +0 -205
  590. package/src/domain/usecases/CreateNewStoryByLabelUseCase.test.ts +0 -1084
  591. package/src/domain/usecases/CreateNewStoryByLabelUseCase.ts +0 -146
  592. package/src/domain/usecases/DailySecurityScanUseCase.test.ts +0 -1709
  593. package/src/domain/usecases/DailySecurityScanUseCase.ts +0 -476
  594. package/src/domain/usecases/DefaultSilentSessionMessageComposer.test.ts +0 -533
  595. package/src/domain/usecases/DefaultSilentSessionMessageComposer.ts +0 -122
  596. package/src/domain/usecases/GetStoryObjectMapUseCase.test.ts +0 -330
  597. package/src/domain/usecases/GetStoryObjectMapUseCase.ts +0 -79
  598. package/src/domain/usecases/HandleScheduledEventUseCase.test.ts +0 -1913
  599. package/src/domain/usecases/HandleScheduledEventUseCase.ts +0 -846
  600. package/src/domain/usecases/InTmuxByHumanSessionTokenCountUseCase.test.ts +0 -175
  601. package/src/domain/usecases/InTmuxByHumanSessionTokenCountUseCase.ts +0 -63
  602. package/src/domain/usecases/IssueNoStatusUpdateUseCase.test.ts +0 -165
  603. package/src/domain/usecases/IssueNoStatusUpdateUseCase.ts +0 -44
  604. package/src/domain/usecases/IssueRejectionEvaluator.test.ts +0 -1137
  605. package/src/domain/usecases/IssueRejectionEvaluator.ts +0 -340
  606. package/src/domain/usecases/LiveSessionOauthTokenSelectUseCase.test.ts +0 -679
  607. package/src/domain/usecases/LiveSessionOauthTokenSelectUseCase.ts +0 -178
  608. package/src/domain/usecases/NotifyFinishedIssuePreparationUseCase.test.ts +0 -5441
  609. package/src/domain/usecases/NotifyFinishedIssuePreparationUseCase.ts +0 -891
  610. package/src/domain/usecases/NotifySilentLiveSessionsUseCase.test.ts +0 -2069
  611. package/src/domain/usecases/NotifySilentLiveSessionsUseCase.ts +0 -489
  612. package/src/domain/usecases/OauthTokenSelectUseCase.test.ts +0 -651
  613. package/src/domain/usecases/OauthTokenSelectUseCase.ts +0 -274
  614. package/src/domain/usecases/OutputDegenerationDetector.test.ts +0 -167
  615. package/src/domain/usecases/OutputDegenerationDetector.ts +0 -169
  616. package/src/domain/usecases/ProjectRequiredFieldCreateUseCase.test.ts +0 -711
  617. package/src/domain/usecases/ProjectRequiredFieldCreateUseCase.ts +0 -146
  618. package/src/domain/usecases/QualityCheckAdvanceUseCase.test.ts +0 -421
  619. package/src/domain/usecases/QualityCheckAdvanceUseCase.ts +0 -76
  620. package/src/domain/usecases/ReopenedDoneIssueRevertUseCase.test.ts +0 -188
  621. package/src/domain/usecases/ReopenedDoneIssueRevertUseCase.ts +0 -57
  622. package/src/domain/usecases/ResolveInteractiveLiveSessionsUseCase.test.ts +0 -303
  623. package/src/domain/usecases/ResolveInteractiveLiveSessionsUseCase.ts +0 -155
  624. package/src/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.test.ts +0 -1838
  625. package/src/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.ts +0 -221
  626. package/src/domain/usecases/RevertOrphanedPreparationUseCase.test.ts +0 -2392
  627. package/src/domain/usecases/RevertOrphanedPreparationUseCase.ts +0 -499
  628. package/src/domain/usecases/SessionOutputDegenerationRecoveryUseCase.test.ts +0 -224
  629. package/src/domain/usecases/SessionOutputDegenerationRecoveryUseCase.ts +0 -142
  630. package/src/domain/usecases/SetDependedIssueUrlForOpenTaskPRsUseCase.test.ts +0 -360
  631. package/src/domain/usecases/SetDependedIssueUrlForOpenTaskPRsUseCase.ts +0 -70
  632. package/src/domain/usecases/SetNoStoryIssueToStoryUseCase.test.ts +0 -400
  633. package/src/domain/usecases/SetNoStoryIssueToStoryUseCase.ts +0 -48
  634. package/src/domain/usecases/SetWorkflowManagementIssueToStoryUseCase.test.ts +0 -696
  635. package/src/domain/usecases/SetWorkflowManagementIssueToStoryUseCase.ts +0 -201
  636. package/src/domain/usecases/SetupTowerDefenceProjectUseCase.test.ts +0 -1363
  637. package/src/domain/usecases/SetupTowerDefenceProjectUseCase.ts +0 -215
  638. package/src/domain/usecases/StaleTaskPullRequestCloseUseCase.test.ts +0 -170
  639. package/src/domain/usecases/StaleTaskPullRequestCloseUseCase.ts +0 -38
  640. package/src/domain/usecases/StaleTmuxSessionKillUseCase.test.ts +0 -283
  641. package/src/domain/usecases/StaleTmuxSessionKillUseCase.ts +0 -98
  642. package/src/domain/usecases/StartPreparationUseCase.test.ts +0 -7822
  643. package/src/domain/usecases/StartPreparationUseCase.ts +0 -876
  644. package/src/domain/usecases/SubscriptionDisabledIssueUseCase.test.ts +0 -200
  645. package/src/domain/usecases/SubscriptionDisabledIssueUseCase.ts +0 -74
  646. package/src/domain/usecases/TokenExhaustionHandoverUseCase.test.ts +0 -838
  647. package/src/domain/usecases/TokenExhaustionHandoverUseCase.ts +0 -439
  648. package/src/domain/usecases/UpdateIssueStatusByLabelUseCase.test.ts +0 -306
  649. package/src/domain/usecases/UpdateIssueStatusByLabelUseCase.ts +0 -64
  650. package/src/domain/usecases/UpdateRateLimitCacheUseCase.test.ts +0 -178
  651. package/src/domain/usecases/UpdateRateLimitCacheUseCase.ts +0 -22
  652. package/src/domain/usecases/adapter-interfaces/ClaudeHandoverSessionRepository.ts +0 -5
  653. package/src/domain/usecases/adapter-interfaces/ClaudeInteractiveSessionRepository.ts +0 -9
  654. package/src/domain/usecases/adapter-interfaces/ClaudeLiveSessionRepository.ts +0 -8
  655. package/src/domain/usecases/adapter-interfaces/ClaudeMessageResponseRepository.ts +0 -5
  656. package/src/domain/usecases/adapter-interfaces/ClaudeRepository.ts +0 -6
  657. package/src/domain/usecases/adapter-interfaces/ClaudeTokenUsageRepository.ts +0 -8
  658. package/src/domain/usecases/adapter-interfaces/ConsoleTabsRepository.ts +0 -12
  659. package/src/domain/usecases/adapter-interfaces/CopilotRepository.ts +0 -3
  660. package/src/domain/usecases/adapter-interfaces/DateRepository.ts +0 -7
  661. package/src/domain/usecases/adapter-interfaces/GitHubGraphqlRateLimitRepository.ts +0 -3
  662. package/src/domain/usecases/adapter-interfaces/HttpRepository.ts +0 -3
  663. package/src/domain/usecases/adapter-interfaces/InteractiveLiveSessionTranscriptResolver.ts +0 -7
  664. package/src/domain/usecases/adapter-interfaces/IssueAttachmentRepository.ts +0 -9
  665. package/src/domain/usecases/adapter-interfaces/IssueCheckpointRepository.ts +0 -3
  666. package/src/domain/usecases/adapter-interfaces/IssueCommentRepository.ts +0 -7
  667. package/src/domain/usecases/adapter-interfaces/IssueRepository.ts +0 -229
  668. package/src/domain/usecases/adapter-interfaces/KevReportWatermarkRepository.ts +0 -11
  669. package/src/domain/usecases/adapter-interfaces/LiveSessionProcessSnapshotProvider.ts +0 -5
  670. package/src/domain/usecases/adapter-interfaces/LocalCommandRunner.ts +0 -16
  671. package/src/domain/usecases/adapter-interfaces/OwnerCallStatusProvider.ts +0 -5
  672. package/src/domain/usecases/adapter-interfaces/ProcessEnvironReader.ts +0 -3
  673. package/src/domain/usecases/adapter-interfaces/ProcessSignalRepository.ts +0 -5
  674. package/src/domain/usecases/adapter-interfaces/ProjectRepository.ts +0 -29
  675. package/src/domain/usecases/adapter-interfaces/RateLimitCacheRepository.ts +0 -10
  676. package/src/domain/usecases/adapter-interfaces/RefusalTailStatusProvider.ts +0 -5
  677. package/src/domain/usecases/adapter-interfaces/SessionAssistantTurnsRepository.ts +0 -6
  678. package/src/domain/usecases/adapter-interfaces/SessionDegenerationCooldownStateRepository.ts +0 -4
  679. package/src/domain/usecases/adapter-interfaces/SessionOutputActivityRepository.ts +0 -7
  680. package/src/domain/usecases/adapter-interfaces/SessionRecordReader.ts +0 -3
  681. package/src/domain/usecases/adapter-interfaces/SessionSubAgentActivityRepository.ts +0 -8
  682. package/src/domain/usecases/adapter-interfaces/SilentSessionCandidateStateRepository.ts +0 -10
  683. package/src/domain/usecases/adapter-interfaces/SilentSessionHubTaskStatusCacheRepository.ts +0 -20
  684. package/src/domain/usecases/adapter-interfaces/SilentSessionMessageComposer.ts +0 -18
  685. package/src/domain/usecases/adapter-interfaces/SilentSessionNotificationRepository.ts +0 -6
  686. package/src/domain/usecases/adapter-interfaces/SlackRepository.ts +0 -20
  687. package/src/domain/usecases/adapter-interfaces/Sleeper.ts +0 -3
  688. package/src/domain/usecases/adapter-interfaces/SpreadsheetRepository.ts +0 -18
  689. package/src/domain/usecases/adapter-interfaces/StatusDefaultRepository.ts +0 -5
  690. package/src/domain/usecases/adapter-interfaces/SubAgentLivenessResolver.ts +0 -6
  691. package/src/domain/usecases/adapter-interfaces/SubAgentProcessLister.ts +0 -8
  692. package/src/domain/usecases/adapter-interfaces/SubAgentSilentSecondsResolver.ts +0 -3
  693. package/src/domain/usecases/adapter-interfaces/SubAgentTranscriptDirectoryResolver.ts +0 -6
  694. package/src/domain/usecases/adapter-interfaces/TakeOwnershipSpawnRepository.ts +0 -9
  695. package/src/domain/usecases/adapter-interfaces/TmuxSessionRepository.ts +0 -20
  696. package/src/domain/usecases/adapter-interfaces/TokenExhaustionHandoverStateRepository.ts +0 -6
  697. package/src/domain/usecases/adapter-interfaces/TokenRateLimitSnapshotRepository.ts +0 -22
  698. package/src/domain/usecases/adapter-interfaces/WebhookRepository.ts +0 -3
  699. package/src/domain/usecases/agentReportPrefix.ts +0 -1
  700. package/src/domain/usecases/autoStatusCheckComments.ts +0 -1
  701. package/src/domain/usecases/console/.gitkeep +0 -0
  702. package/src/domain/usecases/console/GenerateConsoleListsUseCase.test.ts +0 -887
  703. package/src/domain/usecases/console/GenerateConsoleListsUseCase.ts +0 -368
  704. package/src/domain/usecases/dashboard/ComposeDashboardUseCase.test.ts +0 -654
  705. package/src/domain/usecases/dashboard/ComposeDashboardUseCase.ts +0 -318
  706. package/src/domain/usecases/dashboard/DashboardProjectCode.test.ts +0 -34
  707. package/src/domain/usecases/dashboard/DashboardProjectCode.ts +0 -27
  708. package/src/domain/usecases/dashboard/GenerateDashboardRowUseCase.test.ts +0 -160
  709. package/src/domain/usecases/dashboard/GenerateDashboardRowUseCase.ts +0 -69
  710. package/src/domain/usecases/dashboard/GenerateTokenStatusUseCase.test.ts +0 -362
  711. package/src/domain/usecases/dashboard/GenerateTokenStatusUseCase.ts +0 -234
  712. package/src/domain/usecases/ensureAgentOptionAndGetId.ts +0 -47
  713. package/src/domain/usecases/extractFencedJsonBlocks.test.ts +0 -40
  714. package/src/domain/usecases/extractFencedJsonBlocks.ts +0 -21
  715. package/src/domain/usecases/extractNextStepAgent.test.ts +0 -58
  716. package/src/domain/usecases/extractNextStepAgent.ts +0 -18
  717. package/src/domain/usecases/extractNextStepAgentFromComments.ts +0 -13
  718. package/src/domain/usecases/findLastAgentReport.test.ts +0 -121
  719. package/src/domain/usecases/findLastAgentReport.ts +0 -14
  720. package/src/domain/usecases/intmux/GenerateInTmuxByHumanDataUseCase.test.ts +0 -339
  721. package/src/domain/usecases/intmux/GenerateInTmuxByHumanDataUseCase.ts +0 -188
  722. package/src/domain/usecases/intmux/InTmuxByHumanSessionReconcileUseCase.test.ts +0 -389
  723. package/src/domain/usecases/intmux/InTmuxByHumanSessionReconcileUseCase.ts +0 -103
  724. package/src/domain/usecases/intmux/OwnerCallFile.test.ts +0 -184
  725. package/src/domain/usecases/intmux/OwnerCallFile.ts +0 -80
  726. package/src/domain/usecases/isAgentReportBody.test.ts +0 -108
  727. package/src/domain/usecases/isAgentReportBody.ts +0 -52
  728. package/src/domain/usecases/isAuthorAuthorizedForAutoStatusCheck.ts +0 -12
  729. package/src/domain/usecases/isHumanComment.test.ts +0 -77
  730. package/src/domain/usecases/isHumanComment.ts +0 -23
  731. package/src/domain/usecases/isRecord.ts +0 -2
  732. package/src/domain/usecases/issueReactivationTriggerIsPending.test.ts +0 -541
  733. package/src/domain/usecases/issueReactivationTriggerIsPending.ts +0 -25
  734. package/src/domain/usecases/nextStepAgentDispatchRepeatedMessage.ts +0 -2
  735. package/src/domain/usecases/normalizeReportBody.test.ts +0 -24
  736. package/src/domain/usecases/normalizeReportBody.ts +0 -2
  737. package/src/domain/usecases/resolveAllowedIssueAuthors.test.ts +0 -51
  738. package/src/domain/usecases/resolveAllowedIssueAuthors.ts +0 -6
  739. package/src/domain/usecases/resolveLabelsAsLlmAgentName.test.ts +0 -42
  740. package/src/domain/usecases/resolveLabelsAsLlmAgentName.ts +0 -6
  741. package/src/domain/usecases/resolveLabelsNotRequiringPullRequest.test.ts +0 -33
  742. package/src/domain/usecases/resolveLabelsNotRequiringPullRequest.ts +0 -7
  743. package/src/domain/usecases/resolveNextStepAgentDispatchRepetition.test.ts +0 -337
  744. package/src/domain/usecases/resolveNextStepAgentDispatchRepetition.ts +0 -133
  745. package/src/domain/usecases/silentSessionReminderSentinel.ts +0 -9
  746. package/src/domain/usecases/triagerAgentName.ts +0 -4
  747. package/src/domain/usecases/utils.test.ts +0 -35
  748. package/src/domain/usecases/utils.ts +0 -6
  749. package/src/index.test.ts +0 -8
  750. package/src/index.ts +0 -10
  751. package/src/releaseConfig.test.ts +0 -40
  752. package/tsconfig.build.json +0 -18
  753. package/tsconfig.json +0 -25
  754. package/types/adapter/entry-points/handlers/resolveUnansweredOwnerCalls.d.ts +0 -13
  755. package/types/adapter/entry-points/handlers/resolveUnansweredOwnerCalls.d.ts.map +0 -1
  756. package/types/adapter/repositories/FileSystemSilentSessionNotifiedStateRepository.d.ts +0 -16
  757. package/types/adapter/repositories/FileSystemSilentSessionNotifiedStateRepository.d.ts.map +0 -1
  758. package/types/adapter/repositories/issue/issueTimelineUtils.d.ts +0 -12
  759. package/types/adapter/repositories/issue/issueTimelineUtils.d.ts.map +0 -1
  760. package/types/domain/entities/UnansweredOwnerCall.d.ts +0 -5
  761. package/types/domain/entities/UnansweredOwnerCall.d.ts.map +0 -1
  762. package/types/domain/entities/WorkingTime.d.ts +0 -8
  763. package/types/domain/entities/WorkingTime.d.ts.map +0 -1
  764. package/types/domain/usecases/ChangeStatusLongInReviewIssueUseCase.d.ts +0 -17
  765. package/types/domain/usecases/ChangeStatusLongInReviewIssueUseCase.d.ts.map +0 -1
  766. package/types/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.d.ts +0 -23
  767. package/types/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.d.ts.map +0 -1
  768. package/types/domain/usecases/GenerateWorkingTimeReportUseCase.d.ts +0 -50
  769. package/types/domain/usecases/GenerateWorkingTimeReportUseCase.d.ts.map +0 -1
  770. package/types/domain/usecases/TriagerApprovalDispatchUseCase.d.ts +0 -15
  771. package/types/domain/usecases/TriagerApprovalDispatchUseCase.d.ts.map +0 -1
  772. package/types/domain/usecases/adapter-interfaces/SilentSessionNotifiedStateRepository.d.ts +0 -11
  773. package/types/domain/usecases/adapter-interfaces/SilentSessionNotifiedStateRepository.d.ts.map +0 -1
  774. package/types/domain/usecases/awaitingOwnerApprovalMessage.d.ts +0 -3
  775. package/types/domain/usecases/awaitingOwnerApprovalMessage.d.ts.map +0 -1
  776. package/types/domain/usecases/findLastAgentDeclaringReport.d.ts +0 -5
  777. package/types/domain/usecases/findLastAgentDeclaringReport.d.ts.map +0 -1
  778. package/types/domain/usecases/isPullRequestDeclaredUnnecessary.d.ts +0 -5
  779. package/types/domain/usecases/isPullRequestDeclaredUnnecessary.d.ts.map +0 -1
  780. package/types/domain/usecases/isWaitingForOwnerApproval.d.ts +0 -2
  781. package/types/domain/usecases/isWaitingForOwnerApproval.d.ts.map +0 -1
  782. package/types/domain/usecases/returnedToAwaitingWorkspaceMessage.d.ts +0 -3
  783. package/types/domain/usecases/returnedToAwaitingWorkspaceMessage.d.ts.map +0 -1
@@ -1,1488 +0,0 @@
1
- #!/usr/bin/env node
2
- import { Command } from 'commander';
3
- import fs from 'fs';
4
-
5
- export {
6
- ConfigFile,
7
- fetchProjectReadme,
8
- loadConfigFile,
9
- mergeConfigs,
10
- parseProjectReadmeConfig,
11
- } from './projectConfig';
12
-
13
- import * as path from 'path';
14
- import type { IssueRepository } from '../../../domain/usecases/adapter-interfaces/IssueRepository';
15
- import { CheckIssueReviewReadinessUseCase } from '../../../domain/usecases/CheckIssueReviewReadinessUseCase';
16
- import { CliErrorReportUseCase } from '../../../domain/usecases/CliErrorReportUseCase';
17
- import { assertDashboardDisplayLabelsUnique } from '../../../domain/usecases/dashboard/DashboardProjectCode';
18
- import { isOwnerCallCalledAtValid } from '../../../domain/usecases/intmux/OwnerCallFile';
19
- import { NotifyFinishedIssuePreparationUseCase } from '../../../domain/usecases/NotifyFinishedIssuePreparationUseCase';
20
- import { RevertOrphanedPreparationUseCase } from '../../../domain/usecases/RevertOrphanedPreparationUseCase';
21
- import { StartPreparationUseCase } from '../../../domain/usecases/StartPreparationUseCase';
22
- import type { BaseGitHubRepository } from '../../repositories/BaseGitHubRepository';
23
- import { FetchWebhookRepository } from '../../repositories/FetchWebhookRepository';
24
- import { GitHubIssueCommentRepository } from '../../repositories/GitHubIssueCommentRepository';
25
- import { GraphqlProjectRepository } from '../../repositories/GraphqlProjectRepository';
26
- import { ApiV3CheerioRestIssueRepository } from '../../repositories/issue/ApiV3CheerioRestIssueRepository';
27
- import { ApiV3IssueRepository } from '../../repositories/issue/ApiV3IssueRepository';
28
- import { GraphqlProjectItemRepository } from '../../repositories/issue/GraphqlProjectItemRepository';
29
- import { RestIssueRepository } from '../../repositories/issue/RestIssueRepository';
30
- import { LocalCommandIssueAttachmentRepository } from '../../repositories/LocalCommandIssueAttachmentRepository';
31
- import { LocalStorageCacheRepository } from '../../repositories/LocalStorageCacheRepository';
32
- import { LocalStorageRepository } from '../../repositories/LocalStorageRepository';
33
- import { projectCacheDirectory } from '../../repositories/localStorageCacheDirectory';
34
- import { NodeLocalCommandRunner } from '../../repositories/NodeLocalCommandRunner';
35
- import { NodeTmuxSessionRepository } from '../../repositories/NodeTmuxSessionRepository';
36
- import { ProcTakeOwnershipSpawnRepository } from '../../repositories/ProcTakeOwnershipSpawnRepository';
37
- import { CliGitHubGraphqlRateLimitRepository } from '../../repositories/CliGitHubGraphqlRateLimitRepository';
38
- import { DEFAULT_THRESHOLD_FOR_DISPATCH_LOOP } from '../../../domain/usecases/resolveNextStepAgentDispatchRepetition';
39
- import { ProxyClaudeTokenUsageRepository } from '../../repositories/ProxyClaudeTokenUsageRepository';
40
- import { SystemDateRepository } from '../../repositories/SystemDateRepository';
41
- import * as os from 'os';
42
- import {
43
- createConsoleGithubTokenResolver,
44
- createConsoleGithubTokenResolverByItemUrl,
45
- createConsoleIssueRepositoryResolver,
46
- createConsoleProjectRepositoryResolver,
47
- } from '../console/consoleGithubTokenResolver';
48
- import {
49
- buildPjcodeToProjectUrl,
50
- createConsoleProjectLoader,
51
- createConsoleProjectResolver,
52
- createPjcodeConfigChecker,
53
- } from '../console/consoleProjectResolver';
54
- import {
55
- IssueTitleStateCache,
56
- PullRequestStatusCache,
57
- } from '../console/consoleReadApi';
58
- import { ensureConsoleRunning } from '../console/ensureConsoleRunning';
59
- import { DEFAULT_WEB_PORT, startWebServer } from '../console/webServer';
60
- import { FileSystemConsoleTabsRepository } from '../handlers/FileSystemConsoleTabsRepository';
61
- import { InTmuxByHumanSessionTokenCountHandler } from '../handlers/InTmuxByHumanSessionTokenCountHandler';
62
- import { LiveSessionOauthTokenSelectHandler } from '../handlers/LiveSessionOauthTokenSelectHandler';
63
- import { OauthTokenSelectHandler } from '../handlers/OauthTokenSelectHandler';
64
- import {
65
- ownerCallFileAppend,
66
- ownerCallFileDeleteInEveryProject,
67
- ownerCallProjectCodeInInTmuxByHumanData,
68
- } from '../handlers/ownerCallFileStore';
69
- import { writeRotationOrderFile } from '../handlers/rotationOrderFileWriter';
70
- import {
71
- loadLiveSessionOauthTokenSelectionSettings,
72
- loadPreparationWorkerSettings,
73
- loadWorkflowImprovementIssueUrl,
74
- resolveFleetConfigFilePath,
75
- } from './fleetConfig';
76
- import {
77
- type ConfigFile,
78
- fetchProjectReadme,
79
- loadConfigFile,
80
- mergeConfigs,
81
- parseProjectReadmeConfig,
82
- } from './projectConfig';
83
-
84
- type StartDaemonOptions = {
85
- projectUrl?: string;
86
- manager?: string;
87
- defaultAgentName?: string;
88
- defaultLlmModelName?: string;
89
- fallbackLlmModelName?: string;
90
- defaultLlmAgentName?: string;
91
- maximumPreparingIssuesCount?: string;
92
- utilizationPercentageThreshold?: string;
93
- allowedIssueAuthors?: string;
94
- preparationProcessCheckCommand?: string;
95
- configFilePath: string;
96
- fleetConfigFilePath?: string;
97
- };
98
-
99
- const resolvePositiveIntegerOption = (
100
- rawValue: number | string | undefined,
101
- optionName: string,
102
- fallback: number,
103
- ): number => {
104
- if (rawValue === undefined) {
105
- return fallback;
106
- }
107
- const parsed = Number(rawValue);
108
- if (!Number.isFinite(parsed) || !Number.isInteger(parsed) || parsed <= 0) {
109
- console.error(
110
- `Invalid value for --${optionName}. It must be a positive integer.`,
111
- );
112
- process.exit(1);
113
- }
114
- return parsed;
115
- };
116
-
117
- type NotifyFinishedOptions = {
118
- issueUrl: string;
119
- projectUrl?: string;
120
- thresholdForAutoReject?: string;
121
- thresholdForDispatchLoop?: string;
122
- workflowBlockerResolvedWebhookUrl?: string;
123
- configFilePath: string;
124
- missingAgentName?: string;
125
- sessionErrorLine?: string;
126
- deferPreparation?: boolean;
127
- };
128
-
129
- type CheckIssueReviewReadinessOptions = {
130
- issueUrl: string;
131
- projectUrl?: string;
132
- configFilePath: string;
133
- };
134
-
135
- type ServeWebOptions = {
136
- configFilePath: string;
137
- port?: string;
138
- consoleDataOutputDir?: string;
139
- inTmuxDataDir?: string;
140
- dashboardDir?: string;
141
- dashboardDataDir?: string;
142
- dashboardProjectNames?: string;
143
- enableAirplaneMode?: boolean;
144
- fleetConfigFilePath?: string;
145
- };
146
-
147
- type OwnerCallFileAppendOptions = {
148
- session: string;
149
- calledAt: string;
150
- bodyFile: string;
151
- inTmuxDataDir?: string;
152
- };
153
-
154
- type OwnerCallFileDeleteOptions = {
155
- session: string;
156
- inTmuxDataDir?: string;
157
- };
158
-
159
- const DEFAULT_IN_TMUX_DATA_DIR =
160
- '/home/hiromi/0_workspaces/workspace1/jsonpub/in-tmux-by-human';
161
-
162
- const DEFAULT_DASHBOARD_DIR = '/home/hiromi/0_workspaces/workspace1/jsonpub';
163
-
164
- const DEFAULT_DASHBOARD_DATA_DIR: string | null = null;
165
-
166
- const parseDashboardProjectNames = (raw: string | undefined): string[] => {
167
- const names = (raw ?? '')
168
- .split(',')
169
- .map((name) => name.trim())
170
- .filter((name) => name.length > 0);
171
- if (names.length === 0) {
172
- console.error(
173
- '--dashboardProjectNames must list at least one project name',
174
- );
175
- return process.exit(1);
176
- }
177
- try {
178
- assertDashboardDisplayLabelsUnique(names);
179
- } catch (error) {
180
- console.error(error instanceof Error ? error.message : String(error));
181
- return process.exit(1);
182
- }
183
- return names;
184
- };
185
-
186
- type SelectOauthTokenOptions = {
187
- tokenListJsonPath?: string;
188
- cacheDir?: string;
189
- };
190
-
191
- type SelectLiveSessionOauthTokenOptions = {
192
- tokenListJsonPath?: string;
193
- cacheDir?: string;
194
- fleetConfigFilePath?: string;
195
- };
196
-
197
- type CountInTmuxByHumanSessionsPerTokenOptions = {
198
- configFilePath: string;
199
- projectUrl?: string;
200
- tokenListJsonPath?: string;
201
- };
202
-
203
- type KillTmuxSessionOptions = {
204
- session?: string;
205
- self?: boolean;
206
- };
207
-
208
- type AttachOrCreateOptions = {
209
- issueUrl: string;
210
- };
211
-
212
- const resolveScopeLibPath = (): string | null => {
213
- const explicitPath = process.env.CL_SCOPE_LIB_PATH;
214
- if (explicitPath !== undefined && fs.existsSync(explicitPath)) {
215
- return explicitPath;
216
- }
217
- const defaultPath = path.join(
218
- os.homedir(),
219
- 'git',
220
- 'secretary',
221
- 'machine',
222
- 'sk',
223
- 'sh',
224
- 'cl-scope-lib.sh',
225
- );
226
- return fs.existsSync(defaultPath) ? defaultPath : null;
227
- };
228
-
229
- const buildGithubRepositoryParams = (
230
- localStorageRepository: LocalStorageRepository,
231
- token: string,
232
- ): ConstructorParameters<typeof BaseGitHubRepository> => [
233
- localStorageRepository,
234
- token,
235
- ];
236
-
237
- const parseInTmuxProjectOrder = (raw: string | undefined): string[] | null => {
238
- if (raw === undefined) {
239
- return null;
240
- }
241
- return raw
242
- .split(',')
243
- .map((name) => name.trim())
244
- .filter((name) => name.length > 0);
245
- };
246
-
247
- interface ScheduleOptions {
248
- trigger: 'issue' | 'schedule';
249
- config: string;
250
- issue?: string;
251
- verbose: boolean;
252
- inTmuxProjectOrder?: string;
253
- }
254
-
255
- export const program = new Command();
256
-
257
- program
258
- .name('github-issue-tower-defence-management')
259
- .description('CLI tool for GitHub Issue Tower Defence Management');
260
-
261
- program
262
- .command('schedule', { isDefault: true })
263
- .description('Handle scheduled events (trigger: issue or schedule)')
264
- .requiredOption(
265
- '-t, --trigger <type>',
266
- 'Trigger type: issue or schedule',
267
- /^(issue|schedule)$/i,
268
- )
269
- .requiredOption('-c, --config <path>', 'Path to config YAML file')
270
- .option('-v, --verbose', 'Verbose output')
271
- .option('-i, --issue <url>', 'GitHub Issue URL')
272
- .option(
273
- '--inTmuxProjectOrder <names>',
274
- 'Comma-separated project names, in display order, for the in-tmux-by-human session list. When omitted, falls back to the inTmuxProjectOrder value in the config file.',
275
- )
276
- .action(async (options: ScheduleOptions) => {
277
- if (options.trigger === 'issue' && !options.issue) {
278
- console.error('Issue URL is required when trigger type is "issue"');
279
- process.exit(1);
280
- }
281
- if (options.trigger === 'schedule') {
282
- const { HandleScheduledEventUseCaseHandler } =
283
- await import('../handlers/HandleScheduledEventUseCaseHandler');
284
- const handler = new HandleScheduledEventUseCaseHandler();
285
- await handler.handle(
286
- options.config,
287
- options.verbose,
288
- parseInTmuxProjectOrder(options.inTmuxProjectOrder),
289
- );
290
- }
291
- });
292
-
293
- program
294
- .command('startDaemon')
295
- .description('Start daemon to prepare GitHub issues')
296
- .requiredOption(
297
- '--configFilePath <path>',
298
- 'Path to config file for tower defence management',
299
- )
300
- .option('--projectUrl <url>', 'GitHub project URL')
301
- .option(
302
- '--manager <login>',
303
- 'GitHub login of the manager; only Awaiting Workspace issues assigned to this login are picked up',
304
- )
305
- .option('--defaultAgentName <name>', 'Default agent name')
306
- .option('--defaultLlmModelName <name>', 'Default LLM model name')
307
- .option(
308
- '--fallbackLlmModelName <name>',
309
- 'LLM model to fall back to when the default Sonnet model is selected but its 7-day weekly limit is exhausted across all tokens (default: claude-opus-4-8)',
310
- )
311
- .option('--defaultLlmAgentName <name>', 'Default LLM agent name')
312
- .option(
313
- '--maximumPreparingIssuesCount <count>',
314
- 'Maximum number of issues in preparation status (default: 6 per available Claude OAuth token, otherwise 6)',
315
- )
316
- .option(
317
- '--utilizationPercentageThreshold <percent>',
318
- 'Per-token Claude 5h utilization % threshold; tokens at or above it are excluded from rotation. Per-token concurrency also tapers from 6 slots down to 1 as either the 5h or 7d utilization rises from 80% toward 100%, taking the more restrictive of the two (default: 90)',
319
- )
320
- .option(
321
- '--allowedIssueAuthors <authors>',
322
- 'Comma-separated list of allowed issue authors',
323
- )
324
- .option(
325
- '--preparationProcessCheckCommand <template>',
326
- 'Shell command template with {URL} placeholder to check if a preparation process is alive',
327
- )
328
- .option(
329
- '--fleetConfigFilePath <path>',
330
- 'Path to the fleet-wide YAML config file holding the preparationWorker mapping (normalConcurrentLimit, maxConcurrentWorkers, graphqlRateLimitFloor); falls back to the TDPM_FLEET_CONFIG environment variable, and to the built-in values when neither is set',
331
- )
332
- .action(async (options: StartDaemonOptions) => {
333
- const token = process.env.GH_TOKEN;
334
- if (!token) {
335
- console.error('GH_TOKEN environment variable is required');
336
- process.exit(1);
337
- }
338
-
339
- const configFileValues = loadConfigFile(options.configFilePath);
340
-
341
- const cliOverrides: ConfigFile = {
342
- projectUrl: options.projectUrl,
343
- manager: options.manager,
344
- defaultAgentName: options.defaultAgentName,
345
- defaultLlmModelName: options.defaultLlmModelName,
346
- fallbackLlmModelName: options.fallbackLlmModelName,
347
- defaultLlmAgentName: options.defaultLlmAgentName,
348
- maximumPreparingIssuesCount: options.maximumPreparingIssuesCount
349
- ? Number(options.maximumPreparingIssuesCount)
350
- : undefined,
351
- utilizationPercentageThreshold: options.utilizationPercentageThreshold
352
- ? Number(options.utilizationPercentageThreshold)
353
- : undefined,
354
- allowedIssueAuthors: options.allowedIssueAuthors,
355
- preparationProcessCheckCommand: options.preparationProcessCheckCommand,
356
- };
357
-
358
- const tempProjectUrl =
359
- cliOverrides.projectUrl ?? configFileValues.projectUrl;
360
-
361
- let readmeOverrides: ConfigFile = {};
362
- if (tempProjectUrl) {
363
- const readme = await fetchProjectReadme(tempProjectUrl, token);
364
- if (readme) {
365
- readmeOverrides = parseProjectReadmeConfig(readme, tempProjectUrl);
366
- }
367
- }
368
-
369
- const config = mergeConfigs(
370
- configFileValues,
371
- cliOverrides,
372
- readmeOverrides,
373
- );
374
-
375
- if (config.errorReportingRepository) {
376
- process.env.TDPM_ERROR_REPORT_REPOSITORY =
377
- config.errorReportingRepository;
378
- }
379
-
380
- const projectUrl = config.projectUrl;
381
- const defaultAgentName = config.defaultAgentName;
382
- const manager = config.manager;
383
-
384
- if (!projectUrl) {
385
- console.error(
386
- 'projectUrl is required. Provide via --projectUrl, config file, or project README.',
387
- );
388
- process.exit(1);
389
- }
390
- if (!defaultAgentName) {
391
- console.error(
392
- 'defaultAgentName is required. Provide via --defaultAgentName, config file, or project README.',
393
- );
394
- process.exit(1);
395
- }
396
- if (!manager) {
397
- console.error(
398
- 'manager is required. Provide via the config file so that only issues assigned to the manager are picked up.',
399
- );
400
- process.exit(1);
401
- }
402
-
403
- let maximumPreparingIssuesCount: number | null = null;
404
- const rawMaxCount = config.maximumPreparingIssuesCount;
405
- if (rawMaxCount !== undefined) {
406
- const parsedCount = Number(rawMaxCount);
407
- if (
408
- !Number.isFinite(parsedCount) ||
409
- !Number.isInteger(parsedCount) ||
410
- parsedCount <= 0
411
- ) {
412
- console.error(
413
- 'Invalid value for --maximumPreparingIssuesCount. It must be a positive integer.',
414
- );
415
- process.exit(1);
416
- }
417
- maximumPreparingIssuesCount = parsedCount;
418
- }
419
-
420
- console.log(
421
- `maximumPreparingIssuesCount: ${maximumPreparingIssuesCount ?? 'null (default: 6 per available Claude OAuth token, otherwise 6)'}`,
422
- );
423
-
424
- const fleetConfigFilePath = resolveFleetConfigFilePath(
425
- options.fleetConfigFilePath ?? null,
426
- );
427
- const preparationWorkerSettings =
428
- loadPreparationWorkerSettings(fleetConfigFilePath);
429
- const fleetConfigSource =
430
- fleetConfigFilePath !== null
431
- ? ' (source: fleetConfig)'
432
- : ' (source: built-in default)';
433
- console.log(
434
- `Effective normalConcurrentLimit: ${preparationWorkerSettings.normalConcurrentLimit}${fleetConfigSource}`,
435
- );
436
- console.log(
437
- `Effective maxConcurrentWorkers: ${preparationWorkerSettings.maxConcurrentWorkers}${fleetConfigSource}`,
438
- );
439
- console.log(
440
- `Effective graphqlRateLimitFloor: ${preparationWorkerSettings.graphqlRateLimitFloor}${fleetConfigSource}`,
441
- );
442
-
443
- const projectName = config.projectName ?? 'default';
444
- const localStorageRepository = new LocalStorageRepository();
445
- const cachePath = projectCacheDirectory(projectName);
446
- const localStorageCacheRepository = new LocalStorageCacheRepository(
447
- localStorageRepository,
448
- cachePath,
449
- );
450
- const githubRepositoryParams = buildGithubRepositoryParams(
451
- localStorageRepository,
452
- token,
453
- );
454
- const projectRepository = new GraphqlProjectRepository(
455
- ...githubRepositoryParams,
456
- localStorageCacheRepository,
457
- );
458
- const apiV3IssueRepository = new ApiV3IssueRepository(
459
- ...githubRepositoryParams,
460
- );
461
- const restIssueRepository = new RestIssueRepository(
462
- ...githubRepositoryParams,
463
- );
464
- const graphqlProjectItemRepository = new GraphqlProjectItemRepository(
465
- ...githubRepositoryParams,
466
- );
467
- const issueRepository = new ApiV3CheerioRestIssueRepository(
468
- apiV3IssueRepository,
469
- restIssueRepository,
470
- graphqlProjectItemRepository,
471
- localStorageCacheRepository,
472
- projectRepository,
473
- new SystemDateRepository(),
474
- ...githubRepositoryParams,
475
- );
476
- const localCommandRunner = new NodeLocalCommandRunner();
477
-
478
- const preparationProcessCheckCommand =
479
- config.preparationProcessCheckCommand;
480
- if (preparationProcessCheckCommand) {
481
- const revertIssueCommentRepository = new GitHubIssueCommentRepository(
482
- token,
483
- );
484
- const revertUseCase = new RevertOrphanedPreparationUseCase(
485
- projectRepository,
486
- issueRepository,
487
- revertIssueCommentRepository,
488
- localCommandRunner,
489
- );
490
- await revertUseCase.run({
491
- projectUrl,
492
- preparationProcessCheckCommand,
493
- thresholdForAutoReject: config.thresholdForAutoReject ?? 3,
494
- thresholdForDispatchLoop: config.thresholdForDispatchLoop,
495
- awLogDirectoryPath: config.awLogDirectoryPath,
496
- awLogStaleThresholdMinutes: config.awLogStaleThresholdMinutes,
497
- labelsAsLlmAgentName: config.labelsAsLlmAgentName ?? null,
498
- labelsNotRequiringPullRequest:
499
- config.labelsNotRequiringPullRequest ?? null,
500
- });
501
- }
502
-
503
- const claudeTokenUsageRepository = new ProxyClaudeTokenUsageRepository(
504
- config.claudeCodeOauthTokenListJsonPath ?? null,
505
- );
506
- const useCase = new StartPreparationUseCase(
507
- projectRepository,
508
- issueRepository,
509
- localCommandRunner,
510
- claudeTokenUsageRepository,
511
- new ProcTakeOwnershipSpawnRepository(),
512
- new CliGitHubGraphqlRateLimitRepository(localCommandRunner),
513
- );
514
-
515
- const rawAllowedIssueAuthors = config.allowedIssueAuthors;
516
- const allowedIssueAuthors = rawAllowedIssueAuthors
517
- ? rawAllowedIssueAuthors
518
- .split(',')
519
- .map((s) => s.trim())
520
- .filter(Boolean)
521
- : null;
522
-
523
- const codexHomeCandidates =
524
- config.codexHomeCandidates && config.codexHomeCandidates.length > 0
525
- ? config.codexHomeCandidates
526
- : null;
527
-
528
- if (config.consoleAccessToken) {
529
- const consoleProcess = await ensureConsoleRunning(
530
- options.configFilePath,
531
- DEFAULT_WEB_PORT,
532
- Object.keys(config.consoleProjects ?? {}),
533
- );
534
- if (consoleProcess !== null) {
535
- process.once('SIGTERM', () => {
536
- consoleProcess.kill();
537
- process.exit(0);
538
- });
539
- process.once('SIGINT', () => {
540
- consoleProcess.kill();
541
- process.exit(0);
542
- });
543
- }
544
- }
545
-
546
- const preparationResult = await useCase.run({
547
- projectUrl,
548
- defaultAgentName,
549
- defaultLlmModelName: config.defaultLlmModelName ?? null,
550
- fallbackLlmModelName: config.fallbackLlmModelName ?? null,
551
- defaultLlmAgentName: config.defaultLlmAgentName ?? null,
552
- configFilePath: options.configFilePath,
553
- maximumPreparingIssuesCount,
554
- utilizationPercentageThreshold:
555
- config.utilizationPercentageThreshold ?? 90,
556
- allowedIssueAuthors,
557
- manager,
558
- codexHomeCandidates,
559
- labelsAsLlmAgentName: config.labelsAsLlmAgentName ?? null,
560
- agents: config.agents ?? null,
561
- normalConcurrentLimit: preparationWorkerSettings.normalConcurrentLimit,
562
- maxConcurrentWorkers: preparationWorkerSettings.maxConcurrentWorkers,
563
- graphqlRateLimitFloor: preparationWorkerSettings.graphqlRateLimitFloor,
564
- });
565
- if (preparationResult.rotationOrder !== null) {
566
- writeRotationOrderFile(preparationResult.rotationOrder);
567
- }
568
- });
569
-
570
- program
571
- .command('notifyFinishedIssuePreparation')
572
- .description('Notify that issue preparation is finished')
573
- .requiredOption(
574
- '--configFilePath <path>',
575
- 'Path to config file for tower defence management',
576
- )
577
- .requiredOption('--issueUrl <url>', 'GitHub issue URL')
578
- .option('--projectUrl <url>', 'GitHub project URL')
579
- .option(
580
- '--thresholdForAutoReject <count>',
581
- 'Threshold for auto-escalation after consecutive rejections (default: 3)',
582
- )
583
- .option(
584
- '--thresholdForDispatchLoop <count>',
585
- 'Threshold for auto-escalation after one agent is dispatched this many times since the last human comment, whether it names itself or two agents name each other in turn (default: 6)',
586
- )
587
- .option(
588
- '--workflowBlockerResolvedWebhookUrl <url>',
589
- 'Webhook URL to notify when a workflow blocker issue status changes to awaiting quality check. Supports {URL} and {MESSAGE} placeholders.',
590
- )
591
- .option(
592
- '--missingAgentName <name>',
593
- 'Agent definition name that was not found, triggering the missing-agent task creation path',
594
- )
595
- .option(
596
- '--sessionErrorLine <line>',
597
- 'Exact error line from the session log to include in the task issue body',
598
- )
599
- .option(
600
- '--deferPreparation',
601
- 'Defer the item via the Reactivation Trigger fields (sets nextActionDate to tomorrow) without creating any issue; use for transient upstream failures',
602
- )
603
- .action(async (options: NotifyFinishedOptions) => {
604
- const token = process.env.GH_TOKEN;
605
- if (!token) {
606
- console.error('GH_TOKEN environment variable is required');
607
- process.exit(1);
608
- }
609
-
610
- const configFileValues = loadConfigFile(options.configFilePath);
611
-
612
- const cliOverrides: ConfigFile = {
613
- projectUrl: options.projectUrl,
614
- thresholdForAutoReject: options.thresholdForAutoReject
615
- ? Number(options.thresholdForAutoReject)
616
- : undefined,
617
- thresholdForDispatchLoop: options.thresholdForDispatchLoop
618
- ? Number(options.thresholdForDispatchLoop)
619
- : undefined,
620
- workflowBlockerResolvedWebhookUrl:
621
- options.workflowBlockerResolvedWebhookUrl,
622
- };
623
-
624
- const tempProjectUrl =
625
- cliOverrides.projectUrl ?? configFileValues.projectUrl;
626
-
627
- let readmeOverrides: ConfigFile = {};
628
- if (tempProjectUrl) {
629
- const readme = await fetchProjectReadme(tempProjectUrl, token);
630
- if (readme) {
631
- readmeOverrides = parseProjectReadmeConfig(readme, tempProjectUrl);
632
- }
633
- }
634
-
635
- const config = mergeConfigs(
636
- configFileValues,
637
- cliOverrides,
638
- readmeOverrides,
639
- );
640
-
641
- if (config.errorReportingRepository) {
642
- process.env.TDPM_ERROR_REPORT_REPOSITORY =
643
- config.errorReportingRepository;
644
- }
645
-
646
- const projectUrl = config.projectUrl;
647
-
648
- if (!projectUrl) {
649
- console.error(
650
- 'projectUrl is required. Provide via --projectUrl, config file, or project README.',
651
- );
652
- process.exit(1);
653
- }
654
-
655
- const thresholdForAutoReject = resolvePositiveIntegerOption(
656
- config.thresholdForAutoReject,
657
- 'thresholdForAutoReject',
658
- 3,
659
- );
660
- const thresholdForDispatchLoop = resolvePositiveIntegerOption(
661
- config.thresholdForDispatchLoop,
662
- 'thresholdForDispatchLoop',
663
- DEFAULT_THRESHOLD_FOR_DISPATCH_LOOP,
664
- );
665
-
666
- const workflowBlockerResolvedWebhookUrl: string | null =
667
- config.workflowBlockerResolvedWebhookUrl ?? null;
668
-
669
- const projectName = config.projectName ?? 'default';
670
- const localStorageRepository = new LocalStorageRepository();
671
- const cachePath = projectCacheDirectory(projectName);
672
- const localStorageCacheRepository = new LocalStorageCacheRepository(
673
- localStorageRepository,
674
- cachePath,
675
- );
676
- const githubRepositoryParams = buildGithubRepositoryParams(
677
- localStorageRepository,
678
- token,
679
- );
680
- const projectRepository = new GraphqlProjectRepository(
681
- ...githubRepositoryParams,
682
- localStorageCacheRepository,
683
- );
684
- const apiV3IssueRepository = new ApiV3IssueRepository(
685
- ...githubRepositoryParams,
686
- );
687
- const restIssueRepository = new RestIssueRepository(
688
- ...githubRepositoryParams,
689
- );
690
- const graphqlProjectItemRepository = new GraphqlProjectItemRepository(
691
- ...githubRepositoryParams,
692
- );
693
- const issueRepository = new ApiV3CheerioRestIssueRepository(
694
- apiV3IssueRepository,
695
- restIssueRepository,
696
- graphqlProjectItemRepository,
697
- localStorageCacheRepository,
698
- projectRepository,
699
- new SystemDateRepository(),
700
- ...githubRepositoryParams,
701
- );
702
- const issueCommentRepository = new GitHubIssueCommentRepository(token);
703
- const webhookRepository = new FetchWebhookRepository();
704
-
705
- const consoleDataOutputDir = config.consoleDataOutputDir ?? null;
706
- const consoleTabsRepository =
707
- consoleDataOutputDir !== null
708
- ? new FileSystemConsoleTabsRepository(consoleDataOutputDir, projectName)
709
- : null;
710
-
711
- const useCase = new NotifyFinishedIssuePreparationUseCase(
712
- projectRepository,
713
- issueRepository,
714
- issueCommentRepository,
715
- webhookRepository,
716
- consoleTabsRepository,
717
- );
718
-
719
- const rawAllowedIssueAuthors = config.allowedIssueAuthors;
720
- const allowedIssueAuthors = rawAllowedIssueAuthors
721
- ? rawAllowedIssueAuthors
722
- .split(',')
723
- .map((s) => s.trim())
724
- .filter(Boolean)
725
- : null;
726
-
727
- await useCase.run({
728
- projectUrl,
729
- issueUrl: options.issueUrl,
730
- thresholdForAutoReject,
731
- thresholdForDispatchLoop,
732
- workflowBlockerResolvedWebhookUrl,
733
- allowedIssueAuthors,
734
- labelsAsLlmAgentName: config.labelsAsLlmAgentName ?? null,
735
- labelsNotRequiringPullRequest:
736
- config.labelsNotRequiringPullRequest ?? null,
737
- changeTargetPathAliases: config.changeTargetPathAliases ?? null,
738
- agents: config.agents ?? null,
739
- missingAgentName: options.missingAgentName ?? null,
740
- sessionErrorLine: options.sessionErrorLine ?? null,
741
- manager: config.manager ?? null,
742
- developerAgentNames: config.developerAgentNames ?? null,
743
- deferPreparation: options.deferPreparation ?? null,
744
- });
745
- });
746
-
747
- program
748
- .command('checkIssueReviewReadiness')
749
- .description(
750
- 'Check whether an issue is in a review-ready state without mutating any field or posting any comment',
751
- )
752
- .requiredOption(
753
- '--configFilePath <path>',
754
- 'Path to config file for tower defence management',
755
- )
756
- .requiredOption('--issueUrl <url>', 'GitHub issue URL')
757
- .option('--projectUrl <url>', 'GitHub project URL (optional)')
758
- .action(async (options: CheckIssueReviewReadinessOptions) => {
759
- const token = process.env.GH_TOKEN;
760
- if (!token) {
761
- console.error('GH_TOKEN environment variable is required');
762
- process.exit(1);
763
- }
764
-
765
- const configFileValues = loadConfigFile(options.configFilePath);
766
-
767
- const cliOverrides: ConfigFile = {
768
- projectUrl: options.projectUrl,
769
- };
770
-
771
- const tempProjectUrl =
772
- cliOverrides.projectUrl ?? configFileValues.projectUrl;
773
-
774
- let readmeOverrides: ConfigFile = {};
775
- if (tempProjectUrl) {
776
- const readme = await fetchProjectReadme(tempProjectUrl, token);
777
- if (readme) {
778
- readmeOverrides = parseProjectReadmeConfig(readme, tempProjectUrl);
779
- }
780
- }
781
-
782
- const config = mergeConfigs(
783
- configFileValues,
784
- cliOverrides,
785
- readmeOverrides,
786
- );
787
-
788
- if (config.errorReportingRepository) {
789
- process.env.TDPM_ERROR_REPORT_REPOSITORY =
790
- config.errorReportingRepository;
791
- }
792
-
793
- const projectName = config.projectName ?? 'default';
794
- const localStorageRepository = new LocalStorageRepository();
795
- const cachePath = projectCacheDirectory(projectName);
796
- const localStorageCacheRepository = new LocalStorageCacheRepository(
797
- localStorageRepository,
798
- cachePath,
799
- );
800
- const githubRepositoryParams = buildGithubRepositoryParams(
801
- localStorageRepository,
802
- token,
803
- );
804
- const apiV3IssueRepository = new ApiV3IssueRepository(
805
- ...githubRepositoryParams,
806
- );
807
- const restIssueRepository = new RestIssueRepository(
808
- ...githubRepositoryParams,
809
- );
810
- const graphqlProjectItemRepository = new GraphqlProjectItemRepository(
811
- ...githubRepositoryParams,
812
- );
813
- const projectRepository = new GraphqlProjectRepository(
814
- ...githubRepositoryParams,
815
- localStorageCacheRepository,
816
- );
817
- const issueRepository = new ApiV3CheerioRestIssueRepository(
818
- apiV3IssueRepository,
819
- restIssueRepository,
820
- graphqlProjectItemRepository,
821
- localStorageCacheRepository,
822
- projectRepository,
823
- new SystemDateRepository(),
824
- ...githubRepositoryParams,
825
- );
826
- const issueCommentRepository = new GitHubIssueCommentRepository(token);
827
-
828
- const rawAllowedIssueAuthors = config.allowedIssueAuthors;
829
- const allowedIssueAuthors = rawAllowedIssueAuthors
830
- ? rawAllowedIssueAuthors
831
- .split(',')
832
- .map((s) => s.trim())
833
- .filter(Boolean)
834
- : null;
835
-
836
- const useCase = new CheckIssueReviewReadinessUseCase(
837
- issueRepository,
838
- issueCommentRepository,
839
- );
840
-
841
- const result = await useCase.run({
842
- issueUrl: options.issueUrl,
843
- allowedIssueAuthors,
844
- labelsAsLlmAgentName: config.labelsAsLlmAgentName ?? null,
845
- labelsNotRequiringPullRequest:
846
- config.labelsNotRequiringPullRequest ?? null,
847
- developerAgentNames: config.developerAgentNames ?? null,
848
- });
849
-
850
- process.stdout.write(`${JSON.stringify(result)}\n`);
851
- });
852
-
853
- const runServeWeb = async (options: ServeWebOptions): Promise<void> => {
854
- const config = loadConfigFile(options.configFilePath);
855
-
856
- const accessToken = config.consoleAccessToken;
857
- if (!accessToken) {
858
- console.error(
859
- 'consoleAccessToken is required. Provide it via the config file.',
860
- );
861
- process.exit(1);
862
- }
863
-
864
- let port = DEFAULT_WEB_PORT;
865
- if (options.port !== undefined) {
866
- const parsedPort = Number(options.port);
867
- if (
868
- !Number.isFinite(parsedPort) ||
869
- !Number.isInteger(parsedPort) ||
870
- parsedPort <= 0 ||
871
- parsedPort > 65535
872
- ) {
873
- console.error(
874
- 'Invalid value for --port. It must be a positive integer between 1 and 65535.',
875
- );
876
- process.exit(1);
877
- }
878
- port = parsedPort;
879
- }
880
-
881
- const token = process.env.GH_TOKEN;
882
- if (!token) {
883
- console.error('GH_TOKEN environment variable is required');
884
- process.exit(1);
885
- }
886
-
887
- const projectUrl = config.projectUrl;
888
- if (!projectUrl) {
889
- console.error(
890
- 'projectUrl is required. Provide it via the config file or project README.',
891
- );
892
- process.exit(1);
893
- }
894
-
895
- const dashboardProjectNames = parseDashboardProjectNames(
896
- options.dashboardProjectNames,
897
- );
898
-
899
- const projectName = config.projectName ?? 'default';
900
- const localStorageRepository = new LocalStorageRepository();
901
- const cachePath = projectCacheDirectory(projectName);
902
- const localStorageCacheRepository = new LocalStorageCacheRepository(
903
- localStorageRepository,
904
- cachePath,
905
- );
906
- const githubRepositoryParams = buildGithubRepositoryParams(
907
- localStorageRepository,
908
- token,
909
- );
910
- const projectRepository = new GraphqlProjectRepository(
911
- ...githubRepositoryParams,
912
- localStorageCacheRepository,
913
- );
914
- const apiV3IssueRepository = new ApiV3IssueRepository(
915
- ...githubRepositoryParams,
916
- );
917
- const restIssueRepository = new RestIssueRepository(
918
- ...githubRepositoryParams,
919
- );
920
- const graphqlProjectItemRepository = new GraphqlProjectItemRepository(
921
- ...githubRepositoryParams,
922
- );
923
- const issueRepository = new ApiV3CheerioRestIssueRepository(
924
- apiV3IssueRepository,
925
- restIssueRepository,
926
- graphqlProjectItemRepository,
927
- localStorageCacheRepository,
928
- projectRepository,
929
- new SystemDateRepository(),
930
- ...githubRepositoryParams,
931
- );
932
-
933
- const resolveGithubToken = createConsoleGithubTokenResolver(
934
- token,
935
- config.consoleProjects ?? null,
936
- config.consoleGithubTokenFileDir ?? null,
937
- (filePath: string) => fs.readFileSync(filePath, 'utf8'),
938
- );
939
- const issueRepositoryByToken = new Map<string, IssueRepository>();
940
- issueRepositoryByToken.set(token, issueRepository);
941
- const buildIssueRepositoryForToken = (
942
- repositoryToken: string,
943
- ): IssueRepository => {
944
- const alreadyBuilt = issueRepositoryByToken.get(repositoryToken);
945
- if (alreadyBuilt !== undefined) {
946
- return alreadyBuilt;
947
- }
948
- const repositoryParams = buildGithubRepositoryParams(
949
- localStorageRepository,
950
- repositoryToken,
951
- );
952
- const built = new ApiV3CheerioRestIssueRepository(
953
- new ApiV3IssueRepository(...repositoryParams),
954
- new RestIssueRepository(...repositoryParams),
955
- new GraphqlProjectItemRepository(...repositoryParams),
956
- localStorageCacheRepository,
957
- new GraphqlProjectRepository(
958
- ...repositoryParams,
959
- localStorageCacheRepository,
960
- ),
961
- new SystemDateRepository(),
962
- ...repositoryParams,
963
- );
964
- issueRepositoryByToken.set(repositoryToken, built);
965
- return built;
966
- };
967
- const resolveIssueRepository =
968
- createConsoleIssueRepositoryResolver<IssueRepository>(
969
- resolveGithubToken,
970
- buildIssueRepositoryForToken,
971
- );
972
- const resolveGithubTokenForItemUrl =
973
- createConsoleGithubTokenResolverByItemUrl(resolveGithubToken);
974
- const projectRepositoryByToken = new Map<string, GraphqlProjectRepository>();
975
- projectRepositoryByToken.set(token, projectRepository);
976
- const buildProjectRepositoryForToken = (
977
- repositoryToken: string,
978
- ): GraphqlProjectRepository => {
979
- const alreadyBuilt = projectRepositoryByToken.get(repositoryToken);
980
- if (alreadyBuilt !== undefined) {
981
- return alreadyBuilt;
982
- }
983
- const built = new GraphqlProjectRepository(
984
- ...buildGithubRepositoryParams(localStorageRepository, repositoryToken),
985
- localStorageCacheRepository,
986
- );
987
- projectRepositoryByToken.set(repositoryToken, built);
988
- return built;
989
- };
990
- const resolveProjectRepository =
991
- createConsoleProjectRepositoryResolver<GraphqlProjectRepository>(
992
- resolveGithubToken,
993
- buildProjectRepositoryForToken,
994
- );
995
-
996
- const pjcodeToProjectUrl = buildPjcodeToProjectUrl(
997
- projectName,
998
- projectUrl,
999
- config.consoleProjects ?? null,
1000
- );
1001
- const isPjcodeConfigured = createPjcodeConfigChecker(pjcodeToProjectUrl);
1002
- const {
1003
- resolve: resolveProject,
1004
- invalidate: invalidateProject,
1005
- updateEntry: updateProjectCacheEntry,
1006
- } = createConsoleProjectResolver(
1007
- pjcodeToProjectUrl,
1008
- createConsoleProjectLoader(
1009
- resolveProjectRepository,
1010
- (targetProjectId: string) =>
1011
- issueRepository.getCachedProject(targetProjectId),
1012
- (message: string) => console.error(message),
1013
- ),
1014
- );
1015
-
1016
- const uiDistDir = path.join(__dirname, '..', 'console', 'ui-dist');
1017
- const consoleDataOutputDir = options.consoleDataOutputDir ?? null;
1018
- const inTmuxDataDir = options.inTmuxDataDir ?? DEFAULT_IN_TMUX_DATA_DIR;
1019
- const dashboardDir = options.dashboardDir ?? DEFAULT_DASHBOARD_DIR;
1020
- const dashboardDataDir =
1021
- options.dashboardDataDir ?? DEFAULT_DASHBOARD_DATA_DIR;
1022
- const fleetConfigFilePath = resolveFleetConfigFilePath(
1023
- options.fleetConfigFilePath ?? null,
1024
- );
1025
- const workflowImprovementIssueUrl =
1026
- loadWorkflowImprovementIssueUrl(fleetConfigFilePath);
1027
-
1028
- await startWebServer({
1029
- accessToken,
1030
- uiDistDir,
1031
- consoleDataOutputDir,
1032
- inTmuxDataDir,
1033
- dashboardDir,
1034
- dashboardDataDir,
1035
- dashboardProjectNames,
1036
- workflowImprovementIssueUrl,
1037
- resolveGithubToken,
1038
- issueRepository,
1039
- resolveIssueRepository,
1040
- resolveProject,
1041
- isPjcodeConfigured,
1042
- resolveProjectRepository,
1043
- invalidateProject,
1044
- updateProjectCacheEntry,
1045
- issueAttachmentRepository: new LocalCommandIssueAttachmentRepository(
1046
- new NodeLocalCommandRunner(),
1047
- resolveGithubTokenForItemUrl,
1048
- ),
1049
- issueTitleStateCache: new IssueTitleStateCache(),
1050
- pullRequestStatusCache: new PullRequestStatusCache(),
1051
- port,
1052
- enableAirplaneMode: options.enableAirplaneMode === true,
1053
- });
1054
- console.log(`TDPM web server listening on port ${port}`);
1055
- };
1056
-
1057
- const addServeWebOptions = (command: Command): Command =>
1058
- command
1059
- .requiredOption(
1060
- '--configFilePath <path>',
1061
- 'Path to config file for tower defence management',
1062
- )
1063
- .option(
1064
- '--port <number>',
1065
- `Port for the web HTTP server (default: ${DEFAULT_WEB_PORT})`,
1066
- )
1067
- .option(
1068
- '--consoleDataOutputDir <path>',
1069
- 'Directory where console data files are written and served from',
1070
- )
1071
- .option(
1072
- '--inTmuxDataDir <path>',
1073
- `Directory containing the flat in-tmux-by-human static JSON files served at /in-tmux-by-human/*.json (default: ${DEFAULT_IN_TMUX_DATA_DIR})`,
1074
- )
1075
- .option(
1076
- '--dashboardDir <path>',
1077
- `Directory containing the static dashboard HTML fragment tdpm.txt served at /tdpm.txt when compose mode is not active (default: ${DEFAULT_DASHBOARD_DIR})`,
1078
- )
1079
- .option(
1080
- '--dashboardDataDir <path>',
1081
- 'Directory containing the dashboard data files (projects/<projectName>.json, machine-status.json, token-status.json); when set and every required file is present the server composes the /tdpm.txt fragment from them at request time, otherwise it falls back to serving the static tdpm.txt from --dashboardDir (unset when not configured)',
1082
- )
1083
- .option(
1084
- '--dashboardProjectNames <names>',
1085
- 'Comma-separated project names, in display order, for the dashboard project grid; the display label of each project is its first 2 characters, which must be unique across the listed names',
1086
- )
1087
- .option('--enableAirplaneMode', 'Enable the airplane mode feature')
1088
- .option(
1089
- '--fleetConfigFilePath <path>',
1090
- 'Path to the fleet-wide YAML config file; falls back to the TDPM_FLEET_CONFIG environment variable. Reads workflowImprovementIssueUrl for the workflow improvement link shown in the console.',
1091
- );
1092
-
1093
- addServeWebOptions(program.command('serveWeb'))
1094
- .description(
1095
- 'Start the local TDPM web server (console tabs, dashboard, and in-tmux session list)',
1096
- )
1097
- .action(async (options: ServeWebOptions) => {
1098
- await runServeWeb(options);
1099
- });
1100
-
1101
- addServeWebOptions(program.command('serveConsole'))
1102
- .description('Deprecated alias for serveWeb. Use serveWeb instead.')
1103
- .action(async (options: ServeWebOptions) => {
1104
- await runServeWeb(options);
1105
- });
1106
-
1107
- program
1108
- .command('selectOauthToken')
1109
- .description(
1110
- 'Print exactly one Claude Code OAuth token chosen by a rate-limit-aware filter. Among rate-limit-eligible tokens the choice is weighted-random, with each token weighted by its per-token selectionWeight (default 1) multiplied by how urgent its 7d window is (the free share of that window times 168 divided by the hours left before it resets, with those hours floored at 1), so a token holding unused allowance that resets soon is chosen more often. When every eligible weight is identical, the choice stays deterministic and no random draw is made. The token string is written to stdout (pipeable); the per-candidate decision trace is written to stderr. Exits non-zero when no token passes the filter.',
1111
- )
1112
- .option(
1113
- '--tokenListJsonPath <path>',
1114
- 'Path to the JSON array of { name, token, selectionWeight? } records. selectionWeight is an optional positive number (default 1) that biases how often this token is chosen among rate-limit-eligible candidates; a smaller weight is chosen proportionally less often and never bypasses eligibility filtering or starves a sole eligible token. Falls back to the CLAUDE_CODE_OAUTH_TOKEN_LIST_JSON_PATH environment variable.',
1115
- )
1116
- .option(
1117
- '--cacheDir <path>',
1118
- 'Directory holding per-token rate-limit cache files. Falls back to the TDPM_RATELIMIT_CACHE_DIR environment variable, then to ${XDG_CACHE_HOME:-~/.cache}/tdpm/ratelimit.',
1119
- )
1120
- .action((options: SelectOauthTokenOptions) => {
1121
- const handler = new OauthTokenSelectHandler();
1122
- const output = handler.handle({
1123
- tokenListJsonPath: options.tokenListJsonPath ?? null,
1124
- cacheDirectory: options.cacheDir ?? null,
1125
- nowEpochSeconds: Date.now() / 1000,
1126
- });
1127
-
1128
- for (const line of output.diagnostics) {
1129
- console.error(line);
1130
- }
1131
-
1132
- if (output.selectedToken === null) {
1133
- process.exit(1);
1134
- }
1135
-
1136
- process.stdout.write(`${output.selectedToken}\n`);
1137
- });
1138
-
1139
- program
1140
- .command('selectLiveSessionOauthToken')
1141
- .description(
1142
- 'Print exactly one Claude Code OAuth token chosen for a new live interactive session. The choice is deterministic. Each rate-limit-eligible token gets a concurrent session limit of maxConcurrentSessionCount (default 10), scaled by its per-token selectionWeight (default 1). That limit is held at full value while the free share of the 5h window is at or above fullSpeedFiveHourFreeRatio (default 0.5) and is tapered in proportion below it, never dropping under 1; the 7d window never lowers the limit, so a weekly allowance that is about to expire is drained at full speed instead of being discarded unused. Among eligible tokens still under that limit the token whose 7d window resets soonest wins; ties go to the token carrying fewer live sessions (by distinct CLAUDE_CODE_SESSION_ID found in running Claude Code processes). When every eligible token is at its limit the soonest-resetting one is still returned. The token string is written to stdout (pipeable); the per-candidate decision trace is written to stderr. Exits non-zero when no token passes the filter.',
1143
- )
1144
- .option(
1145
- '--tokenListJsonPath <path>',
1146
- 'Path to the JSON array of { name, token, selectionWeight? } records. selectionWeight is an optional positive number (default 1) that scales this token concurrent live session limit; a smaller weight allows fewer simultaneous sessions and never bypasses eligibility filtering or starves a sole eligible token. Falls back to the CLAUDE_CODE_OAUTH_TOKEN_LIST_JSON_PATH environment variable.',
1147
- )
1148
- .option(
1149
- '--cacheDir <path>',
1150
- 'Directory holding per-token rate-limit cache files. Falls back to the TDPM_RATELIMIT_CACHE_DIR environment variable, then to ${XDG_CACHE_HOME:-~/.cache}/tdpm/ratelimit.',
1151
- )
1152
- .option(
1153
- '--fleetConfigFilePath <path>',
1154
- 'Path to the fleet-wide YAML config file holding the liveSessionOauthTokenSelection mapping (maxConcurrentSessionCount, fullSpeedFiveHourFreeRatio). Falls back to the TDPM_FLEET_CONFIG environment variable; when neither is set the built-in values are used. A key the file omits keeps its built-in value, and an unreadable file or an out-of-range value is reported as an error instead of being ignored.',
1155
- )
1156
- .action((options: SelectLiveSessionOauthTokenOptions) => {
1157
- const handler = new LiveSessionOauthTokenSelectHandler();
1158
- const output = handler.handle({
1159
- tokenListJsonPath: options.tokenListJsonPath ?? null,
1160
- cacheDirectory: options.cacheDir ?? null,
1161
- nowEpochSeconds: Date.now() / 1000,
1162
- selectionSettings: loadLiveSessionOauthTokenSelectionSettings(
1163
- resolveFleetConfigFilePath(options.fleetConfigFilePath ?? null),
1164
- ),
1165
- });
1166
-
1167
- for (const line of output.diagnostics) {
1168
- console.error(line);
1169
- }
1170
-
1171
- if (output.selectedToken === null) {
1172
- process.exit(1);
1173
- }
1174
-
1175
- process.stdout.write(`${output.selectedToken}\n`);
1176
- });
1177
-
1178
- program
1179
- .command('countInTmuxByHumanSessionsPerToken')
1180
- .description(
1181
- 'Print, per Claude Code OAuth token, the count of live interactive sessions (cl-launched Claude processes carrying CLAUDE_CODE_OAUTH_TOKEN and CLAUDE_CODE_SESSION_ID with a --name <issue-url> argument, excluding Take ownership spawns) whose issue is currently in GitHub Project Status "In Tmux by human". One tab-separated line per token (<tokenName>\\t<count>) is written to stdout; the decision trace is written to stderr. Token values are never printed.',
1182
- )
1183
- .requiredOption(
1184
- '--configFilePath <path>',
1185
- 'Path to config file for tower defence management',
1186
- )
1187
- .option('--projectUrl <url>', 'GitHub project URL (optional)')
1188
- .option(
1189
- '--tokenListJsonPath <path>',
1190
- 'Path to the JSON array of { name, token } records. Falls back to the claudeCodeOauthTokenListJsonPath config value, then to the CLAUDE_CODE_OAUTH_TOKEN_LIST_JSON_PATH environment variable.',
1191
- )
1192
- .action(async (options: CountInTmuxByHumanSessionsPerTokenOptions) => {
1193
- const token = process.env.GH_TOKEN;
1194
- if (!token) {
1195
- console.error('GH_TOKEN environment variable is required');
1196
- process.exit(1);
1197
- }
1198
-
1199
- const configFileValues = loadConfigFile(options.configFilePath);
1200
-
1201
- const cliOverrides: ConfigFile = {
1202
- projectUrl: options.projectUrl,
1203
- };
1204
-
1205
- const tempProjectUrl =
1206
- cliOverrides.projectUrl ?? configFileValues.projectUrl;
1207
-
1208
- let readmeOverrides: ConfigFile = {};
1209
- if (tempProjectUrl) {
1210
- const readme = await fetchProjectReadme(tempProjectUrl, token);
1211
- if (readme) {
1212
- readmeOverrides = parseProjectReadmeConfig(readme, tempProjectUrl);
1213
- }
1214
- }
1215
-
1216
- const config = mergeConfigs(
1217
- configFileValues,
1218
- cliOverrides,
1219
- readmeOverrides,
1220
- );
1221
-
1222
- const projectUrl = config.projectUrl;
1223
- if (!projectUrl) {
1224
- console.error(
1225
- 'projectUrl is required. Provide via --projectUrl, config file, or project README.',
1226
- );
1227
- process.exit(1);
1228
- }
1229
-
1230
- const projectName = config.projectName ?? 'default';
1231
- const localStorageRepository = new LocalStorageRepository();
1232
- const cachePath = projectCacheDirectory(projectName);
1233
- const localStorageCacheRepository = new LocalStorageCacheRepository(
1234
- localStorageRepository,
1235
- cachePath,
1236
- );
1237
- const githubRepositoryParams = buildGithubRepositoryParams(
1238
- localStorageRepository,
1239
- token,
1240
- );
1241
- const projectRepository = new GraphqlProjectRepository(
1242
- ...githubRepositoryParams,
1243
- localStorageCacheRepository,
1244
- );
1245
- const apiV3IssueRepository = new ApiV3IssueRepository(
1246
- ...githubRepositoryParams,
1247
- );
1248
- const restIssueRepository = new RestIssueRepository(
1249
- ...githubRepositoryParams,
1250
- );
1251
- const graphqlProjectItemRepository = new GraphqlProjectItemRepository(
1252
- ...githubRepositoryParams,
1253
- );
1254
- const issueRepository = new ApiV3CheerioRestIssueRepository(
1255
- apiV3IssueRepository,
1256
- restIssueRepository,
1257
- graphqlProjectItemRepository,
1258
- localStorageCacheRepository,
1259
- projectRepository,
1260
- new SystemDateRepository(),
1261
- ...githubRepositoryParams,
1262
- );
1263
-
1264
- const projectId = await projectRepository.findProjectIdByUrl(projectUrl);
1265
- if (!projectId) {
1266
- console.error(`No project found for projectUrl ${projectUrl}`);
1267
- process.exit(1);
1268
- }
1269
-
1270
- const { issues } = await issueRepository.getAllIssues(projectId);
1271
-
1272
- const handler = new InTmuxByHumanSessionTokenCountHandler();
1273
- const output = handler.handle({
1274
- tokenListJsonPath:
1275
- options.tokenListJsonPath ??
1276
- config.claudeCodeOauthTokenListJsonPath ??
1277
- null,
1278
- issues,
1279
- });
1280
-
1281
- for (const line of output.diagnostics) {
1282
- console.error(line);
1283
- }
1284
-
1285
- for (const line of output.lines) {
1286
- process.stdout.write(`${line}\n`);
1287
- }
1288
- });
1289
-
1290
- program
1291
- .command('killTmuxSession')
1292
- .description(
1293
- 'Cleanly kill a tmux session by running tmux kill-session and stopping its cl-*.scope systemd --user unit. Use --session <name> to kill another named session, or --self to terminate the current session from inside it.',
1294
- )
1295
- .option('--session <name>', 'Name of the tmux session to kill')
1296
- .option(
1297
- '--self',
1298
- 'Terminate the current session by stopping its own cl-*.scope systemd user unit, derived from /proc/self/cgroup',
1299
- )
1300
- .action(async (options: KillTmuxSessionOptions) => {
1301
- if (!options.session && !options.self) {
1302
- console.error('Either --session <name> or --self is required');
1303
- process.exit(1);
1304
- }
1305
- if (options.session && options.self) {
1306
- console.error('--session and --self cannot be used together');
1307
- process.exit(1);
1308
- }
1309
-
1310
- const localCommandRunner = new NodeLocalCommandRunner();
1311
- const tmuxSessionRepository = new NodeTmuxSessionRepository(
1312
- localCommandRunner,
1313
- );
1314
-
1315
- if (options.self) {
1316
- await tmuxSessionRepository.killOwnSession();
1317
- } else if (options.session) {
1318
- await tmuxSessionRepository.killSession(options.session);
1319
- }
1320
- });
1321
-
1322
- program
1323
- .command('ownerCallFileAppend')
1324
- .description(
1325
- 'Append one owner call as a YAML document to the per-session owner call file. The project the session belongs to is resolved from the in-tmux-by-human data in the data directory, and a session no project lists is written under NA. The file is created when it does not exist, and every later call is appended after the existing documents so the oldest call stays first. Nothing is written to stdout on success.',
1326
- )
1327
- .requiredOption('--session <name>', 'tmux session name that raised the call')
1328
- .requiredOption(
1329
- '--calledAt <timestamp>',
1330
- 'Time the call was raised, as UTC ISO-8601 with second precision and a trailing Z',
1331
- )
1332
- .requiredOption(
1333
- '--body-file <path>',
1334
- 'Path to the file holding the call body; the body is read from a file because it is multi-line and can be long',
1335
- )
1336
- .option(
1337
- '--inTmuxDataDir <path>',
1338
- `Directory the owner call files are written under, the same directory serveWeb serves them from (default: ${DEFAULT_IN_TMUX_DATA_DIR})`,
1339
- )
1340
- .action((options: OwnerCallFileAppendOptions) => {
1341
- if (!isOwnerCallCalledAtValid(options.calledAt)) {
1342
- console.error(
1343
- '--calledAt must be a UTC ISO-8601 timestamp with second precision and a trailing Z, for example 2026-08-14T04:22:28Z',
1344
- );
1345
- return process.exit(1);
1346
- }
1347
- const dataDir = options.inTmuxDataDir ?? DEFAULT_IN_TMUX_DATA_DIR;
1348
- ownerCallFileAppend({
1349
- dataDir,
1350
- projectCode: ownerCallProjectCodeInInTmuxByHumanData(
1351
- dataDir,
1352
- options.session,
1353
- ),
1354
- ownerCall: {
1355
- sessionName: options.session,
1356
- calledAt: options.calledAt,
1357
- body: fs.readFileSync(options.bodyFile, 'utf-8'),
1358
- },
1359
- });
1360
- });
1361
-
1362
- program
1363
- .command('ownerCallFileDelete')
1364
- .description(
1365
- 'Delete the owner call file of one session, whichever project directory holds it, so a session that moved between projects after its call was appended leaves nothing behind. It succeeds when the file is already absent, so a reset that runs twice is not an error. Nothing is written to stdout on success.',
1366
- )
1367
- .requiredOption('--session <name>', 'tmux session name that raised the call')
1368
- .option(
1369
- '--inTmuxDataDir <path>',
1370
- `Directory the owner call files are written under, the same directory serveWeb serves them from (default: ${DEFAULT_IN_TMUX_DATA_DIR})`,
1371
- )
1372
- .action((options: OwnerCallFileDeleteOptions) => {
1373
- ownerCallFileDeleteInEveryProject({
1374
- dataDir: options.inTmuxDataDir ?? DEFAULT_IN_TMUX_DATA_DIR,
1375
- sessionName: options.session,
1376
- });
1377
- });
1378
-
1379
- program
1380
- .command('attachOrCreate')
1381
- .description(
1382
- 'Attach to an existing tmux session registered for the given issue URL, or create a new one. Looks up the cl session registry via cl-scope-lib.sh to find a registered session name; if that session is still alive it attaches to it, otherwise creates a new interactive session running cl for the issue URL.',
1383
- )
1384
- .requiredOption(
1385
- '--issueUrl <url>',
1386
- 'GitHub issue URL to attach to or create a session for',
1387
- )
1388
- .action(async (options: AttachOrCreateOptions) => {
1389
- const localCommandRunner = new NodeLocalCommandRunner();
1390
- const tmuxSessionRepository = new NodeTmuxSessionRepository(
1391
- localCommandRunner,
1392
- );
1393
- const scopeLibPath = resolveScopeLibPath();
1394
- await tmuxSessionRepository.attachOrCreateInteractiveSession(
1395
- options.issueUrl,
1396
- scopeLibPath,
1397
- );
1398
- });
1399
-
1400
- export const reportFatalErrorAndExit = (error: unknown): void => {
1401
- console.error(error);
1402
- process.exit(1);
1403
- };
1404
-
1405
- const buildCliErrorReporter = (): {
1406
- useCase: CliErrorReportUseCase;
1407
- owner: string;
1408
- repo: string;
1409
- } | null => {
1410
- const token = process.env.GH_TOKEN;
1411
- const targetRepo = process.env.TDPM_ERROR_REPORT_REPOSITORY;
1412
- if (!token || !targetRepo) {
1413
- return null;
1414
- }
1415
- const slashIndex = targetRepo.indexOf('/');
1416
- if (slashIndex <= 0 || slashIndex === targetRepo.length - 1) {
1417
- return null;
1418
- }
1419
- const owner = targetRepo.slice(0, slashIndex);
1420
- const repo = targetRepo.slice(slashIndex + 1);
1421
- const localStorageRepository = new LocalStorageRepository();
1422
- const githubRepositoryParams = buildGithubRepositoryParams(
1423
- localStorageRepository,
1424
- token,
1425
- );
1426
- const apiV3IssueRepository = new ApiV3IssueRepository(
1427
- ...githubRepositoryParams,
1428
- );
1429
- const restIssueRepository = new RestIssueRepository(
1430
- ...githubRepositoryParams,
1431
- );
1432
- const useCase = new CliErrorReportUseCase({
1433
- searchIssue: apiV3IssueRepository.searchIssue.bind(apiV3IssueRepository),
1434
- createNewIssue:
1435
- restIssueRepository.createNewIssue.bind(restIssueRepository),
1436
- createCommentByUrl: async (issueOrPrUrl: string, commentBody: string) => {
1437
- await restIssueRepository.createComment(issueOrPrUrl, commentBody);
1438
- },
1439
- });
1440
- return { useCase, owner, repo };
1441
- };
1442
-
1443
- export const runCliProgram = async (
1444
- argv: string[],
1445
- handleFatalError: (error: unknown) => void,
1446
- ): Promise<void> => {
1447
- let reported = false;
1448
-
1449
- const safeReport = async (error: unknown): Promise<void> => {
1450
- if (reported) {
1451
- return;
1452
- }
1453
- reported = true;
1454
- const reporter = buildCliErrorReporter();
1455
- if (!reporter) {
1456
- return;
1457
- }
1458
- await reporter.useCase.run({
1459
- error,
1460
- owner: reporter.owner,
1461
- repo: reporter.repo,
1462
- commandLine: argv.join(' '),
1463
- });
1464
- };
1465
-
1466
- process.on('uncaughtException', (error: Error) => {
1467
- void safeReport(error).then(() => {
1468
- reportFatalErrorAndExit(error);
1469
- });
1470
- });
1471
- process.on('unhandledRejection', (reason: unknown) => {
1472
- void safeReport(reason).then(() => {
1473
- reportFatalErrorAndExit(reason);
1474
- });
1475
- });
1476
-
1477
- try {
1478
- await program.parseAsync(argv);
1479
- } catch (error) {
1480
- await safeReport(error);
1481
- handleFatalError(error);
1482
- }
1483
- };
1484
-
1485
- /* istanbul ignore next */
1486
- if (process.argv && require.main === module) {
1487
- void runCliProgram(process.argv, reportFatalErrorAndExit);
1488
- }