@shepai/cli 1.90.1 → 1.91.0-pr257.0ec533a

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 (269) hide show
  1. package/dist/packages/core/src/application/ports/output/services/worktree-service.interface.d.ts +6 -0
  2. package/dist/packages/core/src/application/ports/output/services/worktree-service.interface.d.ts.map +1 -1
  3. package/dist/packages/core/src/application/use-cases/features/cleanup-feature-worktree.use-case.d.ts.map +1 -1
  4. package/dist/packages/core/src/application/use-cases/features/cleanup-feature-worktree.use-case.js +8 -0
  5. package/dist/packages/core/src/infrastructure/services/git/worktree.service.d.ts +1 -0
  6. package/dist/packages/core/src/infrastructure/services/git/worktree.service.d.ts.map +1 -1
  7. package/dist/packages/core/src/infrastructure/services/git/worktree.service.js +8 -0
  8. package/dist/src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.d.ts +11 -0
  9. package/dist/src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.d.ts.map +1 -0
  10. package/dist/src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +49 -0
  11. package/dist/src/presentation/web/app/(dashboard)/feature/[featureId]/[tab]/page.d.ts +3 -0
  12. package/dist/src/presentation/web/app/(dashboard)/feature/[featureId]/[tab]/page.d.ts.map +1 -0
  13. package/dist/src/presentation/web/app/(dashboard)/feature/[featureId]/[tab]/page.js +4 -0
  14. package/dist/src/presentation/web/app/actions/get-feature-phase-timings.d.ts +1 -0
  15. package/dist/src/presentation/web/app/actions/get-feature-phase-timings.d.ts.map +1 -1
  16. package/dist/src/presentation/web/app/actions/get-feature-phase-timings.js +3 -0
  17. package/dist/src/presentation/web/app/api/attachments/preview/route.d.ts.map +1 -1
  18. package/dist/src/presentation/web/app/api/attachments/preview/route.js +47 -11
  19. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts +4 -0
  20. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts.map +1 -1
  21. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.js +17 -0
  22. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts +4 -2
  23. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
  24. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +2 -2
  25. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.d.ts.map +1 -1
  26. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.js +9 -6
  27. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts +3 -1
  28. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts.map +1 -1
  29. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.js +94 -5
  30. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.d.ts.map +1 -1
  31. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.js +2 -1
  32. package/dist/src/presentation/web/components/common/inline-attachments/index.d.ts +3 -0
  33. package/dist/src/presentation/web/components/common/inline-attachments/index.d.ts.map +1 -0
  34. package/dist/src/presentation/web/components/common/inline-attachments/index.js +1 -0
  35. package/dist/src/presentation/web/components/common/inline-attachments/inline-attachments.d.ts +20 -0
  36. package/dist/src/presentation/web/components/common/inline-attachments/inline-attachments.d.ts.map +1 -0
  37. package/dist/src/presentation/web/components/common/inline-attachments/inline-attachments.js +72 -0
  38. package/dist/src/presentation/web/components/common/inline-attachments/inline-attachments.stories.d.ts +16 -0
  39. package/dist/src/presentation/web/components/common/inline-attachments/inline-attachments.stories.d.ts.map +1 -0
  40. package/dist/src/presentation/web/components/common/inline-attachments/inline-attachments.stories.js +46 -0
  41. package/dist/src/presentation/web/hooks/use-selected-feature-id.js +1 -1
  42. package/dist/tsconfig.build.tsbuildinfo +1 -1
  43. package/package.json +1 -1
  44. package/web/.next/BUILD_ID +1 -1
  45. package/web/.next/app-path-routes-manifest.json +2 -0
  46. package/web/.next/build-manifest.json +2 -2
  47. package/web/.next/fallback-build-manifest.json +2 -2
  48. package/web/.next/prerender-manifest.json +3 -3
  49. package/web/.next/required-server-files.js +1 -1
  50. package/web/.next/required-server-files.json +1 -1
  51. package/web/.next/routes-manifest.json +9 -0
  52. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +18 -18
  53. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
  54. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  55. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  56. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/app-paths-manifest.json +3 -0
  57. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/build-manifest.json +18 -0
  58. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/next-font-manifest.json +6 -0
  59. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/react-loadable-manifest.json +1 -0
  60. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +320 -0
  61. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +20 -0
  62. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.map +5 -0
  63. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -0
  64. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +2 -0
  65. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +21 -21
  66. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +2 -2
  67. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  68. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  69. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
  70. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
  71. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  72. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  73. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +18 -18
  74. package/web/.next/server/app/(dashboard)/create/page.js +1 -1
  75. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  76. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  77. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/app-paths-manifest.json +3 -0
  78. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/build-manifest.json +18 -0
  79. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/next-font-manifest.json +6 -0
  80. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/react-loadable-manifest.json +1 -0
  81. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +320 -0
  82. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +20 -0
  83. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.map +5 -0
  84. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -0
  85. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +2 -0
  86. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +21 -21
  87. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +2 -2
  88. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  89. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  90. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +14 -14
  91. package/web/.next/server/app/(dashboard)/page.js +1 -1
  92. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  93. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  94. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
  95. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
  96. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  97. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  98. package/web/.next/server/app/_global-error/page.js +1 -1
  99. package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
  100. package/web/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  101. package/web/.next/server/app/_global-error.html +2 -2
  102. package/web/.next/server/app/_global-error.rsc +1 -1
  103. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  104. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  105. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  106. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  107. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  108. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  109. package/web/.next/server/app/_not-found/page.js +1 -1
  110. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  111. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  112. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  113. package/web/.next/server/app/api/feature-logs/route.js +1 -1
  114. package/web/.next/server/app/api/feature-logs/route.js.nft.json +1 -1
  115. package/web/.next/server/app/settings/page/server-reference-manifest.json +5 -5
  116. package/web/.next/server/app/settings/page.js +1 -1
  117. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  118. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  119. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  120. package/web/.next/server/app/skills/page.js +2 -2
  121. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  122. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  123. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  124. package/web/.next/server/app/tools/page.js +2 -2
  125. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  126. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  127. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  128. package/web/.next/server/app/version/page.js +1 -1
  129. package/web/.next/server/app/version/page.js.nft.json +1 -1
  130. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  131. package/web/.next/server/app-paths-manifest.json +2 -0
  132. package/web/.next/server/chunks/[root-of-the-server]__0b10355c._.js +1 -1
  133. package/web/.next/server/chunks/[root-of-the-server]__0b10355c._.js.map +1 -1
  134. package/web/.next/server/chunks/{[root-of-the-server]__d8037e14._.js → [root-of-the-server]__52c318d1._.js} +2 -2
  135. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_c29a2302.js +4 -0
  136. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_c29a2302.js.map +1 -0
  137. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_d1fd387b.js +4 -0
  138. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_d1fd387b.js.map +1 -0
  139. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  140. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  141. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_81a06555._.js +3 -0
  142. package/web/.next/server/chunks/ssr/{7f428_lucide-react_dist_esm_icons_9027d30a._.js.map → 7f428_lucide-react_dist_esm_icons_81a06555._.js.map} +1 -1
  143. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_rocket_1575cd4d.js +3 -0
  144. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_rocket_1575cd4d.js.map +1 -0
  145. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js +1 -1
  146. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js.map +1 -1
  147. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js +1 -1
  148. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js.map +1 -1
  149. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +1 -1
  150. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js.map +1 -1
  151. package/web/.next/server/chunks/ssr/[root-of-the-server]__17143953._.js +1 -1
  152. package/web/.next/server/chunks/ssr/[root-of-the-server]__17143953._.js.map +1 -1
  153. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  154. package/web/.next/server/chunks/ssr/[root-of-the-server]__45aad79d._.js +3 -0
  155. package/web/.next/server/chunks/ssr/[root-of-the-server]__45aad79d._.js.map +1 -0
  156. package/web/.next/server/chunks/ssr/[root-of-the-server]__4be9a9bb._.js +1 -1
  157. package/web/.next/server/chunks/ssr/[root-of-the-server]__5cc4752a._.js +3 -0
  158. package/web/.next/server/chunks/ssr/[root-of-the-server]__5cc4752a._.js.map +1 -0
  159. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +1 -1
  160. package/web/.next/server/chunks/ssr/{[root-of-the-server]__f0d8d054._.js → [root-of-the-server]__89e8a5cc._.js} +3 -3
  161. package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js.map +1 -0
  162. package/web/.next/server/chunks/ssr/{[root-of-the-server]__248ee887._.js → [root-of-the-server]__8d9536c4._.js} +2 -2
  163. package/web/.next/server/chunks/ssr/[root-of-the-server]__94128fa9._.js +3 -0
  164. package/web/.next/server/chunks/ssr/[root-of-the-server]__94128fa9._.js.map +1 -0
  165. package/web/.next/server/chunks/ssr/[root-of-the-server]__9bfb8e7c._.js +3 -0
  166. package/web/.next/server/chunks/ssr/[root-of-the-server]__9bfb8e7c._.js.map +1 -0
  167. package/web/.next/server/chunks/ssr/[root-of-the-server]__9dc40036._.js +3 -0
  168. package/web/.next/server/chunks/ssr/[root-of-the-server]__9dc40036._.js.map +1 -0
  169. package/web/.next/server/chunks/ssr/[root-of-the-server]__9de266fa._.js +1 -1
  170. package/web/.next/server/chunks/ssr/[root-of-the-server]__9de266fa._.js.map +1 -1
  171. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +1 -1
  172. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
  173. package/web/.next/server/chunks/ssr/[root-of-the-server]__b65f78cf._.js +3 -0
  174. package/web/.next/server/chunks/ssr/{[root-of-the-server]__b3a4cef4._.js → [root-of-the-server]__e630cc47._.js} +2 -2
  175. package/web/.next/server/chunks/ssr/[root-of-the-server]__e630cc47._.js.map +1 -0
  176. package/web/.next/server/chunks/ssr/{[root-of-the-server]__b062b383._.js → [root-of-the-server]__f1a05100._.js} +2 -2
  177. package/web/.next/server/chunks/ssr/{[root-of-the-server]__9bc1434f._.js → [root-of-the-server]__f8210f45._.js} +2 -2
  178. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
  179. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js.map +1 -1
  180. package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
  181. package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
  182. package/web/.next/server/chunks/ssr/{_752e01fd._.js → _21c75883._.js} +2 -2
  183. package/web/.next/server/chunks/ssr/{_752e01fd._.js.map → _21c75883._.js.map} +1 -1
  184. package/web/.next/server/chunks/ssr/_3533fed7._.js +3 -0
  185. package/web/.next/server/chunks/ssr/_3533fed7._.js.map +1 -0
  186. package/web/.next/server/chunks/ssr/_8dacd1e7._.js +1 -1
  187. package/web/.next/server/chunks/ssr/_8dacd1e7._.js.map +1 -1
  188. package/web/.next/server/chunks/ssr/_922aa39f._.js +3 -0
  189. package/web/.next/server/chunks/ssr/_922aa39f._.js.map +1 -0
  190. package/web/.next/server/chunks/ssr/_a5c23e45._.js +3 -0
  191. package/web/.next/server/chunks/ssr/_a5c23e45._.js.map +1 -0
  192. package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
  193. package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
  194. package/web/.next/server/chunks/ssr/{_2fa756cd._.js → _ef1cbadb._.js} +2 -2
  195. package/web/.next/server/chunks/ssr/{_2fa756cd._.js.map → _ef1cbadb._.js.map} +1 -1
  196. package/web/.next/server/chunks/ssr/_f50485a5._.js +3 -0
  197. package/web/.next/server/chunks/ssr/_f50485a5._.js.map +1 -0
  198. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  199. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  200. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js +1 -1
  201. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js.map +1 -1
  202. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
  203. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
  204. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
  205. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
  206. package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_feature_[featureId]_[tab]_page_tsx_40a5d287._.js +3 -0
  207. package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_feature_[featureId]_[tab]_page_tsx_40a5d287._.js.map +1 -0
  208. package/web/.next/server/chunks/ssr/src_presentation_web_c4348b8a._.js +2 -2
  209. package/web/.next/server/chunks/ssr/src_presentation_web_c4348b8a._.js.map +1 -1
  210. package/web/.next/server/chunks/ssr/src_presentation_web_components_a5e6c910._.js +3 -0
  211. package/web/.next/server/chunks/ssr/src_presentation_web_components_a5e6c910._.js.map +1 -0
  212. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
  213. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js.map +1 -1
  214. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
  215. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js.map +1 -1
  216. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  217. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  218. package/web/.next/server/chunks/ssr/src_presentation_web_e4510d10._.js +2 -2
  219. package/web/.next/server/chunks/ssr/src_presentation_web_e4510d10._.js.map +1 -1
  220. package/web/.next/server/pages/500.html +2 -2
  221. package/web/.next/server/server-reference-manifest.js +1 -1
  222. package/web/.next/server/server-reference-manifest.json +322 -28
  223. package/web/.next/static/chunks/2a09571d38368a18.css +2 -0
  224. package/web/.next/static/chunks/{132ff681f7e12121.js → 2b57a812d425e46c.js} +1 -1
  225. package/web/.next/static/chunks/30a344bb33a015e4.js +1 -0
  226. package/web/.next/static/chunks/{4354b4b30513e7f0.js → 349683fd8a55926e.js} +2 -2
  227. package/web/.next/static/chunks/{4906aba274bc6920.js → 50f823c5bd79359a.js} +1 -1
  228. package/web/.next/static/chunks/5ab0d19719a78f8a.js +1 -0
  229. package/web/.next/static/chunks/{54de5c2f98832b92.js → 5ec3d76ca618c32a.js} +1 -1
  230. package/web/.next/static/chunks/{38bb02c07a427f1e.js → b7a4219b1107049b.js} +1 -1
  231. package/web/.next/static/chunks/ba35a8119b89113c.js +1 -0
  232. package/web/.next/static/chunks/{7c7da9e978216d2b.js → bdfe416e656a9558.js} +1 -1
  233. package/web/.next/static/chunks/d9247a52ae260218.js +1 -0
  234. package/web/.next/static/chunks/e3553e79bd410414.js +11 -0
  235. package/web/.next/static/chunks/{0cbb35f940c9feef.js → e4e7979e34b7df8d.js} +1 -1
  236. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_9027d30a._.js +0 -3
  237. package/web/.next/server/chunks/ssr/[root-of-the-server]__4af0afe0._.js +0 -3
  238. package/web/.next/server/chunks/ssr/[root-of-the-server]__b3a4cef4._.js.map +0 -1
  239. package/web/.next/server/chunks/ssr/[root-of-the-server]__c2173b6d._.js +0 -3
  240. package/web/.next/server/chunks/ssr/[root-of-the-server]__c2173b6d._.js.map +0 -1
  241. package/web/.next/server/chunks/ssr/[root-of-the-server]__c3c963c6._.js +0 -3
  242. package/web/.next/server/chunks/ssr/[root-of-the-server]__c3c963c6._.js.map +0 -1
  243. package/web/.next/server/chunks/ssr/[root-of-the-server]__f0d8d054._.js.map +0 -1
  244. package/web/.next/server/chunks/ssr/_411648c4._.js +0 -3
  245. package/web/.next/server/chunks/ssr/_411648c4._.js.map +0 -1
  246. package/web/.next/server/chunks/ssr/_903aed47._.js +0 -3
  247. package/web/.next/server/chunks/ssr/_903aed47._.js.map +0 -1
  248. package/web/.next/server/chunks/ssr/_cc46119f._.js +0 -3
  249. package/web/.next/server/chunks/ssr/_cc46119f._.js.map +0 -1
  250. package/web/.next/server/chunks/ssr/_f38b49fe._.js +0 -3
  251. package/web/.next/server/chunks/ssr/_f38b49fe._.js.map +0 -1
  252. package/web/.next/server/chunks/ssr/node_modules__pnpm_c931457d._.js +0 -3
  253. package/web/.next/server/chunks/ssr/node_modules__pnpm_c931457d._.js.map +0 -1
  254. package/web/.next/server/chunks/ssr/src_presentation_web_components_5124369c._.js +0 -3
  255. package/web/.next/server/chunks/ssr/src_presentation_web_components_5124369c._.js.map +0 -1
  256. package/web/.next/static/chunks/1e0cfdcb44a16493.js +0 -1
  257. package/web/.next/static/chunks/5c55da0e28e6cdc8.js +0 -1
  258. package/web/.next/static/chunks/bb3e32c60cb2e794.js +0 -11
  259. package/web/.next/static/chunks/c0f23bc23fd8b8ad.js +0 -1
  260. package/web/.next/static/chunks/cb5c85c5e16e82d3.js +0 -1
  261. package/web/.next/static/chunks/f98eb6cb17b61cb2.css +0 -2
  262. /package/web/.next/server/chunks/{[root-of-the-server]__d8037e14._.js.map → [root-of-the-server]__52c318d1._.js.map} +0 -0
  263. /package/web/.next/server/chunks/ssr/{[root-of-the-server]__248ee887._.js.map → [root-of-the-server]__8d9536c4._.js.map} +0 -0
  264. /package/web/.next/server/chunks/ssr/{[root-of-the-server]__4af0afe0._.js.map → [root-of-the-server]__b65f78cf._.js.map} +0 -0
  265. /package/web/.next/server/chunks/ssr/{[root-of-the-server]__b062b383._.js.map → [root-of-the-server]__f1a05100._.js.map} +0 -0
  266. /package/web/.next/server/chunks/ssr/{[root-of-the-server]__9bc1434f._.js.map → [root-of-the-server]__f8210f45._.js.map} +0 -0
  267. /package/web/.next/static/{o8F4OKh6WJmRpbTqaCZ67 → TduNW421ayOJTfqE7Kf_f}/_buildManifest.js +0 -0
  268. /package/web/.next/static/{o8F4OKh6WJmRpbTqaCZ67 → TduNW421ayOJTfqE7Kf_f}/_clientMiddlewareManifest.json +0 -0
  269. /package/web/.next/static/{o8F4OKh6WJmRpbTqaCZ67 → TduNW421ayOJTfqE7Kf_f}/_ssgManifest.js +0 -0
@@ -1,6 +1,7 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { ExternalLink, GitBranch, GitCommitHorizontal, Zap } from 'lucide-react';
4
+ import { InlineAttachments } from '../../common/inline-attachments/index.js';
4
5
  import { PrStatus } from '../../../../../../packages/core/src/domain/generated/output.js';
5
6
  import { cn } from '../../../lib/utils.js';
6
7
  import { Badge } from '../../ui/badge.js';
@@ -50,7 +51,7 @@ function FeatureInfo({ data }) {
50
51
  Boolean(data.createdAt);
51
52
  if (!hasInfo)
52
53
  return null;
53
- return (_jsxs(_Fragment, { children: [_jsx(Separator, {}), _jsxs("div", { "data-testid": "feature-drawer-info", className: "flex flex-col gap-3 p-4", children: [data.branch ? (_jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "Branch" }), _jsxs("span", { className: "flex items-center gap-1.5 text-sm", children: [_jsx(GitBranch, { className: "text-muted-foreground h-3.5 w-3.5 shrink-0" }), _jsx("code", { className: "bg-muted rounded px-1 py-0.5 font-mono text-xs", children: data.branch }), data.baseBranch ? (_jsxs("span", { className: "text-muted-foreground text-xs", children: ["from ", data.baseBranch] })) : null] })] })) : null, data.oneLiner ? (_jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "One-Liner" }), _jsx("span", { className: "text-sm leading-relaxed", children: data.oneLiner })] })) : null, data.userQuery ? (_jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "User Query" }), _jsx("span", { className: "text-sm leading-relaxed", children: data.userQuery })] })) : null, data.summary ? (_jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "Summary" }), _jsx("span", { className: "text-sm leading-relaxed", children: data.summary })] })) : null, data.createdAt ? (_jsx(DetailRow, { label: "Created", value: formatRelativeTime(data.createdAt) })) : null] })] }));
54
+ return (_jsxs(_Fragment, { children: [_jsx(Separator, {}), _jsxs("div", { "data-testid": "feature-drawer-info", className: "flex flex-col gap-3 p-4", children: [data.branch ? (_jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "Branch" }), _jsxs("span", { className: "flex items-center gap-1.5 text-sm", children: [_jsx(GitBranch, { className: "text-muted-foreground h-3.5 w-3.5 shrink-0" }), _jsx("code", { className: "bg-muted rounded px-1 py-0.5 font-mono text-xs", children: data.branch }), data.baseBranch ? (_jsxs("span", { className: "text-muted-foreground text-xs", children: ["from ", data.baseBranch] })) : null] })] })) : null, data.oneLiner ? (_jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "One-Liner" }), _jsx("span", { className: "text-sm leading-relaxed", children: data.oneLiner })] })) : null, data.userQuery ? (_jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "User Query" }), _jsx(InlineAttachments, { text: data.userQuery })] })) : null, data.summary ? (_jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "Summary" }), _jsx("span", { className: "text-sm leading-relaxed", children: data.summary })] })) : null, data.createdAt ? (_jsx(DetailRow, { label: "Created", value: formatRelativeTime(data.createdAt) })) : null] })] }));
54
55
  }
55
56
  // ── PR Info section ──────────────────────────────────────────────────
56
57
  const prStatusStyles = {
@@ -0,0 +1,3 @@
1
+ export { InlineAttachments, parseAttachmentRefs } from './inline-attachments.js';
2
+ export type { InlineAttachmentsProps } from './inline-attachments.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/inline-attachments/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC9E,YAAY,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1 @@
1
+ export { InlineAttachments, parseAttachmentRefs } from './inline-attachments.js';
@@ -0,0 +1,20 @@
1
+ export interface InlineAttachmentsProps {
2
+ /** Text that may contain `@/path/to/file` attachment references. */
3
+ text: string;
4
+ /** Additional attachment paths to render (e.g. from rejection feedback). */
5
+ attachmentPaths?: string[];
6
+ }
7
+ interface TextSegment {
8
+ type: 'text';
9
+ value: string;
10
+ }
11
+ interface AttachmentSegment {
12
+ type: 'attachment';
13
+ path: string;
14
+ }
15
+ type Segment = TextSegment | AttachmentSegment;
16
+ /** Parse text into segments of plain text and attachment references. */
17
+ export declare function parseAttachmentRefs(text: string): Segment[];
18
+ export declare function InlineAttachments({ text, attachmentPaths }: InlineAttachmentsProps): import("react/jsx-runtime").JSX.Element;
19
+ export {};
20
+ //# sourceMappingURL=inline-attachments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inline-attachments.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/inline-attachments/inline-attachments.tsx"],"names":[],"mappings":"AA6BA,MAAM,WAAW,sBAAsB;IACrC,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,iBAAiB;IACzB,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,KAAK,OAAO,GAAG,WAAW,GAAG,iBAAiB,CAAC;AAE/C,wEAAwE;AACxE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE,CAwB3D;AAED,wBAAgB,iBAAiB,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,sBAAsB,2CA4BlF"}
@@ -0,0 +1,72 @@
1
+ /* eslint-disable @next/next/no-img-element -- Local file preview requires raw <img>, not next/image */
2
+ 'use client';
3
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
+ import { useState } from 'react';
5
+ import { Dialog, DialogTrigger, DialogContent, DialogTitle } from '../../ui/dialog.js';
6
+ import { VisuallyHidden } from 'radix-ui';
7
+ import { DownloadIcon, ImageOff } from 'lucide-react';
8
+ const IMAGE_EXTS = new Set(['.png', '.jpg', '.jpeg', '.gif', '.svg', '.webp', '.ico', '.bmp']);
9
+ function isImagePath(path) {
10
+ const dot = path.lastIndexOf('.');
11
+ return dot >= 0 && IMAGE_EXTS.has(path.slice(dot).toLowerCase());
12
+ }
13
+ function previewUrl(path) {
14
+ const ext = path.lastIndexOf('.') >= 0 ? path.slice(path.lastIndexOf('.')) : '';
15
+ const mimeGuess = isImagePath(path) ? `image/${ext.slice(1).replace('jpg', 'jpeg')}` : '';
16
+ const params = new URLSearchParams({ path, ...(mimeGuess && { mimeType: mimeGuess }) });
17
+ return `/api/attachments/preview?${params.toString()}`;
18
+ }
19
+ function getFilename(path) {
20
+ return path.split('/').pop() ?? path;
21
+ }
22
+ /** Regex matching `@/absolute/path` attachment references in text. */
23
+ const ATTACHMENT_REF_RE = /(?:^|\s)@(\/[^\s]+)/g;
24
+ /** Parse text into segments of plain text and attachment references. */
25
+ export function parseAttachmentRefs(text) {
26
+ const segments = [];
27
+ let lastIndex = 0;
28
+ for (const match of text.matchAll(ATTACHMENT_REF_RE)) {
29
+ const fullMatchStart = match.index;
30
+ // The path capture starts after the optional leading whitespace
31
+ const leadingWs = match[0].length - match[0].trimStart().length;
32
+ const refStart = fullMatchStart + leadingWs;
33
+ // Add text before this reference (including leading whitespace)
34
+ if (refStart > lastIndex) {
35
+ segments.push({ type: 'text', value: text.slice(lastIndex, refStart) });
36
+ }
37
+ segments.push({ type: 'attachment', path: match[1] });
38
+ lastIndex = fullMatchStart + match[0].length;
39
+ }
40
+ if (lastIndex < text.length) {
41
+ segments.push({ type: 'text', value: text.slice(lastIndex) });
42
+ }
43
+ return segments;
44
+ }
45
+ export function InlineAttachments({ text, attachmentPaths }) {
46
+ const segments = parseAttachmentRefs(text);
47
+ const hasInlineAttachments = segments.some((s) => s.type === 'attachment');
48
+ const extraPaths = attachmentPaths?.filter(Boolean) ?? [];
49
+ if (!hasInlineAttachments && extraPaths.length === 0) {
50
+ return _jsx("span", { className: "text-sm leading-relaxed", children: text });
51
+ }
52
+ return (_jsxs("div", { className: "flex flex-col gap-2", children: [segments.map((segment) => {
53
+ if (segment.type === 'text') {
54
+ const trimmed = segment.value.trim();
55
+ if (!trimmed)
56
+ return null;
57
+ return (_jsx("span", { className: "text-sm leading-relaxed", children: trimmed }, `text-${trimmed.slice(0, 40)}`));
58
+ }
59
+ return _jsx(AttachmentPreview, { path: segment.path }, `att-${segment.path}`);
60
+ }), extraPaths.map((path) => (_jsx(AttachmentPreview, { path: path }, `extra-${path}`)))] }));
61
+ }
62
+ function AttachmentPreview({ path }) {
63
+ const filename = getFilename(path);
64
+ const [loadError, setLoadError] = useState(false);
65
+ if (isImagePath(path)) {
66
+ if (loadError) {
67
+ return (_jsxs("div", { "data-testid": "inline-attachment-image-error", className: "text-muted-foreground flex items-center gap-2 rounded-md border px-3 py-2 text-sm", children: [_jsx(ImageOff, { className: "h-4 w-4 shrink-0" }), _jsx("span", { className: "truncate", children: filename })] }));
68
+ }
69
+ return (_jsxs(Dialog, { children: [_jsx(DialogTrigger, { asChild: true, children: _jsx("img", { src: previewUrl(path), alt: filename, "data-testid": "inline-attachment-image", onError: () => setLoadError(true), className: "max-h-48 max-w-full cursor-pointer rounded-md border object-contain transition-opacity hover:opacity-80" }) }), _jsxs(DialogContent, { className: "max-w-3xl gap-0 overflow-hidden border-0 p-0 [&>button:last-child]:!cursor-pointer [&>button:last-child]:!rounded-full [&>button:last-child]:!bg-black/70 [&>button:last-child]:!p-1.5 [&>button:last-child]:!text-white [&>button:last-child]:!opacity-100 [&>button:last-child]:!shadow-lg [&>button:last-child]:!backdrop-blur-md [&>button:last-child]:hover:!bg-black/90", children: [_jsx(VisuallyHidden.Root, { children: _jsxs(DialogTitle, { children: ["Preview: ", filename] }) }), _jsx("div", { className: "relative bg-black/90", children: _jsx("img", { src: previewUrl(path), alt: filename, className: "h-auto max-h-[70vh] w-full object-contain" }) }), _jsxs("div", { className: "bg-background flex items-center gap-3 px-4 py-3", children: [_jsx("div", { className: "flex min-w-0 flex-1 flex-col", children: _jsx("span", { className: "truncate text-sm font-medium", children: filename }) }), _jsx("a", { href: previewUrl(path), download: filename, className: "text-muted-foreground hover:text-foreground shrink-0 cursor-pointer rounded p-1.5 transition-colors", "aria-label": `Download ${filename}`, children: _jsx(DownloadIcon, { className: "h-4 w-4" }) })] })] })] }));
70
+ }
71
+ return (_jsx("a", { href: previewUrl(path), download: filename, "data-testid": "inline-attachment-file", className: "text-primary text-sm underline underline-offset-2", children: filename }));
72
+ }
@@ -0,0 +1,16 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { InlineAttachments } from './inline-attachments.js';
3
+ declare const meta: Meta<typeof InlineAttachments>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof InlineAttachments>;
6
+ /** Plain text with no attachment references. */
7
+ export declare const PlainText: Story;
8
+ /** Text with an image attachment reference. */
9
+ export declare const WithImageAttachment: Story;
10
+ /** Text with multiple attachment references. */
11
+ export declare const MultipleAttachments: Story;
12
+ /** Text with a non-image file attachment. */
13
+ export declare const FileAttachment: Story;
14
+ /** Extra attachment paths passed via prop (e.g. rejection feedback). */
15
+ export declare const ExtraAttachmentPaths: Story;
16
+ //# sourceMappingURL=inline-attachments.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inline-attachments.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/inline-attachments/inline-attachments.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,iBAAiB,CAYxC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAEhD,gDAAgD;AAChD,eAAO,MAAM,SAAS,EAAE,KAIvB,CAAC;AAEF,+CAA+C;AAC/C,eAAO,MAAM,mBAAmB,EAAE,KAIjC,CAAC;AAEF,gDAAgD;AAChD,eAAO,MAAM,mBAAmB,EAAE,KAIjC,CAAC;AAEF,6CAA6C;AAC7C,eAAO,MAAM,cAAc,EAAE,KAI5B,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,oBAAoB,EAAE,KAQlC,CAAC"}
@@ -0,0 +1,46 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { InlineAttachments } from './inline-attachments.js';
3
+ const meta = {
4
+ title: 'Common/InlineAttachments',
5
+ component: InlineAttachments,
6
+ tags: ['autodocs'],
7
+ parameters: { layout: 'padded' },
8
+ decorators: [
9
+ (Story) => (_jsx("div", { style: { maxWidth: '400px', border: '1px solid var(--color-border)', padding: '16px' }, children: _jsx(Story, {}) })),
10
+ ],
11
+ };
12
+ export default meta;
13
+ /** Plain text with no attachment references. */
14
+ export const PlainText = {
15
+ args: {
16
+ text: 'Fix the login bug where users cannot sign in with Google OAuth.',
17
+ },
18
+ };
19
+ /** Text with an image attachment reference. */
20
+ export const WithImageAttachment = {
21
+ args: {
22
+ text: 'The button is misaligned, see screenshot:\n@/home/user/.shep/attachments/pending-abc/screenshot.png',
23
+ },
24
+ };
25
+ /** Text with multiple attachment references. */
26
+ export const MultipleAttachments = {
27
+ args: {
28
+ text: 'Before: @/home/user/.shep/attachments/pending-abc/before.png\nAfter: @/home/user/.shep/attachments/pending-abc/after.png',
29
+ },
30
+ };
31
+ /** Text with a non-image file attachment. */
32
+ export const FileAttachment = {
33
+ args: {
34
+ text: 'See the log file:\n@/home/user/.shep/attachments/pending-abc/error.log',
35
+ },
36
+ };
37
+ /** Extra attachment paths passed via prop (e.g. rejection feedback). */
38
+ export const ExtraAttachmentPaths = {
39
+ args: {
40
+ text: 'Please fix the layout issues',
41
+ attachmentPaths: [
42
+ '/home/user/.shep/attachments/pending-abc/screenshot1.png',
43
+ '/home/user/.shep/attachments/pending-abc/screenshot2.png',
44
+ ],
45
+ },
46
+ };
@@ -6,6 +6,6 @@ import { usePathname } from 'next/navigation';
6
6
  */
7
7
  export function useSelectedFeatureId() {
8
8
  const pathname = usePathname();
9
- const match = pathname.match(/^\/feature\/(.+)$/);
9
+ const match = pathname.match(/^\/feature\/([^/]+)/);
10
10
  return match?.[1] ?? null;
11
11
  }