@shepai/cli 1.72.9-pr220.f17b60a → 1.73.0-pr222.ef53005

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 (274) hide show
  1. package/dist/packages/core/src/application/ports/output/agents/agent-executor-provider.interface.d.ts +1 -1
  2. package/dist/packages/core/src/application/ports/output/agents/agent-executor-provider.interface.d.ts.map +1 -1
  3. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  4. package/dist/packages/core/src/infrastructure/di/container.js +2 -1
  5. package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-provider.service.d.ts +4 -2
  6. package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-provider.service.d.ts.map +1 -1
  7. package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-provider.service.js +8 -4
  8. package/dist/packages/core/src/infrastructure/services/agents/common/agent-runner.service.js +1 -1
  9. package/dist/packages/core/src/infrastructure/services/agents/common/structured-agent-caller.service.js +1 -1
  10. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js +1 -1
  11. package/dist/src/presentation/web/app/layout.js +1 -1
  12. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
  13. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +54 -124
  14. package/dist/src/presentation/web/components/common/control-center-drawer/use-artifact-fetch.d.ts +13 -0
  15. package/dist/src/presentation/web/components/common/control-center-drawer/use-artifact-fetch.d.ts.map +1 -0
  16. package/dist/src/presentation/web/components/common/control-center-drawer/use-artifact-fetch.js +46 -0
  17. package/dist/src/presentation/web/components/common/feature-drawer/use-feature-actions.d.ts.map +1 -1
  18. package/dist/src/presentation/web/components/common/feature-drawer/use-feature-actions.js +7 -10
  19. package/dist/src/presentation/web/components/common/repository-node/use-repository-actions.d.ts.map +1 -1
  20. package/dist/src/presentation/web/components/common/repository-node/use-repository-actions.js +14 -39
  21. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +6 -7
  22. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  23. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +45 -8
  24. package/dist/src/presentation/web/hooks/agent-events-provider.d.ts.map +1 -1
  25. package/dist/src/presentation/web/hooks/agent-events-provider.js +3 -2
  26. package/dist/src/presentation/web/hooks/use-agent-events.d.ts.map +1 -1
  27. package/dist/src/presentation/web/hooks/use-agent-events.js +13 -2
  28. package/dist/src/presentation/web/hooks/use-deploy-action.d.ts.map +1 -1
  29. package/dist/src/presentation/web/hooks/use-deploy-action.js +10 -13
  30. package/dist/src/presentation/web/lib/logger.d.ts +7 -0
  31. package/dist/src/presentation/web/lib/logger.d.ts.map +1 -0
  32. package/dist/src/presentation/web/lib/logger.js +11 -0
  33. package/dist/tsconfig.build.tsbuildinfo +1 -1
  34. package/package.json +1 -1
  35. package/web/.next/BUILD_ID +1 -1
  36. package/web/.next/build-manifest.json +2 -2
  37. package/web/.next/cache/.previewinfo +1 -1
  38. package/web/.next/cache/.rscinfo +1 -1
  39. package/web/.next/cache/.tsbuildinfo +1 -1
  40. package/web/.next/cache/config.json +3 -3
  41. package/web/.next/fallback-build-manifest.json +2 -2
  42. package/web/.next/prerender-manifest.json +3 -3
  43. package/web/.next/required-server-files.js +1 -1
  44. package/web/.next/required-server-files.json +1 -1
  45. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +45 -30
  46. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +3 -3
  47. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  48. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  49. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +51 -36
  50. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +3 -3
  51. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  52. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  53. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +41 -26
  54. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +3 -3
  55. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  56. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  57. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +45 -30
  58. package/web/.next/server/app/(dashboard)/create/page.js +3 -3
  59. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  60. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  61. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +51 -36
  62. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +3 -3
  63. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  64. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  65. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +41 -26
  66. package/web/.next/server/app/(dashboard)/page.js +3 -3
  67. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  68. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  69. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +41 -26
  70. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +3 -3
  71. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  72. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  73. package/web/.next/server/app/_global-error.html +2 -2
  74. package/web/.next/server/app/_global-error.rsc +1 -1
  75. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  76. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  77. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  78. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  79. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  80. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  81. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  82. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  83. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  84. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  85. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  86. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  87. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  88. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  89. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  90. package/web/.next/server/app/version/page.js.nft.json +1 -1
  91. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  92. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  93. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  94. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js +3 -0
  95. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js.map +1 -0
  96. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js +3 -0
  97. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js.map +1 -0
  98. package/web/.next/server/chunks/ssr/[root-of-the-server]__17a611f0._.js +2 -2
  99. package/web/.next/server/chunks/ssr/[root-of-the-server]__17a611f0._.js.map +1 -1
  100. package/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
  101. package/web/.next/server/chunks/ssr/[root-of-the-server]__45dbf93d._.js +2 -2
  102. package/web/.next/server/chunks/ssr/[root-of-the-server]__45dbf93d._.js.map +1 -1
  103. package/web/.next/server/chunks/ssr/[root-of-the-server]__6258349c._.js +1 -1
  104. package/web/.next/server/chunks/ssr/[root-of-the-server]__6258349c._.js.map +1 -1
  105. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  106. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js.map +1 -1
  107. package/web/.next/server/chunks/ssr/[root-of-the-server]__6cbc1149._.js +2 -2
  108. package/web/.next/server/chunks/ssr/[root-of-the-server]__6cbc1149._.js.map +1 -1
  109. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  110. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js.map +1 -1
  111. package/web/.next/server/chunks/ssr/[root-of-the-server]__94a6d275._.js +1 -1
  112. package/web/.next/server/chunks/ssr/[root-of-the-server]__94a6d275._.js.map +1 -1
  113. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +1 -1
  114. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
  115. package/web/.next/server/chunks/ssr/_0e9d6bf7._.js +1 -1
  116. package/web/.next/server/chunks/ssr/_0e9d6bf7._.js.map +1 -1
  117. package/web/.next/server/chunks/ssr/{_8e87c87b._.js → _4f7c70c9._.js} +2 -2
  118. package/web/.next/server/chunks/ssr/{_8e87c87b._.js.map → _4f7c70c9._.js.map} +1 -1
  119. package/web/.next/server/chunks/ssr/{_1978f325._.js → _5ee4f5a7._.js} +2 -2
  120. package/web/.next/server/chunks/ssr/_5ee4f5a7._.js.map +1 -0
  121. package/web/.next/server/chunks/ssr/_61351ed3._.js +1 -1
  122. package/web/.next/server/chunks/ssr/_61351ed3._.js.map +1 -1
  123. package/web/.next/server/chunks/ssr/_6e08ce21._.js +3 -0
  124. package/web/.next/server/chunks/ssr/_6e08ce21._.js.map +1 -0
  125. package/web/.next/server/chunks/ssr/_8400c8bb._.js +1 -1
  126. package/web/.next/server/chunks/ssr/_8400c8bb._.js.map +1 -1
  127. package/web/.next/server/chunks/ssr/_9f940437._.js +1 -1
  128. package/web/.next/server/chunks/ssr/_9f940437._.js.map +1 -1
  129. package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_d5b0cb86._.js → server/chunks/ssr/src_presentation_web_163038ba._.js} +3 -3
  130. package/web/.next/server/chunks/ssr/{src_presentation_web_d5b0cb86._.js.map → src_presentation_web_163038ba._.js.map} +1 -1
  131. package/web/.next/server/chunks/ssr/{src_presentation_web_2b91e4ec._.js → src_presentation_web_30d7eeda._.js} +2 -2
  132. package/web/.next/server/chunks/ssr/{src_presentation_web_5bcc1537._.js.map → src_presentation_web_30d7eeda._.js.map} +1 -1
  133. package/web/.next/server/chunks/ssr/{src_presentation_web_d5b0cb86._.js → src_presentation_web_459cb687._.js} +3 -3
  134. package/web/.next/server/chunks/ssr/{src_presentation_web_e626b63c._.js.map → src_presentation_web_459cb687._.js.map} +1 -1
  135. package/web/.next/server/chunks/ssr/{src_presentation_web_5bcc1537._.js → src_presentation_web_565a14f8._.js} +2 -2
  136. package/web/.next/server/chunks/ssr/{src_presentation_web_2b91e4ec._.js.map → src_presentation_web_565a14f8._.js.map} +1 -1
  137. package/web/.next/server/chunks/ssr/src_presentation_web_67178b88._.js +1 -1
  138. package/web/.next/server/chunks/ssr/src_presentation_web_67178b88._.js.map +1 -1
  139. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js +3 -0
  140. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js.map +1 -0
  141. package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js +3 -0
  142. package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js.map +1 -0
  143. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  144. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  145. package/web/.next/server/pages/500.html +2 -2
  146. package/web/.next/server/server-reference-manifest.js +1 -1
  147. package/web/.next/server/server-reference-manifest.json +183 -126
  148. package/web/.next/standalone/src/presentation/web/.next/BUILD_ID +1 -1
  149. package/web/.next/standalone/src/presentation/web/.next/build-manifest.json +2 -2
  150. package/web/.next/standalone/src/presentation/web/.next/prerender-manifest.json +3 -3
  151. package/web/.next/standalone/src/presentation/web/.next/required-server-files.json +1 -1
  152. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +45 -30
  153. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page.js +3 -3
  154. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  155. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  156. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +51 -36
  157. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +3 -3
  158. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  159. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  160. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +41 -26
  161. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +3 -3
  162. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  163. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  164. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +45 -30
  165. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page.js +3 -3
  166. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  167. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  168. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +51 -36
  169. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +3 -3
  170. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  171. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  172. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +41 -26
  173. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page.js +3 -3
  174. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  175. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  176. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +41 -26
  177. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +3 -3
  178. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  179. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  180. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.html +2 -2
  181. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.rsc +1 -1
  182. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  183. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  184. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  185. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  186. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  187. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  188. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  189. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  190. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  191. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page.js.nft.json +1 -1
  192. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  193. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  194. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page.js.nft.json +1 -1
  195. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  196. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  197. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page.js.nft.json +1 -1
  198. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  199. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  200. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js +3 -0
  201. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js +3 -0
  202. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__17a611f0._.js +2 -2
  203. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
  204. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__45dbf93d._.js +2 -2
  205. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6258349c._.js +1 -1
  206. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  207. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6cbc1149._.js +2 -2
  208. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  209. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__94a6d275._.js +1 -1
  210. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +1 -1
  211. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_0e9d6bf7._.js +1 -1
  212. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{_8e87c87b._.js → _4f7c70c9._.js} +2 -2
  213. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{_1978f325._.js → _5ee4f5a7._.js} +2 -2
  214. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_61351ed3._.js +1 -1
  215. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_6e08ce21._.js +3 -0
  216. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_8400c8bb._.js +1 -1
  217. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_9f940437._.js +1 -1
  218. package/web/.next/{server/chunks/ssr/src_presentation_web_e626b63c._.js → standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_163038ba._.js} +3 -3
  219. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{src_presentation_web_2b91e4ec._.js → src_presentation_web_30d7eeda._.js} +2 -2
  220. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{src_presentation_web_e626b63c._.js → src_presentation_web_459cb687._.js} +3 -3
  221. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{src_presentation_web_5bcc1537._.js → src_presentation_web_565a14f8._.js} +2 -2
  222. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_67178b88._.js +1 -1
  223. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js +3 -0
  224. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js +3 -0
  225. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  226. package/web/.next/standalone/src/presentation/web/.next/server/pages/500.html +2 -2
  227. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.js +1 -1
  228. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.json +183 -126
  229. package/web/.next/standalone/src/presentation/web/app/layout.tsx +1 -1
  230. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx +80 -115
  231. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/use-artifact-fetch.ts +56 -0
  232. package/web/.next/standalone/src/presentation/web/components/common/feature-drawer/use-feature-actions.ts +6 -7
  233. package/web/.next/standalone/src/presentation/web/components/common/repository-node/use-repository-actions.ts +29 -54
  234. package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center-inner.tsx +7 -7
  235. package/web/.next/standalone/src/presentation/web/components/features/control-center/use-control-center-state.ts +50 -8
  236. package/web/.next/standalone/src/presentation/web/hooks/agent-events-provider.tsx +7 -2
  237. package/web/.next/standalone/src/presentation/web/hooks/use-agent-events.ts +13 -2
  238. package/web/.next/standalone/src/presentation/web/hooks/use-deploy-action.ts +13 -13
  239. package/web/.next/standalone/src/presentation/web/lib/logger.ts +12 -0
  240. package/web/.next/standalone/src/presentation/web/server.js +1 -1
  241. package/web/.next/static/chunks/{98ca891a5c156aa5.js → 0cfed3c69c312c09.js} +3 -3
  242. package/web/.next/static/chunks/{c92e1360ada8ca94.js → 1f5c93a8b939416d.js} +2 -2
  243. package/web/.next/static/chunks/4c63764a2d06e45e.js +1 -0
  244. package/web/.next/static/chunks/{792aac476adb5875.js → 89e74b1c3eb43b03.js} +1 -1
  245. package/web/.next/static/chunks/{9b1770f05f1d95e5.js → 937d7d4d58942872.js} +1 -1
  246. package/web/.next/static/chunks/95e3f47abe8032e5.js +1 -0
  247. package/web/.next/static/chunks/{83463b63971f5723.js → b835e88cdc8c63d2.js} +1 -1
  248. package/web/.next/static/chunks/{d5e95c4482029a39.js → e2342af6b68c94c1.js} +1 -1
  249. package/web/.next/static/chunks/{a7f52757dff0cea0.js → ed69d6b172ae2bfe.js} +1 -1
  250. package/web/.next/static/chunks/fd46753cd16664a9.js +1 -0
  251. package/web/.next/trace +1 -1
  252. package/web/.next/trace-build +1 -1
  253. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_816618e2.js +0 -3
  254. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_816618e2.js.map +0 -1
  255. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_ba2e050f.js +0 -3
  256. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_ba2e050f.js.map +0 -1
  257. package/web/.next/server/chunks/ssr/_1978f325._.js.map +0 -1
  258. package/web/.next/server/chunks/ssr/_250a63ae._.js +0 -3
  259. package/web/.next/server/chunks/ssr/_250a63ae._.js.map +0 -1
  260. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_5955c012.js +0 -3
  261. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_5955c012.js.map +0 -1
  262. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +0 -3
  263. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +0 -1
  264. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_816618e2.js +0 -3
  265. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_ba2e050f.js +0 -3
  266. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_250a63ae._.js +0 -3
  267. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_5955c012.js +0 -3
  268. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +0 -3
  269. package/web/.next/static/chunks/76827713cb2b7333.js +0 -1
  270. package/web/.next/static/chunks/7c8adcfd920a8f74.js +0 -1
  271. package/web/.next/static/chunks/b6becf0de992842a.js +0 -1
  272. /package/web/.next/static/{eg0FTlsA4z_7CXbFfMgAr → 0yTXyENV4ko7rpM4-3vV8}/_buildManifest.js +0 -0
  273. /package/web/.next/static/{eg0FTlsA4z_7CXbFfMgAr → 0yTXyENV4ko7rpM4-3vV8}/_clientMiddlewareManifest.json +0 -0
  274. /package/web/.next/static/{eg0FTlsA4z_7CXbFfMgAr → 0yTXyENV4ko7rpM4-3vV8}/_ssgManifest.js +0 -0
@@ -7,10 +7,14 @@ import { deleteFeature } from '../../../app/actions/delete-feature.js';
7
7
  import { addRepository } from '../../../app/actions/add-repository.js';
8
8
  import { deleteRepository } from '../../../app/actions/delete-repository.js';
9
9
  import { getFeatureMetadata } from '../../../app/actions/get-feature-metadata.js';
10
+ import { fetchGraphData } from '../../../app/actions/get-graph-data.js';
10
11
  import { useAgentEventsContext } from '../../../hooks/agent-events-provider.js';
11
12
  import { useSoundAction } from '../../../hooks/use-sound-action.js';
13
+ import { createLogger } from '../../../lib/logger.js';
12
14
  import { mapEventTypeToState, resolveSseEventUpdates, } from '../../common/feature-node/derive-feature-state.js';
13
15
  import { useGraphState } from '../../../hooks/use-graph-state.js';
16
+ const log = createLogger('[Polling]');
17
+ const POLL_INTERVAL_MS = 3_000;
14
18
  /** Must match the message string emitted by the SSE route in agent-events/route.ts */
15
19
  const METADATA_UPDATED_MESSAGE = 'Feature metadata updated';
16
20
  let nextFeatureId = 0;
@@ -19,6 +23,13 @@ export function useControlCenterState(initialNodes, initialEdges) {
19
23
  const deleteSound = useSoundAction('delete');
20
24
  const createSound = useSoundAction('create');
21
25
  const { nodes, edges, reconcile, updateFeature, addPendingFeature, removeFeature, restoreFeature, addRepository: addRepositoryToMap, removeRepository, replaceRepository, getFeatureRepositoryPath, getRepositoryData, setCallbacks, } = useGraphState(initialNodes, initialEdges);
26
+ // Refs for stable access to latest nodes/edges without callback recreation
27
+ const nodesRef = useRef(nodes);
28
+ const edgesRef = useRef(edges);
29
+ useEffect(() => {
30
+ nodesRef.current = nodes;
31
+ edgesRef.current = edges;
32
+ }, [nodes, edges]);
22
33
  // Sync server props into domain Maps when initialNodes/initialEdges change.
23
34
  // Keyed by a stable string so we don't re-reconcile on every render.
24
35
  const initialNodeKey = useMemo(() => initialNodes
@@ -77,6 +88,10 @@ export function useControlCenterState(initialNodes, initialEdges) {
77
88
  // SSE effect: only state + lifecycle updates
78
89
  const processedEventCountRef = useRef(0);
79
90
  useEffect(() => {
91
+ // Clamp cursor if events were pruned
92
+ if (processedEventCountRef.current > events.length) {
93
+ processedEventCountRef.current = 0;
94
+ }
80
95
  if (events.length <= processedEventCountRef.current)
81
96
  return;
82
97
  const newEvents = events.slice(processedEventCountRef.current);
@@ -103,6 +118,10 @@ export function useControlCenterState(initialNodes, initialEdges) {
103
118
  const metadataFetchedRef = useRef(new Set());
104
119
  const processedMetadataCountRef = useRef(0);
105
120
  useEffect(() => {
121
+ // Clamp cursor if events were pruned
122
+ if (processedMetadataCountRef.current > events.length) {
123
+ processedMetadataCountRef.current = 0;
124
+ }
106
125
  if (events.length <= processedMetadataCountRef.current)
107
126
  return;
108
127
  const newEvents = events.slice(processedMetadataCountRef.current);
@@ -125,6 +144,23 @@ export function useControlCenterState(initialNodes, initialEdges) {
125
144
  });
126
145
  }
127
146
  }, [events, updateFeature]);
147
+ // --- Polling fallback: catch any SSE events that were missed ---
148
+ useEffect(() => {
149
+ log.debug(`polling enabled (${POLL_INTERVAL_MS}ms interval)`);
150
+ const timer = setInterval(async () => {
151
+ try {
152
+ const { nodes: freshNodes, edges: freshEdges } = await fetchGraphData();
153
+ reconcile(freshNodes, freshEdges);
154
+ }
155
+ catch {
156
+ log.warn('poll fetch failed — will retry next interval');
157
+ }
158
+ }, POLL_INTERVAL_MS);
159
+ return () => {
160
+ log.debug('polling disabled');
161
+ clearInterval(timer);
162
+ };
163
+ }, [reconcile]);
128
164
  // onNodesChange is a no-op: nodes are derived from domain Maps.
129
165
  // Since nodesDraggable=false and elementsSelectable=false, only React Flow's
130
166
  // internal replace/dimensions changes come through — we ignore them all.
@@ -156,7 +192,7 @@ export function useControlCenterState(initialNodes, initialEdges) {
156
192
  const handleDeleteFeature = useCallback((featureId) => {
157
193
  const nodeId = `feat-${featureId}`;
158
194
  // Find the current entry for rollback
159
- const prevEntry = nodes
195
+ const prevEntry = nodesRef.current
160
196
  .filter((n) => n.id === nodeId)
161
197
  .map((n) => ({
162
198
  nodeId: n.id,
@@ -180,16 +216,16 @@ export function useControlCenterState(initialNodes, initialEdges) {
180
216
  restoreFeature(nodeId, prevEntry);
181
217
  toast.error('Failed to delete feature');
182
218
  });
183
- }, [nodes, router, deleteSound, removeFeature, restoreFeature]);
219
+ }, [router, deleteSound, removeFeature, restoreFeature]);
184
220
  const handleDeleteRepository = useCallback(async (repositoryId) => {
185
221
  const repoNodeId = `repo-${repositoryId}`;
186
222
  // Find children of this repo via edges
187
- const childFeatureIds = new Set(edges.filter((e) => e.source === repoNodeId).map((e) => e.target));
223
+ const childFeatureIds = new Set(edgesRef.current.filter((e) => e.source === repoNodeId).map((e) => e.target));
188
224
  // Snapshot for rollback
189
225
  const prevRepoData = getRepositoryData(repoNodeId);
190
226
  const childSnapshots = new Map();
191
227
  for (const childId of childFeatureIds) {
192
- const childNode = nodes.find((n) => n.id === childId);
228
+ const childNode = nodesRef.current.find((n) => n.id === childId);
193
229
  if (childNode) {
194
230
  childSnapshots.set(childId, { nodeId: childId, data: childNode.data });
195
231
  }
@@ -221,8 +257,6 @@ export function useControlCenterState(initialNodes, initialEdges) {
221
257
  rollback();
222
258
  }
223
259
  }, [
224
- edges,
225
- nodes,
226
260
  deleteSound,
227
261
  removeRepository,
228
262
  removeFeature,
@@ -233,9 +267,12 @@ export function useControlCenterState(initialNodes, initialEdges) {
233
267
  const handleLayout = useCallback((direction) => {
234
268
  // Layout is applied via reconcile on next server prop update.
235
269
  // For immediate re-layout, we apply dagre and trigger a reconcile-like update.
236
- const result = layoutWithDagre(nodes, edges, { ...CANVAS_LAYOUT_DEFAULTS, direction });
270
+ const result = layoutWithDagre(nodesRef.current, edgesRef.current, {
271
+ ...CANVAS_LAYOUT_DEFAULTS,
272
+ direction,
273
+ });
237
274
  reconcile(result.nodes, result.edges);
238
- }, [nodes, edges, reconcile]);
275
+ }, [reconcile]);
239
276
  const handleAddRepository = useCallback((path) => {
240
277
  const tempId = `repo-temp-${Date.now()}`;
241
278
  const repoName = path
@@ -1 +1 @@
1
- {"version":3,"file":"agent-events-provider.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/hooks/agent-events-provider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EAC1B,MAAM,oBAAoB,CAAC;AAI5B,UAAU,wBAAyB,SAAQ,qBAAqB;IAC9D,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,wBAAwB,2CAIhF;AAED,wBAAgB,qBAAqB,IAAI,oBAAoB,CAM5D"}
1
+ {"version":3,"file":"agent-events-provider.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/hooks/agent-events-provider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAsC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC3E,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EAC1B,MAAM,oBAAoB,CAAC;AAI5B,UAAU,wBAAyB,SAAQ,qBAAqB;IAC9D,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,wBAAwB,2CAShF;AAED,wBAAgB,qBAAqB,IAAI,oBAAoB,CAM5D"}
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
- import { createContext, useContext } from 'react';
3
+ import { createContext, useContext, useMemo } from 'react';
4
4
  import { useAgentEvents, } from './use-agent-events.js';
5
5
  const AgentEventsContext = createContext(null);
6
6
  /**
@@ -8,7 +8,8 @@ const AgentEventsContext = createContext(null);
8
8
  * Wrap the app once; use `useAgentEventsContext()` to read.
9
9
  */
10
10
  export function AgentEventsProvider({ children, runId }) {
11
- const value = useAgentEvents({ runId });
11
+ const { events, lastEvent, connectionStatus } = useAgentEvents({ runId });
12
+ const value = useMemo(() => ({ events, lastEvent, connectionStatus }), [events, lastEvent, connectionStatus]);
12
13
  return _jsx(AgentEventsContext.Provider, { value: value, children: children });
13
14
  }
14
15
  export function useAgentEventsContext() {
@@ -1 +1 @@
1
- {"version":3,"file":"use-agent-events.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/hooks/use-agent-events.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAE9E,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,YAAY,GAAG,cAAc,CAAC;AAE3E,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACpC,gBAAgB,EAAE,gBAAgB,CAAC;CACpC;AAID;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,oBAAoB,CA+GpF"}
1
+ {"version":3,"file":"use-agent-events.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/hooks/use-agent-events.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAG9E,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,YAAY,GAAG,cAAc,CAAC;AAE3E,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACpC,gBAAgB,EAAE,gBAAgB,CAAC;CACpC;AAOD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,oBAAoB,CAmHpF"}
@@ -1,6 +1,10 @@
1
1
  'use client';
2
2
  import { useCallback, useEffect, useRef, useState } from 'react';
3
+ import { createLogger } from '../lib/logger.js';
4
+ const log = createLogger('[SSE]');
3
5
  const SW_PATH = '/agent-events-sw.js';
6
+ const MAX_EVENTS = 500;
7
+ const PRUNE_KEEP = 250;
4
8
  /**
5
9
  * Hook that receives real-time agent notification events via a Service Worker.
6
10
  *
@@ -20,7 +24,11 @@ export function useAgentEvents(options) {
20
24
  return;
21
25
  if (msg.type === 'notification') {
22
26
  const parsed = msg.data;
23
- setEvents((prev) => [...prev, parsed]);
27
+ log.debug('event received:', parsed.eventType, parsed);
28
+ setEvents((prev) => {
29
+ const next = [...prev, parsed];
30
+ return next.length > MAX_EVENTS ? next.slice(-PRUNE_KEEP) : next;
31
+ });
24
32
  setLastEvent(parsed);
25
33
  }
26
34
  else if (msg.type === 'status') {
@@ -146,7 +154,10 @@ function connectDirectEventSource(runId, setEvents, setLastEvent, setConnectionS
146
154
  };
147
155
  es.addEventListener('notification', ((event) => {
148
156
  const parsed = JSON.parse(event.data);
149
- setEvents((prev) => [...prev, parsed]);
157
+ setEvents((prev) => {
158
+ const next = [...prev, parsed];
159
+ return next.length > MAX_EVENTS ? next.slice(-PRUNE_KEEP) : next;
160
+ });
150
161
  setLastEvent(parsed);
151
162
  }));
152
163
  }
@@ -1 +1 @@
1
- {"version":3,"file":"use-deploy-action.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/hooks/use-deploy-action.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAM5E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;IAC/B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAeD,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,GAAG,iBAAiB,CAgKlF"}
1
+ {"version":3,"file":"use-deploy-action.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/hooks/use-deploy-action.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAM5E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;IAC/B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAOD,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,GAAG,iBAAiB,CAwKlF"}
@@ -1,19 +1,11 @@
1
1
  'use client';
2
- /* eslint-disable no-console */
3
2
  import { useState, useCallback, useRef, useEffect } from 'react';
3
+ import { createLogger } from '../lib/logger.js';
4
4
  import { deployFeature } from '../app/actions/deploy-feature.js';
5
5
  import { deployRepository } from '../app/actions/deploy-repository.js';
6
6
  import { stopDeployment } from '../app/actions/stop-deployment.js';
7
7
  import { getDeploymentStatus } from '../app/actions/get-deployment-status.js';
8
- const PREFIX = '[useDeployAction]';
9
- const isDebug = !!process.env.NEXT_PUBLIC_DEBUG;
10
- const noop = () => undefined;
11
- const log = {
12
- info: isDebug ? (...args) => console.info(PREFIX, ...args) : noop,
13
- debug: isDebug ? (...args) => console.debug(PREFIX, ...args) : noop,
14
- warn: (...args) => console.warn(PREFIX, ...args),
15
- error: (...args) => console.error(PREFIX, ...args),
16
- };
8
+ const log = createLogger('[useDeployAction]');
17
9
  const ERROR_CLEAR_DELAY = 5000;
18
10
  const POLL_INTERVAL = 3000;
19
11
  export function useDeployAction(input) {
@@ -25,6 +17,11 @@ export function useDeployAction(input) {
25
17
  const errorTimerRef = useRef(null);
26
18
  const pollIntervalRef = useRef(null);
27
19
  const mountedRef = useRef(true);
20
+ const statusRef = useRef(status);
21
+ // Keep statusRef in sync with latest status
22
+ useEffect(() => {
23
+ statusRef.current = status;
24
+ }, [status]);
28
25
  // Track mounted state
29
26
  useEffect(() => {
30
27
  mountedRef.current = true;
@@ -66,14 +63,14 @@ export function useDeployAction(input) {
66
63
  stopPolling();
67
64
  }
68
65
  else {
69
- if (result.state !== status) {
70
- log.info(`poll state changed: ${status} → ${result.state}, url=${result.url}`);
66
+ if (result.state !== statusRef.current) {
67
+ log.info(`poll state changed: ${statusRef.current} → ${result.state}, url=${result.url}`);
71
68
  }
72
69
  setStatus(result.state);
73
70
  setUrl(result.url);
74
71
  }
75
72
  }, POLL_INTERVAL);
76
- }, [stopPolling, status]);
73
+ }, [stopPolling]);
77
74
  const handleDeploy = useCallback(async () => {
78
75
  if (!input) {
79
76
  log.warn('deploy() called but input is null — no-op');
@@ -0,0 +1,7 @@
1
+ export declare function createLogger(prefix: string): {
2
+ info: (...args: unknown[]) => void;
3
+ debug: (...args: unknown[]) => void;
4
+ warn: (...args: unknown[]) => void;
5
+ error: (...args: unknown[]) => void;
6
+ };
7
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/lib/logger.ts"],"names":[],"mappings":"AAIA,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM;oBAEb,OAAO,EAAE;qBACR,OAAO,EAAE;oBACpB,OAAO,EAAE;qBACR,OAAO,EAAE;EAE7B"}
@@ -0,0 +1,11 @@
1
+ /* eslint-disable no-console */
2
+ const isDebug = !!process.env.NEXT_PUBLIC_DEBUG;
3
+ const noop = () => undefined;
4
+ export function createLogger(prefix) {
5
+ return {
6
+ info: isDebug ? (...args) => console.info(prefix, ...args) : noop,
7
+ debug: isDebug ? (...args) => console.debug(prefix, ...args) : noop,
8
+ warn: (...args) => console.warn(prefix, ...args),
9
+ error: (...args) => console.error(prefix, ...args),
10
+ };
11
+ }