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