@shepai/cli 1.28.0 → 1.29.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 (103) hide show
  1. package/dist/packages/core/src/infrastructure/di/populate-use-cases-bridge.d.ts.map +1 -1
  2. package/dist/packages/core/src/infrastructure/di/populate-use-cases-bridge.js +2 -0
  3. package/dist/packages/core/src/infrastructure/di/use-cases-bridge.d.ts +7 -0
  4. package/dist/packages/core/src/infrastructure/di/use-cases-bridge.d.ts.map +1 -1
  5. package/dist/packages/core/src/infrastructure/di/use-cases-bridge.js +17 -1
  6. package/dist/src/presentation/web/app/api/features/[id]/route.d.ts +11 -0
  7. package/dist/src/presentation/web/app/api/features/[id]/route.d.ts.map +1 -0
  8. package/dist/src/presentation/web/app/api/features/[id]/route.js +16 -0
  9. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.d.ts +3 -1
  10. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.d.ts.map +1 -1
  11. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.js +4 -3
  12. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.d.ts +6 -0
  13. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.d.ts.map +1 -1
  14. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.js +22 -0
  15. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  16. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +2 -2
  17. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts +2 -0
  18. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  19. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +27 -0
  20. package/dist/src/presentation/web/components/ui/alert-dialog.d.ts +19 -0
  21. package/dist/src/presentation/web/components/ui/alert-dialog.d.ts.map +1 -0
  22. package/dist/src/presentation/web/components/ui/alert-dialog.js +42 -0
  23. package/dist/src/presentation/web/components/ui/alert-dialog.stories.d.ts +9 -0
  24. package/dist/src/presentation/web/components/ui/alert-dialog.stories.d.ts.map +1 -0
  25. package/dist/src/presentation/web/components/ui/alert-dialog.stories.js +21 -0
  26. package/dist/tsconfig.build.tsbuildinfo +1 -1
  27. package/package.json +1 -1
  28. package/web/.next/BUILD_ID +1 -1
  29. package/web/.next/app-path-routes-manifest.json +1 -0
  30. package/web/.next/build-manifest.json +2 -2
  31. package/web/.next/cache/.previewinfo +1 -1
  32. package/web/.next/cache/.rscinfo +1 -1
  33. package/web/.next/cache/.tsbuildinfo +1 -1
  34. package/web/.next/cache/config.json +3 -3
  35. package/web/.next/fallback-build-manifest.json +2 -2
  36. package/web/.next/prerender-manifest.json +3 -3
  37. package/web/.next/required-server-files.js +1 -1
  38. package/web/.next/required-server-files.json +1 -1
  39. package/web/.next/routes-manifest.json +10 -1
  40. package/web/.next/server/app/_global-error.html +2 -2
  41. package/web/.next/server/app/_global-error.rsc +1 -1
  42. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  43. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  44. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  45. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  46. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  47. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  48. package/web/.next/server/app/_not-found.html +2 -2
  49. package/web/.next/server/app/_not-found.rsc +2 -2
  50. package/web/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  51. package/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  52. package/web/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  53. package/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  54. package/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  55. package/web/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  56. package/web/.next/server/app/api/features/[id]/route/app-paths-manifest.json +3 -0
  57. package/web/.next/server/app/api/features/[id]/route/build-manifest.json +11 -0
  58. package/web/.next/server/app/api/features/[id]/route/server-reference-manifest.json +4 -0
  59. package/web/.next/server/app/api/features/[id]/route.js +7 -0
  60. package/web/.next/server/app/api/features/[id]/route.js.map +5 -0
  61. package/web/.next/server/app/api/features/[id]/route.js.nft.json +1 -0
  62. package/web/.next/server/app/api/features/[id]/route_client-reference-manifest.js +2 -0
  63. package/web/.next/server/app/api/features/create/route.js +1 -1
  64. package/web/.next/server/app/api/features/create/route.js.nft.json +1 -1
  65. package/web/.next/server/app/page_client-reference-manifest.js +1 -1
  66. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  67. package/web/.next/server/app/version.html +2 -2
  68. package/web/.next/server/app/version.rsc +2 -2
  69. package/web/.next/server/app/version.segments/_full.segment.rsc +2 -2
  70. package/web/.next/server/app/version.segments/_head.segment.rsc +1 -1
  71. package/web/.next/server/app/version.segments/_index.segment.rsc +2 -2
  72. package/web/.next/server/app/version.segments/_tree.segment.rsc +2 -2
  73. package/web/.next/server/app/version.segments/version/__PAGE__.segment.rsc +1 -1
  74. package/web/.next/server/app/version.segments/version.segment.rsc +1 -1
  75. package/web/.next/server/app-paths-manifest.json +1 -0
  76. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_features_[id]_route_actions_03b9a4b5.js +3 -0
  77. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_features_[id]_route_actions_03b9a4b5.js.map +1 -0
  78. package/web/.next/server/chunks/[root-of-the-server]__0c45619b._.js +8 -0
  79. package/web/.next/server/chunks/[root-of-the-server]__0c45619b._.js.map +1 -0
  80. package/web/.next/server/chunks/[root-of-the-server]__25329f72._.js +3 -0
  81. package/web/.next/server/chunks/[root-of-the-server]__25329f72._.js.map +1 -0
  82. package/web/.next/server/chunks/ssr/[root-of-the-server]__f12b60be._.js +1 -1
  83. package/web/.next/server/chunks/ssr/_09afa42a._.js +8 -2
  84. package/web/.next/server/chunks/ssr/_09afa42a._.js.map +1 -1
  85. package/web/.next/server/chunks/ssr/src_presentation_web_ed0934e5._.js +1 -1
  86. package/web/.next/server/chunks/ssr/src_presentation_web_ed0934e5._.js.map +1 -1
  87. package/web/.next/server/pages/404.html +2 -2
  88. package/web/.next/server/pages/500.html +2 -2
  89. package/web/.next/server/server-reference-manifest.js +1 -1
  90. package/web/.next/server/server-reference-manifest.json +1 -1
  91. package/web/.next/static/chunks/{28c05929f2636c01.js → daacb9d30e4fc428.js} +9 -3
  92. package/web/.next/static/chunks/fd816afd85fd9a19.css +2 -0
  93. package/web/.next/trace +1 -1
  94. package/web/.next/trace-build +1 -1
  95. package/web/.next/types/link.d.ts +2 -1
  96. package/web/.next/types/routes.d.ts +2 -1
  97. package/web/.next/types/validator.ts +9 -0
  98. package/web/.next/server/chunks/[root-of-the-server]__4e987cf3._.js +0 -8
  99. package/web/.next/server/chunks/[root-of-the-server]__4e987cf3._.js.map +0 -1
  100. package/web/.next/static/chunks/a7273c84449394e0.css +0 -2
  101. /package/web/.next/static/{wymVMk3X_cTuoYKeS0Gbf → LkrVnyOa_e5oKSoKOC3uq}/_buildManifest.js +0 -0
  102. /package/web/.next/static/{wymVMk3X_cTuoYKeS0Gbf → LkrVnyOa_e5oKSoKOC3uq}/_clientMiddlewareManifest.json +0 -0
  103. /package/web/.next/static/{wymVMk3X_cTuoYKeS0Gbf → LkrVnyOa_e5oKSoKOC3uq}/_ssgManifest.js +0 -0
@@ -1,4 +1,4 @@
1
- <!DOCTYPE html><!--wymVMk3X_cTuoYKeS0Gbf--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/a7273c84449394e0.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/df7d29673e0ac11d.js"/><script src="/_next/static/chunks/07f00e2e73d322d2.js" async=""></script><script src="/_next/static/chunks/f3b4460b1496ef52.js" async=""></script><script src="/_next/static/chunks/70993ebedee7eab0.js" async=""></script><script src="/_next/static/chunks/turbopack-a5a88a85e7ac8e8d.js" async=""></script><script src="/_next/static/chunks/b32b17f102226f32.js" async=""></script><script src="/_next/static/chunks/1d665ddc2230f73f.js" async=""></script><script src="/_next/static/chunks/4431cc2d3628b6f6.js" async=""></script><script src="/_next/static/chunks/ab02eec995295bef.js" async=""></script><script src="/_next/static/chunks/37bc3e283f734dca.js" async=""></script><script src="/_next/static/chunks/c95b4cf170b7f301.js" async=""></script><title>Shep AI</title><meta name="description" content="Autonomous AI Native SDLC Platform - Automate the development cycle from idea to deploy"/><script>
1
+ <!DOCTYPE html><!--LkrVnyOa_e5oKSoKOC3uq--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/fd816afd85fd9a19.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/df7d29673e0ac11d.js"/><script src="/_next/static/chunks/07f00e2e73d322d2.js" async=""></script><script src="/_next/static/chunks/f3b4460b1496ef52.js" async=""></script><script src="/_next/static/chunks/70993ebedee7eab0.js" async=""></script><script src="/_next/static/chunks/turbopack-a5a88a85e7ac8e8d.js" async=""></script><script src="/_next/static/chunks/b32b17f102226f32.js" async=""></script><script src="/_next/static/chunks/1d665ddc2230f73f.js" async=""></script><script src="/_next/static/chunks/4431cc2d3628b6f6.js" async=""></script><script src="/_next/static/chunks/ab02eec995295bef.js" async=""></script><script src="/_next/static/chunks/37bc3e283f734dca.js" async=""></script><script src="/_next/static/chunks/c95b4cf170b7f301.js" async=""></script><title>Shep AI</title><meta name="description" content="Autonomous AI Native SDLC Platform - Automate the development cycle from idea to deploy"/><script>
2
2
  (function() {
3
3
  try {
4
4
  const theme = localStorage.getItem('shep-theme');
@@ -8,4 +8,4 @@
8
8
  }
9
9
  } catch (e) {}
10
10
  })();
11
- </script><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body class="min-h-screen antialiased"><div hidden=""><!--$--><!--/$--></div><div data-slot="sidebar-wrapper" style="--sidebar-width:16rem;--sidebar-width-icon:3rem" class="group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full"><div class="group peer text-sidebar-foreground hidden md:block" data-state="expanded" data-collapsible="" data-variant="sidebar" data-side="left" data-slot="sidebar"><div data-slot="sidebar-gap" class="relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear group-data-[collapsible=offcanvas]:w-0 group-data-[side=right]:rotate-180 group-data-[collapsible=icon]:w-(--sidebar-width-icon)"></div><div data-slot="sidebar-container" class="fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)] group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l" data-testid="app-sidebar"><div data-sidebar="sidebar" data-slot="sidebar-inner" class="bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm"><div data-slot="sidebar-header" data-sidebar="header" class="flex flex-col gap-2 p-2"><ul data-slot="sidebar-menu" data-sidebar="menu" class="flex w-full min-w-0 flex-col gap-1"><li data-slot="sidebar-menu-item" data-sidebar="menu-item" class="group/menu-item relative"><div class="flex h-8 items-center group-data-[collapsible=icon]:justify-center"><div class="flex min-w-0 flex-1 items-center gap-2 overflow-hidden px-2 transition-opacity duration-200 ease-out opacity-100" aria-hidden="false"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 194 200" width="20" height="20" class="shrink-0" aria-hidden="true"><g transform="matrix(1, 0, 0, 1, -111, -208)"><path d="M 198 406 C196,405 194,403 193,401 C192,399 191,398 186,398 C178,397 174,394 170,387 L 168 381 L 163 381 C156,381 150,377 147,370 C144,364 143,359 146,353 C148,348 148,347 147,347 C145,347 140,343 138,339 C133,329 139,314 149,311 L 152 311 L 149 307 C145,302 145,294 149,290 C151,288 152,287 151,286 C150,283 152,278 155,276 C156,275 159,274 162,273 C165,273 166,273 168,276 C171,278 171,280 172,287 C173,294 174,297 177,304 C180,309 182,314 183,316 C186,327 193,336 199,339 C204,342 211,342 216,340 C222,336 231,324 234,314 C235,312 237,307 239,302 C240,298 242,292 242,289 C243,281 245,278 247,275 C250,273 251,273 255,273 C261,274 264,278 264,282 C264,284 264,286 263,287 C262,287 263,288 265,290 C272,295 272,303 267,309 L 265 312 L 269 314 C276,317 279,323 279,332 C279,339 277,343 272,347 C268,351 268,351 269,354 C272,358 271,366 269,371 C266,376 259,381 254,381 C252,381 251,382 248,386 C242,395 234,400 227,399 C224,398 223,398 221,401 C220,403 217,405 216,406 C211,409 203,409 198,406 ZM 136 271 C123,267 115,262 113,256 C111,251 111,251 113,251 C118,254 124,254 132,252 C136,252 141,251 144,251 C149,251 157,253 162,256 C166,258 166,258 166,264 L 166 269 L 160 270 C149,272 142,272 136,271 ZM 264 271 C263,271 259,270 256,270 L 250 270 L 250 265 C249,259 250,257 259,254 C265,251 272,251 289,252 C297,253 299,253 302,252 C305,250 305,250 305,252 C305,255 301,262 297,264 C289,270 272,273 264,271 ZM 162 249 C160,247 159,245 159,242 C159,236 164,230 169,230 C170,230 171,228 171,225 C171,216 176,210 184,209 C189,209 195,211 195,213 C195,214 196,213 197,212 C201,209 204,208 208,208 C212,208 217,210 219,212 C220,214 220,213 223,211 C226,208 234,208 239,211 C243,214 246,221 246,226 C245,230 245,230 247,230 C253,230 258,238 257,244 C256,249 251,252 245,252 C241,252 237,251 234,248 C232,247 232,247 228,249 C225,251 222,252 220,252 C216,252 212,250 210,247 C209,246 209,246 206,248 C201,252 192,253 185,248 C183,247 183,247 178,249 C172,253 166,253 162,249 ZM 116 249 C112,248 114,247 119,247 C122,247 127,246 130,245 C138,242 146,242 152,245 L 158 248 L 148 247 C142,247 138,247 133,248 C128,250 120,250 116,249 ZM 284 248 C281,247 277,247 270,247 L 260 248 L 263 246 C269,243 276,242 284,245 C289,246 295,247 298,247 C303,247 304,247 303,248 C301,250 289,250 284,248 Z" fill="currentColor"></path></g></svg><span class="truncate text-sm font-semibold tracking-tight">Shep</span></div><div class="flex shrink-0 transition-all duration-200"><button data-slot="button" data-variant="ghost" data-size="icon" class="inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&amp;_svg]:pointer-events-none [&amp;_svg]:shrink-0 [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50 size-7 cursor-pointer group-data-[collapsible=icon]:size-8!" data-testid="sidebar-collapse-toggle" aria-label="Collapse sidebar"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-panel-left size-4" aria-hidden="true"><rect width="18" height="18" x="3" y="3" rx="2"></rect><path d="M9 3v18"></path></svg></button></div></div></li><li data-slot="sidebar-menu-item" data-sidebar="menu-item" class="group/menu-item relative" data-testid="sidebar-nav-item"><a data-slot="sidebar-menu-button" data-sidebar="menu-button" data-size="default" data-active="false" class="peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground [&amp;&gt;span:last-child]:truncate [&amp;&gt;svg]:size-4 [&amp;&gt;svg]:shrink-0 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground h-8 text-sm" data-state="closed" href="/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-house" aria-hidden="true"><path d="M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8"></path><path d="M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path></svg><span>Control Center</span></a></li><li data-slot="sidebar-menu-item" data-sidebar="menu-item" class="group/menu-item relative" data-testid="sidebar-nav-item"><a data-slot="sidebar-menu-button" data-sidebar="menu-button" data-size="default" data-active="false" class="peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground [&amp;&gt;span:last-child]:truncate [&amp;&gt;svg]:size-4 [&amp;&gt;svg]:shrink-0 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground h-8 text-sm" data-state="closed" href="/memory"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-brain" aria-hidden="true"><path d="M12 18V5"></path><path d="M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4"></path><path d="M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5"></path><path d="M17.997 5.125a4 4 0 0 1 2.526 5.77"></path><path d="M18 18a4 4 0 0 0 2-7.464"></path><path d="M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517"></path><path d="M6 18a4 4 0 0 1-2-7.464"></path><path d="M6.003 5.125a4 4 0 0 0-2.526 5.77"></path></svg><span>Memory</span></a></li></ul></div><div data-slot="sidebar-content" data-sidebar="content" class="flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden"><div class="min-w-0 overflow-hidden transition-opacity duration-200 ease-out [&amp;_[data-sidebar=group-label]]:!mt-0 [&amp;_[data-sidebar=group-label]]:!opacity-100 [&amp;_[data-sidebar=group-label]]:!transition-none opacity-100"><div data-slot="sidebar-group" data-sidebar="group" class="relative flex w-full min-w-0 flex-col p-2 px-2 py-1" data-testid="sidebar-section-header"><div class="text-sidebar-foreground flex h-7 w-full shrink-0 items-center px-2 text-sm font-medium"><span class="min-w-0 flex-1 truncate">Features</span><span class="text-sidebar-foreground/70 flex shrink-0 items-center gap-0.5"><button type="button" class="ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground flex size-7 items-center justify-center rounded-md p-0 outline-hidden transition-colors focus-visible:ring-2 [&amp;&gt;svg]:size-4" aria-label="Open features folder" data-state="closed" data-slot="tooltip-trigger"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-folder size-4" aria-hidden="true"><path d="M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z"></path></svg></button><button type="button" class="ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground flex size-7 items-center justify-center rounded-md p-0 outline-hidden transition-colors focus-visible:ring-2 [&amp;&gt;svg]:size-4" aria-label="Features options" data-state="closed" data-slot="tooltip-trigger"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-grip-horizontal size-4" aria-hidden="true"><circle cx="12" cy="9" r="1"></circle><circle cx="19" cy="9" r="1"></circle><circle cx="5" cy="9" r="1"></circle><circle cx="12" cy="15" r="1"></circle><circle cx="19" cy="15" r="1"></circle><circle cx="5" cy="15" r="1"></circle></svg></button></span></div></div><div dir="ltr" data-slot="scroll-area" class="relative" style="position:relative;--radix-scroll-area-corner-width:0px;--radix-scroll-area-corner-height:0px"><style>[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}</style><div data-radix-scroll-area-viewport="" data-slot="scroll-area-viewport" class="focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1" style="overflow-x:hidden;overflow-y:hidden"><div style="min-width:100%;display:table"></div></div></div></div></div><div data-slot="sidebar-footer" data-sidebar="footer" class="flex flex-col gap-2 p-2"><ul data-slot="sidebar-menu" data-sidebar="menu" class="flex w-full min-w-0 flex-col gap-1"><li data-slot="sidebar-menu-item" data-sidebar="menu-item" class="group/menu-item relative"><button data-slot="sidebar-menu-button" data-sidebar="menu-button" data-size="default" data-active="false" class="peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground [&amp;&gt;span:last-child]:truncate [&amp;&gt;svg]:size-4 [&amp;&gt;svg]:shrink-0 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground h-8 text-sm" data-state="closed"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-plus" aria-hidden="true"><path d="M5 12h14"></path><path d="M12 5v14"></path></svg><span>New feature</span></button></li></ul></div><button data-sidebar="rail" data-slot="sidebar-rail" aria-label="Toggle Sidebar" tabindex="-1" title="Toggle Sidebar" class="hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize [[data-side=left][data-state=collapsed]_&amp;]:cursor-e-resize [[data-side=right][data-state=collapsed]_&amp;]:cursor-w-resize hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full [[data-side=left][data-collapsible=offcanvas]_&amp;]:-right-2 [[data-side=right][data-collapsible=offcanvas]_&amp;]:-left-2"></button></div></div></div><main data-slot="sidebar-inset" class="bg-background relative flex w-full flex-1 flex-col md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2"><div class="relative h-full"><div class="absolute top-3 right-3 z-50"><button data-slot="button" data-variant="ghost" data-size="icon" class="inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&amp;_svg]:pointer-events-none [&amp;_svg]:shrink-0 [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50 size-9" aria-label="Switch to dark mode"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sun h-5 w-5 scale-100 rotate-0 transition-all dark:scale-0 dark:-rotate-90" aria-hidden="true"><circle cx="12" cy="12" r="4"></circle><path d="M12 2v2"></path><path d="M12 20v2"></path><path d="m4.93 4.93 1.41 1.41"></path><path d="m17.66 17.66 1.41 1.41"></path><path d="M2 12h2"></path><path d="M20 12h2"></path><path d="m6.34 17.66-1.41 1.41"></path><path d="m19.07 4.93-1.41 1.41"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon absolute h-5 w-5 scale-0 rotate-90 transition-all dark:scale-100 dark:rotate-0" aria-hidden="true"><path d="M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401"></path></svg><span class="sr-only">Toggle theme</span></button></div><main class="h-full"><div class="flex flex-col items-center justify-center p-4"><div class="w-full max-w-2xl space-y-6"><div class="text-center"><h1 class="text-3xl font-bold tracking-tight">@shepai/cli</h1><p class="text-muted-foreground mt-2">Autonomous AI Native SDLC Platform - Automate the development cycle from idea to deploy</p><div class="mt-4"><div class="inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-none border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80" data-testid="version-badge">v<!-- -->1.27.0</div></div></div><div dir="ltr" data-orientation="horizontal" class="w-full"><div role="tablist" aria-orientation="horizontal" class="bg-muted text-muted-foreground h-9 items-center justify-center rounded-lg p-1 grid w-full grid-cols-3" tabindex="-1" data-orientation="horizontal" style="outline:none"><button type="button" role="tab" aria-selected="true" aria-controls="radix-_R_9bsnqdb_-content-overview" data-state="active" id="radix-_R_9bsnqdb_-trigger-overview" class="ring-offset-background focus-visible:ring-ring data-[state=active]:bg-background data-[state=active]:text-foreground inline-flex items-center justify-center rounded-md px-3 py-1 text-sm font-medium whitespace-nowrap transition-all focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow" tabindex="-1" data-orientation="horizontal" data-radix-collection-item="">Overview</button><button type="button" role="tab" aria-selected="false" aria-controls="radix-_R_9bsnqdb_-content-system" data-state="inactive" id="radix-_R_9bsnqdb_-trigger-system" class="ring-offset-background focus-visible:ring-ring data-[state=active]:bg-background data-[state=active]:text-foreground inline-flex items-center justify-center rounded-md px-3 py-1 text-sm font-medium whitespace-nowrap transition-all focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow" tabindex="-1" data-orientation="horizontal" data-radix-collection-item="">System</button><button type="button" role="tab" aria-selected="false" aria-controls="radix-_R_9bsnqdb_-content-features" data-state="inactive" id="radix-_R_9bsnqdb_-trigger-features" class="ring-offset-background focus-visible:ring-ring data-[state=active]:bg-background data-[state=active]:text-foreground inline-flex items-center justify-center rounded-md px-3 py-1 text-sm font-medium whitespace-nowrap transition-all focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow" tabindex="-1" data-orientation="horizontal" data-radix-collection-item="">Features</button></div><div data-state="active" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-_R_9bsnqdb_-trigger-overview" id="radix-_R_9bsnqdb_-content-overview" tabindex="0" class="ring-offset-background focus-visible:ring-ring mt-2 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none" style="animation-duration:0s"><div class="bg-card text-card-foreground rounded-xl border shadow"><div class="flex flex-col space-y-1.5 p-6"><div class="leading-none font-semibold tracking-tight">Package Information</div><div class="text-muted-foreground text-sm">Details about the Shep AI CLI package</div></div><div class="p-6 pt-0 space-y-1"><div class="flex items-center justify-between py-2"><span class="text-muted-foreground text-sm">Package</span><span class="font-mono text-sm">@shepai/cli</span></div><div class="flex items-center justify-between py-2"><span class="text-muted-foreground text-sm">Version</span><div class="inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-none border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80">v1.27.0</div></div><div class="flex items-center justify-between py-2"><span class="text-muted-foreground text-sm">License</span><div class="inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-none text-foreground">MIT</div></div><div class="flex items-center justify-between py-2"><span class="text-muted-foreground text-sm">Author</span><span class="font-mono text-sm">Shep AI</span></div></div></div></div><div data-state="inactive" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-_R_9bsnqdb_-trigger-system" hidden="" id="radix-_R_9bsnqdb_-content-system" tabindex="0" class="ring-offset-background focus-visible:ring-ring mt-2 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none"></div><div data-state="inactive" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-_R_9bsnqdb_-trigger-features" hidden="" id="radix-_R_9bsnqdb_-content-features" tabindex="0" class="ring-offset-background focus-visible:ring-ring mt-2 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none"></div></div><div class="flex justify-center gap-4"><a data-slot="button" data-variant="outline" data-size="default" class="inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&amp;_svg]:pointer-events-none [&amp;_svg]:shrink-0 [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50 h-9 px-4 py-2 has-[&gt;svg]:px-3" href="/">Back to Home</a><a href="https://github.com/shep-ai/cli" target="_blank" rel="noopener noreferrer" data-slot="button" data-variant="default" data-size="default" class="inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&amp;_svg]:pointer-events-none [&amp;_svg]:shrink-0 [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 bg-primary text-primary-foreground hover:bg-primary/90 h-9 px-4 py-2 has-[&gt;svg]:px-3">View on GitHub</a></div></div></div><!--$--><!--/$--></main></div></main></div><section aria-label="Notifications alt+T" tabindex="-1" aria-live="polite" aria-relevant="additions text" aria-atomic="false"></section><script src="/_next/static/chunks/df7d29673e0ac11d.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[87292,[\"/_next/static/chunks/b32b17f102226f32.js\",\"/_next/static/chunks/1d665ddc2230f73f.js\",\"/_next/static/chunks/4431cc2d3628b6f6.js\"],\"AppShell\"]\n3:I[40799,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/37bc3e283f734dca.js\"],\"default\"]\n4:I[73006,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/37bc3e283f734dca.js\"],\"default\"]\n5:I[25251,[\"/_next/static/chunks/b32b17f102226f32.js\",\"/_next/static/chunks/1d665ddc2230f73f.js\",\"/_next/static/chunks/4431cc2d3628b6f6.js\"],\"Toaster\"]\n6:I[1699,[\"/_next/static/chunks/b32b17f102226f32.js\",\"/_next/static/chunks/1d665ddc2230f73f.js\",\"/_next/static/chunks/4431cc2d3628b6f6.js\",\"/_next/static/chunks/c95b4cf170b7f301.js\"],\"default\"]\n7:I[66658,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/37bc3e283f734dca.js\"],\"OutletBoundary\"]\n8:\"$Sreact.suspense\"\na:I[66658,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/37bc3e283f734dca.js\"],\"ViewportBoundary\"]\nc:I[66658,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/37bc3e283f734dca.js\"],\"MetadataBoundary\"]\ne:I[42726,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/37bc3e283f734dca.js\"],\"default\"]\n:HL[\"/_next/static/chunks/a7273c84449394e0.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"wymVMk3X_cTuoYKeS0Gbf\",\"c\":[\"\",\"version\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"version\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/a7273c84449394e0.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/b32b17f102226f32.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/1d665ddc2230f73f.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/chunks/4431cc2d3628b6f6.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n (function() {\\n try {\\n const theme = localStorage.getItem('shep-theme');\\n const systemDark = window.matchMedia('(prefers-color-scheme: dark)').matches;\\n if (theme === 'dark' || (theme === 'system' \u0026\u0026 systemDark) || (!theme \u0026\u0026 systemDark)) {\\n document.documentElement.classList.add('dark');\\n }\\n } catch (e) {}\\n })();\\n \"}}]}],[\"$\",\"body\",null,{\"className\":\"min-h-screen antialiased\",\"children\":[[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"div\",null,{\"className\":\"flex min-h-screen items-center justify-center\",\"children\":[\"$\",\"div\",null,{\"className\":\"text-center\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-bold\",\"children\":\"Not Found\"}],[\"$\",\"p\",null,{\"className\":\"text-muted-foreground\",\"children\":\"Could not find requested resource\"}]]}]}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}],[\"$\",\"$L5\",null,{}]]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L6\",null,{\"versionInfo\":{\"version\":\"1.27.0\",\"name\":\"@shepai/cli\",\"description\":\"Autonomous AI Native SDLC Platform - Automate the development cycle from idea to deploy\"},\"systemInfo\":{\"nodeVersion\":\"v22.22.0\",\"platform\":\"linux\",\"arch\":\"x64\"}}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/c95b4cf170b7f301.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L7\",null,{\"children\":[\"$\",\"$8\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@9\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"$8\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Ld\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[]],\"S\":true}\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"9:null\nd:[[\"$\",\"title\",\"0\",{\"children\":\"Shep AI\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Autonomous AI Native SDLC Platform - Automate the development cycle from idea to deploy\"}]]\n"])</script></body></html>
11
+ </script><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body class="min-h-screen antialiased"><div hidden=""><!--$--><!--/$--></div><div data-slot="sidebar-wrapper" style="--sidebar-width:16rem;--sidebar-width-icon:3rem" class="group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full"><div class="group peer text-sidebar-foreground hidden md:block" data-state="expanded" data-collapsible="" data-variant="sidebar" data-side="left" data-slot="sidebar"><div data-slot="sidebar-gap" class="relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear group-data-[collapsible=offcanvas]:w-0 group-data-[side=right]:rotate-180 group-data-[collapsible=icon]:w-(--sidebar-width-icon)"></div><div data-slot="sidebar-container" class="fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)] group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l" data-testid="app-sidebar"><div data-sidebar="sidebar" data-slot="sidebar-inner" class="bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm"><div data-slot="sidebar-header" data-sidebar="header" class="flex flex-col gap-2 p-2"><ul data-slot="sidebar-menu" data-sidebar="menu" class="flex w-full min-w-0 flex-col gap-1"><li data-slot="sidebar-menu-item" data-sidebar="menu-item" class="group/menu-item relative"><div class="flex h-8 items-center group-data-[collapsible=icon]:justify-center"><div class="flex min-w-0 flex-1 items-center gap-2 overflow-hidden px-2 transition-opacity duration-200 ease-out opacity-100" aria-hidden="false"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 194 200" width="20" height="20" class="shrink-0" aria-hidden="true"><g transform="matrix(1, 0, 0, 1, -111, -208)"><path d="M 198 406 C196,405 194,403 193,401 C192,399 191,398 186,398 C178,397 174,394 170,387 L 168 381 L 163 381 C156,381 150,377 147,370 C144,364 143,359 146,353 C148,348 148,347 147,347 C145,347 140,343 138,339 C133,329 139,314 149,311 L 152 311 L 149 307 C145,302 145,294 149,290 C151,288 152,287 151,286 C150,283 152,278 155,276 C156,275 159,274 162,273 C165,273 166,273 168,276 C171,278 171,280 172,287 C173,294 174,297 177,304 C180,309 182,314 183,316 C186,327 193,336 199,339 C204,342 211,342 216,340 C222,336 231,324 234,314 C235,312 237,307 239,302 C240,298 242,292 242,289 C243,281 245,278 247,275 C250,273 251,273 255,273 C261,274 264,278 264,282 C264,284 264,286 263,287 C262,287 263,288 265,290 C272,295 272,303 267,309 L 265 312 L 269 314 C276,317 279,323 279,332 C279,339 277,343 272,347 C268,351 268,351 269,354 C272,358 271,366 269,371 C266,376 259,381 254,381 C252,381 251,382 248,386 C242,395 234,400 227,399 C224,398 223,398 221,401 C220,403 217,405 216,406 C211,409 203,409 198,406 ZM 136 271 C123,267 115,262 113,256 C111,251 111,251 113,251 C118,254 124,254 132,252 C136,252 141,251 144,251 C149,251 157,253 162,256 C166,258 166,258 166,264 L 166 269 L 160 270 C149,272 142,272 136,271 ZM 264 271 C263,271 259,270 256,270 L 250 270 L 250 265 C249,259 250,257 259,254 C265,251 272,251 289,252 C297,253 299,253 302,252 C305,250 305,250 305,252 C305,255 301,262 297,264 C289,270 272,273 264,271 ZM 162 249 C160,247 159,245 159,242 C159,236 164,230 169,230 C170,230 171,228 171,225 C171,216 176,210 184,209 C189,209 195,211 195,213 C195,214 196,213 197,212 C201,209 204,208 208,208 C212,208 217,210 219,212 C220,214 220,213 223,211 C226,208 234,208 239,211 C243,214 246,221 246,226 C245,230 245,230 247,230 C253,230 258,238 257,244 C256,249 251,252 245,252 C241,252 237,251 234,248 C232,247 232,247 228,249 C225,251 222,252 220,252 C216,252 212,250 210,247 C209,246 209,246 206,248 C201,252 192,253 185,248 C183,247 183,247 178,249 C172,253 166,253 162,249 ZM 116 249 C112,248 114,247 119,247 C122,247 127,246 130,245 C138,242 146,242 152,245 L 158 248 L 148 247 C142,247 138,247 133,248 C128,250 120,250 116,249 ZM 284 248 C281,247 277,247 270,247 L 260 248 L 263 246 C269,243 276,242 284,245 C289,246 295,247 298,247 C303,247 304,247 303,248 C301,250 289,250 284,248 Z" fill="currentColor"></path></g></svg><span class="truncate text-sm font-semibold tracking-tight">Shep</span></div><div class="flex shrink-0 transition-all duration-200"><button data-slot="button" data-variant="ghost" data-size="icon" class="inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&amp;_svg]:pointer-events-none [&amp;_svg]:shrink-0 [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50 size-7 cursor-pointer group-data-[collapsible=icon]:size-8!" data-testid="sidebar-collapse-toggle" aria-label="Collapse sidebar"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-panel-left size-4" aria-hidden="true"><rect width="18" height="18" x="3" y="3" rx="2"></rect><path d="M9 3v18"></path></svg></button></div></div></li><li data-slot="sidebar-menu-item" data-sidebar="menu-item" class="group/menu-item relative" data-testid="sidebar-nav-item"><a data-slot="sidebar-menu-button" data-sidebar="menu-button" data-size="default" data-active="false" class="peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground [&amp;&gt;span:last-child]:truncate [&amp;&gt;svg]:size-4 [&amp;&gt;svg]:shrink-0 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground h-8 text-sm" data-state="closed" href="/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-house" aria-hidden="true"><path d="M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8"></path><path d="M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path></svg><span>Control Center</span></a></li><li data-slot="sidebar-menu-item" data-sidebar="menu-item" class="group/menu-item relative" data-testid="sidebar-nav-item"><a data-slot="sidebar-menu-button" data-sidebar="menu-button" data-size="default" data-active="false" class="peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground [&amp;&gt;span:last-child]:truncate [&amp;&gt;svg]:size-4 [&amp;&gt;svg]:shrink-0 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground h-8 text-sm" data-state="closed" href="/memory"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-brain" aria-hidden="true"><path d="M12 18V5"></path><path d="M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4"></path><path d="M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5"></path><path d="M17.997 5.125a4 4 0 0 1 2.526 5.77"></path><path d="M18 18a4 4 0 0 0 2-7.464"></path><path d="M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517"></path><path d="M6 18a4 4 0 0 1-2-7.464"></path><path d="M6.003 5.125a4 4 0 0 0-2.526 5.77"></path></svg><span>Memory</span></a></li></ul></div><div data-slot="sidebar-content" data-sidebar="content" class="flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden"><div class="min-w-0 overflow-hidden transition-opacity duration-200 ease-out [&amp;_[data-sidebar=group-label]]:!mt-0 [&amp;_[data-sidebar=group-label]]:!opacity-100 [&amp;_[data-sidebar=group-label]]:!transition-none opacity-100"><div data-slot="sidebar-group" data-sidebar="group" class="relative flex w-full min-w-0 flex-col p-2 px-2 py-1" data-testid="sidebar-section-header"><div class="text-sidebar-foreground flex h-7 w-full shrink-0 items-center px-2 text-sm font-medium"><span class="min-w-0 flex-1 truncate">Features</span><span class="text-sidebar-foreground/70 flex shrink-0 items-center gap-0.5"><button type="button" class="ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground flex size-7 items-center justify-center rounded-md p-0 outline-hidden transition-colors focus-visible:ring-2 [&amp;&gt;svg]:size-4" aria-label="Open features folder" data-state="closed" data-slot="tooltip-trigger"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-folder size-4" aria-hidden="true"><path d="M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z"></path></svg></button><button type="button" class="ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground flex size-7 items-center justify-center rounded-md p-0 outline-hidden transition-colors focus-visible:ring-2 [&amp;&gt;svg]:size-4" aria-label="Features options" data-state="closed" data-slot="tooltip-trigger"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-grip-horizontal size-4" aria-hidden="true"><circle cx="12" cy="9" r="1"></circle><circle cx="19" cy="9" r="1"></circle><circle cx="5" cy="9" r="1"></circle><circle cx="12" cy="15" r="1"></circle><circle cx="19" cy="15" r="1"></circle><circle cx="5" cy="15" r="1"></circle></svg></button></span></div></div><div dir="ltr" data-slot="scroll-area" class="relative" style="position:relative;--radix-scroll-area-corner-width:0px;--radix-scroll-area-corner-height:0px"><style>[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}</style><div data-radix-scroll-area-viewport="" data-slot="scroll-area-viewport" class="focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1" style="overflow-x:hidden;overflow-y:hidden"><div style="min-width:100%;display:table"></div></div></div></div></div><div data-slot="sidebar-footer" data-sidebar="footer" class="flex flex-col gap-2 p-2"><ul data-slot="sidebar-menu" data-sidebar="menu" class="flex w-full min-w-0 flex-col gap-1"><li data-slot="sidebar-menu-item" data-sidebar="menu-item" class="group/menu-item relative"><button data-slot="sidebar-menu-button" data-sidebar="menu-button" data-size="default" data-active="false" class="peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground [&amp;&gt;span:last-child]:truncate [&amp;&gt;svg]:size-4 [&amp;&gt;svg]:shrink-0 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground h-8 text-sm" data-state="closed"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-plus" aria-hidden="true"><path d="M5 12h14"></path><path d="M12 5v14"></path></svg><span>New feature</span></button></li></ul></div><button data-sidebar="rail" data-slot="sidebar-rail" aria-label="Toggle Sidebar" tabindex="-1" title="Toggle Sidebar" class="hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize [[data-side=left][data-state=collapsed]_&amp;]:cursor-e-resize [[data-side=right][data-state=collapsed]_&amp;]:cursor-w-resize hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full [[data-side=left][data-collapsible=offcanvas]_&amp;]:-right-2 [[data-side=right][data-collapsible=offcanvas]_&amp;]:-left-2"></button></div></div></div><main data-slot="sidebar-inset" class="bg-background relative flex w-full flex-1 flex-col md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2"><div class="relative h-full"><div class="absolute top-3 right-3 z-50"><button data-slot="button" data-variant="ghost" data-size="icon" class="inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&amp;_svg]:pointer-events-none [&amp;_svg]:shrink-0 [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50 size-9" aria-label="Switch to dark mode"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sun h-5 w-5 scale-100 rotate-0 transition-all dark:scale-0 dark:-rotate-90" aria-hidden="true"><circle cx="12" cy="12" r="4"></circle><path d="M12 2v2"></path><path d="M12 20v2"></path><path d="m4.93 4.93 1.41 1.41"></path><path d="m17.66 17.66 1.41 1.41"></path><path d="M2 12h2"></path><path d="M20 12h2"></path><path d="m6.34 17.66-1.41 1.41"></path><path d="m19.07 4.93-1.41 1.41"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon absolute h-5 w-5 scale-0 rotate-90 transition-all dark:scale-100 dark:rotate-0" aria-hidden="true"><path d="M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401"></path></svg><span class="sr-only">Toggle theme</span></button></div><main class="h-full"><div class="flex flex-col items-center justify-center p-4"><div class="w-full max-w-2xl space-y-6"><div class="text-center"><h1 class="text-3xl font-bold tracking-tight">@shepai/cli</h1><p class="text-muted-foreground mt-2">Autonomous AI Native SDLC Platform - Automate the development cycle from idea to deploy</p><div class="mt-4"><div class="inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-none border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80" data-testid="version-badge">v<!-- -->1.28.0</div></div></div><div dir="ltr" data-orientation="horizontal" class="w-full"><div role="tablist" aria-orientation="horizontal" class="bg-muted text-muted-foreground h-9 items-center justify-center rounded-lg p-1 grid w-full grid-cols-3" tabindex="-1" data-orientation="horizontal" style="outline:none"><button type="button" role="tab" aria-selected="true" aria-controls="radix-_R_9bsnqdb_-content-overview" data-state="active" id="radix-_R_9bsnqdb_-trigger-overview" class="ring-offset-background focus-visible:ring-ring data-[state=active]:bg-background data-[state=active]:text-foreground inline-flex items-center justify-center rounded-md px-3 py-1 text-sm font-medium whitespace-nowrap transition-all focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow" tabindex="-1" data-orientation="horizontal" data-radix-collection-item="">Overview</button><button type="button" role="tab" aria-selected="false" aria-controls="radix-_R_9bsnqdb_-content-system" data-state="inactive" id="radix-_R_9bsnqdb_-trigger-system" class="ring-offset-background focus-visible:ring-ring data-[state=active]:bg-background data-[state=active]:text-foreground inline-flex items-center justify-center rounded-md px-3 py-1 text-sm font-medium whitespace-nowrap transition-all focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow" tabindex="-1" data-orientation="horizontal" data-radix-collection-item="">System</button><button type="button" role="tab" aria-selected="false" aria-controls="radix-_R_9bsnqdb_-content-features" data-state="inactive" id="radix-_R_9bsnqdb_-trigger-features" class="ring-offset-background focus-visible:ring-ring data-[state=active]:bg-background data-[state=active]:text-foreground inline-flex items-center justify-center rounded-md px-3 py-1 text-sm font-medium whitespace-nowrap transition-all focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow" tabindex="-1" data-orientation="horizontal" data-radix-collection-item="">Features</button></div><div data-state="active" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-_R_9bsnqdb_-trigger-overview" id="radix-_R_9bsnqdb_-content-overview" tabindex="0" class="ring-offset-background focus-visible:ring-ring mt-2 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none" style="animation-duration:0s"><div class="bg-card text-card-foreground rounded-xl border shadow"><div class="flex flex-col space-y-1.5 p-6"><div class="leading-none font-semibold tracking-tight">Package Information</div><div class="text-muted-foreground text-sm">Details about the Shep AI CLI package</div></div><div class="p-6 pt-0 space-y-1"><div class="flex items-center justify-between py-2"><span class="text-muted-foreground text-sm">Package</span><span class="font-mono text-sm">@shepai/cli</span></div><div class="flex items-center justify-between py-2"><span class="text-muted-foreground text-sm">Version</span><div class="inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-none border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80">v1.28.0</div></div><div class="flex items-center justify-between py-2"><span class="text-muted-foreground text-sm">License</span><div class="inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-none text-foreground">MIT</div></div><div class="flex items-center justify-between py-2"><span class="text-muted-foreground text-sm">Author</span><span class="font-mono text-sm">Shep AI</span></div></div></div></div><div data-state="inactive" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-_R_9bsnqdb_-trigger-system" hidden="" id="radix-_R_9bsnqdb_-content-system" tabindex="0" class="ring-offset-background focus-visible:ring-ring mt-2 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none"></div><div data-state="inactive" data-orientation="horizontal" role="tabpanel" aria-labelledby="radix-_R_9bsnqdb_-trigger-features" hidden="" id="radix-_R_9bsnqdb_-content-features" tabindex="0" class="ring-offset-background focus-visible:ring-ring mt-2 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none"></div></div><div class="flex justify-center gap-4"><a data-slot="button" data-variant="outline" data-size="default" class="inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&amp;_svg]:pointer-events-none [&amp;_svg]:shrink-0 [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50 h-9 px-4 py-2 has-[&gt;svg]:px-3" href="/">Back to Home</a><a href="https://github.com/shep-ai/cli" target="_blank" rel="noopener noreferrer" data-slot="button" data-variant="default" data-size="default" class="inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&amp;_svg]:pointer-events-none [&amp;_svg]:shrink-0 [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 bg-primary text-primary-foreground hover:bg-primary/90 h-9 px-4 py-2 has-[&gt;svg]:px-3">View on GitHub</a></div></div></div><!--$--><!--/$--></main></div></main></div><section aria-label="Notifications alt+T" tabindex="-1" aria-live="polite" aria-relevant="additions text" aria-atomic="false"></section><script src="/_next/static/chunks/df7d29673e0ac11d.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[87292,[\"/_next/static/chunks/b32b17f102226f32.js\",\"/_next/static/chunks/1d665ddc2230f73f.js\",\"/_next/static/chunks/4431cc2d3628b6f6.js\"],\"AppShell\"]\n3:I[40799,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/37bc3e283f734dca.js\"],\"default\"]\n4:I[73006,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/37bc3e283f734dca.js\"],\"default\"]\n5:I[25251,[\"/_next/static/chunks/b32b17f102226f32.js\",\"/_next/static/chunks/1d665ddc2230f73f.js\",\"/_next/static/chunks/4431cc2d3628b6f6.js\"],\"Toaster\"]\n6:I[1699,[\"/_next/static/chunks/b32b17f102226f32.js\",\"/_next/static/chunks/1d665ddc2230f73f.js\",\"/_next/static/chunks/4431cc2d3628b6f6.js\",\"/_next/static/chunks/c95b4cf170b7f301.js\"],\"default\"]\n7:I[66658,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/37bc3e283f734dca.js\"],\"OutletBoundary\"]\n8:\"$Sreact.suspense\"\na:I[66658,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/37bc3e283f734dca.js\"],\"ViewportBoundary\"]\nc:I[66658,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/37bc3e283f734dca.js\"],\"MetadataBoundary\"]\ne:I[42726,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/37bc3e283f734dca.js\"],\"default\"]\n:HL[\"/_next/static/chunks/fd816afd85fd9a19.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"LkrVnyOa_e5oKSoKOC3uq\",\"c\":[\"\",\"version\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"version\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/fd816afd85fd9a19.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/b32b17f102226f32.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/1d665ddc2230f73f.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/chunks/4431cc2d3628b6f6.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n (function() {\\n try {\\n const theme = localStorage.getItem('shep-theme');\\n const systemDark = window.matchMedia('(prefers-color-scheme: dark)').matches;\\n if (theme === 'dark' || (theme === 'system' \u0026\u0026 systemDark) || (!theme \u0026\u0026 systemDark)) {\\n document.documentElement.classList.add('dark');\\n }\\n } catch (e) {}\\n })();\\n \"}}]}],[\"$\",\"body\",null,{\"className\":\"min-h-screen antialiased\",\"children\":[[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"div\",null,{\"className\":\"flex min-h-screen items-center justify-center\",\"children\":[\"$\",\"div\",null,{\"className\":\"text-center\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-bold\",\"children\":\"Not Found\"}],[\"$\",\"p\",null,{\"className\":\"text-muted-foreground\",\"children\":\"Could not find requested resource\"}]]}]}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}],[\"$\",\"$L5\",null,{}]]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L6\",null,{\"versionInfo\":{\"version\":\"1.28.0\",\"name\":\"@shepai/cli\",\"description\":\"Autonomous AI Native SDLC Platform - Automate the development cycle from idea to deploy\"},\"systemInfo\":{\"nodeVersion\":\"v22.22.0\",\"platform\":\"linux\",\"arch\":\"x64\"}}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/c95b4cf170b7f301.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L7\",null,{\"children\":[\"$\",\"$8\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@9\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"$8\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Ld\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[]],\"S\":true}\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"9:null\nd:[[\"$\",\"title\",\"0\",{\"children\":\"Shep AI\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Autonomous AI Native SDLC Platform - Automate the development cycle from idea to deploy\"}]]\n"])</script></body></html>
@@ -9,8 +9,8 @@
9
9
  a:I[66658,["/_next/static/chunks/ab02eec995295bef.js","/_next/static/chunks/37bc3e283f734dca.js"],"ViewportBoundary"]
10
10
  c:I[66658,["/_next/static/chunks/ab02eec995295bef.js","/_next/static/chunks/37bc3e283f734dca.js"],"MetadataBoundary"]
11
11
  e:I[42726,["/_next/static/chunks/ab02eec995295bef.js","/_next/static/chunks/37bc3e283f734dca.js"],"default"]
12
- :HL["/_next/static/chunks/a7273c84449394e0.css","style"]
13
- 0:{"P":null,"b":"wymVMk3X_cTuoYKeS0Gbf","c":["","version"],"q":"","i":false,"f":[[["",{"children":["version",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/a7273c84449394e0.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/b32b17f102226f32.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/1d665ddc2230f73f.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/4431cc2d3628b6f6.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"\n (function() {\n try {\n const theme = localStorage.getItem('shep-theme');\n const systemDark = window.matchMedia('(prefers-color-scheme: dark)').matches;\n if (theme === 'dark' || (theme === 'system' && systemDark) || (!theme && systemDark)) {\n document.documentElement.classList.add('dark');\n }\n } catch (e) {}\n })();\n "}}]}],["$","body",null,{"className":"min-h-screen antialiased","children":[["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","div",null,{"className":"flex min-h-screen items-center justify-center","children":["$","div",null,{"className":"text-center","children":[["$","h2",null,{"className":"text-2xl font-bold","children":"Not Found"}],["$","p",null,{"className":"text-muted-foreground","children":"Could not find requested resource"}]]}]}],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}],["$","$L5",null,{}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","$L6",null,{"versionInfo":{"version":"1.27.0","name":"@shepai/cli","description":"Autonomous AI Native SDLC Platform - Automate the development cycle from idea to deploy"},"systemInfo":{"nodeVersion":"v22.22.0","platform":"linux","arch":"x64"}}],[["$","script","script-0",{"src":"/_next/static/chunks/c95b4cf170b7f301.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"children":["$","$8",null,{"name":"Next.MetadataOutlet","children":"$@9"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],["$","$1","h",{"children":[null,["$","$La",null,{"children":"$Lb"}],["$","div",null,{"hidden":true,"children":["$","$Lc",null,{"children":["$","$8",null,{"name":"Next.Metadata","children":"$Ld"}]}]}],null]}],false]],"m":"$undefined","G":["$e",[]],"S":true}
12
+ :HL["/_next/static/chunks/fd816afd85fd9a19.css","style"]
13
+ 0:{"P":null,"b":"LkrVnyOa_e5oKSoKOC3uq","c":["","version"],"q":"","i":false,"f":[[["",{"children":["version",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/fd816afd85fd9a19.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/b32b17f102226f32.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/1d665ddc2230f73f.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/4431cc2d3628b6f6.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"\n (function() {\n try {\n const theme = localStorage.getItem('shep-theme');\n const systemDark = window.matchMedia('(prefers-color-scheme: dark)').matches;\n if (theme === 'dark' || (theme === 'system' && systemDark) || (!theme && systemDark)) {\n document.documentElement.classList.add('dark');\n }\n } catch (e) {}\n })();\n "}}]}],["$","body",null,{"className":"min-h-screen antialiased","children":[["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","div",null,{"className":"flex min-h-screen items-center justify-center","children":["$","div",null,{"className":"text-center","children":[["$","h2",null,{"className":"text-2xl font-bold","children":"Not Found"}],["$","p",null,{"className":"text-muted-foreground","children":"Could not find requested resource"}]]}]}],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}],["$","$L5",null,{}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","$L6",null,{"versionInfo":{"version":"1.28.0","name":"@shepai/cli","description":"Autonomous AI Native SDLC Platform - Automate the development cycle from idea to deploy"},"systemInfo":{"nodeVersion":"v22.22.0","platform":"linux","arch":"x64"}}],[["$","script","script-0",{"src":"/_next/static/chunks/c95b4cf170b7f301.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"children":["$","$8",null,{"name":"Next.MetadataOutlet","children":"$@9"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],["$","$1","h",{"children":[null,["$","$La",null,{"children":"$Lb"}],["$","div",null,{"hidden":true,"children":["$","$Lc",null,{"children":["$","$8",null,{"name":"Next.Metadata","children":"$Ld"}]}]}],null]}],false]],"m":"$undefined","G":["$e",[]],"S":true}
14
14
  b:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
15
15
  9:null
16
16
  d:[["$","title","0",{"children":"Shep AI"}],["$","meta","1",{"name":"description","content":"Autonomous AI Native SDLC Platform - Automate the development cycle from idea to deploy"}]]
@@ -9,8 +9,8 @@
9
9
  a:I[66658,["/_next/static/chunks/ab02eec995295bef.js","/_next/static/chunks/37bc3e283f734dca.js"],"ViewportBoundary"]
10
10
  c:I[66658,["/_next/static/chunks/ab02eec995295bef.js","/_next/static/chunks/37bc3e283f734dca.js"],"MetadataBoundary"]
11
11
  e:I[42726,["/_next/static/chunks/ab02eec995295bef.js","/_next/static/chunks/37bc3e283f734dca.js"],"default"]
12
- :HL["/_next/static/chunks/a7273c84449394e0.css","style"]
13
- 0:{"P":null,"b":"wymVMk3X_cTuoYKeS0Gbf","c":["","version"],"q":"","i":false,"f":[[["",{"children":["version",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/a7273c84449394e0.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/b32b17f102226f32.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/1d665ddc2230f73f.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/4431cc2d3628b6f6.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"\n (function() {\n try {\n const theme = localStorage.getItem('shep-theme');\n const systemDark = window.matchMedia('(prefers-color-scheme: dark)').matches;\n if (theme === 'dark' || (theme === 'system' && systemDark) || (!theme && systemDark)) {\n document.documentElement.classList.add('dark');\n }\n } catch (e) {}\n })();\n "}}]}],["$","body",null,{"className":"min-h-screen antialiased","children":[["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","div",null,{"className":"flex min-h-screen items-center justify-center","children":["$","div",null,{"className":"text-center","children":[["$","h2",null,{"className":"text-2xl font-bold","children":"Not Found"}],["$","p",null,{"className":"text-muted-foreground","children":"Could not find requested resource"}]]}]}],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}],["$","$L5",null,{}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","$L6",null,{"versionInfo":{"version":"1.27.0","name":"@shepai/cli","description":"Autonomous AI Native SDLC Platform - Automate the development cycle from idea to deploy"},"systemInfo":{"nodeVersion":"v22.22.0","platform":"linux","arch":"x64"}}],[["$","script","script-0",{"src":"/_next/static/chunks/c95b4cf170b7f301.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"children":["$","$8",null,{"name":"Next.MetadataOutlet","children":"$@9"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],["$","$1","h",{"children":[null,["$","$La",null,{"children":"$Lb"}],["$","div",null,{"hidden":true,"children":["$","$Lc",null,{"children":["$","$8",null,{"name":"Next.Metadata","children":"$Ld"}]}]}],null]}],false]],"m":"$undefined","G":["$e",[]],"S":true}
12
+ :HL["/_next/static/chunks/fd816afd85fd9a19.css","style"]
13
+ 0:{"P":null,"b":"LkrVnyOa_e5oKSoKOC3uq","c":["","version"],"q":"","i":false,"f":[[["",{"children":["version",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/fd816afd85fd9a19.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/b32b17f102226f32.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/1d665ddc2230f73f.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/4431cc2d3628b6f6.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"\n (function() {\n try {\n const theme = localStorage.getItem('shep-theme');\n const systemDark = window.matchMedia('(prefers-color-scheme: dark)').matches;\n if (theme === 'dark' || (theme === 'system' && systemDark) || (!theme && systemDark)) {\n document.documentElement.classList.add('dark');\n }\n } catch (e) {}\n })();\n "}}]}],["$","body",null,{"className":"min-h-screen antialiased","children":[["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","div",null,{"className":"flex min-h-screen items-center justify-center","children":["$","div",null,{"className":"text-center","children":[["$","h2",null,{"className":"text-2xl font-bold","children":"Not Found"}],["$","p",null,{"className":"text-muted-foreground","children":"Could not find requested resource"}]]}]}],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}],["$","$L5",null,{}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","$L6",null,{"versionInfo":{"version":"1.28.0","name":"@shepai/cli","description":"Autonomous AI Native SDLC Platform - Automate the development cycle from idea to deploy"},"systemInfo":{"nodeVersion":"v22.22.0","platform":"linux","arch":"x64"}}],[["$","script","script-0",{"src":"/_next/static/chunks/c95b4cf170b7f301.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"children":["$","$8",null,{"name":"Next.MetadataOutlet","children":"$@9"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],["$","$1","h",{"children":[null,["$","$La",null,{"children":"$Lb"}],["$","div",null,{"hidden":true,"children":["$","$Lc",null,{"children":["$","$8",null,{"name":"Next.Metadata","children":"$Ld"}]}]}],null]}],false]],"m":"$undefined","G":["$e",[]],"S":true}
14
14
  b:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
15
15
  9:null
16
16
  d:[["$","title","0",{"children":"Shep AI"}],["$","meta","1",{"name":"description","content":"Autonomous AI Native SDLC Platform - Automate the development cycle from idea to deploy"}]]
@@ -2,4 +2,4 @@
2
2
  2:I[66658,["/_next/static/chunks/ab02eec995295bef.js","/_next/static/chunks/37bc3e283f734dca.js"],"ViewportBoundary"]
3
3
  3:I[66658,["/_next/static/chunks/ab02eec995295bef.js","/_next/static/chunks/37bc3e283f734dca.js"],"MetadataBoundary"]
4
4
  4:"$Sreact.suspense"
5
- 0:{"buildId":"wymVMk3X_cTuoYKeS0Gbf","rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Shep AI"}],["$","meta","1",{"name":"description","content":"Autonomous AI Native SDLC Platform - Automate the development cycle from idea to deploy"}]]}]}]}],null]}],"loading":null,"isPartial":false}
5
+ 0:{"buildId":"LkrVnyOa_e5oKSoKOC3uq","rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Shep AI"}],["$","meta","1",{"name":"description","content":"Autonomous AI Native SDLC Platform - Automate the development cycle from idea to deploy"}]]}]}]}],null]}],"loading":null,"isPartial":false}
@@ -3,5 +3,5 @@
3
3
  3:I[40799,["/_next/static/chunks/ab02eec995295bef.js","/_next/static/chunks/37bc3e283f734dca.js"],"default"]
4
4
  4:I[73006,["/_next/static/chunks/ab02eec995295bef.js","/_next/static/chunks/37bc3e283f734dca.js"],"default"]
5
5
  5:I[25251,["/_next/static/chunks/b32b17f102226f32.js","/_next/static/chunks/1d665ddc2230f73f.js","/_next/static/chunks/4431cc2d3628b6f6.js"],"Toaster"]
6
- :HL["/_next/static/chunks/a7273c84449394e0.css","style"]
7
- 0:{"buildId":"wymVMk3X_cTuoYKeS0Gbf","rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/a7273c84449394e0.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/b32b17f102226f32.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/1d665ddc2230f73f.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/4431cc2d3628b6f6.js","async":true}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"\n (function() {\n try {\n const theme = localStorage.getItem('shep-theme');\n const systemDark = window.matchMedia('(prefers-color-scheme: dark)').matches;\n if (theme === 'dark' || (theme === 'system' && systemDark) || (!theme && systemDark)) {\n document.documentElement.classList.add('dark');\n }\n } catch (e) {}\n })();\n "}}]}],["$","body",null,{"className":"min-h-screen antialiased","children":[["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","template":["$","$L4",null,{}],"notFound":[["$","div",null,{"className":"flex min-h-screen items-center justify-center","children":["$","div",null,{"className":"text-center","children":[["$","h2",null,{"className":"text-2xl font-bold","children":"Not Found"}],["$","p",null,{"className":"text-muted-foreground","children":"Could not find requested resource"}]]}]}],[]]}]}],["$","$L5",null,{}]]}]]}]]}],"loading":null,"isPartial":false}
6
+ :HL["/_next/static/chunks/fd816afd85fd9a19.css","style"]
7
+ 0:{"buildId":"LkrVnyOa_e5oKSoKOC3uq","rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/fd816afd85fd9a19.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/b32b17f102226f32.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/1d665ddc2230f73f.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/4431cc2d3628b6f6.js","async":true}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"\n (function() {\n try {\n const theme = localStorage.getItem('shep-theme');\n const systemDark = window.matchMedia('(prefers-color-scheme: dark)').matches;\n if (theme === 'dark' || (theme === 'system' && systemDark) || (!theme && systemDark)) {\n document.documentElement.classList.add('dark');\n }\n } catch (e) {}\n })();\n "}}]}],["$","body",null,{"className":"min-h-screen antialiased","children":[["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","template":["$","$L4",null,{}],"notFound":[["$","div",null,{"className":"flex min-h-screen items-center justify-center","children":["$","div",null,{"className":"text-center","children":[["$","h2",null,{"className":"text-2xl font-bold","children":"Not Found"}],["$","p",null,{"className":"text-muted-foreground","children":"Could not find requested resource"}]]}]}],[]]}]}],["$","$L5",null,{}]]}]]}]]}],"loading":null,"isPartial":false}
@@ -1,2 +1,2 @@
1
- :HL["/_next/static/chunks/a7273c84449394e0.css","style"]
2
- 0:{"buildId":"wymVMk3X_cTuoYKeS0Gbf","tree":{"name":"","paramType":null,"paramKey":"","hasRuntimePrefetch":false,"slots":{"children":{"name":"version","paramType":null,"paramKey":"version","hasRuntimePrefetch":false,"slots":{"children":{"name":"__PAGE__","paramType":null,"paramKey":"__PAGE__","hasRuntimePrefetch":false,"slots":null,"isRootLayout":false}},"isRootLayout":false}},"isRootLayout":true},"staleTime":300}
1
+ :HL["/_next/static/chunks/fd816afd85fd9a19.css","style"]
2
+ 0:{"buildId":"LkrVnyOa_e5oKSoKOC3uq","tree":{"name":"","paramType":null,"paramKey":"","hasRuntimePrefetch":false,"slots":{"children":{"name":"version","paramType":null,"paramKey":"version","hasRuntimePrefetch":false,"slots":{"children":{"name":"__PAGE__","paramType":null,"paramKey":"__PAGE__","hasRuntimePrefetch":false,"slots":null,"isRootLayout":false}},"isRootLayout":false}},"isRootLayout":true},"staleTime":300}
@@ -2,5 +2,5 @@
2
2
  2:I[1699,["/_next/static/chunks/b32b17f102226f32.js","/_next/static/chunks/1d665ddc2230f73f.js","/_next/static/chunks/4431cc2d3628b6f6.js","/_next/static/chunks/c95b4cf170b7f301.js"],"default"]
3
3
  3:I[66658,["/_next/static/chunks/ab02eec995295bef.js","/_next/static/chunks/37bc3e283f734dca.js"],"OutletBoundary"]
4
4
  4:"$Sreact.suspense"
5
- 0:{"buildId":"wymVMk3X_cTuoYKeS0Gbf","rsc":["$","$1","c",{"children":[["$","$L2",null,{"versionInfo":{"version":"1.27.0","name":"@shepai/cli","description":"Autonomous AI Native SDLC Platform - Automate the development cycle from idea to deploy"},"systemInfo":{"nodeVersion":"v22.22.0","platform":"linux","arch":"x64"}}],[["$","script","script-0",{"src":"/_next/static/chunks/c95b4cf170b7f301.js","async":true}]],["$","$L3",null,{"children":["$","$4",null,{"name":"Next.MetadataOutlet","children":"$@5"}]}]]}],"loading":null,"isPartial":false}
5
+ 0:{"buildId":"LkrVnyOa_e5oKSoKOC3uq","rsc":["$","$1","c",{"children":[["$","$L2",null,{"versionInfo":{"version":"1.28.0","name":"@shepai/cli","description":"Autonomous AI Native SDLC Platform - Automate the development cycle from idea to deploy"},"systemInfo":{"nodeVersion":"v22.22.0","platform":"linux","arch":"x64"}}],[["$","script","script-0",{"src":"/_next/static/chunks/c95b4cf170b7f301.js","async":true}]],["$","$L3",null,{"children":["$","$4",null,{"name":"Next.MetadataOutlet","children":"$@5"}]}]]}],"loading":null,"isPartial":false}
6
6
  5:null
@@ -1,4 +1,4 @@
1
1
  1:"$Sreact.fragment"
2
2
  2:I[40799,["/_next/static/chunks/ab02eec995295bef.js","/_next/static/chunks/37bc3e283f734dca.js"],"default"]
3
3
  3:I[73006,["/_next/static/chunks/ab02eec995295bef.js","/_next/static/chunks/37bc3e283f734dca.js"],"default"]
4
- 0:{"buildId":"wymVMk3X_cTuoYKeS0Gbf","rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"loading":null,"isPartial":false}
4
+ 0:{"buildId":"LkrVnyOa_e5oKSoKOC3uq","rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"loading":null,"isPartial":false}
@@ -4,6 +4,7 @@
4
4
  "/api/agent-events/route": "app/api/agent-events/route.js",
5
5
  "/api/dialog/pick-files/route": "app/api/dialog/pick-files/route.js",
6
6
  "/api/dialog/pick-folder/route": "app/api/dialog/pick-folder/route.js",
7
+ "/api/features/[id]/route": "app/api/features/[id]/route.js",
7
8
  "/api/features/create/route": "app/api/features/create/route.js",
8
9
  "/api/ide/open/route": "app/api/ide/open/route.js",
9
10
  "/api/shell/open/route": "app/api/shell/open/route.js",
@@ -0,0 +1,3 @@
1
+ module.exports=[89688,s=>{"use strict";s.s([])}];
2
+
3
+ //# sourceMappingURL=744ca_web__next-internal_server_app_api_features_%5Bid%5D_route_actions_03b9a4b5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ module.exports=[18622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},24725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},70406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},93695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},39082,e=>{"use strict";let t="__shepUseCases";function r(e){if(!e||"object"!=typeof e)return!1;let t=e.listFeatures,r=e.agentRunRepo,a=e.createFeature,n=e.deleteFeature;return!!t&&"function"==typeof t.execute&&!!r&&"function"==typeof r.findById&&!!a&&"function"==typeof a.execute&&!!n&&"function"==typeof n.execute}function a(){let e=globalThis[t];if(r(e))return e;let a=process[t];if(r(a))return a}async function n(e){let t=a();if(!t?.createFeature)throw Error("Use-cases bridge is not initialized. Ensure the CLI process is running.");return t.createFeature.execute(e)}async function o(e){let t=a();if(!t?.deleteFeature)throw Error("Use-cases bridge is not initialized. Ensure the CLI process is running.");return t.deleteFeature.execute(e)}e.s(["createFeature",()=>n,"deleteFeature",()=>o])},19457,e=>{"use strict";var t=e.i(22925),r=e.i(62995),a=e.i(14112),n=e.i(31716),o=e.i(16340),s=e.i(40522),i=e.i(21994),l=e.i(5802),u=e.i(17171),d=e.i(177),p=e.i(43685),c=e.i(84832),f=e.i(92435),h=e.i(41260),x=e.i(80556),R=e.i(93695);e.i(97230);var w=e.i(35162),g=e.i(27980),v=e.i(39082);function y(e){return!("object"!=typeof e||null===e||Array.isArray(e))&&"boolean"==typeof e.allowPrd&&"boolean"==typeof e.allowPlan&&(!("allowMerge"in e)||"boolean"==typeof e.allowMerge)}async function m(e){let{name:t,description:r,repositoryPath:a,attachments:n,approvalGates:o}=await e.json();if(!t?.trim())return g.NextResponse.json({error:"name is required"},{status:400});if(!a?.trim())return g.NextResponse.json({error:"repositoryPath is required"},{status:400});if(void 0!==o&&!y(o))return g.NextResponse.json({error:"approvalGates must be an object with boolean allowPrd, allowPlan, and optional boolean allowMerge"},{status:400});let s=function(e,t,r){let a=`Feature: ${e}`;if(t&&(a+=`
2
+
3
+ ${t}`),r&&r.length>0){let e=r.map(e=>`- ${e.path}`).join("\n");a+=`
4
+
5
+ Attached files:
6
+ ${e}`}return a}(t,r,n),i=y(o)?{allowPrd:o.allowPrd,allowPlan:o.allowPlan,allowMerge:"allowMerge"in o&&o.allowMerge}:{allowPrd:!1,allowPlan:!1,allowMerge:!1};try{let e=await (0,v.createFeature)({userInput:s,repositoryPath:a,approvalGates:i});return g.NextResponse.json(e)}catch(t){let e=t instanceof Error?t.message:"Failed to create feature";return g.NextResponse.json({error:e},{status:500})}}e.s(["POST",()=>m],22365);var E=e.i(22365);let b=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/features/create/route",pathname:"/api/features/create",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/presentation/web/app/api/features/create/route.ts",nextConfigOutput:"",userland:E}),{workAsyncStorage:C,workUnitAsyncStorage:P,serverHooks:A}=b;function N(){return(0,a.patchFetch)({workAsyncStorage:C,workUnitAsyncStorage:P})}async function j(e,t,a){b.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let g="/api/features/create/route";g=g.replace(/\/index$/,"")||"/";let v=await b.prepare(e,t,{srcPage:g,multiZoneDraftMode:!1});if(!v)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:y,params:m,nextConfig:E,parsedUrl:C,isDraftMode:P,prerenderManifest:A,routerServerContext:N,isOnDemandRevalidate:j,revalidateOnlyGenerated:T,resolvedPathname:q,clientReferenceManifest:O,serverActionsManifest:_}=v,k=(0,i.normalizeAppPath)(g),F=!!(A.dynamicRoutes[k]||A.routes[q]),S=async()=>((null==N?void 0:N.render404)?await N.render404(e,t,C,!1):t.end("This page could not be found"),null);if(F&&!P){let e=!!A.routes[q],t=A.dynamicRoutes[k];if(t&&!1===t.fallback&&!e){if(E.experimental.adapterPath)return await S();throw new R.NoFallbackError}}let M=null;!F||b.isDev||P||(M="/index"===(M=q)?"/":M);let U=!0===b.isDev||!F,I=F&&!U;_&&O&&(0,s.setManifestsSingleton)({page:g,clientReferenceManifest:O,serverActionsManifest:_});let H=e.method||"GET",D=(0,o.getTracer)(),$=D.getActiveScopeSpan(),K={params:m,prerenderManifest:A,renderOpts:{experimental:{authInterrupts:!!E.experimental.authInterrupts},cacheComponents:!!E.cacheComponents,supportsDynamicResponse:U,incrementalCache:(0,n.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:E.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,n)=>b.onRequestError(e,t,a,n,N)},sharedContext:{buildId:y}},L=new l.NodeNextRequest(e),B=new l.NodeNextResponse(t),G=u.NextRequestAdapter.fromNodeNextRequest(L,(0,u.signalFromNodeResponse)(t));try{let s=async e=>b.handle(G,K).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=D.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==d.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route");if(a){let t=`${H} ${a}`;e.setAttributes({"next.route":a,"http.route":a,"next.span_name":t}),e.updateName(t)}else e.updateName(`${H} ${g}`)}),i=!!(0,n.getRequestMeta)(e,"minimalMode"),l=async n=>{var o,l;let u=async({previousCacheEntry:r})=>{try{if(!i&&j&&T&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let o=await s(n);e.fetchMetrics=K.renderOpts.fetchMetrics;let l=K.renderOpts.pendingWaitUntil;l&&a.waitUntil&&(a.waitUntil(l),l=void 0);let u=K.renderOpts.collectedTags;if(!F)return await (0,c.sendResponse)(L,B,o,K.renderOpts.pendingWaitUntil),null;{let e=await o.blob(),t=(0,f.toNodeOutgoingHttpHeaders)(o.headers);u&&(t[x.NEXT_CACHE_TAGS_HEADER]=u),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==K.renderOpts.collectedRevalidate&&!(K.renderOpts.collectedRevalidate>=x.INFINITE_CACHE)&&K.renderOpts.collectedRevalidate,a=void 0===K.renderOpts.collectedExpire||K.renderOpts.collectedExpire>=x.INFINITE_CACHE?void 0:K.renderOpts.collectedExpire;return{value:{kind:w.CachedRouteKind.APP_ROUTE,status:o.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await b.onRequestError(e,t,{routerKind:"App Router",routePath:g,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:I,isOnDemandRevalidate:j})},!1,N),t}},d=await b.handleResponse({req:e,nextConfig:E,cacheKey:M,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:A,isRoutePPREnabled:!1,isOnDemandRevalidate:j,revalidateOnlyGenerated:T,responseGenerator:u,waitUntil:a.waitUntil,isMinimalMode:i});if(!F)return null;if((null==d||null==(o=d.value)?void 0:o.kind)!==w.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==d||null==(l=d.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});i||t.setHeader("x-nextjs-cache",j?"REVALIDATED":d.isMiss?"MISS":d.isStale?"STALE":"HIT"),P&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let R=(0,f.fromNodeOutgoingHttpHeaders)(d.value.headers);return i&&F||R.delete(x.NEXT_CACHE_TAGS_HEADER),!d.cacheControl||t.getHeader("Cache-Control")||R.get("Cache-Control")||R.set("Cache-Control",(0,h.getCacheControlHeader)(d.cacheControl)),await (0,c.sendResponse)(L,B,new Response(d.value.body,{headers:R,status:d.value.status||200})),null};$?await l($):await D.withPropagatedContext(e.headers,()=>D.trace(d.BaseServerSpan.handleRequest,{spanName:`${H} ${g}`,kind:o.SpanKind.SERVER,attributes:{"http.method":H,"http.target":e.url}},l))}catch(t){if(t instanceof R.NoFallbackError||await b.onRequestError(e,t,{routerKind:"App Router",routePath:k,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:I,isOnDemandRevalidate:j})},!1,N),F)throw t;return await (0,c.sendResponse)(L,B,new Response(null,{status:500})),null}}e.s(["handler",()=>j,"patchFetch",()=>N,"routeModule",()=>b,"serverHooks",()=>A,"workAsyncStorage",()=>C,"workUnitAsyncStorage",()=>P],19457)}];
7
+
8
+ //# sourceMappingURL=%5Broot-of-the-server%5D__0c45619b._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../packages/core/src/infrastructure/di/use-cases-bridge.ts","../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/dist/esm/build/templates/app-route.js","../../../../../../src/presentation/web/app/api/features/create/route.ts"],"sourcesContent":["/**\n * Use Cases Bridge — Reader\n *\n * Why does this exist?\n * Use cases (e.g. ListFeaturesUseCase) are DI-managed classes that depend on\n * injected repositories, which in turn need a live SQLite connection. The web\n * layer (Next.js / Turbopack) cannot run the DI container because it would\n * pull in tsyringe, reflect-metadata, and better-sqlite3 (native C++ addon) —\n * none of which Turbopack can bundle.\n *\n * How it works:\n * 1. CLI bootstrap runs initializeContainer() and resolves fully-wired use cases.\n * 2. The writer (populate-use-cases-bridge.ts) places those instances on globalThis.\n * 3. This reader retrieves them — no DI, no native modules, no decorators.\n *\n * This file is safe to import from the Next.js web layer.\n */\n\nimport type { Feature, AgentRun } from '../../domain/generated/output.js';\nimport type { FeatureListFilters } from '../../application/ports/output/repositories/feature-repository.interface.js';\nimport type {\n CreateFeatureInput,\n CreateFeatureResult,\n} from '../../application/use-cases/features/create/types.js';\n\nexport type { FeatureListFilters, CreateFeatureInput, CreateFeatureResult };\n\n/** The globalThis key shared between writer and reader. */\nexport const SHEP_USE_CASES_KEY = '__shepUseCases';\n\n/** Shape of the bridge object on globalThis. */\ninterface ShepUseCases {\n listFeatures: { execute(filters?: FeatureListFilters): Promise<Feature[]> };\n agentRunRepo: { findById(id: string): Promise<AgentRun | null> };\n createFeature: { execute(input: CreateFeatureInput): Promise<CreateFeatureResult> };\n deleteFeature: { execute(featureId: string): Promise<Feature> };\n}\n\nfunction isShepUseCases(value: unknown): value is ShepUseCases {\n if (!value || typeof value !== 'object') return false;\n\n const maybe = value as Record<string, unknown>;\n const listFeatures = maybe.listFeatures as Record<string, unknown> | undefined;\n const agentRunRepo = maybe.agentRunRepo as Record<string, unknown> | undefined;\n const createFeature = maybe.createFeature as Record<string, unknown> | undefined;\n const deleteFeature = maybe.deleteFeature as Record<string, unknown> | undefined;\n\n return (\n !!listFeatures &&\n typeof listFeatures.execute === 'function' &&\n !!agentRunRepo &&\n typeof agentRunRepo.findById === 'function' &&\n !!createFeature &&\n typeof createFeature.execute === 'function' &&\n !!deleteFeature &&\n typeof deleteFeature.execute === 'function'\n );\n}\n\nfunction getUseCases(): ShepUseCases | undefined {\n const globalBridge = (globalThis as Record<string, unknown>)[SHEP_USE_CASES_KEY];\n if (isShepUseCases(globalBridge)) return globalBridge;\n\n const processBridge = (process as unknown as Record<string, unknown>)[SHEP_USE_CASES_KEY];\n if (isShepUseCases(processBridge)) return processBridge;\n\n return undefined;\n}\n\n/**\n * List all features for the control center.\n * Returns an empty array if the DI bridge is not initialized\n * (e.g. during static builds or when running outside the CLI process).\n */\nexport async function getFeatures(filters?: FeatureListFilters): Promise<Feature[]> {\n const useCases = getUseCases();\n if (!useCases?.listFeatures) return [];\n\n try {\n return await useCases.listFeatures.execute(filters);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Failed to load features:', error);\n return [];\n }\n}\n\n/**\n * Find an agent run by ID.\n * Returns null if the DI bridge is not initialized or the run is not found.\n */\nexport async function getAgentRun(id: string): Promise<AgentRun | null> {\n const useCases = getUseCases();\n if (!useCases?.agentRunRepo) return null;\n\n try {\n return await useCases.agentRunRepo.findById(id);\n } catch {\n return null;\n }\n}\n\n/**\n * Create a new feature via the DI-managed use case.\n * Unlike getFeatures/getAgentRun, this function propagates errors so callers\n * (API routes) can return proper HTTP error responses and surface messages to the user.\n * Throws if the bridge is not initialized or the use case fails.\n */\nexport async function createFeature(input: CreateFeatureInput): Promise<CreateFeatureResult> {\n const useCases = getUseCases();\n if (!useCases?.createFeature) {\n throw new Error('Use-cases bridge is not initialized. Ensure the CLI process is running.');\n }\n\n return useCases.createFeature.execute(input);\n}\n\n/**\n * Delete a feature via the DI-managed use case.\n * Like createFeature, this propagates errors so callers (API routes) can\n * return proper HTTP error responses.\n * Throws if the bridge is not initialized or the use case fails.\n */\nexport async function deleteFeature(featureId: string): Promise<Feature> {\n const useCases = getUseCases();\n if (!useCases?.deleteFeature) {\n throw new Error('Use-cases bridge is not initialized. Ensure the CLI process is running.');\n }\n\n return useCases.deleteFeature.execute(featureId);\n}\n","import { AppRouteRouteModule } from \"next/dist/esm/server/route-modules/app-route/module.compiled\";\nimport { RouteKind } from \"next/dist/esm/server/route-kind\";\nimport { patchFetch as _patchFetch } from \"next/dist/esm/server/lib/patch-fetch\";\nimport { addRequestMeta, getRequestMeta } from \"next/dist/esm/server/request-meta\";\nimport { getTracer, SpanKind } from \"next/dist/esm/server/lib/trace/tracer\";\nimport { setManifestsSingleton } from \"next/dist/esm/server/app-render/manifests-singleton\";\nimport { normalizeAppPath } from \"next/dist/esm/shared/lib/router/utils/app-paths\";\nimport { NodeNextRequest, NodeNextResponse } from \"next/dist/esm/server/base-http/node\";\nimport { NextRequestAdapter, signalFromNodeResponse } from \"next/dist/esm/server/web/spec-extension/adapters/next-request\";\nimport { BaseServerSpan } from \"next/dist/esm/server/lib/trace/constants\";\nimport { getRevalidateReason } from \"next/dist/esm/server/instrumentation/utils\";\nimport { sendResponse } from \"next/dist/esm/server/send-response\";\nimport { fromNodeOutgoingHttpHeaders, toNodeOutgoingHttpHeaders } from \"next/dist/esm/server/web/utils\";\nimport { getCacheControlHeader } from \"next/dist/esm/server/lib/cache-control\";\nimport { INFINITE_CACHE, NEXT_CACHE_TAGS_HEADER } from \"next/dist/esm/lib/constants\";\nimport { NoFallbackError } from \"next/dist/esm/shared/lib/no-fallback-error.external\";\nimport { CachedRouteKind } from \"next/dist/esm/server/response-cache\";\nimport * as userland from \"INNER_APP_ROUTE\";\n// We inject the nextConfigOutput here so that we can use them in the route\n// module.\nconst nextConfigOutput = \"\"\nconst routeModule = new AppRouteRouteModule({\n definition: {\n kind: RouteKind.APP_ROUTE,\n page: \"/api/features/create/route\",\n pathname: \"/api/features/create\",\n filename: \"route\",\n bundlePath: \"\"\n },\n distDir: process.env.__NEXT_RELATIVE_DIST_DIR || '',\n relativeProjectDir: process.env.__NEXT_RELATIVE_PROJECT_DIR || '',\n resolvedPagePath: \"[project]/src/presentation/web/app/api/features/create/route.ts\",\n nextConfigOutput,\n userland\n});\n// Pull out the exports that we need to expose from the module. This should\n// be eliminated when we've moved the other routes to the new format. These\n// are used to hook into the route.\nconst { workAsyncStorage, workUnitAsyncStorage, serverHooks } = routeModule;\nfunction patchFetch() {\n return _patchFetch({\n workAsyncStorage,\n workUnitAsyncStorage\n });\n}\nexport { routeModule, workAsyncStorage, workUnitAsyncStorage, serverHooks, patchFetch, };\nexport async function handler(req, res, ctx) {\n if (routeModule.isDev) {\n addRequestMeta(req, 'devRequestTimingInternalsEnd', process.hrtime.bigint());\n }\n let srcPage = \"/api/features/create/route\";\n // turbopack doesn't normalize `/index` in the page name\n // so we need to to process dynamic routes properly\n // TODO: fix turbopack providing differing value from webpack\n if (process.env.TURBOPACK) {\n srcPage = srcPage.replace(/\\/index$/, '') || '/';\n } else if (srcPage === '/index') {\n // we always normalize /index specifically\n srcPage = '/';\n }\n const multiZoneDraftMode = process.env.__NEXT_MULTI_ZONE_DRAFT_MODE;\n const prepareResult = await routeModule.prepare(req, res, {\n srcPage,\n multiZoneDraftMode\n });\n if (!prepareResult) {\n res.statusCode = 400;\n res.end('Bad Request');\n ctx.waitUntil == null ? void 0 : ctx.waitUntil.call(ctx, Promise.resolve());\n return null;\n }\n const { buildId, params, nextConfig, parsedUrl, isDraftMode, prerenderManifest, routerServerContext, isOnDemandRevalidate, revalidateOnlyGenerated, resolvedPathname, clientReferenceManifest, serverActionsManifest } = prepareResult;\n const normalizedSrcPage = normalizeAppPath(srcPage);\n let isIsr = Boolean(prerenderManifest.dynamicRoutes[normalizedSrcPage] || prerenderManifest.routes[resolvedPathname]);\n const render404 = async ()=>{\n // TODO: should route-module itself handle rendering the 404\n if (routerServerContext == null ? void 0 : routerServerContext.render404) {\n await routerServerContext.render404(req, res, parsedUrl, false);\n } else {\n res.end('This page could not be found');\n }\n return null;\n };\n if (isIsr && !isDraftMode) {\n const isPrerendered = Boolean(prerenderManifest.routes[resolvedPathname]);\n const prerenderInfo = prerenderManifest.dynamicRoutes[normalizedSrcPage];\n if (prerenderInfo) {\n if (prerenderInfo.fallback === false && !isPrerendered) {\n if (nextConfig.experimental.adapterPath) {\n return await render404();\n }\n throw new NoFallbackError();\n }\n }\n }\n let cacheKey = null;\n if (isIsr && !routeModule.isDev && !isDraftMode) {\n cacheKey = resolvedPathname;\n // ensure /index and / is normalized to one key\n cacheKey = cacheKey === '/index' ? '/' : cacheKey;\n }\n const supportsDynamicResponse = // If we're in development, we always support dynamic HTML\n routeModule.isDev === true || // If this is not SSG or does not have static paths, then it supports\n // dynamic HTML.\n !isIsr;\n // This is a revalidation request if the request is for a static\n // page and it is not being resumed from a postponed render and\n // it is not a dynamic RSC request then it is a revalidation\n // request.\n const isStaticGeneration = isIsr && !supportsDynamicResponse;\n // Before rendering (which initializes component tree modules), we have to\n // set the reference manifests to our global store so Server Action's\n // encryption util can access to them at the top level of the page module.\n if (serverActionsManifest && clientReferenceManifest) {\n setManifestsSingleton({\n page: srcPage,\n clientReferenceManifest,\n serverActionsManifest\n });\n }\n const method = req.method || 'GET';\n const tracer = getTracer();\n const activeSpan = tracer.getActiveScopeSpan();\n const context = {\n params,\n prerenderManifest,\n renderOpts: {\n experimental: {\n authInterrupts: Boolean(nextConfig.experimental.authInterrupts)\n },\n cacheComponents: Boolean(nextConfig.cacheComponents),\n supportsDynamicResponse,\n incrementalCache: getRequestMeta(req, 'incrementalCache'),\n cacheLifeProfiles: nextConfig.cacheLife,\n waitUntil: ctx.waitUntil,\n onClose: (cb)=>{\n res.on('close', cb);\n },\n onAfterTaskError: undefined,\n onInstrumentationRequestError: (error, _request, errorContext, silenceLog)=>routeModule.onRequestError(req, error, errorContext, silenceLog, routerServerContext)\n },\n sharedContext: {\n buildId\n }\n };\n const nodeNextReq = new NodeNextRequest(req);\n const nodeNextRes = new NodeNextResponse(res);\n const nextReq = NextRequestAdapter.fromNodeNextRequest(nodeNextReq, signalFromNodeResponse(res));\n try {\n const invokeRouteModule = async (span)=>{\n return routeModule.handle(nextReq, context).finally(()=>{\n if (!span) return;\n span.setAttributes({\n 'http.status_code': res.statusCode,\n 'next.rsc': false\n });\n const rootSpanAttributes = tracer.getRootSpanAttributes();\n // We were unable to get attributes, probably OTEL is not enabled\n if (!rootSpanAttributes) {\n return;\n }\n if (rootSpanAttributes.get('next.span_type') !== BaseServerSpan.handleRequest) {\n console.warn(`Unexpected root span type '${rootSpanAttributes.get('next.span_type')}'. Please report this Next.js issue https://github.com/vercel/next.js`);\n return;\n }\n const route = rootSpanAttributes.get('next.route');\n if (route) {\n const name = `${method} ${route}`;\n span.setAttributes({\n 'next.route': route,\n 'http.route': route,\n 'next.span_name': name\n });\n span.updateName(name);\n } else {\n span.updateName(`${method} ${srcPage}`);\n }\n });\n };\n const isMinimalMode = Boolean(process.env.MINIMAL_MODE || getRequestMeta(req, 'minimalMode'));\n const handleResponse = async (currentSpan)=>{\n var _cacheEntry_value;\n const responseGenerator = async ({ previousCacheEntry })=>{\n try {\n if (!isMinimalMode && isOnDemandRevalidate && revalidateOnlyGenerated && !previousCacheEntry) {\n res.statusCode = 404;\n // on-demand revalidate always sets this header\n res.setHeader('x-nextjs-cache', 'REVALIDATED');\n res.end('This page could not be found');\n return null;\n }\n const response = await invokeRouteModule(currentSpan);\n req.fetchMetrics = context.renderOpts.fetchMetrics;\n let pendingWaitUntil = context.renderOpts.pendingWaitUntil;\n // Attempt using provided waitUntil if available\n // if it's not we fallback to sendResponse's handling\n if (pendingWaitUntil) {\n if (ctx.waitUntil) {\n ctx.waitUntil(pendingWaitUntil);\n pendingWaitUntil = undefined;\n }\n }\n const cacheTags = context.renderOpts.collectedTags;\n // If the request is for a static response, we can cache it so long\n // as it's not edge.\n if (isIsr) {\n const blob = await response.blob();\n // Copy the headers from the response.\n const headers = toNodeOutgoingHttpHeaders(response.headers);\n if (cacheTags) {\n headers[NEXT_CACHE_TAGS_HEADER] = cacheTags;\n }\n if (!headers['content-type'] && blob.type) {\n headers['content-type'] = blob.type;\n }\n const revalidate = typeof context.renderOpts.collectedRevalidate === 'undefined' || context.renderOpts.collectedRevalidate >= INFINITE_CACHE ? false : context.renderOpts.collectedRevalidate;\n const expire = typeof context.renderOpts.collectedExpire === 'undefined' || context.renderOpts.collectedExpire >= INFINITE_CACHE ? undefined : context.renderOpts.collectedExpire;\n // Create the cache entry for the response.\n const cacheEntry = {\n value: {\n kind: CachedRouteKind.APP_ROUTE,\n status: response.status,\n body: Buffer.from(await blob.arrayBuffer()),\n headers\n },\n cacheControl: {\n revalidate,\n expire\n }\n };\n return cacheEntry;\n } else {\n // send response without caching if not ISR\n await sendResponse(nodeNextReq, nodeNextRes, response, context.renderOpts.pendingWaitUntil);\n return null;\n }\n } catch (err) {\n // if this is a background revalidate we need to report\n // the request error here as it won't be bubbled\n if (previousCacheEntry == null ? void 0 : previousCacheEntry.isStale) {\n const silenceLog = false;\n await routeModule.onRequestError(req, err, {\n routerKind: 'App Router',\n routePath: srcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate\n })\n }, silenceLog, routerServerContext);\n }\n throw err;\n }\n };\n const cacheEntry = await routeModule.handleResponse({\n req,\n nextConfig,\n cacheKey,\n routeKind: RouteKind.APP_ROUTE,\n isFallback: false,\n prerenderManifest,\n isRoutePPREnabled: false,\n isOnDemandRevalidate,\n revalidateOnlyGenerated,\n responseGenerator,\n waitUntil: ctx.waitUntil,\n isMinimalMode\n });\n // we don't create a cacheEntry for ISR\n if (!isIsr) {\n return null;\n }\n if ((cacheEntry == null ? void 0 : (_cacheEntry_value = cacheEntry.value) == null ? void 0 : _cacheEntry_value.kind) !== CachedRouteKind.APP_ROUTE) {\n var _cacheEntry_value1;\n throw Object.defineProperty(new Error(`Invariant: app-route received invalid cache entry ${cacheEntry == null ? void 0 : (_cacheEntry_value1 = cacheEntry.value) == null ? void 0 : _cacheEntry_value1.kind}`), \"__NEXT_ERROR_CODE\", {\n value: \"E701\",\n enumerable: false,\n configurable: true\n });\n }\n if (!isMinimalMode) {\n res.setHeader('x-nextjs-cache', isOnDemandRevalidate ? 'REVALIDATED' : cacheEntry.isMiss ? 'MISS' : cacheEntry.isStale ? 'STALE' : 'HIT');\n }\n // Draft mode should never be cached\n if (isDraftMode) {\n res.setHeader('Cache-Control', 'private, no-cache, no-store, max-age=0, must-revalidate');\n }\n const headers = fromNodeOutgoingHttpHeaders(cacheEntry.value.headers);\n if (!(isMinimalMode && isIsr)) {\n headers.delete(NEXT_CACHE_TAGS_HEADER);\n }\n // If cache control is already set on the response we don't\n // override it to allow users to customize it via next.config\n if (cacheEntry.cacheControl && !res.getHeader('Cache-Control') && !headers.get('Cache-Control')) {\n headers.set('Cache-Control', getCacheControlHeader(cacheEntry.cacheControl));\n }\n await sendResponse(nodeNextReq, nodeNextRes, // @ts-expect-error - Argument of type 'Buffer<ArrayBufferLike>' is not assignable to parameter of type 'BodyInit | null | undefined'.\n new Response(cacheEntry.value.body, {\n headers,\n status: cacheEntry.value.status || 200\n }));\n return null;\n };\n // TODO: activeSpan code path is for when wrapped by\n // next-server can be removed when this is no longer used\n if (activeSpan) {\n await handleResponse(activeSpan);\n } else {\n await tracer.withPropagatedContext(req.headers, ()=>tracer.trace(BaseServerSpan.handleRequest, {\n spanName: `${method} ${srcPage}`,\n kind: SpanKind.SERVER,\n attributes: {\n 'http.method': method,\n 'http.target': req.url\n }\n }, handleResponse));\n }\n } catch (err) {\n if (!(err instanceof NoFallbackError)) {\n const silenceLog = false;\n await routeModule.onRequestError(req, err, {\n routerKind: 'App Router',\n routePath: normalizedSrcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate\n })\n }, silenceLog, routerServerContext);\n }\n // rethrow so that we can handle serving error page\n // If this is during static generation, throw the error again.\n if (isIsr) throw err;\n // Otherwise, send a 500 response.\n await sendResponse(nodeNextReq, nodeNextRes, new Response(null, {\n status: 500\n }));\n return null;\n }\n}\n\n//# sourceMappingURL=app-route.js.map\n","import { NextResponse } from 'next/server';\nimport { createFeature } from '@shepai/core/infrastructure/di/use-cases-bridge';\n\ninterface Attachment {\n path: string;\n name: string;\n}\n\ninterface ApprovalGates {\n allowPrd: boolean;\n allowPlan: boolean;\n allowMerge: boolean;\n}\n\nfunction isValidApprovalGates(\n value: unknown\n): value is ApprovalGates | Omit<ApprovalGates, 'allowMerge'> {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return false;\n const obj = value as Record<string, unknown>;\n if (typeof obj.allowPrd !== 'boolean' || typeof obj.allowPlan !== 'boolean') return false;\n if ('allowMerge' in obj && typeof obj.allowMerge !== 'boolean') return false;\n return true;\n}\n\nfunction normalizeApprovalGates(\n gates: ApprovalGates | Omit<ApprovalGates, 'allowMerge'>\n): ApprovalGates {\n return {\n allowPrd: gates.allowPrd,\n allowPlan: gates.allowPlan,\n allowMerge: 'allowMerge' in gates ? (gates as ApprovalGates).allowMerge : false,\n };\n}\n\nfunction composeUserInput(\n name: string,\n description: string | undefined,\n attachments: Attachment[] | undefined\n): string {\n let userInput = `Feature: ${name}`;\n\n if (description) {\n userInput += `\\n\\n${description}`;\n }\n\n if (attachments && attachments.length > 0) {\n const paths = attachments.map((a) => `- ${a.path}`).join('\\n');\n userInput += `\\n\\nAttached files:\\n${paths}`;\n }\n\n return userInput;\n}\n\nexport async function POST(request: Request) {\n const body = await request.json();\n const { name, description, repositoryPath, attachments, approvalGates } = body as {\n name?: string;\n description?: string;\n repositoryPath?: string;\n attachments?: Attachment[];\n approvalGates?: unknown;\n };\n\n if (!name?.trim()) {\n return NextResponse.json({ error: 'name is required' }, { status: 400 });\n }\n\n if (!repositoryPath?.trim()) {\n return NextResponse.json({ error: 'repositoryPath is required' }, { status: 400 });\n }\n\n if (approvalGates !== undefined && !isValidApprovalGates(approvalGates)) {\n return NextResponse.json(\n {\n error:\n 'approvalGates must be an object with boolean allowPrd, allowPlan, and optional boolean allowMerge',\n },\n { status: 400 }\n );\n }\n\n const userInput = composeUserInput(name, description, attachments);\n const defaultGates: ApprovalGates = { allowPrd: false, allowPlan: false, allowMerge: false };\n const gates: ApprovalGates = isValidApprovalGates(approvalGates)\n ? normalizeApprovalGates(approvalGates)\n : defaultGates;\n\n try {\n const result = await createFeature({ userInput, repositoryPath, approvalGates: gates });\n return NextResponse.json(result);\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to create feature';\n return NextResponse.json({ error: message }, { status: 500 });\n }\n}\n"],"names":[],"mappings":"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","ignoreList":[1]}
@@ -0,0 +1,3 @@
1
+ module.exports=[18622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},24725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},70406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},93695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},39082,e=>{"use strict";let t="__shepUseCases";function r(e){if(!e||"object"!=typeof e)return!1;let t=e.listFeatures,r=e.agentRunRepo,n=e.createFeature,a=e.deleteFeature;return!!t&&"function"==typeof t.execute&&!!r&&"function"==typeof r.findById&&!!n&&"function"==typeof n.execute&&!!a&&"function"==typeof a.execute}function n(){let e=globalThis[t];if(r(e))return e;let n=process[t];if(r(n))return n}async function a(e){let t=n();if(!t?.createFeature)throw Error("Use-cases bridge is not initialized. Ensure the CLI process is running.");return t.createFeature.execute(e)}async function s(e){let t=n();if(!t?.deleteFeature)throw Error("Use-cases bridge is not initialized. Ensure the CLI process is running.");return t.deleteFeature.execute(e)}e.s(["createFeature",()=>a,"deleteFeature",()=>s])},56992,e=>{"use strict";var t=e.i(22925),r=e.i(62995),n=e.i(14112),a=e.i(31716),s=e.i(16340),i=e.i(40522),o=e.i(21994),l=e.i(5802),u=e.i(17171),d=e.i(177),p=e.i(43685),c=e.i(84832),x=e.i(92435),h=e.i(41260),f=e.i(80556),R=e.i(93695);e.i(97230);var v=e.i(35162),g=e.i(27980),E=e.i(39082);async function w(e,{params:t}){let{id:r}=await t;if(!r?.trim())return g.NextResponse.json({error:"id is required"},{status:400});try{let e=await (0,E.deleteFeature)(r);return g.NextResponse.json({feature:e})}catch(t){let e=t instanceof Error?t.message:"Failed to delete feature";return g.NextResponse.json({error:e},{status:500})}}e.s(["DELETE",()=>w],69425);var m=e.i(69425);let y=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/features/[id]/route",pathname:"/api/features/[id]",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/presentation/web/app/api/features/[id]/route.ts",nextConfigOutput:"",userland:m}),{workAsyncStorage:C,workUnitAsyncStorage:b,serverHooks:A}=y;function N(){return(0,n.patchFetch)({workAsyncStorage:C,workUnitAsyncStorage:b})}async function T(e,t,n){y.isDev&&(0,a.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let g="/api/features/[id]/route";g=g.replace(/\/index$/,"")||"/";let E=await y.prepare(e,t,{srcPage:g,multiZoneDraftMode:!1});if(!E)return t.statusCode=400,t.end("Bad Request"),null==n.waitUntil||n.waitUntil.call(n,Promise.resolve()),null;let{buildId:w,params:m,nextConfig:C,parsedUrl:b,isDraftMode:A,prerenderManifest:N,routerServerContext:T,isOnDemandRevalidate:P,revalidateOnlyGenerated:_,resolvedPathname:j,clientReferenceManifest:k,serverActionsManifest:q}=E,O=(0,o.normalizeAppPath)(g),F=!!(N.dynamicRoutes[O]||N.routes[j]),S=async()=>((null==T?void 0:T.render404)?await T.render404(e,t,b,!1):t.end("This page could not be found"),null);if(F&&!A){let e=!!N.routes[j],t=N.dynamicRoutes[O];if(t&&!1===t.fallback&&!e){if(C.experimental.adapterPath)return await S();throw new R.NoFallbackError}}let U=null;!F||y.isDev||A||(U="/index"===(U=j)?"/":U);let I=!0===y.isDev||!F,H=F&&!I;q&&k&&(0,i.setManifestsSingleton)({page:g,clientReferenceManifest:k,serverActionsManifest:q});let D=e.method||"GET",M=(0,s.getTracer)(),$=M.getActiveScopeSpan(),K={params:m,prerenderManifest:N,renderOpts:{experimental:{authInterrupts:!!C.experimental.authInterrupts},cacheComponents:!!C.cacheComponents,supportsDynamicResponse:I,incrementalCache:(0,a.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:C.cacheLife,waitUntil:n.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,n,a)=>y.onRequestError(e,t,n,a,T)},sharedContext:{buildId:w}},L=new l.NodeNextRequest(e),B=new l.NodeNextResponse(t),z=u.NextRequestAdapter.fromNodeNextRequest(L,(0,u.signalFromNodeResponse)(t));try{let i=async e=>y.handle(z,K).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=M.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==d.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=r.get("next.route");if(n){let t=`${D} ${n}`;e.setAttributes({"next.route":n,"http.route":n,"next.span_name":t}),e.updateName(t)}else e.updateName(`${D} ${g}`)}),o=!!(0,a.getRequestMeta)(e,"minimalMode"),l=async a=>{var s,l;let u=async({previousCacheEntry:r})=>{try{if(!o&&P&&_&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let s=await i(a);e.fetchMetrics=K.renderOpts.fetchMetrics;let l=K.renderOpts.pendingWaitUntil;l&&n.waitUntil&&(n.waitUntil(l),l=void 0);let u=K.renderOpts.collectedTags;if(!F)return await (0,c.sendResponse)(L,B,s,K.renderOpts.pendingWaitUntil),null;{let e=await s.blob(),t=(0,x.toNodeOutgoingHttpHeaders)(s.headers);u&&(t[f.NEXT_CACHE_TAGS_HEADER]=u),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==K.renderOpts.collectedRevalidate&&!(K.renderOpts.collectedRevalidate>=f.INFINITE_CACHE)&&K.renderOpts.collectedRevalidate,n=void 0===K.renderOpts.collectedExpire||K.renderOpts.collectedExpire>=f.INFINITE_CACHE?void 0:K.renderOpts.collectedExpire;return{value:{kind:v.CachedRouteKind.APP_ROUTE,status:s.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:n}}}}catch(t){throw(null==r?void 0:r.isStale)&&await y.onRequestError(e,t,{routerKind:"App Router",routePath:g,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:P})},!1,T),t}},d=await y.handleResponse({req:e,nextConfig:C,cacheKey:U,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:N,isRoutePPREnabled:!1,isOnDemandRevalidate:P,revalidateOnlyGenerated:_,responseGenerator:u,waitUntil:n.waitUntil,isMinimalMode:o});if(!F)return null;if((null==d||null==(s=d.value)?void 0:s.kind)!==v.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==d||null==(l=d.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});o||t.setHeader("x-nextjs-cache",P?"REVALIDATED":d.isMiss?"MISS":d.isStale?"STALE":"HIT"),A&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let R=(0,x.fromNodeOutgoingHttpHeaders)(d.value.headers);return o&&F||R.delete(f.NEXT_CACHE_TAGS_HEADER),!d.cacheControl||t.getHeader("Cache-Control")||R.get("Cache-Control")||R.set("Cache-Control",(0,h.getCacheControlHeader)(d.cacheControl)),await (0,c.sendResponse)(L,B,new Response(d.value.body,{headers:R,status:d.value.status||200})),null};$?await l($):await M.withPropagatedContext(e.headers,()=>M.trace(d.BaseServerSpan.handleRequest,{spanName:`${D} ${g}`,kind:s.SpanKind.SERVER,attributes:{"http.method":D,"http.target":e.url}},l))}catch(t){if(t instanceof R.NoFallbackError||await y.onRequestError(e,t,{routerKind:"App Router",routePath:O,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:P})},!1,T),F)throw t;return await (0,c.sendResponse)(L,B,new Response(null,{status:500})),null}}e.s(["handler",()=>T,"patchFetch",()=>N,"routeModule",()=>y,"serverHooks",()=>A,"workAsyncStorage",()=>C,"workUnitAsyncStorage",()=>b],56992)}];
2
+
3
+ //# sourceMappingURL=%5Broot-of-the-server%5D__25329f72._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../packages/core/src/infrastructure/di/use-cases-bridge.ts","../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/dist/esm/build/templates/app-route.js","../../../../../../src/presentation/web/app/api/features/%5Bid%5D/route.ts"],"sourcesContent":["/**\n * Use Cases Bridge — Reader\n *\n * Why does this exist?\n * Use cases (e.g. ListFeaturesUseCase) are DI-managed classes that depend on\n * injected repositories, which in turn need a live SQLite connection. The web\n * layer (Next.js / Turbopack) cannot run the DI container because it would\n * pull in tsyringe, reflect-metadata, and better-sqlite3 (native C++ addon) —\n * none of which Turbopack can bundle.\n *\n * How it works:\n * 1. CLI bootstrap runs initializeContainer() and resolves fully-wired use cases.\n * 2. The writer (populate-use-cases-bridge.ts) places those instances on globalThis.\n * 3. This reader retrieves them — no DI, no native modules, no decorators.\n *\n * This file is safe to import from the Next.js web layer.\n */\n\nimport type { Feature, AgentRun } from '../../domain/generated/output.js';\nimport type { FeatureListFilters } from '../../application/ports/output/repositories/feature-repository.interface.js';\nimport type {\n CreateFeatureInput,\n CreateFeatureResult,\n} from '../../application/use-cases/features/create/types.js';\n\nexport type { FeatureListFilters, CreateFeatureInput, CreateFeatureResult };\n\n/** The globalThis key shared between writer and reader. */\nexport const SHEP_USE_CASES_KEY = '__shepUseCases';\n\n/** Shape of the bridge object on globalThis. */\ninterface ShepUseCases {\n listFeatures: { execute(filters?: FeatureListFilters): Promise<Feature[]> };\n agentRunRepo: { findById(id: string): Promise<AgentRun | null> };\n createFeature: { execute(input: CreateFeatureInput): Promise<CreateFeatureResult> };\n deleteFeature: { execute(featureId: string): Promise<Feature> };\n}\n\nfunction isShepUseCases(value: unknown): value is ShepUseCases {\n if (!value || typeof value !== 'object') return false;\n\n const maybe = value as Record<string, unknown>;\n const listFeatures = maybe.listFeatures as Record<string, unknown> | undefined;\n const agentRunRepo = maybe.agentRunRepo as Record<string, unknown> | undefined;\n const createFeature = maybe.createFeature as Record<string, unknown> | undefined;\n const deleteFeature = maybe.deleteFeature as Record<string, unknown> | undefined;\n\n return (\n !!listFeatures &&\n typeof listFeatures.execute === 'function' &&\n !!agentRunRepo &&\n typeof agentRunRepo.findById === 'function' &&\n !!createFeature &&\n typeof createFeature.execute === 'function' &&\n !!deleteFeature &&\n typeof deleteFeature.execute === 'function'\n );\n}\n\nfunction getUseCases(): ShepUseCases | undefined {\n const globalBridge = (globalThis as Record<string, unknown>)[SHEP_USE_CASES_KEY];\n if (isShepUseCases(globalBridge)) return globalBridge;\n\n const processBridge = (process as unknown as Record<string, unknown>)[SHEP_USE_CASES_KEY];\n if (isShepUseCases(processBridge)) return processBridge;\n\n return undefined;\n}\n\n/**\n * List all features for the control center.\n * Returns an empty array if the DI bridge is not initialized\n * (e.g. during static builds or when running outside the CLI process).\n */\nexport async function getFeatures(filters?: FeatureListFilters): Promise<Feature[]> {\n const useCases = getUseCases();\n if (!useCases?.listFeatures) return [];\n\n try {\n return await useCases.listFeatures.execute(filters);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Failed to load features:', error);\n return [];\n }\n}\n\n/**\n * Find an agent run by ID.\n * Returns null if the DI bridge is not initialized or the run is not found.\n */\nexport async function getAgentRun(id: string): Promise<AgentRun | null> {\n const useCases = getUseCases();\n if (!useCases?.agentRunRepo) return null;\n\n try {\n return await useCases.agentRunRepo.findById(id);\n } catch {\n return null;\n }\n}\n\n/**\n * Create a new feature via the DI-managed use case.\n * Unlike getFeatures/getAgentRun, this function propagates errors so callers\n * (API routes) can return proper HTTP error responses and surface messages to the user.\n * Throws if the bridge is not initialized or the use case fails.\n */\nexport async function createFeature(input: CreateFeatureInput): Promise<CreateFeatureResult> {\n const useCases = getUseCases();\n if (!useCases?.createFeature) {\n throw new Error('Use-cases bridge is not initialized. Ensure the CLI process is running.');\n }\n\n return useCases.createFeature.execute(input);\n}\n\n/**\n * Delete a feature via the DI-managed use case.\n * Like createFeature, this propagates errors so callers (API routes) can\n * return proper HTTP error responses.\n * Throws if the bridge is not initialized or the use case fails.\n */\nexport async function deleteFeature(featureId: string): Promise<Feature> {\n const useCases = getUseCases();\n if (!useCases?.deleteFeature) {\n throw new Error('Use-cases bridge is not initialized. Ensure the CLI process is running.');\n }\n\n return useCases.deleteFeature.execute(featureId);\n}\n","import { AppRouteRouteModule } from \"next/dist/esm/server/route-modules/app-route/module.compiled\";\nimport { RouteKind } from \"next/dist/esm/server/route-kind\";\nimport { patchFetch as _patchFetch } from \"next/dist/esm/server/lib/patch-fetch\";\nimport { addRequestMeta, getRequestMeta } from \"next/dist/esm/server/request-meta\";\nimport { getTracer, SpanKind } from \"next/dist/esm/server/lib/trace/tracer\";\nimport { setManifestsSingleton } from \"next/dist/esm/server/app-render/manifests-singleton\";\nimport { normalizeAppPath } from \"next/dist/esm/shared/lib/router/utils/app-paths\";\nimport { NodeNextRequest, NodeNextResponse } from \"next/dist/esm/server/base-http/node\";\nimport { NextRequestAdapter, signalFromNodeResponse } from \"next/dist/esm/server/web/spec-extension/adapters/next-request\";\nimport { BaseServerSpan } from \"next/dist/esm/server/lib/trace/constants\";\nimport { getRevalidateReason } from \"next/dist/esm/server/instrumentation/utils\";\nimport { sendResponse } from \"next/dist/esm/server/send-response\";\nimport { fromNodeOutgoingHttpHeaders, toNodeOutgoingHttpHeaders } from \"next/dist/esm/server/web/utils\";\nimport { getCacheControlHeader } from \"next/dist/esm/server/lib/cache-control\";\nimport { INFINITE_CACHE, NEXT_CACHE_TAGS_HEADER } from \"next/dist/esm/lib/constants\";\nimport { NoFallbackError } from \"next/dist/esm/shared/lib/no-fallback-error.external\";\nimport { CachedRouteKind } from \"next/dist/esm/server/response-cache\";\nimport * as userland from \"INNER_APP_ROUTE\";\n// We inject the nextConfigOutput here so that we can use them in the route\n// module.\nconst nextConfigOutput = \"\"\nconst routeModule = new AppRouteRouteModule({\n definition: {\n kind: RouteKind.APP_ROUTE,\n page: \"/api/features/[id]/route\",\n pathname: \"/api/features/[id]\",\n filename: \"route\",\n bundlePath: \"\"\n },\n distDir: process.env.__NEXT_RELATIVE_DIST_DIR || '',\n relativeProjectDir: process.env.__NEXT_RELATIVE_PROJECT_DIR || '',\n resolvedPagePath: \"[project]/src/presentation/web/app/api/features/[id]/route.ts\",\n nextConfigOutput,\n userland\n});\n// Pull out the exports that we need to expose from the module. This should\n// be eliminated when we've moved the other routes to the new format. These\n// are used to hook into the route.\nconst { workAsyncStorage, workUnitAsyncStorage, serverHooks } = routeModule;\nfunction patchFetch() {\n return _patchFetch({\n workAsyncStorage,\n workUnitAsyncStorage\n });\n}\nexport { routeModule, workAsyncStorage, workUnitAsyncStorage, serverHooks, patchFetch, };\nexport async function handler(req, res, ctx) {\n if (routeModule.isDev) {\n addRequestMeta(req, 'devRequestTimingInternalsEnd', process.hrtime.bigint());\n }\n let srcPage = \"/api/features/[id]/route\";\n // turbopack doesn't normalize `/index` in the page name\n // so we need to to process dynamic routes properly\n // TODO: fix turbopack providing differing value from webpack\n if (process.env.TURBOPACK) {\n srcPage = srcPage.replace(/\\/index$/, '') || '/';\n } else if (srcPage === '/index') {\n // we always normalize /index specifically\n srcPage = '/';\n }\n const multiZoneDraftMode = process.env.__NEXT_MULTI_ZONE_DRAFT_MODE;\n const prepareResult = await routeModule.prepare(req, res, {\n srcPage,\n multiZoneDraftMode\n });\n if (!prepareResult) {\n res.statusCode = 400;\n res.end('Bad Request');\n ctx.waitUntil == null ? void 0 : ctx.waitUntil.call(ctx, Promise.resolve());\n return null;\n }\n const { buildId, params, nextConfig, parsedUrl, isDraftMode, prerenderManifest, routerServerContext, isOnDemandRevalidate, revalidateOnlyGenerated, resolvedPathname, clientReferenceManifest, serverActionsManifest } = prepareResult;\n const normalizedSrcPage = normalizeAppPath(srcPage);\n let isIsr = Boolean(prerenderManifest.dynamicRoutes[normalizedSrcPage] || prerenderManifest.routes[resolvedPathname]);\n const render404 = async ()=>{\n // TODO: should route-module itself handle rendering the 404\n if (routerServerContext == null ? void 0 : routerServerContext.render404) {\n await routerServerContext.render404(req, res, parsedUrl, false);\n } else {\n res.end('This page could not be found');\n }\n return null;\n };\n if (isIsr && !isDraftMode) {\n const isPrerendered = Boolean(prerenderManifest.routes[resolvedPathname]);\n const prerenderInfo = prerenderManifest.dynamicRoutes[normalizedSrcPage];\n if (prerenderInfo) {\n if (prerenderInfo.fallback === false && !isPrerendered) {\n if (nextConfig.experimental.adapterPath) {\n return await render404();\n }\n throw new NoFallbackError();\n }\n }\n }\n let cacheKey = null;\n if (isIsr && !routeModule.isDev && !isDraftMode) {\n cacheKey = resolvedPathname;\n // ensure /index and / is normalized to one key\n cacheKey = cacheKey === '/index' ? '/' : cacheKey;\n }\n const supportsDynamicResponse = // If we're in development, we always support dynamic HTML\n routeModule.isDev === true || // If this is not SSG or does not have static paths, then it supports\n // dynamic HTML.\n !isIsr;\n // This is a revalidation request if the request is for a static\n // page and it is not being resumed from a postponed render and\n // it is not a dynamic RSC request then it is a revalidation\n // request.\n const isStaticGeneration = isIsr && !supportsDynamicResponse;\n // Before rendering (which initializes component tree modules), we have to\n // set the reference manifests to our global store so Server Action's\n // encryption util can access to them at the top level of the page module.\n if (serverActionsManifest && clientReferenceManifest) {\n setManifestsSingleton({\n page: srcPage,\n clientReferenceManifest,\n serverActionsManifest\n });\n }\n const method = req.method || 'GET';\n const tracer = getTracer();\n const activeSpan = tracer.getActiveScopeSpan();\n const context = {\n params,\n prerenderManifest,\n renderOpts: {\n experimental: {\n authInterrupts: Boolean(nextConfig.experimental.authInterrupts)\n },\n cacheComponents: Boolean(nextConfig.cacheComponents),\n supportsDynamicResponse,\n incrementalCache: getRequestMeta(req, 'incrementalCache'),\n cacheLifeProfiles: nextConfig.cacheLife,\n waitUntil: ctx.waitUntil,\n onClose: (cb)=>{\n res.on('close', cb);\n },\n onAfterTaskError: undefined,\n onInstrumentationRequestError: (error, _request, errorContext, silenceLog)=>routeModule.onRequestError(req, error, errorContext, silenceLog, routerServerContext)\n },\n sharedContext: {\n buildId\n }\n };\n const nodeNextReq = new NodeNextRequest(req);\n const nodeNextRes = new NodeNextResponse(res);\n const nextReq = NextRequestAdapter.fromNodeNextRequest(nodeNextReq, signalFromNodeResponse(res));\n try {\n const invokeRouteModule = async (span)=>{\n return routeModule.handle(nextReq, context).finally(()=>{\n if (!span) return;\n span.setAttributes({\n 'http.status_code': res.statusCode,\n 'next.rsc': false\n });\n const rootSpanAttributes = tracer.getRootSpanAttributes();\n // We were unable to get attributes, probably OTEL is not enabled\n if (!rootSpanAttributes) {\n return;\n }\n if (rootSpanAttributes.get('next.span_type') !== BaseServerSpan.handleRequest) {\n console.warn(`Unexpected root span type '${rootSpanAttributes.get('next.span_type')}'. Please report this Next.js issue https://github.com/vercel/next.js`);\n return;\n }\n const route = rootSpanAttributes.get('next.route');\n if (route) {\n const name = `${method} ${route}`;\n span.setAttributes({\n 'next.route': route,\n 'http.route': route,\n 'next.span_name': name\n });\n span.updateName(name);\n } else {\n span.updateName(`${method} ${srcPage}`);\n }\n });\n };\n const isMinimalMode = Boolean(process.env.MINIMAL_MODE || getRequestMeta(req, 'minimalMode'));\n const handleResponse = async (currentSpan)=>{\n var _cacheEntry_value;\n const responseGenerator = async ({ previousCacheEntry })=>{\n try {\n if (!isMinimalMode && isOnDemandRevalidate && revalidateOnlyGenerated && !previousCacheEntry) {\n res.statusCode = 404;\n // on-demand revalidate always sets this header\n res.setHeader('x-nextjs-cache', 'REVALIDATED');\n res.end('This page could not be found');\n return null;\n }\n const response = await invokeRouteModule(currentSpan);\n req.fetchMetrics = context.renderOpts.fetchMetrics;\n let pendingWaitUntil = context.renderOpts.pendingWaitUntil;\n // Attempt using provided waitUntil if available\n // if it's not we fallback to sendResponse's handling\n if (pendingWaitUntil) {\n if (ctx.waitUntil) {\n ctx.waitUntil(pendingWaitUntil);\n pendingWaitUntil = undefined;\n }\n }\n const cacheTags = context.renderOpts.collectedTags;\n // If the request is for a static response, we can cache it so long\n // as it's not edge.\n if (isIsr) {\n const blob = await response.blob();\n // Copy the headers from the response.\n const headers = toNodeOutgoingHttpHeaders(response.headers);\n if (cacheTags) {\n headers[NEXT_CACHE_TAGS_HEADER] = cacheTags;\n }\n if (!headers['content-type'] && blob.type) {\n headers['content-type'] = blob.type;\n }\n const revalidate = typeof context.renderOpts.collectedRevalidate === 'undefined' || context.renderOpts.collectedRevalidate >= INFINITE_CACHE ? false : context.renderOpts.collectedRevalidate;\n const expire = typeof context.renderOpts.collectedExpire === 'undefined' || context.renderOpts.collectedExpire >= INFINITE_CACHE ? undefined : context.renderOpts.collectedExpire;\n // Create the cache entry for the response.\n const cacheEntry = {\n value: {\n kind: CachedRouteKind.APP_ROUTE,\n status: response.status,\n body: Buffer.from(await blob.arrayBuffer()),\n headers\n },\n cacheControl: {\n revalidate,\n expire\n }\n };\n return cacheEntry;\n } else {\n // send response without caching if not ISR\n await sendResponse(nodeNextReq, nodeNextRes, response, context.renderOpts.pendingWaitUntil);\n return null;\n }\n } catch (err) {\n // if this is a background revalidate we need to report\n // the request error here as it won't be bubbled\n if (previousCacheEntry == null ? void 0 : previousCacheEntry.isStale) {\n const silenceLog = false;\n await routeModule.onRequestError(req, err, {\n routerKind: 'App Router',\n routePath: srcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate\n })\n }, silenceLog, routerServerContext);\n }\n throw err;\n }\n };\n const cacheEntry = await routeModule.handleResponse({\n req,\n nextConfig,\n cacheKey,\n routeKind: RouteKind.APP_ROUTE,\n isFallback: false,\n prerenderManifest,\n isRoutePPREnabled: false,\n isOnDemandRevalidate,\n revalidateOnlyGenerated,\n responseGenerator,\n waitUntil: ctx.waitUntil,\n isMinimalMode\n });\n // we don't create a cacheEntry for ISR\n if (!isIsr) {\n return null;\n }\n if ((cacheEntry == null ? void 0 : (_cacheEntry_value = cacheEntry.value) == null ? void 0 : _cacheEntry_value.kind) !== CachedRouteKind.APP_ROUTE) {\n var _cacheEntry_value1;\n throw Object.defineProperty(new Error(`Invariant: app-route received invalid cache entry ${cacheEntry == null ? void 0 : (_cacheEntry_value1 = cacheEntry.value) == null ? void 0 : _cacheEntry_value1.kind}`), \"__NEXT_ERROR_CODE\", {\n value: \"E701\",\n enumerable: false,\n configurable: true\n });\n }\n if (!isMinimalMode) {\n res.setHeader('x-nextjs-cache', isOnDemandRevalidate ? 'REVALIDATED' : cacheEntry.isMiss ? 'MISS' : cacheEntry.isStale ? 'STALE' : 'HIT');\n }\n // Draft mode should never be cached\n if (isDraftMode) {\n res.setHeader('Cache-Control', 'private, no-cache, no-store, max-age=0, must-revalidate');\n }\n const headers = fromNodeOutgoingHttpHeaders(cacheEntry.value.headers);\n if (!(isMinimalMode && isIsr)) {\n headers.delete(NEXT_CACHE_TAGS_HEADER);\n }\n // If cache control is already set on the response we don't\n // override it to allow users to customize it via next.config\n if (cacheEntry.cacheControl && !res.getHeader('Cache-Control') && !headers.get('Cache-Control')) {\n headers.set('Cache-Control', getCacheControlHeader(cacheEntry.cacheControl));\n }\n await sendResponse(nodeNextReq, nodeNextRes, // @ts-expect-error - Argument of type 'Buffer<ArrayBufferLike>' is not assignable to parameter of type 'BodyInit | null | undefined'.\n new Response(cacheEntry.value.body, {\n headers,\n status: cacheEntry.value.status || 200\n }));\n return null;\n };\n // TODO: activeSpan code path is for when wrapped by\n // next-server can be removed when this is no longer used\n if (activeSpan) {\n await handleResponse(activeSpan);\n } else {\n await tracer.withPropagatedContext(req.headers, ()=>tracer.trace(BaseServerSpan.handleRequest, {\n spanName: `${method} ${srcPage}`,\n kind: SpanKind.SERVER,\n attributes: {\n 'http.method': method,\n 'http.target': req.url\n }\n }, handleResponse));\n }\n } catch (err) {\n if (!(err instanceof NoFallbackError)) {\n const silenceLog = false;\n await routeModule.onRequestError(req, err, {\n routerKind: 'App Router',\n routePath: normalizedSrcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate\n })\n }, silenceLog, routerServerContext);\n }\n // rethrow so that we can handle serving error page\n // If this is during static generation, throw the error again.\n if (isIsr) throw err;\n // Otherwise, send a 500 response.\n await sendResponse(nodeNextReq, nodeNextRes, new Response(null, {\n status: 500\n }));\n return null;\n }\n}\n\n//# sourceMappingURL=app-route.js.map\n","import { NextResponse } from 'next/server';\nimport { deleteFeature } from '@shepai/core/infrastructure/di/use-cases-bridge';\n\nexport async function DELETE(_request: Request, { params }: { params: Promise<{ id: string }> }) {\n const { id } = await params;\n\n if (!id?.trim()) {\n return NextResponse.json({ error: 'id is required' }, { status: 400 });\n }\n\n try {\n const feature = await deleteFeature(id);\n return NextResponse.json({ feature });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to delete feature';\n return NextResponse.json({ error: message }, { status: 500 });\n }\n}\n"],"names":[],"mappings":"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","ignoreList":[1]}