@shepai/cli 1.72.6 → 1.72.7-pr187.0bb1028

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 (488) hide show
  1. package/dist/packages/core/src/application/use-cases/features/delete-feature.use-case.d.ts +4 -0
  2. package/dist/packages/core/src/application/use-cases/features/delete-feature.use-case.d.ts.map +1 -1
  3. package/dist/packages/core/src/application/use-cases/features/delete-feature.use-case.js +20 -12
  4. package/dist/packages/core/src/application/use-cases/repositories/delete-repository.use-case.d.ts +8 -3
  5. package/dist/packages/core/src/application/use-cases/repositories/delete-repository.use-case.d.ts.map +1 -1
  6. package/dist/packages/core/src/application/use-cases/repositories/delete-repository.use-case.js +17 -4
  7. package/dist/packages/core/src/application/use-cases/tools/list-tools.use-case.d.ts +3 -0
  8. package/dist/packages/core/src/application/use-cases/tools/list-tools.use-case.d.ts.map +1 -1
  9. package/dist/packages/core/src/application/use-cases/tools/list-tools.use-case.js +3 -0
  10. package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.js +1 -1
  11. package/dist/packages/core/src/infrastructure/services/tool-installer/tool-installer.service.d.ts.map +1 -1
  12. package/dist/packages/core/src/infrastructure/services/tool-installer/tool-installer.service.js +9 -1
  13. package/dist/packages/core/src/infrastructure/services/tool-installer/tool-metadata.d.ts +6 -0
  14. package/dist/packages/core/src/infrastructure/services/tool-installer/tool-metadata.d.ts.map +1 -1
  15. package/dist/packages/core/src/infrastructure/services/tool-installer/tool-metadata.js +5 -0
  16. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/alacritty.json +5 -2
  17. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/antigravity.json +3 -0
  18. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/claude-code.json +4 -1
  19. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/cursor-cli.json +3 -0
  20. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/cursor.json +3 -0
  21. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/gemini-cli.json +3 -0
  22. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/gh.json +3 -0
  23. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/git.json +3 -0
  24. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/iterm2.json +3 -0
  25. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/kitty.json +5 -2
  26. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/tmux.json +4 -1
  27. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/vscode.json +4 -1
  28. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/warp.json +3 -0
  29. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/windsurf.json +4 -1
  30. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/zed.json +3 -0
  31. package/dist/src/presentation/web/app/(dashboard)/get-graph-data.d.ts.map +1 -1
  32. package/dist/src/presentation/web/app/(dashboard)/get-graph-data.js +2 -6
  33. package/dist/src/presentation/web/app/api/tools/[id]/install/route.d.ts.map +1 -1
  34. package/dist/src/presentation/web/app/api/tools/[id]/install/route.js +9 -4
  35. package/dist/src/presentation/web/app/api/tools/[id]/install/stream/route.d.ts +7 -0
  36. package/dist/src/presentation/web/app/api/tools/[id]/install/stream/route.d.ts.map +1 -0
  37. package/dist/src/presentation/web/app/api/tools/[id]/install/stream/route.js +32 -0
  38. package/dist/src/presentation/web/app/build-graph-nodes.js +11 -1
  39. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.d.ts +4 -1
  40. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.d.ts.map +1 -1
  41. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.js +10 -6
  42. package/dist/src/presentation/web/components/common/control-center-drawer/create-drawer-client.d.ts.map +1 -1
  43. package/dist/src/presentation/web/components/common/control-center-drawer/create-drawer-client.js +12 -3
  44. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
  45. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +6 -2
  46. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.d.ts.map +1 -1
  47. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.js +1 -1
  48. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
  49. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +1 -1
  50. package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
  51. package/dist/src/presentation/web/components/common/feature-node/feature-node.js +7 -2
  52. package/dist/src/presentation/web/components/common/repository-node/repository-node.d.ts.map +1 -1
  53. package/dist/src/presentation/web/components/common/repository-node/repository-node.js +6 -2
  54. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  55. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +14 -2
  56. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts +3 -5
  57. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  58. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +131 -196
  59. package/dist/src/presentation/web/components/features/index.d.ts +1 -1
  60. package/dist/src/presentation/web/components/features/index.d.ts.map +1 -1
  61. package/dist/src/presentation/web/components/features/index.js +1 -1
  62. package/dist/src/presentation/web/components/features/tools/index.d.ts +1 -1
  63. package/dist/src/presentation/web/components/features/tools/index.d.ts.map +1 -1
  64. package/dist/src/presentation/web/components/features/tools/index.js +1 -1
  65. package/dist/src/presentation/web/components/features/tools/tool-card.d.ts.map +1 -1
  66. package/dist/src/presentation/web/components/features/tools/tool-card.js +18 -14
  67. package/dist/src/presentation/web/components/features/tools/tool-card.stories.d.ts.map +1 -1
  68. package/dist/src/presentation/web/components/features/tools/tool-card.stories.js +18 -0
  69. package/dist/src/presentation/web/components/features/tools/tool-detail-drawer.d.ts +10 -0
  70. package/dist/src/presentation/web/components/features/tools/tool-detail-drawer.d.ts.map +1 -0
  71. package/dist/src/presentation/web/components/features/tools/tool-detail-drawer.js +95 -0
  72. package/dist/src/presentation/web/components/features/tools/tool-detail-drawer.stories.d.ts +12 -0
  73. package/dist/src/presentation/web/components/features/tools/tool-detail-drawer.stories.d.ts.map +1 -0
  74. package/dist/src/presentation/web/components/features/tools/tool-detail-drawer.stories.js +119 -0
  75. package/dist/src/presentation/web/components/features/tools/tools-page-client.js +3 -3
  76. package/dist/src/presentation/web/components/features/tools/tools-page-client.stories.d.ts.map +1 -1
  77. package/dist/src/presentation/web/components/features/tools/tools-page-client.stories.js +15 -0
  78. package/dist/src/presentation/web/components/ui/alert-dialog.d.ts +1 -1
  79. package/dist/src/presentation/web/components/ui/alert-dialog.d.ts.map +1 -1
  80. package/dist/src/presentation/web/components/ui/alert-dialog.js +7 -2
  81. package/dist/src/presentation/web/components/ui/dialog.d.ts.map +1 -1
  82. package/dist/src/presentation/web/components/ui/dialog.js +6 -1
  83. package/dist/src/presentation/web/hooks/use-tool-install-stream.d.ts +10 -0
  84. package/dist/src/presentation/web/hooks/use-tool-install-stream.d.ts.map +1 -0
  85. package/dist/src/presentation/web/hooks/use-tool-install-stream.js +38 -0
  86. package/dist/src/presentation/web/lib/layout-with-dagre.d.ts +2 -0
  87. package/dist/src/presentation/web/lib/layout-with-dagre.d.ts.map +1 -1
  88. package/dist/src/presentation/web/lib/layout-with-dagre.js +86 -4
  89. package/dist/tsconfig.build.tsbuildinfo +1 -1
  90. package/package.json +1 -1
  91. package/web/.next/BUILD_ID +1 -1
  92. package/web/.next/app-path-routes-manifest.json +1 -0
  93. package/web/.next/build-manifest.json +7 -7
  94. package/web/.next/cache/.previewinfo +1 -1
  95. package/web/.next/cache/.rscinfo +1 -1
  96. package/web/.next/cache/.tsbuildinfo +1 -1
  97. package/web/.next/cache/config.json +3 -3
  98. package/web/.next/fallback-build-manifest.json +2 -2
  99. package/web/.next/prerender-manifest.json +3 -3
  100. package/web/.next/required-server-files.js +1 -1
  101. package/web/.next/required-server-files.json +1 -1
  102. package/web/.next/routes-manifest.json +8 -0
  103. package/web/.next/server/app/(dashboard)/@drawer/create/page/build-manifest.json +5 -5
  104. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +14 -14
  105. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
  106. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  107. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  108. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/build-manifest.json +5 -5
  109. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +17 -17
  110. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -1
  111. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  112. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  113. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/build-manifest.json +5 -5
  114. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +12 -12
  115. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
  116. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  117. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  118. package/web/.next/server/app/(dashboard)/create/page/build-manifest.json +5 -5
  119. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +14 -14
  120. package/web/.next/server/app/(dashboard)/create/page.js +1 -1
  121. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  122. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  123. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/build-manifest.json +5 -5
  124. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +17 -17
  125. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -1
  126. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  127. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  128. package/web/.next/server/app/(dashboard)/page/build-manifest.json +5 -5
  129. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +12 -12
  130. package/web/.next/server/app/(dashboard)/page.js +1 -1
  131. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  132. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  133. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/build-manifest.json +5 -5
  134. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +12 -12
  135. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
  136. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  137. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  138. package/web/.next/server/app/_global-error/page/build-manifest.json +5 -5
  139. package/web/.next/server/app/_global-error.html +2 -2
  140. package/web/.next/server/app/_global-error.rsc +1 -1
  141. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  142. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  143. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  144. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  145. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  146. package/web/.next/server/app/_not-found/page/build-manifest.json +5 -5
  147. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  148. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  149. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  150. package/web/.next/server/app/api/tools/[id]/install/route.js +1 -1
  151. package/web/.next/server/app/api/tools/[id]/install/route.js.nft.json +1 -1
  152. package/web/.next/server/app/api/tools/[id]/install/stream/route/app-paths-manifest.json +3 -0
  153. package/web/.next/server/app/api/tools/[id]/install/stream/route/build-manifest.json +11 -0
  154. package/web/.next/server/app/api/tools/[id]/install/stream/route/server-reference-manifest.json +4 -0
  155. package/web/.next/server/app/api/tools/[id]/install/stream/route.js +6 -0
  156. package/web/.next/server/app/api/tools/[id]/install/stream/route.js.map +5 -0
  157. package/web/.next/server/app/api/tools/[id]/install/stream/route.js.nft.json +1 -0
  158. package/web/.next/server/app/api/tools/[id]/install/stream/route_client-reference-manifest.js +2 -0
  159. package/web/.next/server/app/skills/page/build-manifest.json +5 -5
  160. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  161. package/web/.next/server/app/skills/page.js +1 -1
  162. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  163. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  164. package/web/.next/server/app/tools/page/build-manifest.json +5 -5
  165. package/web/.next/server/app/tools/page/server-reference-manifest.json +77 -2
  166. package/web/.next/server/app/tools/page.js +2 -2
  167. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  168. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  169. package/web/.next/server/app/version/page/build-manifest.json +5 -5
  170. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  171. package/web/.next/server/app/version/page.js.nft.json +1 -1
  172. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  173. package/web/.next/server/app-paths-manifest.json +1 -0
  174. package/web/.next/server/chunks/[root-of-the-server]__0866d2b5._.js +3 -0
  175. package/web/.next/server/chunks/[root-of-the-server]__0866d2b5._.js.map +1 -0
  176. package/web/.next/server/chunks/[root-of-the-server]__e247a485._.js +11 -0
  177. package/web/.next/server/chunks/[root-of-the-server]__e247a485._.js.map +1 -0
  178. package/web/.next/server/chunks/f3a1f__next-internal_server_app_api_tools_[id]_install_stream_route_actions_1fe5bd5d.js +3 -0
  179. package/web/.next/server/chunks/f3a1f__next-internal_server_app_api_tools_[id]_install_stream_route_actions_1fe5bd5d.js.map +1 -0
  180. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  181. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  182. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_2b7834f6.js +1 -1
  183. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_2b7834f6.js.map +1 -1
  184. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_6923c575.js +1 -1
  185. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_6923c575.js.map +1 -1
  186. package/web/.next/server/chunks/ssr/[root-of-the-server]__17a611f0._.js +4 -0
  187. package/web/.next/server/chunks/ssr/[root-of-the-server]__17a611f0._.js.map +1 -0
  188. package/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
  189. package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__07385073._.js → server/chunks/ssr/[root-of-the-server]__45dbf93d._.js} +3 -3
  190. package/web/.next/server/chunks/ssr/{[root-of-the-server]__07385073._.js.map → [root-of-the-server]__45dbf93d._.js.map} +1 -1
  191. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  192. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js.map +1 -1
  193. package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__8fcb9132._.js → server/chunks/ssr/[root-of-the-server]__6cbc1149._.js} +3 -3
  194. package/web/.next/server/chunks/ssr/[root-of-the-server]__6cbc1149._.js.map +1 -0
  195. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  196. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js.map +1 -1
  197. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +3 -0
  198. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -0
  199. package/web/.next/server/chunks/ssr/[root-of-the-server]__c18f84a4._.js +3 -0
  200. package/web/.next/server/chunks/ssr/[root-of-the-server]__c18f84a4._.js.map +1 -0
  201. package/web/.next/server/chunks/ssr/[root-of-the-server]__cbae9863._.js +3 -0
  202. package/web/.next/server/chunks/ssr/[root-of-the-server]__cbae9863._.js.map +1 -0
  203. package/web/.next/server/chunks/ssr/[root-of-the-server]__e062a6de._.js +3 -0
  204. package/web/.next/server/chunks/ssr/[root-of-the-server]__e062a6de._.js.map +1 -0
  205. package/web/.next/server/chunks/ssr/[root-of-the-server]__e5e09f72._.js +3 -0
  206. package/web/.next/server/chunks/ssr/[root-of-the-server]__e5e09f72._.js.map +1 -0
  207. package/web/.next/server/chunks/ssr/_07c2a32a._.js +1 -1
  208. package/web/.next/server/chunks/ssr/_07c2a32a._.js.map +1 -1
  209. package/web/.next/server/chunks/ssr/_0e9d6bf7._.js +3 -0
  210. package/web/.next/server/chunks/ssr/_0e9d6bf7._.js.map +1 -0
  211. package/web/.next/server/chunks/ssr/_1978f325._.js +7 -0
  212. package/web/.next/server/chunks/ssr/_1978f325._.js.map +1 -0
  213. package/web/.next/server/chunks/ssr/_3197d5cb._.js +3 -0
  214. package/web/.next/server/chunks/ssr/_3197d5cb._.js.map +1 -0
  215. package/web/.next/server/chunks/ssr/_61351ed3._.js +3 -0
  216. package/web/.next/server/chunks/ssr/_61351ed3._.js.map +1 -0
  217. package/web/.next/server/chunks/ssr/_8400c8bb._.js +3 -0
  218. package/web/.next/server/chunks/ssr/_8400c8bb._.js.map +1 -0
  219. package/web/.next/server/chunks/ssr/_9f940437._.js +3 -0
  220. package/web/.next/server/chunks/ssr/_9f940437._.js.map +1 -0
  221. package/web/.next/server/chunks/ssr/_a29296f0._.js +3 -0
  222. package/web/.next/server/chunks/ssr/_a29296f0._.js.map +1 -0
  223. package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/_e50484ec._.js → server/chunks/ssr/_c03d5043._.js} +2 -2
  224. package/web/.next/server/chunks/ssr/{_e50484ec._.js.map → _c03d5043._.js.map} +1 -1
  225. package/web/.next/server/chunks/ssr/_e806976d._.js +3 -0
  226. package/web/.next/server/chunks/ssr/_e806976d._.js.map +1 -0
  227. package/web/.next/server/chunks/ssr/src_presentation_web_1a32dbcb._.js +2 -2
  228. package/web/.next/server/chunks/ssr/src_presentation_web_1a32dbcb._.js.map +1 -1
  229. package/web/.next/server/chunks/ssr/src_presentation_web_398553b0._.js +1 -1
  230. package/web/.next/server/chunks/ssr/src_presentation_web_398553b0._.js.map +1 -1
  231. package/web/.next/server/chunks/ssr/src_presentation_web_5c87e8e4._.js +1 -1
  232. package/web/.next/server/chunks/ssr/src_presentation_web_5c87e8e4._.js.map +1 -1
  233. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_f4952172.js +1 -1
  234. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_f4952172.js.map +1 -1
  235. package/web/.next/server/chunks/ssr/src_presentation_web_c1bc6240._.js +2 -2
  236. package/web/.next/server/chunks/ssr/src_presentation_web_c1bc6240._.js.map +1 -1
  237. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
  238. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +1 -1
  239. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  240. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  241. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_3d0aa70c._.js +3 -0
  242. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_3d0aa70c._.js.map +1 -0
  243. package/web/.next/server/middleware-build-manifest.js +5 -5
  244. package/web/.next/server/pages/500.html +2 -2
  245. package/web/.next/server/server-reference-manifest.js +1 -1
  246. package/web/.next/server/server-reference-manifest.json +61 -26
  247. package/web/.next/standalone/src/presentation/web/.next/BUILD_ID +1 -1
  248. package/web/.next/standalone/src/presentation/web/.next/app-path-routes-manifest.json +1 -0
  249. package/web/.next/standalone/src/presentation/web/.next/build-manifest.json +7 -7
  250. package/web/.next/standalone/src/presentation/web/.next/prerender-manifest.json +3 -3
  251. package/web/.next/standalone/src/presentation/web/.next/required-server-files.json +1 -1
  252. package/web/.next/standalone/src/presentation/web/.next/routes-manifest.json +8 -0
  253. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page/build-manifest.json +5 -5
  254. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +14 -14
  255. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
  256. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  257. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  258. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/build-manifest.json +5 -5
  259. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +17 -17
  260. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -1
  261. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  262. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  263. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/build-manifest.json +5 -5
  264. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +12 -12
  265. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
  266. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  267. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  268. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page/build-manifest.json +5 -5
  269. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +14 -14
  270. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page.js +1 -1
  271. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  272. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  273. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page/build-manifest.json +5 -5
  274. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +17 -17
  275. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -1
  276. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  277. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  278. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page/build-manifest.json +5 -5
  279. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +12 -12
  280. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page.js +1 -1
  281. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  282. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  283. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/build-manifest.json +5 -5
  284. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +12 -12
  285. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
  286. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  287. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  288. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/page/build-manifest.json +5 -5
  289. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.html +2 -2
  290. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.rsc +1 -1
  291. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  292. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  293. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  294. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  295. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  296. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/build-manifest.json +5 -5
  297. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  298. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  299. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  300. package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/route.js +1 -1
  301. package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/route.js.nft.json +1 -1
  302. package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/stream/route/app-paths-manifest.json +3 -0
  303. package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/stream/route/build-manifest.json +11 -0
  304. package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/stream/route/server-reference-manifest.json +4 -0
  305. package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/stream/route.js +6 -0
  306. package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/stream/route.js.map +5 -0
  307. package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/stream/route.js.nft.json +1 -0
  308. package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/stream/route_client-reference-manifest.js +2 -0
  309. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/build-manifest.json +5 -5
  310. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  311. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page.js +1 -1
  312. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page.js.nft.json +1 -1
  313. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  314. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/build-manifest.json +5 -5
  315. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/server-reference-manifest.json +77 -2
  316. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page.js +2 -2
  317. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page.js.nft.json +1 -1
  318. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  319. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/build-manifest.json +5 -5
  320. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  321. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page.js.nft.json +1 -1
  322. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  323. package/web/.next/standalone/src/presentation/web/.next/server/app-paths-manifest.json +1 -0
  324. package/web/.next/standalone/src/presentation/web/.next/server/chunks/[root-of-the-server]__0866d2b5._.js +3 -0
  325. package/web/.next/standalone/src/presentation/web/.next/server/chunks/[root-of-the-server]__e247a485._.js +11 -0
  326. package/web/.next/standalone/src/presentation/web/.next/server/chunks/f3a1f__next-internal_server_app_api_tools_[id]_install_stream_route_actions_1fe5bd5d.js +3 -0
  327. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  328. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_2b7834f6.js +1 -1
  329. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_6923c575.js +1 -1
  330. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__17a611f0._.js +4 -0
  331. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
  332. package/web/.next/{server/chunks/ssr/[root-of-the-server]__07385073._.js → standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__45dbf93d._.js} +3 -3
  333. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  334. package/web/.next/{server/chunks/ssr/[root-of-the-server]__8fcb9132._.js → standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6cbc1149._.js} +3 -3
  335. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  336. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +3 -0
  337. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__c18f84a4._.js +3 -0
  338. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__cbae9863._.js +3 -0
  339. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__e062a6de._.js +3 -0
  340. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__e5e09f72._.js +3 -0
  341. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_07c2a32a._.js +1 -1
  342. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_0e9d6bf7._.js +3 -0
  343. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_1978f325._.js +7 -0
  344. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_3197d5cb._.js +3 -0
  345. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_61351ed3._.js +3 -0
  346. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_8400c8bb._.js +3 -0
  347. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_9f940437._.js +3 -0
  348. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_a29296f0._.js +3 -0
  349. package/web/.next/{server/chunks/ssr/_e50484ec._.js → standalone/src/presentation/web/.next/server/chunks/ssr/_c03d5043._.js} +2 -2
  350. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_e806976d._.js +3 -0
  351. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_1a32dbcb._.js +2 -2
  352. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_398553b0._.js +1 -1
  353. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_5c87e8e4._.js +1 -1
  354. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_f4952172.js +1 -1
  355. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_c1bc6240._.js +2 -2
  356. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
  357. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  358. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_3d0aa70c._.js +3 -0
  359. package/web/.next/standalone/src/presentation/web/.next/server/middleware-build-manifest.js +5 -5
  360. package/web/.next/standalone/src/presentation/web/.next/server/pages/500.html +2 -2
  361. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.js +1 -1
  362. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.json +61 -26
  363. package/web/.next/standalone/src/presentation/web/app/(dashboard)/get-graph-data.ts +2 -6
  364. package/web/.next/standalone/src/presentation/web/app/api/tools/[id]/install/route.ts +14 -6
  365. package/web/.next/standalone/src/presentation/web/app/api/tools/[id]/install/stream/route.ts +42 -0
  366. package/web/.next/standalone/src/presentation/web/app/build-graph-nodes.ts +14 -1
  367. package/web/.next/standalone/src/presentation/web/components/common/base-drawer/base-drawer.tsx +23 -9
  368. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/create-drawer-client.tsx +13 -3
  369. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx +6 -2
  370. package/web/.next/standalone/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.tsx +2 -0
  371. package/web/.next/standalone/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.tsx +8 -5
  372. package/web/.next/standalone/src/presentation/web/components/common/feature-node/feature-node.tsx +30 -24
  373. package/web/.next/standalone/src/presentation/web/components/common/repository-node/repository-node.tsx +33 -25
  374. package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center-inner.tsx +25 -3
  375. package/web/.next/standalone/src/presentation/web/components/features/control-center/use-control-center-state.ts +184 -230
  376. package/web/.next/standalone/src/presentation/web/components/features/index.ts +1 -1
  377. package/web/.next/standalone/src/presentation/web/components/features/tools/index.ts +1 -1
  378. package/web/.next/standalone/src/presentation/web/components/features/tools/tool-card.stories.tsx +18 -0
  379. package/web/.next/standalone/src/presentation/web/components/features/tools/tool-card.tsx +75 -67
  380. package/web/.next/standalone/src/presentation/web/components/features/tools/tool-detail-drawer.stories.tsx +132 -0
  381. package/web/.next/standalone/src/presentation/web/components/features/tools/tool-detail-drawer.tsx +313 -0
  382. package/web/.next/standalone/src/presentation/web/components/features/tools/tools-page-client.stories.tsx +15 -0
  383. package/web/.next/standalone/src/presentation/web/components/features/tools/tools-page-client.tsx +3 -3
  384. package/web/.next/standalone/src/presentation/web/components/ui/alert-dialog.tsx +7 -0
  385. package/web/.next/standalone/src/presentation/web/components/ui/dialog.tsx +7 -1
  386. package/web/.next/standalone/src/presentation/web/hooks/use-tool-install-stream.ts +58 -0
  387. package/web/.next/standalone/src/presentation/web/lib/layout-with-dagre.ts +93 -4
  388. package/web/.next/standalone/src/presentation/web/server.js +1 -1
  389. package/web/.next/static/chunks/0c54314c8c9c9739.js +7 -0
  390. package/web/.next/static/chunks/18b181b038b76ba9.js +1 -0
  391. package/web/.next/static/chunks/{fc07834e422b1caa.js → 24d21945d0ad2f91.js} +1 -1
  392. package/web/.next/static/chunks/3b46dd43cf4b2b0c.js +1 -0
  393. package/web/.next/static/chunks/{d4ecce2ac7795bd9.js → 4332c12bfb4386b1.js} +1 -1
  394. package/web/.next/static/chunks/4a3b3cfcc85e7254.js +1 -0
  395. package/web/.next/static/chunks/5294480588feb18d.js +1 -0
  396. package/web/.next/static/chunks/5d0a6417c4e4e545.js +1 -0
  397. package/web/.next/static/chunks/67f2a7a5e8dc358a.css +2 -0
  398. package/web/.next/static/chunks/762fc4cf58e29489.js +1 -0
  399. package/web/.next/static/chunks/84a181ff3270fd9f.js +1 -0
  400. package/web/.next/static/chunks/9215b6fb973482c5.js +1 -0
  401. package/web/.next/static/chunks/9455c97db983fb26.js +1 -0
  402. package/web/.next/static/chunks/c92e1360ada8ca94.js +5 -0
  403. package/web/.next/static/chunks/{8b36e07129a1471f.js → d1257b6f5da57064.js} +1 -1
  404. package/web/.next/static/chunks/e4f4eaa9769bcadb.js +1 -0
  405. package/web/.next/static/chunks/edbd674102e897b4.js +1 -0
  406. package/web/.next/static/chunks/{turbopack-3a8fe0e18e69b0ab.js → turbopack-05820f781f3ffc22.js} +1 -1
  407. package/web/.next/trace +1 -1
  408. package/web/.next/trace-build +1 -1
  409. package/web/.next/types/link.d.ts +1 -0
  410. package/web/.next/types/routes.d.ts +2 -1
  411. package/web/.next/types/validator.ts +9 -0
  412. package/dist/src/presentation/web/components/features/tools/install-instructions.d.ts +0 -9
  413. package/dist/src/presentation/web/components/features/tools/install-instructions.d.ts.map +0 -1
  414. package/dist/src/presentation/web/components/features/tools/install-instructions.js +0 -19
  415. package/dist/src/presentation/web/components/features/tools/install-instructions.stories.d.ts +0 -12
  416. package/dist/src/presentation/web/components/features/tools/install-instructions.stories.d.ts.map +0 -1
  417. package/dist/src/presentation/web/components/features/tools/install-instructions.stories.js +0 -77
  418. package/web/.next/server/chunks/[root-of-the-server]__b1f03347._.js +0 -3
  419. package/web/.next/server/chunks/[root-of-the-server]__b1f03347._.js.map +0 -1
  420. package/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js +0 -4
  421. package/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js.map +0 -1
  422. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js +0 -3
  423. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js.map +0 -1
  424. package/web/.next/server/chunks/ssr/[root-of-the-server]__6db85a66._.js +0 -4
  425. package/web/.next/server/chunks/ssr/[root-of-the-server]__6db85a66._.js.map +0 -1
  426. package/web/.next/server/chunks/ssr/[root-of-the-server]__8c1a3d66._.js +0 -3
  427. package/web/.next/server/chunks/ssr/[root-of-the-server]__8c1a3d66._.js.map +0 -1
  428. package/web/.next/server/chunks/ssr/[root-of-the-server]__8fcb9132._.js.map +0 -1
  429. package/web/.next/server/chunks/ssr/[root-of-the-server]__9d14479b._.js +0 -3
  430. package/web/.next/server/chunks/ssr/[root-of-the-server]__9d14479b._.js.map +0 -1
  431. package/web/.next/server/chunks/ssr/[root-of-the-server]__d4e51258._.js +0 -3
  432. package/web/.next/server/chunks/ssr/[root-of-the-server]__d4e51258._.js.map +0 -1
  433. package/web/.next/server/chunks/ssr/[root-of-the-server]__fe2a7deb._.js +0 -3
  434. package/web/.next/server/chunks/ssr/[root-of-the-server]__fe2a7deb._.js.map +0 -1
  435. package/web/.next/server/chunks/ssr/_00e6c698._.js +0 -3
  436. package/web/.next/server/chunks/ssr/_00e6c698._.js.map +0 -1
  437. package/web/.next/server/chunks/ssr/_13566ff3._.js +0 -3
  438. package/web/.next/server/chunks/ssr/_13566ff3._.js.map +0 -1
  439. package/web/.next/server/chunks/ssr/_26129e04._.js +0 -3
  440. package/web/.next/server/chunks/ssr/_26129e04._.js.map +0 -1
  441. package/web/.next/server/chunks/ssr/_34a58db8._.js +0 -3
  442. package/web/.next/server/chunks/ssr/_34a58db8._.js.map +0 -1
  443. package/web/.next/server/chunks/ssr/_37259405._.js +0 -3
  444. package/web/.next/server/chunks/ssr/_37259405._.js.map +0 -1
  445. package/web/.next/server/chunks/ssr/_85d0351b._.js +0 -3
  446. package/web/.next/server/chunks/ssr/_85d0351b._.js.map +0 -1
  447. package/web/.next/server/chunks/ssr/_cb5b3951._.js +0 -3
  448. package/web/.next/server/chunks/ssr/_cb5b3951._.js.map +0 -1
  449. package/web/.next/server/chunks/ssr/_fc3a6895._.js +0 -3
  450. package/web/.next/server/chunks/ssr/_fc3a6895._.js.map +0 -1
  451. package/web/.next/server/chunks/ssr/node_modules__pnpm_3288606c._.js +0 -7
  452. package/web/.next/server/chunks/ssr/node_modules__pnpm_3288606c._.js.map +0 -1
  453. package/web/.next/standalone/src/presentation/web/.next/server/chunks/[root-of-the-server]__b1f03347._.js +0 -3
  454. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js +0 -4
  455. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js +0 -3
  456. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6db85a66._.js +0 -4
  457. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__8c1a3d66._.js +0 -3
  458. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__9d14479b._.js +0 -3
  459. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__d4e51258._.js +0 -3
  460. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__fe2a7deb._.js +0 -3
  461. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_00e6c698._.js +0 -3
  462. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_13566ff3._.js +0 -3
  463. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_26129e04._.js +0 -3
  464. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_34a58db8._.js +0 -3
  465. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_37259405._.js +0 -3
  466. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_85d0351b._.js +0 -3
  467. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_cb5b3951._.js +0 -3
  468. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_fc3a6895._.js +0 -3
  469. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/node_modules__pnpm_3288606c._.js +0 -7
  470. package/web/.next/standalone/src/presentation/web/components/features/tools/install-instructions.stories.tsx +0 -89
  471. package/web/.next/standalone/src/presentation/web/components/features/tools/install-instructions.tsx +0 -109
  472. package/web/.next/static/chunks/06b6b02bab76aee7.js +0 -1
  473. package/web/.next/static/chunks/06dfd668334ffb4e.js +0 -7
  474. package/web/.next/static/chunks/07fcc6d17357e905.js +0 -1
  475. package/web/.next/static/chunks/224ed5f5dbd33154.css +0 -2
  476. package/web/.next/static/chunks/32957ff277daec59.js +0 -1
  477. package/web/.next/static/chunks/3e1227e02ef8bcc6.js +0 -5
  478. package/web/.next/static/chunks/412a3ac70c529c5b.js +0 -1
  479. package/web/.next/static/chunks/550bf3cb8220cbf0.js +0 -1
  480. package/web/.next/static/chunks/5f5c607ffae8b918.js +0 -1
  481. package/web/.next/static/chunks/64d73952a0291431.js +0 -1
  482. package/web/.next/static/chunks/938c21b0cefb2b1d.js +0 -1
  483. package/web/.next/static/chunks/c7e793951b20a67f.js +0 -1
  484. package/web/.next/static/chunks/e44849eb58a3335f.js +0 -1
  485. package/web/.next/static/chunks/ecb2130572a7fbe7.js +0 -1
  486. /package/web/.next/static/{7K6dTYQIJ7__PLUYLLfZV → hqNYYoVPGek0YVNAAv6P-}/_buildManifest.js +0 -0
  487. /package/web/.next/static/{7K6dTYQIJ7__PLUYLLfZV → hqNYYoVPGek0YVNAAv6P-}/_clientMiddlewareManifest.json +0 -0
  488. /package/web/.next/static/{7K6dTYQIJ7__PLUYLLfZV → hqNYYoVPGek0YVNAAv6P-}/_ssgManifest.js +0 -0
@@ -2,12 +2,14 @@
2
2
  * Delete Feature Use Case
3
3
  *
4
4
  * Orchestrates feature deletion including:
5
+ * - Cascade deleting all sub-features (children, grandchildren, etc.)
5
6
  * - Cancelling any running/pending agent runs
6
7
  * - Removing the git worktree
7
8
  * - Deleting the feature record
8
9
  *
9
10
  * Business Rules:
10
11
  * - Throws if the feature does not exist
12
+ * - Cascade deletes all sub-features before deleting the parent
11
13
  * - Cancels running/pending agent runs before deletion
12
14
  * - Gracefully handles worktree removal failures
13
15
  */
@@ -23,5 +25,7 @@ export declare class DeleteFeatureUseCase {
23
25
  private readonly runRepo;
24
26
  constructor(featureRepo: IFeatureRepository, worktreeService: IWorktreeService, processService: IFeatureAgentProcessService, runRepo: IAgentRunRepository);
25
27
  execute(featureId: string): Promise<Feature>;
28
+ private cascadeDeleteChildren;
29
+ private deleteSingleFeature;
26
30
  }
27
31
  //# sourceMappingURL=delete-feature.use-case.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"delete-feature.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/features/delete-feature.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAEnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAC1G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAClG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8DAA8D,CAAC;AAChH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6DAA6D,CAAC;AAEvG,qBACa,oBAAoB;IAEC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC9B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAE5D,OAAO,CAAC,QAAQ,CAAC,cAAc;IACA,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAJR,WAAW,EAAE,kBAAkB,EACjC,eAAe,EAAE,gBAAgB,EAE7D,cAAc,EAAE,2BAA2B,EACZ,OAAO,EAAE,mBAAmB;IAGxE,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAqDnD"}
1
+ {"version":3,"file":"delete-feature.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/features/delete-feature.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAEnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAC1G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAClG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8DAA8D,CAAC;AAChH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6DAA6D,CAAC;AAEvG,qBACa,oBAAoB;IAEC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC9B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAE5D,OAAO,CAAC,QAAQ,CAAC,cAAc;IACA,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAJR,WAAW,EAAE,kBAAkB,EACjC,eAAe,EAAE,gBAAgB,EAE7D,cAAc,EAAE,2BAA2B,EACZ,OAAO,EAAE,mBAAmB;IAGxE,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YAkBpC,qBAAqB;YASrB,mBAAmB;CA8BlC"}
@@ -2,12 +2,14 @@
2
2
  * Delete Feature Use Case
3
3
  *
4
4
  * Orchestrates feature deletion including:
5
+ * - Cascade deleting all sub-features (children, grandchildren, etc.)
5
6
  * - Cancelling any running/pending agent runs
6
7
  * - Removing the git worktree
7
8
  * - Deleting the feature record
8
9
  *
9
10
  * Business Rules:
10
11
  * - Throws if the feature does not exist
12
+ * - Cascade deletes all sub-features before deleting the parent
11
13
  * - Cancels running/pending agent runs before deletion
12
14
  * - Gracefully handles worktree removal failures
13
15
  */
@@ -24,7 +26,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
24
26
  return function (target, key) { decorator(target, key, paramIndex); }
25
27
  };
26
28
  import { injectable, inject } from 'tsyringe';
27
- import { AgentRunStatus, SdlcLifecycle } from '../../../domain/generated/output.js';
29
+ import { AgentRunStatus } from '../../../domain/generated/output.js';
28
30
  let DeleteFeatureUseCase = class DeleteFeatureUseCase {
29
31
  featureRepo;
30
32
  worktreeService;
@@ -43,18 +45,25 @@ let DeleteFeatureUseCase = class DeleteFeatureUseCase {
43
45
  if (!feature) {
44
46
  throw new Error(`Feature not found: "${featureId}"`);
45
47
  }
46
- // 2. Guard: reject deletion if blocked children exist (FR-29)
47
- const blockedChildren = (await this.featureRepo.findByParentId(feature.id)).filter((child) => child.lifecycle === SdlcLifecycle.Blocked);
48
- if (blockedChildren.length > 0) {
49
- const list = blockedChildren.map((c) => `${c.id} (${c.name})`).join(', ');
50
- throw new Error(`Cannot delete feature "${feature.name}" because it has blocked children: ${list}. ` +
51
- `Remove or re-parent the blocked children before deleting this feature.`);
48
+ // 2. Cascade delete all sub-features (depth-first)
49
+ await this.cascadeDeleteChildren(feature.id);
50
+ // 3. Delete the feature itself
51
+ await this.deleteSingleFeature(feature);
52
+ return feature;
53
+ }
54
+ async cascadeDeleteChildren(parentId) {
55
+ const children = await this.featureRepo.findByParentId(parentId);
56
+ for (const child of children) {
57
+ // Recurse into grandchildren first (depth-first)
58
+ await this.cascadeDeleteChildren(child.id);
59
+ await this.deleteSingleFeature(child);
52
60
  }
53
- // 3. Cancel running/pending agent run if present
61
+ }
62
+ async deleteSingleFeature(feature) {
63
+ // Cancel running/pending agent run if present
54
64
  if (feature.agentRunId) {
55
65
  const run = await this.runRepo.findById(feature.agentRunId);
56
66
  if (run && (run.status === AgentRunStatus.running || run.status === AgentRunStatus.pending)) {
57
- // Kill the OS process if still alive
58
67
  if (run.pid && this.processService.isAlive(run.pid)) {
59
68
  try {
60
69
  process.kill(run.pid);
@@ -66,7 +75,7 @@ let DeleteFeatureUseCase = class DeleteFeatureUseCase {
66
75
  await this.runRepo.updateStatus(run.id, AgentRunStatus.cancelled);
67
76
  }
68
77
  }
69
- // 4. Remove worktree (ignore errors if already removed)
78
+ // Remove worktree (ignore errors if already removed)
70
79
  const worktreePath = this.worktreeService.getWorktreePath(feature.repositoryPath, feature.branch);
71
80
  try {
72
81
  await this.worktreeService.remove(worktreePath);
@@ -74,9 +83,8 @@ let DeleteFeatureUseCase = class DeleteFeatureUseCase {
74
83
  catch {
75
84
  // Worktree might already be removed - that's fine
76
85
  }
77
- // 5. Delete feature record
86
+ // Delete feature record
78
87
  await this.featureRepo.delete(feature.id);
79
- return feature;
80
88
  }
81
89
  };
82
90
  DeleteFeatureUseCase = __decorate([
@@ -1,13 +1,18 @@
1
1
  /**
2
2
  * Delete Repository Use Case
3
3
  *
4
- * Soft-deletes a Repository by setting its deletedAt timestamp.
5
- * The repository data remains in the database for potential recovery.
4
+ * Deletes a Repository and all its child features.
5
+ * Each feature is properly cleaned up (agent runs cancelled, worktrees removed)
6
+ * via DeleteFeatureUseCase before the repository is soft-deleted.
6
7
  */
7
8
  import type { IRepositoryRepository } from '../../ports/output/repositories/repository-repository.interface.js';
9
+ import type { IFeatureRepository } from '../../ports/output/repositories/feature-repository.interface.js';
10
+ import { DeleteFeatureUseCase } from '../features/delete-feature.use-case.js';
8
11
  export declare class DeleteRepositoryUseCase {
9
12
  private readonly repositoryRepo;
10
- constructor(repositoryRepo: IRepositoryRepository);
13
+ private readonly featureRepo;
14
+ private readonly deleteFeature;
15
+ constructor(repositoryRepo: IRepositoryRepository, featureRepo: IFeatureRepository, deleteFeature: DeleteFeatureUseCase);
11
16
  execute(id: string): Promise<void>;
12
17
  }
13
18
  //# sourceMappingURL=delete-repository.use-case.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"delete-repository.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/repositories/delete-repository.use-case.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oEAAoE,CAAC;AAEhH,qBACa,uBAAuB;IAGhC,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAAd,cAAc,EAAE,qBAAqB;IAGlD,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAQzC"}
1
+ {"version":3,"file":"delete-repository.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/repositories/delete-repository.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oEAAoE,CAAC;AAChH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAC1G,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAE9E,qBACa,uBAAuB;IAGhC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAJb,cAAc,EAAE,qBAAqB,EAErC,WAAW,EAAE,kBAAkB,EAE/B,aAAa,EAAE,oBAAoB;IAGhD,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAczC"}
@@ -1,8 +1,9 @@
1
1
  /**
2
2
  * Delete Repository Use Case
3
3
  *
4
- * Soft-deletes a Repository by setting its deletedAt timestamp.
5
- * The repository data remains in the database for potential recovery.
4
+ * Deletes a Repository and all its child features.
5
+ * Each feature is properly cleaned up (agent runs cancelled, worktrees removed)
6
+ * via DeleteFeatureUseCase before the repository is soft-deleted.
6
7
  */
7
8
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
8
9
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -17,22 +18,34 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
17
18
  return function (target, key) { decorator(target, key, paramIndex); }
18
19
  };
19
20
  import { injectable, inject } from 'tsyringe';
21
+ import { DeleteFeatureUseCase } from '../features/delete-feature.use-case.js';
20
22
  let DeleteRepositoryUseCase = class DeleteRepositoryUseCase {
21
23
  repositoryRepo;
22
- constructor(repositoryRepo) {
24
+ featureRepo;
25
+ deleteFeature;
26
+ constructor(repositoryRepo, featureRepo, deleteFeature) {
23
27
  this.repositoryRepo = repositoryRepo;
28
+ this.featureRepo = featureRepo;
29
+ this.deleteFeature = deleteFeature;
24
30
  }
25
31
  async execute(id) {
26
32
  const repository = await this.repositoryRepo.findById(id);
27
33
  if (!repository) {
28
34
  throw new Error(`Repository not found: "${id}"`);
29
35
  }
36
+ // Delete all child features (cancels agent runs, removes worktrees)
37
+ const features = await this.featureRepo.list({ repositoryPath: repository.path });
38
+ for (const feature of features) {
39
+ await this.deleteFeature.execute(feature.id);
40
+ }
30
41
  await this.repositoryRepo.softDelete(id);
31
42
  }
32
43
  };
33
44
  DeleteRepositoryUseCase = __decorate([
34
45
  injectable(),
35
46
  __param(0, inject('IRepositoryRepository')),
36
- __metadata("design:paramtypes", [Object])
47
+ __param(1, inject('IFeatureRepository')),
48
+ __param(2, inject(DeleteFeatureUseCase)),
49
+ __metadata("design:paramtypes", [Object, Object, DeleteFeatureUseCase])
37
50
  ], DeleteRepositoryUseCase);
38
51
  export { DeleteRepositoryUseCase };
@@ -21,6 +21,9 @@ export interface ToolItem {
21
21
  documentationUrl: string;
22
22
  installCommand: string | undefined;
23
23
  status: ToolInstallationStatus;
24
+ author: string | undefined;
25
+ website: string | undefined;
26
+ platforms: ('linux' | 'darwin' | 'win32')[] | undefined;
24
27
  }
25
28
  export type ListToolsResult = ToolItem[];
26
29
  export declare class ListToolsUseCase {
@@ -1 +1 @@
1
- {"version":3,"file":"list-tools.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/tools/list-tools.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAGlF,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,CAAC,KAAK,GAAG,WAAW,GAAG,KAAK,GAAG,UAAU,CAAC,EAAE,CAAC;IACnD,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,MAAM,EAAE,sBAAsB,CAAC;CAChC;AAED,MAAM,MAAM,eAAe,GAAG,QAAQ,EAAE,CAAC;AAWzC,qBACa,gBAAgB;IAGzB,OAAO,CAAC,QAAQ,CAAC,oBAAoB;gBAApB,oBAAoB,EAAE,qBAAqB;IAGxD,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC;CAgC1C"}
1
+ {"version":3,"file":"list-tools.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/tools/list-tools.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAGlF,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,CAAC,KAAK,GAAG,WAAW,GAAG,KAAK,GAAG,UAAU,CAAC,EAAE,CAAC;IACnD,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,SAAS,EAAE,CAAC,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;CACzD;AAED,MAAM,MAAM,eAAe,GAAG,QAAQ,EAAE,CAAC;AAWzC,qBACa,gBAAgB;IAGzB,OAAO,CAAC,QAAQ,CAAC,oBAAoB;gBAApB,oBAAoB,EAAE,qBAAqB;IAGxD,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC;CAmC1C"}
@@ -57,6 +57,9 @@ let ListToolsUseCase = class ListToolsUseCase {
57
57
  documentationUrl: metadata.documentationUrl,
58
58
  installCommand: metadata.commands[currentPlatform],
59
59
  status,
60
+ author: metadata.author,
61
+ website: metadata.website,
62
+ platforms: metadata.platforms,
60
63
  };
61
64
  }));
62
65
  return results;
@@ -87,7 +87,7 @@ let SQLiteFeatureRepository = class SQLiteFeatureRepository {
87
87
  params.push(filters.lifecycle);
88
88
  }
89
89
  const where = conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '';
90
- const stmt = this.db.prepare(`SELECT * FROM features${where}`);
90
+ const stmt = this.db.prepare(`SELECT * FROM features${where} ORDER BY created_at ASC`);
91
91
  const rows = stmt.all(...params);
92
92
  return rows.map(fromDatabase);
93
93
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tool-installer.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/tool-installer/tool-installer.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sEAAsE,CAAC;AAClH,OAAO,KAAK,EACV,sBAAsB,EACtB,kBAAkB,EAEnB,MAAM,qCAAqC,CAAC;AAsD7C,qBACa,wBAAyB,YAAW,qBAAqB;IACpE;;;OAGG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAoC1E;;;OAGG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAqB9D;;;OAGG;IACG,cAAc,CAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAChC,OAAO,CAAC,sBAAsB,CAAC;IAuElC;;OAEG;IACH,OAAO,CAAC,6BAA6B;CA4BtC"}
1
+ {"version":3,"file":"tool-installer.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/tool-installer/tool-installer.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sEAAsE,CAAC;AAClH,OAAO,KAAK,EACV,sBAAsB,EACtB,kBAAkB,EAEnB,MAAM,qCAAqC,CAAC;AAsD7C,qBACa,wBAAyB,YAAW,qBAAqB;IACpE;;;OAGG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAoC1E;;;OAGG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAqB9D;;;OAGG;IACG,cAAc,CAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAChC,OAAO,CAAC,sBAAsB,CAAC;IAgFlC;;OAEG;IACH,OAAO,CAAC,6BAA6B;CA4BtC"}
@@ -132,8 +132,16 @@ let ToolInstallerServiceImpl = class ToolInstallerServiceImpl {
132
132
  let output = '';
133
133
  const child = spawn('sh', ['-c', installCommand.command], {
134
134
  shell: false,
135
- stdio: ['ignore', 'pipe', 'pipe'],
135
+ stdio: ['pipe', 'pipe', 'pipe'],
136
+ env: {
137
+ ...process.env,
138
+ DEBIAN_FRONTEND: 'noninteractive',
139
+ GIT_TERMINAL_PROMPT: '0',
140
+ GPG_TTY: '',
141
+ },
136
142
  });
143
+ // Close stdin immediately to prevent interactive prompts
144
+ child.stdin?.end();
137
145
  // Stream output from stdout and stderr
138
146
  const pipeOutput = (stream) => {
139
147
  if (!stream)
@@ -16,6 +16,12 @@ export interface ToolMetadata {
16
16
  description: string;
17
17
  /** Tool tags for grouping in listings. A tool can belong to multiple categories. */
18
18
  tags: ('ide' | 'cli-agent' | 'vcs' | 'terminal')[];
19
+ /** Company or developer name */
20
+ author?: string;
21
+ /** Main website/homepage URL (separate from documentation) */
22
+ website?: string;
23
+ /** Supported platforms (os.platform() values) */
24
+ platforms?: ('linux' | 'darwin' | 'win32')[];
19
25
  /** URL to the tool's icon/logo image */
20
26
  iconUrl?: string;
21
27
  /** Binary name to check with 'which' command (string or per-platform map) */
@@ -1 +1 @@
1
- {"version":3,"file":"tool-metadata.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/tool-installer/tool-metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,MAAM,WAAW,YAAY;IAC3B,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IAEb,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAEhB,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IAEpB,oFAAoF;IACpF,IAAI,EAAE,CAAC,KAAK,GAAG,WAAW,GAAG,KAAK,GAAG,UAAU,CAAC,EAAE,CAAC;IAEnD,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,6EAA6E;IAC7E,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAExC,6CAA6C;IAC7C,cAAc,EAAE,MAAM,CAAC;IAEvB,wFAAwF;IACxF,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAEhB,iCAAiC;IACjC,gBAAgB,EAAE,MAAM,CAAC;IAEzB,8DAA8D;IAC9D,aAAa,EAAE,MAAM,CAAC;IAEtB,uEAAuE;IACvE,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;yGAEqG;IACrG,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEhD;;iGAE6F;IAC7F,YAAY,CAAC,EAAE;QACb,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,KAAK,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;QACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;IAEF;;;;wEAIoE;IACpE,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnD;AA8CD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAsB,CAAC;AAE9E;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,CAExD"}
1
+ {"version":3,"file":"tool-metadata.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/tool-installer/tool-metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,MAAM,WAAW,YAAY;IAC3B,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IAEb,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAEhB,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IAEpB,oFAAoF;IACpF,IAAI,EAAE,CAAC,KAAK,GAAG,WAAW,GAAG,KAAK,GAAG,UAAU,CAAC,EAAE,CAAC;IAEnD,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,iDAAiD;IACjD,SAAS,CAAC,EAAE,CAAC,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,EAAE,CAAC;IAE7C,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,6EAA6E;IAC7E,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAExC,6CAA6C;IAC7C,cAAc,EAAE,MAAM,CAAC;IAEvB,wFAAwF;IACxF,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAEhB,iCAAiC;IACjC,gBAAgB,EAAE,MAAM,CAAC;IAEzB,8DAA8D;IAC9D,aAAa,EAAE,MAAM,CAAC;IAEtB,uEAAuE;IACvE,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;yGAEqG;IACrG,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEhD;;iGAE6F;IAC7F,YAAY,CAAC,EAAE;QACb,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,KAAK,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;QACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;IAEF;;;;wEAIoE;IACpE,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnD;AAmDD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAsB,CAAC;AAE9E;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,CAExD"}
@@ -23,6 +23,11 @@ const REQUIRED_FIELDS = [
23
23
  'verifyCommand',
24
24
  ];
25
25
  function loadToolMetadata() {
26
+ // NOTE: This module uses import.meta.url to resolve the tools/ directory.
27
+ // It works correctly when loaded in the Node.js CLI bootstrap context but
28
+ // breaks when bundled by Turbopack (import.meta.url points to the chunk
29
+ // location where tools/ doesn't exist). API routes should access tool
30
+ // metadata via the DI container, not by importing this module directly.
26
31
  const toolsDir = join(fileURLToPath(import.meta.url), '..', 'tools');
27
32
  const metadata = {};
28
33
  let files;
@@ -3,16 +3,19 @@
3
3
  "summary": "GPU-accelerated terminal emulator",
4
4
  "description": "Alacritty is a modern, GPU-accelerated terminal emulator focused on simplicity and performance. Cross-platform (macOS and Linux). On older Linux distributions, you may need to add a PPA before installing via apt.",
5
5
  "tags": ["terminal"],
6
+ "author": "Alacritty Contributors",
7
+ "website": "https://alacritty.org",
8
+ "platforms": ["linux", "darwin"],
6
9
  "iconUrl": "https://cdn.simpleicons.org/alacritty",
7
10
  "binary": "alacritty",
8
11
  "packageManager": "brew",
9
12
  "commands": {
10
13
  "darwin": "brew install --cask alacritty",
11
- "linux": "apt install -y alacritty"
14
+ "linux": "sudo apt-get update && sudo apt-get install -y alacritty"
12
15
  },
13
16
  "timeout": 300000,
14
17
  "documentationUrl": "https://alacritty.org/",
15
18
  "verifyCommand": "alacritty --version",
16
- "autoInstall": false,
19
+ "autoInstall": true,
17
20
  "openDirectory": "alacritty --working-directory {dir}"
18
21
  }
@@ -3,6 +3,9 @@
3
3
  "summary": "AI-powered agentic development platform",
4
4
  "description": "Google Antigravity is an AI-powered platform that enables agentic development workflows, helping developers build intelligent applications with autonomous agents.",
5
5
  "tags": ["ide"],
6
+ "author": "Google",
7
+ "website": "https://antigravity.google",
8
+ "platforms": ["linux", "darwin"],
6
9
  "iconUrl": "https://cdn.simpleicons.org/google",
7
10
  "binary": {
8
11
  "linux": "antigravity",
@@ -2,7 +2,10 @@
2
2
  "name": "Claude Code",
3
3
  "summary": "AI-powered code assistant from Anthropic",
4
4
  "description": "Claude Code is an AI-powered code assistant from Anthropic that helps you write, understand, and debug code with advanced AI capabilities.",
5
- "tags": ["ide", "cli-agent"],
5
+ "tags": ["cli-agent"],
6
+ "author": "Anthropic",
7
+ "website": "https://claude.ai/code",
8
+ "platforms": ["linux", "darwin"],
6
9
  "iconUrl": "https://cdn.simpleicons.org/claude",
7
10
  "binary": "claude",
8
11
  "packageManager": "curl",
@@ -3,6 +3,9 @@
3
3
  "summary": "AI-powered terminal coding agent",
4
4
  "description": "Cursor CLI is a terminal-based AI coding agent that brings conversational AI assistance directly to your command line for any IDE or terminal.",
5
5
  "tags": ["cli-agent"],
6
+ "author": "Anysphere",
7
+ "website": "https://cursor.com",
8
+ "platforms": ["linux", "darwin"],
6
9
  "iconUrl": "https://cdn.simpleicons.org/cursor",
7
10
  "binary": "cursor-agent",
8
11
  "packageManager": "curl",
@@ -3,6 +3,9 @@
3
3
  "summary": "AI-powered code editor for efficient development",
4
4
  "description": "Cursor is an AI-powered code editor built on VS Code, designed to streamline development workflows with advanced AI-assisted coding capabilities.",
5
5
  "tags": ["ide"],
6
+ "author": "Anysphere",
7
+ "website": "https://cursor.com",
8
+ "platforms": ["linux", "darwin", "win32"],
6
9
  "iconUrl": "https://cdn.simpleicons.org/cursor",
7
10
  "binary": "cursor",
8
11
  "packageManager": "manual",
@@ -3,6 +3,9 @@
3
3
  "summary": "AI-powered coding agent from Google",
4
4
  "description": "Gemini CLI is an open-source AI coding agent from Google that brings the power of Gemini directly to your terminal for code generation, debugging, and development workflows.",
5
5
  "tags": ["cli-agent"],
6
+ "author": "Google",
7
+ "website": "https://github.com/google-gemini/gemini-cli",
8
+ "platforms": ["linux", "darwin"],
6
9
  "iconUrl": "https://cdn.simpleicons.org/googlegemini",
7
10
  "binary": "gemini",
8
11
  "packageManager": "npm",
@@ -3,6 +3,9 @@
3
3
  "summary": "GitHub's official command-line tool",
4
4
  "description": "GitHub CLI brings GitHub to your terminal. Manage pull requests, issues, repositories, workflows, and more without leaving the command line.",
5
5
  "tags": ["vcs"],
6
+ "author": "GitHub",
7
+ "website": "https://cli.github.com",
8
+ "platforms": ["linux", "darwin", "win32"],
6
9
  "iconUrl": "https://cdn.simpleicons.org/github",
7
10
  "binary": "gh",
8
11
  "packageManager": "apt",
@@ -3,6 +3,9 @@
3
3
  "summary": "Distributed version control system",
4
4
  "description": "Git is a free and open-source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.",
5
5
  "tags": ["vcs"],
6
+ "author": "Git Community",
7
+ "website": "https://git-scm.com",
8
+ "platforms": ["linux", "darwin", "win32"],
6
9
  "iconUrl": "https://cdn.simpleicons.org/git",
7
10
  "binary": "git",
8
11
  "packageManager": "apt",
@@ -3,6 +3,9 @@
3
3
  "summary": "macOS terminal replacement",
4
4
  "description": "iTerm2 is a feature-rich replacement for the default macOS Terminal.app with split panes, search, autocomplete, and extensive customization. macOS only. Verified by checking for the iTerm.app bundle in /Applications.",
5
5
  "tags": ["terminal"],
6
+ "author": "George Nachman",
7
+ "website": "https://iterm2.com",
8
+ "platforms": ["darwin"],
6
9
  "iconUrl": "https://cdn.simpleicons.org/iterm2",
7
10
  "binary": "iterm2",
8
11
  "packageManager": "brew",
@@ -3,16 +3,19 @@
3
3
  "summary": "Fast, GPU-based terminal emulator",
4
4
  "description": "Kitty is a fast, feature-rich, GPU-based terminal emulator with advanced graphics support, extensibility via kittens, and modern rendering. Cross-platform (macOS and Linux).",
5
5
  "tags": ["terminal"],
6
+ "author": "Kovid Goyal",
7
+ "website": "https://sw.kovidgoyal.net/kitty",
8
+ "platforms": ["linux", "darwin"],
6
9
  "iconUrl": "https://raw.githubusercontent.com/kovidgoyal/kitty/master/logo/kitty.svg",
7
10
  "binary": "kitty",
8
11
  "packageManager": "brew",
9
12
  "commands": {
10
13
  "darwin": "brew install --cask kitty",
11
- "linux": "apt install -y kitty"
14
+ "linux": "sudo apt-get update && sudo apt-get install -y kitty"
12
15
  },
13
16
  "timeout": 300000,
14
17
  "documentationUrl": "https://sw.kovidgoyal.net/kitty/",
15
18
  "verifyCommand": "kitty --version",
16
- "autoInstall": false,
19
+ "autoInstall": true,
17
20
  "openDirectory": "kitty --working-directory {dir}"
18
21
  }
@@ -3,12 +3,15 @@
3
3
  "summary": "Terminal multiplexer for session management",
4
4
  "description": "tmux is a terminal multiplexer that lets you create, manage, and switch between multiple terminal sessions. Ideal for remote development, persistent sessions, and multi-pane workflows. Cross-platform (macOS and Linux).",
5
5
  "tags": ["terminal"],
6
+ "author": "tmux Contributors",
7
+ "website": "https://tmux.github.io",
8
+ "platforms": ["linux", "darwin"],
6
9
  "iconUrl": "https://cdn.simpleicons.org/tmux",
7
10
  "binary": "tmux",
8
11
  "packageManager": "brew",
9
12
  "commands": {
10
13
  "darwin": "brew install tmux",
11
- "linux": "apt install -y tmux"
14
+ "linux": "sudo apt-get update && sudo apt-get install -y tmux"
12
15
  },
13
16
  "timeout": 300000,
14
17
  "documentationUrl": "https://github.com/tmux/tmux/wiki",
@@ -3,11 +3,14 @@
3
3
  "summary": "Lightweight but powerful source code editor",
4
4
  "description": "Microsoft Visual Studio Code is a free, open-source code editor with built-in support for debugging, version control, and extensions for enhanced development workflows.",
5
5
  "tags": ["ide"],
6
+ "author": "Microsoft",
7
+ "website": "https://code.visualstudio.com",
8
+ "platforms": ["linux", "darwin", "win32"],
6
9
  "iconUrl": "https://cdn.jsdelivr.net/gh/devicons/devicon/icons/vscode/vscode-original.svg",
7
10
  "binary": "code",
8
11
  "packageManager": "apt",
9
12
  "commands": {
10
- "linux": "curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /usr/share/keyrings/packages.microsoft.gpg && echo \"deb [arch=amd64 signed-by=/usr/share/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main\" | sudo tee /etc/apt/sources.list.d/vscode.list > /dev/null && sudo apt-get update && sudo apt-get install -y code",
13
+ "linux": "curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --yes --dearmor -o /usr/share/keyrings/packages.microsoft.gpg && echo \"deb [arch=amd64 signed-by=/usr/share/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main\" | sudo tee /etc/apt/sources.list.d/vscode.list > /dev/null && sudo apt-get update && sudo apt-get install -y code",
11
14
  "darwin": "brew install visual-studio-code"
12
15
  },
13
16
  "timeout": 300000,
@@ -3,6 +3,9 @@
3
3
  "summary": "Modern terminal with AI features",
4
4
  "description": "Warp is a modern terminal with AI-powered features, intelligent command suggestions, and a collaborative workflow. macOS only — Linux users can install manually via AppImage from https://www.warp.dev/.",
5
5
  "tags": ["terminal"],
6
+ "author": "Warp",
7
+ "website": "https://www.warp.dev",
8
+ "platforms": ["darwin"],
6
9
  "iconUrl": "https://cdn.simpleicons.org/warp",
7
10
  "binary": "warp",
8
11
  "packageManager": "brew",
@@ -3,11 +3,14 @@
3
3
  "summary": "AI-powered code editor by Codeium",
4
4
  "description": "Windsurf is an AI-powered code editor by Codeium that provides intelligent code assistance and automation features for modern development.",
5
5
  "tags": ["ide"],
6
+ "author": "Codeium",
7
+ "website": "https://codeium.com/windsurf",
8
+ "platforms": ["linux", "darwin"],
6
9
  "iconUrl": "https://cdn.simpleicons.org/windsurf",
7
10
  "binary": "windsurf",
8
11
  "packageManager": "apt",
9
12
  "commands": {
10
- "linux": "curl -fsSL \"https://windsurf-stable.codeiumdata.com/wVxQEIWkwPUEAGf3/windsurf.gpg\" | sudo gpg --dearmor -o /usr/share/keyrings/windsurf-stable-archive-keyring.gpg && echo \"deb [signed-by=/usr/share/keyrings/windsurf-stable-archive-keyring.gpg arch=amd64] https://windsurf-stable.codeiumdata.com/wVxQEIWkwPUEAGf3/apt stable main\" | sudo tee /etc/apt/sources.list.d/windsurf.list > /dev/null && sudo apt-get update && sudo apt-get install -y windsurf",
13
+ "linux": "curl -fsSL \"https://windsurf-stable.codeiumdata.com/wVxQEIWkwPUEAGf3/windsurf.gpg\" | sudo gpg --yes --dearmor -o /usr/share/keyrings/windsurf-stable-archive-keyring.gpg && echo \"deb [signed-by=/usr/share/keyrings/windsurf-stable-archive-keyring.gpg arch=amd64] https://windsurf-stable.codeiumdata.com/wVxQEIWkwPUEAGf3/apt stable main\" | sudo tee /etc/apt/sources.list.d/windsurf.list > /dev/null && sudo apt-get update && sudo apt-get install -y windsurf",
11
14
  "darwin": "brew install --cask windsurf"
12
15
  },
13
16
  "timeout": 300000,
@@ -3,6 +3,9 @@
3
3
  "summary": "High-performance code editor written in Rust",
4
4
  "description": "Zed is a high-performance code editor written in Rust, designed for speed and collaboration with modern developer workflows.",
5
5
  "tags": ["ide"],
6
+ "author": "Zed Industries",
7
+ "website": "https://zed.dev",
8
+ "platforms": ["linux", "darwin"],
6
9
  "iconUrl": "https://cdn.simpleicons.org/zedindustries",
7
10
  "binary": "zed",
8
11
  "packageManager": "curl",
@@ -1 +1 @@
1
- {"version":3,"file":"get-graph-data.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/(dashboard)/get-graph-data.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,wBAAsB,YAAY,IAAI,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,CAAC,CAqBxF"}
1
+ {"version":3,"file":"get-graph-data.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/(dashboard)/get-graph-data.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,wBAAsB,YAAY,IAAI,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,CAAC,CAiBxF"}
@@ -1,5 +1,5 @@
1
1
  import { resolve } from '../../lib/server-container.js';
2
- import { layoutWithDagre } from '../../lib/layout-with-dagre.js';
2
+ import { layoutWithDagre, CANVAS_LAYOUT_DEFAULTS } from '../../lib/layout-with-dagre.js';
3
3
  import { buildGraphNodes } from '../build-graph-nodes.js';
4
4
  export async function getGraphData() {
5
5
  const listFeatures = resolve('ListFeaturesUseCase');
@@ -11,9 +11,5 @@ export async function getGraphData() {
11
11
  return { feature, run };
12
12
  }));
13
13
  const { nodes, edges } = buildGraphNodes(repositories, featuresWithRuns);
14
- return layoutWithDagre(nodes, edges, {
15
- direction: 'LR',
16
- ranksep: 200,
17
- nodesep: 15,
18
- });
14
+ return layoutWithDagre(nodes, edges, CANVAS_LAYOUT_DEFAULTS);
19
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/presentation/web/app/api/tools/[id]/install/route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAK3C,wBAAsB,IAAI,CACxB,QAAQ,EAAE,OAAO,EACjB,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,GAC9C,OAAO,CAAC,YAAY,CAAC,CAevB"}
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/presentation/web/app/api/tools/[id]/install/route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAY3C,wBAAsB,IAAI,CACxB,QAAQ,EAAE,OAAO,EACjB,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,GAC9C,OAAO,CAAC,YAAY,CAAC,CAgBvB"}
@@ -1,14 +1,19 @@
1
1
  import { NextResponse } from 'next/server';
2
2
  import { resolve } from '../../../../../lib/server-container.js';
3
- import { TOOL_METADATA } from '../../../../../../../../packages/core/src/infrastructure/services/tool-installer/tool-metadata.js';
3
+ // NOTE: Do NOT import TOOL_METADATA directly in API routes.
4
+ // The module uses import.meta.url + fs.readdirSync to load JSON files,
5
+ // which breaks when Turbopack bundles it (import.meta.url resolves to
6
+ // the bundled chunk location where the tools/ directory doesn't exist).
7
+ // Tool validation is delegated to the use case via the DI container,
8
+ // where the module loads correctly in the Node.js CLI bootstrap context.
4
9
  export async function POST(_request, { params }) {
5
10
  const { id } = await params;
6
- if (!TOOL_METADATA[id]) {
7
- return NextResponse.json({ error: 'Tool not found' }, { status: 404 });
8
- }
9
11
  try {
10
12
  const useCase = resolve('InstallToolUseCase');
11
13
  const status = await useCase.execute(id);
14
+ if (status.status === 'error') {
15
+ return NextResponse.json({ error: status.errorMessage }, { status: 500 });
16
+ }
12
17
  return NextResponse.json({ status });
13
18
  }
14
19
  catch (error) {
@@ -0,0 +1,7 @@
1
+ export declare const dynamic = "force-dynamic";
2
+ export declare function GET(_request: Request, { params }: {
3
+ params: Promise<{
4
+ id: string;
5
+ }>;
6
+ }): Promise<Response>;
7
+ //# sourceMappingURL=route.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/presentation/web/app/api/tools/[id]/install/stream/route.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAEvC,wBAAsB,GAAG,CACvB,QAAQ,EAAE,OAAO,EACjB,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,GAC9C,OAAO,CAAC,QAAQ,CAAC,CAgCnB"}
@@ -0,0 +1,32 @@
1
+ import { resolve } from '../../../../../../lib/server-container.js';
2
+ // Force dynamic — SSE streams must never be statically optimized or cached
3
+ export const dynamic = 'force-dynamic';
4
+ export async function GET(_request, { params }) {
5
+ const { id } = await params;
6
+ const useCase = resolve('InstallToolUseCase');
7
+ const encoder = new TextEncoder();
8
+ const stream = new ReadableStream({
9
+ async start(controller) {
10
+ try {
11
+ const status = await useCase.execute(id, (chunk) => {
12
+ controller.enqueue(encoder.encode(`data: ${chunk.replace(/\n/g, '\ndata: ')}\n\n`));
13
+ });
14
+ controller.enqueue(encoder.encode(`event: done\ndata: ${JSON.stringify(status)}\n\n`));
15
+ }
16
+ catch (error) {
17
+ const message = error instanceof Error ? error.message : 'Installation failed';
18
+ controller.enqueue(encoder.encode(`event: done\ndata: ${JSON.stringify({ status: 'error', toolName: id, errorMessage: message })}\n\n`));
19
+ }
20
+ finally {
21
+ controller.close();
22
+ }
23
+ },
24
+ });
25
+ return new Response(stream, {
26
+ headers: {
27
+ 'Content-Type': 'text/event-stream',
28
+ 'Cache-Control': 'no-cache',
29
+ Connection: 'keep-alive',
30
+ },
31
+ });
32
+ }