@shepai/cli 1.72.4 → 1.72.6

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 (196) hide show
  1. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.d.ts.map +1 -1
  2. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.js +35 -18
  3. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -1
  4. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +6 -1
  5. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/implement.prompt.d.ts.map +1 -1
  6. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/implement.prompt.js +6 -4
  7. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.d.ts.map +1 -1
  8. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.js +10 -5
  9. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
  10. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +8 -2
  11. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +2 -2
  12. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts +3 -1
  13. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  14. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +13 -5
  15. package/dist/src/presentation/web/hooks/drawer-close-guard.d.ts +2 -0
  16. package/dist/src/presentation/web/hooks/drawer-close-guard.d.ts.map +1 -1
  17. package/dist/src/presentation/web/hooks/drawer-close-guard.js +2 -1
  18. package/dist/tsconfig.build.tsbuildinfo +1 -1
  19. package/package.json +1 -1
  20. package/web/.next/BUILD_ID +1 -1
  21. package/web/.next/build-manifest.json +2 -2
  22. package/web/.next/cache/.previewinfo +1 -1
  23. package/web/.next/cache/.rscinfo +1 -1
  24. package/web/.next/cache/.tsbuildinfo +1 -1
  25. package/web/.next/cache/config.json +3 -3
  26. package/web/.next/fallback-build-manifest.json +2 -2
  27. package/web/.next/prerender-manifest.json +3 -3
  28. package/web/.next/required-server-files.js +1 -1
  29. package/web/.next/required-server-files.json +1 -1
  30. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +14 -14
  31. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  32. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  33. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +17 -17
  34. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  35. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  36. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +12 -12
  37. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  38. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  39. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +14 -14
  40. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  41. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  42. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +17 -17
  43. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  44. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  45. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +12 -12
  46. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  47. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  48. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +12 -12
  49. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  50. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  51. package/web/.next/server/app/_global-error.html +2 -2
  52. package/web/.next/server/app/_global-error.rsc +1 -1
  53. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  54. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  55. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  56. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  57. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  58. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  59. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  60. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  61. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  62. package/web/.next/server/app/tools/page/server-reference-manifest.json +1 -1
  63. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  64. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  65. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  66. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  67. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  68. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_2b7834f6.js +1 -1
  69. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_2b7834f6.js.map +1 -1
  70. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_6923c575.js +1 -1
  71. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_6923c575.js.map +1 -1
  72. package/web/.next/server/chunks/ssr/[root-of-the-server]__07385073._.js +2 -2
  73. package/web/.next/server/chunks/ssr/[root-of-the-server]__07385073._.js.map +1 -1
  74. package/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js +1 -1
  75. package/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js.map +1 -1
  76. package/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
  77. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  78. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js.map +1 -1
  79. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js +1 -1
  80. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js.map +1 -1
  81. package/web/.next/server/chunks/ssr/[root-of-the-server]__6db85a66._.js +2 -2
  82. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  83. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js.map +1 -1
  84. package/web/.next/server/chunks/ssr/[root-of-the-server]__8fcb9132._.js +2 -2
  85. package/web/.next/server/chunks/ssr/_00e6c698._.js +1 -1
  86. package/web/.next/server/chunks/ssr/_00e6c698._.js.map +1 -1
  87. package/web/.next/server/chunks/ssr/_07c2a32a._.js +1 -1
  88. package/web/.next/server/chunks/ssr/_07c2a32a._.js.map +1 -1
  89. package/web/.next/server/chunks/ssr/_37259405._.js +1 -1
  90. package/web/.next/server/chunks/ssr/_37259405._.js.map +1 -1
  91. package/web/.next/server/chunks/ssr/_85d0351b._.js +1 -1
  92. package/web/.next/server/chunks/ssr/_85d0351b._.js.map +1 -1
  93. package/web/.next/server/chunks/ssr/{_6f07b817._.js → _e50484ec._.js} +2 -2
  94. package/web/.next/server/chunks/ssr/{_6f07b817._.js.map → _e50484ec._.js.map} +1 -1
  95. package/web/.next/server/chunks/ssr/_fc3a6895._.js +1 -1
  96. package/web/.next/server/chunks/ssr/_fc3a6895._.js.map +1 -1
  97. package/web/.next/server/chunks/ssr/src_presentation_web_1a32dbcb._.js +2 -2
  98. package/web/.next/server/chunks/ssr/src_presentation_web_1a32dbcb._.js.map +1 -1
  99. package/web/.next/server/chunks/ssr/src_presentation_web_398553b0._.js +1 -1
  100. package/web/.next/server/chunks/ssr/src_presentation_web_398553b0._.js.map +1 -1
  101. package/web/.next/server/chunks/ssr/src_presentation_web_5c87e8e4._.js +1 -1
  102. package/web/.next/server/chunks/ssr/src_presentation_web_5c87e8e4._.js.map +1 -1
  103. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_f4952172.js +1 -1
  104. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_f4952172.js.map +1 -1
  105. package/web/.next/server/chunks/ssr/src_presentation_web_c1bc6240._.js +2 -2
  106. package/web/.next/server/chunks/ssr/src_presentation_web_c1bc6240._.js.map +1 -1
  107. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  108. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  109. package/web/.next/server/pages/500.html +2 -2
  110. package/web/.next/server/server-reference-manifest.js +1 -1
  111. package/web/.next/server/server-reference-manifest.json +20 -20
  112. package/web/.next/standalone/src/presentation/web/.next/BUILD_ID +1 -1
  113. package/web/.next/standalone/src/presentation/web/.next/build-manifest.json +2 -2
  114. package/web/.next/standalone/src/presentation/web/.next/prerender-manifest.json +3 -3
  115. package/web/.next/standalone/src/presentation/web/.next/required-server-files.json +1 -1
  116. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +14 -14
  117. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  118. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  119. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +17 -17
  120. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  121. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  122. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +12 -12
  123. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  124. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  125. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +14 -14
  126. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  127. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  128. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +17 -17
  129. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  130. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  131. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +12 -12
  132. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  133. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  134. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +12 -12
  135. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  136. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  137. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.html +2 -2
  138. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.rsc +1 -1
  139. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  140. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  141. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  142. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  143. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  144. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  145. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  146. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  147. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  148. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/server-reference-manifest.json +1 -1
  149. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  150. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  151. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  152. 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
  153. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_2b7834f6.js +1 -1
  154. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_6923c575.js +1 -1
  155. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__07385073._.js +2 -2
  156. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js +1 -1
  157. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
  158. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  159. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js +1 -1
  160. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6db85a66._.js +2 -2
  161. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  162. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__8fcb9132._.js +2 -2
  163. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_00e6c698._.js +1 -1
  164. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_07c2a32a._.js +1 -1
  165. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_37259405._.js +1 -1
  166. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_85d0351b._.js +1 -1
  167. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{_6f07b817._.js → _e50484ec._.js} +2 -2
  168. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_fc3a6895._.js +1 -1
  169. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_1a32dbcb._.js +2 -2
  170. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_398553b0._.js +1 -1
  171. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_5c87e8e4._.js +1 -1
  172. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_f4952172.js +1 -1
  173. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_c1bc6240._.js +2 -2
  174. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  175. package/web/.next/standalone/src/presentation/web/.next/server/pages/500.html +2 -2
  176. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.js +1 -1
  177. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.json +20 -20
  178. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx +8 -2
  179. package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center-inner.tsx +2 -2
  180. package/web/.next/standalone/src/presentation/web/components/features/control-center/use-control-center-state.ts +11 -5
  181. package/web/.next/standalone/src/presentation/web/hooks/drawer-close-guard.tsx +5 -1
  182. package/web/.next/standalone/src/presentation/web/server.js +1 -1
  183. package/web/.next/static/chunks/{a6a90c6798cbc332.js → 06b6b02bab76aee7.js} +1 -1
  184. package/web/.next/static/chunks/{ef5c9b5ca75f5471.js → 06dfd668334ffb4e.js} +1 -1
  185. package/web/.next/static/chunks/{b17ac661ba6821cd.js → 32957ff277daec59.js} +1 -1
  186. package/web/.next/static/chunks/{d717b59752363f9b.js → 412a3ac70c529c5b.js} +1 -1
  187. package/web/.next/static/chunks/{d7cc1029085b27db.js → 550bf3cb8220cbf0.js} +1 -1
  188. package/web/.next/static/chunks/{a7d37a627c7869eb.js → 8b36e07129a1471f.js} +1 -1
  189. package/web/.next/static/chunks/{498879011ae095f1.js → d4ecce2ac7795bd9.js} +1 -1
  190. package/web/.next/static/chunks/{d9a30c62ba67d6da.js → ecb2130572a7fbe7.js} +1 -1
  191. package/web/.next/static/chunks/{8b185ff4023149e8.js → fc07834e422b1caa.js} +1 -1
  192. package/web/.next/trace +1 -1
  193. package/web/.next/trace-build +1 -1
  194. /package/web/.next/static/{BKlbRwdm1wGLZiZ1JfGrF → 7K6dTYQIJ7__PLUYLLfZV}/_buildManifest.js +0 -0
  195. /package/web/.next/static/{BKlbRwdm1wGLZiZ1JfGrF → 7K6dTYQIJ7__PLUYLLfZV}/_clientMiddlewareManifest.json +0 -0
  196. /package/web/.next/static/{BKlbRwdm1wGLZiZ1JfGrF → 7K6dTYQIJ7__PLUYLLfZV}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"merge.node.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AACpG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yEAAyE,CAAC;AAClH,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACd,MAAM,iEAAiE,CAAC;AAsBzE,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,cAAc,CAAC;IACzB,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1E,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,EAAE,UAAU,GAAG,QAAQ,CAAC,CAAC;IACnE;;;OAGG;IACH,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1F,YAAY,EAAE,aAAa,CAAC;CAC7B;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,IAGnC,OAAO,iBAAiB,KAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAiP7E"}
1
+ {"version":3,"file":"merge.node.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AACpG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yEAAyE,CAAC;AAClH,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACd,MAAM,iEAAiE,CAAC;AAmBzE,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,cAAc,CAAC;IACzB,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1E,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,EAAE,UAAU,GAAG,QAAQ,CAAC,CAAC;IACnE;;;OAGG;IACH,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1F,YAAY,EAAE,aAAa,CAAC;CAC7B;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,IAGnC,OAAO,iBAAiB,KAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAkQ7E"}
@@ -14,7 +14,7 @@
14
14
  */
15
15
  import { interrupt, isGraphBubbleUp } from '@langchain/langgraph';
16
16
  import { SdlcLifecycle, PrStatus } from '../../../../../../domain/generated/output.js';
17
- import { createNodeLogger, shouldInterrupt, retryExecute, buildExecutorOptions, getCompletedPhases, clearCompletedPhase, markPhaseComplete, } from '../node-helpers.js';
17
+ import { createNodeLogger, shouldInterrupt, retryExecute, buildExecutorOptions, } from '../node-helpers.js';
18
18
  import { reportNodeStart } from '../../heartbeat.js';
19
19
  import { recordPhaseStart, recordPhaseEnd, recordApprovalWaitStart, } from '../../phase-timing-context.js';
20
20
  import { updateNodeLifecycle } from '../../lifecycle-context.js';
@@ -33,13 +33,24 @@ export function createMergeNode(deps) {
33
33
  log.info('Starting merge flow');
34
34
  reportNodeStart('merge');
35
35
  await updateNodeLifecycle('merge');
36
- // --- Rejection detection on resume (same pattern as executeNode) ---
37
- const completedPhases = getCompletedPhases(state.specDir);
38
- const isResumeAfterInterrupt = completedPhases.includes('merge') && shouldInterrupt('merge', state.approvalGates);
36
+ // --- Rejection detection on resume ---
37
+ // Use DB lifecycle (Review) instead of feature.yaml completedPhases to detect
38
+ // resume, because feature.yaml is in the worktree which was already pushed.
39
+ const featureForResume = await deps.featureRepository.findById(state.featureId);
40
+ const isResumeAfterInterrupt = featureForResume?.lifecycle === SdlcLifecycle.Review &&
41
+ shouldInterrupt('merge', state.approvalGates);
39
42
  if (isResumeAfterInterrupt && state._approvalAction === 'rejected') {
40
43
  const feedback = state._rejectionFeedback ?? '(no feedback)';
41
44
  log.info(`Merge rejected with feedback: "${feedback}" — scheduling re-execution`);
42
- clearCompletedPhase(state.specDir, 'merge', log);
45
+ // Reset lifecycle so re-execution doesn't detect as resume
46
+ if (featureForResume) {
47
+ await deps.featureRepository.update({
48
+ ...featureForResume,
49
+ lifecycle: SdlcLifecycle.Implementation,
50
+ pr: undefined,
51
+ updatedAt: new Date(),
52
+ });
53
+ }
43
54
  return {
44
55
  currentNode: 'merge',
45
56
  messages: [`[merge] Rejected — will re-execute`],
@@ -110,27 +121,33 @@ export function createMergeNode(deps) {
110
121
  ciFixHistory = ciResult.ciFixHistory;
111
122
  ciFixStatus = ciResult.ciFixStatus;
112
123
  }
113
- // --- Persist PR data before approval gate so feat show displays it ---
114
- if (feature && prUrl && prNumber) {
124
+ // --- Persist lifecycle + PR data before approval gate ---
125
+ // Setting lifecycle to Review serves as the resume detection marker
126
+ // (replaces feature.yaml completedPhases which dirtied the worktree).
127
+ if (feature) {
115
128
  await deps.featureRepository.update({
116
129
  ...feature,
117
- pr: {
118
- url: prUrl,
119
- number: prNumber,
120
- status: PrStatus.Open,
121
- ...(commitHash ? { commitHash } : {}),
122
- ...(ciStatus ? { ciStatus: ciStatus } : {}),
123
- ...(ciFixAttempts > 0 ? { ciFixAttempts } : {}),
124
- ...(ciFixHistory.length > 0 ? { ciFixHistory } : {}),
125
- },
130
+ lifecycle: SdlcLifecycle.Review,
131
+ ...(prUrl && prNumber
132
+ ? {
133
+ pr: {
134
+ url: prUrl,
135
+ number: prNumber,
136
+ status: PrStatus.Open,
137
+ ...(commitHash ? { commitHash } : {}),
138
+ ...(ciStatus ? { ciStatus: ciStatus } : {}),
139
+ ...(ciFixAttempts > 0 ? { ciFixAttempts } : {}),
140
+ ...(ciFixHistory.length > 0 ? { ciFixHistory } : {}),
141
+ },
142
+ }
143
+ : {}),
126
144
  updatedAt: new Date(),
127
145
  });
128
- log.info(`Persisted PR data (${prUrl}) to feature record`);
146
+ log.info('Persisted lifecycle=Review and PR data to feature record');
129
147
  }
130
148
  // --- Merge approval gate ---
131
149
  if (shouldInterrupt('merge', state.approvalGates)) {
132
150
  log.info('Interrupting for merge approval');
133
- markPhaseComplete(state.specDir, 'merge', log);
134
151
  await recordPhaseEnd(mergeTimingId, Date.now() - startTime);
135
152
  await recordApprovalWaitStart(mergeTimingId);
136
153
  const diffSummary = await deps.getDiffSummary(cwd, baseBranch);
@@ -1 +1 @@
1
- {"version":3,"file":"node-helpers.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node-helpers.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.ts"],"names":[],"mappings":"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"}
@@ -260,7 +260,12 @@ export function buildCommitPushBlock(opts) {
260
260
  ` - The message should accurately describe what changed`,
261
261
  ];
262
262
  if (opts.push) {
263
- lines.push(`3. Push to remote: \`git push -u origin HEAD\``);
263
+ lines.push(`3. Run local verification before pushing:`);
264
+ lines.push(` - \`pnpm build\` — must compile without errors`);
265
+ lines.push(` - \`pnpm test\` — all tests must pass`);
266
+ lines.push(` - \`pnpm lint\` — no lint errors`);
267
+ lines.push(` - Fix any issues found before proceeding to push`);
268
+ lines.push(`4. Push to remote: \`git push -u origin HEAD\``);
264
269
  lines.push(` - Do NOT wait for or watch CI — just push and finish`);
265
270
  }
266
271
  return lines.join('\n');
@@ -1 +1 @@
1
- {"version":3,"file":"implement.prompt.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/implement.prompt.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,GAAG,EAAE;QAAE,GAAG,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IACnE,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAwBD;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,iBAAiB,EACxB,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,SAAS,EAAE,EAClB,OAAO,EAAE;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACzE,MAAM,CA8DR"}
1
+ {"version":3,"file":"implement.prompt.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/implement.prompt.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,GAAG,EAAE;QAAE,GAAG,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IACnE,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAwBD;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,iBAAiB,EACxB,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,SAAS,EAAE,EAClB,OAAO,EAAE;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACzE,MAAM,CAgER"}
@@ -36,12 +36,14 @@ export function buildImplementPhasePrompt(state, phase, tasks, context) {
36
36
  const taskSections = tasks.map(formatTaskSection).join('\n');
37
37
  const verificationBlock = context.isLastPhase
38
38
  ? `4. Run full project validation:
39
- - \`pnpm test\` (all tests must pass)
40
- - \`pnpm lint\` (no lint errors)
41
- - \`pnpm typecheck\` (no type errors)
39
+ - Run the test suite (all tests must pass)
40
+ - Run the linter (no lint errors)
41
+ - Run the type checker (no type errors)
42
+ - Discover the correct commands by inspecting package.json or the project's build tooling
42
43
  - Fix any issues before finishing`
43
44
  : `4. Run tests relevant to what you changed:
44
- - Run targeted tests for modified files (e.g. \`pnpm test:single <test-file>\`)
45
+ - Run targeted tests for the modified files
46
+ - Discover the correct test command by inspecting package.json or the project's build tooling
45
47
  - Fix any test failures before moving on`;
46
48
  return `You are a senior software engineer performing autonomous implementation.
47
49
  You are executing phase ${context.phaseIndex + 1} of ${context.totalPhases}: "${phase.name}".
@@ -1 +1 @@
1
- {"version":3,"file":"merge-prompts.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAwCxD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,MAAM,CA0DR;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACb,MAAM,CA0BR;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,SAAS,UAAQ,GAChB,MAAM,CAkER"}
1
+ {"version":3,"file":"merge-prompts.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAwCxD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,MAAM,CA+DR;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACb,MAAM,CA0BR;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,SAAS,UAAQ,GAChB,MAAM,CAkER"}
@@ -61,17 +61,22 @@ export function buildCommitPushPrPrompt(state, branch, baseBranch) {
61
61
  - Use the format: \`feat(<scope>): <description>\` or \`fix(<scope>): <description>\`
62
62
  - The commit message should summarize what actually changed, not be generic
63
63
  - Run \`git commit -m "<your message>"\``);
64
- // Step 2: Push (conditional)
64
+ // Step 2: Local verification before push (conditional)
65
65
  if (shouldPush) {
66
- steps.push(`4. Push the branch to remote: \`git push -u origin ${branch}\``);
66
+ steps.push(`4. Run local verification checks before pushing:
67
+ - Build the project — must compile without errors
68
+ - Run the test suite — all tests must pass
69
+ - Run the linter — no lint errors
70
+ - Discover the correct commands by inspecting package.json or the project's build tooling
71
+ - Fix any issues found before proceeding to push`);
72
+ steps.push(`5. Push the branch to remote: \`git push -u origin ${branch}\``);
67
73
  }
68
74
  // Step 3: PR creation (conditional)
69
75
  if (state.openPr) {
70
- steps.push(`${shouldPush ? '5' : '4'}. Create a pull request:
76
+ steps.push(`${shouldPush ? '6' : '4'}. Create a pull request:
71
77
  - Run \`gh pr create --base ${baseBranch} --head ${branch} --title "<title>" --body "<body>"\`
72
78
  - Write a descriptive PR title using conventional commit format
73
- - Write a rich PR body that summarizes the changes using the spec context below
74
- - After creating the PR, update \`${state.specDir}/feature.yaml\` to set the prUrl field with the PR URL`);
79
+ - Write a rich PR body that summarizes the changes using the spec context below`);
75
80
  }
76
81
  return `You are performing git operations in a feature worktree.
77
82
  ${rejectionSection}
@@ -1 +1 @@
1
- {"version":3,"file":"feature-drawer-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx"],"names":[],"mappings":"AA2DA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,wBAAwB,2CAulBlF"}
1
+ {"version":3,"file":"feature-drawer-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx"],"names":[],"mappings":"AA2DA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,wBAAwB,2CA6lBlF"}
@@ -64,8 +64,10 @@ export function FeatureDrawerClient({ view: initialView }) {
64
64
  continue;
65
65
  const newState = mapEventTypeToState(event.eventType);
66
66
  const newLifecycle = mapPhaseNameToLifecycle(event.phaseName);
67
- // Trigger a server refresh to get the latest drawer view
68
- router.refresh();
67
+ // Trigger a server refresh to get the latest drawer view,
68
+ // but skip when the user has unsaved changes to avoid losing form state.
69
+ if (!isDirtyRef.current)
70
+ router.refresh();
69
71
  // Optimistically update the node data for immediate UI feedback
70
72
  setView((prev) => {
71
73
  if (prev.type !== 'feature' &&
@@ -249,6 +251,10 @@ export function FeatureDrawerClient({ view: initialView }) {
249
251
  const isPrdDirty = view.type === 'prd-review' &&
250
252
  Object.keys(prdDefaultSelections).some((k) => prdDefaultSelections[k] !== prdSelections[k]);
251
253
  const isDirty = isChatDirty || isPrdDirty;
254
+ // Keep dirty state in a ref so the SSE handler can read the latest value
255
+ // without re-running the effect on every keystroke.
256
+ const isDirtyRef = useRef(isDirty);
257
+ isDirtyRef.current = isDirty;
252
258
  const onReset = useCallback(() => {
253
259
  setChatInput('');
254
260
  setPrdSelections({ ...prdDefaultSelections });
@@ -15,8 +15,8 @@ export function ControlCenterInner({ initialNodes, initialEdges }) {
15
15
  const pathname = usePathname();
16
16
  const selectedFeatureId = useSelectedFeatureId();
17
17
  const clickSound = useSoundAction('click');
18
- const { guardedNavigate } = useDrawerCloseGuard();
19
- const { nodes, edges, onNodesChange, handleConnect, handleAddRepository, handleDeleteFeature, handleDeleteRepository, createFeatureNode, } = useControlCenterState(initialNodes, initialEdges);
18
+ const { guardedNavigate, getIsDirty } = useDrawerCloseGuard();
19
+ const { nodes, edges, onNodesChange, handleConnect, handleAddRepository, handleDeleteFeature, handleDeleteRepository, createFeatureNode, } = useControlCenterState(initialNodes, initialEdges, getIsDirty);
20
20
  // Publish sidebar features to context whenever feature node data changes
21
21
  const { setFeatures: setSidebarFeatures } = useSidebarFeaturesContext();
22
22
  const sidebarKey = useMemo(() => {
@@ -13,5 +13,7 @@ export interface ControlCenterState {
13
13
  handleDeleteRepository: (repositoryId: string) => Promise<void>;
14
14
  createFeatureNode: (sourceNodeId: string | null, dataOverride?: Partial<FeatureNodeData>) => string;
15
15
  }
16
- export declare function useControlCenterState(initialNodes: CanvasNodeType[], initialEdges: Edge[]): ControlCenterState;
16
+ export declare function useControlCenterState(initialNodes: CanvasNodeType[], initialEdges: Edge[],
17
+ /** When true, background router.refresh() calls (polling / SSE debounce) are suppressed. */
18
+ isRefreshBlocked?: () => boolean): ControlCenterState;
17
19
  //# sourceMappingURL=use-control-center-state.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-control-center-state.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/use-control-center-state.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAWhF,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,aAAa,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,cAAc,CAAC,EAAE,KAAK,IAAI,CAAC;IAC/D,aAAa,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAChD,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,YAAY,EAAE,CAAC,SAAS,EAAE,eAAe,KAAK,IAAI,CAAC;IACnD,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,sBAAsB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,iBAAiB,EAAE,CACjB,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,YAAY,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,KACpC,MAAM,CAAC;CACb;AAID,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,cAAc,EAAE,EAC9B,YAAY,EAAE,IAAI,EAAE,GACnB,kBAAkB,CA4hBpB"}
1
+ {"version":3,"file":"use-control-center-state.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/use-control-center-state.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAWhF,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,aAAa,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,cAAc,CAAC,EAAE,KAAK,IAAI,CAAC;IAC/D,aAAa,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAChD,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,YAAY,EAAE,CAAC,SAAS,EAAE,eAAe,KAAK,IAAI,CAAC;IACnD,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,sBAAsB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,iBAAiB,EAAE,CACjB,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,YAAY,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,KACpC,MAAM,CAAC;CACb;AAID,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,cAAc,EAAE,EAC9B,YAAY,EAAE,IAAI,EAAE;AACpB,4FAA4F;AAC5F,gBAAgB,CAAC,EAAE,MAAM,OAAO,GAC/B,kBAAkB,CAgiBpB"}
@@ -11,7 +11,9 @@ import { useAgentEventsContext } from '../../../hooks/agent-events-provider.js';
11
11
  import { useSoundAction } from '../../../hooks/use-sound-action.js';
12
12
  import { mapEventTypeToState, mapPhaseNameToLifecycle, } from '../../common/feature-node/derive-feature-state.js';
13
13
  let nextFeatureId = 0;
14
- export function useControlCenterState(initialNodes, initialEdges) {
14
+ export function useControlCenterState(initialNodes, initialEdges,
15
+ /** When true, background router.refresh() calls (polling / SSE debounce) are suppressed. */
16
+ isRefreshBlocked) {
15
17
  const router = useRouter();
16
18
  const [nodes, setNodes] = useState(initialNodes);
17
19
  // eslint-disable-next-line react/hook-use-state -- raw setter renamed; public setEdges wrapper keeps edgesRef in sync
@@ -151,8 +153,11 @@ export function useControlCenterState(initialNodes, initialEdges) {
151
153
  }
152
154
  // Debounced background reconciliation (3s after last SSE event)
153
155
  clearTimeout(reconcileTimerRef.current);
154
- reconcileTimerRef.current = setTimeout(() => router.refresh(), 3000);
155
- }, [events, router]);
156
+ reconcileTimerRef.current = setTimeout(() => {
157
+ if (!isRefreshBlocked?.())
158
+ router.refresh();
159
+ }, 3000);
160
+ }, [events, router, isRefreshBlocked]);
156
161
  // Periodic polling fallback: refresh server data every 5s when any feature
157
162
  // is in an active state (running/action-required). This ensures the UI stays
158
163
  // current even if the SSE connection drops — belt-and-suspenders alongside SSE.
@@ -165,9 +170,12 @@ export function useControlCenterState(initialNodes, initialEdges) {
165
170
  });
166
171
  if (!hasActiveFeature)
167
172
  return;
168
- const interval = setInterval(() => router.refresh(), 5_000);
173
+ const interval = setInterval(() => {
174
+ if (!isRefreshBlocked?.())
175
+ router.refresh();
176
+ }, 5_000);
169
177
  return () => clearInterval(interval);
170
- }, [nodes, router]);
178
+ }, [nodes, router, isRefreshBlocked]);
171
179
  const onNodesChange = useCallback((changes) => {
172
180
  setNodes((ns) => applyNodeChanges(changes, ns));
173
181
  }, []);
@@ -7,6 +7,8 @@ interface DrawerCloseGuardContextValue {
7
7
  } | null) => void;
8
8
  /** Navigate only if no dirty drawer is registered; otherwise show confirmation. */
9
9
  guardedNavigate: (navigate: () => void) => void;
10
+ /** Returns true when any drawer has unsaved changes. Safe to call from effects/intervals. */
11
+ getIsDirty: () => boolean;
10
12
  }
11
13
  export declare function DrawerCloseGuardProvider({ children }: {
12
14
  children: ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"drawer-close-guard.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/hooks/drawer-close-guard.tsx"],"names":[],"mappings":"AAEA,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAgBf,UAAU,4BAA4B;IACpC,qFAAqF;IACrF,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,GAAG,IAAI,KAAK,IAAI,CAAC;IAC5E,mFAAmF;IACnF,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;CACjD;AAQD,wBAAgB,wBAAwB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAsD7E;AAMD,wBAAgB,mBAAmB,iCAIlC;AASD,wBAAgB,qBAAqB,CAAC,EACpC,IAAI,EACJ,OAAO,EACP,OAAO,EACP,OAAO,GACR,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;;EAsBA"}
1
+ {"version":3,"file":"drawer-close-guard.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/hooks/drawer-close-guard.tsx"],"names":[],"mappings":"AAEA,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAgBf,UAAU,4BAA4B;IACpC,qFAAqF;IACrF,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,GAAG,IAAI,KAAK,IAAI,CAAC;IAC5E,mFAAmF;IACnF,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IAChD,6FAA6F;IAC7F,UAAU,EAAE,MAAM,OAAO,CAAC;CAC3B;AAQD,wBAAgB,wBAAwB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAwD7E;AAMD,wBAAgB,mBAAmB,iCAIlC;AASD,wBAAgB,qBAAqB,CAAC,EACpC,IAAI,EACJ,OAAO,EACP,OAAO,EACP,OAAO,GACR,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;;EAsBA"}
@@ -33,7 +33,8 @@ export function DrawerCloseGuardProvider({ children }) {
33
33
  setShowConfirmation(false);
34
34
  pendingNavigateRef.current = null;
35
35
  }, []);
36
- return (_jsxs(DrawerCloseGuardContext, { value: { setGuard, guardedNavigate }, children: [children, _jsx(AlertDialog, { open: showConfirmation, children: _jsxs(AlertDialogContent, { children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: "Discard unsaved changes?" }), _jsx(AlertDialogDescription, { children: "You have unsaved changes. Are you sure you want to discard them?" })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogAction, { variant: "destructive", onClick: confirmDiscard, children: "Discard" }), _jsx(AlertDialogCancel, { onClick: cancelDiscard, children: "Keep editing" })] })] }) })] }));
36
+ const getIsDirty = useCallback(() => guardRef.current?.isDirty ?? false, []);
37
+ return (_jsxs(DrawerCloseGuardContext, { value: { setGuard, guardedNavigate, getIsDirty }, children: [children, _jsx(AlertDialog, { open: showConfirmation, children: _jsxs(AlertDialogContent, { children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: "Discard unsaved changes?" }), _jsx(AlertDialogDescription, { children: "You have unsaved changes. Are you sure you want to discard them?" })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogAction, { variant: "destructive", onClick: confirmDiscard, children: "Discard" }), _jsx(AlertDialogCancel, { onClick: cancelDiscard, children: "Keep editing" })] })] }) })] }));
37
38
  }
38
39
  /* ---------------------------------------------------------------------------
39
40
  * Hook — access the guard from any child component