@shepai/cli 1.175.0 → 1.175.1-pr527.ea242b8

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 (416) hide show
  1. package/apis/json-schema/ActionDispositionEntry.yaml +14 -0
  2. package/apis/json-schema/DependencyFinding.yaml +28 -0
  3. package/apis/json-schema/DependencyRiskType.yaml +11 -0
  4. package/apis/json-schema/DependencyRules.yaml +38 -0
  5. package/apis/json-schema/EffectivePolicySnapshot.yaml +24 -0
  6. package/apis/json-schema/FeatureFlags.yaml +5 -0
  7. package/apis/json-schema/ReleaseIntegrityCheck.yaml +22 -0
  8. package/apis/json-schema/ReleaseIntegrityCheckType.yaml +9 -0
  9. package/apis/json-schema/ReleaseIntegrityResult.yaml +16 -0
  10. package/apis/json-schema/ReleaseRules.yaml +21 -0
  11. package/apis/json-schema/SecurityActionCategory.yaml +10 -0
  12. package/apis/json-schema/SecurityActionDisposition.yaml +8 -0
  13. package/apis/json-schema/SecurityConfig.yaml +17 -0
  14. package/apis/json-schema/SecurityEvent.yaml +36 -0
  15. package/apis/json-schema/SecurityMode.yaml +8 -0
  16. package/apis/json-schema/SecurityPolicy.yaml +24 -0
  17. package/apis/json-schema/SecuritySeverity.yaml +9 -0
  18. package/apis/json-schema/Settings.yaml +3 -0
  19. package/dist/packages/core/src/application/ports/output/agents/agent-executor.interface.d.ts +15 -1
  20. package/dist/packages/core/src/application/ports/output/agents/agent-executor.interface.d.ts.map +1 -1
  21. package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts +3 -1
  22. package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts.map +1 -1
  23. package/dist/packages/core/src/application/ports/output/repositories/security-event.repository.interface.d.ts +76 -0
  24. package/dist/packages/core/src/application/ports/output/repositories/security-event.repository.interface.d.ts.map +1 -0
  25. package/dist/packages/core/src/application/ports/output/repositories/security-event.repository.interface.js +11 -0
  26. package/dist/packages/core/src/application/ports/output/services/github-repository-service.interface.d.ts +38 -0
  27. package/dist/packages/core/src/application/ports/output/services/github-repository-service.interface.d.ts.map +1 -1
  28. package/dist/packages/core/src/application/ports/output/services/github-repository-service.interface.js +9 -0
  29. package/dist/packages/core/src/application/ports/output/services/security-policy-service.interface.d.ts +77 -0
  30. package/dist/packages/core/src/application/ports/output/services/security-policy-service.interface.d.ts.map +1 -0
  31. package/dist/packages/core/src/application/ports/output/services/security-policy-service.interface.js +13 -0
  32. package/dist/packages/core/src/application/ports/output/services/spec-initializer.interface.d.ts +11 -0
  33. package/dist/packages/core/src/application/ports/output/services/spec-initializer.interface.d.ts.map +1 -1
  34. package/dist/packages/core/src/application/use-cases/agents/approve-agent-run.use-case.d.ts.map +1 -1
  35. package/dist/packages/core/src/application/use-cases/agents/approve-agent-run.use-case.js +2 -0
  36. package/dist/packages/core/src/application/use-cases/agents/reject-agent-run.use-case.d.ts.map +1 -1
  37. package/dist/packages/core/src/application/use-cases/agents/reject-agent-run.use-case.js +2 -0
  38. package/dist/packages/core/src/application/use-cases/features/check-and-unblock-features.use-case.d.ts.map +1 -1
  39. package/dist/packages/core/src/application/use-cases/features/check-and-unblock-features.use-case.js +2 -0
  40. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
  41. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +1 -0
  42. package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.d.ts.map +1 -1
  43. package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.js +2 -0
  44. package/dist/packages/core/src/application/use-cases/features/start-feature.use-case.d.ts.map +1 -1
  45. package/dist/packages/core/src/application/use-cases/features/start-feature.use-case.js +2 -0
  46. package/dist/packages/core/src/application/use-cases/security/enforce-security.use-case.d.ts +71 -0
  47. package/dist/packages/core/src/application/use-cases/security/enforce-security.use-case.d.ts.map +1 -0
  48. package/dist/packages/core/src/application/use-cases/security/enforce-security.use-case.js +215 -0
  49. package/dist/packages/core/src/application/use-cases/security/evaluate-security-policy.use-case.d.ts +24 -0
  50. package/dist/packages/core/src/application/use-cases/security/evaluate-security-policy.use-case.d.ts.map +1 -0
  51. package/dist/packages/core/src/application/use-cases/security/evaluate-security-policy.use-case.js +56 -0
  52. package/dist/packages/core/src/application/use-cases/security/get-security-state.use-case.d.ts +36 -0
  53. package/dist/packages/core/src/application/use-cases/security/get-security-state.use-case.d.ts.map +1 -0
  54. package/dist/packages/core/src/application/use-cases/security/get-security-state.use-case.js +76 -0
  55. package/dist/packages/core/src/application/use-cases/security/record-security-event.use-case.d.ts +14 -0
  56. package/dist/packages/core/src/application/use-cases/security/record-security-event.use-case.d.ts.map +1 -0
  57. package/dist/packages/core/src/application/use-cases/security/record-security-event.use-case.js +46 -0
  58. package/dist/packages/core/src/domain/errors/security-violation.error.d.ts +15 -0
  59. package/dist/packages/core/src/domain/errors/security-violation.error.d.ts.map +1 -0
  60. package/dist/packages/core/src/domain/errors/security-violation.error.js +20 -0
  61. package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
  62. package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +6 -1
  63. package/dist/packages/core/src/domain/generated/output.d.ts +263 -0
  64. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  65. package/dist/packages/core/src/domain/generated/output.js +43 -0
  66. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  67. package/dist/packages/core/src/infrastructure/di/container.js +57 -0
  68. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/security-event.mapper.d.ts +44 -0
  69. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/security-event.mapper.d.ts.map +1 -0
  70. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/security-event.mapper.js +55 -0
  71. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +4 -0
  72. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
  73. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +17 -0
  74. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-security-settings-columns.d.ts +18 -0
  75. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-security-settings-columns.d.ts.map +1 -0
  76. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-security-settings-columns.js +31 -0
  77. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/054-create-security-events-table.d.ts +29 -0
  78. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/054-create-security-events-table.d.ts.map +1 -0
  79. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/054-create-security-events-table.js +53 -0
  80. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/056-add-feature-flag-supply-chain-security.d.ts +16 -0
  81. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/056-add-feature-flag-supply-chain-security.d.ts.map +1 -0
  82. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/056-add-feature-flag-supply-chain-security.js +22 -0
  83. package/dist/packages/core/src/infrastructure/repositories/sqlite-security-event.repository.d.ts +24 -0
  84. package/dist/packages/core/src/infrastructure/repositories/sqlite-security-event.repository.d.ts.map +1 -0
  85. package/dist/packages/core/src/infrastructure/repositories/sqlite-security-event.repository.js +96 -0
  86. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.d.ts.map +1 -1
  87. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +15 -3
  88. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.d.ts +2 -0
  89. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.d.ts.map +1 -1
  90. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.js +12 -0
  91. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.d.ts.map +1 -1
  92. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.js +44 -4
  93. package/dist/packages/core/src/infrastructure/services/agents/common/executors/security-constraint-validator.d.ts +22 -0
  94. package/dist/packages/core/src/infrastructure/services/agents/common/executors/security-constraint-validator.d.ts.map +1 -0
  95. package/dist/packages/core/src/infrastructure/services/agents/common/executors/security-constraint-validator.js +30 -0
  96. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts +10 -0
  97. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts.map +1 -1
  98. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts +35 -1
  99. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts.map +1 -1
  100. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts +3 -1
  101. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts.map +1 -1
  102. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.js +7 -1
  103. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts +3 -1
  104. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts.map +1 -1
  105. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js +32 -1
  106. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -1
  107. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +25 -0
  108. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/security-pre-check.d.ts +59 -0
  109. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/security-pre-check.d.ts.map +1 -0
  110. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/security-pre-check.js +89 -0
  111. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts +4 -1
  112. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts.map +1 -1
  113. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.js +10 -0
  114. package/dist/packages/core/src/infrastructure/services/external/github-repository.service.d.ts +10 -1
  115. package/dist/packages/core/src/infrastructure/services/external/github-repository.service.d.ts.map +1 -1
  116. package/dist/packages/core/src/infrastructure/services/external/github-repository.service.js +101 -1
  117. package/dist/packages/core/src/infrastructure/services/security/dependency-risk-evaluator.d.ts +53 -0
  118. package/dist/packages/core/src/infrastructure/services/security/dependency-risk-evaluator.d.ts.map +1 -0
  119. package/dist/packages/core/src/infrastructure/services/security/dependency-risk-evaluator.js +241 -0
  120. package/dist/packages/core/src/infrastructure/services/security/release-integrity-evaluator.d.ts +44 -0
  121. package/dist/packages/core/src/infrastructure/services/security/release-integrity-evaluator.d.ts.map +1 -0
  122. package/dist/packages/core/src/infrastructure/services/security/release-integrity-evaluator.js +194 -0
  123. package/dist/packages/core/src/infrastructure/services/security/security-policy-file-reader.d.ts +28 -0
  124. package/dist/packages/core/src/infrastructure/services/security/security-policy-file-reader.d.ts.map +1 -0
  125. package/dist/packages/core/src/infrastructure/services/security/security-policy-file-reader.js +50 -0
  126. package/dist/packages/core/src/infrastructure/services/security/security-policy-validator.d.ts +26 -0
  127. package/dist/packages/core/src/infrastructure/services/security/security-policy-validator.d.ts.map +1 -0
  128. package/dist/packages/core/src/infrastructure/services/security/security-policy-validator.js +147 -0
  129. package/dist/packages/core/src/infrastructure/services/security/security-policy.service.d.ts +44 -0
  130. package/dist/packages/core/src/infrastructure/services/security/security-policy.service.d.ts.map +1 -0
  131. package/dist/packages/core/src/infrastructure/services/security/security-policy.service.js +174 -0
  132. package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.d.ts +1 -0
  133. package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.d.ts.map +1 -1
  134. package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.js +61 -0
  135. package/dist/src/presentation/cli/commands/security.command.d.ts +16 -0
  136. package/dist/src/presentation/cli/commands/security.command.d.ts.map +1 -0
  137. package/dist/src/presentation/cli/commands/security.command.js +133 -0
  138. package/dist/src/presentation/cli/index.js +2 -0
  139. package/dist/src/presentation/web/app/(dashboard)/get-graph-data.d.ts.map +1 -1
  140. package/dist/src/presentation/web/app/(dashboard)/get-graph-data.js +5 -1
  141. package/dist/src/presentation/web/app/actions/security.d.ts +28 -0
  142. package/dist/src/presentation/web/app/actions/security.d.ts.map +1 -0
  143. package/dist/src/presentation/web/app/actions/security.js +59 -0
  144. package/dist/src/presentation/web/app/build-graph-nodes.d.ts +3 -1
  145. package/dist/src/presentation/web/app/build-graph-nodes.d.ts.map +1 -1
  146. package/dist/src/presentation/web/app/build-graph-nodes.js +2 -0
  147. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +3 -1
  148. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
  149. package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
  150. package/dist/src/presentation/web/components/common/feature-node/feature-node.js +2 -1
  151. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.d.ts +3 -1
  152. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.d.ts.map +1 -1
  153. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.js +3 -2
  154. package/dist/src/presentation/web/components/common/repository-node/security-panel.d.ts +6 -0
  155. package/dist/src/presentation/web/components/common/repository-node/security-panel.d.ts.map +1 -0
  156. package/dist/src/presentation/web/components/common/repository-node/security-panel.js +29 -0
  157. package/dist/src/presentation/web/components/common/repository-node/security-panel.stories.d.ts +10 -0
  158. package/dist/src/presentation/web/components/common/repository-node/security-panel.stories.d.ts.map +1 -0
  159. package/dist/src/presentation/web/components/common/repository-node/security-panel.stories.js +53 -0
  160. package/dist/src/presentation/web/components/common/security-badge.d.ts +7 -0
  161. package/dist/src/presentation/web/components/common/security-badge.d.ts.map +1 -0
  162. package/dist/src/presentation/web/components/common/security-badge.js +30 -0
  163. package/dist/src/presentation/web/components/common/security-badge.stories.d.ts +12 -0
  164. package/dist/src/presentation/web/components/common/security-badge.stories.d.ts.map +1 -0
  165. package/dist/src/presentation/web/components/common/security-badge.stories.js +20 -0
  166. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.d.ts.map +1 -1
  167. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.js +3 -0
  168. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.d.ts.map +1 -1
  169. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.js +3 -0
  170. package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
  171. package/dist/src/presentation/web/components/features/settings/settings-page-client.js +26 -7
  172. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts.map +1 -1
  173. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.js +1 -0
  174. package/dist/src/presentation/web/components/features/settings/supply-chain-security-settings-section.d.ts +6 -0
  175. package/dist/src/presentation/web/components/features/settings/supply-chain-security-settings-section.d.ts.map +1 -0
  176. package/dist/src/presentation/web/components/features/settings/supply-chain-security-settings-section.js +60 -0
  177. package/dist/src/presentation/web/components/features/settings/supply-chain-security-settings-section.stories.d.ts +14 -0
  178. package/dist/src/presentation/web/components/features/settings/supply-chain-security-settings-section.stories.d.ts.map +1 -0
  179. package/dist/src/presentation/web/components/features/settings/supply-chain-security-settings-section.stories.js +116 -0
  180. package/dist/translations/ar/cli.json +21 -0
  181. package/dist/translations/ar/web.json +43 -1
  182. package/dist/translations/de/cli.json +21 -0
  183. package/dist/translations/de/web.json +43 -1
  184. package/dist/translations/en/cli.json +21 -0
  185. package/dist/translations/en/web.json +43 -1
  186. package/dist/translations/es/cli.json +21 -0
  187. package/dist/translations/es/web.json +43 -1
  188. package/dist/translations/fr/cli.json +21 -0
  189. package/dist/translations/fr/web.json +43 -1
  190. package/dist/translations/he/cli.json +21 -0
  191. package/dist/translations/he/web.json +43 -1
  192. package/dist/translations/pt/cli.json +22 -1
  193. package/dist/translations/pt/web.json +43 -1
  194. package/dist/translations/ru/cli.json +21 -0
  195. package/dist/translations/ru/web.json +43 -1
  196. package/dist/tsconfig.build.tsbuildinfo +1 -1
  197. package/package.json +1 -1
  198. package/web/.next/BUILD_ID +1 -1
  199. package/web/.next/build-manifest.json +2 -2
  200. package/web/.next/fallback-build-manifest.json +2 -2
  201. package/web/.next/prerender-manifest.json +3 -3
  202. package/web/.next/required-server-files.js +3 -3
  203. package/web/.next/required-server-files.json +3 -3
  204. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
  205. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  206. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  207. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
  208. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  209. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  210. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +30 -30
  211. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  212. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  213. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +38 -38
  214. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  215. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  216. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +38 -38
  217. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  218. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  219. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  220. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  221. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  222. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  223. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  224. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  225. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
  226. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  227. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  228. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +30 -30
  229. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  230. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  231. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +38 -38
  232. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  233. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  234. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +38 -38
  235. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  236. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  237. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
  238. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  239. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  240. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  241. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  242. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  243. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  244. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  245. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  246. package/web/.next/server/app/_global-error.html +2 -2
  247. package/web/.next/server/app/_global-error.rsc +1 -1
  248. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  249. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  250. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  251. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  252. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  253. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
  254. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  255. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  256. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  257. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  258. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  259. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
  260. package/web/.next/server/app/api/sessions/route.js.nft.json +1 -1
  261. package/web/.next/server/app/api/sessions-batch/route.js.nft.json +1 -1
  262. package/web/.next/server/app/features/page/server-reference-manifest.json +6 -6
  263. package/web/.next/server/app/features/page.js.nft.json +1 -1
  264. package/web/.next/server/app/features/page_client-reference-manifest.js +1 -1
  265. package/web/.next/server/app/settings/page/server-reference-manifest.json +33 -18
  266. package/web/.next/server/app/settings/page.js +1 -1
  267. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  268. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  269. package/web/.next/server/app/skills/page/server-reference-manifest.json +13 -13
  270. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  271. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  272. package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
  273. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  274. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  275. package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
  276. package/web/.next/server/app/version/page.js.nft.json +1 -1
  277. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  278. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
  279. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
  280. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  281. package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js +1 -1
  282. package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js.map +1 -1
  283. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +1 -1
  284. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  285. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_ad0071c9.js +1 -1
  286. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_ad0071c9.js.map +1 -1
  287. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_90d98b2b.js +1 -1
  288. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_90d98b2b.js.map +1 -1
  289. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_d3828105.js +1 -1
  290. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_d3828105.js.map +1 -1
  291. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  292. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  293. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +2 -2
  294. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
  295. package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js +1 -1
  296. package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js.map +1 -1
  297. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  298. package/web/.next/server/chunks/ssr/[root-of-the-server]__51ec77a8._.js +1 -1
  299. package/web/.next/server/chunks/ssr/[root-of-the-server]__51ec77a8._.js.map +1 -1
  300. package/web/.next/server/chunks/ssr/[root-of-the-server]__540c615f._.js +2 -2
  301. package/web/.next/server/chunks/ssr/[root-of-the-server]__540c615f._.js.map +1 -1
  302. package/web/.next/server/chunks/ssr/[root-of-the-server]__66047a1b._.js +1 -1
  303. package/web/.next/server/chunks/ssr/[root-of-the-server]__66047a1b._.js.map +1 -1
  304. package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js +1 -1
  305. package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js.map +1 -1
  306. package/web/.next/server/chunks/ssr/[root-of-the-server]__a2d6c0ac._.js +4 -0
  307. package/web/.next/server/chunks/ssr/[root-of-the-server]__a2d6c0ac._.js.map +1 -0
  308. package/web/.next/server/chunks/ssr/[root-of-the-server]__a932cd3a._.js +1 -1
  309. package/web/.next/server/chunks/ssr/[root-of-the-server]__a932cd3a._.js.map +1 -1
  310. package/web/.next/server/chunks/ssr/[root-of-the-server]__aa72e794._.js +1 -1
  311. package/web/.next/server/chunks/ssr/[root-of-the-server]__aa72e794._.js.map +1 -1
  312. package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js +1 -1
  313. package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js.map +1 -1
  314. package/web/.next/server/chunks/ssr/_05c23ad9._.js +1 -1
  315. package/web/.next/server/chunks/ssr/_05c23ad9._.js.map +1 -1
  316. package/web/.next/server/chunks/ssr/_08eaf4b1._.js +3 -0
  317. package/web/.next/server/chunks/ssr/_08eaf4b1._.js.map +1 -0
  318. package/web/.next/server/chunks/ssr/_16eb4fec._.js +1 -1
  319. package/web/.next/server/chunks/ssr/_16eb4fec._.js.map +1 -1
  320. package/web/.next/server/chunks/ssr/_295fffde._.js +1 -1
  321. package/web/.next/server/chunks/ssr/_295fffde._.js.map +1 -1
  322. package/web/.next/server/chunks/ssr/_45496654._.js +1 -1
  323. package/web/.next/server/chunks/ssr/_45496654._.js.map +1 -1
  324. package/web/.next/server/chunks/ssr/_4cbb7f95._.js +1 -1
  325. package/web/.next/server/chunks/ssr/_4cbb7f95._.js.map +1 -1
  326. package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
  327. package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
  328. package/web/.next/server/chunks/ssr/_6abfa39e._.js +1 -1
  329. package/web/.next/server/chunks/ssr/_783debcb._.js +9 -0
  330. package/web/.next/server/chunks/ssr/_783debcb._.js.map +1 -0
  331. package/web/.next/server/chunks/ssr/{_af6b8b94._.js → _e7f76333._.js} +2 -2
  332. package/web/.next/server/chunks/ssr/{_af6b8b94._.js.map → _e7f76333._.js.map} +1 -1
  333. package/web/.next/server/chunks/ssr/_f8c55130._.js +1 -1
  334. package/web/.next/server/chunks/ssr/_f8c55130._.js.map +1 -1
  335. package/web/.next/server/chunks/ssr/{_e0dd6fcf._.js → _fc1578d7._.js} +2 -2
  336. package/web/.next/server/chunks/ssr/_fc1578d7._.js.map +1 -0
  337. package/web/.next/server/chunks/ssr/_ff04802c._.js +3 -0
  338. package/web/.next/server/chunks/ssr/_ff04802c._.js.map +1 -0
  339. package/web/.next/server/chunks/ssr/_ff87ffa6._.js +3 -0
  340. package/web/.next/server/chunks/ssr/_ff87ffa6._.js.map +1 -0
  341. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  342. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  343. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
  344. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map +1 -1
  345. package/web/.next/server/chunks/ssr/src_presentation_web_17d39233._.js +1 -1
  346. package/web/.next/server/chunks/ssr/src_presentation_web_17d39233._.js.map +1 -1
  347. package/web/.next/server/chunks/ssr/src_presentation_web_54b02639._.js +2 -2
  348. package/web/.next/server/chunks/ssr/src_presentation_web_54b02639._.js.map +1 -1
  349. package/web/.next/server/chunks/ssr/src_presentation_web_7b7b9e3b._.js +2 -2
  350. package/web/.next/server/chunks/ssr/src_presentation_web_7b7b9e3b._.js.map +1 -1
  351. package/web/.next/server/chunks/ssr/src_presentation_web_807cba76._.js +1 -1
  352. package/web/.next/server/chunks/ssr/src_presentation_web_807cba76._.js.map +1 -1
  353. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_90b5e66e.js +1 -1
  354. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_90b5e66e.js.map +1 -1
  355. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_4ce30db7.js +1 -1
  356. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_4ce30db7.js.map +1 -1
  357. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_e4032193.js +1 -1
  358. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_e4032193.js.map +1 -1
  359. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +1 -1
  360. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
  361. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +1 -1
  362. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js +1 -1
  363. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js.map +1 -1
  364. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  365. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  366. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js +1 -1
  367. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js.map +1 -1
  368. package/web/.next/server/chunks/ssr/src_presentation_web_db9fa0c2._.js +1 -1
  369. package/web/.next/server/chunks/ssr/src_presentation_web_db9fa0c2._.js.map +1 -1
  370. package/web/.next/server/chunks/ssr/src_presentation_web_e1cd1869._.js +1 -1
  371. package/web/.next/server/chunks/ssr/src_presentation_web_e1cd1869._.js.map +1 -1
  372. package/web/.next/server/chunks/ssr/src_presentation_web_e3a30e30._.js +1 -1
  373. package/web/.next/server/chunks/ssr/src_presentation_web_e3a30e30._.js.map +1 -1
  374. package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js +1 -1
  375. package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js.map +1 -1
  376. package/web/.next/server/pages/500.html +2 -2
  377. package/web/.next/server/server-reference-manifest.js +1 -1
  378. package/web/.next/server/server-reference-manifest.json +74 -59
  379. package/web/.next/static/chunks/{238fdbed09dc61b6.js → 1eeabda286169861.js} +2 -2
  380. package/web/.next/static/chunks/20ec94c610d07a10.css +1 -0
  381. package/web/.next/static/chunks/{940c842293a6ee9b.js → 2dcae7bd1f3e2b51.js} +1 -1
  382. package/web/.next/static/chunks/3aba9d2242420cb5.js +1 -0
  383. package/web/.next/static/chunks/6003ad985fb78e62.js +1 -0
  384. package/web/.next/static/chunks/{0b07ee72b0c639ef.js → 69aa6a996dccb7dc.js} +2 -2
  385. package/web/.next/static/chunks/{873e837cd1179cdd.js → 6e5aeb5da5bb2ab6.js} +1 -1
  386. package/web/.next/static/chunks/{2ad924f5ba5ec0a6.js → 7c8e1ab108e3ceea.js} +1 -1
  387. package/web/.next/static/chunks/{bc41a393614b1192.js → 825ddcb7c361b2fe.js} +1 -1
  388. package/web/.next/static/chunks/{a22ee308ae1509ca.js → 89a6182ae40ac10b.js} +1 -1
  389. package/web/.next/static/chunks/{d26542df5ecc8717.js → a6d516b7e128f889.js} +1 -1
  390. package/web/.next/static/chunks/ae81796726a9bba3.js +1 -0
  391. package/web/.next/static/chunks/{b49ab0b290e9342d.js → b46545caae3b4930.js} +1 -1
  392. package/web/.next/static/chunks/{b7b5d65a5dd2fff1.js → c43f00ac45c5381d.js} +1 -1
  393. package/web/.next/static/chunks/{39054eabee156e55.js → c741f40bcb2abe54.js} +3 -3
  394. package/web/.next/static/chunks/{1b336d1266a0aa3d.js → dfc05704351fc940.js} +1 -1
  395. package/web/.next/static/chunks/eb72ac7aa8986962.js +1 -0
  396. package/web/.next/static/chunks/eef5d47669e61a54.js +3 -0
  397. package/web/.next/server/chunks/ssr/[root-of-the-server]__1cd4327c._.js +0 -4
  398. package/web/.next/server/chunks/ssr/[root-of-the-server]__1cd4327c._.js.map +0 -1
  399. package/web/.next/server/chunks/ssr/_2b021b35._.js +0 -3
  400. package/web/.next/server/chunks/ssr/_2b021b35._.js.map +0 -1
  401. package/web/.next/server/chunks/ssr/_43ba79e7._.js +0 -3
  402. package/web/.next/server/chunks/ssr/_43ba79e7._.js.map +0 -1
  403. package/web/.next/server/chunks/ssr/_7cb0396e._.js +0 -3
  404. package/web/.next/server/chunks/ssr/_7cb0396e._.js.map +0 -1
  405. package/web/.next/server/chunks/ssr/_e0dd6fcf._.js.map +0 -1
  406. package/web/.next/server/chunks/ssr/_e680c57c._.js +0 -9
  407. package/web/.next/server/chunks/ssr/_e680c57c._.js.map +0 -1
  408. package/web/.next/static/chunks/28f6b1cab38ab025.js +0 -3
  409. package/web/.next/static/chunks/8b0a9cb5109fe899.js +0 -1
  410. package/web/.next/static/chunks/a20f2d6f76f469b7.css +0 -1
  411. package/web/.next/static/chunks/b2aa69e4b0b032d9.js +0 -1
  412. package/web/.next/static/chunks/b65e555419a0c664.js +0 -1
  413. package/web/.next/static/chunks/ba0e0fa2d1a650bb.js +0 -1
  414. /package/web/.next/static/{9rcv3ICw0kZNuv3TVdO8E → 4jtpgWCvk_Q6-K-puXRhW}/_buildManifest.js +0 -0
  415. /package/web/.next/static/{9rcv3ICw0kZNuv3TVdO8E → 4jtpgWCvk_Q6-K-puXRhW}/_clientMiddlewareManifest.json +0 -0
  416. /package/web/.next/static/{9rcv3ICw0kZNuv3TVdO8E → 4jtpgWCvk_Q6-K-puXRhW}/_ssgManifest.js +0 -0
@@ -1,3 +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,"60876a4d59d35b2d7b9957a2478c16b91c5b333b0b",null),(0,b.registerServerReference)(i,"60cfe19ebbb15485dada8b07965b52cd5e609f4552",null),a.s(["getGitRepoInfo",()=>h])},3531,a=>{"use strict";var b=a.i(23504),c=a.i(27900),d=a.i(12513),e=a.i(73101),f=a.i(54775),g=a.i(65324),h=a.i(33841),i=a.i(46646),j=a.i(68670),k=a.i(85321),l=a.i(84095),m=a.i(56799),n=a.i(80496),o=a.i(93225),p=a.i(94691),q=a.i(41872),r=a.i(9959),s=a.i(79124),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(29207),C=a.i(35556);a.s([],22768),a.i(22768),a.s(["0007c2e0526aa58dd3af65f12572ddbce953dd5771",()=>d.pickFolder,"00146118be55e1a72383915a7d426fd0c54b22b9ef",()=>r.checkAgentAuth,"0064a55b67441efb0f64e484060d6e0477e2a2a466",()=>q.isAgentSetupComplete,"0069abc5d93b0b63b576bb972cd2fd15444f242de8",()=>f.listGitHubOrganizations,"006bc1e402f8227543541ef0b32eae38d48451b177",()=>b.getAllAgentModels,"00fb6c5462fd26f0a6d83d293a57e2fd51d9190a8b",()=>s.checkToolStatus,"40013af0f67efe51afffb12222afbe0dc207278440",()=>y.unarchiveFeature,"400c1cf04acf1c3473d16250f7bd269e680bf8ea80",()=>x.stopFeature,"400dae91adbbff2e8b5c44046c21aecdd5d8850241",()=>l.openIde,"401900c9334ca0aa2b2c20cc90f3e800e9a4a19f2b",()=>j.stopDeployment,"403e9c92d89fd8b3205c2243ba69034f1e87834884",()=>h.deployFeature,"403f5ab09b9c95436fe15ec25711617c0408289a26",()=>m.openShell,"4042e73e21d267f537a7bf7fb3379f1de269622318",()=>A.deleteRepository,"40468dc71b0e6684979d39fb438f9f04af1f2ff31c",()=>p.getDeploymentLogs,"4055afdd273830ed017154c61bbba972935f755664",()=>i.deployRepository,"405b9ad7429a7d8f371b2f2e5fe9a819b53108072a",()=>z.addRepository,"405cbca883738a7b0ce854b4e905ee1ca2d89c6334",()=>v.resumeFeature,"406dc07f82561f7a972a3b8750db8e394217e51066",()=>t.archiveFeature,"408faca8892e77d11f363deec4c2d5303f13fd25db",()=>B.getFeatureMetadata,"40b5cd6b473cc57e91de3be3314647e1313abd789e",()=>g.importGitHubRepository,"40b76283b4700f45aab7b775043497c52e0e6d98e9",()=>o.syncRepository,"40c62234a418db717dffd8588d8e2c4593542a6ca2",()=>k.getDeploymentStatus,"40e4025e4c9932faa0ebda58ad29d3404b30c6f65e",()=>e.listGitHubRepositories,"40ecfcd01dd3d4e4bf2f96d126a4be4523a3fa3d3d",()=>n.openFolder,"40f8270a4e6612b146fd7e32e3e791fd45cd221b30",()=>w.startFeature,"60876a4d59d35b2d7b9957a2478c16b91c5b333b0b",()=>C.getGitRepoInfo,"60ee7cd212b9b72a55135dcf12e34dea5eeef0121f",()=>c.updateAgentAndModel,"78befba1876563f867eef16cee6aeac7fef90ccdfe",()=>u.deleteFeature],3531)}];
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,"60541238624bbc1dc948beca449f63d772300e90e0",null),(0,b.registerServerReference)(i,"603f6aacf41c8eddd00094b8e0390b9dc33f08852b",null),a.s(["getGitRepoInfo",()=>h])},3531,a=>{"use strict";var b=a.i(23504),c=a.i(27900),d=a.i(12513),e=a.i(73101),f=a.i(54775),g=a.i(65324),h=a.i(33841),i=a.i(46646),j=a.i(68670),k=a.i(85321),l=a.i(84095),m=a.i(56799),n=a.i(80496),o=a.i(93225),p=a.i(94691),q=a.i(41872),r=a.i(9959),s=a.i(79124),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(29207),C=a.i(35556);a.s([],22768),a.i(22768),a.s(["0032c6cdc2edf34e30b12287e50cb502ec99886df7",()=>b.getAllAgentModels,"0045175612c7a075204f57eab743c13af6936e8543",()=>q.isAgentSetupComplete,"005763ceb71def28953f9f6efb5f9836a446a0cddd",()=>f.listGitHubOrganizations,"008c1dcbd677714821eefbc3fb3ebe9cd8869f591f",()=>r.checkAgentAuth,"00f6ea419c5545770a6c71bc4c43fe04d7a22ea068",()=>s.checkToolStatus,"00fb8e6b15df992342f45bbd9fe04cb4522eeeb9d4",()=>d.pickFolder,"40011e0da65cbd304c104b36e464d5dc50edda9962",()=>n.openFolder,"4006ec456294ab70438f8582024fa5871d5a694cbe",()=>B.getFeatureMetadata,"4007444ec512082a5e79bb5dee290f5c0d05e774ef",()=>v.resumeFeature,"401af034959c5bbba2ad8be3907e53bbc3ede7d2cd",()=>i.deployRepository,"401f66ef4558bb9328d03a36ad72674d98936ce338",()=>k.getDeploymentStatus,"401fcb8958d2277a5b34228e1867bf1cf52045941b",()=>z.addRepository,"4022a787878a9d01989399447b88565c170df206db",()=>A.deleteRepository,"40251f323ff2d234756b512edf0efad1dceae61f23",()=>e.listGitHubRepositories,"404ceab40e0ab85f76116276ebad0ca707178efc4f",()=>o.syncRepository,"40668ca32c0b63d012073e714e0cb04e3776dd526d",()=>w.startFeature,"4081c0d014119b5d37a78b78073c3bedf231538a82",()=>l.openIde,"4088b7549dfeab810cbefcba611afd1fdaa81f958d",()=>h.deployFeature,"409332a02ef4b4bc44c4ff8148b7252131bdd9de62",()=>m.openShell,"40ace9ce468348948c3c03a6e9173c002627beab6d",()=>j.stopDeployment,"40b7a26c67f15d8de499c3991fa05ad2b6144e3504",()=>p.getDeploymentLogs,"40bd6a598641a5d4dad3a2b1cbdc1e3247da695907",()=>x.stopFeature,"40d452b5620368f1552b59f59dd1dd61a3284eff3d",()=>t.archiveFeature,"40e703c550c84065d6e467f58d9e8c2620296ec403",()=>g.importGitHubRepository,"40f66ba6ba3a423060e962b53043b8fb48fd666c47",()=>y.unarchiveFeature,"60541238624bbc1dc948beca449f63d772300e90e0",()=>C.getGitRepoInfo,"60d0d75eae0e959bca7b3b6686d28a38ada4bf4a71",()=>c.updateAgentAndModel,"7898d1db354181a68b93e461664a09dcc5e51c6537",()=>u.deleteFeature],3531)}];
2
2
 
3
3
  //# sourceMappingURL=src_presentation_web_e1cd1869._.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":"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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/%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 '0032c6cdc2edf34e30b12287e50cb502ec99886df7'} from 'ACTIONS_MODULE0'\nexport {updateAgentAndModel as '60d0d75eae0e959bca7b3b6686d28a38ada4bf4a71'} from 'ACTIONS_MODULE1'\nexport {pickFolder as '00fb8e6b15df992342f45bbd9fe04cb4522eeeb9d4'} from 'ACTIONS_MODULE2'\nexport {listGitHubRepositories as '40251f323ff2d234756b512edf0efad1dceae61f23'} from 'ACTIONS_MODULE3'\nexport {listGitHubOrganizations as '005763ceb71def28953f9f6efb5f9836a446a0cddd'} from 'ACTIONS_MODULE4'\nexport {importGitHubRepository as '40e703c550c84065d6e467f58d9e8c2620296ec403'} from 'ACTIONS_MODULE5'\nexport {deployFeature as '4088b7549dfeab810cbefcba611afd1fdaa81f958d'} from 'ACTIONS_MODULE6'\nexport {deployRepository as '401af034959c5bbba2ad8be3907e53bbc3ede7d2cd'} from 'ACTIONS_MODULE7'\nexport {stopDeployment as '40ace9ce468348948c3c03a6e9173c002627beab6d'} from 'ACTIONS_MODULE8'\nexport {getDeploymentStatus as '401f66ef4558bb9328d03a36ad72674d98936ce338'} from 'ACTIONS_MODULE9'\nexport {openIde as '4081c0d014119b5d37a78b78073c3bedf231538a82'} from 'ACTIONS_MODULE10'\nexport {openShell as '409332a02ef4b4bc44c4ff8148b7252131bdd9de62'} from 'ACTIONS_MODULE11'\nexport {openFolder as '40011e0da65cbd304c104b36e464d5dc50edda9962'} from 'ACTIONS_MODULE12'\nexport {syncRepository as '404ceab40e0ab85f76116276ebad0ca707178efc4f'} from 'ACTIONS_MODULE13'\nexport {getDeploymentLogs as '40b7a26c67f15d8de499c3991fa05ad2b6144e3504'} from 'ACTIONS_MODULE14'\nexport {isAgentSetupComplete as '0045175612c7a075204f57eab743c13af6936e8543'} from 'ACTIONS_MODULE15'\nexport {checkAgentAuth as '008c1dcbd677714821eefbc3fb3ebe9cd8869f591f'} from 'ACTIONS_MODULE16'\nexport {checkToolStatus as '00f6ea419c5545770a6c71bc4c43fe04d7a22ea068'} from 'ACTIONS_MODULE17'\nexport {archiveFeature as '40d452b5620368f1552b59f59dd1dd61a3284eff3d'} from 'ACTIONS_MODULE18'\nexport {deleteFeature as '7898d1db354181a68b93e461664a09dcc5e51c6537'} from 'ACTIONS_MODULE19'\nexport {resumeFeature as '4007444ec512082a5e79bb5dee290f5c0d05e774ef'} from 'ACTIONS_MODULE20'\nexport {startFeature as '40668ca32c0b63d012073e714e0cb04e3776dd526d'} from 'ACTIONS_MODULE21'\nexport {stopFeature as '40bd6a598641a5d4dad3a2b1cbdc1e3247da695907'} from 'ACTIONS_MODULE22'\nexport {unarchiveFeature as '40f66ba6ba3a423060e962b53043b8fb48fd666c47'} from 'ACTIONS_MODULE23'\nexport {addRepository as '401fcb8958d2277a5b34228e1867bf1cf52045941b'} from 'ACTIONS_MODULE24'\nexport {deleteRepository as '4022a787878a9d01989399447b88565c170df206db'} from 'ACTIONS_MODULE25'\nexport {getFeatureMetadata as '4006ec456294ab70438f8582024fa5871d5a694cbe'} from 'ACTIONS_MODULE26'\nexport {getGitRepoInfo as '60541238624bbc1dc948beca449f63d772300e90e0'} from 'ACTIONS_MODULE27'\n"],"names":[],"mappings":"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"}
@@ -1,3 +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,"60876a4d59d35b2d7b9957a2478c16b91c5b333b0b",null),(0,b.registerServerReference)(i,"60cfe19ebbb15485dada8b07965b52cd5e609f4552",null),a.s(["getGitRepoInfo",()=>h])},81799,a=>{"use strict";var b=a.i(23504),c=a.i(27900),d=a.i(12513),e=a.i(73101),f=a.i(54775),g=a.i(65324),h=a.i(33841),i=a.i(46646),j=a.i(68670),k=a.i(85321),l=a.i(84095),m=a.i(56799),n=a.i(80496),o=a.i(93225),p=a.i(94691),q=a.i(41872),r=a.i(9959),s=a.i(79124),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(29207),C=a.i(35556);a.s([],4251),a.i(4251),a.s(["0007c2e0526aa58dd3af65f12572ddbce953dd5771",()=>d.pickFolder,"00146118be55e1a72383915a7d426fd0c54b22b9ef",()=>r.checkAgentAuth,"0064a55b67441efb0f64e484060d6e0477e2a2a466",()=>q.isAgentSetupComplete,"0069abc5d93b0b63b576bb972cd2fd15444f242de8",()=>f.listGitHubOrganizations,"006bc1e402f8227543541ef0b32eae38d48451b177",()=>b.getAllAgentModels,"00fb6c5462fd26f0a6d83d293a57e2fd51d9190a8b",()=>s.checkToolStatus,"40013af0f67efe51afffb12222afbe0dc207278440",()=>y.unarchiveFeature,"400c1cf04acf1c3473d16250f7bd269e680bf8ea80",()=>x.stopFeature,"400dae91adbbff2e8b5c44046c21aecdd5d8850241",()=>l.openIde,"401900c9334ca0aa2b2c20cc90f3e800e9a4a19f2b",()=>j.stopDeployment,"403e9c92d89fd8b3205c2243ba69034f1e87834884",()=>h.deployFeature,"403f5ab09b9c95436fe15ec25711617c0408289a26",()=>m.openShell,"4042e73e21d267f537a7bf7fb3379f1de269622318",()=>A.deleteRepository,"40468dc71b0e6684979d39fb438f9f04af1f2ff31c",()=>p.getDeploymentLogs,"4055afdd273830ed017154c61bbba972935f755664",()=>i.deployRepository,"405b9ad7429a7d8f371b2f2e5fe9a819b53108072a",()=>z.addRepository,"405cbca883738a7b0ce854b4e905ee1ca2d89c6334",()=>v.resumeFeature,"406dc07f82561f7a972a3b8750db8e394217e51066",()=>t.archiveFeature,"408faca8892e77d11f363deec4c2d5303f13fd25db",()=>B.getFeatureMetadata,"40b5cd6b473cc57e91de3be3314647e1313abd789e",()=>g.importGitHubRepository,"40b76283b4700f45aab7b775043497c52e0e6d98e9",()=>o.syncRepository,"40c62234a418db717dffd8588d8e2c4593542a6ca2",()=>k.getDeploymentStatus,"40e4025e4c9932faa0ebda58ad29d3404b30c6f65e",()=>e.listGitHubRepositories,"40ecfcd01dd3d4e4bf2f96d126a4be4523a3fa3d3d",()=>n.openFolder,"40f8270a4e6612b146fd7e32e3e791fd45cd221b30",()=>w.startFeature,"60876a4d59d35b2d7b9957a2478c16b91c5b333b0b",()=>C.getGitRepoInfo,"60ee7cd212b9b72a55135dcf12e34dea5eeef0121f",()=>c.updateAgentAndModel,"78befba1876563f867eef16cee6aeac7fef90ccdfe",()=>u.deleteFeature],81799)}];
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,"60541238624bbc1dc948beca449f63d772300e90e0",null),(0,b.registerServerReference)(i,"603f6aacf41c8eddd00094b8e0390b9dc33f08852b",null),a.s(["getGitRepoInfo",()=>h])},81799,a=>{"use strict";var b=a.i(23504),c=a.i(27900),d=a.i(12513),e=a.i(73101),f=a.i(54775),g=a.i(65324),h=a.i(33841),i=a.i(46646),j=a.i(68670),k=a.i(85321),l=a.i(84095),m=a.i(56799),n=a.i(80496),o=a.i(93225),p=a.i(94691),q=a.i(41872),r=a.i(9959),s=a.i(79124),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(29207),C=a.i(35556);a.s([],4251),a.i(4251),a.s(["0032c6cdc2edf34e30b12287e50cb502ec99886df7",()=>b.getAllAgentModels,"0045175612c7a075204f57eab743c13af6936e8543",()=>q.isAgentSetupComplete,"005763ceb71def28953f9f6efb5f9836a446a0cddd",()=>f.listGitHubOrganizations,"008c1dcbd677714821eefbc3fb3ebe9cd8869f591f",()=>r.checkAgentAuth,"00f6ea419c5545770a6c71bc4c43fe04d7a22ea068",()=>s.checkToolStatus,"00fb8e6b15df992342f45bbd9fe04cb4522eeeb9d4",()=>d.pickFolder,"40011e0da65cbd304c104b36e464d5dc50edda9962",()=>n.openFolder,"4006ec456294ab70438f8582024fa5871d5a694cbe",()=>B.getFeatureMetadata,"4007444ec512082a5e79bb5dee290f5c0d05e774ef",()=>v.resumeFeature,"401af034959c5bbba2ad8be3907e53bbc3ede7d2cd",()=>i.deployRepository,"401f66ef4558bb9328d03a36ad72674d98936ce338",()=>k.getDeploymentStatus,"401fcb8958d2277a5b34228e1867bf1cf52045941b",()=>z.addRepository,"4022a787878a9d01989399447b88565c170df206db",()=>A.deleteRepository,"40251f323ff2d234756b512edf0efad1dceae61f23",()=>e.listGitHubRepositories,"404ceab40e0ab85f76116276ebad0ca707178efc4f",()=>o.syncRepository,"40668ca32c0b63d012073e714e0cb04e3776dd526d",()=>w.startFeature,"4081c0d014119b5d37a78b78073c3bedf231538a82",()=>l.openIde,"4088b7549dfeab810cbefcba611afd1fdaa81f958d",()=>h.deployFeature,"409332a02ef4b4bc44c4ff8148b7252131bdd9de62",()=>m.openShell,"40ace9ce468348948c3c03a6e9173c002627beab6d",()=>j.stopDeployment,"40b7a26c67f15d8de499c3991fa05ad2b6144e3504",()=>p.getDeploymentLogs,"40bd6a598641a5d4dad3a2b1cbdc1e3247da695907",()=>x.stopFeature,"40d452b5620368f1552b59f59dd1dd61a3284eff3d",()=>t.archiveFeature,"40e703c550c84065d6e467f58d9e8c2620296ec403",()=>g.importGitHubRepository,"40f66ba6ba3a423060e962b53043b8fb48fd666c47",()=>y.unarchiveFeature,"60541238624bbc1dc948beca449f63d772300e90e0",()=>C.getGitRepoInfo,"60d0d75eae0e959bca7b3b6686d28a38ada4bf4a71",()=>c.updateAgentAndModel,"7898d1db354181a68b93e461664a09dcc5e51c6537",()=>u.deleteFeature],81799)}];
2
2
 
3
3
  //# sourceMappingURL=src_presentation_web_e3a30e30._.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/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,4DCtLtB,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/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 '0032c6cdc2edf34e30b12287e50cb502ec99886df7'} from 'ACTIONS_MODULE0'\nexport {updateAgentAndModel as '60d0d75eae0e959bca7b3b6686d28a38ada4bf4a71'} from 'ACTIONS_MODULE1'\nexport {pickFolder as '00fb8e6b15df992342f45bbd9fe04cb4522eeeb9d4'} from 'ACTIONS_MODULE2'\nexport {listGitHubRepositories as '40251f323ff2d234756b512edf0efad1dceae61f23'} from 'ACTIONS_MODULE3'\nexport {listGitHubOrganizations as '005763ceb71def28953f9f6efb5f9836a446a0cddd'} from 'ACTIONS_MODULE4'\nexport {importGitHubRepository as '40e703c550c84065d6e467f58d9e8c2620296ec403'} from 'ACTIONS_MODULE5'\nexport {deployFeature as '4088b7549dfeab810cbefcba611afd1fdaa81f958d'} from 'ACTIONS_MODULE6'\nexport {deployRepository as '401af034959c5bbba2ad8be3907e53bbc3ede7d2cd'} from 'ACTIONS_MODULE7'\nexport {stopDeployment as '40ace9ce468348948c3c03a6e9173c002627beab6d'} from 'ACTIONS_MODULE8'\nexport {getDeploymentStatus as '401f66ef4558bb9328d03a36ad72674d98936ce338'} from 'ACTIONS_MODULE9'\nexport {openIde as '4081c0d014119b5d37a78b78073c3bedf231538a82'} from 'ACTIONS_MODULE10'\nexport {openShell as '409332a02ef4b4bc44c4ff8148b7252131bdd9de62'} from 'ACTIONS_MODULE11'\nexport {openFolder as '40011e0da65cbd304c104b36e464d5dc50edda9962'} from 'ACTIONS_MODULE12'\nexport {syncRepository as '404ceab40e0ab85f76116276ebad0ca707178efc4f'} from 'ACTIONS_MODULE13'\nexport {getDeploymentLogs as '40b7a26c67f15d8de499c3991fa05ad2b6144e3504'} from 'ACTIONS_MODULE14'\nexport {isAgentSetupComplete as '0045175612c7a075204f57eab743c13af6936e8543'} from 'ACTIONS_MODULE15'\nexport {checkAgentAuth as '008c1dcbd677714821eefbc3fb3ebe9cd8869f591f'} from 'ACTIONS_MODULE16'\nexport {checkToolStatus as '00f6ea419c5545770a6c71bc4c43fe04d7a22ea068'} from 'ACTIONS_MODULE17'\nexport {archiveFeature as '40d452b5620368f1552b59f59dd1dd61a3284eff3d'} from 'ACTIONS_MODULE18'\nexport {deleteFeature as '7898d1db354181a68b93e461664a09dcc5e51c6537'} from 'ACTIONS_MODULE19'\nexport {resumeFeature as '4007444ec512082a5e79bb5dee290f5c0d05e774ef'} from 'ACTIONS_MODULE20'\nexport {startFeature as '40668ca32c0b63d012073e714e0cb04e3776dd526d'} from 'ACTIONS_MODULE21'\nexport {stopFeature as '40bd6a598641a5d4dad3a2b1cbdc1e3247da695907'} from 'ACTIONS_MODULE22'\nexport {unarchiveFeature as '40f66ba6ba3a423060e962b53043b8fb48fd666c47'} from 'ACTIONS_MODULE23'\nexport {addRepository as '401fcb8958d2277a5b34228e1867bf1cf52045941b'} from 'ACTIONS_MODULE24'\nexport {deleteRepository as '4022a787878a9d01989399447b88565c170df206db'} from 'ACTIONS_MODULE25'\nexport {getFeatureMetadata as '4006ec456294ab70438f8582024fa5871d5a694cbe'} from 'ACTIONS_MODULE26'\nexport {getGitRepoInfo as '60541238624bbc1dc948beca449f63d772300e90e0'} from 'ACTIONS_MODULE27'\n"],"names":[],"mappings":"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"}