@shepai/cli 1.175.1-pr537.fc6a92c → 1.176.0

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 (764) hide show
  1. package/apis/json-schema/AgentConfig.yaml +0 -3
  2. package/apis/json-schema/AgentType.yaml +0 -1
  3. package/dist/packages/core/src/application/ports/output/agents/agent-executor.interface.d.ts +1 -3
  4. package/dist/packages/core/src/application/ports/output/agents/agent-executor.interface.d.ts.map +1 -1
  5. package/dist/packages/core/src/application/ports/output/agents/agent-run-repository.interface.d.ts +0 -7
  6. package/dist/packages/core/src/application/ports/output/agents/agent-run-repository.interface.d.ts.map +1 -1
  7. package/dist/packages/core/src/application/ports/output/agents/phase-timing-repository.interface.d.ts +0 -7
  8. package/dist/packages/core/src/application/ports/output/agents/phase-timing-repository.interface.d.ts.map +1 -1
  9. package/dist/packages/core/src/application/ports/output/services/index.d.ts +0 -3
  10. package/dist/packages/core/src/application/ports/output/services/index.d.ts.map +1 -1
  11. package/dist/packages/core/src/application/use-cases/agents/get-agent-session.use-case.d.ts +1 -3
  12. package/dist/packages/core/src/application/use-cases/agents/get-agent-session.use-case.d.ts.map +1 -1
  13. package/dist/packages/core/src/application/use-cases/agents/get-agent-session.use-case.js +4 -6
  14. package/dist/packages/core/src/application/use-cases/agents/list-agent-sessions.use-case.d.ts +1 -3
  15. package/dist/packages/core/src/application/use-cases/agents/list-agent-sessions.use-case.d.ts.map +1 -1
  16. package/dist/packages/core/src/application/use-cases/agents/list-agent-sessions.use-case.js +4 -6
  17. package/dist/packages/core/src/application/use-cases/agents/reject-agent-run.use-case.js +1 -1
  18. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts +1 -3
  19. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
  20. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +7 -9
  21. package/dist/packages/core/src/application/use-cases/features/rebase-feature-on-main.use-case.js +2 -2
  22. package/dist/packages/core/src/application/use-cases/settings/check-onboarding-status.use-case.d.ts +2 -5
  23. package/dist/packages/core/src/application/use-cases/settings/check-onboarding-status.use-case.d.ts.map +1 -1
  24. package/dist/packages/core/src/application/use-cases/settings/check-onboarding-status.use-case.js +6 -28
  25. package/dist/packages/core/src/domain/generated/output.d.ts +35 -42
  26. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  27. package/dist/packages/core/src/domain/generated/output.js +1 -7
  28. package/dist/packages/core/src/infrastructure/di/container.d.ts +0 -3
  29. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  30. package/dist/packages/core/src/infrastructure/di/container.js +501 -27
  31. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/agent-run.mapper.d.ts.map +1 -1
  32. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/agent-run.mapper.js +2 -2
  33. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +0 -1
  34. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
  35. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +2 -6
  36. package/dist/packages/core/src/infrastructure/repositories/agent-run.repository.d.ts +0 -1
  37. package/dist/packages/core/src/infrastructure/repositories/agent-run.repository.d.ts.map +1 -1
  38. package/dist/packages/core/src/infrastructure/repositories/agent-run.repository.js +0 -8
  39. package/dist/packages/core/src/infrastructure/repositories/sqlite-phase-timing.repository.d.ts +0 -1
  40. package/dist/packages/core/src/infrastructure/repositories/sqlite-phase-timing.repository.d.ts.map +1 -1
  41. package/dist/packages/core/src/infrastructure/repositories/sqlite-phase-timing.repository.js +3 -11
  42. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.d.ts.map +1 -1
  43. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +2 -3
  44. package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-factory.service.d.ts.map +1 -1
  45. package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-factory.service.js +0 -10
  46. package/dist/packages/core/src/infrastructure/services/agents/common/agent-runner.service.d.ts.map +1 -1
  47. package/dist/packages/core/src/infrastructure/services/agents/common/agent-runner.service.js +4 -4
  48. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.d.ts +7 -3
  49. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.d.ts.map +1 -1
  50. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.js +35 -19
  51. package/dist/packages/core/src/infrastructure/services/agents/common/executors/codex-cli-executor.service.d.ts +7 -3
  52. package/dist/packages/core/src/infrastructure/services/agents/common/executors/codex-cli-executor.service.d.ts.map +1 -1
  53. package/dist/packages/core/src/infrastructure/services/agents/common/executors/codex-cli-executor.service.js +30 -17
  54. package/dist/packages/core/src/infrastructure/services/agents/common/executors/copilot-cli-executor.service.d.ts +7 -3
  55. package/dist/packages/core/src/infrastructure/services/agents/common/executors/copilot-cli-executor.service.d.ts.map +1 -1
  56. package/dist/packages/core/src/infrastructure/services/agents/common/executors/copilot-cli-executor.service.js +34 -23
  57. package/dist/packages/core/src/infrastructure/services/agents/common/executors/cursor-executor.service.d.ts +7 -3
  58. package/dist/packages/core/src/infrastructure/services/agents/common/executors/cursor-executor.service.d.ts.map +1 -1
  59. package/dist/packages/core/src/infrastructure/services/agents/common/executors/cursor-executor.service.js +16 -21
  60. package/dist/packages/core/src/infrastructure/services/agents/common/executors/gemini-cli-executor.service.d.ts +7 -3
  61. package/dist/packages/core/src/infrastructure/services/agents/common/executors/gemini-cli-executor.service.d.ts.map +1 -1
  62. package/dist/packages/core/src/infrastructure/services/agents/common/executors/gemini-cli-executor.service.js +33 -21
  63. package/dist/packages/core/src/infrastructure/services/agents/common/types.d.ts +0 -5
  64. package/dist/packages/core/src/infrastructure/services/agents/common/types.d.ts.map +1 -1
  65. package/dist/packages/core/src/infrastructure/services/agents/common/types.js +1 -5
  66. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts +1 -1
  67. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.js +1 -1
  68. package/dist/packages/core/src/infrastructure/services/external/github-repository.service.d.ts.map +1 -1
  69. package/dist/packages/core/src/infrastructure/services/external/github-repository.service.js +7 -16
  70. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts +47 -44
  71. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts.map +1 -1
  72. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.js +853 -121
  73. package/dist/packages/core/src/infrastructure/services/interactive/interactive-session.service.d.ts +70 -19
  74. package/dist/packages/core/src/infrastructure/services/interactive/interactive-session.service.d.ts.map +1 -1
  75. package/dist/packages/core/src/infrastructure/services/interactive/interactive-session.service.js +991 -44
  76. package/dist/packages/core/src/infrastructure/services/notifications/notification-watcher.service.js +3 -3
  77. package/dist/packages/core/src/infrastructure/services/pr-sync/pr-sync-watcher.service.js +1 -1
  78. package/dist/src/presentation/cli/commands/agent/show.command.js +2 -3
  79. package/dist/src/presentation/cli/commands/feat/new.command.js +1 -1
  80. package/dist/src/presentation/cli/commands/feat/show.command.js +1 -1
  81. package/dist/src/presentation/tui/prompts/agent-select.prompt.d.ts.map +1 -1
  82. package/dist/src/presentation/tui/prompts/agent-select.prompt.js +0 -5
  83. package/dist/src/presentation/web/app/actions/agent-setup-flag.d.ts.map +1 -1
  84. package/dist/src/presentation/web/app/actions/agent-setup-flag.js +2 -3
  85. package/dist/src/presentation/web/app/actions/check-agent-auth.d.ts.map +1 -1
  86. package/dist/src/presentation/web/app/actions/check-agent-auth.js +2 -18
  87. package/dist/src/presentation/web/app/actions/get-all-agent-models.d.ts.map +1 -1
  88. package/dist/src/presentation/web/app/actions/get-all-agent-models.js +0 -2
  89. package/dist/src/presentation/web/app/actions/get-feature-phase-timings.d.ts.map +1 -1
  90. package/dist/src/presentation/web/app/actions/get-feature-phase-timings.js +3 -4
  91. package/dist/src/presentation/web/app/actions/get-supported-models.js +3 -2
  92. package/dist/src/presentation/web/app/actions/get-workflow-defaults.d.ts.map +1 -1
  93. package/dist/src/presentation/web/app/actions/get-workflow-defaults.js +2 -3
  94. package/dist/src/presentation/web/app/actions/open-ide.js +3 -2
  95. package/dist/src/presentation/web/app/actions/open-shell.d.ts.map +1 -1
  96. package/dist/src/presentation/web/app/actions/open-shell.js +0 -15
  97. package/dist/src/presentation/web/app/actions/update-model.d.ts.map +1 -1
  98. package/dist/src/presentation/web/app/actions/update-model.js +2 -3
  99. package/dist/src/presentation/web/app/api/agent-events/health/route.d.ts.map +1 -1
  100. package/dist/src/presentation/web/app/api/agent-events/health/route.js +12 -9
  101. package/dist/src/presentation/web/app/api/agent-events/route.d.ts +14 -7
  102. package/dist/src/presentation/web/app/api/agent-events/route.d.ts.map +1 -1
  103. package/dist/src/presentation/web/app/api/agent-events/route.js +301 -20
  104. package/dist/src/presentation/web/app/api/attachments/preview/route.d.ts.map +1 -1
  105. package/dist/src/presentation/web/app/api/attachments/preview/route.js +1 -5
  106. package/dist/src/presentation/web/app/api/attachments/upload/route.d.ts.map +1 -1
  107. package/dist/src/presentation/web/app/api/attachments/upload/route.js +2 -2
  108. package/dist/src/presentation/web/app/api/attachments/upload-from-path/route.d.ts.map +1 -1
  109. package/dist/src/presentation/web/app/api/attachments/upload-from-path/route.js +2 -2
  110. package/dist/src/presentation/web/app/api/cli-upgrade/route.d.ts.map +1 -1
  111. package/dist/src/presentation/web/app/api/cli-upgrade/route.js +1 -3
  112. package/dist/src/presentation/web/app/api/deployment-logs/route.d.ts.map +1 -1
  113. package/dist/src/presentation/web/app/api/deployment-logs/route.js +6 -2
  114. package/dist/src/presentation/web/app/api/dialog/pick-files/route.d.ts.map +1 -1
  115. package/dist/src/presentation/web/app/api/dialog/pick-files/route.js +2 -3
  116. package/dist/src/presentation/web/app/api/directory/list/route.d.ts.map +1 -1
  117. package/dist/src/presentation/web/app/api/directory/list/route.js +5 -8
  118. package/dist/src/presentation/web/app/api/feature-logs/route.d.ts.map +1 -1
  119. package/dist/src/presentation/web/app/api/feature-logs/route.js +6 -2
  120. package/dist/src/presentation/web/app/api/graph-data/route.d.ts +4 -1
  121. package/dist/src/presentation/web/app/api/graph-data/route.d.ts.map +1 -1
  122. package/dist/src/presentation/web/app/api/graph-data/route.js +2 -8
  123. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/mark-read/route.d.ts.map +1 -1
  124. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/mark-read/route.js +3 -2
  125. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/messages/route.d.ts.map +1 -1
  126. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/messages/route.js +10 -5
  127. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/respond/route.d.ts.map +1 -1
  128. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/respond/route.js +5 -5
  129. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stop/route.d.ts.map +1 -1
  130. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stop/route.js +3 -2
  131. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.d.ts.map +1 -1
  132. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.js +6 -2
  133. package/dist/src/presentation/web/app/api/interactive/chat/turn-statuses/route.d.ts.map +1 -1
  134. package/dist/src/presentation/web/app/api/interactive/chat/turn-statuses/route.js +3 -2
  135. package/dist/src/presentation/web/app/api/interactive/sessions/[id]/messages/route.d.ts.map +1 -1
  136. package/dist/src/presentation/web/app/api/interactive/sessions/[id]/messages/route.js +10 -5
  137. package/dist/src/presentation/web/app/api/interactive/sessions/[id]/route.d.ts.map +1 -1
  138. package/dist/src/presentation/web/app/api/interactive/sessions/[id]/route.js +6 -3
  139. package/dist/src/presentation/web/app/api/interactive/sessions/[id]/stream/route.d.ts.map +1 -1
  140. package/dist/src/presentation/web/app/api/interactive/sessions/[id]/stream/route.js +6 -2
  141. package/dist/src/presentation/web/app/api/interactive/sessions/route.d.ts.map +1 -1
  142. package/dist/src/presentation/web/app/api/interactive/sessions/route.js +3 -2
  143. package/dist/src/presentation/web/app/api/npm-version/route.d.ts.map +1 -1
  144. package/dist/src/presentation/web/app/api/npm-version/route.js +2 -2
  145. package/dist/src/presentation/web/app/api/sessions/route.d.ts +15 -1
  146. package/dist/src/presentation/web/app/api/sessions/route.d.ts.map +1 -1
  147. package/dist/src/presentation/web/app/api/sessions/route.js +3 -2
  148. package/dist/src/presentation/web/app/api/sessions-batch/route.d.ts +8 -1
  149. package/dist/src/presentation/web/app/api/sessions-batch/route.d.ts.map +1 -1
  150. package/dist/src/presentation/web/app/api/sessions-batch/route.js +3 -2
  151. package/dist/src/presentation/web/app/api/tools/[id]/install/route.d.ts.map +1 -1
  152. package/dist/src/presentation/web/app/api/tools/[id]/install/route.js +2 -2
  153. package/dist/src/presentation/web/app/api/tools/[id]/install/stream/route.d.ts.map +1 -1
  154. package/dist/src/presentation/web/app/api/tools/[id]/install/stream/route.js +1 -3
  155. package/dist/src/presentation/web/app/api/tools/[id]/launch/route.d.ts.map +1 -1
  156. package/dist/src/presentation/web/app/api/tools/[id]/launch/route.js +2 -2
  157. package/dist/src/presentation/web/app/api/tools/route.d.ts.map +1 -1
  158. package/dist/src/presentation/web/app/api/tools/route.js +2 -2
  159. package/dist/src/presentation/web/app/layout.d.ts.map +1 -1
  160. package/dist/src/presentation/web/app/layout.js +1 -2
  161. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.d.ts.map +1 -1
  162. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.js +0 -12
  163. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.d.ts.map +1 -1
  164. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.js +2 -2
  165. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.d.ts.map +1 -1
  166. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.js +1 -1
  167. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
  168. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +1 -1
  169. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.d.ts +1 -1
  170. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.d.ts.map +1 -1
  171. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.js +0 -2
  172. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.stories.d.ts.map +1 -1
  173. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.stories.js +0 -1
  174. package/dist/src/presentation/web/components/features/chat/ChatSheet.d.ts.map +1 -1
  175. package/dist/src/presentation/web/components/features/chat/ChatSheet.js +1 -1
  176. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.d.ts.map +1 -1
  177. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.js +3 -7
  178. package/dist/src/presentation/web/components/features/settings/ModelPicker/index.d.ts.map +1 -1
  179. package/dist/src/presentation/web/components/features/settings/ModelPicker/index.js +2 -2
  180. package/dist/src/presentation/web/components/features/settings/agent-settings-section.d.ts.map +1 -1
  181. package/dist/src/presentation/web/components/features/settings/agent-settings-section.js +0 -1
  182. package/dist/src/presentation/web/hooks/use-agent-events.js +1 -5
  183. package/dist/src/presentation/web/lib/is-same-shep-instance.d.ts.map +1 -1
  184. package/dist/src/presentation/web/lib/is-same-shep-instance.js +5 -2
  185. package/dist/translations/ar/common.json +1 -0
  186. package/dist/translations/ar/tui.json +0 -4
  187. package/dist/translations/ar/web.json +0 -1
  188. package/dist/translations/de/common.json +1 -0
  189. package/dist/translations/de/tui.json +0 -1
  190. package/dist/translations/de/web.json +0 -1
  191. package/dist/translations/en/common.json +1 -0
  192. package/dist/translations/en/tui.json +0 -4
  193. package/dist/translations/en/web.json +0 -1
  194. package/dist/translations/es/common.json +1 -0
  195. package/dist/translations/es/tui.json +0 -4
  196. package/dist/translations/es/web.json +0 -1
  197. package/dist/translations/fr/common.json +1 -0
  198. package/dist/translations/fr/tui.json +0 -4
  199. package/dist/translations/fr/web.json +0 -1
  200. package/dist/translations/he/common.json +1 -0
  201. package/dist/translations/he/tui.json +0 -4
  202. package/dist/translations/he/web.json +0 -1
  203. package/dist/translations/pt/common.json +1 -0
  204. package/dist/translations/pt/tui.json +0 -4
  205. package/dist/translations/pt/web.json +0 -1
  206. package/dist/translations/ru/common.json +1 -0
  207. package/dist/translations/ru/tui.json +0 -4
  208. package/dist/translations/ru/web.json +0 -1
  209. package/dist/translations/uk/cli.json +631 -0
  210. package/dist/translations/uk/common.json +56 -0
  211. package/dist/translations/uk/tui.json +134 -0
  212. package/dist/translations/uk/web.json +615 -0
  213. package/dist/tsconfig.build.tsbuildinfo +1 -1
  214. package/package.json +3 -7
  215. package/web/.next/BUILD_ID +1 -1
  216. package/web/.next/build-manifest.json +2 -2
  217. package/web/.next/fallback-build-manifest.json +2 -2
  218. package/web/.next/prerender-manifest.json +3 -3
  219. package/web/.next/required-server-files.js +2 -2
  220. package/web/.next/required-server-files.json +2 -2
  221. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +58 -73
  222. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +5 -5
  223. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  224. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  225. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +54 -69
  226. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js +5 -5
  227. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  228. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  229. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +60 -75
  230. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +5 -5
  231. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  232. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  233. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +76 -91
  234. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +5 -5
  235. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  236. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  237. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +76 -91
  238. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +5 -5
  239. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  240. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  241. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +56 -71
  242. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +5 -5
  243. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  244. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  245. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +56 -71
  246. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +5 -5
  247. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  248. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  249. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +54 -69
  250. package/web/.next/server/app/(dashboard)/chat/page.js +5 -5
  251. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  252. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  253. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +60 -75
  254. package/web/.next/server/app/(dashboard)/create/page.js +5 -5
  255. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  256. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  257. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +76 -91
  258. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +5 -5
  259. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  260. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  261. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +76 -91
  262. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +5 -5
  263. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  264. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  265. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +54 -69
  266. package/web/.next/server/app/(dashboard)/page.js +5 -5
  267. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  268. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  269. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +56 -71
  270. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +5 -5
  271. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  272. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  273. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +56 -71
  274. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +5 -5
  275. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  276. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  277. package/web/.next/server/app/_global-error/page.js +1 -1
  278. package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
  279. package/web/.next/server/app/_global-error.html +2 -2
  280. package/web/.next/server/app/_global-error.rsc +1 -1
  281. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  282. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  283. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  284. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  285. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  286. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +12 -27
  287. package/web/.next/server/app/_not-found/page.js +3 -3
  288. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  289. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  290. package/web/.next/server/app/api/agent-events/route.js +2 -2
  291. package/web/.next/server/app/api/agent-events/route.js.nft.json +1 -1
  292. package/web/.next/server/app/api/attachments/preview/route.js +1 -1
  293. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  294. package/web/.next/server/app/api/attachments/upload/route.js +1 -1
  295. package/web/.next/server/app/api/attachments/upload/route.js.nft.json +1 -1
  296. package/web/.next/server/app/api/attachments/upload-from-path/route.js +1 -1
  297. package/web/.next/server/app/api/attachments/upload-from-path/route.js.nft.json +1 -1
  298. package/web/.next/server/app/api/deployment-logs/route.js +1 -2
  299. package/web/.next/server/app/api/deployment-logs/route.js.nft.json +1 -1
  300. package/web/.next/server/app/api/directory/list/route.js +1 -1
  301. package/web/.next/server/app/api/directory/list/route.js.nft.json +1 -1
  302. package/web/.next/server/app/api/evidence/route.js +1 -1
  303. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  304. package/web/.next/server/app/api/feature-logs/route.js +1 -2
  305. package/web/.next/server/app/api/feature-logs/route.js.nft.json +1 -1
  306. package/web/.next/server/app/api/graph-data/route.js +1 -1
  307. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  308. package/web/.next/server/app/api/interactive/chat/[featureId]/mark-read/route.js +1 -1
  309. package/web/.next/server/app/api/interactive/chat/[featureId]/mark-read/route.js.nft.json +1 -1
  310. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js +1 -1
  311. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
  312. package/web/.next/server/app/api/interactive/chat/[featureId]/respond/route.js +1 -1
  313. package/web/.next/server/app/api/interactive/chat/[featureId]/respond/route.js.nft.json +1 -1
  314. package/web/.next/server/app/api/interactive/chat/[featureId]/stop/route.js +1 -1
  315. package/web/.next/server/app/api/interactive/chat/[featureId]/stop/route.js.nft.json +1 -1
  316. package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route.js +1 -2
  317. package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route.js.nft.json +1 -1
  318. package/web/.next/server/app/api/interactive/chat/turn-statuses/route.js +1 -1
  319. package/web/.next/server/app/api/interactive/chat/turn-statuses/route.js.nft.json +1 -1
  320. package/web/.next/server/app/api/interactive/sessions/[id]/messages/route.js +1 -1
  321. package/web/.next/server/app/api/interactive/sessions/[id]/messages/route.js.nft.json +1 -1
  322. package/web/.next/server/app/api/interactive/sessions/[id]/route.js +1 -1
  323. package/web/.next/server/app/api/interactive/sessions/[id]/route.js.nft.json +1 -1
  324. package/web/.next/server/app/api/interactive/sessions/[id]/stream/route.js +1 -2
  325. package/web/.next/server/app/api/interactive/sessions/[id]/stream/route.js.nft.json +1 -1
  326. package/web/.next/server/app/api/interactive/sessions/route.js +1 -1
  327. package/web/.next/server/app/api/interactive/sessions/route.js.nft.json +1 -1
  328. package/web/.next/server/app/api/npm-version/route.js +1 -1
  329. package/web/.next/server/app/api/npm-version/route.js.nft.json +1 -1
  330. package/web/.next/server/app/api/sessions/route.js +1 -1
  331. package/web/.next/server/app/api/sessions/route.js.nft.json +1 -1
  332. package/web/.next/server/app/api/sessions-batch/route.js +1 -1
  333. package/web/.next/server/app/api/sessions-batch/route.js.nft.json +1 -1
  334. package/web/.next/server/app/api/tools/[id]/install/route.js +1 -1
  335. package/web/.next/server/app/api/tools/[id]/install/route.js.nft.json +1 -1
  336. package/web/.next/server/app/api/tools/[id]/launch/route.js +1 -1
  337. package/web/.next/server/app/api/tools/[id]/launch/route.js.nft.json +1 -1
  338. package/web/.next/server/app/api/tools/route.js +1 -1
  339. package/web/.next/server/app/api/tools/route.js.nft.json +1 -1
  340. package/web/.next/server/app/features/page/server-reference-manifest.json +12 -27
  341. package/web/.next/server/app/features/page.js +3 -3
  342. package/web/.next/server/app/features/page.js.nft.json +1 -1
  343. package/web/.next/server/app/features/page_client-reference-manifest.js +1 -1
  344. package/web/.next/server/app/settings/page/server-reference-manifest.json +18 -33
  345. package/web/.next/server/app/settings/page.js +3 -4
  346. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  347. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  348. package/web/.next/server/app/skills/page/server-reference-manifest.json +26 -41
  349. package/web/.next/server/app/skills/page.js +4 -4
  350. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  351. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  352. package/web/.next/server/app/tools/page/server-reference-manifest.json +22 -37
  353. package/web/.next/server/app/tools/page.js +4 -4
  354. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  355. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  356. package/web/.next/server/app/version/page/server-reference-manifest.json +12 -27
  357. package/web/.next/server/app/version/page.js +4 -4
  358. package/web/.next/server/app/version/page.js.nft.json +1 -1
  359. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  360. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
  361. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
  362. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +12 -0
  363. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +1 -0
  364. package/web/.next/server/chunks/[root-of-the-server]__0866d2b5._.js +3 -0
  365. package/web/.next/server/chunks/[root-of-the-server]__0866d2b5._.js.map +1 -0
  366. package/web/.next/server/chunks/[root-of-the-server]__10852c5c._.js +3 -0
  367. package/web/.next/server/chunks/[root-of-the-server]__10852c5c._.js.map +1 -0
  368. package/web/.next/server/chunks/[root-of-the-server]__2b1074db._.js +12 -0
  369. package/web/.next/server/chunks/[root-of-the-server]__2b1074db._.js.map +1 -0
  370. package/web/.next/server/chunks/[root-of-the-server]__2b71641f._.js +3 -0
  371. package/web/.next/server/chunks/[root-of-the-server]__2b71641f._.js.map +1 -0
  372. package/web/.next/server/chunks/[root-of-the-server]__2bb675ff._.js +3 -0
  373. package/web/.next/server/chunks/[root-of-the-server]__2bb675ff._.js.map +1 -0
  374. package/web/.next/server/chunks/[root-of-the-server]__2f61738a._.js +3 -0
  375. package/web/.next/server/chunks/[root-of-the-server]__2f61738a._.js.map +1 -0
  376. package/web/.next/server/chunks/[root-of-the-server]__31598852._.js +3 -0
  377. package/web/.next/server/chunks/[root-of-the-server]__31598852._.js.map +1 -0
  378. package/web/.next/server/chunks/[root-of-the-server]__31944fa2._.js +3 -0
  379. package/web/.next/server/chunks/[root-of-the-server]__31944fa2._.js.map +1 -0
  380. package/web/.next/server/chunks/[root-of-the-server]__32b04219._.js +3 -0
  381. package/web/.next/server/chunks/[root-of-the-server]__32b04219._.js.map +1 -0
  382. package/web/.next/server/chunks/[root-of-the-server]__332c8d91._.js +1 -1
  383. package/web/.next/server/chunks/[root-of-the-server]__332c8d91._.js.map +1 -1
  384. package/web/.next/server/chunks/[root-of-the-server]__3b72e8b0._.js +3 -0
  385. package/web/.next/server/chunks/[root-of-the-server]__3b72e8b0._.js.map +1 -0
  386. package/web/.next/server/chunks/[root-of-the-server]__4408a5ba._.js +12 -0
  387. package/web/.next/server/chunks/[root-of-the-server]__4408a5ba._.js.map +1 -0
  388. package/web/.next/server/chunks/[root-of-the-server]__6565a045._.js +3 -0
  389. package/web/.next/server/chunks/[root-of-the-server]__6565a045._.js.map +1 -0
  390. package/web/.next/server/chunks/[root-of-the-server]__8a281f8d._.js +24 -0
  391. package/web/.next/server/chunks/[root-of-the-server]__8a281f8d._.js.map +1 -0
  392. package/web/.next/server/chunks/[root-of-the-server]__8f8d6afe._.js +3 -0
  393. package/web/.next/server/chunks/[root-of-the-server]__8f8d6afe._.js.map +1 -0
  394. package/web/.next/server/chunks/[root-of-the-server]__9191749c._.js +3 -0
  395. package/web/.next/server/chunks/[root-of-the-server]__9191749c._.js.map +1 -0
  396. package/web/.next/server/chunks/[root-of-the-server]__9a136c79._.js +9 -0
  397. package/web/.next/server/chunks/[root-of-the-server]__9a136c79._.js.map +1 -0
  398. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  399. package/web/.next/server/chunks/[root-of-the-server]__ab4951b1._.js +3 -0
  400. package/web/.next/server/chunks/[root-of-the-server]__ab4951b1._.js.map +1 -0
  401. package/web/.next/server/chunks/[root-of-the-server]__acea6565._.js +3 -0
  402. package/web/.next/server/chunks/[root-of-the-server]__acea6565._.js.map +1 -0
  403. package/web/.next/server/chunks/[root-of-the-server]__b2f9a412._.js +3 -0
  404. package/web/.next/server/chunks/{[root-of-the-server]__f1aeae12._.js.map → [root-of-the-server]__b2f9a412._.js.map} +1 -1
  405. package/web/.next/server/chunks/[root-of-the-server]__b4102cc7._.js +3 -0
  406. package/web/.next/server/chunks/[root-of-the-server]__b4102cc7._.js.map +1 -0
  407. package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js +3 -0
  408. package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js.map +1 -0
  409. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +3 -0
  410. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -0
  411. package/web/.next/server/chunks/[root-of-the-server]__d2c18946._.js +3 -3
  412. package/web/.next/server/chunks/[root-of-the-server]__d2c18946._.js.map +1 -1
  413. package/web/.next/server/chunks/[root-of-the-server]__d9d410a8._.js +1 -1
  414. package/web/.next/server/chunks/[root-of-the-server]__d9d410a8._.js.map +1 -1
  415. package/web/.next/server/chunks/[root-of-the-server]__e247a485._.js +3 -3
  416. package/web/.next/server/chunks/[root-of-the-server]__e247a485._.js.map +1 -1
  417. package/web/.next/server/chunks/{[root-of-the-server]__937ba94e._.js → [root-of-the-server]__e3692208._.js} +2 -2
  418. package/web/.next/server/chunks/[root-of-the-server]__ea653642._.js +3 -0
  419. package/web/.next/server/chunks/[root-of-the-server]__ea653642._.js.map +1 -0
  420. package/web/.next/server/chunks/[root-of-the-server]__fc6fd958._.js +3 -0
  421. package/web/.next/server/chunks/[root-of-the-server]__fc6fd958._.js.map +1 -0
  422. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_ad0071c9.js +3 -0
  423. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_ad0071c9.js.map +1 -0
  424. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_90d98b2b.js +3 -0
  425. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_90d98b2b.js.map +1 -0
  426. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_d3828105.js +3 -0
  427. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_d3828105.js.map +1 -0
  428. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  429. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  430. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +2 -2
  431. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
  432. package/web/.next/server/chunks/ssr/[root-of-the-server]__1cd4327c._.js +4 -0
  433. package/web/.next/server/chunks/ssr/[root-of-the-server]__1cd4327c._.js.map +1 -0
  434. package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js +4 -0
  435. package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js.map +1 -0
  436. package/web/.next/server/chunks/ssr/{[root-of-the-server]__08e7a080._.js → [root-of-the-server]__22d17c66._.js} +2 -2
  437. package/web/.next/server/chunks/ssr/{[root-of-the-server]__08e7a080._.js.map → [root-of-the-server]__22d17c66._.js.map} +1 -1
  438. package/web/.next/server/chunks/ssr/[root-of-the-server]__23b5ca2c._.js +1 -1
  439. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +3 -0
  440. package/web/.next/server/chunks/ssr/{[root-of-the-server]__ff332bfb._.js.map → [root-of-the-server]__357d99f9._.js.map} +1 -1
  441. package/web/.next/server/chunks/ssr/[root-of-the-server]__51ec77a8._.js +3 -0
  442. package/web/.next/server/chunks/ssr/[root-of-the-server]__51ec77a8._.js.map +1 -0
  443. package/web/.next/server/chunks/ssr/[root-of-the-server]__540c615f._.js +4 -0
  444. package/web/.next/server/chunks/ssr/[root-of-the-server]__540c615f._.js.map +1 -0
  445. package/web/.next/server/chunks/ssr/[root-of-the-server]__66047a1b._.js +3 -0
  446. package/web/.next/server/chunks/ssr/[root-of-the-server]__66047a1b._.js.map +1 -0
  447. package/web/.next/server/chunks/ssr/{[root-of-the-server]__16c1388b._.js → [root-of-the-server]__69dd3217._.js} +2 -2
  448. package/web/.next/server/chunks/ssr/{[root-of-the-server]__16c1388b._.js.map → [root-of-the-server]__69dd3217._.js.map} +1 -1
  449. package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js +4 -0
  450. package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js.map +1 -0
  451. package/web/.next/server/chunks/ssr/[root-of-the-server]__7528eb6f._.js +1 -1
  452. package/web/.next/server/chunks/ssr/[root-of-the-server]__a932cd3a._.js +3 -0
  453. package/web/.next/server/chunks/ssr/[root-of-the-server]__a932cd3a._.js.map +1 -0
  454. package/web/.next/server/chunks/ssr/[root-of-the-server]__aa72e794._.js +3 -0
  455. package/web/.next/server/chunks/ssr/[root-of-the-server]__aa72e794._.js.map +1 -0
  456. package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js +4 -0
  457. package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js.map +1 -0
  458. package/web/.next/server/chunks/ssr/[root-of-the-server]__d1040bd1._.js +3 -0
  459. package/web/.next/server/chunks/ssr/{[root-of-the-server]__f5614810._.js.map → [root-of-the-server]__d1040bd1._.js.map} +1 -1
  460. package/web/.next/server/chunks/ssr/[root-of-the-server]__efeeaed4._.js +3 -0
  461. package/web/.next/server/chunks/ssr/{[root-of-the-server]__d5e22d1a._.js.map → [root-of-the-server]__efeeaed4._.js.map} +1 -1
  462. package/web/.next/server/chunks/ssr/_05c23ad9._.js +1 -1
  463. package/web/.next/server/chunks/ssr/_05c23ad9._.js.map +1 -1
  464. package/web/.next/server/chunks/ssr/_16eb4fec._.js +1 -1
  465. package/web/.next/server/chunks/ssr/_16eb4fec._.js.map +1 -1
  466. package/web/.next/server/chunks/ssr/{_5747febb._.js → _1e08a336._.js} +2 -2
  467. package/web/.next/server/chunks/ssr/_1e08a336._.js.map +1 -0
  468. package/web/.next/server/chunks/ssr/{_ed2f2799._.js → _295fffde._.js} +2 -2
  469. package/web/.next/server/chunks/ssr/_295fffde._.js.map +1 -0
  470. package/web/.next/server/chunks/ssr/{_4db4ac1e._.js → _388d1127._.js} +2 -2
  471. package/web/.next/server/chunks/ssr/{_4db4ac1e._.js.map → _388d1127._.js.map} +1 -1
  472. package/web/.next/server/chunks/ssr/_45496654._.js +1 -1
  473. package/web/.next/server/chunks/ssr/_45496654._.js.map +1 -1
  474. package/web/.next/server/chunks/ssr/_4cbb7f95._.js +1 -1
  475. package/web/.next/server/chunks/ssr/_4cbb7f95._.js.map +1 -1
  476. package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
  477. package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
  478. package/web/.next/server/chunks/ssr/_6abfa39e._.js +1 -1
  479. package/web/.next/server/chunks/ssr/_6abfa39e._.js.map +1 -1
  480. package/web/.next/server/chunks/ssr/{_080b0309._.js → _8f0d3f07._.js} +2 -2
  481. package/web/.next/server/chunks/ssr/{_080b0309._.js.map → _8f0d3f07._.js.map} +1 -1
  482. package/web/.next/server/chunks/ssr/{_31b68712._.js → _98d94927._.js} +2 -2
  483. package/web/.next/server/chunks/ssr/{_31b68712._.js.map → _98d94927._.js.map} +1 -1
  484. package/web/.next/server/chunks/ssr/{_819f193a._.js → _d9c0a97a._.js} +2 -2
  485. package/web/.next/server/chunks/ssr/_d9c0a97a._.js.map +1 -0
  486. package/web/.next/server/chunks/ssr/_e680c57c._.js.map +1 -1
  487. package/web/.next/server/chunks/ssr/_f8c55130._.js +1 -1
  488. package/web/.next/server/chunks/ssr/_f8c55130._.js.map +1 -1
  489. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  490. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  491. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
  492. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map +1 -1
  493. package/web/.next/server/chunks/ssr/src_presentation_web_17d39233._.js +3 -0
  494. package/web/.next/server/chunks/ssr/src_presentation_web_17d39233._.js.map +1 -0
  495. package/web/.next/server/chunks/ssr/src_presentation_web_54b02639._.js +5 -0
  496. package/web/.next/server/chunks/ssr/src_presentation_web_54b02639._.js.map +1 -0
  497. package/web/.next/server/chunks/ssr/src_presentation_web_7b7b9e3b._.js +5 -0
  498. package/web/.next/server/chunks/ssr/src_presentation_web_7b7b9e3b._.js.map +1 -0
  499. package/web/.next/server/chunks/ssr/src_presentation_web_807cba76._.js +3 -0
  500. package/web/.next/server/chunks/ssr/src_presentation_web_807cba76._.js.map +1 -0
  501. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_90b5e66e.js +3 -0
  502. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_90b5e66e.js.map +1 -0
  503. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_4ce30db7.js +3 -0
  504. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_4ce30db7.js.map +1 -0
  505. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_e4032193.js +3 -0
  506. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_e4032193.js.map +1 -0
  507. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +1 -1
  508. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js.map +1 -1
  509. package/web/.next/server/chunks/ssr/{src_presentation_web_components_349d9f24._.js → src_presentation_web_components_895e5bfa._.js} +2 -2
  510. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js.map +1 -0
  511. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  512. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  513. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js +1 -1
  514. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js.map +1 -1
  515. package/web/.next/server/chunks/ssr/src_presentation_web_e1cd1869._.js +3 -0
  516. package/web/.next/server/chunks/ssr/src_presentation_web_e1cd1869._.js.map +1 -0
  517. package/web/.next/server/chunks/ssr/src_presentation_web_e3a30e30._.js +3 -0
  518. package/web/.next/server/chunks/ssr/src_presentation_web_e3a30e30._.js.map +1 -0
  519. package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js +1 -1
  520. package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js.map +1 -1
  521. package/web/.next/server/pages/500.html +2 -2
  522. package/web/.next/server/server-reference-manifest.js +1 -1
  523. package/web/.next/server/server-reference-manifest.json +535 -683
  524. package/web/.next/static/chunks/{10383f321355e09b.js → 0ffb3738269e15c3.js} +1 -1
  525. package/web/.next/static/chunks/236744ff71b1aadf.js +1 -0
  526. package/web/.next/static/chunks/{05c0a8ed7621ea2a.js → 2cfc6022d74e2716.js} +3 -3
  527. package/web/.next/static/chunks/302f474e4978cc80.js +3 -0
  528. package/web/.next/static/chunks/{316b0e4597f2083d.js → 46e2693dbc9262fd.js} +2 -2
  529. package/web/.next/static/chunks/{6853929058e53d1a.js → 476873a9bac35ec8.js} +1 -1
  530. package/web/.next/static/chunks/{81347e69998eef38.js → 4ff21d16947ec853.js} +1 -1
  531. package/web/.next/static/chunks/626277ca9a4cc477.js +1 -0
  532. package/web/.next/static/chunks/{a1ad19e21b6ad1ad.js → 6304540c7cf2b46a.js} +2 -2
  533. package/web/.next/static/chunks/{fd319c0e5f3cc20a.js → 71a07df9dcb42227.js} +1 -1
  534. package/web/.next/static/chunks/{71ad5a4155ddd207.js → 885bb8fc631bf477.js} +1 -1
  535. package/web/.next/static/chunks/a20f2d6f76f469b7.css +1 -0
  536. package/web/.next/static/chunks/{8bf91dcd1b3077d7.js → afa7e5d2a48cabc7.js} +1 -1
  537. package/web/.next/static/chunks/c10c0d6d458453bc.js +1 -0
  538. package/web/.next/static/chunks/{8a68402c32c6a206.js → e8444bf5f6c35f8b.js} +1 -1
  539. package/web/.next/static/chunks/eab3d361f7a24510.js +1 -0
  540. package/web/.next/static/chunks/{6bfcb5d1b3eafd81.js → eda9ee3c22b71a69.js} +1 -1
  541. package/web/.next/static/chunks/{e610f5d703696b34.js → f17d2d0279b8db35.js} +1 -1
  542. package/web/.next/static/chunks/f9d948464ed409cb.js +1 -0
  543. package/apis/json-schema/PermissionMode.yaml +0 -8
  544. package/dist/packages/core/src/application/ports/output/services/file-system.interface.d.ts +0 -68
  545. package/dist/packages/core/src/application/ports/output/services/file-system.interface.d.ts.map +0 -1
  546. package/dist/packages/core/src/application/ports/output/services/file-system.interface.js +0 -12
  547. package/dist/packages/core/src/application/ports/output/services/process-monitor.interface.d.ts +0 -29
  548. package/dist/packages/core/src/application/ports/output/services/process-monitor.interface.d.ts.map +0 -1
  549. package/dist/packages/core/src/application/ports/output/services/process-monitor.interface.js +0 -12
  550. package/dist/packages/core/src/application/ports/output/services/settings-reader.interface.d.ts +0 -35
  551. package/dist/packages/core/src/application/ports/output/services/settings-reader.interface.d.ts.map +0 -1
  552. package/dist/packages/core/src/application/ports/output/services/settings-reader.interface.js +0 -12
  553. package/dist/packages/core/src/application/use-cases/notifications/poll-agent-events.use-case.d.ts +0 -61
  554. package/dist/packages/core/src/application/use-cases/notifications/poll-agent-events.use-case.d.ts.map +0 -1
  555. package/dist/packages/core/src/application/use-cases/notifications/poll-agent-events.use-case.js +0 -381
  556. package/dist/packages/core/src/infrastructure/di/modules/agent-infrastructure.module.d.ts +0 -7
  557. package/dist/packages/core/src/infrastructure/di/modules/agent-infrastructure.module.d.ts.map +0 -1
  558. package/dist/packages/core/src/infrastructure/di/modules/agent-infrastructure.module.js +0 -83
  559. package/dist/packages/core/src/infrastructure/di/modules/database.module.d.ts +0 -12
  560. package/dist/packages/core/src/infrastructure/di/modules/database.module.d.ts.map +0 -1
  561. package/dist/packages/core/src/infrastructure/di/modules/database.module.js +0 -16
  562. package/dist/packages/core/src/infrastructure/di/modules/interactive.module.d.ts +0 -10
  563. package/dist/packages/core/src/infrastructure/di/modules/interactive.module.d.ts.map +0 -1
  564. package/dist/packages/core/src/infrastructure/di/modules/interactive.module.js +0 -43
  565. package/dist/packages/core/src/infrastructure/di/modules/notifications.module.d.ts +0 -6
  566. package/dist/packages/core/src/infrastructure/di/modules/notifications.module.d.ts.map +0 -1
  567. package/dist/packages/core/src/infrastructure/di/modules/notifications.module.js +0 -20
  568. package/dist/packages/core/src/infrastructure/di/modules/repositories.module.d.ts +0 -6
  569. package/dist/packages/core/src/infrastructure/di/modules/repositories.module.d.ts.map +0 -1
  570. package/dist/packages/core/src/infrastructure/di/modules/repositories.module.js +0 -26
  571. package/dist/packages/core/src/infrastructure/di/modules/services.module.d.ts +0 -8
  572. package/dist/packages/core/src/infrastructure/di/modules/services.module.d.ts.map +0 -1
  573. package/dist/packages/core/src/infrastructure/di/modules/services.module.js +0 -93
  574. package/dist/packages/core/src/infrastructure/di/modules/use-cases.module.d.ts +0 -6
  575. package/dist/packages/core/src/infrastructure/di/modules/use-cases.module.d.ts.map +0 -1
  576. package/dist/packages/core/src/infrastructure/di/modules/use-cases.module.js +0 -164
  577. package/dist/packages/core/src/infrastructure/di/modules/web-tokens.module.d.ts +0 -10
  578. package/dist/packages/core/src/infrastructure/di/modules/web-tokens.module.d.ts.map +0 -1
  579. package/dist/packages/core/src/infrastructure/di/modules/web-tokens.module.js +0 -200
  580. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/056-add-agent-permission-mode.d.ts +0 -14
  581. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/056-add-agent-permission-mode.d.ts.map +0 -1
  582. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/056-add-agent-permission-mode.js +0 -19
  583. package/dist/packages/core/src/infrastructure/services/agents/common/executors/abstract-agent-executor.d.ts +0 -37
  584. package/dist/packages/core/src/infrastructure/services/agents/common/executors/abstract-agent-executor.d.ts.map +0 -1
  585. package/dist/packages/core/src/infrastructure/services/agents/common/executors/abstract-agent-executor.js +0 -59
  586. package/dist/packages/core/src/infrastructure/services/agents/common/executors/rovo-dev-executor.service.d.ts +0 -52
  587. package/dist/packages/core/src/infrastructure/services/agents/common/executors/rovo-dev-executor.service.d.ts.map +0 -1
  588. package/dist/packages/core/src/infrastructure/services/agents/common/executors/rovo-dev-executor.service.js +0 -350
  589. package/dist/packages/core/src/infrastructure/services/filesystem/file-system.service.d.ts +0 -26
  590. package/dist/packages/core/src/infrastructure/services/filesystem/file-system.service.d.ts.map +0 -1
  591. package/dist/packages/core/src/infrastructure/services/filesystem/file-system.service.js +0 -47
  592. package/dist/packages/core/src/infrastructure/services/filesystem/path-sanitizers.d.ts +0 -19
  593. package/dist/packages/core/src/infrastructure/services/filesystem/path-sanitizers.d.ts.map +0 -1
  594. package/dist/packages/core/src/infrastructure/services/filesystem/path-sanitizers.js +0 -38
  595. package/dist/packages/core/src/infrastructure/services/git/branch-discovery.service.d.ts +0 -23
  596. package/dist/packages/core/src/infrastructure/services/git/branch-discovery.service.d.ts.map +0 -1
  597. package/dist/packages/core/src/infrastructure/services/git/branch-discovery.service.js +0 -185
  598. package/dist/packages/core/src/infrastructure/services/git/ci-status.service.d.ts +0 -24
  599. package/dist/packages/core/src/infrastructure/services/git/ci-status.service.d.ts.map +0 -1
  600. package/dist/packages/core/src/infrastructure/services/git/ci-status.service.js +0 -202
  601. package/dist/packages/core/src/infrastructure/services/git/diff-analyzer.service.d.ts +0 -19
  602. package/dist/packages/core/src/infrastructure/services/git/diff-analyzer.service.d.ts.map +0 -1
  603. package/dist/packages/core/src/infrastructure/services/git/diff-analyzer.service.js +0 -173
  604. package/dist/packages/core/src/infrastructure/services/git/merge-strategy.service.d.ts +0 -30
  605. package/dist/packages/core/src/infrastructure/services/git/merge-strategy.service.d.ts.map +0 -1
  606. package/dist/packages/core/src/infrastructure/services/git/merge-strategy.service.js +0 -341
  607. package/dist/packages/core/src/infrastructure/services/git/pr-creation.service.d.ts +0 -34
  608. package/dist/packages/core/src/infrastructure/services/git/pr-creation.service.d.ts.map +0 -1
  609. package/dist/packages/core/src/infrastructure/services/git/pr-creation.service.js +0 -180
  610. package/dist/packages/core/src/infrastructure/services/interactive/chat-state-builder.d.ts +0 -21
  611. package/dist/packages/core/src/infrastructure/services/interactive/chat-state-builder.d.ts.map +0 -1
  612. package/dist/packages/core/src/infrastructure/services/interactive/chat-state-builder.js +0 -112
  613. package/dist/packages/core/src/infrastructure/services/interactive/session-boot-sequence.d.ts +0 -47
  614. package/dist/packages/core/src/infrastructure/services/interactive/session-boot-sequence.d.ts.map +0 -1
  615. package/dist/packages/core/src/infrastructure/services/interactive/session-boot-sequence.js +0 -381
  616. package/dist/packages/core/src/infrastructure/services/interactive/session-state-manager.d.ts +0 -28
  617. package/dist/packages/core/src/infrastructure/services/interactive/session-state-manager.d.ts.map +0 -1
  618. package/dist/packages/core/src/infrastructure/services/interactive/session-state-manager.js +0 -105
  619. package/dist/packages/core/src/infrastructure/services/interactive/session-state.d.ts +0 -46
  620. package/dist/packages/core/src/infrastructure/services/interactive/session-state.d.ts.map +0 -1
  621. package/dist/packages/core/src/infrastructure/services/interactive/session-state.js +0 -10
  622. package/dist/packages/core/src/infrastructure/services/interactive/subscriber-notifier.d.ts +0 -36
  623. package/dist/packages/core/src/infrastructure/services/interactive/subscriber-notifier.d.ts.map +0 -1
  624. package/dist/packages/core/src/infrastructure/services/interactive/subscriber-notifier.js +0 -60
  625. package/dist/packages/core/src/infrastructure/services/interactive/turn-executor.d.ts +0 -57
  626. package/dist/packages/core/src/infrastructure/services/interactive/turn-executor.d.ts.map +0 -1
  627. package/dist/packages/core/src/infrastructure/services/interactive/turn-executor.js +0 -503
  628. package/dist/packages/core/src/infrastructure/services/process/process-monitor.service.d.ts +0 -25
  629. package/dist/packages/core/src/infrastructure/services/process/process-monitor.service.d.ts.map +0 -1
  630. package/dist/packages/core/src/infrastructure/services/process/process-monitor.service.js +0 -45
  631. package/dist/packages/core/src/infrastructure/services/settings-reader.adapter.d.ts +0 -15
  632. package/dist/packages/core/src/infrastructure/services/settings-reader.adapter.d.ts.map +0 -1
  633. package/dist/packages/core/src/infrastructure/services/settings-reader.adapter.js +0 -28
  634. package/dist/src/presentation/web/app/actions/check-agent-auth-for-type.d.ts +0 -11
  635. package/dist/src/presentation/web/app/actions/check-agent-auth-for-type.d.ts.map +0 -1
  636. package/dist/src/presentation/web/app/actions/check-agent-auth-for-type.js +0 -147
  637. package/dist/src/presentation/web/components/common/route-announcer.d.ts +0 -2
  638. package/dist/src/presentation/web/components/common/route-announcer.d.ts.map +0 -1
  639. package/dist/src/presentation/web/components/common/route-announcer.js +0 -7
  640. package/dist/src/presentation/web/components/features/settings/AgentAvailabilityBadge.d.ts +0 -7
  641. package/dist/src/presentation/web/components/features/settings/AgentAvailabilityBadge.d.ts.map +0 -1
  642. package/dist/src/presentation/web/components/features/settings/AgentAvailabilityBadge.js +0 -26
  643. package/dist/src/presentation/web/components/features/settings/AgentAvailabilityBadge.stories.d.ts +0 -11
  644. package/dist/src/presentation/web/components/features/settings/AgentAvailabilityBadge.stories.d.ts.map +0 -1
  645. package/dist/src/presentation/web/components/features/settings/AgentAvailabilityBadge.stories.js +0 -24
  646. package/dist/src/presentation/web/hooks/use-agent-availability.d.ts +0 -13
  647. package/dist/src/presentation/web/hooks/use-agent-availability.d.ts.map +0 -1
  648. package/dist/src/presentation/web/hooks/use-agent-availability.js +0 -75
  649. package/dist/src/presentation/web/hooks/use-route-announcer.d.ts +0 -2
  650. package/dist/src/presentation/web/hooks/use-route-announcer.d.ts.map +0 -1
  651. package/dist/src/presentation/web/hooks/use-route-announcer.js +0 -16
  652. package/dist/src/presentation/web/lib/api-error.d.ts +0 -7
  653. package/dist/src/presentation/web/lib/api-error.d.ts.map +0 -1
  654. package/dist/src/presentation/web/lib/api-error.js +0 -11
  655. package/web/.next/server/chunks/[root-of-the-server]__0b88f5f0._.js +0 -3
  656. package/web/.next/server/chunks/[root-of-the-server]__0b88f5f0._.js.map +0 -1
  657. package/web/.next/server/chunks/[root-of-the-server]__0d0a9973._.js +0 -3
  658. package/web/.next/server/chunks/[root-of-the-server]__0d0a9973._.js.map +0 -1
  659. package/web/.next/server/chunks/[root-of-the-server]__1f18a881._.js +0 -3
  660. package/web/.next/server/chunks/[root-of-the-server]__1f18a881._.js.map +0 -1
  661. package/web/.next/server/chunks/[root-of-the-server]__3d08be55._.js +0 -9
  662. package/web/.next/server/chunks/[root-of-the-server]__3d08be55._.js.map +0 -1
  663. package/web/.next/server/chunks/[root-of-the-server]__419be0d1._.js +0 -3
  664. package/web/.next/server/chunks/[root-of-the-server]__419be0d1._.js.map +0 -1
  665. package/web/.next/server/chunks/[root-of-the-server]__4747e669._.js +0 -3
  666. package/web/.next/server/chunks/[root-of-the-server]__4747e669._.js.map +0 -1
  667. package/web/.next/server/chunks/[root-of-the-server]__475afd97._.js +0 -3
  668. package/web/.next/server/chunks/[root-of-the-server]__475afd97._.js.map +0 -1
  669. package/web/.next/server/chunks/[root-of-the-server]__483ccc90._.js +0 -9
  670. package/web/.next/server/chunks/[root-of-the-server]__483ccc90._.js.map +0 -1
  671. package/web/.next/server/chunks/[root-of-the-server]__5e90f1e9._.js +0 -3
  672. package/web/.next/server/chunks/[root-of-the-server]__5e90f1e9._.js.map +0 -1
  673. package/web/.next/server/chunks/[root-of-the-server]__62634db9._.js +0 -12
  674. package/web/.next/server/chunks/[root-of-the-server]__62634db9._.js.map +0 -1
  675. package/web/.next/server/chunks/[root-of-the-server]__645a6d08._.js +0 -12
  676. package/web/.next/server/chunks/[root-of-the-server]__645a6d08._.js.map +0 -1
  677. package/web/.next/server/chunks/[root-of-the-server]__74f3dc5c._.js +0 -3
  678. package/web/.next/server/chunks/[root-of-the-server]__74f3dc5c._.js.map +0 -1
  679. package/web/.next/server/chunks/[root-of-the-server]__810add7c._.js +0 -3
  680. package/web/.next/server/chunks/[root-of-the-server]__810add7c._.js.map +0 -1
  681. package/web/.next/server/chunks/[root-of-the-server]__8cfd9f70._.js +0 -24
  682. package/web/.next/server/chunks/[root-of-the-server]__8cfd9f70._.js.map +0 -1
  683. package/web/.next/server/chunks/[root-of-the-server]__8ec23770._.js +0 -3
  684. package/web/.next/server/chunks/[root-of-the-server]__8ec23770._.js.map +0 -1
  685. package/web/.next/server/chunks/[root-of-the-server]__93c391fe._.js +0 -3
  686. package/web/.next/server/chunks/[root-of-the-server]__93c391fe._.js.map +0 -1
  687. package/web/.next/server/chunks/[root-of-the-server]__9e8fc40c._.js +0 -3
  688. package/web/.next/server/chunks/[root-of-the-server]__9e8fc40c._.js.map +0 -1
  689. package/web/.next/server/chunks/[root-of-the-server]__a2426aa4._.js +0 -3
  690. package/web/.next/server/chunks/[root-of-the-server]__a2426aa4._.js.map +0 -1
  691. package/web/.next/server/chunks/[root-of-the-server]__a96ee39d._.js +0 -3
  692. package/web/.next/server/chunks/[root-of-the-server]__a96ee39d._.js.map +0 -1
  693. package/web/.next/server/chunks/[root-of-the-server]__e10befc1._.js +0 -3
  694. package/web/.next/server/chunks/[root-of-the-server]__e10befc1._.js.map +0 -1
  695. package/web/.next/server/chunks/[root-of-the-server]__e94a4a75._.js +0 -3
  696. package/web/.next/server/chunks/[root-of-the-server]__e94a4a75._.js.map +0 -1
  697. package/web/.next/server/chunks/[root-of-the-server]__ea7e9dc2._.js +0 -3
  698. package/web/.next/server/chunks/[root-of-the-server]__ea7e9dc2._.js.map +0 -1
  699. package/web/.next/server/chunks/[root-of-the-server]__f1aeae12._.js +0 -3
  700. package/web/.next/server/chunks/[root-of-the-server]__f7b38c05._.js +0 -3
  701. package/web/.next/server/chunks/[root-of-the-server]__f7b38c05._.js.map +0 -1
  702. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_f57e8323.js +0 -3
  703. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_f57e8323.js.map +0 -1
  704. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_c2027d57.js +0 -3
  705. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_c2027d57.js.map +0 -1
  706. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_f70a6774.js +0 -3
  707. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_f70a6774.js.map +0 -1
  708. package/web/.next/server/chunks/ssr/[root-of-the-server]__0e34e896._.js +0 -4
  709. package/web/.next/server/chunks/ssr/[root-of-the-server]__0e34e896._.js.map +0 -1
  710. package/web/.next/server/chunks/ssr/[root-of-the-server]__1eb031d8._.js +0 -3
  711. package/web/.next/server/chunks/ssr/[root-of-the-server]__1eb031d8._.js.map +0 -1
  712. package/web/.next/server/chunks/ssr/[root-of-the-server]__35e7da6b._.js +0 -4
  713. package/web/.next/server/chunks/ssr/[root-of-the-server]__35e7da6b._.js.map +0 -1
  714. package/web/.next/server/chunks/ssr/[root-of-the-server]__36eb7673._.js +0 -3
  715. package/web/.next/server/chunks/ssr/[root-of-the-server]__36eb7673._.js.map +0 -1
  716. package/web/.next/server/chunks/ssr/[root-of-the-server]__4576a805._.js +0 -4
  717. package/web/.next/server/chunks/ssr/[root-of-the-server]__4576a805._.js.map +0 -1
  718. package/web/.next/server/chunks/ssr/[root-of-the-server]__b51b0071._.js +0 -4
  719. package/web/.next/server/chunks/ssr/[root-of-the-server]__b51b0071._.js.map +0 -1
  720. package/web/.next/server/chunks/ssr/[root-of-the-server]__bd113e97._.js +0 -4
  721. package/web/.next/server/chunks/ssr/[root-of-the-server]__bd113e97._.js.map +0 -1
  722. package/web/.next/server/chunks/ssr/[root-of-the-server]__c6f02c81._.js +0 -3
  723. package/web/.next/server/chunks/ssr/[root-of-the-server]__c6f02c81._.js.map +0 -1
  724. package/web/.next/server/chunks/ssr/[root-of-the-server]__d5e22d1a._.js +0 -3
  725. package/web/.next/server/chunks/ssr/[root-of-the-server]__f13f6a81._.js +0 -3
  726. package/web/.next/server/chunks/ssr/[root-of-the-server]__f13f6a81._.js.map +0 -1
  727. package/web/.next/server/chunks/ssr/[root-of-the-server]__f5614810._.js +0 -3
  728. package/web/.next/server/chunks/ssr/[root-of-the-server]__ff332bfb._.js +0 -3
  729. package/web/.next/server/chunks/ssr/_5747febb._.js.map +0 -1
  730. package/web/.next/server/chunks/ssr/_819f193a._.js.map +0 -1
  731. package/web/.next/server/chunks/ssr/_ed2f2799._.js.map +0 -1
  732. package/web/.next/server/chunks/ssr/src_presentation_web_064c7e73._.js +0 -3
  733. package/web/.next/server/chunks/ssr/src_presentation_web_064c7e73._.js.map +0 -1
  734. package/web/.next/server/chunks/ssr/src_presentation_web_1726dc84._.js +0 -5
  735. package/web/.next/server/chunks/ssr/src_presentation_web_1726dc84._.js.map +0 -1
  736. package/web/.next/server/chunks/ssr/src_presentation_web_28c682ee._.js +0 -3
  737. package/web/.next/server/chunks/ssr/src_presentation_web_28c682ee._.js.map +0 -1
  738. package/web/.next/server/chunks/ssr/src_presentation_web_2d7b0e7b._.js +0 -5
  739. package/web/.next/server/chunks/ssr/src_presentation_web_2d7b0e7b._.js.map +0 -1
  740. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_bcef11e0.js +0 -3
  741. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_bcef11e0.js.map +0 -1
  742. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_02d5029f.js +0 -3
  743. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_02d5029f.js.map +0 -1
  744. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_67ca1f81.js +0 -3
  745. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_67ca1f81.js.map +0 -1
  746. package/web/.next/server/chunks/ssr/src_presentation_web_b1110b54._.js +0 -3
  747. package/web/.next/server/chunks/ssr/src_presentation_web_b1110b54._.js.map +0 -1
  748. package/web/.next/server/chunks/ssr/src_presentation_web_components_349d9f24._.js.map +0 -1
  749. package/web/.next/server/chunks/ssr/src_presentation_web_d388fcb0._.js +0 -3
  750. package/web/.next/server/chunks/ssr/src_presentation_web_d388fcb0._.js.map +0 -1
  751. package/web/.next/server/chunks/ssr/src_presentation_web_da61a4f3._.js +0 -3
  752. package/web/.next/server/chunks/ssr/src_presentation_web_da61a4f3._.js.map +0 -1
  753. package/web/.next/static/chunks/1f232a3618b82ac1.css +0 -1
  754. package/web/.next/static/chunks/2621b35c0c9da177.js +0 -1
  755. package/web/.next/static/chunks/2a3edcf98f609bb7.js +0 -1
  756. package/web/.next/static/chunks/3370f8dc24c64ce4.js +0 -1
  757. package/web/.next/static/chunks/47ed89fae0f1542e.js +0 -1
  758. package/web/.next/static/chunks/6c1664f584f34e6f.js +0 -1
  759. package/web/.next/static/chunks/f952f152ac0a4abe.js +0 -3
  760. package/web/public/icons/agents/rovo-dev.svg +0 -6
  761. /package/web/.next/server/chunks/{[root-of-the-server]__937ba94e._.js.map → [root-of-the-server]__e3692208._.js.map} +0 -0
  762. /package/web/.next/static/{8CNKMABoDvNDVQD3DEuB4 → 36ONyC02R4wfFe7iWMQLU}/_buildManifest.js +0 -0
  763. /package/web/.next/static/{8CNKMABoDvNDVQD3DEuB4 → 36ONyC02R4wfFe7iWMQLU}/_clientMiddlewareManifest.json +0 -0
  764. /package/web/.next/static/{8CNKMABoDvNDVQD3DEuB4 → 36ONyC02R4wfFe7iWMQLU}/_ssgManifest.js +0 -0
@@ -1,16 +1,8 @@
1
1
  /**
2
- * Git PR Service — Facade
2
+ * Git PR Service Implementation
3
3
  *
4
- * Thin facade that delegates to focused sub-services:
5
- * - DiffAnalyzerService diff analysis
6
- * - BranchDiscoveryService — branch/remote discovery
7
- * - CiStatusService — CI status, watch, failure logs, merge verification
8
- * - PrCreationService — PR creation, GitHub repo creation, PR status
9
- * - MergeStrategyService — merge, rebase, sync, conflict resolution, stash
10
- *
11
- * Preserves the IGitPrService contract and backward-compatible constructor
12
- * signature so all existing callers (including tests using `new GitPrService(execFn)`)
13
- * continue to work without modification.
4
+ * Manages git operations for PR creation, merging, and CI status checks.
5
+ * Uses constructor dependency injection for the command executor.
14
6
  */
15
7
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
16
8
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -25,153 +17,893 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
25
17
  return function (target, key) { decorator(target, key, paramIndex); }
26
18
  };
27
19
  import { injectable, inject } from 'tsyringe';
28
- import { DiffAnalyzerService } from './diff-analyzer.service.js';
29
- import { BranchDiscoveryService } from './branch-discovery.service.js';
30
- import { CiStatusService } from './ci-status.service.js';
31
- import { PrCreationService } from './pr-creation.service.js';
32
- import { MergeStrategyService } from './merge-strategy.service.js';
20
+ import { GitPrError, GitPrErrorCode, } from '../../../application/ports/output/services/git-pr-service.interface.js';
21
+ import { readFileSync, writeFileSync, unlinkSync } from 'node:fs';
22
+ import { tmpdir } from 'node:os';
23
+ import { join } from 'node:path';
24
+ import yaml from 'js-yaml';
25
+ import { applyPrBranding } from './pr-branding.js';
33
26
  let GitPrService = class GitPrService {
34
- diffAnalyzer;
35
- branchDiscovery;
36
- ciStatus;
37
- prCreation;
38
- mergeStrategy;
39
- /**
40
- * Accepts either:
41
- * 1. A single ExecFunction (backward-compatible — creates sub-services internally)
42
- * 2. Five pre-built sub-services (used by DI container)
43
- */
44
- constructor(execFileOrDiffAnalyzer, branchDiscovery, ciStatus, prCreation, mergeStrategy) {
45
- if (typeof execFileOrDiffAnalyzer === 'function' &&
46
- !branchDiscovery &&
47
- !ciStatus &&
48
- !prCreation &&
49
- !mergeStrategy) {
50
- // Backward-compatible: single ExecFunction — build sub-services internally
51
- const execFile = execFileOrDiffAnalyzer;
52
- this.diffAnalyzer = new DiffAnalyzerService(execFile);
53
- this.branchDiscovery = new BranchDiscoveryService(execFile);
54
- this.ciStatus = new CiStatusService(execFile);
55
- this.prCreation = new PrCreationService(execFile);
56
- this.mergeStrategy = new MergeStrategyService(execFile);
27
+ execFile;
28
+ constructor(execFile) {
29
+ this.execFile = execFile;
30
+ }
31
+ async hasRemote(cwd) {
32
+ const { stdout } = await this.execFile('git', ['remote'], { cwd });
33
+ return stdout.trim().length > 0;
34
+ }
35
+ async getRemoteUrl(cwd) {
36
+ try {
37
+ const { stdout } = await this.execFile('git', ['remote', 'get-url', 'origin'], { cwd });
38
+ const raw = stdout.trim();
39
+ if (!raw)
40
+ return null;
41
+ // Convert SSH URLs to HTTPS: git@github.com:org/repo.git → https://github.com/org/repo
42
+ if (raw.startsWith('git@')) {
43
+ return raw.replace(/^git@([^:]+):/, 'https://$1/').replace(/\.git$/, '');
44
+ }
45
+ // Strip trailing .git from HTTPS URLs
46
+ return raw.replace(/\.git$/, '');
57
47
  }
58
- else {
59
- // DI path: pre-built sub-services
60
- this.diffAnalyzer = execFileOrDiffAnalyzer;
61
- this.branchDiscovery = branchDiscovery;
62
- this.ciStatus = ciStatus;
63
- this.prCreation = prCreation;
64
- this.mergeStrategy = mergeStrategy;
48
+ catch {
49
+ return null;
65
50
  }
66
51
  }
67
- // --- Branch Discovery ---
68
- hasRemote(cwd) {
69
- return this.branchDiscovery.hasRemote(cwd);
70
- }
71
- getRemoteUrl(cwd) {
72
- return this.branchDiscovery.getRemoteUrl(cwd);
73
- }
74
- getDefaultBranch(cwd) {
75
- return this.branchDiscovery.getDefaultBranch(cwd);
52
+ async getDefaultBranch(cwd) {
53
+ // 1. Try remote HEAD reference (most reliable when remote exists)
54
+ try {
55
+ const { stdout } = await this.execFile('git', ['symbolic-ref', 'refs/remotes/origin/HEAD'], {
56
+ cwd,
57
+ });
58
+ const ref = stdout.trim(); // e.g. "refs/remotes/origin/main"
59
+ if (ref)
60
+ return ref.replace('refs/remotes/origin/', '');
61
+ }
62
+ catch {
63
+ // No remote HEAD configured — continue to fallbacks
64
+ }
65
+ // 2. Check for common default branch names locally.
66
+ // If both exist, pick the one with the most recent commit.
67
+ const candidates = [];
68
+ for (const name of ['main', 'master']) {
69
+ try {
70
+ const { stdout } = await this.execFile('git', ['rev-parse', '--verify', `refs/heads/${name}`], { cwd });
71
+ if (stdout.trim())
72
+ candidates.push(name);
73
+ }
74
+ catch {
75
+ // Branch doesn't exist — try next
76
+ }
77
+ }
78
+ if (candidates.length === 1)
79
+ return candidates[0];
80
+ if (candidates.length > 1) {
81
+ // Pick the branch with the most recent commit
82
+ try {
83
+ const { stdout } = await this.execFile('git', [
84
+ 'for-each-ref',
85
+ '--sort=-committerdate',
86
+ '--format=%(refname:short)',
87
+ ...candidates.map((c) => `refs/heads/${c}`),
88
+ ], { cwd });
89
+ const newest = stdout.trim().split('\n')[0];
90
+ if (newest)
91
+ return newest;
92
+ }
93
+ catch {
94
+ // Fall through to first candidate
95
+ }
96
+ return candidates[0];
97
+ }
98
+ // 3. Check git config init.defaultBranch (user/system-level default)
99
+ try {
100
+ const { stdout } = await this.execFile('git', ['config', 'init.defaultBranch'], { cwd });
101
+ const configured = stdout.trim();
102
+ if (configured)
103
+ return configured;
104
+ }
105
+ catch {
106
+ // Not configured — continue
107
+ }
108
+ // 4. Fall back to current branch ONLY in the main worktree (not feature worktrees).
109
+ // In a feature worktree, symbolic-ref HEAD returns the feature branch, not the default.
110
+ try {
111
+ const gitDir = await this.execFile('git', ['rev-parse', '--git-dir'], { cwd });
112
+ const gitCommonDir = await this.execFile('git', ['rev-parse', '--git-common-dir'], { cwd });
113
+ const isMainWorktree = gitDir.stdout.trim() === gitCommonDir.stdout.trim();
114
+ if (isMainWorktree) {
115
+ const { stdout } = await this.execFile('git', ['symbolic-ref', '--short', 'HEAD'], { cwd });
116
+ const branch = stdout.trim();
117
+ if (branch)
118
+ return branch;
119
+ }
120
+ }
121
+ catch {
122
+ // Detached HEAD or other error — continue
123
+ }
124
+ // 5. Ultimate fallback — throw instead of silently guessing
125
+ throw new Error(`Unable to determine default branch for repository at ${cwd}. ` +
126
+ `No remote HEAD, no main/master branch, and no init.defaultBranch configured.`);
127
+ }
128
+ async revParse(cwd, ref) {
129
+ const { stdout } = await this.execFile('git', ['rev-parse', ref], { cwd });
130
+ return stdout.trim();
131
+ }
132
+ async hasUncommittedChanges(cwd) {
133
+ const { stdout } = await this.execFile('git', ['status', '--porcelain'], { cwd });
134
+ return stdout.trim().length > 0;
135
+ }
136
+ async commitAll(cwd, message) {
137
+ try {
138
+ await this.execFile('git', ['add', '-A'], { cwd });
139
+ await this.execFile('git', ['commit', '-m', message], { cwd });
140
+ const { stdout } = await this.execFile('git', ['rev-parse', 'HEAD'], { cwd });
141
+ return stdout.trim();
142
+ }
143
+ catch (error) {
144
+ throw this.parseGitError(error);
145
+ }
76
146
  }
77
- revParse(cwd, ref) {
78
- return this.branchDiscovery.revParse(cwd, ref);
147
+ async push(cwd, branch, setUpstream) {
148
+ const args = ['push'];
149
+ if (setUpstream)
150
+ args.push('--set-upstream');
151
+ args.push('origin', branch);
152
+ try {
153
+ await this.execFile('git', args, { cwd });
154
+ }
155
+ catch (error) {
156
+ throw this.parseGitError(error);
157
+ }
79
158
  }
80
- addRemote(cwd, remoteName, remoteUrl) {
81
- return this.branchDiscovery.addRemote(cwd, remoteName, remoteUrl);
159
+ async createPr(cwd, prYamlPath) {
160
+ try {
161
+ // Parse pr.yaml to extract PR metadata
162
+ const prYamlContent = readFileSync(prYamlPath, 'utf-8');
163
+ const prData = yaml.load(prYamlContent);
164
+ const title = prData.title ?? 'Untitled PR';
165
+ const body = applyPrBranding(prData.body ?? '');
166
+ const args = ['pr', 'create', '--title', title, '--body', body];
167
+ if (prData.baseBranch) {
168
+ args.push('--base', prData.baseBranch);
169
+ }
170
+ if (prData.headBranch) {
171
+ args.push('--head', prData.headBranch);
172
+ }
173
+ if (prData.labels?.length) {
174
+ args.push('--label', prData.labels.join(','));
175
+ }
176
+ if (prData.draft) {
177
+ args.push('--draft');
178
+ }
179
+ const { stdout } = await this.execFile('gh', args, { cwd });
180
+ const url = stdout.trim();
181
+ const number = this.parsePrNumberFromUrl(url);
182
+ return { url, number };
183
+ }
184
+ catch (error) {
185
+ throw this.parseGhError(error);
186
+ }
82
187
  }
83
- deleteBranch(cwd, branch, deleteRemote) {
84
- return this.branchDiscovery.deleteBranch(cwd, branch, deleteRemote);
188
+ async mergePr(cwd, prNumber, strategy = 'squash') {
189
+ try {
190
+ await this.execFile('gh', ['pr', 'merge', String(prNumber), `--${strategy}`], {
191
+ cwd,
192
+ });
193
+ }
194
+ catch (error) {
195
+ const message = error instanceof Error ? error.message : String(error);
196
+ const cause = error instanceof Error ? error : undefined;
197
+ throw new GitPrError(message, GitPrErrorCode.MERGE_FAILED, cause);
198
+ }
199
+ // Try to delete the remote branch gracefully — not fatal if it fails
200
+ // (e.g. branch already deleted by GitHub auto-delete, or permissions)
201
+ try {
202
+ await this.execFile('gh', [
203
+ 'api',
204
+ '--method',
205
+ 'DELETE',
206
+ `repos/{owner}/{repo}/git/refs/heads/${await this.getPrHeadBranch(cwd, prNumber)}`,
207
+ ], { cwd });
208
+ }
209
+ catch {
210
+ // Branch deletion is best-effort — log-level concern, not an error
211
+ }
85
212
  }
86
- getBranchSyncStatus(cwd, featureBranch, baseBranch) {
87
- return this.branchDiscovery.getBranchSyncStatus(cwd, featureBranch, baseBranch);
213
+ async getPrHeadBranch(cwd, prNumber) {
214
+ const { stdout } = await this.execFile('gh', ['pr', 'view', String(prNumber), '--json', 'headRefName', '--jq', '.headRefName'], { cwd });
215
+ return stdout.trim();
216
+ }
217
+ async localMergeSquash(cwd, featureBranch, baseBranch, commitMessage, hasRemote = false) {
218
+ try {
219
+ // Fetch latest from remote if available
220
+ if (hasRemote) {
221
+ try {
222
+ await this.execFile('git', ['fetch', 'origin'], { cwd });
223
+ }
224
+ catch {
225
+ // Fetch failure is non-fatal — proceed with local state
226
+ }
227
+ }
228
+ // Checkout base branch
229
+ await this.execFile('git', ['checkout', baseBranch], { cwd });
230
+ // Pull latest base if remote available
231
+ if (hasRemote) {
232
+ try {
233
+ await this.execFile('git', ['pull', 'origin', baseBranch], { cwd });
234
+ }
235
+ catch {
236
+ // Pull failure is non-fatal — proceed with local state
237
+ }
238
+ }
239
+ // Clean untracked files that may conflict with the merge (e.g. files created
240
+ // by a prior agent call that leaked into the original repo directory)
241
+ try {
242
+ await this.execFile('git', ['clean', '-fd'], { cwd });
243
+ }
244
+ catch {
245
+ // Clean failure is non-fatal
246
+ }
247
+ // Squash merge the feature branch
248
+ await this.execFile('git', ['merge', '--squash', featureBranch], { cwd });
249
+ // Commit the squash merge (skip if nothing to commit — branches may be equivalent)
250
+ const { stdout: status } = await this.execFile('git', ['status', '--porcelain'], { cwd });
251
+ if (status.trim().length > 0) {
252
+ // Write commit message to a temp file to avoid shell splitting on Windows
253
+ // (DI-injected execFile uses shell: true on Windows, which splits on spaces)
254
+ const msgFile = join(tmpdir(), `shep-merge-msg-${Date.now()}.txt`);
255
+ try {
256
+ writeFileSync(msgFile, commitMessage, 'utf8');
257
+ await this.execFile('git', ['commit', '--file', msgFile], { cwd });
258
+ }
259
+ finally {
260
+ try {
261
+ unlinkSync(msgFile);
262
+ }
263
+ catch {
264
+ // Cleanup failure is non-fatal
265
+ }
266
+ }
267
+ }
268
+ // Delete the feature branch after successful merge
269
+ try {
270
+ await this.execFile('git', ['branch', '-d', featureBranch], { cwd });
271
+ }
272
+ catch {
273
+ // Branch deletion failure is non-fatal (branch may have already been deleted)
274
+ }
275
+ }
276
+ catch (error) {
277
+ const message = error instanceof Error ? error.message : String(error);
278
+ const cause = error instanceof Error ? error : undefined;
279
+ if (message.includes('CONFLICT') || message.includes('conflict')) {
280
+ throw new GitPrError(`Merge conflict while squash-merging ${featureBranch} into ${baseBranch}: ${message}`, GitPrErrorCode.MERGE_CONFLICT, cause);
281
+ }
282
+ throw new GitPrError(`Local squash merge failed: ${message}`, GitPrErrorCode.GIT_ERROR, cause);
283
+ }
88
284
  }
89
- // --- Diff Analysis ---
90
- getPrDiffSummary(cwd, baseBranch) {
91
- return this.diffAnalyzer.getPrDiffSummary(cwd, baseBranch);
285
+ async mergeBranch(cwd, sourceBranch, targetBranch) {
286
+ try {
287
+ await this.execFile('git', ['checkout', targetBranch], { cwd });
288
+ await this.execFile('git', ['merge', sourceBranch], { cwd });
289
+ await this.execFile('git', ['push'], { cwd });
290
+ }
291
+ catch (error) {
292
+ throw this.parseGitError(error);
293
+ }
92
294
  }
93
- getFileDiffs(cwd, baseBranch) {
94
- return this.diffAnalyzer.getFileDiffs(cwd, baseBranch);
295
+ async getCiStatus(cwd, branch) {
296
+ try {
297
+ const { stdout } = await this.execFile('gh', ['run', 'list', '--branch', branch, '--json', 'conclusion,url', '--limit', '1'], { cwd });
298
+ const runs = JSON.parse(stdout);
299
+ if (runs.length === 0 || !runs[0].conclusion) {
300
+ return { status: 'pending', runUrl: runs[0]?.url };
301
+ }
302
+ return {
303
+ status: runs[0].conclusion === 'success' ? 'success' : 'failure',
304
+ runUrl: runs[0].url,
305
+ };
306
+ }
307
+ catch (error) {
308
+ throw this.parseGhError(error);
309
+ }
95
310
  }
96
- // --- CI Status ---
97
- getCiStatus(cwd, branch) {
98
- return this.ciStatus.getCiStatus(cwd, branch);
311
+ async watchCi(cwd, branch, timeoutMs, intervalSeconds) {
312
+ // Resolve the latest run for the branch BEFORE the try/catch so the
313
+ // runUrl is available in both success and failure return paths.
314
+ let runUrl;
315
+ try {
316
+ // gh run watch requires a run ID — it does not support --branch.
317
+ // First, resolve the latest run ID for the branch via gh run list.
318
+ const { stdout: listOut } = await this.execFile('gh', ['run', 'list', '--branch', branch, '--json', 'databaseId,url', '--limit', '1'], { cwd });
319
+ const runs = JSON.parse(listOut);
320
+ if (runs.length === 0 || !runs[0].databaseId) {
321
+ return { status: 'pending' };
322
+ }
323
+ const runId = String(runs[0].databaseId);
324
+ runUrl = runs[0].url;
325
+ const interval = intervalSeconds ?? 30;
326
+ const args = [
327
+ 'run',
328
+ 'watch',
329
+ runId,
330
+ '--exit-status',
331
+ '--compact',
332
+ '--interval',
333
+ String(interval),
334
+ ];
335
+ const { stdout } = await this.execFile('gh', args, {
336
+ cwd,
337
+ ...(timeoutMs ? { timeout: timeoutMs } : {}),
338
+ });
339
+ // gh run watch --exit-status exits 0 when the run succeeds.
340
+ // If we reach here (no exception), CI passed — no need for fragile stdout parsing.
341
+ return {
342
+ status: 'success',
343
+ runUrl,
344
+ logExcerpt: stdout.trim(),
345
+ };
346
+ }
347
+ catch (error) {
348
+ const message = error instanceof Error ? error.message : String(error);
349
+ const cause = error instanceof Error ? error : undefined;
350
+ if (message.includes('timed out') || message.includes('timeout')) {
351
+ throw new GitPrError(message, GitPrErrorCode.CI_TIMEOUT, cause);
352
+ }
353
+ // gh run watch --exit-status exits non-zero when the run fails.
354
+ // Node.js execFile produces errors with a numeric `code` (exit code) and
355
+ // stdout/stderr from the process. The error.message is typically
356
+ // "Command failed: gh run watch <id> --exit-status\n" — detect this by
357
+ // checking for a numeric exit code or the "Command failed" prefix.
358
+ const exitCode = error?.code;
359
+ const hasNumericExitCode = typeof exitCode === 'number';
360
+ const isCommandFailure = message.includes('Command failed') || message.includes('exit code');
361
+ if (hasNumericExitCode || isCommandFailure) {
362
+ // Build a useful log excerpt from stdout/stderr if available
363
+ const errObj = error;
364
+ const parts = [errObj.stdout, errObj.stderr, message].filter(Boolean);
365
+ return { status: 'failure', runUrl, logExcerpt: parts.join('\n').trim() };
366
+ }
367
+ throw new GitPrError(message, GitPrErrorCode.GIT_ERROR, cause);
368
+ }
99
369
  }
100
- watchCi(cwd, branch, timeoutMs, intervalSeconds) {
101
- return this.ciStatus.watchCi(cwd, branch, timeoutMs, intervalSeconds);
370
+ async deleteBranch(cwd, branch, deleteRemote) {
371
+ try {
372
+ await this.execFile('git', ['branch', '-d', branch], { cwd });
373
+ if (deleteRemote) {
374
+ await this.execFile('git', ['push', 'origin', '--delete', branch], { cwd });
375
+ }
376
+ }
377
+ catch (error) {
378
+ throw this.parseGitError(error);
379
+ }
102
380
  }
103
- getFailureLogs(cwd, runId, branch, logMaxChars) {
104
- return this.ciStatus.getFailureLogs(cwd, runId, branch, logMaxChars);
381
+ async getPrDiffSummary(cwd, baseBranch) {
382
+ const { stdout: diffStat } = await this.execFile('git', ['diff', '--stat', `${baseBranch}...HEAD`], { cwd });
383
+ const { stdout: logOutput } = await this.execFile('git', ['log', '--oneline', `${baseBranch}...HEAD`], { cwd });
384
+ return this.parseDiffStat(diffStat, logOutput);
105
385
  }
106
- verifyMerge(cwd, featureBranch, baseBranch, premergeBaseSha) {
107
- return this.ciStatus.verifyMerge(cwd, featureBranch, baseBranch, premergeBaseSha);
386
+ async getFileDiffs(cwd, baseBranch) {
387
+ try {
388
+ const { stdout } = await this.execFile('git', ['diff', '--unified=3', `${baseBranch}...HEAD`], { cwd });
389
+ return this.parseUnifiedDiff(stdout);
390
+ }
391
+ catch (error) {
392
+ throw this.parseGitError(error);
393
+ }
108
394
  }
109
- // --- PR Creation ---
110
- createPr(cwd, prYamlPath) {
111
- return this.prCreation.createPr(cwd, prYamlPath);
395
+ parseUnifiedDiff(rawDiff) {
396
+ if (!rawDiff.trim())
397
+ return [];
398
+ const files = [];
399
+ // Split on "diff --git" boundaries (keeping the delimiter)
400
+ const fileSections = rawDiff.split(/^(?=diff --git )/m).filter((s) => s.trim());
401
+ for (const section of fileSections) {
402
+ const file = this.parseFileDiff(section);
403
+ if (file)
404
+ files.push(file);
405
+ }
406
+ return files;
407
+ }
408
+ parseFileDiff(section) {
409
+ const lines = section.split('\n');
410
+ if (lines.length === 0)
411
+ return null;
412
+ // Parse header: "diff --git a/path b/path"
413
+ const headerMatch = lines[0].match(/^diff --git a\/(.+?) b\/(.+)$/);
414
+ if (!headerMatch)
415
+ return null;
416
+ const oldPath = headerMatch[1];
417
+ const newPath = headerMatch[2];
418
+ // Determine status from diff header lines
419
+ let status = 'modified';
420
+ const isNew = lines.some((l) => l.startsWith('new file mode'));
421
+ const isDeleted = lines.some((l) => l.startsWith('deleted file mode'));
422
+ const isRenamed = lines.some((l) => l.startsWith('rename from'));
423
+ if (isNew)
424
+ status = 'added';
425
+ else if (isDeleted)
426
+ status = 'deleted';
427
+ else if (isRenamed)
428
+ status = 'renamed';
429
+ // Parse hunks
430
+ const hunks = [];
431
+ let currentHunk = null;
432
+ let oldLineNum = 0;
433
+ let newLineNum = 0;
434
+ let additions = 0;
435
+ let deletions = 0;
436
+ for (const line of lines) {
437
+ const hunkHeaderMatch = line.match(/^@@\s+-(\d+)(?:,\d+)?\s+\+(\d+)(?:,\d+)?\s+@@(.*)$/);
438
+ if (hunkHeaderMatch) {
439
+ currentHunk = { header: line, lines: [] };
440
+ hunks.push(currentHunk);
441
+ oldLineNum = parseInt(hunkHeaderMatch[1], 10);
442
+ newLineNum = parseInt(hunkHeaderMatch[2], 10);
443
+ continue;
444
+ }
445
+ if (!currentHunk)
446
+ continue;
447
+ if (line.startsWith('+')) {
448
+ const diffLine = {
449
+ type: 'added',
450
+ content: line.slice(1),
451
+ newNumber: newLineNum,
452
+ };
453
+ currentHunk.lines.push(diffLine);
454
+ newLineNum++;
455
+ additions++;
456
+ }
457
+ else if (line.startsWith('-')) {
458
+ const diffLine = {
459
+ type: 'removed',
460
+ content: line.slice(1),
461
+ oldNumber: oldLineNum,
462
+ };
463
+ currentHunk.lines.push(diffLine);
464
+ oldLineNum++;
465
+ deletions++;
466
+ }
467
+ else if (line.startsWith(' ')) {
468
+ const diffLine = {
469
+ type: 'context',
470
+ content: line.slice(1),
471
+ oldNumber: oldLineNum,
472
+ newNumber: newLineNum,
473
+ };
474
+ currentHunk.lines.push(diffLine);
475
+ oldLineNum++;
476
+ newLineNum++;
477
+ }
478
+ // Skip lines like ""
479
+ }
480
+ return {
481
+ path: newPath,
482
+ oldPath: isRenamed || oldPath !== newPath ? oldPath : undefined,
483
+ additions,
484
+ deletions,
485
+ status,
486
+ hunks,
487
+ };
488
+ }
489
+ async listPrStatuses(cwd) {
490
+ try {
491
+ const { stdout } = await this.execFile('gh', [
492
+ 'pr',
493
+ 'list',
494
+ '--json',
495
+ 'number,state,url,headRefName,mergeable',
496
+ '--state',
497
+ 'all',
498
+ '--limit',
499
+ '100',
500
+ ], { cwd });
501
+ const prs = JSON.parse(stdout);
502
+ return prs.map((pr) => ({
503
+ number: pr.number,
504
+ state: this.normalizeGhState(pr.state),
505
+ url: pr.url,
506
+ headRefName: pr.headRefName,
507
+ mergeable: this.parseMergeable(pr.mergeable),
508
+ }));
509
+ }
510
+ catch (error) {
511
+ throw this.parseGhError(error);
512
+ }
112
513
  }
113
- createGitHubRepo(cwd, name, options) {
114
- return this.prCreation.createGitHubRepo(cwd, name, options);
514
+ async getMergeableStatus(cwd, prNumber) {
515
+ try {
516
+ const { stdout } = await this.execFile('gh', ['pr', 'view', String(prNumber), '--json', 'mergeable'], { cwd });
517
+ const result = JSON.parse(stdout);
518
+ return this.parseMergeable(result.mergeable);
519
+ }
520
+ catch (error) {
521
+ throw this.parseGhError(error);
522
+ }
115
523
  }
116
- listPrStatuses(cwd) {
117
- return this.prCreation.listPrStatuses(cwd);
524
+ async verifyMerge(cwd, featureBranch, baseBranch, premergeBaseSha) {
525
+ // Resolve the feature branch ref — the local branch may have been deleted
526
+ // after a squash merge (git branch -d succeeds when pushed to remote).
527
+ // Fall back to the remote tracking branch if the local ref is gone.
528
+ const resolvedRef = await this.resolveRef(cwd, featureBranch);
529
+ if (!resolvedRef)
530
+ return false;
531
+ // First try: true merge (feature branch is ancestor of base)
532
+ try {
533
+ await this.execFile('git', ['merge-base', '--is-ancestor', resolvedRef, baseBranch], {
534
+ cwd,
535
+ });
536
+ return true;
537
+ }
538
+ catch {
539
+ // Not a true merge — check for squash merge by comparing tree content.
540
+ // After a squash merge, all changes from the feature branch are on the base
541
+ // branch, so `git diff featureBranch baseBranch` should produce no output.
542
+ }
543
+ try {
544
+ await this.execFile('git', ['diff', '--quiet', resolvedRef, baseBranch], { cwd });
545
+ // --quiet exits 0 when there's no diff → squash merge verified
546
+ return true;
547
+ }
548
+ catch {
549
+ // Exit code 1 = diff exists (not merged), other errors also mean unverified.
550
+ // Fall through to premergeBaseSha check if available.
551
+ }
552
+ // Third fallback: if the caller recorded the base branch HEAD before the merge
553
+ // agent ran, check whether it advanced. This handles agents that legitimately
554
+ // modify the tree during squash merge (e.g. adding .gitignore, removing
555
+ // node_modules). If baseBranch HEAD moved forward, the agent committed something.
556
+ if (premergeBaseSha) {
557
+ try {
558
+ const { stdout } = await this.execFile('git', ['rev-parse', baseBranch], { cwd });
559
+ const currentSha = stdout.trim();
560
+ return currentSha !== premergeBaseSha;
561
+ }
562
+ catch {
563
+ return false;
564
+ }
565
+ }
566
+ return false;
118
567
  }
119
- getMergeableStatus(cwd, prNumber) {
120
- return this.prCreation.getMergeableStatus(cwd, prNumber);
568
+ /**
569
+ * Resolve a branch name to a valid git ref, falling back to the remote
570
+ * tracking branch if the local ref has been deleted.
571
+ */
572
+ async resolveRef(cwd, branch) {
573
+ // Try local ref first
574
+ try {
575
+ await this.execFile('git', ['rev-parse', '--verify', branch], { cwd });
576
+ return branch;
577
+ }
578
+ catch {
579
+ // Local ref doesn't exist
580
+ }
581
+ // Try remote tracking branch
582
+ const remoteRef = `origin/${branch}`;
583
+ try {
584
+ await this.execFile('git', ['rev-parse', '--verify', remoteRef], { cwd });
585
+ return remoteRef;
586
+ }
587
+ catch {
588
+ return null;
589
+ }
121
590
  }
122
- // --- Merge Strategy ---
123
- hasUncommittedChanges(cwd) {
124
- return this.mergeStrategy.hasUncommittedChanges(cwd);
591
+ async getFailureLogs(cwd, runId, _branch, logMaxChars = 50_000) {
592
+ try {
593
+ const { stdout } = await this.execFile('gh', ['run', 'view', runId, '--log-failed'], {
594
+ cwd,
595
+ });
596
+ return this.truncateLog(stdout, logMaxChars, runId);
597
+ }
598
+ catch (error) {
599
+ throw this.parseGhError(error);
600
+ }
125
601
  }
126
- commitAll(cwd, message) {
127
- return this.mergeStrategy.commitAll(cwd, message);
602
+ truncateLog(output, maxChars, runId) {
603
+ if (output.length <= maxChars)
604
+ return output;
605
+ return `${output.slice(0, maxChars)}\n[Log truncated at ${maxChars} chars — full log available via gh run view ${runId}]`;
606
+ }
607
+ parseMergeable(value) {
608
+ if (value === 'MERGEABLE')
609
+ return true;
610
+ if (value === 'CONFLICTING')
611
+ return false;
612
+ return undefined; // UNKNOWN or missing
613
+ }
614
+ normalizeGhState(state) {
615
+ const normalized = state.charAt(0).toUpperCase() + state.slice(1).toLowerCase();
616
+ return normalized;
617
+ }
618
+ parseGitError(error) {
619
+ const message = error instanceof Error ? error.message : String(error);
620
+ const cause = error instanceof Error ? error : undefined;
621
+ // Rebase-specific: detect "CONFLICT" during rebase operations
622
+ if (message.includes('CONFLICT') && message.includes('rebase')) {
623
+ return new GitPrError(message, GitPrErrorCode.REBASE_CONFLICT, cause);
624
+ }
625
+ // Sync-specific: non-fast-forward or diverged branch
626
+ if (message.includes('non-fast-forward') || message.includes('diverged')) {
627
+ return new GitPrError(message, GitPrErrorCode.SYNC_FAILED, cause);
628
+ }
629
+ if (message.includes('rejected') || message.includes('conflict')) {
630
+ return new GitPrError(message, GitPrErrorCode.MERGE_CONFLICT, cause);
631
+ }
632
+ if (message.includes('Authentication') || message.includes('auth') || message.includes('403')) {
633
+ return new GitPrError(message, GitPrErrorCode.AUTH_FAILURE, cause);
634
+ }
635
+ return new GitPrError(message, GitPrErrorCode.GIT_ERROR, cause);
636
+ }
637
+ parseGhError(error) {
638
+ const message = error instanceof Error ? error.message : String(error);
639
+ const cause = error instanceof Error ? error : undefined;
640
+ const errnoCode = error?.code;
641
+ if (errnoCode === 'ENOENT' || message.includes('ENOENT')) {
642
+ return new GitPrError(message, GitPrErrorCode.GH_NOT_FOUND, cause);
643
+ }
644
+ if (message.includes('Authentication') || message.includes('auth') || message.includes('403')) {
645
+ return new GitPrError(message, GitPrErrorCode.AUTH_FAILURE, cause);
646
+ }
647
+ return new GitPrError(message, GitPrErrorCode.GIT_ERROR, cause);
648
+ }
649
+ parsePrNumberFromUrl(url) {
650
+ const match = url.match(/\/pull\/(\d+)/);
651
+ return match ? parseInt(match[1], 10) : 0;
652
+ }
653
+ async createGitHubRepo(cwd, name, options) {
654
+ const repoName = options.org ? `${options.org}/${name}` : name;
655
+ const visibilityFlag = options.isPrivate ? '--private' : '--public';
656
+ const args = [
657
+ 'repo',
658
+ 'create',
659
+ repoName,
660
+ visibilityFlag,
661
+ '--source=.',
662
+ '--remote=origin',
663
+ '--push',
664
+ ];
665
+ try {
666
+ const { stdout, stderr } = await this.execFile('gh', args, { cwd });
667
+ // `gh repo create` emits status lines to stdout/stderr that include the
668
+ // created repo URL somewhere in the output (e.g. "✓ Created repository
669
+ // org/name on GitHub\n https://github.com/org/name"). Scrape the first
670
+ // github.com URL we can find rather than returning the raw multi-line blob.
671
+ const combined = `${stdout}\n${stderr}`;
672
+ const parsedUrl = this.extractGitHubUrl(combined);
673
+ if (parsedUrl) {
674
+ return parsedUrl;
675
+ }
676
+ // Fall back to `gh repo view` from the cwd — after --push, origin is the
677
+ // authoritative source of the repo URL.
678
+ return await this.queryRepoUrl(cwd);
679
+ }
680
+ catch (error) {
681
+ const ghError = this.parseGhError(error);
682
+ if (ghError.code === GitPrErrorCode.GIT_ERROR) {
683
+ throw new GitPrError(ghError.message, GitPrErrorCode.REPO_CREATE_FAILED, ghError.cause);
684
+ }
685
+ throw ghError;
686
+ }
128
687
  }
129
- push(cwd, branch, setUpstream) {
130
- return this.mergeStrategy.push(cwd, branch, setUpstream);
688
+ /**
689
+ * Extracts the first github.com repository URL from a blob of text.
690
+ * Returns a normalized URL without a trailing `.git` suffix or punctuation.
691
+ */
692
+ extractGitHubUrl(text) {
693
+ const match = text.match(/https:\/\/github\.com\/[\w.-]+\/[\w.-]+/);
694
+ if (!match) {
695
+ return null;
696
+ }
697
+ return match[0].replace(/\.git$/, '').replace(/[).,;]+$/, '');
131
698
  }
132
- mergePr(cwd, prNumber, strategy) {
133
- return this.mergeStrategy.mergePr(cwd, prNumber, strategy);
699
+ /**
700
+ * Queries the current repo's URL via `gh repo view --json url`. Used as a
701
+ * fallback when URL parsing from `gh repo create` output fails.
702
+ */
703
+ async queryRepoUrl(cwd) {
704
+ const { stdout } = await this.execFile('gh', ['repo', 'view', '--json', 'url', '--jq', '.url'], { cwd });
705
+ return stdout.trim();
134
706
  }
135
- localMergeSquash(cwd, featureBranch, baseBranch, commitMessage, hasRemote) {
136
- return this.mergeStrategy.localMergeSquash(cwd, featureBranch, baseBranch, commitMessage, hasRemote);
707
+ async addRemote(cwd, remoteName, remoteUrl) {
708
+ try {
709
+ await this.execFile('git', ['remote', 'add', remoteName, remoteUrl], { cwd });
710
+ }
711
+ catch (error) {
712
+ throw this.parseGitError(error);
713
+ }
137
714
  }
138
- mergeBranch(cwd, sourceBranch, targetBranch) {
139
- return this.mergeStrategy.mergeBranch(cwd, sourceBranch, targetBranch);
715
+ parseDiffStat(diffStat, logOutput) {
716
+ const summaryLine = diffStat.trim().split('\n').pop() ?? '';
717
+ const filesMatch = summaryLine.match(/(\d+)\s+files?\s+changed/);
718
+ const addMatch = summaryLine.match(/(\d+)\s+insertions?\(\+\)/);
719
+ const delMatch = summaryLine.match(/(\d+)\s+deletions?\(-\)/);
720
+ const commitCount = logOutput
721
+ .trim()
722
+ .split('\n')
723
+ .filter((l) => l.trim()).length;
724
+ return {
725
+ filesChanged: filesMatch ? parseInt(filesMatch[1], 10) : 0,
726
+ additions: addMatch ? parseInt(addMatch[1], 10) : 0,
727
+ deletions: delMatch ? parseInt(delMatch[1], 10) : 0,
728
+ commitCount,
729
+ };
730
+ }
731
+ // --- Rebase & Sync operations ---
732
+ async syncMain(cwd, baseBranch) {
733
+ try {
734
+ // Detect current branch
735
+ const { stdout } = await this.execFile('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { cwd });
736
+ const currentBranch = stdout.trim();
737
+ if (currentBranch === baseBranch) {
738
+ // On the base branch — use git pull --ff-only
739
+ await this.execFile('git', ['pull', '--ff-only', 'origin', baseBranch], { cwd });
740
+ }
741
+ else {
742
+ // On a different branch — fetch the remote ref only (updates origin/<baseBranch>).
743
+ // We intentionally do NOT update the local <baseBranch> ref because it may be
744
+ // checked out in another worktree, which causes git to refuse the update with:
745
+ // "fatal: refusing to fetch into branch 'refs/heads/main' checked out at ..."
746
+ await this.execFile('git', ['fetch', 'origin', baseBranch], { cwd });
747
+ }
748
+ }
749
+ catch (error) {
750
+ const message = error instanceof Error ? error.message : String(error);
751
+ const cause = error instanceof Error ? error : undefined;
752
+ if (message.includes('non-fast-forward') ||
753
+ message.includes('Not possible to fast-forward') ||
754
+ message.includes('diverged')) {
755
+ throw new GitPrError(`Cannot fast-forward '${baseBranch}': local branch has diverged from remote. ` +
756
+ `Resolve the divergence manually with 'git checkout ${baseBranch} && git reset --hard origin/${baseBranch}' ` +
757
+ `if you want to discard local changes on ${baseBranch}.`, GitPrErrorCode.SYNC_FAILED, cause);
758
+ }
759
+ throw new GitPrError(`Failed to sync '${baseBranch}' with remote: ${message}`, GitPrErrorCode.GIT_ERROR, cause);
760
+ }
140
761
  }
141
- syncMain(cwd, baseBranch) {
142
- return this.mergeStrategy.syncMain(cwd, baseBranch);
762
+ async rebaseOnMain(cwd, featureBranch, baseBranch) {
763
+ // Check for dirty worktree before starting
764
+ const dirty = await this.hasUncommittedChanges(cwd);
765
+ if (dirty) {
766
+ throw new GitPrError(`Cannot rebase: working directory has uncommitted changes. ` +
767
+ `Please commit or stash your changes before rebasing.`, GitPrErrorCode.GIT_ERROR);
768
+ }
769
+ // Checkout the feature branch
770
+ try {
771
+ await this.execFile('git', ['checkout', featureBranch], { cwd });
772
+ }
773
+ catch (error) {
774
+ const message = error instanceof Error ? error.message : String(error);
775
+ const cause = error instanceof Error ? error : undefined;
776
+ if (message.includes('did not match') ||
777
+ message.includes('not a commit') ||
778
+ message.includes('pathspec')) {
779
+ throw new GitPrError(`Branch '${featureBranch}' not found.`, GitPrErrorCode.BRANCH_NOT_FOUND, cause);
780
+ }
781
+ throw new GitPrError(`Failed to checkout '${featureBranch}': ${message}`, GitPrErrorCode.GIT_ERROR, cause);
782
+ }
783
+ // Rebase onto origin/<baseBranch> (the remote-tracking ref).
784
+ // We use origin/<baseBranch> rather than the local <baseBranch> because:
785
+ // 1. syncMain fetches origin/<baseBranch> — it's always up-to-date
786
+ // 2. The local <baseBranch> may be checked out in another worktree and stale
787
+ const rebaseTarget = `origin/${baseBranch}`;
788
+ try {
789
+ await this.execFile('git', ['rebase', rebaseTarget], { cwd });
790
+ }
791
+ catch (error) {
792
+ const message = error instanceof Error ? error.message : String(error);
793
+ const cause = error instanceof Error ? error : undefined;
794
+ // Detect rebase conflict from git stderr/exit code
795
+ if (message.includes('CONFLICT') || message.includes('could not apply')) {
796
+ // Get the list of conflicted files to include in the error message
797
+ let conflictedFiles = [];
798
+ try {
799
+ conflictedFiles = await this.getConflictedFiles(cwd);
800
+ }
801
+ catch {
802
+ // Failed to get conflicted files — still report the conflict
803
+ }
804
+ const fileList = conflictedFiles.length > 0 ? ` Conflicted files: ${conflictedFiles.join(', ')}` : '';
805
+ throw new GitPrError(`Rebase of '${featureBranch}' onto '${baseBranch}' encountered conflicts.${fileList}`, GitPrErrorCode.REBASE_CONFLICT, cause);
806
+ }
807
+ throw new GitPrError(`Rebase of '${featureBranch}' onto '${baseBranch}' failed: ${message}`, GitPrErrorCode.GIT_ERROR, cause);
808
+ }
143
809
  }
144
- rebaseOnMain(cwd, featureBranch, baseBranch) {
145
- return this.mergeStrategy.rebaseOnMain(cwd, featureBranch, baseBranch);
810
+ async getConflictedFiles(cwd) {
811
+ try {
812
+ const { stdout } = await this.execFile('git', ['diff', '--name-only', '--diff-filter=U'], {
813
+ cwd,
814
+ });
815
+ return stdout
816
+ .trim()
817
+ .split('\n')
818
+ .filter((f) => f.length > 0)
819
+ .map((f) => f.replace(/\\/g, '/'));
820
+ }
821
+ catch (error) {
822
+ throw this.parseGitError(error);
823
+ }
146
824
  }
147
- getConflictedFiles(cwd) {
148
- return this.mergeStrategy.getConflictedFiles(cwd);
825
+ async stageFiles(cwd, files) {
826
+ try {
827
+ await this.execFile('git', ['add', ...files], { cwd });
828
+ }
829
+ catch (error) {
830
+ throw this.parseGitError(error);
831
+ }
149
832
  }
150
- stageFiles(cwd, files) {
151
- return this.mergeStrategy.stageFiles(cwd, files);
833
+ async rebaseContinue(cwd) {
834
+ try {
835
+ await this.execFile('git', ['rebase', '--continue'], {
836
+ cwd,
837
+ env: { ...process.env, GIT_EDITOR: 'true' },
838
+ });
839
+ }
840
+ catch (error) {
841
+ const message = error instanceof Error ? error.message : String(error);
842
+ const cause = error instanceof Error ? error : undefined;
843
+ if (message.includes('CONFLICT') || message.includes('could not apply')) {
844
+ throw new GitPrError(`Rebase continue encountered new conflicts: ${message}`, GitPrErrorCode.REBASE_CONFLICT, cause);
845
+ }
846
+ throw this.parseGitError(error);
847
+ }
152
848
  }
153
- rebaseContinue(cwd) {
154
- return this.mergeStrategy.rebaseContinue(cwd);
849
+ async rebaseAbort(cwd) {
850
+ try {
851
+ await this.execFile('git', ['rebase', '--abort'], { cwd });
852
+ }
853
+ catch (error) {
854
+ throw this.parseGitError(error);
855
+ }
155
856
  }
156
- rebaseAbort(cwd) {
157
- return this.mergeStrategy.rebaseAbort(cwd);
857
+ async stash(cwd, message) {
858
+ try {
859
+ const args = ['stash', 'push'];
860
+ if (message) {
861
+ args.push('-m', message);
862
+ }
863
+ const { stdout } = await this.execFile('git', args, { cwd });
864
+ // git stash push outputs "No local changes to save" when clean
865
+ return !stdout.includes('No local changes to save');
866
+ }
867
+ catch (error) {
868
+ throw this.parseGitError(error);
869
+ }
158
870
  }
159
- stash(cwd, message) {
160
- return this.mergeStrategy.stash(cwd, message);
871
+ async stashPop(cwd) {
872
+ try {
873
+ await this.execFile('git', ['stash', 'pop'], { cwd });
874
+ }
875
+ catch (error) {
876
+ throw this.parseGitError(error);
877
+ }
161
878
  }
162
- stashPop(cwd) {
163
- return this.mergeStrategy.stashPop(cwd);
879
+ async stashDrop(cwd) {
880
+ try {
881
+ await this.execFile('git', ['stash', 'drop'], { cwd });
882
+ }
883
+ catch (error) {
884
+ throw this.parseGitError(error);
885
+ }
164
886
  }
165
- stashDrop(cwd) {
166
- return this.mergeStrategy.stashDrop(cwd);
887
+ async getBranchSyncStatus(cwd, featureBranch, baseBranch) {
888
+ try {
889
+ const remoteRef = `origin/${baseBranch}`;
890
+ const [aheadResult, behindResult] = await Promise.all([
891
+ this.execFile('git', ['rev-list', '--count', `${remoteRef}..${featureBranch}`], { cwd }),
892
+ this.execFile('git', ['rev-list', '--count', `${featureBranch}..${remoteRef}`], { cwd }),
893
+ ]);
894
+ return {
895
+ ahead: parseInt(aheadResult.stdout.trim(), 10) || 0,
896
+ behind: parseInt(behindResult.stdout.trim(), 10) || 0,
897
+ };
898
+ }
899
+ catch (error) {
900
+ throw this.parseGitError(error);
901
+ }
167
902
  }
168
903
  };
169
904
  GitPrService = __decorate([
170
905
  injectable(),
171
906
  __param(0, inject('ExecFunction')),
172
- __metadata("design:paramtypes", [Object, BranchDiscoveryService,
173
- CiStatusService,
174
- PrCreationService,
175
- MergeStrategyService])
907
+ __metadata("design:paramtypes", [Function])
176
908
  ], GitPrService);
177
909
  export { GitPrService };