@shipit-ai/cli 1.167.1 → 1.169.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 (396) hide show
  1. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/antigravity.json +1 -1
  2. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/bash.json +1 -0
  3. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/cursor-cli.json +1 -1
  4. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/cursor.json +1 -1
  5. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/fish.json +1 -0
  6. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/powershell.json +1 -0
  7. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/zsh.json +1 -0
  8. package/dist/src/presentation/web/app/layout.d.ts.map +1 -1
  9. package/dist/src/presentation/web/app/layout.js +15 -2
  10. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.d.ts.map +1 -1
  11. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.js +4 -1
  12. package/dist/src/presentation/web/components/common/page-header/page-header.d.ts +3 -1
  13. package/dist/src/presentation/web/components/common/page-header/page-header.d.ts.map +1 -1
  14. package/dist/src/presentation/web/components/common/page-header/page-header.js +8 -2
  15. package/dist/src/presentation/web/components/common/repository-node/repository-node.d.ts.map +1 -1
  16. package/dist/src/presentation/web/components/common/repository-node/repository-node.js +6 -1
  17. package/dist/src/presentation/web/components/common/shipit-ai-logo/shipit-ai-logo.d.ts +9 -1
  18. package/dist/src/presentation/web/components/common/shipit-ai-logo/shipit-ai-logo.d.ts.map +1 -1
  19. package/dist/src/presentation/web/components/common/shipit-ai-logo/shipit-ai-logo.js +12 -6
  20. package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.d.ts.map +1 -1
  21. package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.js +5 -1
  22. package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.d.ts.map +1 -1
  23. package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.js +15 -0
  24. package/dist/src/presentation/web/components/features/chat/ChatSheet.d.ts.map +1 -1
  25. package/dist/src/presentation/web/components/features/chat/ChatSheet.js +18 -5
  26. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.d.ts.map +1 -1
  27. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.js +1 -1
  28. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts.map +1 -1
  29. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +5 -1
  30. package/dist/src/presentation/web/components/features/settings/agent-settings-section.d.ts +3 -3
  31. package/dist/src/presentation/web/components/features/settings/agent-settings-section.d.ts.map +1 -1
  32. package/dist/src/presentation/web/components/features/settings/agent-settings-section.js +23 -102
  33. package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.d.ts +2 -3
  34. package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.d.ts.map +1 -1
  35. package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.js +18 -22
  36. package/dist/src/presentation/web/components/features/settings/ci-settings-section.d.ts.map +1 -1
  37. package/dist/src/presentation/web/components/features/settings/ci-settings-section.js +14 -5
  38. package/dist/src/presentation/web/components/features/settings/database-settings-section.d.ts.map +1 -1
  39. package/dist/src/presentation/web/components/features/settings/database-settings-section.js +14 -4
  40. package/dist/src/presentation/web/components/features/settings/environment-settings-section.d.ts +9 -3
  41. package/dist/src/presentation/web/components/features/settings/environment-settings-section.d.ts.map +1 -1
  42. package/dist/src/presentation/web/components/features/settings/environment-settings-section.js +75 -65
  43. package/dist/src/presentation/web/components/features/settings/environment-settings-section.stories.d.ts.map +1 -1
  44. package/dist/src/presentation/web/components/features/settings/environment-settings-section.stories.js +20 -18
  45. package/dist/src/presentation/web/components/features/settings/fab-layout-settings-section.d.ts.map +1 -1
  46. package/dist/src/presentation/web/components/features/settings/fab-layout-settings-section.js +1 -1
  47. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.d.ts +3 -3
  48. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.d.ts.map +1 -1
  49. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.js +48 -50
  50. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.d.ts.map +1 -1
  51. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.js +25 -25
  52. package/dist/src/presentation/web/components/features/settings/interactive-agent-settings-section.d.ts.map +1 -1
  53. package/dist/src/presentation/web/components/features/settings/interactive-agent-settings-section.js +3 -3
  54. package/dist/src/presentation/web/components/features/settings/notification-settings-section.d.ts +3 -3
  55. package/dist/src/presentation/web/components/features/settings/notification-settings-section.d.ts.map +1 -1
  56. package/dist/src/presentation/web/components/features/settings/notification-settings-section.js +64 -47
  57. package/dist/src/presentation/web/components/features/settings/notification-settings-section.stories.d.ts.map +1 -1
  58. package/dist/src/presentation/web/components/features/settings/notification-settings-section.stories.js +32 -24
  59. package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
  60. package/dist/src/presentation/web/components/features/settings/settings-page-client.js +28 -381
  61. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts +2 -0
  62. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts.map +1 -1
  63. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.js +13 -0
  64. package/dist/src/presentation/web/components/features/settings/settings-section-utils.d.ts +13 -10
  65. package/dist/src/presentation/web/components/features/settings/settings-section-utils.d.ts.map +1 -1
  66. package/dist/src/presentation/web/components/features/settings/settings-section-utils.js +10 -10
  67. package/dist/src/presentation/web/components/features/settings/settings-section-utils.stories.d.ts +1 -1
  68. package/dist/src/presentation/web/components/features/settings/settings-section-utils.stories.d.ts.map +1 -1
  69. package/dist/src/presentation/web/components/features/settings/settings-section-utils.stories.js +7 -7
  70. package/dist/src/presentation/web/components/features/settings/stage-timeouts-settings-section.d.ts.map +1 -1
  71. package/dist/src/presentation/web/components/features/settings/stage-timeouts-settings-section.js +1 -1
  72. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.d.ts +3 -3
  73. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.d.ts.map +1 -1
  74. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.js +118 -165
  75. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.d.ts +1 -1
  76. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.d.ts.map +1 -1
  77. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.js +26 -64
  78. package/dist/src/presentation/web/components/features/skills/category-filter.d.ts.map +1 -1
  79. package/dist/src/presentation/web/components/features/skills/category-filter.js +12 -2
  80. package/dist/src/presentation/web/components/features/skills/skill-card.d.ts.map +1 -1
  81. package/dist/src/presentation/web/components/features/skills/skill-card.js +3 -3
  82. package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.d.ts.map +1 -1
  83. package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.js +27 -1
  84. package/dist/src/presentation/web/components/features/skills/skill-list.js +2 -2
  85. package/dist/src/presentation/web/components/features/skills/skills-page-client.d.ts.map +1 -1
  86. package/dist/src/presentation/web/components/features/skills/skills-page-client.js +2 -2
  87. package/dist/src/presentation/web/components/features/tools/tool-card.d.ts.map +1 -1
  88. package/dist/src/presentation/web/components/features/tools/tool-card.js +20 -11
  89. package/dist/src/presentation/web/components/features/tools/tool-detail-drawer.js +1 -1
  90. package/dist/src/presentation/web/components/features/tools/tools-page-client.d.ts.map +1 -1
  91. package/dist/src/presentation/web/components/features/tools/tools-page-client.js +6 -1
  92. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -1
  93. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +39 -43
  94. package/dist/src/presentation/web/components/ui/card.d.ts.map +1 -1
  95. package/dist/src/presentation/web/components/ui/card.js +9 -1
  96. package/dist/src/presentation/web/components/ui/drawer.d.ts.map +1 -1
  97. package/dist/src/presentation/web/components/ui/drawer.js +8 -2
  98. package/dist/src/presentation/web/components/ui/tooltip.d.ts.map +1 -1
  99. package/dist/src/presentation/web/components/ui/tooltip.js +3 -3
  100. package/dist/translations/ar/web.json +1 -0
  101. package/dist/translations/de/web.json +1 -0
  102. package/dist/translations/en/web.json +1 -0
  103. package/dist/translations/es/web.json +1 -0
  104. package/dist/translations/fr/web.json +1 -0
  105. package/dist/translations/he/web.json +1 -0
  106. package/dist/translations/pt/web.json +1 -0
  107. package/dist/translations/ru/web.json +1 -0
  108. package/dist/tsconfig.build.tsbuildinfo +1 -1
  109. package/package.json +1 -1
  110. package/web/.next/BUILD_ID +1 -1
  111. package/web/.next/build-manifest.json +3 -3
  112. package/web/.next/fallback-build-manifest.json +3 -3
  113. package/web/.next/prerender-manifest.json +3 -3
  114. package/web/.next/required-server-files.js +2 -2
  115. package/web/.next/required-server-files.json +2 -2
  116. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/next-font-manifest.json +6 -2
  117. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
  118. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +1 -1
  119. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  120. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  121. package/web/.next/server/app/(dashboard)/@drawer/chat/page/next-font-manifest.json +6 -2
  122. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
  123. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js +1 -1
  124. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  125. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  126. package/web/.next/server/app/(dashboard)/@drawer/create/page/next-font-manifest.json +6 -2
  127. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +31 -31
  128. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
  129. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  130. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  131. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/next-font-manifest.json +6 -2
  132. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
  133. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +2 -2
  134. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  135. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  136. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/next-font-manifest.json +6 -2
  137. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +37 -37
  138. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +2 -2
  139. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  140. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  141. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/next-font-manifest.json +6 -2
  142. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  143. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +1 -1
  144. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  145. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  146. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/next-font-manifest.json +6 -2
  147. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  148. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
  149. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  150. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  151. package/web/.next/server/app/(dashboard)/chat/page/next-font-manifest.json +6 -2
  152. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
  153. package/web/.next/server/app/(dashboard)/chat/page.js +1 -1
  154. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  155. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  156. package/web/.next/server/app/(dashboard)/create/page/next-font-manifest.json +6 -2
  157. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +31 -31
  158. package/web/.next/server/app/(dashboard)/create/page.js +1 -1
  159. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  160. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  161. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/next-font-manifest.json +6 -2
  162. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
  163. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +2 -2
  164. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  165. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  166. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/next-font-manifest.json +6 -2
  167. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +37 -37
  168. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +2 -2
  169. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  170. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  171. package/web/.next/server/app/(dashboard)/page/next-font-manifest.json +6 -2
  172. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
  173. package/web/.next/server/app/(dashboard)/page.js +1 -1
  174. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  175. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  176. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/next-font-manifest.json +6 -2
  177. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  178. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +1 -1
  179. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  180. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  181. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/next-font-manifest.json +6 -2
  182. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  183. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
  184. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  185. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  186. package/web/.next/server/app/_global-error.html +1 -1
  187. package/web/.next/server/app/_global-error.rsc +1 -1
  188. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  189. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  190. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  191. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  192. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  193. package/web/.next/server/app/_not-found/page/next-font-manifest.json +6 -2
  194. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
  195. package/web/.next/server/app/_not-found/page.js +1 -1
  196. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  197. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  198. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  199. package/web/.next/server/app/api/dialog/pick-files/route.js.nft.json +1 -1
  200. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  201. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  202. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
  203. package/web/.next/server/app/settings/page/next-font-manifest.json +6 -2
  204. package/web/.next/server/app/settings/page/server-reference-manifest.json +11 -11
  205. package/web/.next/server/app/settings/page.js +1 -1
  206. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  207. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  208. package/web/.next/server/app/skills/page/next-font-manifest.json +6 -2
  209. package/web/.next/server/app/skills/page/server-reference-manifest.json +11 -11
  210. package/web/.next/server/app/skills/page.js +1 -1
  211. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  212. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  213. package/web/.next/server/app/tools/page/next-font-manifest.json +6 -2
  214. package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
  215. package/web/.next/server/app/tools/page.js +1 -1
  216. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  217. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  218. package/web/.next/server/app/version/page/next-font-manifest.json +6 -2
  219. package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
  220. package/web/.next/server/app/version/page.js +1 -1
  221. package/web/.next/server/app/version/page.js.nft.json +1 -1
  222. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  223. package/web/.next/server/chunks/[root-of-the-server]__0tb~wwk._.js +1 -1
  224. package/web/.next/server/chunks/ssr/08qz_lucide-react_dist_esm_icons_0c0dui7._.js +3 -0
  225. package/web/.next/server/chunks/ssr/08qz_lucide-react_dist_esm_icons_0c0dui7._.js.map +1 -0
  226. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js +1 -1
  227. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js.map +1 -1
  228. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js +2 -2
  229. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js.map +1 -1
  230. package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js +1 -1
  231. package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js.map +1 -1
  232. package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js +1 -1
  233. package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js.map +1 -1
  234. package/web/.next/server/chunks/ssr/[root-of-the-server]__05_qc0n._.js +1 -1
  235. package/web/.next/server/chunks/ssr/[root-of-the-server]__05_qc0n._.js.map +1 -1
  236. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0uy_5rw._.js → [root-of-the-server]__0ge~xny._.js} +2 -2
  237. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0uy_5rw._.js.map → [root-of-the-server]__0ge~xny._.js.map} +1 -1
  238. package/web/.next/server/chunks/ssr/[root-of-the-server]__0jy4nha._.js +3 -0
  239. package/web/.next/server/chunks/ssr/[root-of-the-server]__0jy4nha._.js.map +1 -0
  240. package/web/.next/server/chunks/ssr/{_0e5cv3q._.js → [root-of-the-server]__0n~o-g-._.js} +2 -2
  241. package/web/.next/server/chunks/ssr/[root-of-the-server]__0n~o-g-._.js.map +1 -0
  242. package/web/.next/server/chunks/ssr/{[root-of-the-server]__02.89uf._.js → [root-of-the-server]__0qda~yi._.js} +2 -2
  243. package/web/.next/server/chunks/ssr/{[root-of-the-server]__02.89uf._.js.map → [root-of-the-server]__0qda~yi._.js.map} +1 -1
  244. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0c0xoi_._.js → [root-of-the-server]__0qxd563._.js} +2 -2
  245. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0c0xoi_._.js.map → [root-of-the-server]__0qxd563._.js.map} +1 -1
  246. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rv1gci._.js +1 -1
  247. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rvrr1j._.js +1 -1
  248. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rvrr1j._.js.map +1 -1
  249. package/web/.next/server/chunks/ssr/[root-of-the-server]__0tq2syh._.js +1 -1
  250. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0r5zhk.._.js → [root-of-the-server]__0t~u8sd._.js} +2 -2
  251. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0r5zhk.._.js.map → [root-of-the-server]__0t~u8sd._.js.map} +1 -1
  252. package/web/.next/server/chunks/ssr/{[root-of-the-server]__04rq9lr._.js → [root-of-the-server]__10tll_l._.js} +2 -2
  253. package/web/.next/server/chunks/ssr/{[root-of-the-server]__04rq9lr._.js.map → [root-of-the-server]__10tll_l._.js.map} +1 -1
  254. package/web/.next/server/chunks/ssr/[root-of-the-server]__12j29w-._.js +1 -1
  255. package/web/.next/server/chunks/ssr/[root-of-the-server]__12j29w-._.js.map +1 -1
  256. package/web/.next/server/chunks/ssr/_0-09vq7._.js +1 -1
  257. package/web/.next/server/chunks/ssr/_0-09vq7._.js.map +1 -1
  258. package/web/.next/server/chunks/ssr/{_138qywk._.js → _01qdxy2._.js} +2 -2
  259. package/web/.next/server/chunks/ssr/{_138qywk._.js.map → _01qdxy2._.js.map} +1 -1
  260. package/web/.next/server/chunks/ssr/_01sesw0._.js +1 -1
  261. package/web/.next/server/chunks/ssr/_01sesw0._.js.map +1 -1
  262. package/web/.next/server/chunks/ssr/_069y.js._.js +2 -2
  263. package/web/.next/server/chunks/ssr/_069y.js._.js.map +1 -1
  264. package/web/.next/server/chunks/ssr/_09r54oy._.js +7 -0
  265. package/web/.next/server/chunks/ssr/_09r54oy._.js.map +1 -0
  266. package/web/.next/server/chunks/ssr/_0__4si~._.js +1 -1
  267. package/web/.next/server/chunks/ssr/_0__4si~._.js.map +1 -1
  268. package/web/.next/server/chunks/ssr/_0_m17kl._.js +1 -1
  269. package/web/.next/server/chunks/ssr/_0_m17kl._.js.map +1 -1
  270. package/web/.next/server/chunks/ssr/_0a_8rlj._.js +3 -0
  271. package/web/.next/server/chunks/ssr/_0a_8rlj._.js.map +1 -0
  272. package/web/.next/server/chunks/ssr/_0d4miu.._.js +1 -1
  273. package/web/.next/server/chunks/ssr/_0d4miu.._.js.map +1 -1
  274. package/web/.next/server/chunks/ssr/_0dy8.0k._.js +3 -0
  275. package/web/.next/server/chunks/ssr/_0dy8.0k._.js.map +1 -0
  276. package/web/.next/server/chunks/ssr/_0e8ern9._.js +1 -1
  277. package/web/.next/server/chunks/ssr/_0e8ern9._.js.map +1 -1
  278. package/web/.next/server/chunks/ssr/_0l2~~pi._.js +3 -0
  279. package/web/.next/server/chunks/ssr/_0l2~~pi._.js.map +1 -0
  280. package/web/.next/server/chunks/ssr/_0n.magx._.js +1 -1
  281. package/web/.next/server/chunks/ssr/_0p3~u8u._.js +2 -2
  282. package/web/.next/server/chunks/ssr/_0p3~u8u._.js.map +1 -1
  283. package/web/.next/server/chunks/ssr/{_00k65h-._.js → _0pa1dkv._.js} +2 -2
  284. package/web/.next/server/chunks/ssr/_0pa1dkv._.js.map +1 -0
  285. package/web/.next/server/chunks/ssr/_0r.3n~3._.js +1 -1
  286. package/web/.next/server/chunks/ssr/_0r.3n~3._.js.map +1 -1
  287. package/web/.next/server/chunks/ssr/_0t59q8r._.js +1 -1
  288. package/web/.next/server/chunks/ssr/_0t59q8r._.js.map +1 -1
  289. package/web/.next/server/chunks/ssr/_0vjw-e_._.js +7 -0
  290. package/web/.next/server/chunks/ssr/_0vjw-e_._.js.map +1 -0
  291. package/web/.next/server/chunks/ssr/_0vyfc4b._.js +1 -1
  292. package/web/.next/server/chunks/ssr/_0vyfc4b._.js.map +1 -1
  293. package/web/.next/server/chunks/ssr/_0w-_hww._.js +1 -1
  294. package/web/.next/server/chunks/ssr/_0w-_hww._.js.map +1 -1
  295. package/web/.next/server/chunks/ssr/{_0-.ckn5._.js → _0wor25i._.js} +2 -2
  296. package/web/.next/server/chunks/ssr/{_0-.ckn5._.js.map → _0wor25i._.js.map} +1 -1
  297. package/web/.next/server/chunks/ssr/_0zk-h5w._.js +1 -1
  298. package/web/.next/server/chunks/ssr/_0zk-h5w._.js.map +1 -1
  299. package/web/.next/server/chunks/ssr/{_0hwjfpu._.js → _0~0jkp_._.js} +2 -2
  300. package/web/.next/server/chunks/ssr/_0~0jkp_._.js.map +1 -0
  301. package/web/.next/server/chunks/ssr/_0~7lwu_._.js +1 -1
  302. package/web/.next/server/chunks/ssr/_0~7lwu_._.js.map +1 -1
  303. package/web/.next/server/chunks/ssr/_1161g9x._.js +1 -1
  304. package/web/.next/server/chunks/ssr/_1161g9x._.js.map +1 -1
  305. package/web/.next/server/chunks/ssr/src_presentation_web_0y11iiz._.js +1 -1
  306. package/web/.next/server/chunks/ssr/src_presentation_web_0y11iiz._.js.map +1 -1
  307. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_05m2q~u.js +1 -1
  308. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_05m2q~u.js.map +1 -1
  309. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_0.6zk.t.js +1 -1
  310. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_0.6zk.t.js.map +1 -1
  311. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_0pjb_re._.js +1 -1
  312. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_0w2wqvu._.js +1 -1
  313. package/web/.next/server/chunks/ssr/src_presentation_web_components_0sk2qdt._.js +1 -1
  314. package/web/.next/server/chunks/ssr/src_presentation_web_components_0sk2qdt._.js.map +1 -1
  315. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js +1 -1
  316. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js.map +1 -1
  317. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_0aji.op._.js +1 -1
  318. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_0aji.op._.js.map +1 -1
  319. package/web/.next/server/middleware-build-manifest.js +3 -3
  320. package/web/.next/server/next-font-manifest.js +1 -1
  321. package/web/.next/server/next-font-manifest.json +60 -2
  322. package/web/.next/server/pages/500.html +1 -1
  323. package/web/.next/server/server-reference-manifest.js +1 -1
  324. package/web/.next/server/server-reference-manifest.json +50 -50
  325. package/web/.next/static/chunks/{05enics63g._-.js → 0-ud~1jj7chzu.js} +4 -4
  326. package/web/.next/static/chunks/00m_fbc2z1gyi.js +5 -0
  327. package/web/.next/static/chunks/{0q7ohuqneuur4.js → 09f2lesd_dd3~.js} +1 -1
  328. package/web/.next/static/chunks/0c0dau5pmseko.js +1 -0
  329. package/web/.next/static/chunks/{0ps5sykbi-z5-.js → 0dq50gtgaj63f.js} +1 -1
  330. package/web/.next/static/chunks/{11bi612fz8agh.js → 0in4l8mne5y~_.js} +1 -1
  331. package/web/.next/static/chunks/0inayq2zzadja.js +1 -0
  332. package/web/.next/static/chunks/{0t3xjndx2s1_j.css → 0j.1nx3ly591i.css} +1 -0
  333. package/web/.next/static/chunks/{0-woqr2brccx_.js → 0k0j7anrbg-of.js} +1 -1
  334. package/web/.next/static/chunks/{0ma7k9iohb3bb.js → 0o33urrd3lk~u.js} +1 -1
  335. package/web/.next/static/chunks/0o4m0k3642219.js +1 -0
  336. package/web/.next/static/chunks/0pt-d18f7zxvv.js +1 -0
  337. package/web/.next/static/chunks/{0ls0v8h_qbctm.js → 0u_27fdqa2jeg.js} +1 -1
  338. package/web/.next/static/chunks/0udlnp30o1kjd.js +5 -0
  339. package/web/.next/static/chunks/0xwh.0u-dexsl.js +1 -0
  340. package/web/.next/static/chunks/0yibymrb2j05t.css +1 -0
  341. package/web/.next/static/chunks/103xnw203o9k1.js +1 -0
  342. package/web/.next/static/chunks/{022nrd6snse79.js → 11vbir.u7_zf7.js} +1 -1
  343. package/web/.next/static/chunks/{02phgt~f2c-2q.js → 121v1_d_dfk2k.js} +1 -1
  344. package/web/.next/static/chunks/{0q8ax~44oybo2.js → 12axopx66pocj.js} +1 -1
  345. package/web/.next/static/chunks/12pd180jp8zu..js +5 -0
  346. package/web/.next/static/chunks/13fcwhkw7dle2.js +1 -0
  347. package/web/.next/static/chunks/13q1peb_t9vj8.js +1 -0
  348. package/web/.next/static/chunks/183ehj-b80a~o.js +1 -0
  349. package/web/.next/static/chunks/{0j.wph28jrce1.js → 1874_wt9rit96.js} +1 -1
  350. package/web/.next/static/media/1bffadaabf893a1e-s.16ipb6fqu393i.woff2 +0 -0
  351. package/web/.next/static/media/2bbe8d2671613f1f-s.067x_6k0k23tk.woff2 +0 -0
  352. package/web/.next/static/media/2c55a0e60120577a-s.0bjc5tiuqdqro.woff2 +0 -0
  353. package/web/.next/static/media/5476f68d60460930-s.0wxq9webf.ew4.woff2 +0 -0
  354. package/web/.next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2 +0 -0
  355. package/web/.next/static/media/9c72aa0f40e4eef8-s.0m6w47a4e5dy9.woff2 +0 -0
  356. package/web/.next/static/media/ad66f9afd8947f86-s.11u06r12fd6v_.woff2 +0 -0
  357. package/web/package.json +2 -2
  358. package/web/public/favicon.svg +10 -0
  359. package/web/public/icons/tools/antigravity.svg +1 -0
  360. package/web/public/icons/tools/bash.svg +38 -0
  361. package/web/public/icons/tools/cursor-cli.svg +12 -0
  362. package/web/public/icons/tools/cursor.svg +1 -0
  363. package/web/public/icons/tools/fish.svg +153 -0
  364. package/web/public/icons/tools/powershell.svg +29 -0
  365. package/web/public/icons/tools/zsh.svg +1 -0
  366. package/web/.next/server/chunks/ssr/08qz_lucide-react_dist_esm_icons_0zwb4s4._.js +0 -3
  367. package/web/.next/server/chunks/ssr/08qz_lucide-react_dist_esm_icons_0zwb4s4._.js.map +0 -1
  368. package/web/.next/server/chunks/ssr/[root-of-the-server]__0lslgap._.js +0 -7
  369. package/web/.next/server/chunks/ssr/[root-of-the-server]__0lslgap._.js.map +0 -1
  370. package/web/.next/server/chunks/ssr/_00k65h-._.js.map +0 -1
  371. package/web/.next/server/chunks/ssr/_08i-c2n._.js +0 -3
  372. package/web/.next/server/chunks/ssr/_08i-c2n._.js.map +0 -1
  373. package/web/.next/server/chunks/ssr/_0aaotn-._.js +0 -3
  374. package/web/.next/server/chunks/ssr/_0aaotn-._.js.map +0 -1
  375. package/web/.next/server/chunks/ssr/_0e5cv3q._.js.map +0 -1
  376. package/web/.next/server/chunks/ssr/_0hwjfpu._.js.map +0 -1
  377. package/web/.next/server/chunks/ssr/_0phryzt._.js +0 -3
  378. package/web/.next/server/chunks/ssr/_0phryzt._.js.map +0 -1
  379. package/web/.next/server/chunks/ssr/_12un22l._.js +0 -7
  380. package/web/.next/server/chunks/ssr/_12un22l._.js.map +0 -1
  381. package/web/.next/static/chunks/0-lu0b1ewsb0_.js +0 -1
  382. package/web/.next/static/chunks/01~dudieyb7wl.js +0 -5
  383. package/web/.next/static/chunks/02kpdawdtqcxm.js +0 -1
  384. package/web/.next/static/chunks/03s7z6w1lj0w~.js +0 -1
  385. package/web/.next/static/chunks/04~sw.nhpwy6s.css +0 -1
  386. package/web/.next/static/chunks/08611baheit.t.js +0 -1
  387. package/web/.next/static/chunks/0_9k2ybutuphq.js +0 -1
  388. package/web/.next/static/chunks/0m5~9kij3s~81.js +0 -1
  389. package/web/.next/static/chunks/0q~uf2s33.48w.js +0 -1
  390. package/web/.next/static/chunks/15m2wfd5k_7fj.js +0 -1
  391. package/web/.next/static/chunks/15rbgqykl.er8.js +0 -1
  392. package/web/.next/static/chunks/164dnpi666fv_.js +0 -5
  393. package/web/.next/static/chunks/17z2sq7c5z8cr.js +0 -5
  394. /package/web/.next/static/{GSG_c1emY-f_AA00vD56y → SNdaKJ9fpre8tUMRe1jlA}/_buildManifest.js +0 -0
  395. /package/web/.next/static/{GSG_c1emY-f_AA00vD56y → SNdaKJ9fpre8tUMRe1jlA}/_clientMiddlewareManifest.js +0 -0
  396. /package/web/.next/static/{GSG_c1emY-f_AA00vD56y → SNdaKJ9fpre8tUMRe1jlA}/_ssgManifest.js +0 -0
@@ -6,7 +6,7 @@
6
6
  "author": "Google",
7
7
  "website": "https://antigravity.google",
8
8
  "platforms": ["linux", "darwin"],
9
- "iconUrl": "https://cdn.simpleicons.org/google",
9
+ "iconUrl": "/icons/tools/antigravity.svg",
10
10
  "binary": {
11
11
  "linux": "antigravity",
12
12
  "darwin": "agy"
@@ -3,6 +3,7 @@
3
3
  "summary": "Bourne Again Shell - default shell on most Linux systems",
4
4
  "description": "GNU Bash is a Unix shell and command language. It is the default shell on most Linux distributions and was the default on macOS until Catalina.",
5
5
  "tags": ["shell"],
6
+ "iconUrl": "/icons/tools/bash.svg",
6
7
  "author": "GNU Project",
7
8
  "website": "https://www.gnu.org/software/bash/",
8
9
  "platforms": ["linux", "darwin", "win32"],
@@ -6,7 +6,7 @@
6
6
  "author": "Anysphere",
7
7
  "website": "https://cursor.com",
8
8
  "platforms": ["linux", "darwin", "win32"],
9
- "iconUrl": "https://cdn.simpleicons.org/cursor",
9
+ "iconUrl": "/icons/tools/cursor-cli.svg",
10
10
  "binary": "cursor-agent",
11
11
  "packageManager": "curl",
12
12
  "commands": {
@@ -6,7 +6,7 @@
6
6
  "author": "Anysphere",
7
7
  "website": "https://cursor.com",
8
8
  "platforms": ["linux", "darwin", "win32"],
9
- "iconUrl": "https://cdn.simpleicons.org/cursor",
9
+ "iconUrl": "/icons/tools/cursor.svg",
10
10
  "binary": "cursor",
11
11
  "packageManager": "manual",
12
12
  "commands": {
@@ -3,6 +3,7 @@
3
3
  "summary": "Friendly Interactive Shell with smart features",
4
4
  "description": "Fish is a smart and user-friendly command line shell with features like autosuggestions, syntax highlighting, and web-based configuration.",
5
5
  "tags": ["shell"],
6
+ "iconUrl": "/icons/tools/fish.svg",
6
7
  "author": "Fish Shell Contributors",
7
8
  "website": "https://fishshell.com/",
8
9
  "platforms": ["linux", "darwin"],
@@ -3,6 +3,7 @@
3
3
  "summary": "Cross-platform task automation shell from Microsoft",
4
4
  "description": "PowerShell is a cross-platform task automation solution with a command-line shell, scripting language, and configuration management framework.",
5
5
  "tags": ["shell"],
6
+ "iconUrl": "/icons/tools/powershell.svg",
6
7
  "author": "Microsoft",
7
8
  "website": "https://github.com/PowerShell/PowerShell",
8
9
  "platforms": ["linux", "darwin", "win32"],
@@ -3,6 +3,7 @@
3
3
  "summary": "Z shell - default shell on macOS since Catalina",
4
4
  "description": "Zsh is a powerful shell with advanced features like improved tab completion, globbing, and plugin support via frameworks like Oh My Zsh.",
5
5
  "tags": ["shell"],
6
+ "iconUrl": "/icons/tools/zsh.svg",
6
7
  "author": "Paul Falstad",
7
8
  "website": "https://www.zsh.org/",
8
9
  "platforms": ["linux", "darwin"],
@@ -1 +1 @@
1
- {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/app/layout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAErC,OAAO,6BAA6B,CAAC;AACrC,OAAO,2CAA2C,CAAC;AACnD,OAAO,eAAe,CAAC;AAYvB,sFAAsF;AACtF,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAEvC,eAAO,MAAM,QAAQ,EAAE,QAStB,CAAC;AAEF,wBAA8B,UAAU,CAAC,EACvC,QAAQ,GACT,EAAE,QAAQ,CAAC;IACV,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC,oDAkCD"}
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/app/layout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAGrC,OAAO,6BAA6B,CAAC;AACrC,OAAO,2CAA2C,CAAC;AACnD,OAAO,eAAe,CAAC;AAyBvB,sFAAsF;AACtF,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAEvC,eAAO,MAAM,QAAQ,EAAE,QAStB,CAAC;AAEF,wBAA8B,UAAU,CAAC,EACvC,QAAQ,GACT,EAAE,QAAQ,CAAC;IACV,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC,oDAkCD"}
@@ -1,5 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { cookies } from 'next/headers';
3
+ import { Inter } from 'next/font/google';
3
4
  import '@xyflow/react/dist/base.css';
4
5
  import '@cubone/react-file-manager/dist/style.css';
5
6
  import './globals.css';
@@ -13,13 +14,25 @@ import { QueryProvider } from '../components/providers/query-provider.js';
13
14
  import { I18nProvider } from '../components/providers/i18n-provider.js';
14
15
  import { getLanguagePreference } from '../lib/language.js';
15
16
  import { RouteAnnouncer } from '../components/common/route-announcer/route-announcer.js';
17
+ /*
18
+ * Inter as the primary brand font for editorial palette adoption.
19
+ * Loaded via next/font/google so it's self-hosted at build time
20
+ * (no runtime CDN fetch, aligns with ShipIT's offline-capable ethos).
21
+ * Exposed as --font-inter; globals.css wires it into --font-sans.
22
+ * See .scratchpad/plans/stitch-developer-portal-adaptation.md §2.1.
23
+ */
24
+ const inter = Inter({
25
+ subsets: ['latin'],
26
+ display: 'swap',
27
+ variable: '--font-inter',
28
+ });
16
29
  /** Force dynamic rendering for all pages since they depend on client-side context. */
17
30
  export const dynamic = 'force-dynamic';
18
31
  export const metadata = {
19
32
  title: 'ShipIT AI',
20
33
  description: 'Autonomous AI Native SDLC Platform - Automate the development cycle from idea to deploy',
21
34
  icons: [
22
- { rel: 'icon', url: '/shipit-icon.svg', type: 'image/svg+xml' },
35
+ { rel: 'icon', url: '/favicon.svg', type: 'image/svg+xml' },
23
36
  { rel: 'icon', url: '/favicon-32x32.png', sizes: '32x32', type: 'image/png' },
24
37
  { rel: 'apple-touch-icon', url: '/apple-touch-icon.png', sizes: '180x180' },
25
38
  ],
@@ -32,7 +45,7 @@ export default async function RootLayout({ children, }) {
32
45
  getFeatureFlags(),
33
46
  getFabLayout(),
34
47
  ]);
35
- return (_jsxs("html", { lang: language, dir: dir, suppressHydrationWarning: true, children: [_jsx("head", { children: _jsx("script", { dangerouslySetInnerHTML: {
48
+ return (_jsxs("html", { lang: language, dir: dir, className: inter.variable, suppressHydrationWarning: true, children: [_jsx("head", { children: _jsx("script", { dangerouslySetInnerHTML: {
36
49
  __html: `(function(){try{var d=document.documentElement,t=localStorage.getItem('shipit-ai-theme'),s=window.matchMedia('(prefers-color-scheme: dark)').matches;if(t==='dark'||(t==='system'&&s)||(!t&&s)){d.classList.add('dark')}}catch(e){}})();`,
37
50
  } }) }), _jsxs("body", { className: "min-h-screen antialiased", children: [_jsx(RouteAnnouncer, {}), _jsx(I18nProvider, { initialLanguage: language, children: _jsx(QueryProvider, { children: _jsx(FeatureFlagsProvider, { flags: flags, children: _jsx(FabLayoutProvider, { layout: fabLayout, children: _jsx(AppShell, { sidebarOpen: sidebarOpen, children: children }) }) }) }) }), _jsx(Toaster, { position: "bottom-center" })] })] }));
38
51
  }
@@ -1 +1 @@
1
- {"version":3,"file":"base-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/base-drawer/base-drawer.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAiBlE,OAAO,EAAmB,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAGpF,QAAA,MAAM,cAAc;;8EAWlB,CAAC;AAEH,MAAM,WAAW,eAAgB,SAAQ,YAAY,CAAC,OAAO,cAAc,CAAC;IAC1E,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,yGAAyG;IACzG,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,iBAAiB,CAAC;CAClC;AAED,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,OAAO,EACP,KAAa,EACb,qBAA6B,EAC7B,KAAgB,EAChB,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,MAAM,EACN,SAAS,EACT,aAAa,EAAE,MAAM,EACrB,YAAY,GACb,EAAE,eAAe,2CAmLjB"}
1
+ {"version":3,"file":"base-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/base-drawer/base-drawer.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAiBlE,OAAO,EAAmB,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAGpF,QAAA,MAAM,cAAc;;8EAWlB,CAAC;AAEH,MAAM,WAAW,eAAgB,SAAQ,YAAY,CAAC,OAAO,cAAc,CAAC;IAC1E,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,yGAAyG;IACzG,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,iBAAiB,CAAC;CAClC;AAED,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,OAAO,EACP,KAAa,EACb,qBAA6B,EAC7B,KAAgB,EAChB,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,MAAM,EACN,SAAS,EACT,aAAa,EAAE,MAAM,EACrB,YAAY,GACb,EAAE,eAAe,2CAqLjB"}
@@ -122,7 +122,10 @@ export function BaseDrawer({ open, onClose, modal = false, dismissOnOutsideClick
122
122
  return (_jsxs(Drawer, { direction: drawerDirection, modal: modal, handleOnly: true, open: open, onOpenChange: (isOpen) => {
123
123
  if (!isOpen)
124
124
  onClose();
125
- }, children: [modal ? _jsx(DrawerOverlay, {}) : null, _jsxs(DrawerContent, { ref: contentRef, direction: drawerDirection, showCloseButton: false, className: cn(drawerVariants({ size }), 'bg-white/85 backdrop-blur-xl dark:bg-neutral-800/85', className), "data-testid": testId, onInteractOutside: modal ? undefined : (e) => e.preventDefault(), ...(!modal ? { 'aria-modal': true } : {}), children: [_jsx(DrawerTitle, { asChild: true, children: _jsx("span", { className: "sr-only", children: title }) }), _jsx(DrawerDescription, { asChild: true, children: _jsx("span", { className: "sr-only", children: title }) }), _jsx(FocusScope.Root, { trapped: !modal, loop: !modal, asChild: true, onMountAutoFocus: handleMountAutoFocus, onUnmountAutoFocus: handleUnmountAutoFocus, children: _jsxs("div", { className: "flex min-h-0 flex-1 flex-col overflow-hidden", children: [_jsxs("button", { type: "button", "aria-label": "Close", onClick: onClose, className: "ring-offset-background focus:ring-ring absolute end-3 top-2 z-50 rounded-sm p-1 opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden", "data-testid": testId ? `${testId}-close-button` : undefined, children: [_jsx(XIcon, { className: "size-4" }), _jsx("span", { className: "sr-only", children: "Close" })] }), header ? _jsx(DrawerHeader, { className: "shrink-0", children: header }) : null, header ? _jsx(Separator, {}) : null, featureFlags.envDeploy && deployTarget ? (_jsx(DeployBar, { deployTarget: deployTarget })) : null, _jsx("div", { className: "flex min-h-0 flex-1 flex-col overflow-hidden", children: children }), footer ? _jsx(DrawerFooter, { className: "shrink-0", children: footer }) : null] }) })] })] }));
125
+ }, children: [modal ? _jsx(DrawerOverlay, {}) : null, _jsxs(DrawerContent, { ref: contentRef, direction: drawerDirection, showCloseButton: false, className: cn(drawerVariants({ size }),
126
+ // Editorial glass treatment: semi-transparent with backdrop blur in BOTH modes
127
+ // for polished depth. Light mode uses white/80, dark mode uses card surface/85.
128
+ 'bg-white/80 backdrop-blur-xl dark:bg-[#1e293bd9]', className), "data-testid": testId, onInteractOutside: modal ? undefined : (e) => e.preventDefault(), ...(!modal ? { 'aria-modal': true } : {}), children: [_jsx(DrawerTitle, { asChild: true, children: _jsx("span", { className: "sr-only", children: title }) }), _jsx(DrawerDescription, { asChild: true, children: _jsx("span", { className: "sr-only", children: title }) }), _jsx(FocusScope.Root, { trapped: !modal, loop: !modal, asChild: true, onMountAutoFocus: handleMountAutoFocus, onUnmountAutoFocus: handleUnmountAutoFocus, children: _jsxs("div", { className: "flex min-h-0 flex-1 flex-col overflow-hidden", children: [_jsxs("button", { type: "button", "aria-label": "Close", onClick: onClose, className: "ring-offset-background focus:ring-ring absolute end-3 top-2 z-50 rounded-sm p-1 opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden", "data-testid": testId ? `${testId}-close-button` : undefined, children: [_jsx(XIcon, { className: "size-4" }), _jsx("span", { className: "sr-only", children: "Close" })] }), header ? _jsx(DrawerHeader, { className: "shrink-0", children: header }) : null, header ? _jsx(Separator, {}) : null, featureFlags.envDeploy && deployTarget ? (_jsx(DeployBar, { deployTarget: deployTarget })) : null, _jsx("div", { className: "flex min-h-0 flex-1 flex-col overflow-hidden", children: children }), footer ? _jsx(DrawerFooter, { className: "shrink-0", children: footer }) : null] }) })] })] }));
126
129
  }
127
130
  function DeployBar({ deployTarget }) {
128
131
  const deployAction = useDeployAction(deployTarget);
@@ -1,8 +1,10 @@
1
1
  export interface PageHeaderProps {
2
2
  title: string;
3
3
  description?: string;
4
+ /** Optional eyebrow label above the title (e.g., "DEVELOPER PORTAL") */
5
+ eyebrow?: string;
4
6
  children?: React.ReactNode;
5
7
  className?: string;
6
8
  }
7
- export declare function PageHeader({ title, description, children, className }: PageHeaderProps): import("react/jsx-runtime").JSX.Element;
9
+ export declare function PageHeader({ title, description, eyebrow, children, className }: PageHeaderProps): import("react/jsx-runtime").JSX.Element;
8
10
  //# sourceMappingURL=page-header.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"page-header.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/page-header/page-header.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,eAAe,2CAUtF"}
1
+ {"version":3,"file":"page-header.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/page-header/page-header.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAQD,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,eAAe,2CAmB/F"}
@@ -1,5 +1,11 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { cn } from '../../../lib/utils.js';
3
- export function PageHeader({ title, description, children, className }) {
4
- return (_jsxs("header", { className: cn('flex items-center justify-between gap-4', className), children: [_jsxs("div", { className: "space-y-1", children: [_jsx("h1", { className: "text-2xl font-bold tracking-tight", children: title }), description ? _jsx("p", { className: "text-muted-foreground", children: description }) : null] }), children ? _jsx("div", { "data-slot": "actions", children: children }) : null] }));
3
+ /*
4
+ * PageHeader Stitch editorial page header pattern.
5
+ * Renders: tiny uppercase eyebrow → large bold title → muted description.
6
+ * Matches the tools-page-client.tsx header treatment.
7
+ * See .scratchpad/stitch/shipit-developer-portal/src/App.tsx:161
8
+ */
9
+ export function PageHeader({ title, description, eyebrow, children, className }) {
10
+ return (_jsxs("header", { className: cn('flex items-center justify-between gap-4', className), children: [_jsxs("div", { className: "space-y-1.5", children: [eyebrow ? (_jsx("span", { className: "text-[10px] font-bold tracking-[0.2em] text-slate-400 uppercase", children: eyebrow })) : null, _jsx("div", { className: "flex items-baseline gap-3", children: _jsx("h1", { className: "text-foreground text-3xl font-black tracking-tight", children: title }) }), description ? (_jsx("p", { className: "text-muted-foreground text-sm font-medium", children: description })) : null] }), children ? _jsx("div", { "data-slot": "actions", children: children }) : null] }));
5
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"repository-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-node.tsx"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AASnE,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,2CA2cA"}
1
+ {"version":3,"file":"repository-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-node.tsx"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AASnE,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,2CA+cA"}
@@ -88,7 +88,12 @@ export function RepositoryNode({ data, selected, }) {
88
88
  }, className: "nodrag relative cursor-pointer text-violet-500 hover:text-violet-600 dark:text-violet-400 dark:hover:text-violet-300", children: [_jsx(MessageSquare, { className: "h-3 w-3" }), _jsx(ChatDotIndicator, { status: chatTurnStatus })] }) }), _jsx(TooltipContent, { children: t('repositoryNode.chatWithAgent') })] }) }), _jsx(FeatureSessionsDropdown, { repositoryPath: data.repositoryPath, includeWorktrees: true, onCreateFromSession: handleCreateFromSession })] })) : null, data.onAdd ? _jsx("div", { className: "ms-1.5" }) : null, data.onAdd ? (_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("button", { "aria-label": t('repositoryNode.newFeature'), "data-testid": "repository-node-add-button", onClick: (e) => {
89
89
  e.stopPropagation();
90
90
  data.onAdd?.();
91
- }, className: cn('flex h-6 shrink-0 cursor-pointer items-center gap-0.5 rounded bg-blue-500 px-1.5 text-[11px] font-bold text-white transition-colors hover:bg-blue-600 dark:bg-amber-500 dark:hover:bg-amber-400', data.pulseAdd && 'animate-pulse-cta'), children: [_jsx(Plus, { className: "h-3 w-3" }), _jsx("span", { className: "translate-y-px", children: t('repositoryNode.new') })] }) }), _jsx(TooltipContent, { side: "top", children: t('repositoryNode.newFeature') })] }) })) : null] })] }), data.branch ? (_jsxs(_Fragment, { children: [_jsx("div", { "data-testid": "repository-node-git-info", className: "text-muted-foreground border-border/50 border-t px-4 py-2", children: _jsxs("div", { className: "flex items-center gap-3 text-xs", children: [_jsxs("span", { className: "flex items-center gap-1 truncate", "data-testid": "repository-node-branch", children: [_jsx(GitBranch, { className: "h-3 w-3 shrink-0" }), _jsx("span", { className: "truncate", children: data.branch })] }), data.behindCount != null && data.behindCount > 0 ? (_jsxs("span", { className: "flex shrink-0 items-center gap-1 whitespace-nowrap text-amber-500", "data-testid": "repository-node-behind", children: [_jsx(ArrowDown, { className: "h-3 w-3 shrink-0" }), t('repositoryNode.behind', { count: data.behindCount })] })) : null] }) }), data.commitMessage ? (_jsx("div", { "data-testid": "repository-node-commit-info", className: "text-muted-foreground border-border/50 border-t px-4 py-2", children: _jsxs("div", { className: "flex items-center gap-2 text-xs", children: [_jsx(GitCommitHorizontal, { className: "h-3 w-3 shrink-0" }), _jsx("span", { className: "min-w-0 truncate", "data-testid": "repository-node-commit-message", children: data.commitMessage }), data.committer ? (_jsxs("span", { className: "text-muted-foreground/70 ms-auto flex shrink-0 items-center gap-1", "data-testid": "repository-node-committer", children: [_jsx(User, { className: "h-3 w-3 shrink-0" }), _jsx("span", { children: data.committer })] })) : null] }) })) : null] })) : data.gitInfoStatus === 'not-a-repo' ? (_jsxs(_Fragment, { children: [_jsx("div", { "data-testid": "repository-node-not-repo", className: "text-muted-foreground border-border/50 border-t px-4 py-2", children: _jsxs("div", { className: "flex items-center gap-2 text-xs", children: [_jsx(FolderOpen, { className: "h-3 w-3 shrink-0" }), _jsx("span", { className: "min-w-0 truncate opacity-60", children: data.repositoryPath ?? 'Unknown path' })] }) }), _jsx("div", { className: "text-muted-foreground border-border/50 border-t px-4 py-2", children: _jsxs("div", { className: "flex items-center gap-2 text-xs opacity-40", children: [_jsx(GitBranch, { className: "h-3 w-3 shrink-0" }), _jsx("span", { children: t('repositoryNode.notAGitRepository') })] }) })] })) : data.gitInfoStatus !== 'ready' ? (_jsxs(_Fragment, { children: [_jsx("div", { "data-testid": "repository-node-git-loading", className: "border-border/50 border-t px-4 py-2", children: _jsxs("div", { className: "flex h-4 items-center gap-2 text-xs", children: [_jsx(GitBranch, { className: "text-muted-foreground h-3 w-3 shrink-0" }), _jsx("span", { className: "bg-muted h-3 w-20 animate-pulse rounded" })] }) }), _jsx("div", { className: "border-border/50 border-t px-4 py-2", children: _jsxs("div", { className: "flex h-4 items-center gap-2 text-xs", children: [_jsx(GitCommitHorizontal, { className: "text-muted-foreground h-3 w-3 shrink-0" }), _jsx("span", { className: "bg-muted h-3 w-36 animate-pulse rounded" })] }) })] })) : null, featureFlags.envDeploy && data.repositoryPath ? (_jsx("div", { "data-testid": "repository-node-dev-preview", className: "border-border/50 border-t px-4 py-2", onClick: (e) => e.stopPropagation(), children: _jsxs("div", { className: "flex items-center gap-2 text-xs", children: [deployAction.deployError ? (_jsx("span", { className: "truncate text-xs text-red-500", children: deployAction.deployError })) : isDeploymentActive ? (_jsxs(_Fragment, { children: [_jsx("span", { className: "me-0.5 inline-block h-2 w-2 shrink-0 rounded-full bg-green-500" }), deployAction.url ? (_jsx("a", { href: deployAction.url, target: "_blank", rel: "noopener noreferrer", className: "truncate text-green-700 hover:underline dark:text-green-400", children: deployAction.url })) : (_jsx("span", { className: "text-muted-foreground", children: t('repositoryNode.starting') }))] })) : (_jsxs("span", { className: "text-muted-foreground inline-flex items-baseline gap-2", children: [_jsx("span", { children: t('repositoryNode.run') }), _jsx("span", { className: "text-muted-foreground/50 text-[10px]", children: t('repositoryNode.startLocalEnvironment') })] })), _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: cn('ms-auto flex items-center', !isDeploymentActive &&
91
+ }, className: cn(
92
+ // Editorial palette: primary sky blue in both light and dark
93
+ // (was previously dark:bg-amber-500 which clashes with the
94
+ // Stitch editorial dark palette). Uses --color-primary via
95
+ // bg-primary so any future primary shifts propagate here.
96
+ 'bg-primary hover:bg-primary/90 flex h-6 shrink-0 cursor-pointer items-center gap-0.5 rounded px-1.5 text-[11px] font-bold text-white transition-colors', data.pulseAdd && 'animate-pulse-cta'), children: [_jsx(Plus, { className: "h-3 w-3" }), _jsx("span", { className: "translate-y-px", children: t('repositoryNode.new') })] }) }), _jsx(TooltipContent, { side: "top", children: t('repositoryNode.newFeature') })] }) })) : null] })] }), data.branch ? (_jsxs(_Fragment, { children: [_jsx("div", { "data-testid": "repository-node-git-info", className: "text-muted-foreground border-border/50 border-t px-4 py-2", children: _jsxs("div", { className: "flex items-center gap-3 text-xs", children: [_jsxs("span", { className: "flex items-center gap-1 truncate", "data-testid": "repository-node-branch", children: [_jsx(GitBranch, { className: "h-3 w-3 shrink-0" }), _jsx("span", { className: "truncate", children: data.branch })] }), data.behindCount != null && data.behindCount > 0 ? (_jsxs("span", { className: "flex shrink-0 items-center gap-1 whitespace-nowrap text-amber-500", "data-testid": "repository-node-behind", children: [_jsx(ArrowDown, { className: "h-3 w-3 shrink-0" }), t('repositoryNode.behind', { count: data.behindCount })] })) : null] }) }), data.commitMessage ? (_jsx("div", { "data-testid": "repository-node-commit-info", className: "text-muted-foreground border-border/50 border-t px-4 py-2", children: _jsxs("div", { className: "flex items-center gap-2 text-xs", children: [_jsx(GitCommitHorizontal, { className: "h-3 w-3 shrink-0" }), _jsx("span", { className: "min-w-0 truncate", "data-testid": "repository-node-commit-message", children: data.commitMessage }), data.committer ? (_jsxs("span", { className: "text-muted-foreground/70 ms-auto flex shrink-0 items-center gap-1", "data-testid": "repository-node-committer", children: [_jsx(User, { className: "h-3 w-3 shrink-0" }), _jsx("span", { children: data.committer })] })) : null] }) })) : null] })) : data.gitInfoStatus === 'not-a-repo' ? (_jsxs(_Fragment, { children: [_jsx("div", { "data-testid": "repository-node-not-repo", className: "text-muted-foreground border-border/50 border-t px-4 py-2", children: _jsxs("div", { className: "flex items-center gap-2 text-xs", children: [_jsx(FolderOpen, { className: "h-3 w-3 shrink-0" }), _jsx("span", { className: "min-w-0 truncate opacity-60", children: data.repositoryPath ?? 'Unknown path' })] }) }), _jsx("div", { className: "text-muted-foreground border-border/50 border-t px-4 py-2", children: _jsxs("div", { className: "flex items-center gap-2 text-xs opacity-40", children: [_jsx(GitBranch, { className: "h-3 w-3 shrink-0" }), _jsx("span", { children: t('repositoryNode.notAGitRepository') })] }) })] })) : data.gitInfoStatus !== 'ready' ? (_jsxs(_Fragment, { children: [_jsx("div", { "data-testid": "repository-node-git-loading", className: "border-border/50 border-t px-4 py-2", children: _jsxs("div", { className: "flex h-4 items-center gap-2 text-xs", children: [_jsx(GitBranch, { className: "text-muted-foreground h-3 w-3 shrink-0" }), _jsx("span", { className: "bg-muted h-3 w-20 animate-pulse rounded" })] }) }), _jsx("div", { className: "border-border/50 border-t px-4 py-2", children: _jsxs("div", { className: "flex h-4 items-center gap-2 text-xs", children: [_jsx(GitCommitHorizontal, { className: "text-muted-foreground h-3 w-3 shrink-0" }), _jsx("span", { className: "bg-muted h-3 w-36 animate-pulse rounded" })] }) })] })) : null, featureFlags.envDeploy && data.repositoryPath ? (_jsx("div", { "data-testid": "repository-node-dev-preview", className: "border-border/50 border-t px-4 py-2", onClick: (e) => e.stopPropagation(), children: _jsxs("div", { className: "flex items-center gap-2 text-xs", children: [deployAction.deployError ? (_jsx("span", { className: "truncate text-xs text-red-500", children: deployAction.deployError })) : isDeploymentActive ? (_jsxs(_Fragment, { children: [_jsx("span", { className: "me-0.5 inline-block h-2 w-2 shrink-0 rounded-full bg-green-500" }), deployAction.url ? (_jsx("a", { href: deployAction.url, target: "_blank", rel: "noopener noreferrer", className: "truncate text-green-700 hover:underline dark:text-green-400", children: deployAction.url })) : (_jsx("span", { className: "text-muted-foreground", children: t('repositoryNode.starting') }))] })) : (_jsxs("span", { className: "text-muted-foreground inline-flex items-baseline gap-2", children: [_jsx("span", { children: t('repositoryNode.run') }), _jsx("span", { className: "text-muted-foreground/50 text-[10px]", children: t('repositoryNode.startLocalEnvironment') })] })), _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: cn('ms-auto flex items-center', !isDeploymentActive &&
92
97
  !deployAction.deployError &&
93
98
  '[&_button]:text-green-600 [&_button]:hover:text-green-700 dark:[&_button]:text-green-400 dark:[&_button]:hover:text-green-300'), children: _jsx(ActionButton, { label: deployAction.deployError
94
99
  ? t('repositoryNode.retry')
@@ -1,7 +1,15 @@
1
1
  export interface ShipitAiLogoProps {
2
2
  className?: string;
3
+ /** Icon size in px. Default 24. */
3
4
  size?: number;
4
5
  variant?: 'default' | 'dev';
6
+ /**
7
+ * When true, the full brandmark (icon + "SHIPIT AI" + "ENTERPRISE PORTAL"
8
+ * eyebrow) renders. When false, only the icon renders — used for the
9
+ * collapsed sidebar state. Mirrors Stitch's Logo `isOpen` prop.
10
+ * See .scratchpad/stitch/shipit-developer-portal/src/components/Logo.tsx:9
11
+ */
12
+ isOpen?: boolean;
5
13
  }
6
- export declare function ShipitAiLogo({ className, size, variant }: ShipitAiLogoProps): import("react/jsx-runtime").JSX.Element;
14
+ export declare function ShipitAiLogo({ className, size, variant, isOpen, }: ShipitAiLogoProps): import("react/jsx-runtime").JSX.Element;
7
15
  //# sourceMappingURL=shipit-ai-logo.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shipit-ai-logo.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/shipit-ai-logo/shipit-ai-logo.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC;CAC7B;AAED,wBAAgB,YAAY,CAAC,EAAE,SAAS,EAAE,IAAS,EAAE,OAAmB,EAAE,EAAE,iBAAiB,2CAgB5F"}
1
+ {"version":3,"file":"shipit-ai-logo.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/shipit-ai-logo/shipit-ai-logo.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC;IAC5B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAWD,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,IAAS,EACT,OAAmB,EACnB,MAAa,GACd,EAAE,iBAAiB,2CAoEnB"}
@@ -1,8 +1,14 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import Image from 'next/image';
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
2
  import { cn } from '../../../lib/utils.js';
4
- /** Aspect ratio of the ShipIT brain logo PNG (194px height / 319px width) */
5
- const LOGO_ASPECT_RATIO = 194 / 319;
6
- export function ShipitAiLogo({ className, size = 24, variant = 'default' }) {
7
- return (_jsx(Image, { src: "/shipit-brain.png", alt: "ShipIT AI", width: size, height: Math.round(size * LOGO_ASPECT_RATIO), className: cn('shrink-0 object-contain dark:brightness-125', variant === 'dev' && 'opacity-80', className), style: { width: size, height: 'auto' }, "aria-hidden": true }));
3
+ /*
4
+ * ShipIT AI logo — Stitch editorial box/neural-circuit design.
5
+ * Inline SVG so `currentColor` resolves from the parent's text color,
6
+ * which means the box strokes automatically adapt to light/dark mode
7
+ * via the sidebar's --sidebar-foreground CSS variable. The neural
8
+ * circuit paths use the editorial sky blue via the `text-primary` class.
9
+ *
10
+ * Ported from .scratchpad/stitch/shipit-developer-portal/src/components/Logo.tsx:9-77
11
+ */
12
+ export function ShipitAiLogo({ className, size = 24, variant = 'default', isOpen = true, }) {
13
+ return (_jsxs("div", { className: cn('flex items-center gap-3', className), children: [_jsxs("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", width: size, height: size, className: cn('shrink-0', variant === 'dev' && 'opacity-80'), "aria-hidden": true, children: [_jsx("path", { d: "M21 7.5L12 3L3 7.5V16.5L12 21L21 16.5V7.5Z", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), _jsx("path", { d: "M3 7.5L12 12L21 7.5", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), _jsx("path", { d: "M12 12V21", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), _jsxs("g", { className: "text-primary", children: [_jsx("path", { d: "M12 12C12 12 15 9 15 6C15 3 12 2 12 2", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", className: "animate-pulse" }), _jsx("path", { d: "M12 12C12 12 9 9 9 6C9 3 12 2 12 2", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", className: "animate-pulse", style: { animationDelay: '0.5s' } }), _jsx("circle", { cx: "15", cy: "6", r: "1", fill: "currentColor" }), _jsx("circle", { cx: "9", cy: "6", r: "1", fill: "currentColor" }), _jsx("circle", { cx: "12", cy: "2", r: "1", fill: "currentColor" })] })] }), isOpen ? (_jsxs("div", { className: "flex flex-col leading-none", children: [_jsxs("span", { className: "text-foreground flex items-center gap-1 text-xl font-black tracking-tighter", children: ["SHIPIT ", _jsx("span", { className: "text-primary", children: "AI" })] }), _jsx("span", { className: "mt-0.5 text-[8px] font-bold tracking-[0.2em] text-slate-400 uppercase", children: "Enterprise Portal" })] })) : null] }));
8
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar-collapse-toggle.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.tsx"],"names":[],"mappings":"AAQA,MAAM,WAAW,0BAA0B;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,qBAAqB,CAAC,EAAE,SAAS,EAAE,EAAE,0BAA0B,2CA8B9E"}
1
+ {"version":3,"file":"sidebar-collapse-toggle.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.tsx"],"names":[],"mappings":"AAQA,MAAM,WAAW,0BAA0B;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,qBAAqB,CAAC,EAAE,SAAS,EAAE,EAAE,0BAA0B,2CAmC9E"}
@@ -20,5 +20,9 @@ export function SidebarCollapseToggle({ className }) {
20
20
  }
21
21
  toggleSidebar();
22
22
  };
23
- return (_jsx("div", { className: cn('flex', className), children: _jsx(Button, { "data-testid": "sidebar-collapse-toggle", variant: "ghost", size: "icon", className: "size-7 cursor-pointer group-data-[collapsible=icon]:size-8!", onClick: handleClick, "aria-label": label, children: _jsx(PanelLeft, { className: "size-4" }) }) }));
23
+ return (_jsx(Button, { "data-testid": "sidebar-collapse-toggle", variant: "ghost", size: "icon", className: cn(
24
+ // Generous hit area: full sidebar-menu-button size in both expanded
25
+ // and collapsed modes so the toggle is easy to click regardless of
26
+ // sidebar state. The icon stays centered via flex.
27
+ 'flex cursor-pointer items-center justify-center', 'size-8 group-data-[collapsible=icon]:size-8!', className), onClick: handleClick, "aria-label": label, children: _jsx(PanelLeft, { className: "size-4" }) }));
24
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar-nav-item.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI/C,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAc,EAAE,EAAE,mBAAmB,2CAa9F"}
1
+ {"version":3,"file":"sidebar-nav-item.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI/C,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAiBD,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAc,EAAE,EAAE,mBAAmB,2CAa9F"}
@@ -3,6 +3,21 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import Link from 'next/link';
4
4
  import { SidebarMenuItem, SidebarMenuButton } from '../../ui/sidebar.js';
5
5
  import { useSoundAction } from '../../../hooks/use-sound-action.js';
6
+ /*
7
+ * Sidebar nav item with Stitch editorial active state.
8
+ * Active state styling is applied via attribute selectors on the
9
+ * data-active attribute that SidebarMenuButton writes when isActive=true.
10
+ * Using an attribute selector avoids a hydration mismatch: the `active`
11
+ * prop flows from usePathname() which can return different values during
12
+ * SSR vs the first client render, so any conditional className based on
13
+ * it would not match between server and client. data-active is written
14
+ * once after hydration by the shadcn primitive, so CSS targeting it is
15
+ * stable across both trees.
16
+ *
17
+ * The editorial active styling (text-primary, ring, subtle shadow,
18
+ * font-semibold) is declared in globals.css under the
19
+ * [data-sidebar=menu-button][data-active=true] selector.
20
+ */
6
21
  export function SidebarNavItem({ icon: Icon, label, href, active = false }) {
7
22
  const navigateSound = useSoundAction('navigate');
8
23
  return (_jsx(SidebarMenuItem, { "data-testid": "sidebar-nav-item", children: _jsx(SidebarMenuButton, { asChild: true, isActive: active, tooltip: label, children: _jsxs(Link, { href: href, onClick: () => navigateSound.play(), children: [_jsx(Icon, {}), _jsx("span", { children: label })] }) }) }));
@@ -1 +1 @@
1
- {"version":3,"file":"ChatSheet.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/chat/ChatSheet.tsx"],"names":[],"mappings":"AA2DA,wBAAgB,eAAe,4CAwY9B"}
1
+ {"version":3,"file":"ChatSheet.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/chat/ChatSheet.tsx"],"names":[],"mappings":"AA4DA,wBAAgB,eAAe,4CAua9B"}
@@ -5,6 +5,7 @@ import { useTranslation } from 'react-i18next';
5
5
  import { MessageSquare, X, Bot, GripVertical, Maximize2, Minimize2 } from 'lucide-react';
6
6
  import { cn } from '../../../lib/utils.js';
7
7
  import { Button } from '../../ui/button.js';
8
+ import { Tooltip, TooltipContent, TooltipTrigger } from '../../ui/tooltip.js';
8
9
  import { ChatTab } from './ChatTab.js';
9
10
  import { ChatDotIndicator } from './ChatDotIndicator.js';
10
11
  import { useTurnStatus } from '../../../hooks/turn-statuses-provider.js';
@@ -259,16 +260,28 @@ export function GlobalChatPopup() {
259
260
  };
260
261
  document.addEventListener('mousemove', onMove);
261
262
  document.addEventListener('mouseup', onUp);
262
- }, className: "absolute end-0 bottom-0 z-10 h-4 w-4 cursor-se-resize" })) : null] })) : null, _jsxs(ChatFabWrapper, { swapPosition: swapPosition, sidebarState: sidebarState, isMaximized: isMaximized, children: [_jsxs(Button, { size: "icon", onClick: toggle, className: cn('relative h-14 w-14 rounded-full shadow-lg', 'transition-all duration-200 hover:scale-105 hover:shadow-xl active:scale-95', isOpen
263
- ? 'bg-violet-600 text-white hover:bg-violet-500'
264
- : 'bg-violet-500 text-white hover:bg-violet-400 dark:bg-violet-500 dark:hover:bg-violet-400'), children: [_jsx(MessageSquare, { className: cn('absolute h-7 w-7 stroke-[2.5] transition-all duration-200', isOpen ? 'scale-0 rotate-90 opacity-0' : 'scale-100 rotate-0 opacity-100') }), _jsx(X, { className: cn('absolute h-6 w-6 stroke-[2.5] transition-all duration-200', isOpen ? 'scale-100 rotate-0 opacity-100' : 'scale-0 -rotate-90 opacity-0') }), !isOpen && _jsx(ChatDotIndicator, { status: globalChatTurnStatus, className: "end-0 top-0" })] }), _jsx("div", { className: "pointer-events-none absolute bottom-[calc(100%+8px)] left-1/2 -translate-x-1/2 translate-y-1 opacity-0 transition-all duration-200 group-hover/fab:translate-y-0 group-hover/fab:opacity-100", children: _jsxs("div", { className: "bg-foreground rounded-lg px-3 py-1.5 text-center shadow-lg", children: [_jsx("p", { className: "text-background text-xs font-medium whitespace-nowrap", children: t('chat.shipitAiChat') }), _jsxs("p", { className: "text-background/50 mt-0.5 flex items-center justify-center gap-1 text-[10px]", children: [_jsx("kbd", { className: "bg-background/15 rounded px-1 py-px font-mono", children: "\u2318" }), _jsx("kbd", { className: "bg-background/15 rounded px-1 py-px font-mono", children: "\u21E7" }), _jsx("kbd", { className: "bg-background/15 rounded px-1 py-px font-mono", children: "K" })] })] }) })] })] }));
263
+ }, className: "absolute end-0 bottom-0 z-10 h-4 w-4 cursor-se-resize" })) : null] })) : null, _jsx(ChatFabWrapper, { swapPosition: swapPosition, sidebarState: sidebarState, isMaximized: isMaximized, children: _jsxs(Tooltip, { ...(isOpen ? { open: false } : {}), children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs(Button, { size: "icon", onClick: toggle, "data-chat-fab": "true", "data-chat-open": isOpen ? 'true' : 'false', "aria-label": t('chat.shipitAiChat'), className: cn(
264
+ // Stitch editorial refresh: use the primary sky token instead of the legacy
265
+ // violet accent so the Chat FAB matches the rest of the editorial palette.
266
+ // (bg-primary is #2563eb light / #3b82f6 dark)
267
+ //
268
+ // className here is a STATIC string literal — NO conditional branches.
269
+ // The open-state visual lift (ring-2) is applied via a CSS attribute
270
+ // selector on [data-chat-fab="true"][data-chat-open="true"] in globals.css.
271
+ // Keeping the className pure and static prevents hydration-mismatch
272
+ // drift between SSR and client HMR bundles during dev.
273
+ //
274
+ // Hover uses scale + brightness (NOT translate) so the button stays
275
+ // centered under the cursor and does not break Radix tooltip hover
276
+ // tracking via flapping pointer events.
277
+ 'bg-primary text-primary-foreground editorial-shadow relative h-14 w-14 rounded-full shadow-lg transition-all duration-200 hover:scale-[1.05] hover:shadow-xl hover:brightness-110 active:scale-95'), children: [_jsx(MessageSquare, { className: cn('absolute h-7 w-7 stroke-[2.5] transition-all duration-200', isOpen ? 'scale-0 rotate-90 opacity-0' : 'scale-100 rotate-0 opacity-100') }), _jsx(X, { className: cn('absolute h-6 w-6 stroke-[2.5] transition-all duration-200', isOpen ? 'scale-100 rotate-0 opacity-100' : 'scale-0 -rotate-90 opacity-0') }), !isOpen && (_jsx(ChatDotIndicator, { status: globalChatTurnStatus, className: "end-0 top-0" }))] }) }), _jsxs(TooltipContent, { side: "top", sideOffset: 12, className: "text-center", children: [_jsx("p", { className: "text-xs font-medium whitespace-nowrap", children: t('chat.shipitAiChat') }), _jsxs("p", { className: "mt-0.5 flex items-center justify-center gap-1 text-[10px] opacity-60", children: [_jsx("kbd", { className: "bg-background/15 rounded px-1 py-px font-mono", children: "\u2318" }), _jsx("kbd", { className: "bg-background/15 rounded px-1 py-px font-mono", children: "\u21E7" }), _jsx("kbd", { className: "bg-background/15 rounded px-1 py-px font-mono", children: "K" })] })] })] }) })] }));
265
278
  }
266
279
  /** Wrapper for the Chat FAB that handles position swapping. */
267
280
  function ChatFabWrapper({ swapPosition, sidebarState, isMaximized, children, }) {
268
281
  const { i18n } = useTranslation('web');
269
282
  const isRtl = i18n.dir() === 'rtl';
270
283
  if (!swapPosition) {
271
- return (_jsx("div", { className: cn('group/fab fixed end-8 bottom-6 z-30', isMaximized && 'hidden'), children: children }));
284
+ return (_jsx("div", { className: cn('fixed end-8 bottom-6 z-30', isMaximized && 'hidden'), children: children }));
272
285
  }
273
286
  // Swapped: chat FAB moves to start side, tracking sidebar width
274
287
  const sidebarOffset = sidebarState === 'expanded'
@@ -277,5 +290,5 @@ function ChatFabWrapper({ swapPosition, sidebarState, isMaximized, children, })
277
290
  const positionStyle = isRtl
278
291
  ? { right: sidebarOffset, transition: 'right 200ms ease-in-out' }
279
292
  : { left: sidebarOffset, transition: 'left 200ms ease-in-out' };
280
- return (_jsx("div", { className: cn('group/fab fixed bottom-6 z-30', isMaximized && 'hidden'), style: positionStyle, children: children }));
293
+ return (_jsx("div", { className: cn('fixed bottom-6 z-30', isMaximized && 'hidden'), style: positionStyle, children: children }));
281
294
  }
@@ -1 +1 @@
1
- {"version":3,"file":"control-center-empty-state.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/control-center-empty-state.tsx"],"names":[],"mappings":"AA0BA,MAAM,WAAW,4BAA4B;IAC3C,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,wBAAgB,uBAAuB,CAAC,EACtC,kBAAkB,EAClB,SAAS,GACV,EAAE,4BAA4B,kDAoM9B"}
1
+ {"version":3,"file":"control-center-empty-state.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/control-center-empty-state.tsx"],"names":[],"mappings":"AA0BA,MAAM,WAAW,4BAA4B;IAC3C,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,wBAAgB,uBAAuB,CAAC,EACtC,kBAAkB,EAClB,SAAS,GACV,EAAE,4BAA4B,kDAwM9B"}
@@ -75,7 +75,7 @@ export function ControlCenterEmptyState({ onRepositorySelect, className, }) {
75
75
  }, []);
76
76
  if (agentReady === null)
77
77
  return null;
78
- return (_jsxs("div", { "data-testid": "control-center-empty-state", className: cn('relative flex h-full w-full flex-col items-center justify-center px-8', className), children: [!agentReady ? (_jsx(WelcomeAgentSetup, { onComplete: handleAgentSetupComplete })) : (_jsxs("div", { className: "animate-in fade-in flex w-full max-w-md flex-col items-center duration-300", children: [_jsx("h1", { className: "text-foreground/90 text-center text-5xl font-extralight tracking-tight", children: t('emptyState.addProject') }), _jsxs("p", { className: "text-muted-foreground mt-3 text-center text-lg leading-relaxed font-light", children: [t('emptyState.addProjectDescription'), _jsx("br", {}), t('emptyState.addProjectDescriptionLine2')] }), _jsxs("div", { className: "mt-8 flex w-full flex-col gap-3", children: [_jsx(AgentAuthBanner, { status: authStatus, onRetry: handleRetryAuth }), _jsx(ToolStatusRow, { label: t('emptyState.git'), status: toolStatus?.git ?? null, missingHint: t('emptyState.gitRequired') }), _jsx(ToolStatusRow, { label: t('emptyState.githubCli'), status: toolStatus?.gh ?? null, missingHint: t('emptyState.githubCliRequired') })] }), _jsxs("button", { type: "button", "data-testid": "empty-state-add-repository", onClick: handlePickerClick, disabled: loading, className: "bg-foreground text-background hover:bg-foreground/90 mt-10 flex w-full cursor-pointer items-center justify-center gap-2.5 rounded-xl px-6 py-4 text-base font-medium shadow-lg transition-all duration-200 hover:shadow-xl active:scale-[0.98] disabled:cursor-wait disabled:opacity-50", children: [loading ? (_jsx(LoaderCircle, { className: "h-5 w-5 animate-spin" })) : (_jsx(FolderOpen, { className: "h-5 w-5" })), loading ? t('emptyState.opening') : t('emptyState.chooseFolder')] }), _jsx("p", { className: "text-muted-foreground/60 mt-3 text-center text-sm", children: t('emptyState.folderHint') })] })), agentReady ? (_jsxs("div", { className: "absolute bottom-8 flex flex-col items-center", style: {
78
+ return (_jsxs("div", { "data-testid": "control-center-empty-state", className: cn('relative flex h-full w-full flex-col items-center justify-center px-8', className), children: [!agentReady ? (_jsx(WelcomeAgentSetup, { onComplete: handleAgentSetupComplete })) : (_jsxs("div", { className: "animate-in fade-in bg-card editorial-shadow flex w-full max-w-lg flex-col items-center rounded-2xl border border-slate-200/50 p-10 duration-300 dark:border-slate-700/50", children: [_jsx("h1", { className: "text-foreground text-center text-4xl font-bold tracking-tight", children: t('emptyState.addProject') }), _jsxs("p", { className: "text-muted-foreground mt-3 text-center text-base leading-relaxed", children: [t('emptyState.addProjectDescription'), _jsx("br", {}), t('emptyState.addProjectDescriptionLine2')] }), _jsxs("div", { className: "mt-8 flex w-full flex-col gap-3", children: [_jsx(AgentAuthBanner, { status: authStatus, onRetry: handleRetryAuth }), _jsx(ToolStatusRow, { label: t('emptyState.git'), status: toolStatus?.git ?? null, missingHint: t('emptyState.gitRequired') }), _jsx(ToolStatusRow, { label: t('emptyState.githubCli'), status: toolStatus?.gh ?? null, missingHint: t('emptyState.githubCliRequired') })] }), _jsxs("button", { type: "button", "data-testid": "empty-state-add-repository", onClick: handlePickerClick, disabled: loading, className: "bg-primary text-primary-foreground hover:bg-primary/90 mt-10 flex w-full cursor-pointer items-center justify-center gap-2.5 rounded-xl px-6 py-4 text-base font-bold tracking-wide shadow-lg transition-all duration-200 hover:-translate-y-0.5 hover:shadow-xl active:scale-[0.98] disabled:cursor-wait disabled:opacity-50", children: [loading ? (_jsx(LoaderCircle, { className: "h-5 w-5 animate-spin" })) : (_jsx(FolderOpen, { className: "h-5 w-5" })), loading ? t('emptyState.opening') : t('emptyState.chooseFolder')] }), _jsx("p", { className: "text-muted-foreground mt-3 text-center text-sm", children: t('emptyState.folderHint') })] })), agentReady ? (_jsxs("div", { className: "absolute bottom-8 flex flex-col items-center", style: {
79
79
  animationDelay: '400ms',
80
80
  animationDuration: '600ms',
81
81
  animationFillMode: 'both',
@@ -1 +1 @@
1
- {"version":3,"file":"features-canvas.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/features-canvas/features-canvas.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAOvF,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,kCAAkC,CAAC;AAEzF,OAAO,KAAK,EAAE,kBAAkB,EAAsB,MAAM,qCAAqC,CAAC;AAGlG,MAAM,MAAM,cAAc,GAAG,eAAe,GAAG,kBAAkB,CAAC;AAElE,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,kBAAkB,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAChE,eAAe,CAAC,EAAE,QAAQ,CAAC;IAC3B,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,cAAc,CAAC,EAAE,KAAK,IAAI,CAAC;IAChE,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACtE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAChD,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAC7C,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC9B;AAID,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,KAAK,EACL,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,YAAY,EACZ,SAAS,EACT,WAAW,EACX,WAAW,EACX,YAAY,EACZ,SAAS,EACT,OAAO,EACP,UAAU,GACX,EAAE,mBAAmB,2CA0IrB"}
1
+ {"version":3,"file":"features-canvas.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/features-canvas/features-canvas.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAOvF,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,kCAAkC,CAAC;AAEzF,OAAO,KAAK,EAAE,kBAAkB,EAAsB,MAAM,qCAAqC,CAAC;AAGlG,MAAM,MAAM,cAAc,GAAG,eAAe,GAAG,kBAAkB,CAAC;AAElE,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,kBAAkB,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAChE,eAAe,CAAC,EAAE,QAAQ,CAAC;IAC3B,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,cAAc,CAAC,EAAE,KAAK,IAAI,CAAC;IAChE,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACtE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAChD,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAC7C,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC9B;AAID,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,KAAK,EACL,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,YAAY,EACZ,SAAS,EACT,WAAW,EACX,WAAW,EACX,YAAY,EACZ,SAAS,EACT,OAAO,EACP,UAAU,GACX,EAAE,mBAAmB,2CA6IrB"}
@@ -71,5 +71,9 @@ export function FeaturesCanvas({ nodes, edges, selectedFeatureId, selectedReposi
71
71
  }, [isEmpty]);
72
72
  const fallbackEmptyState = isEmpty && !emptyState ? (_jsx(EmptyState, { title: t('canvas.noFeatures'), description: t('canvas.noFeaturesDescription'), action: _jsxs(Button, { onClick: onAddFeature, children: [_jsx(Plus, { className: "me-2 h-4 w-4" }), t('canvas.newFeature')] }) })) : null;
73
73
  const overlayContent = emptyState ?? fallbackEmptyState;
74
- return (_jsxs("div", { "data-testid": isEmpty ? 'features-canvas-empty' : 'features-canvas', "data-no-drawer-close": true, className: "dark:bg-background pointer-events-auto relative h-full w-full bg-[#f6f7f8]", children: [_jsxs(ReactFlow, { nodes: enrichedNodes, edges: edges, nodeTypes: nodeTypes, edgeTypes: edgeTypes, onConnect: onConnect, onNodesChange: onNodesChange, onNodeClick: onNodeClick, onPaneClick: onPaneClick, onMoveStart: onCanvasDrag, onMoveEnd: onMoveEnd, defaultViewport: defaultViewport ?? FALLBACK_VIEWPORT, nodesDraggable: false, nodesConnectable: false, elementsSelectable: false, proOptions: { hideAttribution: true }, className: "[&_.react-flow__pane]:!cursor-default", children: [_jsx(Background, { variant: BackgroundVariant.Dots, gap: 24, size: 1, color: "#b8bcc4", className: "dark:[&_circle]:!fill-white/[0.1]" }), !isEmpty && toolbar ? (_jsx(Panel, { position: "top-right", className: "!me-3 !mt-3", children: toolbar })) : null] }), showOverlay && overlayContent ? (_jsx("div", { className: cn('pointer-events-none absolute inset-0 z-10 flex items-center justify-center transition-opacity duration-300', overlayExiting ? 'opacity-0' : 'animate-in fade-in opacity-100 duration-200'), children: _jsx("div", { className: "pointer-events-auto h-full w-full", children: overlayContent }) })) : null] }));
74
+ return (_jsxs("div", { "data-testid": isEmpty ? 'features-canvas-empty' : 'features-canvas', "data-no-drawer-close": true,
75
+ // Canvas background uses --color-background in both modes so it inherits
76
+ // the editorial surface (#f8fafc light / #0b0f19 dark). Previously
77
+ // hardcoded #f6f7f8 in light mode only.
78
+ className: "bg-background pointer-events-auto relative h-full w-full", children: [_jsxs(ReactFlow, { nodes: enrichedNodes, edges: edges, nodeTypes: nodeTypes, edgeTypes: edgeTypes, onConnect: onConnect, onNodesChange: onNodesChange, onNodeClick: onNodeClick, onPaneClick: onPaneClick, onMoveStart: onCanvasDrag, onMoveEnd: onMoveEnd, defaultViewport: defaultViewport ?? FALLBACK_VIEWPORT, nodesDraggable: false, nodesConnectable: false, elementsSelectable: false, proOptions: { hideAttribution: true }, className: "[&_.react-flow__pane]:!cursor-default", children: [_jsx(Background, { variant: BackgroundVariant.Dots, gap: 24, size: 1, color: "#b8bcc4", className: "dark:[&_circle]:!fill-white/[0.1]" }), !isEmpty && toolbar ? (_jsx(Panel, { position: "top-right", className: "!me-3 !mt-3", children: toolbar })) : null] }), showOverlay && overlayContent ? (_jsx("div", { className: cn('pointer-events-none absolute inset-0 z-10 flex items-center justify-center transition-opacity duration-300', overlayExiting ? 'opacity-0' : 'animate-in fade-in opacity-100 duration-200'), children: _jsx("div", { className: "pointer-events-auto h-full w-full", children: overlayContent }) })) : null] }));
75
79
  }
@@ -1,6 +1,6 @@
1
- import type { AgentConfig } from '../../../../../../packages/core/src/domain/generated/output.js';
1
+ import type { Settings } from '../../../../../../packages/core/src/domain/generated/output.js';
2
2
  export interface AgentSettingsSectionProps {
3
- agent: AgentConfig;
3
+ settings: Settings;
4
4
  }
5
- export declare function AgentSettingsSection({ agent }: AgentSettingsSectionProps): import("react/jsx-runtime").JSX.Element;
5
+ export declare function AgentSettingsSection({ settings }: AgentSettingsSectionProps): import("react/jsx-runtime").JSX.Element;
6
6
  //# sourceMappingURL=agent-settings-section.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/agent-settings-section.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAgB3E,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,WAAW,CAAC;CACpB;AAkBD,wBAAgB,oBAAoB,CAAC,EAAE,KAAK,EAAE,EAAE,yBAAyB,2CAoKxE"}
1
+ {"version":3,"file":"agent-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/agent-settings-section.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAa,MAAM,yCAAyC,CAAC;AAInF,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,wBAAgB,oBAAoB,CAAC,EAAE,QAAQ,EAAE,EAAE,yBAAyB,2CA0C3E"}