@tyroneross/navgator 0.2.0 → 0.2.2

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 (362) hide show
  1. package/.claude-plugin/marketplace.json +23 -0
  2. package/.claude-plugin/plugin.json +10 -7
  3. package/CLAUDE.md +72 -0
  4. package/README.md +49 -80
  5. package/dist/cli/index.js +1 -1
  6. package/hooks/hooks.json +5 -5
  7. package/package.json +5 -3
  8. package/scripts/install-plugin.sh +98 -0
  9. package/skills/check/SKILL.md +64 -0
  10. package/skills/connections/SKILL.md +54 -0
  11. package/skills/diagram/SKILL.md +64 -0
  12. package/skills/export/SKILL.md +49 -0
  13. package/skills/impact/SKILL.md +58 -0
  14. package/skills/install/SKILL.md +94 -0
  15. package/skills/scan/SKILL.md +75 -0
  16. package/skills/status/SKILL.md +37 -0
  17. package/skills/ui/SKILL.md +43 -0
  18. package/skills/update/SKILL.md +43 -0
  19. package/web/.next/standalone/web/.next/BUILD_ID +1 -0
  20. package/web/.next/standalone/web/.next/app-path-routes-manifest.json +13 -0
  21. package/web/.next/standalone/web/.next/build-manifest.json +20 -0
  22. package/web/.next/standalone/web/.next/package.json +1 -0
  23. package/web/.next/standalone/web/.next/prerender-manifest.json +88 -0
  24. package/web/.next/standalone/web/.next/required-server-files.json +317 -0
  25. package/web/.next/standalone/web/.next/routes-manifest.json +110 -0
  26. package/web/.next/standalone/web/.next/server/app/_global-error/page/app-paths-manifest.json +3 -0
  27. package/web/.next/standalone/web/.next/server/app/_global-error/page/build-manifest.json +17 -0
  28. package/web/.next/standalone/web/.next/server/app/_global-error/page/next-font-manifest.json +6 -0
  29. package/web/.next/standalone/web/.next/server/app/_global-error/page/react-loadable-manifest.json +1 -0
  30. package/web/.next/standalone/web/.next/server/app/_global-error/page/server-reference-manifest.json +4 -0
  31. package/web/.next/standalone/web/.next/server/app/_global-error/page.js +10 -0
  32. package/web/.next/standalone/web/.next/server/app/_global-error/page.js.map +5 -0
  33. package/web/.next/standalone/web/.next/server/app/_global-error/page.js.nft.json +1 -0
  34. package/web/.next/standalone/web/.next/server/app/_global-error/page_client-reference-manifest.js +2 -0
  35. package/web/.next/standalone/web/.next/server/app/_global-error.html +2 -0
  36. package/web/.next/standalone/web/.next/server/app/_global-error.meta +15 -0
  37. package/web/.next/standalone/web/.next/server/app/_global-error.rsc +12 -0
  38. package/web/.next/standalone/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +5 -0
  39. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_full.segment.rsc +12 -0
  40. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_head.segment.rsc +7 -0
  41. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_index.segment.rsc +4 -0
  42. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
  43. package/web/.next/standalone/web/.next/server/app/_not-found/page/app-paths-manifest.json +3 -0
  44. package/web/.next/standalone/web/.next/server/app/_not-found/page/build-manifest.json +17 -0
  45. package/web/.next/standalone/web/.next/server/app/_not-found/page/next-font-manifest.json +11 -0
  46. package/web/.next/standalone/web/.next/server/app/_not-found/page/react-loadable-manifest.json +1 -0
  47. package/web/.next/standalone/web/.next/server/app/_not-found/page/server-reference-manifest.json +4 -0
  48. package/web/.next/standalone/web/.next/server/app/_not-found/page.js +13 -0
  49. package/web/.next/standalone/web/.next/server/app/_not-found/page.js.map +5 -0
  50. package/web/.next/standalone/web/.next/server/app/_not-found/page.js.nft.json +1 -0
  51. package/web/.next/standalone/web/.next/server/app/_not-found/page_client-reference-manifest.js +2 -0
  52. package/web/.next/standalone/web/.next/server/app/_not-found.html +1 -0
  53. package/web/.next/standalone/web/.next/server/app/_not-found.meta +16 -0
  54. package/web/.next/standalone/web/.next/server/app/_not-found.rsc +17 -0
  55. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_full.segment.rsc +17 -0
  56. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_head.segment.rsc +8 -0
  57. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_index.segment.rsc +8 -0
  58. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +5 -0
  59. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +4 -0
  60. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_tree.segment.rsc +3 -0
  61. package/web/.next/standalone/web/.next/server/app/api/components/route/app-paths-manifest.json +3 -0
  62. package/web/.next/standalone/web/.next/server/app/api/components/route/build-manifest.json +11 -0
  63. package/web/.next/standalone/web/.next/server/app/api/components/route/server-reference-manifest.json +4 -0
  64. package/web/.next/standalone/web/.next/server/app/api/components/route.js +6 -0
  65. package/web/.next/standalone/web/.next/server/app/api/components/route.js.map +5 -0
  66. package/web/.next/standalone/web/.next/server/app/api/components/route.js.nft.json +1 -0
  67. package/web/.next/standalone/web/.next/server/app/api/components/route_client-reference-manifest.js +2 -0
  68. package/web/.next/standalone/web/.next/server/app/api/connections/route/app-paths-manifest.json +3 -0
  69. package/web/.next/standalone/web/.next/server/app/api/connections/route/build-manifest.json +11 -0
  70. package/web/.next/standalone/web/.next/server/app/api/connections/route/server-reference-manifest.json +4 -0
  71. package/web/.next/standalone/web/.next/server/app/api/connections/route.js +6 -0
  72. package/web/.next/standalone/web/.next/server/app/api/connections/route.js.map +5 -0
  73. package/web/.next/standalone/web/.next/server/app/api/connections/route.js.nft.json +1 -0
  74. package/web/.next/standalone/web/.next/server/app/api/connections/route_client-reference-manifest.js +2 -0
  75. package/web/.next/standalone/web/.next/server/app/api/graph/route/app-paths-manifest.json +3 -0
  76. package/web/.next/standalone/web/.next/server/app/api/graph/route/build-manifest.json +11 -0
  77. package/web/.next/standalone/web/.next/server/app/api/graph/route/server-reference-manifest.json +4 -0
  78. package/web/.next/standalone/web/.next/server/app/api/graph/route.js +6 -0
  79. package/web/.next/standalone/web/.next/server/app/api/graph/route.js.map +5 -0
  80. package/web/.next/standalone/web/.next/server/app/api/graph/route.js.nft.json +1 -0
  81. package/web/.next/standalone/web/.next/server/app/api/graph/route_client-reference-manifest.js +2 -0
  82. package/web/.next/standalone/web/.next/server/app/api/projects/route/app-paths-manifest.json +3 -0
  83. package/web/.next/standalone/web/.next/server/app/api/projects/route/build-manifest.json +11 -0
  84. package/web/.next/standalone/web/.next/server/app/api/projects/route/server-reference-manifest.json +4 -0
  85. package/web/.next/standalone/web/.next/server/app/api/projects/route.js +6 -0
  86. package/web/.next/standalone/web/.next/server/app/api/projects/route.js.map +5 -0
  87. package/web/.next/standalone/web/.next/server/app/api/projects/route.js.nft.json +1 -0
  88. package/web/.next/standalone/web/.next/server/app/api/projects/route_client-reference-manifest.js +2 -0
  89. package/web/.next/standalone/web/.next/server/app/api/prompts/route/app-paths-manifest.json +3 -0
  90. package/web/.next/standalone/web/.next/server/app/api/prompts/route/build-manifest.json +11 -0
  91. package/web/.next/standalone/web/.next/server/app/api/prompts/route/server-reference-manifest.json +4 -0
  92. package/web/.next/standalone/web/.next/server/app/api/prompts/route.js +7 -0
  93. package/web/.next/standalone/web/.next/server/app/api/prompts/route.js.map +5 -0
  94. package/web/.next/standalone/web/.next/server/app/api/prompts/route.js.nft.json +1 -0
  95. package/web/.next/standalone/web/.next/server/app/api/prompts/route_client-reference-manifest.js +2 -0
  96. package/web/.next/standalone/web/.next/server/app/api/scan/route/app-paths-manifest.json +3 -0
  97. package/web/.next/standalone/web/.next/server/app/api/scan/route/build-manifest.json +11 -0
  98. package/web/.next/standalone/web/.next/server/app/api/scan/route/server-reference-manifest.json +4 -0
  99. package/web/.next/standalone/web/.next/server/app/api/scan/route.js +6 -0
  100. package/web/.next/standalone/web/.next/server/app/api/scan/route.js.map +5 -0
  101. package/web/.next/standalone/web/.next/server/app/api/scan/route.js.nft.json +1 -0
  102. package/web/.next/standalone/web/.next/server/app/api/scan/route_client-reference-manifest.js +2 -0
  103. package/web/.next/standalone/web/.next/server/app/api/settings/route/app-paths-manifest.json +3 -0
  104. package/web/.next/standalone/web/.next/server/app/api/settings/route/build-manifest.json +11 -0
  105. package/web/.next/standalone/web/.next/server/app/api/settings/route/server-reference-manifest.json +4 -0
  106. package/web/.next/standalone/web/.next/server/app/api/settings/route.js +6 -0
  107. package/web/.next/standalone/web/.next/server/app/api/settings/route.js.map +5 -0
  108. package/web/.next/standalone/web/.next/server/app/api/settings/route.js.nft.json +1 -0
  109. package/web/.next/standalone/web/.next/server/app/api/settings/route_client-reference-manifest.js +2 -0
  110. package/web/.next/standalone/web/.next/server/app/api/status/route/app-paths-manifest.json +3 -0
  111. package/web/.next/standalone/web/.next/server/app/api/status/route/build-manifest.json +11 -0
  112. package/web/.next/standalone/web/.next/server/app/api/status/route/server-reference-manifest.json +4 -0
  113. package/web/.next/standalone/web/.next/server/app/api/status/route.js +6 -0
  114. package/web/.next/standalone/web/.next/server/app/api/status/route.js.map +5 -0
  115. package/web/.next/standalone/web/.next/server/app/api/status/route.js.nft.json +1 -0
  116. package/web/.next/standalone/web/.next/server/app/api/status/route_client-reference-manifest.js +2 -0
  117. package/web/.next/standalone/web/.next/server/app/index.html +1 -0
  118. package/web/.next/standalone/web/.next/server/app/index.meta +14 -0
  119. package/web/.next/standalone/web/.next/server/app/index.rsc +23 -0
  120. package/web/.next/standalone/web/.next/server/app/index.segments/__PAGE__.segment.rsc +9 -0
  121. package/web/.next/standalone/web/.next/server/app/index.segments/_full.segment.rsc +23 -0
  122. package/web/.next/standalone/web/.next/server/app/index.segments/_head.segment.rsc +8 -0
  123. package/web/.next/standalone/web/.next/server/app/index.segments/_index.segment.rsc +8 -0
  124. package/web/.next/standalone/web/.next/server/app/index.segments/_tree.segment.rsc +5 -0
  125. package/web/.next/standalone/web/.next/server/app/page/app-paths-manifest.json +3 -0
  126. package/web/.next/standalone/web/.next/server/app/page/build-manifest.json +17 -0
  127. package/web/.next/standalone/web/.next/server/app/page/next-font-manifest.json +11 -0
  128. package/web/.next/standalone/web/.next/server/app/page/react-loadable-manifest.json +1 -0
  129. package/web/.next/standalone/web/.next/server/app/page/server-reference-manifest.json +4 -0
  130. package/web/.next/standalone/web/.next/server/app/page.js +15 -0
  131. package/web/.next/standalone/web/.next/server/app/page.js.map +5 -0
  132. package/web/.next/standalone/web/.next/server/app/page.js.nft.json +1 -0
  133. package/web/.next/standalone/web/.next/server/app/page_client-reference-manifest.js +2 -0
  134. package/web/.next/standalone/web/.next/server/app-paths-manifest.json +13 -0
  135. package/web/.next/standalone/web/.next/server/chunks/2374f_next_dist_esm_build_templates_app-route_0bb4e66a.js +19 -0
  136. package/web/.next/standalone/web/.next/server/chunks/[root-of-the-server]__006b837d._.js +3 -0
  137. package/web/.next/standalone/web/.next/server/chunks/[root-of-the-server]__1ab91221._.js +3 -0
  138. package/web/.next/standalone/web/.next/server/chunks/[root-of-the-server]__2e09fec9._.js +3 -0
  139. package/web/.next/standalone/web/.next/server/chunks/[root-of-the-server]__38d0390f._.js +3 -0
  140. package/web/.next/standalone/web/.next/server/chunks/[root-of-the-server]__539ef30d._.js +3 -0
  141. package/web/.next/standalone/web/.next/server/chunks/[root-of-the-server]__594bcf20._.js +3 -0
  142. package/web/.next/standalone/web/.next/server/chunks/[root-of-the-server]__b888fadf._.js +3 -0
  143. package/web/.next/standalone/web/.next/server/chunks/[root-of-the-server]__f3450c22._.js +21 -0
  144. package/web/.next/standalone/web/.next/server/chunks/[root-of-the-server]__fa2ec862._.js +3 -0
  145. package/web/.next/standalone/web/.next/server/chunks/[turbopack]_runtime.js +770 -0
  146. package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_e6039567._.js +6 -0
  147. package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_next_dist_09351209._.js +6 -0
  148. package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_next_dist_222be7ae._.js +6 -0
  149. package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_next_dist_2346e1b3._.js +3 -0
  150. package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_next_dist_cec86455._.js +4 -0
  151. package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_next_dist_client_components_9c5d1a14._.js +3 -0
  152. package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_next_dist_client_components_builtin_forbidden_8eae0c85.js +3 -0
  153. package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_next_dist_client_components_builtin_global-error_81159d60.js +3 -0
  154. package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_next_dist_client_components_builtin_unauthorized_7d34a31c.js +3 -0
  155. package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_next_dist_e03afa0e._.js +3 -0
  156. package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_next_dist_esm_build_templates_app-page_2c8d71b9.js +4 -0
  157. package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_next_dist_server_route-modules_app-page_vendored_ssr_react-dom_8910f04c.js +3 -0
  158. package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__1a0663e6._.js +3 -0
  159. package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__4306eafc._.js +3 -0
  160. package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__44903626._.js +3 -0
  161. package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__60278e3f._.js +3 -0
  162. package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__61942f24._.js +4 -0
  163. package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__8c45c3c9._.js +3 -0
  164. package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__9a2f110d._.js +3 -0
  165. package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__ed07bd88._.js +3 -0
  166. package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__f2db61af._.js +3 -0
  167. package/web/.next/standalone/web/.next/server/chunks/ssr/[turbopack]_runtime.js +770 -0
  168. package/web/.next/standalone/web/.next/server/chunks/ssr/web_0103e631._.js +4 -0
  169. package/web/.next/standalone/web/.next/server/chunks/ssr/web_171de0df._.js +14 -0
  170. package/web/.next/standalone/web/.next/server/chunks/ssr/web__next-internal_server_app__global-error_page_actions_2a1e94d4.js +3 -0
  171. package/web/.next/standalone/web/.next/server/chunks/ssr/web__next-internal_server_app__not-found_page_actions_9eaa9845.js +3 -0
  172. package/web/.next/standalone/web/.next/server/chunks/ssr/web__next-internal_server_app_page_actions_ec26bf28.js +3 -0
  173. package/web/.next/standalone/web/.next/server/chunks/web__next-internal_server_app_api_components_route_actions_c88bf2a6.js +3 -0
  174. package/web/.next/standalone/web/.next/server/chunks/web__next-internal_server_app_api_connections_route_actions_b1d5e95a.js +3 -0
  175. package/web/.next/standalone/web/.next/server/chunks/web__next-internal_server_app_api_graph_route_actions_e2dd052c.js +3 -0
  176. package/web/.next/standalone/web/.next/server/chunks/web__next-internal_server_app_api_projects_route_actions_3f671cbb.js +3 -0
  177. package/web/.next/standalone/web/.next/server/chunks/web__next-internal_server_app_api_prompts_route_actions_85b56166.js +3 -0
  178. package/web/.next/standalone/web/.next/server/chunks/web__next-internal_server_app_api_scan_route_actions_861cde8d.js +3 -0
  179. package/web/.next/standalone/web/.next/server/chunks/web__next-internal_server_app_api_settings_route_actions_e19026ae.js +3 -0
  180. package/web/.next/standalone/web/.next/server/chunks/web__next-internal_server_app_api_status_route_actions_8b8c6c89.js +3 -0
  181. package/web/.next/standalone/web/.next/server/functions-config-manifest.json +4 -0
  182. package/web/.next/standalone/web/.next/server/middleware-build-manifest.js +21 -0
  183. package/web/.next/standalone/web/.next/server/middleware-manifest.json +6 -0
  184. package/web/.next/standalone/web/.next/server/next-font-manifest.js +1 -0
  185. package/web/.next/standalone/web/.next/server/next-font-manifest.json +15 -0
  186. package/web/.next/standalone/web/.next/server/pages/404.html +1 -0
  187. package/web/.next/standalone/web/.next/server/pages/500.html +2 -0
  188. package/web/.next/standalone/web/.next/server/pages-manifest.json +4 -0
  189. package/web/.next/standalone/web/.next/server/server-reference-manifest.js +1 -0
  190. package/web/.next/standalone/web/.next/server/server-reference-manifest.json +5 -0
  191. package/web/.next/standalone/web/.next/static/P-ZMQO7_Wnj487ks3guqa/_buildManifest.js +11 -0
  192. package/web/.next/standalone/web/.next/static/P-ZMQO7_Wnj487ks3guqa/_clientMiddlewareManifest.json +1 -0
  193. package/web/.next/standalone/web/.next/static/P-ZMQO7_Wnj487ks3guqa/_ssgManifest.js +1 -0
  194. package/web/.next/standalone/web/.next/static/chunks/062ae79751df2759.js +1 -0
  195. package/web/.next/standalone/web/.next/static/chunks/159889e17b2cf1f8.js +2 -0
  196. package/web/.next/standalone/web/.next/static/chunks/458d6f37339fc069.js +1 -0
  197. package/web/.next/standalone/web/.next/static/chunks/6d3d39425a878d7f.js +1 -0
  198. package/web/.next/standalone/web/.next/static/chunks/8a80e7184ad3a13f.css +2 -0
  199. package/web/.next/standalone/web/.next/static/chunks/a6dad97d9634a72d.js +1 -0
  200. package/web/.next/standalone/web/.next/static/chunks/c056475f5f4424b6.css +1 -0
  201. package/web/.next/standalone/web/.next/static/chunks/c57fee8cce8d7cb9.js +1 -0
  202. package/web/.next/standalone/web/.next/static/chunks/cb3513192b63e480.js +12 -0
  203. package/web/.next/standalone/web/.next/static/chunks/dd22b5f2beb2cc31.js +1 -0
  204. package/web/.next/standalone/web/.next/static/chunks/e0affeef0ddb9a97.js +4 -0
  205. package/web/.next/standalone/web/.next/static/chunks/f74a6859e1c4d5e3.js +1 -0
  206. package/web/.next/standalone/web/.next/static/chunks/turbopack-c0c89f9e6f0a38c4.js +3 -0
  207. package/web/.next/standalone/web/.next/static/media/4fa387ec64143e14-s.c1fdd6c2.woff2 +0 -0
  208. package/web/.next/standalone/web/.next/static/media/7178b3e590c64307-s.b97b3418.woff2 +0 -0
  209. package/web/.next/standalone/web/.next/static/media/797e433ab948586e-s.p.dbea232f.woff2 +0 -0
  210. package/web/.next/standalone/web/.next/static/media/8a480f0b521d4e75-s.8e0177b5.woff2 +0 -0
  211. package/web/.next/standalone/web/.next/static/media/bbc41e54d2fcbd21-s.799d8ef8.woff2 +0 -0
  212. package/web/.next/standalone/web/.next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2 +0 -0
  213. package/web/.next/standalone/web/app/api/components/route.ts +252 -0
  214. package/web/.next/standalone/web/app/api/connections/route.ts +319 -0
  215. package/web/.next/standalone/web/app/api/graph/route.ts +235 -0
  216. package/web/.next/standalone/web/app/api/projects/route.ts +221 -0
  217. package/web/.next/standalone/web/app/api/prompts/route.ts +328 -0
  218. package/web/.next/standalone/web/app/api/scan/route.ts +108 -0
  219. package/web/.next/standalone/web/app/api/settings/route.ts +198 -0
  220. package/web/.next/standalone/web/app/api/status/route.ts +169 -0
  221. package/web/.next/standalone/web/app/globals.css +99 -0
  222. package/web/.next/standalone/web/app/layout.tsx +49 -0
  223. package/web/.next/standalone/web/app/page.tsx +94 -0
  224. package/web/.next/standalone/web/components/components-panel.tsx +240 -0
  225. package/web/.next/standalone/web/components/connections-panel.tsx +220 -0
  226. package/web/.next/standalone/web/components/diagram-view.tsx +735 -0
  227. package/web/.next/standalone/web/components/header.tsx +225 -0
  228. package/web/.next/standalone/web/components/impact-analysis.tsx +358 -0
  229. package/web/.next/standalone/web/components/llm-tracking-panel.tsx +1483 -0
  230. package/web/.next/standalone/web/components/settings-panel.tsx +671 -0
  231. package/web/.next/standalone/web/components/sidebar.tsx +74 -0
  232. package/web/.next/standalone/web/components/status-overview.tsx +326 -0
  233. package/web/.next/standalone/web/components/theme-provider.tsx +11 -0
  234. package/web/.next/standalone/web/components/ui/accordion.tsx +66 -0
  235. package/web/.next/standalone/web/components/ui/alert-dialog.tsx +157 -0
  236. package/web/.next/standalone/web/components/ui/alert.tsx +66 -0
  237. package/web/.next/standalone/web/components/ui/aspect-ratio.tsx +11 -0
  238. package/web/.next/standalone/web/components/ui/avatar.tsx +53 -0
  239. package/web/.next/standalone/web/components/ui/badge.tsx +46 -0
  240. package/web/.next/standalone/web/components/ui/breadcrumb.tsx +109 -0
  241. package/web/.next/standalone/web/components/ui/button-group.tsx +83 -0
  242. package/web/.next/standalone/web/components/ui/button.tsx +60 -0
  243. package/web/.next/standalone/web/components/ui/calendar.tsx +213 -0
  244. package/web/.next/standalone/web/components/ui/card.tsx +92 -0
  245. package/web/.next/standalone/web/components/ui/carousel.tsx +241 -0
  246. package/web/.next/standalone/web/components/ui/chart.tsx +353 -0
  247. package/web/.next/standalone/web/components/ui/checkbox.tsx +32 -0
  248. package/web/.next/standalone/web/components/ui/collapsible.tsx +33 -0
  249. package/web/.next/standalone/web/components/ui/command.tsx +184 -0
  250. package/web/.next/standalone/web/components/ui/context-menu.tsx +252 -0
  251. package/web/.next/standalone/web/components/ui/dialog.tsx +143 -0
  252. package/web/.next/standalone/web/components/ui/drawer.tsx +135 -0
  253. package/web/.next/standalone/web/components/ui/dropdown-menu.tsx +257 -0
  254. package/web/.next/standalone/web/components/ui/empty.tsx +104 -0
  255. package/web/.next/standalone/web/components/ui/field.tsx +244 -0
  256. package/web/.next/standalone/web/components/ui/form.tsx +167 -0
  257. package/web/.next/standalone/web/components/ui/hover-card.tsx +44 -0
  258. package/web/.next/standalone/web/components/ui/input-group.tsx +169 -0
  259. package/web/.next/standalone/web/components/ui/input-otp.tsx +77 -0
  260. package/web/.next/standalone/web/components/ui/input.tsx +21 -0
  261. package/web/.next/standalone/web/components/ui/item.tsx +193 -0
  262. package/web/.next/standalone/web/components/ui/kbd.tsx +28 -0
  263. package/web/.next/standalone/web/components/ui/label.tsx +24 -0
  264. package/web/.next/standalone/web/components/ui/menubar.tsx +276 -0
  265. package/web/.next/standalone/web/components/ui/navigation-menu.tsx +166 -0
  266. package/web/.next/standalone/web/components/ui/pagination.tsx +127 -0
  267. package/web/.next/standalone/web/components/ui/popover.tsx +48 -0
  268. package/web/.next/standalone/web/components/ui/progress.tsx +31 -0
  269. package/web/.next/standalone/web/components/ui/radio-group.tsx +45 -0
  270. package/web/.next/standalone/web/components/ui/resizable.tsx +56 -0
  271. package/web/.next/standalone/web/components/ui/scroll-area.tsx +58 -0
  272. package/web/.next/standalone/web/components/ui/select.tsx +185 -0
  273. package/web/.next/standalone/web/components/ui/separator.tsx +28 -0
  274. package/web/.next/standalone/web/components/ui/sheet.tsx +139 -0
  275. package/web/.next/standalone/web/components/ui/sidebar.tsx +726 -0
  276. package/web/.next/standalone/web/components/ui/skeleton.tsx +13 -0
  277. package/web/.next/standalone/web/components/ui/slider.tsx +63 -0
  278. package/web/.next/standalone/web/components/ui/sonner.tsx +25 -0
  279. package/web/.next/standalone/web/components/ui/spinner.tsx +16 -0
  280. package/web/.next/standalone/web/components/ui/switch.tsx +31 -0
  281. package/web/.next/standalone/web/components/ui/table.tsx +116 -0
  282. package/web/.next/standalone/web/components/ui/tabs.tsx +66 -0
  283. package/web/.next/standalone/web/components/ui/textarea.tsx +18 -0
  284. package/web/.next/standalone/web/components/ui/toast.tsx +129 -0
  285. package/web/.next/standalone/web/components/ui/toaster.tsx +35 -0
  286. package/web/.next/standalone/web/components/ui/toggle-group.tsx +73 -0
  287. package/web/.next/standalone/web/components/ui/toggle.tsx +47 -0
  288. package/web/.next/standalone/web/components/ui/tooltip.tsx +61 -0
  289. package/web/.next/standalone/web/components/ui/use-mobile.tsx +19 -0
  290. package/web/.next/standalone/web/components/ui/use-toast.ts +191 -0
  291. package/web/.next/standalone/web/components.json +21 -0
  292. package/web/.next/standalone/web/hooks/use-mobile.ts +19 -0
  293. package/web/.next/standalone/web/hooks/use-toast.ts +191 -0
  294. package/web/.next/standalone/web/lib/hooks/index.ts +8 -0
  295. package/web/.next/standalone/web/lib/hooks/use-components.ts +83 -0
  296. package/web/.next/standalone/web/lib/hooks/use-connections.ts +83 -0
  297. package/web/.next/standalone/web/lib/hooks/use-projects.ts +116 -0
  298. package/web/.next/standalone/web/lib/hooks/use-prompts.ts +122 -0
  299. package/web/.next/standalone/web/lib/hooks/use-settings.ts +135 -0
  300. package/web/.next/standalone/web/lib/hooks/use-status.ts +80 -0
  301. package/web/.next/standalone/web/lib/project-context.tsx +46 -0
  302. package/web/.next/standalone/web/lib/transform.ts +625 -0
  303. package/web/.next/standalone/web/lib/types.ts +198 -0
  304. package/web/.next/standalone/web/lib/utils.ts +6 -0
  305. package/web/.next/standalone/web/next.config.mjs +12 -0
  306. package/web/.next/standalone/web/package-lock.json +3987 -0
  307. package/web/.next/standalone/web/package.json +73 -0
  308. package/web/.next/standalone/web/pnpm-lock.yaml +5 -0
  309. package/web/.next/standalone/web/postcss.config.mjs +8 -0
  310. package/web/.next/standalone/web/public/apple-icon.png +0 -0
  311. package/web/.next/standalone/web/public/icon-dark-32x32.png +0 -0
  312. package/web/.next/standalone/web/public/icon-light-32x32.png +0 -0
  313. package/web/.next/standalone/web/public/icon.svg +26 -0
  314. package/web/.next/standalone/web/public/navgator-logo.png +0 -0
  315. package/web/.next/standalone/web/public/placeholder-logo.png +0 -0
  316. package/web/.next/standalone/web/public/placeholder-logo.svg +1 -0
  317. package/web/.next/standalone/web/public/placeholder-user.jpg +0 -0
  318. package/web/.next/standalone/web/public/placeholder.jpg +0 -0
  319. package/web/.next/standalone/web/public/placeholder.svg +1 -0
  320. package/web/.next/standalone/web/public/public/apple-icon.png +0 -0
  321. package/web/.next/standalone/web/public/public/icon-dark-32x32.png +0 -0
  322. package/web/.next/standalone/web/public/public/icon-light-32x32.png +0 -0
  323. package/web/.next/standalone/web/public/public/icon.svg +26 -0
  324. package/web/.next/standalone/web/public/public/navgator-logo.png +0 -0
  325. package/web/.next/standalone/web/public/public/placeholder-logo.png +0 -0
  326. package/web/.next/standalone/web/public/public/placeholder-logo.svg +1 -0
  327. package/web/.next/standalone/web/public/public/placeholder-user.jpg +0 -0
  328. package/web/.next/standalone/web/public/public/placeholder.jpg +0 -0
  329. package/web/.next/standalone/web/public/public/placeholder.svg +1 -0
  330. package/web/.next/standalone/web/server.js +38 -0
  331. package/web/.next/standalone/web/styles/globals.css +125 -0
  332. package/web/.next/standalone/web/tsconfig.json +41 -0
  333. package/web/.next/static/P-ZMQO7_Wnj487ks3guqa/_buildManifest.js +11 -0
  334. package/web/.next/static/P-ZMQO7_Wnj487ks3guqa/_clientMiddlewareManifest.json +1 -0
  335. package/web/.next/static/P-ZMQO7_Wnj487ks3guqa/_ssgManifest.js +1 -0
  336. package/web/.next/static/chunks/062ae79751df2759.js +1 -0
  337. package/web/.next/static/chunks/159889e17b2cf1f8.js +2 -0
  338. package/web/.next/static/chunks/458d6f37339fc069.js +1 -0
  339. package/web/.next/static/chunks/6d3d39425a878d7f.js +1 -0
  340. package/web/.next/static/chunks/8a80e7184ad3a13f.css +2 -0
  341. package/web/.next/static/chunks/a6dad97d9634a72d.js +1 -0
  342. package/web/.next/static/chunks/c056475f5f4424b6.css +1 -0
  343. package/web/.next/static/chunks/c57fee8cce8d7cb9.js +1 -0
  344. package/web/.next/static/chunks/cb3513192b63e480.js +12 -0
  345. package/web/.next/static/chunks/dd22b5f2beb2cc31.js +1 -0
  346. package/web/.next/static/chunks/e0affeef0ddb9a97.js +4 -0
  347. package/web/.next/static/chunks/f74a6859e1c4d5e3.js +1 -0
  348. package/web/.next/static/chunks/turbopack-c0c89f9e6f0a38c4.js +3 -0
  349. package/web/.next/static/media/4fa387ec64143e14-s.c1fdd6c2.woff2 +0 -0
  350. package/web/.next/static/media/7178b3e590c64307-s.b97b3418.woff2 +0 -0
  351. package/web/.next/static/media/797e433ab948586e-s.p.dbea232f.woff2 +0 -0
  352. package/web/.next/static/media/8a480f0b521d4e75-s.8e0177b5.woff2 +0 -0
  353. package/web/.next/static/media/bbc41e54d2fcbd21-s.799d8ef8.woff2 +0 -0
  354. package/web/.next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2 +0 -0
  355. package/commands/nav-check.md +0 -64
  356. package/commands/nav-connections.md +0 -58
  357. package/commands/nav-diagram.md +0 -106
  358. package/commands/nav-export.md +0 -71
  359. package/commands/nav-impact.md +0 -58
  360. package/commands/nav-scan.md +0 -46
  361. package/commands/nav-status.md +0 -44
  362. package/skills/architecture-awareness/SKILL.md +0 -141
@@ -0,0 +1,671 @@
1
+ "use client"
2
+
3
+ import { useState, useEffect } from "react"
4
+ import { Card, CardContent, CardHeader, CardTitle, CardDescription } from "@/components/ui/card"
5
+ import { Button } from "@/components/ui/button"
6
+ import { Input } from "@/components/ui/input"
7
+ import { Label } from "@/components/ui/label"
8
+ import { Switch } from "@/components/ui/switch"
9
+ import { Badge } from "@/components/ui/badge"
10
+ import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"
11
+ import {
12
+ Select,
13
+ SelectContent,
14
+ SelectItem,
15
+ SelectTrigger,
16
+ SelectValue,
17
+ } from "@/components/ui/select"
18
+ import {
19
+ FolderOpen,
20
+ GitBranch,
21
+ Bell,
22
+ Shield,
23
+ Palette,
24
+ Terminal,
25
+ Save,
26
+ RotateCcw,
27
+ Check,
28
+ AlertCircle,
29
+ Info,
30
+ Loader2,
31
+ } from "lucide-react"
32
+ import {
33
+ useSettings,
34
+ type ScanConfig,
35
+ type DetectionConfig,
36
+ type NotificationConfig,
37
+ type DisplayConfig,
38
+ } from "@/lib/hooks"
39
+
40
+ const DEFAULT_SCAN: ScanConfig = {
41
+ rootPath: "./src",
42
+ excludePaths: ["node_modules", ".git", "dist", "build", ".next"],
43
+ includePatterns: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"],
44
+ scanDepth: 10,
45
+ watchMode: false,
46
+ autoScanOnChange: true,
47
+ }
48
+
49
+ const DEFAULT_DETECTION: DetectionConfig = {
50
+ npm: true,
51
+ database: true,
52
+ service: true,
53
+ queue: true,
54
+ cache: true,
55
+ storage: true,
56
+ auth: true,
57
+ llm: true,
58
+ staticAnalysis: true,
59
+ environmentVariables: true,
60
+ configFiles: true,
61
+ }
62
+
63
+ const DEFAULT_NOTIFICATIONS: NotificationConfig = {
64
+ enabled: true,
65
+ onNewConnection: false,
66
+ onBreakingChange: true,
67
+ onSecurityIssue: true,
68
+ slackWebhook: "",
69
+ }
70
+
71
+ const DEFAULT_DISPLAY: DisplayConfig = {
72
+ theme: "dark",
73
+ compactMode: false,
74
+ showLineNumbers: true,
75
+ diagramDirection: "TB",
76
+ maxVisibleConnections: 50,
77
+ }
78
+
79
+ export function SettingsPanel() {
80
+ const { settings, isLoading, isSaving, save } = useSettings({ autoFetch: true })
81
+ const [saved, setSaved] = useState(false)
82
+
83
+ const [scanConfig, setScanConfig] = useState<ScanConfig>(DEFAULT_SCAN)
84
+ const [detectionConfig, setDetectionConfig] = useState<DetectionConfig>(DEFAULT_DETECTION)
85
+ const [notificationConfig, setNotificationConfig] = useState<NotificationConfig>(DEFAULT_NOTIFICATIONS)
86
+ const [displayConfig, setDisplayConfig] = useState<DisplayConfig>(DEFAULT_DISPLAY)
87
+
88
+ // Sync local state when settings load from API
89
+ useEffect(() => {
90
+ if (settings) {
91
+ setScanConfig(settings.scan)
92
+ setDetectionConfig(settings.detection)
93
+ setNotificationConfig(settings.notifications)
94
+ setDisplayConfig(settings.display)
95
+ }
96
+ }, [settings])
97
+
98
+ const handleSave = async () => {
99
+ const success = await save({
100
+ scan: scanConfig,
101
+ detection: detectionConfig,
102
+ notifications: notificationConfig,
103
+ display: displayConfig,
104
+ })
105
+ if (success) {
106
+ setSaved(true)
107
+ setTimeout(() => setSaved(false), 2000)
108
+ }
109
+ }
110
+
111
+ const handleReset = async () => {
112
+ setScanConfig(DEFAULT_SCAN)
113
+ setDetectionConfig(DEFAULT_DETECTION)
114
+ setNotificationConfig(DEFAULT_NOTIFICATIONS)
115
+ setDisplayConfig(DEFAULT_DISPLAY)
116
+ await save({
117
+ scan: DEFAULT_SCAN,
118
+ detection: DEFAULT_DETECTION,
119
+ notifications: DEFAULT_NOTIFICATIONS,
120
+ display: DEFAULT_DISPLAY,
121
+ })
122
+ }
123
+
124
+ if (isLoading && !settings) {
125
+ return (
126
+ <div className="flex h-64 items-center justify-center">
127
+ <Loader2 className="h-8 w-8 animate-spin text-muted-foreground" />
128
+ </div>
129
+ )
130
+ }
131
+
132
+ return (
133
+ <div className="flex flex-col gap-6">
134
+ <div className="flex items-start justify-between">
135
+ <div>
136
+ <h1 className="text-2xl font-semibold text-foreground">Settings</h1>
137
+ <p className="text-sm text-muted-foreground">
138
+ Configure NavGator scanning behavior and display preferences
139
+ </p>
140
+ </div>
141
+ <div className="flex items-center gap-2">
142
+ <Button variant="outline" size="sm" className="gap-2 bg-transparent" onClick={handleReset}>
143
+ <RotateCcw className="h-4 w-4" />
144
+ Reset
145
+ </Button>
146
+ <Button size="sm" className="gap-2" onClick={handleSave} disabled={isSaving}>
147
+ {saved ? <Check className="h-4 w-4" /> : isSaving ? <Loader2 className="h-4 w-4 animate-spin" /> : <Save className="h-4 w-4" />}
148
+ {saved ? "Saved" : isSaving ? "Saving..." : "Save Changes"}
149
+ </Button>
150
+ </div>
151
+ </div>
152
+
153
+ <Tabs defaultValue="scanning" className="w-full">
154
+ <TabsList className="bg-secondary">
155
+ <TabsTrigger value="scanning" className="gap-2">
156
+ <FolderOpen className="h-4 w-4" />
157
+ Scanning
158
+ </TabsTrigger>
159
+ <TabsTrigger value="detection" className="gap-2">
160
+ <GitBranch className="h-4 w-4" />
161
+ Detection
162
+ </TabsTrigger>
163
+ <TabsTrigger value="notifications" className="gap-2">
164
+ <Bell className="h-4 w-4" />
165
+ Notifications
166
+ </TabsTrigger>
167
+ <TabsTrigger value="display" className="gap-2">
168
+ <Palette className="h-4 w-4" />
169
+ Display
170
+ </TabsTrigger>
171
+ </TabsList>
172
+
173
+ {/* Scanning Settings */}
174
+ <TabsContent value="scanning" className="mt-4">
175
+ <div className="grid gap-4">
176
+ <Card className="border-border bg-card">
177
+ <CardHeader>
178
+ <CardTitle className="text-base">Scan Configuration</CardTitle>
179
+ <CardDescription>
180
+ Configure which files and directories NavGator should analyze
181
+ </CardDescription>
182
+ </CardHeader>
183
+ <CardContent className="flex flex-col gap-6">
184
+ <div className="grid gap-2">
185
+ <Label htmlFor="rootPath">Root Path</Label>
186
+ <Input
187
+ id="rootPath"
188
+ value={scanConfig.rootPath}
189
+ onChange={(e) =>
190
+ setScanConfig((c) => ({ ...c, rootPath: e.target.value }))
191
+ }
192
+ className="bg-secondary font-mono"
193
+ placeholder="./src"
194
+ />
195
+ <p className="text-xs text-muted-foreground">
196
+ Base directory for scanning (relative to project root)
197
+ </p>
198
+ </div>
199
+
200
+ <div className="grid gap-2">
201
+ <Label>Exclude Paths</Label>
202
+ <div className="flex flex-wrap gap-2">
203
+ {scanConfig.excludePaths.map((path, idx) => (
204
+ <Badge
205
+ key={idx}
206
+ variant="secondary"
207
+ className="gap-1 font-mono text-xs"
208
+ >
209
+ {path}
210
+ <button
211
+ type="button"
212
+ className="ml-1 hover:text-destructive"
213
+ onClick={() =>
214
+ setScanConfig((c) => ({
215
+ ...c,
216
+ excludePaths: c.excludePaths.filter((_, i) => i !== idx),
217
+ }))
218
+ }
219
+ >
220
+ x
221
+ </button>
222
+ </Badge>
223
+ ))}
224
+ <Input
225
+ placeholder="Add path..."
226
+ className="h-6 w-32 bg-secondary text-xs"
227
+ onKeyDown={(e) => {
228
+ if (e.key === "Enter") {
229
+ const value = e.currentTarget.value.trim()
230
+ if (value) {
231
+ setScanConfig((c) => ({
232
+ ...c,
233
+ excludePaths: [...c.excludePaths, value],
234
+ }))
235
+ e.currentTarget.value = ""
236
+ }
237
+ }
238
+ }}
239
+ />
240
+ </div>
241
+ </div>
242
+
243
+ <div className="grid gap-2">
244
+ <Label>Include Patterns</Label>
245
+ <div className="flex flex-wrap gap-2">
246
+ {scanConfig.includePatterns.map((pattern, idx) => (
247
+ <Badge
248
+ key={idx}
249
+ variant="outline"
250
+ className="gap-1 font-mono text-xs"
251
+ >
252
+ {pattern}
253
+ <button
254
+ type="button"
255
+ className="ml-1 hover:text-destructive"
256
+ onClick={() =>
257
+ setScanConfig((c) => ({
258
+ ...c,
259
+ includePatterns: c.includePatterns.filter(
260
+ (_, i) => i !== idx
261
+ ),
262
+ }))
263
+ }
264
+ >
265
+ x
266
+ </button>
267
+ </Badge>
268
+ ))}
269
+ </div>
270
+ <p className="text-xs text-muted-foreground">
271
+ Glob patterns for files to include in analysis
272
+ </p>
273
+ </div>
274
+
275
+ <div className="grid gap-2">
276
+ <Label htmlFor="scanDepth">Scan Depth</Label>
277
+ <Select
278
+ value={scanConfig.scanDepth.toString()}
279
+ onValueChange={(v) =>
280
+ setScanConfig((c) => ({ ...c, scanDepth: Number.parseInt(v) }))
281
+ }
282
+ >
283
+ <SelectTrigger className="w-32 bg-secondary">
284
+ <SelectValue />
285
+ </SelectTrigger>
286
+ <SelectContent>
287
+ <SelectItem value="5">5 levels</SelectItem>
288
+ <SelectItem value="10">10 levels</SelectItem>
289
+ <SelectItem value="15">15 levels</SelectItem>
290
+ <SelectItem value="20">20 levels</SelectItem>
291
+ <SelectItem value="-1">Unlimited</SelectItem>
292
+ </SelectContent>
293
+ </Select>
294
+ <p className="text-xs text-muted-foreground">
295
+ Maximum directory depth to traverse
296
+ </p>
297
+ </div>
298
+ </CardContent>
299
+ </Card>
300
+
301
+ <Card className="border-border bg-card">
302
+ <CardHeader>
303
+ <CardTitle className="text-base">Watch Mode</CardTitle>
304
+ <CardDescription>
305
+ Automatically detect changes in your codebase
306
+ </CardDescription>
307
+ </CardHeader>
308
+ <CardContent className="flex flex-col gap-4">
309
+ <div className="flex items-center justify-between">
310
+ <div>
311
+ <Label>Enable Watch Mode</Label>
312
+ <p className="text-xs text-muted-foreground">
313
+ Monitor file changes in real-time
314
+ </p>
315
+ </div>
316
+ <Switch
317
+ checked={scanConfig.watchMode}
318
+ onCheckedChange={(v) =>
319
+ setScanConfig((c) => ({ ...c, watchMode: v }))
320
+ }
321
+ />
322
+ </div>
323
+
324
+ <div className="flex items-center justify-between">
325
+ <div>
326
+ <Label>Auto-scan on Change</Label>
327
+ <p className="text-xs text-muted-foreground">
328
+ Automatically re-analyze when files change
329
+ </p>
330
+ </div>
331
+ <Switch
332
+ checked={scanConfig.autoScanOnChange}
333
+ onCheckedChange={(v) =>
334
+ setScanConfig((c) => ({ ...c, autoScanOnChange: v }))
335
+ }
336
+ />
337
+ </div>
338
+ </CardContent>
339
+ </Card>
340
+ </div>
341
+ </TabsContent>
342
+
343
+ {/* Detection Settings */}
344
+ <TabsContent value="detection" className="mt-4">
345
+ <div className="grid gap-4">
346
+ <Card className="border-border bg-card">
347
+ <CardHeader>
348
+ <CardTitle className="text-base">Component Detection</CardTitle>
349
+ <CardDescription>
350
+ Configure what types of components NavGator should detect
351
+ </CardDescription>
352
+ </CardHeader>
353
+ <CardContent className="flex flex-col gap-4">
354
+ <div className="grid grid-cols-2 gap-4">
355
+ {([
356
+ { id: "npm" as const, label: "NPM Packages", desc: "Detect package.json dependencies" },
357
+ { id: "database" as const, label: "Databases", desc: "PostgreSQL, MySQL, MongoDB, etc." },
358
+ { id: "service" as const, label: "External Services", desc: "APIs, webhooks, third-party services" },
359
+ { id: "queue" as const, label: "Message Queues", desc: "Redis, RabbitMQ, SQS, etc." },
360
+ { id: "cache" as const, label: "Caching", desc: "Redis, Memcached, CDN caches" },
361
+ { id: "storage" as const, label: "File Storage", desc: "S3, GCS, local filesystem" },
362
+ { id: "auth" as const, label: "Authentication", desc: "OAuth, JWT, session providers" },
363
+ { id: "llm" as const, label: "LLM Calls", desc: "AI/ML model invocations" },
364
+ ] as const).map((item) => (
365
+ <div
366
+ key={item.id}
367
+ className="flex items-start justify-between rounded-lg border border-border bg-secondary/50 p-3"
368
+ >
369
+ <div>
370
+ <Label>{item.label}</Label>
371
+ <p className="text-xs text-muted-foreground">{item.desc}</p>
372
+ </div>
373
+ <Switch
374
+ checked={detectionConfig[item.id]}
375
+ onCheckedChange={(v) =>
376
+ setDetectionConfig((c) => ({ ...c, [item.id]: v }))
377
+ }
378
+ />
379
+ </div>
380
+ ))}
381
+ </div>
382
+ </CardContent>
383
+ </Card>
384
+
385
+ <Card className="border-border bg-card">
386
+ <CardHeader>
387
+ <CardTitle className="text-base">Connection Analysis</CardTitle>
388
+ <CardDescription>
389
+ How NavGator identifies relationships between components
390
+ </CardDescription>
391
+ </CardHeader>
392
+ <CardContent className="flex flex-col gap-4">
393
+ <div className="flex items-center justify-between">
394
+ <div>
395
+ <Label>Static Analysis</Label>
396
+ <p className="text-xs text-muted-foreground">
397
+ Analyze imports, function calls, and type references
398
+ </p>
399
+ </div>
400
+ <Switch
401
+ checked={detectionConfig.staticAnalysis}
402
+ onCheckedChange={(v) =>
403
+ setDetectionConfig((c) => ({ ...c, staticAnalysis: v }))
404
+ }
405
+ />
406
+ </div>
407
+ <div className="flex items-center justify-between">
408
+ <div>
409
+ <Label>Environment Variables</Label>
410
+ <p className="text-xs text-muted-foreground">
411
+ Detect service URLs from env vars
412
+ </p>
413
+ </div>
414
+ <Switch
415
+ checked={detectionConfig.environmentVariables}
416
+ onCheckedChange={(v) =>
417
+ setDetectionConfig((c) => ({ ...c, environmentVariables: v }))
418
+ }
419
+ />
420
+ </div>
421
+ <div className="flex items-center justify-between">
422
+ <div>
423
+ <Label>Config Files</Label>
424
+ <p className="text-xs text-muted-foreground">
425
+ Parse docker-compose, terraform, k8s manifests
426
+ </p>
427
+ </div>
428
+ <Switch
429
+ checked={detectionConfig.configFiles}
430
+ onCheckedChange={(v) =>
431
+ setDetectionConfig((c) => ({ ...c, configFiles: v }))
432
+ }
433
+ />
434
+ </div>
435
+ </CardContent>
436
+ </Card>
437
+ </div>
438
+ </TabsContent>
439
+
440
+ {/* Notifications Settings */}
441
+ <TabsContent value="notifications" className="mt-4">
442
+ <div className="grid gap-4">
443
+ <Card className="border-border bg-card">
444
+ <CardHeader>
445
+ <CardTitle className="text-base">Alert Preferences</CardTitle>
446
+ <CardDescription>
447
+ Configure when and how you receive notifications
448
+ </CardDescription>
449
+ </CardHeader>
450
+ <CardContent className="flex flex-col gap-4">
451
+ <div className="flex items-center justify-between">
452
+ <div>
453
+ <Label>Enable Notifications</Label>
454
+ <p className="text-xs text-muted-foreground">
455
+ Receive alerts for architecture changes
456
+ </p>
457
+ </div>
458
+ <Switch
459
+ checked={notificationConfig.enabled}
460
+ onCheckedChange={(v) =>
461
+ setNotificationConfig((c) => ({ ...c, enabled: v }))
462
+ }
463
+ />
464
+ </div>
465
+
466
+ <div className="border-t border-border pt-4">
467
+ <Label className="mb-3 block text-muted-foreground">Notify me when...</Label>
468
+ <div className="flex flex-col gap-3">
469
+ <div className="flex items-center justify-between">
470
+ <div className="flex items-center gap-2">
471
+ <Info className="h-4 w-4 text-info" />
472
+ <span className="text-sm">New connection detected</span>
473
+ </div>
474
+ <Switch
475
+ checked={notificationConfig.onNewConnection}
476
+ onCheckedChange={(v) =>
477
+ setNotificationConfig((c) => ({ ...c, onNewConnection: v }))
478
+ }
479
+ disabled={!notificationConfig.enabled}
480
+ />
481
+ </div>
482
+ <div className="flex items-center justify-between">
483
+ <div className="flex items-center gap-2">
484
+ <AlertCircle className="h-4 w-4 text-warning" />
485
+ <span className="text-sm">Breaking change detected</span>
486
+ </div>
487
+ <Switch
488
+ checked={notificationConfig.onBreakingChange}
489
+ onCheckedChange={(v) =>
490
+ setNotificationConfig((c) => ({ ...c, onBreakingChange: v }))
491
+ }
492
+ disabled={!notificationConfig.enabled}
493
+ />
494
+ </div>
495
+ <div className="flex items-center justify-between">
496
+ <div className="flex items-center gap-2">
497
+ <Shield className="h-4 w-4 text-destructive" />
498
+ <span className="text-sm">Security issue found</span>
499
+ </div>
500
+ <Switch
501
+ checked={notificationConfig.onSecurityIssue}
502
+ onCheckedChange={(v) =>
503
+ setNotificationConfig((c) => ({ ...c, onSecurityIssue: v }))
504
+ }
505
+ disabled={!notificationConfig.enabled}
506
+ />
507
+ </div>
508
+ </div>
509
+ </div>
510
+ </CardContent>
511
+ </Card>
512
+
513
+ <Card className="border-border bg-card">
514
+ <CardHeader>
515
+ <CardTitle className="text-base">Integrations</CardTitle>
516
+ <CardDescription>
517
+ Connect to external services for notifications
518
+ </CardDescription>
519
+ </CardHeader>
520
+ <CardContent className="flex flex-col gap-4">
521
+ <div className="grid gap-2">
522
+ <Label htmlFor="slack">Slack Webhook URL</Label>
523
+ <Input
524
+ id="slack"
525
+ type="url"
526
+ value={notificationConfig.slackWebhook}
527
+ onChange={(e) =>
528
+ setNotificationConfig((c) => ({ ...c, slackWebhook: e.target.value }))
529
+ }
530
+ className="bg-secondary font-mono"
531
+ placeholder="https://hooks.slack.com/services/..."
532
+ />
533
+ </div>
534
+ <div className="flex items-center gap-2 rounded-lg border border-border bg-secondary/50 p-3">
535
+ <Terminal className="h-4 w-4 text-muted-foreground" />
536
+ <code className="text-xs text-muted-foreground">
537
+ navgator config set slack-webhook &lt;url&gt;
538
+ </code>
539
+ </div>
540
+ </CardContent>
541
+ </Card>
542
+ </div>
543
+ </TabsContent>
544
+
545
+ {/* Display Settings */}
546
+ <TabsContent value="display" className="mt-4">
547
+ <div className="grid gap-4">
548
+ <Card className="border-border bg-card">
549
+ <CardHeader>
550
+ <CardTitle className="text-base">Appearance</CardTitle>
551
+ <CardDescription>
552
+ Customize how NavGator looks and displays information
553
+ </CardDescription>
554
+ </CardHeader>
555
+ <CardContent className="flex flex-col gap-4">
556
+ <div className="grid gap-2">
557
+ <Label>Theme</Label>
558
+ <Select
559
+ value={displayConfig.theme}
560
+ onValueChange={(v) =>
561
+ setDisplayConfig((c) => ({
562
+ ...c,
563
+ theme: v as DisplayConfig["theme"],
564
+ }))
565
+ }
566
+ >
567
+ <SelectTrigger className="w-40 bg-secondary">
568
+ <SelectValue />
569
+ </SelectTrigger>
570
+ <SelectContent>
571
+ <SelectItem value="dark">Dark</SelectItem>
572
+ <SelectItem value="light">Light</SelectItem>
573
+ <SelectItem value="system">System</SelectItem>
574
+ </SelectContent>
575
+ </Select>
576
+ </div>
577
+
578
+ <div className="flex items-center justify-between">
579
+ <div>
580
+ <Label>Compact Mode</Label>
581
+ <p className="text-xs text-muted-foreground">
582
+ Reduce padding and spacing for more content
583
+ </p>
584
+ </div>
585
+ <Switch
586
+ checked={displayConfig.compactMode}
587
+ onCheckedChange={(v) =>
588
+ setDisplayConfig((c) => ({ ...c, compactMode: v }))
589
+ }
590
+ />
591
+ </div>
592
+
593
+ <div className="flex items-center justify-between">
594
+ <div>
595
+ <Label>Show Line Numbers</Label>
596
+ <p className="text-xs text-muted-foreground">
597
+ Display line numbers in code snippets
598
+ </p>
599
+ </div>
600
+ <Switch
601
+ checked={displayConfig.showLineNumbers}
602
+ onCheckedChange={(v) =>
603
+ setDisplayConfig((c) => ({ ...c, showLineNumbers: v }))
604
+ }
605
+ />
606
+ </div>
607
+ </CardContent>
608
+ </Card>
609
+
610
+ <Card className="border-border bg-card">
611
+ <CardHeader>
612
+ <CardTitle className="text-base">Diagram Preferences</CardTitle>
613
+ <CardDescription>
614
+ Configure architecture diagram visualization
615
+ </CardDescription>
616
+ </CardHeader>
617
+ <CardContent className="flex flex-col gap-4">
618
+ <div className="grid gap-2">
619
+ <Label>Default Direction</Label>
620
+ <Select
621
+ value={displayConfig.diagramDirection}
622
+ onValueChange={(v) =>
623
+ setDisplayConfig((c) => ({
624
+ ...c,
625
+ diagramDirection: v as DisplayConfig["diagramDirection"],
626
+ }))
627
+ }
628
+ >
629
+ <SelectTrigger className="w-40 bg-secondary">
630
+ <SelectValue />
631
+ </SelectTrigger>
632
+ <SelectContent>
633
+ <SelectItem value="TB">Top to Bottom</SelectItem>
634
+ <SelectItem value="LR">Left to Right</SelectItem>
635
+ </SelectContent>
636
+ </Select>
637
+ </div>
638
+
639
+ <div className="grid gap-2">
640
+ <Label>Max Visible Connections</Label>
641
+ <Select
642
+ value={displayConfig.maxVisibleConnections.toString()}
643
+ onValueChange={(v) =>
644
+ setDisplayConfig((c) => ({
645
+ ...c,
646
+ maxVisibleConnections: Number.parseInt(v),
647
+ }))
648
+ }
649
+ >
650
+ <SelectTrigger className="w-40 bg-secondary">
651
+ <SelectValue />
652
+ </SelectTrigger>
653
+ <SelectContent>
654
+ <SelectItem value="25">25</SelectItem>
655
+ <SelectItem value="50">50</SelectItem>
656
+ <SelectItem value="100">100</SelectItem>
657
+ <SelectItem value="200">200</SelectItem>
658
+ </SelectContent>
659
+ </Select>
660
+ <p className="text-xs text-muted-foreground">
661
+ Limit connections shown to improve performance
662
+ </p>
663
+ </div>
664
+ </CardContent>
665
+ </Card>
666
+ </div>
667
+ </TabsContent>
668
+ </Tabs>
669
+ </div>
670
+ )
671
+ }