@shepai/cli 1.175.0 → 1.175.1-pr536.17338e9

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 (457) hide show
  1. package/apis/json-schema/Application.yaml +40 -0
  2. package/apis/json-schema/ApplicationStatus.yaml +8 -0
  3. package/dist/packages/core/src/application/ports/output/repositories/application-repository.interface.d.ts +17 -0
  4. package/dist/packages/core/src/application/ports/output/repositories/application-repository.interface.d.ts.map +1 -0
  5. package/dist/packages/core/src/application/ports/output/repositories/application-repository.interface.js +6 -0
  6. package/dist/packages/core/src/application/ports/output/repositories/index.d.ts +1 -0
  7. package/dist/packages/core/src/application/ports/output/repositories/index.d.ts.map +1 -1
  8. package/dist/packages/core/src/application/use-cases/applications/create-application.use-case.d.ts +29 -0
  9. package/dist/packages/core/src/application/use-cases/applications/create-application.use-case.d.ts.map +1 -0
  10. package/dist/packages/core/src/application/use-cases/applications/create-application.use-case.js +128 -0
  11. package/dist/packages/core/src/application/use-cases/applications/delete-application.use-case.d.ts +15 -0
  12. package/dist/packages/core/src/application/use-cases/applications/delete-application.use-case.d.ts.map +1 -0
  13. package/dist/packages/core/src/application/use-cases/applications/delete-application.use-case.js +45 -0
  14. package/dist/packages/core/src/application/use-cases/applications/get-application.use-case.d.ts +13 -0
  15. package/dist/packages/core/src/application/use-cases/applications/get-application.use-case.d.ts.map +1 -0
  16. package/dist/packages/core/src/application/use-cases/applications/get-application.use-case.js +33 -0
  17. package/dist/packages/core/src/application/use-cases/applications/index.d.ts +13 -0
  18. package/dist/packages/core/src/application/use-cases/applications/index.d.ts.map +1 -0
  19. package/dist/packages/core/src/application/use-cases/applications/index.js +10 -0
  20. package/dist/packages/core/src/application/use-cases/applications/list-applications.use-case.d.ts +13 -0
  21. package/dist/packages/core/src/application/use-cases/applications/list-applications.use-case.d.ts.map +1 -0
  22. package/dist/packages/core/src/application/use-cases/applications/list-applications.use-case.js +33 -0
  23. package/dist/packages/core/src/application/use-cases/applications/update-application.use-case.d.ts +14 -0
  24. package/dist/packages/core/src/application/use-cases/applications/update-application.use-case.d.ts.map +1 -0
  25. package/dist/packages/core/src/application/use-cases/applications/update-application.use-case.js +33 -0
  26. package/dist/packages/core/src/application/use-cases/repositories/create-project.use-case.d.ts +32 -0
  27. package/dist/packages/core/src/application/use-cases/repositories/create-project.use-case.d.ts.map +1 -0
  28. package/dist/packages/core/src/application/use-cases/repositories/create-project.use-case.js +120 -0
  29. package/dist/packages/core/src/domain/generated/output.d.ts +42 -0
  30. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  31. package/dist/packages/core/src/domain/generated/output.js +6 -0
  32. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  33. package/dist/packages/core/src/infrastructure/di/container.js +37 -0
  34. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/application.mapper.d.ts +37 -0
  35. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/application.mapper.d.ts.map +1 -0
  36. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/application.mapper.js +52 -0
  37. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/056-create-applications-table.d.ts +5 -0
  38. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/056-create-applications-table.d.ts.map +1 -0
  39. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/056-create-applications-table.js +34 -0
  40. package/dist/packages/core/src/infrastructure/repositories/sqlite-application.repository.d.ts +21 -0
  41. package/dist/packages/core/src/infrastructure/repositories/sqlite-application.repository.d.ts.map +1 -0
  42. package/dist/packages/core/src/infrastructure/repositories/sqlite-application.repository.js +98 -0
  43. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.d.ts.map +1 -1
  44. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.js +44 -4
  45. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts +1 -1
  46. package/dist/src/presentation/web/app/(dashboard)/get-graph-data.d.ts.map +1 -1
  47. package/dist/src/presentation/web/app/(dashboard)/get-graph-data.js +11 -1
  48. package/dist/src/presentation/web/app/actions/check-all-agents-status.d.ts +7 -0
  49. package/dist/src/presentation/web/app/actions/check-all-agents-status.d.ts.map +1 -0
  50. package/dist/src/presentation/web/app/actions/check-all-agents-status.js +30 -0
  51. package/dist/src/presentation/web/app/actions/create-application.d.ts +13 -0
  52. package/dist/src/presentation/web/app/actions/create-application.d.ts.map +1 -0
  53. package/dist/src/presentation/web/app/actions/create-application.js +20 -0
  54. package/dist/src/presentation/web/app/actions/create-project-and-feature.d.ts +20 -0
  55. package/dist/src/presentation/web/app/actions/create-project-and-feature.d.ts.map +1 -0
  56. package/dist/src/presentation/web/app/actions/create-project-and-feature.js +70 -0
  57. package/dist/src/presentation/web/app/actions/delete-application.d.ts +4 -0
  58. package/dist/src/presentation/web/app/actions/delete-application.d.ts.map +1 -0
  59. package/dist/src/presentation/web/app/actions/delete-application.js +16 -0
  60. package/dist/src/presentation/web/app/application/[id]/page.d.ts +11 -0
  61. package/dist/src/presentation/web/app/application/[id]/page.d.ts.map +1 -0
  62. package/dist/src/presentation/web/app/application/[id]/page.js +16 -0
  63. package/dist/src/presentation/web/app/build-graph-nodes.d.ts +3 -1
  64. package/dist/src/presentation/web/app/build-graph-nodes.d.ts.map +1 -1
  65. package/dist/src/presentation/web/app/build-graph-nodes.js +19 -0
  66. package/dist/src/presentation/web/components/common/application-node/application-node-config.d.ts +24 -0
  67. package/dist/src/presentation/web/components/common/application-node/application-node-config.d.ts.map +1 -0
  68. package/dist/src/presentation/web/components/common/application-node/application-node-config.js +1 -0
  69. package/dist/src/presentation/web/components/common/application-node/application-node.d.ts +7 -0
  70. package/dist/src/presentation/web/components/common/application-node/application-node.d.ts.map +1 -0
  71. package/dist/src/presentation/web/components/common/application-node/application-node.js +41 -0
  72. package/dist/src/presentation/web/components/common/application-node/application-node.stories.d.ts +12 -0
  73. package/dist/src/presentation/web/components/common/application-node/application-node.stories.d.ts.map +1 -0
  74. package/dist/src/presentation/web/components/common/application-node/application-node.stories.js +100 -0
  75. package/dist/src/presentation/web/components/common/attachment-chip/attachment-chip.d.ts.map +1 -1
  76. package/dist/src/presentation/web/components/common/attachment-chip/attachment-chip.js +1 -1
  77. package/dist/src/presentation/web/components/features/application-page/application-page.d.ts +8 -0
  78. package/dist/src/presentation/web/components/features/application-page/application-page.d.ts.map +1 -0
  79. package/dist/src/presentation/web/components/features/application-page/application-page.js +86 -0
  80. package/dist/src/presentation/web/components/features/application-page/application-page.stories.d.ts +9 -0
  81. package/dist/src/presentation/web/components/features/application-page/application-page.stories.d.ts.map +1 -0
  82. package/dist/src/presentation/web/components/features/application-page/application-page.stories.js +51 -0
  83. package/dist/src/presentation/web/components/features/chat/ChatSheet.d.ts.map +1 -1
  84. package/dist/src/presentation/web/components/features/chat/ChatSheet.js +4 -2
  85. package/dist/src/presentation/web/components/features/chat/ChatTab.d.ts +5 -1
  86. package/dist/src/presentation/web/components/features/chat/ChatTab.d.ts.map +1 -1
  87. package/dist/src/presentation/web/components/features/chat/ChatTab.js +3 -3
  88. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.d.ts +3 -1
  89. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.d.ts.map +1 -1
  90. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.js +189 -118
  91. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.stories.d.ts +4 -16
  92. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.stories.d.ts.map +1 -1
  93. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.stories.js +16 -109
  94. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  95. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +43 -3
  96. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts +4 -0
  97. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  98. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +25 -1
  99. package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.d.ts.map +1 -1
  100. package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.js +2 -2
  101. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts +2 -1
  102. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts.map +1 -1
  103. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +2 -0
  104. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.d.ts +3 -1
  105. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.d.ts.map +1 -1
  106. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.js +9 -4
  107. package/dist/src/presentation/web/hooks/use-graph-state.d.ts +5 -0
  108. package/dist/src/presentation/web/hooks/use-graph-state.d.ts.map +1 -1
  109. package/dist/src/presentation/web/hooks/use-graph-state.js +37 -2
  110. package/dist/src/presentation/web/lib/derive-graph.d.ts +11 -1
  111. package/dist/src/presentation/web/lib/derive-graph.d.ts.map +1 -1
  112. package/dist/src/presentation/web/lib/derive-graph.js +35 -1
  113. package/dist/src/presentation/web/lib/layout-with-dagre.d.ts.map +1 -1
  114. package/dist/src/presentation/web/lib/layout-with-dagre.js +1 -0
  115. package/dist/translations/ar/web.json +6 -1
  116. package/dist/translations/de/web.json +6 -1
  117. package/dist/translations/en/web.json +6 -1
  118. package/dist/translations/es/web.json +6 -1
  119. package/dist/translations/fr/web.json +6 -1
  120. package/dist/translations/he/web.json +6 -1
  121. package/dist/translations/pt/web.json +6 -1
  122. package/dist/translations/ru/web.json +6 -1
  123. package/dist/tsconfig.build.tsbuildinfo +1 -1
  124. package/package.json +1 -1
  125. package/web/.next/BUILD_ID +1 -1
  126. package/web/.next/app-path-routes-manifest.json +1 -0
  127. package/web/.next/build-manifest.json +2 -2
  128. package/web/.next/fallback-build-manifest.json +2 -2
  129. package/web/.next/prerender-manifest.json +3 -3
  130. package/web/.next/required-server-files.js +3 -3
  131. package/web/.next/required-server-files.json +3 -3
  132. package/web/.next/routes-manifest.json +8 -0
  133. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +94 -79
  134. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +3 -3
  135. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  136. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  137. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +90 -75
  138. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js +3 -3
  139. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  140. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  141. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +96 -81
  142. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +3 -3
  143. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  144. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  145. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +112 -97
  146. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +3 -3
  147. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  148. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  149. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +112 -97
  150. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +3 -3
  151. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  152. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  153. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +92 -77
  154. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +3 -3
  155. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  156. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  157. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +92 -77
  158. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +3 -3
  159. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  160. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  161. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +90 -75
  162. package/web/.next/server/app/(dashboard)/chat/page.js +3 -3
  163. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  164. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  165. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +96 -81
  166. package/web/.next/server/app/(dashboard)/create/page.js +3 -3
  167. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  168. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  169. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +112 -97
  170. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +3 -3
  171. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  172. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  173. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +112 -97
  174. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +3 -3
  175. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  176. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  177. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +90 -75
  178. package/web/.next/server/app/(dashboard)/page.js +3 -3
  179. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  180. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  181. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +92 -77
  182. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +3 -3
  183. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  184. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  185. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +92 -77
  186. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +3 -3
  187. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  188. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  189. package/web/.next/server/app/_global-error/page.js +1 -1
  190. package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
  191. package/web/.next/server/app/_global-error.html +2 -2
  192. package/web/.next/server/app/_global-error.rsc +1 -1
  193. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  194. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  195. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  196. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  197. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  198. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +27 -12
  199. package/web/.next/server/app/_not-found/page.js +2 -2
  200. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  201. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  202. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  203. package/web/.next/server/app/api/attachments/upload-from-path/route.js +1 -1
  204. package/web/.next/server/app/api/attachments/upload-from-path/route.js.nft.json +1 -1
  205. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  206. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  207. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
  208. package/web/.next/server/app/application/[id]/page/app-paths-manifest.json +3 -0
  209. package/web/.next/server/app/application/[id]/page/build-manifest.json +18 -0
  210. package/web/.next/server/app/application/[id]/page/next-font-manifest.json +6 -0
  211. package/web/.next/server/app/application/[id]/page/react-loadable-manifest.json +1 -0
  212. package/web/.next/server/app/application/[id]/page/server-reference-manifest.json +110 -0
  213. package/web/.next/server/app/application/[id]/page.js +18 -0
  214. package/web/.next/server/app/application/[id]/page.js.map +5 -0
  215. package/web/.next/server/app/application/[id]/page.js.nft.json +1 -0
  216. package/web/.next/server/app/application/[id]/page_client-reference-manifest.js +2 -0
  217. package/web/.next/server/app/features/page/server-reference-manifest.json +27 -12
  218. package/web/.next/server/app/features/page.js +2 -2
  219. package/web/.next/server/app/features/page.js.nft.json +1 -1
  220. package/web/.next/server/app/features/page_client-reference-manifest.js +1 -1
  221. package/web/.next/server/app/settings/page/server-reference-manifest.json +33 -18
  222. package/web/.next/server/app/settings/page.js +2 -2
  223. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  224. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  225. package/web/.next/server/app/skills/page/server-reference-manifest.json +41 -26
  226. package/web/.next/server/app/skills/page.js +2 -2
  227. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  228. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  229. package/web/.next/server/app/tools/page/server-reference-manifest.json +37 -22
  230. package/web/.next/server/app/tools/page.js +2 -2
  231. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  232. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  233. package/web/.next/server/app/version/page/server-reference-manifest.json +27 -12
  234. package/web/.next/server/app/version/page.js +2 -2
  235. package/web/.next/server/app/version/page.js.nft.json +1 -1
  236. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  237. package/web/.next/server/app-paths-manifest.json +1 -0
  238. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
  239. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
  240. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  241. package/web/.next/server/chunks/{[root-of-the-server]__ea653642._.js → [root-of-the-server]__a5879003._.js} +2 -2
  242. package/web/.next/server/chunks/{[root-of-the-server]__ea653642._.js.map → [root-of-the-server]__a5879003._.js.map} +1 -1
  243. package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js +1 -1
  244. package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js.map +1 -1
  245. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +1 -1
  246. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  247. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_c4b92435.js +3 -0
  248. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_c4b92435.js.map +1 -0
  249. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_e4478080.js +3 -0
  250. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_e4478080.js.map +1 -0
  251. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_9b144ef8.js +3 -0
  252. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_9b144ef8.js.map +1 -0
  253. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  254. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  255. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +2 -2
  256. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
  257. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_281e0ef8._.js +1 -1
  258. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_281e0ef8._.js.map +1 -1
  259. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_a593f310._.js +1 -1
  260. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_a593f310._.js.map +1 -1
  261. package/web/.next/server/chunks/ssr/[root-of-the-server]__00efb844._.js +4 -0
  262. package/web/.next/server/chunks/ssr/[root-of-the-server]__00efb844._.js.map +1 -0
  263. package/web/.next/server/chunks/ssr/{[root-of-the-server]__d1040bd1._.js → [root-of-the-server]__090f24cb._.js} +2 -2
  264. package/web/.next/server/chunks/ssr/{[root-of-the-server]__d1040bd1._.js.map → [root-of-the-server]__090f24cb._.js.map} +1 -1
  265. package/web/.next/server/chunks/ssr/[root-of-the-server]__0d64745d._.js +3 -0
  266. package/web/.next/server/chunks/ssr/[root-of-the-server]__0d64745d._.js.map +1 -0
  267. package/web/.next/server/chunks/ssr/[root-of-the-server]__17dadd08._.js +4 -0
  268. package/web/.next/server/chunks/ssr/[root-of-the-server]__17dadd08._.js.map +1 -0
  269. package/web/.next/server/chunks/ssr/[root-of-the-server]__1a9687c4._.js +4 -0
  270. package/web/.next/server/chunks/ssr/[root-of-the-server]__1a9687c4._.js.map +1 -0
  271. package/web/.next/server/chunks/ssr/{[root-of-the-server]__51ec77a8._.js → [root-of-the-server]__234748ae._.js} +2 -2
  272. package/web/.next/server/chunks/ssr/{[root-of-the-server]__aa72e794._.js.map → [root-of-the-server]__234748ae._.js.map} +1 -1
  273. package/web/.next/server/chunks/ssr/[root-of-the-server]__23b5ca2c._.js +1 -1
  274. package/web/.next/server/chunks/ssr/{[root-of-the-server]__66047a1b._.js → [root-of-the-server]__2a2005ad._.js} +2 -2
  275. package/web/.next/server/chunks/ssr/{[root-of-the-server]__a932cd3a._.js.map → [root-of-the-server]__2a2005ad._.js.map} +1 -1
  276. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  277. package/web/.next/server/chunks/ssr/{[root-of-the-server]__22d17c66._.js → [root-of-the-server]__3a6d2b30._.js} +2 -2
  278. package/web/.next/server/chunks/ssr/[root-of-the-server]__3a6d2b30._.js.map +1 -0
  279. package/web/.next/server/chunks/ssr/[root-of-the-server]__540c615f._.js +2 -2
  280. package/web/.next/server/chunks/ssr/[root-of-the-server]__540c615f._.js.map +1 -1
  281. package/web/.next/server/chunks/ssr/{[root-of-the-server]__a932cd3a._.js → [root-of-the-server]__5d481a91._.js} +2 -2
  282. package/web/.next/server/chunks/ssr/{[root-of-the-server]__51ec77a8._.js.map → [root-of-the-server]__5d481a91._.js.map} +1 -1
  283. package/web/.next/server/chunks/ssr/[root-of-the-server]__63272afd._.js +4 -0
  284. package/web/.next/server/chunks/ssr/[root-of-the-server]__63272afd._.js.map +1 -0
  285. package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7e2919._.js +3 -0
  286. package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7e2919._.js.map +1 -0
  287. package/web/.next/server/chunks/ssr/[root-of-the-server]__7528eb6f._.js +1 -1
  288. package/web/.next/server/chunks/ssr/{[root-of-the-server]__efeeaed4._.js → [root-of-the-server]__7aa484f5._.js} +2 -2
  289. package/web/.next/server/chunks/ssr/{[root-of-the-server]__efeeaed4._.js.map → [root-of-the-server]__7aa484f5._.js.map} +1 -1
  290. package/web/.next/server/chunks/ssr/[root-of-the-server]__86ff0bc5._.js +2 -2
  291. package/web/.next/server/chunks/ssr/[root-of-the-server]__86ff0bc5._.js.map +1 -1
  292. package/web/.next/server/chunks/ssr/[root-of-the-server]__dd3e834e._.js +4 -0
  293. package/web/.next/server/chunks/ssr/[root-of-the-server]__dd3e834e._.js.map +1 -0
  294. package/web/.next/server/chunks/ssr/{[root-of-the-server]__aa72e794._.js → [root-of-the-server]__e7504e4a._.js} +2 -2
  295. package/web/.next/server/chunks/ssr/{[root-of-the-server]__66047a1b._.js.map → [root-of-the-server]__e7504e4a._.js.map} +1 -1
  296. package/web/.next/server/chunks/ssr/_05c23ad9._.js +1 -1
  297. package/web/.next/server/chunks/ssr/_05c23ad9._.js.map +1 -1
  298. package/web/.next/server/chunks/ssr/_16eb4fec._.js +1 -1
  299. package/web/.next/server/chunks/ssr/_16eb4fec._.js.map +1 -1
  300. package/web/.next/server/chunks/ssr/_1879404a._.js +1 -1
  301. package/web/.next/server/chunks/ssr/_1879404a._.js.map +1 -1
  302. package/web/.next/server/chunks/ssr/_295fffde._.js.map +1 -1
  303. package/web/.next/server/chunks/ssr/_2bea8166._.js +4 -0
  304. package/web/.next/server/chunks/ssr/_2bea8166._.js.map +1 -0
  305. package/web/.next/server/chunks/ssr/_45496654._.js.map +1 -1
  306. package/web/.next/server/chunks/ssr/_46a35540._.js +3 -0
  307. package/web/.next/server/chunks/ssr/_46a35540._.js.map +1 -0
  308. package/web/.next/server/chunks/ssr/_4e42f1b7._.js +3 -0
  309. package/web/.next/server/chunks/ssr/_4e42f1b7._.js.map +1 -0
  310. package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
  311. package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
  312. package/web/.next/server/chunks/ssr/_6f66d7ac._.js +3 -0
  313. package/web/.next/server/chunks/ssr/_6f66d7ac._.js.map +1 -0
  314. package/web/.next/server/chunks/ssr/_73e62e34._.js +7 -0
  315. package/web/.next/server/chunks/ssr/_73e62e34._.js.map +1 -0
  316. package/web/.next/server/chunks/ssr/{_af6b8b94._.js → _946a7fc6._.js} +3 -3
  317. package/web/.next/server/chunks/ssr/_946a7fc6._.js.map +1 -0
  318. package/web/.next/server/chunks/ssr/{_e0dd6fcf._.js → _a0ddd745._.js} +2 -2
  319. package/web/.next/server/chunks/ssr/{_e0dd6fcf._.js.map → _a0ddd745._.js.map} +1 -1
  320. package/web/.next/server/chunks/ssr/_b0311e50._.js +3 -0
  321. package/web/.next/server/chunks/ssr/_b0311e50._.js.map +1 -0
  322. package/web/.next/server/chunks/ssr/_b7a43c05._.js +1 -1
  323. package/web/.next/server/chunks/ssr/_b7a43c05._.js.map +1 -1
  324. package/web/.next/server/chunks/ssr/_d485d3b9._.js +3 -0
  325. package/web/.next/server/chunks/ssr/_d485d3b9._.js.map +1 -0
  326. package/web/.next/server/chunks/ssr/_f3cd7f63._.js +9 -0
  327. package/web/.next/server/chunks/ssr/_f3cd7f63._.js.map +1 -0
  328. package/web/.next/server/chunks/ssr/{_4cbb7f95._.js → _f86fc1bf._.js} +2 -2
  329. package/web/.next/server/chunks/ssr/_f86fc1bf._.js.map +1 -0
  330. package/web/.next/server/chunks/ssr/_f8c55130._.js +1 -1
  331. package/web/.next/server/chunks/ssr/_f8c55130._.js.map +1 -1
  332. package/web/.next/server/chunks/ssr/_f916587a._.js +3 -0
  333. package/web/.next/server/chunks/ssr/_f916587a._.js.map +1 -0
  334. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  335. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  336. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
  337. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map +1 -1
  338. package/web/.next/server/chunks/ssr/src_presentation_web_139547d4._.js +3 -0
  339. package/web/.next/server/chunks/ssr/src_presentation_web_139547d4._.js.map +1 -0
  340. package/web/.next/server/chunks/ssr/src_presentation_web_5b7ef96a._.js +3 -0
  341. package/web/.next/server/chunks/ssr/{src_presentation_web_807cba76._.js.map → src_presentation_web_5b7ef96a._.js.map} +1 -1
  342. package/web/.next/server/chunks/ssr/src_presentation_web_5f6f6651._.js +3 -0
  343. package/web/.next/server/chunks/ssr/src_presentation_web_5f6f6651._.js.map +1 -0
  344. package/web/.next/server/chunks/ssr/src_presentation_web_9cd4b94c._.js +3 -0
  345. package/web/.next/server/chunks/ssr/{src_presentation_web_e3a30e30._.js.map → src_presentation_web_9cd4b94c._.js.map} +1 -1
  346. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_bc9fae39.js +3 -0
  347. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_bc9fae39.js.map +1 -0
  348. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1619f987.js +3 -0
  349. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1619f987.js.map +1 -0
  350. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_1b3c83ff.js +3 -0
  351. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_1b3c83ff.js.map +1 -0
  352. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +30 -1
  353. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js.map +1 -1
  354. package/web/.next/server/chunks/ssr/src_presentation_web_b3759f18._.js +3 -0
  355. package/web/.next/server/chunks/ssr/{src_presentation_web_17d39233._.js.map → src_presentation_web_b3759f18._.js.map} +1 -1
  356. package/web/.next/server/chunks/ssr/src_presentation_web_bceeb973._.js +3 -0
  357. package/web/.next/server/chunks/ssr/{src_presentation_web_e1cd1869._.js.map → src_presentation_web_bceeb973._.js.map} +1 -1
  358. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
  359. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +1 -1
  360. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js +1 -1
  361. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js.map +1 -1
  362. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  363. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  364. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js +1 -1
  365. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js.map +1 -1
  366. package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js +1 -1
  367. package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js.map +1 -1
  368. package/web/.next/server/pages/500.html +2 -2
  369. package/web/.next/server/server-reference-manifest.js +1 -1
  370. package/web/.next/server/server-reference-manifest.json +883 -686
  371. package/web/.next/static/chunks/0dbc8228223540f0.js +1 -0
  372. package/web/.next/static/chunks/2090882dcaad5f8f.js +3 -0
  373. package/web/.next/static/chunks/{238fdbed09dc61b6.js → 288a6a7b2abf36ae.js} +2 -2
  374. package/web/.next/static/chunks/357c3d4c713a444b.js +1 -0
  375. package/web/.next/static/chunks/{39054eabee156e55.js → 39cd2f842b9377e5.js} +3 -3
  376. package/web/.next/static/chunks/{873e837cd1179cdd.js → 4b63765a2c9294db.js} +1 -1
  377. package/web/.next/static/chunks/67499ef845dda801.js +1 -0
  378. package/web/.next/static/chunks/{940c842293a6ee9b.js → 6a5b9181d2b5160c.js} +1 -1
  379. package/web/.next/static/chunks/771b8283dff48366.js +5 -0
  380. package/web/.next/static/chunks/79f687a9b9f2dca3.js +1 -0
  381. package/web/.next/static/chunks/7acc65394c377946.js +1 -0
  382. package/web/.next/static/chunks/{bc41a393614b1192.js → 89a6fefe537cca64.js} +1 -1
  383. package/web/.next/static/chunks/8da227cb5d5c25b1.js +7 -0
  384. package/web/.next/static/chunks/90cce661ba250a41.js +1 -0
  385. package/web/.next/static/chunks/{a22ee308ae1509ca.js → 97a84c58c17399ee.js} +1 -1
  386. package/web/.next/static/chunks/994f0ac30cd8661a.js +1 -0
  387. package/web/.next/static/chunks/{09edd35d194bec06.js → bcbae49e0f6d65ca.js} +3 -3
  388. package/web/.next/static/chunks/bdd3467bb34c2b76.css +1 -0
  389. package/web/.next/static/chunks/bf5da7f887552cca.js +1 -0
  390. package/web/.next/static/chunks/c9bd1dea77920749.js +1 -0
  391. package/web/.next/static/chunks/ce8d4b5094c4dd62.js +1 -0
  392. package/web/.next/static/chunks/d2f65dc6c7e99186.js +1 -0
  393. package/web/.next/static/chunks/{2ad924f5ba5ec0a6.js → e9ab2deb269fa340.js} +1 -1
  394. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_ad0071c9.js +0 -3
  395. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_ad0071c9.js.map +0 -1
  396. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_90d98b2b.js +0 -3
  397. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_90d98b2b.js.map +0 -1
  398. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_d3828105.js +0 -3
  399. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_d3828105.js.map +0 -1
  400. package/web/.next/server/chunks/ssr/[root-of-the-server]__1cd4327c._.js +0 -4
  401. package/web/.next/server/chunks/ssr/[root-of-the-server]__1cd4327c._.js.map +0 -1
  402. package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js +0 -4
  403. package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js.map +0 -1
  404. package/web/.next/server/chunks/ssr/[root-of-the-server]__22d17c66._.js.map +0 -1
  405. package/web/.next/server/chunks/ssr/[root-of-the-server]__69dd3217._.js +0 -3
  406. package/web/.next/server/chunks/ssr/[root-of-the-server]__69dd3217._.js.map +0 -1
  407. package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js +0 -4
  408. package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js.map +0 -1
  409. package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js +0 -4
  410. package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js.map +0 -1
  411. package/web/.next/server/chunks/ssr/_2b021b35._.js +0 -3
  412. package/web/.next/server/chunks/ssr/_2b021b35._.js.map +0 -1
  413. package/web/.next/server/chunks/ssr/_43ba79e7._.js +0 -3
  414. package/web/.next/server/chunks/ssr/_43ba79e7._.js.map +0 -1
  415. package/web/.next/server/chunks/ssr/_4cbb7f95._.js.map +0 -1
  416. package/web/.next/server/chunks/ssr/_6abfa39e._.js +0 -3
  417. package/web/.next/server/chunks/ssr/_6abfa39e._.js.map +0 -1
  418. package/web/.next/server/chunks/ssr/_7cb0396e._.js +0 -3
  419. package/web/.next/server/chunks/ssr/_7cb0396e._.js.map +0 -1
  420. package/web/.next/server/chunks/ssr/_af6b8b94._.js.map +0 -1
  421. package/web/.next/server/chunks/ssr/_d9c0a97a._.js +0 -7
  422. package/web/.next/server/chunks/ssr/_d9c0a97a._.js.map +0 -1
  423. package/web/.next/server/chunks/ssr/_e680c57c._.js +0 -9
  424. package/web/.next/server/chunks/ssr/_e680c57c._.js.map +0 -1
  425. package/web/.next/server/chunks/ssr/node_modules__pnpm_ef15a0bd._.js +0 -3
  426. package/web/.next/server/chunks/ssr/node_modules__pnpm_ef15a0bd._.js.map +0 -1
  427. package/web/.next/server/chunks/ssr/src_presentation_web_17d39233._.js +0 -3
  428. package/web/.next/server/chunks/ssr/src_presentation_web_54b02639._.js +0 -5
  429. package/web/.next/server/chunks/ssr/src_presentation_web_54b02639._.js.map +0 -1
  430. package/web/.next/server/chunks/ssr/src_presentation_web_7b7b9e3b._.js +0 -5
  431. package/web/.next/server/chunks/ssr/src_presentation_web_7b7b9e3b._.js.map +0 -1
  432. package/web/.next/server/chunks/ssr/src_presentation_web_807cba76._.js +0 -3
  433. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_90b5e66e.js +0 -3
  434. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_90b5e66e.js.map +0 -1
  435. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_4ce30db7.js +0 -3
  436. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_4ce30db7.js.map +0 -1
  437. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_e4032193.js +0 -3
  438. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_e4032193.js.map +0 -1
  439. package/web/.next/server/chunks/ssr/src_presentation_web_e1cd1869._.js +0 -3
  440. package/web/.next/server/chunks/ssr/src_presentation_web_e3a30e30._.js +0 -3
  441. package/web/.next/static/chunks/0b07ee72b0c639ef.js +0 -7
  442. package/web/.next/static/chunks/1b336d1266a0aa3d.js +0 -1
  443. package/web/.next/static/chunks/28f6b1cab38ab025.js +0 -3
  444. package/web/.next/static/chunks/46e2693dbc9262fd.js +0 -5
  445. package/web/.next/static/chunks/8b0a9cb5109fe899.js +0 -1
  446. package/web/.next/static/chunks/971e52f3f386ccfd.js +0 -1
  447. package/web/.next/static/chunks/a20f2d6f76f469b7.css +0 -1
  448. package/web/.next/static/chunks/b2aa69e4b0b032d9.js +0 -1
  449. package/web/.next/static/chunks/b63e6727c84f30e2.js +0 -1
  450. package/web/.next/static/chunks/b65e555419a0c664.js +0 -1
  451. package/web/.next/static/chunks/b7b5d65a5dd2fff1.js +0 -1
  452. package/web/.next/static/chunks/ba0e0fa2d1a650bb.js +0 -1
  453. package/web/.next/static/chunks/c10c0d6d458453bc.js +0 -1
  454. package/web/.next/static/chunks/d26542df5ecc8717.js +0 -1
  455. /package/web/.next/static/{9rcv3ICw0kZNuv3TVdO8E → GfIqHvmVtZCXK5PAbtkQf}/_buildManifest.js +0 -0
  456. /package/web/.next/static/{9rcv3ICw0kZNuv3TVdO8E → GfIqHvmVtZCXK5PAbtkQf}/_clientMiddlewareManifest.json +0 -0
  457. /package/web/.next/static/{9rcv3ICw0kZNuv3TVdO8E → GfIqHvmVtZCXK5PAbtkQf}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../src/presentation/web/.next-internal/server/app/skills/page/actions.js%20%28server%20actions%20loader%29","../../../../../../../src/presentation/web/app/actions/remove-injected-skill.ts","../../../../../../../src/presentation/web/app/actions/add-injected-skill.ts"],"sourcesContent":["export {getAllAgentModels as '00e76ece8b4306542cf5639b355ab517212d7b96e5'} from 'ACTIONS_MODULE0'\nexport {checkAllAgentsStatus as '000b97268c22b98c0e028bdb1235edc8dd6c7d211e'} from 'ACTIONS_MODULE1'\nexport {updateAgentAndModel as '60e1c20e7b242bf7a1a7356621f64cf3e3a82dedc2'} from 'ACTIONS_MODULE2'\nexport {pickFolder as '009487c7dee1a0626219196cb795852e6ceeb4e942'} from 'ACTIONS_MODULE3'\nexport {listGitHubRepositories as '40894ac562da702e856a33ab2eba43a8244cd0f44f'} from 'ACTIONS_MODULE4'\nexport {listGitHubOrganizations as '007666ac9610821f806d256e53fdd8bebb791a8a6d'} from 'ACTIONS_MODULE5'\nexport {importGitHubRepository as '407105802eb51c65cac8874dcb3c49996a742b2cd9'} from 'ACTIONS_MODULE6'\nexport {getDeploymentLogs as '404466ac68516001cc4d4019755aaf488c841c6b22'} from 'ACTIONS_MODULE7'\nexport {deployFeature as '40de2324761d8020ab72bf75cc368f1ef877b4bee6'} from 'ACTIONS_MODULE8'\nexport {deployRepository as '40ea2c84d337a8e2756140351fe8b22e698ef54f45'} from 'ACTIONS_MODULE9'\nexport {stopDeployment as '40219a408522b8b36890b324708c5c7d0e1d45671e'} from 'ACTIONS_MODULE10'\nexport {getDeploymentStatus as '40569cafedbc09c78c1ceb1686f83d0ee302732392'} from 'ACTIONS_MODULE11'\nexport {removeInjectedSkill as '400117bcb0875931a86c1005773a88be5d7f095b49'} from 'ACTIONS_MODULE12'\nexport {addInjectedSkill as '4089a105e0a5e167105ce523ad685d0cb560d96dc5'} from 'ACTIONS_MODULE13'\n","'use server';\n\nimport { revalidatePath } from 'next/cache';\nimport { resolve } from '@/lib/server-container';\nimport type { LoadSettingsUseCase } from '@shepai/core/application/use-cases/settings/load-settings.use-case';\nimport type { UpdateSettingsUseCase } from '@shepai/core/application/use-cases/settings/update-settings.use-case';\nimport { updateSettings as updateSettingsSingleton } from '@shepai/core/infrastructure/services/settings.service';\n\nexport interface RemoveInjectedSkillResult {\n success: boolean;\n error?: string;\n}\n\nexport async function removeInjectedSkill(skillName: string): Promise<RemoveInjectedSkillResult> {\n try {\n const loadUseCase = resolve<LoadSettingsUseCase>('LoadSettingsUseCase');\n const current = await loadUseCase.execute();\n\n const existingSkills = current.workflow.skillInjection?.skills ?? [];\n const filtered = existingSkills.filter((s) => s.name !== skillName);\n\n if (filtered.length === existingSkills.length) {\n return { success: false, error: `Skill \"${skillName}\" not found in configuration` };\n }\n\n const updated = {\n ...current,\n workflow: {\n ...current.workflow,\n skillInjection: {\n enabled: current.workflow.skillInjection?.enabled ?? false,\n skills: filtered,\n },\n },\n updatedAt: new Date(),\n };\n\n const updateUseCase = resolve<UpdateSettingsUseCase>('UpdateSettingsUseCase');\n await updateUseCase.execute(updated);\n updateSettingsSingleton(updated);\n revalidatePath('/skills');\n\n return { success: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to remove skill';\n return { success: false, error: message };\n }\n}\n","'use server';\n\nimport { revalidatePath } from 'next/cache';\nimport { resolve } from '@/lib/server-container';\nimport type { LoadSettingsUseCase } from '@shepai/core/application/use-cases/settings/load-settings.use-case';\nimport type { UpdateSettingsUseCase } from '@shepai/core/application/use-cases/settings/update-settings.use-case';\nimport { updateSettings as updateSettingsSingleton } from '@shepai/core/infrastructure/services/settings.service';\nimport type { SkillSource } from '@shepai/core/domain/generated/output';\n\nexport interface AddInjectedSkillResult {\n success: boolean;\n error?: string;\n}\n\nexport async function addInjectedSkill(skill: SkillSource): Promise<AddInjectedSkillResult> {\n try {\n const loadUseCase = resolve<LoadSettingsUseCase>('LoadSettingsUseCase');\n const current = await loadUseCase.execute();\n\n const existingSkills = current.workflow.skillInjection?.skills ?? [];\n if (existingSkills.some((s) => s.name === skill.name)) {\n return { success: false, error: `Skill \"${skill.name}\" is already configured` };\n }\n\n const updated = {\n ...current,\n workflow: {\n ...current.workflow,\n skillInjection: {\n enabled: current.workflow.skillInjection?.enabled ?? true,\n skills: [...existingSkills, skill],\n },\n },\n updatedAt: new Date(),\n };\n\n const updateUseCase = resolve<UpdateSettingsUseCase>('UpdateSettingsUseCase');\n await updateUseCase.execute(updated);\n updateSettingsSingleton(updated);\n revalidatePath('/skills');\n\n return { success: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to add skill';\n return { success: false, error: message };\n }\n}\n"],"names":[],"mappings":"uCAAA,IAAA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,MACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,oBCTA,EAAA,EAAA,CAAA,CAAA,MACA,EAAA,EAAA,CAAA,CAAA,OAGA,EAAA,EAAA,CAAA,CAAA,oBAOO,eAAe,EAAoB,CAAiB,EACzD,GAAI,CACF,IAAM,EAAc,CAAA,EAAA,EAAA,OAAA,AAAO,EAAsB,uBAC3C,EAAU,MAAM,EAAY,OAAO,GAEnC,EAAiB,EAAQ,QAAQ,CAAC,cAAc,EAAE,QAAU,EAAE,CAC9D,EAAW,EAAe,MAAM,CAAC,AAAC,GAAM,EAAE,IAAI,GAAK,GAEzD,GAAI,EAAS,MAAM,GAAK,EAAe,MAAM,CAC3C,CAD6C,KACtC,CAAE,QAAS,GAAO,MAAO,CAAC,OAAO,EAAE,EAAU,4BAA4B,CAAC,AAAC,EAGpF,IAAM,EAAU,CACd,GAAG,CAAO,CACV,SAAU,CACR,GAAG,EAAQ,QAAQ,CACnB,eAAgB,CACd,QAAS,EAAQ,QAAQ,CAAC,cAAc,EAAE,UAAW,EACrD,OAAQ,CACV,CACF,EACA,UAAW,IAAI,IACjB,EAEM,EAAgB,CAAA,EAAA,EAAA,OAAA,AAAO,EAAwB,yBAKrD,OAJA,MAAM,EAAc,OAAO,CAAC,GAC5B,CAAA,EAAA,EAAA,cAAA,AAAuB,EAAC,GACxB,CAAA,EAAA,EAAA,cAAA,AAAc,EAAC,WAER,CAAE,QAAS,EAAK,CACzB,CAAE,MAAO,EAAgB,CAEvB,MAAO,CAAE,SAAS,EAAO,MADT,CACgB,YADC,MAAQ,EAAM,OAAO,CAAG,wBACjB,CAC1C,CACF,CCjCO,eAAe,EAAiB,CAAkB,EACvD,GAAI,CACF,IAAM,EAAc,CAAA,EAAA,EAAA,OAAA,AAAO,EAAsB,uBAC3C,EAAU,MAAM,EAAY,OAAO,GAEnC,EAAiB,EAAQ,QAAQ,CAAC,cAAc,EAAE,QAAU,EAAE,CACpE,GAAI,EAAe,IAAI,CAAE,AAAD,GAAO,EAAE,IAAI,GAAK,EAAM,IAAI,EAClD,CADqD,KAC9C,CAAE,SAAS,EAAO,MAAO,CAAC,OAAO,EAAE,EAAM,IAAI,CAAC,uBAAuB,CAAC,AAAC,EAGhF,IAAM,EAAU,CACd,GAAG,CAAO,CACV,SAAU,CACR,GAAG,EAAQ,QAAQ,CACnB,eAAgB,CACd,QAAS,EAAQ,QAAQ,CAAC,cAAc,EAAE,UAAW,EACrD,OAAQ,IAAI,EAAgB,EAAM,AACpC,CACF,EACA,UAAW,IAAI,IACjB,EAEM,EAAgB,CAAA,EAAA,EAAA,OAAA,AAAO,EAAwB,yBAKrD,OAJA,MAAM,EAAc,OAAO,CAAC,GAC5B,CAAA,EAAA,EAAA,cAAA,AAAuB,EAAC,GACxB,CAAA,EAAA,EAAA,cAAA,AAAc,EAAC,WAER,CAAE,SAAS,CAAK,CACzB,CAAE,MAAO,EAAgB,CAEvB,MAAO,CAAE,SAAS,EAAO,MADT,CACgB,YADC,MAAQ,EAAM,OAAO,CAAG,qBACjB,CAC1C,CACF,iCDjCsB,IAAA,CAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,6CAAA,sCCCA,IAAA,CAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,6CAAA"}
@@ -0,0 +1,3 @@
1
+ module.exports=[72609,a=>{"use strict";var b=a.i(23504),c=a.i(8115),d=a.i(27900),e=a.i(12513),f=a.i(73101),g=a.i(54775),h=a.i(65324),i=a.i(94691),j=a.i(33841),k=a.i(46646),l=a.i(68670),m=a.i(85321);a.s([],31492),a.i(31492),a.s(["000b97268c22b98c0e028bdb1235edc8dd6c7d211e",()=>c.checkAllAgentsStatus,"007666ac9610821f806d256e53fdd8bebb791a8a6d",()=>g.listGitHubOrganizations,"009487c7dee1a0626219196cb795852e6ceeb4e942",()=>e.pickFolder,"00e76ece8b4306542cf5639b355ab517212d7b96e5",()=>b.getAllAgentModels,"40219a408522b8b36890b324708c5c7d0e1d45671e",()=>l.stopDeployment,"404466ac68516001cc4d4019755aaf488c841c6b22",()=>i.getDeploymentLogs,"40569cafedbc09c78c1ceb1686f83d0ee302732392",()=>m.getDeploymentStatus,"407105802eb51c65cac8874dcb3c49996a742b2cd9",()=>h.importGitHubRepository,"40894ac562da702e856a33ab2eba43a8244cd0f44f",()=>f.listGitHubRepositories,"40de2324761d8020ab72bf75cc368f1ef877b4bee6",()=>j.deployFeature,"40ea2c84d337a8e2756140351fe8b22e698ef54f45",()=>k.deployRepository,"60e1c20e7b242bf7a1a7356621f64cf3e3a82dedc2",()=>d.updateAgentAndModel],72609)}];
2
+
3
+ //# sourceMappingURL=src_presentation_web__next-internal_server_app_tools_page_actions_1b3c83ff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../src/presentation/web/.next-internal/server/app/tools/page/actions.js%20%28server%20actions%20loader%29"],"sourcesContent":["export {getAllAgentModels as '00e76ece8b4306542cf5639b355ab517212d7b96e5'} from 'ACTIONS_MODULE0'\nexport {checkAllAgentsStatus as '000b97268c22b98c0e028bdb1235edc8dd6c7d211e'} from 'ACTIONS_MODULE1'\nexport {updateAgentAndModel as '60e1c20e7b242bf7a1a7356621f64cf3e3a82dedc2'} from 'ACTIONS_MODULE2'\nexport {pickFolder as '009487c7dee1a0626219196cb795852e6ceeb4e942'} from 'ACTIONS_MODULE3'\nexport {listGitHubRepositories as '40894ac562da702e856a33ab2eba43a8244cd0f44f'} from 'ACTIONS_MODULE4'\nexport {listGitHubOrganizations as '007666ac9610821f806d256e53fdd8bebb791a8a6d'} from 'ACTIONS_MODULE5'\nexport {importGitHubRepository as '407105802eb51c65cac8874dcb3c49996a742b2cd9'} from 'ACTIONS_MODULE6'\nexport {getDeploymentLogs as '404466ac68516001cc4d4019755aaf488c841c6b22'} from 'ACTIONS_MODULE7'\nexport {deployFeature as '40de2324761d8020ab72bf75cc368f1ef877b4bee6'} from 'ACTIONS_MODULE8'\nexport {deployRepository as '40ea2c84d337a8e2756140351fe8b22e698ef54f45'} from 'ACTIONS_MODULE9'\nexport {stopDeployment as '40219a408522b8b36890b324708c5c7d0e1d45671e'} from 'ACTIONS_MODULE10'\nexport {getDeploymentStatus as '40569cafedbc09c78c1ceb1686f83d0ee302732392'} from 'ACTIONS_MODULE11'\n"],"names":[],"mappings":"uCAAA,IAAA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,MACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA"}
@@ -1,3 +1,32 @@
1
- module.exports=[84095,56799,80496,93225,41872,9959,79124,10528,50845,26604,54723,18942,42886,49560,39353,29207,a=>{"use strict";var b=a.i(92658),c=a.i(50227),d=a.i(33244),e=a.i(96380),f=a.i(12581);async function g(a){let{repositoryPath:b,branch:f}=a;if(!b||!(0,c.isAbsolute)(b))return{success:!1,error:"repositoryPath must be an absolute path"};let g=(0,d.getSettings)().environment.defaultEditor,h=(0,e.resolve)("LaunchIdeUseCase"),i=await h.execute({editorId:g,repositoryPath:b,branch:f,checkAvailability:!0});return i.ok?{success:!0,editor:i.editorName,path:i.worktreePath}:{success:!1,error:i.message}}(0,f.ensureServerEntryExports)([g]),(0,b.registerServerReference)(g,"400dae91adbbff2e8b5c44046c21aecdd5d8850241",null),a.s(["openIde",()=>g],84095);var h=a.i(2157),i=a.i(60526),j=a.i(74533),k=a.i(29918);let l={darwin:{cmd:"open",args:a=>["-a","Terminal",a]},linux:{cmd:"x-terminal-emulator",args:a=>[`--working-directory=${a}`]},win32:{cmd:"cmd.exe",args:a=>["/c","start","powershell","-NoExit","-Command",`Set-Location "${a}"`]}};async function m(a){let{repositoryPath:b,branch:f}=a;if(!b||!(0,c.isAbsolute)(b))return{success:!1,error:"repositoryPath must be an absolute path"};try{let a=(0,d.getSettings)(),c=a.environment.shellPreference,g=a.environment.terminalPreference??"system",m=f?(0,k.computeWorktreePath)(b,f):b;if(!(0,h.existsSync)(m))return{success:!1,error:`Path does not exist: ${m}`};if("system"!==g)try{let a=(0,e.resolve)("IToolInstallerService").getTerminalOpenConfig(g);if(a?.openDirectory.includes("{dir}")){let b=a.openDirectory.replace("{dir}",m);if(a.shell){let a=(0,j.spawn)(b,[],{detached:!0,stdio:"ignore",shell:!0});a.on("error",()=>void 0),a.unref()}else{let[a,...c]=b.split(/\s+/),d=(0,j.spawn)(a,c,{detached:!0,stdio:"ignore"});d.on("error",()=>void 0),d.unref()}return{success:!0,path:m,shell:c}}}catch{}let n=l[(0,i.platform)()];if(!n)return{success:!1,error:`Unsupported platform: ${(0,i.platform)()}`};let o=(0,j.spawn)(n.cmd,n.args(m),{detached:!0,stdio:"ignore"});return o.on("error",()=>void 0),o.unref(),{success:!0,path:m,shell:c}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to open shell"}}}(0,f.ensureServerEntryExports)([m]),(0,b.registerServerReference)(m,"403f5ab09b9c95436fe15ec25711617c0408289a26",null),a.s(["openShell",()=>m],56799);let n={darwin:{cmd:"open",args:a=>[a]},linux:{cmd:"xdg-open",args:a=>[a]},win32:{cmd:"explorer",args:a=>[a]}};async function o(a){if(!a||!(0,c.isAbsolute)(a))return{success:!1,error:"repositoryPath must be an absolute path"};try{if(!(0,h.existsSync)(a))return{success:!1,error:"Directory not found"};let b=n[(0,i.platform)()];if(!b)return{success:!1,error:`Unsupported platform: ${(0,i.platform)()}`};let d=(0,c.normalize)(a),e=(0,j.spawn)(b.cmd,b.args(d),{detached:!0,stdio:"ignore"});return e.on("error",()=>void 0),e.unref(),{success:!0,path:a}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to open folder"}}}async function p(a){if(!a?.trim())return{success:!1,error:"Repository id is required"};try{let b=(0,e.resolve)("SyncRepositoryMainUseCase");return await b.execute(a),{success:!0}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to sync repository"}}}async function q(){try{return(0,d.getSettings)().onboardingComplete}catch{return!1}}(0,f.ensureServerEntryExports)([o]),(0,b.registerServerReference)(o,"40ecfcd01dd3d4e4bf2f96d126a4be4523a3fa3d3d",null),a.s(["openFolder",()=>o],80496),(0,f.ensureServerEntryExports)([p]),(0,b.registerServerReference)(p,"40b76283b4700f45aab7b775043497c52e0e6d98e9",null),a.s(["syncRepository",()=>p],93225),(0,f.ensureServerEntryExports)([q]),(0,b.registerServerReference)(q,"0064a55b67441efb0f64e484060d6e0477e2a2a466",null),a.s(["isAgentSetupComplete",()=>q],41872);var r=a.i(37512);let s={"claude-code":"Claude Code",cursor:"Cursor Agent","gemini-cli":"Gemini CLI",aider:"Aider",copilot:"Copilot CLI",continue:"Continue",dev:"Demo"},t={"claude-code":"claude-code",cursor:"cursor-cli","gemini-cli":"gemini-cli",copilot:"copilot-cli"},u={"claude-code":"claude",cursor:"cursor-agent","gemini-cli":"gemini",copilot:"copilot"};async function v(){var a;let b;try{b=(0,d.getSettings)().agent.type}catch{return{agentType:"unknown",installed:!1,authenticated:!1,label:"Unknown",binaryName:null,installCommand:null,authCommand:null}}let f=s[b]??b,g=t[b]??null,k=u[b]??null;if(!g)return{agentType:b,installed:!0,authenticated:!0,label:f,binaryName:null,installCommand:null,authCommand:null};let l=!1,m=null;try{let a=(0,e.resolve)("ListToolsUseCase"),b=(await a.execute()).find(a=>a.id===g);l=b?.status.status==="available",m=b?.installCommand??null}catch{l=!1}if(!l)return{agentType:b,installed:!1,authenticated:!1,label:f,binaryName:k,installCommand:m,authCommand:k?`Install ${f} first`:null};if(!function(a){let b=(0,i.homedir)();switch(a){case"claude-code":{if(process.env.ANTHROPIC_API_KEY||process.env.CLAUDE_CODE_USE_BEDROCK||process.env.CLAUDE_CODE_USE_VERTEX||process.env.CLAUDE_CODE_OAUTH_TOKEN)return!0;let a=(0,c.join)(b,".claude",".credentials.json");return(0,h.existsSync)(a)}case"cursor":{if(process.env.CURSOR_API_KEY)return!0;let a=(0,c.join)(b,".cursor");return(0,h.existsSync)(a)}case"gemini-cli":{if(process.env.GEMINI_API_KEY||process.env.GOOGLE_API_KEY||process.env.GOOGLE_APPLICATION_CREDENTIALS)return!0;let a=(0,c.join)(b,".gemini","google_accounts.json");return(0,h.existsSync)(a)}case"copilot-cli":{if(process.env.GITHUB_TOKEN||process.env.GH_TOKEN||process.env.GITHUB_AUTH_TOKEN)return!0;let a=r.IS_WINDOWS?(0,c.join)(b,".copilot"):(0,c.join)(b,".config","gh");return(0,h.existsSync)(a)}default:return!0}}(b))return{agentType:b,installed:!0,authenticated:!1,label:f,binaryName:k,installCommand:m,authCommand:k};let n=!0;return k&&(n=await (a=b,new Promise(b=>{let c,d;switch(a){case"claude-code":c=k,d=["auth","status"];break;case"cursor":c=k,d=["status"];break;case"copilot-cli":c="gh",d=["auth","status"];break;default:b(!0);return}try{let a=r.IS_WINDOWS?{timeout:5e3,windowsHide:!0}:{timeout:5e3};(0,j.execFile)(c,d,a,a=>{b(!a)})}catch{b(!1)}}))),{agentType:b,installed:!0,authenticated:n,label:f,binaryName:k,installCommand:m,authCommand:n?null:k}}function w(a,b){return new Promise(c=>{try{let d=r.IS_WINDOWS?{timeout:5e3,windowsHide:!0}:{timeout:5e3};(0,j.execFile)(a,b,d,(a,b)=>{if(a)return void c({installed:!1,version:null});let d=b.match(/(\d+\.\d+(?:\.\d+)?)/);c({installed:!0,version:d?.[1]??null})})}catch{c({installed:!1,version:null})}})}async function x(){let[a,b,c]=await Promise.all([w("git",["--version"]),w("gh",["--version"]),(async()=>{try{let a=(0,e.resolve)("ListToolsUseCase");return await a.execute()}catch{return[]}})()]),d=c.find(a=>"git"===a.id),f=c.find(a=>"gh"===a.id);return{git:{...a,installCommand:d?.installCommand??null,installUrl:d?.website??"https://git-scm.com"},gh:{...b,installCommand:f?.installCommand??null,installUrl:f?.website??"https://cli.github.com"}}}async function y(a){if(!a?.trim())return{error:"id is required"};try{let b=(0,e.resolve)("ArchiveFeatureUseCase");return{feature:await b.execute(a)}}catch(a){return{error:a instanceof Error?a.message:"Failed to archive feature"}}}async function z(a,b,c,d){if(!a?.trim())return{error:"id is required"};try{let f=(0,e.resolve)("DeleteFeatureUseCase"),g={};return void 0!==b&&(g.cleanup=b),void 0!==c&&(g.cascadeDelete=c),void 0!==d&&(g.closePr=d),{feature:Object.keys(g).length>0?await f.execute(a,g):await f.execute(a)}}catch(a){return{error:a instanceof Error?a.message:"Failed to delete feature"}}}async function A(a){if(!a.trim())return{resumed:!1,error:"Feature id is required"};try{let b=(0,e.resolve)("ResumeFeatureUseCase");return await b.execute(a),{resumed:!0}}catch(a){return{resumed:!1,error:a instanceof Error?a.message:"Failed to resume feature"}}}async function B(a){if(!a.trim())return{started:!1,error:"Feature id is required"};try{let b=(0,e.resolve)("StartFeatureUseCase");return await b.execute(a),{started:!0}}catch(a){return{started:!1,error:a instanceof Error?a.message:"Failed to start feature"}}}async function C(a){if(!a.trim())return{stopped:!1,error:"Feature id is required"};try{let b=(0,e.resolve)("IAgentRunRepository"),c=(await b.list()).find(b=>b.featureId===a&&"completed"!==b.status&&"failed"!==b.status&&"interrupted"!==b.status&&"cancelled"!==b.status);if(!c)return{stopped:!1,error:"No active agent run found for this feature"};let d=(0,e.resolve)("StopAgentRunUseCase"),f=await d.execute(c.id);if(!f.stopped)return{stopped:!1,error:f.reason};return{stopped:!0}}catch(a){return{stopped:!1,error:a instanceof Error?a.message:"Failed to stop agent"}}}async function D(a){if(!a?.trim())return{error:"id is required"};try{let b=(0,e.resolve)("UnarchiveFeatureUseCase");return{feature:await b.execute(a)}}catch(a){return{error:a instanceof Error?a.message:"Failed to unarchive feature"}}}async function E(a){let{path:b,name:c}=a;if(!b?.trim())return{error:"path is required"};try{let a=(0,e.resolve)("AddRepositoryUseCase");return{repository:await a.execute({path:b,name:c})}}catch(a){return{error:a instanceof Error?a.message:"Failed to add repository"}}}async function F(a){if(!a?.trim())return{success:!1,error:"id is required"};try{let b=(0,e.resolve)("DeleteRepositoryUseCase");return await b.execute(a),{success:!0}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to delete repository"}}}async function G(a){let b=(0,e.resolve)("IFeatureRepository"),c=await b.findById(a);return c?{name:c.name,description:c.description}:null}(0,f.ensureServerEntryExports)([v]),(0,b.registerServerReference)(v,"00146118be55e1a72383915a7d426fd0c54b22b9ef",null),a.s(["checkAgentAuth",()=>v],9959),(0,f.ensureServerEntryExports)([x]),(0,b.registerServerReference)(x,"00fb6c5462fd26f0a6d83d293a57e2fd51d9190a8b",null),a.s(["checkToolStatus",()=>x],79124),(0,f.ensureServerEntryExports)([y]),(0,b.registerServerReference)(y,"406dc07f82561f7a972a3b8750db8e394217e51066",null),a.s(["archiveFeature",()=>y],10528),(0,f.ensureServerEntryExports)([z]),(0,b.registerServerReference)(z,"78befba1876563f867eef16cee6aeac7fef90ccdfe",null),a.s(["deleteFeature",()=>z],50845),(0,f.ensureServerEntryExports)([A]),(0,b.registerServerReference)(A,"405cbca883738a7b0ce854b4e905ee1ca2d89c6334",null),a.s(["resumeFeature",()=>A],26604),(0,f.ensureServerEntryExports)([B]),(0,b.registerServerReference)(B,"40f8270a4e6612b146fd7e32e3e791fd45cd221b30",null),a.s(["startFeature",()=>B],54723),(0,f.ensureServerEntryExports)([C]),(0,b.registerServerReference)(C,"400c1cf04acf1c3473d16250f7bd269e680bf8ea80",null),a.s(["stopFeature",()=>C],18942),(0,f.ensureServerEntryExports)([D]),(0,b.registerServerReference)(D,"40013af0f67efe51afffb12222afbe0dc207278440",null),a.s(["unarchiveFeature",()=>D],42886),(0,f.ensureServerEntryExports)([E]),(0,b.registerServerReference)(E,"405b9ad7429a7d8f371b2f2e5fe9a819b53108072a",null),a.s(["addRepository",()=>E],49560),(0,f.ensureServerEntryExports)([F]),(0,b.registerServerReference)(F,"4042e73e21d267f537a7bf7fb3379f1de269622318",null),a.s(["deleteRepository",()=>F],39353),(0,f.ensureServerEntryExports)([G]),(0,b.registerServerReference)(G,"408faca8892e77d11f363deec4c2d5303f13fd25db",null),a.s(["getFeatureMetadata",()=>G],29207)}];
1
+ module.exports=[84095,56799,80496,93225,77605,77710,45395,10528,50845,26604,54723,18942,42886,49560,39353,95072,29207,a=>{"use strict";var b=a.i(92658),c=a.i(50227),d=a.i(33244),e=a.i(96380),f=a.i(12581);async function g(a){let{repositoryPath:b,branch:f}=a;if(!b||!(0,c.isAbsolute)(b))return{success:!1,error:"repositoryPath must be an absolute path"};let g=(0,d.getSettings)().environment.defaultEditor,h=(0,e.resolve)("LaunchIdeUseCase"),i=await h.execute({editorId:g,repositoryPath:b,branch:f,checkAvailability:!0});return i.ok?{success:!0,editor:i.editorName,path:i.worktreePath}:{success:!1,error:i.message}}(0,f.ensureServerEntryExports)([g]),(0,b.registerServerReference)(g,"4009c68dbb3ea62759de25bb414049bbce7a8d4005",null),a.s(["openIde",()=>g],84095);var h=a.i(2157),i=a.i(60526),j=a.i(74533),k=a.i(29918);let l={darwin:{cmd:"open",args:a=>["-a","Terminal",a]},linux:{cmd:"x-terminal-emulator",args:a=>[`--working-directory=${a}`]},win32:{cmd:"cmd.exe",args:a=>["/c","start","powershell","-NoExit","-Command",`Set-Location "${a}"`]}};async function m(a){let{repositoryPath:b,branch:f}=a;if(!b||!(0,c.isAbsolute)(b))return{success:!1,error:"repositoryPath must be an absolute path"};try{let a=(0,d.getSettings)(),c=a.environment.shellPreference,g=a.environment.terminalPreference??"system",m=f?(0,k.computeWorktreePath)(b,f):b;if(!(0,h.existsSync)(m))return{success:!1,error:`Path does not exist: ${m}`};if("system"!==g)try{let a=(0,e.resolve)("IToolInstallerService").getTerminalOpenConfig(g);if(a?.openDirectory.includes("{dir}")){let b=a.openDirectory.replace("{dir}",m);if(a.shell){let a=(0,j.spawn)(b,[],{detached:!0,stdio:"ignore",shell:!0});a.on("error",()=>void 0),a.unref()}else{let[a,...c]=b.split(/\s+/),d=(0,j.spawn)(a,c,{detached:!0,stdio:"ignore"});d.on("error",()=>void 0),d.unref()}return{success:!0,path:m,shell:c}}}catch{}let n=l[(0,i.platform)()];if(!n)return{success:!1,error:`Unsupported platform: ${(0,i.platform)()}`};let o=(0,j.spawn)(n.cmd,n.args(m),{detached:!0,stdio:"ignore"});return o.on("error",()=>void 0),o.unref(),{success:!0,path:m,shell:c}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to open shell"}}}(0,f.ensureServerEntryExports)([m]),(0,b.registerServerReference)(m,"4016673960602c25f94c5184f751d13e02e074fa17",null),a.s(["openShell",()=>m],56799);let n={darwin:{cmd:"open",args:a=>[a]},linux:{cmd:"xdg-open",args:a=>[a]},win32:{cmd:"explorer",args:a=>[a]}};async function o(a){if(!a||!(0,c.isAbsolute)(a))return{success:!1,error:"repositoryPath must be an absolute path"};try{if(!(0,h.existsSync)(a))return{success:!1,error:"Directory not found"};let b=n[(0,i.platform)()];if(!b)return{success:!1,error:`Unsupported platform: ${(0,i.platform)()}`};let d=(0,c.normalize)(a),e=(0,j.spawn)(b.cmd,b.args(d),{detached:!0,stdio:"ignore"});return e.on("error",()=>void 0),e.unref(),{success:!0,path:a}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to open folder"}}}async function p(a){if(!a?.trim())return{success:!1,error:"Repository id is required"};try{let b=(0,e.resolve)("SyncRepositoryMainUseCase");return await b.execute(a),{success:!0}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to sync repository"}}}async function q(a){let{description:b,repositoryPath:c,attachments:d,sessionId:f,approvalGates:g,push:h,openPr:i,parentId:j,fast:k,pending:l,forkAndPr:m,commitSpecs:n,ciWatchEnabled:o,enableEvidence:p,commitEvidence:q,agentType:r,model:s,rebaseBeforeBranch:t,injectSkills:u}=a;if(!b?.trim())return{error:"description is required"};if(!c?.trim())return{error:"repositoryPath is required"};let v=function(a,b){if(!b||0===b.length)return a;let c=b.map(a=>a.notes?.trim()?`@${a.path} [Note: ${a.notes.trim()}]`:`@${a.path}`).join(" ");return`${a}
2
+
3
+ ${c}`}(b,d),w={allowPrd:g?.allowPrd??!1,allowPlan:g?.allowPlan??!1,allowMerge:g?.allowMerge??!1};try{let a=(0,e.resolve)("CreateFeatureUseCase"),{feature:d,shouldSpawn:g}=await a.createRecord({userInput:v,repositoryPath:c,approvalGates:w,push:h??!1,openPr:i??!1,...j?{parentId:j}:{},description:b,...k?{fast:k}:{},...l?{pending:l}:{},...null!=m?{forkAndPr:m}:{},...null!=n?{commitSpecs:n}:{},...null!=o?{ciWatchEnabled:o}:{},...null!=p?{enableEvidence:p}:{},...null!=q?{commitEvidence:q}:{},...r?{agentType:r}:{},...s?{model:s}:{},...null!=t?{rebaseBeforeBranch:t}:{},...null!=u?{injectSkills:u}:{}});return a.initializeAndSpawn(d,{userInput:v,repositoryPath:c,approvalGates:w,push:h??!1,openPr:i??!1,...j?{parentId:j}:{},...k?{fast:k}:{},...l?{pending:l}:{},...null!=m?{forkAndPr:m}:{},...null!=n?{commitSpecs:n}:{},...null!=o?{ciWatchEnabled:o}:{},...null!=p?{enableEvidence:p}:{},...null!=q?{commitEvidence:q}:{},...r?{agentType:r}:{},...s?{model:s}:{},...f?{sessionId:f}:{},...null!=t?{rebaseBeforeBranch:t}:{},...null!=u?{injectSkills:u}:{}},g).catch(a=>{console.error("[createFeature] initializeAndSpawn failed:",a)}),{feature:d}}catch(a){return{error:a instanceof Error?a.message:"Failed to create feature"}}}(0,f.ensureServerEntryExports)([o]),(0,b.registerServerReference)(o,"400923f9640fe6f28e00edbc0f6dd7c2160103b667",null),a.s(["openFolder",()=>o],80496),(0,f.ensureServerEntryExports)([p]),(0,b.registerServerReference)(p,"408150a854d74b44d86742a8ec0121a14549c615fa",null),a.s(["syncRepository",()=>p],93225),(0,f.ensureServerEntryExports)([q]),(0,b.registerServerReference)(q,"401af8da63ab91f8b2b7a048ea27d557607d8cfe6b",null),a.s(["createFeature",()=>q],77605);let r=`\
4
+ ## Project Requirements
5
+
6
+ Build this as a **React application** using Vite as the build tool.
7
+
8
+ ### Structure
9
+ - Initialize with \`npm create vite@latest . -- --template react-ts\` scaffolding
10
+ - Organize code into clear folders: \`src/components/\`, \`src/pages/\`, \`src/assets/\`
11
+ - Use TypeScript throughout
12
+ - Include a working \`package.json\` with all dependencies
13
+
14
+ ### Design & UI
15
+ - Create a polished, production-quality interface — not a prototype
16
+ - Use modern CSS (CSS modules or Tailwind CSS) with thoughtful spacing, typography, and color
17
+ - Make it fully responsive (mobile-first)
18
+ - Add subtle micro-interactions: hover states, transitions, focus rings
19
+ - Use professional placeholder content (realistic text, not lorem ipsum)
20
+ - Pick a cohesive color palette and apply it consistently
21
+
22
+ ### Quality
23
+ - Every component should be self-contained and reusable
24
+ - Include proper HTML semantics and accessibility (ARIA labels, alt text, keyboard nav)
25
+ - The app must start successfully with \`npm install && npm run dev\`
26
+
27
+ ---
28
+
29
+ ## What to Build
30
+ `;async function s(a){let{description:b,attachments:c,agentType:d,model:f}=a;if(!b?.trim())return{error:"Description is required"};try{let g=(0,e.resolve)("CreateProjectUseCase"),{repository:h,projectPath:i}=await g.execute({description:b.trim()}),j=r+b.trim(),k=await q({description:j,repositoryPath:i,attachments:c,agentType:d,model:f,fast:a.fast});if(k.error)return{error:k.error};return{feature:k.feature,repository:h,repositoryPath:i}}catch(a){return{error:a instanceof Error?a.message:"Failed to create project"}}}async function t(a){if(!a.description?.trim())return{error:"Description is required"};try{let b=(0,e.resolve)("CreateApplicationUseCase"),c=await b.execute({description:a.description.trim(),agentType:a.agentType,modelOverride:a.modelOverride});return{application:c.application,repositoryPath:c.repositoryPath}}catch(a){return{error:a instanceof Error?a.message:"Failed to create application"}}}async function u(a){if(!a?.trim())return{error:"id is required"};try{let b=(0,e.resolve)("ArchiveFeatureUseCase");return{feature:await b.execute(a)}}catch(a){return{error:a instanceof Error?a.message:"Failed to archive feature"}}}async function v(a,b,c,d){if(!a?.trim())return{error:"id is required"};try{let f=(0,e.resolve)("DeleteFeatureUseCase"),g={};return void 0!==b&&(g.cleanup=b),void 0!==c&&(g.cascadeDelete=c),void 0!==d&&(g.closePr=d),{feature:Object.keys(g).length>0?await f.execute(a,g):await f.execute(a)}}catch(a){return{error:a instanceof Error?a.message:"Failed to delete feature"}}}async function w(a){if(!a.trim())return{resumed:!1,error:"Feature id is required"};try{let b=(0,e.resolve)("ResumeFeatureUseCase");return await b.execute(a),{resumed:!0}}catch(a){return{resumed:!1,error:a instanceof Error?a.message:"Failed to resume feature"}}}async function x(a){if(!a.trim())return{started:!1,error:"Feature id is required"};try{let b=(0,e.resolve)("StartFeatureUseCase");return await b.execute(a),{started:!0}}catch(a){return{started:!1,error:a instanceof Error?a.message:"Failed to start feature"}}}async function y(a){if(!a.trim())return{stopped:!1,error:"Feature id is required"};try{let b=(0,e.resolve)("IAgentRunRepository"),c=(await b.list()).find(b=>b.featureId===a&&"completed"!==b.status&&"failed"!==b.status&&"interrupted"!==b.status&&"cancelled"!==b.status);if(!c)return{stopped:!1,error:"No active agent run found for this feature"};let d=(0,e.resolve)("StopAgentRunUseCase"),f=await d.execute(c.id);if(!f.stopped)return{stopped:!1,error:f.reason};return{stopped:!0}}catch(a){return{stopped:!1,error:a instanceof Error?a.message:"Failed to stop agent"}}}async function z(a){if(!a?.trim())return{error:"id is required"};try{let b=(0,e.resolve)("UnarchiveFeatureUseCase");return{feature:await b.execute(a)}}catch(a){return{error:a instanceof Error?a.message:"Failed to unarchive feature"}}}async function A(a){let{path:b,name:c}=a;if(!b?.trim())return{error:"path is required"};try{let a=(0,e.resolve)("AddRepositoryUseCase");return{repository:await a.execute({path:b,name:c})}}catch(a){return{error:a instanceof Error?a.message:"Failed to add repository"}}}async function B(a){if(!a?.trim())return{success:!1,error:"id is required"};try{let b=(0,e.resolve)("DeleteRepositoryUseCase");return await b.execute(a),{success:!0}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to delete repository"}}}async function C(a){if(!a?.trim())return{error:"Application ID is required"};try{let b=(0,e.resolve)("DeleteApplicationUseCase");return await b.execute(a),{}}catch(a){return{error:a instanceof Error?a.message:"Failed to delete application"}}}async function D(a){let b=(0,e.resolve)("IFeatureRepository"),c=await b.findById(a);return c?{name:c.name,description:c.description}:null}(0,f.ensureServerEntryExports)([s]),(0,b.registerServerReference)(s,"4060a5939d31f3246447142b3363f5cbb90aa7d2fc",null),a.s(["createProjectAndFeature",()=>s],77710),(0,f.ensureServerEntryExports)([t]),(0,b.registerServerReference)(t,"40c14f58d3e10e62248855ade6abcccaad47c67b30",null),a.s(["createApplication",()=>t],45395),(0,f.ensureServerEntryExports)([u]),(0,b.registerServerReference)(u,"406b363d4cd346d1e38bb5aabbcb63f2d57c22f296",null),a.s(["archiveFeature",()=>u],10528),(0,f.ensureServerEntryExports)([v]),(0,b.registerServerReference)(v,"782aab73361a360e8a9adda66994e2bdf5ed8d8a1a",null),a.s(["deleteFeature",()=>v],50845),(0,f.ensureServerEntryExports)([w]),(0,b.registerServerReference)(w,"40c6d7e64c260e8da888f5f0f3f1af844bcaafcce5",null),a.s(["resumeFeature",()=>w],26604),(0,f.ensureServerEntryExports)([x]),(0,b.registerServerReference)(x,"401033b1d3f55b77df4ba317d2da68670a31db76db",null),a.s(["startFeature",()=>x],54723),(0,f.ensureServerEntryExports)([y]),(0,b.registerServerReference)(y,"40041f5f7059e97b058fbae7d6770da09b4d3e7346",null),a.s(["stopFeature",()=>y],18942),(0,f.ensureServerEntryExports)([z]),(0,b.registerServerReference)(z,"40e321a8ec8ca0d2fae1a22600b958641bf844f5db",null),a.s(["unarchiveFeature",()=>z],42886),(0,f.ensureServerEntryExports)([A]),(0,b.registerServerReference)(A,"40fae4dfa1d35867a447569e75a2c7822c3a0f4622",null),a.s(["addRepository",()=>A],49560),(0,f.ensureServerEntryExports)([B]),(0,b.registerServerReference)(B,"400dd47034fe0af8ebb9e33eb48fb4ae76f5185031",null),a.s(["deleteRepository",()=>B],39353),(0,f.ensureServerEntryExports)([C]),(0,b.registerServerReference)(C,"40a34aa328bf956945dde7baad41c7e0fc58944d57",null),a.s(["deleteApplication",()=>C],95072),(0,f.ensureServerEntryExports)([D]),(0,b.registerServerReference)(D,"40551df5ddc7f050b4393c1436df80f0224b56d585",null),a.s(["getFeatureMetadata",()=>D],29207)}];
2
31
 
3
32
  //# sourceMappingURL=src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../src/presentation/web/app/actions/open-ide.ts","../../../../../../../src/presentation/web/app/actions/open-shell.ts","../../../../../../../src/presentation/web/app/actions/open-folder.ts","../../../../../../../src/presentation/web/app/actions/sync-repository.ts","../../../../../../../src/presentation/web/app/actions/agent-setup-flag.ts","../../../../../../../src/presentation/web/app/actions/check-agent-auth.ts","../../../../../../../src/presentation/web/app/actions/check-tool-status.ts","../../../../../../../src/presentation/web/app/actions/archive-feature.ts","../../../../../../../src/presentation/web/app/actions/delete-feature.ts","../../../../../../../src/presentation/web/app/actions/resume-feature.ts","../../../../../../../src/presentation/web/app/actions/start-feature.ts","../../../../../../../src/presentation/web/app/actions/stop-feature.ts","../../../../../../../src/presentation/web/app/actions/unarchive-feature.ts","../../../../../../../src/presentation/web/app/actions/add-repository.ts","../../../../../../../src/presentation/web/app/actions/delete-repository.ts","../../../../../../../src/presentation/web/app/actions/get-feature-metadata.ts"],"sourcesContent":["'use server';\n\nimport { isAbsolute } from 'node:path';\nimport { getSettings } from '@shepai/core/infrastructure/services/settings.service';\nimport type { LaunchIdeUseCase } from '@shepai/core/application/use-cases/ide/launch-ide.use-case';\nimport { resolve } from '@/lib/server-container';\n\ninterface OpenIdeInput {\n repositoryPath: string;\n branch?: string;\n}\n\nexport async function openIde(\n input: OpenIdeInput\n): Promise<{ success: boolean; error?: string; editor?: string; path?: string }> {\n const { repositoryPath, branch } = input;\n\n if (!repositoryPath || !isAbsolute(repositoryPath)) {\n return { success: false, error: 'repositoryPath must be an absolute path' };\n }\n\n const settings = getSettings();\n const editor = settings.environment.defaultEditor;\n\n const useCase = resolve<LaunchIdeUseCase>('LaunchIdeUseCase');\n const result = await useCase.execute({\n editorId: editor,\n repositoryPath,\n branch,\n checkAvailability: true,\n });\n\n if (!result.ok) {\n return { success: false, error: result.message };\n }\n\n return { success: true, editor: result.editorName, path: result.worktreePath };\n}\n","'use server';\n\nimport { existsSync } from 'node:fs';\nimport { platform } from 'node:os';\nimport { isAbsolute } from 'node:path';\nimport { spawn } from 'node:child_process';\nimport { getSettings } from '@shepai/core/infrastructure/services/settings.service';\nimport { computeWorktreePath } from '@shepai/core/infrastructure/services/ide-launchers/compute-worktree-path';\nimport { resolve } from '@/lib/server-container';\nimport type { IToolInstallerService } from '@shepai/core/application/ports/output/services/tool-installer.service';\n\n// Fallback commands for the \"system\" terminal when no tool metadata entry exists.\n// Uses a record lookup instead of if/else to prevent the bundler from\n// tree-shaking platform branches at build time. Turbopack evaluates\n// os.platform() during the build and dead-code-eliminates unused branches,\n// baking in the CI platform (linux) and breaking macOS/Windows installs.\nconst SYSTEM_TERMINAL_COMMANDS: Record<string, { cmd: string; args: (path: string) => string[] }> =\n {\n darwin: { cmd: 'open', args: (p) => ['-a', 'Terminal', p] },\n linux: { cmd: 'x-terminal-emulator', args: (p) => [`--working-directory=${p}`] },\n win32: {\n cmd: 'cmd.exe',\n args: (p) => ['/c', 'start', 'powershell', '-NoExit', '-Command', `Set-Location \"${p}\"`],\n },\n };\n\ninterface OpenShellInput {\n repositoryPath: string;\n branch?: string;\n}\n\nexport async function openShell(\n input: OpenShellInput\n): Promise<{ success: boolean; error?: string; path?: string; shell?: string }> {\n const { repositoryPath, branch } = input;\n\n if (!repositoryPath || !isAbsolute(repositoryPath)) {\n return { success: false, error: 'repositoryPath must be an absolute path' };\n }\n\n try {\n const settings = getSettings();\n const shell = settings.environment.shellPreference;\n const terminalPref = settings.environment.terminalPreference ?? 'system';\n const targetPath = branch ? computeWorktreePath(repositoryPath, branch) : repositoryPath;\n\n if (!existsSync(targetPath)) {\n return { success: false, error: `Path does not exist: ${targetPath}` };\n }\n\n // Try to find the terminal in tool metadata via DI container.\n // Using DI (not a direct import from tool-metadata) ensures that\n // TOOL_METADATA is read from the correct tools/ directory path — it is loaded once\n // in the Node.js CLI bootstrap context where import.meta.url resolves correctly.\n // Direct imports of tool-metadata break in standalone production builds.\n if (terminalPref !== 'system') {\n try {\n const service = resolve<IToolInstallerService>('IToolInstallerService');\n const config = service.getTerminalOpenConfig(terminalPref);\n\n if (config?.openDirectory.includes('{dir}')) {\n const resolved = config.openDirectory.replace('{dir}', targetPath);\n\n if (config.shell) {\n const child = spawn(resolved, [], {\n detached: true,\n stdio: 'ignore',\n shell: true,\n });\n child.on('error', () => undefined);\n child.unref();\n } else {\n const [command, ...args] = resolved.split(/\\s+/);\n const child = spawn(command, args, {\n detached: true,\n stdio: 'ignore',\n });\n child.on('error', () => undefined);\n child.unref();\n }\n\n return { success: true, path: targetPath, shell };\n }\n } catch {\n // DI container not available — fall through to system terminal\n }\n }\n\n // Fallback to system terminal\n const entry = SYSTEM_TERMINAL_COMMANDS[platform()];\n if (!entry) {\n return {\n success: false,\n error: `Unsupported platform: ${platform()}`,\n };\n }\n\n const child = spawn(entry.cmd, entry.args(targetPath), {\n detached: true,\n stdio: 'ignore',\n });\n child.on('error', () => undefined); // Prevent uncaught exception on spawn failure\n child.unref();\n\n return { success: true, path: targetPath, shell };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to open shell';\n return { success: false, error: message };\n }\n}\n","'use server';\n\nimport { existsSync } from 'node:fs';\nimport { platform } from 'node:os';\nimport { isAbsolute, normalize } from 'node:path';\nimport { spawn } from 'node:child_process';\n\n// Use a record lookup instead of if/else to prevent the bundler from\n// tree-shaking platform branches at build time. Turbopack evaluates\n// os.platform() during the build and dead-code-eliminates unused branches,\n// baking in the CI platform (linux) and breaking macOS/Windows installs.\nconst FOLDER_COMMANDS: Record<string, { cmd: string; args: (path: string) => string[] }> = {\n darwin: { cmd: 'open', args: (p) => [p] },\n linux: { cmd: 'xdg-open', args: (p) => [p] },\n win32: { cmd: 'explorer', args: (p) => [p] },\n};\n\nexport async function openFolder(\n repositoryPath: string\n): Promise<{ success: boolean; error?: string; path?: string }> {\n if (!repositoryPath || !isAbsolute(repositoryPath)) {\n return { success: false, error: 'repositoryPath must be an absolute path' };\n }\n\n try {\n if (!existsSync(repositoryPath)) {\n return { success: false, error: 'Directory not found' };\n }\n\n const entry = FOLDER_COMMANDS[platform()];\n if (!entry) {\n return {\n success: false,\n error: `Unsupported platform: ${platform()}`,\n };\n }\n\n // Normalize to platform-native separators — explorer.exe on Windows\n // does not understand forward-slash paths and falls back to Documents.\n const nativePath = normalize(repositoryPath);\n\n const child = spawn(entry.cmd, entry.args(nativePath), {\n detached: true,\n stdio: 'ignore',\n });\n child.on('error', () => undefined); // Prevent uncaught exception on spawn failure\n child.unref();\n\n return { success: true, path: repositoryPath };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to open folder';\n return { success: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { SyncRepositoryMainUseCase } from '@shepai/core/application/use-cases/repositories/sync-repository-main.use-case';\n\nexport async function syncRepository(\n repositoryId: string\n): Promise<{ success: boolean; error?: string }> {\n if (!repositoryId?.trim()) {\n return { success: false, error: 'Repository id is required' };\n }\n\n try {\n const useCase = resolve<SyncRepositoryMainUseCase>('SyncRepositoryMainUseCase');\n await useCase.execute(repositoryId);\n return { success: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to sync repository';\n return { success: false, error: message };\n }\n}\n","'use server';\n\nimport { getSettings } from '@shepai/core/infrastructure/services/settings.service';\n\n/**\n * Check whether onboarding has been completed.\n * Delegates to the in-memory settings singleton (zero DB overhead).\n */\nexport async function isAgentSetupComplete(): Promise<boolean> {\n try {\n return getSettings().onboardingComplete;\n } catch {\n return false;\n }\n}\n","'use server';\n\nimport { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport { execFile } from 'node:child_process';\nimport { IS_WINDOWS } from '@shepai/core/infrastructure/platform';\nimport { getSettings } from '@shepai/core/infrastructure/services/settings.service';\nimport { resolve } from '@/lib/server-container';\nimport type { ListToolsUseCase } from '@shepai/core/application/use-cases/tools/list-tools.use-case';\n\nexport interface AgentAuthStatus {\n agentType: string;\n /** Whether the CLI tool binary is installed */\n installed: boolean;\n /** Whether credentials / auth appear valid */\n authenticated: boolean;\n /** Human-readable label for the agent */\n label: string;\n /** CLI binary name (e.g. \"claude\", \"gemini\") */\n binaryName: string | null;\n /** Shell command to install the tool (e.g. \"npm install -g @anthropic-ai/claude-code\") */\n installCommand: string | null;\n /** Instructions to authenticate if not authenticated */\n authCommand: string | null;\n}\n\nconst AGENT_LABELS: Record<string, string> = {\n 'claude-code': 'Claude Code',\n cursor: 'Cursor Agent',\n 'gemini-cli': 'Gemini CLI',\n aider: 'Aider',\n copilot: 'Copilot CLI',\n continue: 'Continue',\n dev: 'Demo',\n};\n\nconst AGENT_TOOL_MAP: Record<string, string> = {\n 'claude-code': 'claude-code',\n cursor: 'cursor-cli',\n 'gemini-cli': 'gemini-cli',\n copilot: 'copilot-cli',\n};\n\nconst AGENT_BINARY_MAP: Record<string, string> = {\n 'claude-code': 'claude',\n cursor: 'cursor-agent',\n 'gemini-cli': 'gemini',\n copilot: 'copilot',\n};\n\n/**\n * Tier 1: Instant credential/env check (~5ms, no subprocess).\n * Returns true if credentials likely exist.\n */\nfunction tier1AuthCheck(agentType: string): boolean {\n const home = homedir();\n\n switch (agentType) {\n case 'claude-code': {\n if (process.env['ANTHROPIC_API_KEY']) return true;\n if (process.env['CLAUDE_CODE_USE_BEDROCK']) return true;\n if (process.env['CLAUDE_CODE_USE_VERTEX']) return true;\n if (process.env['CLAUDE_CODE_OAUTH_TOKEN']) return true;\n const credPath = join(home, '.claude', '.credentials.json');\n return existsSync(credPath);\n }\n case 'cursor': {\n if (process.env['CURSOR_API_KEY']) return true;\n // Cursor Agent stores creds after `agent login` — check common locations\n const cursorDir = join(home, '.cursor');\n return existsSync(cursorDir);\n }\n case 'gemini-cli': {\n if (process.env['GEMINI_API_KEY']) return true;\n if (process.env['GOOGLE_API_KEY']) return true;\n if (process.env['GOOGLE_APPLICATION_CREDENTIALS']) return true;\n const accountsPath = join(home, '.gemini', 'google_accounts.json');\n return existsSync(accountsPath);\n }\n case 'copilot-cli': {\n if (process.env['GITHUB_TOKEN']) return true;\n if (process.env['GH_TOKEN']) return true;\n if (process.env['GITHUB_AUTH_TOKEN']) return true;\n // GitHub CLI stores creds after `gh auth login` — check common locations\n const ghDir = IS_WINDOWS ? join(home, '.copilot') : join(home, '.config', 'gh');\n return existsSync(ghDir);\n }\n\n default:\n // dev, aider, continue — assume no auth needed\n return true;\n }\n}\n\n/**\n * Tier 2: Subprocess verification (~200ms).\n * Only called if tier 1 passes, to confirm tokens aren't expired.\n */\nfunction tier2AuthVerify(agentType: string, binaryName: string): Promise<boolean> {\n return new Promise((resolve) => {\n let cmd: string;\n let args: string[];\n\n switch (agentType) {\n case 'claude-code':\n cmd = binaryName;\n args = ['auth', 'status'];\n break;\n case 'cursor':\n cmd = binaryName;\n args = ['status'];\n break;\n case 'copilot-cli':\n cmd = 'gh';\n args = ['auth', 'status'];\n break;\n default:\n // No tier 2 command available — trust tier 1\n resolve(true);\n return;\n }\n\n try {\n const opts = IS_WINDOWS ? { timeout: 5000, windowsHide: true } : { timeout: 5000 };\n execFile(cmd, args, opts, (error) => {\n resolve(!error);\n });\n } catch {\n resolve(false);\n }\n });\n}\n\n/**\n * Check agent tool installation + auth status.\n * Uses two-tier detection: instant file/env check, then optional subprocess verify.\n */\nexport async function checkAgentAuth(): Promise<AgentAuthStatus> {\n let agentType: string;\n try {\n agentType = getSettings().agent.type;\n } catch {\n return {\n agentType: 'unknown',\n installed: false,\n authenticated: false,\n label: 'Unknown',\n binaryName: null,\n installCommand: null,\n authCommand: null,\n };\n }\n\n const label = AGENT_LABELS[agentType] ?? agentType;\n const toolId = AGENT_TOOL_MAP[agentType] ?? null;\n const binaryName = AGENT_BINARY_MAP[agentType] ?? null;\n\n // Dev/demo agents — always good\n if (!toolId) {\n return {\n agentType,\n installed: true,\n authenticated: true,\n label,\n binaryName: null,\n installCommand: null,\n authCommand: null,\n };\n }\n\n // Check if tool is installed (also grab install command from metadata)\n let installed = false;\n let installCommand: string | null = null;\n try {\n const useCase = resolve<ListToolsUseCase>('ListToolsUseCase');\n const tools = await useCase.execute();\n const tool = tools.find((t) => t.id === toolId);\n installed = tool?.status.status === 'available';\n installCommand = tool?.installCommand ?? null;\n } catch {\n installed = false;\n }\n\n if (!installed) {\n return {\n agentType,\n installed: false,\n authenticated: false,\n label,\n binaryName,\n installCommand,\n authCommand: binaryName ? `Install ${label} first` : null,\n };\n }\n\n // Tier 1: instant file/env check\n const tier1 = tier1AuthCheck(agentType);\n\n if (!tier1) {\n return {\n agentType,\n installed: true,\n authenticated: false,\n label,\n binaryName,\n installCommand,\n authCommand: binaryName,\n };\n }\n\n // Tier 2: subprocess verify (best effort, ~200ms)\n let authenticated = true;\n if (binaryName) {\n authenticated = await tier2AuthVerify(agentType, binaryName);\n }\n\n return {\n agentType,\n installed: true,\n authenticated,\n label,\n binaryName,\n installCommand,\n authCommand: authenticated ? null : binaryName,\n };\n}\n","'use server';\n\nimport { execFile } from 'node:child_process';\nimport { IS_WINDOWS } from '@shepai/core/infrastructure/platform';\nimport { resolve } from '@/lib/server-container';\nimport type { ListToolsUseCase } from '@shepai/core/application/use-cases/tools/list-tools.use-case';\n\nexport interface ToolStatusEntry {\n installed: boolean;\n version: string | null;\n /** Platform-specific install command from tool JSON metadata */\n installCommand: string | null;\n /** Documentation/website URL */\n installUrl: string | null;\n}\n\nexport interface ToolStatusResult {\n git: ToolStatusEntry;\n gh: ToolStatusEntry;\n}\n\nfunction getVersion(\n command: string,\n args: string[]\n): Promise<{ installed: boolean; version: string | null }> {\n return new Promise((resolve) => {\n try {\n const opts = IS_WINDOWS ? { timeout: 5000, windowsHide: true } : { timeout: 5000 };\n execFile(command, args, opts, (error, stdout) => {\n if (error) {\n resolve({ installed: false, version: null });\n return;\n }\n // Extract version number from output like \"git version 2.43.0\" or \"gh version 2.40.1\"\n const match = stdout.match(/(\\d+\\.\\d+(?:\\.\\d+)?)/);\n resolve({ installed: true, version: match?.[1] ?? null });\n });\n } catch {\n resolve({ installed: false, version: null });\n }\n });\n}\n\nexport async function checkToolStatus(): Promise<ToolStatusResult> {\n // Run version checks and tool metadata lookup in parallel\n const [gitVersion, ghVersion, tools] = await Promise.all([\n getVersion('git', ['--version']),\n getVersion('gh', ['--version']),\n (async () => {\n try {\n const useCase = resolve<ListToolsUseCase>('ListToolsUseCase');\n return await useCase.execute();\n } catch {\n return [];\n }\n })(),\n ]);\n\n const gitTool = tools.find((t) => t.id === 'git');\n const ghTool = tools.find((t) => t.id === 'gh');\n\n return {\n git: {\n ...gitVersion,\n installCommand: gitTool?.installCommand ?? null,\n installUrl: gitTool?.website ?? 'https://git-scm.com',\n },\n gh: {\n ...ghVersion,\n installCommand: ghTool?.installCommand ?? null,\n installUrl: ghTool?.website ?? 'https://cli.github.com',\n },\n };\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { ArchiveFeatureUseCase } from '@shepai/core/application/use-cases/features/archive-feature.use-case';\nimport type { Feature } from '@shepai/core/domain/generated/output';\n\nexport async function archiveFeature(\n featureId: string\n): Promise<{ feature?: Feature; error?: string }> {\n if (!featureId?.trim()) {\n return { error: 'id is required' };\n }\n\n try {\n const archiveFeatureUseCase = resolve<ArchiveFeatureUseCase>('ArchiveFeatureUseCase');\n const feature = await archiveFeatureUseCase.execute(featureId);\n return { feature };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to archive feature';\n return { error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { DeleteFeatureUseCase } from '@shepai/core/application/use-cases/features/delete-feature.use-case';\nimport type { Feature } from '@shepai/core/domain/generated/output';\n\nexport async function deleteFeature(\n featureId: string,\n cleanup?: boolean,\n cascadeDelete?: boolean,\n closePr?: boolean\n): Promise<{ feature?: Feature; error?: string }> {\n if (!featureId?.trim()) {\n return { error: 'id is required' };\n }\n\n try {\n const deleteFeatureUseCase = resolve<DeleteFeatureUseCase>('DeleteFeatureUseCase');\n const options: { cleanup?: boolean; cascadeDelete?: boolean; closePr?: boolean } = {};\n if (cleanup !== undefined) options.cleanup = cleanup;\n if (cascadeDelete !== undefined) options.cascadeDelete = cascadeDelete;\n if (closePr !== undefined) options.closePr = closePr;\n const feature =\n Object.keys(options).length > 0\n ? await deleteFeatureUseCase.execute(featureId, options)\n : await deleteFeatureUseCase.execute(featureId);\n return { feature };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to delete feature';\n return { error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { ResumeFeatureUseCase } from '@shepai/core/application/use-cases/features/resume-feature.use-case';\n\nexport async function resumeFeature(\n featureId: string\n): Promise<{ resumed: boolean; error?: string }> {\n if (!featureId.trim()) {\n return { resumed: false, error: 'Feature id is required' };\n }\n\n try {\n const useCase = resolve<ResumeFeatureUseCase>('ResumeFeatureUseCase');\n await useCase.execute(featureId);\n return { resumed: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to resume feature';\n return { resumed: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { StartFeatureUseCase } from '@shepai/core/application/use-cases/features/start-feature.use-case';\n\nexport async function startFeature(\n featureId: string\n): Promise<{ started: boolean; error?: string }> {\n if (!featureId.trim()) {\n return { started: false, error: 'Feature id is required' };\n }\n\n try {\n const useCase = resolve<StartFeatureUseCase>('StartFeatureUseCase');\n await useCase.execute(featureId);\n return { started: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to start feature';\n return { started: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { StopAgentRunUseCase } from '@shepai/core/application/use-cases/agents/stop-agent-run.use-case';\nimport type { IAgentRunRepository } from '@shepai/core/application/ports/output/agents/agent-run-repository.interface';\n\nexport async function stopFeature(\n featureId: string\n): Promise<{ stopped: boolean; error?: string }> {\n if (!featureId.trim()) {\n return { stopped: false, error: 'Feature id is required' };\n }\n\n try {\n // Find the active agent run for this feature\n const runRepo = resolve<IAgentRunRepository>('IAgentRunRepository');\n const allRuns = await runRepo.list();\n const activeRun = allRuns.find(\n (r) =>\n r.featureId === featureId &&\n r.status !== 'completed' &&\n r.status !== 'failed' &&\n r.status !== 'interrupted' &&\n r.status !== 'cancelled'\n );\n\n if (!activeRun) {\n return { stopped: false, error: 'No active agent run found for this feature' };\n }\n\n const useCase = resolve<StopAgentRunUseCase>('StopAgentRunUseCase');\n const result = await useCase.execute(activeRun.id);\n\n if (!result.stopped) {\n return { stopped: false, error: result.reason };\n }\n return { stopped: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to stop agent';\n return { stopped: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { UnarchiveFeatureUseCase } from '@shepai/core/application/use-cases/features/unarchive-feature.use-case';\nimport type { Feature } from '@shepai/core/domain/generated/output';\n\nexport async function unarchiveFeature(\n featureId: string\n): Promise<{ feature?: Feature; error?: string }> {\n if (!featureId?.trim()) {\n return { error: 'id is required' };\n }\n\n try {\n const unarchiveFeatureUseCase = resolve<UnarchiveFeatureUseCase>('UnarchiveFeatureUseCase');\n const feature = await unarchiveFeatureUseCase.execute(featureId);\n return { feature };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to unarchive feature';\n return { error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { AddRepositoryUseCase } from '@shepai/core/application/use-cases/repositories/add-repository.use-case';\nimport type { Repository } from '@shepai/core/domain/generated/output';\n\ninterface AddRepositoryInput {\n path: string;\n name?: string;\n}\n\nexport async function addRepository(\n input: AddRepositoryInput\n): Promise<{ repository?: Repository; error?: string }> {\n const { path, name } = input;\n\n if (!path?.trim()) {\n return { error: 'path is required' };\n }\n\n try {\n const addRepoUseCase = resolve<AddRepositoryUseCase>('AddRepositoryUseCase');\n const repository = await addRepoUseCase.execute({ path, name });\n return { repository };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to add repository';\n return { error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { DeleteRepositoryUseCase } from '@shepai/core/application/use-cases/repositories/delete-repository.use-case';\n\nexport async function deleteRepository(\n repositoryId: string\n): Promise<{ success: boolean; error?: string }> {\n if (!repositoryId?.trim()) {\n return { success: false, error: 'id is required' };\n }\n\n try {\n const useCase = resolve<DeleteRepositoryUseCase>('DeleteRepositoryUseCase');\n await useCase.execute(repositoryId);\n return { success: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to delete repository';\n return { success: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { IFeatureRepository } from '@shepai/core/application/ports/output/repositories/feature-repository.interface';\n\n/**\n * Lightweight server action to fetch a single feature's name and description.\n * Used by the SSE effect to update node metadata after AI metadata generation\n * without a full graph reconcile (which can overwrite SSE-driven state).\n */\nexport async function getFeatureMetadata(\n featureId: string\n): Promise<{ name: string; description: string } | null> {\n const featureRepo = resolve<IFeatureRepository>('IFeatureRepository');\n const feature = await featureRepo.findById(featureId);\n if (!feature) return null;\n return { name: feature.name, description: feature.description };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../../src/presentation/web/app/actions/open-ide.ts","../../../../../../../src/presentation/web/app/actions/open-shell.ts","../../../../../../../src/presentation/web/app/actions/open-folder.ts","../../../../../../../src/presentation/web/app/actions/sync-repository.ts","../../../../../../../src/presentation/web/app/actions/compose-user-input.ts","../../../../../../../src/presentation/web/app/actions/create-feature.ts","../../../../../../../src/presentation/web/app/actions/create-project-and-feature.ts","../../../../../../../src/presentation/web/app/actions/create-application.ts","../../../../../../../src/presentation/web/app/actions/archive-feature.ts","../../../../../../../src/presentation/web/app/actions/delete-feature.ts","../../../../../../../src/presentation/web/app/actions/resume-feature.ts","../../../../../../../src/presentation/web/app/actions/start-feature.ts","../../../../../../../src/presentation/web/app/actions/stop-feature.ts","../../../../../../../src/presentation/web/app/actions/unarchive-feature.ts","../../../../../../../src/presentation/web/app/actions/add-repository.ts","../../../../../../../src/presentation/web/app/actions/delete-repository.ts","../../../../../../../src/presentation/web/app/actions/delete-application.ts","../../../../../../../src/presentation/web/app/actions/get-feature-metadata.ts"],"sourcesContent":["'use server';\n\nimport { isAbsolute } from 'node:path';\nimport { getSettings } from '@shepai/core/infrastructure/services/settings.service';\nimport type { LaunchIdeUseCase } from '@shepai/core/application/use-cases/ide/launch-ide.use-case';\nimport { resolve } from '@/lib/server-container';\n\ninterface OpenIdeInput {\n repositoryPath: string;\n branch?: string;\n}\n\nexport async function openIde(\n input: OpenIdeInput\n): Promise<{ success: boolean; error?: string; editor?: string; path?: string }> {\n const { repositoryPath, branch } = input;\n\n if (!repositoryPath || !isAbsolute(repositoryPath)) {\n return { success: false, error: 'repositoryPath must be an absolute path' };\n }\n\n const settings = getSettings();\n const editor = settings.environment.defaultEditor;\n\n const useCase = resolve<LaunchIdeUseCase>('LaunchIdeUseCase');\n const result = await useCase.execute({\n editorId: editor,\n repositoryPath,\n branch,\n checkAvailability: true,\n });\n\n if (!result.ok) {\n return { success: false, error: result.message };\n }\n\n return { success: true, editor: result.editorName, path: result.worktreePath };\n}\n","'use server';\n\nimport { existsSync } from 'node:fs';\nimport { platform } from 'node:os';\nimport { isAbsolute } from 'node:path';\nimport { spawn } from 'node:child_process';\nimport { getSettings } from '@shepai/core/infrastructure/services/settings.service';\nimport { computeWorktreePath } from '@shepai/core/infrastructure/services/ide-launchers/compute-worktree-path';\nimport { resolve } from '@/lib/server-container';\nimport type { IToolInstallerService } from '@shepai/core/application/ports/output/services/tool-installer.service';\n\n// Fallback commands for the \"system\" terminal when no tool metadata entry exists.\n// Uses a record lookup instead of if/else to prevent the bundler from\n// tree-shaking platform branches at build time. Turbopack evaluates\n// os.platform() during the build and dead-code-eliminates unused branches,\n// baking in the CI platform (linux) and breaking macOS/Windows installs.\nconst SYSTEM_TERMINAL_COMMANDS: Record<string, { cmd: string; args: (path: string) => string[] }> =\n {\n darwin: { cmd: 'open', args: (p) => ['-a', 'Terminal', p] },\n linux: { cmd: 'x-terminal-emulator', args: (p) => [`--working-directory=${p}`] },\n win32: {\n cmd: 'cmd.exe',\n args: (p) => ['/c', 'start', 'powershell', '-NoExit', '-Command', `Set-Location \"${p}\"`],\n },\n };\n\ninterface OpenShellInput {\n repositoryPath: string;\n branch?: string;\n}\n\nexport async function openShell(\n input: OpenShellInput\n): Promise<{ success: boolean; error?: string; path?: string; shell?: string }> {\n const { repositoryPath, branch } = input;\n\n if (!repositoryPath || !isAbsolute(repositoryPath)) {\n return { success: false, error: 'repositoryPath must be an absolute path' };\n }\n\n try {\n const settings = getSettings();\n const shell = settings.environment.shellPreference;\n const terminalPref = settings.environment.terminalPreference ?? 'system';\n const targetPath = branch ? computeWorktreePath(repositoryPath, branch) : repositoryPath;\n\n if (!existsSync(targetPath)) {\n return { success: false, error: `Path does not exist: ${targetPath}` };\n }\n\n // Try to find the terminal in tool metadata via DI container.\n // Using DI (not a direct import from tool-metadata) ensures that\n // TOOL_METADATA is read from the correct tools/ directory path — it is loaded once\n // in the Node.js CLI bootstrap context where import.meta.url resolves correctly.\n // Direct imports of tool-metadata break in standalone production builds.\n if (terminalPref !== 'system') {\n try {\n const service = resolve<IToolInstallerService>('IToolInstallerService');\n const config = service.getTerminalOpenConfig(terminalPref);\n\n if (config?.openDirectory.includes('{dir}')) {\n const resolved = config.openDirectory.replace('{dir}', targetPath);\n\n if (config.shell) {\n const child = spawn(resolved, [], {\n detached: true,\n stdio: 'ignore',\n shell: true,\n });\n child.on('error', () => undefined);\n child.unref();\n } else {\n const [command, ...args] = resolved.split(/\\s+/);\n const child = spawn(command, args, {\n detached: true,\n stdio: 'ignore',\n });\n child.on('error', () => undefined);\n child.unref();\n }\n\n return { success: true, path: targetPath, shell };\n }\n } catch {\n // DI container not available — fall through to system terminal\n }\n }\n\n // Fallback to system terminal\n const entry = SYSTEM_TERMINAL_COMMANDS[platform()];\n if (!entry) {\n return {\n success: false,\n error: `Unsupported platform: ${platform()}`,\n };\n }\n\n const child = spawn(entry.cmd, entry.args(targetPath), {\n detached: true,\n stdio: 'ignore',\n });\n child.on('error', () => undefined); // Prevent uncaught exception on spawn failure\n child.unref();\n\n return { success: true, path: targetPath, shell };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to open shell';\n return { success: false, error: message };\n }\n}\n","'use server';\n\nimport { existsSync } from 'node:fs';\nimport { platform } from 'node:os';\nimport { isAbsolute, normalize } from 'node:path';\nimport { spawn } from 'node:child_process';\n\n// Use a record lookup instead of if/else to prevent the bundler from\n// tree-shaking platform branches at build time. Turbopack evaluates\n// os.platform() during the build and dead-code-eliminates unused branches,\n// baking in the CI platform (linux) and breaking macOS/Windows installs.\nconst FOLDER_COMMANDS: Record<string, { cmd: string; args: (path: string) => string[] }> = {\n darwin: { cmd: 'open', args: (p) => [p] },\n linux: { cmd: 'xdg-open', args: (p) => [p] },\n win32: { cmd: 'explorer', args: (p) => [p] },\n};\n\nexport async function openFolder(\n repositoryPath: string\n): Promise<{ success: boolean; error?: string; path?: string }> {\n if (!repositoryPath || !isAbsolute(repositoryPath)) {\n return { success: false, error: 'repositoryPath must be an absolute path' };\n }\n\n try {\n if (!existsSync(repositoryPath)) {\n return { success: false, error: 'Directory not found' };\n }\n\n const entry = FOLDER_COMMANDS[platform()];\n if (!entry) {\n return {\n success: false,\n error: `Unsupported platform: ${platform()}`,\n };\n }\n\n // Normalize to platform-native separators — explorer.exe on Windows\n // does not understand forward-slash paths and falls back to Documents.\n const nativePath = normalize(repositoryPath);\n\n const child = spawn(entry.cmd, entry.args(nativePath), {\n detached: true,\n stdio: 'ignore',\n });\n child.on('error', () => undefined); // Prevent uncaught exception on spawn failure\n child.unref();\n\n return { success: true, path: repositoryPath };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to open folder';\n return { success: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { SyncRepositoryMainUseCase } from '@shepai/core/application/use-cases/repositories/sync-repository-main.use-case';\n\nexport async function syncRepository(\n repositoryId: string\n): Promise<{ success: boolean; error?: string }> {\n if (!repositoryId?.trim()) {\n return { success: false, error: 'Repository id is required' };\n }\n\n try {\n const useCase = resolve<SyncRepositoryMainUseCase>('SyncRepositoryMainUseCase');\n await useCase.execute(repositoryId);\n return { success: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to sync repository';\n return { success: false, error: message };\n }\n}\n","interface Attachment {\n path: string;\n name: string;\n notes?: string;\n}\n\nexport function composeUserInput(\n description: string,\n attachments: Attachment[] | undefined\n): string {\n if (!attachments || attachments.length === 0) {\n return description;\n }\n\n const refs = attachments\n .map((a) => (a.notes?.trim() ? `@${a.path} [Note: ${a.notes.trim()}]` : `@${a.path}`))\n .join(' ');\n return `${description}\\n\\n${refs}`;\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { CreateFeatureUseCase } from '@shepai/core/application/use-cases/features/create/create-feature.use-case';\nimport type { Feature } from '@shepai/core/domain/generated/output';\nimport { composeUserInput } from './compose-user-input';\n\ninterface Attachment {\n path: string;\n name: string;\n notes?: string;\n}\n\ninterface ApprovalGates {\n allowPrd: boolean;\n allowPlan: boolean;\n allowMerge: boolean;\n}\n\ninterface CreateFeatureInput {\n description: string;\n repositoryPath: string;\n attachments?: Attachment[];\n sessionId?: string;\n approvalGates?: {\n allowPrd: boolean;\n allowPlan: boolean;\n allowMerge?: boolean;\n };\n push?: boolean;\n openPr?: boolean;\n parentId?: string;\n /** When true, skip SDLC phases and implement directly from the prompt. */\n fast?: boolean;\n /** When true, create the feature in pending state (no agent spawned). */\n pending?: boolean;\n /** Fork repo and create PR to upstream at merge time. */\n forkAndPr?: boolean;\n /** Commit specs/evidences into the repo (default: true, auto-false when forkAndPr). */\n commitSpecs?: boolean;\n /** Enable CI watch/fix loop after push. */\n ciWatchEnabled?: boolean;\n /** Enable evidence collection after implementation. */\n enableEvidence?: boolean;\n /** Commit evidence to PR. */\n commitEvidence?: boolean;\n /** Optional agent type override for this feature run */\n agentType?: string;\n /** Optional model identifier for this feature run */\n model?: string;\n /** Sync main from remote before creating the feature branch (default: true). */\n rebaseBeforeBranch?: boolean;\n /** Inject curated skills into the feature worktree. */\n injectSkills?: boolean;\n}\n\nexport async function createFeature(\n input: CreateFeatureInput\n): Promise<{ feature?: Feature; error?: string }> {\n const {\n description,\n repositoryPath,\n attachments,\n sessionId,\n approvalGates,\n push,\n openPr,\n parentId,\n fast,\n pending,\n forkAndPr,\n commitSpecs,\n ciWatchEnabled,\n enableEvidence,\n commitEvidence,\n agentType,\n model,\n rebaseBeforeBranch,\n injectSkills,\n } = input;\n\n if (!description?.trim()) {\n return { error: 'description is required' };\n }\n\n if (!repositoryPath?.trim()) {\n return { error: 'repositoryPath is required' };\n }\n\n const userInput = composeUserInput(description, attachments);\n const gates: ApprovalGates = {\n allowPrd: approvalGates?.allowPrd ?? false,\n allowPlan: approvalGates?.allowPlan ?? false,\n allowMerge: approvalGates?.allowMerge ?? false,\n };\n\n try {\n const createFeatureUseCase = resolve<CreateFeatureUseCase>('CreateFeatureUseCase');\n\n // Phase 1 (fast): create DB record with real UUID — returns immediately\n const { feature, shouldSpawn } = await createFeatureUseCase.createRecord({\n userInput,\n repositoryPath,\n approvalGates: gates,\n push: push ?? false,\n openPr: openPr ?? false,\n ...(parentId ? { parentId } : {}),\n description,\n ...(fast ? { fast } : {}),\n ...(pending ? { pending } : {}),\n ...(forkAndPr != null ? { forkAndPr } : {}),\n ...(commitSpecs != null ? { commitSpecs } : {}),\n ...(ciWatchEnabled != null ? { ciWatchEnabled } : {}),\n ...(enableEvidence != null ? { enableEvidence } : {}),\n ...(commitEvidence != null ? { commitEvidence } : {}),\n ...(agentType ? { agentType } : {}),\n ...(model ? { model } : {}),\n ...(rebaseBeforeBranch != null ? { rebaseBeforeBranch } : {}),\n ...(injectSkills != null ? { injectSkills } : {}),\n });\n\n // Phase 2 (background): metadata generation, worktree, spec, agent spawn\n // Fire-and-forget — the UI gets the real feature ID immediately\n createFeatureUseCase\n .initializeAndSpawn(\n feature,\n {\n userInput,\n repositoryPath,\n approvalGates: gates,\n push: push ?? false,\n openPr: openPr ?? false,\n ...(parentId ? { parentId } : {}),\n ...(fast ? { fast } : {}),\n ...(pending ? { pending } : {}),\n ...(forkAndPr != null ? { forkAndPr } : {}),\n ...(commitSpecs != null ? { commitSpecs } : {}),\n ...(ciWatchEnabled != null ? { ciWatchEnabled } : {}),\n ...(enableEvidence != null ? { enableEvidence } : {}),\n ...(commitEvidence != null ? { commitEvidence } : {}),\n ...(agentType ? { agentType } : {}),\n ...(model ? { model } : {}),\n ...(sessionId ? { sessionId } : {}),\n ...(rebaseBeforeBranch != null ? { rebaseBeforeBranch } : {}),\n ...(injectSkills != null ? { injectSkills } : {}),\n },\n shouldSpawn\n )\n .catch((err: unknown) => {\n // eslint-disable-next-line no-console\n console.error('[createFeature] initializeAndSpawn failed:', err);\n });\n\n return { feature };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to create feature';\n return { error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { CreateProjectUseCase } from '@shepai/core/application/use-cases/repositories/create-project.use-case';\nimport type { Feature, Repository } from '@shepai/core/domain/generated/output';\nimport { createFeature } from './create-feature';\n\ninterface QuickFeatureInput {\n description: string;\n attachments?: { path: string; name: string; notes?: string }[];\n agentType?: string;\n model?: string;\n fast?: boolean;\n}\n\n/**\n * Default project instructions prepended to the user's description.\n * These ensure that even a vague one-liner from a non-technical user\n * results in a well-structured, runnable React application.\n */\nconst PROJECT_PREAMBLE = `\\\n## Project Requirements\n\nBuild this as a **React application** using Vite as the build tool.\n\n### Structure\n- Initialize with \\`npm create vite@latest . -- --template react-ts\\` scaffolding\n- Organize code into clear folders: \\`src/components/\\`, \\`src/pages/\\`, \\`src/assets/\\`\n- Use TypeScript throughout\n- Include a working \\`package.json\\` with all dependencies\n\n### Design & UI\n- Create a polished, production-quality interface — not a prototype\n- Use modern CSS (CSS modules or Tailwind CSS) with thoughtful spacing, typography, and color\n- Make it fully responsive (mobile-first)\n- Add subtle micro-interactions: hover states, transitions, focus rings\n- Use professional placeholder content (realistic text, not lorem ipsum)\n- Pick a cohesive color palette and apply it consistently\n\n### Quality\n- Every component should be self-contained and reusable\n- Include proper HTML semantics and accessibility (ARIA labels, alt text, keyboard nav)\n- The app must start successfully with \\`npm install && npm run dev\\`\n\n---\n\n## What to Build\n`;\n\nexport async function createProjectAndFeature(input: QuickFeatureInput): Promise<{\n feature?: Feature;\n repository?: Repository;\n repositoryPath?: string;\n error?: string;\n}> {\n const { description, attachments, agentType, model } = input;\n\n if (!description?.trim()) {\n return { error: 'Description is required' };\n }\n\n try {\n const createProject = resolve<CreateProjectUseCase>('CreateProjectUseCase');\n const { repository, projectPath } = await createProject.execute({\n description: description.trim(),\n });\n\n // Enrich the user's prompt with project-quality instructions\n const enrichedDescription = PROJECT_PREAMBLE + description.trim();\n\n const featureResult = await createFeature({\n description: enrichedDescription,\n repositoryPath: projectPath,\n attachments,\n agentType,\n model,\n fast: input.fast,\n });\n\n if (featureResult.error) {\n return { error: featureResult.error };\n }\n\n return {\n feature: featureResult.feature,\n repository,\n repositoryPath: projectPath,\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to create project';\n return { error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { CreateApplicationUseCase } from '@shepai/core/application/use-cases/applications/create-application.use-case';\nimport type { Application } from '@shepai/core/domain/generated/output';\n\ninterface CreateApplicationInput {\n description: string;\n agentType?: string;\n modelOverride?: string;\n}\n\nexport async function createApplication(\n input: CreateApplicationInput\n): Promise<{ application?: Application; repositoryPath?: string; error?: string }> {\n if (!input.description?.trim()) {\n return { error: 'Description is required' };\n }\n\n try {\n const useCase = resolve<CreateApplicationUseCase>('CreateApplicationUseCase');\n const result = await useCase.execute({\n description: input.description.trim(),\n agentType: input.agentType,\n modelOverride: input.modelOverride,\n });\n return { application: result.application, repositoryPath: result.repositoryPath };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to create application';\n return { error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { ArchiveFeatureUseCase } from '@shepai/core/application/use-cases/features/archive-feature.use-case';\nimport type { Feature } from '@shepai/core/domain/generated/output';\n\nexport async function archiveFeature(\n featureId: string\n): Promise<{ feature?: Feature; error?: string }> {\n if (!featureId?.trim()) {\n return { error: 'id is required' };\n }\n\n try {\n const archiveFeatureUseCase = resolve<ArchiveFeatureUseCase>('ArchiveFeatureUseCase');\n const feature = await archiveFeatureUseCase.execute(featureId);\n return { feature };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to archive feature';\n return { error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { DeleteFeatureUseCase } from '@shepai/core/application/use-cases/features/delete-feature.use-case';\nimport type { Feature } from '@shepai/core/domain/generated/output';\n\nexport async function deleteFeature(\n featureId: string,\n cleanup?: boolean,\n cascadeDelete?: boolean,\n closePr?: boolean\n): Promise<{ feature?: Feature; error?: string }> {\n if (!featureId?.trim()) {\n return { error: 'id is required' };\n }\n\n try {\n const deleteFeatureUseCase = resolve<DeleteFeatureUseCase>('DeleteFeatureUseCase');\n const options: { cleanup?: boolean; cascadeDelete?: boolean; closePr?: boolean } = {};\n if (cleanup !== undefined) options.cleanup = cleanup;\n if (cascadeDelete !== undefined) options.cascadeDelete = cascadeDelete;\n if (closePr !== undefined) options.closePr = closePr;\n const feature =\n Object.keys(options).length > 0\n ? await deleteFeatureUseCase.execute(featureId, options)\n : await deleteFeatureUseCase.execute(featureId);\n return { feature };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to delete feature';\n return { error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { ResumeFeatureUseCase } from '@shepai/core/application/use-cases/features/resume-feature.use-case';\n\nexport async function resumeFeature(\n featureId: string\n): Promise<{ resumed: boolean; error?: string }> {\n if (!featureId.trim()) {\n return { resumed: false, error: 'Feature id is required' };\n }\n\n try {\n const useCase = resolve<ResumeFeatureUseCase>('ResumeFeatureUseCase');\n await useCase.execute(featureId);\n return { resumed: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to resume feature';\n return { resumed: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { StartFeatureUseCase } from '@shepai/core/application/use-cases/features/start-feature.use-case';\n\nexport async function startFeature(\n featureId: string\n): Promise<{ started: boolean; error?: string }> {\n if (!featureId.trim()) {\n return { started: false, error: 'Feature id is required' };\n }\n\n try {\n const useCase = resolve<StartFeatureUseCase>('StartFeatureUseCase');\n await useCase.execute(featureId);\n return { started: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to start feature';\n return { started: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { StopAgentRunUseCase } from '@shepai/core/application/use-cases/agents/stop-agent-run.use-case';\nimport type { IAgentRunRepository } from '@shepai/core/application/ports/output/agents/agent-run-repository.interface';\n\nexport async function stopFeature(\n featureId: string\n): Promise<{ stopped: boolean; error?: string }> {\n if (!featureId.trim()) {\n return { stopped: false, error: 'Feature id is required' };\n }\n\n try {\n // Find the active agent run for this feature\n const runRepo = resolve<IAgentRunRepository>('IAgentRunRepository');\n const allRuns = await runRepo.list();\n const activeRun = allRuns.find(\n (r) =>\n r.featureId === featureId &&\n r.status !== 'completed' &&\n r.status !== 'failed' &&\n r.status !== 'interrupted' &&\n r.status !== 'cancelled'\n );\n\n if (!activeRun) {\n return { stopped: false, error: 'No active agent run found for this feature' };\n }\n\n const useCase = resolve<StopAgentRunUseCase>('StopAgentRunUseCase');\n const result = await useCase.execute(activeRun.id);\n\n if (!result.stopped) {\n return { stopped: false, error: result.reason };\n }\n return { stopped: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to stop agent';\n return { stopped: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { UnarchiveFeatureUseCase } from '@shepai/core/application/use-cases/features/unarchive-feature.use-case';\nimport type { Feature } from '@shepai/core/domain/generated/output';\n\nexport async function unarchiveFeature(\n featureId: string\n): Promise<{ feature?: Feature; error?: string }> {\n if (!featureId?.trim()) {\n return { error: 'id is required' };\n }\n\n try {\n const unarchiveFeatureUseCase = resolve<UnarchiveFeatureUseCase>('UnarchiveFeatureUseCase');\n const feature = await unarchiveFeatureUseCase.execute(featureId);\n return { feature };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to unarchive feature';\n return { error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { AddRepositoryUseCase } from '@shepai/core/application/use-cases/repositories/add-repository.use-case';\nimport type { Repository } from '@shepai/core/domain/generated/output';\n\ninterface AddRepositoryInput {\n path: string;\n name?: string;\n}\n\nexport async function addRepository(\n input: AddRepositoryInput\n): Promise<{ repository?: Repository; error?: string }> {\n const { path, name } = input;\n\n if (!path?.trim()) {\n return { error: 'path is required' };\n }\n\n try {\n const addRepoUseCase = resolve<AddRepositoryUseCase>('AddRepositoryUseCase');\n const repository = await addRepoUseCase.execute({ path, name });\n return { repository };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to add repository';\n return { error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { DeleteRepositoryUseCase } from '@shepai/core/application/use-cases/repositories/delete-repository.use-case';\n\nexport async function deleteRepository(\n repositoryId: string\n): Promise<{ success: boolean; error?: string }> {\n if (!repositoryId?.trim()) {\n return { success: false, error: 'id is required' };\n }\n\n try {\n const useCase = resolve<DeleteRepositoryUseCase>('DeleteRepositoryUseCase');\n await useCase.execute(repositoryId);\n return { success: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to delete repository';\n return { success: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { DeleteApplicationUseCase } from '@shepai/core/application/use-cases/applications/delete-application.use-case';\n\nexport async function deleteApplication(id: string): Promise<{ error?: string }> {\n if (!id?.trim()) {\n return { error: 'Application ID is required' };\n }\n\n try {\n const useCase = resolve<DeleteApplicationUseCase>('DeleteApplicationUseCase');\n await useCase.execute(id);\n return {};\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to delete application';\n return { error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { IFeatureRepository } from '@shepai/core/application/ports/output/repositories/feature-repository.interface';\n\n/**\n * Lightweight server action to fetch a single feature's name and description.\n * Used by the SSE effect to update node metadata after AI metadata generation\n * without a full graph reconcile (which can overwrite SSE-driven state).\n */\nexport async function getFeatureMetadata(\n featureId: string\n): Promise<{ name: string; description: string } | null> {\n const featureRepo = resolve<IFeatureRepository>('IFeatureRepository');\n const feature = await featureRepo.findById(featureId);\n if (!feature) return null;\n return { name: feature.name, description: feature.description };\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ module.exports=[35556,a=>{"use strict";var b=a.i(92658),c=a.i(74533),d=a.i(12057),e=a.i(12581);let f=(0,d.promisify)(c.execFile);async function g(a,b){let{stdout:c}=await f("git",b,{cwd:a,timeout:5e3});return c.trim()}async function h(a,b=8){if(!a.trim())return{commits:[],branches:[],remotes:[],tags:[],stashCount:0,currentBranch:"",diffStats:null,workingTree:{staged:0,modified:0,untracked:0},error:"Repository path is required"};let c=await Promise.allSettled([g(a,["log",`--max-count=${b}`,"--format=%H%x00%h%x00%s%x00%an%x00%cr","--no-color"]),g(a,["branch","--show-current"]),g(a,["branch","--sort=-committerdate","--format=%(HEAD)%(refname:short)%00%(committerdate:relative)","--no-color"]),g(a,["remote","-v"]),g(a,["tag","--sort=-creatordate","-l","--format=%(refname:short)"]),g(a,["stash","list"]),g(a,["status","--porcelain"]),g(a,["diff","--shortstat"])]),d=a=>"fulfilled"===c[a].status?c[a].value:"",e=d(0).split("\n").filter(Boolean).map(a=>{let[b,c,d,e,f]=a.split("\0");return{hash:b,shortHash:c,subject:d,author:e,relativeDate:f}}),f=d(1);e.length>0&&f&&(e[0].branch=f);let i=d(2).split("\n").filter(Boolean).slice(0,10).map(a=>{let b=a.startsWith("*"),[c,d]=(b?a.slice(1):a).split("\0");return{name:c.trim(),isCurrent:b,lastCommitDate:d?.trim()??""}}),j=new Map;d(3).split("\n").filter(Boolean).forEach(a=>{let b=a.match(/^(\S+)\s+(\S+)\s+\(fetch\)/);if(b){let a=b[2].replace(/\/\/[^@]+@/,"//").replace(/x-access-token:[^@]+@/,"");j.set(b[1],a)}});let k=Array.from(j,([a,b])=>({name:a,url:b})),l=d(4).split("\n").filter(Boolean).slice(0,5),m=d(5).split("\n").filter(Boolean).length,n=d(6).split("\n").filter(Boolean),o={staged:0,modified:0,untracked:0};for(let a of n){let b=a[0],c=a[1];"?"===b&&"?"===c?o.untracked++:" "!==b&&"?"!==b&&o.staged++," "!==c&&"?"!==c&&o.modified++}let p=null,q=d(7);if(q){let a=q.match(/(\d+) file/),b=q.match(/(\d+) insertion/),c=q.match(/(\d+) deletion/);p={filesChanged:a?parseInt(a[1],10):0,insertions:b?parseInt(b[1],10):0,deletions:c?parseInt(c[1],10):0}}return{commits:e,branches:i,remotes:k,tags:l,stashCount:m,currentBranch:f,diffStats:p,workingTree:o}}async function i(a,b=10){let c=await h(a,b);return{entries:c.commits,error:c.error}}(0,e.ensureServerEntryExports)([h,i]),(0,b.registerServerReference)(h,"600d638de8297dae89186fc2eaa6aa3bf7611976ce",null),(0,b.registerServerReference)(i,"60519f6acef88aaba03fb348426fb4c760fbbc7ce5",null),a.s(["getGitRepoInfo",()=>h])},90322,a=>{"use strict";var b=a.i(23504),c=a.i(8115),d=a.i(27900),e=a.i(12513),f=a.i(73101),g=a.i(54775),h=a.i(65324),i=a.i(33841),j=a.i(46646),k=a.i(68670),l=a.i(85321),m=a.i(84095),n=a.i(56799),o=a.i(80496),p=a.i(93225),q=a.i(94691),r=a.i(77710),s=a.i(45395),t=a.i(10528),u=a.i(50845),v=a.i(26604),w=a.i(54723),x=a.i(18942),y=a.i(42886),z=a.i(49560),A=a.i(39353),B=a.i(95072),C=a.i(29207),D=a.i(35556);a.s([],37429),a.i(37429),a.s(["000b97268c22b98c0e028bdb1235edc8dd6c7d211e",()=>c.checkAllAgentsStatus,"007666ac9610821f806d256e53fdd8bebb791a8a6d",()=>g.listGitHubOrganizations,"009487c7dee1a0626219196cb795852e6ceeb4e942",()=>e.pickFolder,"00e76ece8b4306542cf5639b355ab517212d7b96e5",()=>b.getAllAgentModels,"40041f5f7059e97b058fbae7d6770da09b4d3e7346",()=>x.stopFeature,"400923f9640fe6f28e00edbc0f6dd7c2160103b667",()=>o.openFolder,"4009c68dbb3ea62759de25bb414049bbce7a8d4005",()=>m.openIde,"400dd47034fe0af8ebb9e33eb48fb4ae76f5185031",()=>A.deleteRepository,"401033b1d3f55b77df4ba317d2da68670a31db76db",()=>w.startFeature,"4016673960602c25f94c5184f751d13e02e074fa17",()=>n.openShell,"40219a408522b8b36890b324708c5c7d0e1d45671e",()=>k.stopDeployment,"404466ac68516001cc4d4019755aaf488c841c6b22",()=>q.getDeploymentLogs,"40551df5ddc7f050b4393c1436df80f0224b56d585",()=>C.getFeatureMetadata,"40569cafedbc09c78c1ceb1686f83d0ee302732392",()=>l.getDeploymentStatus,"4060a5939d31f3246447142b3363f5cbb90aa7d2fc",()=>r.createProjectAndFeature,"406b363d4cd346d1e38bb5aabbcb63f2d57c22f296",()=>t.archiveFeature,"407105802eb51c65cac8874dcb3c49996a742b2cd9",()=>h.importGitHubRepository,"408150a854d74b44d86742a8ec0121a14549c615fa",()=>p.syncRepository,"40894ac562da702e856a33ab2eba43a8244cd0f44f",()=>f.listGitHubRepositories,"40a34aa328bf956945dde7baad41c7e0fc58944d57",()=>B.deleteApplication,"40c14f58d3e10e62248855ade6abcccaad47c67b30",()=>s.createApplication,"40c6d7e64c260e8da888f5f0f3f1af844bcaafcce5",()=>v.resumeFeature,"40de2324761d8020ab72bf75cc368f1ef877b4bee6",()=>i.deployFeature,"40e321a8ec8ca0d2fae1a22600b958641bf844f5db",()=>y.unarchiveFeature,"40ea2c84d337a8e2756140351fe8b22e698ef54f45",()=>j.deployRepository,"40fae4dfa1d35867a447569e75a2c7822c3a0f4622",()=>z.addRepository,"600d638de8297dae89186fc2eaa6aa3bf7611976ce",()=>D.getGitRepoInfo,"60e1c20e7b242bf7a1a7356621f64cf3e3a82dedc2",()=>d.updateAgentAndModel,"782aab73361a360e8a9adda66994e2bdf5ed8d8a1a",()=>u.deleteFeature],90322)}];
2
+
3
+ //# sourceMappingURL=src_presentation_web_b3759f18._.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../src/presentation/web/app/actions/get-git-log.ts","../../../../../../../src/presentation/web/.next-internal/server/app/%28dashboard%29/%40drawer/repository/%5BrepositoryId%5D/page/actions.js%20%28server%20actions%20loader%29"],"sourcesContent":["'use server';\n\nimport { execFile } from 'node:child_process';\nimport { promisify } from 'node:util';\n\nconst execFileAsync = promisify(execFile);\n\nasync function git(cwd: string, args: string[]): Promise<string> {\n const { stdout } = await execFileAsync('git', args, { cwd, timeout: 5000 });\n return stdout.trim();\n}\n\nexport interface GitLogEntry {\n hash: string;\n shortHash: string;\n subject: string;\n author: string;\n relativeDate: string;\n branch?: string;\n}\n\nexport interface GitBranchInfo {\n name: string;\n isCurrent: boolean;\n lastCommitDate: string;\n}\n\nexport interface GitRemoteInfo {\n name: string;\n url: string;\n}\n\nexport interface GitWorkingTreeStatus {\n staged: number;\n modified: number;\n untracked: number;\n}\n\nexport interface GitDiffStats {\n filesChanged: number;\n insertions: number;\n deletions: number;\n}\n\nexport interface GitRepoInfo {\n commits: GitLogEntry[];\n branches: GitBranchInfo[];\n remotes: GitRemoteInfo[];\n tags: string[];\n stashCount: number;\n currentBranch: string;\n diffStats: GitDiffStats | null;\n workingTree: GitWorkingTreeStatus;\n error?: string;\n}\n\nexport async function getGitRepoInfo(\n repositoryPath: string,\n commitLimit = 8\n): Promise<GitRepoInfo> {\n const empty: GitRepoInfo = {\n commits: [],\n branches: [],\n remotes: [],\n tags: [],\n stashCount: 0,\n currentBranch: '',\n diffStats: null,\n workingTree: { staged: 0, modified: 0, untracked: 0 },\n };\n\n if (!repositoryPath.trim()) {\n return { ...empty, error: 'Repository path is required' };\n }\n\n const results = await Promise.allSettled([\n // 0: commits\n git(repositoryPath, [\n 'log',\n `--max-count=${commitLimit}`,\n '--format=%H%x00%h%x00%s%x00%an%x00%cr',\n '--no-color',\n ]),\n // 1: current branch\n git(repositoryPath, ['branch', '--show-current']),\n // 2: branches with dates\n git(repositoryPath, [\n 'branch',\n '--sort=-committerdate',\n '--format=%(HEAD)%(refname:short)%00%(committerdate:relative)',\n '--no-color',\n ]),\n // 3: remotes\n git(repositoryPath, ['remote', '-v']),\n // 4: tags (recent 5)\n git(repositoryPath, ['tag', '--sort=-creatordate', '-l', '--format=%(refname:short)']),\n // 5: stash count\n git(repositoryPath, ['stash', 'list']),\n // 6: working tree status\n git(repositoryPath, ['status', '--porcelain']),\n // 7: diff stats (uncommitted)\n git(repositoryPath, ['diff', '--shortstat']),\n ]);\n\n const val = (i: number) => (results[i].status === 'fulfilled' ? results[i].value : '');\n\n // Parse commits\n const commits: GitLogEntry[] = val(0)\n .split('\\n')\n .filter(Boolean)\n .map((line: string) => {\n const [hash, shortHash, subject, author, relativeDate] = line.split('\\0');\n return { hash, shortHash, subject, author, relativeDate };\n });\n\n const currentBranch = val(1);\n if (commits.length > 0 && currentBranch) {\n commits[0].branch = currentBranch;\n }\n\n // Parse branches\n const branches: GitBranchInfo[] = val(2)\n .split('\\n')\n .filter(Boolean)\n .slice(0, 10)\n .map((line: string) => {\n const isCurrent = line.startsWith('*');\n const clean = isCurrent ? line.slice(1) : line;\n const [name, lastCommitDate] = clean.split('\\0');\n return { name: name.trim(), isCurrent, lastCommitDate: lastCommitDate?.trim() ?? '' };\n });\n\n // Parse remotes (dedup fetch/push)\n const remoteMap = new Map<string, string>();\n val(3)\n .split('\\n')\n .filter(Boolean)\n .forEach((line: string) => {\n const match = line.match(/^(\\S+)\\s+(\\S+)\\s+\\(fetch\\)/);\n if (match) {\n // Strip credentials/tokens from URL before sending to client\n const sanitized = match[2].replace(/\\/\\/[^@]+@/, '//').replace(/x-access-token:[^@]+@/, '');\n remoteMap.set(match[1], sanitized);\n }\n });\n const remotes: GitRemoteInfo[] = Array.from(remoteMap, ([name, url]) => ({ name, url }));\n\n // Parse tags (top 5)\n const tags = val(4).split('\\n').filter(Boolean).slice(0, 5);\n\n // Stash count\n const stashCount = val(5).split('\\n').filter(Boolean).length;\n\n // Working tree status\n const statusLines = val(6).split('\\n').filter(Boolean);\n const workingTree: GitWorkingTreeStatus = { staged: 0, modified: 0, untracked: 0 };\n for (const line of statusLines) {\n const x = line[0];\n const y = line[1];\n if (x === '?' && y === '?') workingTree.untracked++;\n else if (x !== ' ' && x !== '?') workingTree.staged++;\n if (y !== ' ' && y !== '?') workingTree.modified++;\n }\n\n // Diff stats\n let diffStats: GitDiffStats | null = null;\n const diffLine = val(7);\n if (diffLine) {\n const files = diffLine.match(/(\\d+) file/);\n const ins = diffLine.match(/(\\d+) insertion/);\n const del = diffLine.match(/(\\d+) deletion/);\n diffStats = {\n filesChanged: files ? parseInt(files[1], 10) : 0,\n insertions: ins ? parseInt(ins[1], 10) : 0,\n deletions: del ? parseInt(del[1], 10) : 0,\n };\n }\n\n return { commits, branches, remotes, tags, stashCount, currentBranch, diffStats, workingTree };\n}\n\n// Keep backward compat\nexport async function getGitLog(\n repositoryPath: string,\n limit = 10\n): Promise<{ entries: GitLogEntry[]; error?: string }> {\n const info = await getGitRepoInfo(repositoryPath, limit);\n return { entries: info.commits, error: info.error };\n}\n","export {getAllAgentModels as '006bc1e402f8227543541ef0b32eae38d48451b177'} from 'ACTIONS_MODULE0'\nexport {updateAgentAndModel as '60ee7cd212b9b72a55135dcf12e34dea5eeef0121f'} from 'ACTIONS_MODULE1'\nexport {pickFolder as '0007c2e0526aa58dd3af65f12572ddbce953dd5771'} from 'ACTIONS_MODULE2'\nexport {listGitHubRepositories as '40e4025e4c9932faa0ebda58ad29d3404b30c6f65e'} from 'ACTIONS_MODULE3'\nexport {listGitHubOrganizations as '0069abc5d93b0b63b576bb972cd2fd15444f242de8'} from 'ACTIONS_MODULE4'\nexport {importGitHubRepository as '40b5cd6b473cc57e91de3be3314647e1313abd789e'} from 'ACTIONS_MODULE5'\nexport {deployFeature as '403e9c92d89fd8b3205c2243ba69034f1e87834884'} from 'ACTIONS_MODULE6'\nexport {deployRepository as '4055afdd273830ed017154c61bbba972935f755664'} from 'ACTIONS_MODULE7'\nexport {stopDeployment as '401900c9334ca0aa2b2c20cc90f3e800e9a4a19f2b'} from 'ACTIONS_MODULE8'\nexport {getDeploymentStatus as '40c62234a418db717dffd8588d8e2c4593542a6ca2'} from 'ACTIONS_MODULE9'\nexport {openIde as '400dae91adbbff2e8b5c44046c21aecdd5d8850241'} from 'ACTIONS_MODULE10'\nexport {openShell as '403f5ab09b9c95436fe15ec25711617c0408289a26'} from 'ACTIONS_MODULE11'\nexport {openFolder as '40ecfcd01dd3d4e4bf2f96d126a4be4523a3fa3d3d'} from 'ACTIONS_MODULE12'\nexport {syncRepository as '40b76283b4700f45aab7b775043497c52e0e6d98e9'} from 'ACTIONS_MODULE13'\nexport {getDeploymentLogs as '40468dc71b0e6684979d39fb438f9f04af1f2ff31c'} from 'ACTIONS_MODULE14'\nexport {isAgentSetupComplete as '0064a55b67441efb0f64e484060d6e0477e2a2a466'} from 'ACTIONS_MODULE15'\nexport {checkAgentAuth as '00146118be55e1a72383915a7d426fd0c54b22b9ef'} from 'ACTIONS_MODULE16'\nexport {checkToolStatus as '00fb6c5462fd26f0a6d83d293a57e2fd51d9190a8b'} from 'ACTIONS_MODULE17'\nexport {archiveFeature as '406dc07f82561f7a972a3b8750db8e394217e51066'} from 'ACTIONS_MODULE18'\nexport {deleteFeature as '78befba1876563f867eef16cee6aeac7fef90ccdfe'} from 'ACTIONS_MODULE19'\nexport {resumeFeature as '405cbca883738a7b0ce854b4e905ee1ca2d89c6334'} from 'ACTIONS_MODULE20'\nexport {startFeature as '40f8270a4e6612b146fd7e32e3e791fd45cd221b30'} from 'ACTIONS_MODULE21'\nexport {stopFeature as '400c1cf04acf1c3473d16250f7bd269e680bf8ea80'} from 'ACTIONS_MODULE22'\nexport {unarchiveFeature as '40013af0f67efe51afffb12222afbe0dc207278440'} from 'ACTIONS_MODULE23'\nexport {addRepository as '405b9ad7429a7d8f371b2f2e5fe9a819b53108072a'} from 'ACTIONS_MODULE24'\nexport {deleteRepository as '4042e73e21d267f537a7bf7fb3379f1de269622318'} from 'ACTIONS_MODULE25'\nexport {getFeatureMetadata as '408faca8892e77d11f363deec4c2d5303f13fd25db'} from 'ACTIONS_MODULE26'\nexport {getGitRepoInfo as '60876a4d59d35b2d7b9957a2478c16b91c5b333b0b'} from 'ACTIONS_MODULE27'\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../../src/presentation/web/app/actions/get-git-log.ts","../../../../../../../src/presentation/web/.next-internal/server/app/%28dashboard%29/%40drawer/repository/%5BrepositoryId%5D/page/actions.js%20%28server%20actions%20loader%29"],"sourcesContent":["'use server';\n\nimport { execFile } from 'node:child_process';\nimport { promisify } from 'node:util';\n\nconst execFileAsync = promisify(execFile);\n\nasync function git(cwd: string, args: string[]): Promise<string> {\n const { stdout } = await execFileAsync('git', args, { cwd, timeout: 5000 });\n return stdout.trim();\n}\n\nexport interface GitLogEntry {\n hash: string;\n shortHash: string;\n subject: string;\n author: string;\n relativeDate: string;\n branch?: string;\n}\n\nexport interface GitBranchInfo {\n name: string;\n isCurrent: boolean;\n lastCommitDate: string;\n}\n\nexport interface GitRemoteInfo {\n name: string;\n url: string;\n}\n\nexport interface GitWorkingTreeStatus {\n staged: number;\n modified: number;\n untracked: number;\n}\n\nexport interface GitDiffStats {\n filesChanged: number;\n insertions: number;\n deletions: number;\n}\n\nexport interface GitRepoInfo {\n commits: GitLogEntry[];\n branches: GitBranchInfo[];\n remotes: GitRemoteInfo[];\n tags: string[];\n stashCount: number;\n currentBranch: string;\n diffStats: GitDiffStats | null;\n workingTree: GitWorkingTreeStatus;\n error?: string;\n}\n\nexport async function getGitRepoInfo(\n repositoryPath: string,\n commitLimit = 8\n): Promise<GitRepoInfo> {\n const empty: GitRepoInfo = {\n commits: [],\n branches: [],\n remotes: [],\n tags: [],\n stashCount: 0,\n currentBranch: '',\n diffStats: null,\n workingTree: { staged: 0, modified: 0, untracked: 0 },\n };\n\n if (!repositoryPath.trim()) {\n return { ...empty, error: 'Repository path is required' };\n }\n\n const results = await Promise.allSettled([\n // 0: commits\n git(repositoryPath, [\n 'log',\n `--max-count=${commitLimit}`,\n '--format=%H%x00%h%x00%s%x00%an%x00%cr',\n '--no-color',\n ]),\n // 1: current branch\n git(repositoryPath, ['branch', '--show-current']),\n // 2: branches with dates\n git(repositoryPath, [\n 'branch',\n '--sort=-committerdate',\n '--format=%(HEAD)%(refname:short)%00%(committerdate:relative)',\n '--no-color',\n ]),\n // 3: remotes\n git(repositoryPath, ['remote', '-v']),\n // 4: tags (recent 5)\n git(repositoryPath, ['tag', '--sort=-creatordate', '-l', '--format=%(refname:short)']),\n // 5: stash count\n git(repositoryPath, ['stash', 'list']),\n // 6: working tree status\n git(repositoryPath, ['status', '--porcelain']),\n // 7: diff stats (uncommitted)\n git(repositoryPath, ['diff', '--shortstat']),\n ]);\n\n const val = (i: number) => (results[i].status === 'fulfilled' ? results[i].value : '');\n\n // Parse commits\n const commits: GitLogEntry[] = val(0)\n .split('\\n')\n .filter(Boolean)\n .map((line: string) => {\n const [hash, shortHash, subject, author, relativeDate] = line.split('\\0');\n return { hash, shortHash, subject, author, relativeDate };\n });\n\n const currentBranch = val(1);\n if (commits.length > 0 && currentBranch) {\n commits[0].branch = currentBranch;\n }\n\n // Parse branches\n const branches: GitBranchInfo[] = val(2)\n .split('\\n')\n .filter(Boolean)\n .slice(0, 10)\n .map((line: string) => {\n const isCurrent = line.startsWith('*');\n const clean = isCurrent ? line.slice(1) : line;\n const [name, lastCommitDate] = clean.split('\\0');\n return { name: name.trim(), isCurrent, lastCommitDate: lastCommitDate?.trim() ?? '' };\n });\n\n // Parse remotes (dedup fetch/push)\n const remoteMap = new Map<string, string>();\n val(3)\n .split('\\n')\n .filter(Boolean)\n .forEach((line: string) => {\n const match = line.match(/^(\\S+)\\s+(\\S+)\\s+\\(fetch\\)/);\n if (match) {\n // Strip credentials/tokens from URL before sending to client\n const sanitized = match[2].replace(/\\/\\/[^@]+@/, '//').replace(/x-access-token:[^@]+@/, '');\n remoteMap.set(match[1], sanitized);\n }\n });\n const remotes: GitRemoteInfo[] = Array.from(remoteMap, ([name, url]) => ({ name, url }));\n\n // Parse tags (top 5)\n const tags = val(4).split('\\n').filter(Boolean).slice(0, 5);\n\n // Stash count\n const stashCount = val(5).split('\\n').filter(Boolean).length;\n\n // Working tree status\n const statusLines = val(6).split('\\n').filter(Boolean);\n const workingTree: GitWorkingTreeStatus = { staged: 0, modified: 0, untracked: 0 };\n for (const line of statusLines) {\n const x = line[0];\n const y = line[1];\n if (x === '?' && y === '?') workingTree.untracked++;\n else if (x !== ' ' && x !== '?') workingTree.staged++;\n if (y !== ' ' && y !== '?') workingTree.modified++;\n }\n\n // Diff stats\n let diffStats: GitDiffStats | null = null;\n const diffLine = val(7);\n if (diffLine) {\n const files = diffLine.match(/(\\d+) file/);\n const ins = diffLine.match(/(\\d+) insertion/);\n const del = diffLine.match(/(\\d+) deletion/);\n diffStats = {\n filesChanged: files ? parseInt(files[1], 10) : 0,\n insertions: ins ? parseInt(ins[1], 10) : 0,\n deletions: del ? parseInt(del[1], 10) : 0,\n };\n }\n\n return { commits, branches, remotes, tags, stashCount, currentBranch, diffStats, workingTree };\n}\n\n// Keep backward compat\nexport async function getGitLog(\n repositoryPath: string,\n limit = 10\n): Promise<{ entries: GitLogEntry[]; error?: string }> {\n const info = await getGitRepoInfo(repositoryPath, limit);\n return { entries: info.commits, error: info.error };\n}\n","export {getAllAgentModels as '00e76ece8b4306542cf5639b355ab517212d7b96e5'} from 'ACTIONS_MODULE0'\nexport {checkAllAgentsStatus as '000b97268c22b98c0e028bdb1235edc8dd6c7d211e'} from 'ACTIONS_MODULE1'\nexport {updateAgentAndModel as '60e1c20e7b242bf7a1a7356621f64cf3e3a82dedc2'} from 'ACTIONS_MODULE2'\nexport {pickFolder as '009487c7dee1a0626219196cb795852e6ceeb4e942'} from 'ACTIONS_MODULE3'\nexport {listGitHubRepositories as '40894ac562da702e856a33ab2eba43a8244cd0f44f'} from 'ACTIONS_MODULE4'\nexport {listGitHubOrganizations as '007666ac9610821f806d256e53fdd8bebb791a8a6d'} from 'ACTIONS_MODULE5'\nexport {importGitHubRepository as '407105802eb51c65cac8874dcb3c49996a742b2cd9'} from 'ACTIONS_MODULE6'\nexport {deployFeature as '40de2324761d8020ab72bf75cc368f1ef877b4bee6'} from 'ACTIONS_MODULE7'\nexport {deployRepository as '40ea2c84d337a8e2756140351fe8b22e698ef54f45'} from 'ACTIONS_MODULE8'\nexport {stopDeployment as '40219a408522b8b36890b324708c5c7d0e1d45671e'} from 'ACTIONS_MODULE9'\nexport {getDeploymentStatus as '40569cafedbc09c78c1ceb1686f83d0ee302732392'} from 'ACTIONS_MODULE10'\nexport {openIde as '4009c68dbb3ea62759de25bb414049bbce7a8d4005'} from 'ACTIONS_MODULE11'\nexport {openShell as '4016673960602c25f94c5184f751d13e02e074fa17'} from 'ACTIONS_MODULE12'\nexport {openFolder as '400923f9640fe6f28e00edbc0f6dd7c2160103b667'} from 'ACTIONS_MODULE13'\nexport {syncRepository as '408150a854d74b44d86742a8ec0121a14549c615fa'} from 'ACTIONS_MODULE14'\nexport {getDeploymentLogs as '404466ac68516001cc4d4019755aaf488c841c6b22'} from 'ACTIONS_MODULE15'\nexport {createProjectAndFeature as '4060a5939d31f3246447142b3363f5cbb90aa7d2fc'} from 'ACTIONS_MODULE16'\nexport {createApplication as '40c14f58d3e10e62248855ade6abcccaad47c67b30'} from 'ACTIONS_MODULE17'\nexport {archiveFeature as '406b363d4cd346d1e38bb5aabbcb63f2d57c22f296'} from 'ACTIONS_MODULE18'\nexport {deleteFeature as '782aab73361a360e8a9adda66994e2bdf5ed8d8a1a'} from 'ACTIONS_MODULE19'\nexport {resumeFeature as '40c6d7e64c260e8da888f5f0f3f1af844bcaafcce5'} from 'ACTIONS_MODULE20'\nexport {startFeature as '401033b1d3f55b77df4ba317d2da68670a31db76db'} from 'ACTIONS_MODULE21'\nexport {stopFeature as '40041f5f7059e97b058fbae7d6770da09b4d3e7346'} from 'ACTIONS_MODULE22'\nexport {unarchiveFeature as '40e321a8ec8ca0d2fae1a22600b958641bf844f5db'} from 'ACTIONS_MODULE23'\nexport {addRepository as '40fae4dfa1d35867a447569e75a2c7822c3a0f4622'} from 'ACTIONS_MODULE24'\nexport {deleteRepository as '400dd47034fe0af8ebb9e33eb48fb4ae76f5185031'} from 'ACTIONS_MODULE25'\nexport {deleteApplication as '40a34aa328bf956945dde7baad41c7e0fc58944d57'} from 'ACTIONS_MODULE26'\nexport {getFeatureMetadata as '40551df5ddc7f050b4393c1436df80f0224b56d585'} from 'ACTIONS_MODULE27'\nexport {getGitRepoInfo as '600d638de8297dae89186fc2eaa6aa3bf7611976ce'} from 'ACTIONS_MODULE28'\n"],"names":[],"mappings":"wDAEA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,oBAEA,IAAM,EAAgB,CAAA,EAAA,EAAA,SAAA,AAAS,EAAC,EAAA,QAAQ,EAExC,eAAe,EAAI,CAAW,CAAE,CAAc,EAC5C,GAAM,QAAE,CAAM,CAAE,CAAG,MAAM,EAAc,MAAO,EAAM,KAAE,EAAK,QAAS,GAAK,GACzE,OAAO,EAAO,IAAI,EACpB,CA8CO,eAAe,EACpB,CAAsB,CACtB,EAAc,CAAC,EAaf,GAAI,CAAC,EAAe,IAAI,GACtB,CAD0B,KACnB,CAXP,QAAS,EAAE,CACX,SAAU,EAAE,CACZ,QAAS,EAAE,CACX,KAAM,EAAE,CACR,WAAY,EACZ,cAAe,GACf,UAAW,KACX,YAAa,CAAE,OAAQ,EAAG,SAAU,EAAG,UAAW,CAAE,EAIjC,MAAO,6BAA8B,EAG1D,IAAM,EAAU,MAAM,QAAQ,UAAU,CAAC,CAEvC,EAAI,EAAgB,CAClB,MACA,CAAC,YAAY,EAAE,EAAA,CAAa,CAC5B,wCACA,aACD,EAED,EAAI,EAAgB,CAAC,SAAU,iBAAiB,EAEhD,EAAI,EAAgB,CAClB,SACA,wBACA,+DACA,aACD,EAED,EAAI,EAAgB,CAAC,SAAU,KAAK,EAEpC,EAAI,EAAgB,CAAC,MAAO,sBAAuB,KAAM,4BAA4B,EAErF,EAAI,EAAgB,CAAC,QAAS,OAAO,EAErC,EAAI,EAAgB,CAAC,SAAU,cAAc,EAE7C,EAAI,EAAgB,CAAC,OAAQ,cAAc,EAC5C,EAEK,EAAM,AAAC,GAAqC,cAAtB,CAAO,CAAC,EAAE,CAAC,MAAM,CAAmB,CAAO,CAAC,EAAE,CAAC,KAAK,CAAG,GAG7E,EAAyB,EAAI,GAChC,KAAK,CAAC,MACN,MAAM,CAAC,SACP,GAAG,CAAC,AAAC,IACJ,GAAM,CAAC,EAAM,EAAW,EAAS,EAAQ,EAAa,CAAG,EAAK,KAAK,CAAC,MACpE,MAAO,MAAE,YAAM,UAAW,SAAS,eAAQ,CAAa,CAC1D,GAEI,EAAgB,EAAI,GACtB,EAAQ,MAAM,CAAG,GAAK,IACxB,CAAO,CAAC,EAAE,CAAC,MAAM,AADsB,CACnB,CAAA,EAItB,IAAM,EAA4B,EAAI,GACnC,KAAK,CAAC,MACN,MAAM,CAAC,SACP,KAAK,CAAC,EAAG,IACT,GAAG,CAAC,AAAC,IACJ,IAAM,EAAY,EAAK,UAAU,CAAC,KAE5B,CAAC,EAAM,EAAe,CAAG,CADjB,EAAY,EAAK,KAAK,CAAC,GAAK,CAAA,EACL,KAAK,CAAC,MAC3C,MAAO,CAAE,KAAM,EAAK,IAAI,GAAI,YAAW,eAAgB,GAAgB,QAAU,EAAG,CACtF,GAGI,EAAY,IAAI,IACtB,EAAI,GACD,KAAK,CAAC,MACN,MAAM,CAAC,SACP,OAAO,CAAC,AAAC,IACR,IAAM,EAAQ,EAAK,KAAK,CAAC,8BACzB,GAAI,EAAO,CAET,IAAM,EAAY,CAAK,CAAC,EAAE,CAAC,OAAO,CAAC,aAAc,MAAM,OAAO,CAAC,wBAAyB,IACxF,EAAU,GAAG,CAAC,CAAK,CAAC,EAAE,CAAE,EAC1B,CACF,GACF,IAAM,EAA2B,MAAM,IAAI,CAAC,EAAW,CAAC,CAAC,EAAM,EAAI,GAAK,CAAC,CAAE,WAAM,EAAI,CAAC,EAGhF,EAAO,EAAI,GAAG,KAAK,CAAC,MAAM,MAAM,CAAC,SAAS,KAAK,CAAC,EAAG,GAGnD,EAAa,EAAI,GAAG,KAAK,CAAC,MAAM,MAAM,CAAC,SAAS,MAAM,CAGtD,EAAc,EAAI,GAAG,KAAK,CAAC,MAAM,MAAM,CAAC,SACxC,EAAoC,CAAE,OAAQ,EAAG,SAAU,EAAG,UAAW,CAAE,EACjF,IAAK,IAAM,KAAQ,EAAa,CAC9B,IAAM,EAAI,CAAI,CAAC,EAAE,CACX,EAAI,CAAI,CAAC,EAAE,CACP,MAAN,GAAmB,MAAN,EAAW,EAAY,SAAS,GAClC,MAAN,GAAmB,MAAN,GAAW,EAAY,MAAM,GACzC,MAAN,GAAa,AAAM,SAAK,EAAY,QAAQ,EAClD,CAGA,IAAI,EAAiC,KAC/B,EAAW,EAAI,GACrB,GAAI,EAAU,CACZ,IAAM,EAAQ,EAAS,KAAK,CAAC,cACvB,EAAM,EAAS,KAAK,CAAC,mBACrB,EAAM,EAAS,KAAK,CAAC,kBAC3B,EAAY,CACV,aAAc,EAAQ,SAAS,CAAK,CAAC,EAAE,CAAE,IAAM,EAC/C,WAAY,EAAM,SAAS,CAAG,CAAC,EAAE,CAAE,IAAM,EACzC,UAAW,EAAM,SAAS,CAAG,CAAC,EAAE,CAAE,IAAM,CAC1C,CACF,CAEA,MAAO,SAAE,WAAS,UAAU,OAAS,aAAM,gBAAY,YAAe,EAAW,aAAY,CAC/F,CAGO,eAAe,EACpB,CAAsB,CACtB,EAAQ,EAAE,EAEV,IAAM,EAAO,MAAM,EAAe,EAAgB,GAClD,MAAO,CAAE,QAAS,EAAK,OAAO,CAAE,MAAO,EAAK,KAAK,AAAC,CACpD,iCApIsB,EA8HA,IA9HA,CAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,6CAAA,MA8HA,CAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,6CAAA,4DCtLtB,IAAA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,MACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA"}
@@ -0,0 +1,3 @@
1
+ module.exports=[35556,a=>{"use strict";var b=a.i(92658),c=a.i(74533),d=a.i(12057),e=a.i(12581);let f=(0,d.promisify)(c.execFile);async function g(a,b){let{stdout:c}=await f("git",b,{cwd:a,timeout:5e3});return c.trim()}async function h(a,b=8){if(!a.trim())return{commits:[],branches:[],remotes:[],tags:[],stashCount:0,currentBranch:"",diffStats:null,workingTree:{staged:0,modified:0,untracked:0},error:"Repository path is required"};let c=await Promise.allSettled([g(a,["log",`--max-count=${b}`,"--format=%H%x00%h%x00%s%x00%an%x00%cr","--no-color"]),g(a,["branch","--show-current"]),g(a,["branch","--sort=-committerdate","--format=%(HEAD)%(refname:short)%00%(committerdate:relative)","--no-color"]),g(a,["remote","-v"]),g(a,["tag","--sort=-creatordate","-l","--format=%(refname:short)"]),g(a,["stash","list"]),g(a,["status","--porcelain"]),g(a,["diff","--shortstat"])]),d=a=>"fulfilled"===c[a].status?c[a].value:"",e=d(0).split("\n").filter(Boolean).map(a=>{let[b,c,d,e,f]=a.split("\0");return{hash:b,shortHash:c,subject:d,author:e,relativeDate:f}}),f=d(1);e.length>0&&f&&(e[0].branch=f);let i=d(2).split("\n").filter(Boolean).slice(0,10).map(a=>{let b=a.startsWith("*"),[c,d]=(b?a.slice(1):a).split("\0");return{name:c.trim(),isCurrent:b,lastCommitDate:d?.trim()??""}}),j=new Map;d(3).split("\n").filter(Boolean).forEach(a=>{let b=a.match(/^(\S+)\s+(\S+)\s+\(fetch\)/);if(b){let a=b[2].replace(/\/\/[^@]+@/,"//").replace(/x-access-token:[^@]+@/,"");j.set(b[1],a)}});let k=Array.from(j,([a,b])=>({name:a,url:b})),l=d(4).split("\n").filter(Boolean).slice(0,5),m=d(5).split("\n").filter(Boolean).length,n=d(6).split("\n").filter(Boolean),o={staged:0,modified:0,untracked:0};for(let a of n){let b=a[0],c=a[1];"?"===b&&"?"===c?o.untracked++:" "!==b&&"?"!==b&&o.staged++," "!==c&&"?"!==c&&o.modified++}let p=null,q=d(7);if(q){let a=q.match(/(\d+) file/),b=q.match(/(\d+) insertion/),c=q.match(/(\d+) deletion/);p={filesChanged:a?parseInt(a[1],10):0,insertions:b?parseInt(b[1],10):0,deletions:c?parseInt(c[1],10):0}}return{commits:e,branches:i,remotes:k,tags:l,stashCount:m,currentBranch:f,diffStats:p,workingTree:o}}async function i(a,b=10){let c=await h(a,b);return{entries:c.commits,error:c.error}}(0,e.ensureServerEntryExports)([h,i]),(0,b.registerServerReference)(h,"600d638de8297dae89186fc2eaa6aa3bf7611976ce",null),(0,b.registerServerReference)(i,"60519f6acef88aaba03fb348426fb4c760fbbc7ce5",null),a.s(["getGitRepoInfo",()=>h])},39343,a=>{"use strict";var b=a.i(23504),c=a.i(8115),d=a.i(27900),e=a.i(12513),f=a.i(73101),g=a.i(54775),h=a.i(65324),i=a.i(33841),j=a.i(46646),k=a.i(68670),l=a.i(85321),m=a.i(84095),n=a.i(56799),o=a.i(80496),p=a.i(93225),q=a.i(94691),r=a.i(77710),s=a.i(45395),t=a.i(10528),u=a.i(50845),v=a.i(26604),w=a.i(54723),x=a.i(18942),y=a.i(42886),z=a.i(49560),A=a.i(39353),B=a.i(95072),C=a.i(29207),D=a.i(35556);a.s([],71865),a.i(71865),a.s(["000b97268c22b98c0e028bdb1235edc8dd6c7d211e",()=>c.checkAllAgentsStatus,"007666ac9610821f806d256e53fdd8bebb791a8a6d",()=>g.listGitHubOrganizations,"009487c7dee1a0626219196cb795852e6ceeb4e942",()=>e.pickFolder,"00e76ece8b4306542cf5639b355ab517212d7b96e5",()=>b.getAllAgentModels,"40041f5f7059e97b058fbae7d6770da09b4d3e7346",()=>x.stopFeature,"400923f9640fe6f28e00edbc0f6dd7c2160103b667",()=>o.openFolder,"4009c68dbb3ea62759de25bb414049bbce7a8d4005",()=>m.openIde,"400dd47034fe0af8ebb9e33eb48fb4ae76f5185031",()=>A.deleteRepository,"401033b1d3f55b77df4ba317d2da68670a31db76db",()=>w.startFeature,"4016673960602c25f94c5184f751d13e02e074fa17",()=>n.openShell,"40219a408522b8b36890b324708c5c7d0e1d45671e",()=>k.stopDeployment,"404466ac68516001cc4d4019755aaf488c841c6b22",()=>q.getDeploymentLogs,"40551df5ddc7f050b4393c1436df80f0224b56d585",()=>C.getFeatureMetadata,"40569cafedbc09c78c1ceb1686f83d0ee302732392",()=>l.getDeploymentStatus,"4060a5939d31f3246447142b3363f5cbb90aa7d2fc",()=>r.createProjectAndFeature,"406b363d4cd346d1e38bb5aabbcb63f2d57c22f296",()=>t.archiveFeature,"407105802eb51c65cac8874dcb3c49996a742b2cd9",()=>h.importGitHubRepository,"408150a854d74b44d86742a8ec0121a14549c615fa",()=>p.syncRepository,"40894ac562da702e856a33ab2eba43a8244cd0f44f",()=>f.listGitHubRepositories,"40a34aa328bf956945dde7baad41c7e0fc58944d57",()=>B.deleteApplication,"40c14f58d3e10e62248855ade6abcccaad47c67b30",()=>s.createApplication,"40c6d7e64c260e8da888f5f0f3f1af844bcaafcce5",()=>v.resumeFeature,"40de2324761d8020ab72bf75cc368f1ef877b4bee6",()=>i.deployFeature,"40e321a8ec8ca0d2fae1a22600b958641bf844f5db",()=>y.unarchiveFeature,"40ea2c84d337a8e2756140351fe8b22e698ef54f45",()=>j.deployRepository,"40fae4dfa1d35867a447569e75a2c7822c3a0f4622",()=>z.addRepository,"600d638de8297dae89186fc2eaa6aa3bf7611976ce",()=>D.getGitRepoInfo,"60e1c20e7b242bf7a1a7356621f64cf3e3a82dedc2",()=>d.updateAgentAndModel,"782aab73361a360e8a9adda66994e2bdf5ed8d8a1a",()=>u.deleteFeature],39343)}];
2
+
3
+ //# sourceMappingURL=src_presentation_web_bceeb973._.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../src/presentation/web/app/actions/get-git-log.ts","../../../../../../../src/presentation/web/.next-internal/server/app/%28dashboard%29/%40drawer/repository/%5BrepositoryId%5D/%5Btab%5D/page/actions.js%20%28server%20actions%20loader%29"],"sourcesContent":["'use server';\n\nimport { execFile } from 'node:child_process';\nimport { promisify } from 'node:util';\n\nconst execFileAsync = promisify(execFile);\n\nasync function git(cwd: string, args: string[]): Promise<string> {\n const { stdout } = await execFileAsync('git', args, { cwd, timeout: 5000 });\n return stdout.trim();\n}\n\nexport interface GitLogEntry {\n hash: string;\n shortHash: string;\n subject: string;\n author: string;\n relativeDate: string;\n branch?: string;\n}\n\nexport interface GitBranchInfo {\n name: string;\n isCurrent: boolean;\n lastCommitDate: string;\n}\n\nexport interface GitRemoteInfo {\n name: string;\n url: string;\n}\n\nexport interface GitWorkingTreeStatus {\n staged: number;\n modified: number;\n untracked: number;\n}\n\nexport interface GitDiffStats {\n filesChanged: number;\n insertions: number;\n deletions: number;\n}\n\nexport interface GitRepoInfo {\n commits: GitLogEntry[];\n branches: GitBranchInfo[];\n remotes: GitRemoteInfo[];\n tags: string[];\n stashCount: number;\n currentBranch: string;\n diffStats: GitDiffStats | null;\n workingTree: GitWorkingTreeStatus;\n error?: string;\n}\n\nexport async function getGitRepoInfo(\n repositoryPath: string,\n commitLimit = 8\n): Promise<GitRepoInfo> {\n const empty: GitRepoInfo = {\n commits: [],\n branches: [],\n remotes: [],\n tags: [],\n stashCount: 0,\n currentBranch: '',\n diffStats: null,\n workingTree: { staged: 0, modified: 0, untracked: 0 },\n };\n\n if (!repositoryPath.trim()) {\n return { ...empty, error: 'Repository path is required' };\n }\n\n const results = await Promise.allSettled([\n // 0: commits\n git(repositoryPath, [\n 'log',\n `--max-count=${commitLimit}`,\n '--format=%H%x00%h%x00%s%x00%an%x00%cr',\n '--no-color',\n ]),\n // 1: current branch\n git(repositoryPath, ['branch', '--show-current']),\n // 2: branches with dates\n git(repositoryPath, [\n 'branch',\n '--sort=-committerdate',\n '--format=%(HEAD)%(refname:short)%00%(committerdate:relative)',\n '--no-color',\n ]),\n // 3: remotes\n git(repositoryPath, ['remote', '-v']),\n // 4: tags (recent 5)\n git(repositoryPath, ['tag', '--sort=-creatordate', '-l', '--format=%(refname:short)']),\n // 5: stash count\n git(repositoryPath, ['stash', 'list']),\n // 6: working tree status\n git(repositoryPath, ['status', '--porcelain']),\n // 7: diff stats (uncommitted)\n git(repositoryPath, ['diff', '--shortstat']),\n ]);\n\n const val = (i: number) => (results[i].status === 'fulfilled' ? results[i].value : '');\n\n // Parse commits\n const commits: GitLogEntry[] = val(0)\n .split('\\n')\n .filter(Boolean)\n .map((line: string) => {\n const [hash, shortHash, subject, author, relativeDate] = line.split('\\0');\n return { hash, shortHash, subject, author, relativeDate };\n });\n\n const currentBranch = val(1);\n if (commits.length > 0 && currentBranch) {\n commits[0].branch = currentBranch;\n }\n\n // Parse branches\n const branches: GitBranchInfo[] = val(2)\n .split('\\n')\n .filter(Boolean)\n .slice(0, 10)\n .map((line: string) => {\n const isCurrent = line.startsWith('*');\n const clean = isCurrent ? line.slice(1) : line;\n const [name, lastCommitDate] = clean.split('\\0');\n return { name: name.trim(), isCurrent, lastCommitDate: lastCommitDate?.trim() ?? '' };\n });\n\n // Parse remotes (dedup fetch/push)\n const remoteMap = new Map<string, string>();\n val(3)\n .split('\\n')\n .filter(Boolean)\n .forEach((line: string) => {\n const match = line.match(/^(\\S+)\\s+(\\S+)\\s+\\(fetch\\)/);\n if (match) {\n // Strip credentials/tokens from URL before sending to client\n const sanitized = match[2].replace(/\\/\\/[^@]+@/, '//').replace(/x-access-token:[^@]+@/, '');\n remoteMap.set(match[1], sanitized);\n }\n });\n const remotes: GitRemoteInfo[] = Array.from(remoteMap, ([name, url]) => ({ name, url }));\n\n // Parse tags (top 5)\n const tags = val(4).split('\\n').filter(Boolean).slice(0, 5);\n\n // Stash count\n const stashCount = val(5).split('\\n').filter(Boolean).length;\n\n // Working tree status\n const statusLines = val(6).split('\\n').filter(Boolean);\n const workingTree: GitWorkingTreeStatus = { staged: 0, modified: 0, untracked: 0 };\n for (const line of statusLines) {\n const x = line[0];\n const y = line[1];\n if (x === '?' && y === '?') workingTree.untracked++;\n else if (x !== ' ' && x !== '?') workingTree.staged++;\n if (y !== ' ' && y !== '?') workingTree.modified++;\n }\n\n // Diff stats\n let diffStats: GitDiffStats | null = null;\n const diffLine = val(7);\n if (diffLine) {\n const files = diffLine.match(/(\\d+) file/);\n const ins = diffLine.match(/(\\d+) insertion/);\n const del = diffLine.match(/(\\d+) deletion/);\n diffStats = {\n filesChanged: files ? parseInt(files[1], 10) : 0,\n insertions: ins ? parseInt(ins[1], 10) : 0,\n deletions: del ? parseInt(del[1], 10) : 0,\n };\n }\n\n return { commits, branches, remotes, tags, stashCount, currentBranch, diffStats, workingTree };\n}\n\n// Keep backward compat\nexport async function getGitLog(\n repositoryPath: string,\n limit = 10\n): Promise<{ entries: GitLogEntry[]; error?: string }> {\n const info = await getGitRepoInfo(repositoryPath, limit);\n return { entries: info.commits, error: info.error };\n}\n","export {getAllAgentModels as '006bc1e402f8227543541ef0b32eae38d48451b177'} from 'ACTIONS_MODULE0'\nexport {updateAgentAndModel as '60ee7cd212b9b72a55135dcf12e34dea5eeef0121f'} from 'ACTIONS_MODULE1'\nexport {pickFolder as '0007c2e0526aa58dd3af65f12572ddbce953dd5771'} from 'ACTIONS_MODULE2'\nexport {listGitHubRepositories as '40e4025e4c9932faa0ebda58ad29d3404b30c6f65e'} from 'ACTIONS_MODULE3'\nexport {listGitHubOrganizations as '0069abc5d93b0b63b576bb972cd2fd15444f242de8'} from 'ACTIONS_MODULE4'\nexport {importGitHubRepository as '40b5cd6b473cc57e91de3be3314647e1313abd789e'} from 'ACTIONS_MODULE5'\nexport {deployFeature as '403e9c92d89fd8b3205c2243ba69034f1e87834884'} from 'ACTIONS_MODULE6'\nexport {deployRepository as '4055afdd273830ed017154c61bbba972935f755664'} from 'ACTIONS_MODULE7'\nexport {stopDeployment as '401900c9334ca0aa2b2c20cc90f3e800e9a4a19f2b'} from 'ACTIONS_MODULE8'\nexport {getDeploymentStatus as '40c62234a418db717dffd8588d8e2c4593542a6ca2'} from 'ACTIONS_MODULE9'\nexport {openIde as '400dae91adbbff2e8b5c44046c21aecdd5d8850241'} from 'ACTIONS_MODULE10'\nexport {openShell as '403f5ab09b9c95436fe15ec25711617c0408289a26'} from 'ACTIONS_MODULE11'\nexport {openFolder as '40ecfcd01dd3d4e4bf2f96d126a4be4523a3fa3d3d'} from 'ACTIONS_MODULE12'\nexport {syncRepository as '40b76283b4700f45aab7b775043497c52e0e6d98e9'} from 'ACTIONS_MODULE13'\nexport {getDeploymentLogs as '40468dc71b0e6684979d39fb438f9f04af1f2ff31c'} from 'ACTIONS_MODULE14'\nexport {isAgentSetupComplete as '0064a55b67441efb0f64e484060d6e0477e2a2a466'} from 'ACTIONS_MODULE15'\nexport {checkAgentAuth as '00146118be55e1a72383915a7d426fd0c54b22b9ef'} from 'ACTIONS_MODULE16'\nexport {checkToolStatus as '00fb6c5462fd26f0a6d83d293a57e2fd51d9190a8b'} from 'ACTIONS_MODULE17'\nexport {archiveFeature as '406dc07f82561f7a972a3b8750db8e394217e51066'} from 'ACTIONS_MODULE18'\nexport {deleteFeature as '78befba1876563f867eef16cee6aeac7fef90ccdfe'} from 'ACTIONS_MODULE19'\nexport {resumeFeature as '405cbca883738a7b0ce854b4e905ee1ca2d89c6334'} from 'ACTIONS_MODULE20'\nexport {startFeature as '40f8270a4e6612b146fd7e32e3e791fd45cd221b30'} from 'ACTIONS_MODULE21'\nexport {stopFeature as '400c1cf04acf1c3473d16250f7bd269e680bf8ea80'} from 'ACTIONS_MODULE22'\nexport {unarchiveFeature as '40013af0f67efe51afffb12222afbe0dc207278440'} from 'ACTIONS_MODULE23'\nexport {addRepository as '405b9ad7429a7d8f371b2f2e5fe9a819b53108072a'} from 'ACTIONS_MODULE24'\nexport {deleteRepository as '4042e73e21d267f537a7bf7fb3379f1de269622318'} from 'ACTIONS_MODULE25'\nexport {getFeatureMetadata as '408faca8892e77d11f363deec4c2d5303f13fd25db'} from 'ACTIONS_MODULE26'\nexport {getGitRepoInfo as '60876a4d59d35b2d7b9957a2478c16b91c5b333b0b'} from 'ACTIONS_MODULE27'\n"],"names":[],"mappings":"wDAEA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,oBAEA,IAAM,EAAgB,CAAA,EAAA,EAAA,SAAA,AAAS,EAAC,EAAA,QAAQ,EAExC,eAAe,EAAI,CAAW,CAAE,CAAc,EAC5C,GAAM,QAAE,CAAM,CAAE,CAAG,MAAM,EAAc,MAAO,EAAM,KAAE,EAAK,QAAS,GAAK,GACzE,OAAO,EAAO,IAAI,EACpB,CA8CO,eAAe,EACpB,CAAsB,CACtB,EAAc,CAAC,EAaf,GAAI,CAAC,EAAe,IAAI,GACtB,CAD0B,KACnB,CAXP,QAAS,EAAE,CACX,SAAU,EAAE,CACZ,QAAS,EAAE,CACX,KAAM,EAAE,CACR,WAAY,EACZ,cAAe,GACf,UAAW,KACX,YAAa,CAAE,OAAQ,EAAG,SAAU,EAAG,UAAW,CAAE,EAIjC,MAAO,6BAA8B,EAG1D,IAAM,EAAU,MAAM,QAAQ,UAAU,CAAC,CAEvC,EAAI,EAAgB,CAClB,MACA,CAAC,YAAY,EAAE,EAAA,CAAa,CAC5B,wCACA,aACD,EAED,EAAI,EAAgB,CAAC,SAAU,iBAAiB,EAEhD,EAAI,EAAgB,CAClB,SACA,wBACA,+DACA,aACD,EAED,EAAI,EAAgB,CAAC,SAAU,KAAK,EAEpC,EAAI,EAAgB,CAAC,MAAO,sBAAuB,KAAM,4BAA4B,EAErF,EAAI,EAAgB,CAAC,QAAS,OAAO,EAErC,EAAI,EAAgB,CAAC,SAAU,cAAc,EAE7C,EAAI,EAAgB,CAAC,OAAQ,cAAc,EAC5C,EAEK,EAAM,AAAC,GAAqC,cAAtB,CAAO,CAAC,EAAE,CAAC,MAAM,CAAmB,CAAO,CAAC,EAAE,CAAC,KAAK,CAAG,GAG7E,EAAyB,EAAI,GAChC,KAAK,CAAC,MACN,MAAM,CAAC,SACP,GAAG,CAAC,AAAC,IACJ,GAAM,CAAC,EAAM,EAAW,EAAS,EAAQ,EAAa,CAAG,EAAK,KAAK,CAAC,MACpE,MAAO,MAAE,YAAM,UAAW,SAAS,eAAQ,CAAa,CAC1D,GAEI,EAAgB,EAAI,GACtB,EAAQ,MAAM,CAAG,GAAK,IACxB,CAAO,CAAC,EAAE,CAAC,MAAM,AADsB,CACnB,CAAA,EAItB,IAAM,EAA4B,EAAI,GACnC,KAAK,CAAC,MACN,MAAM,CAAC,SACP,KAAK,CAAC,EAAG,IACT,GAAG,CAAC,AAAC,IACJ,IAAM,EAAY,EAAK,UAAU,CAAC,KAE5B,CAAC,EAAM,EAAe,CAAG,CADjB,EAAY,EAAK,KAAK,CAAC,GAAK,CAAA,EACL,KAAK,CAAC,MAC3C,MAAO,CAAE,KAAM,EAAK,IAAI,GAAI,YAAW,eAAgB,GAAgB,QAAU,EAAG,CACtF,GAGI,EAAY,IAAI,IACtB,EAAI,GACD,KAAK,CAAC,MACN,MAAM,CAAC,SACP,OAAO,CAAC,AAAC,IACR,IAAM,EAAQ,EAAK,KAAK,CAAC,8BACzB,GAAI,EAAO,CAET,IAAM,EAAY,CAAK,CAAC,EAAE,CAAC,OAAO,CAAC,aAAc,MAAM,OAAO,CAAC,wBAAyB,IACxF,EAAU,GAAG,CAAC,CAAK,CAAC,EAAE,CAAE,EAC1B,CACF,GACF,IAAM,EAA2B,MAAM,IAAI,CAAC,EAAW,CAAC,CAAC,EAAM,EAAI,GAAK,AAAC,OAAE,MAAM,EAAI,CAAC,EAGhF,EAAO,EAAI,GAAG,KAAK,CAAC,MAAM,MAAM,CAAC,SAAS,KAAK,CAAC,EAAG,GAGnD,EAAa,EAAI,GAAG,KAAK,CAAC,MAAM,MAAM,CAAC,SAAS,MAAM,CAGtD,EAAc,EAAI,GAAG,KAAK,CAAC,MAAM,MAAM,CAAC,SACxC,EAAoC,CAAE,OAAQ,EAAG,SAAU,EAAG,UAAW,CAAE,EACjF,IAAK,IAAM,KAAQ,EAAa,CAC9B,IAAM,EAAI,CAAI,CAAC,EAAE,CACX,EAAI,CAAI,CAAC,EAAE,CACP,MAAN,GAAmB,MAAN,EAAW,EAAY,SAAS,GAClC,MAAN,GAAmB,MAAN,GAAW,EAAY,MAAM,GAC/C,AAAM,SAAa,MAAN,GAAW,EAAY,QAAQ,EAClD,CAGA,IAAI,EAAiC,KAC/B,EAAW,EAAI,GACrB,GAAI,EAAU,CACZ,IAAM,EAAQ,EAAS,KAAK,CAAC,cACvB,EAAM,EAAS,KAAK,CAAC,mBACrB,EAAM,EAAS,KAAK,CAAC,kBAC3B,EAAY,CACV,aAAc,EAAQ,SAAS,CAAK,CAAC,EAAE,CAAE,IAAM,EAC/C,WAAY,EAAM,SAAS,CAAG,CAAC,EAAE,CAAE,IAAM,EACzC,UAAW,EAAM,SAAS,CAAG,CAAC,EAAE,CAAE,IAAM,CAC1C,CACF,CAEA,MAAO,SAAE,WAAS,UAAU,EAAS,OAAM,2BAAY,YAAe,cAAW,CAAY,CAC/F,CAGO,eAAe,EACpB,CAAsB,CACtB,EAAQ,EAAE,EAEV,IAAM,EAAO,MAAM,EAAe,EAAgB,GAClD,MAAO,CAAE,QAAS,EAAK,OAAO,CAAE,MAAO,EAAK,KAAK,AAAC,CACpD,iCApIsB,EA8HA,IA9HA,CAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,6CAAA,MA8HA,CAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,6CAAA,2DCtLtB,IAAA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,MACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA"}
1
+ {"version":3,"sources":["../../../../../../../src/presentation/web/app/actions/get-git-log.ts","../../../../../../../src/presentation/web/.next-internal/server/app/%28dashboard%29/%40drawer/repository/%5BrepositoryId%5D/%5Btab%5D/page/actions.js%20%28server%20actions%20loader%29"],"sourcesContent":["'use server';\n\nimport { execFile } from 'node:child_process';\nimport { promisify } from 'node:util';\n\nconst execFileAsync = promisify(execFile);\n\nasync function git(cwd: string, args: string[]): Promise<string> {\n const { stdout } = await execFileAsync('git', args, { cwd, timeout: 5000 });\n return stdout.trim();\n}\n\nexport interface GitLogEntry {\n hash: string;\n shortHash: string;\n subject: string;\n author: string;\n relativeDate: string;\n branch?: string;\n}\n\nexport interface GitBranchInfo {\n name: string;\n isCurrent: boolean;\n lastCommitDate: string;\n}\n\nexport interface GitRemoteInfo {\n name: string;\n url: string;\n}\n\nexport interface GitWorkingTreeStatus {\n staged: number;\n modified: number;\n untracked: number;\n}\n\nexport interface GitDiffStats {\n filesChanged: number;\n insertions: number;\n deletions: number;\n}\n\nexport interface GitRepoInfo {\n commits: GitLogEntry[];\n branches: GitBranchInfo[];\n remotes: GitRemoteInfo[];\n tags: string[];\n stashCount: number;\n currentBranch: string;\n diffStats: GitDiffStats | null;\n workingTree: GitWorkingTreeStatus;\n error?: string;\n}\n\nexport async function getGitRepoInfo(\n repositoryPath: string,\n commitLimit = 8\n): Promise<GitRepoInfo> {\n const empty: GitRepoInfo = {\n commits: [],\n branches: [],\n remotes: [],\n tags: [],\n stashCount: 0,\n currentBranch: '',\n diffStats: null,\n workingTree: { staged: 0, modified: 0, untracked: 0 },\n };\n\n if (!repositoryPath.trim()) {\n return { ...empty, error: 'Repository path is required' };\n }\n\n const results = await Promise.allSettled([\n // 0: commits\n git(repositoryPath, [\n 'log',\n `--max-count=${commitLimit}`,\n '--format=%H%x00%h%x00%s%x00%an%x00%cr',\n '--no-color',\n ]),\n // 1: current branch\n git(repositoryPath, ['branch', '--show-current']),\n // 2: branches with dates\n git(repositoryPath, [\n 'branch',\n '--sort=-committerdate',\n '--format=%(HEAD)%(refname:short)%00%(committerdate:relative)',\n '--no-color',\n ]),\n // 3: remotes\n git(repositoryPath, ['remote', '-v']),\n // 4: tags (recent 5)\n git(repositoryPath, ['tag', '--sort=-creatordate', '-l', '--format=%(refname:short)']),\n // 5: stash count\n git(repositoryPath, ['stash', 'list']),\n // 6: working tree status\n git(repositoryPath, ['status', '--porcelain']),\n // 7: diff stats (uncommitted)\n git(repositoryPath, ['diff', '--shortstat']),\n ]);\n\n const val = (i: number) => (results[i].status === 'fulfilled' ? results[i].value : '');\n\n // Parse commits\n const commits: GitLogEntry[] = val(0)\n .split('\\n')\n .filter(Boolean)\n .map((line: string) => {\n const [hash, shortHash, subject, author, relativeDate] = line.split('\\0');\n return { hash, shortHash, subject, author, relativeDate };\n });\n\n const currentBranch = val(1);\n if (commits.length > 0 && currentBranch) {\n commits[0].branch = currentBranch;\n }\n\n // Parse branches\n const branches: GitBranchInfo[] = val(2)\n .split('\\n')\n .filter(Boolean)\n .slice(0, 10)\n .map((line: string) => {\n const isCurrent = line.startsWith('*');\n const clean = isCurrent ? line.slice(1) : line;\n const [name, lastCommitDate] = clean.split('\\0');\n return { name: name.trim(), isCurrent, lastCommitDate: lastCommitDate?.trim() ?? '' };\n });\n\n // Parse remotes (dedup fetch/push)\n const remoteMap = new Map<string, string>();\n val(3)\n .split('\\n')\n .filter(Boolean)\n .forEach((line: string) => {\n const match = line.match(/^(\\S+)\\s+(\\S+)\\s+\\(fetch\\)/);\n if (match) {\n // Strip credentials/tokens from URL before sending to client\n const sanitized = match[2].replace(/\\/\\/[^@]+@/, '//').replace(/x-access-token:[^@]+@/, '');\n remoteMap.set(match[1], sanitized);\n }\n });\n const remotes: GitRemoteInfo[] = Array.from(remoteMap, ([name, url]) => ({ name, url }));\n\n // Parse tags (top 5)\n const tags = val(4).split('\\n').filter(Boolean).slice(0, 5);\n\n // Stash count\n const stashCount = val(5).split('\\n').filter(Boolean).length;\n\n // Working tree status\n const statusLines = val(6).split('\\n').filter(Boolean);\n const workingTree: GitWorkingTreeStatus = { staged: 0, modified: 0, untracked: 0 };\n for (const line of statusLines) {\n const x = line[0];\n const y = line[1];\n if (x === '?' && y === '?') workingTree.untracked++;\n else if (x !== ' ' && x !== '?') workingTree.staged++;\n if (y !== ' ' && y !== '?') workingTree.modified++;\n }\n\n // Diff stats\n let diffStats: GitDiffStats | null = null;\n const diffLine = val(7);\n if (diffLine) {\n const files = diffLine.match(/(\\d+) file/);\n const ins = diffLine.match(/(\\d+) insertion/);\n const del = diffLine.match(/(\\d+) deletion/);\n diffStats = {\n filesChanged: files ? parseInt(files[1], 10) : 0,\n insertions: ins ? parseInt(ins[1], 10) : 0,\n deletions: del ? parseInt(del[1], 10) : 0,\n };\n }\n\n return { commits, branches, remotes, tags, stashCount, currentBranch, diffStats, workingTree };\n}\n\n// Keep backward compat\nexport async function getGitLog(\n repositoryPath: string,\n limit = 10\n): Promise<{ entries: GitLogEntry[]; error?: string }> {\n const info = await getGitRepoInfo(repositoryPath, limit);\n return { entries: info.commits, error: info.error };\n}\n","export {getAllAgentModels as '00e76ece8b4306542cf5639b355ab517212d7b96e5'} from 'ACTIONS_MODULE0'\nexport {checkAllAgentsStatus as '000b97268c22b98c0e028bdb1235edc8dd6c7d211e'} from 'ACTIONS_MODULE1'\nexport {updateAgentAndModel as '60e1c20e7b242bf7a1a7356621f64cf3e3a82dedc2'} from 'ACTIONS_MODULE2'\nexport {pickFolder as '009487c7dee1a0626219196cb795852e6ceeb4e942'} from 'ACTIONS_MODULE3'\nexport {listGitHubRepositories as '40894ac562da702e856a33ab2eba43a8244cd0f44f'} from 'ACTIONS_MODULE4'\nexport {listGitHubOrganizations as '007666ac9610821f806d256e53fdd8bebb791a8a6d'} from 'ACTIONS_MODULE5'\nexport {importGitHubRepository as '407105802eb51c65cac8874dcb3c49996a742b2cd9'} from 'ACTIONS_MODULE6'\nexport {deployFeature as '40de2324761d8020ab72bf75cc368f1ef877b4bee6'} from 'ACTIONS_MODULE7'\nexport {deployRepository as '40ea2c84d337a8e2756140351fe8b22e698ef54f45'} from 'ACTIONS_MODULE8'\nexport {stopDeployment as '40219a408522b8b36890b324708c5c7d0e1d45671e'} from 'ACTIONS_MODULE9'\nexport {getDeploymentStatus as '40569cafedbc09c78c1ceb1686f83d0ee302732392'} from 'ACTIONS_MODULE10'\nexport {openIde as '4009c68dbb3ea62759de25bb414049bbce7a8d4005'} from 'ACTIONS_MODULE11'\nexport {openShell as '4016673960602c25f94c5184f751d13e02e074fa17'} from 'ACTIONS_MODULE12'\nexport {openFolder as '400923f9640fe6f28e00edbc0f6dd7c2160103b667'} from 'ACTIONS_MODULE13'\nexport {syncRepository as '408150a854d74b44d86742a8ec0121a14549c615fa'} from 'ACTIONS_MODULE14'\nexport {getDeploymentLogs as '404466ac68516001cc4d4019755aaf488c841c6b22'} from 'ACTIONS_MODULE15'\nexport {createProjectAndFeature as '4060a5939d31f3246447142b3363f5cbb90aa7d2fc'} from 'ACTIONS_MODULE16'\nexport {createApplication as '40c14f58d3e10e62248855ade6abcccaad47c67b30'} from 'ACTIONS_MODULE17'\nexport {archiveFeature as '406b363d4cd346d1e38bb5aabbcb63f2d57c22f296'} from 'ACTIONS_MODULE18'\nexport {deleteFeature as '782aab73361a360e8a9adda66994e2bdf5ed8d8a1a'} from 'ACTIONS_MODULE19'\nexport {resumeFeature as '40c6d7e64c260e8da888f5f0f3f1af844bcaafcce5'} from 'ACTIONS_MODULE20'\nexport {startFeature as '401033b1d3f55b77df4ba317d2da68670a31db76db'} from 'ACTIONS_MODULE21'\nexport {stopFeature as '40041f5f7059e97b058fbae7d6770da09b4d3e7346'} from 'ACTIONS_MODULE22'\nexport {unarchiveFeature as '40e321a8ec8ca0d2fae1a22600b958641bf844f5db'} from 'ACTIONS_MODULE23'\nexport {addRepository as '40fae4dfa1d35867a447569e75a2c7822c3a0f4622'} from 'ACTIONS_MODULE24'\nexport {deleteRepository as '400dd47034fe0af8ebb9e33eb48fb4ae76f5185031'} from 'ACTIONS_MODULE25'\nexport {deleteApplication as '40a34aa328bf956945dde7baad41c7e0fc58944d57'} from 'ACTIONS_MODULE26'\nexport {getFeatureMetadata as '40551df5ddc7f050b4393c1436df80f0224b56d585'} from 'ACTIONS_MODULE27'\nexport {getGitRepoInfo as '600d638de8297dae89186fc2eaa6aa3bf7611976ce'} from 'ACTIONS_MODULE28'\n"],"names":[],"mappings":"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"}