@shepai/cli 1.119.0 → 1.120.0-pr384.fdb89bb

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 (182) hide show
  1. package/dist/packages/core/src/application/ports/output/services/agent-deployment-service.interface.d.ts +46 -0
  2. package/dist/packages/core/src/application/ports/output/services/agent-deployment-service.interface.d.ts.map +1 -0
  3. package/dist/packages/core/src/application/ports/output/services/agent-deployment-service.interface.js +13 -0
  4. package/dist/packages/core/src/application/ports/output/services/deployment-service.interface.d.ts +9 -1
  5. package/dist/packages/core/src/application/ports/output/services/deployment-service.interface.d.ts.map +1 -1
  6. package/dist/packages/core/src/application/ports/output/services/dev-environment-agent.interface.d.ts +65 -0
  7. package/dist/packages/core/src/application/ports/output/services/dev-environment-agent.interface.d.ts.map +1 -0
  8. package/dist/packages/core/src/application/ports/output/services/dev-environment-agent.interface.js +14 -0
  9. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  10. package/dist/packages/core/src/infrastructure/di/container.js +19 -0
  11. package/dist/packages/core/src/infrastructure/services/deployment/agent-deployment.service.d.ts +30 -0
  12. package/dist/packages/core/src/infrastructure/services/deployment/agent-deployment.service.d.ts.map +1 -0
  13. package/dist/packages/core/src/infrastructure/services/deployment/agent-deployment.service.js +110 -0
  14. package/dist/packages/core/src/infrastructure/services/deployment/deployment.service.d.ts +6 -2
  15. package/dist/packages/core/src/infrastructure/services/deployment/deployment.service.d.ts.map +1 -1
  16. package/dist/packages/core/src/infrastructure/services/deployment/deployment.service.js +30 -13
  17. package/dist/packages/core/src/infrastructure/services/deployment/dev-environment-agent.service.d.ts +35 -0
  18. package/dist/packages/core/src/infrastructure/services/deployment/dev-environment-agent.service.d.ts.map +1 -0
  19. package/dist/packages/core/src/infrastructure/services/deployment/dev-environment-agent.service.js +210 -0
  20. package/dist/src/presentation/web/app/actions/deploy-feature.d.ts +2 -1
  21. package/dist/src/presentation/web/app/actions/deploy-feature.d.ts.map +1 -1
  22. package/dist/src/presentation/web/app/actions/deploy-feature.js +9 -6
  23. package/dist/src/presentation/web/app/actions/deploy-repository.d.ts +2 -1
  24. package/dist/src/presentation/web/app/actions/deploy-repository.d.ts.map +1 -1
  25. package/dist/src/presentation/web/app/actions/deploy-repository.js +9 -6
  26. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.d.ts.map +1 -1
  27. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.js +8 -3
  28. package/dist/tsconfig.build.tsbuildinfo +1 -1
  29. package/package.json +1 -1
  30. package/web/.next/BUILD_ID +1 -1
  31. package/web/.next/build-manifest.json +2 -2
  32. package/web/.next/fallback-build-manifest.json +2 -2
  33. package/web/.next/prerender-manifest.json +3 -3
  34. package/web/.next/required-server-files.js +3 -3
  35. package/web/.next/required-server-files.json +3 -3
  36. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +21 -21
  37. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
  38. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  39. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  40. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +27 -27
  41. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +1 -1
  42. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  43. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  44. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +27 -27
  45. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -1
  46. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  47. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  48. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +19 -19
  49. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
  50. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  51. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  52. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +21 -21
  53. package/web/.next/server/app/(dashboard)/create/page.js +1 -1
  54. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  55. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  56. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +27 -27
  57. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +1 -1
  58. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  59. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  60. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +27 -27
  61. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -1
  62. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  63. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  64. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +19 -19
  65. package/web/.next/server/app/(dashboard)/page.js +1 -1
  66. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  67. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  68. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +19 -19
  69. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
  70. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  71. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  72. package/web/.next/server/app/_global-error.html +2 -2
  73. package/web/.next/server/app/_global-error.rsc +1 -1
  74. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  75. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  76. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  77. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  78. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  79. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  80. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  81. package/web/.next/server/app/settings/page/server-reference-manifest.json +6 -6
  82. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  83. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  84. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  85. package/web/.next/server/app/skills/page.js +1 -2
  86. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  87. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  88. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  89. package/web/.next/server/app/tools/page.js +1 -2
  90. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  91. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  92. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  93. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  94. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  95. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  96. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  97. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_ed372306.js +1 -1
  98. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_ed372306.js.map +1 -1
  99. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_32e26434.js +1 -1
  100. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_32e26434.js.map +1 -1
  101. package/web/.next/server/chunks/ssr/[root-of-the-server]__0534f358._.js +4 -0
  102. package/web/.next/server/chunks/ssr/[root-of-the-server]__0534f358._.js.map +1 -0
  103. package/web/.next/server/chunks/ssr/[root-of-the-server]__06fef644._.js +1 -1
  104. package/web/.next/server/chunks/ssr/[root-of-the-server]__3b14e5a0._.js +1 -1
  105. package/web/.next/server/chunks/ssr/[root-of-the-server]__3b14e5a0._.js.map +1 -1
  106. package/web/.next/server/chunks/ssr/[root-of-the-server]__545792ab._.js +1 -1
  107. package/web/.next/server/chunks/ssr/[root-of-the-server]__545792ab._.js.map +1 -1
  108. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  109. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js.map +1 -1
  110. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js +2 -2
  111. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js.map +1 -1
  112. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  113. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js.map +1 -1
  114. package/web/.next/server/chunks/ssr/[root-of-the-server]__8b59c03e._.js +1 -1
  115. package/web/.next/server/chunks/ssr/[root-of-the-server]__8b59c03e._.js.map +1 -1
  116. package/web/.next/server/chunks/ssr/[root-of-the-server]__8c553503._.js +2 -2
  117. package/web/.next/server/chunks/ssr/[root-of-the-server]__994ad9fe._.js +1 -1
  118. package/web/.next/server/chunks/ssr/[root-of-the-server]__994ad9fe._.js.map +1 -1
  119. package/web/.next/server/chunks/ssr/[root-of-the-server]__997ccfcc._.js +4 -0
  120. package/web/.next/server/chunks/ssr/[root-of-the-server]__997ccfcc._.js.map +1 -0
  121. package/web/.next/server/chunks/ssr/[root-of-the-server]__a022445f._.js +2 -2
  122. package/web/.next/server/chunks/ssr/[root-of-the-server]__a022445f._.js.map +1 -1
  123. package/web/.next/server/chunks/ssr/[root-of-the-server]__a6c615b8._.js +3 -0
  124. package/web/.next/server/chunks/ssr/[root-of-the-server]__a6c615b8._.js.map +1 -0
  125. package/web/.next/server/chunks/ssr/[root-of-the-server]__c9c1cfee._.js +1 -1
  126. package/web/.next/server/chunks/ssr/[root-of-the-server]__c9c1cfee._.js.map +1 -1
  127. package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
  128. package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
  129. package/web/.next/server/chunks/ssr/_2f6f48b8._.js +1 -1
  130. package/web/.next/server/chunks/ssr/_2f6f48b8._.js.map +1 -1
  131. package/web/.next/server/chunks/ssr/{_aeb74a70._.js → _3b5f25fa._.js} +2 -2
  132. package/web/.next/server/chunks/ssr/{_aeb74a70._.js.map → _3b5f25fa._.js.map} +1 -1
  133. package/web/.next/server/chunks/ssr/_3c9e300b._.js +3 -0
  134. package/web/.next/server/chunks/ssr/{_59ae996e._.js.map → _3c9e300b._.js.map} +1 -1
  135. package/web/.next/server/chunks/ssr/{_bed4bbb9._.js → _83b11c33._.js} +2 -2
  136. package/web/.next/server/chunks/ssr/{_bed4bbb9._.js.map → _83b11c33._.js.map} +1 -1
  137. package/web/.next/server/chunks/ssr/_ab069e13._.js +1 -1
  138. package/web/.next/server/chunks/ssr/_ab069e13._.js.map +1 -1
  139. package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
  140. package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
  141. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  142. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  143. package/web/.next/server/chunks/ssr/src_presentation_web_0835b28e._.js +2 -2
  144. package/web/.next/server/chunks/ssr/src_presentation_web_0835b28e._.js.map +1 -1
  145. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_e99d78dd.js +1 -1
  146. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_e99d78dd.js.map +1 -1
  147. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
  148. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
  149. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  150. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  151. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  152. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  153. package/web/.next/server/chunks/ssr/src_presentation_web_e8034a29._.js +2 -2
  154. package/web/.next/server/chunks/ssr/src_presentation_web_e8034a29._.js.map +1 -1
  155. package/web/.next/server/pages/500.html +2 -2
  156. package/web/.next/server/server-reference-manifest.js +1 -1
  157. package/web/.next/server/server-reference-manifest.json +33 -33
  158. package/web/.next/static/chunks/06702284aedb4e13.js +1 -0
  159. package/web/.next/static/chunks/{2b35632c1b784fae.js → 2f9dcf87c0a9c513.js} +1 -1
  160. package/web/.next/static/chunks/{3678617c34576e18.js → 57063722dbce9768.js} +2 -2
  161. package/web/.next/static/chunks/{ed113fb744f2e4d8.js → 652d07e1b3da6fd3.js} +1 -1
  162. package/web/.next/static/chunks/{7c57a9143e66868c.js → 6e9701fc52697f2b.js} +1 -1
  163. package/web/.next/static/chunks/{619af41a8d3232e5.js → 71161130b2462279.js} +1 -1
  164. package/web/.next/static/chunks/{f3c4a7bb76c69b01.js → 720858e147830a1b.js} +1 -1
  165. package/web/.next/static/chunks/{c1a6934d2281c088.js → 7da5a2bd92f03feb.js} +1 -1
  166. package/web/.next/static/chunks/{30097f88cdf8fad8.js → 83e2aac7e244633a.js} +1 -1
  167. package/web/.next/static/chunks/9e8ebcb706d0ca6f.js +1 -0
  168. package/web/.next/static/chunks/{69c6d3ba1606e98d.js → f81995913dac5269.js} +1 -1
  169. package/web/.next/server/chunks/ssr/[root-of-the-server]__a7de2711._.js +0 -4
  170. package/web/.next/server/chunks/ssr/[root-of-the-server]__a7de2711._.js.map +0 -1
  171. package/web/.next/server/chunks/ssr/[root-of-the-server]__b724df9e._.js +0 -3
  172. package/web/.next/server/chunks/ssr/[root-of-the-server]__b724df9e._.js.map +0 -1
  173. package/web/.next/server/chunks/ssr/_59ae996e._.js +0 -3
  174. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +0 -3
  175. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +0 -1
  176. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +0 -3
  177. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +0 -1
  178. package/web/.next/static/chunks/1c5310cfde612b81.js +0 -1
  179. package/web/.next/static/chunks/c4477c532d2081e8.js +0 -1
  180. /package/web/.next/static/{qmHUdyRBvaVksgjcL6w-m → yAqHoeHdmindXxK6kOd6a}/_buildManifest.js +0 -0
  181. /package/web/.next/static/{qmHUdyRBvaVksgjcL6w-m → yAqHoeHdmindXxK6kOd6a}/_clientMiddlewareManifest.json +0 -0
  182. /package/web/.next/static/{qmHUdyRBvaVksgjcL6w-m → yAqHoeHdmindXxK6kOd6a}/_ssgManifest.js +0 -0
@@ -1,3 +1,3 @@
1
- module.exports=[76669,a=>{"use strict";var b=a.i(12513),c=a.i(94691),d=a.i(33841),e=a.i(46646),f=a.i(68670),g=a.i(85321),h=a.i(84095),i=a.i(56799),j=a.i(80496),k=a.i(41872),l=a.i(9959),m=a.i(23504),n=a.i(27900),o=a.i(50845),p=a.i(26604),q=a.i(54723),r=a.i(49560),s=a.i(39353),t=a.i(29207);a.s([],60544),a.i(60544),a.s(["000091d01c4c0addfba03a24acc2a50d2250ea644f",()=>k.isAgentSetupComplete,"0001aa3186d88ffd6a6ecc56b4e0a9291659773c55",()=>m.getAllAgentModels,"00b72044c095acd5ae935a6a82077d3017ffdb1e52",()=>l.checkAgentAuth,"00d33ce7fe440a4d4e55d65f865c1f22282142eb69",()=>b.pickFolder,"4014ab1b94b133351b1455fab9508732c54cfa4404",()=>j.openFolder,"4017aa4e8e7a621babeb50836c6ecea68032a1a223",()=>s.deleteRepository,"40192e8ab56a976d7b4ab02e5ac4e86b81844753c0",()=>c.getDeploymentLogs,"4023507b2023a0497138424d17b98825c8a34fea63",()=>t.getFeatureMetadata,"403b7d14d71a50b757c8522b059b3e4a5e38ca630f",()=>p.resumeFeature,"404482b612d7fe0416d9267ac8ae08eff97c415cb8",()=>q.startFeature,"407be534406b318f0e53b8cf725a013960c34c4eab",()=>e.deployRepository,"408ac7d206a1f4cb627a91f3253487c4ce8f30344b",()=>i.openShell,"40c56f5c3a822bb270b79ce59904bd1a4547ae8dd4",()=>d.deployFeature,"40d09eba9db80f1749ca75d8a81bf4ecfe354213f4",()=>r.addRepository,"40d59de3ebfc390247f9ec9e895121aa1e442bb248",()=>h.openIde,"40e8b017976f8965562a10c76df713c49c812175a5",()=>f.stopDeployment,"40edcd4f8ffa551f80627eea24794aeb5eb5b4bf1d",()=>g.getDeploymentStatus,"603ee219eebb20f5875fe7610d566307abd16e5c79",()=>n.updateAgentAndModel,"70c01a5598d1f60b9749f583a466fdd9c7149baf07",()=>o.deleteFeature],76669)}];
1
+ module.exports=[76669,a=>{"use strict";var b=a.i(12513),c=a.i(94691),d=a.i(33841),e=a.i(46646),f=a.i(68670),g=a.i(85321),h=a.i(84095),i=a.i(56799),j=a.i(80496),k=a.i(41872),l=a.i(9959),m=a.i(23504),n=a.i(27900),o=a.i(50845),p=a.i(26604),q=a.i(54723),r=a.i(49560),s=a.i(39353),t=a.i(29207);a.s([],60544),a.i(60544),a.s(["0026787ec1e26204b385cf2d8829971f31731575c7",()=>m.getAllAgentModels,"006ea961d0fb499419e9de0ba98178b8e50367c758",()=>l.checkAgentAuth,"00e351d52aa0fc298d580a51e14d08eba19a6d4fd6",()=>k.isAgentSetupComplete,"00f2a80e98ccea49289178a0b2a8e041f1f5fb2eda",()=>b.pickFolder,"400f382e754893ef7f625a7bb96d1d3da8bba0b052",()=>g.getDeploymentStatus,"401d5db9bd7e00fc6d79b90b02d50afb4cc3ce46c5",()=>d.deployFeature,"401f55df1c356a3053016614e14b5f0621ec4bfa7b",()=>q.startFeature,"40233b80cbd11e675eed016c8ab30f846ca80e5504",()=>e.deployRepository,"404a7c6ec1fc090fa574119b89572cfd951c582bf8",()=>p.resumeFeature,"405e48f16b0263c1f34855e8b0a28369f795eeb95f",()=>r.addRepository,"406c7dad4e4e7a9bf191cdcbffb50b4570e67b70ac",()=>i.openShell,"408f7a8f76860c5d2dc17174dd1f89730f0cb393a7",()=>t.getFeatureMetadata,"409f1b66b364cc5ea274b85ec39a7db3b55f53281c",()=>f.stopDeployment,"40cac3df4e85e3632bd5763a86ee786747135dc5de",()=>c.getDeploymentLogs,"40cee20ed1ba913678be0a3317eff97f5b73e8ceab",()=>s.deleteRepository,"40d252e6bbee76ccea0b57a6a387ee68aaa67d351c",()=>j.openFolder,"40f9345fc3305fa0bd7617f1bcdf398934e316d53c",()=>h.openIde,"601b2acfbb901c8e04c71456531c62411d15177229",()=>n.updateAgentAndModel,"70ee50841b29d2983f8f06f3b2ca1b8e5d57099fd3",()=>o.deleteFeature],76669)}];
2
2
 
3
3
  //# sourceMappingURL=8ba4b_server_app_%28dashboard%29_repository_%5BrepositoryId%5D_page_actions_32e26434.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../src/presentation/web/.next-internal/server/app/%28dashboard%29/repository/%5BrepositoryId%5D/page/actions.js%20%28server%20actions%20loader%29"],"sourcesContent":["export {pickFolder as '00d33ce7fe440a4d4e55d65f865c1f22282142eb69'} from 'ACTIONS_MODULE0'\nexport {getDeploymentLogs as '40192e8ab56a976d7b4ab02e5ac4e86b81844753c0'} from 'ACTIONS_MODULE1'\nexport {deployFeature as '40c56f5c3a822bb270b79ce59904bd1a4547ae8dd4'} from 'ACTIONS_MODULE2'\nexport {deployRepository as '407be534406b318f0e53b8cf725a013960c34c4eab'} from 'ACTIONS_MODULE3'\nexport {stopDeployment as '40e8b017976f8965562a10c76df713c49c812175a5'} from 'ACTIONS_MODULE4'\nexport {getDeploymentStatus as '40edcd4f8ffa551f80627eea24794aeb5eb5b4bf1d'} from 'ACTIONS_MODULE5'\nexport {openIde as '40d59de3ebfc390247f9ec9e895121aa1e442bb248'} from 'ACTIONS_MODULE6'\nexport {openShell as '408ac7d206a1f4cb627a91f3253487c4ce8f30344b'} from 'ACTIONS_MODULE7'\nexport {openFolder as '4014ab1b94b133351b1455fab9508732c54cfa4404'} from 'ACTIONS_MODULE8'\nexport {isAgentSetupComplete as '000091d01c4c0addfba03a24acc2a50d2250ea644f'} from 'ACTIONS_MODULE9'\nexport {checkAgentAuth as '00b72044c095acd5ae935a6a82077d3017ffdb1e52'} from 'ACTIONS_MODULE10'\nexport {getAllAgentModels as '0001aa3186d88ffd6a6ecc56b4e0a9291659773c55'} from 'ACTIONS_MODULE11'\nexport {updateAgentAndModel as '603ee219eebb20f5875fe7610d566307abd16e5c79'} from 'ACTIONS_MODULE12'\nexport {deleteFeature as '70c01a5598d1f60b9749f583a466fdd9c7149baf07'} from 'ACTIONS_MODULE13'\nexport {resumeFeature as '403b7d14d71a50b757c8522b059b3e4a5e38ca630f'} from 'ACTIONS_MODULE14'\nexport {startFeature as '404482b612d7fe0416d9267ac8ae08eff97c415cb8'} from 'ACTIONS_MODULE15'\nexport {addRepository as '40d09eba9db80f1749ca75d8a81bf4ecfe354213f4'} from 'ACTIONS_MODULE16'\nexport {deleteRepository as '4017aa4e8e7a621babeb50836c6ecea68032a1a223'} from 'ACTIONS_MODULE17'\nexport {getFeatureMetadata as '4023507b2023a0497138424d17b98825c8a34fea63'} from 'ACTIONS_MODULE18'\n"],"names":[],"mappings":"uCAAA,IAAA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,MACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA"}
1
+ {"version":3,"sources":["../../../../../../../src/presentation/web/.next-internal/server/app/%28dashboard%29/repository/%5BrepositoryId%5D/page/actions.js%20%28server%20actions%20loader%29"],"sourcesContent":["export {pickFolder as '00f2a80e98ccea49289178a0b2a8e041f1f5fb2eda'} from 'ACTIONS_MODULE0'\nexport {getDeploymentLogs as '40cac3df4e85e3632bd5763a86ee786747135dc5de'} from 'ACTIONS_MODULE1'\nexport {deployFeature as '401d5db9bd7e00fc6d79b90b02d50afb4cc3ce46c5'} from 'ACTIONS_MODULE2'\nexport {deployRepository as '40233b80cbd11e675eed016c8ab30f846ca80e5504'} from 'ACTIONS_MODULE3'\nexport {stopDeployment as '409f1b66b364cc5ea274b85ec39a7db3b55f53281c'} from 'ACTIONS_MODULE4'\nexport {getDeploymentStatus as '400f382e754893ef7f625a7bb96d1d3da8bba0b052'} from 'ACTIONS_MODULE5'\nexport {openIde as '40f9345fc3305fa0bd7617f1bcdf398934e316d53c'} from 'ACTIONS_MODULE6'\nexport {openShell as '406c7dad4e4e7a9bf191cdcbffb50b4570e67b70ac'} from 'ACTIONS_MODULE7'\nexport {openFolder as '40d252e6bbee76ccea0b57a6a387ee68aaa67d351c'} from 'ACTIONS_MODULE8'\nexport {isAgentSetupComplete as '00e351d52aa0fc298d580a51e14d08eba19a6d4fd6'} from 'ACTIONS_MODULE9'\nexport {checkAgentAuth as '006ea961d0fb499419e9de0ba98178b8e50367c758'} from 'ACTIONS_MODULE10'\nexport {getAllAgentModels as '0026787ec1e26204b385cf2d8829971f31731575c7'} from 'ACTIONS_MODULE11'\nexport {updateAgentAndModel as '601b2acfbb901c8e04c71456531c62411d15177229'} from 'ACTIONS_MODULE12'\nexport {deleteFeature as '70ee50841b29d2983f8f06f3b2ca1b8e5d57099fd3'} from 'ACTIONS_MODULE13'\nexport {resumeFeature as '404a7c6ec1fc090fa574119b89572cfd951c582bf8'} from 'ACTIONS_MODULE14'\nexport {startFeature as '401f55df1c356a3053016614e14b5f0621ec4bfa7b'} from 'ACTIONS_MODULE15'\nexport {addRepository as '405e48f16b0263c1f34855e8b0a28369f795eeb95f'} from 'ACTIONS_MODULE16'\nexport {deleteRepository as '40cee20ed1ba913678be0a3317eff97f5b73e8ceab'} from 'ACTIONS_MODULE17'\nexport {getFeatureMetadata as '408f7a8f76860c5d2dc17174dd1f89730f0cb393a7'} from 'ACTIONS_MODULE18'\n"],"names":[],"mappings":"uCAAA,IAAA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,MACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA"}
@@ -0,0 +1,4 @@
1
+ module.exports=[74533,(a,b,c)=>{b.exports=a.x("node:child_process",()=>require("node:child_process"))},92658,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"registerServerReference",{enumerable:!0,get:function(){return d.registerServerReference}});let d=a.r(28478)},12581,(a,b,c)=>{"use strict";function d(a){for(let b=0;b<a.length;b++){let c=a[b];if("function"!=typeof c)throw Object.defineProperty(Error(`A "use server" file can only export async functions, found ${typeof c}.
2
+ Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"ensureServerEntryExports",{enumerable:!0,get:function(){return d}})},12513,a=>{"use strict";var b=a.i(92658),c=a.i(74533);let d={platform:process.platform,exec:(a,b)=>(0,c.execSync)(a,b)},e={darwin:"osascript -e 'POSIX path of (choose folder with prompt \"Select a repository folder\")'",linux:'zenity --file-selection --directory --title="Select a repository folder" 2>/dev/null',win32:"powershell -NoProfile -Command \"Add-Type -AssemblyName System.Windows.Forms; $f = New-Object System.Windows.Forms.FolderBrowserDialog; $f.Description = 'Select a repository folder'; if ($f.ShowDialog() -eq 'OK') { $f.SelectedPath } else { exit 1 }\""};class f{deps;constructor(a={}){this.deps={...d,...a}}getCommand(){return e[this.deps.platform]??null}pickFolder(){let a=this.getCommand();if(!a)throw Error(`Unsupported platform: ${this.deps.platform}`);try{let b=this.deps.exec(a,{encoding:"utf-8",timeout:6e4}).trim();return b.length>0?b:null}catch(a){var b;if("object"==typeof(b=a)&&null!==b&&"status"in b&&1===a.status)return null;throw a}}}async function g(){let a=new f;try{return{path:a.pickFolder()}}catch(a){return{path:null,error:a instanceof Error?a.message:"Failed to open folder dialog"}}}(0,a.i(12581).ensureServerEntryExports)([g]),(0,b.registerServerReference)(g,"00f2a80e98ccea49289178a0b2a8e041f1f5fb2eda",null),a.s(["pickFolder",()=>g],12513)},96380,a=>{"use strict";function b(a){let b=globalThis.__shepContainer;if(!b)throw Error("DI container not available. Ensure the CLI bootstrap or dev-server has initialized it.");return b.resolve(a)}a.s(["resolve",()=>b])},2157,(a,b,c)=>{b.exports=a.x("node:fs",()=>require("node:fs"))},12714,(a,b,c)=>{b.exports=a.x("node:fs/promises",()=>require("node:fs/promises"))},50227,(a,b,c)=>{b.exports=a.x("node:path",()=>require("node:path"))},60526,(a,b,c)=>{b.exports=a.x("node:os",()=>require("node:os"))},32278,a=>{"use strict";a.i(12714);var b=a.i(60526),c=a.i(50227);function d(){return process.env.SHEP_HOME??(0,c.join)((0,b.homedir)(),".shep")}a.i(2157),a.s(["getShepHomeDir",()=>d])},66680,(a,b,c)=>{b.exports=a.x("node:crypto",()=>require("node:crypto"))},94691,29918,33841,46646,68670,85321,a=>{"use strict";var b=a.i(92658),c=a.i(96380),d=a.i(12581);async function e(a){return a?.trim()?(0,c.resolve)("IDeploymentService").getLogs(a):null}(0,d.ensureServerEntryExports)([e]),(0,b.registerServerReference)(e,"40cac3df4e85e3632bd5763a86ee786747135dc5de",null),a.s(["getDeploymentLogs",()=>e],94691);var f=a.i(2157);let g=()=>void 0;function h(a){let b=!!process.env.DEBUG;return{info:b?(...b)=>console.info(a,...b):g,debug:b?(...b)=>console.debug(a,...b):g,warn:(...b)=>console.warn(a,...b),error:(...b)=>console.error(a,...b)}}var i=a.i(66680),j=a.i(50227),k=a.i(32278);function l(a,b){let c=a.replace(/\\/g,"/"),d=(0,i.createHash)("sha256").update(c).digest("hex").slice(0,16),e=b.replace(/\//g,"-");return(0,j.join)((0,k.getShepHomeDir)(),"repos",d,"wt",e).replace(/\\/g,"/")}a.s(["computeWorktreePath",()=>l],29918);let m=h("[deployFeature]");async function n(a){if(m.info(`called — featureId="${a}"`),!a?.trim())return m.warn("rejected — featureId is empty"),{success:!1,error:"featureId is required"};try{let b=(0,c.resolve)("IFeatureRepository"),d=await b.findById(a);if(!d)return m.warn(`feature not found in repository: "${a}"`),{success:!1,error:`Feature not found: ${a}`};m.info(`feature found — repositoryPath="${d.repositoryPath}", branch="${d.branch}"`);let e=l(d.repositoryPath,d.branch);if(m.info(`computed worktreePath="${e}"`),!(0,f.existsSync)(e))return m.warn(`worktree path does not exist on disk: "${e}"`),{success:!1,error:`Worktree path does not exist: ${e}`};m.info("worktree path exists, calling agentDeploymentService.deploy()");let g=(0,c.resolve)("IAgentDeploymentService"),h=await g.deploy(a,e);if(!h.success)return m.warn(`agent deployment returned not-deployable: ${h.error}`),{success:!1,error:h.error,reason:h.analysis?.reason};return m.info("deploy() returned successfully — state=Booting"),{success:!0,state:h.state}}catch(b){let a=b instanceof Error?b.message:"Failed to deploy feature";return m.error(`error: ${a}`,b),{success:!1,error:a}}}(0,d.ensureServerEntryExports)([n]),(0,b.registerServerReference)(n,"401d5db9bd7e00fc6d79b90b02d50afb4cc3ce46c5",null),a.s(["deployFeature",()=>n],33841);let o=h("[deployRepository]");async function p(a){if(o.info(`called — repositoryPath="${a}"`),!a||!(0,j.isAbsolute)(a))return o.warn("rejected — not an absolute path"),{success:!1,error:"repositoryPath must be an absolute path"};try{if(!(0,f.existsSync)(a))return o.warn(`directory does not exist: "${a}"`),{success:!1,error:`Directory does not exist: ${a}`};o.info("directory exists, calling agentDeploymentService.deploy()");let b=(0,c.resolve)("IAgentDeploymentService"),d=await b.deploy(a,a);if(!d.success)return o.warn(`agent deployment returned not-deployable: ${d.error}`),{success:!1,error:d.error,reason:d.analysis?.reason};return o.info("deploy() returned successfully — state=Booting"),{success:!0,state:d.state}}catch(b){let a=b instanceof Error?b.message:"Failed to deploy repository";return o.error(`error: ${a}`,b),{success:!1,error:a}}}async function q(a){if(!a?.trim())return{success:!1,error:"targetId is required"};try{let b=(0,c.resolve)("IDeploymentService");return await b.stop(a),{success:!0}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to stop deployment"}}}async function r(a){return a?.trim()?(0,c.resolve)("IDeploymentService").getStatus(a):null}(0,d.ensureServerEntryExports)([p]),(0,b.registerServerReference)(p,"40233b80cbd11e675eed016c8ab30f846ca80e5504",null),a.s(["deployRepository",()=>p],46646),(0,d.ensureServerEntryExports)([q]),(0,b.registerServerReference)(q,"409f1b66b364cc5ea274b85ec39a7db3b55f53281c",null),a.s(["stopDeployment",()=>q],68670),(0,d.ensureServerEntryExports)([r]),(0,b.registerServerReference)(r,"400f382e754893ef7f625a7bb96d1d3da8bba0b052",null),a.s(["getDeploymentStatus",()=>r],85321)},87596,a=>{"use strict";var b=a.i(12513),c=a.i(94691),d=a.i(33841),e=a.i(46646),f=a.i(68670),g=a.i(85321);a.s([],78455),a.i(78455),a.s(["00f2a80e98ccea49289178a0b2a8e041f1f5fb2eda",()=>b.pickFolder,"400f382e754893ef7f625a7bb96d1d3da8bba0b052",()=>g.getDeploymentStatus,"401d5db9bd7e00fc6d79b90b02d50afb4cc3ce46c5",()=>d.deployFeature,"40233b80cbd11e675eed016c8ab30f846ca80e5504",()=>e.deployRepository,"409f1b66b364cc5ea274b85ec39a7db3b55f53281c",()=>f.stopDeployment,"40cac3df4e85e3632bd5763a86ee786747135dc5de",()=>c.getDeploymentLogs],87596)}];
3
+
4
+ //# sourceMappingURL=%5Broot-of-the-server%5D__0534f358._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/build/webpack/loaders/next-flight-loader/server-reference.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/build/webpack/loaders/next-flight-loader/action-validate.ts","../../../../../../../packages/core/src/infrastructure/services/folder-dialog.service.ts","../../../../../../../src/presentation/web/app/actions/pick-folder.ts","../../../../../../../src/presentation/web/lib/server-container.ts","../../../../../../../packages/core/src/infrastructure/services/filesystem/shep-directory.service.ts","../../../../../../../src/presentation/web/app/actions/get-deployment-logs.ts","../../../../../../../src/presentation/web/app/actions/deploy-feature.ts","../../../../../../../packages/core/src/infrastructure/services/deployment/deployment-logger.ts","../../../../../../../packages/core/src/infrastructure/services/ide-launchers/compute-worktree-path.ts","../../../../../../../src/presentation/web/app/actions/deploy-repository.ts","../../../../../../../src/presentation/web/app/actions/stop-deployment.ts","../../../../../../../src/presentation/web/app/actions/get-deployment-status.ts","../../../../../../../src/presentation/web/.next-internal/server/app/skills/page/actions.js%20%28server%20actions%20loader%29"],"sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\nexport { registerServerReference } from 'react-server-dom-webpack/server'\n","// This function ensures that all the exported values are valid server actions,\n// during the runtime. By definition all actions are required to be async\n// functions, but here we can only check that they are functions.\nexport function ensureServerEntryExports(actions: any[]) {\n for (let i = 0; i < actions.length; i++) {\n const action = actions[i]\n if (typeof action !== 'function') {\n throw new Error(\n `A \"use server\" file can only export async functions, found ${typeof action}.\\nRead more: https://nextjs.org/docs/messages/invalid-use-server-value`\n )\n }\n }\n}\n","import { execSync } from 'node:child_process';\n\nexport interface FolderDialogDeps {\n platform: NodeJS.Platform;\n exec: (cmd: string, opts?: { encoding: BufferEncoding; timeout?: number }) => string;\n}\n\nconst defaultDeps: FolderDialogDeps = {\n platform: process.platform,\n exec: (cmd, opts) => execSync(cmd, opts) as unknown as string,\n};\n\n/**\n * Platform-specific commands that open a native OS folder picker dialog.\n * Each returns the chosen absolute folder path on stdout, or exits non-zero / returns empty on cancel.\n */\nconst PLATFORM_COMMANDS: Record<string, string> = {\n darwin: `osascript -e 'POSIX path of (choose folder with prompt \"Select a repository folder\")'`,\n linux: `zenity --file-selection --directory --title=\"Select a repository folder\" 2>/dev/null`,\n win32: `powershell -NoProfile -Command \"Add-Type -AssemblyName System.Windows.Forms; $f = New-Object System.Windows.Forms.FolderBrowserDialog; $f.Description = 'Select a repository folder'; if ($f.ShowDialog() -eq 'OK') { $f.SelectedPath } else { exit 1 }\"`,\n};\n\nexport class FolderDialogService {\n private deps: FolderDialogDeps;\n\n constructor(deps: Partial<FolderDialogDeps> = {}) {\n this.deps = { ...defaultDeps, ...deps };\n }\n\n /** Returns the OS-specific command string, or null if the platform is unsupported. */\n getCommand(): string | null {\n return PLATFORM_COMMANDS[this.deps.platform] ?? null;\n }\n\n /**\n * Opens a native folder picker dialog and returns the selected absolute path.\n * Returns `null` if the user cancels the dialog.\n * Throws if the platform is unsupported or the command fails unexpectedly.\n */\n pickFolder(): string | null {\n const command = this.getCommand();\n if (!command) {\n throw new Error(`Unsupported platform: ${this.deps.platform}`);\n }\n\n try {\n const result = this.deps.exec(command, { encoding: 'utf-8', timeout: 60_000 });\n const trimmed = result.trim();\n return trimmed.length > 0 ? trimmed : null;\n } catch (error: unknown) {\n // User cancelled the dialog — exit code 1 from osascript/zenity/powershell\n if (isExecError(error) && error.status === 1) {\n return null;\n }\n throw error;\n }\n }\n}\n\nfunction isExecError(error: unknown): error is { status: number } {\n return typeof error === 'object' && error !== null && 'status' in error;\n}\n","'use server';\n\nimport { FolderDialogService } from '@shepai/core/infrastructure/services/folder-dialog.service';\n\nexport async function pickFolder(): Promise<{ path: string | null; error?: string }> {\n const service = new FolderDialogService();\n\n try {\n const path = service.pickFolder();\n return { path };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to open folder dialog';\n return { path: null, error: message };\n }\n}\n","/**\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 (`shep ui`) or the dev-server (`pnpm dev:web`).\n */\n\nimport type { DependencyContainer, InjectionToken } from 'tsyringe';\n\nconst CONTAINER_KEY = '__shepContainer';\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 '@shepai/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","/**\n * Shep Directory Service\n *\n * Manages the ~/.shep/ directory for global settings and data storage.\n * Ensures directory exists with correct permissions before database operations.\n *\n * Supports SHEP_HOME env var for test isolation (overrides default ~/.shep/).\n */\n\nimport { mkdir } from 'node:fs/promises';\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\nimport { existsSync } from 'node:fs';\n\n/**\n * Resolves the Shep home directory.\n * Respects SHEP_HOME env var for test isolation, falls back to ~/.shep/\n */\nfunction resolveShepHomeDir(): string {\n return process.env.SHEP_HOME ?? join(homedir(), '.shep');\n}\n\n/**\n * Gets the path to the Shep home directory.\n * Uses SHEP_HOME env var if set, otherwise ~/.shep/\n *\n * @returns Path to shep home directory\n */\nexport function getShepHomeDir(): string {\n return resolveShepHomeDir();\n}\n\n/**\n * Gets the path to the SQLite database file.\n *\n * @returns Path to the database file\n */\nexport function getShepDbPath(): string {\n return join(resolveShepHomeDir(), 'data');\n}\n\n/**\n * Gets the path to the daemon state file.\n * Uses SHEP_HOME env var if set (for test isolation), otherwise ~/.shep/daemon.json\n *\n * @returns Path to daemon.json\n */\nexport function getDaemonStatePath(): string {\n return join(resolveShepHomeDir(), 'daemon.json');\n}\n\n/**\n * Gets the path to the daemon log file.\n * Uses SHEP_HOME env var if set (for test isolation), otherwise ~/.shep/daemon.log\n *\n * @returns Path to daemon.log\n */\nexport function getDaemonLogPath(): string {\n return join(resolveShepHomeDir(), 'daemon.log');\n}\n\n/**\n * Ensures the shep home directory exists with correct permissions.\n * Creates the directory if it doesn't exist.\n * Safe to call multiple times (idempotent).\n *\n * Permissions: 700 (rwx------) - only owner can read/write/execute\n *\n * @throws Error if directory cannot be created (permissions, disk space, etc.)\n */\nexport async function ensureShepDirectory(): Promise<void> {\n const shepDir = resolveShepHomeDir();\n\n if (existsSync(shepDir)) {\n return;\n }\n\n try {\n await mkdir(shepDir, {\n recursive: true,\n mode: 0o700,\n });\n } catch (error) {\n throw new Error(\n `Failed to create Shep directory at ${shepDir}: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type {\n IDeploymentService,\n LogEntry,\n} from '@shepai/core/application/ports/output/services/deployment-service.interface';\n\nexport async function getDeploymentLogs(targetId: string): Promise<LogEntry[] | null> {\n if (!targetId?.trim()) {\n return null;\n }\n\n const deploymentService = resolve<IDeploymentService>('IDeploymentService');\n return deploymentService.getLogs(targetId);\n}\n","'use server';\n\nimport { existsSync } from 'node:fs';\nimport { resolve } from '@/lib/server-container';\nimport { createDeploymentLogger } from '@shepai/core/infrastructure/services/deployment/deployment-logger';\nimport { computeWorktreePath } from '@shepai/core/infrastructure/services/ide-launchers/compute-worktree-path';\nimport type { IFeatureRepository } from '@shepai/core/application/ports/output/repositories/feature-repository.interface';\nimport type { IAgentDeploymentService } from '@shepai/core/application/ports/output/services/agent-deployment-service.interface';\nimport type { DeploymentState } from '@shepai/core/domain/generated/output';\n\nconst log = createDeploymentLogger('[deployFeature]');\n\nexport async function deployFeature(\n featureId: string\n): Promise<{ success: boolean; error?: string; state?: DeploymentState; reason?: string }> {\n log.info(`called — featureId=\"${featureId}\"`);\n\n if (!featureId?.trim()) {\n log.warn('rejected — featureId is empty');\n return { success: false, error: 'featureId is required' };\n }\n\n try {\n const featureRepo = resolve<IFeatureRepository>('IFeatureRepository');\n const feature = await featureRepo.findById(featureId);\n\n if (!feature) {\n log.warn(`feature not found in repository: \"${featureId}\"`);\n return { success: false, error: `Feature not found: ${featureId}` };\n }\n\n log.info(\n `feature found — repositoryPath=\"${feature.repositoryPath}\", branch=\"${feature.branch}\"`\n );\n\n const worktreePath = computeWorktreePath(feature.repositoryPath, feature.branch);\n log.info(`computed worktreePath=\"${worktreePath}\"`);\n\n if (!existsSync(worktreePath)) {\n log.warn(`worktree path does not exist on disk: \"${worktreePath}\"`);\n return { success: false, error: `Worktree path does not exist: ${worktreePath}` };\n }\n\n log.info('worktree path exists, calling agentDeploymentService.deploy()');\n const agentDeploymentService = resolve<IAgentDeploymentService>('IAgentDeploymentService');\n const result = await agentDeploymentService.deploy(featureId, worktreePath);\n\n if (!result.success) {\n log.warn(`agent deployment returned not-deployable: ${result.error}`);\n return { success: false, error: result.error, reason: result.analysis?.reason };\n }\n\n log.info('deploy() returned successfully — state=Booting');\n return { success: true, state: result.state };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to deploy feature';\n log.error(`error: ${message}`, error);\n return { success: false, error: message };\n }\n}\n","/* eslint-disable no-console */\n\n/**\n * Debug-gated logger for deployment services.\n *\n * - `info` and `debug` only emit when `process.env.DEBUG` is set.\n * - `warn` and `error` always emit (they indicate real problems).\n */\n\nconst noop = () => undefined;\n\nexport function createDeploymentLogger(prefix: string) {\n const isDebug = !!process.env.DEBUG;\n\n return {\n info: isDebug ? (...args: unknown[]) => console.info(prefix, ...args) : noop,\n debug: isDebug ? (...args: unknown[]) => console.debug(prefix, ...args) : noop,\n warn: (...args: unknown[]) => console.warn(prefix, ...args),\n error: (...args: unknown[]) => console.error(prefix, ...args),\n };\n}\n","/**\n * Compute Worktree Path\n *\n * Pure utility that computes the filesystem path for a feature's git worktree\n * given a repository path and branch name.\n *\n * Path format: ~/.shep/repos/<sha256-hash-prefix>/wt/<branch-slug>\n */\n\nimport { createHash } from 'node:crypto';\nimport { join } from 'node:path';\nimport { getShepHomeDir } from '../filesystem/shep-directory.service';\n\n/**\n * Compute the worktree path for a given repository and branch.\n *\n * @param repoPath - Absolute path to the repository\n * @param branch - Git branch name (slashes are replaced with hyphens)\n * @returns Absolute path to the worktree directory under ~/.shep/repos/\n */\nexport function computeWorktreePath(repoPath: string, branch: string): string {\n // Normalize separators before hashing so C:\\foo and C:/foo produce the same hash\n const normalizedRepoPath = repoPath.replace(/\\\\/g, '/');\n const repoHash = createHash('sha256').update(normalizedRepoPath).digest('hex').slice(0, 16);\n const slug = branch.replace(/\\//g, '-');\n return join(getShepHomeDir(), 'repos', repoHash, 'wt', slug).replace(/\\\\/g, '/');\n}\n","'use server';\n\nimport { existsSync } from 'node:fs';\nimport { isAbsolute } from 'node:path';\nimport { resolve } from '@/lib/server-container';\nimport { createDeploymentLogger } from '@shepai/core/infrastructure/services/deployment/deployment-logger';\nimport type { IAgentDeploymentService } from '@shepai/core/application/ports/output/services/agent-deployment-service.interface';\nimport type { DeploymentState } from '@shepai/core/domain/generated/output';\n\nconst log = createDeploymentLogger('[deployRepository]');\n\nexport async function deployRepository(\n repositoryPath: string\n): Promise<{ success: boolean; error?: string; state?: DeploymentState; reason?: string }> {\n log.info(`called — repositoryPath=\"${repositoryPath}\"`);\n\n if (!repositoryPath || !isAbsolute(repositoryPath)) {\n log.warn('rejected — not an absolute path');\n return { success: false, error: 'repositoryPath must be an absolute path' };\n }\n\n try {\n if (!existsSync(repositoryPath)) {\n log.warn(`directory does not exist: \"${repositoryPath}\"`);\n return { success: false, error: `Directory does not exist: ${repositoryPath}` };\n }\n\n log.info('directory exists, calling agentDeploymentService.deploy()');\n const agentDeploymentService = resolve<IAgentDeploymentService>('IAgentDeploymentService');\n const result = await agentDeploymentService.deploy(repositoryPath, repositoryPath);\n\n if (!result.success) {\n log.warn(`agent deployment returned not-deployable: ${result.error}`);\n return { success: false, error: result.error, reason: result.analysis?.reason };\n }\n\n log.info('deploy() returned successfully — state=Booting');\n return { success: true, state: result.state };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to deploy repository';\n log.error(`error: ${message}`, error);\n return { success: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { IDeploymentService } from '@shepai/core/application/ports/output/services/deployment-service.interface';\n\nexport async function stopDeployment(\n targetId: string\n): Promise<{ success: boolean; error?: string }> {\n if (!targetId?.trim()) {\n return { success: false, error: 'targetId is required' };\n }\n\n try {\n const deploymentService = resolve<IDeploymentService>('IDeploymentService');\n await deploymentService.stop(targetId);\n\n return { success: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to stop deployment';\n return { success: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type {\n IDeploymentService,\n DeploymentStatus,\n} from '@shepai/core/application/ports/output/services/deployment-service.interface';\n\nexport async function getDeploymentStatus(targetId: string): Promise<DeploymentStatus | null> {\n if (!targetId?.trim()) {\n return null;\n }\n\n const deploymentService = resolve<IDeploymentService>('IDeploymentService');\n return deploymentService.getStatus(targetId);\n}\n","export {pickFolder as '00f2a80e98ccea49289178a0b2a8e041f1f5fb2eda'} from 'ACTIONS_MODULE0'\nexport {getDeploymentLogs as '40cac3df4e85e3632bd5763a86ee786747135dc5de'} from 'ACTIONS_MODULE1'\nexport {deployFeature as '401d5db9bd7e00fc6d79b90b02d50afb4cc3ce46c5'} from 'ACTIONS_MODULE2'\nexport {deployRepository as '40233b80cbd11e675eed016c8ab30f846ca80e5504'} from 'ACTIONS_MODULE3'\nexport {stopDeployment as '409f1b66b364cc5ea274b85ec39a7db3b55f53281c'} from 'ACTIONS_MODULE4'\nexport {getDeploymentStatus as '400f382e754893ef7f625a7bb96d1d3da8bba0b052'} from 'ACTIONS_MODULE5'\n"],"names":["registerServerReference","ensureServerEntryExports","actions","i","length","action","Error"],"mappings":"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","ignoreList":[0,1]}
@@ -1,3 +1,3 @@
1
- module.exports=[60526,(a,b,c)=>{b.exports=a.x("node:os",()=>require("node:os"))},96380,a=>{"use strict";function b(a){let b=globalThis.__shepContainer;if(!b)throw Error("DI container not available. Ensure the CLI bootstrap or dev-server has initialized it.");return b.resolve(a)}a.s(["resolve",()=>b])},93695,(a,b,c)=>{b.exports=a.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},47407,a=>{a.n(a.i(5983))},59975,a=>{a.n(a.i(72884))},63754,a=>{a.n(a.i(39838))},27075,a=>{a.n(a.i(26048))},37458,a=>{a.n(a.i(72330))},32459,a=>{"use strict";a.s(["default",()=>b]);let b=(0,a.i(28478).registerClientReference)(function(){throw Error("Attempted to call the default export of [project]/src/presentation/web/components/features/version/version-page-client.tsx <module evaluation> from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/presentation/web/components/features/version/version-page-client.tsx <module evaluation>","default")},93933,a=>{"use strict";a.s(["default",()=>b]);let b=(0,a.i(28478).registerClientReference)(function(){throw Error("Attempted to call the default export of [project]/src/presentation/web/components/features/version/version-page-client.tsx from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/presentation/web/components/features/version/version-page-client.tsx","default")},67651,a=>{"use strict";a.i(32459);var b=a.i(93933);a.n(b)},77048,a=>{"use strict";var b=a.i(92807),c=a.i(60526),d=a.i(96380),e=a.i(67651);function f(){let a=function(){try{let{version:a,name:b,description:c}=(0,d.resolve)("IVersionService").getVersion();return{version:a,name:b,description:c,branch:"main",commitHash:"26710a29d9c598f0de15077f3c914b0f83925378"}}catch{return{version:"1.118.0",name:"@shepai/cli",description:"Autonomous AI Native SDLC Platform - Automate the development cycle from idea to deploy",branch:"main",commitHash:"26710a29d9c598f0de15077f3c914b0f83925378"}}}(),f={nodeVersion:process.version,platform:(0,c.platform)(),arch:(0,c.arch)()};return(0,b.jsx)(e.default,{versionInfo:a,systemInfo:f})}a.s(["default",()=>f],77048)}];
1
+ module.exports=[60526,(a,b,c)=>{b.exports=a.x("node:os",()=>require("node:os"))},96380,a=>{"use strict";function b(a){let b=globalThis.__shepContainer;if(!b)throw Error("DI container not available. Ensure the CLI bootstrap or dev-server has initialized it.");return b.resolve(a)}a.s(["resolve",()=>b])},93695,(a,b,c)=>{b.exports=a.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},47407,a=>{a.n(a.i(5983))},59975,a=>{a.n(a.i(72884))},63754,a=>{a.n(a.i(39838))},27075,a=>{a.n(a.i(26048))},37458,a=>{a.n(a.i(72330))},32459,a=>{"use strict";a.s(["default",()=>b]);let b=(0,a.i(28478).registerClientReference)(function(){throw Error("Attempted to call the default export of [project]/src/presentation/web/components/features/version/version-page-client.tsx <module evaluation> from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/presentation/web/components/features/version/version-page-client.tsx <module evaluation>","default")},93933,a=>{"use strict";a.s(["default",()=>b]);let b=(0,a.i(28478).registerClientReference)(function(){throw Error("Attempted to call the default export of [project]/src/presentation/web/components/features/version/version-page-client.tsx from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/presentation/web/components/features/version/version-page-client.tsx","default")},67651,a=>{"use strict";a.i(32459);var b=a.i(93933);a.n(b)},77048,a=>{"use strict";var b=a.i(92807),c=a.i(60526),d=a.i(96380),e=a.i(67651);function f(){let a=function(){try{let{version:a,name:b,description:c}=(0,d.resolve)("IVersionService").getVersion();return{version:a,name:b,description:c,branch:"HEAD",commitHash:"fdb89bba660d2b0491e999fb31e691c776e46854"}}catch{return{version:"1.120.0",name:"@shepai/cli",description:"Autonomous AI Native SDLC Platform - Automate the development cycle from idea to deploy",branch:"HEAD",commitHash:"fdb89bba660d2b0491e999fb31e691c776e46854"}}}(),f={nodeVersion:process.version,platform:(0,c.platform)(),arch:(0,c.arch)()};return(0,b.jsx)(e.default,{versionInfo:a,systemInfo:f})}a.s(["default",()=>f],77048)}];
2
2
 
3
3
  //# sourceMappingURL=%5Broot-of-the-server%5D__06fef644._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[31747,a=>{"use strict";var b=a.i(81719),c=a.i(14703),d=a.i(79372);function e(a,e,f){let g=(e?.status===b.AgentRunStatus.running||e?.status===b.AgentRunStatus.pending)&&e?.pid?(0,d.isProcessAlive)(e.pid):void 0;return{name:a.name,description:a.description??a.slug,featureId:a.id,lifecycle:(0,c.deriveLifecycle)(a,e),repositoryPath:a.repositoryPath,branch:a.branch,specPath:a.specPath,state:(0,c.deriveNodeState)(a,e,void 0!==g?{isPidAlive:g}: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,...f?.enableEvidence!=null&&{enableEvidence:f.enableEvidence},...f?.commitEvidence!=null&&{commitEvidence:f.commitEvidence},...f?.ciWatchEnabled!=null&&{ciWatchEnabled:f.ciWatchEnabled},...f?.repositoryName&&{repositoryName:f.repositoryName},...f?.baseBranch&&{baseBranch:f.baseBranch},...f?.oneLiner&&{oneLiner:f.oneLiner},...f?.remoteUrl&&{remoteUrl:f.remoteUrl},...e?.agentType&&{agentType:e.agentType},...e?.modelId&&{modelId:e.modelId},...e?.error&&{errorMessage:e.error},...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}}}}a.s(["buildFeatureNodeData",()=>e])},61402,76052,13008,74607,6542,740,12104,54433,a=>{"use strict";var b=a.i(92658),c=a.i(96380),d=a.i(12581);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,"6061a1bdf48e7a187d3c2e02b93c9b90738b8e243e",null),a.s(["approveFeature",()=>e],61402),(0,d.ensureServerEntryExports)([f]),(0,b.registerServerReference)(f,"7035fb61dfb18a61df1343dbcdc64e3b199138f5da",null),a.s(["rejectFeature",()=>f],76052),(0,d.ensureServerEntryExports)([g]),(0,b.registerServerReference)(g,"40357238e71028fac79c645f852368bdced0aa13d7",null),a.s(["getFeatureArtifact",()=>g],13008),(0,d.ensureServerEntryExports)([h]),(0,b.registerServerReference)(h,"406fc98a613a6f207e3bdc0ced1e686ffbb03f9bd8",null),a.s(["getResearchArtifact",()=>h],74607);var i=a.i(66680),j=a.i(2157),k=a.i(50227),l=a.i(29918),m=a.i(32278);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=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,o=h.branch?{source:h.branch,target:"main"}:void 0,p=h.worktreePath??(h.repositoryPath&&h.branch?(0,l.computeWorktreePath)(h.repositoryPath,h.branch):null),q=h.repositoryPath?(b=h.repositoryPath,f=(0,i.createHash)("sha256").update(b).digest("hex").slice(0,16),(0,k.join)((0,m.getShepHomeDir)(),"repos",f,"evidence",a).replace(/\\/g,"/")):p?(0,k.join)((0,k.dirname)((0,k.dirname)(p)),"evidence",a).replace(/\\/g,"/"):null;if(q)try{let a=(0,k.join)(q,"manifest.json");(0,j.existsSync)(a)&&(d=JSON.parse((0,j.readFileSync)(a,"utf-8")),e=d.map(a=>{if(a.relativePath.startsWith("/")){if((0,j.existsSync)(a.relativePath))return a;let b=(0,k.join)(q,(0,k.basename)(a.relativePath)).replace(/\\/g,"/");return(0,j.existsSync)(b)?{...a,relativePath:b}:a}let b=(0,k.join)(q,(0,k.basename)(a.relativePath)).replace(/\\/g,"/");return{...a,relativePath:b}}))}catch{}if(!p)return{pr:n,branch:o,evidence:e,warning:n?void 0:"No PR or diff data available"};try{let a=(0,c.resolve)("IGitPrService"),[b,d]=await Promise.all([a.getPrDiffSummary(p,"main"),a.getFileDiffs(p,"main").catch(()=>void 0)]);return{pr:n,branch:o,diffSummary:b,fileDiffs:d,evidence:e}}catch{return{pr:n,branch:o,evidence:e,warning:"Diff statistics unavailable"}}}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,completedAt:a.completedAt,durationMs:null!=a.durationMs?Number(a.durationMs):void 0,waitingApprovalAt:a.waitingApprovalAt,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})),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"}}}(0,d.ensureServerEntryExports)([n]),(0,b.registerServerReference)(n,"402874b2bbc860ff2a557c75e1580f61d03dadbc11",null),a.s(["getMergeReviewData",()=>n],6542),(0,d.ensureServerEntryExports)([o]),(0,b.registerServerReference)(o,"409ae8631dd66ef4036d0d9d922fc2c24cb344d13c",null),a.s(["getFeaturePhaseTimings",()=>o],740),(0,d.ensureServerEntryExports)([q]),(0,b.registerServerReference)(q,"40902286e33d2278cd76407142168234afce2450b5",null),a.s(["getFeaturePlan",()=>q],12104);var r=a.i(31747),s=a.i(33244);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)]),{workflow:n}=(0,s.getSettings)();return(0,r.buildFeatureNodeData)(h,i,{repositoryName:j?.name,baseBranch:k,oneLiner:l?.oneLiner,remoteUrl:m??void 0,enableEvidence:n.enableEvidence,commitEvidence:n.commitEvidence})}catch{return null}}(0,d.ensureServerEntryExports)([t]),(0,b.registerServerReference)(t,"405ef365874e67155b4b7e0077d0cc59b5e4dc7e2f",null),a.s(["getFeatureDrawerData",()=>t],54433)},13760,a=>{"use strict";var b=a.i(12513),c=a.i(94691),d=a.i(33841),e=a.i(46646),f=a.i(68670),g=a.i(85321),h=a.i(84095),i=a.i(56799),j=a.i(80496),k=a.i(41872),l=a.i(9959),m=a.i(23504),n=a.i(27900),o=a.i(50845),p=a.i(26604),q=a.i(54723),r=a.i(49560),s=a.i(39353),t=a.i(29207),u=a.i(61402),v=a.i(76052),w=a.i(13008),x=a.i(74607),y=a.i(6542),z=a.i(740),A=a.i(12104),B=a.i(54433);a.s([],28552),a.i(28552),a.s(["000091d01c4c0addfba03a24acc2a50d2250ea644f",()=>k.isAgentSetupComplete,"0001aa3186d88ffd6a6ecc56b4e0a9291659773c55",()=>m.getAllAgentModels,"00b72044c095acd5ae935a6a82077d3017ffdb1e52",()=>l.checkAgentAuth,"00d33ce7fe440a4d4e55d65f865c1f22282142eb69",()=>b.pickFolder,"4014ab1b94b133351b1455fab9508732c54cfa4404",()=>j.openFolder,"4017aa4e8e7a621babeb50836c6ecea68032a1a223",()=>s.deleteRepository,"40192e8ab56a976d7b4ab02e5ac4e86b81844753c0",()=>c.getDeploymentLogs,"4023507b2023a0497138424d17b98825c8a34fea63",()=>t.getFeatureMetadata,"402874b2bbc860ff2a557c75e1580f61d03dadbc11",()=>y.getMergeReviewData,"40357238e71028fac79c645f852368bdced0aa13d7",()=>w.getFeatureArtifact,"403b7d14d71a50b757c8522b059b3e4a5e38ca630f",()=>p.resumeFeature,"404482b612d7fe0416d9267ac8ae08eff97c415cb8",()=>q.startFeature,"405ef365874e67155b4b7e0077d0cc59b5e4dc7e2f",()=>B.getFeatureDrawerData,"406fc98a613a6f207e3bdc0ced1e686ffbb03f9bd8",()=>x.getResearchArtifact,"407be534406b318f0e53b8cf725a013960c34c4eab",()=>e.deployRepository,"408ac7d206a1f4cb627a91f3253487c4ce8f30344b",()=>i.openShell,"40902286e33d2278cd76407142168234afce2450b5",()=>A.getFeaturePlan,"409ae8631dd66ef4036d0d9d922fc2c24cb344d13c",()=>z.getFeaturePhaseTimings,"40c56f5c3a822bb270b79ce59904bd1a4547ae8dd4",()=>d.deployFeature,"40d09eba9db80f1749ca75d8a81bf4ecfe354213f4",()=>r.addRepository,"40d59de3ebfc390247f9ec9e895121aa1e442bb248",()=>h.openIde,"40e8b017976f8965562a10c76df713c49c812175a5",()=>f.stopDeployment,"40edcd4f8ffa551f80627eea24794aeb5eb5b4bf1d",()=>g.getDeploymentStatus,"603ee219eebb20f5875fe7610d566307abd16e5c79",()=>n.updateAgentAndModel,"6061a1bdf48e7a187d3c2e02b93c9b90738b8e243e",()=>u.approveFeature,"7035fb61dfb18a61df1343dbcdc64e3b199138f5da",()=>v.rejectFeature,"70c01a5598d1f60b9749f583a466fdd9c7149baf07",()=>o.deleteFeature],13760)},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/90b01_js-yaml_dist_js-yaml_mjs_c897fb57._.js"].map(b=>a.l(b))).then(()=>b(32996)))}];
1
+ module.exports=[31747,a=>{"use strict";var b=a.i(81719),c=a.i(14703),d=a.i(79372);function e(a,e,f){let g=(e?.status===b.AgentRunStatus.running||e?.status===b.AgentRunStatus.pending)&&e?.pid?(0,d.isProcessAlive)(e.pid):void 0;return{name:a.name,description:a.description??a.slug,featureId:a.id,lifecycle:(0,c.deriveLifecycle)(a,e),repositoryPath:a.repositoryPath,branch:a.branch,specPath:a.specPath,state:(0,c.deriveNodeState)(a,e,void 0!==g?{isPidAlive:g}: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,...f?.enableEvidence!=null&&{enableEvidence:f.enableEvidence},...f?.commitEvidence!=null&&{commitEvidence:f.commitEvidence},...f?.ciWatchEnabled!=null&&{ciWatchEnabled:f.ciWatchEnabled},...f?.repositoryName&&{repositoryName:f.repositoryName},...f?.baseBranch&&{baseBranch:f.baseBranch},...f?.oneLiner&&{oneLiner:f.oneLiner},...f?.remoteUrl&&{remoteUrl:f.remoteUrl},...e?.agentType&&{agentType:e.agentType},...e?.modelId&&{modelId:e.modelId},...e?.error&&{errorMessage:e.error},...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}}}}a.s(["buildFeatureNodeData",()=>e])},61402,76052,13008,74607,6542,740,12104,54433,a=>{"use strict";var b=a.i(92658),c=a.i(96380),d=a.i(12581);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,"603cf524fc67d28695094b5c4fd3b475c257f633c7",null),a.s(["approveFeature",()=>e],61402),(0,d.ensureServerEntryExports)([f]),(0,b.registerServerReference)(f,"706269ad28a3dd8d436a0209aefdab8a0b1e6ac16c",null),a.s(["rejectFeature",()=>f],76052),(0,d.ensureServerEntryExports)([g]),(0,b.registerServerReference)(g,"40b0301a37f8010acbefad59cd79edc3d1235007d0",null),a.s(["getFeatureArtifact",()=>g],13008),(0,d.ensureServerEntryExports)([h]),(0,b.registerServerReference)(h,"4098f909e4e1654b29009263264cc15bb801d70449",null),a.s(["getResearchArtifact",()=>h],74607);var i=a.i(66680),j=a.i(2157),k=a.i(50227),l=a.i(29918),m=a.i(32278);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=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,o=h.branch?{source:h.branch,target:"main"}:void 0,p=h.worktreePath??(h.repositoryPath&&h.branch?(0,l.computeWorktreePath)(h.repositoryPath,h.branch):null),q=h.repositoryPath?(b=h.repositoryPath,f=(0,i.createHash)("sha256").update(b).digest("hex").slice(0,16),(0,k.join)((0,m.getShepHomeDir)(),"repos",f,"evidence",a).replace(/\\/g,"/")):p?(0,k.join)((0,k.dirname)((0,k.dirname)(p)),"evidence",a).replace(/\\/g,"/"):null;if(q)try{let a=(0,k.join)(q,"manifest.json");(0,j.existsSync)(a)&&(d=JSON.parse((0,j.readFileSync)(a,"utf-8")),e=d.map(a=>{if(a.relativePath.startsWith("/")){if((0,j.existsSync)(a.relativePath))return a;let b=(0,k.join)(q,(0,k.basename)(a.relativePath)).replace(/\\/g,"/");return(0,j.existsSync)(b)?{...a,relativePath:b}:a}let b=(0,k.join)(q,(0,k.basename)(a.relativePath)).replace(/\\/g,"/");return{...a,relativePath:b}}))}catch{}if(!p)return{pr:n,branch:o,evidence:e,warning:n?void 0:"No PR or diff data available"};try{let a=(0,c.resolve)("IGitPrService"),[b,d]=await Promise.all([a.getPrDiffSummary(p,"main"),a.getFileDiffs(p,"main").catch(()=>void 0)]);return{pr:n,branch:o,diffSummary:b,fileDiffs:d,evidence:e}}catch{return{pr:n,branch:o,evidence:e,warning:"Diff statistics unavailable"}}}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,completedAt:a.completedAt,durationMs:null!=a.durationMs?Number(a.durationMs):void 0,waitingApprovalAt:a.waitingApprovalAt,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})),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"}}}(0,d.ensureServerEntryExports)([n]),(0,b.registerServerReference)(n,"40b31ac8ff638908e4536ed962ab2d43ed008c915c",null),a.s(["getMergeReviewData",()=>n],6542),(0,d.ensureServerEntryExports)([o]),(0,b.registerServerReference)(o,"4050269dd4eee3e67d6e1c876379efd01a93ac831f",null),a.s(["getFeaturePhaseTimings",()=>o],740),(0,d.ensureServerEntryExports)([q]),(0,b.registerServerReference)(q,"402de6185ae674a4c4f42afd7c0affd807c07fb51b",null),a.s(["getFeaturePlan",()=>q],12104);var r=a.i(31747),s=a.i(33244);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)]),{workflow:n}=(0,s.getSettings)();return(0,r.buildFeatureNodeData)(h,i,{repositoryName:j?.name,baseBranch:k,oneLiner:l?.oneLiner,remoteUrl:m??void 0,enableEvidence:n.enableEvidence,commitEvidence:n.commitEvidence})}catch{return null}}(0,d.ensureServerEntryExports)([t]),(0,b.registerServerReference)(t,"408b2fa0a289b7c409c01953ca40f83add4648cad9",null),a.s(["getFeatureDrawerData",()=>t],54433)},13760,a=>{"use strict";var b=a.i(12513),c=a.i(94691),d=a.i(33841),e=a.i(46646),f=a.i(68670),g=a.i(85321),h=a.i(84095),i=a.i(56799),j=a.i(80496),k=a.i(41872),l=a.i(9959),m=a.i(23504),n=a.i(27900),o=a.i(50845),p=a.i(26604),q=a.i(54723),r=a.i(49560),s=a.i(39353),t=a.i(29207),u=a.i(61402),v=a.i(76052),w=a.i(13008),x=a.i(74607),y=a.i(6542),z=a.i(740),A=a.i(12104),B=a.i(54433);a.s([],28552),a.i(28552),a.s(["0026787ec1e26204b385cf2d8829971f31731575c7",()=>m.getAllAgentModels,"006ea961d0fb499419e9de0ba98178b8e50367c758",()=>l.checkAgentAuth,"00e351d52aa0fc298d580a51e14d08eba19a6d4fd6",()=>k.isAgentSetupComplete,"00f2a80e98ccea49289178a0b2a8e041f1f5fb2eda",()=>b.pickFolder,"400f382e754893ef7f625a7bb96d1d3da8bba0b052",()=>g.getDeploymentStatus,"401d5db9bd7e00fc6d79b90b02d50afb4cc3ce46c5",()=>d.deployFeature,"401f55df1c356a3053016614e14b5f0621ec4bfa7b",()=>q.startFeature,"40233b80cbd11e675eed016c8ab30f846ca80e5504",()=>e.deployRepository,"402de6185ae674a4c4f42afd7c0affd807c07fb51b",()=>A.getFeaturePlan,"404a7c6ec1fc090fa574119b89572cfd951c582bf8",()=>p.resumeFeature,"4050269dd4eee3e67d6e1c876379efd01a93ac831f",()=>z.getFeaturePhaseTimings,"405e48f16b0263c1f34855e8b0a28369f795eeb95f",()=>r.addRepository,"406c7dad4e4e7a9bf191cdcbffb50b4570e67b70ac",()=>i.openShell,"408b2fa0a289b7c409c01953ca40f83add4648cad9",()=>B.getFeatureDrawerData,"408f7a8f76860c5d2dc17174dd1f89730f0cb393a7",()=>t.getFeatureMetadata,"4098f909e4e1654b29009263264cc15bb801d70449",()=>x.getResearchArtifact,"409f1b66b364cc5ea274b85ec39a7db3b55f53281c",()=>f.stopDeployment,"40b0301a37f8010acbefad59cd79edc3d1235007d0",()=>w.getFeatureArtifact,"40b31ac8ff638908e4536ed962ab2d43ed008c915c",()=>y.getMergeReviewData,"40cac3df4e85e3632bd5763a86ee786747135dc5de",()=>c.getDeploymentLogs,"40cee20ed1ba913678be0a3317eff97f5b73e8ceab",()=>s.deleteRepository,"40d252e6bbee76ccea0b57a6a387ee68aaa67d351c",()=>j.openFolder,"40f9345fc3305fa0bd7617f1bcdf398934e316d53c",()=>h.openIde,"601b2acfbb901c8e04c71456531c62411d15177229",()=>n.updateAgentAndModel,"603cf524fc67d28695094b5c4fd3b475c257f633c7",()=>u.approveFeature,"706269ad28a3dd8d436a0209aefdab8a0b1e6ac16c",()=>v.rejectFeature,"70ee50841b29d2983f8f06f3b2ca1b8e5d57099fd3",()=>o.deleteFeature],13760)},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/90b01_js-yaml_dist_js-yaml_mjs_c897fb57._.js"].map(b=>a.l(b))).then(()=>b(32996)))}];
2
2
 
3
3
  //# sourceMappingURL=%5Broot-of-the-server%5D__3b14e5a0._.js.map
@@ -1 +1 @@
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/get-feature-drawer-data.ts","../../../../../../../src/presentation/web/.next-internal/server/app/%28dashboard%29/feature/%5BfeatureId%5D/%5Btab%5D/page/actions.js%20%28server%20actions%20loader%29"],"sourcesContent":["import type { Feature, AgentRun } from '@shepai/core/domain/generated/output';\nimport { AgentRunStatus } from '@shepai/core/domain/generated/output';\nimport {\n deriveNodeState,\n deriveProgress,\n deriveLifecycle,\n} from '@/components/common/feature-node/derive-feature-state';\nimport { isProcessAlive } from '@shepai/core/infrastructure/services/process/is-process-alive';\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}\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 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 ...(options?.enableEvidence != null && { enableEvidence: options.enableEvidence }),\n ...(options?.commitEvidence != null && { commitEvidence: options.commitEvidence }),\n ...(options?.ciWatchEnabled != null && { ciWatchEnabled: options.ciWatchEnabled }),\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.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 '@shepai/core/application/use-cases/agents/approve-agent-run.use-case';\nimport type { IFeatureRepository } from '@shepai/core/application/ports/output/repositories/feature-repository.interface';\nimport type { PrdApprovalPayload } from '@shepai/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 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 '@shepai/core/application/use-cases/agents/reject-agent-run.use-case';\nimport type { IFeatureRepository } from '@shepai/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 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 '@shepai/core/application/use-cases/features/get-feature-artifact.use-case';\nimport type { FeatureArtifact } from '@shepai/core/domain/generated/output';\nimport type { PrdQuestionnaireData } from '@shepai/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 '@shepai/core/application/use-cases/features/get-research-artifact.use-case';\nimport type { ResearchArtifact, TechDecision } from '@shepai/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 '@shepai/core/application/ports/output/repositories/feature-repository.interface';\nimport type { IGitPrService } from '@shepai/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 } from '@shepai/core/infrastructure/services/ide-launchers/compute-worktree-path';\nimport { getShepHomeDir } from '@shepai/core/infrastructure/services/filesystem/shep-directory.service';\n\ntype GetMergeReviewDataResult = MergeReviewData | { error: string };\n\n/**\n * Compute the shep evidence directory for a given repository and feature.\n * Path: ~/.shep/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(getShepHomeDir(), 'repos', repoHash, 'evidence', featureId).replace(/\\\\/g, '/');\n}\n\n/**\n * Normalize evidence paths so they all point to the shep 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 shep 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 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 branch = feature.branch ? { source: feature.branch, target: 'main' } : undefined;\n\n const worktreePath =\n feature.worktreePath ??\n (feature.repositoryPath && feature.branch\n ? computeWorktreePath(feature.repositoryPath, feature.branch)\n : null);\n\n // Load evidence manifest (best-effort).\n // Evidence is stored independently of the worktree at:\n // ~/.shep/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 evidence = normalizeEvidencePaths(raw, evidenceDir);\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 };\n }\n\n try {\n const gitPrService = resolve<IGitPrService>('IGitPrService');\n const [diffSummary, fileDiffs] = await Promise.all([\n gitPrService.getPrDiffSummary(worktreePath, 'main'),\n gitPrService.getFileDiffs(worktreePath, 'main').catch(() => undefined),\n ]);\n return { pr, branch, diffSummary, fileDiffs, evidence };\n } catch {\n return {\n pr,\n branch,\n evidence,\n warning: 'Diff statistics unavailable',\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 '@shepai/core/application/ports/output/agents/phase-timing-repository.interface';\nimport type { IFeatureRepository } from '@shepai/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}\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,\n completedAt: t.completedAt,\n durationMs: t.durationMs != null ? Number(t.durationMs) : undefined,\n waitingApprovalAt: t.waitingApprovalAt,\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 }));\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 '@shepai/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 { IFeatureRepository } from '@shepai/core/application/ports/output/repositories/feature-repository.interface';\nimport type { IAgentRunRepository } from '@shepai/core/application/ports/output/agents/agent-run-repository.interface';\nimport type { IRepositoryRepository } from '@shepai/core/application/ports/output/repositories/repository-repository.interface';\nimport type { IGitPrService } from '@shepai/core/application/ports/output/services/git-pr-service.interface';\nimport type { GetFeatureArtifactUseCase } from '@shepai/core/application/use-cases/features/get-feature-artifact.use-case';\nimport { buildFeatureNodeData } from '@/app/build-feature-node-data';\nimport { getSettings } from '@shepai/core/infrastructure/services/settings.service';\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 { workflow } = getSettings();\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 });\n } catch {\n return null;\n }\n}\n","export {pickFolder as '00d33ce7fe440a4d4e55d65f865c1f22282142eb69'} from 'ACTIONS_MODULE0'\nexport {getDeploymentLogs as '40192e8ab56a976d7b4ab02e5ac4e86b81844753c0'} from 'ACTIONS_MODULE1'\nexport {deployFeature as '40c56f5c3a822bb270b79ce59904bd1a4547ae8dd4'} from 'ACTIONS_MODULE2'\nexport {deployRepository as '407be534406b318f0e53b8cf725a013960c34c4eab'} from 'ACTIONS_MODULE3'\nexport {stopDeployment as '40e8b017976f8965562a10c76df713c49c812175a5'} from 'ACTIONS_MODULE4'\nexport {getDeploymentStatus as '40edcd4f8ffa551f80627eea24794aeb5eb5b4bf1d'} from 'ACTIONS_MODULE5'\nexport {openIde as '40d59de3ebfc390247f9ec9e895121aa1e442bb248'} from 'ACTIONS_MODULE6'\nexport {openShell as '408ac7d206a1f4cb627a91f3253487c4ce8f30344b'} from 'ACTIONS_MODULE7'\nexport {openFolder as '4014ab1b94b133351b1455fab9508732c54cfa4404'} from 'ACTIONS_MODULE8'\nexport {isAgentSetupComplete as '000091d01c4c0addfba03a24acc2a50d2250ea644f'} from 'ACTIONS_MODULE9'\nexport {checkAgentAuth as '00b72044c095acd5ae935a6a82077d3017ffdb1e52'} from 'ACTIONS_MODULE10'\nexport {getAllAgentModels as '0001aa3186d88ffd6a6ecc56b4e0a9291659773c55'} from 'ACTIONS_MODULE11'\nexport {updateAgentAndModel as '603ee219eebb20f5875fe7610d566307abd16e5c79'} from 'ACTIONS_MODULE12'\nexport {deleteFeature as '70c01a5598d1f60b9749f583a466fdd9c7149baf07'} from 'ACTIONS_MODULE13'\nexport {resumeFeature as '403b7d14d71a50b757c8522b059b3e4a5e38ca630f'} from 'ACTIONS_MODULE14'\nexport {startFeature as '404482b612d7fe0416d9267ac8ae08eff97c415cb8'} from 'ACTIONS_MODULE15'\nexport {addRepository as '40d09eba9db80f1749ca75d8a81bf4ecfe354213f4'} from 'ACTIONS_MODULE16'\nexport {deleteRepository as '4017aa4e8e7a621babeb50836c6ecea68032a1a223'} from 'ACTIONS_MODULE17'\nexport {getFeatureMetadata as '4023507b2023a0497138424d17b98825c8a34fea63'} from 'ACTIONS_MODULE18'\nexport {approveFeature as '6061a1bdf48e7a187d3c2e02b93c9b90738b8e243e'} from 'ACTIONS_MODULE19'\nexport {rejectFeature as '7035fb61dfb18a61df1343dbcdc64e3b199138f5da'} from 'ACTIONS_MODULE20'\nexport {getFeatureArtifact as '40357238e71028fac79c645f852368bdced0aa13d7'} from 'ACTIONS_MODULE21'\nexport {getResearchArtifact as '406fc98a613a6f207e3bdc0ced1e686ffbb03f9bd8'} from 'ACTIONS_MODULE22'\nexport {getMergeReviewData as '402874b2bbc860ff2a557c75e1580f61d03dadbc11'} from 'ACTIONS_MODULE23'\nexport {getFeaturePhaseTimings as '409ae8631dd66ef4036d0d9d922fc2c24cb344d13c'} from 'ACTIONS_MODULE24'\nexport {getFeaturePlan as '40902286e33d2278cd76407142168234afce2450b5'} from 'ACTIONS_MODULE25'\nexport {getFeatureDrawerData as '405ef365874e67155b4b7e0077d0cc59b5e4dc7e2f'} from 'ACTIONS_MODULE26'\n"],"names":[],"mappings":"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"}
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/get-feature-drawer-data.ts","../../../../../../../src/presentation/web/.next-internal/server/app/%28dashboard%29/feature/%5BfeatureId%5D/%5Btab%5D/page/actions.js%20%28server%20actions%20loader%29"],"sourcesContent":["import type { Feature, AgentRun } from '@shepai/core/domain/generated/output';\nimport { AgentRunStatus } from '@shepai/core/domain/generated/output';\nimport {\n deriveNodeState,\n deriveProgress,\n deriveLifecycle,\n} from '@/components/common/feature-node/derive-feature-state';\nimport { isProcessAlive } from '@shepai/core/infrastructure/services/process/is-process-alive';\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}\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 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 ...(options?.enableEvidence != null && { enableEvidence: options.enableEvidence }),\n ...(options?.commitEvidence != null && { commitEvidence: options.commitEvidence }),\n ...(options?.ciWatchEnabled != null && { ciWatchEnabled: options.ciWatchEnabled }),\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.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 '@shepai/core/application/use-cases/agents/approve-agent-run.use-case';\nimport type { IFeatureRepository } from '@shepai/core/application/ports/output/repositories/feature-repository.interface';\nimport type { PrdApprovalPayload } from '@shepai/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 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 '@shepai/core/application/use-cases/agents/reject-agent-run.use-case';\nimport type { IFeatureRepository } from '@shepai/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 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 '@shepai/core/application/use-cases/features/get-feature-artifact.use-case';\nimport type { FeatureArtifact } from '@shepai/core/domain/generated/output';\nimport type { PrdQuestionnaireData } from '@shepai/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 '@shepai/core/application/use-cases/features/get-research-artifact.use-case';\nimport type { ResearchArtifact, TechDecision } from '@shepai/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 '@shepai/core/application/ports/output/repositories/feature-repository.interface';\nimport type { IGitPrService } from '@shepai/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 } from '@shepai/core/infrastructure/services/ide-launchers/compute-worktree-path';\nimport { getShepHomeDir } from '@shepai/core/infrastructure/services/filesystem/shep-directory.service';\n\ntype GetMergeReviewDataResult = MergeReviewData | { error: string };\n\n/**\n * Compute the shep evidence directory for a given repository and feature.\n * Path: ~/.shep/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(getShepHomeDir(), 'repos', repoHash, 'evidence', featureId).replace(/\\\\/g, '/');\n}\n\n/**\n * Normalize evidence paths so they all point to the shep 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 shep 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 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 branch = feature.branch ? { source: feature.branch, target: 'main' } : undefined;\n\n const worktreePath =\n feature.worktreePath ??\n (feature.repositoryPath && feature.branch\n ? computeWorktreePath(feature.repositoryPath, feature.branch)\n : null);\n\n // Load evidence manifest (best-effort).\n // Evidence is stored independently of the worktree at:\n // ~/.shep/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 evidence = normalizeEvidencePaths(raw, evidenceDir);\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 };\n }\n\n try {\n const gitPrService = resolve<IGitPrService>('IGitPrService');\n const [diffSummary, fileDiffs] = await Promise.all([\n gitPrService.getPrDiffSummary(worktreePath, 'main'),\n gitPrService.getFileDiffs(worktreePath, 'main').catch(() => undefined),\n ]);\n return { pr, branch, diffSummary, fileDiffs, evidence };\n } catch {\n return {\n pr,\n branch,\n evidence,\n warning: 'Diff statistics unavailable',\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 '@shepai/core/application/ports/output/agents/phase-timing-repository.interface';\nimport type { IFeatureRepository } from '@shepai/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}\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,\n completedAt: t.completedAt,\n durationMs: t.durationMs != null ? Number(t.durationMs) : undefined,\n waitingApprovalAt: t.waitingApprovalAt,\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 }));\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 '@shepai/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 { IFeatureRepository } from '@shepai/core/application/ports/output/repositories/feature-repository.interface';\nimport type { IAgentRunRepository } from '@shepai/core/application/ports/output/agents/agent-run-repository.interface';\nimport type { IRepositoryRepository } from '@shepai/core/application/ports/output/repositories/repository-repository.interface';\nimport type { IGitPrService } from '@shepai/core/application/ports/output/services/git-pr-service.interface';\nimport type { GetFeatureArtifactUseCase } from '@shepai/core/application/use-cases/features/get-feature-artifact.use-case';\nimport { buildFeatureNodeData } from '@/app/build-feature-node-data';\nimport { getSettings } from '@shepai/core/infrastructure/services/settings.service';\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 { workflow } = getSettings();\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 });\n } catch {\n return null;\n }\n}\n","export {pickFolder as '00f2a80e98ccea49289178a0b2a8e041f1f5fb2eda'} from 'ACTIONS_MODULE0'\nexport {getDeploymentLogs as '40cac3df4e85e3632bd5763a86ee786747135dc5de'} from 'ACTIONS_MODULE1'\nexport {deployFeature as '401d5db9bd7e00fc6d79b90b02d50afb4cc3ce46c5'} from 'ACTIONS_MODULE2'\nexport {deployRepository as '40233b80cbd11e675eed016c8ab30f846ca80e5504'} from 'ACTIONS_MODULE3'\nexport {stopDeployment as '409f1b66b364cc5ea274b85ec39a7db3b55f53281c'} from 'ACTIONS_MODULE4'\nexport {getDeploymentStatus as '400f382e754893ef7f625a7bb96d1d3da8bba0b052'} from 'ACTIONS_MODULE5'\nexport {openIde as '40f9345fc3305fa0bd7617f1bcdf398934e316d53c'} from 'ACTIONS_MODULE6'\nexport {openShell as '406c7dad4e4e7a9bf191cdcbffb50b4570e67b70ac'} from 'ACTIONS_MODULE7'\nexport {openFolder as '40d252e6bbee76ccea0b57a6a387ee68aaa67d351c'} from 'ACTIONS_MODULE8'\nexport {isAgentSetupComplete as '00e351d52aa0fc298d580a51e14d08eba19a6d4fd6'} from 'ACTIONS_MODULE9'\nexport {checkAgentAuth as '006ea961d0fb499419e9de0ba98178b8e50367c758'} from 'ACTIONS_MODULE10'\nexport {getAllAgentModels as '0026787ec1e26204b385cf2d8829971f31731575c7'} from 'ACTIONS_MODULE11'\nexport {updateAgentAndModel as '601b2acfbb901c8e04c71456531c62411d15177229'} from 'ACTIONS_MODULE12'\nexport {deleteFeature as '70ee50841b29d2983f8f06f3b2ca1b8e5d57099fd3'} from 'ACTIONS_MODULE13'\nexport {resumeFeature as '404a7c6ec1fc090fa574119b89572cfd951c582bf8'} from 'ACTIONS_MODULE14'\nexport {startFeature as '401f55df1c356a3053016614e14b5f0621ec4bfa7b'} from 'ACTIONS_MODULE15'\nexport {addRepository as '405e48f16b0263c1f34855e8b0a28369f795eeb95f'} from 'ACTIONS_MODULE16'\nexport {deleteRepository as '40cee20ed1ba913678be0a3317eff97f5b73e8ceab'} from 'ACTIONS_MODULE17'\nexport {getFeatureMetadata as '408f7a8f76860c5d2dc17174dd1f89730f0cb393a7'} from 'ACTIONS_MODULE18'\nexport {approveFeature as '603cf524fc67d28695094b5c4fd3b475c257f633c7'} from 'ACTIONS_MODULE19'\nexport {rejectFeature as '706269ad28a3dd8d436a0209aefdab8a0b1e6ac16c'} from 'ACTIONS_MODULE20'\nexport {getFeatureArtifact as '40b0301a37f8010acbefad59cd79edc3d1235007d0'} from 'ACTIONS_MODULE21'\nexport {getResearchArtifact as '4098f909e4e1654b29009263264cc15bb801d70449'} from 'ACTIONS_MODULE22'\nexport {getMergeReviewData as '40b31ac8ff638908e4536ed962ab2d43ed008c915c'} from 'ACTIONS_MODULE23'\nexport {getFeaturePhaseTimings as '4050269dd4eee3e67d6e1c876379efd01a93ac831f'} from 'ACTIONS_MODULE24'\nexport {getFeaturePlan as '402de6185ae674a4c4f42afd7c0affd807c07fb51b'} from 'ACTIONS_MODULE25'\nexport {getFeatureDrawerData as '408b2fa0a289b7c409c01953ca40f83add4648cad9'} from 'ACTIONS_MODULE26'\n"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- module.exports=[15108,(a,b,c)=>{"use strict";b.exports=a.r(55721).vendored.contexts.HooksClientContext},71915,(a,b,c)=>{"use strict";b.exports=a.r(55721).vendored.contexts.ServerInsertedHtml},18622,(a,b,c)=>{b.exports=a.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},20635,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/action-async-storage.external.js",()=>require("next/dist/server/app-render/action-async-storage.external.js"))},55721,(a,b,c)=>{"use strict";b.exports=a.r(18622)},10973,(a,b,c)=>{"use strict";b.exports=a.r(55721).vendored["react-ssr"].ReactJsxRuntime},96960,(a,b,c)=>{"use strict";b.exports=a.r(55721).vendored["react-ssr"].React},55690,(a,b,c)=>{"use strict";b.exports=a.r(55721).vendored["react-ssr"].ReactDOM},21032,(a,b,c)=>{"use strict";b.exports=a.r(55721).vendored["react-ssr"].ReactServerDOMTurbopackClient},62485,(a,b,c)=>{"use strict";b.exports=a.r(55721).vendored.contexts.AppRouterContext},90920,a=>{"use strict";var b=a.i(10973),c=a.i(85536);function d({className:a,type:d,...e}){return(0,b.jsx)("input",{type:d,"data-slot":"input",className:(0,c.cn)("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",a),...e})}a.s(["Input",()=>d])},48972,a=>{"use strict";function b(a,[b,c]){return Math.min(c,Math.max(b,a))}a.s(["clamp",()=>b])},67424,a=>{"use strict";let b=(0,a.i(25700).default)("puzzle",[["path",{d:"M15.39 4.39a1 1 0 0 0 1.68-.474 2.5 2.5 0 1 1 3.014 3.015 1 1 0 0 0-.474 1.68l1.683 1.682a2.414 2.414 0 0 1 0 3.414L19.61 15.39a1 1 0 0 1-1.68-.474 2.5 2.5 0 1 0-3.014 3.015 1 1 0 0 1 .474 1.68l-1.683 1.682a2.414 2.414 0 0 1-3.414 0L8.61 19.61a1 1 0 0 0-1.68.474 2.5 2.5 0 1 1-3.014-3.015 1 1 0 0 0 .474-1.68l-1.683-1.682a2.414 2.414 0 0 1 0-3.414L4.39 8.61a1 1 0 0 1 1.68.474 2.5 2.5 0 1 0 3.014-3.015 1 1 0 0 1-.474-1.68l1.683-1.682a2.414 2.414 0 0 1 3.414 0z",key:"w46dr5"}]]);a.s(["Puzzle",()=>b],67424)},1377,a=>{"use strict";var b=a.i(25674);let c=(0,b.createServerReference)("00d33ce7fe440a4d4e55d65f865c1f22282142eb69",b.callServer,void 0,b.findSourceMapURL,"pickFolder");async function d(){let a=await c();if(a.error)throw Error(a.error);return a.path}a.s(["pickFolder",()=>d],1377)},42527,a=>{"use strict";let b=(0,a.i(25700).default)("folder-plus",[["path",{d:"M12 10v6",key:"1bos4e"}],["path",{d:"M9 13h6",key:"1uhe8q"}],["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]);a.s(["FolderPlus",()=>b],42527)},1356,a=>{"use strict";var b=a.i(10973),c=a.i(96960);let d={"action-required":"action-needed",running:"in-progress",done:"done",blocked:"blocked",pending:"blocked",error:"error",creating:null,deleting:null};function e(a){return d[a]}let f=(0,c.createContext)(null);function g({children:a}){let[d,e]=(0,c.useState)([]),g=(0,c.useMemo)(()=>({features:d,setFeatures:e}),[d]);return(0,b.jsx)(f.Provider,{value:g,children:a})}function h(){let a=(0,c.useContext)(f);if(!a)throw Error("useSidebarFeaturesContext must be used within a <SidebarFeaturesProvider>");return a}a.s(["SidebarFeaturesProvider",()=>g,"mapNodeStateToSidebarStatus",()=>e,"useSidebarFeaturesContext",()=>h])}];
1
+ module.exports=[15108,(a,b,c)=>{"use strict";b.exports=a.r(55721).vendored.contexts.HooksClientContext},71915,(a,b,c)=>{"use strict";b.exports=a.r(55721).vendored.contexts.ServerInsertedHtml},18622,(a,b,c)=>{b.exports=a.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},20635,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/action-async-storage.external.js",()=>require("next/dist/server/app-render/action-async-storage.external.js"))},55721,(a,b,c)=>{"use strict";b.exports=a.r(18622)},10973,(a,b,c)=>{"use strict";b.exports=a.r(55721).vendored["react-ssr"].ReactJsxRuntime},96960,(a,b,c)=>{"use strict";b.exports=a.r(55721).vendored["react-ssr"].React},55690,(a,b,c)=>{"use strict";b.exports=a.r(55721).vendored["react-ssr"].ReactDOM},21032,(a,b,c)=>{"use strict";b.exports=a.r(55721).vendored["react-ssr"].ReactServerDOMTurbopackClient},62485,(a,b,c)=>{"use strict";b.exports=a.r(55721).vendored.contexts.AppRouterContext},90920,a=>{"use strict";var b=a.i(10973),c=a.i(85536);function d({className:a,type:d,...e}){return(0,b.jsx)("input",{type:d,"data-slot":"input",className:(0,c.cn)("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",a),...e})}a.s(["Input",()=>d])},48972,a=>{"use strict";function b(a,[b,c]){return Math.min(c,Math.max(b,a))}a.s(["clamp",()=>b])},67424,a=>{"use strict";let b=(0,a.i(25700).default)("puzzle",[["path",{d:"M15.39 4.39a1 1 0 0 0 1.68-.474 2.5 2.5 0 1 1 3.014 3.015 1 1 0 0 0-.474 1.68l1.683 1.682a2.414 2.414 0 0 1 0 3.414L19.61 15.39a1 1 0 0 1-1.68-.474 2.5 2.5 0 1 0-3.014 3.015 1 1 0 0 1 .474 1.68l-1.683 1.682a2.414 2.414 0 0 1-3.414 0L8.61 19.61a1 1 0 0 0-1.68.474 2.5 2.5 0 1 1-3.014-3.015 1 1 0 0 0 .474-1.68l-1.683-1.682a2.414 2.414 0 0 1 0-3.414L4.39 8.61a1 1 0 0 1 1.68.474 2.5 2.5 0 1 0 3.014-3.015 1 1 0 0 1-.474-1.68l1.683-1.682a2.414 2.414 0 0 1 3.414 0z",key:"w46dr5"}]]);a.s(["Puzzle",()=>b],67424)},1377,a=>{"use strict";var b=a.i(25674);let c=(0,b.createServerReference)("00f2a80e98ccea49289178a0b2a8e041f1f5fb2eda",b.callServer,void 0,b.findSourceMapURL,"pickFolder");async function d(){let a=await c();if(a.error)throw Error(a.error);return a.path}a.s(["pickFolder",()=>d],1377)},42527,a=>{"use strict";let b=(0,a.i(25700).default)("folder-plus",[["path",{d:"M12 10v6",key:"1bos4e"}],["path",{d:"M9 13h6",key:"1uhe8q"}],["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]);a.s(["FolderPlus",()=>b],42527)},1356,a=>{"use strict";var b=a.i(10973),c=a.i(96960);let d={"action-required":"action-needed",running:"in-progress",done:"done",blocked:"blocked",pending:"blocked",error:"error",creating:null,deleting:null};function e(a){return d[a]}let f=(0,c.createContext)(null);function g({children:a}){let[d,e]=(0,c.useState)([]),g=(0,c.useMemo)(()=>({features:d,setFeatures:e}),[d]);return(0,b.jsx)(f.Provider,{value:g,children:a})}function h(){let a=(0,c.useContext)(f);if(!a)throw Error("useSidebarFeaturesContext must be used within a <SidebarFeaturesProvider>");return a}a.s(["SidebarFeaturesProvider",()=>g,"mapNodeStateToSidebarStatus",()=>e,"useSidebarFeaturesContext",()=>h])}];
2
2
 
3
3
  //# sourceMappingURL=%5Broot-of-the-server%5D__545792ab._.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/contexts/hooks-client-context.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/contexts/server-inserted-html.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/module.compiled.js","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/ssr/react.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/ssr/react-dom.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/ssr/react-server-dom-turbopack-client.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/contexts/app-router-context.ts","../../../../../../../src/presentation/web/components/ui/input.tsx","../../../../../../../node_modules/.pnpm/%40radix-ui%2Bnumber%401.1.1/node_modules/%40radix-ui/number/src/number.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/puzzle.ts","../../../../../../../src/presentation/web/app/actions/data%3Ae546e0%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/common/add-repository-button/pick-folder.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/folder-plus.ts","../../../../../../../src/presentation/web/hooks/sidebar-features-context.tsx"],"sourcesContent":["module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].HooksClientContext\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].ServerInsertedHtml\n","if (process.env.NEXT_RUNTIME === 'edge') {\n module.exports = require('next/dist/server/route-modules/app-page/module.js')\n} else {\n if (process.env.__NEXT_EXPERIMENTAL_REACT) {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.prod.js')\n }\n }\n } else {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.prod.js')\n }\n }\n }\n}\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.ReactJsxRuntime\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.React\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.ReactDOM\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.ReactServerDOMTurbopackClient\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].AppRouterContext\n","import * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\nfunction Input({ className, type, ...props }: React.ComponentProps<'input'>) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n 'file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n","function clamp(value: number, [min, max]: [number, number]): number {\n return Math.min(max, Math.max(min, value));\n}\n\nexport { clamp };\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M15.39 4.39a1 1 0 0 0 1.68-.474 2.5 2.5 0 1 1 3.014 3.015 1 1 0 0 0-.474 1.68l1.683 1.682a2.414 2.414 0 0 1 0 3.414L19.61 15.39a1 1 0 0 1-1.68-.474 2.5 2.5 0 1 0-3.014 3.015 1 1 0 0 1 .474 1.68l-1.683 1.682a2.414 2.414 0 0 1-3.414 0L8.61 19.61a1 1 0 0 0-1.68.474 2.5 2.5 0 1 1-3.014-3.015 1 1 0 0 0 .474-1.68l-1.683-1.682a2.414 2.414 0 0 1 0-3.414L4.39 8.61a1 1 0 0 1 1.68.474 2.5 2.5 0 1 0 3.014-3.015 1 1 0 0 1-.474-1.68l1.683-1.682a2.414 2.414 0 0 1 3.414 0z',\n key: 'w46dr5',\n },\n ],\n];\n\n/**\n * @component @name Puzzle\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTUuMzkgNC4zOWExIDEgMCAwIDAgMS42OC0uNDc0IDIuNSAyLjUgMCAxIDEgMy4wMTQgMy4wMTUgMSAxIDAgMCAwLS40NzQgMS42OGwxLjY4MyAxLjY4MmEyLjQxNCAyLjQxNCAwIDAgMSAwIDMuNDE0TDE5LjYxIDE1LjM5YTEgMSAwIDAgMS0xLjY4LS40NzQgMi41IDIuNSAwIDEgMC0zLjAxNCAzLjAxNSAxIDEgMCAwIDEgLjQ3NCAxLjY4bC0xLjY4MyAxLjY4MmEyLjQxNCAyLjQxNCAwIDAgMS0zLjQxNCAwTDguNjEgMTkuNjFhMSAxIDAgMCAwLTEuNjguNDc0IDIuNSAyLjUgMCAxIDEtMy4wMTQtMy4wMTUgMSAxIDAgMCAwIC40NzQtMS42OGwtMS42ODMtMS42ODJhMi40MTQgMi40MTQgMCAwIDEgMC0zLjQxNEw0LjM5IDguNjFhMSAxIDAgMCAxIDEuNjguNDc0IDIuNSAyLjUgMCAxIDAgMy4wMTQtMy4wMTUgMSAxIDAgMCAxLS40NzQtMS42OGwxLjY4My0xLjY4MmEyLjQxNCAyLjQxNCAwIDAgMSAzLjQxNCAweiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/puzzle\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Puzzle = createLucideIcon('puzzle', __iconNode);\n\nexport default Puzzle;\n","/* __next_internal_action_entry_do_not_use__ [{\"00d33ce7fe440a4d4e55d65f865c1f22282142eb69\":\"pickFolder\"},\"src/presentation/web/app/actions/pick-folder.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"00d33ce7fe440a4d4e55d65f865c1f22282142eb69\",callServer,void 0,findSourceMapURL,\"pickFolder\");export{$$RSC_SERVER_ACTION_0 as pickFolder};","import { pickFolder as pickFolderAction } from '@/app/actions/pick-folder';\n\n/**\n * Opens a native OS folder picker dialog via server action.\n * Returns the selected absolute path, or null if the user cancelled.\n */\nexport async function pickFolder(): Promise<string | null> {\n const result = await pickFolderAction();\n\n if (result.error) {\n throw new Error(result.error);\n }\n\n return result.path;\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 10v6', key: '1bos4e' }],\n ['path', { d: 'M9 13h6', key: '1uhe8q' }],\n [\n 'path',\n {\n d: 'M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z',\n key: '1kt360',\n },\n ],\n];\n\n/**\n * @component @name FolderPlus\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgMTB2NiIgLz4KICA8cGF0aCBkPSJNOSAxM2g2IiAvPgogIDxwYXRoIGQ9Ik0yMCAyMGEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLTItMmgtNy45YTIgMiAwIDAgMS0xLjY5LS45TDkuNiAzLjlBMiAyIDAgMCAwIDcuOTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTNhMiAyIDAgMCAwIDIgMloiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/folder-plus\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FolderPlus = createLucideIcon('folder-plus', __iconNode);\n\nexport default FolderPlus;\n","'use client';\n\nimport { createContext, useContext, useState, useMemo, type ReactNode } from 'react';\nimport type { FeatureNodeState } from '@/components/common/feature-node/feature-node-state-config';\nimport type { FeatureStatus } from '@/components/common/feature-status-config';\n\n// Re-export the FeatureItem type so consumers can import from one place.\n// This will gain `featureId` in a later phase.\nexport interface SidebarFeatureItem {\n name: string;\n status: FeatureStatus;\n featureId: string;\n startedAt?: number;\n duration?: string;\n agentType?: string;\n modelId?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Pure mapping: FeatureNodeState (6-state) → FeatureStatus (5-state) | null\n// ---------------------------------------------------------------------------\n\nconst stateMapping: Record<FeatureNodeState, FeatureStatus | null> = {\n 'action-required': 'action-needed',\n running: 'in-progress',\n done: 'done',\n blocked: 'blocked',\n pending: 'blocked',\n error: 'error',\n creating: null,\n deleting: null,\n};\n\n/**\n * Maps a canvas FeatureNodeState to the sidebar's 5-state FeatureStatus.\n * Returns `null` for `creating` (optimistic UI) — these should be excluded from the sidebar.\n */\nexport function mapNodeStateToSidebarStatus(state: FeatureNodeState): FeatureStatus | null {\n return stateMapping[state];\n}\n\n// ---------------------------------------------------------------------------\n// SidebarFeaturesContext\n// ---------------------------------------------------------------------------\n\ninterface SidebarFeaturesContextValue {\n features: SidebarFeatureItem[];\n setFeatures: (features: SidebarFeatureItem[]) => void;\n}\n\nconst SidebarFeaturesContext = createContext<SidebarFeaturesContextValue | null>(null);\n\ninterface SidebarFeaturesProviderProps {\n children: ReactNode;\n}\n\nexport function SidebarFeaturesProvider({ children }: SidebarFeaturesProviderProps) {\n const [features, setFeatures] = useState<SidebarFeatureItem[]>([]);\n\n const value = useMemo<SidebarFeaturesContextValue>(() => ({ features, setFeatures }), [features]);\n\n return (\n <SidebarFeaturesContext.Provider value={value}>{children}</SidebarFeaturesContext.Provider>\n );\n}\n\nexport function useSidebarFeaturesContext(): SidebarFeaturesContextValue {\n const ctx = useContext(SidebarFeaturesContext);\n if (!ctx) {\n throw new Error('useSidebarFeaturesContext must be used within a <SidebarFeaturesProvider>');\n }\n return ctx;\n}\n"],"names":["module","exports","require","vendored","HooksClientContext","ServerInsertedHtml","process","env","NEXT_RUNTIME","__NEXT_EXPERIMENTAL_REACT","NODE_ENV","TURBOPACK","ReactJsxRuntime","React","ReactDOM","ReactServerDOMTurbopackClient","AppRouterContext"],"mappings":"6CAAAA,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRC,QAAQ,CAAC,QAAW,CAACC,kBAAkB,8BCFzCJ,GAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRC,QAAQ,CAAC,QAAW,CAACE,kBAAkB,+sBCwBjCL,EAAOC,OAAO,CAAGC,EAAQ,CAAA,CAAA,IAAA,iCC1BjCF,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRC,QAAQ,CAAC,YAAY,CAAES,eAAe,+BCFxCZ,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRC,QAAQ,CAAC,YAAY,CAAEU,KAAK,+BCF9Bb,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRC,QAAQ,CAAC,YAAY,CAAEW,QAAQ,8BCFjCd,GAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRC,QAAQ,CAAC,YAAY,CAAEY,6BAA6B,+BCFtDf,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRC,QAAQ,CAAC,QAAW,CAACa,gBAAgB,0CCAvC,EAAA,EAAA,CAAA,CAAA,OAEA,SAAS,EAAM,WAAE,CAAS,MAAE,CAAI,CAAE,GAAG,EAAsC,EACzE,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CACC,KAAM,EACN,YAAU,QACV,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,6bACA,gFACA,yGACA,GAED,GAAG,CAAK,EAGf,8CClBA,SAAS,EAAM,CAAA,CAAe,CAAC,EAAK,EAAG,CAAA,CAA6B,AAClE,OAAO,KAAK,GAAA,CAAI,EAAK,KAAK,GAAA,CAAI,EAAK,GACrC,EAD0C,CAAC,2CCuB3C,CAAA,CAAA,CAAA,CAAA,AAAM,CAAN,CAAM,CAAA,EAAS,CAAT,AAAS,CAAT,AAAS,CAAT,AAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CArBI,CAqBM,AApBxC,CAoBwC,AAnBtC,CAAA,AAmBsC,CAnBtC,AAmBsC,CAnBtC,AAmBsC,CAnBtC,AAmBsC,CAnBtC,AAmBsC,CAnBtC,AAmBsC,CAlBtC,AAkBsC,CAjBpC,AAiBoC,CAjBpC,AAiB8C,CAAA,AAjB3C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,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","ignoreList":[0,1,2,3,4,5,6,7,10,13]}
1
+ {"version":3,"sources":["../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/contexts/hooks-client-context.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/contexts/server-inserted-html.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/module.compiled.js","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/ssr/react.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/ssr/react-dom.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/ssr/react-server-dom-turbopack-client.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/contexts/app-router-context.ts","../../../../../../../src/presentation/web/components/ui/input.tsx","../../../../../../../node_modules/.pnpm/%40radix-ui%2Bnumber%401.1.1/node_modules/%40radix-ui/number/src/number.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/puzzle.ts","../../../../../../../src/presentation/web/app/actions/data%3Aaea046%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/common/add-repository-button/pick-folder.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/folder-plus.ts","../../../../../../../src/presentation/web/hooks/sidebar-features-context.tsx"],"sourcesContent":["module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].HooksClientContext\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].ServerInsertedHtml\n","if (process.env.NEXT_RUNTIME === 'edge') {\n module.exports = require('next/dist/server/route-modules/app-page/module.js')\n} else {\n if (process.env.__NEXT_EXPERIMENTAL_REACT) {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.prod.js')\n }\n }\n } else {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.prod.js')\n }\n }\n }\n}\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.ReactJsxRuntime\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.React\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.ReactDOM\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.ReactServerDOMTurbopackClient\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].AppRouterContext\n","import * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\nfunction Input({ className, type, ...props }: React.ComponentProps<'input'>) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n 'file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n","function clamp(value: number, [min, max]: [number, number]): number {\n return Math.min(max, Math.max(min, value));\n}\n\nexport { clamp };\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M15.39 4.39a1 1 0 0 0 1.68-.474 2.5 2.5 0 1 1 3.014 3.015 1 1 0 0 0-.474 1.68l1.683 1.682a2.414 2.414 0 0 1 0 3.414L19.61 15.39a1 1 0 0 1-1.68-.474 2.5 2.5 0 1 0-3.014 3.015 1 1 0 0 1 .474 1.68l-1.683 1.682a2.414 2.414 0 0 1-3.414 0L8.61 19.61a1 1 0 0 0-1.68.474 2.5 2.5 0 1 1-3.014-3.015 1 1 0 0 0 .474-1.68l-1.683-1.682a2.414 2.414 0 0 1 0-3.414L4.39 8.61a1 1 0 0 1 1.68.474 2.5 2.5 0 1 0 3.014-3.015 1 1 0 0 1-.474-1.68l1.683-1.682a2.414 2.414 0 0 1 3.414 0z',\n key: 'w46dr5',\n },\n ],\n];\n\n/**\n * @component @name Puzzle\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTUuMzkgNC4zOWExIDEgMCAwIDAgMS42OC0uNDc0IDIuNSAyLjUgMCAxIDEgMy4wMTQgMy4wMTUgMSAxIDAgMCAwLS40NzQgMS42OGwxLjY4MyAxLjY4MmEyLjQxNCAyLjQxNCAwIDAgMSAwIDMuNDE0TDE5LjYxIDE1LjM5YTEgMSAwIDAgMS0xLjY4LS40NzQgMi41IDIuNSAwIDEgMC0zLjAxNCAzLjAxNSAxIDEgMCAwIDEgLjQ3NCAxLjY4bC0xLjY4MyAxLjY4MmEyLjQxNCAyLjQxNCAwIDAgMS0zLjQxNCAwTDguNjEgMTkuNjFhMSAxIDAgMCAwLTEuNjguNDc0IDIuNSAyLjUgMCAxIDEtMy4wMTQtMy4wMTUgMSAxIDAgMCAwIC40NzQtMS42OGwtMS42ODMtMS42ODJhMi40MTQgMi40MTQgMCAwIDEgMC0zLjQxNEw0LjM5IDguNjFhMSAxIDAgMCAxIDEuNjguNDc0IDIuNSAyLjUgMCAxIDAgMy4wMTQtMy4wMTUgMSAxIDAgMCAxLS40NzQtMS42OGwxLjY4My0xLjY4MmEyLjQxNCAyLjQxNCAwIDAgMSAzLjQxNCAweiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/puzzle\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Puzzle = createLucideIcon('puzzle', __iconNode);\n\nexport default Puzzle;\n","/* __next_internal_action_entry_do_not_use__ [{\"00f2a80e98ccea49289178a0b2a8e041f1f5fb2eda\":\"pickFolder\"},\"src/presentation/web/app/actions/pick-folder.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"00f2a80e98ccea49289178a0b2a8e041f1f5fb2eda\",callServer,void 0,findSourceMapURL,\"pickFolder\");export{$$RSC_SERVER_ACTION_0 as pickFolder};","import { pickFolder as pickFolderAction } from '@/app/actions/pick-folder';\n\n/**\n * Opens a native OS folder picker dialog via server action.\n * Returns the selected absolute path, or null if the user cancelled.\n */\nexport async function pickFolder(): Promise<string | null> {\n const result = await pickFolderAction();\n\n if (result.error) {\n throw new Error(result.error);\n }\n\n return result.path;\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 10v6', key: '1bos4e' }],\n ['path', { d: 'M9 13h6', key: '1uhe8q' }],\n [\n 'path',\n {\n d: 'M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z',\n key: '1kt360',\n },\n ],\n];\n\n/**\n * @component @name FolderPlus\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgMTB2NiIgLz4KICA8cGF0aCBkPSJNOSAxM2g2IiAvPgogIDxwYXRoIGQ9Ik0yMCAyMGEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLTItMmgtNy45YTIgMiAwIDAgMS0xLjY5LS45TDkuNiAzLjlBMiAyIDAgMCAwIDcuOTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTNhMiAyIDAgMCAwIDIgMloiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/folder-plus\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FolderPlus = createLucideIcon('folder-plus', __iconNode);\n\nexport default FolderPlus;\n","'use client';\n\nimport { createContext, useContext, useState, useMemo, type ReactNode } from 'react';\nimport type { FeatureNodeState } from '@/components/common/feature-node/feature-node-state-config';\nimport type { FeatureStatus } from '@/components/common/feature-status-config';\n\n// Re-export the FeatureItem type so consumers can import from one place.\n// This will gain `featureId` in a later phase.\nexport interface SidebarFeatureItem {\n name: string;\n status: FeatureStatus;\n featureId: string;\n startedAt?: number;\n duration?: string;\n agentType?: string;\n modelId?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Pure mapping: FeatureNodeState (6-state) → FeatureStatus (5-state) | null\n// ---------------------------------------------------------------------------\n\nconst stateMapping: Record<FeatureNodeState, FeatureStatus | null> = {\n 'action-required': 'action-needed',\n running: 'in-progress',\n done: 'done',\n blocked: 'blocked',\n pending: 'blocked',\n error: 'error',\n creating: null,\n deleting: null,\n};\n\n/**\n * Maps a canvas FeatureNodeState to the sidebar's 5-state FeatureStatus.\n * Returns `null` for `creating` (optimistic UI) — these should be excluded from the sidebar.\n */\nexport function mapNodeStateToSidebarStatus(state: FeatureNodeState): FeatureStatus | null {\n return stateMapping[state];\n}\n\n// ---------------------------------------------------------------------------\n// SidebarFeaturesContext\n// ---------------------------------------------------------------------------\n\ninterface SidebarFeaturesContextValue {\n features: SidebarFeatureItem[];\n setFeatures: (features: SidebarFeatureItem[]) => void;\n}\n\nconst SidebarFeaturesContext = createContext<SidebarFeaturesContextValue | null>(null);\n\ninterface SidebarFeaturesProviderProps {\n children: ReactNode;\n}\n\nexport function SidebarFeaturesProvider({ children }: SidebarFeaturesProviderProps) {\n const [features, setFeatures] = useState<SidebarFeatureItem[]>([]);\n\n const value = useMemo<SidebarFeaturesContextValue>(() => ({ features, setFeatures }), [features]);\n\n return (\n <SidebarFeaturesContext.Provider value={value}>{children}</SidebarFeaturesContext.Provider>\n );\n}\n\nexport function useSidebarFeaturesContext(): SidebarFeaturesContextValue {\n const ctx = useContext(SidebarFeaturesContext);\n if (!ctx) {\n throw new Error('useSidebarFeaturesContext must be used within a <SidebarFeaturesProvider>');\n }\n return ctx;\n}\n"],"names":["module","exports","require","vendored","HooksClientContext","ServerInsertedHtml","process","env","NEXT_RUNTIME","__NEXT_EXPERIMENTAL_REACT","NODE_ENV","TURBOPACK","ReactJsxRuntime","React","ReactDOM","ReactServerDOMTurbopackClient","AppRouterContext"],"mappings":"6CAAAA,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRC,QAAQ,CAAC,QAAW,CAACC,kBAAkB,8BCFzCJ,GAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRC,QAAQ,CAAC,QAAW,CAACE,kBAAkB,+sBCwBjCL,EAAOC,OAAO,CAAGC,EAAQ,CAAA,CAAA,IAAA,iCC1BjCF,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRC,QAAQ,CAAC,YAAY,CAAES,eAAe,+BCFxCZ,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRC,QAAQ,CAAC,YAAY,CAAEU,KAAK,+BCF9Bb,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRC,QAAQ,CAAC,YAAY,CAAEW,QAAQ,8BCFjCd,GAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRC,QAAQ,CAAC,YAAY,CAAEY,6BAA6B,+BCFtDf,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRC,QAAQ,CAAC,QAAW,CAACa,gBAAgB,0CCAvC,EAAA,EAAA,CAAA,CAAA,OAEA,SAAS,EAAM,WAAE,CAAS,MAAE,CAAI,CAAE,GAAG,EAAsC,EACzE,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CACC,KAAM,EACN,YAAU,QACV,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,6bACA,gFACA,yGACA,GAED,GAAG,CAAK,EAGf,8CClBA,SAAS,EAAM,CAAA,CAAe,CAAC,EAAK,EAAG,CAAA,CAA6B,AAClE,OAAO,KAAK,GAAA,CAAI,EAAK,KAAK,GAAA,CAAI,EAAK,GACrC,EAD0C,CAAC,2CCuB3C,CAAA,CAAA,CAAA,CAAA,AAAM,CAAN,CAAM,CAAA,EAAS,CAAT,AAAS,CAAT,AAAS,CAAT,AAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CArBI,CAqBM,AApBxC,CAoBwC,AAnBtC,CAAA,AAmBsC,CAnBtC,AAmBsC,CAnBtC,AAmBsC,CAnBtC,AAmBsC,CAnBtC,AAmBsC,CAnBtC,AAmBsC,CAlBtC,AAkBsC,CAjBpC,AAiBoC,CAjBpC,AAiB8C,CAAA,AAjB3C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACH,GAAA,CAAK,AAAL,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EACP,CAEJ,qDCXkM,IAAA,EAAA,EAAA,CAAA,CAAA,OAAsG,IAAM,EAAmC,CAAA,EAAA,EAAA,iBAAb,IAAa,AAAqB,EAAC,KAAxB,wCAAqE,EAAA,UAAU,CAAC,KAAK,EAAE,EAAA,gBAAgB,CAAC,cCMhb,eAAe,IACpB,IAAM,EAAS,MAAM,IAErB,GAAI,EAAO,KAAK,CACd,CADgB,KACV,AAAI,MAAM,EAAO,KAAK,EAG9B,OAAO,EAAO,IAAI,AACpB,wDCYA,CAAA,CAAA,CAAA,CAAM,AAAN,CAAA,CAAM,CAAA,EAAa,CAAA,CAAA,CAAA,CAAA,CAAb,AAAa,CAAb,AAAa,CAAb,AAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAvBA,CAClC,AAsBiD,CAtBhD,AAsBgD,CAtBhD,AAsBgD,CAtBhD,AAsBgD,CAtBhD,AAsBgD,CAtBhD,AAsBgD,CAtBhD,AAsBgD,CAtBhD,AAsBgD,CAtBhD,AAAQ,AAsBwC,CAtBxC,AAAE,AAsBsC,CAAU,CAAA,AAtB7C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAY,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CACzC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAQ,CAAA,AAAE,EAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAW,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CACxC,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CACE,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACH,GAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EACP,CAEJ,0ECXA,EAAA,EAAA,CAAA,CAAA,OAoBA,IAAM,EAA+D,CACnE,kBAAmB,gBACnB,QAAS,cACT,KAAM,OACN,QAAS,UACT,QAAS,UACT,MAAO,QACP,SAAU,KACV,SAAU,IACZ,EAMO,SAAS,EAA4B,CAAuB,EACjE,OAAO,CAAY,CAAC,EAAM,AAC5B,CAWA,IAAM,EAAyB,CAAA,EAAA,EAAA,aAAa,AAAb,EAAkD,MAM1E,SAAS,EAAwB,UAAE,CAAQ,CAAgC,EAChF,GAAM,CAAC,EAAU,EAAY,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAuB,EAAE,EAE3D,EAAQ,CAAA,EAAA,EAAA,OAAA,AAAO,EAA8B,IAAM,CAAC,UAAE,cAAU,EAAY,CAAC,CAAG,CAAC,EAAS,EAEhG,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAuB,QAAQ,CAAA,CAAC,MAAO,WAAQ,GAEpD,CAEO,SAAS,IACd,IAAM,EAAM,CAAA,EAAA,EAAA,UAAA,AAAU,EAAC,GACvB,GAAI,CAAC,EACH,GADQ,GACF,AAAI,MAAM,6EAElB,OAAO,CACT","ignoreList":[0,1,2,3,4,5,6,7,10,13]}
@@ -1,4 +1,4 @@
1
1
  module.exports=[74533,(a,b,c)=>{b.exports=a.x("node:child_process",()=>require("node:child_process"))},92658,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"registerServerReference",{enumerable:!0,get:function(){return d.registerServerReference}});let d=a.r(28478)},12581,(a,b,c)=>{"use strict";function d(a){for(let b=0;b<a.length;b++){let c=a[b];if("function"!=typeof c)throw Object.defineProperty(Error(`A "use server" file can only export async functions, found ${typeof c}.
2
- Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"ensureServerEntryExports",{enumerable:!0,get:function(){return d}})},12513,a=>{"use strict";var b=a.i(92658),c=a.i(74533);let d={platform:process.platform,exec:(a,b)=>(0,c.execSync)(a,b)},e={darwin:"osascript -e 'POSIX path of (choose folder with prompt \"Select a repository folder\")'",linux:'zenity --file-selection --directory --title="Select a repository folder" 2>/dev/null',win32:"powershell -NoProfile -Command \"Add-Type -AssemblyName System.Windows.Forms; $f = New-Object System.Windows.Forms.FolderBrowserDialog; $f.Description = 'Select a repository folder'; if ($f.ShowDialog() -eq 'OK') { $f.SelectedPath } else { exit 1 }\""};class f{deps;constructor(a={}){this.deps={...d,...a}}getCommand(){return e[this.deps.platform]??null}pickFolder(){let a=this.getCommand();if(!a)throw Error(`Unsupported platform: ${this.deps.platform}`);try{let b=this.deps.exec(a,{encoding:"utf-8",timeout:6e4}).trim();return b.length>0?b:null}catch(a){var b;if("object"==typeof(b=a)&&null!==b&&"status"in b&&1===a.status)return null;throw a}}}async function g(){let a=new f;try{return{path:a.pickFolder()}}catch(a){return{path:null,error:a instanceof Error?a.message:"Failed to open folder dialog"}}}(0,a.i(12581).ensureServerEntryExports)([g]),(0,b.registerServerReference)(g,"00d33ce7fe440a4d4e55d65f865c1f22282142eb69",null),a.s(["pickFolder",()=>g],12513)},66973,a=>{"use strict";var b=a.i(12513);a.s([],65794),a.i(65794),a.s(["00d33ce7fe440a4d4e55d65f865c1f22282142eb69",()=>b.pickFolder],66973)}];
2
+ Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"ensureServerEntryExports",{enumerable:!0,get:function(){return d}})},12513,a=>{"use strict";var b=a.i(92658),c=a.i(74533);let d={platform:process.platform,exec:(a,b)=>(0,c.execSync)(a,b)},e={darwin:"osascript -e 'POSIX path of (choose folder with prompt \"Select a repository folder\")'",linux:'zenity --file-selection --directory --title="Select a repository folder" 2>/dev/null',win32:"powershell -NoProfile -Command \"Add-Type -AssemblyName System.Windows.Forms; $f = New-Object System.Windows.Forms.FolderBrowserDialog; $f.Description = 'Select a repository folder'; if ($f.ShowDialog() -eq 'OK') { $f.SelectedPath } else { exit 1 }\""};class f{deps;constructor(a={}){this.deps={...d,...a}}getCommand(){return e[this.deps.platform]??null}pickFolder(){let a=this.getCommand();if(!a)throw Error(`Unsupported platform: ${this.deps.platform}`);try{let b=this.deps.exec(a,{encoding:"utf-8",timeout:6e4}).trim();return b.length>0?b:null}catch(a){var b;if("object"==typeof(b=a)&&null!==b&&"status"in b&&1===a.status)return null;throw a}}}async function g(){let a=new f;try{return{path:a.pickFolder()}}catch(a){return{path:null,error:a instanceof Error?a.message:"Failed to open folder dialog"}}}(0,a.i(12581).ensureServerEntryExports)([g]),(0,b.registerServerReference)(g,"00f2a80e98ccea49289178a0b2a8e041f1f5fb2eda",null),a.s(["pickFolder",()=>g],12513)},66973,a=>{"use strict";var b=a.i(12513);a.s([],65794),a.i(65794),a.s(["00f2a80e98ccea49289178a0b2a8e041f1f5fb2eda",()=>b.pickFolder],66973)}];
3
3
 
4
4
  //# sourceMappingURL=%5Broot-of-the-server%5D__6b17a22d._.js.map