@shepai/cli 1.152.0-pr476.cafabb8 → 1.153.0-pr477.9c7fcd0

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 (223) hide show
  1. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts +37 -0
  2. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts.map +1 -1
  3. package/dist/packages/core/src/application/use-cases/repositories/get-repository-commits.use-case.d.ts +18 -0
  4. package/dist/packages/core/src/application/use-cases/repositories/get-repository-commits.use-case.d.ts.map +1 -0
  5. package/dist/packages/core/src/application/use-cases/repositories/get-repository-commits.use-case.js +40 -0
  6. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  7. package/dist/packages/core/src/infrastructure/di/container.js +5 -0
  8. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts +3 -1
  9. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts.map +1 -1
  10. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.js +40 -0
  11. package/dist/src/presentation/web/app/actions/get-repository-commits.d.ts +13 -0
  12. package/dist/src/presentation/web/app/actions/get-repository-commits.d.ts.map +1 -0
  13. package/dist/src/presentation/web/app/actions/get-repository-commits.js +16 -0
  14. package/dist/src/presentation/web/components/common/commit-history-tree/commit-history-tree.d.ts +14 -0
  15. package/dist/src/presentation/web/components/common/commit-history-tree/commit-history-tree.d.ts.map +1 -0
  16. package/dist/src/presentation/web/components/common/commit-history-tree/commit-history-tree.js +120 -0
  17. package/dist/src/presentation/web/components/common/commit-history-tree/commit-history-tree.stories.d.ts +12 -0
  18. package/dist/src/presentation/web/components/common/commit-history-tree/commit-history-tree.stories.d.ts.map +1 -0
  19. package/dist/src/presentation/web/components/common/commit-history-tree/commit-history-tree.stories.js +140 -0
  20. package/dist/src/presentation/web/components/common/commit-history-tree/use-commit-history.d.ts +16 -0
  21. package/dist/src/presentation/web/components/common/commit-history-tree/use-commit-history.d.ts.map +1 -0
  22. package/dist/src/presentation/web/components/common/commit-history-tree/use-commit-history.js +33 -0
  23. package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.d.ts +1 -1
  24. package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.d.ts.map +1 -1
  25. package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.js +11 -1
  26. package/dist/src/presentation/web/components/features/features-canvas/canvas-toolbar.js +1 -1
  27. package/dist/tsconfig.build.tsbuildinfo +1 -1
  28. package/package.json +1 -1
  29. package/web/.next/BUILD_ID +1 -1
  30. package/web/.next/build-manifest.json +2 -2
  31. package/web/.next/fallback-build-manifest.json +2 -2
  32. package/web/.next/prerender-manifest.json +3 -3
  33. package/web/.next/required-server-files.js +2 -2
  34. package/web/.next/required-server-files.json +2 -2
  35. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +28 -28
  36. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  37. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  38. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +26 -26
  39. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  40. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  41. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +29 -29
  42. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  43. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  44. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +36 -36
  45. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  46. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  47. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +36 -36
  48. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  49. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  50. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +67 -52
  51. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +1 -1
  52. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  53. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  54. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +67 -52
  55. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
  56. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  57. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  58. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +26 -26
  59. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  60. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  61. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +29 -29
  62. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  63. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  64. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +36 -36
  65. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  66. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  67. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +36 -36
  68. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  69. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  70. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +26 -26
  71. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  72. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  73. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +67 -52
  74. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +1 -1
  75. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  76. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  77. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +67 -52
  78. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
  79. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  80. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  81. package/web/.next/server/app/_global-error.html +2 -2
  82. package/web/.next/server/app/_global-error.rsc +1 -1
  83. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  84. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  85. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  86. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  87. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  88. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +5 -5
  89. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  90. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  91. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  92. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  93. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  94. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
  95. package/web/.next/server/app/api/sessions/route.js.nft.json +1 -1
  96. package/web/.next/server/app/api/sessions-batch/route.js.nft.json +1 -1
  97. package/web/.next/server/app/settings/page/server-reference-manifest.json +8 -8
  98. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  99. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  100. package/web/.next/server/app/skills/page/server-reference-manifest.json +10 -10
  101. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  102. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  103. package/web/.next/server/app/tools/page/server-reference-manifest.json +10 -10
  104. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  105. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  106. package/web/.next/server/app/version/page/server-reference-manifest.json +5 -5
  107. package/web/.next/server/app/version/page.js.nft.json +1 -1
  108. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  109. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  110. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  111. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  112. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +2 -2
  113. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
  114. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_refresh-cw_2796b1f0.js +3 -0
  115. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_refresh-cw_2796b1f0.js.map +1 -0
  116. package/web/.next/server/chunks/ssr/[root-of-the-server]__17ed7ed1._.js +1 -1
  117. package/web/.next/server/chunks/ssr/[root-of-the-server]__17ed7ed1._.js.map +1 -1
  118. package/web/.next/server/chunks/ssr/[root-of-the-server]__28d0d265._.js +2 -2
  119. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  120. package/web/.next/server/chunks/ssr/[root-of-the-server]__42bf1807._.js +1 -1
  121. package/web/.next/server/chunks/ssr/[root-of-the-server]__42bf1807._.js.map +1 -1
  122. package/web/.next/server/chunks/ssr/[root-of-the-server]__56b70465._.js +1 -1
  123. package/web/.next/server/chunks/ssr/[root-of-the-server]__56b70465._.js.map +1 -1
  124. package/web/.next/server/chunks/ssr/[root-of-the-server]__88f7e8e6._.js +1 -1
  125. package/web/.next/server/chunks/ssr/[root-of-the-server]__88f7e8e6._.js.map +1 -1
  126. package/web/.next/server/chunks/ssr/[root-of-the-server]__8b0aac03._.js +1 -1
  127. package/web/.next/server/chunks/ssr/[root-of-the-server]__c30f1f82._.js +1 -1
  128. package/web/.next/server/chunks/ssr/[root-of-the-server]__c30f1f82._.js.map +1 -1
  129. package/web/.next/server/chunks/ssr/[root-of-the-server]__ce859680._.js +3 -0
  130. package/web/.next/server/chunks/ssr/{[root-of-the-server]__f8dd4422._.js.map → [root-of-the-server]__ce859680._.js.map} +1 -1
  131. package/web/.next/server/chunks/ssr/[root-of-the-server]__f80bfc75._.js +1 -1
  132. package/web/.next/server/chunks/ssr/[root-of-the-server]__f80bfc75._.js.map +1 -1
  133. package/web/.next/server/chunks/ssr/_05c23ad9._.js +1 -1
  134. package/web/.next/server/chunks/ssr/_05c23ad9._.js.map +1 -1
  135. package/web/.next/server/chunks/ssr/_16eb4fec._.js +1 -1
  136. package/web/.next/server/chunks/ssr/_16eb4fec._.js.map +1 -1
  137. package/web/.next/server/chunks/ssr/{_f5073cd1._.js → _29ca8860._.js} +2 -2
  138. package/web/.next/server/chunks/ssr/{_f5073cd1._.js.map → _29ca8860._.js.map} +1 -1
  139. package/web/.next/server/chunks/ssr/_3a0b989f._.js +2 -2
  140. package/web/.next/server/chunks/ssr/_3a0b989f._.js.map +1 -1
  141. package/web/.next/server/chunks/ssr/{_d8bedf13._.js → _48066275._.js} +2 -2
  142. package/web/.next/server/chunks/ssr/_48066275._.js.map +1 -0
  143. package/web/.next/server/chunks/ssr/{_5f69c13f._.js → _4b41246e._.js} +2 -2
  144. package/web/.next/server/chunks/ssr/_4b41246e._.js.map +1 -0
  145. package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
  146. package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
  147. package/web/.next/server/chunks/ssr/{_8219712a._.js → _5eb64260._.js} +2 -2
  148. package/web/.next/server/chunks/ssr/_5eb64260._.js.map +1 -0
  149. package/web/.next/server/chunks/ssr/{_cb5a021e._.js → _6438bf2d._.js} +2 -2
  150. package/web/.next/server/chunks/ssr/_6438bf2d._.js.map +1 -0
  151. package/web/.next/server/chunks/ssr/_7c5b97c6._.js +1 -1
  152. package/web/.next/server/chunks/ssr/_7c5b97c6._.js.map +1 -1
  153. package/web/.next/server/chunks/ssr/_82c57f10._.js +1 -1
  154. package/web/.next/server/chunks/ssr/_82c57f10._.js.map +1 -1
  155. package/web/.next/server/chunks/ssr/{_d86175ae._.js → _87761ee1._.js} +2 -2
  156. package/web/.next/server/chunks/ssr/_87761ee1._.js.map +1 -0
  157. package/web/.next/server/chunks/ssr/_9495d50b._.js +1 -1
  158. package/web/.next/server/chunks/ssr/_9495d50b._.js.map +1 -1
  159. package/web/.next/server/chunks/ssr/_a0e3f7e4._.js +1 -1
  160. package/web/.next/server/chunks/ssr/_a0e3f7e4._.js.map +1 -1
  161. package/web/.next/server/chunks/ssr/{_0454e1de._.js → _a3aa1eb6._.js} +2 -2
  162. package/web/.next/server/chunks/ssr/_a3aa1eb6._.js.map +1 -0
  163. package/web/.next/server/chunks/ssr/_ac4a3873._.js +1 -1
  164. package/web/.next/server/chunks/ssr/_ac4a3873._.js.map +1 -1
  165. package/web/.next/server/chunks/ssr/_c93c0cc6._.js +3 -0
  166. package/web/.next/server/chunks/ssr/_c93c0cc6._.js.map +1 -0
  167. package/web/.next/server/chunks/ssr/_ca0aa7f0._.js +1 -1
  168. package/web/.next/server/chunks/ssr/_ca0aa7f0._.js.map +1 -1
  169. package/web/.next/server/chunks/ssr/{_e9a73a63._.js → _e55a0378._.js} +2 -2
  170. package/web/.next/server/chunks/ssr/{_e9a73a63._.js.map → _e55a0378._.js.map} +1 -1
  171. package/web/.next/server/chunks/ssr/_fa7efce3._.js +2 -2
  172. package/web/.next/server/chunks/ssr/_fa7efce3._.js.map +1 -1
  173. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  174. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  175. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +3 -0
  176. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map +1 -0
  177. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_cdc632e3.js +1 -1
  178. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_cdc632e3.js.map +1 -1
  179. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_39ca0924.js +1 -1
  180. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_39ca0924.js.map +1 -1
  181. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +1 -1
  182. package/web/.next/server/chunks/ssr/src_presentation_web_components_357e3eb0._.js +1 -1
  183. package/web/.next/server/chunks/ssr/src_presentation_web_components_357e3eb0._.js.map +1 -1
  184. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  185. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  186. package/web/.next/server/pages/500.html +2 -2
  187. package/web/.next/server/server-reference-manifest.js +1 -1
  188. package/web/.next/server/server-reference-manifest.json +185 -149
  189. package/web/.next/static/chunks/{ccb54cbadfef1316.js → 0b347558818d2628.js} +1 -1
  190. package/web/.next/static/chunks/{cd54b758f58061d0.js → 1406c2860e7fac9c.js} +1 -1
  191. package/web/.next/static/chunks/36208713ad011740.js +1 -0
  192. package/web/.next/static/chunks/3f21588c6956d5b4.css +1 -0
  193. package/web/.next/static/chunks/471bebfd8d0f0acd.js +1 -0
  194. package/web/.next/static/chunks/{035fae40bf0ed469.js → 5a585a2f6bcff4a9.js} +1 -1
  195. package/web/.next/static/chunks/{358f58043189b539.js → 65ece264fa8f6fe1.js} +2 -2
  196. package/web/.next/static/chunks/{0b75bb9e9550073c.js → 929ed61442b5e9f7.js} +1 -1
  197. package/web/.next/static/chunks/{7564b97f874a385f.js → a4ffe2d157f11ad3.js} +1 -1
  198. package/web/.next/static/chunks/{1e472a57005aa6ba.js → aaf8507271e6f018.js} +1 -1
  199. package/web/.next/static/chunks/{6dba47d604ecee1e.js → b27aae090cd67337.js} +2 -2
  200. package/web/.next/static/chunks/{4a40a849f6ba6c6f.js → b2c3da92e5d7864b.js} +3 -3
  201. package/web/.next/static/chunks/bb831852c32a9e59.js +1 -0
  202. package/web/.next/static/chunks/{735012b8a096013d.js → d13a4b544b737cbc.js} +1 -1
  203. package/web/.next/static/chunks/eef9a6b627e39d41.js +1 -0
  204. package/web/.next/static/chunks/{6bf85f5937c714b5.js → fa08611a63bb5369.js} +1 -1
  205. package/web/.next/server/chunks/ssr/[root-of-the-server]__f8dd4422._.js +0 -3
  206. package/web/.next/server/chunks/ssr/_0454e1de._.js.map +0 -1
  207. package/web/.next/server/chunks/ssr/_5f69c13f._.js.map +0 -1
  208. package/web/.next/server/chunks/ssr/_8219712a._.js.map +0 -1
  209. package/web/.next/server/chunks/ssr/_895c848c._.js +0 -3
  210. package/web/.next/server/chunks/ssr/_895c848c._.js.map +0 -1
  211. package/web/.next/server/chunks/ssr/_cb5a021e._.js.map +0 -1
  212. package/web/.next/server/chunks/ssr/_cfbd1d7e._.js +0 -3
  213. package/web/.next/server/chunks/ssr/_cfbd1d7e._.js.map +0 -1
  214. package/web/.next/server/chunks/ssr/_d86175ae._.js.map +0 -1
  215. package/web/.next/server/chunks/ssr/_d8bedf13._.js.map +0 -1
  216. package/web/.next/static/chunks/211a4b7af388252d.js +0 -1
  217. package/web/.next/static/chunks/22c459f1877b1e4f.js +0 -1
  218. package/web/.next/static/chunks/8ba1c07ef18b15a9.js +0 -1
  219. package/web/.next/static/chunks/c86594475dcb03d5.css +0 -1
  220. package/web/.next/static/chunks/cfa3f3734e78d38d.js +0 -1
  221. /package/web/.next/static/{cRfpZzgvy54tlmdKZEXb_ → -_iF1islqFSzVifHA2Zlt}/_buildManifest.js +0 -0
  222. /package/web/.next/static/{cRfpZzgvy54tlmdKZEXb_ → -_iF1islqFSzVifHA2Zlt}/_clientMiddlewareManifest.json +0 -0
  223. /package/web/.next/static/{cRfpZzgvy54tlmdKZEXb_ → -_iF1islqFSzVifHA2Zlt}/_ssgManifest.js +0 -0
@@ -0,0 +1,33 @@
1
+ 'use client';
2
+ import { useState, useEffect, useCallback } from 'react';
3
+ import { getRepositoryCommits } from '../../../app/actions/get-repository-commits.js';
4
+ export function useCommitHistory({ repositoryPath, branch, limit = 50, enabled = true, }) {
5
+ const [data, setData] = useState(null);
6
+ const [loading, setLoading] = useState(false);
7
+ const [error, setError] = useState(null);
8
+ const fetch = useCallback(async () => {
9
+ if (!repositoryPath || !enabled)
10
+ return;
11
+ setLoading(true);
12
+ setError(null);
13
+ try {
14
+ const result = await getRepositoryCommits(repositoryPath, branch, limit);
15
+ if (result.success && result.data) {
16
+ setData(result.data);
17
+ }
18
+ else {
19
+ setError(result.error ?? 'Failed to load commit history');
20
+ }
21
+ }
22
+ catch (err) {
23
+ setError(err instanceof Error ? err.message : 'Failed to load commit history');
24
+ }
25
+ finally {
26
+ setLoading(false);
27
+ }
28
+ }, [repositoryPath, branch, limit, enabled]);
29
+ useEffect(() => {
30
+ void fetch();
31
+ }, [fetch]);
32
+ return { data, loading, error, refresh: fetch };
33
+ }
@@ -2,7 +2,7 @@ import type { RepositoryNodeData } from '../../common/repository-node/index.js';
2
2
  export interface RepositoryDrawerClientProps {
3
3
  data: RepositoryNodeData;
4
4
  /** Initial tab key from URL (e.g. 'chat'). */
5
- initialTab?: 'overview' | 'chat';
5
+ initialTab?: 'overview' | 'chat' | 'commits';
6
6
  }
7
7
  export declare function RepositoryDrawerClient({ data, initialTab }: RepositoryDrawerClientProps): import("react/jsx-runtime").JSX.Element;
8
8
  //# sourceMappingURL=repository-drawer-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"repository-drawer-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/repository-drawer-client.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAG9E,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,kBAAkB,CAAC;IACzB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;CAClC;AAED,wBAAgB,sBAAsB,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,2BAA2B,2CA6KvF"}
1
+ {"version":3,"file":"repository-drawer-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/repository-drawer-client.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAK9E,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,kBAAkB,CAAC;IACzB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;CAC9C;AAED,wBAAgB,sBAAsB,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,2BAA2B,2CA2MvF"}
@@ -13,12 +13,15 @@ import { useRepositoryActions } from '../../common/repository-node/use-repositor
13
13
  import { useDeployAction } from '../../../hooks/use-deploy-action.js';
14
14
  import { useFeatureFlags } from '../../../hooks/feature-flags-context.js';
15
15
  import { ChatTab } from '../../features/chat/ChatTab.js';
16
+ import { CommitHistoryTree } from '../../common/commit-history-tree/commit-history-tree.js';
17
+ import { useCommitHistory } from '../../common/commit-history-tree/use-commit-history.js';
16
18
  export function RepositoryDrawerClient({ data, initialTab }) {
17
19
  const featureFlags = useFeatureFlags();
18
20
  const router = useRouter();
19
21
  const pathname = usePathname();
20
22
  const isOpen = pathname.startsWith('/repository/');
21
23
  const [activeTab, setActiveTab] = useState(initialTab ?? 'overview');
24
+ const [commitBranch, setCommitBranch] = useState(undefined);
22
25
  const repoActions = useRepositoryActions(data.repositoryPath ? { repositoryId: data.id, repositoryPath: data.repositoryPath } : null);
23
26
  const onClose = useCallback(() => {
24
27
  router.push('/');
@@ -33,5 +36,12 @@ export function RepositoryDrawerClient({ data, initialTab }) {
33
36
  const isDeployActive = deployAction.status === 'Booting' || deployAction.status === 'Ready';
34
37
  // Session ID for repo chat — deterministic per repo
35
38
  const repoSessionId = data.id ? `repo-${data.id}` : `repo-${data.name}`;
36
- return (_jsx(BaseDrawer, { open: isOpen, onClose: onClose, size: "lg", modal: false, "data-testid": "repository-drawer", children: _jsxs(Tabs, { value: activeTab, onValueChange: setActiveTab, className: "flex min-h-0 flex-1 flex-col", children: [_jsxs("div", { className: "shrink-0 px-4 pt-4 pb-3", "data-testid": "repository-drawer-header", children: [_jsxs("div", { className: "flex items-baseline gap-4 pr-6", children: [_jsx("h2", { className: "text-foreground min-w-0 shrink truncate text-base font-semibold tracking-tight", children: data.name }), _jsxs(TabsList, { className: "h-auto shrink-0 gap-0.5 rounded-none border-0 bg-transparent p-0", children: [_jsx(TabsTrigger, { value: "overview", className: "text-muted-foreground hover:text-foreground data-[state=active]:text-foreground data-[state=active]:border-primary h-auto rounded-none border-b-2 border-transparent bg-transparent px-2 py-0.5 text-[12px] font-medium shadow-none transition-colors data-[state=active]:bg-transparent data-[state=active]:shadow-none", children: "Overview" }), _jsx(TabsTrigger, { value: "chat", className: "text-muted-foreground hover:text-foreground data-[state=active]:text-foreground data-[state=active]:border-primary h-auto rounded-none border-b-2 border-transparent bg-transparent px-2 py-0.5 text-[12px] font-medium shadow-none transition-colors data-[state=active]:bg-transparent data-[state=active]:shadow-none", children: "Chat" })] })] }), _jsxs("div", { className: "mt-1 flex items-center gap-2", children: [data.repositoryPath ? (_jsx("p", { className: "text-muted-foreground min-w-0 truncate font-mono text-xs", children: data.repositoryPath })) : null, featureFlags.envDeploy && data.repositoryPath ? (_jsxs("div", { className: "ml-auto flex shrink-0 items-center gap-2", children: [_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { children: _jsx(ActionButton, { label: isDeployActive ? 'Stop Dev Server' : 'Start Dev Server', onClick: isDeployActive ? deployAction.stop : deployAction.deploy, loading: deployAction.deployLoading || deployAction.stopLoading, error: !!deployAction.deployError, icon: isDeployActive ? Square : Play, iconOnly: true, variant: "outline", size: "icon-sm" }) }) }), _jsx(TooltipContent, { children: isDeployActive ? 'Stop Dev Server' : 'Start Dev Server' })] }) }), isDeployActive ? (_jsx(DeploymentStatusBadge, { status: deployAction.status, url: deployAction.url, targetId: data.repositoryPath })) : null] })) : null] })] }), _jsx(Separator, {}), _jsx(TabsContent, { value: "overview", className: "mt-0 flex-1 overflow-y-auto", children: data.repositoryPath ? (_jsxs("div", { className: "flex-1 overflow-y-auto", children: [_jsxs("div", { className: "flex flex-col gap-3 p-4", children: [_jsx("div", { className: "text-muted-foreground text-xs font-semibold tracking-wider", children: "OPEN WITH" }), _jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(ActionButton, { label: "Open in IDE", onClick: repoActions.openInIde, loading: repoActions.ideLoading, error: !!repoActions.ideError, icon: Code2, variant: "outline", size: "sm" }), _jsx(ActionButton, { label: "Open in Shell", onClick: repoActions.openInShell, loading: repoActions.shellLoading, error: !!repoActions.shellError, icon: Terminal, variant: "outline", size: "sm" }), _jsx(ActionButton, { label: "Open Folder", onClick: repoActions.openFolder, loading: repoActions.folderLoading, error: !!repoActions.folderError, icon: FolderOpen, variant: "outline", size: "sm" })] })] }), data.id && featureFlags.gitRebaseSync ? (_jsxs(_Fragment, { children: [_jsx(Separator, {}), _jsxs("div", { className: "flex flex-col gap-3 p-4", children: [_jsx("div", { className: "text-muted-foreground text-xs font-semibold tracking-wider", children: "GIT OPERATIONS" }), _jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(ActionButton, { label: "Sync Main", onClick: repoActions.syncMain, loading: repoActions.syncLoading, error: !!repoActions.syncError, icon: RefreshCw, variant: "outline", size: "sm" }), repoActions.syncError ? (_jsx("p", { className: "text-destructive text-xs", children: repoActions.syncError })) : null] })] })] })) : null] })) : null }), _jsx(TabsContent, { value: "chat", className: "mt-0 flex min-h-0 flex-1 flex-col overflow-hidden", children: _jsx(ChatTab, { featureId: repoSessionId, worktreePath: data.repositoryPath }) })] }) }));
39
+ const commitHistory = useCommitHistory({
40
+ repositoryPath: data.repositoryPath,
41
+ branch: commitBranch,
42
+ enabled: activeTab === 'commits' && !!data.repositoryPath,
43
+ });
44
+ return (_jsx(BaseDrawer, { open: isOpen, onClose: onClose, size: "lg", modal: false, "data-testid": "repository-drawer", children: _jsxs(Tabs, { value: activeTab, onValueChange: setActiveTab, className: "flex min-h-0 flex-1 flex-col", children: [_jsxs("div", { className: "shrink-0 px-4 pt-4 pb-3", "data-testid": "repository-drawer-header", children: [_jsxs("div", { className: "flex items-baseline gap-4 pr-6", children: [_jsx("h2", { className: "text-foreground min-w-0 shrink truncate text-base font-semibold tracking-tight", children: data.name }), _jsxs(TabsList, { className: "h-auto shrink-0 gap-0.5 rounded-none border-0 bg-transparent p-0", children: [_jsx(TabsTrigger, { value: "overview", className: "text-muted-foreground hover:text-foreground data-[state=active]:text-foreground data-[state=active]:border-primary h-auto rounded-none border-b-2 border-transparent bg-transparent px-2 py-0.5 text-[12px] font-medium shadow-none transition-colors data-[state=active]:bg-transparent data-[state=active]:shadow-none", children: "Overview" }), _jsx(TabsTrigger, { value: "chat", className: "text-muted-foreground hover:text-foreground data-[state=active]:text-foreground data-[state=active]:border-primary h-auto rounded-none border-b-2 border-transparent bg-transparent px-2 py-0.5 text-[12px] font-medium shadow-none transition-colors data-[state=active]:bg-transparent data-[state=active]:shadow-none", children: "Chat" }), data.repositoryPath ? (_jsx(TabsTrigger, { value: "commits", className: "text-muted-foreground hover:text-foreground data-[state=active]:text-foreground data-[state=active]:border-primary h-auto rounded-none border-b-2 border-transparent bg-transparent px-2 py-0.5 text-[12px] font-medium shadow-none transition-colors data-[state=active]:bg-transparent data-[state=active]:shadow-none", children: "Commits" })) : null] })] }), _jsxs("div", { className: "mt-1 flex items-center gap-2", children: [data.repositoryPath ? (_jsx("p", { className: "text-muted-foreground min-w-0 truncate font-mono text-xs", children: data.repositoryPath })) : null, featureFlags.envDeploy && data.repositoryPath ? (_jsxs("div", { className: "ml-auto flex shrink-0 items-center gap-2", children: [_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { children: _jsx(ActionButton, { label: isDeployActive ? 'Stop Dev Server' : 'Start Dev Server', onClick: isDeployActive ? deployAction.stop : deployAction.deploy, loading: deployAction.deployLoading || deployAction.stopLoading, error: !!deployAction.deployError, icon: isDeployActive ? Square : Play, iconOnly: true, variant: "outline", size: "icon-sm" }) }) }), _jsx(TooltipContent, { children: isDeployActive ? 'Stop Dev Server' : 'Start Dev Server' })] }) }), isDeployActive ? (_jsx(DeploymentStatusBadge, { status: deployAction.status, url: deployAction.url, targetId: data.repositoryPath })) : null] })) : null] })] }), _jsx(Separator, {}), _jsx(TabsContent, { value: "overview", className: "mt-0 flex-1 overflow-y-auto", children: data.repositoryPath ? (_jsxs("div", { className: "flex-1 overflow-y-auto", children: [_jsxs("div", { className: "flex flex-col gap-3 p-4", children: [_jsx("div", { className: "text-muted-foreground text-xs font-semibold tracking-wider", children: "OPEN WITH" }), _jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(ActionButton, { label: "Open in IDE", onClick: repoActions.openInIde, loading: repoActions.ideLoading, error: !!repoActions.ideError, icon: Code2, variant: "outline", size: "sm" }), _jsx(ActionButton, { label: "Open in Shell", onClick: repoActions.openInShell, loading: repoActions.shellLoading, error: !!repoActions.shellError, icon: Terminal, variant: "outline", size: "sm" }), _jsx(ActionButton, { label: "Open Folder", onClick: repoActions.openFolder, loading: repoActions.folderLoading, error: !!repoActions.folderError, icon: FolderOpen, variant: "outline", size: "sm" })] })] }), data.id && featureFlags.gitRebaseSync ? (_jsxs(_Fragment, { children: [_jsx(Separator, {}), _jsxs("div", { className: "flex flex-col gap-3 p-4", children: [_jsx("div", { className: "text-muted-foreground text-xs font-semibold tracking-wider", children: "GIT OPERATIONS" }), _jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(ActionButton, { label: "Sync Main", onClick: repoActions.syncMain, loading: repoActions.syncLoading, error: !!repoActions.syncError, icon: RefreshCw, variant: "outline", size: "sm" }), repoActions.syncError ? (_jsx("p", { className: "text-destructive text-xs", children: repoActions.syncError })) : null] })] })] })) : null] })) : null }), _jsx(TabsContent, { value: "chat", className: "mt-0 flex min-h-0 flex-1 flex-col overflow-hidden", children: _jsx(ChatTab, { featureId: repoSessionId, worktreePath: data.repositoryPath }) }), _jsx(TabsContent, { value: "commits", className: "mt-0 flex-1 overflow-y-auto", children: _jsx(CommitHistoryTree, { commits: commitHistory.data?.commits ?? null, loading: commitHistory.loading, error: commitHistory.error, currentBranch: commitHistory.data?.currentBranch ?? '', defaultBranch: commitHistory.data?.defaultBranch ?? '', activeBranch: commitBranch ?? commitHistory.data?.currentBranch ?? '', onBranchChange: (branch) => {
45
+ setCommitBranch(branch);
46
+ } }) })] }) }));
37
47
  }
@@ -21,7 +21,7 @@ export function CanvasToolbar({ showArchived, onToggleArchived, onResetViewport,
21
21
  setViewport(viewport, { duration: 400 });
22
22
  }
23
23
  }, [onResetViewport, setViewport]);
24
- return (_jsxs("div", { className: "bg-background flex items-center gap-1 rounded-xl border px-2 py-1.5 shadow-md dark:bg-neutral-900", children: [_jsx(ToolbarButton, { onClick: onToggleArchived, title: showArchived ? 'Hide archived' : 'Show archived', active: showArchived, label: showArchived ? 'Hide' : 'Show', children: showArchived ? _jsx(Eye, { className: "h-4 w-4" }) : _jsx(EyeOff, { className: "h-4 w-4" }) }), _jsx("div", { className: "bg-border mx-1 h-5 w-px" }), _jsx(ToolbarButton, { onClick: handleZoomOut, title: "Zoom out", children: _jsx(ZoomOut, { className: "h-4 w-4" }) }), _jsx(ToolbarButton, { onClick: handleZoomIn, title: "Zoom in", children: _jsx(ZoomIn, { className: "h-4 w-4" }) }), _jsx(ToolbarButton, { onClick: handleFitView, title: "Fit view", children: _jsx(Maximize, { className: "h-4 w-4" }) }), onResetViewport ? (_jsx(ToolbarButton, { onClick: handleReset, title: "Reset view", children: _jsx(RotateCcw, { className: "h-4 w-4" }) })) : null] }));
24
+ return (_jsxs("div", { className: "bg-background flex items-center gap-1 rounded-xl border px-2 py-1.5 shadow-md dark:bg-neutral-900", children: [_jsx(ToolbarButton, { onClick: onToggleArchived, title: showArchived ? 'Hide archived' : 'Show archived', active: showArchived, label: showArchived ? 'Hide Archived' : 'Show Archived', children: showArchived ? _jsx(Eye, { className: "h-4 w-4" }) : _jsx(EyeOff, { className: "h-4 w-4" }) }), _jsx("div", { className: "bg-border mx-1 h-5 w-px" }), _jsx(ToolbarButton, { onClick: handleZoomOut, title: "Zoom out", children: _jsx(ZoomOut, { className: "h-4 w-4" }) }), _jsx(ToolbarButton, { onClick: handleZoomIn, title: "Zoom in", children: _jsx(ZoomIn, { className: "h-4 w-4" }) }), _jsx(ToolbarButton, { onClick: handleFitView, title: "Fit view", children: _jsx(Maximize, { className: "h-4 w-4" }) }), onResetViewport ? (_jsx(ToolbarButton, { onClick: handleReset, title: "Reset view", children: _jsx(RotateCcw, { className: "h-4 w-4" }) })) : null] }));
25
25
  }
26
26
  // ── Internal button ──────────────────────────────────────────────────────
27
27
  function ToolbarButton({ children, onClick, title, label, active, }) {