@shepai/cli 1.24.0 → 1.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/dist/packages/core/src/application/use-cases/features/create/metadata-generator.d.ts.map +1 -1
  2. package/dist/packages/core/src/application/use-cases/features/create/metadata-generator.js +3 -0
  3. package/dist/packages/core/src/infrastructure/di/populate-use-cases-bridge.d.ts.map +1 -1
  4. package/dist/packages/core/src/infrastructure/di/populate-use-cases-bridge.js +2 -0
  5. package/dist/packages/core/src/infrastructure/di/use-cases-bridge.d.ts +9 -1
  6. package/dist/packages/core/src/infrastructure/di/use-cases-bridge.d.ts.map +1 -1
  7. package/dist/packages/core/src/infrastructure/di/use-cases-bridge.js +17 -1
  8. package/dist/packages/core/src/infrastructure/services/ide-launchers/antigravity.launcher.d.ts.map +1 -1
  9. package/dist/packages/core/src/infrastructure/services/ide-launchers/compute-worktree-path.d.ts +17 -0
  10. package/dist/packages/core/src/infrastructure/services/ide-launchers/compute-worktree-path.d.ts.map +1 -0
  11. package/dist/packages/core/src/infrastructure/services/ide-launchers/compute-worktree-path.js +24 -0
  12. package/dist/packages/core/src/infrastructure/services/ide-launchers/cursor.launcher.d.ts.map +1 -1
  13. package/dist/packages/core/src/infrastructure/services/ide-launchers/ide-launcher.interface.d.ts.map +1 -1
  14. package/dist/packages/core/src/infrastructure/services/ide-launchers/ide-launcher.registry.d.ts.map +1 -1
  15. package/dist/packages/core/src/infrastructure/services/ide-launchers/launch-ide.d.ts +30 -0
  16. package/dist/packages/core/src/infrastructure/services/ide-launchers/launch-ide.d.ts.map +1 -0
  17. package/dist/packages/core/src/infrastructure/services/ide-launchers/launch-ide.js +41 -0
  18. package/dist/packages/core/src/infrastructure/services/ide-launchers/vscode.launcher.d.ts.map +1 -1
  19. package/dist/packages/core/src/infrastructure/services/ide-launchers/windsurf.launcher.d.ts.map +1 -1
  20. package/dist/packages/core/src/infrastructure/services/ide-launchers/zed.launcher.d.ts.map +1 -1
  21. package/dist/packages/core/src/infrastructure/services/settings.service.d.ts +3 -1
  22. package/dist/packages/core/src/infrastructure/services/settings.service.d.ts.map +1 -1
  23. package/dist/packages/core/src/infrastructure/services/settings.service.js +27 -12
  24. package/dist/src/presentation/cli/commands/agent/show.command.d.ts.map +1 -1
  25. package/dist/src/presentation/cli/commands/agent/show.command.js +1 -8
  26. package/dist/src/presentation/cli/commands/feat/show.command.d.ts.map +1 -1
  27. package/dist/src/presentation/cli/commands/feat/show.command.js +1 -8
  28. package/dist/src/presentation/cli/commands/ide-open.command.d.ts.map +1 -1
  29. package/dist/src/presentation/cli/commands/ide-open.command.js +11 -21
  30. package/dist/src/presentation/web/app/api/features/create/route.d.ts +5 -0
  31. package/dist/src/presentation/web/app/api/features/create/route.d.ts.map +1 -0
  32. package/dist/src/presentation/web/app/api/features/create/route.js +32 -0
  33. package/dist/src/presentation/web/app/api/ide/open/route.d.ts +9 -0
  34. package/dist/src/presentation/web/app/api/ide/open/route.d.ts.map +1 -0
  35. package/dist/src/presentation/web/app/api/ide/open/route.js +29 -0
  36. package/dist/src/presentation/web/app/api/shell/open/route.d.ts +9 -0
  37. package/dist/src/presentation/web/app/api/shell/open/route.d.ts.map +1 -0
  38. package/dist/src/presentation/web/app/api/shell/open/route.js +51 -0
  39. package/dist/src/presentation/web/app/api/validate-toolbar-input.d.ts +17 -0
  40. package/dist/src/presentation/web/app/api/validate-toolbar-input.d.ts.map +1 -0
  41. package/dist/src/presentation/web/app/api/validate-toolbar-input.js +25 -0
  42. package/dist/src/presentation/web/app/layout.d.ts.map +1 -1
  43. package/dist/src/presentation/web/app/layout.js +2 -1
  44. package/dist/src/presentation/web/app/page.d.ts.map +1 -1
  45. package/dist/src/presentation/web/app/page.js +2 -0
  46. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.d.ts.map +1 -1
  47. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.js +11 -2
  48. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.d.ts +8 -0
  49. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.d.ts.map +1 -1
  50. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.js +31 -0
  51. package/dist/src/presentation/web/components/common/feature-drawer/use-feature-actions.d.ts +14 -0
  52. package/dist/src/presentation/web/components/common/feature-drawer/use-feature-actions.d.ts.map +1 -0
  53. package/dist/src/presentation/web/components/common/feature-drawer/use-feature-actions.js +58 -0
  54. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +4 -0
  55. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
  56. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts.map +1 -1
  57. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.js +18 -0
  58. package/dist/src/presentation/web/components/common/index.d.ts +1 -0
  59. package/dist/src/presentation/web/components/common/index.d.ts.map +1 -1
  60. package/dist/src/presentation/web/components/common/index.js +1 -0
  61. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  62. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +2 -2
  63. package/dist/src/presentation/web/components/features/control-center/control-center.stories.d.ts.map +1 -1
  64. package/dist/src/presentation/web/components/features/control-center/control-center.stories.js +16 -0
  65. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts +1 -0
  66. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  67. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +47 -9
  68. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.d.ts.map +1 -1
  69. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.js +44 -0
  70. package/dist/src/presentation/web/dev-server.js +17 -4
  71. package/dist/tsconfig.build.tsbuildinfo +1 -1
  72. package/package.json +1 -1
  73. package/web/.next/BUILD_ID +1 -1
  74. package/web/.next/app-path-routes-manifest.json +3 -0
  75. package/web/.next/build-manifest.json +2 -2
  76. package/web/.next/cache/.previewinfo +1 -1
  77. package/web/.next/cache/.rscinfo +1 -1
  78. package/web/.next/cache/.tsbuildinfo +1 -1
  79. package/web/.next/cache/config.json +3 -3
  80. package/web/.next/fallback-build-manifest.json +2 -2
  81. package/web/.next/prerender-manifest.json +3 -3
  82. package/web/.next/required-server-files.js +1 -1
  83. package/web/.next/required-server-files.json +1 -1
  84. package/web/.next/routes-manifest.json +18 -0
  85. package/web/.next/server/app/_global-error/page.js +1 -1
  86. package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
  87. package/web/.next/server/app/_global-error.html +2 -2
  88. package/web/.next/server/app/_global-error.rsc +1 -1
  89. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  90. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  91. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  92. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  93. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  94. package/web/.next/server/app/_not-found/page.js +2 -2
  95. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  96. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  97. package/web/.next/server/app/_not-found.html +2 -2
  98. package/web/.next/server/app/_not-found.rsc +14 -13
  99. package/web/.next/server/app/_not-found.segments/_full.segment.rsc +14 -13
  100. package/web/.next/server/app/_not-found.segments/_head.segment.rsc +3 -3
  101. package/web/.next/server/app/_not-found.segments/_index.segment.rsc +6 -5
  102. package/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  103. package/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  104. package/web/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  105. package/web/.next/server/app/api/dialog/pick-files/route.js +2 -2
  106. package/web/.next/server/app/api/dialog/pick-files/route.js.nft.json +1 -1
  107. package/web/.next/server/app/api/dialog/pick-folder/route.js +2 -2
  108. package/web/.next/server/app/api/dialog/pick-folder/route.js.nft.json +1 -1
  109. package/web/.next/server/app/api/features/create/route/app-paths-manifest.json +3 -0
  110. package/web/.next/server/app/api/features/create/route/build-manifest.json +11 -0
  111. package/web/.next/server/app/api/features/create/route/server-reference-manifest.json +4 -0
  112. package/web/.next/server/app/api/features/create/route.js +6 -0
  113. package/web/.next/server/app/api/features/create/route.js.map +5 -0
  114. package/web/.next/server/app/api/features/create/route.js.nft.json +1 -0
  115. package/web/.next/server/app/api/features/create/route_client-reference-manifest.js +2 -0
  116. package/web/.next/server/app/api/ide/open/route/app-paths-manifest.json +3 -0
  117. package/web/.next/server/app/api/ide/open/route/build-manifest.json +11 -0
  118. package/web/.next/server/app/api/ide/open/route/server-reference-manifest.json +4 -0
  119. package/web/.next/server/app/api/ide/open/route.js +6 -0
  120. package/web/.next/server/app/api/ide/open/route.js.map +5 -0
  121. package/web/.next/server/app/api/ide/open/route.js.nft.json +1 -0
  122. package/web/.next/server/app/api/ide/open/route_client-reference-manifest.js +2 -0
  123. package/web/.next/server/app/api/shell/open/route/app-paths-manifest.json +3 -0
  124. package/web/.next/server/app/api/shell/open/route/build-manifest.json +11 -0
  125. package/web/.next/server/app/api/shell/open/route/server-reference-manifest.json +4 -0
  126. package/web/.next/server/app/api/shell/open/route.js +6 -0
  127. package/web/.next/server/app/api/shell/open/route.js.map +5 -0
  128. package/web/.next/server/app/api/shell/open/route.js.nft.json +1 -0
  129. package/web/.next/server/app/api/shell/open/route_client-reference-manifest.js +2 -0
  130. package/web/.next/server/app/page.js +2 -2
  131. package/web/.next/server/app/page.js.nft.json +1 -1
  132. package/web/.next/server/app/page_client-reference-manifest.js +1 -1
  133. package/web/.next/server/app/version/page.js +2 -2
  134. package/web/.next/server/app/version/page.js.nft.json +1 -1
  135. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  136. package/web/.next/server/app/version.html +2 -2
  137. package/web/.next/server/app/version.rsc +13 -12
  138. package/web/.next/server/app/version.segments/_full.segment.rsc +13 -12
  139. package/web/.next/server/app/version.segments/_head.segment.rsc +1 -1
  140. package/web/.next/server/app/version.segments/_index.segment.rsc +4 -3
  141. package/web/.next/server/app/version.segments/_tree.segment.rsc +2 -2
  142. package/web/.next/server/app/version.segments/version/__PAGE__.segment.rsc +2 -2
  143. package/web/.next/server/app/version.segments/version.segment.rsc +1 -1
  144. package/web/.next/server/app-paths-manifest.json +3 -0
  145. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_features_create_route_actions_de49a114.js +3 -0
  146. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_features_create_route_actions_de49a114.js.map +1 -0
  147. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_shell_open_route_actions_814dc5b6.js +3 -0
  148. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_shell_open_route_actions_814dc5b6.js.map +1 -0
  149. package/web/.next/server/chunks/[root-of-the-server]__1913013c._.js +3 -0
  150. package/web/.next/server/chunks/{[root-of-the-server]__95785ac7._.js.map → [root-of-the-server]__1913013c._.js.map} +1 -1
  151. package/web/.next/server/chunks/[root-of-the-server]__56ac1509._.js +3 -0
  152. package/web/.next/server/chunks/[root-of-the-server]__56ac1509._.js.map +1 -0
  153. package/web/.next/server/chunks/[root-of-the-server]__602cce1b._.js +3 -0
  154. package/web/.next/server/chunks/[root-of-the-server]__602cce1b._.js.map +1 -0
  155. package/web/.next/server/chunks/{[root-of-the-server]__00833626._.js → [root-of-the-server]__ba6c5641._.js} +2 -2
  156. package/web/.next/server/chunks/{[root-of-the-server]__00833626._.js.map → [root-of-the-server]__ba6c5641._.js.map} +1 -1
  157. package/web/.next/server/chunks/{[root-of-the-server]__22cabd43._.js → [root-of-the-server]__bb4fc5b5._.js} +3 -3
  158. package/web/.next/server/chunks/{[root-of-the-server]__22cabd43._.js.map → [root-of-the-server]__bb4fc5b5._.js.map} +1 -1
  159. package/web/.next/server/chunks/[root-of-the-server]__eaa478b7._.js +8 -0
  160. package/web/.next/server/chunks/[root-of-the-server]__eaa478b7._.js.map +1 -0
  161. package/web/.next/server/chunks/b1a17_presentation_web__next-internal_server_app_api_ide_open_route_actions_9fe6e1cd.js +3 -0
  162. package/web/.next/server/chunks/b1a17_presentation_web__next-internal_server_app_api_ide_open_route_actions_9fe6e1cd.js.map +1 -0
  163. package/web/.next/server/chunks/ssr/[root-of-the-server]__97377864._.js +3 -0
  164. package/web/.next/server/chunks/ssr/[root-of-the-server]__a21ef212._.js +3 -0
  165. package/web/.next/server/chunks/ssr/[root-of-the-server]__a21ef212._.js.map +1 -0
  166. package/web/.next/server/chunks/ssr/[root-of-the-server]__f12b60be._.js +1 -1
  167. package/web/.next/server/chunks/ssr/[root-of-the-server]__f285e474._.js +3 -0
  168. package/web/.next/server/chunks/ssr/_09afa42a._.js +1 -1
  169. package/web/.next/server/chunks/ssr/_09afa42a._.js.map +1 -1
  170. package/web/.next/server/chunks/ssr/_1c3962d7._.js +10 -0
  171. package/web/.next/server/chunks/ssr/_1c3962d7._.js.map +1 -0
  172. package/web/.next/server/chunks/ssr/src_presentation_web_67178b88._.js +13 -0
  173. package/web/.next/server/chunks/ssr/src_presentation_web_67178b88._.js.map +1 -0
  174. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +3 -0
  175. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -0
  176. package/web/.next/server/chunks/ssr/src_presentation_web_ed0934e5._.js +1 -1
  177. package/web/.next/server/chunks/ssr/src_presentation_web_ed0934e5._.js.map +1 -1
  178. package/web/.next/server/pages/404.html +2 -2
  179. package/web/.next/server/pages/500.html +2 -2
  180. package/web/.next/server/server-reference-manifest.js +1 -1
  181. package/web/.next/server/server-reference-manifest.json +1 -1
  182. package/web/.next/static/chunks/78ef4acb26e4d6ea.js +1 -0
  183. package/web/.next/static/chunks/79009d1ca0d944d2.js +5 -0
  184. package/web/.next/static/chunks/86ff2b6444e06e88.css +2 -0
  185. package/web/.next/static/chunks/{f6b5484377f4e78e.js → c2854b6c6d0ca1f3.js} +2 -2
  186. package/web/.next/trace +1 -1
  187. package/web/.next/trace-build +1 -1
  188. package/web/.next/types/link.d.ts +3 -0
  189. package/web/.next/types/routes.d.ts +4 -1
  190. package/web/.next/types/validator.ts +27 -0
  191. package/web/.next/server/chunks/[root-of-the-server]__95785ac7._.js +0 -3
  192. package/web/.next/server/chunks/ssr/[root-of-the-server]__757c7912._.js +0 -3
  193. package/web/.next/server/chunks/ssr/[root-of-the-server]__7c64f85c._.js +0 -3
  194. package/web/.next/server/chunks/ssr/[root-of-the-server]__7c64f85c._.js.map +0 -1
  195. package/web/.next/server/chunks/ssr/[root-of-the-server]__dbd220d2._.js +0 -3
  196. package/web/.next/server/chunks/ssr/_1f9347c8._.js +0 -7
  197. package/web/.next/server/chunks/ssr/_1f9347c8._.js.map +0 -1
  198. package/web/.next/server/chunks/ssr/_a0c04017._.js +0 -6
  199. package/web/.next/server/chunks/ssr/_a0c04017._.js.map +0 -1
  200. package/web/.next/server/chunks/ssr/src_presentation_web_372075f9._.js +0 -13
  201. package/web/.next/server/chunks/ssr/src_presentation_web_372075f9._.js.map +0 -1
  202. package/web/.next/static/chunks/74748b4d725c5c74.css +0 -2
  203. package/web/.next/static/chunks/8bc34062bc0f4ddc.js +0 -1
  204. package/web/.next/static/chunks/f5099c5888ef9a74.js +0 -5
  205. /package/web/.next/server/chunks/ssr/{[root-of-the-server]__757c7912._.js.map → [root-of-the-server]__97377864._.js.map} +0 -0
  206. /package/web/.next/server/chunks/ssr/{[root-of-the-server]__dbd220d2._.js.map → [root-of-the-server]__f285e474._.js.map} +0 -0
  207. /package/web/.next/static/{LOfelu4nKYgB7PB1XlRqc → _6j6GS-S6zPiASj5tsxJ8}/_buildManifest.js +0 -0
  208. /package/web/.next/static/{LOfelu4nKYgB7PB1XlRqc → _6j6GS-S6zPiASj5tsxJ8}/_clientMiddlewareManifest.json +0 -0
  209. /package/web/.next/static/{LOfelu4nKYgB7PB1XlRqc → _6j6GS-S6zPiASj5tsxJ8}/_ssgManifest.js +0 -0
@@ -1,13 +1,18 @@
1
1
  'use client';
2
2
  import { useState, useCallback, useEffect } from 'react';
3
+ import { useRouter } from 'next/navigation';
4
+ import { toast } from 'sonner';
3
5
  import { applyNodeChanges } from '@xyflow/react';
4
6
  import { layoutWithDagre } from '../../../lib/layout-with-dagre.js';
5
7
  let nextFeatureId = 0;
6
8
  export function useControlCenterState(initialNodes, initialEdges) {
9
+ const router = useRouter();
7
10
  const [nodes, setNodes] = useState(initialNodes);
8
11
  const [edges, setEdges] = useState(initialEdges);
9
12
  const [selectedNode, setSelectedNode] = useState(null);
10
13
  const [isCreateDrawerOpen, setIsCreateDrawerOpen] = useState(false);
14
+ const [isSubmitting, setIsSubmitting] = useState(false);
15
+ const [pendingRepoNodeId, setPendingRepoNodeId] = useState(null);
11
16
  const onNodesChange = useCallback((changes) => {
12
17
  setNodes((ns) => applyNodeChanges(changes, ns));
13
18
  }, []);
@@ -67,6 +72,8 @@ export function useControlCenterState(initialNodes, initialEdges) {
67
72
  lifecycle: 'requirements',
68
73
  state: 'running',
69
74
  progress: 0,
75
+ repositoryPath: dataOverride?.repositoryPath ?? '',
76
+ branch: dataOverride?.branch ?? '',
70
77
  };
71
78
  setNodes((currentNodes) => {
72
79
  // Find siblings connected to the same parent
@@ -161,19 +168,49 @@ export function useControlCenterState(initialNodes, initialEdges) {
161
168
  setSelectedNode(null);
162
169
  setIsCreateDrawerOpen(true);
163
170
  }, []);
164
- const handleCreateFeatureSubmit = useCallback((data) => {
165
- setIsCreateDrawerOpen(false);
166
- createFeatureNode(null, {
167
- name: data.name,
168
- description: data.description || undefined,
169
- });
170
- }, [createFeatureNode]);
171
+ const handleCreateFeatureSubmit = useCallback(async (data) => {
172
+ if (!pendingRepoNodeId) {
173
+ toast.error('Please create the feature from a repository node.');
174
+ return;
175
+ }
176
+ const repositoryPath = pendingRepoNodeId.replace(/^repo-/, '');
177
+ setIsSubmitting(true);
178
+ try {
179
+ const response = await fetch('/api/features/create', {
180
+ method: 'POST',
181
+ headers: { 'Content-Type': 'application/json' },
182
+ body: JSON.stringify({
183
+ name: data.name,
184
+ description: data.description || '',
185
+ repositoryPath,
186
+ attachments: data.attachments,
187
+ }),
188
+ });
189
+ if (!response.ok) {
190
+ const body = await response.json();
191
+ toast.error(body.error ?? 'Failed to create feature');
192
+ return;
193
+ }
194
+ setIsCreateDrawerOpen(false);
195
+ setPendingRepoNodeId(null);
196
+ toast.success('Feature created successfully');
197
+ router.refresh();
198
+ }
199
+ catch {
200
+ toast.error('Failed to create feature');
201
+ }
202
+ finally {
203
+ setIsSubmitting(false);
204
+ }
205
+ }, [pendingRepoNodeId, router]);
171
206
  const closeCreateDrawer = useCallback(() => {
172
207
  setIsCreateDrawerOpen(false);
173
208
  }, []);
174
209
  const handleAddFeatureToRepo = useCallback((repoNodeId) => {
175
- createFeatureNode(repoNodeId);
176
- }, [createFeatureNode]);
210
+ setSelectedNode(null);
211
+ setPendingRepoNodeId(repoNodeId);
212
+ setIsCreateDrawerOpen(true);
213
+ }, []);
177
214
  const handleAddFeatureToFeature = useCallback((featureNodeId) => {
178
215
  createFeatureNode(featureNodeId);
179
216
  }, [createFeatureNode]);
@@ -220,6 +257,7 @@ export function useControlCenterState(initialNodes, initialEdges) {
220
257
  edges,
221
258
  selectedNode,
222
259
  isCreateDrawerOpen,
260
+ isSubmitting,
223
261
  onNodesChange,
224
262
  handleConnect,
225
263
  clearSelection,
@@ -1 +1 @@
1
- {"version":3,"file":"features-canvas.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/features-canvas/features-canvas.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAOnD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,cAAc,CAcrC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAoJnC,eAAO,MAAM,KAAK,EAAE,KAMnB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAKxB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAK3B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAK5B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAWzB,CAAC;AAwDF,eAAO,MAAM,mCAAmC,EAAE,KAOjD,CAAC;AAgCF,eAAO,MAAM,gCAAgC,EAAE,KAS9C,CAAC;AA0DF,eAAO,MAAM,gCAAgC,EAAE,KAW9C,CAAC;AAmDF,eAAO,MAAM,oBAAoB,EAAE,KAUlC,CAAC;AAmGF,eAAO,MAAM,oCAAoC,EAAE,KAOlD,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,KASvC,CAAC"}
1
+ {"version":3,"file":"features-canvas.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/features-canvas/features-canvas.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAOnD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,cAAc,CAcrC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAwKnC,eAAO,MAAM,KAAK,EAAE,KAMnB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAKxB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAK3B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAK5B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAWzB,CAAC;AA4DF,eAAO,MAAM,mCAAmC,EAAE,KAOjD,CAAC;AAkCF,eAAO,MAAM,gCAAgC,EAAE,KAS9C,CAAC;AAgEF,eAAO,MAAM,gCAAgC,EAAE,KAW9C,CAAC;AAuDF,eAAO,MAAM,oBAAoB,EAAE,KAUlC,CAAC;AA2GF,eAAO,MAAM,oCAAoC,EAAE,KAOlD,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,KASvC,CAAC"}
@@ -24,6 +24,8 @@ const singleNode = {
24
24
  lifecycle: 'requirements',
25
25
  state: 'running',
26
26
  progress: 45,
27
+ repositoryPath: '/home/user/my-repo',
28
+ branch: 'feat/auth-module',
27
29
  },
28
30
  };
29
31
  const multipleNodes = [
@@ -38,6 +40,8 @@ const multipleNodes = [
38
40
  lifecycle: 'implementation',
39
41
  state: 'running',
40
42
  progress: 65,
43
+ repositoryPath: '/home/user/my-repo',
44
+ branch: 'feat/auth-module',
41
45
  },
42
46
  },
43
47
  {
@@ -51,6 +55,8 @@ const multipleNodes = [
51
55
  lifecycle: 'research',
52
56
  state: 'action-required',
53
57
  progress: 20,
58
+ repositoryPath: '/home/user/my-repo',
59
+ branch: 'feat/user-dashboard',
54
60
  },
55
61
  },
56
62
  {
@@ -64,6 +70,8 @@ const multipleNodes = [
64
70
  lifecycle: 'deploy',
65
71
  state: 'done',
66
72
  progress: 100,
73
+ repositoryPath: '/home/user/my-repo',
74
+ branch: 'feat/api-gateway',
67
75
  },
68
76
  },
69
77
  {
@@ -77,6 +85,8 @@ const multipleNodes = [
77
85
  lifecycle: 'review',
78
86
  state: 'blocked',
79
87
  progress: 40,
88
+ repositoryPath: '/home/user/my-repo',
89
+ branch: 'feat/payment-integration',
80
90
  },
81
91
  },
82
92
  {
@@ -90,6 +100,8 @@ const multipleNodes = [
90
100
  lifecycle: 'implementation',
91
101
  state: 'error',
92
102
  progress: 30,
103
+ repositoryPath: '/home/user/my-repo',
104
+ branch: 'feat/email-service',
93
105
  },
94
106
  },
95
107
  ];
@@ -105,6 +117,8 @@ const connectedNodes = [
105
117
  lifecycle: 'implementation',
106
118
  state: 'running',
107
119
  progress: 65,
120
+ repositoryPath: '/home/user/my-repo',
121
+ branch: 'feat/auth-module',
108
122
  },
109
123
  },
110
124
  {
@@ -119,6 +133,8 @@ const connectedNodes = [
119
133
  state: 'blocked',
120
134
  progress: 10,
121
135
  blockedBy: 'Auth Module',
136
+ repositoryPath: '/home/user/my-repo',
137
+ branch: 'feat/user-dashboard',
122
138
  },
123
139
  },
124
140
  {
@@ -132,6 +148,8 @@ const connectedNodes = [
132
148
  lifecycle: 'requirements',
133
149
  state: 'action-required',
134
150
  progress: 5,
151
+ repositoryPath: '/home/user/my-repo',
152
+ branch: 'feat/api-gateway',
135
153
  },
136
154
  },
137
155
  {
@@ -146,6 +164,8 @@ const connectedNodes = [
146
164
  state: 'blocked',
147
165
  progress: 0,
148
166
  blockedBy: 'User Dashboard',
167
+ repositoryPath: '/home/user/my-repo',
168
+ branch: 'feat/admin-panel',
149
169
  },
150
170
  },
151
171
  ];
@@ -220,6 +240,8 @@ const repoFeatureNodes = [
220
240
  lifecycle: 'implementation',
221
241
  state: 'running',
222
242
  progress: 65,
243
+ repositoryPath: '/home/user/my-repo',
244
+ branch: 'feat/auth-module',
223
245
  },
224
246
  },
225
247
  {
@@ -233,6 +255,8 @@ const repoFeatureNodes = [
233
255
  lifecycle: 'requirements',
234
256
  state: 'action-required',
235
257
  progress: 20,
258
+ repositoryPath: '/home/user/my-repo',
259
+ branch: 'feat/feature-flow-canvas',
236
260
  },
237
261
  },
238
262
  ];
@@ -274,6 +298,8 @@ const singleRepoSingleFeatureNodes = [
274
298
  lifecycle: 'implementation',
275
299
  state: 'running',
276
300
  progress: 65,
301
+ repositoryPath: '/home/user/my-repo',
302
+ branch: 'feat/auth-module',
277
303
  },
278
304
  },
279
305
  ];
@@ -312,6 +338,8 @@ const singleRepoMultiFeatNodes = [
312
338
  lifecycle: 'implementation',
313
339
  state: 'running',
314
340
  progress: 40,
341
+ repositoryPath: '/home/user/my-repo',
342
+ branch: 'feat/sso-integration',
315
343
  },
316
344
  },
317
345
  {
@@ -325,6 +353,8 @@ const singleRepoMultiFeatNodes = [
325
353
  lifecycle: 'requirements',
326
354
  state: 'action-required',
327
355
  progress: 10,
356
+ repositoryPath: '/home/user/my-repo',
357
+ branch: 'feat/auth-module',
328
358
  },
329
359
  },
330
360
  {
@@ -338,6 +368,8 @@ const singleRepoMultiFeatNodes = [
338
368
  lifecycle: 'research',
339
369
  state: 'running',
340
370
  progress: 25,
371
+ repositoryPath: '/home/user/my-repo',
372
+ branch: 'feat/api-gateway',
341
373
  },
342
374
  },
343
375
  ];
@@ -384,6 +416,8 @@ const multiRepoNodes = [
384
416
  lifecycle: 'implementation',
385
417
  state: 'running',
386
418
  progress: 65,
419
+ repositoryPath: '/home/user/my-repo',
420
+ branch: 'feat/auth-module',
387
421
  },
388
422
  },
389
423
  {
@@ -397,6 +431,8 @@ const multiRepoNodes = [
397
431
  lifecycle: 'requirements',
398
432
  state: 'action-required',
399
433
  progress: 15,
434
+ repositoryPath: '/home/user/my-repo',
435
+ branch: 'feat/dashboard-ui',
400
436
  },
401
437
  },
402
438
  ];
@@ -448,6 +484,8 @@ const mixedRepoFeatureNodesRaw = [
448
484
  lifecycle: 'implementation',
449
485
  state: 'running',
450
486
  progress: 65,
487
+ repositoryPath: '/home/user/my-repo',
488
+ branch: 'feat/auth-module',
451
489
  },
452
490
  },
453
491
  {
@@ -461,6 +499,8 @@ const mixedRepoFeatureNodesRaw = [
461
499
  lifecycle: 'research',
462
500
  state: 'action-required',
463
501
  progress: 20,
502
+ repositoryPath: '/home/user/my-repo',
503
+ branch: 'feat/sso-integration',
464
504
  },
465
505
  },
466
506
  {
@@ -474,6 +514,8 @@ const mixedRepoFeatureNodesRaw = [
474
514
  lifecycle: 'requirements',
475
515
  state: 'running',
476
516
  progress: 10,
517
+ repositoryPath: '/home/user/my-repo',
518
+ branch: 'feat/api-gateway',
477
519
  },
478
520
  },
479
521
  {
@@ -487,6 +529,8 @@ const mixedRepoFeatureNodesRaw = [
487
529
  lifecycle: 'deploy',
488
530
  state: 'done',
489
531
  progress: 100,
532
+ repositoryPath: '/home/user/my-repo',
533
+ branch: 'feat/admin-panel',
490
534
  },
491
535
  },
492
536
  ];
@@ -39,21 +39,34 @@ async function main() {
39
39
  const server = http.createServer((req, res) => {
40
40
  handle(req, res);
41
41
  });
42
+ // Forward WebSocket upgrades to Next.js for HMR/Fast Refresh
43
+ server.on('upgrade', (req, socket, head) => {
44
+ app.getUpgradeHandler()(req, socket, head);
45
+ });
42
46
  await new Promise((resolve, reject) => {
43
47
  server.on('error', reject);
44
48
  server.listen(port, 'localhost', resolve);
45
49
  });
46
50
  console.log(`[dev-server] Ready at http://localhost:${port}`);
47
- // Graceful shutdown
51
+ // Graceful shutdown with timeout to avoid hanging on open connections
48
52
  let isShuttingDown = false;
49
53
  const shutdown = async () => {
50
54
  if (isShuttingDown)
51
55
  return;
52
56
  isShuttingDown = true;
53
57
  console.log('\n[dev-server] Shutting down...');
54
- await new Promise((resolve) => server.close(() => resolve()));
55
- await app.close();
56
- process.exit(0);
58
+ const forceExit = setTimeout(() => process.exit(0), 2000);
59
+ try {
60
+ server.closeAllConnections();
61
+ await Promise.all([
62
+ new Promise((resolve) => server.close(() => resolve())),
63
+ app.close(),
64
+ ]);
65
+ }
66
+ finally {
67
+ clearTimeout(forceExit);
68
+ process.exit(0);
69
+ }
57
70
  };
58
71
  process.on('SIGINT', shutdown);
59
72
  process.on('SIGTERM', shutdown);