prism0x2a 0.7.2 → 0.11.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 (973) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-path-routes-manifest.json +19 -1
  3. package/.next/standalone/.next/build-manifest.json +6 -6
  4. package/.next/standalone/.next/prerender-manifest.json +250 -0
  5. package/.next/standalone/.next/required-server-files.js +335 -0
  6. package/.next/standalone/.next/required-server-files.json +1 -1
  7. package/.next/standalone/.next/routes-manifest.json +112 -0
  8. package/.next/standalone/.next/server/app/_global-error/page/build-manifest.json +3 -3
  9. package/.next/standalone/.next/server/app/_global-error/page.js +3 -3
  10. package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  11. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  12. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  13. package/.next/standalone/.next/server/app/_global-error.rsc +8 -8
  14. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
  15. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +8 -8
  16. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +4 -4
  17. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
  18. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  19. package/.next/standalone/.next/server/app/_not-found/page/build-manifest.json +3 -3
  20. package/.next/standalone/.next/server/app/_not-found/page.js +7 -6
  21. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  22. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  23. package/.next/standalone/.next/server/app/_not-found.html +16 -1
  24. package/.next/standalone/.next/server/app/_not-found.rsc +10 -10
  25. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +10 -10
  26. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  27. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +4 -4
  28. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  29. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  30. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  31. package/.next/standalone/.next/server/app/amber/capabilities/[id]/page/build-manifest.json +3 -3
  32. package/.next/standalone/.next/server/app/amber/capabilities/[id]/page.js +7 -6
  33. package/.next/standalone/.next/server/app/amber/capabilities/[id]/page.js.nft.json +1 -1
  34. package/.next/standalone/.next/server/app/amber/capabilities/[id]/page_client-reference-manifest.js +1 -1
  35. package/.next/standalone/.next/server/app/amber/capabilities/page/build-manifest.json +3 -3
  36. package/.next/standalone/.next/server/app/amber/capabilities/page.js +7 -6
  37. package/.next/standalone/.next/server/app/amber/capabilities/page.js.nft.json +1 -1
  38. package/.next/standalone/.next/server/app/amber/capabilities/page_client-reference-manifest.js +1 -1
  39. package/.next/standalone/.next/server/app/amber/capabilities.html +16 -1
  40. package/.next/standalone/.next/server/app/amber/capabilities.rsc +12 -12
  41. package/.next/standalone/.next/server/app/amber/capabilities.segments/_full.segment.rsc +12 -12
  42. package/.next/standalone/.next/server/app/amber/capabilities.segments/_head.segment.rsc +4 -4
  43. package/.next/standalone/.next/server/app/amber/capabilities.segments/_index.segment.rsc +4 -4
  44. package/.next/standalone/.next/server/app/amber/capabilities.segments/_tree.segment.rsc +2 -2
  45. package/.next/standalone/.next/server/app/amber/capabilities.segments/amber/capabilities/__PAGE__.segment.rsc +4 -4
  46. package/.next/standalone/.next/server/app/amber/capabilities.segments/amber/capabilities.segment.rsc +3 -3
  47. package/.next/standalone/.next/server/app/amber/capabilities.segments/amber.segment.rsc +3 -3
  48. package/.next/standalone/.next/server/app/amber/coverage/page/build-manifest.json +3 -3
  49. package/.next/standalone/.next/server/app/amber/coverage/page.js +7 -6
  50. package/.next/standalone/.next/server/app/amber/coverage/page.js.nft.json +1 -1
  51. package/.next/standalone/.next/server/app/amber/coverage/page_client-reference-manifest.js +1 -1
  52. package/.next/standalone/.next/server/app/amber/coverage.html +16 -1
  53. package/.next/standalone/.next/server/app/amber/coverage.rsc +12 -12
  54. package/.next/standalone/.next/server/app/amber/coverage.segments/_full.segment.rsc +12 -12
  55. package/.next/standalone/.next/server/app/amber/coverage.segments/_head.segment.rsc +4 -4
  56. package/.next/standalone/.next/server/app/amber/coverage.segments/_index.segment.rsc +4 -4
  57. package/.next/standalone/.next/server/app/amber/coverage.segments/_tree.segment.rsc +2 -2
  58. package/.next/standalone/.next/server/app/amber/coverage.segments/amber/coverage/__PAGE__.segment.rsc +4 -4
  59. package/.next/standalone/.next/server/app/amber/coverage.segments/amber/coverage.segment.rsc +3 -3
  60. package/.next/standalone/.next/server/app/amber/coverage.segments/amber.segment.rsc +3 -3
  61. package/.next/standalone/.next/server/app/amber/files/page/build-manifest.json +3 -3
  62. package/.next/standalone/.next/server/app/amber/files/page.js +7 -6
  63. package/.next/standalone/.next/server/app/amber/files/page.js.nft.json +1 -1
  64. package/.next/standalone/.next/server/app/amber/files/page_client-reference-manifest.js +1 -1
  65. package/.next/standalone/.next/server/app/amber/files.html +16 -1
  66. package/.next/standalone/.next/server/app/amber/files.rsc +12 -12
  67. package/.next/standalone/.next/server/app/amber/files.segments/_full.segment.rsc +12 -12
  68. package/.next/standalone/.next/server/app/amber/files.segments/_head.segment.rsc +4 -4
  69. package/.next/standalone/.next/server/app/amber/files.segments/_index.segment.rsc +4 -4
  70. package/.next/standalone/.next/server/app/amber/files.segments/_tree.segment.rsc +2 -2
  71. package/.next/standalone/.next/server/app/amber/files.segments/amber/files/__PAGE__.segment.rsc +4 -4
  72. package/.next/standalone/.next/server/app/amber/files.segments/amber/files.segment.rsc +3 -3
  73. package/.next/standalone/.next/server/app/amber/files.segments/amber.segment.rsc +3 -3
  74. package/.next/standalone/.next/server/app/amber/page/build-manifest.json +3 -3
  75. package/.next/standalone/.next/server/app/amber/page.js +7 -6
  76. package/.next/standalone/.next/server/app/amber/page.js.nft.json +1 -1
  77. package/.next/standalone/.next/server/app/amber/page_client-reference-manifest.js +1 -1
  78. package/.next/standalone/.next/server/app/amber.html +16 -1
  79. package/.next/standalone/.next/server/app/amber.rsc +12 -12
  80. package/.next/standalone/.next/server/app/amber.segments/_full.segment.rsc +12 -12
  81. package/.next/standalone/.next/server/app/amber.segments/_head.segment.rsc +4 -4
  82. package/.next/standalone/.next/server/app/amber.segments/_index.segment.rsc +4 -4
  83. package/.next/standalone/.next/server/app/amber.segments/_tree.segment.rsc +2 -2
  84. package/.next/standalone/.next/server/app/amber.segments/amber/__PAGE__.segment.rsc +4 -4
  85. package/.next/standalone/.next/server/app/amber.segments/amber.segment.rsc +3 -3
  86. package/.next/standalone/.next/server/app/api/amber/capabilities/[id]/route.js +4 -3
  87. package/.next/standalone/.next/server/app/api/amber/capabilities/[id]/route.js.nft.json +1 -1
  88. package/.next/standalone/.next/server/app/api/amber/capabilities/route.js +5 -4
  89. package/.next/standalone/.next/server/app/api/amber/capabilities/route.js.nft.json +1 -1
  90. package/.next/standalone/.next/server/app/api/amber/files/route.js +5 -4
  91. package/.next/standalone/.next/server/app/api/amber/files/route.js.nft.json +1 -1
  92. package/.next/standalone/.next/server/app/api/amber/registry/route.js +5 -4
  93. package/.next/standalone/.next/server/app/api/amber/registry/route.js.nft.json +1 -1
  94. package/.next/standalone/.next/server/app/api/amber/scan/route.js +5 -4
  95. package/.next/standalone/.next/server/app/api/amber/scan/route.js.nft.json +1 -1
  96. package/.next/standalone/.next/server/app/api/blue/explorer/ask/route/app-paths-manifest.json +3 -0
  97. package/.next/standalone/.next/server/app/api/blue/explorer/ask/route/build-manifest.json +9 -0
  98. package/.next/standalone/.next/server/app/api/blue/explorer/ask/route/server-reference-manifest.json +4 -0
  99. package/.next/standalone/.next/server/app/api/blue/explorer/ask/route.js +6 -0
  100. package/.next/standalone/.next/server/app/api/blue/explorer/ask/route.js.map +5 -0
  101. package/.next/standalone/.next/server/app/api/blue/explorer/ask/route.js.nft.json +1 -0
  102. package/.next/standalone/.next/server/app/api/blue/explorer/ask/route_client-reference-manifest.js +3 -0
  103. package/.next/standalone/.next/server/app/api/blue/explorer/comments/[hash]/route/app-paths-manifest.json +3 -0
  104. package/.next/standalone/.next/server/app/api/blue/explorer/comments/[hash]/route/build-manifest.json +9 -0
  105. package/.next/standalone/.next/server/app/api/blue/explorer/comments/[hash]/route/server-reference-manifest.json +4 -0
  106. package/.next/standalone/.next/server/app/api/blue/explorer/comments/[hash]/route.js +6 -0
  107. package/.next/standalone/.next/server/app/api/blue/explorer/comments/[hash]/route.js.map +5 -0
  108. package/.next/standalone/.next/server/app/api/blue/explorer/comments/[hash]/route.js.nft.json +1 -0
  109. package/.next/standalone/.next/server/app/api/blue/explorer/comments/[hash]/route_client-reference-manifest.js +3 -0
  110. package/.next/standalone/.next/server/app/api/blue/explorer/explain/route/app-paths-manifest.json +3 -0
  111. package/.next/standalone/.next/server/app/api/blue/explorer/explain/route/build-manifest.json +9 -0
  112. package/.next/standalone/.next/server/app/api/blue/explorer/explain/route/server-reference-manifest.json +4 -0
  113. package/.next/standalone/.next/server/app/api/blue/explorer/explain/route.js +6 -0
  114. package/.next/standalone/.next/server/app/api/blue/explorer/explain/route.js.map +5 -0
  115. package/.next/standalone/.next/server/app/api/blue/explorer/explain/route.js.nft.json +1 -0
  116. package/.next/standalone/.next/server/app/api/blue/explorer/explain/route_client-reference-manifest.js +3 -0
  117. package/.next/standalone/.next/server/app/api/blue/explorer/outdated/route/app-paths-manifest.json +3 -0
  118. package/.next/standalone/.next/server/app/api/blue/explorer/outdated/route/build-manifest.json +9 -0
  119. package/.next/standalone/.next/server/app/api/blue/explorer/outdated/route/server-reference-manifest.json +4 -0
  120. package/.next/standalone/.next/server/app/api/blue/explorer/outdated/route.js +6 -0
  121. package/.next/standalone/.next/server/app/api/blue/explorer/outdated/route.js.map +5 -0
  122. package/.next/standalone/.next/server/app/api/blue/explorer/outdated/route.js.nft.json +1 -0
  123. package/.next/standalone/.next/server/app/api/blue/explorer/outdated/route_client-reference-manifest.js +3 -0
  124. package/.next/standalone/.next/server/app/api/blue/explorer/refactor/route/app-paths-manifest.json +3 -0
  125. package/.next/standalone/.next/server/app/api/blue/explorer/refactor/route/build-manifest.json +9 -0
  126. package/.next/standalone/.next/server/app/api/blue/explorer/refactor/route/server-reference-manifest.json +4 -0
  127. package/.next/standalone/.next/server/app/api/blue/explorer/refactor/route.js +6 -0
  128. package/.next/standalone/.next/server/app/api/blue/explorer/refactor/route.js.map +5 -0
  129. package/.next/standalone/.next/server/app/api/blue/explorer/refactor/route.js.nft.json +1 -0
  130. package/.next/standalone/.next/server/app/api/blue/explorer/refactor/route_client-reference-manifest.js +3 -0
  131. package/.next/standalone/.next/server/app/api/blue/explorer/route/app-paths-manifest.json +3 -0
  132. package/.next/standalone/.next/server/app/api/blue/explorer/route/build-manifest.json +9 -0
  133. package/.next/standalone/.next/server/app/api/blue/explorer/route/server-reference-manifest.json +4 -0
  134. package/.next/standalone/.next/server/app/api/blue/explorer/route.js +6 -0
  135. package/.next/standalone/.next/server/app/api/blue/explorer/route.js.map +5 -0
  136. package/.next/standalone/.next/server/app/api/blue/explorer/route.js.nft.json +1 -0
  137. package/.next/standalone/.next/server/app/api/blue/explorer/route_client-reference-manifest.js +3 -0
  138. package/.next/standalone/.next/server/app/api/blue/recommendations/route.js +4 -3
  139. package/.next/standalone/.next/server/app/api/blue/recommendations/route.js.nft.json +1 -1
  140. package/.next/standalone/.next/server/app/api/blue/scan/route.js +5 -4
  141. package/.next/standalone/.next/server/app/api/blue/scan/route.js.nft.json +1 -1
  142. package/.next/standalone/.next/server/app/api/blue/sessions/[id]/route.js +5 -4
  143. package/.next/standalone/.next/server/app/api/blue/sessions/[id]/route.js.nft.json +1 -1
  144. package/.next/standalone/.next/server/app/api/config/test/route.js +5 -4
  145. package/.next/standalone/.next/server/app/api/config/test/route.js.nft.json +1 -1
  146. package/.next/standalone/.next/server/app/api/green/cross-layer/route.js +5 -4
  147. package/.next/standalone/.next/server/app/api/green/cross-layer/route.js.nft.json +1 -1
  148. package/.next/standalone/.next/server/app/api/green/insights/[id]/route.js +4 -3
  149. package/.next/standalone/.next/server/app/api/green/insights/[id]/route.js.nft.json +1 -1
  150. package/.next/standalone/.next/server/app/api/green/insights/route.js +5 -4
  151. package/.next/standalone/.next/server/app/api/green/insights/route.js.nft.json +1 -1
  152. package/.next/standalone/.next/server/app/api/green/queries/[id]/route.js +7 -6
  153. package/.next/standalone/.next/server/app/api/green/queries/[id]/route.js.nft.json +1 -1
  154. package/.next/standalone/.next/server/app/api/green/queries/[id]/run/route.js +5 -4
  155. package/.next/standalone/.next/server/app/api/green/queries/[id]/run/route.js.nft.json +1 -1
  156. package/.next/standalone/.next/server/app/api/green/queries/route.js +5 -4
  157. package/.next/standalone/.next/server/app/api/green/queries/route.js.nft.json +1 -1
  158. package/.next/standalone/.next/server/app/api/monorepo/route.js.nft.json +1 -1
  159. package/.next/standalone/.next/server/app/api/scan/route.js +4 -3
  160. package/.next/standalone/.next/server/app/api/scan/route.js.nft.json +1 -1
  161. package/.next/standalone/.next/server/app/blue/explorer/ask/page/app-paths-manifest.json +3 -0
  162. package/.next/standalone/.next/server/app/blue/explorer/ask/page/build-manifest.json +16 -0
  163. package/.next/standalone/.next/server/app/blue/explorer/ask/page/next-font-manifest.json +10 -0
  164. package/.next/standalone/.next/server/app/blue/explorer/ask/page/react-loadable-manifest.json +1 -0
  165. package/.next/standalone/.next/server/app/blue/explorer/ask/page/server-reference-manifest.json +4 -0
  166. package/.next/standalone/.next/server/app/blue/explorer/ask/page.js +17 -0
  167. package/.next/standalone/.next/server/app/blue/explorer/ask/page.js.map +5 -0
  168. package/.next/standalone/.next/server/app/blue/explorer/ask/page.js.nft.json +1 -0
  169. package/.next/standalone/.next/server/app/blue/explorer/ask/page_client-reference-manifest.js +3 -0
  170. package/.next/standalone/.next/server/app/blue/explorer/ask.html +16 -0
  171. package/.next/standalone/.next/server/app/blue/explorer/ask.meta +17 -0
  172. package/.next/standalone/.next/server/app/blue/explorer/ask.rsc +22 -0
  173. package/.next/standalone/.next/server/app/blue/explorer/ask.segments/_full.segment.rsc +22 -0
  174. package/.next/standalone/.next/server/app/blue/explorer/ask.segments/_head.segment.rsc +6 -0
  175. package/.next/standalone/.next/server/app/blue/explorer/ask.segments/_index.segment.rsc +5 -0
  176. package/.next/standalone/.next/server/app/blue/explorer/ask.segments/_tree.segment.rsc +3 -0
  177. package/.next/standalone/.next/server/app/blue/explorer/ask.segments/blue/explorer/ask/__PAGE__.segment.rsc +9 -0
  178. package/.next/standalone/.next/server/app/blue/explorer/ask.segments/blue/explorer/ask.segment.rsc +5 -0
  179. package/.next/standalone/.next/server/app/blue/explorer/ask.segments/blue/explorer.segment.rsc +5 -0
  180. package/.next/standalone/.next/server/app/blue/explorer/ask.segments/blue.segment.rsc +4 -0
  181. package/.next/standalone/.next/server/app/blue/explorer/explain/page/app-paths-manifest.json +3 -0
  182. package/.next/standalone/.next/server/app/blue/explorer/explain/page/build-manifest.json +16 -0
  183. package/.next/standalone/.next/server/app/blue/explorer/explain/page/next-font-manifest.json +10 -0
  184. package/.next/standalone/.next/server/app/blue/explorer/explain/page/react-loadable-manifest.json +1 -0
  185. package/.next/standalone/.next/server/app/blue/explorer/explain/page/server-reference-manifest.json +4 -0
  186. package/.next/standalone/.next/server/app/blue/explorer/explain/page.js +17 -0
  187. package/.next/standalone/.next/server/app/blue/explorer/explain/page.js.map +5 -0
  188. package/.next/standalone/.next/server/app/blue/explorer/explain/page.js.nft.json +1 -0
  189. package/.next/standalone/.next/server/app/blue/explorer/explain/page_client-reference-manifest.js +3 -0
  190. package/.next/standalone/.next/server/app/blue/explorer/explain.html +16 -0
  191. package/.next/standalone/.next/server/app/blue/explorer/explain.meta +17 -0
  192. package/.next/standalone/.next/server/app/blue/explorer/explain.rsc +22 -0
  193. package/.next/standalone/.next/server/app/blue/explorer/explain.segments/_full.segment.rsc +22 -0
  194. package/.next/standalone/.next/server/app/blue/explorer/explain.segments/_head.segment.rsc +6 -0
  195. package/.next/standalone/.next/server/app/blue/explorer/explain.segments/_index.segment.rsc +5 -0
  196. package/.next/standalone/.next/server/app/blue/explorer/explain.segments/_tree.segment.rsc +3 -0
  197. package/.next/standalone/.next/server/app/blue/explorer/explain.segments/blue/explorer/explain/__PAGE__.segment.rsc +9 -0
  198. package/.next/standalone/.next/server/app/blue/explorer/explain.segments/blue/explorer/explain.segment.rsc +5 -0
  199. package/.next/standalone/.next/server/app/blue/explorer/explain.segments/blue/explorer.segment.rsc +5 -0
  200. package/.next/standalone/.next/server/app/blue/explorer/explain.segments/blue.segment.rsc +4 -0
  201. package/.next/standalone/.next/server/app/blue/explorer/file/[path]/page/app-paths-manifest.json +3 -0
  202. package/.next/standalone/.next/server/app/blue/explorer/file/[path]/page/build-manifest.json +16 -0
  203. package/.next/standalone/.next/server/app/blue/explorer/file/[path]/page/next-font-manifest.json +10 -0
  204. package/.next/standalone/.next/server/app/blue/explorer/file/[path]/page/react-loadable-manifest.json +1 -0
  205. package/.next/standalone/.next/server/app/blue/explorer/file/[path]/page/server-reference-manifest.json +4 -0
  206. package/.next/standalone/.next/server/app/blue/explorer/file/[path]/page.js +17 -0
  207. package/.next/standalone/.next/server/app/blue/explorer/file/[path]/page.js.map +5 -0
  208. package/.next/standalone/.next/server/app/blue/explorer/file/[path]/page.js.nft.json +1 -0
  209. package/.next/standalone/.next/server/app/blue/explorer/file/[path]/page_client-reference-manifest.js +3 -0
  210. package/.next/standalone/.next/server/app/blue/explorer/flow/page/app-paths-manifest.json +3 -0
  211. package/.next/standalone/.next/server/app/blue/explorer/flow/page/build-manifest.json +16 -0
  212. package/.next/standalone/.next/server/app/blue/explorer/flow/page/next-font-manifest.json +10 -0
  213. package/.next/standalone/.next/server/app/blue/explorer/flow/page/react-loadable-manifest.json +1 -0
  214. package/.next/standalone/.next/server/app/blue/explorer/flow/page/server-reference-manifest.json +4 -0
  215. package/.next/standalone/.next/server/app/blue/explorer/flow/page.js +17 -0
  216. package/.next/standalone/.next/server/app/blue/explorer/flow/page.js.map +5 -0
  217. package/.next/standalone/.next/server/app/blue/explorer/flow/page.js.nft.json +1 -0
  218. package/.next/standalone/.next/server/app/blue/explorer/flow/page_client-reference-manifest.js +3 -0
  219. package/.next/standalone/.next/server/app/blue/explorer/flow.html +16 -0
  220. package/.next/standalone/.next/server/app/blue/explorer/flow.meta +17 -0
  221. package/.next/standalone/.next/server/app/blue/explorer/flow.rsc +23 -0
  222. package/.next/standalone/.next/server/app/blue/explorer/flow.segments/_full.segment.rsc +23 -0
  223. package/.next/standalone/.next/server/app/blue/explorer/flow.segments/_head.segment.rsc +6 -0
  224. package/.next/standalone/.next/server/app/blue/explorer/flow.segments/_index.segment.rsc +5 -0
  225. package/.next/standalone/.next/server/app/blue/explorer/flow.segments/_tree.segment.rsc +4 -0
  226. package/.next/standalone/.next/server/app/blue/explorer/flow.segments/blue/explorer/flow/__PAGE__.segment.rsc +10 -0
  227. package/.next/standalone/.next/server/app/blue/explorer/flow.segments/blue/explorer/flow.segment.rsc +5 -0
  228. package/.next/standalone/.next/server/app/blue/explorer/flow.segments/blue/explorer.segment.rsc +5 -0
  229. package/.next/standalone/.next/server/app/blue/explorer/flow.segments/blue.segment.rsc +4 -0
  230. package/.next/standalone/.next/server/app/blue/explorer/graph/page/app-paths-manifest.json +3 -0
  231. package/.next/standalone/.next/server/app/blue/explorer/graph/page/build-manifest.json +16 -0
  232. package/.next/standalone/.next/server/app/blue/explorer/graph/page/next-font-manifest.json +10 -0
  233. package/.next/standalone/.next/server/app/blue/explorer/graph/page/react-loadable-manifest.json +1 -0
  234. package/.next/standalone/.next/server/app/blue/explorer/graph/page/server-reference-manifest.json +4 -0
  235. package/.next/standalone/.next/server/app/blue/explorer/graph/page.js +17 -0
  236. package/.next/standalone/.next/server/app/blue/explorer/graph/page.js.map +5 -0
  237. package/.next/standalone/.next/server/app/blue/explorer/graph/page.js.nft.json +1 -0
  238. package/.next/standalone/.next/server/app/blue/explorer/graph/page_client-reference-manifest.js +3 -0
  239. package/.next/standalone/.next/server/app/blue/explorer/graph.html +16 -0
  240. package/.next/standalone/.next/server/app/blue/explorer/graph.meta +17 -0
  241. package/.next/standalone/.next/server/app/blue/explorer/graph.rsc +23 -0
  242. package/.next/standalone/.next/server/app/blue/explorer/graph.segments/_full.segment.rsc +23 -0
  243. package/.next/standalone/.next/server/app/blue/explorer/graph.segments/_head.segment.rsc +6 -0
  244. package/.next/standalone/.next/server/app/blue/explorer/graph.segments/_index.segment.rsc +5 -0
  245. package/.next/standalone/.next/server/app/blue/explorer/graph.segments/_tree.segment.rsc +4 -0
  246. package/.next/standalone/.next/server/app/blue/explorer/graph.segments/blue/explorer/graph/__PAGE__.segment.rsc +10 -0
  247. package/.next/standalone/.next/server/app/blue/explorer/graph.segments/blue/explorer/graph.segment.rsc +5 -0
  248. package/.next/standalone/.next/server/app/blue/explorer/graph.segments/blue/explorer.segment.rsc +5 -0
  249. package/.next/standalone/.next/server/app/blue/explorer/graph.segments/blue.segment.rsc +4 -0
  250. package/.next/standalone/.next/server/app/blue/explorer/page/app-paths-manifest.json +3 -0
  251. package/.next/standalone/.next/server/app/blue/explorer/page/build-manifest.json +16 -0
  252. package/.next/standalone/.next/server/app/blue/explorer/page/next-font-manifest.json +10 -0
  253. package/.next/standalone/.next/server/app/blue/explorer/page/react-loadable-manifest.json +1 -0
  254. package/.next/standalone/.next/server/app/blue/explorer/page/server-reference-manifest.json +4 -0
  255. package/.next/standalone/.next/server/app/blue/explorer/page.js +17 -0
  256. package/.next/standalone/.next/server/app/blue/explorer/page.js.map +5 -0
  257. package/.next/standalone/.next/server/app/blue/explorer/page.js.nft.json +1 -0
  258. package/.next/standalone/.next/server/app/blue/explorer/page_client-reference-manifest.js +3 -0
  259. package/.next/standalone/.next/server/app/blue/explorer/refactor/page/app-paths-manifest.json +3 -0
  260. package/.next/standalone/.next/server/app/blue/explorer/refactor/page/build-manifest.json +16 -0
  261. package/.next/standalone/.next/server/app/blue/explorer/refactor/page/next-font-manifest.json +10 -0
  262. package/.next/standalone/.next/server/app/blue/explorer/refactor/page/react-loadable-manifest.json +1 -0
  263. package/.next/standalone/.next/server/app/blue/explorer/refactor/page/server-reference-manifest.json +4 -0
  264. package/.next/standalone/.next/server/app/blue/explorer/refactor/page.js +17 -0
  265. package/.next/standalone/.next/server/app/blue/explorer/refactor/page.js.map +5 -0
  266. package/.next/standalone/.next/server/app/blue/explorer/refactor/page.js.nft.json +1 -0
  267. package/.next/standalone/.next/server/app/blue/explorer/refactor/page_client-reference-manifest.js +3 -0
  268. package/.next/standalone/.next/server/app/blue/explorer/refactor.html +16 -0
  269. package/.next/standalone/.next/server/app/blue/explorer/refactor.meta +17 -0
  270. package/.next/standalone/.next/server/app/blue/explorer/refactor.rsc +22 -0
  271. package/.next/standalone/.next/server/app/blue/explorer/refactor.segments/_full.segment.rsc +22 -0
  272. package/.next/standalone/.next/server/app/blue/explorer/refactor.segments/_head.segment.rsc +6 -0
  273. package/.next/standalone/.next/server/app/blue/explorer/refactor.segments/_index.segment.rsc +5 -0
  274. package/.next/standalone/.next/server/app/blue/explorer/refactor.segments/_tree.segment.rsc +3 -0
  275. package/.next/standalone/.next/server/app/blue/explorer/refactor.segments/blue/explorer/refactor/__PAGE__.segment.rsc +9 -0
  276. package/.next/standalone/.next/server/app/blue/explorer/refactor.segments/blue/explorer/refactor.segment.rsc +5 -0
  277. package/.next/standalone/.next/server/app/blue/explorer/refactor.segments/blue/explorer.segment.rsc +5 -0
  278. package/.next/standalone/.next/server/app/blue/explorer/refactor.segments/blue.segment.rsc +4 -0
  279. package/.next/standalone/.next/server/app/blue/explorer/wire/page/app-paths-manifest.json +3 -0
  280. package/.next/standalone/.next/server/app/blue/explorer/wire/page/build-manifest.json +16 -0
  281. package/.next/standalone/.next/server/app/blue/explorer/wire/page/next-font-manifest.json +10 -0
  282. package/.next/standalone/.next/server/app/blue/explorer/wire/page/react-loadable-manifest.json +1 -0
  283. package/.next/standalone/.next/server/app/blue/explorer/wire/page/server-reference-manifest.json +4 -0
  284. package/.next/standalone/.next/server/app/blue/explorer/wire/page.js +17 -0
  285. package/.next/standalone/.next/server/app/blue/explorer/wire/page.js.map +5 -0
  286. package/.next/standalone/.next/server/app/blue/explorer/wire/page.js.nft.json +1 -0
  287. package/.next/standalone/.next/server/app/blue/explorer/wire/page_client-reference-manifest.js +3 -0
  288. package/.next/standalone/.next/server/app/blue/explorer/wire.html +16 -0
  289. package/.next/standalone/.next/server/app/blue/explorer/wire.meta +17 -0
  290. package/.next/standalone/.next/server/app/blue/explorer/wire.rsc +22 -0
  291. package/.next/standalone/.next/server/app/blue/explorer/wire.segments/_full.segment.rsc +22 -0
  292. package/.next/standalone/.next/server/app/blue/explorer/wire.segments/_head.segment.rsc +6 -0
  293. package/.next/standalone/.next/server/app/blue/explorer/wire.segments/_index.segment.rsc +5 -0
  294. package/.next/standalone/.next/server/app/blue/explorer/wire.segments/_tree.segment.rsc +3 -0
  295. package/.next/standalone/.next/server/app/blue/explorer/wire.segments/blue/explorer/wire/__PAGE__.segment.rsc +9 -0
  296. package/.next/standalone/.next/server/app/blue/explorer/wire.segments/blue/explorer/wire.segment.rsc +5 -0
  297. package/.next/standalone/.next/server/app/blue/explorer/wire.segments/blue/explorer.segment.rsc +5 -0
  298. package/.next/standalone/.next/server/app/blue/explorer/wire.segments/blue.segment.rsc +4 -0
  299. package/.next/standalone/.next/server/app/blue/explorer/zones/page/app-paths-manifest.json +3 -0
  300. package/.next/standalone/.next/server/app/blue/explorer/zones/page/build-manifest.json +16 -0
  301. package/.next/standalone/.next/server/app/blue/explorer/zones/page/next-font-manifest.json +10 -0
  302. package/.next/standalone/.next/server/app/blue/explorer/zones/page/react-loadable-manifest.json +1 -0
  303. package/.next/standalone/.next/server/app/blue/explorer/zones/page/server-reference-manifest.json +4 -0
  304. package/.next/standalone/.next/server/app/blue/explorer/zones/page.js +17 -0
  305. package/.next/standalone/.next/server/app/blue/explorer/zones/page.js.map +5 -0
  306. package/.next/standalone/.next/server/app/blue/explorer/zones/page.js.nft.json +1 -0
  307. package/.next/standalone/.next/server/app/blue/explorer/zones/page_client-reference-manifest.js +3 -0
  308. package/.next/standalone/.next/server/app/blue/explorer/zones.html +16 -0
  309. package/.next/standalone/.next/server/app/blue/explorer/zones.meta +17 -0
  310. package/.next/standalone/.next/server/app/blue/explorer/zones.rsc +22 -0
  311. package/.next/standalone/.next/server/app/blue/explorer/zones.segments/_full.segment.rsc +22 -0
  312. package/.next/standalone/.next/server/app/blue/explorer/zones.segments/_head.segment.rsc +6 -0
  313. package/.next/standalone/.next/server/app/blue/explorer/zones.segments/_index.segment.rsc +5 -0
  314. package/.next/standalone/.next/server/app/blue/explorer/zones.segments/_tree.segment.rsc +3 -0
  315. package/.next/standalone/.next/server/app/blue/explorer/zones.segments/blue/explorer/zones/__PAGE__.segment.rsc +9 -0
  316. package/.next/standalone/.next/server/app/blue/explorer/zones.segments/blue/explorer/zones.segment.rsc +5 -0
  317. package/.next/standalone/.next/server/app/blue/explorer/zones.segments/blue/explorer.segment.rsc +5 -0
  318. package/.next/standalone/.next/server/app/blue/explorer/zones.segments/blue.segment.rsc +4 -0
  319. package/.next/standalone/.next/server/app/blue/explorer.html +16 -0
  320. package/.next/standalone/.next/server/app/blue/explorer.meta +16 -0
  321. package/.next/standalone/.next/server/app/blue/explorer.rsc +20 -0
  322. package/.next/standalone/.next/server/app/blue/explorer.segments/_full.segment.rsc +20 -0
  323. package/.next/standalone/.next/server/app/blue/explorer.segments/_head.segment.rsc +6 -0
  324. package/.next/standalone/.next/server/app/blue/explorer.segments/_index.segment.rsc +5 -0
  325. package/.next/standalone/.next/server/app/blue/explorer.segments/_tree.segment.rsc +3 -0
  326. package/.next/standalone/.next/server/app/blue/explorer.segments/blue/explorer/__PAGE__.segment.rsc +9 -0
  327. package/.next/standalone/.next/server/app/blue/explorer.segments/blue/explorer.segment.rsc +5 -0
  328. package/.next/standalone/.next/server/app/blue/explorer.segments/blue.segment.rsc +4 -0
  329. package/.next/standalone/.next/server/app/blue/page/build-manifest.json +3 -3
  330. package/.next/standalone/.next/server/app/blue/page.js +7 -6
  331. package/.next/standalone/.next/server/app/blue/page.js.nft.json +1 -1
  332. package/.next/standalone/.next/server/app/blue/page_client-reference-manifest.js +1 -1
  333. package/.next/standalone/.next/server/app/blue/recommendations/[id]/page/build-manifest.json +3 -3
  334. package/.next/standalone/.next/server/app/blue/recommendations/[id]/page.js +7 -6
  335. package/.next/standalone/.next/server/app/blue/recommendations/[id]/page.js.nft.json +1 -1
  336. package/.next/standalone/.next/server/app/blue/recommendations/[id]/page_client-reference-manifest.js +1 -1
  337. package/.next/standalone/.next/server/app/blue/recommendations/page/build-manifest.json +3 -3
  338. package/.next/standalone/.next/server/app/blue/recommendations/page.js +7 -6
  339. package/.next/standalone/.next/server/app/blue/recommendations/page.js.nft.json +1 -1
  340. package/.next/standalone/.next/server/app/blue/recommendations/page_client-reference-manifest.js +1 -1
  341. package/.next/standalone/.next/server/app/blue/recommendations.html +16 -1
  342. package/.next/standalone/.next/server/app/blue/recommendations.rsc +12 -12
  343. package/.next/standalone/.next/server/app/blue/recommendations.segments/_full.segment.rsc +12 -12
  344. package/.next/standalone/.next/server/app/blue/recommendations.segments/_head.segment.rsc +4 -4
  345. package/.next/standalone/.next/server/app/blue/recommendations.segments/_index.segment.rsc +4 -4
  346. package/.next/standalone/.next/server/app/blue/recommendations.segments/_tree.segment.rsc +2 -2
  347. package/.next/standalone/.next/server/app/blue/recommendations.segments/blue/recommendations/__PAGE__.segment.rsc +4 -4
  348. package/.next/standalone/.next/server/app/blue/recommendations.segments/blue/recommendations.segment.rsc +3 -3
  349. package/.next/standalone/.next/server/app/blue/recommendations.segments/blue.segment.rsc +3 -3
  350. package/.next/standalone/.next/server/app/blue/sessions/[id]/page/build-manifest.json +3 -3
  351. package/.next/standalone/.next/server/app/blue/sessions/[id]/page.js +7 -6
  352. package/.next/standalone/.next/server/app/blue/sessions/[id]/page.js.nft.json +1 -1
  353. package/.next/standalone/.next/server/app/blue/sessions/[id]/page_client-reference-manifest.js +1 -1
  354. package/.next/standalone/.next/server/app/blue/sessions/page/build-manifest.json +3 -3
  355. package/.next/standalone/.next/server/app/blue/sessions/page.js +7 -6
  356. package/.next/standalone/.next/server/app/blue/sessions/page.js.nft.json +1 -1
  357. package/.next/standalone/.next/server/app/blue/sessions/page_client-reference-manifest.js +1 -1
  358. package/.next/standalone/.next/server/app/blue/sessions.html +16 -1
  359. package/.next/standalone/.next/server/app/blue/sessions.rsc +12 -12
  360. package/.next/standalone/.next/server/app/blue/sessions.segments/_full.segment.rsc +12 -12
  361. package/.next/standalone/.next/server/app/blue/sessions.segments/_head.segment.rsc +4 -4
  362. package/.next/standalone/.next/server/app/blue/sessions.segments/_index.segment.rsc +4 -4
  363. package/.next/standalone/.next/server/app/blue/sessions.segments/_tree.segment.rsc +2 -2
  364. package/.next/standalone/.next/server/app/blue/sessions.segments/blue/sessions/__PAGE__.segment.rsc +4 -4
  365. package/.next/standalone/.next/server/app/blue/sessions.segments/blue/sessions.segment.rsc +3 -3
  366. package/.next/standalone/.next/server/app/blue/sessions.segments/blue.segment.rsc +3 -3
  367. package/.next/standalone/.next/server/app/blue.html +16 -1
  368. package/.next/standalone/.next/server/app/blue.rsc +12 -12
  369. package/.next/standalone/.next/server/app/blue.segments/_full.segment.rsc +12 -12
  370. package/.next/standalone/.next/server/app/blue.segments/_head.segment.rsc +4 -4
  371. package/.next/standalone/.next/server/app/blue.segments/_index.segment.rsc +4 -4
  372. package/.next/standalone/.next/server/app/blue.segments/_tree.segment.rsc +2 -2
  373. package/.next/standalone/.next/server/app/blue.segments/blue/__PAGE__.segment.rsc +4 -4
  374. package/.next/standalone/.next/server/app/blue.segments/blue.segment.rsc +3 -3
  375. package/.next/standalone/.next/server/app/green/cross-layer/page/build-manifest.json +3 -3
  376. package/.next/standalone/.next/server/app/green/cross-layer/page.js +7 -6
  377. package/.next/standalone/.next/server/app/green/cross-layer/page.js.nft.json +1 -1
  378. package/.next/standalone/.next/server/app/green/cross-layer/page_client-reference-manifest.js +1 -1
  379. package/.next/standalone/.next/server/app/green/cross-layer.html +16 -1
  380. package/.next/standalone/.next/server/app/green/cross-layer.rsc +12 -12
  381. package/.next/standalone/.next/server/app/green/cross-layer.segments/_full.segment.rsc +12 -12
  382. package/.next/standalone/.next/server/app/green/cross-layer.segments/_head.segment.rsc +4 -4
  383. package/.next/standalone/.next/server/app/green/cross-layer.segments/_index.segment.rsc +4 -4
  384. package/.next/standalone/.next/server/app/green/cross-layer.segments/_tree.segment.rsc +2 -2
  385. package/.next/standalone/.next/server/app/green/cross-layer.segments/green/cross-layer/__PAGE__.segment.rsc +4 -4
  386. package/.next/standalone/.next/server/app/green/cross-layer.segments/green/cross-layer.segment.rsc +3 -3
  387. package/.next/standalone/.next/server/app/green/cross-layer.segments/green.segment.rsc +3 -3
  388. package/.next/standalone/.next/server/app/green/insights/[id]/page/build-manifest.json +3 -3
  389. package/.next/standalone/.next/server/app/green/insights/[id]/page.js +7 -6
  390. package/.next/standalone/.next/server/app/green/insights/[id]/page.js.nft.json +1 -1
  391. package/.next/standalone/.next/server/app/green/insights/[id]/page_client-reference-manifest.js +1 -1
  392. package/.next/standalone/.next/server/app/green/insights/page/build-manifest.json +3 -3
  393. package/.next/standalone/.next/server/app/green/insights/page.js +7 -6
  394. package/.next/standalone/.next/server/app/green/insights/page.js.nft.json +1 -1
  395. package/.next/standalone/.next/server/app/green/insights/page_client-reference-manifest.js +1 -1
  396. package/.next/standalone/.next/server/app/green/insights.html +16 -1
  397. package/.next/standalone/.next/server/app/green/insights.rsc +12 -12
  398. package/.next/standalone/.next/server/app/green/insights.segments/_full.segment.rsc +12 -12
  399. package/.next/standalone/.next/server/app/green/insights.segments/_head.segment.rsc +4 -4
  400. package/.next/standalone/.next/server/app/green/insights.segments/_index.segment.rsc +4 -4
  401. package/.next/standalone/.next/server/app/green/insights.segments/_tree.segment.rsc +2 -2
  402. package/.next/standalone/.next/server/app/green/insights.segments/green/insights/__PAGE__.segment.rsc +4 -4
  403. package/.next/standalone/.next/server/app/green/insights.segments/green/insights.segment.rsc +3 -3
  404. package/.next/standalone/.next/server/app/green/insights.segments/green.segment.rsc +3 -3
  405. package/.next/standalone/.next/server/app/green/page/build-manifest.json +3 -3
  406. package/.next/standalone/.next/server/app/green/page.js +7 -6
  407. package/.next/standalone/.next/server/app/green/page.js.nft.json +1 -1
  408. package/.next/standalone/.next/server/app/green/page_client-reference-manifest.js +1 -1
  409. package/.next/standalone/.next/server/app/green/queries/[id]/page/build-manifest.json +3 -3
  410. package/.next/standalone/.next/server/app/green/queries/[id]/page.js +7 -6
  411. package/.next/standalone/.next/server/app/green/queries/[id]/page.js.nft.json +1 -1
  412. package/.next/standalone/.next/server/app/green/queries/[id]/page_client-reference-manifest.js +1 -1
  413. package/.next/standalone/.next/server/app/green/queries/page/build-manifest.json +3 -3
  414. package/.next/standalone/.next/server/app/green/queries/page.js +7 -6
  415. package/.next/standalone/.next/server/app/green/queries/page.js.nft.json +1 -1
  416. package/.next/standalone/.next/server/app/green/queries/page_client-reference-manifest.js +1 -1
  417. package/.next/standalone/.next/server/app/green/queries.html +16 -1
  418. package/.next/standalone/.next/server/app/green/queries.rsc +12 -12
  419. package/.next/standalone/.next/server/app/green/queries.segments/_full.segment.rsc +12 -12
  420. package/.next/standalone/.next/server/app/green/queries.segments/_head.segment.rsc +4 -4
  421. package/.next/standalone/.next/server/app/green/queries.segments/_index.segment.rsc +4 -4
  422. package/.next/standalone/.next/server/app/green/queries.segments/_tree.segment.rsc +2 -2
  423. package/.next/standalone/.next/server/app/green/queries.segments/green/queries/__PAGE__.segment.rsc +4 -4
  424. package/.next/standalone/.next/server/app/green/queries.segments/green/queries.segment.rsc +3 -3
  425. package/.next/standalone/.next/server/app/green/queries.segments/green.segment.rsc +3 -3
  426. package/.next/standalone/.next/server/app/green.html +16 -1
  427. package/.next/standalone/.next/server/app/green.rsc +12 -12
  428. package/.next/standalone/.next/server/app/green.segments/_full.segment.rsc +12 -12
  429. package/.next/standalone/.next/server/app/green.segments/_head.segment.rsc +4 -4
  430. package/.next/standalone/.next/server/app/green.segments/_index.segment.rsc +4 -4
  431. package/.next/standalone/.next/server/app/green.segments/_tree.segment.rsc +2 -2
  432. package/.next/standalone/.next/server/app/green.segments/green/__PAGE__.segment.rsc +4 -4
  433. package/.next/standalone/.next/server/app/green.segments/green.segment.rsc +3 -3
  434. package/.next/standalone/.next/server/app/index.html +16 -1
  435. package/.next/standalone/.next/server/app/index.rsc +14 -17
  436. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +5 -8
  437. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +14 -17
  438. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +4 -4
  439. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +4 -4
  440. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  441. package/.next/standalone/.next/server/app/opengraph-image/route/app-paths-manifest.json +3 -0
  442. package/.next/standalone/.next/server/app/opengraph-image/route/build-manifest.json +9 -0
  443. package/.next/standalone/.next/server/app/opengraph-image/route/middleware-manifest.json +55 -0
  444. package/.next/standalone/.next/server/app/opengraph-image/route/server-reference-manifest.json +4 -0
  445. package/.next/standalone/.next/server/app/opengraph-image/route_client-reference-manifest.js +3 -0
  446. package/.next/standalone/.next/server/app/page/build-manifest.json +3 -3
  447. package/.next/standalone/.next/server/app/page.js +7 -6
  448. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  449. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  450. package/.next/standalone/.next/server/app/pricing/page/build-manifest.json +3 -3
  451. package/.next/standalone/.next/server/app/pricing/page.js +7 -6
  452. package/.next/standalone/.next/server/app/pricing/page.js.nft.json +1 -1
  453. package/.next/standalone/.next/server/app/pricing/page_client-reference-manifest.js +1 -1
  454. package/.next/standalone/.next/server/app/pricing.html +16 -1
  455. package/.next/standalone/.next/server/app/pricing.rsc +12 -12
  456. package/.next/standalone/.next/server/app/pricing.segments/_full.segment.rsc +12 -12
  457. package/.next/standalone/.next/server/app/pricing.segments/_head.segment.rsc +4 -4
  458. package/.next/standalone/.next/server/app/pricing.segments/_index.segment.rsc +4 -4
  459. package/.next/standalone/.next/server/app/pricing.segments/_tree.segment.rsc +2 -2
  460. package/.next/standalone/.next/server/app/pricing.segments/pricing/__PAGE__.segment.rsc +4 -4
  461. package/.next/standalone/.next/server/app/pricing.segments/pricing.segment.rsc +3 -3
  462. package/.next/standalone/.next/server/app/robots.txt/route/app-paths-manifest.json +3 -0
  463. package/.next/standalone/.next/server/app/robots.txt/route/build-manifest.json +9 -0
  464. package/.next/standalone/.next/server/app/robots.txt/route/server-reference-manifest.json +4 -0
  465. package/.next/standalone/.next/server/app/robots.txt/route.js +6 -0
  466. package/.next/standalone/.next/server/app/robots.txt/route.js.map +5 -0
  467. package/.next/standalone/.next/server/app/robots.txt/route.js.nft.json +1 -0
  468. package/.next/standalone/.next/server/app/robots.txt/route_client-reference-manifest.js +3 -0
  469. package/.next/standalone/.next/server/app/robots.txt.body +4 -0
  470. package/.next/standalone/.next/server/app/robots.txt.meta +1 -0
  471. package/.next/standalone/.next/server/app/settings/page/build-manifest.json +3 -3
  472. package/.next/standalone/.next/server/app/settings/page.js +7 -6
  473. package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
  474. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  475. package/.next/standalone/.next/server/app/settings.html +17 -2
  476. package/.next/standalone/.next/server/app/settings.rsc +12 -12
  477. package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +12 -12
  478. package/.next/standalone/.next/server/app/settings.segments/_head.segment.rsc +4 -4
  479. package/.next/standalone/.next/server/app/settings.segments/_index.segment.rsc +4 -4
  480. package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  481. package/.next/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
  482. package/.next/standalone/.next/server/app/settings.segments/settings.segment.rsc +3 -3
  483. package/.next/standalone/.next/server/app/sitemap.xml/route/app-paths-manifest.json +3 -0
  484. package/.next/standalone/.next/server/app/sitemap.xml/route/build-manifest.json +9 -0
  485. package/.next/standalone/.next/server/app/sitemap.xml/route/server-reference-manifest.json +4 -0
  486. package/.next/standalone/.next/server/app/sitemap.xml/route.js +6 -0
  487. package/.next/standalone/.next/server/app/sitemap.xml/route.js.map +5 -0
  488. package/.next/standalone/.next/server/app/sitemap.xml/route.js.nft.json +1 -0
  489. package/.next/standalone/.next/server/app/sitemap.xml/route_client-reference-manifest.js +3 -0
  490. package/.next/standalone/.next/server/app/sitemap.xml.body +15 -0
  491. package/.next/standalone/.next/server/app/sitemap.xml.meta +1 -0
  492. package/.next/standalone/.next/server/app-paths-manifest.json +19 -1
  493. package/.next/standalone/.next/server/chunks/0zjb_server_app_api_blue_explorer_comments_[hash]_route_actions_0vcsn.6.js +3 -0
  494. package/.next/standalone/.next/server/chunks/[externals]__09zt1jz._.js +3 -0
  495. package/.next/standalone/.next/server/chunks/[externals]__0llp7ns._.js +3 -0
  496. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0-_kbqv._.js +3 -0
  497. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0-u6djr._.js +3 -0
  498. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0.1_0fc._.js +3 -0
  499. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0.a~iej._.js +3 -0
  500. package/.next/standalone/.next/server/chunks/[root-of-the-server]__00o4_u1._.js +3 -0
  501. package/.next/standalone/.next/server/chunks/[root-of-the-server]__00z27_~._.js +3 -0
  502. package/.next/standalone/.next/server/chunks/[root-of-the-server]__015yog3._.js +3 -0
  503. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__057dm7o._.js → [root-of-the-server]__03h7ciu._.js} +2 -2
  504. package/.next/standalone/.next/server/chunks/[root-of-the-server]__04ayej3._.js +3 -0
  505. package/.next/standalone/.next/server/chunks/[root-of-the-server]__05jxxrg._.js +3 -0
  506. package/.next/standalone/.next/server/chunks/[root-of-the-server]__05rkuse._.js +3 -0
  507. package/.next/standalone/.next/server/chunks/[root-of-the-server]__07opyla._.js +3 -0
  508. package/.next/standalone/.next/server/chunks/[root-of-the-server]__08rxe0c._.js +1 -1
  509. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0al39ks._.js +3 -0
  510. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0dm0ltn._.js +18 -0
  511. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ej-sox._.js +3 -0
  512. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0g2cneg._.js +3 -0
  513. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0hob61c._.js +3 -0
  514. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0iw8e_f._.js +3 -0
  515. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0kcnwu2._.js +12 -0
  516. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0lr.81o._.js +3 -0
  517. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0nw674y._.js +25 -0
  518. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0y8piqx._.js +3 -0
  519. package/.next/standalone/.next/server/chunks/[root-of-the-server]__10ik4no._.js +18 -0
  520. package/.next/standalone/.next/server/chunks/[root-of-the-server]__110q_br._.js +3 -0
  521. package/.next/standalone/.next/server/chunks/[root-of-the-server]__12~0-.3._.js +9 -0
  522. package/.next/standalone/.next/server/chunks/[root-of-the-server]__12~2w79._.js +3 -0
  523. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_blue_explorer_ask_route_actions_0r~kvok.js +3 -0
  524. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_blue_explorer_explain_route_actions_12eog3h.js +3 -0
  525. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_blue_explorer_outdated_route_actions_0ve2kgj.js +3 -0
  526. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_blue_explorer_refactor_route_actions_0t01_o-.js +3 -0
  527. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_blue_explorer_route_actions_0.wyum1.js +3 -0
  528. package/.next/standalone/.next/server/chunks/_next-internal_server_app_robots_txt_route_actions_0o-41u5.js +3 -0
  529. package/.next/standalone/.next/server/chunks/_next-internal_server_app_sitemap_xml_route_actions_036gxb_.js +3 -0
  530. package/.next/standalone/.next/server/chunks/node_modules_formdata-node_lib_esm_File_0z8djjs.js +3 -0
  531. package/.next/standalone/.next/server/chunks/node_modules_prismlens_dist_blueprint_index_mjs_09t4x1q._.js +15 -0
  532. package/.next/standalone/.next/server/chunks/ssr/[externals]_next_dist_compiled_@vercel_og_index_node_00__rw~.js +3 -0
  533. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0-v0zkq._.js +3 -0
  534. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0.z8rt5._.js +3 -0
  535. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__002bwgx._.js +3 -0
  536. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__00enkqg._.js +3 -0
  537. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__00qbgde._.js +3 -0
  538. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__00s7d9d._.js +3 -0
  539. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0146kpw._.js +3 -0
  540. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__02fj~fq._.js +3 -0
  541. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__04pode_._.js +3 -0
  542. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__057uqov._.js +3 -0
  543. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__07hbx_~._.js +3 -0
  544. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__08havup._.js +3 -0
  545. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__09o.tld._.js +3 -0
  546. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0_9rzlv._.js +3 -0
  547. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0_e85m1._.js +3 -0
  548. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0aadhfz._.js +3 -0
  549. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0atb5-1._.js +3 -0
  550. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__06-2p1a._.js → [root-of-the-server]__0bctf5o._.js} +2 -2
  551. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0l0p4fp._.js → [root-of-the-server]__0c2wumy._.js} +2 -2
  552. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__00qf837._.js → [root-of-the-server]__0c3j40u._.js} +2 -2
  553. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0decy7r._.js +3 -0
  554. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0dfvt6t._.js +3 -0
  555. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0doevf2._.js +3 -0
  556. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0hs2_5m._.js +3 -0
  557. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0hu0394._.js +3 -0
  558. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ibs45v._.js +3 -0
  559. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0je_29r._.js +3 -0
  560. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0kj~9t5._.js +3 -0
  561. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0l4tu0b._.js +3 -0
  562. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0lmh-gq._.js +16 -1
  563. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0m5k043._.js +3 -0
  564. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0m_r2tf._.js +3 -0
  565. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0n5.i5o._.js +3 -0
  566. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0nn_kww._.js +3 -0
  567. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0nwgxk.._.js +3 -0
  568. package/.next/standalone/.next/server/chunks/ssr/{node_modules_09w7yel._.js → [root-of-the-server]__0onmgst._.js} +2 -2
  569. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0osocr~._.js +3 -0
  570. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0qqrwlg._.js +3 -0
  571. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0rkr0vj._.js +3 -0
  572. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0s.m1v5._.js +3 -0
  573. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ufwt1o._.js +3 -0
  574. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0uiaixl._.js +3 -0
  575. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0uiwp54._.js +3 -0
  576. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ulh4tl._.js +3 -0
  577. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0uuf.u8._.js +3 -0
  578. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0v~k49l._.js +3 -0
  579. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0wbl.9m._.js +3 -0
  580. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0zakuph._.js +3 -0
  581. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0zc2vvu._.js +3 -0
  582. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0~6rwng._.js → [root-of-the-server]__0~953ob._.js} +2 -2
  583. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0~jp23r._.js +3 -0
  584. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__104zs41._.js +3 -0
  585. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__106354b._.js +3 -0
  586. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11g2zs0._.js +3 -0
  587. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11nem7j._.js +3 -0
  588. package/.next/standalone/.next/server/chunks/ssr/_0.ka4xf._.js +3 -0
  589. package/.next/standalone/.next/server/chunks/ssr/_01z7a3z._.js +3 -0
  590. package/.next/standalone/.next/server/chunks/ssr/{_0a2egyj._.js → _06rpc0r._.js} +3 -3
  591. package/.next/standalone/.next/server/chunks/ssr/_07.lcck._.js +3 -0
  592. package/.next/standalone/.next/server/chunks/ssr/_092jljj._.js +3 -0
  593. package/.next/standalone/.next/server/chunks/ssr/_0aqki6q._.js +3 -0
  594. package/.next/standalone/.next/server/chunks/ssr/_0coo8pw._.js +3 -0
  595. package/.next/standalone/.next/server/chunks/ssr/_0h6lz_4._.js +3 -0
  596. package/.next/standalone/.next/server/chunks/ssr/_0ip-ny~._.js +3 -0
  597. package/.next/standalone/.next/server/chunks/ssr/_0uh4anr._.js +3 -0
  598. package/.next/standalone/.next/server/chunks/ssr/_0zp-~jg._.js +3 -0
  599. package/.next/standalone/.next/server/chunks/ssr/_12xcgz-._.js +3 -0
  600. package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_blue_explorer_ask_page_actions_02n~rqd.js +3 -0
  601. package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_blue_explorer_explain_page_actions_0_k_rzv.js +3 -0
  602. package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_blue_explorer_file_[path]_page_actions_0wclwva.js +3 -0
  603. package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_blue_explorer_flow_page_actions_0by4-8g.js +3 -0
  604. package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_blue_explorer_graph_page_actions_0a7lmoh.js +3 -0
  605. package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_blue_explorer_page_actions_07.qnb8.js +3 -0
  606. package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_blue_explorer_refactor_page_actions_0i~b~z~.js +3 -0
  607. package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_blue_explorer_wire_page_actions_0_ulegt.js +3 -0
  608. package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_blue_explorer_zones_page_actions_035hbi..js +3 -0
  609. package/.next/standalone/.next/server/chunks/ssr/app_settings_page_tsx_0~q~t-v._.js +1 -1
  610. package/.next/standalone/.next/server/chunks/ssr/components_0fj4wag._.js +3 -0
  611. package/.next/standalone/.next/server/chunks/ssr/node_modules_0.a6abj._.js +4 -0
  612. package/.next/standalone/.next/server/chunks/ssr/{node_modules_05l396c._.js → node_modules_0_ce7g1._.js} +2 -2
  613. package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_0e1izl_._.js → node_modules_next_dist_0h9llsw._.js} +3 -3
  614. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_0ppctuh._.js +1 -1
  615. package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_0s~.~pu.js → node_modules_next_dist_esm_build_templates_app-page_05u8x5_.js} +3 -3
  616. package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_0sxy.f3.js → node_modules_next_dist_esm_build_templates_app-page_06ew59r.js} +3 -3
  617. package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_0o9vt1n.js → node_modules_next_dist_esm_build_templates_app-page_07.mi98.js} +3 -3
  618. package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_0syz6td.js → node_modules_next_dist_esm_build_templates_app-page_0_1ho0v.js} +3 -3
  619. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0af2rxr.js +4 -0
  620. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0bfq7ii.js +4 -0
  621. package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_0~ua1n5.js → node_modules_next_dist_esm_build_templates_app-page_0bu9_s4.js} +3 -3
  622. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0eme4-e.js +4 -0
  623. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0g87jdm.js +4 -0
  624. package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_0f56w9x.js → node_modules_next_dist_esm_build_templates_app-page_0g8p7kq.js} +3 -3
  625. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0h9l08z.js +4 -0
  626. package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_0s3yj4m.js → node_modules_next_dist_esm_build_templates_app-page_0hk2me4.js} +3 -3
  627. package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_0e3kicm.js → node_modules_next_dist_esm_build_templates_app-page_0kbi_34.js} +3 -3
  628. package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_0hieuck.js → node_modules_next_dist_esm_build_templates_app-page_0ks1jqa.js} +3 -3
  629. package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_0d9vf7z.js → node_modules_next_dist_esm_build_templates_app-page_0mlmh3q.js} +3 -3
  630. package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_00yi7.o.js → node_modules_next_dist_esm_build_templates_app-page_0oo.~18.js} +3 -3
  631. package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_11g~g_~.js → node_modules_next_dist_esm_build_templates_app-page_0r7l-mi.js} +3 -3
  632. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0rlaj8t.js +4 -0
  633. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0x4equp.js +4 -0
  634. package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_0sh6t-i.js → node_modules_next_dist_esm_build_templates_app-page_0x75saz.js} +3 -3
  635. package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_0bjxb9g.js → node_modules_next_dist_esm_build_templates_app-page_0xu.46n.js} +3 -3
  636. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0y6uuyh.js +4 -0
  637. package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_0zqx4_i.js → node_modules_next_dist_esm_build_templates_app-page_0yzh0tq.js} +3 -3
  638. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0z0f5ge.js +4 -0
  639. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0z_~vy~.js +4 -0
  640. package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_0_em0bi.js → node_modules_next_dist_esm_build_templates_app-page_10rr-m7.js} +3 -3
  641. package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_02suzhc.js → node_modules_next_dist_esm_build_templates_app-page_1199g51.js} +3 -3
  642. package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_002l7yi.js → node_modules_next_dist_esm_build_templates_app-page_13sg.-w.js} +3 -3
  643. package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_10.cf7n.js → node_modules_next_dist_esm_build_templates_app-page_13~6-je.js} +3 -3
  644. package/.next/standalone/.next/server/edge/assets/Geist-Regular.01xk7kbsv57y-.ttf +0 -0
  645. package/.next/standalone/.next/server/edge/chunks/[root-of-the-server]__01rmks4._.js +14 -0
  646. package/.next/standalone/.next/server/edge/chunks/_next-internal_server_app_opengraph-image_route_actions_064c5ks.js +3 -0
  647. package/.next/standalone/.next/server/edge/chunks/node_modules_next_dist_compiled_@vercel_og_11csqje._.js +57 -0
  648. package/.next/standalone/.next/server/edge/chunks/node_modules_next_dist_compiled_@vercel_og_resvg_0656eb_.wasm +0 -0
  649. package/.next/standalone/.next/server/edge/chunks/node_modules_next_dist_compiled_@vercel_og_yoga_0656eb_.wasm +0 -0
  650. package/.next/standalone/.next/server/edge/chunks/node_modules_next_dist_esm_0u5k_dj._.js +4 -0
  651. package/.next/standalone/.next/server/edge/chunks/turbopack-node_modules_next_dist_esm_build_templates_edge-wrapper_13_vdjg.js +3 -0
  652. package/.next/standalone/.next/server/functions-config-manifest.json +3 -1
  653. package/.next/standalone/.next/server/interception-route-rewrite-manifest.js +1 -0
  654. package/.next/standalone/.next/server/middleware-build-manifest.js +6 -6
  655. package/.next/standalone/.next/server/middleware-manifest.json +48 -1
  656. package/.next/standalone/.next/server/next-font-manifest.js +1 -1
  657. package/.next/standalone/.next/server/next-font-manifest.json +27 -0
  658. package/.next/standalone/.next/server/pages/404.html +16 -1
  659. package/.next/standalone/.next/server/pages/500.html +1 -1
  660. package/.next/standalone/.next/static/chunks/0.7tzhf16ru46.js +1 -0
  661. package/.next/standalone/.next/static/chunks/05gu01au_dwcj.js +1 -0
  662. package/.next/standalone/.next/static/chunks/05nost58qxs6v.js +1 -0
  663. package/.next/standalone/.next/static/chunks/06elucg1mxxoh.js +1 -0
  664. package/.next/standalone/.next/static/chunks/06kugg03tsd8b.js +1 -0
  665. package/.next/standalone/.next/static/chunks/{0aqr1e8db8tr2.js → 06p7wo6e8t.od.js} +1 -1
  666. package/.next/standalone/.next/static/chunks/07aoc11.zdzf8.js +1 -0
  667. package/.next/standalone/.next/static/chunks/09qhwosl0iys-.js +1 -0
  668. package/.next/standalone/.next/static/chunks/09s8.y~g8zbzu.js +1 -0
  669. package/.next/standalone/.next/static/chunks/0abf4q0cvzuh-.js +1 -0
  670. package/.next/standalone/.next/static/chunks/0b5.wij1e3glg.js +1 -0
  671. package/.next/standalone/.next/static/chunks/0cvuvowsou0o8.js +1 -0
  672. package/.next/standalone/.next/static/chunks/0dcn7hwhqc7oo.js +5 -0
  673. package/.next/standalone/.next/static/chunks/0gen29d04~p.7.js +1 -0
  674. package/.next/standalone/.next/static/chunks/0gnab87818zm2.js +1 -0
  675. package/.next/standalone/.next/static/chunks/0im62x.m~satf.js +1 -0
  676. package/.next/standalone/.next/static/chunks/0iqf1ofr-ylk6.js +1 -0
  677. package/.next/standalone/.next/static/chunks/0jvmviuftg5e2.css +1 -0
  678. package/.next/standalone/.next/static/chunks/0k5q69zf9pzts.js +1 -0
  679. package/.next/standalone/.next/static/chunks/0mzu..9~k1gj_.js +1 -0
  680. package/.next/standalone/.next/static/chunks/0phqsvceac9zj.js +1 -0
  681. package/.next/standalone/.next/static/chunks/0qg39idelgpzj.js +1 -0
  682. package/.next/standalone/.next/static/chunks/0sh.6aqimy6c9.js +1 -0
  683. package/.next/standalone/.next/static/chunks/0stxvz7-b-_hk.js +2 -0
  684. package/.next/standalone/.next/static/chunks/0t2xi5h-ep20d.js +1 -0
  685. package/.next/standalone/.next/static/chunks/0uafdcbqw67js.js +31 -0
  686. package/.next/standalone/.next/static/chunks/0umwxezu2vs4e.js +1 -0
  687. package/.next/standalone/.next/static/chunks/0w2v1keurbd0~.css +2 -0
  688. package/.next/standalone/.next/static/chunks/0xaucnx-qpr_w.js +1 -0
  689. package/.next/standalone/.next/static/chunks/0zsnbs.s_53u~.js +1 -0
  690. package/.next/standalone/.next/static/chunks/0z~jj59vp-m_n.js +1 -0
  691. package/.next/standalone/.next/static/chunks/13jowzyvewffe.js +1 -0
  692. package/.next/standalone/.next/static/chunks/15i3g-xalrve~.js +1 -0
  693. package/.next/standalone/.next/static/chunks/163lw2aq6bjfx.js +1 -0
  694. package/.next/standalone/.next/static/chunks/16atj1ec7x_0f.js +1 -0
  695. package/.next/standalone/.next/static/chunks/17jnlzs-eg0d4.js +1 -0
  696. package/.next/standalone/.next/static/chunks/17td2rxj_g3a9.js +1 -0
  697. package/.next/{static/chunks/turbopack-134gd3wlo5u4g.js → standalone/.next/static/chunks/turbopack-091rvjwm-~fvc.js} +1 -1
  698. package/.next/standalone/.next/static/static/chunks/0.7tzhf16ru46.js +1 -0
  699. package/.next/standalone/.next/static/static/chunks/05gu01au_dwcj.js +1 -0
  700. package/.next/standalone/.next/static/static/chunks/05nost58qxs6v.js +1 -0
  701. package/.next/standalone/.next/static/static/chunks/06elucg1mxxoh.js +1 -0
  702. package/.next/standalone/.next/static/static/chunks/06kugg03tsd8b.js +1 -0
  703. package/.next/{static/chunks/0aqr1e8db8tr2.js → standalone/.next/static/static/chunks/06p7wo6e8t.od.js} +1 -1
  704. package/.next/standalone/.next/static/static/chunks/07aoc11.zdzf8.js +1 -0
  705. package/.next/standalone/.next/static/static/chunks/09qhwosl0iys-.js +1 -0
  706. package/.next/standalone/.next/static/static/chunks/09s8.y~g8zbzu.js +1 -0
  707. package/.next/standalone/.next/static/static/chunks/0abf4q0cvzuh-.js +1 -0
  708. package/.next/standalone/.next/static/static/chunks/0b5.wij1e3glg.js +1 -0
  709. package/.next/standalone/.next/static/static/chunks/0cvuvowsou0o8.js +1 -0
  710. package/.next/standalone/.next/static/static/chunks/0dcn7hwhqc7oo.js +5 -0
  711. package/.next/standalone/.next/static/static/chunks/0gen29d04~p.7.js +1 -0
  712. package/.next/standalone/.next/static/static/chunks/0gnab87818zm2.js +1 -0
  713. package/.next/standalone/.next/static/static/chunks/0im62x.m~satf.js +1 -0
  714. package/.next/standalone/.next/static/static/chunks/0iqf1ofr-ylk6.js +1 -0
  715. package/.next/standalone/.next/static/static/chunks/0jvmviuftg5e2.css +1 -0
  716. package/.next/standalone/.next/static/static/chunks/0k5q69zf9pzts.js +1 -0
  717. package/.next/standalone/.next/static/static/chunks/0mzu..9~k1gj_.js +1 -0
  718. package/.next/standalone/.next/static/static/chunks/0phqsvceac9zj.js +1 -0
  719. package/.next/standalone/.next/static/static/chunks/0qg39idelgpzj.js +1 -0
  720. package/.next/standalone/.next/static/static/chunks/0sh.6aqimy6c9.js +1 -0
  721. package/.next/standalone/.next/static/static/chunks/0stxvz7-b-_hk.js +2 -0
  722. package/.next/standalone/.next/static/static/chunks/0t2xi5h-ep20d.js +1 -0
  723. package/.next/standalone/.next/static/static/chunks/0uafdcbqw67js.js +31 -0
  724. package/.next/standalone/.next/static/static/chunks/0umwxezu2vs4e.js +1 -0
  725. package/.next/standalone/.next/static/static/chunks/0w2v1keurbd0~.css +2 -0
  726. package/.next/standalone/.next/static/static/chunks/0xaucnx-qpr_w.js +1 -0
  727. package/.next/standalone/.next/static/static/chunks/0zsnbs.s_53u~.js +1 -0
  728. package/.next/standalone/.next/static/static/chunks/0z~jj59vp-m_n.js +1 -0
  729. package/.next/standalone/.next/static/static/chunks/13jowzyvewffe.js +1 -0
  730. package/.next/standalone/.next/static/static/chunks/15i3g-xalrve~.js +1 -0
  731. package/.next/standalone/.next/static/static/chunks/163lw2aq6bjfx.js +1 -0
  732. package/.next/standalone/.next/static/static/chunks/16atj1ec7x_0f.js +1 -0
  733. package/.next/standalone/.next/static/static/chunks/17jnlzs-eg0d4.js +1 -0
  734. package/.next/standalone/.next/static/static/chunks/17td2rxj_g3a9.js +1 -0
  735. package/.next/standalone/.next/static/static/chunks/{turbopack-134gd3wlo5u4g.js → turbopack-091rvjwm-~fvc.js} +1 -1
  736. package/.next/standalone/CHANGELOG.md +105 -0
  737. package/.next/standalone/app/amber/page.tsx +10 -0
  738. package/.next/standalone/app/api/blue/explorer/ask/route.ts +49 -0
  739. package/.next/standalone/app/api/blue/explorer/comments/[hash]/route.ts +65 -0
  740. package/.next/standalone/app/api/blue/explorer/explain/route.ts +81 -0
  741. package/.next/standalone/app/api/blue/explorer/outdated/route.ts +20 -0
  742. package/.next/standalone/app/api/blue/explorer/refactor/route.ts +97 -0
  743. package/.next/standalone/app/api/blue/explorer/route.ts +45 -0
  744. package/.next/standalone/app/blue/explorer/ask/page.tsx +219 -0
  745. package/.next/standalone/app/blue/explorer/explain/page.tsx +139 -0
  746. package/.next/standalone/app/blue/explorer/file/[path]/page.tsx +164 -0
  747. package/.next/standalone/app/blue/explorer/flow/page.tsx +69 -0
  748. package/.next/standalone/app/blue/explorer/graph/page.tsx +96 -0
  749. package/.next/standalone/app/blue/explorer/layout.tsx +8 -0
  750. package/.next/standalone/app/blue/explorer/page.tsx +219 -0
  751. package/.next/standalone/app/blue/explorer/refactor/page.tsx +206 -0
  752. package/.next/standalone/app/blue/explorer/wire/page.tsx +69 -0
  753. package/.next/standalone/app/blue/explorer/zones/page.tsx +69 -0
  754. package/.next/standalone/app/blue/page.tsx +10 -0
  755. package/.next/standalone/app/green/page.tsx +10 -0
  756. package/.next/standalone/app/layout.tsx +63 -3
  757. package/.next/standalone/app/opengraph-image.tsx +126 -0
  758. package/.next/standalone/app/page.tsx +7 -135
  759. package/.next/standalone/app/pricing/page.tsx +18 -15
  760. package/.next/standalone/app/robots.ts +8 -0
  761. package/.next/standalone/app/sitemap.ts +18 -0
  762. package/.next/standalone/components/DemoModeNotice.tsx +118 -0
  763. package/.next/standalone/components/PrismDock.tsx +8 -2
  764. package/.next/standalone/components/blue-explorer/BlueprintGraph.tsx +138 -0
  765. package/.next/standalone/components/blue-explorer/ExplorerFileCard.tsx +125 -0
  766. package/.next/standalone/components/blue-explorer/ExplorerGate.tsx +30 -0
  767. package/.next/standalone/components/blue-explorer/ExplorerNav.tsx +70 -0
  768. package/.next/standalone/components/blue-explorer/ExplorerSummary.tsx +188 -0
  769. package/.next/standalone/components/blue-explorer/FlowView.tsx +166 -0
  770. package/.next/standalone/components/blue-explorer/ProGate.tsx +93 -0
  771. package/.next/standalone/components/blue-explorer/RescanButton.tsx +44 -0
  772. package/.next/standalone/components/blue-explorer/WireView.tsx +232 -0
  773. package/.next/standalone/components/blue-explorer/ZonesView.tsx +171 -0
  774. package/.next/standalone/components/blue-explorer/primitives.tsx +127 -0
  775. package/.next/standalone/components/dashboard/DashboardHome.tsx +123 -0
  776. package/.next/standalone/components/landing/Footer.tsx +104 -0
  777. package/.next/standalone/components/landing/HeroVisual.tsx +171 -0
  778. package/.next/standalone/components/landing/LandingPage.tsx +1003 -0
  779. package/.next/standalone/components/landing/NavBar.tsx +62 -0
  780. package/.next/standalone/docs/marketing/launch-materials.md +696 -0
  781. package/.next/standalone/lib/prism/blue/explorer/heatHelpers.ts +73 -0
  782. package/.next/standalone/lib/prism/blue/explorer/types.ts +31 -0
  783. package/.next/standalone/lib/prism/blue/explorer/useExplorerBlueprint.ts +37 -0
  784. package/.next/standalone/lib/prism/features.shared.ts +2 -0
  785. package/.next/standalone/node_modules/next/dist/compiled/@vercel/og/Geist-Regular.ttf +0 -0
  786. package/.next/standalone/node_modules/next/dist/compiled/@vercel/og/LICENSE +373 -0
  787. package/.next/standalone/node_modules/next/dist/compiled/@vercel/og/index.edge.js +20508 -0
  788. package/.next/standalone/node_modules/next/dist/compiled/@vercel/og/index.node.js +21548 -0
  789. package/.next/standalone/node_modules/next/dist/compiled/@vercel/og/package.json +16 -0
  790. package/.next/standalone/node_modules/next/dist/compiled/@vercel/og/resvg.wasm +0 -0
  791. package/.next/standalone/node_modules/next/dist/compiled/@vercel/og/satori/LICENSE +373 -0
  792. package/.next/standalone/node_modules/next/dist/compiled/@vercel/og/yoga.wasm +0 -0
  793. package/.next/standalone/node_modules/prismlens/dist/blueprint/index.cjs +2544 -0
  794. package/.next/standalone/node_modules/prismlens/dist/blueprint/index.d.mts +484 -0
  795. package/.next/standalone/node_modules/prismlens/dist/blueprint/index.mjs +2521 -0
  796. package/.next/standalone/package-lock.json +272 -7
  797. package/.next/standalone/package.json +5 -2
  798. package/.next/standalone/server.js +1 -1
  799. package/.next/standalone/tsconfig.tsbuildinfo +1 -1
  800. package/.next/static/chunks/0.7tzhf16ru46.js +1 -0
  801. package/.next/static/chunks/05gu01au_dwcj.js +1 -0
  802. package/.next/static/chunks/05nost58qxs6v.js +1 -0
  803. package/.next/static/chunks/06elucg1mxxoh.js +1 -0
  804. package/.next/static/chunks/06kugg03tsd8b.js +1 -0
  805. package/.next/{standalone/.next/static/static/chunks/0aqr1e8db8tr2.js → static/chunks/06p7wo6e8t.od.js} +1 -1
  806. package/.next/static/chunks/07aoc11.zdzf8.js +1 -0
  807. package/.next/static/chunks/09qhwosl0iys-.js +1 -0
  808. package/.next/static/chunks/09s8.y~g8zbzu.js +1 -0
  809. package/.next/static/chunks/0abf4q0cvzuh-.js +1 -0
  810. package/.next/static/chunks/0b5.wij1e3glg.js +1 -0
  811. package/.next/static/chunks/0cvuvowsou0o8.js +1 -0
  812. package/.next/static/chunks/0dcn7hwhqc7oo.js +5 -0
  813. package/.next/static/chunks/0gen29d04~p.7.js +1 -0
  814. package/.next/static/chunks/0gnab87818zm2.js +1 -0
  815. package/.next/static/chunks/0im62x.m~satf.js +1 -0
  816. package/.next/static/chunks/0iqf1ofr-ylk6.js +1 -0
  817. package/.next/static/chunks/0jvmviuftg5e2.css +1 -0
  818. package/.next/static/chunks/0k5q69zf9pzts.js +1 -0
  819. package/.next/static/chunks/0mzu..9~k1gj_.js +1 -0
  820. package/.next/static/chunks/0phqsvceac9zj.js +1 -0
  821. package/.next/static/chunks/0qg39idelgpzj.js +1 -0
  822. package/.next/static/chunks/0sh.6aqimy6c9.js +1 -0
  823. package/.next/static/chunks/0stxvz7-b-_hk.js +2 -0
  824. package/.next/static/chunks/0t2xi5h-ep20d.js +1 -0
  825. package/.next/static/chunks/0uafdcbqw67js.js +31 -0
  826. package/.next/static/chunks/0umwxezu2vs4e.js +1 -0
  827. package/.next/static/chunks/0w2v1keurbd0~.css +2 -0
  828. package/.next/static/chunks/0xaucnx-qpr_w.js +1 -0
  829. package/.next/static/chunks/0zsnbs.s_53u~.js +1 -0
  830. package/.next/static/chunks/0z~jj59vp-m_n.js +1 -0
  831. package/.next/static/chunks/13jowzyvewffe.js +1 -0
  832. package/.next/static/chunks/15i3g-xalrve~.js +1 -0
  833. package/.next/static/chunks/163lw2aq6bjfx.js +1 -0
  834. package/.next/static/chunks/16atj1ec7x_0f.js +1 -0
  835. package/.next/static/chunks/17jnlzs-eg0d4.js +1 -0
  836. package/.next/static/chunks/17td2rxj_g3a9.js +1 -0
  837. package/.next/{standalone/.next/static/chunks/turbopack-134gd3wlo5u4g.js → static/chunks/turbopack-091rvjwm-~fvc.js} +1 -1
  838. package/CHANGELOG.md +105 -0
  839. package/package.json +5 -2
  840. package/.next/standalone/.next/server/chunks/[root-of-the-server]__01enpj0._.js +0 -3
  841. package/.next/standalone/.next/server/chunks/[root-of-the-server]__04187lj._.js +0 -3
  842. package/.next/standalone/.next/server/chunks/[root-of-the-server]__09snvkf._.js +0 -3
  843. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ae2a50._.js +0 -3
  844. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0d_1-q9._.js +0 -3
  845. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0e-cuw5._.js +0 -3
  846. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ei452y._.js +0 -3
  847. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0fxxbt1._.js +0 -12
  848. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0jwdt56._.js +0 -3
  849. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0kgqm5d._.js +0 -3
  850. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0m_11-d._.js +0 -3
  851. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0mh73gz._.js +0 -3
  852. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0qi502r._.js +0 -25
  853. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0s130_c._.js +0 -3
  854. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0v3_gr6._.js +0 -3
  855. package/.next/standalone/.next/server/chunks/[root-of-the-server]__119q6r9._.js +0 -3
  856. package/.next/standalone/.next/server/chunks/[root-of-the-server]__12glosw._.js +0 -3
  857. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__025n37g._.js +0 -3
  858. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__02hi65f._.js +0 -3
  859. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__02xqa5z._.js +0 -3
  860. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__03n1r1q._.js +0 -3
  861. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__07xy1qe._.js +0 -3
  862. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0aoevfd._.js +0 -3
  863. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0cc0jd2._.js +0 -3
  864. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0es1n-0._.js +0 -3
  865. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0f_22zl._.js +0 -3
  866. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0f_g6yh._.js +0 -3
  867. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ft0rpu._.js +0 -3
  868. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0i8e2c1._.js +0 -3
  869. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0kbydoz._.js +0 -3
  870. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0myb_oc._.js +0 -3
  871. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0qn1~qv._.js +0 -3
  872. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0thuf0u._.js +0 -3
  873. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0vxcr9p._.js +0 -3
  874. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0xhffh~._.js +0 -3
  875. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0y7o0cg._.js +0 -3
  876. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__13leyvb._.js +0 -3
  877. package/.next/standalone/.next/server/chunks/ssr/app_amber_capabilities_[id]_page_tsx_12~.miw._.js +0 -3
  878. package/.next/standalone/.next/server/chunks/ssr/app_amber_capabilities_page_tsx_0.t9mpr._.js +0 -3
  879. package/.next/standalone/.next/server/chunks/ssr/app_amber_coverage_page_tsx_01yia_n._.js +0 -3
  880. package/.next/standalone/.next/server/chunks/ssr/app_amber_files_page_tsx_00pdkc~._.js +0 -3
  881. package/.next/standalone/.next/server/chunks/ssr/app_amber_page_tsx_0ihx6zl._.js +0 -3
  882. package/.next/standalone/.next/server/chunks/ssr/app_blue_page_tsx_0zg5eg-._.js +0 -3
  883. package/.next/standalone/.next/server/chunks/ssr/app_blue_recommendations_[id]_page_tsx_10zzlnx._.js +0 -3
  884. package/.next/standalone/.next/server/chunks/ssr/app_blue_recommendations_page_tsx_08w-50l._.js +0 -3
  885. package/.next/standalone/.next/server/chunks/ssr/app_blue_sessions_[id]_page_tsx_0_~w1xj._.js +0 -3
  886. package/.next/standalone/.next/server/chunks/ssr/app_blue_sessions_page_tsx_0kbuf.c._.js +0 -3
  887. package/.next/standalone/.next/server/chunks/ssr/app_green_cross-layer_page_tsx_0a80o-~._.js +0 -3
  888. package/.next/standalone/.next/server/chunks/ssr/app_green_insights_[id]_page_tsx_0se6uk1._.js +0 -3
  889. package/.next/standalone/.next/server/chunks/ssr/app_green_insights_page_tsx_04g8_lf._.js +0 -3
  890. package/.next/standalone/.next/server/chunks/ssr/app_green_page_tsx_10g2g6w._.js +0 -3
  891. package/.next/standalone/.next/server/chunks/ssr/app_green_queries_[id]_page_tsx_0hg.qma._.js +0 -3
  892. package/.next/standalone/.next/server/chunks/ssr/app_green_queries_page_tsx_0.p0r7z._.js +0 -3
  893. package/.next/standalone/.next/server/chunks/ssr/app_page_tsx_0es_sk2._.js +0 -3
  894. package/.next/standalone/.next/server/chunks/ssr/app_pricing_page_tsx_0uxncj9._.js +0 -3
  895. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_09d0h78.js +0 -4
  896. package/.next/standalone/.next/static/chunks/0-nogwaahf00r.js +0 -1
  897. package/.next/standalone/.next/static/chunks/0-ozct-0~_~y0.js +0 -1
  898. package/.next/standalone/.next/static/chunks/0043va.q9c120.js +0 -1
  899. package/.next/standalone/.next/static/chunks/0062k_6y6ie8k.js +0 -1
  900. package/.next/standalone/.next/static/chunks/00gq-v0e07i1q.js +0 -31
  901. package/.next/standalone/.next/static/chunks/01x6uo5zvt23j.js +0 -1
  902. package/.next/standalone/.next/static/chunks/03f4g06bhu.q-.js +0 -1
  903. package/.next/standalone/.next/static/chunks/06ciexs8mfsoh.js +0 -1
  904. package/.next/standalone/.next/static/chunks/06lbhw~p794rn.js +0 -1
  905. package/.next/standalone/.next/static/chunks/0921_~z_rxr9h.js +0 -1
  906. package/.next/standalone/.next/static/chunks/0_uy4bqezjrpu.js +0 -1
  907. package/.next/standalone/.next/static/chunks/0bymg5d-lqs0o.js +0 -5
  908. package/.next/standalone/.next/static/chunks/0d3shmwh5_nmn.js +0 -1
  909. package/.next/standalone/.next/static/chunks/0gtjarbzj_b0s.js +0 -1
  910. package/.next/standalone/.next/static/chunks/0i826dpus7xfj.js +0 -1
  911. package/.next/standalone/.next/static/chunks/0l.f7bl92nc~2.css +0 -2
  912. package/.next/standalone/.next/static/chunks/0mtsra7dpsxy_.js +0 -1
  913. package/.next/standalone/.next/static/chunks/0nc15zt~yfrj3.js +0 -1
  914. package/.next/standalone/.next/static/chunks/0ptkiyk6p_hgq.js +0 -1
  915. package/.next/standalone/.next/static/chunks/0vsoyv8nkj.rx.js +0 -1
  916. package/.next/standalone/.next/static/chunks/0zpu7b02c6huw.js +0 -1
  917. package/.next/standalone/.next/static/chunks/10ibvf69namr1.js +0 -1
  918. package/.next/standalone/.next/static/chunks/1655x4_8fq5li.js +0 -1
  919. package/.next/standalone/.next/static/static/chunks/0-nogwaahf00r.js +0 -1
  920. package/.next/standalone/.next/static/static/chunks/0-ozct-0~_~y0.js +0 -1
  921. package/.next/standalone/.next/static/static/chunks/0043va.q9c120.js +0 -1
  922. package/.next/standalone/.next/static/static/chunks/0062k_6y6ie8k.js +0 -1
  923. package/.next/standalone/.next/static/static/chunks/00gq-v0e07i1q.js +0 -31
  924. package/.next/standalone/.next/static/static/chunks/01x6uo5zvt23j.js +0 -1
  925. package/.next/standalone/.next/static/static/chunks/03f4g06bhu.q-.js +0 -1
  926. package/.next/standalone/.next/static/static/chunks/06ciexs8mfsoh.js +0 -1
  927. package/.next/standalone/.next/static/static/chunks/06lbhw~p794rn.js +0 -1
  928. package/.next/standalone/.next/static/static/chunks/0921_~z_rxr9h.js +0 -1
  929. package/.next/standalone/.next/static/static/chunks/0_uy4bqezjrpu.js +0 -1
  930. package/.next/standalone/.next/static/static/chunks/0bymg5d-lqs0o.js +0 -5
  931. package/.next/standalone/.next/static/static/chunks/0d3shmwh5_nmn.js +0 -1
  932. package/.next/standalone/.next/static/static/chunks/0gtjarbzj_b0s.js +0 -1
  933. package/.next/standalone/.next/static/static/chunks/0i826dpus7xfj.js +0 -1
  934. package/.next/standalone/.next/static/static/chunks/0l.f7bl92nc~2.css +0 -2
  935. package/.next/standalone/.next/static/static/chunks/0mtsra7dpsxy_.js +0 -1
  936. package/.next/standalone/.next/static/static/chunks/0nc15zt~yfrj3.js +0 -1
  937. package/.next/standalone/.next/static/static/chunks/0ptkiyk6p_hgq.js +0 -1
  938. package/.next/standalone/.next/static/static/chunks/0vsoyv8nkj.rx.js +0 -1
  939. package/.next/standalone/.next/static/static/chunks/0zpu7b02c6huw.js +0 -1
  940. package/.next/standalone/.next/static/static/chunks/10ibvf69namr1.js +0 -1
  941. package/.next/standalone/.next/static/static/chunks/1655x4_8fq5li.js +0 -1
  942. package/.next/static/chunks/0-nogwaahf00r.js +0 -1
  943. package/.next/static/chunks/0-ozct-0~_~y0.js +0 -1
  944. package/.next/static/chunks/0043va.q9c120.js +0 -1
  945. package/.next/static/chunks/0062k_6y6ie8k.js +0 -1
  946. package/.next/static/chunks/00gq-v0e07i1q.js +0 -31
  947. package/.next/static/chunks/01x6uo5zvt23j.js +0 -1
  948. package/.next/static/chunks/03f4g06bhu.q-.js +0 -1
  949. package/.next/static/chunks/06ciexs8mfsoh.js +0 -1
  950. package/.next/static/chunks/06lbhw~p794rn.js +0 -1
  951. package/.next/static/chunks/0921_~z_rxr9h.js +0 -1
  952. package/.next/static/chunks/0_uy4bqezjrpu.js +0 -1
  953. package/.next/static/chunks/0bymg5d-lqs0o.js +0 -5
  954. package/.next/static/chunks/0d3shmwh5_nmn.js +0 -1
  955. package/.next/static/chunks/0gtjarbzj_b0s.js +0 -1
  956. package/.next/static/chunks/0i826dpus7xfj.js +0 -1
  957. package/.next/static/chunks/0l.f7bl92nc~2.css +0 -2
  958. package/.next/static/chunks/0mtsra7dpsxy_.js +0 -1
  959. package/.next/static/chunks/0nc15zt~yfrj3.js +0 -1
  960. package/.next/static/chunks/0ptkiyk6p_hgq.js +0 -1
  961. package/.next/static/chunks/0vsoyv8nkj.rx.js +0 -1
  962. package/.next/static/chunks/0zpu7b02c6huw.js +0 -1
  963. package/.next/static/chunks/10ibvf69namr1.js +0 -1
  964. package/.next/static/chunks/1655x4_8fq5li.js +0 -1
  965. /package/.next/standalone/.next/static/{W2AhxwlOVhsTt-b4T3Mjc → TQCtzFGZxZWxacCk_Wgfk}/_buildManifest.js +0 -0
  966. /package/.next/standalone/.next/static/{W2AhxwlOVhsTt-b4T3Mjc → TQCtzFGZxZWxacCk_Wgfk}/_clientMiddlewareManifest.js +0 -0
  967. /package/.next/standalone/.next/static/{W2AhxwlOVhsTt-b4T3Mjc → TQCtzFGZxZWxacCk_Wgfk}/_ssgManifest.js +0 -0
  968. /package/.next/standalone/.next/static/static/{W2AhxwlOVhsTt-b4T3Mjc → TQCtzFGZxZWxacCk_Wgfk}/_buildManifest.js +0 -0
  969. /package/.next/standalone/.next/static/static/{W2AhxwlOVhsTt-b4T3Mjc → TQCtzFGZxZWxacCk_Wgfk}/_clientMiddlewareManifest.js +0 -0
  970. /package/.next/standalone/.next/static/static/{W2AhxwlOVhsTt-b4T3Mjc → TQCtzFGZxZWxacCk_Wgfk}/_ssgManifest.js +0 -0
  971. /package/.next/static/{W2AhxwlOVhsTt-b4T3Mjc → TQCtzFGZxZWxacCk_Wgfk}/_buildManifest.js +0 -0
  972. /package/.next/static/{W2AhxwlOVhsTt-b4T3Mjc → TQCtzFGZxZWxacCk_Wgfk}/_clientMiddlewareManifest.js +0 -0
  973. /package/.next/static/{W2AhxwlOVhsTt-b4T3Mjc → TQCtzFGZxZWxacCk_Wgfk}/_ssgManifest.js +0 -0
@@ -0,0 +1,2544 @@
1
+ 'use strict';
2
+
3
+ var tsMorph = require('ts-morph');
4
+ var path = require('path');
5
+ var fs = require('fs');
6
+ var fg = require('fast-glob');
7
+ var child_process = require('child_process');
8
+ var url = require('url');
9
+
10
+ var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
11
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
12
+
13
+ var fg__default = /*#__PURE__*/_interopDefault(fg);
14
+
15
+ var __defProp = Object.defineProperty;
16
+ var __getOwnPropNames = Object.getOwnPropertyNames;
17
+ var __esm = (fn, res) => function __init() {
18
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
19
+ };
20
+ var __export = (target, all) => {
21
+ for (var name in all)
22
+ __defProp(target, name, { get: all[name], enumerable: true });
23
+ };
24
+
25
+ // src/astEnrich.ts
26
+ var astEnrich_exports = {};
27
+ __export(astEnrich_exports, {
28
+ enrichWithTypedSignatures: () => enrichWithTypedSignatures,
29
+ extractJsDocData: () => extractJsDocData,
30
+ extractTypedSignatures: () => extractTypedSignatures
31
+ });
32
+ function extractJsDocData(sf, nodePos) {
33
+ try {
34
+ const node = sf.getDescendantAtPos(nodePos);
35
+ if (!node) return { description: null, params: [], returns: null };
36
+ const jsDocs = node.getParent()?.getJsDocs?.() ?? [];
37
+ const jsDoc = jsDocs[jsDocs.length - 1];
38
+ if (!jsDoc) return { description: null, params: [], returns: null };
39
+ const description = jsDoc.getDescription()?.trim() || null;
40
+ const params = jsDoc.getTags().filter((t) => t.getTagName() === "param").map((t) => {
41
+ const full = t.getText().replace(/^@param\s*/, "");
42
+ const typeMatch = /\{([^}]+)\}/.exec(full);
43
+ const nameMatch = /\}\s+(\w+)/.exec(full);
44
+ const descMatch = /\}\s+\w+\s+-?\s*(.+)/.exec(full);
45
+ return {
46
+ type: typeMatch?.[1] ?? "unknown",
47
+ name: nameMatch?.[1] ?? "?",
48
+ description: descMatch?.[1]?.trim() ?? ""
49
+ };
50
+ });
51
+ const returnTag = jsDoc.getTags().find((t) => t.getTagName() === "returns" || t.getTagName() === "return");
52
+ const returns = returnTag ? returnTag.getText().replace(/^@returns?\s*/, "").trim() || null : null;
53
+ return { description, params, returns };
54
+ } catch {
55
+ return { description: null, params: [], returns: null };
56
+ }
57
+ }
58
+ function extractTypedSignatures(sf) {
59
+ const results = [];
60
+ for (const decl of sf.getFunctions()) {
61
+ if (!decl.isExported()) continue;
62
+ const name = decl.getName();
63
+ if (!name) continue;
64
+ try {
65
+ const params = decl.getParameters().map((p) => {
66
+ const typeText = p.getType().getText(sf);
67
+ const opt = p.hasQuestionToken() ? "?" : "";
68
+ const rest = p.isRestParameter() ? "..." : "";
69
+ return `${rest}${p.getName()}${opt}: ${typeText}`;
70
+ }).join(", ");
71
+ const returnType = decl.getReturnType().getText(sf);
72
+ const signature = `(${params}) => ${returnType}`;
73
+ const kind = name.startsWith("use") ? "hook" : /^[A-Z]/.test(name) ? "component" : "function";
74
+ results.push({
75
+ name,
76
+ kind,
77
+ signature: signature.slice(0, 300),
78
+ jsDoc: extractJsDocData(sf, decl.getPos())
79
+ });
80
+ } catch {
81
+ }
82
+ }
83
+ for (const varStmt of sf.getVariableStatements()) {
84
+ if (!varStmt.isExported()) continue;
85
+ for (const varDecl of varStmt.getDeclarations()) {
86
+ const name = varDecl.getName();
87
+ try {
88
+ const initializer = varDecl.getInitializer();
89
+ const isArrowFn = initializer?.getKind() === tsMorph.SyntaxKind.ArrowFunction;
90
+ const typeText = varDecl.getType().getText(sf);
91
+ const kind = isArrowFn && name.startsWith("use") ? "hook" : isArrowFn && /^[A-Z]/.test(name) ? "component" : isArrowFn ? "function" : "const";
92
+ results.push({
93
+ name,
94
+ kind,
95
+ signature: typeText.slice(0, 300),
96
+ jsDoc: extractJsDocData(sf, varDecl.getPos())
97
+ });
98
+ } catch {
99
+ }
100
+ }
101
+ }
102
+ for (const decl of sf.getInterfaces()) {
103
+ if (!decl.isExported()) continue;
104
+ try {
105
+ const props = decl.getProperties().slice(0, 8).map((p) => {
106
+ const opt = p.hasQuestionToken() ? "?" : "";
107
+ const typeText = p.getType().getText(sf);
108
+ return `${p.getName()}${opt}: ${typeText}`;
109
+ }).join("; ");
110
+ results.push({
111
+ name: decl.getName(),
112
+ kind: "interface",
113
+ signature: `{ ${props} }`.slice(0, 400),
114
+ jsDoc: extractJsDocData(sf, decl.getPos())
115
+ });
116
+ } catch {
117
+ }
118
+ }
119
+ for (const decl of sf.getTypeAliases()) {
120
+ if (!decl.isExported()) continue;
121
+ try {
122
+ const typeText = decl.getType().getText(sf);
123
+ results.push({
124
+ name: decl.getName(),
125
+ kind: "type",
126
+ signature: typeText.slice(0, 300),
127
+ jsDoc: { description: null, params: [], returns: null }
128
+ });
129
+ } catch {
130
+ }
131
+ }
132
+ return results.slice(0, 15);
133
+ }
134
+ function enrichWithTypedSignatures(files, projectRoot) {
135
+ const result = /* @__PURE__ */ new Map();
136
+ const targets = files.filter(
137
+ (f) => f.metrics.heatScore > 20 || f.metrics.incomingRuntimeDeps > 3 || f.exports.length > 3
138
+ ).slice(0, 150);
139
+ if (targets.length === 0) return result;
140
+ const project = new tsMorph.Project({
141
+ tsConfigFilePath: path.join(projectRoot, "tsconfig.json"),
142
+ skipAddingFilesFromTsConfig: true,
143
+ skipFileDependencyResolution: true
144
+ });
145
+ for (const file of targets) {
146
+ try {
147
+ const sf = project.addSourceFileAtPathIfExists(path.join(projectRoot, file.path));
148
+ if (!sf) continue;
149
+ const signatures = extractTypedSignatures(sf);
150
+ if (signatures.length > 0) result.set(file.path, signatures);
151
+ } catch {
152
+ }
153
+ }
154
+ return result;
155
+ }
156
+ var init_astEnrich = __esm({
157
+ "src/astEnrich.ts"() {
158
+ }
159
+ });
160
+
161
+ // src/blueprint.config.ts
162
+ var blueprintConfig = {
163
+ include: [
164
+ "app/**/*.{ts,tsx}",
165
+ "components/**/*.{ts,tsx}",
166
+ "lib/**/*.{ts,tsx}",
167
+ "hooks/**/*.{ts,tsx}",
168
+ // integriertes Tool selbst
169
+ "blueprint-tool/**/*.{ts,tsx}",
170
+ // DB-Schema nur als lesbarer Kontext
171
+ "db.sql",
172
+ // optional interessante Root-Konfigurationen für App-Struktur
173
+ "next.config.ts",
174
+ "tsconfig.json",
175
+ "tsconfig.test.json",
176
+ "package.json"
177
+ ],
178
+ exclude: [
179
+ "**/node_modules/**",
180
+ "**/.next/**",
181
+ "**/out/**",
182
+ "**/build/**",
183
+ "**/dist/**",
184
+ "**/coverage/**",
185
+ "**/.git/**",
186
+ "**/.vercel/**",
187
+ "**/.turbo/**",
188
+ // Runtime-/static assets
189
+ "**/public/**",
190
+ // Tests und Test-Artefakte
191
+ "**/__tests__/**",
192
+ "**/tests/**",
193
+ "**/*.test.ts",
194
+ "**/*.test.tsx",
195
+ "**/*.spec.ts",
196
+ "**/*.spec.tsx",
197
+ // Supabase generell raus, außer SQL wenn bewusst included
198
+ "**/supabase/migrations/**",
199
+ // Dokumentation / nicht relevanter Text-Content
200
+ "**/*.md",
201
+ "**/*.html",
202
+ // Binäre / statische Assets
203
+ "**/*.svg",
204
+ "**/*.png",
205
+ "**/*.jpg",
206
+ "**/*.jpeg",
207
+ "**/*.gif",
208
+ "**/*.webp",
209
+ "**/*.ico",
210
+ // Lock / Build-Meta
211
+ "**/*.lock",
212
+ "**/*.tsbuildinfo"
213
+ ]
214
+ };
215
+
216
+ // src/lib/coverageUtils.ts
217
+ function covScore(cov) {
218
+ if (!cov) return null;
219
+ return (cov.statements + cov.branches + cov.functions + cov.lines) / 4;
220
+ }
221
+ function parseCoverageSummary(raw, projectRoot) {
222
+ const map = /* @__PURE__ */ new Map();
223
+ const root = projectRoot.replace(/\\/g, "/").replace(/\/$/, "");
224
+ for (const [rawPath, data] of Object.entries(raw)) {
225
+ if (rawPath === "total") continue;
226
+ const normalized = rawPath.replace(/\\/g, "/");
227
+ let rel;
228
+ if (normalized.startsWith(root + "/")) {
229
+ rel = normalized.slice(root.length + 1);
230
+ } else {
231
+ rel = normalized.replace(/^\.\//, "");
232
+ }
233
+ map.set(rel, {
234
+ statements: data.statements.pct,
235
+ branches: data.branches.pct,
236
+ functions: data.functions.pct,
237
+ lines: data.lines.pct
238
+ });
239
+ }
240
+ return map;
241
+ }
242
+ function lookupCoverage(map, relPath) {
243
+ const direct = map.get(relPath);
244
+ if (direct) return direct;
245
+ const norm = relPath.replace(/\\/g, "/").replace(/^\.\//, "");
246
+ const normMatch = map.get(norm);
247
+ if (normMatch) return normMatch;
248
+ const suffix = "/" + norm;
249
+ const matches = [];
250
+ for (const [key, val] of map) {
251
+ if (key === norm || key.endsWith(suffix)) matches.push(val);
252
+ if (matches.length > 1) return null;
253
+ }
254
+ return matches[0] ?? null;
255
+ }
256
+ function computeRisk(heat, loc, coverage) {
257
+ if (heat >= 85) return "high";
258
+ if (heat >= 60 && (coverage == null || coverage < 30)) return "high";
259
+ if (loc > 500 && (coverage == null || coverage < 50)) return "high";
260
+ if (heat < 25 && coverage != null && coverage >= 70) return "low";
261
+ if (heat < 15) return "low";
262
+ return "medium";
263
+ }
264
+ function loadHistory(historyPath) {
265
+ try {
266
+ const raw = fs.readFileSync(historyPath, "utf-8");
267
+ const parsed = JSON.parse(raw);
268
+ if (parsed.version === 1 && parsed.files) return parsed;
269
+ } catch {
270
+ }
271
+ return { version: 1, updatedAt: (/* @__PURE__ */ new Date()).toISOString(), files: {} };
272
+ }
273
+ function updateHistory(existing, files, getCoverageAvg) {
274
+ const now = /* @__PURE__ */ new Date();
275
+ const scanTs = now.toISOString();
276
+ const today = scanTs.split("T")[0];
277
+ const updated = {};
278
+ for (const file of files) {
279
+ const cov = (() => {
280
+ const v = getCoverageAvg(file);
281
+ return v !== null ? parseFloat(v.toFixed(1)) : null;
282
+ })();
283
+ const entry = {
284
+ date: today,
285
+ scanTs,
286
+ heat: parseFloat(file.metrics.heatScore.toFixed(2)),
287
+ coverage: cov,
288
+ loc: file.metrics.loc,
289
+ incomingDeps: file.metrics.incomingRuntimeDeps,
290
+ risk: computeRisk(file.metrics.heatScore, file.metrics.loc, cov)
291
+ };
292
+ const prev = existing.files[file.path] ?? [];
293
+ updated[file.path] = [...prev, entry].slice(-100);
294
+ }
295
+ return {
296
+ version: 1,
297
+ updatedAt: scanTs,
298
+ files: updated
299
+ };
300
+ }
301
+ function saveHistory(historyPath, history) {
302
+ fs.writeFileSync(historyPath, JSON.stringify(history, null, 2), "utf-8");
303
+ }
304
+
305
+ // src/scan.ts
306
+ var __filename$1 = url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)));
307
+ var __dirname$1 = path.dirname(__filename$1);
308
+ function readTsConfigPaths(projectRoot) {
309
+ const tsconfigPath = path.join(projectRoot, "tsconfig.json");
310
+ try {
311
+ const raw = JSON.parse(fs.readFileSync(tsconfigPath, "utf-8"));
312
+ const opts = raw.compilerOptions ?? {};
313
+ const baseUrl = opts.baseUrl ? path.resolve(projectRoot, opts.baseUrl) : projectRoot;
314
+ return { baseUrl, paths: opts.paths ?? {} };
315
+ } catch {
316
+ return { baseUrl: projectRoot, paths: {} };
317
+ }
318
+ }
319
+ function tryResolveFile(absBase, projectRoot) {
320
+ const bare = absBase.replace(/\.(tsx?|jsx?)$/, "");
321
+ const candidates = [
322
+ bare + ".ts",
323
+ bare + ".tsx",
324
+ path.join(bare, "index.ts"),
325
+ path.join(bare, "index.tsx")
326
+ ];
327
+ for (const c of candidates) {
328
+ if (fs.existsSync(c)) {
329
+ const rel = path.normalize(path.relative(projectRoot, c));
330
+ if (!rel.startsWith("..")) return rel;
331
+ }
332
+ }
333
+ return null;
334
+ }
335
+ function resolveImport(specifier, sourceFile, projectRoot, scopeSet, aliases) {
336
+ if (specifier.startsWith("./") || specifier.startsWith("../")) {
337
+ const sourceDir = path.dirname(path.resolve(projectRoot, sourceFile));
338
+ const resolved = tryResolveFile(path.resolve(sourceDir, specifier), projectRoot);
339
+ const kind = resolved !== null && scopeSet.has(resolved) ? "internal" : "external";
340
+ return { source: specifier, resolvedPath: resolved, kind };
341
+ }
342
+ for (const [pattern, targets] of Object.entries(aliases.paths)) {
343
+ const prefix = pattern.replace(/\*$/, "");
344
+ if (!specifier.startsWith(prefix)) continue;
345
+ const rest = specifier.slice(prefix.length);
346
+ for (const target of targets) {
347
+ const targetPrefix = target.replace(/\*$/, "");
348
+ const resolved = tryResolveFile(
349
+ path.resolve(aliases.baseUrl, targetPrefix, rest),
350
+ projectRoot
351
+ );
352
+ if (resolved !== null) {
353
+ const kind = scopeSet.has(resolved) ? "internal" : "external";
354
+ return { source: specifier, resolvedPath: resolved, kind };
355
+ }
356
+ }
357
+ }
358
+ return { source: specifier, resolvedPath: null, kind: "external" };
359
+ }
360
+ function classifyImports(content) {
361
+ const typeOnly = /* @__PURE__ */ new Set();
362
+ const runtime = /* @__PURE__ */ new Set();
363
+ let m;
364
+ const typeStatementRe = /^(?:import|export)\s+type\b[^]*?from\s+['"]([^'"]+)['"]/gm;
365
+ while ((m = typeStatementRe.exec(content)) !== null) {
366
+ typeOnly.add(m[1]);
367
+ }
368
+ const namedRe = /^import\s+\{([^}]+)\}\s+from\s+['"]([^'"]+)['"]/gm;
369
+ while ((m = namedRe.exec(content)) !== null) {
370
+ const bindings = m[1].split(",").map((b) => b.trim()).filter(Boolean);
371
+ const allTypeInline = bindings.length > 0 && bindings.every((b) => /^type[\s\t]/.test(b));
372
+ if (allTypeInline) {
373
+ if (!runtime.has(m[2])) typeOnly.add(m[2]);
374
+ } else {
375
+ runtime.add(m[2]);
376
+ }
377
+ }
378
+ const fromRe = /\bfrom\s+['"]([^'"]+)['"]/gm;
379
+ while ((m = fromRe.exec(content)) !== null) {
380
+ const spec = m[1];
381
+ if (typeOnly.has(spec) || runtime.has(spec)) continue;
382
+ const lineStart = content.lastIndexOf("\n", m.index) + 1;
383
+ const linePrefix = content.slice(lineStart, m.index).trimStart();
384
+ if (/^(?:import|export)\s+type\b/.test(linePrefix)) continue;
385
+ if (/^import\s+\{/.test(linePrefix)) continue;
386
+ if (/^(?:import|export)\b/.test(linePrefix)) {
387
+ runtime.add(spec);
388
+ }
389
+ }
390
+ const sideEffectRe = /^import\s+['"]([^'"]+)['"]/gm;
391
+ while ((m = sideEffectRe.exec(content)) !== null) {
392
+ runtime.add(m[1]);
393
+ }
394
+ const result = /* @__PURE__ */ new Map();
395
+ for (const s of typeOnly) result.set(s, runtime.has(s) ? "runtime" : "type-only");
396
+ for (const s of runtime) result.set(s, "runtime");
397
+ return result;
398
+ }
399
+ function extractImports(content) {
400
+ const results = /* @__PURE__ */ new Set();
401
+ const fromRe = /\bfrom\s+['"]([^'"]+)['"]/gm;
402
+ let m;
403
+ while ((m = fromRe.exec(content)) !== null) {
404
+ results.add(m[1]);
405
+ }
406
+ const sideEffectRe = /^import\s+['"]([^'"]+)['"]/gm;
407
+ while ((m = sideEffectRe.exec(content)) !== null) {
408
+ results.add(m[1]);
409
+ }
410
+ return [...results];
411
+ }
412
+ function extractExports(content) {
413
+ const results = /* @__PURE__ */ new Set();
414
+ const namedRe = /^export\s+(?:default\s+)?(?:const|let|var|function\*?|async\s+function\*?|class|type|interface|enum)\s+(\w+)/gm;
415
+ let m;
416
+ while ((m = namedRe.exec(content)) !== null) {
417
+ results.add(m[1]);
418
+ }
419
+ const groupedRe = /^export\s+(?:type\s+)?\{([^}]+)\}/gm;
420
+ while ((m = groupedRe.exec(content)) !== null) {
421
+ m[1].split(",").forEach((part) => {
422
+ const alias = part.trim().split(/\s+as\s+/).pop()?.trim();
423
+ if (alias && alias !== "") results.add(alias);
424
+ });
425
+ }
426
+ const hasNamedDefault = /^export\s+default\s+(?:function\*?|async\s+function\*?|class)\s+\w+/m.test(
427
+ content
428
+ );
429
+ if (/^export\s+default\b/m.test(content) && !hasNamedDefault) {
430
+ results.add("default");
431
+ }
432
+ return [...results];
433
+ }
434
+ function extractDocInfo(content) {
435
+ const lines = content.split("\n");
436
+ let i = 0;
437
+ while (i < Math.min(lines.length, 5)) {
438
+ const t = lines[i].trim();
439
+ if (t === "" || /^['"]use (client|server)['"]/.test(t)) {
440
+ i++;
441
+ } else {
442
+ break;
443
+ }
444
+ }
445
+ if (i >= lines.length) return { docSummary: null, docBlock: null };
446
+ const firstLine = lines[i].trim();
447
+ if (firstLine.startsWith("/**")) {
448
+ const blockLines = [];
449
+ for (let j = i; j < lines.length; j++) {
450
+ blockLines.push(lines[j]);
451
+ if (lines[j].includes("*/")) break;
452
+ }
453
+ const cleaned = blockLines.join("\n").replace(/^\/\*+/, "").replace(/\*+\/$/, "").split("\n").map((l) => l.replace(/^\s*\*\s?/, "").trim()).filter((l) => l.length > 0);
454
+ if (cleaned.length === 0) return { docSummary: null, docBlock: null };
455
+ const summary = cleaned.find((l) => !l.startsWith("@")) ?? null;
456
+ return { docSummary: summary, docBlock: cleaned.join("\n") };
457
+ }
458
+ if (firstLine.startsWith("//") && !firstLine.startsWith("///")) {
459
+ const commentLines = [];
460
+ for (let j = i; j < lines.length; j++) {
461
+ const t = lines[j].trim();
462
+ if (!t.startsWith("//")) break;
463
+ commentLines.push(t.replace(/^\/\/\s?/, ""));
464
+ }
465
+ if (commentLines.length === 0 || commentLines[0].length < 3) {
466
+ return { docSummary: null, docBlock: null };
467
+ }
468
+ return {
469
+ docSummary: commentLines[0],
470
+ docBlock: commentLines.join("\n")
471
+ };
472
+ }
473
+ return { docSummary: null, docBlock: null };
474
+ }
475
+ function detectJsDoc(content) {
476
+ return /\/\*\*[\s\S]*?\*\//.test(content);
477
+ }
478
+ function extractTypeImportedNames(content) {
479
+ const names = /* @__PURE__ */ new Set();
480
+ let m;
481
+ const namedRe = /^import\s+type\s+\{([^}]+)\}/gm;
482
+ while ((m = namedRe.exec(content)) !== null) {
483
+ m[1].split(",").forEach((part) => {
484
+ const local = part.trim().split(/\s+as\s+/).pop()?.trim() ?? "";
485
+ if (/^[A-Z][A-Za-z]/.test(local)) names.add(local);
486
+ });
487
+ }
488
+ const defaultRe = /^import\s+type\s+([A-Z][A-Za-z]\w*)\s+from/gm;
489
+ while ((m = defaultRe.exec(content)) !== null) {
490
+ names.add(m[1]);
491
+ }
492
+ return names;
493
+ }
494
+ function countHook(content, hookName) {
495
+ const re = new RegExp(`\\b${hookName}[\\s<(]`, "g");
496
+ return (content.match(re) ?? []).length;
497
+ }
498
+ var STATE_SIGNAL_PATTERNS = [
499
+ { re: /\b(?:history|undo|redo)\b/i, signal: "undo/redo history" },
500
+ { re: /\b(?:isDirty|dirty|hasChanges|unsaved|pendingChange)\b/i, signal: "dirty-checking" },
501
+ { re: /\b(?:guard|isAllowed|canEdit|permission|isAuthorized)\b/i, signal: "guard logic" },
502
+ { re: /\b(?:preview|draftPreview|previewMode|previewState)\b/i, signal: "derived preview state" },
503
+ { re: /\b(?:eventLog|events|log|logEntry|auditLog)\b/i, signal: "event log state" },
504
+ { re: /\b(?:draft|pendingItem|staged)\b/i, signal: "draft/pending state" },
505
+ { re: /\b(?:cache|cached)\b/i, signal: "memoization/cache" },
506
+ { re: /\b(?:selected|selection|activeItem)\b/i, signal: "selection state" },
507
+ { re: /\b(?:currentPage|pageSize|offset|pagination)\b/i, signal: "pagination state" },
508
+ { re: /\b(?:modal|dialog|isOpen|overlayVisible)\b/i, signal: "modal/overlay state" }
509
+ ];
510
+ function extractStateComplexity(content, filePath) {
511
+ if (!filePath.endsWith(".tsx")) return null;
512
+ const useState = countHook(content, "useState");
513
+ const useReducer = countHook(content, "useReducer");
514
+ const useEffect = countHook(content, "useEffect");
515
+ const useMemo = countHook(content, "useMemo");
516
+ const useCallback = countHook(content, "useCallback");
517
+ const useRef = countHook(content, "useRef");
518
+ const total = useState + useReducer + useEffect + useMemo + useCallback + useRef;
519
+ if (total === 0) return null;
520
+ const stateVarRe = /const\s+\[\s*(\w+)\s*,\s*\w+\s*\]\s*=\s*use(?:State|Reducer)/g;
521
+ const stateVarNames = [];
522
+ let m;
523
+ while ((m = stateVarRe.exec(content)) !== null) {
524
+ stateVarNames.push(m[1]);
525
+ }
526
+ const stateVarText = stateVarNames.join(" ");
527
+ const localStateSignals = STATE_SIGNAL_PATTERNS.filter(({ re }) => re.test(stateVarText)).map(({ signal }) => signal);
528
+ const notes = [];
529
+ if (total >= 20) notes.push(`${total} hooks \u2014 very high state complexity`);
530
+ else if (total >= 10) notes.push(`${total} hooks \u2014 high state complexity`);
531
+ else if (total >= 5) notes.push(`${total} hooks \u2014 moderate state complexity`);
532
+ if (useEffect >= 4) notes.push(`${useEffect} useEffect calls \u2014 complex side effects`);
533
+ if (useMemo + useCallback >= 6) notes.push(`${useMemo + useCallback} memoization hooks`);
534
+ if (useReducer >= 1) notes.push("useReducer \u2014 complex state machine");
535
+ if (useState >= 12) notes.push(`${useState} useState \u2014 many independent state slices`);
536
+ return {
537
+ hookCounts: { useState, useReducer, useEffect, useMemo, useCallback, useRef, total },
538
+ localStateSignals,
539
+ complexityNotes: notes.slice(0, 3)
540
+ };
541
+ }
542
+ var TS_TYPE_BLOCKLIST = /* @__PURE__ */ new Set([
543
+ "Array",
544
+ "ReadonlyArray",
545
+ "IterableIterator",
546
+ "AsyncIterator",
547
+ "Set",
548
+ "Map",
549
+ "WeakSet",
550
+ "WeakMap",
551
+ "WeakRef",
552
+ "Record",
553
+ "Promise",
554
+ "Partial",
555
+ "Required",
556
+ "Readonly",
557
+ "Pick",
558
+ "Omit",
559
+ "Exclude",
560
+ "Extract",
561
+ "NonNullable",
562
+ "ReturnType",
563
+ "InstanceType",
564
+ "Parameters",
565
+ "ConstructorParameters",
566
+ "Awaited",
567
+ "Uppercase",
568
+ "Lowercase",
569
+ "Capitalize",
570
+ "Uncapitalize",
571
+ "Object",
572
+ "String",
573
+ "Number",
574
+ "Boolean",
575
+ "Symbol",
576
+ "BigInt",
577
+ "Function",
578
+ "Error",
579
+ "Date",
580
+ "RegExp"
581
+ ]);
582
+ var PRIMITIVE_PATTERNS = [
583
+ ["Button", /Button/],
584
+ ["Modal", /Modal/],
585
+ ["Dialog", /Dialog|AlertDialog/],
586
+ ["Select", /Select/],
587
+ ["Input", /Input|TextField|TextInput/],
588
+ ["Textarea", /Textarea/],
589
+ ["Checkbox", /Checkbox/],
590
+ ["Radio", /Radio/],
591
+ ["Switch", /Switch|Toggle/],
592
+ ["Tabs", /Tabs?(?!le)/],
593
+ // Tab/Tabs but not Table
594
+ ["Table", /Table|DataTable/],
595
+ ["Card", /Card/],
596
+ ["Form", /Form/],
597
+ ["Badge", /Badge/],
598
+ ["Tooltip", /Tooltip|Popover/],
599
+ ["Dropdown", /Dropdown|DropdownMenu/],
600
+ ["Sheet", /Sheet/],
601
+ ["Drawer", /Drawer/],
602
+ ["Calendar", /Calendar/],
603
+ ["Avatar", /Avatar/],
604
+ ["Command", /Command|Combobox/],
605
+ ["Search", /Search|SearchBar/]
606
+ ];
607
+ function extractJsxInfo(content, filePath) {
608
+ const empty = {
609
+ jsxComponents: [],
610
+ uiPrimitives: [],
611
+ componentUsageCount: 0,
612
+ topLevelJsxBlocks: []
613
+ };
614
+ if (!filePath.endsWith(".tsx")) return empty;
615
+ const typeImportedNames = extractTypeImportedNames(content);
616
+ const jsxTagRe = /(?<![a-zA-Z0-9_])<([A-Z][A-Za-z]+(?:\.[A-Za-z]+)*)(?=[\s\/>])/g;
617
+ const allMatches = [];
618
+ let m;
619
+ while ((m = jsxTagRe.exec(content)) !== null) {
620
+ const name = m[1];
621
+ const baseName = name.split(".")[0];
622
+ if (TS_TYPE_BLOCKLIST.has(baseName)) continue;
623
+ if (baseName.startsWith("HTML") || baseName.startsWith("SVG")) continue;
624
+ if (baseName === "NodeJS") continue;
625
+ if (baseName === "React") continue;
626
+ if (typeImportedNames.has(baseName)) continue;
627
+ allMatches.push(name);
628
+ }
629
+ const componentUsageCount = allMatches.length;
630
+ const jsxComponents = [...new Set(allMatches)].sort();
631
+ const primitiveSet = /* @__PURE__ */ new Set();
632
+ for (const comp of jsxComponents) {
633
+ for (const [prim, pattern] of PRIMITIVE_PATTERNS) {
634
+ if (pattern.test(comp)) {
635
+ primitiveSet.add(prim);
636
+ break;
637
+ }
638
+ }
639
+ }
640
+ const uiPrimitives = [...primitiveSet].sort();
641
+ const topLevelJsxBlocks = [];
642
+ const seen = /* @__PURE__ */ new Set();
643
+ for (const name of allMatches) {
644
+ if (!seen.has(name)) {
645
+ seen.add(name);
646
+ topLevelJsxBlocks.push(name);
647
+ if (topLevelJsxBlocks.length >= 10) break;
648
+ }
649
+ }
650
+ return { jsxComponents, uiPrimitives, componentUsageCount, topLevelJsxBlocks };
651
+ }
652
+ function detectDirectives(content) {
653
+ const head = content.split("\n").slice(0, 5).join("\n");
654
+ return {
655
+ hasUseClient: /^(?:'use client'|"use client")/m.test(head),
656
+ hasUseServer: /^(?:'use server'|"use server")/m.test(head)
657
+ };
658
+ }
659
+ function getRenderEnvironment(filePath, hasUseClient, hasUseServer) {
660
+ if (hasUseClient) return "client";
661
+ if (hasUseServer) return "server";
662
+ if (filePath.startsWith("app/")) return "server";
663
+ return "shared";
664
+ }
665
+ function getNextFileKind(filePath) {
666
+ const name = path.basename(filePath);
667
+ if (name === "page.tsx" || name === "page.ts") return "page";
668
+ if (name === "layout.tsx" || name === "layout.ts") return "layout";
669
+ if (name === "route.ts" || name === "route.tsx") return "route";
670
+ if (name === "loading.tsx" || name === "loading.ts") return "loading";
671
+ if (name === "error.tsx" || name === "error.ts") return "error";
672
+ if (name === "template.tsx" || name === "template.ts") return "template";
673
+ return "default";
674
+ }
675
+ function deriveRoutePath(filePath) {
676
+ if (!filePath.startsWith("app/")) return null;
677
+ const rel = filePath.slice("app/".length);
678
+ const dir = path.dirname(rel);
679
+ if (dir === ".") return "/";
680
+ const parts = dir.split("/").filter((p) => !(p.startsWith("(") && p.endsWith(")"))).filter((p) => p !== ".");
681
+ if (parts.length === 0) return "/";
682
+ return "/" + parts.join("/");
683
+ }
684
+ function getCategory(path) {
685
+ if (path.startsWith("app/")) return "app";
686
+ if (path.startsWith("components/")) return "component";
687
+ if (path.startsWith("lib/")) return "lib";
688
+ if (path.startsWith("hooks/")) return "hook";
689
+ return "unknown";
690
+ }
691
+ function makeId(path) {
692
+ return path.replace(/[^a-zA-Z0-9]/g, "_").replace(/_+/g, "_").replace(/^_|_$/g, "");
693
+ }
694
+ function tarjanSCC(graph) {
695
+ const indices = /* @__PURE__ */ new Map();
696
+ const lowlinks = /* @__PURE__ */ new Map();
697
+ const onStack = /* @__PURE__ */ new Set();
698
+ const stack = [];
699
+ const sccs = [];
700
+ let counter = 0;
701
+ function strongConnect(v) {
702
+ indices.set(v, counter);
703
+ lowlinks.set(v, counter);
704
+ counter++;
705
+ stack.push(v);
706
+ onStack.add(v);
707
+ for (const w of graph.get(v) ?? []) {
708
+ if (!indices.has(w)) {
709
+ strongConnect(w);
710
+ lowlinks.set(v, Math.min(lowlinks.get(v), lowlinks.get(w)));
711
+ } else if (onStack.has(w)) {
712
+ lowlinks.set(v, Math.min(lowlinks.get(v), indices.get(w)));
713
+ }
714
+ }
715
+ if (lowlinks.get(v) === indices.get(v)) {
716
+ const scc = [];
717
+ let w;
718
+ do {
719
+ w = stack.pop();
720
+ onStack.delete(w);
721
+ scc.push(w);
722
+ } while (w !== v);
723
+ sccs.push(scc);
724
+ }
725
+ }
726
+ for (const v of graph.keys()) {
727
+ if (!indices.has(v)) {
728
+ strongConnect(v);
729
+ }
730
+ }
731
+ return sccs;
732
+ }
733
+ function extractCycleGroups(allSccs, adjacency) {
734
+ const cyclicSccs = allSccs.filter(
735
+ (scc) => scc.length > 1 || (adjacency.get(scc[0]) ?? []).includes(scc[0])
736
+ );
737
+ return cyclicSccs.sort((a, b) => b.length - a.length).map((scc, i) => ({
738
+ id: `cycle_${i + 1}`,
739
+ paths: [...scc].sort(),
740
+ size: scc.length
741
+ }));
742
+ }
743
+ function inferSectionKind(key) {
744
+ const k = key.toLowerCase();
745
+ if (k.includes("baseline")) return "baseline";
746
+ if (k.includes("routing")) return "routing";
747
+ if (k.includes("strategy") || k.includes("ai_strat") || k.includes("ai_status") || k.startsWith("ai_")) return "ai";
748
+ if (k.includes("feature") || k.includes("ui_feature")) return "feature-config";
749
+ if (k.includes("process") || k.includes("workflow")) return "processes";
750
+ if (k.includes("widget")) return "widgets";
751
+ if (k.includes("role") || k.includes("permission")) return "roles";
752
+ if (k.includes("theme")) return "theme";
753
+ if (k.includes("metric") || k.includes("telemetry")) return "metrics";
754
+ if (k.includes("object")) return "objects";
755
+ if (k.includes("registry") || k.includes("catalog")) return "registry";
756
+ if (k.includes("milestone") || k.includes("domain") || k.includes("content")) return "content";
757
+ if (k.includes("system")) return "system";
758
+ return "unknown";
759
+ }
760
+ function parseConfigLayer(projectRoot) {
761
+ const relPath = "xampleApp.json";
762
+ const filePath = path.join(projectRoot, relPath);
763
+ if (!fs.existsSync(filePath)) {
764
+ return {
765
+ sourcePath: relPath,
766
+ found: false,
767
+ fileType: null,
768
+ appId: null,
769
+ topLevelKeys: [],
770
+ sectionCount: 0,
771
+ sections: []
772
+ };
773
+ }
774
+ try {
775
+ const raw = JSON.parse(fs.readFileSync(filePath, "utf-8"));
776
+ const topLevelKeys = Object.keys(raw);
777
+ const appId = raw.source_app_id ?? raw.appId ?? raw.appid ?? raw.app_id ?? null;
778
+ const dataObj = typeof raw.data === "object" && raw.data !== null ? raw.data : raw;
779
+ const sections = [];
780
+ for (const [key, value] of Object.entries(dataObj)) {
781
+ if (typeof value !== "object" || value === null) continue;
782
+ const isArray = Array.isArray(value);
783
+ const items = isArray ? value : [value];
784
+ const first = items[0];
785
+ const sampleKeys = typeof first === "object" && first !== null ? Object.keys(first).slice(0, 5) : [];
786
+ const label = typeof first === "object" && first !== null ? first.label ?? null : null;
787
+ sections.push({
788
+ id: key,
789
+ label,
790
+ kind: inferSectionKind(key),
791
+ itemCount: isArray ? value.length : null,
792
+ sampleKeys
793
+ });
794
+ }
795
+ return {
796
+ sourcePath: relPath,
797
+ found: true,
798
+ fileType: "json",
799
+ appId,
800
+ topLevelKeys,
801
+ sectionCount: sections.length,
802
+ sections
803
+ };
804
+ } catch {
805
+ return {
806
+ sourcePath: relPath,
807
+ found: true,
808
+ fileType: "json",
809
+ appId: null,
810
+ topLevelKeys: [],
811
+ sectionCount: 0,
812
+ sections: []
813
+ };
814
+ }
815
+ }
816
+ function inferTableCategory(name) {
817
+ const n = name.toLowerCase();
818
+ if (/workspace|member|invite|partnership/.test(n)) return "workspace";
819
+ if (/^agentic|^ai_|prompt_version|routing_cap|telemetry/.test(n)) return "ai";
820
+ if (/^system_audit|^system_diff|^system_snap|^system_telem/.test(n)) return "system";
821
+ if (/diary|^notes$|todo|time_series|image_cache|milestone|chat_feedback/.test(n)) return "content";
822
+ return "app";
823
+ }
824
+ function parseSchemaLayer(projectRoot) {
825
+ const relPath = "db.sql";
826
+ const filePath = path.join(projectRoot, relPath);
827
+ if (!fs.existsSync(filePath)) {
828
+ return {
829
+ sourcePath: relPath,
830
+ found: false,
831
+ fileType: null,
832
+ tableCount: 0,
833
+ tables: [],
834
+ foreignKeys: []
835
+ };
836
+ }
837
+ const sql = fs.readFileSync(filePath, "utf-8");
838
+ const tables = [];
839
+ const fkSet = /* @__PURE__ */ new Set();
840
+ const foreignKeys = [];
841
+ const tableRe = /CREATE TABLE (\w+)\.(\w+)\s*\(([\s\S]*?)\);/g;
842
+ let m;
843
+ while ((m = tableRe.exec(sql)) !== null) {
844
+ const schema = m[1];
845
+ const name = m[2];
846
+ const body = m[3];
847
+ const columnCount = body.split("\n").filter((l) => {
848
+ const t = l.trim();
849
+ return t.length > 0 && /^\w/.test(t) && !t.startsWith("CONSTRAINT");
850
+ }).length;
851
+ const hasJsonb = body.includes("jsonb");
852
+ const fkRe = /REFERENCES\s+(?:\w+\.)?(\w+)\s*\(/g;
853
+ let fkMatch;
854
+ let fkCount = 0;
855
+ while ((fkMatch = fkRe.exec(body)) !== null) {
856
+ fkCount++;
857
+ const toTable = fkMatch[1];
858
+ const key = `${name}\u2192${toTable}`;
859
+ if (!fkSet.has(key)) {
860
+ fkSet.add(key);
861
+ foreignKeys.push({ fromTable: name, toTable });
862
+ }
863
+ }
864
+ tables.push({
865
+ name,
866
+ schema,
867
+ columnCount,
868
+ hasJsonb,
869
+ foreignKeyCount: fkCount,
870
+ category: inferTableCategory(name)
871
+ });
872
+ }
873
+ return {
874
+ sourcePath: relPath,
875
+ found: true,
876
+ fileType: "sql",
877
+ tableCount: tables.length,
878
+ tables,
879
+ foreignKeys
880
+ };
881
+ }
882
+ function extractControlInventory(content, filePath, jsxComponents, uiPrimitives, eventHandlers) {
883
+ if (!filePath.endsWith(".tsx")) return null;
884
+ const items = [];
885
+ const nativeButtonCount = (content.match(/(?<![a-zA-Z0-9_])<button[\s\/>]/g) ?? []).length;
886
+ const allInputMatches = content.match(/(?<![a-zA-Z0-9_])<input\b[^>]*/gi) ?? [];
887
+ const textInputCount = allInputMatches.filter(
888
+ (m) => !/type\s*=\s*["'](?:checkbox|radio|hidden|file|submit|button|reset|image)/.test(m)
889
+ ).length;
890
+ const checkboxCount = allInputMatches.filter((m) => /type\s*=\s*["']checkbox/.test(m)).length;
891
+ const radioCount = allInputMatches.filter((m) => /type\s*=\s*["']radio/.test(m)).length;
892
+ const searchInputCount = allInputMatches.filter(
893
+ (m) => /type\s*=\s*["']search/.test(m) || /placeholder\s*=\s*["'][Ss]earch/.test(m)
894
+ ).length;
895
+ const nativeTextareaCount = (content.match(/(?<![a-zA-Z0-9_])<textarea[\s\/>]/g) ?? []).length;
896
+ const nativeSelectCount = (content.match(/(?<![a-zA-Z0-9_])<select[\s\/>]/g) ?? []).length;
897
+ const nativeFormCount = (content.match(/(?<![a-zA-Z0-9_])<form[\s\/>]/g) ?? []).length;
898
+ const jsxButtonCount = jsxComponents.filter((c) => /Button/.test(c)).length;
899
+ const jsxInputCount = jsxComponents.filter((c) => /^Input$|^TextField$|^TextInput$/.test(c)).length;
900
+ const jsxSelectCount = jsxComponents.filter((c) => /^Select$|SelectTrigger|SelectContent/.test(c)).length;
901
+ const jsxTabsCount = jsxComponents.filter((c) => /^Tabs$|^Tab$|TabsList|TabsTrigger/.test(c)).length;
902
+ const jsxDialogCount = jsxComponents.filter((c) => /Dialog|Modal/.test(c)).length;
903
+ const jsxToggleCount = jsxComponents.filter((c) => /Switch$|Toggle$|^Checkbox$/.test(c)).length;
904
+ const jsxTableCount = jsxComponents.filter((c) => /^Table$|DataTable/.test(c)).length;
905
+ const jsxSearchCount = jsxComponents.filter((c) => /Search|Command/.test(c)).length;
906
+ const jsxDropdownCount = jsxComponents.filter((c) => /Dropdown|DropdownMenu/.test(c)).length;
907
+ const totalButtonCount = nativeButtonCount + jsxButtonCount;
908
+ const totalTextInputCount = textInputCount + jsxInputCount;
909
+ const totalSelectCount = nativeSelectCount + jsxSelectCount;
910
+ const totalFormFieldCount = totalTextInputCount + nativeTextareaCount + totalSelectCount;
911
+ const totalSearchCount = searchInputCount + jsxSearchCount;
912
+ const hasTabs = jsxTabsCount > 0 || uiPrimitives.includes("Tabs");
913
+ const hasDialog = jsxDialogCount > 0 || uiPrimitives.includes("Dialog") || uiPrimitives.includes("Modal");
914
+ const hasTable = jsxTableCount > 0 || uiPrimitives.includes("Table");
915
+ const hasForm = nativeFormCount > 0 || totalFormFieldCount > 2;
916
+ if (totalButtonCount > 0) {
917
+ items.push({ kind: "button", semanticRole: "Action Buttons", count: totalButtonCount, confidence: "certain" });
918
+ }
919
+ if (totalTextInputCount > 0) {
920
+ items.push({ kind: "input", semanticRole: "Input Fields", count: totalTextInputCount, confidence: "certain" });
921
+ }
922
+ if (nativeTextareaCount > 0) {
923
+ items.push({ kind: "textarea", semanticRole: "Text Areas", count: nativeTextareaCount, confidence: "certain" });
924
+ }
925
+ if (totalSelectCount > 0) {
926
+ items.push({ kind: "select", semanticRole: "Select / Dropdown", count: totalSelectCount, confidence: "certain" });
927
+ }
928
+ if (checkboxCount > 0) {
929
+ items.push({ kind: "checkbox", semanticRole: "Checkboxes", count: checkboxCount, confidence: "certain" });
930
+ }
931
+ if (radioCount > 0) {
932
+ items.push({ kind: "radio", semanticRole: "Radio Group", count: radioCount, confidence: "certain" });
933
+ }
934
+ if (jsxToggleCount > 0) {
935
+ items.push({ kind: "toggle", semanticRole: "Toggles / Switches", count: jsxToggleCount, confidence: "certain" });
936
+ }
937
+ if (hasTabs) {
938
+ items.push({ kind: "tabs", semanticRole: "Navigation Tabs", count: jsxTabsCount || 1, confidence: "certain" });
939
+ }
940
+ if (hasDialog) {
941
+ items.push({ kind: "dialog", semanticRole: "Dialog / Modal", count: jsxDialogCount || 1, confidence: "certain" });
942
+ }
943
+ if (hasTable) {
944
+ items.push({ kind: "table", semanticRole: "Data Table", count: jsxTableCount || 1, confidence: "certain" });
945
+ }
946
+ if (totalSearchCount > 0) {
947
+ items.push({ kind: "search", semanticRole: "Search / Filter", count: totalSearchCount, confidence: "certain" });
948
+ }
949
+ if (jsxDropdownCount > 0) {
950
+ items.push({ kind: "dropdown", semanticRole: "Dropdown Menus", count: jsxDropdownCount, confidence: "certain" });
951
+ }
952
+ const hasSaveHandler = eventHandlers.some((h) => /save|submit|create/i.test(h));
953
+ const hasDeleteHandler = eventHandlers.some((h) => /delete|remove|destroy/i.test(h));
954
+ const hasSearchHandler = eventHandlers.some((h) => /search|filter|query/i.test(h));
955
+ const hasExportHandler = eventHandlers.some((h) => /export|download/i.test(h));
956
+ const hasCloseHandler = eventHandlers.some((h) => /close|cancel|dismiss/i.test(h));
957
+ if (hasSaveHandler && !items.some((i) => i.semanticRole === "Save / Submit")) {
958
+ items.push({ kind: "button", semanticRole: "Save / Submit", count: 1, confidence: "inferred", hint: "from event handler name" });
959
+ }
960
+ if (hasDeleteHandler) {
961
+ items.push({ kind: "button", semanticRole: "Destructive Action", count: 1, confidence: "inferred", hint: "from event handler name" });
962
+ }
963
+ if (hasSearchHandler && !items.some((i) => i.kind === "search")) {
964
+ items.push({ kind: "search", semanticRole: "Search / Filter", count: 1, confidence: "inferred", hint: "from event handler name" });
965
+ }
966
+ if (hasExportHandler) {
967
+ items.push({ kind: "button", semanticRole: "Export / Download", count: 1, confidence: "inferred", hint: "from event handler name" });
968
+ }
969
+ if (hasCloseHandler) {
970
+ items.push({ kind: "button", semanticRole: "Close / Cancel", count: 1, confidence: "inferred", hint: "from event handler name" });
971
+ }
972
+ if (items.length === 0 && totalButtonCount === 0 && totalFormFieldCount === 0) {
973
+ return null;
974
+ }
975
+ return {
976
+ controls: items,
977
+ formFieldCount: totalFormFieldCount,
978
+ actionCount: totalButtonCount,
979
+ hasSearch: totalSearchCount > 0 || hasSearchHandler,
980
+ hasTabs,
981
+ hasTable,
982
+ hasForm,
983
+ hasDialog,
984
+ isInferred: totalButtonCount === 0 && totalFormFieldCount === 0
985
+ };
986
+ }
987
+ var BUILTIN_HOOKS = /* @__PURE__ */ new Set([
988
+ "useState",
989
+ "useEffect",
990
+ "useMemo",
991
+ "useCallback",
992
+ "useRef",
993
+ "useContext",
994
+ "useReducer",
995
+ "useLayoutEffect",
996
+ "useImperativeHandle",
997
+ "useDebugValue",
998
+ "useDeferredValue",
999
+ "useTransition",
1000
+ "useId",
1001
+ "useSyncExternalStore",
1002
+ "useInsertionEffect",
1003
+ "useFormState",
1004
+ "useFormStatus",
1005
+ "useOptimistic",
1006
+ "useRouter",
1007
+ "usePathname",
1008
+ "useSearchParams",
1009
+ "useParams",
1010
+ "useSelectedLayoutSegments",
1011
+ "useServerInsertedHTML",
1012
+ "useMotionValue",
1013
+ "useTransform",
1014
+ "useAnimate",
1015
+ "useScroll"
1016
+ ]);
1017
+ function inferScreenLabel(filePath, exportNames) {
1018
+ const primaryExport = exportNames.find(
1019
+ (e) => /^[A-Z]/.test(e) && !["metadata", "default", "dynamic", "revalidate"].includes(e)
1020
+ );
1021
+ if (primaryExport) {
1022
+ return primaryExport.replace(/([A-Z])/g, " $1").trim().replace(/\s+/g, " ");
1023
+ }
1024
+ const parts = filePath.split("/").filter(
1025
+ (p) => !["app", "page.tsx", "layout.tsx", "route.ts", "loading.tsx", "error.tsx"].includes(p)
1026
+ );
1027
+ const label = parts.filter((p) => !p.startsWith("[") && !p.startsWith("(")).pop();
1028
+ if (label) return label.charAt(0).toUpperCase() + label.slice(1).replace(/-/g, " ");
1029
+ return "Page";
1030
+ }
1031
+ function inferScreenKind(label, filePath, jsxComponents, uiPrimitives) {
1032
+ const l = label.toLowerCase();
1033
+ const p = filePath.toLowerCase();
1034
+ const j = jsxComponents.map((c) => c.toLowerCase()).join(" ");
1035
+ if (l.includes("recovery") || p.includes("recovery")) return "recovery";
1036
+ if (l.includes("admin") || p.includes("admin/")) return "admin";
1037
+ if (l.includes("dashboard") || j.includes("dashboard") || j.includes("overview")) return "dashboard";
1038
+ if (l.includes("chat") || j.includes("chat")) return "chat";
1039
+ if (l.includes("builder") || j.includes("builder") || j.includes("wizard")) return "builder";
1040
+ if (l.includes("profile") || j.includes("profile")) return "profile";
1041
+ if (l.includes("settings") || l.includes("config")) return "settings";
1042
+ if (l.includes("list") || j.includes("table") || j.includes("list")) return "list";
1043
+ if (l.includes("form") || uiPrimitives.includes("Form") || uiPrimitives.includes("Input")) return "form";
1044
+ if (l.includes("detail") || l.includes("view")) return "detail";
1045
+ if (p.includes("page.tsx")) return "page";
1046
+ if (p.includes("layout.tsx")) return "layout";
1047
+ if (/^[A-Z]/.test(filePath.split("/").pop() ?? "")) return "component";
1048
+ return "unknown";
1049
+ }
1050
+ function inferUiPatterns(jsxComponents, uiPrimitives) {
1051
+ const patterns = /* @__PURE__ */ new Set();
1052
+ const j = jsxComponents.map((c) => c.toLowerCase()).join(" ");
1053
+ const u = uiPrimitives.map((p) => p.toLowerCase());
1054
+ if (u.includes("form") || j.includes("form")) patterns.add("form");
1055
+ if (u.includes("table") || j.includes("table")) patterns.add("data-table");
1056
+ if (u.includes("tabs") || j.includes("tabs") || j.includes("tab")) patterns.add("tabbed-layout");
1057
+ if (u.includes("card")) patterns.add("card-grid");
1058
+ if (u.includes("modal") || u.includes("dialog")) patterns.add("modal-flow");
1059
+ if (j.includes("chat") || j.includes("message")) patterns.add("chat");
1060
+ if (j.includes("dashboard") || j.includes("panel") || j.includes("widget")) patterns.add("dashboard");
1061
+ if (j.includes("wizard") || j.includes("step")) patterns.add("wizard");
1062
+ if (j.includes("timeline") || j.includes("history")) patterns.add("timeline");
1063
+ if (u.includes("drawer") || u.includes("sheet")) patterns.add("drawer-layout");
1064
+ if (j.includes("editor") || j.includes("monaco") || j.includes("codemirror")) patterns.add("code-editor");
1065
+ if (j.includes("chart") || j.includes("graph") || j.includes("metric")) patterns.add("chart");
1066
+ return [...patterns];
1067
+ }
1068
+ function extractCustomHooks(content) {
1069
+ const hooks = /* @__PURE__ */ new Set();
1070
+ const re = /\buse([A-Z][A-Za-z]+)\s*(?:<[^>]*>)?\s*\(/g;
1071
+ let m;
1072
+ while ((m = re.exec(content)) !== null) {
1073
+ const full = "use" + m[1];
1074
+ if (!BUILTIN_HOOKS.has(full)) hooks.add(full);
1075
+ }
1076
+ return [...hooks].slice(0, 10);
1077
+ }
1078
+ function extractEventHandlers(content) {
1079
+ const handlers = /* @__PURE__ */ new Set();
1080
+ const re = /\bhandle[A-Z][A-Za-z]+\b/g;
1081
+ let m;
1082
+ while ((m = re.exec(content)) !== null) handlers.add(m[0]);
1083
+ return [...handlers].slice(0, 8);
1084
+ }
1085
+ function extractDataSources(content) {
1086
+ const sources = /* @__PURE__ */ new Set();
1087
+ if (/supabase\.from\(/.test(content)) sources.add("supabase");
1088
+ if (/\bfetch\s*\(|axios\.|\.get\s*\(|\.post\s*\(/.test(content)) sources.add("http-fetch");
1089
+ if (/\buseRouter\b|\busePathname\b|\buseSearchParams\b/.test(content)) sources.add("router");
1090
+ if (/\buseContext\s*\(/.test(content)) sources.add("context");
1091
+ if (/localStorage|sessionStorage/.test(content)) sources.add("local-storage");
1092
+ if (/new\s+Anthropic\b|@anthropic-ai/.test(content)) sources.add("anthropic-ai");
1093
+ if (/new\s+OpenAI\b/.test(content)) sources.add("openai");
1094
+ if (/GoogleGenerativeAI/.test(content)) sources.add("google-ai");
1095
+ if (/\.subscribe\(|new WebSocket\(/.test(content)) sources.add("subscription");
1096
+ return [...sources];
1097
+ }
1098
+ function extractScreenInfo(content, filePath, exportNames, jsxComponents, uiPrimitives, nextFileKind) {
1099
+ if (!filePath.endsWith(".tsx")) return null;
1100
+ const label = inferScreenLabel(filePath, exportNames);
1101
+ const screenKind = inferScreenKind(label, filePath, jsxComponents, uiPrimitives);
1102
+ const uiPatterns = inferUiPatterns(jsxComponents, uiPrimitives);
1103
+ const customHooks = extractCustomHooks(content);
1104
+ const eventHandlers = extractEventHandlers(content);
1105
+ const dataSources = extractDataSources(content);
1106
+ return { label, screenKind, uiPatterns, customHooks, eventHandlers, dataSources };
1107
+ }
1108
+ var CONFIG_SECTION_KEYWORDS = {
1109
+ system_baseline: ["baseline", "engine", "service"],
1110
+ routing_capabilities: ["routing", "router", "capability"],
1111
+ ai_strategy_master: ["strategy", "knowledge", "master"],
1112
+ ai_status: ["model", "provider", "aistatus"],
1113
+ ui_features: ["feature", "uifeature", "slider"],
1114
+ domain_milestones: ["milestone", "domain"]
1115
+ };
1116
+ function tableToKeywords(tableName) {
1117
+ const parts = tableName.split("_").filter((p) => p.length >= 3);
1118
+ const kws = new Set(parts);
1119
+ for (const part of parts) {
1120
+ if (part.endsWith("ies") && part.length > 5) {
1121
+ kws.add(part.slice(0, -3) + "y");
1122
+ } else if (part.endsWith("s") && !part.endsWith("ss") && part.length > 4) {
1123
+ kws.add(part.slice(0, -1));
1124
+ }
1125
+ }
1126
+ return [...kws];
1127
+ }
1128
+ function scoreFileForMatch(file, keywords) {
1129
+ const pathLow = file.path.toLowerCase();
1130
+ const docLow = [file.docSummary, file.docBlock].filter(Boolean).join(" ").toLowerCase();
1131
+ const exportsLow = file.exports.map((e) => e.toLowerCase());
1132
+ const importsLow = file.imports.map((i) => i.toLowerCase());
1133
+ function pathHits(kw) {
1134
+ const k = kw.toLowerCase();
1135
+ if (k.length <= 4) {
1136
+ return pathLow.split(/[\/\-_\.]/g).some((seg) => seg === k);
1137
+ }
1138
+ return pathLow.includes(k);
1139
+ }
1140
+ let score = 0;
1141
+ const reasons = [];
1142
+ const pathKws = keywords.filter(pathHits);
1143
+ if (pathKws.length > 0) {
1144
+ score += 0.4;
1145
+ reasons.push(`path: ${pathKws.slice(0, 2).join(", ")}`);
1146
+ }
1147
+ const expKws = keywords.filter(
1148
+ (kw) => exportsLow.some((e) => e.includes(kw.toLowerCase()))
1149
+ );
1150
+ if (expKws.length > 0) {
1151
+ const matched = file.exports.filter((e) => expKws.some((k) => e.toLowerCase().includes(k))).slice(0, 2);
1152
+ score += 0.3;
1153
+ reasons.push(`exports: ${matched.join(", ")}`);
1154
+ }
1155
+ if (docLow.length > 0) {
1156
+ const docKws = keywords.filter(
1157
+ (kw) => kw.length >= 4 && docLow.includes(kw.toLowerCase())
1158
+ );
1159
+ if (docKws.length > 0) {
1160
+ score += 0.2;
1161
+ reasons.push(`doc: ${docKws.slice(0, 2).join(", ")}`);
1162
+ }
1163
+ }
1164
+ const impKws = keywords.filter(
1165
+ (kw) => kw.length >= 4 && importsLow.some((i) => i.includes(kw.toLowerCase()))
1166
+ );
1167
+ if (impKws.length > 0) {
1168
+ score += 0.1;
1169
+ reasons.push(`imports: ${impKws.slice(0, 1).join(", ")}`);
1170
+ }
1171
+ return { score: Math.min(1, Math.round(score * 100) / 100), reasons };
1172
+ }
1173
+ function buildConfigToCode(configLayer, entries) {
1174
+ if (!configLayer.found) return [];
1175
+ return configLayer.sections.map((section) => {
1176
+ const idParts = section.id.split("_").filter((p) => p.length >= 3);
1177
+ const curated = CONFIG_SECTION_KEYWORDS[section.id] ?? [];
1178
+ const keywords = [.../* @__PURE__ */ new Set([...idParts, ...curated])];
1179
+ const matchedFiles = entries.map((file) => {
1180
+ const { score, reasons } = scoreFileForMatch(file, keywords);
1181
+ return { path: file.path, score, reasons };
1182
+ }).filter((m) => m.score >= 0.3 && m.reasons.length > 0).sort((a, b) => b.score - a.score).slice(0, 5);
1183
+ return { configId: section.id, configKind: section.kind, matchedFiles };
1184
+ });
1185
+ }
1186
+ function buildSchemaToCode(schemaLayer, entries) {
1187
+ if (!schemaLayer.found) return [];
1188
+ return schemaLayer.tables.map((table) => {
1189
+ const keywords = tableToKeywords(table.name);
1190
+ const matchedFiles = entries.map((file) => {
1191
+ const { score, reasons } = scoreFileForMatch(file, keywords);
1192
+ return { path: file.path, score, reasons };
1193
+ }).filter((m) => m.score >= 0.3 && m.reasons.length > 0).sort((a, b) => b.score - a.score).slice(0, 5);
1194
+ return { tableName: table.name, category: table.category, matchedFiles };
1195
+ });
1196
+ }
1197
+ function inferSymbolKind(name, baseKind) {
1198
+ if (/^use[A-Z]/.test(name)) return "hook";
1199
+ if (/^[A-Z]/.test(name)) return "component";
1200
+ return baseKind;
1201
+ }
1202
+ function extractDocForLine(lines, lineIndex) {
1203
+ let i = lineIndex - 1;
1204
+ while (i >= 0 && lines[i].trim() === "") i--;
1205
+ if (i < 0 || !lines[i].trim().endsWith("*/")) return null;
1206
+ const blockEnd = i;
1207
+ while (i > 0 && !lines[i].trim().startsWith("/**")) i--;
1208
+ if (!lines[i].trim().startsWith("/**")) return null;
1209
+ const cleaned = lines.slice(i, blockEnd + 1).join("\n").replace(/^\/\*+/, "").replace(/\*+\/$/, "").split("\n").map((l) => l.replace(/^\s*\*\s?/, "").trim()).filter((l) => l.length > 0 && !l.startsWith("@")).join(" ").trim();
1210
+ return cleaned.slice(0, 200) || null;
1211
+ }
1212
+ function extractSymbolSummaries(content) {
1213
+ const results = [];
1214
+ const lines = content.split("\n");
1215
+ const patterns = [
1216
+ [/^export\s+(?:default\s+)?(?:async\s+)?function\s+(\w+)/, null, true],
1217
+ [/^export\s+const\s+(\w+)\s*=/, null, true],
1218
+ [/^export\s+(?:type|interface)\s+(\w+)[\s{<]/, "type", true],
1219
+ [/^export\s+(?:default\s+)?class\s+(\w+)/, "component", true],
1220
+ [/^(?:async\s+)?function\s+(use[A-Z]\w+)\s*\(/, "hook", false]
1221
+ ];
1222
+ for (let i = 0; i < lines.length && results.length < 10; i++) {
1223
+ const line = lines[i].trimStart();
1224
+ for (const [re, forcedKind, exported] of patterns) {
1225
+ const m = re.exec(line);
1226
+ if (!m) continue;
1227
+ const name = m[1];
1228
+ const baseKind = line.includes("function") ? "function" : "const";
1229
+ const kind = forcedKind ?? inferSymbolKind(name, baseKind);
1230
+ const doc = extractDocForLine(lines, i);
1231
+ results.push({ name, kind, exported, doc });
1232
+ break;
1233
+ }
1234
+ }
1235
+ return results;
1236
+ }
1237
+ function extractAdditionalDocBlocks(content, primaryDocBlock) {
1238
+ const blocks = [];
1239
+ const re = /\/\*\*([\s\S]*?)\*\//g;
1240
+ let m;
1241
+ while ((m = re.exec(content)) !== null && blocks.length < 4) {
1242
+ const cleaned = m[1].split("\n").map((l) => l.replace(/^\s*\*\s?/, "").trim()).filter((l) => l.length > 0 && !l.startsWith("@")).join("\n").trim();
1243
+ if (cleaned.length > 15 && cleaned !== primaryDocBlock) {
1244
+ blocks.push(cleaned.slice(0, 200));
1245
+ }
1246
+ }
1247
+ return blocks;
1248
+ }
1249
+ function extractCodeSnippets(content, configSectionIds, tableNames) {
1250
+ const snippets = [];
1251
+ const lines = content.split("\n");
1252
+ const MAX_CHARS = 300;
1253
+ const take = (start, n) => lines.slice(start, start + n).map((l) => l.trim()).filter((l) => l.length > 0).slice(0, n).join("\n").slice(0, MAX_CHARS);
1254
+ const exportRe = /^export\s+(?:default\s+)?(?:async\s+)?(?:function|class|const)\s+(\w+)/;
1255
+ const exportIdx = lines.findIndex((l) => exportRe.test(l.trimStart()));
1256
+ if (exportIdx >= 0) {
1257
+ const m = exportRe.exec(lines[exportIdx].trimStart());
1258
+ const name = m?.[1] ?? "export";
1259
+ snippets.push({
1260
+ label: name,
1261
+ kind: /^[A-Z]/.test(name) ? "component" : "function",
1262
+ snippet: take(exportIdx, 5)
1263
+ });
1264
+ }
1265
+ const dbIdx = lines.findIndex((l) => /\.from\(['"][\w_]+['"]\)/.test(l));
1266
+ if (dbIdx >= 0) {
1267
+ const tbl = lines[dbIdx].match(/\.from\(['"](\w+)['"]\)/)?.[1];
1268
+ snippets.push({
1269
+ label: tbl ? `query: ${tbl}` : "db query",
1270
+ kind: "query",
1271
+ snippet: take(Math.max(0, dbIdx - 1), 5)
1272
+ });
1273
+ }
1274
+ for (const id of configSectionIds) {
1275
+ const idx = lines.findIndex(
1276
+ (l) => l.includes(`'${id}'`) || l.includes(`"${id}"`)
1277
+ );
1278
+ if (idx >= 0) {
1279
+ snippets.push({
1280
+ label: `config: ${id}`,
1281
+ kind: "config-usage",
1282
+ snippet: take(Math.max(0, idx - 1), 4)
1283
+ });
1284
+ break;
1285
+ }
1286
+ }
1287
+ if (!snippets.some((s) => s.kind === "query")) {
1288
+ for (const name of tableNames) {
1289
+ const idx = lines.findIndex(
1290
+ (l) => l.includes(`'${name}'`) || l.includes(`"${name}"`)
1291
+ );
1292
+ if (idx >= 0) {
1293
+ snippets.push({
1294
+ label: `table: ${name}`,
1295
+ kind: "table-usage",
1296
+ snippet: take(Math.max(0, idx - 1), 4)
1297
+ });
1298
+ break;
1299
+ }
1300
+ }
1301
+ }
1302
+ return snippets.slice(0, 4);
1303
+ }
1304
+ function extractExplainability(content, primaryDocBlock, configSectionIds, tableNames) {
1305
+ const docBlocks = extractAdditionalDocBlocks(content, primaryDocBlock);
1306
+ const symbolSummaries = extractSymbolSummaries(content);
1307
+ const codeSnippets = extractCodeSnippets(content, configSectionIds, tableNames);
1308
+ const matchedConfigIdsInCode = configSectionIds.filter(
1309
+ (id) => content.includes(`'${id}'`) || content.includes(`"${id}"`)
1310
+ );
1311
+ const matchedTableNamesInCode = tableNames.filter((name) => {
1312
+ if (content.includes(`.from('${name}')`) || content.includes(`.from("${name}")`))
1313
+ return true;
1314
+ return content.includes(`'${name}'`) || content.includes(`"${name}"`);
1315
+ });
1316
+ return {
1317
+ primaryDocBlock,
1318
+ docBlocks,
1319
+ symbolSummaries,
1320
+ codeSnippets,
1321
+ matchedConfigIdsInCode,
1322
+ matchedTableNamesInCode
1323
+ };
1324
+ }
1325
+ function extractJsdocTags(content) {
1326
+ const result = {};
1327
+ const SKIP_TAGS = /* @__PURE__ */ new Set(["amber-capability", "amber-doc"]);
1328
+ const MAX_TAG_NAMES = 5;
1329
+ const MAX_VALUES_PER_TAG = 3;
1330
+ const blockRe = /\/\*\*[\s\S]*?\*\//g;
1331
+ let blockMatch;
1332
+ while ((blockMatch = blockRe.exec(content)) !== null) {
1333
+ const block = blockMatch[0];
1334
+ const lineRe = /\*[^\S\n]+@(\w+)[^\S\n]*(.*)/g;
1335
+ let lineMatch;
1336
+ while ((lineMatch = lineRe.exec(block)) !== null) {
1337
+ const tagName = lineMatch[1];
1338
+ const tagValue = lineMatch[2].trim();
1339
+ if (SKIP_TAGS.has(tagName)) continue;
1340
+ if (!Object.prototype.hasOwnProperty.call(result, tagName)) {
1341
+ if (Object.keys(result).length >= MAX_TAG_NAMES) continue;
1342
+ result[tagName] = [];
1343
+ }
1344
+ if (result[tagName].length < MAX_VALUES_PER_TAG) {
1345
+ result[tagName].push(tagValue);
1346
+ }
1347
+ }
1348
+ }
1349
+ return result;
1350
+ }
1351
+ function collectMarkdownDocs(projectRoot) {
1352
+ const IGNORE = ["**/node_modules/**", "**/.next/**", "**/build/**", "**/dist/**", "**/.git/**"];
1353
+ const SIZE_CAP = 5e4;
1354
+ const TOTAL_BUDGET = 5e5;
1355
+ const MAX_HEADINGS = 30;
1356
+ let files;
1357
+ try {
1358
+ files = fg__default.default.sync("**/*.md", { cwd: projectRoot, ignore: IGNORE, onlyFiles: true, absolute: false });
1359
+ } catch {
1360
+ return [];
1361
+ }
1362
+ const docs = [];
1363
+ let totalChars = 0;
1364
+ for (const relPath of files.sort()) {
1365
+ if (totalChars >= TOTAL_BUDGET) break;
1366
+ const fullPath = path.join(projectRoot, relPath);
1367
+ let content;
1368
+ try {
1369
+ content = fs.readFileSync(fullPath, "utf-8");
1370
+ } catch {
1371
+ continue;
1372
+ }
1373
+ if (content.length > SIZE_CAP) continue;
1374
+ totalChars += content.length;
1375
+ const lines = content.split("\n");
1376
+ let title = null;
1377
+ for (const line of lines) {
1378
+ const m = line.match(/^#\s+(.+)/);
1379
+ if (m) {
1380
+ title = m[1].trim();
1381
+ break;
1382
+ }
1383
+ }
1384
+ if (!title) title = path.basename(relPath, ".md");
1385
+ const headingTree = [];
1386
+ for (const line of lines) {
1387
+ if (/^#{1,6}\s+.+/.test(line)) {
1388
+ headingTree.push(line.trimEnd());
1389
+ if (headingTree.length >= MAX_HEADINGS) break;
1390
+ }
1391
+ }
1392
+ let lastModified;
1393
+ try {
1394
+ lastModified = fs.statSync(fullPath).mtime.toISOString();
1395
+ } catch {
1396
+ lastModified = (/* @__PURE__ */ new Date(0)).toISOString();
1397
+ }
1398
+ docs.push({
1399
+ path: relPath,
1400
+ title,
1401
+ headingTree,
1402
+ loc: lines.length,
1403
+ lastModified
1404
+ });
1405
+ }
1406
+ return docs;
1407
+ }
1408
+ function collectRecentCommits(projectRoot) {
1409
+ const MAX_COMMITS = 5e3;
1410
+ let logOutput;
1411
+ try {
1412
+ logOutput = child_process.execSync('git log --since="180 days ago" --pretty=format:"%h|%aI|%s" -- .', {
1413
+ cwd: projectRoot,
1414
+ encoding: "utf-8",
1415
+ stdio: ["pipe", "pipe", "pipe"]
1416
+ });
1417
+ } catch {
1418
+ return [];
1419
+ }
1420
+ const lines = logOutput.split("\n").map((l) => l.trim()).filter(Boolean);
1421
+ const commits = [];
1422
+ for (const line of lines.slice(0, MAX_COMMITS)) {
1423
+ const pipeIdx1 = line.indexOf("|");
1424
+ if (pipeIdx1 === -1) continue;
1425
+ const pipeIdx2 = line.indexOf("|", pipeIdx1 + 1);
1426
+ if (pipeIdx2 === -1) continue;
1427
+ const sha = line.slice(0, pipeIdx1);
1428
+ const date = line.slice(pipeIdx1 + 1, pipeIdx2);
1429
+ const subject = line.slice(pipeIdx2 + 1);
1430
+ let files = [];
1431
+ let insertions = 0;
1432
+ let deletions = 0;
1433
+ try {
1434
+ const statOutput = child_process.execSync(`git show --stat --format="" ${sha}`, {
1435
+ cwd: projectRoot,
1436
+ encoding: "utf-8",
1437
+ stdio: ["pipe", "pipe", "pipe"]
1438
+ });
1439
+ const statLines = statOutput.split("\n").map((l) => l.trim()).filter(Boolean);
1440
+ for (const statLine of statLines) {
1441
+ const summaryMatch = statLine.match(/(\d+)\s+files?\s+changed(?:,\s*(\d+)\s+insertions?\(\+\))?(?:,\s*(\d+)\s+deletions?\(-\))?/);
1442
+ if (summaryMatch) {
1443
+ insertions = parseInt(summaryMatch[2] ?? "0", 10);
1444
+ deletions = parseInt(summaryMatch[3] ?? "0", 10);
1445
+ continue;
1446
+ }
1447
+ const fileMatch = statLine.match(/^(.+?)\s+\|/);
1448
+ if (fileMatch) {
1449
+ files.push(fileMatch[1].trim());
1450
+ }
1451
+ }
1452
+ } catch {
1453
+ }
1454
+ commits.push({ sha, date, subject, files, insertions, deletions });
1455
+ }
1456
+ return commits;
1457
+ }
1458
+ function buildFileCommitStats(commits, now) {
1459
+ const map = /* @__PURE__ */ new Map();
1460
+ const MS_90D = 90 * 24 * 60 * 60 * 1e3;
1461
+ const MS_180D = 180 * 24 * 60 * 60 * 1e3;
1462
+ const nowMs = now.getTime();
1463
+ for (const commit of commits) {
1464
+ const commitMs = new Date(commit.date).getTime();
1465
+ const age = nowMs - commitMs;
1466
+ const in90 = age <= MS_90D;
1467
+ const in180 = age <= MS_180D;
1468
+ for (const filePath of commit.files) {
1469
+ if (!map.has(filePath)) {
1470
+ map.set(filePath, { count_90d: 0, count_180d: 0, subjects_180d: [] });
1471
+ }
1472
+ const stats = map.get(filePath);
1473
+ if (in90) stats.count_90d++;
1474
+ if (in180) {
1475
+ stats.count_180d++;
1476
+ if (stats.subjects_180d.length < 5) {
1477
+ stats.subjects_180d.push(commit.subject);
1478
+ }
1479
+ }
1480
+ }
1481
+ }
1482
+ return map;
1483
+ }
1484
+ function buildRecentTodos(entries) {
1485
+ const result = [];
1486
+ for (const entry of entries) {
1487
+ const tags = entry.jsdocTags ?? {};
1488
+ const todos = tags["todo"] ?? [];
1489
+ for (const text of todos) {
1490
+ result.push({ path: entry.path, text });
1491
+ }
1492
+ }
1493
+ return result;
1494
+ }
1495
+ function buildDeprecatedSurface(entries) {
1496
+ const result = [];
1497
+ for (const entry of entries) {
1498
+ const tags = entry.jsdocTags ?? {};
1499
+ const deprecatedValues = tags["deprecated"] ?? [];
1500
+ if (deprecatedValues.length > 0) {
1501
+ result.push({ path: entry.path, reason: deprecatedValues[0] ?? "" });
1502
+ }
1503
+ }
1504
+ return result;
1505
+ }
1506
+ async function main() {
1507
+ const projectRoot = process.cwd();
1508
+ const coverageMap = (() => {
1509
+ const coveragePath = path.join(projectRoot, "coverage", "coverage-summary.json");
1510
+ if (!fs.existsSync(coveragePath)) return /* @__PURE__ */ new Map();
1511
+ try {
1512
+ const raw = JSON.parse(fs.readFileSync(coveragePath, "utf-8"));
1513
+ const map = parseCoverageSummary(raw, projectRoot);
1514
+ console.log(` coverage: ${map.size} files with coverage data`);
1515
+ return map;
1516
+ } catch {
1517
+ console.warn(" coverage: could not parse coverage-summary.json \u2014 coverage will be absent");
1518
+ return /* @__PURE__ */ new Map();
1519
+ }
1520
+ })();
1521
+ const churnMap = (() => {
1522
+ try {
1523
+ const out = child_process.execSync('git log --since="90 days ago" --pretty=format: --name-only', {
1524
+ cwd: projectRoot,
1525
+ encoding: "utf-8",
1526
+ stdio: ["pipe", "pipe", "pipe"]
1527
+ });
1528
+ const map = /* @__PURE__ */ new Map();
1529
+ for (const line of out.split("\n")) {
1530
+ const trimmed = line.trim();
1531
+ if (trimmed) map.set(trimmed, (map.get(trimmed) ?? 0) + 1);
1532
+ }
1533
+ return map;
1534
+ } catch {
1535
+ return /* @__PURE__ */ new Map();
1536
+ }
1537
+ })();
1538
+ const aliases = readTsConfigPaths(projectRoot);
1539
+ console.log(`
1540
+ tsconfig paths loaded:`);
1541
+ console.log(` baseUrl : ${aliases.baseUrl}`);
1542
+ console.log(` aliases : ${JSON.stringify(aliases.paths)}`);
1543
+ const configLayer = parseConfigLayer(projectRoot);
1544
+ const schemaLayer = parseSchemaLayer(projectRoot);
1545
+ const configSectionIds = configLayer.sections.map((s2) => s2.id);
1546
+ const tableNames = schemaLayer.tables.map((t) => t.name);
1547
+ const markdownDocs = collectMarkdownDocs(projectRoot);
1548
+ const recentCommits = collectRecentCommits(projectRoot);
1549
+ const fileCommitStatsMap = buildFileCommitStats(recentCommits, /* @__PURE__ */ new Date());
1550
+ const files = await fg__default.default.glob([...blueprintConfig.include], {
1551
+ ignore: [...blueprintConfig.exclude],
1552
+ onlyFiles: true
1553
+ });
1554
+ const scopeSet = new Set(files.map(path.normalize));
1555
+ const entries = [];
1556
+ for (const filePath of files) {
1557
+ try {
1558
+ const content = fs.readFileSync(filePath, "utf-8");
1559
+ const rawImports = extractImports(content);
1560
+ const usageMap = classifyImports(content);
1561
+ const resolvedImportMap = rawImports.map(
1562
+ (specifier) => ({
1563
+ ...resolveImport(specifier, filePath, projectRoot, scopeSet, aliases),
1564
+ importUsage: usageMap.get(specifier) ?? "runtime"
1565
+ })
1566
+ );
1567
+ const internalImports = [
1568
+ ...new Set(
1569
+ resolvedImportMap.filter((r) => r.kind === "internal" && r.resolvedPath !== null).map((r) => r.resolvedPath)
1570
+ )
1571
+ ];
1572
+ const runtimeInternalImports = [
1573
+ ...new Set(
1574
+ resolvedImportMap.filter(
1575
+ (r) => r.kind === "internal" && r.resolvedPath !== null && r.importUsage === "runtime"
1576
+ ).map((r) => r.resolvedPath)
1577
+ )
1578
+ ];
1579
+ const typeOnlyInternalImports = [
1580
+ ...new Set(
1581
+ resolvedImportMap.filter(
1582
+ (r) => r.kind === "internal" && r.resolvedPath !== null && r.importUsage === "type-only"
1583
+ ).map((r) => r.resolvedPath)
1584
+ )
1585
+ ];
1586
+ const externalImports = [
1587
+ ...new Set(
1588
+ resolvedImportMap.filter((r) => r.kind === "external").map((r) => r.source)
1589
+ )
1590
+ ];
1591
+ const { docSummary, docBlock } = extractDocInfo(content);
1592
+ const { hasUseClient, hasUseServer } = detectDirectives(content);
1593
+ const nextFileKind = getNextFileKind(filePath);
1594
+ const { jsxComponents, uiPrimitives, componentUsageCount, topLevelJsxBlocks } = extractJsxInfo(content, filePath);
1595
+ const stateComplexity = extractStateComplexity(content, filePath);
1596
+ const controlInventory = extractControlInventory(
1597
+ content,
1598
+ filePath,
1599
+ jsxComponents,
1600
+ uiPrimitives,
1601
+ extractEventHandlers(content)
1602
+ );
1603
+ const screenInfo = extractScreenInfo(
1604
+ content,
1605
+ filePath,
1606
+ extractExports(content),
1607
+ // re-use extracted exports
1608
+ jsxComponents,
1609
+ uiPrimitives,
1610
+ nextFileKind
1611
+ );
1612
+ const explainability = extractExplainability(
1613
+ content,
1614
+ docBlock,
1615
+ configSectionIds,
1616
+ tableNames
1617
+ );
1618
+ entries.push({
1619
+ id: makeId(filePath),
1620
+ path: filePath,
1621
+ category: getCategory(filePath),
1622
+ loc: content.split("\n").length,
1623
+ imports: rawImports,
1624
+ exports: extractExports(content),
1625
+ hasJsDoc: detectJsDoc(content),
1626
+ docSummary,
1627
+ docBlock,
1628
+ renderEnvironment: getRenderEnvironment(
1629
+ filePath,
1630
+ hasUseClient,
1631
+ hasUseServer
1632
+ ),
1633
+ nextFileKind,
1634
+ routePath: deriveRoutePath(filePath),
1635
+ hasUseClientDirective: hasUseClient,
1636
+ hasUseServerDirective: hasUseServer,
1637
+ isApiRoute: filePath.startsWith("app/") && nextFileKind === "route",
1638
+ isCyclic: false,
1639
+ cycleGroupId: null,
1640
+ jsxComponents,
1641
+ uiPrimitives,
1642
+ componentUsageCount,
1643
+ topLevelJsxBlocks,
1644
+ metrics: {
1645
+ loc: content.split("\n").length,
1646
+ incomingRuntimeDeps: 0,
1647
+ outgoingRuntimeDeps: runtimeInternalImports.length,
1648
+ jsxComponentCount: jsxComponents.length,
1649
+ uiPrimitiveCount: uiPrimitives.length,
1650
+ complexityScore: null,
1651
+ duplicationScore: null,
1652
+ heatScore: 0
1653
+ },
1654
+ stateComplexity,
1655
+ controlInventory,
1656
+ screenInfo,
1657
+ explainability,
1658
+ coverage: lookupCoverage(coverageMap, filePath),
1659
+ churn: churnMap.get(filePath) ?? void 0,
1660
+ jsdocTags: extractJsdocTags(content),
1661
+ commitStats: fileCommitStatsMap.get(filePath) ?? void 0,
1662
+ relatedConfigIds: [],
1663
+ // populated after cross-reference computation
1664
+ relatedTableNames: [],
1665
+ // populated after cross-reference computation
1666
+ internalImports,
1667
+ externalImports,
1668
+ runtimeInternalImports,
1669
+ typeOnlyInternalImports,
1670
+ incomingInternalDependencies: [],
1671
+ outgoingInternalDependencies: internalImports,
1672
+ resolvedImportMap
1673
+ });
1674
+ } catch {
1675
+ console.warn(`Skipping unreadable file: ${filePath}`);
1676
+ }
1677
+ }
1678
+ const incomingMap = new Map(
1679
+ entries.map((e) => [e.path, []])
1680
+ );
1681
+ for (const entry of entries) {
1682
+ for (const internalPath of entry.internalImports) {
1683
+ const arr = incomingMap.get(internalPath);
1684
+ if (arr && !arr.includes(entry.path)) arr.push(entry.path);
1685
+ }
1686
+ }
1687
+ for (const entry of entries) {
1688
+ entry.incomingInternalDependencies = incomingMap.get(entry.path) ?? [];
1689
+ }
1690
+ const runtimeIncomingCounts = new Map(
1691
+ entries.map((e) => [e.path, 0])
1692
+ );
1693
+ for (const entry of entries) {
1694
+ for (const p of entry.runtimeInternalImports) {
1695
+ runtimeIncomingCounts.set(p, (runtimeIncomingCounts.get(p) ?? 0) + 1);
1696
+ }
1697
+ }
1698
+ const maxLoc = Math.max(...entries.map((e) => e.loc), 1);
1699
+ const maxIncoming = Math.max(
1700
+ ...entries.map((e) => runtimeIncomingCounts.get(e.path) ?? 0),
1701
+ 1
1702
+ );
1703
+ const maxOutgoing = Math.max(
1704
+ ...entries.map((e) => e.runtimeInternalImports.length),
1705
+ 1
1706
+ );
1707
+ const maxJsx = Math.max(...entries.map((e) => e.jsxComponents.length), 1);
1708
+ const maxUi = Math.max(...entries.map((e) => e.uiPrimitives.length), 1);
1709
+ for (const entry of entries) {
1710
+ const inc = runtimeIncomingCounts.get(entry.path) ?? 0;
1711
+ const out = entry.runtimeInternalImports.length;
1712
+ const jsx = entry.jsxComponents.length;
1713
+ const ui = entry.uiPrimitives.length;
1714
+ const raw = 0.25 * (entry.loc / maxLoc) + 0.35 * (inc / maxIncoming) + 0.15 * (out / maxOutgoing) + 0.15 * (jsx / maxJsx) + 0.1 * (ui / maxUi);
1715
+ entry.metrics = {
1716
+ loc: entry.loc,
1717
+ incomingRuntimeDeps: inc,
1718
+ outgoingRuntimeDeps: out,
1719
+ jsxComponentCount: jsx,
1720
+ uiPrimitiveCount: ui,
1721
+ complexityScore: null,
1722
+ duplicationScore: null,
1723
+ heatScore: Math.round(raw * 1e3) / 10
1724
+ };
1725
+ }
1726
+ const allImportsAdj = new Map(
1727
+ entries.map((e) => [e.path, e.internalImports])
1728
+ );
1729
+ const preFilterGroups = extractCycleGroups(
1730
+ tarjanSCC(allImportsAdj),
1731
+ allImportsAdj
1732
+ );
1733
+ const runtimeAdj = new Map(
1734
+ entries.map((e) => [e.path, e.runtimeInternalImports])
1735
+ );
1736
+ const cycleGroups = extractCycleGroups(tarjanSCC(runtimeAdj), runtimeAdj);
1737
+ const cyclesEliminatedByTypeImportFiltering = preFilterGroups.length - cycleGroups.length;
1738
+ const pathToCycleGroupId = /* @__PURE__ */ new Map();
1739
+ for (const group of cycleGroups) {
1740
+ for (const p of group.paths) pathToCycleGroupId.set(p, group.id);
1741
+ }
1742
+ for (const entry of entries) {
1743
+ entry.isCyclic = pathToCycleGroupId.has(entry.path);
1744
+ entry.cycleGroupId = pathToCycleGroupId.get(entry.path) ?? null;
1745
+ }
1746
+ const filesInCycles = [...pathToCycleGroupId.keys()].sort();
1747
+ const largestCycleSize = cycleGroups[0]?.size ?? 0;
1748
+ const analysis = {
1749
+ hasCycles: cycleGroups.length > 0,
1750
+ cycleCount: cycleGroups.length,
1751
+ stronglyConnectedComponents: cycleGroups,
1752
+ filesInCycles,
1753
+ cyclesEliminatedByTypeImportFiltering
1754
+ };
1755
+ const nodes = entries.map((e) => ({
1756
+ id: e.id,
1757
+ path: e.path,
1758
+ category: e.category,
1759
+ loc: e.loc,
1760
+ hasJsDoc: e.hasJsDoc,
1761
+ label: path.basename(e.path)
1762
+ }));
1763
+ const idByPath = new Map(entries.map((e) => [e.path, e.id]));
1764
+ const edgeSet = /* @__PURE__ */ new Set();
1765
+ const edges = [];
1766
+ for (const entry of entries) {
1767
+ for (const internalPath of entry.runtimeInternalImports) {
1768
+ const targetId = idByPath.get(internalPath);
1769
+ if (!targetId) continue;
1770
+ const key = `${entry.id}:${targetId}`;
1771
+ if (!edgeSet.has(key)) {
1772
+ edgeSet.add(key);
1773
+ edges.push({ source: entry.id, target: targetId, type: "import" });
1774
+ }
1775
+ }
1776
+ }
1777
+ const totalInternal = entries.reduce(
1778
+ (sum, f) => sum + f.internalImports.length,
1779
+ 0
1780
+ );
1781
+ const totalExternal = entries.reduce(
1782
+ (sum, f) => sum + f.externalImports.length,
1783
+ 0
1784
+ );
1785
+ const totalRuntimeInternal = entries.reduce(
1786
+ (sum, f) => sum + f.runtimeInternalImports.length,
1787
+ 0
1788
+ );
1789
+ const totalTypeOnlyInternal = entries.reduce(
1790
+ (sum, f) => sum + f.typeOnlyInternalImports.length,
1791
+ 0
1792
+ );
1793
+ const importCounts = /* @__PURE__ */ new Map();
1794
+ for (const entry of entries) {
1795
+ for (const internalPath of entry.runtimeInternalImports) {
1796
+ importCounts.set(internalPath, (importCounts.get(internalPath) ?? 0) + 1);
1797
+ }
1798
+ }
1799
+ const mostImportedFiles = [...importCounts.entries()].sort((a, b) => b[1] - a[1]).slice(0, 5).map(([path, count]) => ({ path, count }));
1800
+ const primitiveCount = /* @__PURE__ */ new Map();
1801
+ for (const entry of entries) {
1802
+ for (const prim of entry.uiPrimitives) {
1803
+ primitiveCount.set(prim, (primitiveCount.get(prim) ?? 0) + 1);
1804
+ }
1805
+ }
1806
+ const mostUsedUiPrimitives = [...primitiveCount.entries()].sort((a, b) => b[1] - a[1]).map(([name, count]) => ({ name, count }));
1807
+ const hottestFiles2 = [...entries].sort((a, b) => b.metrics.heatScore - a.metrics.heatScore).slice(0, 15).map((e) => ({ path: e.path, heatScore: e.metrics.heatScore }));
1808
+ const categoryGroups = /* @__PURE__ */ new Map();
1809
+ for (const entry of entries) {
1810
+ const scores = categoryGroups.get(entry.category) ?? [];
1811
+ scores.push(entry.metrics.heatScore);
1812
+ categoryGroups.set(entry.category, scores);
1813
+ }
1814
+ const categoryHeat = [...categoryGroups.entries()].map(([category, scores]) => ({
1815
+ category,
1816
+ averageHeat: Math.round(
1817
+ scores.reduce((a, b) => a + b, 0) / scores.length * 10
1818
+ ) / 10,
1819
+ fileCount: scores.length
1820
+ })).sort((a, b) => b.averageHeat - a.averageHeat);
1821
+ const heatmap = { hottestFiles: hottestFiles2, categoryHeat };
1822
+ const configToCode = buildConfigToCode(configLayer, entries);
1823
+ const schemaToCode = buildSchemaToCode(schemaLayer, entries);
1824
+ const fileConfigIds = /* @__PURE__ */ new Map();
1825
+ const fileTableNames = /* @__PURE__ */ new Map();
1826
+ for (const link of configToCode) {
1827
+ for (const m of link.matchedFiles) {
1828
+ const arr = fileConfigIds.get(m.path) ?? [];
1829
+ if (!arr.includes(link.configId)) arr.push(link.configId);
1830
+ fileConfigIds.set(m.path, arr);
1831
+ }
1832
+ }
1833
+ for (const link of schemaToCode) {
1834
+ for (const m of link.matchedFiles) {
1835
+ const arr = fileTableNames.get(m.path) ?? [];
1836
+ if (!arr.includes(link.tableName)) arr.push(link.tableName);
1837
+ fileTableNames.set(m.path, arr);
1838
+ }
1839
+ }
1840
+ for (const entry of entries) {
1841
+ entry.relatedConfigIds = fileConfigIds.get(entry.path) ?? [];
1842
+ entry.relatedTableNames = fileTableNames.get(entry.path) ?? [];
1843
+ }
1844
+ const crossReferences = { configToCode, schemaToCode };
1845
+ const configCodeLinkCount = configToCode.reduce(
1846
+ (s2, c) => s2 + c.matchedFiles.length,
1847
+ 0
1848
+ );
1849
+ const schemaCodeLinkCount = schemaToCode.reduce(
1850
+ (s2, c) => s2 + c.matchedFiles.length,
1851
+ 0
1852
+ );
1853
+ const routesDiscovered = [
1854
+ ...new Set(
1855
+ entries.filter(
1856
+ (f) => f.routePath !== null && (f.nextFileKind === "page" || f.nextFileKind === "route")
1857
+ ).map((f) => f.routePath)
1858
+ )
1859
+ ].sort();
1860
+ const output = {
1861
+ generatedAt: (/* @__PURE__ */ new Date()).toISOString(),
1862
+ summary: {
1863
+ fileCount: entries.length,
1864
+ pageCount: entries.filter((f) => f.category === "app").length,
1865
+ componentCount: entries.filter((f) => f.category === "component").length,
1866
+ libCount: entries.filter((f) => f.category === "lib").length,
1867
+ hookCount: entries.filter((f) => f.category === "hook").length,
1868
+ internalDependencyCount: totalInternal,
1869
+ externalDependencyCount: totalExternal,
1870
+ runtimeInternalDependencyCount: totalRuntimeInternal,
1871
+ typeOnlyInternalDependencyCount: totalTypeOnlyInternal,
1872
+ nodeCount: nodes.length,
1873
+ edgeCount: edges.length,
1874
+ mostImportedFiles,
1875
+ clientFileCount: entries.filter((f) => f.renderEnvironment === "client").length,
1876
+ serverFileCount: entries.filter((f) => f.renderEnvironment === "server").length,
1877
+ pageFileCount: entries.filter((f) => f.nextFileKind === "page").length,
1878
+ routeFileCount: entries.filter((f) => f.nextFileKind === "route").length,
1879
+ routesDiscovered,
1880
+ cyclicFileCount: filesInCycles.length,
1881
+ stronglyConnectedComponentCount: cycleGroups.length,
1882
+ largestCycleSize,
1883
+ tsxFileCount: entries.filter((f) => f.path.endsWith(".tsx")).length,
1884
+ filesWithJsxComponents: entries.filter((f) => f.jsxComponents.length > 0).length,
1885
+ filesWithUiPrimitives: entries.filter((f) => f.uiPrimitives.length > 0).length,
1886
+ mostUsedUiPrimitives,
1887
+ configSectionCount: configLayer.sectionCount,
1888
+ sqlTableCount: schemaLayer.tableCount,
1889
+ sqlForeignKeyCount: schemaLayer.foreignKeys.length,
1890
+ configCodeLinkCount,
1891
+ schemaCodeLinkCount,
1892
+ filesWithExplainability: entries.filter(
1893
+ (f) => f.explainability.symbolSummaries.length > 0 || f.explainability.primaryDocBlock !== null
1894
+ ).length,
1895
+ filesWithTableStringMatches: entries.filter(
1896
+ (f) => f.explainability.matchedTableNamesInCode.length > 0
1897
+ ).length,
1898
+ filesWithConfigStringMatches: entries.filter(
1899
+ (f) => f.explainability.matchedConfigIdsInCode.length > 0
1900
+ ).length,
1901
+ filesWithStateComplexity: entries.filter(
1902
+ (f) => f.stateComplexity !== null
1903
+ ).length,
1904
+ topStateHeavyFiles: [...entries].filter((f) => f.stateComplexity !== null).sort(
1905
+ (a, b) => (b.stateComplexity?.hookCounts.total ?? 0) - (a.stateComplexity?.hookCounts.total ?? 0)
1906
+ ).slice(0, 5).map((f) => ({
1907
+ path: f.path,
1908
+ totalHooks: f.stateComplexity.hookCounts.total
1909
+ }))
1910
+ },
1911
+ analysis,
1912
+ heatmap,
1913
+ configLayer,
1914
+ schemaLayer,
1915
+ crossReferences,
1916
+ nodes,
1917
+ edges,
1918
+ files: entries,
1919
+ markdownDocs,
1920
+ recentCommits,
1921
+ recentTodos: buildRecentTodos(entries),
1922
+ deprecatedSurface: buildDeprecatedSurface(entries)
1923
+ };
1924
+ try {
1925
+ const { enrichWithTypedSignatures: enrichWithTypedSignatures2 } = await Promise.resolve().then(() => (init_astEnrich(), astEnrich_exports));
1926
+ console.log("\nRunning ts-morph AST enrichment...");
1927
+ const sigMap = enrichWithTypedSignatures2(entries, projectRoot);
1928
+ let enrichedCount = 0;
1929
+ for (const file of entries) {
1930
+ const sigs = sigMap.get(file.path);
1931
+ if (!sigs) continue;
1932
+ file.explainability.typedSignatures = sigs;
1933
+ for (const sym of file.explainability.symbolSummaries) {
1934
+ const match = sigs.find((s2) => s2.name === sym.name);
1935
+ if (match) sym.signature = match.signature;
1936
+ }
1937
+ enrichedCount++;
1938
+ }
1939
+ console.log(` \u2192 Enriched ${enrichedCount} / ${entries.length} files with typed signatures`);
1940
+ } catch (e) {
1941
+ console.warn(" ts-morph enrichment skipped:", e.message);
1942
+ }
1943
+ const outputDir = path.join(__dirname$1, "output");
1944
+ fs.mkdirSync(outputDir, { recursive: true });
1945
+ fs.writeFileSync(
1946
+ path.join(outputDir, "blueprint.json"),
1947
+ JSON.stringify(output, null, 2),
1948
+ "utf-8"
1949
+ );
1950
+ const historyPath = path.join(outputDir, "blueprint-history.json");
1951
+ const history = loadHistory(historyPath);
1952
+ const updatedHistory = updateHistory(history, entries, (f) => covScore(f.coverage));
1953
+ saveHistory(historyPath, updatedHistory);
1954
+ console.log(`
1955
+ Blueprint generated: ${entries.length} files`);
1956
+ console.log(`
1957
+ Import classification:`);
1958
+ console.log(` total internal : ${totalInternal}`);
1959
+ console.log(` runtime internal : ${totalRuntimeInternal}`);
1960
+ console.log(` type-only internal : ${totalTypeOnlyInternal}`);
1961
+ console.log(`
1962
+ Cycle analysis (runtime-only):`);
1963
+ console.log(` hasCycles : ${analysis.hasCycles}`);
1964
+ console.log(` runtime SCCs : ${cycleGroups.length}`);
1965
+ console.log(` pre-filter SCCs : ${preFilterGroups.length}`);
1966
+ console.log(
1967
+ ` eliminated by type : ${cyclesEliminatedByTypeImportFiltering}`
1968
+ );
1969
+ if (preFilterGroups.length > 0) {
1970
+ console.log(`
1971
+ Pre-filter groups (for reference):`);
1972
+ preFilterGroups.forEach(
1973
+ (g) => console.log(
1974
+ ` ${g.id} (${g.size} files): ${g.paths.join(", ")}`
1975
+ )
1976
+ );
1977
+ }
1978
+ const s = output.summary;
1979
+ console.log(`
1980
+ JSX composition:`);
1981
+ console.log(` tsx files : ${s.tsxFileCount}`);
1982
+ console.log(` with JSX components : ${s.filesWithJsxComponents}`);
1983
+ console.log(` with UI primitives : ${s.filesWithUiPrimitives}`);
1984
+ console.log(` top primitives : ${mostUsedUiPrimitives.slice(0, 5).map((p) => `${p.name}(${p.count})`).join(", ")}`);
1985
+ const es = output.summary;
1986
+ console.log(`
1987
+ Explainability: files=${es.filesWithExplainability} tableMatches=${es.filesWithTableStringMatches} configMatches=${es.filesWithConfigStringMatches}`);
1988
+ console.log(`
1989
+ Config layer : found=${configLayer.found} sections=${configLayer.sectionCount} appId=${configLayer.appId}`);
1990
+ console.log(`Cross-refs : config\u2192code=${configCodeLinkCount} schema\u2192code=${schemaCodeLinkCount}`);
1991
+ console.log(`Schema layer : found=${schemaLayer.found} tables=${schemaLayer.tableCount} fks=${schemaLayer.foreignKeys.length}`);
1992
+ console.log(`
1993
+ Heatmap top 5:`);
1994
+ hottestFiles2.slice(0, 5).forEach(
1995
+ (f) => console.log(` ${f.heatScore.toFixed(1).padStart(5)} ${f.path}`)
1996
+ );
1997
+ console.log(`
1998
+ Category heat:`);
1999
+ categoryHeat.forEach(
2000
+ (c) => console.log(` ${c.averageHeat.toFixed(1).padStart(5)} ${c.category} (${c.fileCount} files)`)
2001
+ );
2002
+ console.log(`
2003
+ Graph: nodes=${nodes.length}, runtime edges=${edges.length}`);
2004
+ console.log(`Markdown docs : ${markdownDocs.length} files`);
2005
+ console.log(`Commits (180d): ${recentCommits.length}`);
2006
+ console.log(`
2007
+ Output \u2192 blueprint-tool/output/blueprint.json`);
2008
+ }
2009
+ var isEntryPoint = process.argv[1] && url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href))) === path.resolve(process.argv[1]);
2010
+ if (isEntryPoint) {
2011
+ main().catch((err) => {
2012
+ console.error("Scanner failed:", err);
2013
+ process.exit(1);
2014
+ });
2015
+ }
2016
+ function docInfo(content) {
2017
+ const lines = content.split("\n");
2018
+ let i = 0;
2019
+ while (i < Math.min(lines.length, 5)) {
2020
+ const t = lines[i].trim();
2021
+ if (t === "" || /^['"]use (client|server)['"]/.test(t)) {
2022
+ i++;
2023
+ } else break;
2024
+ }
2025
+ if (i >= lines.length) return { docSummary: null, docBlock: null };
2026
+ const first = lines[i].trim();
2027
+ if (first.startsWith("/**")) {
2028
+ const block = [];
2029
+ for (let j = i; j < lines.length; j++) {
2030
+ block.push(lines[j]);
2031
+ if (lines[j].includes("*/")) break;
2032
+ }
2033
+ const cleaned = block.join("\n").replace(/^\/\*+/, "").replace(/\*+\/$/, "").split("\n").map((l) => l.replace(/^\s*\*\s?/, "").trim()).filter(Boolean);
2034
+ if (!cleaned.length) return { docSummary: null, docBlock: null };
2035
+ return { docSummary: cleaned.find((l) => !l.startsWith("@")) ?? null, docBlock: cleaned.join("\n") };
2036
+ }
2037
+ if (first.startsWith("//") && !first.startsWith("///")) {
2038
+ const comment = [];
2039
+ for (let j = i; j < lines.length; j++) {
2040
+ const t = lines[j].trim();
2041
+ if (!t.startsWith("//")) break;
2042
+ comment.push(t.replace(/^\/\/\s?/, ""));
2043
+ }
2044
+ if (!comment.length || comment[0].length < 3) return { docSummary: null, docBlock: null };
2045
+ return { docSummary: comment[0], docBlock: comment.join("\n") };
2046
+ }
2047
+ return { docSummary: null, docBlock: null };
2048
+ }
2049
+ function renderEnv(path, useClient, useServer) {
2050
+ if (useClient) return "client";
2051
+ if (useServer) return "server";
2052
+ if (path.startsWith("app/")) return "server";
2053
+ return "shared";
2054
+ }
2055
+ async function readSourceFiles(target, include = blueprintConfig.include, exclude = blueprintConfig.exclude) {
2056
+ const aliases = readTsConfigPaths(target);
2057
+ const paths = await fg__default.default.glob([...include], {
2058
+ ignore: [...exclude],
2059
+ onlyFiles: true,
2060
+ cwd: target
2061
+ });
2062
+ const scopeSet = new Set(paths.map(path.normalize));
2063
+ const entries = [];
2064
+ for (const rel of paths) {
2065
+ const absPath = `${target}/${rel}`;
2066
+ try {
2067
+ const content = fs.readFileSync(absPath, "utf-8");
2068
+ const rawImports = extractImports(content);
2069
+ const usageMap = classifyImports(content);
2070
+ const resolvedImportMap = rawImports.map((spec) => ({
2071
+ ...resolveImport(spec, rel, target, scopeSet, aliases),
2072
+ importUsage: usageMap.get(spec) ?? "runtime"
2073
+ }));
2074
+ const internalImports = [
2075
+ ...new Set(
2076
+ resolvedImportMap.filter((r) => r.kind === "internal" && r.resolvedPath !== null).map((r) => r.resolvedPath)
2077
+ )
2078
+ ];
2079
+ const runtimeInternalImports = [
2080
+ ...new Set(
2081
+ resolvedImportMap.filter((r) => r.kind === "internal" && r.resolvedPath !== null && r.importUsage === "runtime").map((r) => r.resolvedPath)
2082
+ )
2083
+ ];
2084
+ const typeOnlyInternalImports = [
2085
+ ...new Set(
2086
+ resolvedImportMap.filter((r) => r.kind === "internal" && r.resolvedPath !== null && r.importUsage === "type-only").map((r) => r.resolvedPath)
2087
+ )
2088
+ ];
2089
+ const externalImports = [
2090
+ ...new Set(resolvedImportMap.filter((r) => r.kind === "external").map((r) => r.source))
2091
+ ];
2092
+ const { docSummary, docBlock } = docInfo(content);
2093
+ const { hasUseClient, hasUseServer } = detectDirectives(content);
2094
+ const nextFileKind = getNextFileKind(rel);
2095
+ const { jsxComponents, uiPrimitives, componentUsageCount, topLevelJsxBlocks } = extractJsxInfo(content, rel);
2096
+ const stateComplexity = extractStateComplexity(content, rel);
2097
+ entries.push({
2098
+ id: makeId(rel),
2099
+ path: rel,
2100
+ category: getCategory(rel),
2101
+ loc: content.split("\n").length,
2102
+ imports: rawImports,
2103
+ exports: extractExports(content),
2104
+ hasJsDoc: detectJsDoc(content),
2105
+ docSummary,
2106
+ docBlock,
2107
+ renderEnvironment: renderEnv(rel, hasUseClient, hasUseServer),
2108
+ nextFileKind,
2109
+ routePath: deriveRoutePath(rel),
2110
+ hasUseClientDirective: hasUseClient,
2111
+ hasUseServerDirective: hasUseServer,
2112
+ isApiRoute: rel.startsWith("app/") && nextFileKind === "route",
2113
+ isCyclic: false,
2114
+ cycleGroupId: null,
2115
+ jsxComponents,
2116
+ uiPrimitives,
2117
+ componentUsageCount,
2118
+ topLevelJsxBlocks,
2119
+ metrics: {
2120
+ loc: content.split("\n").length,
2121
+ incomingRuntimeDeps: 0,
2122
+ outgoingRuntimeDeps: runtimeInternalImports.length,
2123
+ jsxComponentCount: jsxComponents.length,
2124
+ uiPrimitiveCount: uiPrimitives.length,
2125
+ complexityScore: null,
2126
+ duplicationScore: null,
2127
+ heatScore: 0
2128
+ },
2129
+ stateComplexity,
2130
+ controlInventory: null,
2131
+ screenInfo: null,
2132
+ explainability: {
2133
+ primaryDocBlock: docBlock,
2134
+ docBlocks: [],
2135
+ symbolSummaries: [],
2136
+ codeSnippets: [],
2137
+ matchedConfigIdsInCode: [],
2138
+ matchedTableNamesInCode: []
2139
+ },
2140
+ coverage: null,
2141
+ jsdocTags: extractJsdocTags(content),
2142
+ relatedConfigIds: [],
2143
+ relatedTableNames: [],
2144
+ internalImports,
2145
+ externalImports,
2146
+ runtimeInternalImports,
2147
+ typeOnlyInternalImports,
2148
+ incomingInternalDependencies: [],
2149
+ outgoingInternalDependencies: internalImports,
2150
+ resolvedImportMap
2151
+ });
2152
+ } catch {
2153
+ }
2154
+ }
2155
+ const incomingMap = new Map(entries.map((e) => [e.path, []]));
2156
+ for (const e of entries) {
2157
+ for (const p of e.internalImports) {
2158
+ const arr = incomingMap.get(p);
2159
+ if (arr && !arr.includes(e.path)) arr.push(e.path);
2160
+ }
2161
+ }
2162
+ for (const e of entries) {
2163
+ e.incomingInternalDependencies = incomingMap.get(e.path) ?? [];
2164
+ e.metrics.incomingRuntimeDeps = e.incomingInternalDependencies.length;
2165
+ }
2166
+ const runtimeIncoming = new Map(entries.map((e) => [e.path, 0]));
2167
+ for (const e of entries) {
2168
+ for (const p of e.runtimeInternalImports) {
2169
+ runtimeIncoming.set(p, (runtimeIncoming.get(p) ?? 0) + 1);
2170
+ }
2171
+ }
2172
+ const maxLoc = Math.max(...entries.map((e) => e.loc), 1);
2173
+ const maxInc = Math.max(...entries.map((e) => runtimeIncoming.get(e.path) ?? 0), 1);
2174
+ const maxOut = Math.max(...entries.map((e) => e.runtimeInternalImports.length), 1);
2175
+ const maxJsx = Math.max(...entries.map((e) => e.jsxComponents.length), 1);
2176
+ const maxUi = Math.max(...entries.map((e) => e.uiPrimitives.length), 1);
2177
+ for (const e of entries) {
2178
+ const inc = runtimeIncoming.get(e.path) ?? 0;
2179
+ const raw = 0.25 * (e.loc / maxLoc) + 0.35 * (inc / maxInc) + 0.15 * (e.runtimeInternalImports.length / maxOut) + 0.15 * (e.jsxComponents.length / maxJsx) + 0.1 * (e.uiPrimitives.length / maxUi);
2180
+ e.metrics = { ...e.metrics, incomingRuntimeDeps: inc, heatScore: Math.round(raw * 1e3) / 10 };
2181
+ }
2182
+ return entries;
2183
+ }
2184
+ function extractEdges(files) {
2185
+ const idByPath = new Map(files.map((f) => [f.path, f.id]));
2186
+ const edgeSet = /* @__PURE__ */ new Set();
2187
+ const edges = [];
2188
+ for (const f of files) {
2189
+ for (const dep of f.runtimeInternalImports) {
2190
+ const targetId = idByPath.get(dep);
2191
+ if (!targetId) continue;
2192
+ const key = `${f.id}:${targetId}`;
2193
+ if (!edgeSet.has(key)) {
2194
+ edgeSet.add(key);
2195
+ edges.push({ source: f.id, target: targetId, type: "import" });
2196
+ }
2197
+ }
2198
+ }
2199
+ return edges;
2200
+ }
2201
+ function buildGraph(files, edges) {
2202
+ const nodes = files.map((f) => ({
2203
+ id: f.id,
2204
+ path: f.path,
2205
+ category: f.category,
2206
+ loc: f.loc,
2207
+ hasJsDoc: f.hasJsDoc,
2208
+ label: path.basename(f.path)
2209
+ }));
2210
+ const allAdj = new Map(files.map((f) => [f.path, f.internalImports]));
2211
+ const preGroups = extractCycleGroups(tarjanSCC(allAdj), allAdj);
2212
+ const rtAdj = new Map(files.map((f) => [f.path, f.runtimeInternalImports]));
2213
+ const cycleGroups = extractCycleGroups(tarjanSCC(rtAdj), rtAdj);
2214
+ const eliminated = preGroups.length - cycleGroups.length;
2215
+ const pathToCycleId = /* @__PURE__ */ new Map();
2216
+ for (const g of cycleGroups) {
2217
+ for (const p of g.paths) pathToCycleId.set(p, g.id);
2218
+ }
2219
+ for (const f of files) {
2220
+ f.isCyclic = pathToCycleId.has(f.path);
2221
+ f.cycleGroupId = pathToCycleId.get(f.path) ?? null;
2222
+ }
2223
+ const filesInCycles = [...pathToCycleId.keys()].sort();
2224
+ const analysis = {
2225
+ hasCycles: cycleGroups.length > 0,
2226
+ cycleCount: cycleGroups.length,
2227
+ stronglyConnectedComponents: cycleGroups,
2228
+ filesInCycles,
2229
+ cyclesEliminatedByTypeImportFiltering: eliminated
2230
+ };
2231
+ return { files, nodes, edges, analysis };
2232
+ }
2233
+ var COVERAGE_FILE = "coverage/coverage-summary.json";
2234
+ function readCoverageData(target) {
2235
+ const coveragePath = path.join(target, COVERAGE_FILE);
2236
+ if (!fs.existsSync(coveragePath)) return /* @__PURE__ */ new Map();
2237
+ try {
2238
+ const raw = JSON.parse(fs.readFileSync(coveragePath, "utf-8"));
2239
+ return parseCoverageSummary(raw, target);
2240
+ } catch {
2241
+ return /* @__PURE__ */ new Map();
2242
+ }
2243
+ }
2244
+ function mergeWithGraph(graph, coverage) {
2245
+ const annotated = graph.files.map((f) => ({
2246
+ ...f,
2247
+ coverage: lookupCoverage(coverage, f.path)
2248
+ }));
2249
+ return { ...graph, files: annotated };
2250
+ }
2251
+
2252
+ // src/blueprint/generate.ts
2253
+ var DEFAULT_OUTPUT = "output/blueprint.json";
2254
+ async function generateBlueprint(target, opts = {}) {
2255
+ const include = opts.include ?? [...blueprintConfig.include];
2256
+ const exclude = opts.exclude ?? [...blueprintConfig.exclude];
2257
+ const prevCwd = process.cwd();
2258
+ process.chdir(target);
2259
+ let files;
2260
+ try {
2261
+ files = await readSourceFiles(target, include, exclude);
2262
+ } finally {
2263
+ process.chdir(prevCwd);
2264
+ }
2265
+ const coverage = readCoverageData(target);
2266
+ const edges = extractEdges(files);
2267
+ let graph = buildGraph(files, edges);
2268
+ graph = mergeWithGraph(graph, coverage);
2269
+ const { files: enrichedFiles, nodes, edges: graphEdges, analysis } = graph;
2270
+ process.chdir(target);
2271
+ let configLayer, schemaLayer, markdownDocs, recentCommits;
2272
+ try {
2273
+ configLayer = parseConfigLayer(target);
2274
+ schemaLayer = parseSchemaLayer(target);
2275
+ markdownDocs = collectMarkdownDocs(target);
2276
+ recentCommits = collectRecentCommits(target);
2277
+ } finally {
2278
+ process.chdir(prevCwd);
2279
+ }
2280
+ const fileCommitStatsMap = buildFileCommitStats(recentCommits, /* @__PURE__ */ new Date());
2281
+ for (const f of enrichedFiles) {
2282
+ f.commitStats = fileCommitStatsMap.get(f.path) ?? void 0;
2283
+ }
2284
+ configLayer.sections.map((s) => s.id);
2285
+ schemaLayer.tables.map((t) => t.name);
2286
+ const configToCode = buildConfigToCode(configLayer, enrichedFiles);
2287
+ const schemaToCode = buildSchemaToCode(schemaLayer, enrichedFiles);
2288
+ for (const link of configToCode) {
2289
+ for (const m of link.matchedFiles) {
2290
+ const f = enrichedFiles.find((e) => e.path === m.path);
2291
+ if (f && !f.relatedConfigIds.includes(link.configId)) f.relatedConfigIds.push(link.configId);
2292
+ }
2293
+ }
2294
+ for (const link of schemaToCode) {
2295
+ for (const m of link.matchedFiles) {
2296
+ const f = enrichedFiles.find((e) => e.path === m.path);
2297
+ if (f && !f.relatedTableNames.includes(link.tableName)) f.relatedTableNames.push(link.tableName);
2298
+ }
2299
+ }
2300
+ const hottestFiles2 = [...enrichedFiles].sort((a, b) => b.metrics.heatScore - a.metrics.heatScore).slice(0, 15).map((e) => ({ path: e.path, heatScore: e.metrics.heatScore }));
2301
+ const catGroups = /* @__PURE__ */ new Map();
2302
+ for (const f of enrichedFiles) {
2303
+ const arr = catGroups.get(f.category) ?? [];
2304
+ arr.push(f.metrics.heatScore);
2305
+ catGroups.set(f.category, arr);
2306
+ }
2307
+ const categoryHeat = [...catGroups.entries()].map(([category, scores]) => ({
2308
+ category,
2309
+ averageHeat: Math.round(scores.reduce((a, b) => a + b, 0) / scores.length * 10) / 10,
2310
+ fileCount: scores.length
2311
+ })).sort((a, b) => b.averageHeat - a.averageHeat);
2312
+ const totalInternal = enrichedFiles.reduce((s, f) => s + f.internalImports.length, 0);
2313
+ const totalExternal = enrichedFiles.reduce((s, f) => s + f.externalImports.length, 0);
2314
+ const totalRuntime = enrichedFiles.reduce((s, f) => s + f.runtimeInternalImports.length, 0);
2315
+ const totalTypeOnly = enrichedFiles.reduce((s, f) => s + f.typeOnlyInternalImports.length, 0);
2316
+ const importCounts = /* @__PURE__ */ new Map();
2317
+ for (const f of enrichedFiles) {
2318
+ for (const p of f.runtimeInternalImports) importCounts.set(p, (importCounts.get(p) ?? 0) + 1);
2319
+ }
2320
+ const mostImportedFiles = [...importCounts.entries()].sort((a, b) => b[1] - a[1]).slice(0, 5).map(([path, count]) => ({ path, count }));
2321
+ const primCount = /* @__PURE__ */ new Map();
2322
+ for (const f of enrichedFiles) {
2323
+ for (const p of f.uiPrimitives) primCount.set(p, (primCount.get(p) ?? 0) + 1);
2324
+ }
2325
+ const mostUsedUiPrimitives = [...primCount.entries()].sort((a, b) => b[1] - a[1]).map(([name, count]) => ({ name, count }));
2326
+ const routesDiscovered = [
2327
+ ...new Set(
2328
+ enrichedFiles.filter((f) => f.routePath !== null && (f.nextFileKind === "page" || f.nextFileKind === "route")).map((f) => f.routePath)
2329
+ )
2330
+ ].sort();
2331
+ const filesInCycles = analysis.filesInCycles;
2332
+ const largestCycleSize = analysis.stronglyConnectedComponents[0]?.size ?? 0;
2333
+ const configCodeLinkCount = configToCode.reduce((s, c) => s + c.matchedFiles.length, 0);
2334
+ const schemaCodeLinkCount = schemaToCode.reduce((s, c) => s + c.matchedFiles.length, 0);
2335
+ const output = {
2336
+ generatedAt: (/* @__PURE__ */ new Date()).toISOString(),
2337
+ summary: {
2338
+ fileCount: enrichedFiles.length,
2339
+ pageCount: enrichedFiles.filter((f) => f.category === "app").length,
2340
+ componentCount: enrichedFiles.filter((f) => f.category === "component").length,
2341
+ libCount: enrichedFiles.filter((f) => f.category === "lib").length,
2342
+ hookCount: enrichedFiles.filter((f) => f.category === "hook").length,
2343
+ internalDependencyCount: totalInternal,
2344
+ externalDependencyCount: totalExternal,
2345
+ runtimeInternalDependencyCount: totalRuntime,
2346
+ typeOnlyInternalDependencyCount: totalTypeOnly,
2347
+ nodeCount: nodes.length,
2348
+ edgeCount: graphEdges.length,
2349
+ mostImportedFiles,
2350
+ clientFileCount: enrichedFiles.filter((f) => f.renderEnvironment === "client").length,
2351
+ serverFileCount: enrichedFiles.filter((f) => f.renderEnvironment === "server").length,
2352
+ pageFileCount: enrichedFiles.filter((f) => f.nextFileKind === "page").length,
2353
+ routeFileCount: enrichedFiles.filter((f) => f.nextFileKind === "route").length,
2354
+ routesDiscovered,
2355
+ cyclicFileCount: filesInCycles.length,
2356
+ stronglyConnectedComponentCount: analysis.cycleCount,
2357
+ largestCycleSize,
2358
+ tsxFileCount: enrichedFiles.filter((f) => f.path.endsWith(".tsx")).length,
2359
+ filesWithJsxComponents: enrichedFiles.filter((f) => f.jsxComponents.length > 0).length,
2360
+ filesWithUiPrimitives: enrichedFiles.filter((f) => f.uiPrimitives.length > 0).length,
2361
+ mostUsedUiPrimitives,
2362
+ configSectionCount: configLayer.sectionCount,
2363
+ sqlTableCount: schemaLayer.tableCount,
2364
+ sqlForeignKeyCount: schemaLayer.foreignKeys.length,
2365
+ configCodeLinkCount,
2366
+ schemaCodeLinkCount,
2367
+ filesWithExplainability: enrichedFiles.length,
2368
+ filesWithTableStringMatches: enrichedFiles.filter((f) => f.relatedTableNames.length > 0).length,
2369
+ filesWithConfigStringMatches: enrichedFiles.filter((f) => f.relatedConfigIds.length > 0).length,
2370
+ filesWithStateComplexity: enrichedFiles.filter((f) => f.stateComplexity !== null).length,
2371
+ topStateHeavyFiles: enrichedFiles.filter((f) => f.stateComplexity !== null).sort((a, b) => b.stateComplexity.hookCounts.total - a.stateComplexity.hookCounts.total).slice(0, 5).map((f) => ({ path: f.path, totalHooks: f.stateComplexity.hookCounts.total }))
2372
+ },
2373
+ analysis,
2374
+ heatmap: { hottestFiles: hottestFiles2, categoryHeat },
2375
+ configLayer,
2376
+ schemaLayer,
2377
+ crossReferences: { configToCode, schemaToCode },
2378
+ nodes,
2379
+ edges: graphEdges,
2380
+ files: enrichedFiles,
2381
+ markdownDocs,
2382
+ recentCommits
2383
+ };
2384
+ if (opts.write) {
2385
+ const outPath = path.join(target, opts.outputPath ?? DEFAULT_OUTPUT);
2386
+ const dir = path.dirname(outPath);
2387
+ if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
2388
+ fs.writeFileSync(outPath, JSON.stringify(output, null, 2), "utf-8");
2389
+ }
2390
+ return output;
2391
+ }
2392
+ function readBlueprint(target, outputPath = DEFAULT_OUTPUT) {
2393
+ const fullPath = path.join(target, outputPath);
2394
+ if (!fs.existsSync(fullPath)) return null;
2395
+ try {
2396
+ return JSON.parse(fs.readFileSync(fullPath, "utf-8"));
2397
+ } catch {
2398
+ return null;
2399
+ }
2400
+ }
2401
+
2402
+ // src/blueprint/stats.ts
2403
+ function aggregateStats(blueprint) {
2404
+ const { summary, files, heatmap } = blueprint;
2405
+ const tableMatches = blueprint.crossReferences.schemaToCode.reduce(
2406
+ (n, link) => n + link.matchedFiles.length,
2407
+ 0
2408
+ );
2409
+ const configMatches = blueprint.crossReferences.configToCode.reduce(
2410
+ (n, link) => n + link.matchedFiles.length,
2411
+ 0
2412
+ );
2413
+ const coverageFileCount = files.filter((f) => f.coverage !== null).length;
2414
+ const hottestFile = heatmap.hottestFiles[0] ?? null;
2415
+ return {
2416
+ totalFiles: summary.fileCount,
2417
+ runtimeEdges: summary.runtimeInternalDependencyCount,
2418
+ tsxFiles: summary.tsxFileCount,
2419
+ appRoutes: summary.routeFileCount,
2420
+ configSections: summary.configSectionCount,
2421
+ sqlTables: summary.sqlTableCount,
2422
+ tableMatches,
2423
+ configMatches,
2424
+ cyclicFiles: summary.cyclicFileCount,
2425
+ coverageFileCount,
2426
+ hottestFile
2427
+ };
2428
+ }
2429
+
2430
+ // src/blueprint/heat.ts
2431
+ function calculateHeatScore(file) {
2432
+ return file.metrics.heatScore;
2433
+ }
2434
+ function heatPerCategory(files) {
2435
+ const groups = /* @__PURE__ */ new Map();
2436
+ for (const f of files) {
2437
+ const arr = groups.get(f.category) ?? [];
2438
+ arr.push(f.metrics.heatScore);
2439
+ groups.set(f.category, arr);
2440
+ }
2441
+ return [...groups.entries()].map(([category, scores]) => ({
2442
+ category,
2443
+ averageHeat: Math.round(scores.reduce((a, b) => a + b, 0) / scores.length * 10) / 10,
2444
+ fileCount: scores.length
2445
+ })).sort((a, b) => b.averageHeat - a.averageHeat);
2446
+ }
2447
+ function heatColor(score) {
2448
+ if (score >= 50) return "#ef4444";
2449
+ if (score >= 30) return "#f97316";
2450
+ if (score >= 15) return "#eab308";
2451
+ if (score >= 5) return "#3b82f6";
2452
+ return "#475569";
2453
+ }
2454
+ var heatGradient = [
2455
+ { threshold: 0, color: "#475569", label: "Cold" },
2456
+ { threshold: 5, color: "#3b82f6", label: "Low" },
2457
+ { threshold: 15, color: "#eab308", label: "Warm" },
2458
+ { threshold: 30, color: "#f97316", label: "Hot" },
2459
+ { threshold: 50, color: "#ef4444", label: "Critical" }
2460
+ ];
2461
+ function hottestFiles(files, limit = 15) {
2462
+ return [...files].sort((a, b) => b.metrics.heatScore - a.metrics.heatScore).slice(0, limit).map((f) => ({ path: f.path, heatScore: f.metrics.heatScore }));
2463
+ }
2464
+
2465
+ // src/blueprint/classify.ts
2466
+ function classifyFile(filePath, _content) {
2467
+ return getCategory(filePath);
2468
+ }
2469
+ function filterByCategory(files, categories) {
2470
+ if (categories.length === 0) return files;
2471
+ const set = new Set(categories);
2472
+ return files.filter((f) => set.has(f.category));
2473
+ }
2474
+ var DEFAULT_INCLUDE = [
2475
+ "app/**/*.{ts,tsx}",
2476
+ "components/**/*.{ts,tsx}",
2477
+ "lib/**/*.{ts,tsx}",
2478
+ "hooks/**/*.{ts,tsx}"
2479
+ ];
2480
+ var DEFAULT_EXCLUDE = [
2481
+ "**/node_modules/**",
2482
+ "**/.next/**",
2483
+ "**/dist/**",
2484
+ "**/coverage/**",
2485
+ "**/__tests__/**",
2486
+ "**/*.test.ts",
2487
+ "**/*.test.tsx"
2488
+ ];
2489
+ function hasSourceChanged(target, lastScanTime, include = DEFAULT_INCLUDE, exclude = DEFAULT_EXCLUDE) {
2490
+ const limitMs = lastScanTime.getTime();
2491
+ const files = fg__default.default.sync(include, { ignore: exclude, cwd: target, onlyFiles: true });
2492
+ for (const rel of files) {
2493
+ const abs = `${target}/${rel}`;
2494
+ try {
2495
+ if (fs.statSync(abs).mtimeMs > limitMs) return true;
2496
+ } catch {
2497
+ }
2498
+ }
2499
+ return false;
2500
+ }
2501
+ function getSourceChangeSummary(target, lastScanTime, knownPaths = /* @__PURE__ */ new Set(), include = DEFAULT_INCLUDE, exclude = DEFAULT_EXCLUDE) {
2502
+ const limitMs = lastScanTime.getTime();
2503
+ const files = fg__default.default.sync(include, { ignore: exclude, cwd: target, onlyFiles: true });
2504
+ const changedFiles = [];
2505
+ const addedFiles = [];
2506
+ for (const rel of files) {
2507
+ const norm = path.normalize(rel);
2508
+ const abs = `${target}/${rel}`;
2509
+ const isKnown = knownPaths.has(norm);
2510
+ try {
2511
+ const mtime = fs.statSync(abs).mtimeMs;
2512
+ if (!isKnown) {
2513
+ addedFiles.push(norm);
2514
+ } else if (mtime > limitMs) {
2515
+ changedFiles.push(norm);
2516
+ }
2517
+ } catch {
2518
+ }
2519
+ }
2520
+ return {
2521
+ changedFiles,
2522
+ addedFiles,
2523
+ total: changedFiles.length + addedFiles.length,
2524
+ lastScanAt: lastScanTime.toISOString()
2525
+ };
2526
+ }
2527
+
2528
+ exports.aggregateStats = aggregateStats;
2529
+ exports.buildGraph = buildGraph;
2530
+ exports.calculateHeatScore = calculateHeatScore;
2531
+ exports.classifyFile = classifyFile;
2532
+ exports.extractEdges = extractEdges;
2533
+ exports.filterByCategory = filterByCategory;
2534
+ exports.generateBlueprint = generateBlueprint;
2535
+ exports.getSourceChangeSummary = getSourceChangeSummary;
2536
+ exports.hasSourceChanged = hasSourceChanged;
2537
+ exports.heatColor = heatColor;
2538
+ exports.heatGradient = heatGradient;
2539
+ exports.heatPerCategory = heatPerCategory;
2540
+ exports.hottestFiles = hottestFiles;
2541
+ exports.mergeWithGraph = mergeWithGraph;
2542
+ exports.readBlueprint = readBlueprint;
2543
+ exports.readCoverageData = readCoverageData;
2544
+ exports.readSourceFiles = readSourceFiles;