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,1674 +0,0 @@
1
- import * as fs from 'fs';
2
- import * as os from 'os';
3
- import * as path from 'path';
4
- import { SubAgentTranscriptDirectoryResolver } from '../../domain/usecases/adapter-interfaces/SubAgentTranscriptDirectoryResolver';
5
- import {
6
- SubAgentProcess,
7
- SubAgentProcessLister,
8
- } from '../../domain/usecases/adapter-interfaces/SubAgentProcessLister';
9
- import { SubAgentLivenessResolver } from '../../domain/usecases/adapter-interfaces/SubAgentLivenessResolver';
10
- import { FileSystemSubAgentTranscriptDirectoryResolver } from './FileSystemSubAgentTranscriptDirectoryResolver';
11
- import { TranscriptSessionSubAgentActivityRepository } from './TranscriptSessionSubAgentActivityRepository';
12
-
13
- describe('TranscriptSessionSubAgentActivityRepository', () => {
14
- let rootDirectory: string;
15
- const now = new Date('2026-06-27T12:00:00.000Z');
16
- const nowEpochSeconds = Math.floor(now.getTime() / 1000);
17
-
18
- beforeEach(() => {
19
- rootDirectory = fs.mkdtempSync(path.join(os.tmpdir(), 'subagent-tx-'));
20
- });
21
-
22
- afterEach(() => {
23
- fs.rmSync(rootDirectory, { force: true, recursive: true });
24
- });
25
-
26
- const cwdSlugFor = (sessionName: string): string =>
27
- `-home-user-worktrees-${sessionName.replace(/[^a-zA-Z0-9]/g, '-')}`;
28
-
29
- const sessionUuidFor = (sessionName: string): string =>
30
- `uuid-${sessionName.replace(/[^a-zA-Z0-9]/g, '-')}`;
31
-
32
- const mainTranscriptPathFor = (sessionName: string): string =>
33
- path.join(
34
- rootDirectory,
35
- cwdSlugFor(sessionName),
36
- `${sessionUuidFor(sessionName)}.jsonl`,
37
- );
38
-
39
- const transcriptMapFor = (sessionNames: string[]): Map<string, string> =>
40
- new Map(
41
- sessionNames.map((sessionName) => [
42
- sessionName,
43
- mainTranscriptPathFor(sessionName),
44
- ]),
45
- );
46
-
47
- const subAgentsDirFor = (sessionName: string): string => {
48
- const dir = path.join(
49
- rootDirectory,
50
- cwdSlugFor(sessionName),
51
- sessionUuidFor(sessionName),
52
- 'subagents',
53
- );
54
- fs.mkdirSync(dir, { recursive: true });
55
- return dir;
56
- };
57
-
58
- const writeAgentTranscript = (
59
- sessionName: string,
60
- agentId: string,
61
- entries: object[],
62
- mtimeEpochSeconds: number,
63
- ): string => {
64
- const dir = subAgentsDirFor(sessionName);
65
- const filePath = path.join(dir, `agent-${agentId}.jsonl`);
66
- fs.writeFileSync(
67
- filePath,
68
- entries.map((entry) => JSON.stringify(entry)).join('\n'),
69
- 'utf8',
70
- );
71
- fs.utimesSync(filePath, mtimeEpochSeconds, mtimeEpochSeconds);
72
- return filePath;
73
- };
74
-
75
- const createResolver = (): SubAgentTranscriptDirectoryResolver =>
76
- new FileSystemSubAgentTranscriptDirectoryResolver(rootDirectory);
77
-
78
- const processListerWith = (
79
- processes: SubAgentProcess[],
80
- ): SubAgentProcessLister => ({
81
- listProcesses: async () => processes,
82
- });
83
-
84
- const emptyProcessLister = (): SubAgentProcessLister => processListerWith([]);
85
-
86
- const runningEntries = (startTimestamp: string): object[] => [
87
- { type: 'user', timestamp: startTimestamp, message: { role: 'user' } },
88
- {
89
- type: 'assistant',
90
- timestamp: startTimestamp,
91
- message: {
92
- role: 'assistant',
93
- stop_reason: 'tool_use',
94
- content: [{ type: 'tool_use', name: 'Bash', input: {} }],
95
- },
96
- },
97
- ];
98
-
99
- const finishedEntries = (startTimestamp: string): object[] => [
100
- { type: 'user', timestamp: startTimestamp, message: { role: 'user' } },
101
- {
102
- type: 'assistant',
103
- timestamp: startTimestamp,
104
- message: { role: 'assistant', stop_reason: 'end_turn' },
105
- },
106
- ];
107
-
108
- const stopSequenceFinishedEntries = (startTimestamp: string): object[] => [
109
- { type: 'user', timestamp: startTimestamp, message: { role: 'user' } },
110
- {
111
- type: 'assistant',
112
- timestamp: startTimestamp,
113
- message: { role: 'assistant', stop_reason: 'stop_sequence' },
114
- },
115
- ];
116
-
117
- const finalTextAnswerEntries = (startTimestamp: string): object[] => [
118
- { type: 'user', timestamp: startTimestamp, message: { role: 'user' } },
119
- {
120
- type: 'assistant',
121
- timestamp: startTimestamp,
122
- message: {
123
- role: 'assistant',
124
- stop_reason: 'tool_use',
125
- content: [{ type: 'tool_use', name: 'Bash', input: {} }],
126
- },
127
- },
128
- {
129
- type: 'user',
130
- timestamp: startTimestamp,
131
- message: {
132
- role: 'user',
133
- content: [{ type: 'tool_result', content: '' }],
134
- },
135
- },
136
- {
137
- type: 'assistant',
138
- timestamp: startTimestamp,
139
- message: {
140
- role: 'assistant',
141
- stop_reason: null,
142
- content: [{ type: 'text', text: 'All verification complete.' }],
143
- },
144
- },
145
- ];
146
-
147
- const interruptedEntries = (startTimestamp: string): object[] => [
148
- { type: 'user', timestamp: startTimestamp, message: { role: 'user' } },
149
- {
150
- type: 'assistant',
151
- timestamp: startTimestamp,
152
- message: {
153
- role: 'assistant',
154
- stop_reason: 'tool_use',
155
- content: [{ type: 'tool_use', name: 'Bash', input: {} }],
156
- },
157
- },
158
- {
159
- type: 'user',
160
- timestamp: startTimestamp,
161
- message: {
162
- role: 'user',
163
- content: [{ type: 'text', text: '[Request interrupted by user]' }],
164
- },
165
- },
166
- ];
167
-
168
- const inFlightToolResultTailEntries = (startTimestamp: string): object[] => [
169
- { type: 'user', timestamp: startTimestamp, message: { role: 'user' } },
170
- {
171
- type: 'assistant',
172
- timestamp: startTimestamp,
173
- message: {
174
- role: 'assistant',
175
- stop_reason: 'tool_use',
176
- content: [{ type: 'tool_use', name: 'Bash', input: {} }],
177
- },
178
- },
179
- {
180
- type: 'user',
181
- timestamp: startTimestamp,
182
- message: {
183
- role: 'user',
184
- content: [{ type: 'tool_result', content: 'command output' }],
185
- },
186
- },
187
- ];
188
-
189
- const structuredOutputTerminalEntries = (
190
- startTimestamp: string,
191
- ): object[] => [
192
- { type: 'user', timestamp: startTimestamp, message: { role: 'user' } },
193
- {
194
- type: 'assistant',
195
- timestamp: startTimestamp,
196
- message: {
197
- role: 'assistant',
198
- stop_reason: 'tool_use',
199
- content: [{ type: 'tool_use', name: 'StructuredOutput', input: {} }],
200
- },
201
- },
202
- {
203
- type: 'user',
204
- timestamp: startTimestamp,
205
- message: {
206
- role: 'user',
207
- content: [
208
- {
209
- type: 'tool_result',
210
- content: 'Structured output provided successfully',
211
- },
212
- ],
213
- },
214
- },
215
- ];
216
-
217
- const emptyUserTerminalEntries = (startTimestamp: string): object[] => [
218
- { type: 'user', timestamp: startTimestamp, message: { role: 'user' } },
219
- {
220
- type: 'assistant',
221
- timestamp: startTimestamp,
222
- message: {
223
- role: 'assistant',
224
- stop_reason: 'tool_use',
225
- content: [{ type: 'tool_use', name: 'Bash', input: {} }],
226
- },
227
- },
228
- {
229
- type: 'user',
230
- timestamp: startTimestamp,
231
- message: { role: 'user', content: [] },
232
- },
233
- ];
234
-
235
- const pendingToolUseEntries = (startTimestamp: string): object[] => [
236
- { type: 'user', timestamp: startTimestamp, message: { role: 'user' } },
237
- {
238
- type: 'user',
239
- timestamp: startTimestamp,
240
- message: {
241
- role: 'user',
242
- content: [{ type: 'tool_result', content: '' }],
243
- },
244
- },
245
- {
246
- type: 'assistant',
247
- timestamp: startTimestamp,
248
- message: {
249
- role: 'assistant',
250
- stop_reason: 'tool_use',
251
- content: [{ type: 'tool_use', name: 'Bash', input: {} }],
252
- },
253
- },
254
- ];
255
-
256
- it('reports a running sub-agent with silent seconds from the file mtime and running seconds from the first entry', async () => {
257
- const sessionName = 'https_//github_com/owner/repo/issues/9';
258
- const startTimestamp = '2026-06-27T11:45:00.000Z';
259
- writeAgentTranscript(
260
- sessionName,
261
- 'aaa111',
262
- runningEntries(startTimestamp),
263
- nowEpochSeconds - 120,
264
- );
265
- const repository = new TranscriptSessionSubAgentActivityRepository(
266
- createResolver(),
267
- emptyProcessLister(),
268
- now,
269
- );
270
-
271
- const result = await repository.listSubAgentActivitiesBySessionName(
272
- [sessionName],
273
- transcriptMapFor([sessionName]),
274
- );
275
-
276
- expect(result.get(sessionName)).toEqual([
277
- {
278
- label: 'agent-aaa111',
279
- silentSeconds: 120,
280
- runningSeconds: 900,
281
- waitingOnExternalProcess: false,
282
- finishedResultUnconsumed: false,
283
- },
284
- ]);
285
- });
286
-
287
- it('excludes a finished sub-agent whose last entry stop_reason is end_turn', async () => {
288
- const sessionName = 'https_//github_com/owner/repo/issues/9';
289
- writeAgentTranscript(
290
- sessionName,
291
- 'done1',
292
- finishedEntries('2026-06-27T11:00:00.000Z'),
293
- nowEpochSeconds - 30,
294
- );
295
- const repository = new TranscriptSessionSubAgentActivityRepository(
296
- createResolver(),
297
- emptyProcessLister(),
298
- now,
299
- );
300
-
301
- const result = await repository.listSubAgentActivitiesBySessionName(
302
- [sessionName],
303
- transcriptMapFor([sessionName]),
304
- );
305
-
306
- expect(result.size).toBe(0);
307
- });
308
-
309
- it('excludes a finished sub-agent whose last entry stop_reason is stop_sequence', async () => {
310
- const sessionName = 'https_//github_com/owner/repo/issues/9';
311
- writeAgentTranscript(
312
- sessionName,
313
- 'done2',
314
- stopSequenceFinishedEntries('2026-06-27T11:00:00.000Z'),
315
- nowEpochSeconds - 30,
316
- );
317
- const repository = new TranscriptSessionSubAgentActivityRepository(
318
- createResolver(),
319
- emptyProcessLister(),
320
- now,
321
- );
322
-
323
- const result = await repository.listSubAgentActivitiesBySessionName(
324
- [sessionName],
325
- transcriptMapFor([sessionName]),
326
- );
327
-
328
- expect(result.size).toBe(0);
329
- });
330
-
331
- it('excludes a finished sub-agent whose last entry is a final assistant text answer with a null stop_reason', async () => {
332
- const sessionName = 'https_//github_com/owner/repo/issues/9';
333
- writeAgentTranscript(
334
- sessionName,
335
- 'finaltext',
336
- finalTextAnswerEntries('2026-06-27T11:00:00.000Z'),
337
- nowEpochSeconds - 600,
338
- );
339
- const repository = new TranscriptSessionSubAgentActivityRepository(
340
- createResolver(),
341
- emptyProcessLister(),
342
- now,
343
- );
344
-
345
- const result = await repository.listSubAgentActivitiesBySessionName(
346
- [sessionName],
347
- transcriptMapFor([sessionName]),
348
- );
349
-
350
- expect(result.size).toBe(0);
351
- });
352
-
353
- it('excludes a sub-agent whose transcript ends with a user interruption text entry', async () => {
354
- const sessionName = 'https_//github_com/owner/repo/issues/9';
355
- writeAgentTranscript(
356
- sessionName,
357
- 'interrupted',
358
- interruptedEntries('2026-06-27T11:00:00.000Z'),
359
- nowEpochSeconds - 600,
360
- );
361
- const repository = new TranscriptSessionSubAgentActivityRepository(
362
- createResolver(),
363
- emptyProcessLister(),
364
- now,
365
- );
366
-
367
- const result = await repository.listSubAgentActivitiesBySessionName(
368
- [sessionName],
369
- transcriptMapFor([sessionName]),
370
- );
371
-
372
- expect(result.size).toBe(0);
373
- });
374
-
375
- it('keeps an in-flight sub-agent whose transcript tail is an ordinary tool result awaiting the next assistant turn', async () => {
376
- // The transcript tail of an actively working agent alternates between a
377
- // pending tool_use (assistant) and a tool_result (user). Treating the
378
- // tool_result tail as completion made an active agent flap in and out of
379
- // the snapshot between samples; it must stay in the snapshot instead.
380
- const sessionName = 'https_//github_com/owner/repo/issues/9';
381
- writeAgentTranscript(
382
- sessionName,
383
- 'toolresultend',
384
- inFlightToolResultTailEntries('2026-06-27T11:50:00.000Z'),
385
- nowEpochSeconds - 60,
386
- );
387
- const repository = new TranscriptSessionSubAgentActivityRepository(
388
- createResolver(),
389
- emptyProcessLister(),
390
- now,
391
- );
392
-
393
- const result = await repository.listSubAgentActivitiesBySessionName(
394
- [sessionName],
395
- transcriptMapFor([sessionName]),
396
- );
397
-
398
- expect(result.get(sessionName)).toEqual([
399
- {
400
- label: 'agent-toolresultend',
401
- silentSeconds: 60,
402
- runningSeconds: 600,
403
- waitingOnExternalProcess: false,
404
- finishedResultUnconsumed: false,
405
- },
406
- ]);
407
- });
408
-
409
- it('excludes a finished sub-agent whose transcript ends with the final StructuredOutput tool result', async () => {
410
- const sessionName = 'https_//github_com/owner/repo/issues/9';
411
- writeAgentTranscript(
412
- sessionName,
413
- 'structuredend',
414
- structuredOutputTerminalEntries('2026-06-27T11:00:00.000Z'),
415
- nowEpochSeconds - 600,
416
- );
417
- const repository = new TranscriptSessionSubAgentActivityRepository(
418
- createResolver(),
419
- emptyProcessLister(),
420
- now,
421
- );
422
-
423
- const result = await repository.listSubAgentActivitiesBySessionName(
424
- [sessionName],
425
- transcriptMapFor([sessionName]),
426
- );
427
-
428
- expect(result.size).toBe(0);
429
- });
430
-
431
- it('keeps an in-flight sub-agent whose tail tool result follows a Bash call even when an earlier turn used StructuredOutput', async () => {
432
- // Only the assistant turn immediately preceding the tail tool_result
433
- // decides completion: an earlier StructuredOutput call that was already
434
- // consumed must not mark a later in-flight tool_result as terminal.
435
- const sessionName = 'https_//github_com/owner/repo/issues/9';
436
- const startTimestamp = '2026-06-27T11:50:00.000Z';
437
- writeAgentTranscript(
438
- sessionName,
439
- 'laterbash',
440
- [
441
- ...structuredOutputTerminalEntries(startTimestamp),
442
- {
443
- type: 'assistant',
444
- timestamp: startTimestamp,
445
- message: {
446
- role: 'assistant',
447
- stop_reason: 'tool_use',
448
- content: [{ type: 'tool_use', name: 'Bash', input: {} }],
449
- },
450
- },
451
- {
452
- type: 'user',
453
- timestamp: startTimestamp,
454
- message: {
455
- role: 'user',
456
- content: [{ type: 'tool_result', content: 'command output' }],
457
- },
458
- },
459
- ],
460
- nowEpochSeconds - 60,
461
- );
462
- const repository = new TranscriptSessionSubAgentActivityRepository(
463
- createResolver(),
464
- emptyProcessLister(),
465
- now,
466
- );
467
-
468
- const result = await repository.listSubAgentActivitiesBySessionName(
469
- [sessionName],
470
- transcriptMapFor([sessionName]),
471
- );
472
-
473
- expect(result.get(sessionName)).toEqual([
474
- {
475
- label: 'agent-laterbash',
476
- silentSeconds: 60,
477
- runningSeconds: 600,
478
- waitingOnExternalProcess: false,
479
- finishedResultUnconsumed: false,
480
- },
481
- ]);
482
- });
483
-
484
- it('excludes a dead sub-agent whose transcript ends with a user entry that has no content blocks', async () => {
485
- const sessionName = 'https_//github_com/owner/repo/issues/9';
486
- writeAgentTranscript(
487
- sessionName,
488
- 'emptyuserend',
489
- emptyUserTerminalEntries('2026-06-27T11:00:00.000Z'),
490
- nowEpochSeconds - 600,
491
- );
492
- const repository = new TranscriptSessionSubAgentActivityRepository(
493
- createResolver(),
494
- emptyProcessLister(),
495
- now,
496
- );
497
-
498
- const result = await repository.listSubAgentActivitiesBySessionName(
499
- [sessionName],
500
- transcriptMapFor([sessionName]),
501
- );
502
-
503
- expect(result.size).toBe(0);
504
- });
505
-
506
- it('flags a genuinely-active sub-agent whose last entry is a pending tool call', async () => {
507
- const sessionName = 'https_//github_com/owner/repo/issues/9';
508
- writeAgentTranscript(
509
- sessionName,
510
- 'pending',
511
- pendingToolUseEntries('2026-06-27T11:45:00.000Z'),
512
- nowEpochSeconds - 600,
513
- );
514
- const repository = new TranscriptSessionSubAgentActivityRepository(
515
- createResolver(),
516
- emptyProcessLister(),
517
- now,
518
- );
519
-
520
- const result = await repository.listSubAgentActivitiesBySessionName(
521
- [sessionName],
522
- transcriptMapFor([sessionName]),
523
- );
524
-
525
- expect(result.get(sessionName)).toEqual([
526
- {
527
- label: 'agent-pending',
528
- silentSeconds: 600,
529
- runningSeconds: 900,
530
- waitingOnExternalProcess: false,
531
- finishedResultUnconsumed: false,
532
- },
533
- ]);
534
- });
535
-
536
- it('flags a long-silent genuine stall whose last entry is a pending tool call regardless of how old it is', async () => {
537
- const sessionName = 'https_//github_com/owner/repo/issues/9';
538
- const fourDaysSeconds = 4 * 24 * 60 * 60;
539
- writeAgentTranscript(
540
- sessionName,
541
- 'longstall',
542
- pendingToolUseEntries('2026-06-23T12:00:00.000Z'),
543
- nowEpochSeconds - fourDaysSeconds,
544
- );
545
- const repository = new TranscriptSessionSubAgentActivityRepository(
546
- createResolver(),
547
- emptyProcessLister(),
548
- now,
549
- );
550
-
551
- const result = await repository.listSubAgentActivitiesBySessionName(
552
- [sessionName],
553
- transcriptMapFor([sessionName]),
554
- );
555
-
556
- expect(result.get(sessionName)).toEqual([
557
- {
558
- label: 'agent-longstall',
559
- silentSeconds: fourDaysSeconds,
560
- runningSeconds: fourDaysSeconds,
561
- waitingOnExternalProcess: false,
562
- finishedResultUnconsumed: false,
563
- },
564
- ]);
565
- });
566
-
567
- it('follows a symlinked transcript when computing silent seconds', async () => {
568
- const sessionName = 'https_//github_com/owner/repo/issues/9';
569
- const targetDir = fs.mkdtempSync(
570
- path.join(os.tmpdir(), 'subagent-target-'),
571
- );
572
- const targetPath = path.join(targetDir, 'real-agent.jsonl');
573
- fs.writeFileSync(
574
- targetPath,
575
- runningEntries('2026-06-27T11:50:00.000Z')
576
- .map((entry) => JSON.stringify(entry))
577
- .join('\n'),
578
- 'utf8',
579
- );
580
- fs.utimesSync(targetPath, nowEpochSeconds - 60, nowEpochSeconds - 60);
581
- const dir = subAgentsDirFor(sessionName);
582
- fs.symlinkSync(targetPath, path.join(dir, 'agent-link1.jsonl'));
583
- const repository = new TranscriptSessionSubAgentActivityRepository(
584
- createResolver(),
585
- emptyProcessLister(),
586
- now,
587
- );
588
-
589
- const result = await repository.listSubAgentActivitiesBySessionName(
590
- [sessionName],
591
- transcriptMapFor([sessionName]),
592
- );
593
-
594
- expect(result.get(sessionName)).toEqual([
595
- {
596
- label: 'agent-link1',
597
- silentSeconds: 60,
598
- runningSeconds: 600,
599
- waitingOnExternalProcess: false,
600
- finishedResultUnconsumed: false,
601
- },
602
- ]);
603
- fs.rmSync(targetDir, { force: true, recursive: true });
604
- });
605
-
606
- it('returns an empty map when the resolver returns null', async () => {
607
- const repository = new TranscriptSessionSubAgentActivityRepository(
608
- { resolveSubAgentsDirectory: () => null },
609
- emptyProcessLister(),
610
- now,
611
- );
612
-
613
- const result = await repository.listSubAgentActivitiesBySessionName(
614
- ['https_//github_com/owner/repo/issues/9'],
615
- transcriptMapFor(['https_//github_com/owner/repo/issues/9']),
616
- );
617
-
618
- expect(result.size).toBe(0);
619
- });
620
-
621
- it('ignores a session whose subagents directory does not exist', async () => {
622
- const repository = new TranscriptSessionSubAgentActivityRepository(
623
- createResolver(),
624
- emptyProcessLister(),
625
- now,
626
- );
627
-
628
- const result = await repository.listSubAgentActivitiesBySessionName(
629
- ['https_//github_com/owner/repo/issues/404'],
630
- transcriptMapFor(['https_//github_com/owner/repo/issues/404']),
631
- );
632
-
633
- expect(result.size).toBe(0);
634
- });
635
-
636
- it('groups multiple running sub-agents under the same session', async () => {
637
- const sessionName = 'https_//github_com/owner/repo/issues/9';
638
- writeAgentTranscript(
639
- sessionName,
640
- 'one',
641
- runningEntries('2026-06-27T11:55:00.000Z'),
642
- nowEpochSeconds - 10,
643
- );
644
- writeAgentTranscript(
645
- sessionName,
646
- 'two',
647
- runningEntries('2026-06-27T11:55:00.000Z'),
648
- nowEpochSeconds - 20,
649
- );
650
- const repository = new TranscriptSessionSubAgentActivityRepository(
651
- createResolver(),
652
- emptyProcessLister(),
653
- now,
654
- );
655
-
656
- const result = await repository.listSubAgentActivitiesBySessionName(
657
- [sessionName],
658
- transcriptMapFor([sessionName]),
659
- );
660
-
661
- expect(result.get(sessionName)).toHaveLength(2);
662
- });
663
-
664
- it('clamps negative silent and running seconds to zero', async () => {
665
- const sessionName = 'https_//github_com/owner/repo/issues/9';
666
- writeAgentTranscript(
667
- sessionName,
668
- 'future',
669
- runningEntries('2026-06-27T13:00:00.000Z'),
670
- nowEpochSeconds + 100,
671
- );
672
- const repository = new TranscriptSessionSubAgentActivityRepository(
673
- createResolver(),
674
- emptyProcessLister(),
675
- now,
676
- );
677
-
678
- const result = await repository.listSubAgentActivitiesBySessionName(
679
- [sessionName],
680
- transcriptMapFor([sessionName]),
681
- );
682
-
683
- expect(result.get(sessionName)).toEqual([
684
- {
685
- label: 'agent-future',
686
- silentSeconds: 0,
687
- runningSeconds: 0,
688
- waitingOnExternalProcess: false,
689
- finishedResultUnconsumed: false,
690
- },
691
- ]);
692
- });
693
-
694
- it('resolves sub-agent transcripts laid out exactly as Claude Code stores them on disk', async () => {
695
- const sessionName = 'https_//github_com/HiromiShikata/repo/issues/2355';
696
- const projectsRoot = path.join(rootDirectory, 'projects');
697
- const cwdSlug =
698
- '-home-user-0-workspaces-workspace1-oss-example-repo-worktrees-i2355';
699
- const sessionUuid = 'ba0637e1-9ff1-41a8-b13c-f45e6a71efc5';
700
- const mainTranscriptPath = path.join(
701
- projectsRoot,
702
- cwdSlug,
703
- `${sessionUuid}.jsonl`,
704
- );
705
- const subagentsDir = path.join(
706
- projectsRoot,
707
- cwdSlug,
708
- sessionUuid,
709
- 'subagents',
710
- );
711
- fs.mkdirSync(subagentsDir, { recursive: true });
712
- fs.mkdirSync(path.dirname(mainTranscriptPath), { recursive: true });
713
- fs.writeFileSync(mainTranscriptPath, '', 'utf8');
714
- const agentFile = path.join(subagentsDir, 'agent-afcbe335fdbec0a28.jsonl');
715
- fs.writeFileSync(
716
- agentFile,
717
- runningEntries('2026-06-27T11:45:00.000Z')
718
- .map((entry) => JSON.stringify(entry))
719
- .join('\n'),
720
- 'utf8',
721
- );
722
- fs.utimesSync(agentFile, nowEpochSeconds - 120, nowEpochSeconds - 120);
723
-
724
- const repository = new TranscriptSessionSubAgentActivityRepository(
725
- new FileSystemSubAgentTranscriptDirectoryResolver(projectsRoot),
726
- emptyProcessLister(),
727
- now,
728
- );
729
-
730
- const result = await repository.listSubAgentActivitiesBySessionName(
731
- [sessionName],
732
- new Map([[sessionName, mainTranscriptPath]]),
733
- );
734
-
735
- expect(result.get(sessionName)).toEqual([
736
- {
737
- label: 'agent-afcbe335fdbec0a28',
738
- silentSeconds: 120,
739
- runningSeconds: 900,
740
- waitingOnExternalProcess: false,
741
- finishedResultUnconsumed: false,
742
- },
743
- ]);
744
- });
745
-
746
- it('flags a marker-less stall and excludes a finished transcript in the same session regardless of their age', async () => {
747
- const sessionName = 'https_//github_com/owner/repo/issues/9';
748
- const twoDaysSeconds = 2 * 24 * 60 * 60;
749
- writeAgentTranscript(
750
- sessionName,
751
- 'finishedold',
752
- finishedEntries('2026-06-25T12:00:00.000Z'),
753
- nowEpochSeconds - twoDaysSeconds,
754
- );
755
- writeAgentTranscript(
756
- sessionName,
757
- 'stalledold',
758
- pendingToolUseEntries('2026-06-25T12:00:00.000Z'),
759
- nowEpochSeconds - twoDaysSeconds,
760
- );
761
- const repository = new TranscriptSessionSubAgentActivityRepository(
762
- createResolver(),
763
- emptyProcessLister(),
764
- now,
765
- );
766
-
767
- const result = await repository.listSubAgentActivitiesBySessionName(
768
- [sessionName],
769
- transcriptMapFor([sessionName]),
770
- );
771
-
772
- expect(result.get(sessionName)).toEqual([
773
- {
774
- label: 'agent-stalledold',
775
- silentSeconds: twoDaysSeconds,
776
- runningSeconds: twoDaysSeconds,
777
- waitingOnExternalProcess: false,
778
- finishedResultUnconsumed: false,
779
- },
780
- ]);
781
- });
782
-
783
- describe('delegation-wait classification from a pending nested agent tool call', () => {
784
- const pendingDelegationEntries = (
785
- startTimestamp: string,
786
- toolName: string,
787
- ): object[] => [
788
- { type: 'user', timestamp: startTimestamp, message: { role: 'user' } },
789
- {
790
- type: 'assistant',
791
- timestamp: startTimestamp,
792
- message: {
793
- role: 'assistant',
794
- stop_reason: 'tool_use',
795
- content: [
796
- {
797
- type: 'tool_use',
798
- name: toolName,
799
- input: { prompt: 'do the sub-task', subagent_type: 'impl' },
800
- },
801
- ],
802
- },
803
- },
804
- ];
805
-
806
- it.each(['Agent', 'Task'])(
807
- 'classifies a parent as waiting when its transcript tail is a pending %s tool call spawning a nested child',
808
- async (toolName) => {
809
- const sessionName = 'https_//github_com/owner/repo/issues/9';
810
- writeAgentTranscript(
811
- sessionName,
812
- 'delegating',
813
- pendingDelegationEntries('2026-06-27T11:45:00.000Z', toolName),
814
- nowEpochSeconds - 600,
815
- );
816
- const repository = new TranscriptSessionSubAgentActivityRepository(
817
- createResolver(),
818
- emptyProcessLister(),
819
- now,
820
- );
821
-
822
- const result = await repository.listSubAgentActivitiesBySessionName(
823
- [sessionName],
824
- transcriptMapFor([sessionName]),
825
- );
826
-
827
- expect(result.get(sessionName)).toEqual([
828
- {
829
- label: 'agent-delegating',
830
- silentSeconds: 600,
831
- runningSeconds: 900,
832
- waitingOnExternalProcess: true,
833
- finishedResultUnconsumed: false,
834
- },
835
- ]);
836
- },
837
- );
838
-
839
- it('stops classifying as waiting once the nested agent tool call has returned its tool result', async () => {
840
- const sessionName = 'https_//github_com/owner/repo/issues/9';
841
- const startTimestamp = '2026-06-27T11:45:00.000Z';
842
- writeAgentTranscript(
843
- sessionName,
844
- 'childdone',
845
- [
846
- ...pendingDelegationEntries(startTimestamp, 'Agent'),
847
- {
848
- type: 'user',
849
- timestamp: startTimestamp,
850
- message: {
851
- role: 'user',
852
- content: [{ type: 'tool_result', content: 'child finished' }],
853
- },
854
- },
855
- ],
856
- nowEpochSeconds - 600,
857
- );
858
- const repository = new TranscriptSessionSubAgentActivityRepository(
859
- createResolver(),
860
- emptyProcessLister(),
861
- now,
862
- );
863
-
864
- const result = await repository.listSubAgentActivitiesBySessionName(
865
- [sessionName],
866
- transcriptMapFor([sessionName]),
867
- );
868
-
869
- expect(result.get(sessionName)?.[0]?.waitingOnExternalProcess).toBe(
870
- false,
871
- );
872
- });
873
-
874
- it('does not classify as waiting when a later pending Bash call follows an already-consumed nested agent call', async () => {
875
- const sessionName = 'https_//github_com/owner/repo/issues/9';
876
- const startTimestamp = '2026-06-27T11:45:00.000Z';
877
- writeAgentTranscript(
878
- sessionName,
879
- 'laterpending',
880
- [
881
- ...pendingDelegationEntries(startTimestamp, 'Agent'),
882
- {
883
- type: 'user',
884
- timestamp: startTimestamp,
885
- message: {
886
- role: 'user',
887
- content: [{ type: 'tool_result', content: 'child finished' }],
888
- },
889
- },
890
- {
891
- type: 'assistant',
892
- timestamp: startTimestamp,
893
- message: {
894
- role: 'assistant',
895
- stop_reason: 'tool_use',
896
- content: [{ type: 'tool_use', name: 'Bash', input: {} }],
897
- },
898
- },
899
- ],
900
- nowEpochSeconds - 600,
901
- );
902
- const repository = new TranscriptSessionSubAgentActivityRepository(
903
- createResolver(),
904
- emptyProcessLister(),
905
- now,
906
- );
907
-
908
- const result = await repository.listSubAgentActivitiesBySessionName(
909
- [sessionName],
910
- transcriptMapFor([sessionName]),
911
- );
912
-
913
- expect(result.get(sessionName)?.[0]?.waitingOnExternalProcess).toBe(
914
- false,
915
- );
916
- });
917
- });
918
-
919
- describe('external-wait classification from the pending tool command', () => {
920
- const CI_WATCH_COMMAND =
921
- 'gh pr checks 123 --watch -i 60 -R owner/repo 2>&1 | tail -5';
922
-
923
- const pendingCommandEntries = (
924
- startTimestamp: string,
925
- command: string,
926
- ): object[] => [
927
- { type: 'user', timestamp: startTimestamp, message: { role: 'user' } },
928
- {
929
- type: 'assistant',
930
- timestamp: startTimestamp,
931
- message: {
932
- role: 'assistant',
933
- stop_reason: 'tool_use',
934
- content: [{ type: 'tool_use', name: 'Bash', input: { command } }],
935
- },
936
- },
937
- ];
938
-
939
- it('classifies a sub-agent as waiting when its pending tool command matches a live process', async () => {
940
- const sessionName = 'https_//github_com/owner/repo/issues/9';
941
- writeAgentTranscript(
942
- sessionName,
943
- 'ciwait',
944
- pendingCommandEntries('2026-06-27T11:45:00.000Z', CI_WATCH_COMMAND),
945
- nowEpochSeconds - 600,
946
- );
947
- const repository = new TranscriptSessionSubAgentActivityRepository(
948
- createResolver(),
949
- processListerWith([
950
- {
951
- commandLine: `/bin/bash -c ${CI_WATCH_COMMAND}`,
952
- elapsedSeconds: 600,
953
- },
954
- ]),
955
- now,
956
- );
957
-
958
- const result = await repository.listSubAgentActivitiesBySessionName(
959
- [sessionName],
960
- transcriptMapFor([sessionName]),
961
- );
962
-
963
- expect(result.get(sessionName)).toEqual([
964
- {
965
- label: 'agent-ciwait',
966
- silentSeconds: 600,
967
- runningSeconds: 900,
968
- waitingOnExternalProcess: true,
969
- finishedResultUnconsumed: false,
970
- },
971
- ]);
972
- });
973
-
974
- it('classifies a sub-agent as hung when no live process matches its pending tool command', async () => {
975
- const sessionName = 'https_//github_com/owner/repo/issues/9';
976
- writeAgentTranscript(
977
- sessionName,
978
- 'dead',
979
- pendingCommandEntries('2026-06-27T11:45:00.000Z', CI_WATCH_COMMAND),
980
- nowEpochSeconds - 600,
981
- );
982
- const repository = new TranscriptSessionSubAgentActivityRepository(
983
- createResolver(),
984
- processListerWith([
985
- { commandLine: 'node unrelated-server.js', elapsedSeconds: 5000 },
986
- ]),
987
- now,
988
- );
989
-
990
- const result = await repository.listSubAgentActivitiesBySessionName(
991
- [sessionName],
992
- transcriptMapFor([sessionName]),
993
- );
994
-
995
- expect(result.get(sessionName)).toEqual([
996
- {
997
- label: 'agent-dead',
998
- silentSeconds: 600,
999
- runningSeconds: 900,
1000
- waitingOnExternalProcess: false,
1001
- finishedResultUnconsumed: false,
1002
- },
1003
- ]);
1004
- });
1005
-
1006
- it('classifies a sub-agent as hung when its pending tool call carries no command string', async () => {
1007
- const sessionName = 'https_//github_com/owner/repo/issues/9';
1008
- writeAgentTranscript(
1009
- sessionName,
1010
- 'nocmd',
1011
- pendingToolUseEntries('2026-06-27T11:45:00.000Z'),
1012
- nowEpochSeconds - 600,
1013
- );
1014
- const repository = new TranscriptSessionSubAgentActivityRepository(
1015
- createResolver(),
1016
- processListerWith([
1017
- { commandLine: 'any process at all', elapsedSeconds: 1 },
1018
- ]),
1019
- now,
1020
- );
1021
-
1022
- const result = await repository.listSubAgentActivitiesBySessionName(
1023
- [sessionName],
1024
- transcriptMapFor([sessionName]),
1025
- );
1026
-
1027
- expect(result.get(sessionName)?.[0]?.waitingOnExternalProcess).toBe(
1028
- false,
1029
- );
1030
- });
1031
-
1032
- it('matches on the whitespace-normalized first 60 characters of a long multi-line command', async () => {
1033
- const sessionName = 'https_//github_com/owner/repo/issues/9';
1034
- const longCommand =
1035
- 'OWNER=owner; REPO=repo; PR=123\n SHA=$(gh api repos/$OWNER/$REPO/pulls/$PR --jq .head.sha)\n sleep 600';
1036
- writeAgentTranscript(
1037
- sessionName,
1038
- 'longcmd',
1039
- pendingCommandEntries('2026-06-27T11:45:00.000Z', longCommand),
1040
- nowEpochSeconds - 600,
1041
- );
1042
- const normalizedProcessLine =
1043
- 'bash -c OWNER=owner; REPO=repo; PR=123 SHA=$(gh api repos/$OWNER/$REPO/pulls/$PR --jq .head.sha) sleep 600';
1044
- const repository = new TranscriptSessionSubAgentActivityRepository(
1045
- createResolver(),
1046
- processListerWith([
1047
- { commandLine: normalizedProcessLine, elapsedSeconds: 600 },
1048
- ]),
1049
- now,
1050
- );
1051
-
1052
- const result = await repository.listSubAgentActivitiesBySessionName(
1053
- [sessionName],
1054
- transcriptMapFor([sessionName]),
1055
- );
1056
-
1057
- expect(result.get(sessionName)?.[0]?.waitingOnExternalProcess).toBe(true);
1058
- });
1059
- });
1060
-
1061
- const writeMainTranscript = (sessionName: string, lines: object[]): void => {
1062
- const filePath = mainTranscriptPathFor(sessionName);
1063
- fs.mkdirSync(path.dirname(filePath), { recursive: true });
1064
- fs.writeFileSync(
1065
- filePath,
1066
- lines.map((line) => JSON.stringify(line)).join('\n'),
1067
- 'utf8',
1068
- );
1069
- };
1070
-
1071
- const killedNotificationEntry = (
1072
- agentId: string,
1073
- timestamp: string,
1074
- ): object => ({
1075
- type: 'queue-operation',
1076
- operation: 'enqueue',
1077
- timestamp,
1078
- content: `<task-notification>\n<task-id>${agentId}</task-id>\n<status>killed</status>\n</task-notification>`,
1079
- });
1080
-
1081
- const failedNotificationEntry = (
1082
- agentId: string,
1083
- timestamp: string,
1084
- ): object => ({
1085
- type: 'queue-operation',
1086
- operation: 'enqueue',
1087
- timestamp,
1088
- content: `<task-notification>\n<task-id>${agentId}</task-id>\n<status>failed</status>\n</task-notification>`,
1089
- });
1090
-
1091
- const completedNotificationEntry = (
1092
- agentId: string,
1093
- timestamp: string,
1094
- ): object => ({
1095
- type: 'queue-operation',
1096
- operation: 'enqueue',
1097
- timestamp,
1098
- content: `<task-notification>\n<task-id>${agentId}</task-id>\n<status>completed</status>\n</task-notification>`,
1099
- });
1100
-
1101
- const stoppedNotificationEntry = (
1102
- agentId: string,
1103
- timestamp: string,
1104
- ): object => ({
1105
- type: 'queue-operation',
1106
- operation: 'enqueue',
1107
- timestamp,
1108
- content: `<task-notification>\n<task-id>${agentId}</task-id>\n<status>stopped</status>\n</task-notification>`,
1109
- });
1110
-
1111
- const livenessResolverWith = (
1112
- liveIds: string[] | null,
1113
- ): SubAgentLivenessResolver => ({
1114
- resolveLiveSubAgentIds: async () =>
1115
- liveIds === null ? null : new Set(liveIds),
1116
- });
1117
-
1118
- it('excludes a sub-agent killed via TaskStop when the parent transcript records a killed notification for its id', async () => {
1119
- const sessionName = 'https_//github_com/owner/repo/issues/9';
1120
- const killedAgentId = 'aaabbbbcccc00001';
1121
- writeAgentTranscript(
1122
- sessionName,
1123
- killedAgentId,
1124
- pendingToolUseEntries('2026-06-27T11:00:00.000Z'),
1125
- nowEpochSeconds - 300,
1126
- );
1127
- writeMainTranscript(sessionName, [
1128
- killedNotificationEntry(killedAgentId, '2026-06-27T11:55:00.000Z'),
1129
- ]);
1130
- const repository = new TranscriptSessionSubAgentActivityRepository(
1131
- createResolver(),
1132
- emptyProcessLister(),
1133
- now,
1134
- );
1135
-
1136
- const result = await repository.listSubAgentActivitiesBySessionName(
1137
- [sessionName],
1138
- transcriptMapFor([sessionName]),
1139
- );
1140
-
1141
- expect(result.size).toBe(0);
1142
- });
1143
-
1144
- it('excludes a sub-agent whose process crashed when the parent transcript records a failed notification for its id', async () => {
1145
- const sessionName = 'https_//github_com/owner/repo/issues/9';
1146
- const failedAgentId = 'aaabbbbcccc00002';
1147
- writeAgentTranscript(
1148
- sessionName,
1149
- failedAgentId,
1150
- pendingToolUseEntries('2026-06-27T11:00:00.000Z'),
1151
- nowEpochSeconds - 300,
1152
- );
1153
- writeMainTranscript(sessionName, [
1154
- failedNotificationEntry(failedAgentId, '2026-06-27T11:55:00.000Z'),
1155
- ]);
1156
- const repository = new TranscriptSessionSubAgentActivityRepository(
1157
- createResolver(),
1158
- emptyProcessLister(),
1159
- now,
1160
- );
1161
-
1162
- const result = await repository.listSubAgentActivitiesBySessionName(
1163
- [sessionName],
1164
- transcriptMapFor([sessionName]),
1165
- );
1166
-
1167
- expect(result.size).toBe(0);
1168
- });
1169
-
1170
- it('excludes a sub-agent whose parent transcript records a completed notification for its id', async () => {
1171
- const sessionName = 'https_//github_com/owner/repo/issues/9';
1172
- const startTimestamp = '2026-06-27T11:45:00.000Z';
1173
- const completedAgentId = 'aaabbbbcccc00003';
1174
- writeAgentTranscript(
1175
- sessionName,
1176
- completedAgentId,
1177
- pendingToolUseEntries(startTimestamp),
1178
- nowEpochSeconds - 120,
1179
- );
1180
- writeMainTranscript(sessionName, [
1181
- completedNotificationEntry(completedAgentId, '2026-06-27T11:58:00.000Z'),
1182
- ]);
1183
- const repository = new TranscriptSessionSubAgentActivityRepository(
1184
- createResolver(),
1185
- emptyProcessLister(),
1186
- now,
1187
- );
1188
-
1189
- const result = await repository.listSubAgentActivitiesBySessionName(
1190
- [sessionName],
1191
- transcriptMapFor([sessionName]),
1192
- );
1193
-
1194
- expect(result.size).toBe(0);
1195
- });
1196
-
1197
- it('excludes a sub-agent whose parent transcript records a stopped notification for its id', async () => {
1198
- const sessionName = 'https_//github_com/owner/repo/issues/9';
1199
- const stoppedAgentId = 'aaabbbbcccc00006';
1200
- writeAgentTranscript(
1201
- sessionName,
1202
- stoppedAgentId,
1203
- pendingToolUseEntries('2026-06-27T11:00:00.000Z'),
1204
- nowEpochSeconds - 300,
1205
- );
1206
- writeMainTranscript(sessionName, [
1207
- stoppedNotificationEntry(stoppedAgentId, '2026-06-27T11:55:00.000Z'),
1208
- ]);
1209
- const repository = new TranscriptSessionSubAgentActivityRepository(
1210
- createResolver(),
1211
- emptyProcessLister(),
1212
- now,
1213
- );
1214
-
1215
- const result = await repository.listSubAgentActivitiesBySessionName(
1216
- [sessionName],
1217
- transcriptMapFor([sessionName]),
1218
- );
1219
-
1220
- expect(result.size).toBe(0);
1221
- });
1222
-
1223
- it('excludes every task id listed in a single multi-id terminal notification', async () => {
1224
- const sessionName = 'https_//github_com/owner/repo/issues/9';
1225
- const firstAgentId = 'aaabbbbcccc10001';
1226
- const secondAgentId = 'aaabbbbcccc10002';
1227
- writeAgentTranscript(
1228
- sessionName,
1229
- firstAgentId,
1230
- pendingToolUseEntries('2026-06-27T11:00:00.000Z'),
1231
- nowEpochSeconds - 300,
1232
- );
1233
- writeAgentTranscript(
1234
- sessionName,
1235
- secondAgentId,
1236
- pendingToolUseEntries('2026-06-27T11:00:00.000Z'),
1237
- nowEpochSeconds - 300,
1238
- );
1239
- writeMainTranscript(sessionName, [
1240
- {
1241
- type: 'queue-operation',
1242
- operation: 'enqueue',
1243
- timestamp: '2026-06-27T11:55:00.000Z',
1244
- content: `<task-notification>\n<task-id>${firstAgentId}</task-id>\n<task-id>${secondAgentId}</task-id>\n<status>completed</status>\n</task-notification>`,
1245
- },
1246
- ]);
1247
- const repository = new TranscriptSessionSubAgentActivityRepository(
1248
- createResolver(),
1249
- emptyProcessLister(),
1250
- now,
1251
- );
1252
-
1253
- const result = await repository.listSubAgentActivitiesBySessionName(
1254
- [sessionName],
1255
- transcriptMapFor([sessionName]),
1256
- );
1257
-
1258
- expect(result.size).toBe(0);
1259
- });
1260
-
1261
- it('excludes a killed sub-agent but reports a still-active sibling in the same session', async () => {
1262
- const sessionName = 'https_//github_com/owner/repo/issues/9';
1263
- const killedAgentId = 'aaabbbbcccc00004';
1264
- const aliveAgentId = 'aaabbbbcccc00005';
1265
- writeAgentTranscript(
1266
- sessionName,
1267
- killedAgentId,
1268
- pendingToolUseEntries('2026-06-27T11:00:00.000Z'),
1269
- nowEpochSeconds - 600,
1270
- );
1271
- writeAgentTranscript(
1272
- sessionName,
1273
- aliveAgentId,
1274
- runningEntries('2026-06-27T11:45:00.000Z'),
1275
- nowEpochSeconds - 120,
1276
- );
1277
- writeMainTranscript(sessionName, [
1278
- killedNotificationEntry(killedAgentId, '2026-06-27T11:55:00.000Z'),
1279
- ]);
1280
- const repository = new TranscriptSessionSubAgentActivityRepository(
1281
- createResolver(),
1282
- emptyProcessLister(),
1283
- now,
1284
- );
1285
-
1286
- const result = await repository.listSubAgentActivitiesBySessionName(
1287
- [sessionName],
1288
- transcriptMapFor([sessionName]),
1289
- );
1290
-
1291
- expect(result.get(sessionName)).toEqual([
1292
- {
1293
- label: `agent-${aliveAgentId}`,
1294
- silentSeconds: 120,
1295
- runningSeconds: 900,
1296
- waitingOnExternalProcess: false,
1297
- finishedResultUnconsumed: false,
1298
- },
1299
- ]);
1300
- });
1301
-
1302
- it('excludes a stale sub-agent whose tail is a plain tool result when no live process exists for its id', async () => {
1303
- const sessionName = 'https_//github_com/owner/repo/issues/9';
1304
- const deadAgentId = 'aaabbbbcccc20001';
1305
- writeAgentTranscript(
1306
- sessionName,
1307
- deadAgentId,
1308
- inFlightToolResultTailEntries('2026-06-27T11:00:00.000Z'),
1309
- nowEpochSeconds - 3600,
1310
- );
1311
- const repository = new TranscriptSessionSubAgentActivityRepository(
1312
- createResolver(),
1313
- emptyProcessLister(),
1314
- now,
1315
- livenessResolverWith(['aaabbbbcccc20002']),
1316
- );
1317
-
1318
- const result = await repository.listSubAgentActivitiesBySessionName(
1319
- [sessionName],
1320
- transcriptMapFor([sessionName]),
1321
- );
1322
-
1323
- expect(result.size).toBe(0);
1324
- });
1325
-
1326
- it('flags a genuinely-running silent sub-agent whose id is present in the live process set', async () => {
1327
- const sessionName = 'https_//github_com/owner/repo/issues/9';
1328
- const liveAgentId = 'aaabbbbcccc20003';
1329
- writeAgentTranscript(
1330
- sessionName,
1331
- liveAgentId,
1332
- pendingToolUseEntries('2026-06-27T11:45:00.000Z'),
1333
- nowEpochSeconds - 600,
1334
- );
1335
- const repository = new TranscriptSessionSubAgentActivityRepository(
1336
- createResolver(),
1337
- emptyProcessLister(),
1338
- now,
1339
- livenessResolverWith([liveAgentId]),
1340
- );
1341
-
1342
- const result = await repository.listSubAgentActivitiesBySessionName(
1343
- [sessionName],
1344
- transcriptMapFor([sessionName]),
1345
- );
1346
-
1347
- expect(result.get(sessionName)).toEqual([
1348
- {
1349
- label: `agent-${liveAgentId}`,
1350
- silentSeconds: 600,
1351
- runningSeconds: 900,
1352
- waitingOnExternalProcess: false,
1353
- finishedResultUnconsumed: false,
1354
- },
1355
- ]);
1356
- });
1357
-
1358
- it('reports a sub-agent even when the parent transcript path does not exist', async () => {
1359
- const sessionName = 'https_//github_com/owner/repo/issues/9';
1360
- const startTimestamp = '2026-06-27T11:45:00.000Z';
1361
- writeAgentTranscript(
1362
- sessionName,
1363
- 'aabb1122cc3344ee',
1364
- runningEntries(startTimestamp),
1365
- nowEpochSeconds - 120,
1366
- );
1367
- const repository = new TranscriptSessionSubAgentActivityRepository(
1368
- createResolver(),
1369
- emptyProcessLister(),
1370
- now,
1371
- );
1372
-
1373
- const result = await repository.listSubAgentActivitiesBySessionName(
1374
- [sessionName],
1375
- transcriptMapFor([sessionName]),
1376
- );
1377
-
1378
- expect(result.get(sessionName)).toEqual([
1379
- {
1380
- label: 'agent-aabb1122cc3344ee',
1381
- silentSeconds: 120,
1382
- runningSeconds: 900,
1383
- waitingOnExternalProcess: false,
1384
- finishedResultUnconsumed: false,
1385
- },
1386
- ]);
1387
- });
1388
-
1389
- it('reports a finished sub-agent still listed in the running-subagents record as an unconsumed result carrying its silence age', async () => {
1390
- const sessionName = 'https_//github_com/owner/repo/issues/9';
1391
- const unconsumedAgentId = 'aaabbbbcccc30001';
1392
- writeAgentTranscript(
1393
- sessionName,
1394
- unconsumedAgentId,
1395
- finishedEntries('2026-06-27T10:30:00.000Z'),
1396
- nowEpochSeconds - 5220,
1397
- );
1398
- const repository = new TranscriptSessionSubAgentActivityRepository(
1399
- createResolver(),
1400
- emptyProcessLister(),
1401
- now,
1402
- livenessResolverWith([unconsumedAgentId]),
1403
- );
1404
-
1405
- const result = await repository.listSubAgentActivitiesBySessionName(
1406
- [sessionName],
1407
- transcriptMapFor([sessionName]),
1408
- );
1409
-
1410
- expect(result.get(sessionName)).toEqual([
1411
- {
1412
- label: `agent-${unconsumedAgentId}`,
1413
- silentSeconds: 5220,
1414
- runningSeconds: 5400,
1415
- waitingOnExternalProcess: false,
1416
- finishedResultUnconsumed: true,
1417
- },
1418
- ]);
1419
- });
1420
-
1421
- it('reports a finished sub-agent whose tail is a final text answer as an unconsumed result while it stays in the running-subagents record', async () => {
1422
- const sessionName = 'https_//github_com/owner/repo/issues/9';
1423
- const unconsumedAgentId = 'aaabbbbcccc30002';
1424
- writeAgentTranscript(
1425
- sessionName,
1426
- unconsumedAgentId,
1427
- finalTextAnswerEntries('2026-06-27T11:00:00.000Z'),
1428
- nowEpochSeconds - 360,
1429
- );
1430
- const repository = new TranscriptSessionSubAgentActivityRepository(
1431
- createResolver(),
1432
- emptyProcessLister(),
1433
- now,
1434
- livenessResolverWith([unconsumedAgentId]),
1435
- );
1436
-
1437
- const result = await repository.listSubAgentActivitiesBySessionName(
1438
- [sessionName],
1439
- transcriptMapFor([sessionName]),
1440
- );
1441
-
1442
- expect(result.get(sessionName)).toEqual([
1443
- {
1444
- label: `agent-${unconsumedAgentId}`,
1445
- silentSeconds: 360,
1446
- runningSeconds: 3600,
1447
- waitingOnExternalProcess: false,
1448
- finishedResultUnconsumed: true,
1449
- },
1450
- ]);
1451
- });
1452
-
1453
- it('discards a finished sub-agent when the running-subagents record cannot be resolved', async () => {
1454
- const sessionName = 'https_//github_com/owner/repo/issues/9';
1455
- const finishedAgentId = 'aaabbbbcccc30003';
1456
- writeAgentTranscript(
1457
- sessionName,
1458
- finishedAgentId,
1459
- finishedEntries('2026-06-27T10:30:00.000Z'),
1460
- nowEpochSeconds - 5220,
1461
- );
1462
- const repository = new TranscriptSessionSubAgentActivityRepository(
1463
- createResolver(),
1464
- emptyProcessLister(),
1465
- now,
1466
- livenessResolverWith(null),
1467
- );
1468
-
1469
- const result = await repository.listSubAgentActivitiesBySessionName(
1470
- [sessionName],
1471
- transcriptMapFor([sessionName]),
1472
- );
1473
-
1474
- expect(result.size).toBe(0);
1475
- });
1476
-
1477
- it('discards a finished sub-agent whose id has already been removed from the running-subagents record', async () => {
1478
- const sessionName = 'https_//github_com/owner/repo/issues/9';
1479
- const finishedAgentId = 'aaabbbbcccc30004';
1480
- writeAgentTranscript(
1481
- sessionName,
1482
- finishedAgentId,
1483
- finishedEntries('2026-06-27T10:30:00.000Z'),
1484
- nowEpochSeconds - 5220,
1485
- );
1486
- const repository = new TranscriptSessionSubAgentActivityRepository(
1487
- createResolver(),
1488
- emptyProcessLister(),
1489
- now,
1490
- livenessResolverWith(['aaabbbbcccc30005']),
1491
- );
1492
-
1493
- const result = await repository.listSubAgentActivitiesBySessionName(
1494
- [sessionName],
1495
- transcriptMapFor([sessionName]),
1496
- );
1497
-
1498
- expect(result.size).toBe(0);
1499
- });
1500
-
1501
- it('reports a still-working sub-agent listed in the running-subagents record as having no unconsumed result', async () => {
1502
- const sessionName = 'https_//github_com/owner/repo/issues/9';
1503
- const workingAgentId = 'aaabbbbcccc30006';
1504
- writeAgentTranscript(
1505
- sessionName,
1506
- workingAgentId,
1507
- pendingToolUseEntries('2026-06-27T11:45:00.000Z'),
1508
- nowEpochSeconds - 600,
1509
- );
1510
- const repository = new TranscriptSessionSubAgentActivityRepository(
1511
- createResolver(),
1512
- emptyProcessLister(),
1513
- now,
1514
- livenessResolverWith([workingAgentId]),
1515
- );
1516
-
1517
- const result = await repository.listSubAgentActivitiesBySessionName(
1518
- [sessionName],
1519
- transcriptMapFor([sessionName]),
1520
- );
1521
-
1522
- expect(result.get(sessionName)).toEqual([
1523
- {
1524
- label: `agent-${workingAgentId}`,
1525
- silentSeconds: 600,
1526
- runningSeconds: 900,
1527
- waitingOnExternalProcess: false,
1528
- finishedResultUnconsumed: false,
1529
- },
1530
- ]);
1531
- });
1532
-
1533
- const outputFilePathFor = (sessionName: string, agentId: string): string => {
1534
- const mainTranscriptPath = mainTranscriptPathFor(sessionName);
1535
- const slug = path.basename(path.dirname(mainTranscriptPath));
1536
- const sid = path.basename(mainTranscriptPath, '.jsonl');
1537
- return path.join(rootDirectory, slug, sid, 'tasks', `${agentId}.output`);
1538
- };
1539
-
1540
- const createOutputFile = (sessionName: string, agentId: string): void => {
1541
- const filePath = outputFilePathFor(sessionName, agentId);
1542
- fs.mkdirSync(path.dirname(filePath), { recursive: true });
1543
- fs.writeFileSync(filePath, '', 'utf8');
1544
- };
1545
-
1546
- it('excludes a sub-agent whose output file is absent and whose id matches no running process when the liveness file is absent', async () => {
1547
- const sessionName = 'session-4161-ghost-agent';
1548
- const agentId = 'a4161dead00000001';
1549
- writeAgentTranscript(
1550
- sessionName,
1551
- agentId,
1552
- pendingToolUseEntries('2026-06-27T11:00:00.000Z'),
1553
- nowEpochSeconds - 600,
1554
- );
1555
- const repository = new TranscriptSessionSubAgentActivityRepository(
1556
- createResolver(),
1557
- emptyProcessLister(),
1558
- now,
1559
- livenessResolverWith(null),
1560
- rootDirectory,
1561
- );
1562
-
1563
- const result = await repository.listSubAgentActivitiesBySessionName(
1564
- [sessionName],
1565
- transcriptMapFor([sessionName]),
1566
- );
1567
-
1568
- expect(result.size).toBe(0);
1569
- });
1570
-
1571
- it('includes a sub-agent whose output file exists even when the liveness file is absent', async () => {
1572
- const sessionName = 'session-4161-live-output';
1573
- const agentId = 'a4161live00000002';
1574
- writeAgentTranscript(
1575
- sessionName,
1576
- agentId,
1577
- pendingToolUseEntries('2026-06-27T11:45:00.000Z'),
1578
- nowEpochSeconds - 600,
1579
- );
1580
- createOutputFile(sessionName, agentId);
1581
- const repository = new TranscriptSessionSubAgentActivityRepository(
1582
- createResolver(),
1583
- emptyProcessLister(),
1584
- now,
1585
- livenessResolverWith(null),
1586
- rootDirectory,
1587
- );
1588
-
1589
- const result = await repository.listSubAgentActivitiesBySessionName(
1590
- [sessionName],
1591
- transcriptMapFor([sessionName]),
1592
- );
1593
-
1594
- expect(result.get(sessionName)).toEqual([
1595
- {
1596
- label: `agent-${agentId}`,
1597
- silentSeconds: 600,
1598
- runningSeconds: 900,
1599
- waitingOnExternalProcess: false,
1600
- finishedResultUnconsumed: false,
1601
- },
1602
- ]);
1603
- });
1604
-
1605
- it('includes a sub-agent whose output file is absent but whose id appears in a running process command line when the liveness file is absent', async () => {
1606
- const sessionName = 'session-4161-live-process';
1607
- const agentId = 'a4161proc00000003';
1608
- writeAgentTranscript(
1609
- sessionName,
1610
- agentId,
1611
- pendingToolUseEntries('2026-06-27T11:45:00.000Z'),
1612
- nowEpochSeconds - 600,
1613
- );
1614
- const repository = new TranscriptSessionSubAgentActivityRepository(
1615
- createResolver(),
1616
- processListerWith([
1617
- {
1618
- commandLine: `/path/to/claude --session ${agentId} --task task.txt`,
1619
- elapsedSeconds: 600,
1620
- },
1621
- ]),
1622
- now,
1623
- livenessResolverWith(null),
1624
- rootDirectory,
1625
- );
1626
-
1627
- const result = await repository.listSubAgentActivitiesBySessionName(
1628
- [sessionName],
1629
- transcriptMapFor([sessionName]),
1630
- );
1631
-
1632
- expect(result.get(sessionName)).toEqual([
1633
- {
1634
- label: `agent-${agentId}`,
1635
- silentSeconds: 600,
1636
- runningSeconds: 900,
1637
- waitingOnExternalProcess: false,
1638
- finishedResultUnconsumed: false,
1639
- },
1640
- ]);
1641
- });
1642
-
1643
- it('emits no sub-agent entries when every transcript has no output file and no matching process and the liveness file is absent', async () => {
1644
- const sessionName = 'session-4161-all-absent';
1645
- const agentId1 = 'a4161none00000004';
1646
- const agentId2 = 'a4161none00000005';
1647
- writeAgentTranscript(
1648
- sessionName,
1649
- agentId1,
1650
- pendingToolUseEntries('2026-06-27T11:00:00.000Z'),
1651
- nowEpochSeconds - 900,
1652
- );
1653
- writeAgentTranscript(
1654
- sessionName,
1655
- agentId2,
1656
- pendingToolUseEntries('2026-06-27T11:00:00.000Z'),
1657
- nowEpochSeconds - 900,
1658
- );
1659
- const repository = new TranscriptSessionSubAgentActivityRepository(
1660
- createResolver(),
1661
- emptyProcessLister(),
1662
- now,
1663
- livenessResolverWith(null),
1664
- rootDirectory,
1665
- );
1666
-
1667
- const result = await repository.listSubAgentActivitiesBySessionName(
1668
- [sessionName],
1669
- transcriptMapFor([sessionName]),
1670
- );
1671
-
1672
- expect(result.size).toBe(0);
1673
- });
1674
- });