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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (795) hide show
  1. package/bin/adapter/entry-points/cli/index.js +1 -3
  2. package/bin/adapter/entry-points/cli/index.js.map +1 -1
  3. package/bin/adapter/entry-points/console/consoleOperationApi.js +6 -12
  4. package/bin/adapter/entry-points/console/consoleOperationApi.js.map +1 -1
  5. package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js +1 -1
  6. package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js.map +1 -1
  7. package/bin/adapter/repositories/issue/RestIssueRepository.js +9 -2
  8. package/bin/adapter/repositories/issue/RestIssueRepository.js.map +1 -1
  9. package/package.json +5 -1
  10. package/types/adapter/entry-points/cli/index.d.ts.map +1 -1
  11. package/types/adapter/entry-points/console/consoleOperationApi.d.ts.map +1 -1
  12. package/types/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.d.ts +1 -1
  13. package/types/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.d.ts.map +1 -1
  14. package/types/adapter/repositories/issue/RestIssueRepository.d.ts +5 -1
  15. package/types/adapter/repositories/issue/RestIssueRepository.d.ts.map +1 -1
  16. package/types/domain/usecases/adapter-interfaces/IssueRepository.d.ts +1 -1
  17. package/types/domain/usecases/adapter-interfaces/IssueRepository.d.ts.map +1 -1
  18. package/.env.example +0 -7
  19. package/.gitattributes +0 -2
  20. package/.github/CODEOWNERS +0 -6
  21. package/.github/copilot-instructions.md +0 -6
  22. package/.github/dependabot.yml +0 -19
  23. package/.github/instructions/code-review.instructions.md +0 -50
  24. package/.github/workflows/api-created_issue_pr.yml +0 -97
  25. package/.github/workflows/ci-failure-issue-creator.yml +0 -48
  26. package/.github/workflows/close-manual-prs.yml +0 -80
  27. package/.github/workflows/codeql.yml +0 -107
  28. package/.github/workflows/commit-lint.yml +0 -85
  29. package/.github/workflows/configs/commitlint.config.cjs +0 -32
  30. package/.github/workflows/configs/commitlint.config.js +0 -32
  31. package/.github/workflows/console-ui.yml +0 -68
  32. package/.github/workflows/create-pr.yml +0 -116
  33. package/.github/workflows/empty-format-test-job.yml +0 -34
  34. package/.github/workflows/format.yml +0 -28
  35. package/.github/workflows/publish.yml +0 -111
  36. package/.github/workflows/secret-scan.yml +0 -51
  37. package/.github/workflows/test.yml +0 -58
  38. package/.github/workflows/umino-project.yml +0 -207
  39. package/.gitleaks.toml +0 -22
  40. package/.prettierignore +0 -31
  41. package/.prettierrc +0 -5
  42. package/CHANGELOG.md +0 -4162
  43. package/CONTRIBUTING.md +0 -60
  44. package/bin/adapter/entry-points/handlers/resolveUnansweredOwnerCalls.js +0 -12
  45. package/bin/adapter/entry-points/handlers/resolveUnansweredOwnerCalls.js.map +0 -1
  46. package/bin/adapter/repositories/FileSystemSilentSessionNotifiedStateRepository.js +0 -125
  47. package/bin/adapter/repositories/FileSystemSilentSessionNotifiedStateRepository.js.map +0 -1
  48. package/bin/adapter/repositories/issue/issueTimelineUtils.js +0 -38
  49. package/bin/adapter/repositories/issue/issueTimelineUtils.js.map +0 -1
  50. package/bin/domain/entities/UnansweredOwnerCall.js +0 -3
  51. package/bin/domain/entities/UnansweredOwnerCall.js.map +0 -1
  52. package/bin/domain/entities/WorkingTime.js +0 -3
  53. package/bin/domain/entities/WorkingTime.js.map +0 -1
  54. package/bin/domain/usecases/ChangeStatusLongInReviewIssueUseCase.js +0 -37
  55. package/bin/domain/usecases/ChangeStatusLongInReviewIssueUseCase.js.map +0 -1
  56. package/bin/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.js +0 -118
  57. package/bin/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.js.map +0 -1
  58. package/bin/domain/usecases/GenerateWorkingTimeReportUseCase.js +0 -180
  59. package/bin/domain/usecases/GenerateWorkingTimeReportUseCase.js.map +0 -1
  60. package/bin/domain/usecases/TriagerApprovalDispatchUseCase.js +0 -160
  61. package/bin/domain/usecases/TriagerApprovalDispatchUseCase.js.map +0 -1
  62. package/bin/domain/usecases/adapter-interfaces/SilentSessionNotifiedStateRepository.js +0 -3
  63. package/bin/domain/usecases/adapter-interfaces/SilentSessionNotifiedStateRepository.js.map +0 -1
  64. package/bin/domain/usecases/awaitingOwnerApprovalMessage.js +0 -7
  65. package/bin/domain/usecases/awaitingOwnerApprovalMessage.js.map +0 -1
  66. package/bin/domain/usecases/findLastAgentDeclaringReport.js +0 -12
  67. package/bin/domain/usecases/findLastAgentDeclaringReport.js.map +0 -1
  68. package/bin/domain/usecases/isPullRequestDeclaredUnnecessary.js +0 -25
  69. package/bin/domain/usecases/isPullRequestDeclaredUnnecessary.js.map +0 -1
  70. package/bin/domain/usecases/isWaitingForOwnerApproval.js +0 -16
  71. package/bin/domain/usecases/isWaitingForOwnerApproval.js.map +0 -1
  72. package/bin/domain/usecases/returnedToAwaitingWorkspaceMessage.js +0 -7
  73. package/bin/domain/usecases/returnedToAwaitingWorkspaceMessage.js.map +0 -1
  74. package/commitlint.config.js +0 -6
  75. package/eslint.config.mjs +0 -76
  76. package/jest.config.js +0 -84
  77. package/jest.setup.js +0 -1
  78. package/lib/buffer-equal-constant-time-compat/index.js +0 -17
  79. package/lib/buffer-equal-constant-time-compat/index.test.js +0 -54
  80. package/lib/buffer-equal-constant-time-compat/package.json +0 -5
  81. package/lib/typescript-compat/bin/tsc +0 -2
  82. package/lib/typescript-compat/bin/tsserver +0 -2
  83. package/lib/typescript-compat/lib/typescript.js +0 -1
  84. package/lib/typescript-compat/package.json +0 -13
  85. package/renovate.json +0 -46
  86. package/scripts/copyConsoleUiDist.mjs +0 -35
  87. package/scripts/defaultBranchTipVerify.sh +0 -23
  88. package/scripts/testWorkflowRunVerify.sh +0 -47
  89. package/scripts/verifyConsoleUiDist.mjs +0 -96
  90. package/src/adapter/ci/consoleUiWorkflowTimeout.test.ts +0 -61
  91. package/src/adapter/ci/publishTestWorkflowGate.test.ts +0 -653
  92. package/src/adapter/ci/workflowRunCancellation.test.ts +0 -72
  93. package/src/adapter/entry-points/cli/fleetConfig.test.ts +0 -553
  94. package/src/adapter/entry-points/cli/fleetConfig.ts +0 -266
  95. package/src/adapter/entry-points/cli/index.test.ts +0 -2837
  96. package/src/adapter/entry-points/cli/index.ts +0 -1488
  97. package/src/adapter/entry-points/cli/projectConfig.test.ts +0 -342
  98. package/src/adapter/entry-points/cli/projectConfig.ts +0 -500
  99. package/src/adapter/entry-points/console/consoleAirplaneSnapshotApi.test.ts +0 -658
  100. package/src/adapter/entry-points/console/consoleAirplaneSnapshotApi.ts +0 -482
  101. package/src/adapter/entry-points/console/consoleDataDelivery.test.ts +0 -222
  102. package/src/adapter/entry-points/console/consoleDataDelivery.ts +0 -134
  103. package/src/adapter/entry-points/console/consoleDoneStore.test.ts +0 -169
  104. package/src/adapter/entry-points/console/consoleDoneStore.ts +0 -139
  105. package/src/adapter/entry-points/console/consoleGithubTokenResolver.test.ts +0 -275
  106. package/src/adapter/entry-points/console/consoleGithubTokenResolver.ts +0 -113
  107. package/src/adapter/entry-points/console/consoleImageProxy.test.ts +0 -140
  108. package/src/adapter/entry-points/console/consoleImageProxy.ts +0 -111
  109. package/src/adapter/entry-points/console/consoleItemUrlLookup.test.ts +0 -63
  110. package/src/adapter/entry-points/console/consoleItemUrlLookup.ts +0 -66
  111. package/src/adapter/entry-points/console/consoleOperationApi.test.ts +0 -2523
  112. package/src/adapter/entry-points/console/consoleOperationApi.ts +0 -936
  113. package/src/adapter/entry-points/console/consoleProjectResolver.test.ts +0 -246
  114. package/src/adapter/entry-points/console/consoleProjectResolver.ts +0 -111
  115. package/src/adapter/entry-points/console/consoleReadApi.test.ts +0 -714
  116. package/src/adapter/entry-points/console/consoleReadApi.ts +0 -361
  117. package/src/adapter/entry-points/console/consoleTabNames.test.ts +0 -52
  118. package/src/adapter/entry-points/console/consoleTabNames.ts +0 -37
  119. package/src/adapter/entry-points/console/consoleUiDistSync.test.ts +0 -66
  120. package/src/adapter/entry-points/console/dashboardComposeService.test.ts +0 -595
  121. package/src/adapter/entry-points/console/dashboardComposeService.ts +0 -256
  122. package/src/adapter/entry-points/console/dashboardEmitterComposerKey.test.ts +0 -180
  123. package/src/adapter/entry-points/console/ensureConsoleRunning.test.ts +0 -115
  124. package/src/adapter/entry-points/console/ensureConsoleRunning.ts +0 -64
  125. package/src/adapter/entry-points/console/ui/.storybook/main.ts +0 -12
  126. package/src/adapter/entry-points/console/ui/.storybook/preview.ts +0 -15
  127. package/src/adapter/entry-points/console/ui/biome.json +0 -53
  128. package/src/adapter/entry-points/console/ui/components.json +0 -20
  129. package/src/adapter/entry-points/console/ui/e2e/consoleScenario.spec.ts +0 -725
  130. package/src/adapter/entry-points/console/ui/e2e/consoleTestHarness.ts +0 -831
  131. package/src/adapter/entry-points/console/ui/e2e/playwright.config.ts +0 -30
  132. package/src/adapter/entry-points/console/ui/e2e/tsconfig.json +0 -18
  133. package/src/adapter/entry-points/console/ui/index.html +0 -12
  134. package/src/adapter/entry-points/console/ui/jest-globals.cjs +0 -26
  135. package/src/adapter/entry-points/console/ui/jest.setup.ts +0 -1
  136. package/src/adapter/entry-points/console/ui/jest.styleMock.js +0 -1
  137. package/src/adapter/entry-points/console/ui/public/sw.js +0 -60
  138. package/src/adapter/entry-points/console/ui/src/components/ui/badge.stories.tsx +0 -35
  139. package/src/adapter/entry-points/console/ui/src/components/ui/badge.tsx +0 -28
  140. package/src/adapter/entry-points/console/ui/src/components/ui/button.stories.tsx +0 -34
  141. package/src/adapter/entry-points/console/ui/src/components/ui/button.tsx +0 -50
  142. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleCopyCodeButton.stories.tsx +0 -28
  143. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleCopyCodeButton.test.tsx +0 -65
  144. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleCopyCodeButton.tsx +0 -19
  145. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleMarkdownContent.stories.tsx +0 -61
  146. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleMarkdownContent.test.tsx +0 -199
  147. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleMarkdownContent.tsx +0 -166
  148. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleMermaidDiagram.stories.tsx +0 -22
  149. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleMermaidDiagram.test.tsx +0 -74
  150. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleMermaidDiagram.tsx +0 -84
  151. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleMermaidDiagramModalScreen.stories.tsx +0 -27
  152. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleMermaidDiagramModalScreen.test.tsx +0 -85
  153. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleMermaidDiagramModalScreen.tsx +0 -97
  154. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleReferenceLink.stories.tsx +0 -76
  155. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleReferenceLink.test.tsx +0 -56
  156. package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleReferenceLink.tsx +0 -39
  157. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleChangedFileList.stories.tsx +0 -32
  158. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleChangedFileList.test.tsx +0 -105
  159. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleChangedFileList.tsx +0 -157
  160. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCommentComposer.stories.tsx +0 -68
  161. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCommentComposer.test.tsx +0 -612
  162. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCommentComposer.tsx +0 -276
  163. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCommentList.stories.tsx +0 -33
  164. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCommentList.test.tsx +0 -57
  165. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCommentList.tsx +0 -76
  166. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCommitList.stories.tsx +0 -25
  167. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCommitList.test.tsx +0 -55
  168. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCommitList.tsx +0 -49
  169. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCopyUrlButton.stories.tsx +0 -24
  170. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCopyUrlButton.test.tsx +0 -63
  171. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleCopyUrlButton.tsx +0 -19
  172. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleFetchFailureAlert.stories.tsx +0 -33
  173. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleFetchFailureAlert.test.tsx +0 -62
  174. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleFetchFailureAlert.tsx +0 -59
  175. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleFileDiff.stories.tsx +0 -38
  176. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleFileDiff.test.tsx +0 -151
  177. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleFileDiff.tsx +0 -245
  178. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleItemDetail.stories.tsx +0 -514
  179. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleItemDetail.test.tsx +0 -727
  180. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleItemDetail.tsx +0 -387
  181. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleItemIcon.stories.tsx +0 -82
  182. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleItemIcon.test.tsx +0 -52
  183. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleItemIcon.tsx +0 -32
  184. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsolePullRequestDetail.stories.tsx +0 -48
  185. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsolePullRequestDetail.test.tsx +0 -235
  186. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsolePullRequestDetail.tsx +0 -145
  187. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsolePullRequestMergeableChip.stories.tsx +0 -29
  188. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsolePullRequestMergeableChip.test.tsx +0 -30
  189. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsolePullRequestMergeableChip.tsx +0 -50
  190. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsolePullRequestStatusBadges.stories.tsx +0 -38
  191. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsolePullRequestStatusBadges.test.tsx +0 -54
  192. package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsolePullRequestStatusBadges.tsx +0 -60
  193. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleAirplaneModeButton.stories.tsx +0 -56
  194. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleAirplaneModeButton.test.tsx +0 -111
  195. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleAirplaneModeButton.tsx +0 -92
  196. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsolePanel.stories.tsx +0 -51
  197. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsolePanel.test.tsx +0 -59
  198. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsolePanel.tsx +0 -39
  199. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTabList.stories.tsx +0 -207
  200. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTabList.test.tsx +0 -332
  201. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTabList.tsx +0 -211
  202. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTimerSettingsModalDialog.stories.tsx +0 -49
  203. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTimerSettingsModalDialog.test.tsx +0 -157
  204. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTimerSettingsModalDialog.tsx +0 -118
  205. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleCopyStoryNameButton.stories.tsx +0 -23
  206. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleCopyStoryNameButton.test.tsx +0 -40
  207. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleCopyStoryNameButton.tsx +0 -17
  208. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleItemList.stories.tsx +0 -101
  209. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleItemList.test.tsx +0 -102
  210. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleItemList.tsx +0 -75
  211. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleItemSummary.stories.tsx +0 -40
  212. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleItemSummary.test.tsx +0 -213
  213. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleItemSummary.tsx +0 -115
  214. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleQueuedItemRow.stories.tsx +0 -50
  215. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleQueuedItemRow.test.tsx +0 -98
  216. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleQueuedItemRow.tsx +0 -66
  217. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleQueuedList.stories.tsx +0 -69
  218. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleQueuedList.test.tsx +0 -101
  219. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleQueuedList.tsx +0 -75
  220. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleStoryList.stories.tsx +0 -137
  221. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleStoryList.test.tsx +0 -554
  222. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleStoryList.tsx +0 -400
  223. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleStoryReorderPanel.stories.tsx +0 -30
  224. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleStoryReorderPanel.test.tsx +0 -111
  225. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleStoryReorderPanel.tsx +0 -91
  226. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleStorySummary.stories.tsx +0 -27
  227. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleStorySummary.test.tsx +0 -24
  228. package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleStorySummary.tsx +0 -28
  229. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleCloseActions.stories.tsx +0 -14
  230. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleCloseActions.test.tsx +0 -21
  231. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleCloseActions.tsx +0 -26
  232. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleDangerousActions.stories.tsx +0 -14
  233. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleDangerousActions.test.tsx +0 -40
  234. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleDangerousActions.tsx +0 -37
  235. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleErrorToast.stories.tsx +0 -33
  236. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleNextActionDateActions.stories.tsx +0 -20
  237. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleNextActionDateActions.test.tsx +0 -48
  238. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleNextActionDateActions.tsx +0 -42
  239. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleOfflinePendingActionsPanel.stories.tsx +0 -115
  240. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleOfflinePendingActionsPanel.test.tsx +0 -262
  241. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleOfflinePendingActionsPanel.tsx +0 -123
  242. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleOperationMenu.stories.tsx +0 -65
  243. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleOperationMenu.test.tsx +0 -159
  244. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleOperationMenu.tsx +0 -55
  245. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsolePullRequestReviewActions.stories.tsx +0 -20
  246. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsolePullRequestReviewActions.test.tsx +0 -93
  247. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsolePullRequestReviewActions.tsx +0 -45
  248. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleStatusActions.stories.tsx +0 -17
  249. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleStatusActions.test.tsx +0 -49
  250. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleStatusActions.tsx +0 -66
  251. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleUndoToast.stories.tsx +0 -47
  252. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleUndoToast.test.tsx +0 -95
  253. package/src/adapter/entry-points/console/ui/src/features/console/components/operations/ConsoleUndoToast.tsx +0 -62
  254. package/src/adapter/entry-points/console/ui/src/features/console/components/shared/ConsoleClipboardCopyButton.stories.tsx +0 -32
  255. package/src/adapter/entry-points/console/ui/src/features/console/components/shared/ConsoleClipboardCopyButton.test.tsx +0 -101
  256. package/src/adapter/entry-points/console/ui/src/features/console/components/shared/ConsoleClipboardCopyButton.tsx +0 -80
  257. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useAirplaneMode.test.ts +0 -304
  258. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useAirplaneMode.ts +0 -167
  259. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleActionQueue.test.ts +0 -498
  260. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleActionQueue.ts +0 -277
  261. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleCaches.test.ts +0 -99
  262. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleCaches.ts +0 -90
  263. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleDetailPrefetch.test.ts +0 -110
  264. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleDetailPrefetch.ts +0 -83
  265. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleFeaturesConfig.test.ts +0 -51
  266. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleFeaturesConfig.ts +0 -39
  267. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleItemDetailData.test.ts +0 -229
  268. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleItemDetailData.ts +0 -194
  269. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleNavigation.test.ts +0 -151
  270. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleNavigation.ts +0 -128
  271. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleOperations.test.ts +0 -629
  272. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleOperations.ts +0 -417
  273. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleOverlay.test.ts +0 -40
  274. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleOverlay.ts +0 -71
  275. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsolePjcode.test.ts +0 -24
  276. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsolePjcode.ts +0 -17
  277. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleProjectList.test.ts +0 -97
  278. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleProjectList.ts +0 -44
  279. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleProjectTimer.test.ts +0 -59
  280. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleProjectTimer.ts +0 -26
  281. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleReferenceLink.test.ts +0 -48
  282. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleReferenceLink.ts +0 -39
  283. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleResource.test.ts +0 -41
  284. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleResource.ts +0 -57
  285. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleSwipeNavigation.test.ts +0 -115
  286. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleSwipeNavigation.ts +0 -115
  287. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleTabData.test.ts +0 -546
  288. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleTabData.ts +0 -278
  289. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleTimerSettings.test.ts +0 -110
  290. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleTimerSettings.ts +0 -70
  291. package/src/adapter/entry-points/console/ui/src/features/console/lib/airplaneSnapshot.test.ts +0 -387
  292. package/src/adapter/entry-points/console/ui/src/features/console/lib/airplaneSnapshot.ts +0 -407
  293. package/src/adapter/entry-points/console/ui/src/features/console/lib/consoleApi.test.ts +0 -446
  294. package/src/adapter/entry-points/console/ui/src/features/console/lib/consoleApi.ts +0 -533
  295. package/src/adapter/entry-points/console/ui/src/features/console/lib/imageProxy.test.ts +0 -78
  296. package/src/adapter/entry-points/console/ui/src/features/console/lib/imageProxy.ts +0 -34
  297. package/src/adapter/entry-points/console/ui/src/features/console/lib/markdown.test.ts +0 -252
  298. package/src/adapter/entry-points/console/ui/src/features/console/lib/markdown.ts +0 -207
  299. package/src/adapter/entry-points/console/ui/src/features/console/lib/mermaidLoader.test.ts +0 -27
  300. package/src/adapter/entry-points/console/ui/src/features/console/lib/mermaidLoader.ts +0 -71
  301. package/src/adapter/entry-points/console/ui/src/features/console/lib/mermaidZoom.test.ts +0 -88
  302. package/src/adapter/entry-points/console/ui/src/features/console/lib/mermaidZoom.ts +0 -34
  303. package/src/adapter/entry-points/console/ui/src/features/console/lib/navigation.ts +0 -7
  304. package/src/adapter/entry-points/console/ui/src/features/console/lib/resourceCache.test.ts +0 -104
  305. package/src/adapter/entry-points/console/ui/src/features/console/lib/resourceCache.ts +0 -79
  306. package/src/adapter/entry-points/console/ui/src/features/console/logic/actionToast.test.ts +0 -200
  307. package/src/adapter/entry-points/console/ui/src/features/console/logic/actionToast.ts +0 -122
  308. package/src/adapter/entry-points/console/ui/src/features/console/logic/clipboard.test.ts +0 -90
  309. package/src/adapter/entry-points/console/ui/src/features/console/logic/clipboard.ts +0 -37
  310. package/src/adapter/entry-points/console/ui/src/features/console/logic/colors.test.ts +0 -34
  311. package/src/adapter/entry-points/console/ui/src/features/console/logic/colors.ts +0 -85
  312. package/src/adapter/entry-points/console/ui/src/features/console/logic/diff.test.ts +0 -81
  313. package/src/adapter/entry-points/console/ui/src/features/console/logic/diff.ts +0 -61
  314. package/src/adapter/entry-points/console/ui/src/features/console/logic/fileStatus.test.ts +0 -35
  315. package/src/adapter/entry-points/console/ui/src/features/console/logic/fileStatus.ts +0 -21
  316. package/src/adapter/entry-points/console/ui/src/features/console/logic/fileTree.test.ts +0 -96
  317. package/src/adapter/entry-points/console/ui/src/features/console/logic/fileTree.ts +0 -93
  318. package/src/adapter/entry-points/console/ui/src/features/console/logic/grouping.test.ts +0 -229
  319. package/src/adapter/entry-points/console/ui/src/features/console/logic/grouping.ts +0 -106
  320. package/src/adapter/entry-points/console/ui/src/features/console/logic/imageFile.test.ts +0 -18
  321. package/src/adapter/entry-points/console/ui/src/features/console/logic/imageFile.ts +0 -16
  322. package/src/adapter/entry-points/console/ui/src/features/console/logic/itemIcons.test.ts +0 -97
  323. package/src/adapter/entry-points/console/ui/src/features/console/logic/itemIcons.ts +0 -95
  324. package/src/adapter/entry-points/console/ui/src/features/console/logic/navigation.test.ts +0 -53
  325. package/src/adapter/entry-points/console/ui/src/features/console/logic/navigation.ts +0 -33
  326. package/src/adapter/entry-points/console/ui/src/features/console/logic/operations.test.ts +0 -72
  327. package/src/adapter/entry-points/console/ui/src/features/console/logic/operations.ts +0 -61
  328. package/src/adapter/entry-points/console/ui/src/features/console/logic/overlay.test.ts +0 -325
  329. package/src/adapter/entry-points/console/ui/src/features/console/logic/overlay.ts +0 -94
  330. package/src/adapter/entry-points/console/ui/src/features/console/logic/postedComments.test.ts +0 -44
  331. package/src/adapter/entry-points/console/ui/src/features/console/logic/postedComments.ts +0 -17
  332. package/src/adapter/entry-points/console/ui/src/features/console/logic/references.test.ts +0 -103
  333. package/src/adapter/entry-points/console/ui/src/features/console/logic/references.ts +0 -64
  334. package/src/adapter/entry-points/console/ui/src/features/console/logic/relativeTime.test.ts +0 -74
  335. package/src/adapter/entry-points/console/ui/src/features/console/logic/relativeTime.ts +0 -53
  336. package/src/adapter/entry-points/console/ui/src/features/console/logic/swipe.test.ts +0 -34
  337. package/src/adapter/entry-points/console/ui/src/features/console/logic/swipe.ts +0 -28
  338. package/src/adapter/entry-points/console/ui/src/features/console/logic/tabAdvance.test.ts +0 -89
  339. package/src/adapter/entry-points/console/ui/src/features/console/logic/tabAdvance.ts +0 -30
  340. package/src/adapter/entry-points/console/ui/src/features/console/logic/timerSettings.test.ts +0 -61
  341. package/src/adapter/entry-points/console/ui/src/features/console/logic/timerSettings.ts +0 -77
  342. package/src/adapter/entry-points/console/ui/src/features/console/logic/types.ts +0 -173
  343. package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsoleItemDetailContainer.test.tsx +0 -629
  344. package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsoleItemDetailContainer.tsx +0 -351
  345. package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsolePage.test.tsx +0 -1469
  346. package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsolePage.tsx +0 -736
  347. package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsoleReferenceLinkContainer.tsx +0 -25
  348. package/src/adapter/entry-points/console/ui/src/features/console/testing/fixtures.ts +0 -418
  349. package/src/adapter/entry-points/console/ui/src/index.css +0 -1592
  350. package/src/adapter/entry-points/console/ui/src/lib/utils.ts +0 -4
  351. package/src/adapter/entry-points/console/ui/src/main.tsx +0 -21
  352. package/src/adapter/entry-points/console/ui/src/vite-env.d.ts +0 -1
  353. package/src/adapter/entry-points/console/ui/tsconfig.json +0 -26
  354. package/src/adapter/entry-points/console/ui/vite.config.ts +0 -24
  355. package/src/adapter/entry-points/console/ui-dist/assets/index-BYDbK1Fj.js +0 -88
  356. package/src/adapter/entry-points/console/ui-dist/assets/index-KyQISRuQ.css +0 -2
  357. package/src/adapter/entry-points/console/ui-dist/index.html +0 -13
  358. package/src/adapter/entry-points/console/ui-dist/sw.js +0 -60
  359. package/src/adapter/entry-points/console/webServer.test.ts +0 -2945
  360. package/src/adapter/entry-points/console/webServer.ts +0 -940
  361. package/src/adapter/entry-points/function/getStoryObjectMap.ts +0 -3
  362. package/src/adapter/entry-points/handlers/FileSystemConsoleTabsRepository.test.ts +0 -218
  363. package/src/adapter/entry-points/handlers/FileSystemConsoleTabsRepository.ts +0 -113
  364. package/src/adapter/entry-points/handlers/GetStoryObjectMapUseCaseHandler.test.ts +0 -110
  365. package/src/adapter/entry-points/handlers/GetStoryObjectMapUseCaseHandler.ts +0 -116
  366. package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.test.ts +0 -859
  367. package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts +0 -984
  368. package/src/adapter/entry-points/handlers/InTmuxByHumanSessionTokenCountHandler.test.ts +0 -126
  369. package/src/adapter/entry-points/handlers/InTmuxByHumanSessionTokenCountHandler.ts +0 -80
  370. package/src/adapter/entry-points/handlers/LiveSessionOauthTokenSelectHandler.test.ts +0 -491
  371. package/src/adapter/entry-points/handlers/LiveSessionOauthTokenSelectHandler.ts +0 -137
  372. package/src/adapter/entry-points/handlers/OauthTokenSelectHandler.test.ts +0 -508
  373. package/src/adapter/entry-points/handlers/OauthTokenSelectHandler.ts +0 -156
  374. package/src/adapter/entry-points/handlers/consoleListsWriter.test.ts +0 -332
  375. package/src/adapter/entry-points/handlers/consoleListsWriter.ts +0 -60
  376. package/src/adapter/entry-points/handlers/dashboardRowWriter.test.ts +0 -112
  377. package/src/adapter/entry-points/handlers/dashboardRowWriter.ts +0 -51
  378. package/src/adapter/entry-points/handlers/inTmuxByHumanDataWriter.test.ts +0 -285
  379. package/src/adapter/entry-points/handlers/inTmuxByHumanDataWriter.ts +0 -109
  380. package/src/adapter/entry-points/handlers/inTmuxByHumanSessionReconciler.test.ts +0 -170
  381. package/src/adapter/entry-points/handlers/inTmuxByHumanSessionReconciler.ts +0 -40
  382. package/src/adapter/entry-points/handlers/machineStatusWriter.test.ts +0 -191
  383. package/src/adapter/entry-points/handlers/machineStatusWriter.ts +0 -110
  384. package/src/adapter/entry-points/handlers/notifySilentTmuxSessions.test.ts +0 -548
  385. package/src/adapter/entry-points/handlers/notifySilentTmuxSessions.ts +0 -192
  386. package/src/adapter/entry-points/handlers/ownerCallFileCleaner.test.ts +0 -111
  387. package/src/adapter/entry-points/handlers/ownerCallFileCleaner.ts +0 -25
  388. package/src/adapter/entry-points/handlers/ownerCallFileStore.test.ts +0 -286
  389. package/src/adapter/entry-points/handlers/ownerCallFileStore.ts +0 -145
  390. package/src/adapter/entry-points/handlers/ownerReplyMarkerDirectoryResolve.test.ts +0 -55
  391. package/src/adapter/entry-points/handlers/ownerReplyMarkerDirectoryResolve.ts +0 -36
  392. package/src/adapter/entry-points/handlers/resetDegeneratedTmuxSessions.test.ts +0 -72
  393. package/src/adapter/entry-points/handlers/resetDegeneratedTmuxSessions.ts +0 -74
  394. package/src/adapter/entry-points/handlers/rotationOrderFileWriter.test.ts +0 -181
  395. package/src/adapter/entry-points/handlers/rotationOrderFileWriter.ts +0 -18
  396. package/src/adapter/entry-points/handlers/situationFileWriter.test.ts +0 -489
  397. package/src/adapter/entry-points/handlers/situationFileWriter.ts +0 -176
  398. package/src/adapter/entry-points/handlers/staleTmuxSessionCleaner.test.ts +0 -169
  399. package/src/adapter/entry-points/handlers/staleTmuxSessionCleaner.ts +0 -32
  400. package/src/adapter/entry-points/handlers/subscriptionDisabledTokenHandler.ts +0 -41
  401. package/src/adapter/entry-points/handlers/tokenExhaustionHandover.ts +0 -81
  402. package/src/adapter/entry-points/handlers/tokenStatusWriter.test.ts +0 -266
  403. package/src/adapter/entry-points/handlers/tokenStatusWriter.ts +0 -262
  404. package/src/adapter/proxy/ClaudeMessageResponseParser.test.ts +0 -211
  405. package/src/adapter/proxy/ClaudeMessageResponseParser.ts +0 -181
  406. package/src/adapter/proxy/RateLimitCache.test.ts +0 -1077
  407. package/src/adapter/proxy/RateLimitCache.ts +0 -385
  408. package/src/adapter/proxy/TokenListLoader.test.ts +0 -183
  409. package/src/adapter/proxy/TokenListLoader.ts +0 -75
  410. package/src/adapter/proxy/ensureProxyRunning.test.ts +0 -85
  411. package/src/adapter/proxy/ensureProxyRunning.ts +0 -41
  412. package/src/adapter/proxy/proxyEntry.test.ts +0 -552
  413. package/src/adapter/proxy/proxyEntry.ts +0 -214
  414. package/src/adapter/repositories/BaseGitHubRepository.test.ts +0 -26
  415. package/src/adapter/repositories/BaseGitHubRepository.ts +0 -26
  416. package/src/adapter/repositories/BrowserGitHubProjectRepository.test.ts +0 -108
  417. package/src/adapter/repositories/BrowserGitHubProjectRepository.ts +0 -118
  418. package/src/adapter/repositories/CliGitHubGraphqlRateLimitRepository.test.ts +0 -71
  419. package/src/adapter/repositories/CliGitHubGraphqlRateLimitRepository.ts +0 -21
  420. package/src/adapter/repositories/ConfigurableSilentSessionMessageComposer.test.ts +0 -324
  421. package/src/adapter/repositories/ConfigurableSilentSessionMessageComposer.ts +0 -148
  422. package/src/adapter/repositories/FetchWebhookRepository.ts +0 -8
  423. package/src/adapter/repositories/FileHandoverStateRepository.test.ts +0 -114
  424. package/src/adapter/repositories/FileHandoverStateRepository.ts +0 -73
  425. package/src/adapter/repositories/FileSystemInteractiveLiveSessionTranscriptResolver.test.ts +0 -514
  426. package/src/adapter/repositories/FileSystemInteractiveLiveSessionTranscriptResolver.ts +0 -109
  427. package/src/adapter/repositories/FileSystemKevReportWatermarkRepository.test.ts +0 -284
  428. package/src/adapter/repositories/FileSystemKevReportWatermarkRepository.ts +0 -128
  429. package/src/adapter/repositories/FileSystemSessionAssistantTurnsRepository.test.ts +0 -138
  430. package/src/adapter/repositories/FileSystemSessionAssistantTurnsRepository.ts +0 -113
  431. package/src/adapter/repositories/FileSystemSessionDegenerationCooldownStateRepository.test.ts +0 -121
  432. package/src/adapter/repositories/FileSystemSessionDegenerationCooldownStateRepository.ts +0 -103
  433. package/src/adapter/repositories/FileSystemSessionOutputActivityRepository.test.ts +0 -360
  434. package/src/adapter/repositories/FileSystemSessionOutputActivityRepository.ts +0 -77
  435. package/src/adapter/repositories/FileSystemSessionRecordReader.test.ts +0 -59
  436. package/src/adapter/repositories/FileSystemSessionRecordReader.ts +0 -31
  437. package/src/adapter/repositories/FileSystemSilentSessionCandidateStateRepository.test.ts +0 -287
  438. package/src/adapter/repositories/FileSystemSilentSessionCandidateStateRepository.ts +0 -125
  439. package/src/adapter/repositories/FileSystemSilentSessionHubTaskStatusCacheRepository.test.ts +0 -285
  440. package/src/adapter/repositories/FileSystemSilentSessionHubTaskStatusCacheRepository.ts +0 -119
  441. package/src/adapter/repositories/FileSystemSubAgentLivenessResolver.test.ts +0 -237
  442. package/src/adapter/repositories/FileSystemSubAgentLivenessResolver.ts +0 -57
  443. package/src/adapter/repositories/FileSystemSubAgentSilentSecondsResolver.test.ts +0 -56
  444. package/src/adapter/repositories/FileSystemSubAgentSilentSecondsResolver.ts +0 -32
  445. package/src/adapter/repositories/FileSystemSubAgentTranscriptDirectoryResolver.test.ts +0 -68
  446. package/src/adapter/repositories/FileSystemSubAgentTranscriptDirectoryResolver.ts +0 -23
  447. package/src/adapter/repositories/GitHubIssueCheckpointRepository.test.ts +0 -51
  448. package/src/adapter/repositories/GitHubIssueCheckpointRepository.ts +0 -47
  449. package/src/adapter/repositories/GitHubIssueCommentRepository.test.ts +0 -278
  450. package/src/adapter/repositories/GitHubIssueCommentRepository.ts +0 -109
  451. package/src/adapter/repositories/GoogleSpreadsheetRepository.integration.test.ts +0 -265
  452. package/src/adapter/repositories/GoogleSpreadsheetRepository.test.ts +0 -431
  453. package/src/adapter/repositories/GoogleSpreadsheetRepository.ts +0 -268
  454. package/src/adapter/repositories/GraphqlProjectRepository.diskCache.test.ts +0 -272
  455. package/src/adapter/repositories/GraphqlProjectRepository.errorHandling.test.ts +0 -111
  456. package/src/adapter/repositories/GraphqlProjectRepository.fetchProjectId.test.ts +0 -254
  457. package/src/adapter/repositories/GraphqlProjectRepository.test.ts +0 -209
  458. package/src/adapter/repositories/GraphqlProjectRepository.ts +0 -707
  459. package/src/adapter/repositories/GraphqlProjectRepositoryProjectLocation.test.ts +0 -297
  460. package/src/adapter/repositories/KyHttpRepository.ts +0 -8
  461. package/src/adapter/repositories/KySlackRepository.test.ts +0 -172
  462. package/src/adapter/repositories/KySlackRepository.ts +0 -298
  463. package/src/adapter/repositories/LocalCommandIssueAttachmentRepository.test.ts +0 -193
  464. package/src/adapter/repositories/LocalCommandIssueAttachmentRepository.ts +0 -106
  465. package/src/adapter/repositories/LocalProcessLiveSessionProcessSnapshotProvider.test.ts +0 -190
  466. package/src/adapter/repositories/LocalProcessLiveSessionProcessSnapshotProvider.ts +0 -102
  467. package/src/adapter/repositories/LocalStorageCacheRepository.test.ts +0 -265
  468. package/src/adapter/repositories/LocalStorageCacheRepository.ts +0 -79
  469. package/src/adapter/repositories/LocalStorageRepository.integration.test.ts +0 -142
  470. package/src/adapter/repositories/LocalStorageRepository.test.ts +0 -173
  471. package/src/adapter/repositories/LocalStorageRepository.ts +0 -30
  472. package/src/adapter/repositories/NoUnansweredOwnerCallStatusProvider.test.ts +0 -15
  473. package/src/adapter/repositories/NoUnansweredOwnerCallStatusProvider.ts +0 -9
  474. package/src/adapter/repositories/NodeLocalCommandRunner.largeOutput.test.ts +0 -16
  475. package/src/adapter/repositories/NodeLocalCommandRunner.test.ts +0 -118
  476. package/src/adapter/repositories/NodeLocalCommandRunner.ts +0 -66
  477. package/src/adapter/repositories/NodeProcessSignalRepository.test.ts +0 -82
  478. package/src/adapter/repositories/NodeProcessSignalRepository.ts +0 -47
  479. package/src/adapter/repositories/NodeSubAgentProcessLister.test.ts +0 -44
  480. package/src/adapter/repositories/NodeSubAgentProcessLister.ts +0 -40
  481. package/src/adapter/repositories/NodeTmuxSessionRepository.test.ts +0 -546
  482. package/src/adapter/repositories/NodeTmuxSessionRepository.ts +0 -245
  483. package/src/adapter/repositories/OauthAPIClaudeRepository.ts +0 -279
  484. package/src/adapter/repositories/OauthAPIProxyClaudeRepository.test.ts +0 -166
  485. package/src/adapter/repositories/OauthAPIProxyClaudeRepository.ts +0 -32
  486. package/src/adapter/repositories/OauthProxyClaudeRepository.test.ts +0 -428
  487. package/src/adapter/repositories/OauthProxyClaudeRepository.ts +0 -124
  488. package/src/adapter/repositories/ProcClaudeHandoverSessionRepository.test.ts +0 -242
  489. package/src/adapter/repositories/ProcClaudeHandoverSessionRepository.ts +0 -261
  490. package/src/adapter/repositories/ProcClaudeInteractiveSessionRepository.test.ts +0 -184
  491. package/src/adapter/repositories/ProcClaudeInteractiveSessionRepository.ts +0 -138
  492. package/src/adapter/repositories/ProcClaudeLiveSessionRepository.test.ts +0 -208
  493. package/src/adapter/repositories/ProcClaudeLiveSessionRepository.ts +0 -130
  494. package/src/adapter/repositories/ProcFsProcessEnvironReader.test.ts +0 -60
  495. package/src/adapter/repositories/ProcFsProcessEnvironReader.ts +0 -38
  496. package/src/adapter/repositories/ProcHostMetricsRepository.test.ts +0 -207
  497. package/src/adapter/repositories/ProcHostMetricsRepository.ts +0 -181
  498. package/src/adapter/repositories/ProcTakeOwnershipSpawnRepository.test.ts +0 -231
  499. package/src/adapter/repositories/ProcTakeOwnershipSpawnRepository.ts +0 -134
  500. package/src/adapter/repositories/ProcessListSessionSubAgentActivityRepository.test.ts +0 -121
  501. package/src/adapter/repositories/ProcessListSessionSubAgentActivityRepository.ts +0 -58
  502. package/src/adapter/repositories/ProjectIssuesCacheRepository.test.ts +0 -218
  503. package/src/adapter/repositories/ProjectIssuesCacheRepository.ts +0 -141
  504. package/src/adapter/repositories/ProxyClaudeTokenUsageRepository.test.ts +0 -1195
  505. package/src/adapter/repositories/ProxyClaudeTokenUsageRepository.ts +0 -185
  506. package/src/adapter/repositories/ProxyRateLimitCacheRepository.test.ts +0 -116
  507. package/src/adapter/repositories/ProxyRateLimitCacheRepository.ts +0 -67
  508. package/src/adapter/repositories/RateLimitSnapshotRepository.ts +0 -50
  509. package/src/adapter/repositories/RealSleeper.test.ts +0 -19
  510. package/src/adapter/repositories/RealSleeper.ts +0 -12
  511. package/src/adapter/repositories/RestProjectRepository.test.ts +0 -277
  512. package/src/adapter/repositories/RestProjectRepository.ts +0 -129
  513. package/src/adapter/repositories/SqliteClaudeMessageResponseRepository.test.ts +0 -313
  514. package/src/adapter/repositories/SqliteClaudeMessageResponseRepository.ts +0 -164
  515. package/src/adapter/repositories/SystemDateRepository.test.ts +0 -60
  516. package/src/adapter/repositories/SystemDateRepository.ts +0 -34
  517. package/src/adapter/repositories/TmuxSilentSessionNotificationRepository.test.ts +0 -253
  518. package/src/adapter/repositories/TmuxSilentSessionNotificationRepository.ts +0 -158
  519. package/src/adapter/repositories/TranscriptOwnerCallStatusProvider.queuedReply.test.ts +0 -171
  520. package/src/adapter/repositories/TranscriptOwnerCallStatusProvider.singleScan.test.ts +0 -86
  521. package/src/adapter/repositories/TranscriptOwnerCallStatusProvider.test.ts +0 -996
  522. package/src/adapter/repositories/TranscriptOwnerCallStatusProvider.ts +0 -396
  523. package/src/adapter/repositories/TranscriptRefusalTailStatusProvider.test.ts +0 -208
  524. package/src/adapter/repositories/TranscriptRefusalTailStatusProvider.ts +0 -80
  525. package/src/adapter/repositories/TranscriptSessionSubAgentActivityRepository.test.ts +0 -1674
  526. package/src/adapter/repositories/TranscriptSessionSubAgentActivityRepository.ts +0 -459
  527. package/src/adapter/repositories/clSessionScopeUnitName.test.ts +0 -76
  528. package/src/adapter/repositories/clSessionScopeUnitName.ts +0 -5
  529. package/src/adapter/repositories/clSessionScopeUnitNameFromCgroupContent.test.ts +0 -34
  530. package/src/adapter/repositories/clSessionScopeUnitNameFromCgroupContent.ts +0 -8
  531. package/src/adapter/repositories/githubGraphqlClient.test.ts +0 -479
  532. package/src/adapter/repositories/githubGraphqlClient.ts +0 -243
  533. package/src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.test.ts +0 -5182
  534. package/src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.ts +0 -3303
  535. package/src/adapter/repositories/issue/ApiV3IssueRepository.test.ts +0 -46
  536. package/src/adapter/repositories/issue/ApiV3IssueRepository.ts +0 -88
  537. package/src/adapter/repositories/issue/GraphqlProjectItemRepository.test.ts +0 -1776
  538. package/src/adapter/repositories/issue/GraphqlProjectItemRepository.ts +0 -1552
  539. package/src/adapter/repositories/issue/RestIssueRepository.test.ts +0 -393
  540. package/src/adapter/repositories/issue/RestIssueRepository.ts +0 -252
  541. package/src/adapter/repositories/issue/gitHubRawUrl.test.ts +0 -29
  542. package/src/adapter/repositories/issue/gitHubRawUrl.ts +0 -30
  543. package/src/adapter/repositories/issue/githubRateLimitRetry.test.ts +0 -167
  544. package/src/adapter/repositories/issue/githubRateLimitRetry.ts +0 -109
  545. package/src/adapter/repositories/localStorageCacheDirectory.test.ts +0 -81
  546. package/src/adapter/repositories/localStorageCacheDirectory.ts +0 -13
  547. package/src/adapter/repositories/projectFieldDefinition.test.ts +0 -191
  548. package/src/adapter/repositories/projectFieldDefinition.ts +0 -144
  549. package/src/adapter/repositories/utils.test.ts +0 -55
  550. package/src/adapter/repositories/utils.ts +0 -45
  551. package/src/domain/entities/ClaudeHandoverSession.ts +0 -12
  552. package/src/domain/entities/ClaudeMessageResponse.ts +0 -31
  553. package/src/domain/entities/ClaudeTokenUsage.ts +0 -17
  554. package/src/domain/entities/ClaudeWindowUsage.ts +0 -5
  555. package/src/domain/entities/Comment.ts +0 -5
  556. package/src/domain/entities/InteractiveLiveSession.ts +0 -6
  557. package/src/domain/entities/Issue.ts +0 -31
  558. package/src/domain/entities/KevReportWatermark.ts +0 -4
  559. package/src/domain/entities/LiveSessionActivitySnapshot.ts +0 -14
  560. package/src/domain/entities/LiveSessionOutputActivity.ts +0 -4
  561. package/src/domain/entities/LiveSessionProcessSnapshot.ts +0 -18
  562. package/src/domain/entities/LiveTmuxSession.ts +0 -4
  563. package/src/domain/entities/Member.ts +0 -3
  564. package/src/domain/entities/OutputDegeneration.ts +0 -10
  565. package/src/domain/entities/Project.ts +0 -88
  566. package/src/domain/entities/ProjectField.ts +0 -3
  567. package/src/domain/entities/ProjectFieldName.ts +0 -2
  568. package/src/domain/entities/ProjectFieldSingleSelect.ts +0 -8
  569. package/src/domain/entities/ProjectFieldSingleSelectOption.ts +0 -8
  570. package/src/domain/entities/RequiredProjectField.ts +0 -68
  571. package/src/domain/entities/SearchedIssue.ts +0 -11
  572. package/src/domain/entities/StoryObjectMap.ts +0 -12
  573. package/src/domain/entities/TokenExhaustionHandoverState.ts +0 -8
  574. package/src/domain/entities/WorkflowStatus.ts +0 -66
  575. package/src/domain/usecases/ActionAnnouncementUseCase.test.ts +0 -91
  576. package/src/domain/usecases/ActionAnnouncementUseCase.ts +0 -78
  577. package/src/domain/usecases/AgentDesignationLabelAdoptUseCase.test.ts +0 -222
  578. package/src/domain/usecases/AgentDesignationLabelAdoptUseCase.ts +0 -76
  579. package/src/domain/usecases/AnalyzeProblemByIssueUseCase.test.ts +0 -118
  580. package/src/domain/usecases/AnalyzeProblemByIssueUseCase.ts +0 -112
  581. package/src/domain/usecases/AnalyzeStoriesUseCase.test.ts +0 -82
  582. package/src/domain/usecases/AnalyzeStoriesUseCase.ts +0 -296
  583. package/src/domain/usecases/AssignNoAssigneeIssueToManagerUseCase.test.ts +0 -578
  584. package/src/domain/usecases/AssignNoAssigneeIssueToManagerUseCase.ts +0 -137
  585. package/src/domain/usecases/CONTRIBUTING_FOR_TEST.md +0 -259
  586. package/src/domain/usecases/ChangeStatusByStoryColorUseCase.test.ts +0 -437
  587. package/src/domain/usecases/ChangeStatusByStoryColorUseCase.ts +0 -80
  588. package/src/domain/usecases/ChangeTargetPullRequestApprover.test.ts +0 -248
  589. package/src/domain/usecases/ChangeTargetPullRequestApprover.ts +0 -69
  590. package/src/domain/usecases/CheckIssueReviewReadinessUseCase.test.ts +0 -411
  591. package/src/domain/usecases/CheckIssueReviewReadinessUseCase.ts +0 -142
  592. package/src/domain/usecases/ClearDependedIssueURLUseCase.test.ts +0 -1120
  593. package/src/domain/usecases/ClearDependedIssueURLUseCase.ts +0 -161
  594. package/src/domain/usecases/ClearPastNextActionDateHourUseCase.test.ts +0 -345
  595. package/src/domain/usecases/ClearPastNextActionDateHourUseCase.ts +0 -81
  596. package/src/domain/usecases/CliErrorReportUseCase.test.ts +0 -162
  597. package/src/domain/usecases/CliErrorReportUseCase.ts +0 -72
  598. package/src/domain/usecases/ConflictedIssueRevertUseCase.test.ts +0 -886
  599. package/src/domain/usecases/ConflictedIssueRevertUseCase.ts +0 -146
  600. package/src/domain/usecases/CreateEstimationIssueUseCase.test.ts +0 -227
  601. package/src/domain/usecases/CreateEstimationIssueUseCase.ts +0 -205
  602. package/src/domain/usecases/CreateNewStoryByLabelUseCase.test.ts +0 -1084
  603. package/src/domain/usecases/CreateNewStoryByLabelUseCase.ts +0 -146
  604. package/src/domain/usecases/DailySecurityScanUseCase.test.ts +0 -1709
  605. package/src/domain/usecases/DailySecurityScanUseCase.ts +0 -476
  606. package/src/domain/usecases/DefaultSilentSessionMessageComposer.test.ts +0 -533
  607. package/src/domain/usecases/DefaultSilentSessionMessageComposer.ts +0 -122
  608. package/src/domain/usecases/GetStoryObjectMapUseCase.test.ts +0 -330
  609. package/src/domain/usecases/GetStoryObjectMapUseCase.ts +0 -79
  610. package/src/domain/usecases/HandleScheduledEventUseCase.test.ts +0 -1913
  611. package/src/domain/usecases/HandleScheduledEventUseCase.ts +0 -846
  612. package/src/domain/usecases/InTmuxByHumanSessionTokenCountUseCase.test.ts +0 -175
  613. package/src/domain/usecases/InTmuxByHumanSessionTokenCountUseCase.ts +0 -63
  614. package/src/domain/usecases/IssueNoStatusUpdateUseCase.test.ts +0 -165
  615. package/src/domain/usecases/IssueNoStatusUpdateUseCase.ts +0 -44
  616. package/src/domain/usecases/IssueRejectionEvaluator.test.ts +0 -1137
  617. package/src/domain/usecases/IssueRejectionEvaluator.ts +0 -340
  618. package/src/domain/usecases/LiveSessionOauthTokenSelectUseCase.test.ts +0 -679
  619. package/src/domain/usecases/LiveSessionOauthTokenSelectUseCase.ts +0 -178
  620. package/src/domain/usecases/NotifyFinishedIssuePreparationUseCase.test.ts +0 -5441
  621. package/src/domain/usecases/NotifyFinishedIssuePreparationUseCase.ts +0 -891
  622. package/src/domain/usecases/NotifySilentLiveSessionsUseCase.test.ts +0 -2069
  623. package/src/domain/usecases/NotifySilentLiveSessionsUseCase.ts +0 -489
  624. package/src/domain/usecases/OauthTokenSelectUseCase.test.ts +0 -662
  625. package/src/domain/usecases/OauthTokenSelectUseCase.ts +0 -274
  626. package/src/domain/usecases/OutputDegenerationDetector.test.ts +0 -167
  627. package/src/domain/usecases/OutputDegenerationDetector.ts +0 -169
  628. package/src/domain/usecases/ProjectRequiredFieldCreateUseCase.test.ts +0 -711
  629. package/src/domain/usecases/ProjectRequiredFieldCreateUseCase.ts +0 -146
  630. package/src/domain/usecases/QualityCheckAdvanceUseCase.test.ts +0 -421
  631. package/src/domain/usecases/QualityCheckAdvanceUseCase.ts +0 -76
  632. package/src/domain/usecases/ReopenedDoneIssueRevertUseCase.test.ts +0 -188
  633. package/src/domain/usecases/ReopenedDoneIssueRevertUseCase.ts +0 -57
  634. package/src/domain/usecases/ResolveInteractiveLiveSessionsUseCase.test.ts +0 -303
  635. package/src/domain/usecases/ResolveInteractiveLiveSessionsUseCase.ts +0 -155
  636. package/src/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.test.ts +0 -1838
  637. package/src/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.ts +0 -221
  638. package/src/domain/usecases/RevertOrphanedPreparationUseCase.test.ts +0 -2392
  639. package/src/domain/usecases/RevertOrphanedPreparationUseCase.ts +0 -499
  640. package/src/domain/usecases/SessionOutputDegenerationRecoveryUseCase.test.ts +0 -224
  641. package/src/domain/usecases/SessionOutputDegenerationRecoveryUseCase.ts +0 -142
  642. package/src/domain/usecases/SetDependedIssueUrlForOpenTaskPRsUseCase.test.ts +0 -360
  643. package/src/domain/usecases/SetDependedIssueUrlForOpenTaskPRsUseCase.ts +0 -70
  644. package/src/domain/usecases/SetNoStoryIssueToStoryUseCase.test.ts +0 -400
  645. package/src/domain/usecases/SetNoStoryIssueToStoryUseCase.ts +0 -48
  646. package/src/domain/usecases/SetWorkflowManagementIssueToStoryUseCase.test.ts +0 -696
  647. package/src/domain/usecases/SetWorkflowManagementIssueToStoryUseCase.ts +0 -201
  648. package/src/domain/usecases/SetupTowerDefenceProjectUseCase.test.ts +0 -1363
  649. package/src/domain/usecases/SetupTowerDefenceProjectUseCase.ts +0 -215
  650. package/src/domain/usecases/StaleTaskPullRequestCloseUseCase.test.ts +0 -170
  651. package/src/domain/usecases/StaleTaskPullRequestCloseUseCase.ts +0 -38
  652. package/src/domain/usecases/StaleTmuxSessionKillUseCase.test.ts +0 -283
  653. package/src/domain/usecases/StaleTmuxSessionKillUseCase.ts +0 -98
  654. package/src/domain/usecases/StartPreparationUseCase.test.ts +0 -7822
  655. package/src/domain/usecases/StartPreparationUseCase.ts +0 -876
  656. package/src/domain/usecases/SubscriptionDisabledIssueUseCase.test.ts +0 -200
  657. package/src/domain/usecases/SubscriptionDisabledIssueUseCase.ts +0 -74
  658. package/src/domain/usecases/TokenExhaustionHandoverUseCase.test.ts +0 -838
  659. package/src/domain/usecases/TokenExhaustionHandoverUseCase.ts +0 -439
  660. package/src/domain/usecases/UpdateIssueStatusByLabelUseCase.test.ts +0 -306
  661. package/src/domain/usecases/UpdateIssueStatusByLabelUseCase.ts +0 -64
  662. package/src/domain/usecases/UpdateRateLimitCacheUseCase.test.ts +0 -178
  663. package/src/domain/usecases/UpdateRateLimitCacheUseCase.ts +0 -22
  664. package/src/domain/usecases/adapter-interfaces/ClaudeHandoverSessionRepository.ts +0 -5
  665. package/src/domain/usecases/adapter-interfaces/ClaudeInteractiveSessionRepository.ts +0 -9
  666. package/src/domain/usecases/adapter-interfaces/ClaudeLiveSessionRepository.ts +0 -8
  667. package/src/domain/usecases/adapter-interfaces/ClaudeMessageResponseRepository.ts +0 -5
  668. package/src/domain/usecases/adapter-interfaces/ClaudeRepository.ts +0 -6
  669. package/src/domain/usecases/adapter-interfaces/ClaudeTokenUsageRepository.ts +0 -8
  670. package/src/domain/usecases/adapter-interfaces/ConsoleTabsRepository.ts +0 -12
  671. package/src/domain/usecases/adapter-interfaces/CopilotRepository.ts +0 -3
  672. package/src/domain/usecases/adapter-interfaces/DateRepository.ts +0 -7
  673. package/src/domain/usecases/adapter-interfaces/GitHubGraphqlRateLimitRepository.ts +0 -3
  674. package/src/domain/usecases/adapter-interfaces/HttpRepository.ts +0 -3
  675. package/src/domain/usecases/adapter-interfaces/InteractiveLiveSessionTranscriptResolver.ts +0 -7
  676. package/src/domain/usecases/adapter-interfaces/IssueAttachmentRepository.ts +0 -9
  677. package/src/domain/usecases/adapter-interfaces/IssueCheckpointRepository.ts +0 -3
  678. package/src/domain/usecases/adapter-interfaces/IssueCommentRepository.ts +0 -7
  679. package/src/domain/usecases/adapter-interfaces/IssueRepository.ts +0 -229
  680. package/src/domain/usecases/adapter-interfaces/KevReportWatermarkRepository.ts +0 -11
  681. package/src/domain/usecases/adapter-interfaces/LiveSessionProcessSnapshotProvider.ts +0 -5
  682. package/src/domain/usecases/adapter-interfaces/LocalCommandRunner.ts +0 -16
  683. package/src/domain/usecases/adapter-interfaces/OwnerCallStatusProvider.ts +0 -5
  684. package/src/domain/usecases/adapter-interfaces/ProcessEnvironReader.ts +0 -3
  685. package/src/domain/usecases/adapter-interfaces/ProcessSignalRepository.ts +0 -5
  686. package/src/domain/usecases/adapter-interfaces/ProjectRepository.ts +0 -29
  687. package/src/domain/usecases/adapter-interfaces/RateLimitCacheRepository.ts +0 -10
  688. package/src/domain/usecases/adapter-interfaces/RefusalTailStatusProvider.ts +0 -5
  689. package/src/domain/usecases/adapter-interfaces/SessionAssistantTurnsRepository.ts +0 -6
  690. package/src/domain/usecases/adapter-interfaces/SessionDegenerationCooldownStateRepository.ts +0 -4
  691. package/src/domain/usecases/adapter-interfaces/SessionOutputActivityRepository.ts +0 -7
  692. package/src/domain/usecases/adapter-interfaces/SessionRecordReader.ts +0 -3
  693. package/src/domain/usecases/adapter-interfaces/SessionSubAgentActivityRepository.ts +0 -8
  694. package/src/domain/usecases/adapter-interfaces/SilentSessionCandidateStateRepository.ts +0 -10
  695. package/src/domain/usecases/adapter-interfaces/SilentSessionHubTaskStatusCacheRepository.ts +0 -20
  696. package/src/domain/usecases/adapter-interfaces/SilentSessionMessageComposer.ts +0 -18
  697. package/src/domain/usecases/adapter-interfaces/SilentSessionNotificationRepository.ts +0 -6
  698. package/src/domain/usecases/adapter-interfaces/SlackRepository.ts +0 -20
  699. package/src/domain/usecases/adapter-interfaces/Sleeper.ts +0 -3
  700. package/src/domain/usecases/adapter-interfaces/SpreadsheetRepository.ts +0 -18
  701. package/src/domain/usecases/adapter-interfaces/StatusDefaultRepository.ts +0 -5
  702. package/src/domain/usecases/adapter-interfaces/SubAgentLivenessResolver.ts +0 -6
  703. package/src/domain/usecases/adapter-interfaces/SubAgentProcessLister.ts +0 -8
  704. package/src/domain/usecases/adapter-interfaces/SubAgentSilentSecondsResolver.ts +0 -3
  705. package/src/domain/usecases/adapter-interfaces/SubAgentTranscriptDirectoryResolver.ts +0 -6
  706. package/src/domain/usecases/adapter-interfaces/TakeOwnershipSpawnRepository.ts +0 -9
  707. package/src/domain/usecases/adapter-interfaces/TmuxSessionRepository.ts +0 -20
  708. package/src/domain/usecases/adapter-interfaces/TokenExhaustionHandoverStateRepository.ts +0 -6
  709. package/src/domain/usecases/adapter-interfaces/TokenRateLimitSnapshotRepository.ts +0 -22
  710. package/src/domain/usecases/adapter-interfaces/WebhookRepository.ts +0 -3
  711. package/src/domain/usecases/agentReportPrefix.ts +0 -1
  712. package/src/domain/usecases/autoStatusCheckComments.ts +0 -1
  713. package/src/domain/usecases/console/.gitkeep +0 -0
  714. package/src/domain/usecases/console/GenerateConsoleListsUseCase.test.ts +0 -887
  715. package/src/domain/usecases/console/GenerateConsoleListsUseCase.ts +0 -368
  716. package/src/domain/usecases/dashboard/ComposeDashboardUseCase.test.ts +0 -654
  717. package/src/domain/usecases/dashboard/ComposeDashboardUseCase.ts +0 -318
  718. package/src/domain/usecases/dashboard/DashboardProjectCode.test.ts +0 -34
  719. package/src/domain/usecases/dashboard/DashboardProjectCode.ts +0 -27
  720. package/src/domain/usecases/dashboard/GenerateDashboardRowUseCase.test.ts +0 -160
  721. package/src/domain/usecases/dashboard/GenerateDashboardRowUseCase.ts +0 -69
  722. package/src/domain/usecases/dashboard/GenerateTokenStatusUseCase.test.ts +0 -362
  723. package/src/domain/usecases/dashboard/GenerateTokenStatusUseCase.ts +0 -234
  724. package/src/domain/usecases/ensureAgentOptionAndGetId.ts +0 -47
  725. package/src/domain/usecases/extractFencedJsonBlocks.test.ts +0 -40
  726. package/src/domain/usecases/extractFencedJsonBlocks.ts +0 -21
  727. package/src/domain/usecases/extractNextStepAgent.test.ts +0 -58
  728. package/src/domain/usecases/extractNextStepAgent.ts +0 -18
  729. package/src/domain/usecases/extractNextStepAgentFromComments.ts +0 -13
  730. package/src/domain/usecases/findLastAgentReport.test.ts +0 -121
  731. package/src/domain/usecases/findLastAgentReport.ts +0 -14
  732. package/src/domain/usecases/intmux/GenerateInTmuxByHumanDataUseCase.test.ts +0 -339
  733. package/src/domain/usecases/intmux/GenerateInTmuxByHumanDataUseCase.ts +0 -188
  734. package/src/domain/usecases/intmux/InTmuxByHumanSessionReconcileUseCase.test.ts +0 -389
  735. package/src/domain/usecases/intmux/InTmuxByHumanSessionReconcileUseCase.ts +0 -103
  736. package/src/domain/usecases/intmux/OwnerCallFile.test.ts +0 -184
  737. package/src/domain/usecases/intmux/OwnerCallFile.ts +0 -80
  738. package/src/domain/usecases/isAgentReportBody.test.ts +0 -108
  739. package/src/domain/usecases/isAgentReportBody.ts +0 -52
  740. package/src/domain/usecases/isAuthorAuthorizedForAutoStatusCheck.ts +0 -12
  741. package/src/domain/usecases/isHumanComment.test.ts +0 -77
  742. package/src/domain/usecases/isHumanComment.ts +0 -23
  743. package/src/domain/usecases/isRecord.ts +0 -2
  744. package/src/domain/usecases/issueReactivationTriggerIsPending.test.ts +0 -541
  745. package/src/domain/usecases/issueReactivationTriggerIsPending.ts +0 -25
  746. package/src/domain/usecases/nextStepAgentDispatchRepeatedMessage.ts +0 -2
  747. package/src/domain/usecases/normalizeReportBody.test.ts +0 -24
  748. package/src/domain/usecases/normalizeReportBody.ts +0 -2
  749. package/src/domain/usecases/resolveAllowedIssueAuthors.test.ts +0 -51
  750. package/src/domain/usecases/resolveAllowedIssueAuthors.ts +0 -6
  751. package/src/domain/usecases/resolveLabelsAsLlmAgentName.test.ts +0 -42
  752. package/src/domain/usecases/resolveLabelsAsLlmAgentName.ts +0 -6
  753. package/src/domain/usecases/resolveLabelsNotRequiringPullRequest.test.ts +0 -33
  754. package/src/domain/usecases/resolveLabelsNotRequiringPullRequest.ts +0 -7
  755. package/src/domain/usecases/resolveNextStepAgentDispatchRepetition.test.ts +0 -337
  756. package/src/domain/usecases/resolveNextStepAgentDispatchRepetition.ts +0 -133
  757. package/src/domain/usecases/silentSessionReminderSentinel.ts +0 -9
  758. package/src/domain/usecases/triagerAgentName.ts +0 -4
  759. package/src/domain/usecases/utils.test.ts +0 -35
  760. package/src/domain/usecases/utils.ts +0 -6
  761. package/src/index.test.ts +0 -8
  762. package/src/index.ts +0 -10
  763. package/src/releaseConfig.test.ts +0 -40
  764. package/tsconfig.build.json +0 -18
  765. package/tsconfig.json +0 -25
  766. package/types/adapter/entry-points/handlers/resolveUnansweredOwnerCalls.d.ts +0 -13
  767. package/types/adapter/entry-points/handlers/resolveUnansweredOwnerCalls.d.ts.map +0 -1
  768. package/types/adapter/repositories/FileSystemSilentSessionNotifiedStateRepository.d.ts +0 -16
  769. package/types/adapter/repositories/FileSystemSilentSessionNotifiedStateRepository.d.ts.map +0 -1
  770. package/types/adapter/repositories/issue/issueTimelineUtils.d.ts +0 -12
  771. package/types/adapter/repositories/issue/issueTimelineUtils.d.ts.map +0 -1
  772. package/types/domain/entities/UnansweredOwnerCall.d.ts +0 -5
  773. package/types/domain/entities/UnansweredOwnerCall.d.ts.map +0 -1
  774. package/types/domain/entities/WorkingTime.d.ts +0 -8
  775. package/types/domain/entities/WorkingTime.d.ts.map +0 -1
  776. package/types/domain/usecases/ChangeStatusLongInReviewIssueUseCase.d.ts +0 -17
  777. package/types/domain/usecases/ChangeStatusLongInReviewIssueUseCase.d.ts.map +0 -1
  778. package/types/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.d.ts +0 -23
  779. package/types/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.d.ts.map +0 -1
  780. package/types/domain/usecases/GenerateWorkingTimeReportUseCase.d.ts +0 -50
  781. package/types/domain/usecases/GenerateWorkingTimeReportUseCase.d.ts.map +0 -1
  782. package/types/domain/usecases/TriagerApprovalDispatchUseCase.d.ts +0 -15
  783. package/types/domain/usecases/TriagerApprovalDispatchUseCase.d.ts.map +0 -1
  784. package/types/domain/usecases/adapter-interfaces/SilentSessionNotifiedStateRepository.d.ts +0 -11
  785. package/types/domain/usecases/adapter-interfaces/SilentSessionNotifiedStateRepository.d.ts.map +0 -1
  786. package/types/domain/usecases/awaitingOwnerApprovalMessage.d.ts +0 -3
  787. package/types/domain/usecases/awaitingOwnerApprovalMessage.d.ts.map +0 -1
  788. package/types/domain/usecases/findLastAgentDeclaringReport.d.ts +0 -5
  789. package/types/domain/usecases/findLastAgentDeclaringReport.d.ts.map +0 -1
  790. package/types/domain/usecases/isPullRequestDeclaredUnnecessary.d.ts +0 -5
  791. package/types/domain/usecases/isPullRequestDeclaredUnnecessary.d.ts.map +0 -1
  792. package/types/domain/usecases/isWaitingForOwnerApproval.d.ts +0 -2
  793. package/types/domain/usecases/isWaitingForOwnerApproval.d.ts.map +0 -1
  794. package/types/domain/usecases/returnedToAwaitingWorkspaceMessage.d.ts +0 -3
  795. package/types/domain/usecases/returnedToAwaitingWorkspaceMessage.d.ts.map +0 -1
@@ -1,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
- }