@shipit-ai/cli 1.166.0 → 1.166.2

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 (284) hide show
  1. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
  2. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +19 -2
  3. package/dist/packages/core/src/infrastructure/services/external/github-repository.service.d.ts.map +1 -1
  4. package/dist/packages/core/src/infrastructure/services/external/github-repository.service.js +14 -3
  5. package/dist/src/presentation/web/app/actions/deploy-repository.d.ts.map +1 -1
  6. package/dist/src/presentation/web/app/actions/deploy-repository.js +14 -7
  7. package/dist/src/presentation/web/app/actions/get-merge-review-data.d.ts.map +1 -1
  8. package/dist/src/presentation/web/app/actions/get-merge-review-data.js +66 -23
  9. package/dist/src/presentation/web/app/actions/open-folder.d.ts.map +1 -1
  10. package/dist/src/presentation/web/app/actions/open-folder.js +12 -4
  11. package/dist/src/presentation/web/app/actions/open-shell.d.ts.map +1 -1
  12. package/dist/src/presentation/web/app/actions/open-shell.js +46 -7
  13. package/dist/src/presentation/web/app/api/agent-events/route.d.ts.map +1 -1
  14. package/dist/src/presentation/web/app/api/agent-events/route.js +2 -6
  15. package/dist/src/presentation/web/app/api/attachments/upload-from-path/route.d.ts.map +1 -1
  16. package/dist/src/presentation/web/app/api/attachments/upload-from-path/route.js +21 -17
  17. package/dist/src/presentation/web/app/api/deployment-logs/route.d.ts.map +1 -1
  18. package/dist/src/presentation/web/app/api/deployment-logs/route.js +2 -6
  19. package/dist/src/presentation/web/app/api/directory/list/route.d.ts.map +1 -1
  20. package/dist/src/presentation/web/app/api/directory/list/route.js +39 -24
  21. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.d.ts.map +1 -1
  22. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.js +2 -6
  23. package/dist/src/presentation/web/app/api/interactive/sessions/[id]/stream/route.d.ts.map +1 -1
  24. package/dist/src/presentation/web/app/api/interactive/sessions/[id]/stream/route.js +2 -6
  25. package/dist/src/presentation/web/lib/path-sanitizers.d.ts +50 -0
  26. package/dist/src/presentation/web/lib/path-sanitizers.d.ts.map +1 -0
  27. package/dist/src/presentation/web/lib/path-sanitizers.js +136 -0
  28. package/dist/tsconfig.build.tsbuildinfo +1 -1
  29. package/package.json +9 -7
  30. package/web/.next/BUILD_ID +1 -1
  31. package/web/.next/build-manifest.json +3 -3
  32. package/web/.next/fallback-build-manifest.json +3 -3
  33. package/web/.next/prerender-manifest.json +3 -3
  34. package/web/.next/required-server-files.js +2 -2
  35. package/web/.next/required-server-files.json +2 -2
  36. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
  37. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +1 -1
  38. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  39. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  40. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
  41. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js +1 -1
  42. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  43. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  44. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +30 -30
  45. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
  46. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  47. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  48. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
  49. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +3 -2
  50. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  51. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  52. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +37 -37
  53. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +3 -2
  54. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  55. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  56. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  57. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +1 -1
  58. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  59. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  60. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  61. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
  62. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  63. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  64. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
  65. package/web/.next/server/app/(dashboard)/chat/page.js +1 -1
  66. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  67. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  68. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +30 -30
  69. package/web/.next/server/app/(dashboard)/create/page.js +1 -1
  70. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  71. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  72. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
  73. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +3 -2
  74. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  75. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  76. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +37 -37
  77. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +3 -2
  78. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  79. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  80. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
  81. package/web/.next/server/app/(dashboard)/page.js +1 -1
  82. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  83. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  84. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  85. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +1 -1
  86. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  87. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  88. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  89. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
  90. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  91. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  92. package/web/.next/server/app/_global-error.html +1 -1
  93. package/web/.next/server/app/_global-error.rsc +1 -1
  94. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  95. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  96. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  97. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  98. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  99. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
  100. package/web/.next/server/app/_not-found/page.js +1 -1
  101. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  102. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  103. package/web/.next/server/app/api/agent-events/route.js +2 -1
  104. package/web/.next/server/app/api/agent-events/route.js.nft.json +1 -1
  105. package/web/.next/server/app/api/attachments/preview/route.js +1 -1
  106. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  107. package/web/.next/server/app/api/attachments/upload-from-path/route.js +1 -1
  108. package/web/.next/server/app/api/attachments/upload-from-path/route.js.nft.json +1 -1
  109. package/web/.next/server/app/api/deployment-logs/route.js +2 -1
  110. package/web/.next/server/app/api/deployment-logs/route.js.nft.json +1 -1
  111. package/web/.next/server/app/api/dialog/pick-files/route.js +1 -1
  112. package/web/.next/server/app/api/dialog/pick-files/route.js.nft.json +1 -1
  113. package/web/.next/server/app/api/directory/list/route.js +1 -1
  114. package/web/.next/server/app/api/directory/list/route.js.nft.json +1 -1
  115. package/web/.next/server/app/api/evidence/route.js +1 -1
  116. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  117. package/web/.next/server/app/api/graph-data/route.js +1 -1
  118. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  119. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js +1 -1
  120. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
  121. package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route.js +2 -1
  122. package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route.js.nft.json +1 -1
  123. package/web/.next/server/app/api/interactive/sessions/[id]/stream/route.js +2 -1
  124. package/web/.next/server/app/api/interactive/sessions/[id]/stream/route.js.nft.json +1 -1
  125. package/web/.next/server/app/api/sessions-batch/route.js +1 -1
  126. package/web/.next/server/app/api/sessions-batch/route.js.nft.json +1 -1
  127. package/web/.next/server/app/settings/page/server-reference-manifest.json +11 -11
  128. package/web/.next/server/app/settings/page.js +1 -1
  129. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  130. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  131. package/web/.next/server/app/skills/page/server-reference-manifest.json +11 -11
  132. package/web/.next/server/app/skills/page.js +1 -1
  133. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  134. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  135. package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
  136. package/web/.next/server/app/tools/page.js +1 -1
  137. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  138. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  139. package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
  140. package/web/.next/server/app/version/page.js +1 -1
  141. package/web/.next/server/app/version/page.js.nft.json +1 -1
  142. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  143. package/web/.next/server/chunks/{[root-of-the-server]__02xmnal._.js → [root-of-the-server]__08cpfre._.js} +2 -2
  144. package/web/.next/server/chunks/[root-of-the-server]__0_-chcy._.js +3 -0
  145. package/web/.next/server/chunks/[root-of-the-server]__0_-chcy._.js.map +1 -0
  146. package/web/.next/server/chunks/[root-of-the-server]__0aft8l4._.js +9 -0
  147. package/web/.next/server/chunks/{[root-of-the-server]__0_6fhza._.js.map → [root-of-the-server]__0aft8l4._.js.map} +1 -1
  148. package/web/.next/server/chunks/[root-of-the-server]__0e9p7em._.js +3 -0
  149. package/web/.next/server/chunks/[root-of-the-server]__0e9p7em._.js.map +1 -0
  150. package/web/.next/server/chunks/{[root-of-the-server]__0.2exzi._.js → [root-of-the-server]__0gfvkg8._.js} +2 -2
  151. package/web/.next/server/chunks/{[root-of-the-server]__0ip_e1x._.js → [root-of-the-server]__0hcp97v._.js} +2 -2
  152. package/web/.next/server/chunks/{[root-of-the-server]__09118p2._.js → [root-of-the-server]__0iel39d._.js} +2 -2
  153. package/web/.next/server/chunks/[root-of-the-server]__0kc8ify._.js +12 -0
  154. package/web/.next/server/chunks/[root-of-the-server]__0kc8ify._.js.map +1 -0
  155. package/web/.next/server/chunks/[root-of-the-server]__0r5uk_8._.js +9 -0
  156. package/web/.next/server/chunks/[root-of-the-server]__0r5uk_8._.js.map +1 -0
  157. package/web/.next/server/chunks/[root-of-the-server]__0tb~wwk._.js +1 -1
  158. package/web/.next/server/chunks/{[root-of-the-server]__04jjtl_._.js → [root-of-the-server]__0u1jyv9._.js} +2 -2
  159. package/web/.next/server/chunks/{[root-of-the-server]__07suer1._.js → [root-of-the-server]__0zu_byw._.js} +2 -2
  160. package/web/.next/server/chunks/[root-of-the-server]__13e2_kk._.js +18 -0
  161. package/web/.next/server/chunks/[root-of-the-server]__13e2_kk._.js.map +1 -0
  162. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_00~eq5i.js +1 -1
  163. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_00~eq5i.js.map +1 -1
  164. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_0979_c..js +1 -1
  165. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_0979_c..js.map +1 -1
  166. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_chat_page_actions_0dqll_1.js +1 -1
  167. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_chat_page_actions_0dqll_1.js.map +1 -1
  168. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js +1 -1
  169. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js.map +1 -1
  170. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js +2 -2
  171. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js.map +1 -1
  172. package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js +1 -1
  173. package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js.map +1 -1
  174. package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js +1 -1
  175. package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js.map +1 -1
  176. package/web/.next/server/chunks/ssr/[root-of-the-server]__04nnbmc._.js +3 -0
  177. package/web/.next/server/chunks/ssr/[root-of-the-server]__04nnbmc._.js.map +1 -0
  178. package/web/.next/server/chunks/ssr/[root-of-the-server]__07740t6._.js +3 -0
  179. package/web/.next/server/chunks/ssr/[root-of-the-server]__07740t6._.js.map +1 -0
  180. package/web/.next/server/chunks/ssr/[root-of-the-server]__0l~puw4._.js +3 -0
  181. package/web/.next/server/chunks/ssr/[root-of-the-server]__0l~puw4._.js.map +1 -0
  182. package/web/.next/server/chunks/ssr/[root-of-the-server]__0o3qggc._.js +1 -1
  183. package/web/.next/server/chunks/ssr/[root-of-the-server]__0o3qggc._.js.map +1 -1
  184. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0qh.wn.._.js → [root-of-the-server]__0q3-gz.._.js} +2 -2
  185. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rv1gci._.js +1 -1
  186. package/web/.next/server/chunks/ssr/[root-of-the-server]__0vwjc_m._.js +3 -0
  187. package/web/.next/server/chunks/ssr/[root-of-the-server]__0vwjc_m._.js.map +1 -0
  188. package/web/.next/server/chunks/ssr/{[root-of-the-server]__12g8h3_._.js → [root-of-the-server]__0w4__yd._.js} +3 -3
  189. package/web/.next/server/chunks/ssr/_01mq~sm._.js +1 -1
  190. package/web/.next/server/chunks/ssr/_01mq~sm._.js.map +1 -1
  191. package/web/.next/server/chunks/ssr/_01sesw0._.js +1 -1
  192. package/web/.next/server/chunks/ssr/_01sesw0._.js.map +1 -1
  193. package/web/.next/server/chunks/ssr/{_09di2m~._.js → _04rrcmm._.js} +2 -2
  194. package/web/.next/server/chunks/ssr/{_09di2m~._.js.map → _04rrcmm._.js.map} +1 -1
  195. package/web/.next/server/chunks/ssr/{_12104w0._.js → _0c497sr._.js} +2 -2
  196. package/web/.next/server/chunks/ssr/{_12104w0._.js.map → _0c497sr._.js.map} +1 -1
  197. package/web/.next/server/chunks/ssr/{_0r~xv6k._.js → _0c741v_._.js} +2 -2
  198. package/web/.next/server/chunks/ssr/{_0r~xv6k._.js.map → _0c741v_._.js.map} +1 -1
  199. package/web/.next/server/chunks/ssr/_0jpbsh_._.js +1 -1
  200. package/web/.next/server/chunks/ssr/_0jpbsh_._.js.map +1 -1
  201. package/web/.next/server/chunks/ssr/_0vyfc4b._.js +1 -1
  202. package/web/.next/server/chunks/ssr/_0vyfc4b._.js.map +1 -1
  203. package/web/.next/server/chunks/ssr/_0w-_hww._.js +1 -1
  204. package/web/.next/server/chunks/ssr/_0w-_hww._.js.map +1 -1
  205. package/web/.next/server/chunks/ssr/_0~7lwu_._.js +1 -1
  206. package/web/.next/server/chunks/ssr/_0~7lwu_._.js.map +1 -1
  207. package/web/.next/server/chunks/ssr/_109n-y4._.js +1 -1
  208. package/web/.next/server/chunks/ssr/src_presentation_web_0.e4~xc._.js +1 -1
  209. package/web/.next/server/chunks/ssr/src_presentation_web_0.e4~xc._.js.map +1 -1
  210. package/web/.next/server/chunks/ssr/src_presentation_web_00dvh.m._.js +1 -1
  211. package/web/.next/server/chunks/ssr/src_presentation_web_00dvh.m._.js.map +1 -1
  212. package/web/.next/server/chunks/ssr/src_presentation_web_06b6~lt._.js +2 -2
  213. package/web/.next/server/chunks/ssr/src_presentation_web_06b6~lt._.js.map +1 -1
  214. package/web/.next/server/chunks/ssr/src_presentation_web_08fy2mf._.js +1 -1
  215. package/web/.next/server/chunks/ssr/src_presentation_web_08fy2mf._.js.map +1 -1
  216. package/web/.next/server/chunks/ssr/src_presentation_web_0f~udu1._.js +1 -1
  217. package/web/.next/server/chunks/ssr/src_presentation_web_0f~udu1._.js.map +1 -1
  218. package/web/.next/server/chunks/ssr/src_presentation_web_0qys821._.js +2 -2
  219. package/web/.next/server/chunks/ssr/src_presentation_web_0qys821._.js.map +1 -1
  220. package/web/.next/server/chunks/ssr/src_presentation_web_0q~dt0o._.js +1 -1
  221. package/web/.next/server/chunks/ssr/src_presentation_web_0q~dt0o._.js.map +1 -1
  222. package/web/.next/server/chunks/ssr/src_presentation_web_11jrkxt._.js +1 -1
  223. package/web/.next/server/chunks/ssr/src_presentation_web_11jrkxt._.js.map +1 -1
  224. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_1199d3x.js +1 -1
  225. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_1199d3x.js.map +1 -1
  226. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app__not-found_page_actions_0m2jqxx.js +1 -1
  227. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app__not-found_page_actions_0m2jqxx.js.map +1 -1
  228. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_version_page_actions_0krkh_0.js +1 -1
  229. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_version_page_actions_0krkh_0.js.map +1 -1
  230. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_0pjb_re._.js +3 -0
  231. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_0pjb_re._.js.map +1 -0
  232. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_load-settings_ts_0b8f3pf._.js +1 -1
  233. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_0w2wqvu._.js +1 -1
  234. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_0w2wqvu._.js.map +1 -1
  235. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js +1 -1
  236. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js.map +1 -1
  237. package/web/.next/server/middleware-build-manifest.js +3 -3
  238. package/web/.next/server/pages/500.html +1 -1
  239. package/web/.next/server/server-reference-manifest.js +1 -1
  240. package/web/.next/server/server-reference-manifest.json +49 -49
  241. package/web/.next/static/chunks/{0rhoh5o1y7grf.js → 0-fy~80ui.5os.js} +1 -1
  242. package/web/.next/static/chunks/{13ryk8qc9y3qu.js → 039ic1ygq-to3.js} +1 -1
  243. package/web/.next/static/chunks/{00uywouqbytc0.js → 04xk1iouwcfcq.js} +3 -3
  244. package/web/.next/static/chunks/{0b_anwzlzr9p7.js → 07a4jt64wdipb.js} +1 -1
  245. package/web/.next/static/chunks/{0tutcr7trd_7d.js → 07gx-h_y91lay.js} +2 -2
  246. package/web/.next/static/chunks/{01hf_nf2ge.tn.js → 0_imq4rg3q.fe.js} +2 -2
  247. package/web/.next/static/chunks/{0ntps8p7wo1re.js → 0c_bi0dck80dt.js} +1 -1
  248. package/web/.next/static/chunks/{0fmbl3o08a~-h.js → 0ex35-_jtxyjc.js} +1 -1
  249. package/web/.next/static/chunks/{0rfap2l5xz_-p.js → 0i084mozx131g.js} +1 -1
  250. package/web/.next/static/chunks/0k~55i.ofbdeb.js +1 -0
  251. package/web/.next/static/chunks/{0sywjtf8m0_fb.js → 0oq-cvtg8rjjp.js} +1 -1
  252. package/web/.next/static/chunks/{16jcg65-2mxc..js → 0t_6hx6ul7umb.js} +1 -1
  253. package/web/.next/static/chunks/{0b01fd0lkhnzf.js → 0whez3wju~9ok.js} +1 -1
  254. package/web/.next/server/chunks/[root-of-the-server]__0-3b27b._.js +0 -9
  255. package/web/.next/server/chunks/[root-of-the-server]__0-3b27b._.js.map +0 -1
  256. package/web/.next/server/chunks/[root-of-the-server]__0_6fhza._.js +0 -9
  257. package/web/.next/server/chunks/[root-of-the-server]__0esdmru._.js +0 -12
  258. package/web/.next/server/chunks/[root-of-the-server]__0esdmru._.js.map +0 -1
  259. package/web/.next/server/chunks/[root-of-the-server]__0l1p8bx._.js +0 -3
  260. package/web/.next/server/chunks/[root-of-the-server]__0l1p8bx._.js.map +0 -1
  261. package/web/.next/server/chunks/[root-of-the-server]__0p~owgt._.js +0 -18
  262. package/web/.next/server/chunks/[root-of-the-server]__0p~owgt._.js.map +0 -1
  263. package/web/.next/server/chunks/[root-of-the-server]__0rru~m.._.js +0 -3
  264. package/web/.next/server/chunks/[root-of-the-server]__0rru~m.._.js.map +0 -1
  265. package/web/.next/server/chunks/ssr/[root-of-the-server]__045sv4b._.js +0 -3
  266. package/web/.next/server/chunks/ssr/[root-of-the-server]__045sv4b._.js.map +0 -1
  267. package/web/.next/server/chunks/ssr/[root-of-the-server]__0d_0_fp._.js +0 -3
  268. package/web/.next/server/chunks/ssr/[root-of-the-server]__0d_0_fp._.js.map +0 -1
  269. package/web/.next/server/chunks/ssr/[root-of-the-server]__0l4d7e.._.js +0 -3
  270. package/web/.next/server/chunks/ssr/[root-of-the-server]__0l4d7e.._.js.map +0 -1
  271. package/web/.next/server/chunks/ssr/[root-of-the-server]__0r32z03._.js +0 -3
  272. package/web/.next/server/chunks/ssr/[root-of-the-server]__0r32z03._.js.map +0 -1
  273. package/web/.next/static/chunks/121l3o3vd~hvn.js +0 -1
  274. /package/web/.next/server/chunks/{[root-of-the-server]__02xmnal._.js.map → [root-of-the-server]__08cpfre._.js.map} +0 -0
  275. /package/web/.next/server/chunks/{[root-of-the-server]__0.2exzi._.js.map → [root-of-the-server]__0gfvkg8._.js.map} +0 -0
  276. /package/web/.next/server/chunks/{[root-of-the-server]__0ip_e1x._.js.map → [root-of-the-server]__0hcp97v._.js.map} +0 -0
  277. /package/web/.next/server/chunks/{[root-of-the-server]__09118p2._.js.map → [root-of-the-server]__0iel39d._.js.map} +0 -0
  278. /package/web/.next/server/chunks/{[root-of-the-server]__04jjtl_._.js.map → [root-of-the-server]__0u1jyv9._.js.map} +0 -0
  279. /package/web/.next/server/chunks/{[root-of-the-server]__07suer1._.js.map → [root-of-the-server]__0zu_byw._.js.map} +0 -0
  280. /package/web/.next/server/chunks/ssr/{[root-of-the-server]__0qh.wn.._.js.map → [root-of-the-server]__0q3-gz.._.js.map} +0 -0
  281. /package/web/.next/server/chunks/ssr/{[root-of-the-server]__12g8h3_._.js.map → [root-of-the-server]__0w4__yd._.js.map} +0 -0
  282. /package/web/.next/static/{21GZVGanhwKlq9p5dtTCB → ynyh_sSxbFA995FRvBUxs}/_buildManifest.js +0 -0
  283. /package/web/.next/static/{21GZVGanhwKlq9p5dtTCB → ynyh_sSxbFA995FRvBUxs}/_clientMiddlewareManifest.js +0 -0
  284. /package/web/.next/static/{21GZVGanhwKlq9p5dtTCB → ynyh_sSxbFA995FRvBUxs}/_ssgManifest.js +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../src/presentation/web/lib/server-container.ts","../../../../../../src/presentation/web/app/api/attachments/upload-from-path/route.ts","../../../../../../node_modules/.pnpm/next%4016.2.2_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.59.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/dist/esm/build/templates/app-route.js"],"sourcesContent":["/**\n * Server Container Accessor\n *\n * Provides a `resolve()` helper for server components and API routes to\n * obtain DI-managed instances. The tsyringe container is placed on globalThis\n * by the CLI bootstrap (`shipit-ai ui`) or the dev-server (`pnpm dev:web`).\n */\n\nimport type { DependencyContainer, InjectionToken } from 'tsyringe';\n\nconst CONTAINER_KEY = '__shipitAiContainer';\n\n/**\n * Resolve a dependency from the DI container.\n *\n * Usage in server components / API routes:\n * ```ts\n * import { resolve } from '@/lib/server-container';\n * import { ListFeaturesUseCase } from '@shipit-ai/core/application/use-cases/features/list-features.use-case';\n *\n * const features = await resolve(ListFeaturesUseCase).execute();\n * ```\n */\nexport function resolve<T>(token: InjectionToken<T>): T {\n const container = (globalThis as Record<string, unknown>)[CONTAINER_KEY] as\n | DependencyContainer\n | undefined;\n\n if (!container) {\n throw new Error(\n 'DI container not available. Ensure the CLI bootstrap or dev-server has initialized it.'\n );\n }\n\n return container.resolve(token);\n}\n","import { NextResponse } from 'next/server';\nimport { readFile, realpath } from 'fs/promises';\nimport { extname, basename, resolve as resolvePath, sep } from 'path';\nimport { homedir } from 'node:os';\nimport { resolve } from '@/lib/server-container';\nimport type { AttachmentStorageService } from '@shipit-ai/core/infrastructure/services/attachment-storage.service';\n\nconst MAX_FILE_SIZE = 10 * 1024 * 1024; // 10 MB\n\nconst ALLOWED_EXTENSIONS = new Set([\n '.png',\n '.jpg',\n '.jpeg',\n '.gif',\n '.webp',\n '.svg',\n '.bmp',\n '.ico',\n '.pdf',\n '.doc',\n '.docx',\n '.xls',\n '.xlsx',\n '.ppt',\n '.pptx',\n '.txt',\n '.md',\n '.csv',\n '.json',\n '.yaml',\n '.yml',\n '.xml',\n '.ts',\n '.tsx',\n '.js',\n '.jsx',\n '.py',\n '.rb',\n '.go',\n '.rs',\n '.java',\n '.c',\n '.cpp',\n '.h',\n '.hpp',\n '.cs',\n '.swift',\n '.kt',\n '.html',\n '.css',\n '.scss',\n '.less',\n '.sh',\n '.bash',\n '.zsh',\n '.fish',\n '.toml',\n '.ini',\n '.cfg',\n '.conf',\n '.zip',\n '.tar',\n '.gz',\n '.log',\n]);\n\nconst MIME_MAP: Record<string, string> = {\n '.png': 'image/png',\n '.jpg': 'image/jpeg',\n '.jpeg': 'image/jpeg',\n '.gif': 'image/gif',\n '.webp': 'image/webp',\n '.svg': 'image/svg+xml',\n '.bmp': 'image/bmp',\n '.ico': 'image/x-icon',\n '.pdf': 'application/pdf',\n '.txt': 'text/plain',\n '.md': 'text/markdown',\n '.json': 'application/json',\n '.yaml': 'text/yaml',\n '.yml': 'text/yaml',\n};\n\nexport async function POST(request: Request): Promise<NextResponse> {\n try {\n const body = await request.json();\n const { path, sessionId } = body as { path?: string; sessionId?: string };\n\n if (!path || !sessionId) {\n return NextResponse.json(\n { error: 'Missing required fields: path, sessionId' },\n { status: 400 }\n );\n }\n\n const ext = extname(path).toLowerCase();\n if (!ext || !ALLOWED_EXTENSIONS.has(ext)) {\n return NextResponse.json(\n {\n error: ext\n ? `File type \"${ext}\" is not allowed`\n : 'Files without an extension are not allowed',\n },\n { status: 400 }\n );\n }\n\n // Path containment: resolve symlinks then verify within allowed roots\n let physicalPath: string;\n try {\n physicalPath = await realpath(resolvePath(path));\n } catch {\n return NextResponse.json({ error: 'File not found or unreadable' }, { status: 404 });\n }\n const allowedRoots = [\n await realpath(process.cwd()).catch(() => process.cwd()),\n await realpath(homedir()).catch(() => homedir()),\n ];\n const isAllowed = allowedRoots.some(\n (root) => physicalPath === root || physicalPath.startsWith(root + sep)\n );\n if (!isAllowed) {\n return NextResponse.json({ error: 'Access denied' }, { status: 403 });\n }\n\n let buffer: Buffer;\n try {\n buffer = await readFile(resolvePath(path));\n } catch {\n return NextResponse.json({ error: 'File not found or unreadable' }, { status: 404 });\n }\n\n if (buffer.length > MAX_FILE_SIZE) {\n return NextResponse.json(\n {\n error: `File exceeds 10 MB limit (${(buffer.length / 1024 / 1024).toFixed(1)} MB)`,\n },\n { status: 413 }\n );\n }\n\n const filename = basename(path);\n const mimeType = MIME_MAP[ext] ?? 'application/octet-stream';\n\n const service = resolve<AttachmentStorageService>('AttachmentStorageService');\n const attachment = service.store(buffer, filename, mimeType, sessionId);\n\n return NextResponse.json({\n id: attachment.id,\n name: attachment.name,\n size: Number(attachment.size),\n mimeType: attachment.mimeType,\n path: attachment.path,\n createdAt: attachment.createdAt,\n });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Upload failed';\n return NextResponse.json({ error: message }, { status: 500 });\n }\n}\n","import { AppRouteRouteModule } from \"next/dist/esm/server/route-modules/app-route/module.compiled\";\nimport { RouteKind } from \"next/dist/esm/server/route-kind\";\nimport { patchFetch as _patchFetch } from \"next/dist/esm/server/lib/patch-fetch\";\nimport { addRequestMeta, getRequestMeta, setRequestMeta } from \"next/dist/esm/server/request-meta\";\nimport { getTracer, SpanKind } from \"next/dist/esm/server/lib/trace/tracer\";\nimport { setManifestsSingleton } from \"next/dist/esm/server/app-render/manifests-singleton\";\nimport { normalizeAppPath } from \"next/dist/esm/shared/lib/router/utils/app-paths\";\nimport { NodeNextRequest, NodeNextResponse } from \"next/dist/esm/server/base-http/node\";\nimport { NextRequestAdapter, signalFromNodeResponse } from \"next/dist/esm/server/web/spec-extension/adapters/next-request\";\nimport { BaseServerSpan } from \"next/dist/esm/server/lib/trace/constants\";\nimport { getRevalidateReason } from \"next/dist/esm/server/instrumentation/utils\";\nimport { sendResponse } from \"next/dist/esm/server/send-response\";\nimport { fromNodeOutgoingHttpHeaders, toNodeOutgoingHttpHeaders } from \"next/dist/esm/server/web/utils\";\nimport { getCacheControlHeader } from \"next/dist/esm/server/lib/cache-control\";\nimport { INFINITE_CACHE, NEXT_CACHE_TAGS_HEADER } from \"next/dist/esm/lib/constants\";\nimport { NoFallbackError } from \"next/dist/esm/shared/lib/no-fallback-error.external\";\nimport { CachedRouteKind } from \"next/dist/esm/server/response-cache\";\nimport * as userland from \"INNER_APP_ROUTE\";\n// We inject the nextConfigOutput here so that we can use them in the route\n// module.\nconst nextConfigOutput = \"\"\nconst routeModule = new AppRouteRouteModule({\n definition: {\n kind: RouteKind.APP_ROUTE,\n page: \"/api/attachments/upload-from-path/route\",\n pathname: \"/api/attachments/upload-from-path\",\n filename: \"route\",\n bundlePath: \"\"\n },\n distDir: process.env.__NEXT_RELATIVE_DIST_DIR || '',\n relativeProjectDir: process.env.__NEXT_RELATIVE_PROJECT_DIR || '',\n resolvedPagePath: \"[project]/src/presentation/web/app/api/attachments/upload-from-path/route.ts\",\n nextConfigOutput,\n // The static import is used for initialization (methods, dynamic, etc.).\n userland: userland,\n // In Turbopack dev mode, also provide a getter that calls require() on every\n // request. This re-reads from devModuleCache so HMR updates are picked up,\n // and the async wrapper unwraps async-module Promises (ESM-only\n // serverExternalPackages) automatically.\n ...process.env.TURBOPACK && process.env.__NEXT_DEV_SERVER ? {\n getUserland: ()=>import(\"INNER_APP_ROUTE\")\n } : {}\n});\n// Pull out the exports that we need to expose from the module. This should\n// be eliminated when we've moved the other routes to the new format. These\n// are used to hook into the route.\nconst { workAsyncStorage, workUnitAsyncStorage, serverHooks } = routeModule;\nfunction patchFetch() {\n return _patchFetch({\n workAsyncStorage,\n workUnitAsyncStorage\n });\n}\nexport { routeModule, workAsyncStorage, workUnitAsyncStorage, serverHooks, patchFetch, };\nexport async function handler(req, res, ctx) {\n if (ctx.requestMeta) {\n setRequestMeta(req, ctx.requestMeta);\n }\n if (routeModule.isDev) {\n addRequestMeta(req, 'devRequestTimingInternalsEnd', process.hrtime.bigint());\n }\n let srcPage = \"/api/attachments/upload-from-path/route\";\n // turbopack doesn't normalize `/index` in the page name\n // so we need to to process dynamic routes properly\n // TODO: fix turbopack providing differing value from webpack\n if (process.env.TURBOPACK) {\n srcPage = srcPage.replace(/\\/index$/, '') || '/';\n } else if (srcPage === '/index') {\n // we always normalize /index specifically\n srcPage = '/';\n }\n const multiZoneDraftMode = process.env.__NEXT_MULTI_ZONE_DRAFT_MODE;\n const prepareResult = await routeModule.prepare(req, res, {\n srcPage,\n multiZoneDraftMode\n });\n if (!prepareResult) {\n res.statusCode = 400;\n res.end('Bad Request');\n ctx.waitUntil == null ? void 0 : ctx.waitUntil.call(ctx, Promise.resolve());\n return null;\n }\n const { buildId, params, nextConfig, parsedUrl, isDraftMode, prerenderManifest, routerServerContext, isOnDemandRevalidate, revalidateOnlyGenerated, resolvedPathname, clientReferenceManifest, serverActionsManifest } = prepareResult;\n const normalizedSrcPage = normalizeAppPath(srcPage);\n let isIsr = Boolean(prerenderManifest.dynamicRoutes[normalizedSrcPage] || prerenderManifest.routes[resolvedPathname]);\n const render404 = async ()=>{\n // TODO: should route-module itself handle rendering the 404\n if (routerServerContext == null ? void 0 : routerServerContext.render404) {\n await routerServerContext.render404(req, res, parsedUrl, false);\n } else {\n res.end('This page could not be found');\n }\n return null;\n };\n if (isIsr && !isDraftMode) {\n const isPrerendered = Boolean(prerenderManifest.routes[resolvedPathname]);\n const prerenderInfo = prerenderManifest.dynamicRoutes[normalizedSrcPage];\n if (prerenderInfo) {\n if (prerenderInfo.fallback === false && !isPrerendered) {\n if (nextConfig.adapterPath) {\n return await render404();\n }\n throw new NoFallbackError();\n }\n }\n }\n let cacheKey = null;\n if (isIsr && !routeModule.isDev && !isDraftMode) {\n cacheKey = resolvedPathname;\n // ensure /index and / is normalized to one key\n cacheKey = cacheKey === '/index' ? '/' : cacheKey;\n }\n const supportsDynamicResponse = // If we're in development, we always support dynamic HTML\n routeModule.isDev === true || // If this is not SSG or does not have static paths, then it supports\n // dynamic HTML.\n !isIsr;\n // This is a revalidation request if the request is for a static\n // page and it is not being resumed from a postponed render and\n // it is not a dynamic RSC request then it is a revalidation\n // request.\n const isStaticGeneration = isIsr && !supportsDynamicResponse;\n // Before rendering (which initializes component tree modules), we have to\n // set the reference manifests to our global store so Server Action's\n // encryption util can access to them at the top level of the page module.\n if (serverActionsManifest && clientReferenceManifest) {\n setManifestsSingleton({\n page: srcPage,\n clientReferenceManifest,\n serverActionsManifest\n });\n }\n const method = req.method || 'GET';\n const tracer = getTracer();\n const activeSpan = tracer.getActiveScopeSpan();\n const isWrappedByNextServer = Boolean(routerServerContext == null ? void 0 : routerServerContext.isWrappedByNextServer);\n const isMinimalMode = Boolean(getRequestMeta(req, 'minimalMode'));\n const incrementalCache = getRequestMeta(req, 'incrementalCache') || await routeModule.getIncrementalCache(req, nextConfig, prerenderManifest, isMinimalMode);\n incrementalCache == null ? void 0 : incrementalCache.resetRequestCache();\n globalThis.__incrementalCache = incrementalCache;\n const context = {\n params,\n previewProps: prerenderManifest.preview,\n renderOpts: {\n experimental: {\n authInterrupts: Boolean(nextConfig.experimental.authInterrupts)\n },\n cacheComponents: Boolean(nextConfig.cacheComponents),\n supportsDynamicResponse,\n incrementalCache,\n cacheLifeProfiles: nextConfig.cacheLife,\n waitUntil: ctx.waitUntil,\n onClose: (cb)=>{\n res.on('close', cb);\n },\n onAfterTaskError: undefined,\n onInstrumentationRequestError: (error, _request, errorContext, silenceLog)=>routeModule.onRequestError(req, error, errorContext, silenceLog, routerServerContext)\n },\n sharedContext: {\n buildId\n }\n };\n const nodeNextReq = new NodeNextRequest(req);\n const nodeNextRes = new NodeNextResponse(res);\n const nextReq = NextRequestAdapter.fromNodeNextRequest(nodeNextReq, signalFromNodeResponse(res));\n try {\n let parentSpan;\n const invokeRouteModule = async (span)=>{\n return routeModule.handle(nextReq, context).finally(()=>{\n if (!span) return;\n span.setAttributes({\n 'http.status_code': res.statusCode,\n 'next.rsc': false\n });\n const rootSpanAttributes = tracer.getRootSpanAttributes();\n // We were unable to get attributes, probably OTEL is not enabled\n if (!rootSpanAttributes) {\n return;\n }\n if (rootSpanAttributes.get('next.span_type') !== BaseServerSpan.handleRequest) {\n console.warn(`Unexpected root span type '${rootSpanAttributes.get('next.span_type')}'. Please report this Next.js issue https://github.com/vercel/next.js`);\n return;\n }\n const route = rootSpanAttributes.get('next.route');\n if (route) {\n const name = `${method} ${route}`;\n span.setAttributes({\n 'next.route': route,\n 'http.route': route,\n 'next.span_name': name\n });\n span.updateName(name);\n // Propagate http.route to the parent span if one exists (e.g.\n // a platform-created HTTP span in adapter deployments).\n if (parentSpan && parentSpan !== span) {\n parentSpan.setAttribute('http.route', route);\n parentSpan.updateName(name);\n }\n } else {\n span.updateName(`${method} ${srcPage}`);\n }\n });\n };\n const handleResponse = async (currentSpan)=>{\n var _cacheEntry_value;\n const responseGenerator = async ({ previousCacheEntry })=>{\n try {\n if (!isMinimalMode && isOnDemandRevalidate && revalidateOnlyGenerated && !previousCacheEntry) {\n res.statusCode = 404;\n // on-demand revalidate always sets this header\n res.setHeader('x-nextjs-cache', 'REVALIDATED');\n res.end('This page could not be found');\n return null;\n }\n const response = await invokeRouteModule(currentSpan);\n req.fetchMetrics = context.renderOpts.fetchMetrics;\n let pendingWaitUntil = context.renderOpts.pendingWaitUntil;\n // Attempt using provided waitUntil if available\n // if it's not we fallback to sendResponse's handling\n if (pendingWaitUntil) {\n if (ctx.waitUntil) {\n ctx.waitUntil(pendingWaitUntil);\n pendingWaitUntil = undefined;\n }\n }\n const cacheTags = context.renderOpts.collectedTags;\n // If the request is for a static response, we can cache it so long\n // as it's not edge.\n if (isIsr) {\n const blob = await response.blob();\n // Copy the headers from the response.\n const headers = toNodeOutgoingHttpHeaders(response.headers);\n if (cacheTags) {\n headers[NEXT_CACHE_TAGS_HEADER] = cacheTags;\n }\n if (!headers['content-type'] && blob.type) {\n headers['content-type'] = blob.type;\n }\n const revalidate = typeof context.renderOpts.collectedRevalidate === 'undefined' || context.renderOpts.collectedRevalidate >= INFINITE_CACHE ? false : context.renderOpts.collectedRevalidate;\n const expire = typeof context.renderOpts.collectedExpire === 'undefined' || context.renderOpts.collectedExpire >= INFINITE_CACHE ? undefined : context.renderOpts.collectedExpire;\n // Create the cache entry for the response.\n const cacheEntry = {\n value: {\n kind: CachedRouteKind.APP_ROUTE,\n status: response.status,\n body: Buffer.from(await blob.arrayBuffer()),\n headers\n },\n cacheControl: {\n revalidate,\n expire\n }\n };\n return cacheEntry;\n } else {\n // send response without caching if not ISR\n await sendResponse(nodeNextReq, nodeNextRes, response, context.renderOpts.pendingWaitUntil);\n return null;\n }\n } catch (err) {\n // if this is a background revalidate we need to report\n // the request error here as it won't be bubbled\n if (previousCacheEntry == null ? void 0 : previousCacheEntry.isStale) {\n const silenceLog = false;\n await routeModule.onRequestError(req, err, {\n routerKind: 'App Router',\n routePath: srcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate\n })\n }, silenceLog, routerServerContext);\n }\n throw err;\n }\n };\n const cacheEntry = await routeModule.handleResponse({\n req,\n nextConfig,\n cacheKey,\n routeKind: RouteKind.APP_ROUTE,\n isFallback: false,\n prerenderManifest,\n isRoutePPREnabled: false,\n isOnDemandRevalidate,\n revalidateOnlyGenerated,\n responseGenerator,\n waitUntil: ctx.waitUntil,\n isMinimalMode\n });\n // we don't create a cacheEntry for ISR\n if (!isIsr) {\n return null;\n }\n if ((cacheEntry == null ? void 0 : (_cacheEntry_value = cacheEntry.value) == null ? void 0 : _cacheEntry_value.kind) !== CachedRouteKind.APP_ROUTE) {\n var _cacheEntry_value1;\n throw Object.defineProperty(new Error(`Invariant: app-route received invalid cache entry ${cacheEntry == null ? void 0 : (_cacheEntry_value1 = cacheEntry.value) == null ? void 0 : _cacheEntry_value1.kind}`), \"__NEXT_ERROR_CODE\", {\n value: \"E701\",\n enumerable: false,\n configurable: true\n });\n }\n if (!isMinimalMode) {\n res.setHeader('x-nextjs-cache', isOnDemandRevalidate ? 'REVALIDATED' : cacheEntry.isMiss ? 'MISS' : cacheEntry.isStale ? 'STALE' : 'HIT');\n }\n // Draft mode should never be cached\n if (isDraftMode) {\n res.setHeader('Cache-Control', 'private, no-cache, no-store, max-age=0, must-revalidate');\n }\n const headers = fromNodeOutgoingHttpHeaders(cacheEntry.value.headers);\n if (!(isMinimalMode && isIsr)) {\n headers.delete(NEXT_CACHE_TAGS_HEADER);\n }\n // If cache control is already set on the response we don't\n // override it to allow users to customize it via next.config\n if (cacheEntry.cacheControl && !res.getHeader('Cache-Control') && !headers.get('Cache-Control')) {\n headers.set('Cache-Control', getCacheControlHeader(cacheEntry.cacheControl));\n }\n await sendResponse(nodeNextReq, nodeNextRes, // @ts-expect-error - Argument of type 'Buffer<ArrayBufferLike>' is not assignable to parameter of type 'BodyInit | null | undefined'.\n new Response(cacheEntry.value.body, {\n headers,\n status: cacheEntry.value.status || 200\n }));\n return null;\n };\n // TODO: activeSpan code path is for when wrapped by\n // next-server can be removed when this is no longer used\n if (isWrappedByNextServer && activeSpan) {\n await handleResponse(activeSpan);\n } else {\n parentSpan = tracer.getActiveScopeSpan();\n await tracer.withPropagatedContext(req.headers, ()=>tracer.trace(BaseServerSpan.handleRequest, {\n spanName: `${method} ${srcPage}`,\n kind: SpanKind.SERVER,\n attributes: {\n 'http.method': method,\n 'http.target': req.url\n }\n }, handleResponse), undefined, !isWrappedByNextServer);\n }\n } catch (err) {\n if (!(err instanceof NoFallbackError)) {\n const silenceLog = false;\n await routeModule.onRequestError(req, err, {\n routerKind: 'App Router',\n routePath: normalizedSrcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate\n })\n }, silenceLog, routerServerContext);\n }\n // rethrow so that we can handle serving error page\n // If this is during static generation, throw the error again.\n if (isIsr) throw err;\n // Otherwise, send a 500 response.\n await sendResponse(nodeNextReq, nodeNextRes, new Response(null, {\n status: 500\n }));\n return null;\n }\n}\n\n//# sourceMappingURL=app-route.js.map\n"],"names":["CONTAINER_KEY","resolve","token","container","globalThis","Error","MAX_FILE_SIZE","ALLOWED_EXTENSIONS","Set","buffer","mimeType","ext","MIME_MAP","POST","request","body","json","path","sessionId","error","status","toLowerCase","has","physicalPath","allowedRoots","process","cwd","catch","isAllowed","some","root","startsWith","length","toFixed","filename","service","attachment","store","id","name","size","Number","createdAt","message"],"mappings":"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","ignoreList":[2]}
@@ -1,18 +0,0 @@
1
- module.exports=[18622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},32319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},56704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},70406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},93695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},40060,e=>{"use strict";e.s(["resolve",0,function(e){let t=globalThis.__shipitAiContainer;if(!t)throw Error("DI container not available. Ensure the CLI bootstrap or dev-server has initialized it.");return t.resolve(e)}])},14076,e=>{"use strict";var t=e.i(29932),r=e.i(88797),a=e.i(78439),n=e.i(21387),i=e.i(351),o=e.i(1286),s=e.i(31060),l=e.i(67760),d=e.i(13435),u=e.i(60316),c=e.i(37130),p=e.i(31516),h=e.i(63144),v=e.i(3719),g=e.i(66941),R=e.i(93695);e.i(76574);var f=e.i(45014),x=e.i(40060);async function m(e,{params:t}){let{featureId:r}=await t;try{let t=(0,x.resolve)("IInteractiveSessionService"),a=new TextEncoder,n=new ReadableStream({start(n){let i=!1;function o(e){if(!i)try{n.enqueue(a.encode(e))}catch{}}o(": connected\n\n");let s=setInterval(()=>{o(": heartbeat\n\n")},15e3),l=t.subscribeByFeature(r,e=>{e.done?o(`event: done
2
- data: ${JSON.stringify({done:!0,featureId:r})}
3
-
4
- `):e.activity?(o(`event: activity
5
- data: ${JSON.stringify({activity:e.activity,featureId:r})}
6
-
7
- `),e.log&&o(`event: log
8
- data: ${JSON.stringify({log:e.log,featureId:r})}
9
-
10
- `)):e.log?o(`event: log
11
- data: ${JSON.stringify({log:e.log,featureId:r})}
12
-
13
- `):e.delta&&o(`event: delta
14
- data: ${JSON.stringify({delta:e.delta,featureId:r})}
15
-
16
- `)});e.signal.addEventListener("abort",function(){if(!i){i=!0,clearInterval(s),l();try{n.close()}catch{}}},{once:!0})}});return new Response(n,{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}})}catch(e){return console.error("[GET /api/interactive/chat/:featureId/stream]",e),new Response(JSON.stringify({error:String(e)}),{status:500,headers:{"Content-Type":"application/json"}})}}e.s(["GET",0,m,"dynamic",0,"force-dynamic"],37267);var y=e.i(37267);let w=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/interactive/chat/[featureId]/stream/route",pathname:"/api/interactive/chat/[featureId]/stream",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.ts",nextConfigOutput:"",userland:y,...{}}),{workAsyncStorage:E,workUnitAsyncStorage:C,serverHooks:b}=w;async function A(e,t,a){a.requestMeta&&(0,n.setRequestMeta)(e,a.requestMeta),w.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let x="/api/interactive/chat/[featureId]/stream/route";x=x.replace(/\/index$/,"")||"/";let m=await w.prepare(e,t,{srcPage:x,multiZoneDraftMode:!1});if(!m)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:y,params:E,nextConfig:C,parsedUrl:b,isDraftMode:A,prerenderManifest:S,routerServerContext:N,isOnDemandRevalidate:T,revalidateOnlyGenerated:I,resolvedPathname:O,clientReferenceManifest:q,serverActionsManifest:P}=m,_=(0,s.normalizeAppPath)(x),k=!!(S.dynamicRoutes[_]||S.routes[O]),H=async()=>((null==N?void 0:N.render404)?await N.render404(e,t,b,!1):t.end("This page could not be found"),null);if(k&&!A){let e=!!S.routes[O],t=S.dynamicRoutes[_];if(t&&!1===t.fallback&&!e){if(C.adapterPath)return await H();throw new R.NoFallbackError}}let j=null;!k||w.isDev||A||(j="/index"===(j=O)?"/":j);let U=!0===w.isDev||!k,M=k&&!U;P&&q&&(0,o.setManifestsSingleton)({page:x,clientReferenceManifest:q,serverActionsManifest:P});let D=e.method||"GET",$=(0,i.getTracer)(),F=$.getActiveScopeSpan(),K=!!(null==N?void 0:N.isWrappedByNextServer),B=!!(0,n.getRequestMeta)(e,"minimalMode"),L=(0,n.getRequestMeta)(e,"incrementalCache")||await w.getIncrementalCache(e,C,S,B);null==L||L.resetRequestCache(),globalThis.__incrementalCache=L;let J={params:E,previewProps:S.preview,renderOpts:{experimental:{authInterrupts:!!C.experimental.authInterrupts},cacheComponents:!!C.cacheComponents,supportsDynamicResponse:U,incrementalCache:L,cacheLifeProfiles:C.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,n)=>w.onRequestError(e,t,a,n,N)},sharedContext:{buildId:y}},G=new l.NodeNextRequest(e),V=new l.NodeNextResponse(t),W=d.NextRequestAdapter.fromNodeNextRequest(G,(0,d.signalFromNodeResponse)(t));try{let n,o=async e=>w.handle(W,J).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=$.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==u.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route");if(a){let t=`${D} ${a}`;e.setAttributes({"next.route":a,"http.route":a,"next.span_name":t}),e.updateName(t),n&&n!==e&&(n.setAttribute("http.route",a),n.updateName(t))}else e.updateName(`${D} ${x}`)}),s=async n=>{var i,s;let l=async({previousCacheEntry:r})=>{try{if(!B&&T&&I&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let i=await o(n);e.fetchMetrics=J.renderOpts.fetchMetrics;let s=J.renderOpts.pendingWaitUntil;s&&a.waitUntil&&(a.waitUntil(s),s=void 0);let l=J.renderOpts.collectedTags;if(!k)return await (0,p.sendResponse)(G,V,i,J.renderOpts.pendingWaitUntil),null;{let e=await i.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(i.headers);l&&(t[g.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==J.renderOpts.collectedRevalidate&&!(J.renderOpts.collectedRevalidate>=g.INFINITE_CACHE)&&J.renderOpts.collectedRevalidate,a=void 0===J.renderOpts.collectedExpire||J.renderOpts.collectedExpire>=g.INFINITE_CACHE?void 0:J.renderOpts.collectedExpire;return{value:{kind:f.CachedRouteKind.APP_ROUTE,status:i.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await w.onRequestError(e,t,{routerKind:"App Router",routePath:x,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:M,isOnDemandRevalidate:T})},!1,N),t}},d=await w.handleResponse({req:e,nextConfig:C,cacheKey:j,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:S,isRoutePPREnabled:!1,isOnDemandRevalidate:T,revalidateOnlyGenerated:I,responseGenerator:l,waitUntil:a.waitUntil,isMinimalMode:B});if(!k)return null;if((null==d||null==(i=d.value)?void 0:i.kind)!==f.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==d||null==(s=d.value)?void 0:s.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});B||t.setHeader("x-nextjs-cache",T?"REVALIDATED":d.isMiss?"MISS":d.isStale?"STALE":"HIT"),A&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let u=(0,h.fromNodeOutgoingHttpHeaders)(d.value.headers);return B&&k||u.delete(g.NEXT_CACHE_TAGS_HEADER),!d.cacheControl||t.getHeader("Cache-Control")||u.get("Cache-Control")||u.set("Cache-Control",(0,v.getCacheControlHeader)(d.cacheControl)),await (0,p.sendResponse)(G,V,new Response(d.value.body,{headers:u,status:d.value.status||200})),null};K&&F?await s(F):(n=$.getActiveScopeSpan(),await $.withPropagatedContext(e.headers,()=>$.trace(u.BaseServerSpan.handleRequest,{spanName:`${D} ${x}`,kind:i.SpanKind.SERVER,attributes:{"http.method":D,"http.target":e.url}},s),void 0,!K))}catch(t){if(t instanceof R.NoFallbackError||await w.onRequestError(e,t,{routerKind:"App Router",routePath:_,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:M,isOnDemandRevalidate:T})},!1,N),k)throw t;return await (0,p.sendResponse)(G,V,new Response(null,{status:500})),null}}e.s(["handler",0,A,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:E,workUnitAsyncStorage:C})},"routeModule",0,w,"serverHooks",0,b,"workAsyncStorage",0,E,"workUnitAsyncStorage",0,C],14076)}];
17
-
18
- //# sourceMappingURL=%5Broot-of-the-server%5D__0p~owgt._.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../src/presentation/web/lib/server-container.ts","../../../../../../node_modules/.pnpm/next%4016.2.2_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.59.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/dist/esm/build/templates/app-route.js","../../../../../../src/presentation/web/app/api/interactive/chat/%5BfeatureId%5D/stream/route.ts"],"sourcesContent":["/**\n * Server Container Accessor\n *\n * Provides a `resolve()` helper for server components and API routes to\n * obtain DI-managed instances. The tsyringe container is placed on globalThis\n * by the CLI bootstrap (`shipit-ai ui`) or the dev-server (`pnpm dev:web`).\n */\n\nimport type { DependencyContainer, InjectionToken } from 'tsyringe';\n\nconst CONTAINER_KEY = '__shipitAiContainer';\n\n/**\n * Resolve a dependency from the DI container.\n *\n * Usage in server components / API routes:\n * ```ts\n * import { resolve } from '@/lib/server-container';\n * import { ListFeaturesUseCase } from '@shipit-ai/core/application/use-cases/features/list-features.use-case';\n *\n * const features = await resolve(ListFeaturesUseCase).execute();\n * ```\n */\nexport function resolve<T>(token: InjectionToken<T>): T {\n const container = (globalThis as Record<string, unknown>)[CONTAINER_KEY] as\n | DependencyContainer\n | undefined;\n\n if (!container) {\n throw new Error(\n 'DI container not available. Ensure the CLI bootstrap or dev-server has initialized it.'\n );\n }\n\n return container.resolve(token);\n}\n","import { AppRouteRouteModule } from \"next/dist/esm/server/route-modules/app-route/module.compiled\";\nimport { RouteKind } from \"next/dist/esm/server/route-kind\";\nimport { patchFetch as _patchFetch } from \"next/dist/esm/server/lib/patch-fetch\";\nimport { addRequestMeta, getRequestMeta, setRequestMeta } from \"next/dist/esm/server/request-meta\";\nimport { getTracer, SpanKind } from \"next/dist/esm/server/lib/trace/tracer\";\nimport { setManifestsSingleton } from \"next/dist/esm/server/app-render/manifests-singleton\";\nimport { normalizeAppPath } from \"next/dist/esm/shared/lib/router/utils/app-paths\";\nimport { NodeNextRequest, NodeNextResponse } from \"next/dist/esm/server/base-http/node\";\nimport { NextRequestAdapter, signalFromNodeResponse } from \"next/dist/esm/server/web/spec-extension/adapters/next-request\";\nimport { BaseServerSpan } from \"next/dist/esm/server/lib/trace/constants\";\nimport { getRevalidateReason } from \"next/dist/esm/server/instrumentation/utils\";\nimport { sendResponse } from \"next/dist/esm/server/send-response\";\nimport { fromNodeOutgoingHttpHeaders, toNodeOutgoingHttpHeaders } from \"next/dist/esm/server/web/utils\";\nimport { getCacheControlHeader } from \"next/dist/esm/server/lib/cache-control\";\nimport { INFINITE_CACHE, NEXT_CACHE_TAGS_HEADER } from \"next/dist/esm/lib/constants\";\nimport { NoFallbackError } from \"next/dist/esm/shared/lib/no-fallback-error.external\";\nimport { CachedRouteKind } from \"next/dist/esm/server/response-cache\";\nimport * as userland from \"INNER_APP_ROUTE\";\n// We inject the nextConfigOutput here so that we can use them in the route\n// module.\nconst nextConfigOutput = \"\"\nconst routeModule = new AppRouteRouteModule({\n definition: {\n kind: RouteKind.APP_ROUTE,\n page: \"/api/interactive/chat/[featureId]/stream/route\",\n pathname: \"/api/interactive/chat/[featureId]/stream\",\n filename: \"route\",\n bundlePath: \"\"\n },\n distDir: process.env.__NEXT_RELATIVE_DIST_DIR || '',\n relativeProjectDir: process.env.__NEXT_RELATIVE_PROJECT_DIR || '',\n resolvedPagePath: \"[project]/src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.ts\",\n nextConfigOutput,\n // The static import is used for initialization (methods, dynamic, etc.).\n userland: userland,\n // In Turbopack dev mode, also provide a getter that calls require() on every\n // request. This re-reads from devModuleCache so HMR updates are picked up,\n // and the async wrapper unwraps async-module Promises (ESM-only\n // serverExternalPackages) automatically.\n ...process.env.TURBOPACK && process.env.__NEXT_DEV_SERVER ? {\n getUserland: ()=>import(\"INNER_APP_ROUTE\")\n } : {}\n});\n// Pull out the exports that we need to expose from the module. This should\n// be eliminated when we've moved the other routes to the new format. These\n// are used to hook into the route.\nconst { workAsyncStorage, workUnitAsyncStorage, serverHooks } = routeModule;\nfunction patchFetch() {\n return _patchFetch({\n workAsyncStorage,\n workUnitAsyncStorage\n });\n}\nexport { routeModule, workAsyncStorage, workUnitAsyncStorage, serverHooks, patchFetch, };\nexport async function handler(req, res, ctx) {\n if (ctx.requestMeta) {\n setRequestMeta(req, ctx.requestMeta);\n }\n if (routeModule.isDev) {\n addRequestMeta(req, 'devRequestTimingInternalsEnd', process.hrtime.bigint());\n }\n let srcPage = \"/api/interactive/chat/[featureId]/stream/route\";\n // turbopack doesn't normalize `/index` in the page name\n // so we need to to process dynamic routes properly\n // TODO: fix turbopack providing differing value from webpack\n if (process.env.TURBOPACK) {\n srcPage = srcPage.replace(/\\/index$/, '') || '/';\n } else if (srcPage === '/index') {\n // we always normalize /index specifically\n srcPage = '/';\n }\n const multiZoneDraftMode = process.env.__NEXT_MULTI_ZONE_DRAFT_MODE;\n const prepareResult = await routeModule.prepare(req, res, {\n srcPage,\n multiZoneDraftMode\n });\n if (!prepareResult) {\n res.statusCode = 400;\n res.end('Bad Request');\n ctx.waitUntil == null ? void 0 : ctx.waitUntil.call(ctx, Promise.resolve());\n return null;\n }\n const { buildId, params, nextConfig, parsedUrl, isDraftMode, prerenderManifest, routerServerContext, isOnDemandRevalidate, revalidateOnlyGenerated, resolvedPathname, clientReferenceManifest, serverActionsManifest } = prepareResult;\n const normalizedSrcPage = normalizeAppPath(srcPage);\n let isIsr = Boolean(prerenderManifest.dynamicRoutes[normalizedSrcPage] || prerenderManifest.routes[resolvedPathname]);\n const render404 = async ()=>{\n // TODO: should route-module itself handle rendering the 404\n if (routerServerContext == null ? void 0 : routerServerContext.render404) {\n await routerServerContext.render404(req, res, parsedUrl, false);\n } else {\n res.end('This page could not be found');\n }\n return null;\n };\n if (isIsr && !isDraftMode) {\n const isPrerendered = Boolean(prerenderManifest.routes[resolvedPathname]);\n const prerenderInfo = prerenderManifest.dynamicRoutes[normalizedSrcPage];\n if (prerenderInfo) {\n if (prerenderInfo.fallback === false && !isPrerendered) {\n if (nextConfig.adapterPath) {\n return await render404();\n }\n throw new NoFallbackError();\n }\n }\n }\n let cacheKey = null;\n if (isIsr && !routeModule.isDev && !isDraftMode) {\n cacheKey = resolvedPathname;\n // ensure /index and / is normalized to one key\n cacheKey = cacheKey === '/index' ? '/' : cacheKey;\n }\n const supportsDynamicResponse = // If we're in development, we always support dynamic HTML\n routeModule.isDev === true || // If this is not SSG or does not have static paths, then it supports\n // dynamic HTML.\n !isIsr;\n // This is a revalidation request if the request is for a static\n // page and it is not being resumed from a postponed render and\n // it is not a dynamic RSC request then it is a revalidation\n // request.\n const isStaticGeneration = isIsr && !supportsDynamicResponse;\n // Before rendering (which initializes component tree modules), we have to\n // set the reference manifests to our global store so Server Action's\n // encryption util can access to them at the top level of the page module.\n if (serverActionsManifest && clientReferenceManifest) {\n setManifestsSingleton({\n page: srcPage,\n clientReferenceManifest,\n serverActionsManifest\n });\n }\n const method = req.method || 'GET';\n const tracer = getTracer();\n const activeSpan = tracer.getActiveScopeSpan();\n const isWrappedByNextServer = Boolean(routerServerContext == null ? void 0 : routerServerContext.isWrappedByNextServer);\n const isMinimalMode = Boolean(getRequestMeta(req, 'minimalMode'));\n const incrementalCache = getRequestMeta(req, 'incrementalCache') || await routeModule.getIncrementalCache(req, nextConfig, prerenderManifest, isMinimalMode);\n incrementalCache == null ? void 0 : incrementalCache.resetRequestCache();\n globalThis.__incrementalCache = incrementalCache;\n const context = {\n params,\n previewProps: prerenderManifest.preview,\n renderOpts: {\n experimental: {\n authInterrupts: Boolean(nextConfig.experimental.authInterrupts)\n },\n cacheComponents: Boolean(nextConfig.cacheComponents),\n supportsDynamicResponse,\n incrementalCache,\n cacheLifeProfiles: nextConfig.cacheLife,\n waitUntil: ctx.waitUntil,\n onClose: (cb)=>{\n res.on('close', cb);\n },\n onAfterTaskError: undefined,\n onInstrumentationRequestError: (error, _request, errorContext, silenceLog)=>routeModule.onRequestError(req, error, errorContext, silenceLog, routerServerContext)\n },\n sharedContext: {\n buildId\n }\n };\n const nodeNextReq = new NodeNextRequest(req);\n const nodeNextRes = new NodeNextResponse(res);\n const nextReq = NextRequestAdapter.fromNodeNextRequest(nodeNextReq, signalFromNodeResponse(res));\n try {\n let parentSpan;\n const invokeRouteModule = async (span)=>{\n return routeModule.handle(nextReq, context).finally(()=>{\n if (!span) return;\n span.setAttributes({\n 'http.status_code': res.statusCode,\n 'next.rsc': false\n });\n const rootSpanAttributes = tracer.getRootSpanAttributes();\n // We were unable to get attributes, probably OTEL is not enabled\n if (!rootSpanAttributes) {\n return;\n }\n if (rootSpanAttributes.get('next.span_type') !== BaseServerSpan.handleRequest) {\n console.warn(`Unexpected root span type '${rootSpanAttributes.get('next.span_type')}'. Please report this Next.js issue https://github.com/vercel/next.js`);\n return;\n }\n const route = rootSpanAttributes.get('next.route');\n if (route) {\n const name = `${method} ${route}`;\n span.setAttributes({\n 'next.route': route,\n 'http.route': route,\n 'next.span_name': name\n });\n span.updateName(name);\n // Propagate http.route to the parent span if one exists (e.g.\n // a platform-created HTTP span in adapter deployments).\n if (parentSpan && parentSpan !== span) {\n parentSpan.setAttribute('http.route', route);\n parentSpan.updateName(name);\n }\n } else {\n span.updateName(`${method} ${srcPage}`);\n }\n });\n };\n const handleResponse = async (currentSpan)=>{\n var _cacheEntry_value;\n const responseGenerator = async ({ previousCacheEntry })=>{\n try {\n if (!isMinimalMode && isOnDemandRevalidate && revalidateOnlyGenerated && !previousCacheEntry) {\n res.statusCode = 404;\n // on-demand revalidate always sets this header\n res.setHeader('x-nextjs-cache', 'REVALIDATED');\n res.end('This page could not be found');\n return null;\n }\n const response = await invokeRouteModule(currentSpan);\n req.fetchMetrics = context.renderOpts.fetchMetrics;\n let pendingWaitUntil = context.renderOpts.pendingWaitUntil;\n // Attempt using provided waitUntil if available\n // if it's not we fallback to sendResponse's handling\n if (pendingWaitUntil) {\n if (ctx.waitUntil) {\n ctx.waitUntil(pendingWaitUntil);\n pendingWaitUntil = undefined;\n }\n }\n const cacheTags = context.renderOpts.collectedTags;\n // If the request is for a static response, we can cache it so long\n // as it's not edge.\n if (isIsr) {\n const blob = await response.blob();\n // Copy the headers from the response.\n const headers = toNodeOutgoingHttpHeaders(response.headers);\n if (cacheTags) {\n headers[NEXT_CACHE_TAGS_HEADER] = cacheTags;\n }\n if (!headers['content-type'] && blob.type) {\n headers['content-type'] = blob.type;\n }\n const revalidate = typeof context.renderOpts.collectedRevalidate === 'undefined' || context.renderOpts.collectedRevalidate >= INFINITE_CACHE ? false : context.renderOpts.collectedRevalidate;\n const expire = typeof context.renderOpts.collectedExpire === 'undefined' || context.renderOpts.collectedExpire >= INFINITE_CACHE ? undefined : context.renderOpts.collectedExpire;\n // Create the cache entry for the response.\n const cacheEntry = {\n value: {\n kind: CachedRouteKind.APP_ROUTE,\n status: response.status,\n body: Buffer.from(await blob.arrayBuffer()),\n headers\n },\n cacheControl: {\n revalidate,\n expire\n }\n };\n return cacheEntry;\n } else {\n // send response without caching if not ISR\n await sendResponse(nodeNextReq, nodeNextRes, response, context.renderOpts.pendingWaitUntil);\n return null;\n }\n } catch (err) {\n // if this is a background revalidate we need to report\n // the request error here as it won't be bubbled\n if (previousCacheEntry == null ? void 0 : previousCacheEntry.isStale) {\n const silenceLog = false;\n await routeModule.onRequestError(req, err, {\n routerKind: 'App Router',\n routePath: srcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate\n })\n }, silenceLog, routerServerContext);\n }\n throw err;\n }\n };\n const cacheEntry = await routeModule.handleResponse({\n req,\n nextConfig,\n cacheKey,\n routeKind: RouteKind.APP_ROUTE,\n isFallback: false,\n prerenderManifest,\n isRoutePPREnabled: false,\n isOnDemandRevalidate,\n revalidateOnlyGenerated,\n responseGenerator,\n waitUntil: ctx.waitUntil,\n isMinimalMode\n });\n // we don't create a cacheEntry for ISR\n if (!isIsr) {\n return null;\n }\n if ((cacheEntry == null ? void 0 : (_cacheEntry_value = cacheEntry.value) == null ? void 0 : _cacheEntry_value.kind) !== CachedRouteKind.APP_ROUTE) {\n var _cacheEntry_value1;\n throw Object.defineProperty(new Error(`Invariant: app-route received invalid cache entry ${cacheEntry == null ? void 0 : (_cacheEntry_value1 = cacheEntry.value) == null ? void 0 : _cacheEntry_value1.kind}`), \"__NEXT_ERROR_CODE\", {\n value: \"E701\",\n enumerable: false,\n configurable: true\n });\n }\n if (!isMinimalMode) {\n res.setHeader('x-nextjs-cache', isOnDemandRevalidate ? 'REVALIDATED' : cacheEntry.isMiss ? 'MISS' : cacheEntry.isStale ? 'STALE' : 'HIT');\n }\n // Draft mode should never be cached\n if (isDraftMode) {\n res.setHeader('Cache-Control', 'private, no-cache, no-store, max-age=0, must-revalidate');\n }\n const headers = fromNodeOutgoingHttpHeaders(cacheEntry.value.headers);\n if (!(isMinimalMode && isIsr)) {\n headers.delete(NEXT_CACHE_TAGS_HEADER);\n }\n // If cache control is already set on the response we don't\n // override it to allow users to customize it via next.config\n if (cacheEntry.cacheControl && !res.getHeader('Cache-Control') && !headers.get('Cache-Control')) {\n headers.set('Cache-Control', getCacheControlHeader(cacheEntry.cacheControl));\n }\n await sendResponse(nodeNextReq, nodeNextRes, // @ts-expect-error - Argument of type 'Buffer<ArrayBufferLike>' is not assignable to parameter of type 'BodyInit | null | undefined'.\n new Response(cacheEntry.value.body, {\n headers,\n status: cacheEntry.value.status || 200\n }));\n return null;\n };\n // TODO: activeSpan code path is for when wrapped by\n // next-server can be removed when this is no longer used\n if (isWrappedByNextServer && activeSpan) {\n await handleResponse(activeSpan);\n } else {\n parentSpan = tracer.getActiveScopeSpan();\n await tracer.withPropagatedContext(req.headers, ()=>tracer.trace(BaseServerSpan.handleRequest, {\n spanName: `${method} ${srcPage}`,\n kind: SpanKind.SERVER,\n attributes: {\n 'http.method': method,\n 'http.target': req.url\n }\n }, handleResponse), undefined, !isWrappedByNextServer);\n }\n } catch (err) {\n if (!(err instanceof NoFallbackError)) {\n const silenceLog = false;\n await routeModule.onRequestError(req, err, {\n routerKind: 'App Router',\n routePath: normalizedSrcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate\n })\n }, silenceLog, routerServerContext);\n }\n // rethrow so that we can handle serving error page\n // If this is during static generation, throw the error again.\n if (isIsr) throw err;\n // Otherwise, send a 500 response.\n await sendResponse(nodeNextReq, nodeNextRes, new Response(null, {\n status: 500\n }));\n return null;\n }\n}\n\n//# sourceMappingURL=app-route.js.map\n","/**\n * Feature-scoped SSE stream for real-time chat updates.\n *\n * Resolves the active session for the feature internally.\n * Emits:\n * - `delta` events with token chunks\n * - `log` events for tool use / thinking\n * - `done` events at end-of-turn\n *\n * `featureId` is a polymorphic scope key: a feature UUID, \"repo-<id>\", or \"global\".\n */\n\nimport type { NextRequest } from 'next/server';\nimport { resolve } from '@/lib/server-container';\nimport type { IInteractiveSessionService } from '@shipit-ai/core/application/ports/output/services/interactive-session-service.interface';\n\nexport const dynamic = 'force-dynamic';\n\ninterface RouteParams {\n params: Promise<{ featureId: string }>;\n}\n\nexport async function GET(request: NextRequest, { params }: RouteParams): Promise<Response> {\n const { featureId } = await params;\n\n try {\n // SSE streams use service directly for subscribe pattern\n const service = resolve<IInteractiveSessionService>('IInteractiveSessionService');\n const encoder = new TextEncoder();\n\n const stream = new ReadableStream<Uint8Array>({\n start(controller) {\n let closed = false;\n\n function enqueue(text: string) {\n if (closed) return;\n try {\n controller.enqueue(encoder.encode(text));\n } catch {\n // Stream may already be closed\n }\n }\n\n enqueue(': connected\\n\\n');\n\n const heartbeat = setInterval(() => {\n enqueue(': heartbeat\\n\\n');\n }, 15_000);\n\n const unsubscribe = service.subscribeByFeature(featureId, (chunk) => {\n if (chunk.done) {\n enqueue(`event: done\\ndata: ${JSON.stringify({ done: true, featureId })}\\n\\n`);\n } else if (chunk.activity) {\n enqueue(\n `event: activity\\ndata: ${JSON.stringify({ activity: chunk.activity, featureId })}\\n\\n`\n );\n // Also send log for the status indicator\n if (chunk.log) {\n enqueue(`event: log\\ndata: ${JSON.stringify({ log: chunk.log, featureId })}\\n\\n`);\n }\n } else if (chunk.log) {\n enqueue(`event: log\\ndata: ${JSON.stringify({ log: chunk.log, featureId })}\\n\\n`);\n } else if (chunk.delta) {\n enqueue(`event: delta\\ndata: ${JSON.stringify({ delta: chunk.delta, featureId })}\\n\\n`);\n }\n });\n\n function cleanup() {\n if (closed) return;\n closed = true;\n clearInterval(heartbeat);\n unsubscribe();\n try {\n controller.close();\n } catch {\n // Stream may already be closed\n }\n }\n\n request.signal.addEventListener('abort', cleanup, { once: true });\n },\n });\n\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n 'Cache-Control': 'no-cache',\n Connection: 'keep-alive',\n },\n });\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('[GET /api/interactive/chat/:featureId/stream]', error);\n return new Response(JSON.stringify({ error: String(error) }), {\n status: 500,\n headers: { 'Content-Type': 'application/json' },\n });\n }\n}\n"],"names":["CONTAINER_KEY","resolve","token","container","globalThis","Error","dynamic","stream","chunk","enqueue","done","GET","request","params","featureId","service","encoder","TextEncoder","ReadableStream","start","controller","JSON","closed","text","encode","Response","heartbeat","setInterval","console","unsubscribe","subscribeByFeature","stringify","activity","log","delta","cleanup","clearInterval","close","signal","addEventListener","once","headers","Connection","error","String","status"],"mappings":"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","ignoreList":[1]}
@@ -1,3 +0,0 @@
1
- module.exports=[93695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},18622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},32319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},56704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},24725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},70406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},50227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},60526,(e,t,r)=>{t.exports=e.x("node:os",()=>require("node:os"))},12714,(e,t,r)=>{t.exports=e.x("node:fs/promises",()=>require("node:fs/promises"))},24934,e=>{"use strict";var t=e.i(25716);e.s(["apiError",0,function(e,r,a){if(a){let t=a instanceof Error?a.message:String(a);console.error(`[API ${e}] ${r}: ${t}`)}return t.NextResponse.json({error:r},{status:e})}])},92039,e=>{"use strict";var t=e.i(29932),r=e.i(88797),a=e.i(78439),n=e.i(21387),s=e.i(351),o=e.i(1286),i=e.i(31060),l=e.i(67760),d=e.i(13435),u=e.i(60316),p=e.i(37130),c=e.i(31516),h=e.i(63144),x=e.i(3719),f=e.i(66941),R=e.i(93695);e.i(76574);var m=e.i(45014),v=e.i(25716),w=e.i(12714),y=e.i(60526),g=e.i(50227),E=e.i(24934);async function C(e){let t,r=new URL(e.url),a=r.searchParams.get("path")??(0,y.homedir)(),n="true"===r.searchParams.get("showHidden");if(!g.default.isAbsolute(a))return v.NextResponse.json({error:"Path must be absolute"},{status:400});let s=g.default.resolve(a);try{t=await (0,w.realpath)(s)}catch{return v.NextResponse.json({error:"Directory not found"},{status:404})}if(![await (0,w.realpath)(process.cwd()).catch(()=>process.cwd()),await (0,w.realpath)((0,y.homedir)()).catch(()=>(0,y.homedir)())].some(e=>t===e||t.startsWith(e+g.default.sep)))return v.NextResponse.json({error:"Access denied"},{status:403});try{if(!(await (0,w.stat)(s)).isDirectory())return v.NextResponse.json({error:"Path is not a directory"},{status:400})}catch(e){var o;if((o=e)instanceof Error&&"code"in o&&"ENOENT"===e.code)return v.NextResponse.json({error:"Directory not found"},{status:404});return(0,E.apiError)(500,"Failed to access directory",e)}try{let e=await (0,w.readdir)(s,{withFileTypes:!0}),t=[],r=e.map(async e=>{if(!n&&e.name.startsWith("."))return null;let t=g.default.join(s,e.name);try{if(e.isDirectory()){let r=await (0,w.stat)(t);return{name:e.name,path:t,isDirectory:!0,updatedAt:r.mtime.toISOString()}}if(e.isSymbolicLink()){let r=await (0,w.stat)(t);if(r.isDirectory())return{name:e.name,path:t,isDirectory:!0,updatedAt:r.mtime.toISOString()}}}catch{}return null});for(let e of(await Promise.all(r)))null!==e&&t.push(e);return v.NextResponse.json({entries:t,currentPath:s})}catch(e){return(0,E.apiError)(500,"Failed to read directory",e)}}e.s(["GET",0,C],47661);var A=e.i(47661);let b=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/directory/list/route",pathname:"/api/directory/list",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/presentation/web/app/api/directory/list/route.ts",nextConfigOutput:"",userland:A,...{}}),{workAsyncStorage:N,workUnitAsyncStorage:P,serverHooks:S}=b;async function T(e,t,a){a.requestMeta&&(0,n.setRequestMeta)(e,a.requestMeta),b.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let v="/api/directory/list/route";v=v.replace(/\/index$/,"")||"/";let w=await b.prepare(e,t,{srcPage:v,multiZoneDraftMode:!1});if(!w)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:y,params:g,nextConfig:E,parsedUrl:C,isDraftMode:A,prerenderManifest:N,routerServerContext:P,isOnDemandRevalidate:S,revalidateOnlyGenerated:T,resolvedPathname:q,clientReferenceManifest:j,serverActionsManifest:O}=w,k=(0,i.normalizeAppPath)(v),_=!!(N.dynamicRoutes[k]||N.routes[q]),D=async()=>((null==P?void 0:P.render404)?await P.render404(e,t,C,!1):t.end("This page could not be found"),null);if(_&&!A){let e=!!N.routes[q],t=N.dynamicRoutes[k];if(t&&!1===t.fallback&&!e){if(E.adapterPath)return await D();throw new R.NoFallbackError}}let I=null;!_||b.isDev||A||(I="/index"===(I=q)?"/":I);let H=!0===b.isDev||!_,U=_&&!H;O&&j&&(0,o.setManifestsSingleton)({page:v,clientReferenceManifest:j,serverActionsManifest:O});let M=e.method||"GET",$=(0,s.getTracer)(),F=$.getActiveScopeSpan(),K=!!(null==P?void 0:P.isWrappedByNextServer),L=!!(0,n.getRequestMeta)(e,"minimalMode"),B=(0,n.getRequestMeta)(e,"incrementalCache")||await b.getIncrementalCache(e,E,N,L);null==B||B.resetRequestCache(),globalThis.__incrementalCache=B;let W={params:g,previewProps:N.preview,renderOpts:{experimental:{authInterrupts:!!E.experimental.authInterrupts},cacheComponents:!!E.cacheComponents,supportsDynamicResponse:H,incrementalCache:B,cacheLifeProfiles:E.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,n)=>b.onRequestError(e,t,a,n,P)},sharedContext:{buildId:y}},G=new l.NodeNextRequest(e),V=new l.NodeNextResponse(t),X=d.NextRequestAdapter.fromNodeNextRequest(G,(0,d.signalFromNodeResponse)(t));try{let n,o=async e=>b.handle(X,W).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=$.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==u.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route");if(a){let t=`${M} ${a}`;e.setAttributes({"next.route":a,"http.route":a,"next.span_name":t}),e.updateName(t),n&&n!==e&&(n.setAttribute("http.route",a),n.updateName(t))}else e.updateName(`${M} ${v}`)}),i=async n=>{var s,i;let l=async({previousCacheEntry:r})=>{try{if(!L&&S&&T&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let s=await o(n);e.fetchMetrics=W.renderOpts.fetchMetrics;let i=W.renderOpts.pendingWaitUntil;i&&a.waitUntil&&(a.waitUntil(i),i=void 0);let l=W.renderOpts.collectedTags;if(!_)return await (0,c.sendResponse)(G,V,s,W.renderOpts.pendingWaitUntil),null;{let e=await s.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(s.headers);l&&(t[f.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==W.renderOpts.collectedRevalidate&&!(W.renderOpts.collectedRevalidate>=f.INFINITE_CACHE)&&W.renderOpts.collectedRevalidate,a=void 0===W.renderOpts.collectedExpire||W.renderOpts.collectedExpire>=f.INFINITE_CACHE?void 0:W.renderOpts.collectedExpire;return{value:{kind:m.CachedRouteKind.APP_ROUTE,status:s.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await b.onRequestError(e,t,{routerKind:"App Router",routePath:v,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:S})},!1,P),t}},d=await b.handleResponse({req:e,nextConfig:E,cacheKey:I,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:N,isRoutePPREnabled:!1,isOnDemandRevalidate:S,revalidateOnlyGenerated:T,responseGenerator:l,waitUntil:a.waitUntil,isMinimalMode:L});if(!_)return null;if((null==d||null==(s=d.value)?void 0:s.kind)!==m.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==d||null==(i=d.value)?void 0:i.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});L||t.setHeader("x-nextjs-cache",S?"REVALIDATED":d.isMiss?"MISS":d.isStale?"STALE":"HIT"),A&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let u=(0,h.fromNodeOutgoingHttpHeaders)(d.value.headers);return L&&_||u.delete(f.NEXT_CACHE_TAGS_HEADER),!d.cacheControl||t.getHeader("Cache-Control")||u.get("Cache-Control")||u.set("Cache-Control",(0,x.getCacheControlHeader)(d.cacheControl)),await (0,c.sendResponse)(G,V,new Response(d.value.body,{headers:u,status:d.value.status||200})),null};K&&F?await i(F):(n=$.getActiveScopeSpan(),await $.withPropagatedContext(e.headers,()=>$.trace(u.BaseServerSpan.handleRequest,{spanName:`${M} ${v}`,kind:s.SpanKind.SERVER,attributes:{"http.method":M,"http.target":e.url}},i),void 0,!K))}catch(t){if(t instanceof R.NoFallbackError||await b.onRequestError(e,t,{routerKind:"App Router",routePath:k,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:S})},!1,P),_)throw t;return await (0,c.sendResponse)(G,V,new Response(null,{status:500})),null}}e.s(["handler",0,T,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:N,workUnitAsyncStorage:P})},"routeModule",0,b,"serverHooks",0,S,"workAsyncStorage",0,N,"workUnitAsyncStorage",0,P],92039)}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__0rru~m.._.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../src/presentation/web/lib/api-helpers.ts","../../../../../../node_modules/.pnpm/next%4016.2.2_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.59.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/dist/esm/build/templates/app-route.js","../../../../../../src/presentation/web/app/api/directory/list/route.ts"],"sourcesContent":["import { NextResponse } from 'next/server';\n\n/**\n * Create a JSON error response. For 500-level errors, always uses a generic\n * message to prevent internal detail leakage. The actual error is logged\n * server-side for debugging.\n */\nexport function apiError(\n status: number,\n publicMessage: string,\n internalError?: unknown\n): NextResponse {\n if (internalError) {\n const detail = internalError instanceof Error ? internalError.message : String(internalError);\n // eslint-disable-next-line no-console\n console.error(`[API ${status}] ${publicMessage}: ${detail}`);\n }\n return NextResponse.json({ error: publicMessage }, { status });\n}\n\n/**\n * Validate a required query parameter. Returns the trimmed value or an\n * error response.\n */\nexport function validateParam(value: string | null, paramName: string): string | NextResponse {\n if (!value?.trim()) {\n return apiError(400, `${paramName} is required`);\n }\n return value.trim();\n}\n","import { AppRouteRouteModule } from \"next/dist/esm/server/route-modules/app-route/module.compiled\";\nimport { RouteKind } from \"next/dist/esm/server/route-kind\";\nimport { patchFetch as _patchFetch } from \"next/dist/esm/server/lib/patch-fetch\";\nimport { addRequestMeta, getRequestMeta, setRequestMeta } from \"next/dist/esm/server/request-meta\";\nimport { getTracer, SpanKind } from \"next/dist/esm/server/lib/trace/tracer\";\nimport { setManifestsSingleton } from \"next/dist/esm/server/app-render/manifests-singleton\";\nimport { normalizeAppPath } from \"next/dist/esm/shared/lib/router/utils/app-paths\";\nimport { NodeNextRequest, NodeNextResponse } from \"next/dist/esm/server/base-http/node\";\nimport { NextRequestAdapter, signalFromNodeResponse } from \"next/dist/esm/server/web/spec-extension/adapters/next-request\";\nimport { BaseServerSpan } from \"next/dist/esm/server/lib/trace/constants\";\nimport { getRevalidateReason } from \"next/dist/esm/server/instrumentation/utils\";\nimport { sendResponse } from \"next/dist/esm/server/send-response\";\nimport { fromNodeOutgoingHttpHeaders, toNodeOutgoingHttpHeaders } from \"next/dist/esm/server/web/utils\";\nimport { getCacheControlHeader } from \"next/dist/esm/server/lib/cache-control\";\nimport { INFINITE_CACHE, NEXT_CACHE_TAGS_HEADER } from \"next/dist/esm/lib/constants\";\nimport { NoFallbackError } from \"next/dist/esm/shared/lib/no-fallback-error.external\";\nimport { CachedRouteKind } from \"next/dist/esm/server/response-cache\";\nimport * as userland from \"INNER_APP_ROUTE\";\n// We inject the nextConfigOutput here so that we can use them in the route\n// module.\nconst nextConfigOutput = \"\"\nconst routeModule = new AppRouteRouteModule({\n definition: {\n kind: RouteKind.APP_ROUTE,\n page: \"/api/directory/list/route\",\n pathname: \"/api/directory/list\",\n filename: \"route\",\n bundlePath: \"\"\n },\n distDir: process.env.__NEXT_RELATIVE_DIST_DIR || '',\n relativeProjectDir: process.env.__NEXT_RELATIVE_PROJECT_DIR || '',\n resolvedPagePath: \"[project]/src/presentation/web/app/api/directory/list/route.ts\",\n nextConfigOutput,\n // The static import is used for initialization (methods, dynamic, etc.).\n userland: userland,\n // In Turbopack dev mode, also provide a getter that calls require() on every\n // request. This re-reads from devModuleCache so HMR updates are picked up,\n // and the async wrapper unwraps async-module Promises (ESM-only\n // serverExternalPackages) automatically.\n ...process.env.TURBOPACK && process.env.__NEXT_DEV_SERVER ? {\n getUserland: ()=>import(\"INNER_APP_ROUTE\")\n } : {}\n});\n// Pull out the exports that we need to expose from the module. This should\n// be eliminated when we've moved the other routes to the new format. These\n// are used to hook into the route.\nconst { workAsyncStorage, workUnitAsyncStorage, serverHooks } = routeModule;\nfunction patchFetch() {\n return _patchFetch({\n workAsyncStorage,\n workUnitAsyncStorage\n });\n}\nexport { routeModule, workAsyncStorage, workUnitAsyncStorage, serverHooks, patchFetch, };\nexport async function handler(req, res, ctx) {\n if (ctx.requestMeta) {\n setRequestMeta(req, ctx.requestMeta);\n }\n if (routeModule.isDev) {\n addRequestMeta(req, 'devRequestTimingInternalsEnd', process.hrtime.bigint());\n }\n let srcPage = \"/api/directory/list/route\";\n // turbopack doesn't normalize `/index` in the page name\n // so we need to to process dynamic routes properly\n // TODO: fix turbopack providing differing value from webpack\n if (process.env.TURBOPACK) {\n srcPage = srcPage.replace(/\\/index$/, '') || '/';\n } else if (srcPage === '/index') {\n // we always normalize /index specifically\n srcPage = '/';\n }\n const multiZoneDraftMode = process.env.__NEXT_MULTI_ZONE_DRAFT_MODE;\n const prepareResult = await routeModule.prepare(req, res, {\n srcPage,\n multiZoneDraftMode\n });\n if (!prepareResult) {\n res.statusCode = 400;\n res.end('Bad Request');\n ctx.waitUntil == null ? void 0 : ctx.waitUntil.call(ctx, Promise.resolve());\n return null;\n }\n const { buildId, params, nextConfig, parsedUrl, isDraftMode, prerenderManifest, routerServerContext, isOnDemandRevalidate, revalidateOnlyGenerated, resolvedPathname, clientReferenceManifest, serverActionsManifest } = prepareResult;\n const normalizedSrcPage = normalizeAppPath(srcPage);\n let isIsr = Boolean(prerenderManifest.dynamicRoutes[normalizedSrcPage] || prerenderManifest.routes[resolvedPathname]);\n const render404 = async ()=>{\n // TODO: should route-module itself handle rendering the 404\n if (routerServerContext == null ? void 0 : routerServerContext.render404) {\n await routerServerContext.render404(req, res, parsedUrl, false);\n } else {\n res.end('This page could not be found');\n }\n return null;\n };\n if (isIsr && !isDraftMode) {\n const isPrerendered = Boolean(prerenderManifest.routes[resolvedPathname]);\n const prerenderInfo = prerenderManifest.dynamicRoutes[normalizedSrcPage];\n if (prerenderInfo) {\n if (prerenderInfo.fallback === false && !isPrerendered) {\n if (nextConfig.adapterPath) {\n return await render404();\n }\n throw new NoFallbackError();\n }\n }\n }\n let cacheKey = null;\n if (isIsr && !routeModule.isDev && !isDraftMode) {\n cacheKey = resolvedPathname;\n // ensure /index and / is normalized to one key\n cacheKey = cacheKey === '/index' ? '/' : cacheKey;\n }\n const supportsDynamicResponse = // If we're in development, we always support dynamic HTML\n routeModule.isDev === true || // If this is not SSG or does not have static paths, then it supports\n // dynamic HTML.\n !isIsr;\n // This is a revalidation request if the request is for a static\n // page and it is not being resumed from a postponed render and\n // it is not a dynamic RSC request then it is a revalidation\n // request.\n const isStaticGeneration = isIsr && !supportsDynamicResponse;\n // Before rendering (which initializes component tree modules), we have to\n // set the reference manifests to our global store so Server Action's\n // encryption util can access to them at the top level of the page module.\n if (serverActionsManifest && clientReferenceManifest) {\n setManifestsSingleton({\n page: srcPage,\n clientReferenceManifest,\n serverActionsManifest\n });\n }\n const method = req.method || 'GET';\n const tracer = getTracer();\n const activeSpan = tracer.getActiveScopeSpan();\n const isWrappedByNextServer = Boolean(routerServerContext == null ? void 0 : routerServerContext.isWrappedByNextServer);\n const isMinimalMode = Boolean(getRequestMeta(req, 'minimalMode'));\n const incrementalCache = getRequestMeta(req, 'incrementalCache') || await routeModule.getIncrementalCache(req, nextConfig, prerenderManifest, isMinimalMode);\n incrementalCache == null ? void 0 : incrementalCache.resetRequestCache();\n globalThis.__incrementalCache = incrementalCache;\n const context = {\n params,\n previewProps: prerenderManifest.preview,\n renderOpts: {\n experimental: {\n authInterrupts: Boolean(nextConfig.experimental.authInterrupts)\n },\n cacheComponents: Boolean(nextConfig.cacheComponents),\n supportsDynamicResponse,\n incrementalCache,\n cacheLifeProfiles: nextConfig.cacheLife,\n waitUntil: ctx.waitUntil,\n onClose: (cb)=>{\n res.on('close', cb);\n },\n onAfterTaskError: undefined,\n onInstrumentationRequestError: (error, _request, errorContext, silenceLog)=>routeModule.onRequestError(req, error, errorContext, silenceLog, routerServerContext)\n },\n sharedContext: {\n buildId\n }\n };\n const nodeNextReq = new NodeNextRequest(req);\n const nodeNextRes = new NodeNextResponse(res);\n const nextReq = NextRequestAdapter.fromNodeNextRequest(nodeNextReq, signalFromNodeResponse(res));\n try {\n let parentSpan;\n const invokeRouteModule = async (span)=>{\n return routeModule.handle(nextReq, context).finally(()=>{\n if (!span) return;\n span.setAttributes({\n 'http.status_code': res.statusCode,\n 'next.rsc': false\n });\n const rootSpanAttributes = tracer.getRootSpanAttributes();\n // We were unable to get attributes, probably OTEL is not enabled\n if (!rootSpanAttributes) {\n return;\n }\n if (rootSpanAttributes.get('next.span_type') !== BaseServerSpan.handleRequest) {\n console.warn(`Unexpected root span type '${rootSpanAttributes.get('next.span_type')}'. Please report this Next.js issue https://github.com/vercel/next.js`);\n return;\n }\n const route = rootSpanAttributes.get('next.route');\n if (route) {\n const name = `${method} ${route}`;\n span.setAttributes({\n 'next.route': route,\n 'http.route': route,\n 'next.span_name': name\n });\n span.updateName(name);\n // Propagate http.route to the parent span if one exists (e.g.\n // a platform-created HTTP span in adapter deployments).\n if (parentSpan && parentSpan !== span) {\n parentSpan.setAttribute('http.route', route);\n parentSpan.updateName(name);\n }\n } else {\n span.updateName(`${method} ${srcPage}`);\n }\n });\n };\n const handleResponse = async (currentSpan)=>{\n var _cacheEntry_value;\n const responseGenerator = async ({ previousCacheEntry })=>{\n try {\n if (!isMinimalMode && isOnDemandRevalidate && revalidateOnlyGenerated && !previousCacheEntry) {\n res.statusCode = 404;\n // on-demand revalidate always sets this header\n res.setHeader('x-nextjs-cache', 'REVALIDATED');\n res.end('This page could not be found');\n return null;\n }\n const response = await invokeRouteModule(currentSpan);\n req.fetchMetrics = context.renderOpts.fetchMetrics;\n let pendingWaitUntil = context.renderOpts.pendingWaitUntil;\n // Attempt using provided waitUntil if available\n // if it's not we fallback to sendResponse's handling\n if (pendingWaitUntil) {\n if (ctx.waitUntil) {\n ctx.waitUntil(pendingWaitUntil);\n pendingWaitUntil = undefined;\n }\n }\n const cacheTags = context.renderOpts.collectedTags;\n // If the request is for a static response, we can cache it so long\n // as it's not edge.\n if (isIsr) {\n const blob = await response.blob();\n // Copy the headers from the response.\n const headers = toNodeOutgoingHttpHeaders(response.headers);\n if (cacheTags) {\n headers[NEXT_CACHE_TAGS_HEADER] = cacheTags;\n }\n if (!headers['content-type'] && blob.type) {\n headers['content-type'] = blob.type;\n }\n const revalidate = typeof context.renderOpts.collectedRevalidate === 'undefined' || context.renderOpts.collectedRevalidate >= INFINITE_CACHE ? false : context.renderOpts.collectedRevalidate;\n const expire = typeof context.renderOpts.collectedExpire === 'undefined' || context.renderOpts.collectedExpire >= INFINITE_CACHE ? undefined : context.renderOpts.collectedExpire;\n // Create the cache entry for the response.\n const cacheEntry = {\n value: {\n kind: CachedRouteKind.APP_ROUTE,\n status: response.status,\n body: Buffer.from(await blob.arrayBuffer()),\n headers\n },\n cacheControl: {\n revalidate,\n expire\n }\n };\n return cacheEntry;\n } else {\n // send response without caching if not ISR\n await sendResponse(nodeNextReq, nodeNextRes, response, context.renderOpts.pendingWaitUntil);\n return null;\n }\n } catch (err) {\n // if this is a background revalidate we need to report\n // the request error here as it won't be bubbled\n if (previousCacheEntry == null ? void 0 : previousCacheEntry.isStale) {\n const silenceLog = false;\n await routeModule.onRequestError(req, err, {\n routerKind: 'App Router',\n routePath: srcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate\n })\n }, silenceLog, routerServerContext);\n }\n throw err;\n }\n };\n const cacheEntry = await routeModule.handleResponse({\n req,\n nextConfig,\n cacheKey,\n routeKind: RouteKind.APP_ROUTE,\n isFallback: false,\n prerenderManifest,\n isRoutePPREnabled: false,\n isOnDemandRevalidate,\n revalidateOnlyGenerated,\n responseGenerator,\n waitUntil: ctx.waitUntil,\n isMinimalMode\n });\n // we don't create a cacheEntry for ISR\n if (!isIsr) {\n return null;\n }\n if ((cacheEntry == null ? void 0 : (_cacheEntry_value = cacheEntry.value) == null ? void 0 : _cacheEntry_value.kind) !== CachedRouteKind.APP_ROUTE) {\n var _cacheEntry_value1;\n throw Object.defineProperty(new Error(`Invariant: app-route received invalid cache entry ${cacheEntry == null ? void 0 : (_cacheEntry_value1 = cacheEntry.value) == null ? void 0 : _cacheEntry_value1.kind}`), \"__NEXT_ERROR_CODE\", {\n value: \"E701\",\n enumerable: false,\n configurable: true\n });\n }\n if (!isMinimalMode) {\n res.setHeader('x-nextjs-cache', isOnDemandRevalidate ? 'REVALIDATED' : cacheEntry.isMiss ? 'MISS' : cacheEntry.isStale ? 'STALE' : 'HIT');\n }\n // Draft mode should never be cached\n if (isDraftMode) {\n res.setHeader('Cache-Control', 'private, no-cache, no-store, max-age=0, must-revalidate');\n }\n const headers = fromNodeOutgoingHttpHeaders(cacheEntry.value.headers);\n if (!(isMinimalMode && isIsr)) {\n headers.delete(NEXT_CACHE_TAGS_HEADER);\n }\n // If cache control is already set on the response we don't\n // override it to allow users to customize it via next.config\n if (cacheEntry.cacheControl && !res.getHeader('Cache-Control') && !headers.get('Cache-Control')) {\n headers.set('Cache-Control', getCacheControlHeader(cacheEntry.cacheControl));\n }\n await sendResponse(nodeNextReq, nodeNextRes, // @ts-expect-error - Argument of type 'Buffer<ArrayBufferLike>' is not assignable to parameter of type 'BodyInit | null | undefined'.\n new Response(cacheEntry.value.body, {\n headers,\n status: cacheEntry.value.status || 200\n }));\n return null;\n };\n // TODO: activeSpan code path is for when wrapped by\n // next-server can be removed when this is no longer used\n if (isWrappedByNextServer && activeSpan) {\n await handleResponse(activeSpan);\n } else {\n parentSpan = tracer.getActiveScopeSpan();\n await tracer.withPropagatedContext(req.headers, ()=>tracer.trace(BaseServerSpan.handleRequest, {\n spanName: `${method} ${srcPage}`,\n kind: SpanKind.SERVER,\n attributes: {\n 'http.method': method,\n 'http.target': req.url\n }\n }, handleResponse), undefined, !isWrappedByNextServer);\n }\n } catch (err) {\n if (!(err instanceof NoFallbackError)) {\n const silenceLog = false;\n await routeModule.onRequestError(req, err, {\n routerKind: 'App Router',\n routePath: normalizedSrcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate\n })\n }, silenceLog, routerServerContext);\n }\n // rethrow so that we can handle serving error page\n // If this is during static generation, throw the error again.\n if (isIsr) throw err;\n // Otherwise, send a 500 response.\n await sendResponse(nodeNextReq, nodeNextRes, new Response(null, {\n status: 500\n }));\n return null;\n }\n}\n\n//# sourceMappingURL=app-route.js.map\n","import { NextResponse } from 'next/server';\nimport { readdir, realpath, stat } from 'node:fs/promises';\nimport { homedir } from 'node:os';\nimport path from 'node:path';\nimport { apiError } from '@/lib/api-helpers';\n\ninterface DirectoryEntry {\n name: string;\n path: string;\n isDirectory: true;\n updatedAt: string;\n}\n\nexport async function GET(request: Request): Promise<NextResponse> {\n const url = new URL(request.url);\n const rawPath = url.searchParams.get('path') ?? homedir();\n const showHidden = url.searchParams.get('showHidden') === 'true';\n\n if (!path.isAbsolute(rawPath)) {\n return NextResponse.json({ error: 'Path must be absolute' }, { status: 400 });\n }\n\n const resolvedPath = path.resolve(rawPath);\n\n // Path containment: resolve symlinks then verify within allowed roots\n let physicalPath: string;\n try {\n physicalPath = await realpath(resolvedPath);\n } catch {\n return NextResponse.json({ error: 'Directory not found' }, { status: 404 });\n }\n\n const allowedRoots = [\n await realpath(process.cwd()).catch(() => process.cwd()),\n await realpath(homedir()).catch(() => homedir()),\n ];\n\n const isAllowed = allowedRoots.some(\n (root) => physicalPath === root || physicalPath.startsWith(root + path.sep)\n );\n\n if (!isAllowed) {\n return NextResponse.json({ error: 'Access denied' }, { status: 403 });\n }\n\n try {\n const dirStat = await stat(resolvedPath);\n if (!dirStat.isDirectory()) {\n return NextResponse.json({ error: 'Path is not a directory' }, { status: 400 });\n }\n } catch (error: unknown) {\n if (isErrnoException(error) && error.code === 'ENOENT') {\n return NextResponse.json({ error: 'Directory not found' }, { status: 404 });\n }\n return apiError(500, 'Failed to access directory', error);\n }\n\n try {\n const dirents = await readdir(resolvedPath, { withFileTypes: true });\n\n const entries: DirectoryEntry[] = [];\n\n const entryPromises = dirents.map(async (dirent) => {\n if (!showHidden && dirent.name.startsWith('.')) {\n return null;\n }\n\n const entryPath = path.join(resolvedPath, dirent.name);\n\n try {\n if (dirent.isDirectory()) {\n const entryStat = await stat(entryPath);\n return {\n name: dirent.name,\n path: entryPath,\n isDirectory: true as const,\n updatedAt: entryStat.mtime.toISOString(),\n };\n }\n\n if (dirent.isSymbolicLink()) {\n const entryStat = await stat(entryPath);\n if (entryStat.isDirectory()) {\n return {\n name: dirent.name,\n path: entryPath,\n isDirectory: true as const,\n updatedAt: entryStat.mtime.toISOString(),\n };\n }\n }\n } catch {\n // Skip inaccessible entries (permission denied, broken symlinks)\n }\n\n return null;\n });\n\n const results = await Promise.all(entryPromises);\n for (const result of results) {\n if (result !== null) {\n entries.push(result);\n }\n }\n\n return NextResponse.json({ entries, currentPath: resolvedPath });\n } catch (error: unknown) {\n return apiError(500, 'Failed to read directory', error);\n }\n}\n\nfunction isErrnoException(error: unknown): error is NodeJS.ErrnoException {\n return error instanceof Error && 'code' in error;\n}\n"],"names":["apiError","status","publicMessage","internalError","detail","Error","message","String","console","error","json","validateParam","value","paramName","trim","resolvedPath","GET","request","startsWith","url","URL","rawPath","searchParams","get","showHidden","isAbsolute","resolve","physicalPath","allowedRoots","process","cwd","catch","isAllowed","some","root","sep","dirStat","isDirectory","all","isErrnoException","code","result","dirents","withFileTypes","entries","entryPromises","map","dirent","name","entryPath","join","entryStat","path","updatedAt","mtime","toISOString","isSymbolicLink","results","Promise","push","currentPath"],"mappings":"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","ignoreList":[1]}
@@ -1,3 +0,0 @@
1
- module.exports=[31747,a=>{"use strict";var b=a.i(81719),c=a.i(6880);a.i(1442);var d=a.i(79372),e=a.i(29918);a.s(["buildFeatureNodeData",0,function(a,f,g){let h=(f?.status===b.AgentRunStatus.running||f?.status===b.AgentRunStatus.pending)&&f?.pid?(0,d.isProcessAlive)(f.pid):void 0;return{name:a.name,description:a.description??a.slug,featureId:a.id,lifecycle:(0,c.deriveLifecycle)(a,f),repositoryPath:a.repositoryPath,branch:a.branch,worktreePath:a.worktreePath??(0,e.computeWorktreePath)(a.repositoryPath,a.branch),specPath:a.specPath,state:(0,c.deriveNodeState)(a,f,void 0!==h?{isPidAlive:h}:void 0),progress:(0,c.deriveProgress)(a),summary:a.description,userQuery:a.userQuery,createdAt:a.createdAt instanceof Date?a.createdAt.getTime():a.createdAt,...a.fast&&{fastMode:!0},approvalGates:a.approvalGates,push:a.push,openPr:a.openPr,forkAndPr:a.forkAndPr,commitSpecs:a.commitSpecs,enableEvidence:a.enableEvidence??g?.enableEvidence??!1,commitEvidence:a.commitEvidence??g?.commitEvidence??!1,ciWatchEnabled:a.ciWatchEnabled??g?.ciWatchEnabled??!0,...g?.hideCiStatus!=null&&{hideCiStatus:g.hideCiStatus},...g?.repositoryName&&{repositoryName:g.repositoryName},...g?.baseBranch&&{baseBranch:g.baseBranch},...g?.oneLiner&&{oneLiner:g.oneLiner},...g?.remoteUrl&&{remoteUrl:g.remoteUrl},...f?.agentType&&{agentType:f.agentType},...f?.modelId&&{modelId:f.modelId},...f?.error&&{errorMessage:f.error},...null!=a.agentRunId&&{hasAgentRun:!0},...null!=a.plan&&{hasPlan:!0},...a.pr&&{pr:{url:a.pr.url,number:a.pr.number,status:a.pr.status,ciStatus:a.pr.ciStatus,commitHash:a.pr.commitHash,mergeable:a.pr.mergeable}}}}])},61402,76052,13008,74607,6542,73624,12104,70319,54433,59020,a=>{"use strict";var b=a.i(2211),c=a.i(96380),d=a.i(50961);async function e(a,b){if(!a.trim())return{approved:!1,error:"Feature id is required"};try{let d=(0,c.resolve)("IFeatureRepository"),e=await d.findById(a);if(!e)return{approved:!1,error:"Feature not found"};if(!e.agentRunId)return{approved:!1,error:"Feature has no agent run"};let f=(0,c.resolve)("ApproveAgentRunUseCase"),g=await f.execute(e.agentRunId,b);if(!g.approved)return{approved:!1,error:g.reason};return{approved:!0}}catch(a){return{approved:!1,error:a instanceof Error?a.message:"Failed to approve feature"}}}async function f(a,b,d){if(!a.trim())return{rejected:!1,error:"Feature id is required"};if(!b.trim())return{rejected:!1,error:"Feedback is required"};try{let e=(0,c.resolve)("IFeatureRepository"),f=await e.findById(a);if(!f)return{rejected:!1,error:"Feature not found"};if(!f.agentRunId)return{rejected:!1,error:"Feature has no agent run"};let g=(0,c.resolve)("RejectAgentRunUseCase"),h=await g.execute(f.agentRunId,b,d);if(!h.rejected)return{rejected:!1,error:h.reason};return{rejected:!0,iteration:h.iteration,iterationWarning:h.iterationWarning}}catch(a){return{rejected:!1,error:a instanceof Error?a.message:"Failed to reject feature"}}}async function g(a){if(!a.trim())return{error:"Feature id is required"};try{let b=(0,c.resolve)("GetFeatureArtifactUseCase"),d=await b.execute(a),e={question:"Goal",context:d.oneLiner,questions:d.openQuestions.map((a,b)=>({id:`q-${b}`,question:a.question,type:"select",options:(a.options??[]).map((a,c)=>({id:`q-${b}-opt-${c}`,label:a.option,rationale:a.description,...a.selected?{recommended:!0}:{}}))})),finalAction:{id:"approve-reqs",label:"Approve Requirements",description:"Finalize and lock the requirements for implementation"}},f={question:"Goal",context:d.oneLiner,questions:d.openQuestions.filter(a=>a.resolved).map(a=>{let b=a.options?.find(a=>a.selected);return{question:a.question,selectedOption:b?.option??a.answer??"N/A",rationale:a.selectionRationale??b?.description??"",wasRecommended:!1}})};return{questionnaire:e,productDecisions:f,artifact:d}}catch(a){return{error:a instanceof Error?a.message:"Failed to load feature artifact"}}}async function h(a){if(!a.trim())return{error:"Feature id is required"};try{var b;let d=(0,c.resolve)("GetResearchArtifactUseCase");return{techDecisions:{name:(b=await d.execute(a)).name,summary:b.summary,decisions:b.decisions,technologies:b.technologies}}}catch(a){return{error:a instanceof Error?a.message:"Failed to load research artifact"}}}(0,d.ensureServerEntryExports)([e]),(0,b.registerServerReference)(e,"60d63e7dfefdb2030633a5ce0b8a9ab911f2f5f1bf",null),a.s(["approveFeature",0,e],61402),(0,d.ensureServerEntryExports)([f]),(0,b.registerServerReference)(f,"7073a2a89f5bd1066886065e9d9135e30c71eb7d8a",null),a.s(["rejectFeature",0,f],76052),(0,d.ensureServerEntryExports)([g]),(0,b.registerServerReference)(g,"40e6ab4f184a5112a8559554f64a38ed3e7a547d18",null),a.s(["getFeatureArtifact",0,g],13008),(0,d.ensureServerEntryExports)([h]),(0,b.registerServerReference)(h,"4079dd08e2b146ca610665c67cddfc85910e11ff96",null),a.s(["getResearchArtifact",0,h],74607);var i=a.i(66680),j=a.i(2157),k=a.i(50227);a.i(1442);var l=a.i(29918),m=a.i(83771);async function n(a){if(!a.trim())return{error:"Feature id is required"};try{var b,d;let e,f,g=(0,c.resolve)("IFeatureRepository"),h=await g.findById(a);if(!h)return{error:"Feature not found"};let n=(0,c.resolve)("LoadSettingsUseCase"),{workflow:o}=await n.execute(),p=h.pr?{url:h.pr.url,number:h.pr.number,status:h.pr.status,commitHash:h.pr.commitHash,ciStatus:h.pr.ciStatus,mergeable:h.pr.mergeable}:void 0,q=h.worktreePath??(h.repositoryPath&&h.branch?(0,l.computeWorktreePath)(h.repositoryPath,h.branch):null),r=(0,c.resolve)("IGitPrService"),s=q??h.repositoryPath??null,t="main";if(s)try{t=await r.getDefaultBranch(s)}catch{}let u=h.branch?{source:h.branch,target:t}:void 0,v=h.repositoryPath?(b=h.repositoryPath,f=(0,i.createHash)("sha256").update(b).digest("hex").slice(0,16),(0,k.join)((0,m.getShipitAiHomeDir)(),"repos",f,"evidence",a).replace(/\\/g,"/")):q?(0,k.join)((0,k.dirname)((0,k.dirname)(q)),"evidence",a).replace(/\\/g,"/"):null;if(v)try{let a=(0,k.join)(v,"manifest.json");if((0,j.existsSync)(a)){let b=(d=JSON.parse((0,j.readFileSync)(a,"utf-8")),d.map(a=>{if(a.relativePath.startsWith("/")){if((0,j.existsSync)(a.relativePath))return a;let b=(0,k.join)(v,(0,k.basename)(a.relativePath)).replace(/\\/g,"/");return(0,j.existsSync)(b)?{...a,relativePath:b}:a}let b=(0,k.join)(v,(0,k.basename)(a.relativePath)).replace(/\\/g,"/");return{...a,relativePath:b}})),c=new Set;e=b.filter(a=>{let b=`${a.type}:${a.relativePath}`;return!c.has(b)&&(c.add(b),!0)})}}catch{}if(!q)return{pr:p,branch:u,evidence:e,warning:p?void 0:"No PR or diff data available",hideCiStatus:o.hideCiStatus};try{let[a,b]=await Promise.all([r.getPrDiffSummary(q,t),r.getFileDiffs(q,t).catch(()=>void 0)]);return{pr:p,branch:u,diffSummary:a,fileDiffs:b,evidence:e,hideCiStatus:o.hideCiStatus}}catch{return{pr:p,branch:u,evidence:e,warning:"Diff statistics unavailable",hideCiStatus:o.hideCiStatus}}}catch(a){return{error:a instanceof Error?a.message:"Failed to load merge review data"}}}async function o(a){if(!a.trim())return{error:"Feature id is required"};try{let b=(0,c.resolve)("IPhaseTimingRepository"),d=(await b.findByFeatureId(a)).map(a=>({agentRunId:a.agentRunId,phase:a.phase,startedAt:a.startedAt.toISOString(),completedAt:a.completedAt?.toISOString(),durationMs:null!=a.durationMs?Number(a.durationMs):void 0,waitingApprovalAt:a.waitingApprovalAt?.toISOString(),approvalWaitMs:null!=a.approvalWaitMs?Number(a.approvalWaitMs):void 0,inputTokens:null!=a.inputTokens?Number(a.inputTokens):void 0,outputTokens:null!=a.outputTokens?Number(a.outputTokens):void 0,cacheCreationInputTokens:null!=a.cacheCreationInputTokens?Number(a.cacheCreationInputTokens):void 0,cacheReadInputTokens:null!=a.cacheReadInputTokens?Number(a.cacheReadInputTokens):void 0,costUsd:null!=a.costUsd?Number(a.costUsd):void 0,numTurns:a.numTurns??void 0,durationApiMs:null!=a.durationApiMs?Number(a.durationApiMs):void 0,exitCode:a.exitCode??void 0,errorMessage:a.errorMessage??void 0,prompt:a.prompt??void 0})),e=await p(a);return{timings:d,rejectionFeedback:e}}catch(a){return{error:a instanceof Error?a.message:"Failed to load phase timings"}}}async function p(b){try{let d=(0,c.resolve)("IFeatureRepository"),e=await d.findById(b);if(!e?.specPath)return[];let{readFileSync:f}=await a.A(6714),{join:g}=await a.A(11105),h=(await a.A(29718)).default,i=f(g(e.specPath,"spec.yaml"),"utf-8"),j=h.load(i);if(!Array.isArray(j?.rejectionFeedback))return[];return j.rejectionFeedback.map(a=>({iteration:Number(a.iteration??1),message:String(a.message??""),phase:a.phase?String(a.phase):void 0,timestamp:a.timestamp?String(a.timestamp):void 0,attachments:Array.isArray(a.attachments)?a.attachments.map(String):void 0}))}catch{return[]}}async function q(a){if(!a.trim())return{error:"Feature id is required"};try{let b=(0,c.resolve)("IFeatureRepository"),d=await b.findById(a);if(!d)return{error:"Feature not found"};if(!d.plan)return{plan:void 0};return{plan:{state:d.plan.state,overview:d.plan.overview,tasks:d.plan.tasks.map(a=>({title:a.title??"",description:a.description??"",state:a.state,actionItems:(a.actionItems??[]).map(a=>({name:a.name,description:a.description,acceptanceCriteria:(a.acceptanceCriteria??[]).map(a=>({description:a.description,verified:a.verified}))}))}))}}}catch(a){return{error:a instanceof Error?a.message:"Failed to load feature plan"}}}async function r(a){if(!a?.trim())return{success:!1,error:"Feature id is required"};try{let b=(0,c.resolve)("RebaseFeatureOnMainUseCase");return await b.execute(a),{success:!0}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to rebase feature"}}}(0,d.ensureServerEntryExports)([n]),(0,b.registerServerReference)(n,"4047578b82147369f8721ed8f0f907d4b0945b7a89",null),a.s(["getMergeReviewData",0,n],6542),(0,d.ensureServerEntryExports)([o]),(0,b.registerServerReference)(o,"4054e8d7d5dde3afcc80430643023fcf6d1d79d4b0",null),a.s(["getFeaturePhaseTimings",0,o],73624),(0,d.ensureServerEntryExports)([q]),(0,b.registerServerReference)(q,"40898ba147024a4b40f4df49859e6d350b878d9ebb",null),a.s(["getFeaturePlan",0,q],12104),(0,d.ensureServerEntryExports)([r]),(0,b.registerServerReference)(r,"402e5be57701f7720ba9fb3026491832c7298ed7d6",null),a.s(["rebaseFeature",0,r],70319);var s=a.i(31747);async function t(a){try{let b=(0,c.resolve)("IFeatureRepository"),d=(0,c.resolve)("IAgentRunRepository"),e=(0,c.resolve)("IRepositoryRepository"),f=(0,c.resolve)("IGitPrService"),g=(0,c.resolve)("GetFeatureArtifactUseCase"),h=await b.findById(a);if(!h)return null;let i=h.agentRunId?await d.findById(h.agentRunId):null,[j,k,l,m]=await Promise.all([e.findByPath(h.repositoryPath).catch(()=>null),f.getDefaultBranch(h.repositoryPath).catch(()=>"main"),g.execute(a).catch(()=>null),f.getRemoteUrl(h.repositoryPath).catch(()=>null)]),n=(0,c.resolve)("LoadSettingsUseCase"),{workflow:o}=await n.execute();return(0,s.buildFeatureNodeData)(h,i,{repositoryName:j?.name,baseBranch:k,oneLiner:l?.oneLiner,remoteUrl:m??void 0,enableEvidence:o.enableEvidence,commitEvidence:o.commitEvidence,hideCiStatus:o.hideCiStatus})}catch{return null}}async function u(a){if(!a?.trim())return{success:!1,error:"Feature id is required"};try{let b=(0,c.resolve)("GetBranchSyncStatusUseCase"),d=await b.execute(a);return{success:!0,data:{...d,checkedAt:new Date().toISOString()}}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to get branch sync status"}}}(0,d.ensureServerEntryExports)([t]),(0,b.registerServerReference)(t,"40b24aee2aecf831a00d0a5cc3cb639362e7914961",null),a.s(["getFeatureDrawerData",0,t],54433),(0,d.ensureServerEntryExports)([u]),(0,b.registerServerReference)(u,"404c80909fee0ae12d955f56f803a63997ac9936b1",null),a.s(["getBranchSyncStatus",0,u],59020)},23461,a=>{"use strict";var b=a.i(23504),c=a.i(27900),d=a.i(12513),e=a.i(73101),f=a.i(54775),g=a.i(65324),h=a.i(33841),i=a.i(46646),j=a.i(68670),k=a.i(85321),l=a.i(84095),m=a.i(56799),n=a.i(80496),o=a.i(93225),p=a.i(94691),q=a.i(41872),r=a.i(9959),s=a.i(79124),t=a.i(29207),u=a.i(10528),v=a.i(50845),w=a.i(26604),x=a.i(54723),y=a.i(18942),z=a.i(42886),A=a.i(49560),B=a.i(39353),C=a.i(61402),D=a.i(76052),E=a.i(13008),F=a.i(74607),G=a.i(6542),H=a.i(73624),I=a.i(12104),J=a.i(70319),K=a.i(54433),L=a.i(59020);a.s([],9039),a.i(9039),a.s(["007430c6e44658511533da6fc18df6a10a77d8ca2f",()=>f.listGitHubOrganizations,"0095abc4000335aa7827a56915d9196e945df0ab50",()=>r.checkAgentAuth,"00ac11c8bac2edb4d3cb6e1bfc7e950957ab6fff05",()=>d.pickFolder,"00cbc4523bf5566fea2d5cf98477b5bf3adbeabce3",()=>b.getAllAgentModels,"00d00bca5810b627fd7f843fa04a97b6756eac2112",()=>s.checkToolStatus,"00ea2e4aeb96147be0df27de0fb0811dcd46d7b284",()=>q.isAgentSetupComplete,"401ae5ca5ec169940e604f0271d5b3d0051fb26ffb",()=>n.openFolder,"402089d3e112c6b2d2afc8c751dbc87755549d0eae",()=>x.startFeature,"4020eb6cd133a6c3dfd8275d14cd43e83d47a93de2",()=>m.openShell,"402537786e22ad05934fa43a551ed5b45acf5ff3c0",()=>z.unarchiveFeature,"4025d2a75d6d6df7203f8a612ff7cb3355a6c1525e",()=>i.deployRepository,"40264230f863970e48854876df9f3fc11a8bf79378",()=>t.getFeatureMetadata,"40272f295c9d08be7d27e530f118d68eec736ff09d",()=>y.stopFeature,"402bfda1e782b375ba1e7b4350dcb2411f747e7759",()=>j.stopDeployment,"402dc759d6b9f6ac4d0286821d233beb7586bfd6a1",()=>e.listGitHubRepositories,"402e5be57701f7720ba9fb3026491832c7298ed7d6",()=>J.rebaseFeature,"4030d28f42b22fbe5c0deddb5a7fdf7c096fc03066",()=>h.deployFeature,"4044ad52bb92a547ac306d28c714498429d7ad0e22",()=>A.addRepository,"4046e707d870b26bda43482676a885acbc5efb7687",()=>p.getDeploymentLogs,"404720e2231380d52c29929a6a219b7cc885ea0502",()=>B.deleteRepository,"4047578b82147369f8721ed8f0f907d4b0945b7a89",()=>G.getMergeReviewData,"404c80909fee0ae12d955f56f803a63997ac9936b1",()=>L.getBranchSyncStatus,"4050fb410229d1171b522d034c23053da254577270",()=>o.syncRepository,"4054e8d7d5dde3afcc80430643023fcf6d1d79d4b0",()=>H.getFeaturePhaseTimings,"4079dd08e2b146ca610665c67cddfc85910e11ff96",()=>F.getResearchArtifact,"408951cdf9d60d3b3fcefa97ab36845c975e13a4e4",()=>g.importGitHubRepository,"40898ba147024a4b40f4df49859e6d350b878d9ebb",()=>I.getFeaturePlan,"409e7f6d9000f7ab91dd4401f2543b2147adb23f81",()=>u.archiveFeature,"40a1f322bacc7e0c123d20aab8420e1748e5b64122",()=>w.resumeFeature,"40b24aee2aecf831a00d0a5cc3cb639362e7914961",()=>K.getFeatureDrawerData,"40e6ab4f184a5112a8559554f64a38ed3e7a547d18",()=>E.getFeatureArtifact,"40f3651a25e60f770e01fc60830b4911e2491df322",()=>k.getDeploymentStatus,"40f3fde3affce8285dca5f685141bda496b2e45e0c",()=>l.openIde,"607d27ea5d212b8c03d6b47947a6b15a19782e2a95",()=>c.updateAgentAndModel,"60d63e7dfefdb2030633a5ce0b8a9ab911f2f5f1bf",()=>C.approveFeature,"7073a2a89f5bd1066886065e9d9135e30c71eb7d8a",()=>D.rejectFeature,"78e46dbafd792b86405e361f7de33fab8345767ddd",()=>v.deleteFeature],23461)},6714,a=>{a.v(a=>Promise.resolve().then(()=>a(2157)))},11105,a=>{a.v(a=>Promise.resolve().then(()=>a(50227)))},29718,a=>{a.v(b=>Promise.all(["server/chunks/ssr/0oyb_js-yaml_dist_js-yaml_mjs_0yiiuw.._.js"].map(b=>a.l(b))).then(()=>b(32996)))}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__045sv4b._.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../../src/presentation/web/app/build-feature-node-data.ts","../../../../../../../src/presentation/web/app/actions/approve-feature.ts","../../../../../../../src/presentation/web/app/actions/reject-feature.ts","../../../../../../../src/presentation/web/app/actions/get-feature-artifact.ts","../../../../../../../src/presentation/web/app/actions/get-research-artifact.ts","../../../../../../../src/presentation/web/app/actions/get-merge-review-data.ts","../../../../../../../src/presentation/web/app/actions/get-feature-phase-timings.ts","../../../../../../../src/presentation/web/app/actions/get-feature-plan.ts","../../../../../../../src/presentation/web/app/actions/rebase-feature.ts","../../../../../../../src/presentation/web/app/actions/get-feature-drawer-data.ts","../../../../../../../src/presentation/web/app/actions/get-branch-sync-status.ts","../../../../../../../src/presentation/web/.next-internal/server/app/%28dashboard%29/%40drawer/feature/%5BfeatureId%5D/%5Btab%5D/page/actions.js%20%28server%20actions%20loader%29"],"sourcesContent":["import type { Feature, AgentRun } from '@shipit-ai/core/domain/generated/output';\nimport { AgentRunStatus } from '@shipit-ai/core/domain/generated/output';\nimport {\n deriveNodeState,\n deriveProgress,\n deriveLifecycle,\n} from '@/components/common/feature-node/derive-feature-state';\nimport { isProcessAlive, computeWorktreePath } from '@/lib/core-utils';\nimport type { FeatureNodeData } from '@/components/common/feature-node';\n\nexport interface BuildFeatureNodeDataOptions {\n baseBranch?: string;\n repositoryName?: string;\n /** AI-generated one-liner from FeatureArtifact */\n oneLiner?: string;\n /** Remote URL for the repository (HTTPS) */\n remoteUrl?: string;\n /** Whether evidence collection is enabled (global workflow setting) */\n enableEvidence?: boolean;\n /** Whether evidence is committed to the PR body (global workflow setting) */\n commitEvidence?: boolean;\n /** Whether CI watch/fix loop is enabled (global workflow setting) */\n ciWatchEnabled?: boolean;\n /** Whether to hide CI status badges from UI (global workflow setting) */\n hideCiStatus?: boolean;\n}\n\n/**\n * Builds a FeatureNodeData object from a Feature entity and optional AgentRun.\n * This is the single-feature version of the logic in `buildGraphNodes`.\n */\nexport function buildFeatureNodeData(\n feature: Feature,\n run: AgentRun | null,\n options?: BuildFeatureNodeDataOptions\n): FeatureNodeData {\n // Detect crashed agents: DB says running/pending but PID is dead\n const isActive = run?.status === AgentRunStatus.running || run?.status === AgentRunStatus.pending;\n const pidAlive = isActive && run?.pid ? isProcessAlive(run.pid) : undefined;\n\n return {\n name: feature.name,\n description: feature.description ?? feature.slug,\n featureId: feature.id,\n lifecycle: deriveLifecycle(feature, run),\n repositoryPath: feature.repositoryPath,\n branch: feature.branch,\n worktreePath:\n feature.worktreePath ?? computeWorktreePath(feature.repositoryPath, feature.branch),\n specPath: feature.specPath,\n state: deriveNodeState(\n feature,\n run,\n pidAlive !== undefined ? { isPidAlive: pidAlive } : undefined\n ),\n progress: deriveProgress(feature),\n summary: feature.description,\n userQuery: feature.userQuery,\n createdAt: feature.createdAt instanceof Date ? feature.createdAt.getTime() : feature.createdAt,\n ...(feature.fast && { fastMode: true }),\n approvalGates: feature.approvalGates,\n push: feature.push,\n openPr: feature.openPr,\n forkAndPr: feature.forkAndPr,\n commitSpecs: feature.commitSpecs,\n enableEvidence: feature.enableEvidence ?? options?.enableEvidence ?? false,\n commitEvidence: feature.commitEvidence ?? options?.commitEvidence ?? false,\n ciWatchEnabled: feature.ciWatchEnabled ?? options?.ciWatchEnabled ?? true,\n ...(options?.hideCiStatus != null && { hideCiStatus: options.hideCiStatus }),\n ...(options?.repositoryName && { repositoryName: options.repositoryName }),\n ...(options?.baseBranch && { baseBranch: options.baseBranch }),\n ...(options?.oneLiner && { oneLiner: options.oneLiner }),\n ...(options?.remoteUrl && { remoteUrl: options.remoteUrl }),\n ...(run?.agentType && { agentType: run.agentType as FeatureNodeData['agentType'] }),\n ...(run?.modelId && { modelId: run.modelId }),\n ...(run?.error && { errorMessage: run.error }),\n ...(feature.agentRunId != null && { hasAgentRun: true }),\n ...(feature.plan != null && { hasPlan: true }),\n ...(feature.pr && {\n pr: {\n url: feature.pr.url,\n number: feature.pr.number,\n status: feature.pr.status,\n ciStatus: feature.pr.ciStatus,\n commitHash: feature.pr.commitHash,\n mergeable: feature.pr.mergeable,\n },\n }),\n };\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { ApproveAgentRunUseCase } from '@shipit-ai/core/application/use-cases/agents/approve-agent-run.use-case';\nimport type { IFeatureRepository } from '@shipit-ai/core/application/ports/output/repositories/feature-repository.interface';\nimport type { PrdApprovalPayload } from '@shipit-ai/core/domain/generated/output';\n\nexport async function approveFeature(\n featureId: string,\n payload?: PrdApprovalPayload\n): Promise<{ approved: boolean; error?: string }> {\n if (!featureId.trim()) {\n return { approved: false, error: 'Feature id is required' };\n }\n\n try {\n const featureRepo = resolve<IFeatureRepository>('IFeatureRepository');\n const feature = await featureRepo.findById(featureId);\n\n if (!feature) {\n return { approved: false, error: 'Feature not found' };\n }\n\n if (!feature.agentRunId) {\n return { approved: false, error: 'Feature has no agent run' };\n }\n\n // Always use ApproveAgentRunUseCase — it handles waitingApproval, failed,\n // and interrupted statuses. This ensures approval is propagated via\n // Command({update: {_approvalAction: 'approved'}}) so the graph node\n // receives it on resume.\n const approveUseCase = resolve<ApproveAgentRunUseCase>('ApproveAgentRunUseCase');\n const result = await approveUseCase.execute(feature.agentRunId, payload);\n\n if (!result.approved) {\n return { approved: false, error: result.reason };\n }\n\n return { approved: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to approve feature';\n return { approved: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { RejectAgentRunUseCase } from '@shipit-ai/core/application/use-cases/agents/reject-agent-run.use-case';\nimport type { IFeatureRepository } from '@shipit-ai/core/application/ports/output/repositories/feature-repository.interface';\n\nexport async function rejectFeature(\n featureId: string,\n feedback: string,\n attachments?: string[]\n): Promise<{\n rejected: boolean;\n iteration?: number;\n iterationWarning?: boolean;\n error?: string;\n}> {\n if (!featureId.trim()) {\n return { rejected: false, error: 'Feature id is required' };\n }\n\n if (!feedback.trim()) {\n return { rejected: false, error: 'Feedback is required' };\n }\n\n try {\n const featureRepo = resolve<IFeatureRepository>('IFeatureRepository');\n const feature = await featureRepo.findById(featureId);\n\n if (!feature) {\n return { rejected: false, error: 'Feature not found' };\n }\n\n if (!feature.agentRunId) {\n return { rejected: false, error: 'Feature has no agent run' };\n }\n\n // Always use RejectAgentRunUseCase — it handles waitingApproval, failed,\n // and interrupted statuses. This ensures rejection feedback is propagated\n // via Command({update: {_approvalAction, _rejectionFeedback}}) so the\n // graph node receives the feedback on resume.\n const rejectUseCase = resolve<RejectAgentRunUseCase>('RejectAgentRunUseCase');\n const result = await rejectUseCase.execute(feature.agentRunId, feedback, attachments);\n\n if (!result.rejected) {\n return { rejected: false, error: result.reason };\n }\n\n return {\n rejected: true,\n iteration: result.iteration,\n iterationWarning: result.iterationWarning,\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to reject feature';\n return { rejected: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { GetFeatureArtifactUseCase } from '@shipit-ai/core/application/use-cases/features/get-feature-artifact.use-case';\nimport type { FeatureArtifact } from '@shipit-ai/core/domain/generated/output';\nimport type { PrdQuestionnaireData } from '@shipit-ai/core/domain/generated/output';\nimport type { ProductDecisionsSummaryData } from '@/components/common/product-decisions-summary';\n\ninterface GetFeatureArtifactResult {\n questionnaire?: PrdQuestionnaireData;\n productDecisions?: ProductDecisionsSummaryData;\n artifact?: FeatureArtifact;\n error?: string;\n}\n\n/**\n * Map FeatureArtifact openQuestions into the PrdQuestionnaireData shape\n * expected by the PrdQuestionnaireDrawer component.\n */\nfunction toQuestionnaireData(artifact: FeatureArtifact): PrdQuestionnaireData {\n return {\n question: 'Goal',\n context: artifact.oneLiner,\n questions: artifact.openQuestions.map((oq, idx) => ({\n id: `q-${idx}`,\n question: oq.question,\n type: 'select' as const,\n options: (oq.options ?? []).map((opt, optIdx) => ({\n id: `q-${idx}-opt-${optIdx}`,\n label: opt.option,\n rationale: opt.description,\n ...(opt.selected ? { recommended: true } : {}),\n })),\n })),\n finalAction: {\n id: 'approve-reqs',\n label: 'Approve Requirements',\n description: 'Finalize and lock the requirements for implementation',\n },\n };\n}\n\n/**\n * Map FeatureArtifact openQuestions into a read-only summary for the\n * Product Decisions tab in the tech review drawer.\n */\nfunction toProductDecisionsData(artifact: FeatureArtifact): ProductDecisionsSummaryData {\n return {\n question: 'Goal',\n context: artifact.oneLiner,\n questions: artifact.openQuestions\n .filter((oq) => oq.resolved)\n .map((oq) => {\n const selected = oq.options?.find((o) => o.selected);\n return {\n question: oq.question,\n selectedOption: selected?.option ?? oq.answer ?? 'N/A',\n rationale: oq.selectionRationale ?? selected?.description ?? '',\n wasRecommended: false,\n };\n }),\n };\n}\n\nexport async function getFeatureArtifact(featureId: string): Promise<GetFeatureArtifactResult> {\n if (!featureId.trim()) {\n return { error: 'Feature id is required' };\n }\n\n try {\n const useCase = resolve<GetFeatureArtifactUseCase>('GetFeatureArtifactUseCase');\n const artifact = await useCase.execute(featureId);\n const questionnaire = toQuestionnaireData(artifact);\n const productDecisions = toProductDecisionsData(artifact);\n return { questionnaire, productDecisions, artifact };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to load feature artifact';\n return { error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { GetResearchArtifactUseCase } from '@shipit-ai/core/application/use-cases/features/get-research-artifact.use-case';\nimport type { ResearchArtifact, TechDecision } from '@shipit-ai/core/domain/generated/output';\n\nexport interface TechDecisionsReviewData {\n name: string;\n summary: string;\n decisions: TechDecision[];\n technologies: string[];\n}\n\ninterface GetResearchArtifactResult {\n techDecisions?: TechDecisionsReviewData;\n error?: string;\n}\n\nfunction toTechDecisionsData(artifact: ResearchArtifact): TechDecisionsReviewData {\n return {\n name: artifact.name,\n summary: artifact.summary,\n decisions: artifact.decisions,\n technologies: artifact.technologies,\n };\n}\n\nexport async function getResearchArtifact(featureId: string): Promise<GetResearchArtifactResult> {\n if (!featureId.trim()) {\n return { error: 'Feature id is required' };\n }\n\n try {\n const useCase = resolve<GetResearchArtifactUseCase>('GetResearchArtifactUseCase');\n const artifact = await useCase.execute(featureId);\n const techDecisions = toTechDecisionsData(artifact);\n return { techDecisions };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to load research artifact';\n return { error: message };\n }\n}\n","'use server';\n\nimport { createHash } from 'node:crypto';\nimport { readFileSync, existsSync } from 'node:fs';\nimport { basename, join, dirname } from 'node:path';\nimport { resolve } from '@/lib/server-container';\nimport type { IFeatureRepository } from '@shipit-ai/core/application/ports/output/repositories/feature-repository.interface';\nimport type { IGitPrService } from '@shipit-ai/core/application/ports/output/services/git-pr-service.interface';\nimport type {\n MergeReviewData,\n MergeReviewEvidence,\n} from '@/components/common/merge-review/merge-review-config';\nimport { computeWorktreePath, getShipitAiHomeDir } from '@/lib/core-utils';\nimport type { LoadSettingsUseCase } from '@shipit-ai/core/application/use-cases/settings/load-settings.use-case';\n\ntype GetMergeReviewDataResult = MergeReviewData | { error: string };\n\n/**\n * Compute the ShipIT evidence directory for a given repository and feature.\n * Path: ~/.shipit-ai/repos/<sha256-hash-prefix>/evidence/<featureId>/\n */\nfunction computeEvidenceDir(repositoryPath: string, featureId: string): string {\n const repoHash = createHash('sha256').update(repositoryPath).digest('hex').slice(0, 16);\n return join(getShipitAiHomeDir(), 'repos', repoHash, 'evidence', featureId).replace(/\\\\/g, '/');\n}\n\n/**\n * Normalize evidence paths so they all point to the ShipIT evidence directory.\n * When commitEvidence was enabled, the manifest may contain relative paths\n * (e.g. \"specs/066-feature/evidence/file.png\"). After merge the worktree is\n * deleted so those paths no longer resolve. The evidence files were also saved\n * to the ShipIT evidence dir with the same filename, so we map relative paths\n * to absolute paths there.\n */\nfunction normalizeEvidencePaths(\n evidence: MergeReviewEvidence[],\n evidenceDir: string\n): MergeReviewEvidence[] {\n return evidence.map((e) => {\n if (e.relativePath.startsWith('/')) {\n // Already absolute — check if the file exists; if not, try the evidence dir\n if (existsSync(e.relativePath)) return e;\n const fallback = join(evidenceDir, basename(e.relativePath)).replace(/\\\\/g, '/');\n if (existsSync(fallback)) return { ...e, relativePath: fallback };\n return e;\n }\n // Relative path — resolve to evidence dir using the filename\n const absolutePath = join(evidenceDir, basename(e.relativePath)).replace(/\\\\/g, '/');\n return { ...e, relativePath: absolutePath };\n });\n}\n\nexport async function getMergeReviewData(featureId: string): Promise<GetMergeReviewDataResult> {\n if (!featureId.trim()) {\n return { error: 'Feature id is required' };\n }\n\n try {\n const featureRepo = resolve<IFeatureRepository>('IFeatureRepository');\n const feature = await featureRepo.findById(featureId);\n\n if (!feature) {\n return { error: 'Feature not found' };\n }\n\n const loadSettings = resolve<LoadSettingsUseCase>('LoadSettingsUseCase');\n const { workflow } = await loadSettings.execute();\n\n const pr = feature.pr\n ? {\n url: feature.pr.url,\n number: feature.pr.number,\n status: feature.pr.status,\n commitHash: feature.pr.commitHash,\n ciStatus: feature.pr.ciStatus,\n mergeable: feature.pr.mergeable,\n }\n : undefined;\n\n const worktreePath =\n feature.worktreePath ??\n (feature.repositoryPath && feature.branch\n ? computeWorktreePath(feature.repositoryPath, feature.branch)\n : null);\n\n // Detect the actual default branch (main, master, etc.) for diff comparison.\n const gitPrService = resolve<IGitPrService>('IGitPrService');\n const diffCwd = worktreePath ?? feature.repositoryPath ?? null;\n let defaultBranch = 'main';\n if (diffCwd) {\n try {\n defaultBranch = await gitPrService.getDefaultBranch(diffCwd);\n } catch {\n // Fall back to 'main' if detection fails\n }\n }\n\n const branch = feature.branch ? { source: feature.branch, target: defaultBranch } : undefined;\n\n // Load evidence manifest (best-effort).\n // Evidence is stored independently of the worktree at:\n // ~/.shipit-ai/repos/<hash>/evidence/<featureId>/manifest.json\n // We compute this path from repositoryPath so evidence is accessible\n // even after the worktree has been deleted post-merge.\n let evidence: MergeReviewEvidence[] | undefined;\n const evidenceDir = feature.repositoryPath\n ? computeEvidenceDir(feature.repositoryPath, featureId)\n : worktreePath\n ? join(dirname(dirname(worktreePath)), 'evidence', featureId).replace(/\\\\/g, '/')\n : null;\n\n if (evidenceDir) {\n try {\n const manifestPath = join(evidenceDir, 'manifest.json');\n if (existsSync(manifestPath)) {\n const raw: MergeReviewEvidence[] = JSON.parse(readFileSync(manifestPath, 'utf-8'));\n const normalized = normalizeEvidencePaths(raw, evidenceDir);\n // Deduplicate: same type + relativePath means the same evidence entry\n const seen = new Set<string>();\n evidence = normalized.filter((e) => {\n const key = `${e.type}:${e.relativePath}`;\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n }\n } catch {\n // Evidence unavailable — not critical\n }\n }\n\n if (!worktreePath) {\n return {\n pr,\n branch,\n evidence,\n warning: pr ? undefined : 'No PR or diff data available',\n hideCiStatus: workflow.hideCiStatus,\n };\n }\n\n try {\n const [diffSummary, fileDiffs] = await Promise.all([\n gitPrService.getPrDiffSummary(worktreePath, defaultBranch),\n gitPrService.getFileDiffs(worktreePath, defaultBranch).catch(() => undefined),\n ]);\n return { pr, branch, diffSummary, fileDiffs, evidence, hideCiStatus: workflow.hideCiStatus };\n } catch {\n return {\n pr,\n branch,\n evidence,\n warning: 'Diff statistics unavailable',\n hideCiStatus: workflow.hideCiStatus,\n };\n }\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to load merge review data';\n return { error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { IPhaseTimingRepository } from '@shipit-ai/core/application/ports/output/agents/phase-timing-repository.interface';\nimport type { IFeatureRepository } from '@shipit-ai/core/application/ports/output/repositories/feature-repository.interface';\n\nexport interface PhaseTimingData {\n agentRunId: string;\n phase: string;\n startedAt: string;\n completedAt?: string;\n durationMs?: number;\n waitingApprovalAt?: string;\n approvalWaitMs?: number;\n inputTokens?: number;\n outputTokens?: number;\n cacheCreationInputTokens?: number;\n cacheReadInputTokens?: number;\n costUsd?: number;\n numTurns?: number;\n durationApiMs?: number;\n exitCode?: string;\n errorMessage?: string;\n prompt?: string;\n}\n\nexport interface RejectionFeedbackData {\n iteration: number;\n message: string;\n phase?: string;\n timestamp?: string;\n attachments?: string[];\n}\n\ntype GetPhaseTimingsResult =\n | { timings: PhaseTimingData[]; rejectionFeedback: RejectionFeedbackData[] }\n | { error: string };\n\nexport async function getFeaturePhaseTimings(featureId: string): Promise<GetPhaseTimingsResult> {\n if (!featureId.trim()) {\n return { error: 'Feature id is required' };\n }\n\n try {\n const repo = resolve<IPhaseTimingRepository>('IPhaseTimingRepository');\n const phaseTimings = await repo.findByFeatureId(featureId);\n\n const timings: PhaseTimingData[] = phaseTimings.map((t) => ({\n agentRunId: t.agentRunId,\n phase: t.phase,\n startedAt: t.startedAt.toISOString(),\n completedAt: t.completedAt?.toISOString(),\n durationMs: t.durationMs != null ? Number(t.durationMs) : undefined,\n waitingApprovalAt: t.waitingApprovalAt?.toISOString(),\n approvalWaitMs: t.approvalWaitMs != null ? Number(t.approvalWaitMs) : undefined,\n inputTokens: t.inputTokens != null ? Number(t.inputTokens) : undefined,\n outputTokens: t.outputTokens != null ? Number(t.outputTokens) : undefined,\n cacheCreationInputTokens:\n t.cacheCreationInputTokens != null ? Number(t.cacheCreationInputTokens) : undefined,\n cacheReadInputTokens:\n t.cacheReadInputTokens != null ? Number(t.cacheReadInputTokens) : undefined,\n costUsd: t.costUsd != null ? Number(t.costUsd) : undefined,\n numTurns: t.numTurns ?? undefined,\n durationApiMs: t.durationApiMs != null ? Number(t.durationApiMs) : undefined,\n exitCode: t.exitCode ?? undefined,\n errorMessage: t.errorMessage ?? undefined,\n prompt: t.prompt ?? undefined,\n }));\n\n // Read rejection feedback from spec.yaml\n const rejectionFeedback = await readRejectionFeedback(featureId);\n\n return { timings, rejectionFeedback };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to load phase timings';\n return { error: message };\n }\n}\n\nasync function readRejectionFeedback(featureId: string): Promise<RejectionFeedbackData[]> {\n try {\n const featureRepo = resolve<IFeatureRepository>('IFeatureRepository');\n const feature = await featureRepo.findById(featureId);\n if (!feature?.specPath) return [];\n\n const { readFileSync } = await import('node:fs');\n const { join } = await import('node:path');\n const yaml = (await import('js-yaml')).default;\n\n const specContent = readFileSync(join(feature.specPath, 'spec.yaml'), 'utf-8');\n const spec = yaml.load(specContent) as Record<string, unknown>;\n\n if (!Array.isArray(spec?.rejectionFeedback)) return [];\n\n return (spec.rejectionFeedback as Record<string, unknown>[]).map((entry) => ({\n iteration: Number(entry.iteration ?? 1),\n message: String(entry.message ?? ''),\n phase: entry.phase ? String(entry.phase) : undefined,\n timestamp: entry.timestamp ? String(entry.timestamp) : undefined,\n attachments: Array.isArray(entry.attachments)\n ? (entry.attachments as unknown[]).map(String)\n : undefined,\n }));\n } catch {\n return [];\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { IFeatureRepository } from '@shipit-ai/core/application/ports/output/repositories/feature-repository.interface';\n\nexport interface AcceptanceCriterionData {\n description: string;\n verified: boolean;\n}\n\nexport interface ActionItemData {\n name: string;\n description: string;\n acceptanceCriteria: AcceptanceCriterionData[];\n}\n\nexport interface PlanTaskData {\n title: string;\n description: string;\n state: string;\n actionItems: ActionItemData[];\n}\n\nexport interface PlanData {\n state: string;\n overview: string;\n tasks: PlanTaskData[];\n}\n\ntype GetPlanResult = { plan: PlanData | undefined } | { error: string };\n\nexport async function getFeaturePlan(featureId: string): Promise<GetPlanResult> {\n if (!featureId.trim()) {\n return { error: 'Feature id is required' };\n }\n\n try {\n const repo = resolve<IFeatureRepository>('IFeatureRepository');\n const feature = await repo.findById(featureId);\n\n if (!feature) {\n return { error: 'Feature not found' };\n }\n\n if (!feature.plan) {\n return { plan: undefined };\n }\n\n const plan: PlanData = {\n state: feature.plan.state,\n overview: feature.plan.overview,\n tasks: feature.plan.tasks.map((t) => ({\n title: t.title ?? '',\n description: t.description ?? '',\n state: t.state,\n actionItems: (t.actionItems ?? []).map((ai) => ({\n name: ai.name,\n description: ai.description,\n acceptanceCriteria: (ai.acceptanceCriteria ?? []).map((ac) => ({\n description: ac.description,\n verified: ac.verified,\n })),\n })),\n })),\n };\n\n return { plan };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to load feature plan';\n return { error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { RebaseFeatureOnMainUseCase } from '@shipit-ai/core/application/use-cases/features/rebase-feature-on-main.use-case';\n\nexport async function rebaseFeature(\n featureId: string\n): Promise<{ success: boolean; error?: string }> {\n if (!featureId?.trim()) {\n return { success: false, error: 'Feature id is required' };\n }\n\n try {\n const useCase = resolve<RebaseFeatureOnMainUseCase>('RebaseFeatureOnMainUseCase');\n await useCase.execute(featureId);\n return { success: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to rebase feature';\n return { success: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { IFeatureRepository } from '@shipit-ai/core/application/ports/output/repositories/feature-repository.interface';\nimport type { IAgentRunRepository } from '@shipit-ai/core/application/ports/output/agents/agent-run-repository.interface';\nimport type { IRepositoryRepository } from '@shipit-ai/core/application/ports/output/repositories/repository-repository.interface';\nimport type { IGitPrService } from '@shipit-ai/core/application/ports/output/services/git-pr-service.interface';\nimport type { GetFeatureArtifactUseCase } from '@shipit-ai/core/application/use-cases/features/get-feature-artifact.use-case';\nimport type { LoadSettingsUseCase } from '@shipit-ai/core/application/use-cases/settings/load-settings.use-case';\nimport { buildFeatureNodeData } from '@/app/build-feature-node-data';\nimport type { FeatureNodeData } from '@/components/common/feature-node';\n\n/**\n * Fetches full FeatureNodeData for a given feature ID.\n * Used by the drawer for targeted data syncing without triggering\n * a full router.refresh() / server component re-render.\n *\n * CI status and mergeable status are read from the DB (already updated\n * by PrSyncWatcherService) instead of making duplicate GitHub API calls.\n */\nexport async function getFeatureDrawerData(featureId: string): Promise<FeatureNodeData | null> {\n try {\n const featureRepo = resolve<IFeatureRepository>('IFeatureRepository');\n const agentRunRepo = resolve<IAgentRunRepository>('IAgentRunRepository');\n const repoRepo = resolve<IRepositoryRepository>('IRepositoryRepository');\n const gitPrService = resolve<IGitPrService>('IGitPrService');\n const getArtifact = resolve<GetFeatureArtifactUseCase>('GetFeatureArtifactUseCase');\n\n const feature = await featureRepo.findById(featureId);\n if (!feature) return null;\n\n const run = feature.agentRunId ? await agentRunRepo.findById(feature.agentRunId) : null;\n\n // CI status and mergeable status are read from the feature record (updated by\n // PrSyncWatcherService every 30s) — no duplicate GitHub API calls needed.\n // Only getDefaultBranch and getRemoteUrl are kept as they are local git operations.\n const [repo, baseBranch, artifact, remoteUrl] = await Promise.all([\n repoRepo.findByPath(feature.repositoryPath).catch(() => null),\n gitPrService.getDefaultBranch(feature.repositoryPath).catch(() => 'main'),\n getArtifact.execute(featureId).catch(() => null),\n gitPrService.getRemoteUrl(feature.repositoryPath).catch(() => null),\n ]);\n\n const loadSettings = resolve<LoadSettingsUseCase>('LoadSettingsUseCase');\n const { workflow } = await loadSettings.execute();\n\n return buildFeatureNodeData(feature, run, {\n repositoryName: repo?.name,\n baseBranch,\n oneLiner: artifact?.oneLiner,\n remoteUrl: remoteUrl ?? undefined,\n enableEvidence: workflow.enableEvidence,\n commitEvidence: workflow.commitEvidence,\n hideCiStatus: workflow.hideCiStatus,\n });\n } catch {\n return null;\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { GetBranchSyncStatusUseCase } from '@shipit-ai/core/application/use-cases/features/get-branch-sync-status.use-case';\n\nexport async function getBranchSyncStatus(featureId: string): Promise<{\n success: boolean;\n data?: { ahead: number; behind: number; baseBranch: string; checkedAt: string };\n error?: string;\n}> {\n if (!featureId?.trim()) {\n return { success: false, error: 'Feature id is required' };\n }\n\n try {\n const useCase = resolve<GetBranchSyncStatusUseCase>('GetBranchSyncStatusUseCase');\n const result = await useCase.execute(featureId);\n return {\n success: true,\n data: {\n ...result,\n checkedAt: new Date().toISOString(),\n },\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to get branch sync status';\n return { success: false, error: message };\n }\n}\n","export {getAllAgentModels as '00cbc4523bf5566fea2d5cf98477b5bf3adbeabce3'} from 'ACTIONS_MODULE0'\nexport {updateAgentAndModel as '607d27ea5d212b8c03d6b47947a6b15a19782e2a95'} from 'ACTIONS_MODULE1'\nexport {pickFolder as '00ac11c8bac2edb4d3cb6e1bfc7e950957ab6fff05'} from 'ACTIONS_MODULE2'\nexport {listGitHubRepositories as '402dc759d6b9f6ac4d0286821d233beb7586bfd6a1'} from 'ACTIONS_MODULE3'\nexport {listGitHubOrganizations as '007430c6e44658511533da6fc18df6a10a77d8ca2f'} from 'ACTIONS_MODULE4'\nexport {importGitHubRepository as '408951cdf9d60d3b3fcefa97ab36845c975e13a4e4'} from 'ACTIONS_MODULE5'\nexport {deployFeature as '4030d28f42b22fbe5c0deddb5a7fdf7c096fc03066'} from 'ACTIONS_MODULE6'\nexport {deployRepository as '4025d2a75d6d6df7203f8a612ff7cb3355a6c1525e'} from 'ACTIONS_MODULE7'\nexport {stopDeployment as '402bfda1e782b375ba1e7b4350dcb2411f747e7759'} from 'ACTIONS_MODULE8'\nexport {getDeploymentStatus as '40f3651a25e60f770e01fc60830b4911e2491df322'} from 'ACTIONS_MODULE9'\nexport {openIde as '40f3fde3affce8285dca5f685141bda496b2e45e0c'} from 'ACTIONS_MODULE10'\nexport {openShell as '4020eb6cd133a6c3dfd8275d14cd43e83d47a93de2'} from 'ACTIONS_MODULE11'\nexport {openFolder as '401ae5ca5ec169940e604f0271d5b3d0051fb26ffb'} from 'ACTIONS_MODULE12'\nexport {syncRepository as '4050fb410229d1171b522d034c23053da254577270'} from 'ACTIONS_MODULE13'\nexport {getDeploymentLogs as '4046e707d870b26bda43482676a885acbc5efb7687'} from 'ACTIONS_MODULE14'\nexport {isAgentSetupComplete as '00ea2e4aeb96147be0df27de0fb0811dcd46d7b284'} from 'ACTIONS_MODULE15'\nexport {checkAgentAuth as '0095abc4000335aa7827a56915d9196e945df0ab50'} from 'ACTIONS_MODULE16'\nexport {checkToolStatus as '00d00bca5810b627fd7f843fa04a97b6756eac2112'} from 'ACTIONS_MODULE17'\nexport {getFeatureMetadata as '40264230f863970e48854876df9f3fc11a8bf79378'} from 'ACTIONS_MODULE18'\nexport {archiveFeature as '409e7f6d9000f7ab91dd4401f2543b2147adb23f81'} from 'ACTIONS_MODULE19'\nexport {deleteFeature as '78e46dbafd792b86405e361f7de33fab8345767ddd'} from 'ACTIONS_MODULE20'\nexport {resumeFeature as '40a1f322bacc7e0c123d20aab8420e1748e5b64122'} from 'ACTIONS_MODULE21'\nexport {startFeature as '402089d3e112c6b2d2afc8c751dbc87755549d0eae'} from 'ACTIONS_MODULE22'\nexport {stopFeature as '40272f295c9d08be7d27e530f118d68eec736ff09d'} from 'ACTIONS_MODULE23'\nexport {unarchiveFeature as '402537786e22ad05934fa43a551ed5b45acf5ff3c0'} from 'ACTIONS_MODULE24'\nexport {addRepository as '4044ad52bb92a547ac306d28c714498429d7ad0e22'} from 'ACTIONS_MODULE25'\nexport {deleteRepository as '404720e2231380d52c29929a6a219b7cc885ea0502'} from 'ACTIONS_MODULE26'\nexport {approveFeature as '60d63e7dfefdb2030633a5ce0b8a9ab911f2f5f1bf'} from 'ACTIONS_MODULE27'\nexport {rejectFeature as '7073a2a89f5bd1066886065e9d9135e30c71eb7d8a'} from 'ACTIONS_MODULE28'\nexport {getFeatureArtifact as '40e6ab4f184a5112a8559554f64a38ed3e7a547d18'} from 'ACTIONS_MODULE29'\nexport {getResearchArtifact as '4079dd08e2b146ca610665c67cddfc85910e11ff96'} from 'ACTIONS_MODULE30'\nexport {getMergeReviewData as '4047578b82147369f8721ed8f0f907d4b0945b7a89'} from 'ACTIONS_MODULE31'\nexport {getFeaturePhaseTimings as '4054e8d7d5dde3afcc80430643023fcf6d1d79d4b0'} from 'ACTIONS_MODULE32'\nexport {getFeaturePlan as '40898ba147024a4b40f4df49859e6d350b878d9ebb'} from 'ACTIONS_MODULE33'\nexport {rebaseFeature as '402e5be57701f7720ba9fb3026491832c7298ed7d6'} from 'ACTIONS_MODULE34'\nexport {getFeatureDrawerData as '40b24aee2aecf831a00d0a5cc3cb639362e7914961'} from 'ACTIONS_MODULE35'\nexport {getBranchSyncStatus as '404c80909fee0ae12d955f56f803a63997ac9936b1'} from 'ACTIONS_MODULE36'\n"],"names":["buildFeatureNodeData","feature","run","options","isActive","status","running","pending","pidAlive","pid","undefined","name","description","slug","featureId","id","lifecycle","repositoryPath","branch","worktreePath","specPath","state","isPidAlive","progress","summary","userQuery","createdAt","Date","getTime","fast","fastMode","approvalGates","push","openPr","forkAndPr","commitSpecs","enableEvidence","commitEvidence","ciWatchEnabled","hideCiStatus","repositoryName","baseBranch","oneLiner","remoteUrl","agentType","modelId","error","errorMessage","agentRunId","hasAgentRun","plan","hasPlan","pr","url","number","ciStatus","commitHash","mergeable","approveFeature","payload","trim","approved","featureRepo","findById","approveUseCase","result","execute","reason","message","Error"],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- module.exports=[31747,a=>{"use strict";var b=a.i(81719),c=a.i(6880);a.i(1442);var d=a.i(79372),e=a.i(29918);a.s(["buildFeatureNodeData",0,function(a,f,g){let h=(f?.status===b.AgentRunStatus.running||f?.status===b.AgentRunStatus.pending)&&f?.pid?(0,d.isProcessAlive)(f.pid):void 0;return{name:a.name,description:a.description??a.slug,featureId:a.id,lifecycle:(0,c.deriveLifecycle)(a,f),repositoryPath:a.repositoryPath,branch:a.branch,worktreePath:a.worktreePath??(0,e.computeWorktreePath)(a.repositoryPath,a.branch),specPath:a.specPath,state:(0,c.deriveNodeState)(a,f,void 0!==h?{isPidAlive:h}:void 0),progress:(0,c.deriveProgress)(a),summary:a.description,userQuery:a.userQuery,createdAt:a.createdAt instanceof Date?a.createdAt.getTime():a.createdAt,...a.fast&&{fastMode:!0},approvalGates:a.approvalGates,push:a.push,openPr:a.openPr,forkAndPr:a.forkAndPr,commitSpecs:a.commitSpecs,enableEvidence:a.enableEvidence??g?.enableEvidence??!1,commitEvidence:a.commitEvidence??g?.commitEvidence??!1,ciWatchEnabled:a.ciWatchEnabled??g?.ciWatchEnabled??!0,...g?.hideCiStatus!=null&&{hideCiStatus:g.hideCiStatus},...g?.repositoryName&&{repositoryName:g.repositoryName},...g?.baseBranch&&{baseBranch:g.baseBranch},...g?.oneLiner&&{oneLiner:g.oneLiner},...g?.remoteUrl&&{remoteUrl:g.remoteUrl},...f?.agentType&&{agentType:f.agentType},...f?.modelId&&{modelId:f.modelId},...f?.error&&{errorMessage:f.error},...null!=a.agentRunId&&{hasAgentRun:!0},...null!=a.plan&&{hasPlan:!0},...a.pr&&{pr:{url:a.pr.url,number:a.pr.number,status:a.pr.status,ciStatus:a.pr.ciStatus,commitHash:a.pr.commitHash,mergeable:a.pr.mergeable}}}}])},61402,76052,13008,74607,6542,73624,12104,70319,54433,59020,a=>{"use strict";var b=a.i(2211),c=a.i(96380),d=a.i(50961);async function e(a,b){if(!a.trim())return{approved:!1,error:"Feature id is required"};try{let d=(0,c.resolve)("IFeatureRepository"),e=await d.findById(a);if(!e)return{approved:!1,error:"Feature not found"};if(!e.agentRunId)return{approved:!1,error:"Feature has no agent run"};let f=(0,c.resolve)("ApproveAgentRunUseCase"),g=await f.execute(e.agentRunId,b);if(!g.approved)return{approved:!1,error:g.reason};return{approved:!0}}catch(a){return{approved:!1,error:a instanceof Error?a.message:"Failed to approve feature"}}}async function f(a,b,d){if(!a.trim())return{rejected:!1,error:"Feature id is required"};if(!b.trim())return{rejected:!1,error:"Feedback is required"};try{let e=(0,c.resolve)("IFeatureRepository"),f=await e.findById(a);if(!f)return{rejected:!1,error:"Feature not found"};if(!f.agentRunId)return{rejected:!1,error:"Feature has no agent run"};let g=(0,c.resolve)("RejectAgentRunUseCase"),h=await g.execute(f.agentRunId,b,d);if(!h.rejected)return{rejected:!1,error:h.reason};return{rejected:!0,iteration:h.iteration,iterationWarning:h.iterationWarning}}catch(a){return{rejected:!1,error:a instanceof Error?a.message:"Failed to reject feature"}}}async function g(a){if(!a.trim())return{error:"Feature id is required"};try{let b=(0,c.resolve)("GetFeatureArtifactUseCase"),d=await b.execute(a),e={question:"Goal",context:d.oneLiner,questions:d.openQuestions.map((a,b)=>({id:`q-${b}`,question:a.question,type:"select",options:(a.options??[]).map((a,c)=>({id:`q-${b}-opt-${c}`,label:a.option,rationale:a.description,...a.selected?{recommended:!0}:{}}))})),finalAction:{id:"approve-reqs",label:"Approve Requirements",description:"Finalize and lock the requirements for implementation"}},f={question:"Goal",context:d.oneLiner,questions:d.openQuestions.filter(a=>a.resolved).map(a=>{let b=a.options?.find(a=>a.selected);return{question:a.question,selectedOption:b?.option??a.answer??"N/A",rationale:a.selectionRationale??b?.description??"",wasRecommended:!1}})};return{questionnaire:e,productDecisions:f,artifact:d}}catch(a){return{error:a instanceof Error?a.message:"Failed to load feature artifact"}}}async function h(a){if(!a.trim())return{error:"Feature id is required"};try{var b;let d=(0,c.resolve)("GetResearchArtifactUseCase");return{techDecisions:{name:(b=await d.execute(a)).name,summary:b.summary,decisions:b.decisions,technologies:b.technologies}}}catch(a){return{error:a instanceof Error?a.message:"Failed to load research artifact"}}}(0,d.ensureServerEntryExports)([e]),(0,b.registerServerReference)(e,"60d63e7dfefdb2030633a5ce0b8a9ab911f2f5f1bf",null),a.s(["approveFeature",0,e],61402),(0,d.ensureServerEntryExports)([f]),(0,b.registerServerReference)(f,"7073a2a89f5bd1066886065e9d9135e30c71eb7d8a",null),a.s(["rejectFeature",0,f],76052),(0,d.ensureServerEntryExports)([g]),(0,b.registerServerReference)(g,"40e6ab4f184a5112a8559554f64a38ed3e7a547d18",null),a.s(["getFeatureArtifact",0,g],13008),(0,d.ensureServerEntryExports)([h]),(0,b.registerServerReference)(h,"4079dd08e2b146ca610665c67cddfc85910e11ff96",null),a.s(["getResearchArtifact",0,h],74607);var i=a.i(66680),j=a.i(2157),k=a.i(50227);a.i(1442);var l=a.i(29918),m=a.i(83771);async function n(a){if(!a.trim())return{error:"Feature id is required"};try{var b,d;let e,f,g=(0,c.resolve)("IFeatureRepository"),h=await g.findById(a);if(!h)return{error:"Feature not found"};let n=(0,c.resolve)("LoadSettingsUseCase"),{workflow:o}=await n.execute(),p=h.pr?{url:h.pr.url,number:h.pr.number,status:h.pr.status,commitHash:h.pr.commitHash,ciStatus:h.pr.ciStatus,mergeable:h.pr.mergeable}:void 0,q=h.worktreePath??(h.repositoryPath&&h.branch?(0,l.computeWorktreePath)(h.repositoryPath,h.branch):null),r=(0,c.resolve)("IGitPrService"),s=q??h.repositoryPath??null,t="main";if(s)try{t=await r.getDefaultBranch(s)}catch{}let u=h.branch?{source:h.branch,target:t}:void 0,v=h.repositoryPath?(b=h.repositoryPath,f=(0,i.createHash)("sha256").update(b).digest("hex").slice(0,16),(0,k.join)((0,m.getShipitAiHomeDir)(),"repos",f,"evidence",a).replace(/\\/g,"/")):q?(0,k.join)((0,k.dirname)((0,k.dirname)(q)),"evidence",a).replace(/\\/g,"/"):null;if(v)try{let a=(0,k.join)(v,"manifest.json");if((0,j.existsSync)(a)){let b=(d=JSON.parse((0,j.readFileSync)(a,"utf-8")),d.map(a=>{if(a.relativePath.startsWith("/")){if((0,j.existsSync)(a.relativePath))return a;let b=(0,k.join)(v,(0,k.basename)(a.relativePath)).replace(/\\/g,"/");return(0,j.existsSync)(b)?{...a,relativePath:b}:a}let b=(0,k.join)(v,(0,k.basename)(a.relativePath)).replace(/\\/g,"/");return{...a,relativePath:b}})),c=new Set;e=b.filter(a=>{let b=`${a.type}:${a.relativePath}`;return!c.has(b)&&(c.add(b),!0)})}}catch{}if(!q)return{pr:p,branch:u,evidence:e,warning:p?void 0:"No PR or diff data available",hideCiStatus:o.hideCiStatus};try{let[a,b]=await Promise.all([r.getPrDiffSummary(q,t),r.getFileDiffs(q,t).catch(()=>void 0)]);return{pr:p,branch:u,diffSummary:a,fileDiffs:b,evidence:e,hideCiStatus:o.hideCiStatus}}catch{return{pr:p,branch:u,evidence:e,warning:"Diff statistics unavailable",hideCiStatus:o.hideCiStatus}}}catch(a){return{error:a instanceof Error?a.message:"Failed to load merge review data"}}}async function o(a){if(!a.trim())return{error:"Feature id is required"};try{let b=(0,c.resolve)("IPhaseTimingRepository"),d=(await b.findByFeatureId(a)).map(a=>({agentRunId:a.agentRunId,phase:a.phase,startedAt:a.startedAt.toISOString(),completedAt:a.completedAt?.toISOString(),durationMs:null!=a.durationMs?Number(a.durationMs):void 0,waitingApprovalAt:a.waitingApprovalAt?.toISOString(),approvalWaitMs:null!=a.approvalWaitMs?Number(a.approvalWaitMs):void 0,inputTokens:null!=a.inputTokens?Number(a.inputTokens):void 0,outputTokens:null!=a.outputTokens?Number(a.outputTokens):void 0,cacheCreationInputTokens:null!=a.cacheCreationInputTokens?Number(a.cacheCreationInputTokens):void 0,cacheReadInputTokens:null!=a.cacheReadInputTokens?Number(a.cacheReadInputTokens):void 0,costUsd:null!=a.costUsd?Number(a.costUsd):void 0,numTurns:a.numTurns??void 0,durationApiMs:null!=a.durationApiMs?Number(a.durationApiMs):void 0,exitCode:a.exitCode??void 0,errorMessage:a.errorMessage??void 0,prompt:a.prompt??void 0})),e=await p(a);return{timings:d,rejectionFeedback:e}}catch(a){return{error:a instanceof Error?a.message:"Failed to load phase timings"}}}async function p(b){try{let d=(0,c.resolve)("IFeatureRepository"),e=await d.findById(b);if(!e?.specPath)return[];let{readFileSync:f}=await a.A(6714),{join:g}=await a.A(11105),h=(await a.A(29718)).default,i=f(g(e.specPath,"spec.yaml"),"utf-8"),j=h.load(i);if(!Array.isArray(j?.rejectionFeedback))return[];return j.rejectionFeedback.map(a=>({iteration:Number(a.iteration??1),message:String(a.message??""),phase:a.phase?String(a.phase):void 0,timestamp:a.timestamp?String(a.timestamp):void 0,attachments:Array.isArray(a.attachments)?a.attachments.map(String):void 0}))}catch{return[]}}async function q(a){if(!a.trim())return{error:"Feature id is required"};try{let b=(0,c.resolve)("IFeatureRepository"),d=await b.findById(a);if(!d)return{error:"Feature not found"};if(!d.plan)return{plan:void 0};return{plan:{state:d.plan.state,overview:d.plan.overview,tasks:d.plan.tasks.map(a=>({title:a.title??"",description:a.description??"",state:a.state,actionItems:(a.actionItems??[]).map(a=>({name:a.name,description:a.description,acceptanceCriteria:(a.acceptanceCriteria??[]).map(a=>({description:a.description,verified:a.verified}))}))}))}}}catch(a){return{error:a instanceof Error?a.message:"Failed to load feature plan"}}}async function r(a){if(!a?.trim())return{success:!1,error:"Feature id is required"};try{let b=(0,c.resolve)("RebaseFeatureOnMainUseCase");return await b.execute(a),{success:!0}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to rebase feature"}}}(0,d.ensureServerEntryExports)([n]),(0,b.registerServerReference)(n,"4047578b82147369f8721ed8f0f907d4b0945b7a89",null),a.s(["getMergeReviewData",0,n],6542),(0,d.ensureServerEntryExports)([o]),(0,b.registerServerReference)(o,"4054e8d7d5dde3afcc80430643023fcf6d1d79d4b0",null),a.s(["getFeaturePhaseTimings",0,o],73624),(0,d.ensureServerEntryExports)([q]),(0,b.registerServerReference)(q,"40898ba147024a4b40f4df49859e6d350b878d9ebb",null),a.s(["getFeaturePlan",0,q],12104),(0,d.ensureServerEntryExports)([r]),(0,b.registerServerReference)(r,"402e5be57701f7720ba9fb3026491832c7298ed7d6",null),a.s(["rebaseFeature",0,r],70319);var s=a.i(31747);async function t(a){try{let b=(0,c.resolve)("IFeatureRepository"),d=(0,c.resolve)("IAgentRunRepository"),e=(0,c.resolve)("IRepositoryRepository"),f=(0,c.resolve)("IGitPrService"),g=(0,c.resolve)("GetFeatureArtifactUseCase"),h=await b.findById(a);if(!h)return null;let i=h.agentRunId?await d.findById(h.agentRunId):null,[j,k,l,m]=await Promise.all([e.findByPath(h.repositoryPath).catch(()=>null),f.getDefaultBranch(h.repositoryPath).catch(()=>"main"),g.execute(a).catch(()=>null),f.getRemoteUrl(h.repositoryPath).catch(()=>null)]),n=(0,c.resolve)("LoadSettingsUseCase"),{workflow:o}=await n.execute();return(0,s.buildFeatureNodeData)(h,i,{repositoryName:j?.name,baseBranch:k,oneLiner:l?.oneLiner,remoteUrl:m??void 0,enableEvidence:o.enableEvidence,commitEvidence:o.commitEvidence,hideCiStatus:o.hideCiStatus})}catch{return null}}async function u(a){if(!a?.trim())return{success:!1,error:"Feature id is required"};try{let b=(0,c.resolve)("GetBranchSyncStatusUseCase"),d=await b.execute(a);return{success:!0,data:{...d,checkedAt:new Date().toISOString()}}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to get branch sync status"}}}(0,d.ensureServerEntryExports)([t]),(0,b.registerServerReference)(t,"40b24aee2aecf831a00d0a5cc3cb639362e7914961",null),a.s(["getFeatureDrawerData",0,t],54433),(0,d.ensureServerEntryExports)([u]),(0,b.registerServerReference)(u,"404c80909fee0ae12d955f56f803a63997ac9936b1",null),a.s(["getBranchSyncStatus",0,u],59020)},62284,a=>{"use strict";var b=a.i(23504),c=a.i(27900),d=a.i(12513),e=a.i(73101),f=a.i(54775),g=a.i(65324),h=a.i(33841),i=a.i(46646),j=a.i(68670),k=a.i(85321),l=a.i(84095),m=a.i(56799),n=a.i(80496),o=a.i(93225),p=a.i(94691),q=a.i(41872),r=a.i(9959),s=a.i(79124),t=a.i(29207),u=a.i(10528),v=a.i(50845),w=a.i(26604),x=a.i(54723),y=a.i(18942),z=a.i(42886),A=a.i(49560),B=a.i(39353),C=a.i(61402),D=a.i(76052),E=a.i(13008),F=a.i(74607),G=a.i(6542),H=a.i(73624),I=a.i(12104),J=a.i(70319),K=a.i(54433),L=a.i(59020);a.s([],22548),a.i(22548),a.s(["007430c6e44658511533da6fc18df6a10a77d8ca2f",()=>f.listGitHubOrganizations,"0095abc4000335aa7827a56915d9196e945df0ab50",()=>r.checkAgentAuth,"00ac11c8bac2edb4d3cb6e1bfc7e950957ab6fff05",()=>d.pickFolder,"00cbc4523bf5566fea2d5cf98477b5bf3adbeabce3",()=>b.getAllAgentModels,"00d00bca5810b627fd7f843fa04a97b6756eac2112",()=>s.checkToolStatus,"00ea2e4aeb96147be0df27de0fb0811dcd46d7b284",()=>q.isAgentSetupComplete,"401ae5ca5ec169940e604f0271d5b3d0051fb26ffb",()=>n.openFolder,"402089d3e112c6b2d2afc8c751dbc87755549d0eae",()=>x.startFeature,"4020eb6cd133a6c3dfd8275d14cd43e83d47a93de2",()=>m.openShell,"402537786e22ad05934fa43a551ed5b45acf5ff3c0",()=>z.unarchiveFeature,"4025d2a75d6d6df7203f8a612ff7cb3355a6c1525e",()=>i.deployRepository,"40264230f863970e48854876df9f3fc11a8bf79378",()=>t.getFeatureMetadata,"40272f295c9d08be7d27e530f118d68eec736ff09d",()=>y.stopFeature,"402bfda1e782b375ba1e7b4350dcb2411f747e7759",()=>j.stopDeployment,"402dc759d6b9f6ac4d0286821d233beb7586bfd6a1",()=>e.listGitHubRepositories,"402e5be57701f7720ba9fb3026491832c7298ed7d6",()=>J.rebaseFeature,"4030d28f42b22fbe5c0deddb5a7fdf7c096fc03066",()=>h.deployFeature,"4044ad52bb92a547ac306d28c714498429d7ad0e22",()=>A.addRepository,"4046e707d870b26bda43482676a885acbc5efb7687",()=>p.getDeploymentLogs,"404720e2231380d52c29929a6a219b7cc885ea0502",()=>B.deleteRepository,"4047578b82147369f8721ed8f0f907d4b0945b7a89",()=>G.getMergeReviewData,"404c80909fee0ae12d955f56f803a63997ac9936b1",()=>L.getBranchSyncStatus,"4050fb410229d1171b522d034c23053da254577270",()=>o.syncRepository,"4054e8d7d5dde3afcc80430643023fcf6d1d79d4b0",()=>H.getFeaturePhaseTimings,"4079dd08e2b146ca610665c67cddfc85910e11ff96",()=>F.getResearchArtifact,"408951cdf9d60d3b3fcefa97ab36845c975e13a4e4",()=>g.importGitHubRepository,"40898ba147024a4b40f4df49859e6d350b878d9ebb",()=>I.getFeaturePlan,"409e7f6d9000f7ab91dd4401f2543b2147adb23f81",()=>u.archiveFeature,"40a1f322bacc7e0c123d20aab8420e1748e5b64122",()=>w.resumeFeature,"40b24aee2aecf831a00d0a5cc3cb639362e7914961",()=>K.getFeatureDrawerData,"40e6ab4f184a5112a8559554f64a38ed3e7a547d18",()=>E.getFeatureArtifact,"40f3651a25e60f770e01fc60830b4911e2491df322",()=>k.getDeploymentStatus,"40f3fde3affce8285dca5f685141bda496b2e45e0c",()=>l.openIde,"607d27ea5d212b8c03d6b47947a6b15a19782e2a95",()=>c.updateAgentAndModel,"60d63e7dfefdb2030633a5ce0b8a9ab911f2f5f1bf",()=>C.approveFeature,"7073a2a89f5bd1066886065e9d9135e30c71eb7d8a",()=>D.rejectFeature,"78e46dbafd792b86405e361f7de33fab8345767ddd",()=>v.deleteFeature],62284)},6714,a=>{a.v(a=>Promise.resolve().then(()=>a(2157)))},11105,a=>{a.v(a=>Promise.resolve().then(()=>a(50227)))},29718,a=>{a.v(b=>Promise.all(["server/chunks/ssr/0oyb_js-yaml_dist_js-yaml_mjs_0yiiuw.._.js"].map(b=>a.l(b))).then(()=>b(32996)))}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__0d_0_fp._.js.map