@reftrixmcp/mcp-server 0.1.7

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 (1614) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +1099 -0
  3. package/dist/api/health.d.ts +122 -0
  4. package/dist/api/health.d.ts.map +1 -0
  5. package/dist/api/health.js +267 -0
  6. package/dist/api/health.js.map +1 -0
  7. package/dist/config/index.d.ts +9 -0
  8. package/dist/config/index.d.ts.map +1 -0
  9. package/dist/config/index.js +27 -0
  10. package/dist/config/index.js.map +1 -0
  11. package/dist/config/redis.d.ts +99 -0
  12. package/dist/config/redis.d.ts.map +1 -0
  13. package/dist/config/redis.js +234 -0
  14. package/dist/config/redis.js.map +1 -0
  15. package/dist/index.d.ts +18 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +247 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/lib/index.d.ts +6 -0
  20. package/dist/lib/index.d.ts.map +1 -0
  21. package/dist/lib/index.js +14 -0
  22. package/dist/lib/index.js.map +1 -0
  23. package/dist/lib/project-context.d.ts +51 -0
  24. package/dist/lib/project-context.d.ts.map +1 -0
  25. package/dist/lib/project-context.js +109 -0
  26. package/dist/lib/project-context.js.map +1 -0
  27. package/dist/middleware/args-type-coercion.d.ts +59 -0
  28. package/dist/middleware/args-type-coercion.d.ts.map +1 -0
  29. package/dist/middleware/args-type-coercion.js +187 -0
  30. package/dist/middleware/args-type-coercion.js.map +1 -0
  31. package/dist/middleware/auth.d.ts +122 -0
  32. package/dist/middleware/auth.d.ts.map +1 -0
  33. package/dist/middleware/auth.js +430 -0
  34. package/dist/middleware/auth.js.map +1 -0
  35. package/dist/middleware/index.d.ts +10 -0
  36. package/dist/middleware/index.d.ts.map +1 -0
  37. package/dist/middleware/index.js +38 -0
  38. package/dist/middleware/index.js.map +1 -0
  39. package/dist/middleware/light-response-controller.d.ts +206 -0
  40. package/dist/middleware/light-response-controller.d.ts.map +1 -0
  41. package/dist/middleware/light-response-controller.js +555 -0
  42. package/dist/middleware/light-response-controller.js.map +1 -0
  43. package/dist/middleware/response-size-warning.d.ts +97 -0
  44. package/dist/middleware/response-size-warning.d.ts.map +1 -0
  45. package/dist/middleware/response-size-warning.js +137 -0
  46. package/dist/middleware/response-size-warning.js.map +1 -0
  47. package/dist/queues/batch-quality-queue.d.ts +225 -0
  48. package/dist/queues/batch-quality-queue.d.ts.map +1 -0
  49. package/dist/queues/batch-quality-queue.js +375 -0
  50. package/dist/queues/batch-quality-queue.js.map +1 -0
  51. package/dist/queues/index.d.ts +10 -0
  52. package/dist/queues/index.d.ts.map +1 -0
  53. package/dist/queues/index.js +28 -0
  54. package/dist/queues/index.js.map +1 -0
  55. package/dist/queues/page-analyze-queue.d.ts +287 -0
  56. package/dist/queues/page-analyze-queue.d.ts.map +1 -0
  57. package/dist/queues/page-analyze-queue.js +219 -0
  58. package/dist/queues/page-analyze-queue.js.map +1 -0
  59. package/dist/router.d.ts +144 -0
  60. package/dist/router.d.ts.map +1 -0
  61. package/dist/router.js +261 -0
  62. package/dist/router.js.map +1 -0
  63. package/dist/schemas/creative/index.d.ts +8 -0
  64. package/dist/schemas/creative/index.d.ts.map +1 -0
  65. package/dist/schemas/creative/index.js +23 -0
  66. package/dist/schemas/creative/index.js.map +1 -0
  67. package/dist/schemas/creative/palette.schema.d.ts +741 -0
  68. package/dist/schemas/creative/palette.schema.d.ts.map +1 -0
  69. package/dist/schemas/creative/palette.schema.js +154 -0
  70. package/dist/schemas/creative/palette.schema.js.map +1 -0
  71. package/dist/schemas/mood-brandtone-filters.d.ts +740 -0
  72. package/dist/schemas/mood-brandtone-filters.d.ts.map +1 -0
  73. package/dist/schemas/mood-brandtone-filters.js +265 -0
  74. package/dist/schemas/mood-brandtone-filters.js.map +1 -0
  75. package/dist/scripts/backfill-embeddings.d.ts +3 -0
  76. package/dist/scripts/backfill-embeddings.d.ts.map +1 -0
  77. package/dist/scripts/backfill-embeddings.js +385 -0
  78. package/dist/scripts/backfill-embeddings.js.map +1 -0
  79. package/dist/scripts/check-embedding-coverage.d.ts +3 -0
  80. package/dist/scripts/check-embedding-coverage.d.ts.map +1 -0
  81. package/dist/scripts/check-embedding-coverage.js +103 -0
  82. package/dist/scripts/check-embedding-coverage.js.map +1 -0
  83. package/dist/scripts/start-workers.d.ts +3 -0
  84. package/dist/scripts/start-workers.d.ts.map +1 -0
  85. package/dist/scripts/start-workers.js +447 -0
  86. package/dist/scripts/start-workers.js.map +1 -0
  87. package/dist/server.d.ts +49 -0
  88. package/dist/server.d.ts.map +1 -0
  89. package/dist/server.js +237 -0
  90. package/dist/server.js.map +1 -0
  91. package/dist/services/background/background-design-db.service.d.ts +65 -0
  92. package/dist/services/background/background-design-db.service.d.ts.map +1 -0
  93. package/dist/services/background/background-design-db.service.js +138 -0
  94. package/dist/services/background/background-design-db.service.js.map +1 -0
  95. package/dist/services/background/background-design-detector.service.d.ts +125 -0
  96. package/dist/services/background/background-design-detector.service.d.ts.map +1 -0
  97. package/dist/services/background/background-design-detector.service.js +1106 -0
  98. package/dist/services/background/background-design-detector.service.js.map +1 -0
  99. package/dist/services/background/background-design-embedding.service.d.ts +188 -0
  100. package/dist/services/background/background-design-embedding.service.d.ts.map +1 -0
  101. package/dist/services/background/background-design-embedding.service.js +386 -0
  102. package/dist/services/background/background-design-embedding.service.js.map +1 -0
  103. package/dist/services/background-search.service.d.ts +43 -0
  104. package/dist/services/background-search.service.d.ts.map +1 -0
  105. package/dist/services/background-search.service.js +235 -0
  106. package/dist/services/background-search.service.js.map +1 -0
  107. package/dist/services/backup-service.d.ts +135 -0
  108. package/dist/services/backup-service.d.ts.map +1 -0
  109. package/dist/services/backup-service.js +357 -0
  110. package/dist/services/backup-service.js.map +1 -0
  111. package/dist/services/brief/brief-parser-service.d.ts +47 -0
  112. package/dist/services/brief/brief-parser-service.d.ts.map +1 -0
  113. package/dist/services/brief/brief-parser-service.js +380 -0
  114. package/dist/services/brief/brief-parser-service.js.map +1 -0
  115. package/dist/services/brief/schemas/brief-parser-schemas.d.ts +278 -0
  116. package/dist/services/brief/schemas/brief-parser-schemas.d.ts.map +1 -0
  117. package/dist/services/brief/schemas/brief-parser-schemas.js +116 -0
  118. package/dist/services/brief/schemas/brief-parser-schemas.js.map +1 -0
  119. package/dist/services/browser-process-manager.d.ts +116 -0
  120. package/dist/services/browser-process-manager.d.ts.map +1 -0
  121. package/dist/services/browser-process-manager.js +259 -0
  122. package/dist/services/browser-process-manager.js.map +1 -0
  123. package/dist/services/cache.d.ts +119 -0
  124. package/dist/services/cache.d.ts.map +1 -0
  125. package/dist/services/cache.js +233 -0
  126. package/dist/services/cache.js.map +1 -0
  127. package/dist/services/checksum-service.d.ts +122 -0
  128. package/dist/services/checksum-service.d.ts.map +1 -0
  129. package/dist/services/checksum-service.js +270 -0
  130. package/dist/services/checksum-service.js.map +1 -0
  131. package/dist/services/css-analysis-cache.service.d.ts +248 -0
  132. package/dist/services/css-analysis-cache.service.d.ts.map +1 -0
  133. package/dist/services/css-analysis-cache.service.js +398 -0
  134. package/dist/services/css-analysis-cache.service.js.map +1 -0
  135. package/dist/services/database-dumper.service.d.ts +181 -0
  136. package/dist/services/database-dumper.service.d.ts.map +1 -0
  137. package/dist/services/database-dumper.service.js +550 -0
  138. package/dist/services/database-dumper.service.js.map +1 -0
  139. package/dist/services/embedding-backfill.service.d.ts +53 -0
  140. package/dist/services/embedding-backfill.service.d.ts.map +1 -0
  141. package/dist/services/embedding-backfill.service.js +672 -0
  142. package/dist/services/embedding-backfill.service.js.map +1 -0
  143. package/dist/services/embedding-validation.service.d.ts +64 -0
  144. package/dist/services/embedding-validation.service.d.ts.map +1 -0
  145. package/dist/services/embedding-validation.service.js +141 -0
  146. package/dist/services/embedding-validation.service.js.map +1 -0
  147. package/dist/services/encryption-service.d.ts +171 -0
  148. package/dist/services/encryption-service.d.ts.map +1 -0
  149. package/dist/services/encryption-service.js +343 -0
  150. package/dist/services/encryption-service.js.map +1 -0
  151. package/dist/services/external-css-fetcher.d.ts +185 -0
  152. package/dist/services/external-css-fetcher.d.ts.map +1 -0
  153. package/dist/services/external-css-fetcher.js +667 -0
  154. package/dist/services/external-css-fetcher.js.map +1 -0
  155. package/dist/services/gpu-resource-manager.d.ts +180 -0
  156. package/dist/services/gpu-resource-manager.d.ts.map +1 -0
  157. package/dist/services/gpu-resource-manager.js +485 -0
  158. package/dist/services/gpu-resource-manager.js.map +1 -0
  159. package/dist/services/index.d.ts +15 -0
  160. package/dist/services/index.d.ts.map +1 -0
  161. package/dist/services/index.js +73 -0
  162. package/dist/services/index.js.map +1 -0
  163. package/dist/services/layout/component-splitter.d.ts +63 -0
  164. package/dist/services/layout/component-splitter.d.ts.map +1 -0
  165. package/dist/services/layout/component-splitter.js +508 -0
  166. package/dist/services/layout/component-splitter.js.map +1 -0
  167. package/dist/services/layout/html-to-jsx-converter.d.ts +40 -0
  168. package/dist/services/layout/html-to-jsx-converter.d.ts.map +1 -0
  169. package/dist/services/layout/html-to-jsx-converter.js +484 -0
  170. package/dist/services/layout/html-to-jsx-converter.js.map +1 -0
  171. package/dist/services/layout/semantic-html-converter.d.ts +67 -0
  172. package/dist/services/layout/semantic-html-converter.d.ts.map +1 -0
  173. package/dist/services/layout/semantic-html-converter.js +247 -0
  174. package/dist/services/layout/semantic-html-converter.js.map +1 -0
  175. package/dist/services/layout/style-to-tailwind-mapper.d.ts +82 -0
  176. package/dist/services/layout/style-to-tailwind-mapper.d.ts.map +1 -0
  177. package/dist/services/layout/style-to-tailwind-mapper.js +1334 -0
  178. package/dist/services/layout/style-to-tailwind-mapper.js.map +1 -0
  179. package/dist/services/layout-embedding.service.d.ts +415 -0
  180. package/dist/services/layout-embedding.service.d.ts.map +1 -0
  181. package/dist/services/layout-embedding.service.js +1147 -0
  182. package/dist/services/layout-embedding.service.js.map +1 -0
  183. package/dist/services/layout-generate-code-service-export.d.ts +38 -0
  184. package/dist/services/layout-generate-code-service-export.d.ts.map +1 -0
  185. package/dist/services/layout-generate-code-service-export.js +77 -0
  186. package/dist/services/layout-generate-code-service-export.js.map +1 -0
  187. package/dist/services/layout-search-service-export.d.ts +31 -0
  188. package/dist/services/layout-search-service-export.d.ts.map +1 -0
  189. package/dist/services/layout-search-service-export.js +43 -0
  190. package/dist/services/layout-search-service-export.js.map +1 -0
  191. package/dist/services/layout-search.service.d.ts +111 -0
  192. package/dist/services/layout-search.service.d.ts.map +1 -0
  193. package/dist/services/layout-search.service.js +716 -0
  194. package/dist/services/layout-search.service.js.map +1 -0
  195. package/dist/services/layout-to-code.service.d.ts +85 -0
  196. package/dist/services/layout-to-code.service.d.ts.map +1 -0
  197. package/dist/services/layout-to-code.service.js +1368 -0
  198. package/dist/services/layout-to-code.service.js.map +1 -0
  199. package/dist/services/metrics-collector.d.ts +189 -0
  200. package/dist/services/metrics-collector.d.ts.map +1 -0
  201. package/dist/services/metrics-collector.js +344 -0
  202. package/dist/services/metrics-collector.js.map +1 -0
  203. package/dist/services/ml/mood-brandtone-embedding.service.d.ts +253 -0
  204. package/dist/services/ml/mood-brandtone-embedding.service.d.ts.map +1 -0
  205. package/dist/services/ml/mood-brandtone-embedding.service.js +678 -0
  206. package/dist/services/ml/mood-brandtone-embedding.service.js.map +1 -0
  207. package/dist/services/motion/analyzers/color-change.analyzer.d.ts +274 -0
  208. package/dist/services/motion/analyzers/color-change.analyzer.d.ts.map +1 -0
  209. package/dist/services/motion/analyzers/color-change.analyzer.js +644 -0
  210. package/dist/services/motion/analyzers/color-change.analyzer.js.map +1 -0
  211. package/dist/services/motion/analyzers/frame-diff.analyzer.d.ts +109 -0
  212. package/dist/services/motion/analyzers/frame-diff.analyzer.d.ts.map +1 -0
  213. package/dist/services/motion/analyzers/frame-diff.analyzer.js +315 -0
  214. package/dist/services/motion/analyzers/frame-diff.analyzer.js.map +1 -0
  215. package/dist/services/motion/analyzers/layout-shift.detector.d.ts +132 -0
  216. package/dist/services/motion/analyzers/layout-shift.detector.d.ts.map +1 -0
  217. package/dist/services/motion/analyzers/layout-shift.detector.js +179 -0
  218. package/dist/services/motion/analyzers/layout-shift.detector.js.map +1 -0
  219. package/dist/services/motion/analyzers/motion-vector.estimator.d.ts +88 -0
  220. package/dist/services/motion/analyzers/motion-vector.estimator.d.ts.map +1 -0
  221. package/dist/services/motion/analyzers/motion-vector.estimator.js +494 -0
  222. package/dist/services/motion/analyzers/motion-vector.estimator.js.map +1 -0
  223. package/dist/services/motion/analyzers/webgl-motion-analyzer.d.ts +167 -0
  224. package/dist/services/motion/analyzers/webgl-motion-analyzer.d.ts.map +1 -0
  225. package/dist/services/motion/analyzers/webgl-motion-analyzer.js +500 -0
  226. package/dist/services/motion/analyzers/webgl-motion-analyzer.js.map +1 -0
  227. package/dist/services/motion/animation-metrics-collector.service.d.ts +215 -0
  228. package/dist/services/motion/animation-metrics-collector.service.d.ts.map +1 -0
  229. package/dist/services/motion/animation-metrics-collector.service.js +502 -0
  230. package/dist/services/motion/animation-metrics-collector.service.js.map +1 -0
  231. package/dist/services/motion/cls-calculator.service.d.ts +186 -0
  232. package/dist/services/motion/cls-calculator.service.d.ts.map +1 -0
  233. package/dist/services/motion/cls-calculator.service.js +329 -0
  234. package/dist/services/motion/cls-calculator.service.js.map +1 -0
  235. package/dist/services/motion/existing-animation-detector.service.d.ts +208 -0
  236. package/dist/services/motion/existing-animation-detector.service.d.ts.map +1 -0
  237. package/dist/services/motion/existing-animation-detector.service.js +591 -0
  238. package/dist/services/motion/existing-animation-detector.service.js.map +1 -0
  239. package/dist/services/motion/fade-detector.service.d.ts +114 -0
  240. package/dist/services/motion/fade-detector.service.d.ts.map +1 -0
  241. package/dist/services/motion/fade-detector.service.js +249 -0
  242. package/dist/services/motion/fade-detector.service.js.map +1 -0
  243. package/dist/services/motion/frame-analysis-save.helper.d.ts +41 -0
  244. package/dist/services/motion/frame-analysis-save.helper.d.ts.map +1 -0
  245. package/dist/services/motion/frame-analysis-save.helper.js +235 -0
  246. package/dist/services/motion/frame-analysis-save.helper.js.map +1 -0
  247. package/dist/services/motion/frame-capture.service.d.ts +170 -0
  248. package/dist/services/motion/frame-capture.service.d.ts.map +1 -0
  249. package/dist/services/motion/frame-capture.service.js +476 -0
  250. package/dist/services/motion/frame-capture.service.js.map +1 -0
  251. package/dist/services/motion/frame-embedding.service.d.ts +315 -0
  252. package/dist/services/motion/frame-embedding.service.d.ts.map +1 -0
  253. package/dist/services/motion/frame-embedding.service.js +1023 -0
  254. package/dist/services/motion/frame-embedding.service.js.map +1 -0
  255. package/dist/services/motion/frame-image-analysis.service.d.ts +126 -0
  256. package/dist/services/motion/frame-image-analysis.service.d.ts.map +1 -0
  257. package/dist/services/motion/frame-image-analysis.service.js +982 -0
  258. package/dist/services/motion/frame-image-analysis.service.js.map +1 -0
  259. package/dist/services/motion/frame-image-analyzer.adapter.d.ts +168 -0
  260. package/dist/services/motion/frame-image-analyzer.adapter.d.ts.map +1 -0
  261. package/dist/services/motion/frame-image-analyzer.adapter.js +520 -0
  262. package/dist/services/motion/frame-image-analyzer.adapter.js.map +1 -0
  263. package/dist/services/motion/frame-worker-pool.service.d.ts +133 -0
  264. package/dist/services/motion/frame-worker-pool.service.d.ts.map +1 -0
  265. package/dist/services/motion/frame-worker-pool.service.js +410 -0
  266. package/dist/services/motion/frame-worker-pool.service.js.map +1 -0
  267. package/dist/services/motion/infrastructure/frame-loader.d.ts +77 -0
  268. package/dist/services/motion/infrastructure/frame-loader.d.ts.map +1 -0
  269. package/dist/services/motion/infrastructure/frame-loader.js +430 -0
  270. package/dist/services/motion/infrastructure/frame-loader.js.map +1 -0
  271. package/dist/services/motion/js-animation-detector.d.ts +382 -0
  272. package/dist/services/motion/js-animation-detector.d.ts.map +1 -0
  273. package/dist/services/motion/js-animation-detector.js +911 -0
  274. package/dist/services/motion/js-animation-detector.js.map +1 -0
  275. package/dist/services/motion/js-animation-embedding.service.d.ts +114 -0
  276. package/dist/services/motion/js-animation-embedding.service.d.ts.map +1 -0
  277. package/dist/services/motion/js-animation-embedding.service.js +289 -0
  278. package/dist/services/motion/js-animation-embedding.service.js.map +1 -0
  279. package/dist/services/motion/js-animation-search.service.d.ts +138 -0
  280. package/dist/services/motion/js-animation-search.service.d.ts.map +1 -0
  281. package/dist/services/motion/js-animation-search.service.js +503 -0
  282. package/dist/services/motion/js-animation-search.service.js.map +1 -0
  283. package/dist/services/motion/motion-db.service.d.ts +231 -0
  284. package/dist/services/motion/motion-db.service.d.ts.map +1 -0
  285. package/dist/services/motion/motion-db.service.js +676 -0
  286. package/dist/services/motion/motion-db.service.js.map +1 -0
  287. package/dist/services/motion/three-js-scene-extractor.d.ts +274 -0
  288. package/dist/services/motion/three-js-scene-extractor.d.ts.map +1 -0
  289. package/dist/services/motion/three-js-scene-extractor.js +1126 -0
  290. package/dist/services/motion/three-js-scene-extractor.js.map +1 -0
  291. package/dist/services/motion/types.d.ts +592 -0
  292. package/dist/services/motion/types.d.ts.map +1 -0
  293. package/dist/services/motion/types.js +121 -0
  294. package/dist/services/motion/types.js.map +1 -0
  295. package/dist/services/motion/visual-category-classifier.d.ts +273 -0
  296. package/dist/services/motion/visual-category-classifier.d.ts.map +1 -0
  297. package/dist/services/motion/visual-category-classifier.js +1060 -0
  298. package/dist/services/motion/visual-category-classifier.js.map +1 -0
  299. package/dist/services/motion/webgl-animation-categorizer.d.ts +151 -0
  300. package/dist/services/motion/webgl-animation-categorizer.d.ts.map +1 -0
  301. package/dist/services/motion/webgl-animation-categorizer.js +568 -0
  302. package/dist/services/motion/webgl-animation-categorizer.js.map +1 -0
  303. package/dist/services/motion/webgl-animation-detector.service.d.ts +204 -0
  304. package/dist/services/motion/webgl-animation-detector.service.d.ts.map +1 -0
  305. package/dist/services/motion/webgl-animation-detector.service.js +518 -0
  306. package/dist/services/motion/webgl-animation-detector.service.js.map +1 -0
  307. package/dist/services/motion/webgl-animation-embedding.service.d.ts +238 -0
  308. package/dist/services/motion/webgl-animation-embedding.service.d.ts.map +1 -0
  309. package/dist/services/motion/webgl-animation-embedding.service.js +368 -0
  310. package/dist/services/motion/webgl-animation-embedding.service.js.map +1 -0
  311. package/dist/services/motion-detect-service-export.d.ts +130 -0
  312. package/dist/services/motion-detect-service-export.d.ts.map +1 -0
  313. package/dist/services/motion-detect-service-export.js +160 -0
  314. package/dist/services/motion-detect-service-export.js.map +1 -0
  315. package/dist/services/motion-persistence.service.d.ts +144 -0
  316. package/dist/services/motion-persistence.service.d.ts.map +1 -0
  317. package/dist/services/motion-persistence.service.js +398 -0
  318. package/dist/services/motion-persistence.service.js.map +1 -0
  319. package/dist/services/motion-search-service.d.ts +10 -0
  320. package/dist/services/motion-search-service.d.ts.map +1 -0
  321. package/dist/services/motion-search-service.js +22 -0
  322. package/dist/services/motion-search-service.js.map +1 -0
  323. package/dist/services/motion-search.service.d.ts +210 -0
  324. package/dist/services/motion-search.service.d.ts.map +1 -0
  325. package/dist/services/motion-search.service.js +900 -0
  326. package/dist/services/motion-search.service.js.map +1 -0
  327. package/dist/services/narrative/analyzers/layout-structure.analyzer.d.ts +75 -0
  328. package/dist/services/narrative/analyzers/layout-structure.analyzer.d.ts.map +1 -0
  329. package/dist/services/narrative/analyzers/layout-structure.analyzer.js +489 -0
  330. package/dist/services/narrative/analyzers/layout-structure.analyzer.js.map +1 -0
  331. package/dist/services/narrative/analyzers/worldview.analyzer.d.ts +92 -0
  332. package/dist/services/narrative/analyzers/worldview.analyzer.d.ts.map +1 -0
  333. package/dist/services/narrative/analyzers/worldview.analyzer.js +477 -0
  334. package/dist/services/narrative/analyzers/worldview.analyzer.js.map +1 -0
  335. package/dist/services/narrative/generators/confidence-calculator.d.ts +65 -0
  336. package/dist/services/narrative/generators/confidence-calculator.d.ts.map +1 -0
  337. package/dist/services/narrative/generators/confidence-calculator.js +316 -0
  338. package/dist/services/narrative/generators/confidence-calculator.js.map +1 -0
  339. package/dist/services/narrative/generators/text-representation.generator.d.ts +67 -0
  340. package/dist/services/narrative/generators/text-representation.generator.d.ts.map +1 -0
  341. package/dist/services/narrative/generators/text-representation.generator.js +312 -0
  342. package/dist/services/narrative/generators/text-representation.generator.js.map +1 -0
  343. package/dist/services/narrative/index.d.ts +16 -0
  344. package/dist/services/narrative/index.d.ts.map +1 -0
  345. package/dist/services/narrative/index.js +63 -0
  346. package/dist/services/narrative/index.js.map +1 -0
  347. package/dist/services/narrative/narrative-analysis.service.d.ts +120 -0
  348. package/dist/services/narrative/narrative-analysis.service.d.ts.map +1 -0
  349. package/dist/services/narrative/narrative-analysis.service.js +479 -0
  350. package/dist/services/narrative/narrative-analysis.service.js.map +1 -0
  351. package/dist/services/narrative/narrative-search.service.d.ts +126 -0
  352. package/dist/services/narrative/narrative-search.service.d.ts.map +1 -0
  353. package/dist/services/narrative/narrative-search.service.js +516 -0
  354. package/dist/services/narrative/narrative-search.service.js.map +1 -0
  355. package/dist/services/narrative/types/narrative.types.d.ts +372 -0
  356. package/dist/services/narrative/types/narrative.types.d.ts.map +1 -0
  357. package/dist/services/narrative/types/narrative.types.js +5 -0
  358. package/dist/services/narrative/types/narrative.types.js.map +1 -0
  359. package/dist/services/orphaned-job-utils.d.ts +62 -0
  360. package/dist/services/orphaned-job-utils.d.ts.map +1 -0
  361. package/dist/services/orphaned-job-utils.js +130 -0
  362. package/dist/services/orphaned-job-utils.js.map +1 -0
  363. package/dist/services/page/css-animation-parser.service.d.ts +173 -0
  364. package/dist/services/page/css-animation-parser.service.d.ts.map +1 -0
  365. package/dist/services/page/css-animation-parser.service.js +537 -0
  366. package/dist/services/page/css-animation-parser.service.js.map +1 -0
  367. package/dist/services/page/fallback-analyzer.service.d.ts +140 -0
  368. package/dist/services/page/fallback-analyzer.service.d.ts.map +1 -0
  369. package/dist/services/page/fallback-analyzer.service.js +289 -0
  370. package/dist/services/page/fallback-analyzer.service.js.map +1 -0
  371. package/dist/services/page/frame-analyzer.service.d.ts +208 -0
  372. package/dist/services/page/frame-analyzer.service.d.ts.map +1 -0
  373. package/dist/services/page/frame-analyzer.service.js +628 -0
  374. package/dist/services/page/frame-analyzer.service.js.map +1 -0
  375. package/dist/services/page/layout-analyzer.service.d.ts +323 -0
  376. package/dist/services/page/layout-analyzer.service.d.ts.map +1 -0
  377. package/dist/services/page/layout-analyzer.service.js +2001 -0
  378. package/dist/services/page/layout-analyzer.service.js.map +1 -0
  379. package/dist/services/page/motion-category-classifier.service.d.ts +72 -0
  380. package/dist/services/page/motion-category-classifier.service.d.ts.map +1 -0
  381. package/dist/services/page/motion-category-classifier.service.js +340 -0
  382. package/dist/services/page/motion-category-classifier.service.js.map +1 -0
  383. package/dist/services/page/motion-detector.service.d.ts +76 -0
  384. package/dist/services/page/motion-detector.service.d.ts.map +1 -0
  385. package/dist/services/page/motion-detector.service.js +255 -0
  386. package/dist/services/page/motion-detector.service.js.map +1 -0
  387. package/dist/services/page/motion-performance-analyzer.service.d.ts +114 -0
  388. package/dist/services/page/motion-performance-analyzer.service.d.ts.map +1 -0
  389. package/dist/services/page/motion-performance-analyzer.service.js +315 -0
  390. package/dist/services/page/motion-performance-analyzer.service.js.map +1 -0
  391. package/dist/services/page/playwright-crawler.service.d.ts +106 -0
  392. package/dist/services/page/playwright-crawler.service.d.ts.map +1 -0
  393. package/dist/services/page/playwright-crawler.service.js +373 -0
  394. package/dist/services/page/playwright-crawler.service.js.map +1 -0
  395. package/dist/services/page/quality-evaluator.service.d.ts +107 -0
  396. package/dist/services/page/quality-evaluator.service.d.ts.map +1 -0
  397. package/dist/services/page/quality-evaluator.service.js +1138 -0
  398. package/dist/services/page/quality-evaluator.service.js.map +1 -0
  399. package/dist/services/page/runtime-animation-detector.service.d.ts +154 -0
  400. package/dist/services/page/runtime-animation-detector.service.d.ts.map +1 -0
  401. package/dist/services/page/runtime-animation-detector.service.js +480 -0
  402. package/dist/services/page/runtime-animation-detector.service.js.map +1 -0
  403. package/dist/services/page/section-postprocessor.service.d.ts +55 -0
  404. package/dist/services/page/section-postprocessor.service.d.ts.map +1 -0
  405. package/dist/services/page/section-postprocessor.service.js +708 -0
  406. package/dist/services/page/section-postprocessor.service.js.map +1 -0
  407. package/dist/services/page/video-recorder.service.d.ts +110 -0
  408. package/dist/services/page/video-recorder.service.d.ts.map +1 -0
  409. package/dist/services/page/video-recorder.service.js +441 -0
  410. package/dist/services/page/video-recorder.service.js.map +1 -0
  411. package/dist/services/page/webgl-detector.service.d.ts +113 -0
  412. package/dist/services/page/webgl-detector.service.d.ts.map +1 -0
  413. package/dist/services/page/webgl-detector.service.js +280 -0
  414. package/dist/services/page/webgl-detector.service.js.map +1 -0
  415. package/dist/services/page-analyze-service.d.ts +30 -0
  416. package/dist/services/page-analyze-service.d.ts.map +1 -0
  417. package/dist/services/page-analyze-service.js +58 -0
  418. package/dist/services/page-analyze-service.js.map +1 -0
  419. package/dist/services/page-ingest-adapter.d.ts +479 -0
  420. package/dist/services/page-ingest-adapter.d.ts.map +1 -0
  421. package/dist/services/page-ingest-adapter.js +1726 -0
  422. package/dist/services/page-ingest-adapter.js.map +1 -0
  423. package/dist/services/palette-service-export.d.ts +26 -0
  424. package/dist/services/palette-service-export.d.ts.map +1 -0
  425. package/dist/services/palette-service-export.js +22 -0
  426. package/dist/services/palette-service-export.js.map +1 -0
  427. package/dist/services/part/index.d.ts +22 -0
  428. package/dist/services/part/index.d.ts.map +1 -0
  429. package/dist/services/part/index.js +72 -0
  430. package/dist/services/part/index.js.map +1 -0
  431. package/dist/services/part/part-backfill.service.d.ts +66 -0
  432. package/dist/services/part/part-backfill.service.d.ts.map +1 -0
  433. package/dist/services/part/part-backfill.service.js +195 -0
  434. package/dist/services/part/part-backfill.service.js.map +1 -0
  435. package/dist/services/part/part-bbox-playwright.service.d.ts +85 -0
  436. package/dist/services/part/part-bbox-playwright.service.d.ts.map +1 -0
  437. package/dist/services/part/part-bbox-playwright.service.js +362 -0
  438. package/dist/services/part/part-bbox-playwright.service.js.map +1 -0
  439. package/dist/services/part/part-db.service.d.ts +41 -0
  440. package/dist/services/part/part-db.service.d.ts.map +1 -0
  441. package/dist/services/part/part-db.service.js +82 -0
  442. package/dist/services/part/part-db.service.js.map +1 -0
  443. package/dist/services/part/part-embedding-db.service.d.ts +52 -0
  444. package/dist/services/part/part-embedding-db.service.d.ts.map +1 -0
  445. package/dist/services/part/part-embedding-db.service.js +122 -0
  446. package/dist/services/part/part-embedding-db.service.js.map +1 -0
  447. package/dist/services/part/part-embedding.service.d.ts +140 -0
  448. package/dist/services/part/part-embedding.service.d.ts.map +1 -0
  449. package/dist/services/part/part-embedding.service.js +276 -0
  450. package/dist/services/part/part-embedding.service.js.map +1 -0
  451. package/dist/services/part/part-extraction.service.d.ts +75 -0
  452. package/dist/services/part/part-extraction.service.d.ts.map +1 -0
  453. package/dist/services/part/part-extraction.service.js +519 -0
  454. package/dist/services/part/part-extraction.service.js.map +1 -0
  455. package/dist/services/part/part-search.service.d.ts +180 -0
  456. package/dist/services/part/part-search.service.d.ts.map +1 -0
  457. package/dist/services/part/part-search.service.js +565 -0
  458. package/dist/services/part/part-search.service.js.map +1 -0
  459. package/dist/services/part/schemas.d.ts +232 -0
  460. package/dist/services/part/schemas.d.ts.map +1 -0
  461. package/dist/services/part/schemas.js +167 -0
  462. package/dist/services/part/schemas.js.map +1 -0
  463. package/dist/services/part/section-screenshot-fallback.service.d.ts +101 -0
  464. package/dist/services/part/section-screenshot-fallback.service.d.ts.map +1 -0
  465. package/dist/services/part/section-screenshot-fallback.service.js +489 -0
  466. package/dist/services/part/section-screenshot-fallback.service.js.map +1 -0
  467. package/dist/services/part/types.d.ts +189 -0
  468. package/dist/services/part/types.d.ts.map +1 -0
  469. package/dist/services/part/types.js +139 -0
  470. package/dist/services/part/types.js.map +1 -0
  471. package/dist/services/persistent-cache.d.ts +209 -0
  472. package/dist/services/persistent-cache.d.ts.map +1 -0
  473. package/dist/services/persistent-cache.js +633 -0
  474. package/dist/services/persistent-cache.js.map +1 -0
  475. package/dist/services/preference-profile.service.d.ts +143 -0
  476. package/dist/services/preference-profile.service.d.ts.map +1 -0
  477. package/dist/services/preference-profile.service.js +604 -0
  478. package/dist/services/preference-profile.service.js.map +1 -0
  479. package/dist/services/preference-rerank.helper.d.ts +128 -0
  480. package/dist/services/preference-rerank.helper.d.ts.map +1 -0
  481. package/dist/services/preference-rerank.helper.js +397 -0
  482. package/dist/services/preference-rerank.helper.js.map +1 -0
  483. package/dist/services/production-guard.d.ts +213 -0
  484. package/dist/services/production-guard.d.ts.map +1 -0
  485. package/dist/services/production-guard.js +357 -0
  486. package/dist/services/production-guard.js.map +1 -0
  487. package/dist/services/project-context-analyzer.d.ts +194 -0
  488. package/dist/services/project-context-analyzer.d.ts.map +1 -0
  489. package/dist/services/project-context-analyzer.js +747 -0
  490. package/dist/services/project-context-analyzer.js.map +1 -0
  491. package/dist/services/quality/axe-accessibility.service.d.ts +87 -0
  492. package/dist/services/quality/axe-accessibility.service.d.ts.map +1 -0
  493. package/dist/services/quality/axe-accessibility.service.js +188 -0
  494. package/dist/services/quality/axe-accessibility.service.js.map +1 -0
  495. package/dist/services/quality/axe-core-shared.d.ts +108 -0
  496. package/dist/services/quality/axe-core-shared.d.ts.map +1 -0
  497. package/dist/services/quality/axe-core-shared.js +136 -0
  498. package/dist/services/quality/axe-core-shared.js.map +1 -0
  499. package/dist/services/quality/benchmark.service.d.ts +178 -0
  500. package/dist/services/quality/benchmark.service.d.ts.map +1 -0
  501. package/dist/services/quality/benchmark.service.js +394 -0
  502. package/dist/services/quality/benchmark.service.js.map +1 -0
  503. package/dist/services/quality/content-gap-detector.service.d.ts +133 -0
  504. package/dist/services/quality/content-gap-detector.service.d.ts.map +1 -0
  505. package/dist/services/quality/content-gap-detector.service.js +364 -0
  506. package/dist/services/quality/content-gap-detector.service.js.map +1 -0
  507. package/dist/services/quality/index.d.ts +12 -0
  508. package/dist/services/quality/index.d.ts.map +1 -0
  509. package/dist/services/quality/index.js +12 -0
  510. package/dist/services/quality/index.js.map +1 -0
  511. package/dist/services/quality/pattern-matcher.service.d.ts +195 -0
  512. package/dist/services/quality/pattern-matcher.service.d.ts.map +1 -0
  513. package/dist/services/quality/pattern-matcher.service.js +630 -0
  514. package/dist/services/quality/pattern-matcher.service.js.map +1 -0
  515. package/dist/services/quality/playwright-axe.service.d.ts +84 -0
  516. package/dist/services/quality/playwright-axe.service.d.ts.map +1 -0
  517. package/dist/services/quality/playwright-axe.service.js +267 -0
  518. package/dist/services/quality/playwright-axe.service.js.map +1 -0
  519. package/dist/services/quality/quality-evaluate.service.interface.d.ts +216 -0
  520. package/dist/services/quality/quality-evaluate.service.interface.d.ts.map +1 -0
  521. package/dist/services/quality/quality-evaluate.service.interface.js +5 -0
  522. package/dist/services/quality/quality-evaluate.service.interface.js.map +1 -0
  523. package/dist/services/quality/visual-design-analyzer.service.d.ts +72 -0
  524. package/dist/services/quality/visual-design-analyzer.service.d.ts.map +1 -0
  525. package/dist/services/quality/visual-design-analyzer.service.js +762 -0
  526. package/dist/services/quality/visual-design-analyzer.service.js.map +1 -0
  527. package/dist/services/quality-evaluate-service-export.d.ts +122 -0
  528. package/dist/services/quality-evaluate-service-export.d.ts.map +1 -0
  529. package/dist/services/quality-evaluate-service-export.js +138 -0
  530. package/dist/services/quality-evaluate-service-export.js.map +1 -0
  531. package/dist/services/quality-search.service.d.ts +20 -0
  532. package/dist/services/quality-search.service.d.ts.map +1 -0
  533. package/dist/services/quality-search.service.js +260 -0
  534. package/dist/services/quality-search.service.js.map +1 -0
  535. package/dist/services/query-analyzer.d.ts +107 -0
  536. package/dist/services/query-analyzer.d.ts.map +1 -0
  537. package/dist/services/query-analyzer.js +222 -0
  538. package/dist/services/query-analyzer.js.map +1 -0
  539. package/dist/services/query-context-analyzer.d.ts +85 -0
  540. package/dist/services/query-context-analyzer.d.ts.map +1 -0
  541. package/dist/services/query-context-analyzer.js +728 -0
  542. package/dist/services/query-context-analyzer.js.map +1 -0
  543. package/dist/services/queue-cleanup.service.d.ts +102 -0
  544. package/dist/services/queue-cleanup.service.d.ts.map +1 -0
  545. package/dist/services/queue-cleanup.service.js +259 -0
  546. package/dist/services/queue-cleanup.service.js.map +1 -0
  547. package/dist/services/responsive/difference-detector.service.d.ts +77 -0
  548. package/dist/services/responsive/difference-detector.service.d.ts.map +1 -0
  549. package/dist/services/responsive/difference-detector.service.js +525 -0
  550. package/dist/services/responsive/difference-detector.service.js.map +1 -0
  551. package/dist/services/responsive/index.d.ts +16 -0
  552. package/dist/services/responsive/index.d.ts.map +1 -0
  553. package/dist/services/responsive/index.js +60 -0
  554. package/dist/services/responsive/index.js.map +1 -0
  555. package/dist/services/responsive/multi-viewport-capture.service.d.ts +103 -0
  556. package/dist/services/responsive/multi-viewport-capture.service.d.ts.map +1 -0
  557. package/dist/services/responsive/multi-viewport-capture.service.js +841 -0
  558. package/dist/services/responsive/multi-viewport-capture.service.js.map +1 -0
  559. package/dist/services/responsive/responsive-analysis-embedding.service.d.ts +114 -0
  560. package/dist/services/responsive/responsive-analysis-embedding.service.d.ts.map +1 -0
  561. package/dist/services/responsive/responsive-analysis-embedding.service.js +232 -0
  562. package/dist/services/responsive/responsive-analysis-embedding.service.js.map +1 -0
  563. package/dist/services/responsive/responsive-analysis.service.d.ts +37 -0
  564. package/dist/services/responsive/responsive-analysis.service.d.ts.map +1 -0
  565. package/dist/services/responsive/responsive-analysis.service.js +262 -0
  566. package/dist/services/responsive/responsive-analysis.service.js.map +1 -0
  567. package/dist/services/responsive/responsive-persistence.service.d.ts +45 -0
  568. package/dist/services/responsive/responsive-persistence.service.d.ts.map +1 -0
  569. package/dist/services/responsive/responsive-persistence.service.js +102 -0
  570. package/dist/services/responsive/responsive-persistence.service.js.map +1 -0
  571. package/dist/services/responsive/responsive-quality-evaluator.service.d.ts +80 -0
  572. package/dist/services/responsive/responsive-quality-evaluator.service.d.ts.map +1 -0
  573. package/dist/services/responsive/responsive-quality-evaluator.service.js +448 -0
  574. package/dist/services/responsive/responsive-quality-evaluator.service.js.map +1 -0
  575. package/dist/services/responsive/shared-browser-manager.d.ts +65 -0
  576. package/dist/services/responsive/shared-browser-manager.d.ts.map +1 -0
  577. package/dist/services/responsive/shared-browser-manager.js +112 -0
  578. package/dist/services/responsive/shared-browser-manager.js.map +1 -0
  579. package/dist/services/responsive/types.d.ts +367 -0
  580. package/dist/services/responsive/types.d.ts.map +1 -0
  581. package/dist/services/responsive/types.js +5 -0
  582. package/dist/services/responsive/types.js.map +1 -0
  583. package/dist/services/responsive/viewport-diff.service.d.ts +49 -0
  584. package/dist/services/responsive/viewport-diff.service.d.ts.map +1 -0
  585. package/dist/services/responsive/viewport-diff.service.js +178 -0
  586. package/dist/services/responsive/viewport-diff.service.js.map +1 -0
  587. package/dist/services/responsive-search.service.d.ts +52 -0
  588. package/dist/services/responsive-search.service.d.ts.map +1 -0
  589. package/dist/services/responsive-search.service.js +136 -0
  590. package/dist/services/responsive-search.service.js.map +1 -0
  591. package/dist/services/search/mood-brandtone-search.service.d.ts +99 -0
  592. package/dist/services/search/mood-brandtone-search.service.d.ts.map +1 -0
  593. package/dist/services/search/mood-brandtone-search.service.js +310 -0
  594. package/dist/services/search/mood-brandtone-search.service.js.map +1 -0
  595. package/dist/services/search-performance.service.d.ts +118 -0
  596. package/dist/services/search-performance.service.d.ts.map +1 -0
  597. package/dist/services/search-performance.service.js +181 -0
  598. package/dist/services/search-performance.service.js.map +1 -0
  599. package/dist/services/section-screenshot.service.d.ts +163 -0
  600. package/dist/services/section-screenshot.service.d.ts.map +1 -0
  601. package/dist/services/section-screenshot.service.js +363 -0
  602. package/dist/services/section-screenshot.service.js.map +1 -0
  603. package/dist/services/service-client.d.ts +181 -0
  604. package/dist/services/service-client.d.ts.map +1 -0
  605. package/dist/services/service-client.js +450 -0
  606. package/dist/services/service-client.js.map +1 -0
  607. package/dist/services/service-initializer.d.ts +174 -0
  608. package/dist/services/service-initializer.d.ts.map +1 -0
  609. package/dist/services/service-initializer.js +942 -0
  610. package/dist/services/service-initializer.js.map +1 -0
  611. package/dist/services/storage/index.d.ts +7 -0
  612. package/dist/services/storage/index.d.ts.map +1 -0
  613. package/dist/services/storage/index.js +14 -0
  614. package/dist/services/storage/index.js.map +1 -0
  615. package/dist/services/storage/local-storage.provider.d.ts +140 -0
  616. package/dist/services/storage/local-storage.provider.d.ts.map +1 -0
  617. package/dist/services/storage/local-storage.provider.js +333 -0
  618. package/dist/services/storage/local-storage.provider.js.map +1 -0
  619. package/dist/services/style/index.d.ts +7 -0
  620. package/dist/services/style/index.d.ts.map +1 -0
  621. package/dist/services/style/index.js +25 -0
  622. package/dist/services/style/index.js.map +1 -0
  623. package/dist/services/style/palette-service.d.ts +212 -0
  624. package/dist/services/style/palette-service.d.ts.map +1 -0
  625. package/dist/services/style/palette-service.js +423 -0
  626. package/dist/services/style/palette-service.js.map +1 -0
  627. package/dist/services/style/prisma-palette-repository.d.ts +35 -0
  628. package/dist/services/style/prisma-palette-repository.d.ts.map +1 -0
  629. package/dist/services/style/prisma-palette-repository.js +165 -0
  630. package/dist/services/style/prisma-palette-repository.js.map +1 -0
  631. package/dist/services/vision/brandtone.analyzer.d.ts +104 -0
  632. package/dist/services/vision/brandtone.analyzer.d.ts.map +1 -0
  633. package/dist/services/vision/brandtone.analyzer.js +279 -0
  634. package/dist/services/vision/brandtone.analyzer.js.map +1 -0
  635. package/dist/services/vision/hardware-detector.d.ts +166 -0
  636. package/dist/services/vision/hardware-detector.d.ts.map +1 -0
  637. package/dist/services/vision/hardware-detector.js +330 -0
  638. package/dist/services/vision/hardware-detector.js.map +1 -0
  639. package/dist/services/vision/image-optimizer.d.ts +152 -0
  640. package/dist/services/vision/image-optimizer.d.ts.map +1 -0
  641. package/dist/services/vision/image-optimizer.js +266 -0
  642. package/dist/services/vision/image-optimizer.js.map +1 -0
  643. package/dist/services/vision/index.d.ts +26 -0
  644. package/dist/services/vision/index.d.ts.map +1 -0
  645. package/dist/services/vision/index.js +80 -0
  646. package/dist/services/vision/index.js.map +1 -0
  647. package/dist/services/vision/llama-vision-adapter.d.ts +178 -0
  648. package/dist/services/vision/llama-vision-adapter.d.ts.map +1 -0
  649. package/dist/services/vision/llama-vision-adapter.js +307 -0
  650. package/dist/services/vision/llama-vision-adapter.js.map +1 -0
  651. package/dist/services/vision/mcp-progress-adapter.d.ts +128 -0
  652. package/dist/services/vision/mcp-progress-adapter.d.ts.map +1 -0
  653. package/dist/services/vision/mcp-progress-adapter.js +150 -0
  654. package/dist/services/vision/mcp-progress-adapter.js.map +1 -0
  655. package/dist/services/vision/mood.analyzer.d.ts +74 -0
  656. package/dist/services/vision/mood.analyzer.d.ts.map +1 -0
  657. package/dist/services/vision/mood.analyzer.js +258 -0
  658. package/dist/services/vision/mood.analyzer.js.map +1 -0
  659. package/dist/services/vision/ollama-readiness-probe.d.ts +87 -0
  660. package/dist/services/vision/ollama-readiness-probe.d.ts.map +1 -0
  661. package/dist/services/vision/ollama-readiness-probe.js +211 -0
  662. package/dist/services/vision/ollama-readiness-probe.js.map +1 -0
  663. package/dist/services/vision/ollama-vision-client.d.ts +129 -0
  664. package/dist/services/vision/ollama-vision-client.d.ts.map +1 -0
  665. package/dist/services/vision/ollama-vision-client.js +478 -0
  666. package/dist/services/vision/ollama-vision-client.js.map +1 -0
  667. package/dist/services/vision/progress-reporter.d.ts +140 -0
  668. package/dist/services/vision/progress-reporter.d.ts.map +1 -0
  669. package/dist/services/vision/progress-reporter.js +306 -0
  670. package/dist/services/vision/progress-reporter.js.map +1 -0
  671. package/dist/services/vision/scroll-vision-capture.service.d.ts +117 -0
  672. package/dist/services/vision/scroll-vision-capture.service.d.ts.map +1 -0
  673. package/dist/services/vision/scroll-vision-capture.service.js +266 -0
  674. package/dist/services/vision/scroll-vision-capture.service.js.map +1 -0
  675. package/dist/services/vision/scroll-vision-persistence.service.d.ts +48 -0
  676. package/dist/services/vision/scroll-vision-persistence.service.d.ts.map +1 -0
  677. package/dist/services/vision/scroll-vision-persistence.service.js +161 -0
  678. package/dist/services/vision/scroll-vision-persistence.service.js.map +1 -0
  679. package/dist/services/vision/scroll-vision.analyzer.d.ts +90 -0
  680. package/dist/services/vision/scroll-vision.analyzer.d.ts.map +1 -0
  681. package/dist/services/vision/scroll-vision.analyzer.js +280 -0
  682. package/dist/services/vision/scroll-vision.analyzer.js.map +1 -0
  683. package/dist/services/vision/theme.analyzer.d.ts +108 -0
  684. package/dist/services/vision/theme.analyzer.d.ts.map +1 -0
  685. package/dist/services/vision/theme.analyzer.js +315 -0
  686. package/dist/services/vision/theme.analyzer.js.map +1 -0
  687. package/dist/services/vision/timeout-calculator.d.ts +85 -0
  688. package/dist/services/vision/timeout-calculator.d.ts.map +1 -0
  689. package/dist/services/vision/timeout-calculator.js +142 -0
  690. package/dist/services/vision/timeout-calculator.js.map +1 -0
  691. package/dist/services/vision/vision-fallback.service.d.ts +121 -0
  692. package/dist/services/vision/vision-fallback.service.d.ts.map +1 -0
  693. package/dist/services/vision/vision-fallback.service.js +253 -0
  694. package/dist/services/vision/vision-fallback.service.js.map +1 -0
  695. package/dist/services/vision/vision.cache.d.ts +124 -0
  696. package/dist/services/vision/vision.cache.d.ts.map +1 -0
  697. package/dist/services/vision/vision.cache.js +261 -0
  698. package/dist/services/vision/vision.cache.js.map +1 -0
  699. package/dist/services/vision/vision.errors.d.ts +104 -0
  700. package/dist/services/vision/vision.errors.d.ts.map +1 -0
  701. package/dist/services/vision/vision.errors.js +133 -0
  702. package/dist/services/vision/vision.errors.js.map +1 -0
  703. package/dist/services/vision/vision.prompts.d.ts +47 -0
  704. package/dist/services/vision/vision.prompts.d.ts.map +1 -0
  705. package/dist/services/vision/vision.prompts.js +272 -0
  706. package/dist/services/vision/vision.prompts.js.map +1 -0
  707. package/dist/services/vision/vram-utils.d.ts +22 -0
  708. package/dist/services/vision/vram-utils.d.ts.map +1 -0
  709. package/dist/services/vision/vram-utils.js +57 -0
  710. package/dist/services/vision/vram-utils.js.map +1 -0
  711. package/dist/services/vision-adapter/index.d.ts +18 -0
  712. package/dist/services/vision-adapter/index.d.ts.map +1 -0
  713. package/dist/services/vision-adapter/index.js +31 -0
  714. package/dist/services/vision-adapter/index.js.map +1 -0
  715. package/dist/services/vision-adapter/interface.d.ts +1434 -0
  716. package/dist/services/vision-adapter/interface.d.ts.map +1 -0
  717. package/dist/services/vision-adapter/interface.js +326 -0
  718. package/dist/services/vision-adapter/interface.js.map +1 -0
  719. package/dist/services/vision-adapter/llama-vision.adapter.d.ts +373 -0
  720. package/dist/services/vision-adapter/llama-vision.adapter.d.ts.map +1 -0
  721. package/dist/services/vision-adapter/llama-vision.adapter.js +1751 -0
  722. package/dist/services/vision-adapter/llama-vision.adapter.js.map +1 -0
  723. package/dist/services/vision-adapter/llama-vision.prompts.d.ts +63 -0
  724. package/dist/services/vision-adapter/llama-vision.prompts.d.ts.map +1 -0
  725. package/dist/services/vision-adapter/llama-vision.prompts.js +234 -0
  726. package/dist/services/vision-adapter/llama-vision.prompts.js.map +1 -0
  727. package/dist/services/vision-adapter/llama-vision.types.d.ts +68 -0
  728. package/dist/services/vision-adapter/llama-vision.types.d.ts.map +1 -0
  729. package/dist/services/vision-adapter/llama-vision.types.js +21 -0
  730. package/dist/services/vision-adapter/llama-vision.types.js.map +1 -0
  731. package/dist/services/vision-adapter/local.adapter.d.ts +185 -0
  732. package/dist/services/vision-adapter/local.adapter.d.ts.map +1 -0
  733. package/dist/services/vision-adapter/local.adapter.js +835 -0
  734. package/dist/services/vision-adapter/local.adapter.js.map +1 -0
  735. package/dist/services/vision-adapter/mock.adapter.d.ts +174 -0
  736. package/dist/services/vision-adapter/mock.adapter.d.ts.map +1 -0
  737. package/dist/services/vision-adapter/mock.adapter.js +812 -0
  738. package/dist/services/vision-adapter/mock.adapter.js.map +1 -0
  739. package/dist/services/vision-embedding-search.service.d.ts +205 -0
  740. package/dist/services/vision-embedding-search.service.d.ts.map +1 -0
  741. package/dist/services/vision-embedding-search.service.js +742 -0
  742. package/dist/services/vision-embedding-search.service.js.map +1 -0
  743. package/dist/services/vision-embedding.service.d.ts +150 -0
  744. package/dist/services/vision-embedding.service.d.ts.map +1 -0
  745. package/dist/services/vision-embedding.service.js +461 -0
  746. package/dist/services/vision-embedding.service.js.map +1 -0
  747. package/dist/services/visual/css-variable-extractor.service.d.ts +97 -0
  748. package/dist/services/visual/css-variable-extractor.service.d.ts.map +1 -0
  749. package/dist/services/visual/css-variable-extractor.service.js +460 -0
  750. package/dist/services/visual/css-variable-extractor.service.js.map +1 -0
  751. package/dist/services/visual/typography-extractor.service.d.ts +137 -0
  752. package/dist/services/visual/typography-extractor.service.d.ts.map +1 -0
  753. package/dist/services/visual/typography-extractor.service.js +539 -0
  754. package/dist/services/visual/typography-extractor.service.js.map +1 -0
  755. package/dist/services/visual-extractor/color-extractor.service.d.ts +55 -0
  756. package/dist/services/visual-extractor/color-extractor.service.d.ts.map +1 -0
  757. package/dist/services/visual-extractor/color-extractor.service.js +281 -0
  758. package/dist/services/visual-extractor/color-extractor.service.js.map +1 -0
  759. package/dist/services/visual-extractor/density-calculator.service.d.ts +85 -0
  760. package/dist/services/visual-extractor/density-calculator.service.d.ts.map +1 -0
  761. package/dist/services/visual-extractor/density-calculator.service.js +369 -0
  762. package/dist/services/visual-extractor/density-calculator.service.js.map +1 -0
  763. package/dist/services/visual-extractor/gradient-detector.service.d.ts +134 -0
  764. package/dist/services/visual-extractor/gradient-detector.service.d.ts.map +1 -0
  765. package/dist/services/visual-extractor/gradient-detector.service.js +1172 -0
  766. package/dist/services/visual-extractor/gradient-detector.service.js.map +1 -0
  767. package/dist/services/visual-extractor/image-utils.d.ts +135 -0
  768. package/dist/services/visual-extractor/image-utils.d.ts.map +1 -0
  769. package/dist/services/visual-extractor/image-utils.js +305 -0
  770. package/dist/services/visual-extractor/image-utils.js.map +1 -0
  771. package/dist/services/visual-extractor/pixel-theme-detector.service.d.ts +58 -0
  772. package/dist/services/visual-extractor/pixel-theme-detector.service.d.ts.map +1 -0
  773. package/dist/services/visual-extractor/pixel-theme-detector.service.js +358 -0
  774. package/dist/services/visual-extractor/pixel-theme-detector.service.js.map +1 -0
  775. package/dist/services/visual-extractor/theme-detector.service.d.ts +101 -0
  776. package/dist/services/visual-extractor/theme-detector.service.d.ts.map +1 -0
  777. package/dist/services/visual-extractor/theme-detector.service.js +463 -0
  778. package/dist/services/visual-extractor/theme-detector.service.js.map +1 -0
  779. package/dist/services/visual-extractor/visual-decoration-detector.service.d.ts +43 -0
  780. package/dist/services/visual-extractor/visual-decoration-detector.service.d.ts.map +1 -0
  781. package/dist/services/visual-extractor/visual-decoration-detector.service.js +628 -0
  782. package/dist/services/visual-extractor/visual-decoration-detector.service.js.map +1 -0
  783. package/dist/services/visual-extractor/visual-feature-merger.service.d.ts +230 -0
  784. package/dist/services/visual-extractor/visual-feature-merger.service.d.ts.map +1 -0
  785. package/dist/services/visual-extractor/visual-feature-merger.service.js +482 -0
  786. package/dist/services/visual-extractor/visual-feature-merger.service.js.map +1 -0
  787. package/dist/services/web-page.service.d.ts +80 -0
  788. package/dist/services/web-page.service.d.ts.map +1 -0
  789. package/dist/services/web-page.service.js +211 -0
  790. package/dist/services/web-page.service.js.map +1 -0
  791. package/dist/services/worker-constants.d.ts +40 -0
  792. package/dist/services/worker-constants.d.ts.map +1 -0
  793. package/dist/services/worker-constants.js +51 -0
  794. package/dist/services/worker-constants.js.map +1 -0
  795. package/dist/services/worker-db-save.service.d.ts +311 -0
  796. package/dist/services/worker-db-save.service.d.ts.map +1 -0
  797. package/dist/services/worker-db-save.service.js +771 -0
  798. package/dist/services/worker-db-save.service.js.map +1 -0
  799. package/dist/services/worker-memory-monitor.service.d.ts +24 -0
  800. package/dist/services/worker-memory-monitor.service.d.ts.map +1 -0
  801. package/dist/services/worker-memory-monitor.service.js +105 -0
  802. package/dist/services/worker-memory-monitor.service.js.map +1 -0
  803. package/dist/services/worker-memory-profile.d.ts +65 -0
  804. package/dist/services/worker-memory-profile.d.ts.map +1 -0
  805. package/dist/services/worker-memory-profile.js +225 -0
  806. package/dist/services/worker-memory-profile.js.map +1 -0
  807. package/dist/services/worker-stall-recovery.service.d.ts +166 -0
  808. package/dist/services/worker-stall-recovery.service.d.ts.map +1 -0
  809. package/dist/services/worker-stall-recovery.service.js +335 -0
  810. package/dist/services/worker-stall-recovery.service.js.map +1 -0
  811. package/dist/services/worker-supervisor.service.d.ts +145 -0
  812. package/dist/services/worker-supervisor.service.d.ts.map +1 -0
  813. package/dist/services/worker-supervisor.service.js +635 -0
  814. package/dist/services/worker-supervisor.service.js.map +1 -0
  815. package/dist/tools/background/schemas.d.ts +85 -0
  816. package/dist/tools/background/schemas.d.ts.map +1 -0
  817. package/dist/tools/background/schemas.js +79 -0
  818. package/dist/tools/background/schemas.js.map +1 -0
  819. package/dist/tools/background/search.tool.d.ts +179 -0
  820. package/dist/tools/background/search.tool.d.ts.map +1 -0
  821. package/dist/tools/background/search.tool.js +318 -0
  822. package/dist/tools/background/search.tool.js.map +1 -0
  823. package/dist/tools/brief/index.d.ts +10 -0
  824. package/dist/tools/brief/index.d.ts.map +1 -0
  825. package/dist/tools/brief/index.js +54 -0
  826. package/dist/tools/brief/index.js.map +1 -0
  827. package/dist/tools/brief/schemas.d.ts +750 -0
  828. package/dist/tools/brief/schemas.d.ts.map +1 -0
  829. package/dist/tools/brief/schemas.js +212 -0
  830. package/dist/tools/brief/schemas.js.map +1 -0
  831. package/dist/tools/brief/validate.handler.d.ts +149 -0
  832. package/dist/tools/brief/validate.handler.d.ts.map +1 -0
  833. package/dist/tools/brief/validate.handler.js +247 -0
  834. package/dist/tools/brief/validate.handler.js.map +1 -0
  835. package/dist/tools/brief/validate.service.d.ts +100 -0
  836. package/dist/tools/brief/validate.service.d.ts.map +1 -0
  837. package/dist/tools/brief/validate.service.js +296 -0
  838. package/dist/tools/brief/validate.service.js.map +1 -0
  839. package/dist/tools/common/error-codes.d.ts +35 -0
  840. package/dist/tools/common/error-codes.d.ts.map +1 -0
  841. package/dist/tools/common/error-codes.js +92 -0
  842. package/dist/tools/common/error-codes.js.map +1 -0
  843. package/dist/tools/common/index.d.ts +7 -0
  844. package/dist/tools/common/index.d.ts.map +1 -0
  845. package/dist/tools/common/index.js +20 -0
  846. package/dist/tools/common/index.js.map +1 -0
  847. package/dist/tools/index.d.ts +2756 -0
  848. package/dist/tools/index.d.ts.map +1 -0
  849. package/dist/tools/index.js +506 -0
  850. package/dist/tools/index.js.map +1 -0
  851. package/dist/tools/layout/batch-ingest.tool.d.ts +82 -0
  852. package/dist/tools/layout/batch-ingest.tool.d.ts.map +1 -0
  853. package/dist/tools/layout/batch-ingest.tool.js +410 -0
  854. package/dist/tools/layout/batch-ingest.tool.js.map +1 -0
  855. package/dist/tools/layout/index.d.ts +13 -0
  856. package/dist/tools/layout/index.d.ts.map +1 -0
  857. package/dist/tools/layout/index.js +62 -0
  858. package/dist/tools/layout/index.js.map +1 -0
  859. package/dist/tools/layout/ingest.tool.d.ts +338 -0
  860. package/dist/tools/layout/ingest.tool.d.ts.map +1 -0
  861. package/dist/tools/layout/ingest.tool.js +1308 -0
  862. package/dist/tools/layout/ingest.tool.js.map +1 -0
  863. package/dist/tools/layout/inspect/index.d.ts +11 -0
  864. package/dist/tools/layout/inspect/index.d.ts.map +1 -0
  865. package/dist/tools/layout/inspect/index.js +55 -0
  866. package/dist/tools/layout/inspect/index.js.map +1 -0
  867. package/dist/tools/layout/inspect/inspect.schemas.d.ts +4130 -0
  868. package/dist/tools/layout/inspect/inspect.schemas.d.ts.map +1 -0
  869. package/dist/tools/layout/inspect/inspect.schemas.js +400 -0
  870. package/dist/tools/layout/inspect/inspect.schemas.js.map +1 -0
  871. package/dist/tools/layout/inspect/inspect.tool.d.ts +164 -0
  872. package/dist/tools/layout/inspect/inspect.tool.d.ts.map +1 -0
  873. package/dist/tools/layout/inspect/inspect.tool.js +738 -0
  874. package/dist/tools/layout/inspect/inspect.tool.js.map +1 -0
  875. package/dist/tools/layout/inspect/inspect.utils.d.ts +200 -0
  876. package/dist/tools/layout/inspect/inspect.utils.d.ts.map +1 -0
  877. package/dist/tools/layout/inspect/inspect.utils.js +1104 -0
  878. package/dist/tools/layout/inspect/inspect.utils.js.map +1 -0
  879. package/dist/tools/layout/inspect/visual-extractors.schemas.d.ts +3372 -0
  880. package/dist/tools/layout/inspect/visual-extractors.schemas.d.ts.map +1 -0
  881. package/dist/tools/layout/inspect/visual-extractors.schemas.js +558 -0
  882. package/dist/tools/layout/inspect/visual-extractors.schemas.js.map +1 -0
  883. package/dist/tools/layout/inspect/visual-extractors.utils.d.ts +86 -0
  884. package/dist/tools/layout/inspect/visual-extractors.utils.d.ts.map +1 -0
  885. package/dist/tools/layout/inspect/visual-extractors.utils.js +231 -0
  886. package/dist/tools/layout/inspect/visual-extractors.utils.js.map +1 -0
  887. package/dist/tools/layout/schemas.d.ts +11074 -0
  888. package/dist/tools/layout/schemas.d.ts.map +1 -0
  889. package/dist/tools/layout/schemas.js +1497 -0
  890. package/dist/tools/layout/schemas.js.map +1 -0
  891. package/dist/tools/layout/search.tool.d.ts +470 -0
  892. package/dist/tools/layout/search.tool.d.ts.map +1 -0
  893. package/dist/tools/layout/search.tool.js +1582 -0
  894. package/dist/tools/layout/search.tool.js.map +1 -0
  895. package/dist/tools/layout/to-code.tool.d.ts +280 -0
  896. package/dist/tools/layout/to-code.tool.d.ts.map +1 -0
  897. package/dist/tools/layout/to-code.tool.js +317 -0
  898. package/dist/tools/layout/to-code.tool.js.map +1 -0
  899. package/dist/tools/motion/analyze-frames.handler.d.ts +157 -0
  900. package/dist/tools/motion/analyze-frames.handler.d.ts.map +1 -0
  901. package/dist/tools/motion/analyze-frames.handler.js +263 -0
  902. package/dist/tools/motion/analyze-frames.handler.js.map +1 -0
  903. package/dist/tools/motion/analyze-frames.schema.d.ts +4599 -0
  904. package/dist/tools/motion/analyze-frames.schema.d.ts.map +1 -0
  905. package/dist/tools/motion/analyze-frames.schema.js +420 -0
  906. package/dist/tools/motion/analyze-frames.schema.js.map +1 -0
  907. package/dist/tools/motion/css-mode-handler.d.ts +70 -0
  908. package/dist/tools/motion/css-mode-handler.d.ts.map +1 -0
  909. package/dist/tools/motion/css-mode-handler.js +754 -0
  910. package/dist/tools/motion/css-mode-handler.js.map +1 -0
  911. package/dist/tools/motion/detect.schemas.d.ts +14288 -0
  912. package/dist/tools/motion/detect.schemas.d.ts.map +1 -0
  913. package/dist/tools/motion/detect.schemas.js +1715 -0
  914. package/dist/tools/motion/detect.schemas.js.map +1 -0
  915. package/dist/tools/motion/detect.tool.d.ts +195 -0
  916. package/dist/tools/motion/detect.tool.d.ts.map +1 -0
  917. package/dist/tools/motion/detect.tool.js +1421 -0
  918. package/dist/tools/motion/detect.tool.js.map +1 -0
  919. package/dist/tools/motion/detection-modes.d.ts +72 -0
  920. package/dist/tools/motion/detection-modes.d.ts.map +1 -0
  921. package/dist/tools/motion/detection-modes.js +353 -0
  922. package/dist/tools/motion/detection-modes.js.map +1 -0
  923. package/dist/tools/motion/di-factories.d.ts +341 -0
  924. package/dist/tools/motion/di-factories.d.ts.map +1 -0
  925. package/dist/tools/motion/di-factories.js +376 -0
  926. package/dist/tools/motion/di-factories.js.map +1 -0
  927. package/dist/tools/motion/index.d.ts +12 -0
  928. package/dist/tools/motion/index.d.ts.map +1 -0
  929. package/dist/tools/motion/index.js +146 -0
  930. package/dist/tools/motion/index.js.map +1 -0
  931. package/dist/tools/motion/pattern-converter.d.ts +49 -0
  932. package/dist/tools/motion/pattern-converter.d.ts.map +1 -0
  933. package/dist/tools/motion/pattern-converter.js +493 -0
  934. package/dist/tools/motion/pattern-converter.js.map +1 -0
  935. package/dist/tools/motion/schemas.d.ts +10 -0
  936. package/dist/tools/motion/schemas.d.ts.map +1 -0
  937. package/dist/tools/motion/schemas.js +28 -0
  938. package/dist/tools/motion/schemas.js.map +1 -0
  939. package/dist/tools/motion/search.schemas.d.ts +7500 -0
  940. package/dist/tools/motion/search.schemas.d.ts.map +1 -0
  941. package/dist/tools/motion/search.schemas.js +596 -0
  942. package/dist/tools/motion/search.schemas.js.map +1 -0
  943. package/dist/tools/motion/search.tool.d.ts +416 -0
  944. package/dist/tools/motion/search.tool.d.ts.map +1 -0
  945. package/dist/tools/motion/search.tool.js +2088 -0
  946. package/dist/tools/motion/search.tool.js.map +1 -0
  947. package/dist/tools/motion/shared.schemas.d.ts +994 -0
  948. package/dist/tools/motion/shared.schemas.d.ts.map +1 -0
  949. package/dist/tools/motion/shared.schemas.js +354 -0
  950. package/dist/tools/motion/shared.schemas.js.map +1 -0
  951. package/dist/tools/narrative/analyze.tool.d.ts +96 -0
  952. package/dist/tools/narrative/analyze.tool.d.ts.map +1 -0
  953. package/dist/tools/narrative/analyze.tool.js +396 -0
  954. package/dist/tools/narrative/analyze.tool.js.map +1 -0
  955. package/dist/tools/narrative/index.d.ts +15 -0
  956. package/dist/tools/narrative/index.d.ts.map +1 -0
  957. package/dist/tools/narrative/index.js +83 -0
  958. package/dist/tools/narrative/index.js.map +1 -0
  959. package/dist/tools/narrative/schemas.d.ts +5553 -0
  960. package/dist/tools/narrative/schemas.d.ts.map +1 -0
  961. package/dist/tools/narrative/schemas.js +747 -0
  962. package/dist/tools/narrative/schemas.js.map +1 -0
  963. package/dist/tools/narrative/search.tool.d.ts +160 -0
  964. package/dist/tools/narrative/search.tool.d.ts.map +1 -0
  965. package/dist/tools/narrative/search.tool.js +434 -0
  966. package/dist/tools/narrative/search.tool.js.map +1 -0
  967. package/dist/tools/page/analyze.tool.d.ts +502 -0
  968. package/dist/tools/page/analyze.tool.d.ts.map +1 -0
  969. package/dist/tools/page/analyze.tool.js +875 -0
  970. package/dist/tools/page/analyze.tool.js.map +1 -0
  971. package/dist/tools/page/get-job-status.tool.d.ts +43 -0
  972. package/dist/tools/page/get-job-status.tool.d.ts.map +1 -0
  973. package/dist/tools/page/get-job-status.tool.js +178 -0
  974. package/dist/tools/page/get-job-status.tool.js.map +1 -0
  975. package/dist/tools/page/handlers/db-handler.d.ts +155 -0
  976. package/dist/tools/page/handlers/db-handler.d.ts.map +1 -0
  977. package/dist/tools/page/handlers/db-handler.js +368 -0
  978. package/dist/tools/page/handlers/db-handler.js.map +1 -0
  979. package/dist/tools/page/handlers/embedding-handler.d.ts +200 -0
  980. package/dist/tools/page/handlers/embedding-handler.d.ts.map +1 -0
  981. package/dist/tools/page/handlers/embedding-handler.js +541 -0
  982. package/dist/tools/page/handlers/embedding-handler.js.map +1 -0
  983. package/dist/tools/page/handlers/execution-status-tracker.d.ts +146 -0
  984. package/dist/tools/page/handlers/execution-status-tracker.d.ts.map +1 -0
  985. package/dist/tools/page/handlers/execution-status-tracker.js +348 -0
  986. package/dist/tools/page/handlers/execution-status-tracker.js.map +1 -0
  987. package/dist/tools/page/handlers/js-animation-handler.d.ts +197 -0
  988. package/dist/tools/page/handlers/js-animation-handler.d.ts.map +1 -0
  989. package/dist/tools/page/handlers/js-animation-handler.js +952 -0
  990. package/dist/tools/page/handlers/js-animation-handler.js.map +1 -0
  991. package/dist/tools/page/handlers/layout-handler.d.ts +31 -0
  992. package/dist/tools/page/handlers/layout-handler.d.ts.map +1 -0
  993. package/dist/tools/page/handlers/layout-handler.js +1181 -0
  994. package/dist/tools/page/handlers/layout-handler.js.map +1 -0
  995. package/dist/tools/page/handlers/motion-handler.d.ts +31 -0
  996. package/dist/tools/page/handlers/motion-handler.d.ts.map +1 -0
  997. package/dist/tools/page/handlers/motion-handler.js +940 -0
  998. package/dist/tools/page/handlers/motion-handler.js.map +1 -0
  999. package/dist/tools/page/handlers/narrative-handler.d.ts +23 -0
  1000. package/dist/tools/page/handlers/narrative-handler.d.ts.map +1 -0
  1001. package/dist/tools/page/handlers/narrative-handler.js +279 -0
  1002. package/dist/tools/page/handlers/narrative-handler.js.map +1 -0
  1003. package/dist/tools/page/handlers/phased-db-handler.d.ts +83 -0
  1004. package/dist/tools/page/handlers/phased-db-handler.d.ts.map +1 -0
  1005. package/dist/tools/page/handlers/phased-db-handler.js +120 -0
  1006. package/dist/tools/page/handlers/phased-db-handler.js.map +1 -0
  1007. package/dist/tools/page/handlers/phased-executor.d.ts +123 -0
  1008. package/dist/tools/page/handlers/phased-executor.d.ts.map +1 -0
  1009. package/dist/tools/page/handlers/phased-executor.js +205 -0
  1010. package/dist/tools/page/handlers/phased-executor.js.map +1 -0
  1011. package/dist/tools/page/handlers/quality-handler.d.ts +9 -0
  1012. package/dist/tools/page/handlers/quality-handler.d.ts.map +1 -0
  1013. package/dist/tools/page/handlers/quality-handler.js +100 -0
  1014. package/dist/tools/page/handlers/quality-handler.js.map +1 -0
  1015. package/dist/tools/page/handlers/result-builder.d.ts +105 -0
  1016. package/dist/tools/page/handlers/result-builder.d.ts.map +1 -0
  1017. package/dist/tools/page/handlers/result-builder.js +447 -0
  1018. package/dist/tools/page/handlers/result-builder.js.map +1 -0
  1019. package/dist/tools/page/handlers/retry-strategy.d.ts +106 -0
  1020. package/dist/tools/page/handlers/retry-strategy.d.ts.map +1 -0
  1021. package/dist/tools/page/handlers/retry-strategy.js +169 -0
  1022. package/dist/tools/page/handlers/retry-strategy.js.map +1 -0
  1023. package/dist/tools/page/handlers/sync-processing.d.ts +26 -0
  1024. package/dist/tools/page/handlers/sync-processing.d.ts.map +1 -0
  1025. package/dist/tools/page/handlers/sync-processing.js +1659 -0
  1026. package/dist/tools/page/handlers/sync-processing.js.map +1 -0
  1027. package/dist/tools/page/handlers/timeout-utils.d.ts +278 -0
  1028. package/dist/tools/page/handlers/timeout-utils.d.ts.map +1 -0
  1029. package/dist/tools/page/handlers/timeout-utils.js +600 -0
  1030. package/dist/tools/page/handlers/timeout-utils.js.map +1 -0
  1031. package/dist/tools/page/handlers/types.d.ts +1229 -0
  1032. package/dist/tools/page/handlers/types.d.ts.map +1 -0
  1033. package/dist/tools/page/handlers/types.js +21 -0
  1034. package/dist/tools/page/handlers/types.js.map +1 -0
  1035. package/dist/tools/page/handlers/video-handler.d.ts +11 -0
  1036. package/dist/tools/page/handlers/video-handler.d.ts.map +1 -0
  1037. package/dist/tools/page/handlers/video-handler.js +235 -0
  1038. package/dist/tools/page/handlers/video-handler.js.map +1 -0
  1039. package/dist/tools/page/handlers/webgl-animation-handler.d.ts +48 -0
  1040. package/dist/tools/page/handlers/webgl-animation-handler.d.ts.map +1 -0
  1041. package/dist/tools/page/handlers/webgl-animation-handler.js +237 -0
  1042. package/dist/tools/page/handlers/webgl-animation-handler.js.map +1 -0
  1043. package/dist/tools/page/handlers/webgl-detector.d.ts +184 -0
  1044. package/dist/tools/page/handlers/webgl-detector.d.ts.map +1 -0
  1045. package/dist/tools/page/handlers/webgl-detector.js +680 -0
  1046. package/dist/tools/page/handlers/webgl-detector.js.map +1 -0
  1047. package/dist/tools/page/handlers/webgl-domains.d.ts +133 -0
  1048. package/dist/tools/page/handlers/webgl-domains.d.ts.map +1 -0
  1049. package/dist/tools/page/handlers/webgl-domains.js +420 -0
  1050. package/dist/tools/page/handlers/webgl-domains.js.map +1 -0
  1051. package/dist/tools/page/handlers/webgl-pre-detector.d.ts +100 -0
  1052. package/dist/tools/page/handlers/webgl-pre-detector.d.ts.map +1 -0
  1053. package/dist/tools/page/handlers/webgl-pre-detector.js +248 -0
  1054. package/dist/tools/page/handlers/webgl-pre-detector.js.map +1 -0
  1055. package/dist/tools/page/index.d.ts +10 -0
  1056. package/dist/tools/page/index.d.ts.map +1 -0
  1057. package/dist/tools/page/index.js +84 -0
  1058. package/dist/tools/page/index.js.map +1 -0
  1059. package/dist/tools/page/input.schemas.d.ts +2223 -0
  1060. package/dist/tools/page/input.schemas.d.ts.map +1 -0
  1061. package/dist/tools/page/input.schemas.js +853 -0
  1062. package/dist/tools/page/input.schemas.js.map +1 -0
  1063. package/dist/tools/page/output.schemas.d.ts +26026 -0
  1064. package/dist/tools/page/output.schemas.d.ts.map +1 -0
  1065. package/dist/tools/page/output.schemas.js +1414 -0
  1066. package/dist/tools/page/output.schemas.js.map +1 -0
  1067. package/dist/tools/page/schemas.d.ts +10 -0
  1068. package/dist/tools/page/schemas.d.ts.map +1 -0
  1069. package/dist/tools/page/schemas.js +28 -0
  1070. package/dist/tools/page/schemas.js.map +1 -0
  1071. package/dist/tools/page/shared.schemas.d.ts +38 -0
  1072. package/dist/tools/page/shared.schemas.d.ts.map +1 -0
  1073. package/dist/tools/page/shared.schemas.js +69 -0
  1074. package/dist/tools/page/shared.schemas.js.map +1 -0
  1075. package/dist/tools/part/compare.tool.d.ts +106 -0
  1076. package/dist/tools/part/compare.tool.d.ts.map +1 -0
  1077. package/dist/tools/part/compare.tool.js +421 -0
  1078. package/dist/tools/part/compare.tool.js.map +1 -0
  1079. package/dist/tools/part/inspect.tool.d.ts +108 -0
  1080. package/dist/tools/part/inspect.tool.d.ts.map +1 -0
  1081. package/dist/tools/part/inspect.tool.js +279 -0
  1082. package/dist/tools/part/inspect.tool.js.map +1 -0
  1083. package/dist/tools/part/search.tool.d.ts +121 -0
  1084. package/dist/tools/part/search.tool.d.ts.map +1 -0
  1085. package/dist/tools/part/search.tool.js +381 -0
  1086. package/dist/tools/part/search.tool.js.map +1 -0
  1087. package/dist/tools/preference/get.tool.d.ts +74 -0
  1088. package/dist/tools/preference/get.tool.d.ts.map +1 -0
  1089. package/dist/tools/preference/get.tool.js +175 -0
  1090. package/dist/tools/preference/get.tool.js.map +1 -0
  1091. package/dist/tools/preference/hear.tool.d.ts +267 -0
  1092. package/dist/tools/preference/hear.tool.d.ts.map +1 -0
  1093. package/dist/tools/preference/hear.tool.js +268 -0
  1094. package/dist/tools/preference/hear.tool.js.map +1 -0
  1095. package/dist/tools/preference/index.d.ts +16 -0
  1096. package/dist/tools/preference/index.d.ts.map +1 -0
  1097. package/dist/tools/preference/index.js +43 -0
  1098. package/dist/tools/preference/index.js.map +1 -0
  1099. package/dist/tools/preference/reset.tool.d.ts +71 -0
  1100. package/dist/tools/preference/reset.tool.d.ts.map +1 -0
  1101. package/dist/tools/preference/reset.tool.js +205 -0
  1102. package/dist/tools/preference/reset.tool.js.map +1 -0
  1103. package/dist/tools/preference/schemas.d.ts +174 -0
  1104. package/dist/tools/preference/schemas.d.ts.map +1 -0
  1105. package/dist/tools/preference/schemas.js +142 -0
  1106. package/dist/tools/preference/schemas.js.map +1 -0
  1107. package/dist/tools/project-get.d.ts +42 -0
  1108. package/dist/tools/project-get.d.ts.map +1 -0
  1109. package/dist/tools/project-get.js +152 -0
  1110. package/dist/tools/project-get.js.map +1 -0
  1111. package/dist/tools/project-list.d.ts +66 -0
  1112. package/dist/tools/project-list.d.ts.map +1 -0
  1113. package/dist/tools/project-list.js +201 -0
  1114. package/dist/tools/project-list.js.map +1 -0
  1115. package/dist/tools/quality/batch-evaluate.tool.d.ts +101 -0
  1116. package/dist/tools/quality/batch-evaluate.tool.d.ts.map +1 -0
  1117. package/dist/tools/quality/batch-evaluate.tool.js +393 -0
  1118. package/dist/tools/quality/batch-evaluate.tool.js.map +1 -0
  1119. package/dist/tools/quality/evaluate-engine.d.ts +166 -0
  1120. package/dist/tools/quality/evaluate-engine.d.ts.map +1 -0
  1121. package/dist/tools/quality/evaluate-engine.js +1061 -0
  1122. package/dist/tools/quality/evaluate-engine.js.map +1 -0
  1123. package/dist/tools/quality/evaluate.tool.d.ts +286 -0
  1124. package/dist/tools/quality/evaluate.tool.d.ts.map +1 -0
  1125. package/dist/tools/quality/evaluate.tool.js +815 -0
  1126. package/dist/tools/quality/evaluate.tool.js.map +1 -0
  1127. package/dist/tools/quality/get-job-status.tool.d.ts +44 -0
  1128. package/dist/tools/quality/get-job-status.tool.d.ts.map +1 -0
  1129. package/dist/tools/quality/get-job-status.tool.js +291 -0
  1130. package/dist/tools/quality/get-job-status.tool.js.map +1 -0
  1131. package/dist/tools/quality/improvement-utils.d.ts +24 -0
  1132. package/dist/tools/quality/improvement-utils.d.ts.map +1 -0
  1133. package/dist/tools/quality/improvement-utils.js +307 -0
  1134. package/dist/tools/quality/improvement-utils.js.map +1 -0
  1135. package/dist/tools/quality/index.d.ts +11 -0
  1136. package/dist/tools/quality/index.d.ts.map +1 -0
  1137. package/dist/tools/quality/index.js +49 -0
  1138. package/dist/tools/quality/index.js.map +1 -0
  1139. package/dist/tools/quality/schemas.d.ts +14098 -0
  1140. package/dist/tools/quality/schemas.d.ts.map +1 -0
  1141. package/dist/tools/quality/schemas.js +950 -0
  1142. package/dist/tools/quality/schemas.js.map +1 -0
  1143. package/dist/tools/responsive/schemas.d.ts +156 -0
  1144. package/dist/tools/responsive/schemas.d.ts.map +1 -0
  1145. package/dist/tools/responsive/schemas.js +86 -0
  1146. package/dist/tools/responsive/schemas.js.map +1 -0
  1147. package/dist/tools/responsive/search.tool.d.ts +130 -0
  1148. package/dist/tools/responsive/search.tool.d.ts.map +1 -0
  1149. package/dist/tools/responsive/search.tool.js +324 -0
  1150. package/dist/tools/responsive/search.tool.js.map +1 -0
  1151. package/dist/tools/schemas/index.d.ts +10 -0
  1152. package/dist/tools/schemas/index.d.ts.map +1 -0
  1153. package/dist/tools/schemas/index.js +45 -0
  1154. package/dist/tools/schemas/index.js.map +1 -0
  1155. package/dist/tools/schemas/layout-schemas.d.ts +521 -0
  1156. package/dist/tools/schemas/layout-schemas.d.ts.map +1 -0
  1157. package/dist/tools/schemas/layout-schemas.js +281 -0
  1158. package/dist/tools/schemas/layout-schemas.js.map +1 -0
  1159. package/dist/tools/schemas/project-schemas.d.ts +417 -0
  1160. package/dist/tools/schemas/project-schemas.d.ts.map +1 -0
  1161. package/dist/tools/schemas/project-schemas.js +159 -0
  1162. package/dist/tools/schemas/project-schemas.js.map +1 -0
  1163. package/dist/tools/schemas/shared.d.ts +107 -0
  1164. package/dist/tools/schemas/shared.d.ts.map +1 -0
  1165. package/dist/tools/schemas/shared.js +150 -0
  1166. package/dist/tools/schemas/shared.js.map +1 -0
  1167. package/dist/tools/schemas/style-schemas.d.ts +114 -0
  1168. package/dist/tools/schemas/style-schemas.d.ts.map +1 -0
  1169. package/dist/tools/schemas/style-schemas.js +61 -0
  1170. package/dist/tools/schemas/style-schemas.js.map +1 -0
  1171. package/dist/tools/style-get-palette.d.ts +136 -0
  1172. package/dist/tools/style-get-palette.d.ts.map +1 -0
  1173. package/dist/tools/style-get-palette.js +259 -0
  1174. package/dist/tools/style-get-palette.js.map +1 -0
  1175. package/dist/tools/system-health.d.ts +255 -0
  1176. package/dist/tools/system-health.d.ts.map +1 -0
  1177. package/dist/tools/system-health.js +463 -0
  1178. package/dist/tools/system-health.js.map +1 -0
  1179. package/dist/transport.d.ts +29 -0
  1180. package/dist/transport.d.ts.map +1 -0
  1181. package/dist/transport.js +50 -0
  1182. package/dist/transport.js.map +1 -0
  1183. package/dist/types/creative/index.d.ts +8 -0
  1184. package/dist/types/creative/index.d.ts.map +1 -0
  1185. package/dist/types/creative/index.js +5 -0
  1186. package/dist/types/creative/index.js.map +1 -0
  1187. package/dist/types/creative/palette.d.ts +142 -0
  1188. package/dist/types/creative/palette.d.ts.map +1 -0
  1189. package/dist/types/creative/palette.js +5 -0
  1190. package/dist/types/creative/palette.js.map +1 -0
  1191. package/dist/types/reftrix-window.d.ts +124 -0
  1192. package/dist/types/reftrix-window.d.ts.map +1 -0
  1193. package/dist/types/reftrix-window.js +68 -0
  1194. package/dist/types/reftrix-window.js.map +1 -0
  1195. package/dist/utils/actionable-warning.d.ts +170 -0
  1196. package/dist/utils/actionable-warning.d.ts.map +1 -0
  1197. package/dist/utils/actionable-warning.js +818 -0
  1198. package/dist/utils/actionable-warning.js.map +1 -0
  1199. package/dist/utils/blank-image-detector.d.ts +22 -0
  1200. package/dist/utils/blank-image-detector.d.ts.map +1 -0
  1201. package/dist/utils/blank-image-detector.js +133 -0
  1202. package/dist/utils/blank-image-detector.js.map +1 -0
  1203. package/dist/utils/color.d.ts +203 -0
  1204. package/dist/utils/color.d.ts.map +1 -0
  1205. package/dist/utils/color.js +442 -0
  1206. package/dist/utils/color.js.map +1 -0
  1207. package/dist/utils/deprecation-warning.d.ts +43 -0
  1208. package/dist/utils/deprecation-warning.d.ts.map +1 -0
  1209. package/dist/utils/deprecation-warning.js +112 -0
  1210. package/dist/utils/deprecation-warning.js.map +1 -0
  1211. package/dist/utils/error-messages.d.ts +233 -0
  1212. package/dist/utils/error-messages.d.ts.map +1 -0
  1213. package/dist/utils/error-messages.js +721 -0
  1214. package/dist/utils/error-messages.js.map +1 -0
  1215. package/dist/utils/errors.d.ts +64 -0
  1216. package/dist/utils/errors.d.ts.map +1 -0
  1217. package/dist/utils/errors.js +82 -0
  1218. package/dist/utils/errors.js.map +1 -0
  1219. package/dist/utils/gpu-browser-args.d.ts +27 -0
  1220. package/dist/utils/gpu-browser-args.d.ts.map +1 -0
  1221. package/dist/utils/gpu-browser-args.js +42 -0
  1222. package/dist/utils/gpu-browser-args.js.map +1 -0
  1223. package/dist/utils/html-sanitizer.d.ts +116 -0
  1224. package/dist/utils/html-sanitizer.d.ts.map +1 -0
  1225. package/dist/utils/html-sanitizer.js +630 -0
  1226. package/dist/utils/html-sanitizer.js.map +1 -0
  1227. package/dist/utils/logger.d.ts +141 -0
  1228. package/dist/utils/logger.d.ts.map +1 -0
  1229. package/dist/utils/logger.js +249 -0
  1230. package/dist/utils/logger.js.map +1 -0
  1231. package/dist/utils/mcp-response.d.ts +317 -0
  1232. package/dist/utils/mcp-response.d.ts.map +1 -0
  1233. package/dist/utils/mcp-response.js +270 -0
  1234. package/dist/utils/mcp-response.js.map +1 -0
  1235. package/dist/utils/path-security.d.ts +73 -0
  1236. package/dist/utils/path-security.d.ts.map +1 -0
  1237. package/dist/utils/path-security.js +389 -0
  1238. package/dist/utils/path-security.js.map +1 -0
  1239. package/dist/utils/prisma-wrapper-factory.d.ts +152 -0
  1240. package/dist/utils/prisma-wrapper-factory.d.ts.map +1 -0
  1241. package/dist/utils/prisma-wrapper-factory.js +124 -0
  1242. package/dist/utils/prisma-wrapper-factory.js.map +1 -0
  1243. package/dist/utils/safe-parse-int.d.ts +41 -0
  1244. package/dist/utils/safe-parse-int.d.ts.map +1 -0
  1245. package/dist/utils/safe-parse-int.js +49 -0
  1246. package/dist/utils/safe-parse-int.js.map +1 -0
  1247. package/dist/utils/url-normalizer.d.ts +38 -0
  1248. package/dist/utils/url-normalizer.d.ts.map +1 -0
  1249. package/dist/utils/url-normalizer.js +103 -0
  1250. package/dist/utils/url-normalizer.js.map +1 -0
  1251. package/dist/utils/url-validator.d.ts +86 -0
  1252. package/dist/utils/url-validator.d.ts.map +1 -0
  1253. package/dist/utils/url-validator.js +533 -0
  1254. package/dist/utils/url-validator.js.map +1 -0
  1255. package/dist/workers/batch-quality-worker.d.ts +87 -0
  1256. package/dist/workers/batch-quality-worker.d.ts.map +1 -0
  1257. package/dist/workers/batch-quality-worker.js +300 -0
  1258. package/dist/workers/batch-quality-worker.js.map +1 -0
  1259. package/dist/workers/page-analyze-worker.d.ts +63 -0
  1260. package/dist/workers/page-analyze-worker.d.ts.map +1 -0
  1261. package/dist/workers/page-analyze-worker.js +872 -0
  1262. package/dist/workers/page-analyze-worker.js.map +1 -0
  1263. package/dist/workers/phases/phase-0-ingest.d.ts +42 -0
  1264. package/dist/workers/phases/phase-0-ingest.d.ts.map +1 -0
  1265. package/dist/workers/phases/phase-0-ingest.js +197 -0
  1266. package/dist/workers/phases/phase-0-ingest.js.map +1 -0
  1267. package/dist/workers/phases/phase-1-layout.d.ts +63 -0
  1268. package/dist/workers/phases/phase-1-layout.d.ts.map +1 -0
  1269. package/dist/workers/phases/phase-1-layout.js +362 -0
  1270. package/dist/workers/phases/phase-1-layout.js.map +1 -0
  1271. package/dist/workers/phases/phase-2-motion.d.ts +93 -0
  1272. package/dist/workers/phases/phase-2-motion.d.ts.map +1 -0
  1273. package/dist/workers/phases/phase-2-motion.js +408 -0
  1274. package/dist/workers/phases/phase-2-motion.js.map +1 -0
  1275. package/dist/workers/phases/phase-3-quality.d.ts +61 -0
  1276. package/dist/workers/phases/phase-3-quality.d.ts.map +1 -0
  1277. package/dist/workers/phases/phase-3-quality.js +191 -0
  1278. package/dist/workers/phases/phase-3-quality.js.map +1 -0
  1279. package/dist/workers/phases/phase-4-narrative.d.ts +37 -0
  1280. package/dist/workers/phases/phase-4-narrative.d.ts.map +1 -0
  1281. package/dist/workers/phases/phase-4-narrative.js +309 -0
  1282. package/dist/workers/phases/phase-4-narrative.js.map +1 -0
  1283. package/dist/workers/phases/phase-5-embedding.d.ts +56 -0
  1284. package/dist/workers/phases/phase-5-embedding.d.ts.map +1 -0
  1285. package/dist/workers/phases/phase-5-embedding.js +1350 -0
  1286. package/dist/workers/phases/phase-5-embedding.js.map +1 -0
  1287. package/dist/workers/phases/types.d.ts +411 -0
  1288. package/dist/workers/phases/types.d.ts.map +1 -0
  1289. package/dist/workers/phases/types.js +540 -0
  1290. package/dist/workers/phases/types.js.map +1 -0
  1291. package/package.json +117 -0
  1292. package/src/api/health.ts +372 -0
  1293. package/src/config/index.ts +12 -0
  1294. package/src/config/redis.ts +280 -0
  1295. package/src/index.ts +360 -0
  1296. package/src/lib/index.ts +9 -0
  1297. package/src/lib/project-context.ts +109 -0
  1298. package/src/middleware/args-type-coercion.ts +220 -0
  1299. package/src/middleware/auth.ts +558 -0
  1300. package/src/middleware/index.ts +56 -0
  1301. package/src/middleware/light-response-controller.ts +723 -0
  1302. package/src/middleware/response-size-warning.ts +196 -0
  1303. package/src/queues/batch-quality-queue.ts +580 -0
  1304. package/src/queues/index.ts +13 -0
  1305. package/src/queues/page-analyze-queue.ts +472 -0
  1306. package/src/router.ts +343 -0
  1307. package/src/schemas/creative/index.ts +34 -0
  1308. package/src/schemas/creative/palette.schema.ts +191 -0
  1309. package/src/schemas/mood-brandtone-filters.ts +306 -0
  1310. package/src/scripts/backfill-embeddings.ts +454 -0
  1311. package/src/scripts/check-embedding-coverage.ts +119 -0
  1312. package/src/scripts/start-workers.ts +560 -0
  1313. package/src/server.ts +290 -0
  1314. package/src/services/background/background-design-db.service.ts +206 -0
  1315. package/src/services/background/background-design-detector.service.ts +1442 -0
  1316. package/src/services/background/background-design-embedding.service.ts +599 -0
  1317. package/src/services/background-search.service.ts +372 -0
  1318. package/src/services/backup-service.ts +441 -0
  1319. package/src/services/brief/brief-parser-service.ts +435 -0
  1320. package/src/services/brief/schemas/brief-parser-schemas.ts +138 -0
  1321. package/src/services/browser-process-manager.ts +334 -0
  1322. package/src/services/cache.ts +297 -0
  1323. package/src/services/checksum-service.ts +293 -0
  1324. package/src/services/css-analysis-cache.service.ts +547 -0
  1325. package/src/services/database-dumper.service.ts +675 -0
  1326. package/src/services/embedding-backfill.service.ts +1055 -0
  1327. package/src/services/embedding-validation.service.ts +194 -0
  1328. package/src/services/encryption-service.ts +433 -0
  1329. package/src/services/external-css-fetcher.ts +872 -0
  1330. package/src/services/gpu-resource-manager.ts +615 -0
  1331. package/src/services/index.ts +169 -0
  1332. package/src/services/layout/component-splitter.ts +656 -0
  1333. package/src/services/layout/html-to-jsx-converter.ts +591 -0
  1334. package/src/services/layout/semantic-html-converter.ts +293 -0
  1335. package/src/services/layout/style-to-tailwind-mapper.ts +1530 -0
  1336. package/src/services/layout-embedding.service.ts +1552 -0
  1337. package/src/services/layout-generate-code-service-export.ts +109 -0
  1338. package/src/services/layout-search-service-export.ts +55 -0
  1339. package/src/services/layout-search.service.ts +933 -0
  1340. package/src/services/layout-to-code.service.ts +1631 -0
  1341. package/src/services/metrics-collector.ts +473 -0
  1342. package/src/services/ml/mood-brandtone-embedding.service.ts +1115 -0
  1343. package/src/services/motion/analyzers/color-change.analyzer.ts +935 -0
  1344. package/src/services/motion/analyzers/frame-diff.analyzer.ts +372 -0
  1345. package/src/services/motion/analyzers/layout-shift.detector.ts +296 -0
  1346. package/src/services/motion/analyzers/motion-vector.estimator.ts +698 -0
  1347. package/src/services/motion/analyzers/webgl-motion-analyzer.ts +700 -0
  1348. package/src/services/motion/animation-metrics-collector.service.ts +726 -0
  1349. package/src/services/motion/cls-calculator.service.ts +519 -0
  1350. package/src/services/motion/existing-animation-detector.service.ts +751 -0
  1351. package/src/services/motion/fade-detector.service.ts +383 -0
  1352. package/src/services/motion/frame-analysis-save.helper.ts +333 -0
  1353. package/src/services/motion/frame-capture.service.ts +654 -0
  1354. package/src/services/motion/frame-embedding.service.ts +1419 -0
  1355. package/src/services/motion/frame-image-analysis.service.ts +1271 -0
  1356. package/src/services/motion/frame-image-analyzer.adapter.ts +747 -0
  1357. package/src/services/motion/frame-worker-pool.service.ts +519 -0
  1358. package/src/services/motion/infrastructure/frame-loader.ts +450 -0
  1359. package/src/services/motion/js-animation-detector.ts +1563 -0
  1360. package/src/services/motion/js-animation-embedding.service.ts +423 -0
  1361. package/src/services/motion/js-animation-search.service.ts +715 -0
  1362. package/src/services/motion/motion-db.service.ts +952 -0
  1363. package/src/services/motion/three-js-scene-extractor.ts +1556 -0
  1364. package/src/services/motion/types.ts +820 -0
  1365. package/src/services/motion/visual-category-classifier.ts +1426 -0
  1366. package/src/services/motion/webgl-animation-categorizer.ts +761 -0
  1367. package/src/services/motion/webgl-animation-detector.service.ts +772 -0
  1368. package/src/services/motion/webgl-animation-embedding.service.ts +558 -0
  1369. package/src/services/motion-detect-service-export.ts +300 -0
  1370. package/src/services/motion-persistence.service.ts +541 -0
  1371. package/src/services/motion-search-service.ts +38 -0
  1372. package/src/services/motion-search.service.ts +1159 -0
  1373. package/src/services/narrative/analyzers/layout-structure.analyzer.ts +628 -0
  1374. package/src/services/narrative/analyzers/worldview.analyzer.ts +639 -0
  1375. package/src/services/narrative/generators/confidence-calculator.ts +419 -0
  1376. package/src/services/narrative/generators/text-representation.generator.ts +362 -0
  1377. package/src/services/narrative/index.ts +72 -0
  1378. package/src/services/narrative/narrative-analysis.service.ts +610 -0
  1379. package/src/services/narrative/narrative-search.service.ts +704 -0
  1380. package/src/services/narrative/types/narrative.types.ts +451 -0
  1381. package/src/services/orphaned-job-utils.ts +160 -0
  1382. package/src/services/page/css-animation-parser.service.ts +650 -0
  1383. package/src/services/page/fallback-analyzer.service.ts +435 -0
  1384. package/src/services/page/frame-analyzer.service.ts +824 -0
  1385. package/src/services/page/layout-analyzer.service.ts +2534 -0
  1386. package/src/services/page/motion-category-classifier.service.ts +463 -0
  1387. package/src/services/page/motion-detector.service.ts +430 -0
  1388. package/src/services/page/motion-performance-analyzer.service.ts +390 -0
  1389. package/src/services/page/playwright-crawler.service.ts +478 -0
  1390. package/src/services/page/quality-evaluator.service.ts +1473 -0
  1391. package/src/services/page/runtime-animation-detector.service.ts +743 -0
  1392. package/src/services/page/section-postprocessor.service.ts +874 -0
  1393. package/src/services/page/video-recorder.service.ts +516 -0
  1394. package/src/services/page/webgl-detector.service.ts +361 -0
  1395. package/src/services/page-analyze-service.ts +83 -0
  1396. package/src/services/page-ingest-adapter.ts +2256 -0
  1397. package/src/services/palette-service-export.ts +50 -0
  1398. package/src/services/part/index.ts +81 -0
  1399. package/src/services/part/part-backfill.service.ts +308 -0
  1400. package/src/services/part/part-bbox-playwright.service.ts +502 -0
  1401. package/src/services/part/part-db.service.ts +121 -0
  1402. package/src/services/part/part-embedding-db.service.ts +184 -0
  1403. package/src/services/part/part-embedding.service.ts +406 -0
  1404. package/src/services/part/part-extraction.service.ts +612 -0
  1405. package/src/services/part/part-search.service.ts +806 -0
  1406. package/src/services/part/schemas.ts +194 -0
  1407. package/src/services/part/section-screenshot-fallback.service.ts +644 -0
  1408. package/src/services/part/types.ts +299 -0
  1409. package/src/services/persistent-cache.ts +760 -0
  1410. package/src/services/preference-profile.service.ts +862 -0
  1411. package/src/services/preference-rerank.helper.ts +549 -0
  1412. package/src/services/production-guard.ts +423 -0
  1413. package/src/services/project-context-analyzer.ts +915 -0
  1414. package/src/services/quality/axe-accessibility.service.ts +253 -0
  1415. package/src/services/quality/axe-core-shared.ts +203 -0
  1416. package/src/services/quality/benchmark.service.ts +657 -0
  1417. package/src/services/quality/content-gap-detector.service.ts +485 -0
  1418. package/src/services/quality/index.ts +45 -0
  1419. package/src/services/quality/pattern-matcher.service.ts +941 -0
  1420. package/src/services/quality/playwright-axe.service.ts +343 -0
  1421. package/src/services/quality/quality-evaluate.service.interface.ts +262 -0
  1422. package/src/services/quality/visual-design-analyzer.service.ts +918 -0
  1423. package/src/services/quality-evaluate-service-export.ts +268 -0
  1424. package/src/services/quality-search.service.ts +406 -0
  1425. package/src/services/query-analyzer.ts +306 -0
  1426. package/src/services/query-context-analyzer.ts +843 -0
  1427. package/src/services/queue-cleanup.service.ts +376 -0
  1428. package/src/services/responsive/difference-detector.service.ts +647 -0
  1429. package/src/services/responsive/index.ts +64 -0
  1430. package/src/services/responsive/multi-viewport-capture.service.ts +943 -0
  1431. package/src/services/responsive/responsive-analysis-embedding.service.ts +413 -0
  1432. package/src/services/responsive/responsive-analysis.service.ts +325 -0
  1433. package/src/services/responsive/responsive-persistence.service.ts +133 -0
  1434. package/src/services/responsive/responsive-quality-evaluator.service.ts +515 -0
  1435. package/src/services/responsive/shared-browser-manager.ts +118 -0
  1436. package/src/services/responsive/types.ts +387 -0
  1437. package/src/services/responsive/viewport-diff.service.ts +236 -0
  1438. package/src/services/responsive-search.service.ts +230 -0
  1439. package/src/services/search/mood-brandtone-search.service.ts +400 -0
  1440. package/src/services/search-performance.service.ts +252 -0
  1441. package/src/services/section-screenshot.service.ts +581 -0
  1442. package/src/services/service-client.ts +643 -0
  1443. package/src/services/service-initializer.ts +1386 -0
  1444. package/src/services/storage/index.ts +15 -0
  1445. package/src/services/storage/local-storage.provider.ts +370 -0
  1446. package/src/services/style/index.ts +10 -0
  1447. package/src/services/style/palette-service.ts +655 -0
  1448. package/src/services/style/prisma-palette-repository.ts +216 -0
  1449. package/src/services/vision/brandtone.analyzer.ts +371 -0
  1450. package/src/services/vision/hardware-detector.ts +436 -0
  1451. package/src/services/vision/image-optimizer.ts +377 -0
  1452. package/src/services/vision/index.ts +131 -0
  1453. package/src/services/vision/llama-vision-adapter.ts +526 -0
  1454. package/src/services/vision/mcp-progress-adapter.ts +221 -0
  1455. package/src/services/vision/mood.analyzer.ts +332 -0
  1456. package/src/services/vision/ollama-readiness-probe.ts +271 -0
  1457. package/src/services/vision/ollama-vision-client.ts +631 -0
  1458. package/src/services/vision/progress-reporter.ts +377 -0
  1459. package/src/services/vision/scroll-vision-capture.service.ts +409 -0
  1460. package/src/services/vision/scroll-vision-persistence.service.ts +216 -0
  1461. package/src/services/vision/scroll-vision.analyzer.ts +416 -0
  1462. package/src/services/vision/theme.analyzer.ts +443 -0
  1463. package/src/services/vision/timeout-calculator.ts +155 -0
  1464. package/src/services/vision/vision-fallback.service.ts +368 -0
  1465. package/src/services/vision/vision.cache.ts +332 -0
  1466. package/src/services/vision/vision.errors.ts +186 -0
  1467. package/src/services/vision/vision.prompts.ts +298 -0
  1468. package/src/services/vision/vram-utils.ts +80 -0
  1469. package/src/services/vision-adapter/index.ts +71 -0
  1470. package/src/services/vision-adapter/interface.ts +911 -0
  1471. package/src/services/vision-adapter/llama-vision.adapter.ts +2254 -0
  1472. package/src/services/vision-adapter/llama-vision.prompts.ts +242 -0
  1473. package/src/services/vision-adapter/llama-vision.types.ts +103 -0
  1474. package/src/services/vision-adapter/local.adapter.ts +1079 -0
  1475. package/src/services/vision-adapter/mock.adapter.ts +978 -0
  1476. package/src/services/vision-embedding-search.service.ts +1071 -0
  1477. package/src/services/vision-embedding.service.ts +631 -0
  1478. package/src/services/visual/css-variable-extractor.service.ts +655 -0
  1479. package/src/services/visual/typography-extractor.service.ts +767 -0
  1480. package/src/services/visual-extractor/color-extractor.service.ts +397 -0
  1481. package/src/services/visual-extractor/density-calculator.service.ts +616 -0
  1482. package/src/services/visual-extractor/gradient-detector.service.ts +1794 -0
  1483. package/src/services/visual-extractor/image-utils.ts +333 -0
  1484. package/src/services/visual-extractor/pixel-theme-detector.service.ts +487 -0
  1485. package/src/services/visual-extractor/theme-detector.service.ts +697 -0
  1486. package/src/services/visual-extractor/visual-decoration-detector.service.ts +800 -0
  1487. package/src/services/visual-extractor/visual-feature-merger.service.ts +831 -0
  1488. package/src/services/web-page.service.ts +275 -0
  1489. package/src/services/worker-constants.ts +52 -0
  1490. package/src/services/worker-db-save.service.ts +1098 -0
  1491. package/src/services/worker-memory-monitor.service.ts +126 -0
  1492. package/src/services/worker-memory-profile.ts +336 -0
  1493. package/src/services/worker-stall-recovery.service.ts +486 -0
  1494. package/src/services/worker-supervisor.service.ts +746 -0
  1495. package/src/tools/background/schemas.ts +93 -0
  1496. package/src/tools/background/search.tool.ts +484 -0
  1497. package/src/tools/brief/index.ts +76 -0
  1498. package/src/tools/brief/schemas.ts +247 -0
  1499. package/src/tools/brief/validate.handler.ts +278 -0
  1500. package/src/tools/brief/validate.service.ts +409 -0
  1501. package/src/tools/common/error-codes.ts +116 -0
  1502. package/src/tools/common/index.ts +25 -0
  1503. package/src/tools/index.ts +723 -0
  1504. package/src/tools/layout/batch-ingest.tool.ts +466 -0
  1505. package/src/tools/layout/index.ts +72 -0
  1506. package/src/tools/layout/ingest.tool.ts +1564 -0
  1507. package/src/tools/layout/inspect/index.ts +49 -0
  1508. package/src/tools/layout/inspect/inspect.schemas.ts +518 -0
  1509. package/src/tools/layout/inspect/inspect.tool.ts +844 -0
  1510. package/src/tools/layout/inspect/inspect.utils.ts +1278 -0
  1511. package/src/tools/layout/inspect/visual-extractors.schemas.ts +642 -0
  1512. package/src/tools/layout/inspect/visual-extractors.utils.ts +328 -0
  1513. package/src/tools/layout/schemas.ts +1670 -0
  1514. package/src/tools/layout/search.tool.ts +2088 -0
  1515. package/src/tools/layout/to-code.tool.ts +503 -0
  1516. package/src/tools/motion/analyze-frames.handler.ts +388 -0
  1517. package/src/tools/motion/analyze-frames.schema.ts +484 -0
  1518. package/src/tools/motion/css-mode-handler.ts +939 -0
  1519. package/src/tools/motion/detect.schemas.ts +2005 -0
  1520. package/src/tools/motion/detect.tool.ts +1914 -0
  1521. package/src/tools/motion/detection-modes.ts +480 -0
  1522. package/src/tools/motion/di-factories.ts +767 -0
  1523. package/src/tools/motion/index.ts +229 -0
  1524. package/src/tools/motion/pattern-converter.ts +619 -0
  1525. package/src/tools/motion/schemas.ts +12 -0
  1526. package/src/tools/motion/search.schemas.ts +694 -0
  1527. package/src/tools/motion/search.tool.ts +2518 -0
  1528. package/src/tools/motion/shared.schemas.ts +414 -0
  1529. package/src/tools/narrative/PAGE_ANALYZE_INTEGRATION.md +249 -0
  1530. package/src/tools/narrative/analyze.tool.ts +460 -0
  1531. package/src/tools/narrative/index.ts +133 -0
  1532. package/src/tools/narrative/schemas.ts +886 -0
  1533. package/src/tools/narrative/search.tool.ts +536 -0
  1534. package/src/tools/page/analyze.tool.ts +992 -0
  1535. package/src/tools/page/get-job-status.tool.ts +217 -0
  1536. package/src/tools/page/handlers/db-handler.ts +638 -0
  1537. package/src/tools/page/handlers/embedding-handler.ts +813 -0
  1538. package/src/tools/page/handlers/execution-status-tracker.ts +461 -0
  1539. package/src/tools/page/handlers/js-animation-handler.ts +1229 -0
  1540. package/src/tools/page/handlers/layout-handler.ts +1423 -0
  1541. package/src/tools/page/handlers/motion-handler.ts +1156 -0
  1542. package/src/tools/page/handlers/narrative-handler.ts +345 -0
  1543. package/src/tools/page/handlers/phased-db-handler.ts +186 -0
  1544. package/src/tools/page/handlers/phased-executor.ts +356 -0
  1545. package/src/tools/page/handlers/quality-handler.ts +114 -0
  1546. package/src/tools/page/handlers/result-builder.ts +551 -0
  1547. package/src/tools/page/handlers/retry-strategy.ts +223 -0
  1548. package/src/tools/page/handlers/sync-processing.ts +2084 -0
  1549. package/src/tools/page/handlers/timeout-utils.ts +835 -0
  1550. package/src/tools/page/handlers/types.ts +1333 -0
  1551. package/src/tools/page/handlers/video-handler.ts +299 -0
  1552. package/src/tools/page/handlers/webgl-animation-handler.ts +309 -0
  1553. package/src/tools/page/handlers/webgl-detector.ts +833 -0
  1554. package/src/tools/page/handlers/webgl-domains.ts +482 -0
  1555. package/src/tools/page/handlers/webgl-pre-detector.ts +308 -0
  1556. package/src/tools/page/index.ts +142 -0
  1557. package/src/tools/page/input.schemas.ts +945 -0
  1558. package/src/tools/page/output.schemas.ts +1636 -0
  1559. package/src/tools/page/schemas.ts +12 -0
  1560. package/src/tools/page/shared.schemas.ts +86 -0
  1561. package/src/tools/part/compare.tool.ts +542 -0
  1562. package/src/tools/part/inspect.tool.ts +400 -0
  1563. package/src/tools/part/search.tool.ts +470 -0
  1564. package/src/tools/preference/get.tool.ts +238 -0
  1565. package/src/tools/preference/hear.tool.ts +504 -0
  1566. package/src/tools/preference/index.ts +65 -0
  1567. package/src/tools/preference/reset.tool.ts +264 -0
  1568. package/src/tools/preference/schemas.ts +161 -0
  1569. package/src/tools/project-get.ts +194 -0
  1570. package/src/tools/project-list.ts +240 -0
  1571. package/src/tools/quality/batch-evaluate.tool.ts +480 -0
  1572. package/src/tools/quality/evaluate-engine.ts +1329 -0
  1573. package/src/tools/quality/evaluate.tool.ts +981 -0
  1574. package/src/tools/quality/get-job-status.tool.ts +344 -0
  1575. package/src/tools/quality/improvement-utils.ts +361 -0
  1576. package/src/tools/quality/index.ts +49 -0
  1577. package/src/tools/quality/schemas.ts +1114 -0
  1578. package/src/tools/responsive/schemas.ts +103 -0
  1579. package/src/tools/responsive/search.tool.ts +421 -0
  1580. package/src/tools/schemas/index.ts +67 -0
  1581. package/src/tools/schemas/layout-schemas.ts +334 -0
  1582. package/src/tools/schemas/project-schemas.ts +233 -0
  1583. package/src/tools/schemas/shared.ts +176 -0
  1584. package/src/tools/schemas/style-schemas.ts +74 -0
  1585. package/src/tools/style-get-palette.ts +344 -0
  1586. package/src/tools/system-health.ts +729 -0
  1587. package/src/transport.ts +54 -0
  1588. package/src/types/creative/index.ts +22 -0
  1589. package/src/types/creative/palette.ts +197 -0
  1590. package/src/types/reftrix-window.ts +175 -0
  1591. package/src/utils/actionable-warning.ts +997 -0
  1592. package/src/utils/blank-image-detector.ts +143 -0
  1593. package/src/utils/color.ts +534 -0
  1594. package/src/utils/deprecation-warning.ts +146 -0
  1595. package/src/utils/error-messages.ts +965 -0
  1596. package/src/utils/errors.ts +95 -0
  1597. package/src/utils/gpu-browser-args.ts +41 -0
  1598. package/src/utils/html-sanitizer.ts +753 -0
  1599. package/src/utils/logger.ts +292 -0
  1600. package/src/utils/mcp-response.ts +397 -0
  1601. package/src/utils/path-security.ts +412 -0
  1602. package/src/utils/prisma-wrapper-factory.ts +283 -0
  1603. package/src/utils/safe-parse-int.ts +74 -0
  1604. package/src/utils/url-normalizer.ts +115 -0
  1605. package/src/utils/url-validator.ts +615 -0
  1606. package/src/workers/batch-quality-worker.ts +419 -0
  1607. package/src/workers/page-analyze-worker.ts +1056 -0
  1608. package/src/workers/phases/phase-0-ingest.ts +249 -0
  1609. package/src/workers/phases/phase-1-layout.ts +522 -0
  1610. package/src/workers/phases/phase-2-motion.ts +674 -0
  1611. package/src/workers/phases/phase-3-quality.ts +293 -0
  1612. package/src/workers/phases/phase-4-narrative.ts +409 -0
  1613. package/src/workers/phases/phase-5-embedding.ts +1816 -0
  1614. package/src/workers/phases/types.ts +909 -0
@@ -0,0 +1,2001 @@
1
+ "use strict";
2
+ // SPDX-FileCopyrightText: 2026 TKMD and Reftrix Contributors
3
+ // SPDX-License-Identifier: AGPL-3.0-only
4
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
5
+ if (k2 === undefined) k2 = k;
6
+ var desc = Object.getOwnPropertyDescriptor(m, k);
7
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
8
+ desc = { enumerable: true, get: function() { return m[k]; } };
9
+ }
10
+ Object.defineProperty(o, k2, desc);
11
+ }) : (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ o[k2] = m[k];
14
+ }));
15
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
16
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
17
+ }) : function(o, v) {
18
+ o["default"] = v;
19
+ });
20
+ var __importStar = (this && this.__importStar) || (function () {
21
+ var ownKeys = function(o) {
22
+ ownKeys = Object.getOwnPropertyNames || function (o) {
23
+ var ar = [];
24
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
25
+ return ar;
26
+ };
27
+ return ownKeys(o);
28
+ };
29
+ return function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
36
+ })();
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.LayoutAnalyzerService = void 0;
39
+ exports.applyComputedStylesToHtml = applyComputedStylesToHtml;
40
+ exports.findMatchingComputedStyles = findMatchingComputedStyles;
41
+ exports.getLayoutAnalyzerService = getLayoutAnalyzerService;
42
+ exports.resetLayoutAnalyzerService = resetLayoutAnalyzerService;
43
+ /**
44
+ * Layout Analyzer Service
45
+ *
46
+ * Cheerioを使用したレイアウト解析サービス
47
+ * @reftrixmcp/webdesign-core の SectionDetector を活用
48
+ *
49
+ * 機能:
50
+ * - セクション検出(セマンティック要素、class/id名ベース)
51
+ * - グリッド/フレックスレイアウト検出
52
+ * - タイポグラフィ解析
53
+ * - 色抽出
54
+ *
55
+ * @module services/page/layout-analyzer.service
56
+ */
57
+ const webdesign_core_1 = require("@reftrixmcp/webdesign-core");
58
+ const cheerio = __importStar(require("cheerio"));
59
+ const uuid_1 = require("uuid");
60
+ const logger_1 = require("../../utils/logger");
61
+ const external_css_fetcher_1 = require("../external-css-fetcher");
62
+ // =====================================================
63
+ // Computed Styles インライン適用関数
64
+ // =====================================================
65
+ /**
66
+ * フィルタリング対象外のスタイルプロパティ値
67
+ * これらの値は意味がないため除外する
68
+ */
69
+ const FILTER_OUT_VALUES = [
70
+ "none",
71
+ "normal",
72
+ "auto",
73
+ "initial",
74
+ "inherit",
75
+ "unset",
76
+ "0px",
77
+ "rgba(0, 0, 0, 0)",
78
+ "transparent",
79
+ "matrix(1, 0, 0, 1, 0, 0)",
80
+ ];
81
+ /**
82
+ * camelCase を kebab-case に変換
83
+ *
84
+ * @param str - camelCase文字列
85
+ * @returns kebab-case文字列
86
+ */
87
+ function camelToKebab(str) {
88
+ return str.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`);
89
+ }
90
+ /**
91
+ * ElementComputedStyles を CSS文字列に変換
92
+ *
93
+ * 意味のない値(none, normal, auto等)はフィルタリングして除外する
94
+ *
95
+ * @param styles - ElementComputedStyles オブジェクト
96
+ * @returns インラインスタイル用CSS文字列
97
+ */
98
+ function stylesToString(styles) {
99
+ return Object.entries(styles)
100
+ .filter(([_, value]) => {
101
+ // 値が存在しない場合は除外
102
+ if (!value || value.trim().length === 0) {
103
+ return false;
104
+ }
105
+ // フィルタリング対象の値を除外
106
+ if (FILTER_OUT_VALUES.includes(value)) {
107
+ return false;
108
+ }
109
+ return true;
110
+ })
111
+ .map(([key, value]) => `${camelToKebab(key)}: ${value}`)
112
+ .join("; ");
113
+ }
114
+ /**
115
+ * セクションHTMLに computed styles をインラインスタイルとして適用
116
+ *
117
+ * セクションのルート要素と子要素に対して、取得した computed styles を
118
+ * style 属性として適用し、外部CSSなしで見た目を再現可能にする
119
+ *
120
+ * @param htmlSnippet - 対象のHTMLスニペット
121
+ * @param computedStyles - 対応する ComputedStyleInfo(ルート要素 + 子要素のスタイル)
122
+ * @returns computed styles が適用されたHTML
123
+ */
124
+ function applyComputedStylesToHtml(htmlSnippet, computedStyles) {
125
+ if (!htmlSnippet || !computedStyles) {
126
+ return htmlSnippet;
127
+ }
128
+ try {
129
+ const $ = cheerio.load(htmlSnippet, {
130
+ xmlMode: false,
131
+ });
132
+ // 1. ルート要素にスタイルを適用
133
+ const rootElement = $("body > *").first();
134
+ if (rootElement.length > 0 && computedStyles.styles) {
135
+ const rootStyleStr = stylesToString(computedStyles.styles);
136
+ if (rootStyleStr.length > 0) {
137
+ // 既存のstyle属性があれば結合、なければ設定
138
+ const existingStyle = rootElement.attr("style") || "";
139
+ const newStyle = existingStyle ? `${existingStyle}; ${rootStyleStr}` : rootStyleStr;
140
+ rootElement.attr("style", newStyle);
141
+ }
142
+ }
143
+ // 2. 子要素にスタイルを適用
144
+ if (computedStyles.children && computedStyles.children.length > 0) {
145
+ for (const child of computedStyles.children) {
146
+ applyChildStyles($, child);
147
+ }
148
+ }
149
+ // <html><head></head><body>...</body></html> の body 内のみを返す
150
+ const result = $("body").html();
151
+ return result || htmlSnippet;
152
+ }
153
+ catch (error) {
154
+ if ((0, logger_1.isDevelopment)()) {
155
+ logger_1.logger.warn("[LayoutAnalyzerService] Failed to apply computed styles to HTML", {
156
+ error: error instanceof Error ? error.message : "Unknown error",
157
+ });
158
+ }
159
+ // エラー時は元のHTMLをそのまま返す
160
+ return htmlSnippet;
161
+ }
162
+ }
163
+ /**
164
+ * 子要素に computed styles を適用
165
+ *
166
+ * @param $ - CheerioAPI
167
+ * @param child - 子要素のスタイル情報
168
+ */
169
+ function applyChildStyles($, child) {
170
+ if (!child.styles) {
171
+ return;
172
+ }
173
+ const styleStr = stylesToString(child.styles);
174
+ if (styleStr.length === 0) {
175
+ return;
176
+ }
177
+ // セレクタまたはパスを使って要素を特定
178
+ let elements;
179
+ // 1. セレクタがあればそれを使用
180
+ if (child.selector && child.selector.length > 0) {
181
+ try {
182
+ elements = $(child.selector);
183
+ }
184
+ catch {
185
+ // セレクタが無効な場合はパスにフォールバック
186
+ elements = $();
187
+ }
188
+ }
189
+ else if (child.path && child.path.length > 0) {
190
+ // 2. パスを使用(例: "div > h1")
191
+ try {
192
+ elements = $(child.path);
193
+ }
194
+ catch {
195
+ elements = $();
196
+ }
197
+ }
198
+ else {
199
+ // 3. タグ名とクラス名で特定
200
+ const tagName = child.tagName.toLowerCase();
201
+ if (child.className && child.className.length > 0) {
202
+ // 最初のクラス名のみ使用(複数クラスの場合)
203
+ const firstClass = child.className.split(/\s+/)[0];
204
+ try {
205
+ elements = $(`${tagName}.${firstClass}`);
206
+ }
207
+ catch {
208
+ elements = $(tagName);
209
+ }
210
+ }
211
+ else {
212
+ elements = $(tagName);
213
+ }
214
+ }
215
+ // 見つかった要素にスタイルを適用
216
+ elements.each((_, elem) => {
217
+ const existingStyle = $(elem).attr("style") || "";
218
+ const newStyle = existingStyle ? `${existingStyle}; ${styleStr}` : styleStr;
219
+ $(elem).attr("style", newStyle);
220
+ });
221
+ }
222
+ /**
223
+ * セクションインデックスに基づいて対応する computed styles を見つける
224
+ *
225
+ * @param sectionIndex - セクションのインデックス
226
+ * @param computedStyles - 全 computed styles 配列
227
+ * @returns 対応する ComputedStyleInfo または undefined
228
+ */
229
+ function findMatchingComputedStyles(sectionIndex, computedStyles) {
230
+ if (!computedStyles || computedStyles.length === 0) {
231
+ return undefined;
232
+ }
233
+ // インデックスで検索
234
+ return computedStyles.find((cs) => cs.index === sectionIndex);
235
+ }
236
+ /**
237
+ * CSSからグリッド/フレックスレイアウトを検出
238
+ */
239
+ function detectGridLayout(_$, html) {
240
+ const info = {
241
+ hasGrid: false,
242
+ hasFlex: false,
243
+ };
244
+ // インラインスタイルとスタイルタグからグリッド検出
245
+ const hasGridDisplay = html.includes("display: grid") ||
246
+ html.includes("display:grid") ||
247
+ html.match(/display\s*:\s*grid/i) !== null;
248
+ const hasFlexDisplay = html.includes("display: flex") ||
249
+ html.includes("display:flex") ||
250
+ html.match(/display\s*:\s*flex/i) !== null;
251
+ info.hasGrid = hasGridDisplay;
252
+ info.hasFlex = hasFlexDisplay;
253
+ // グリッドカラム数を推定
254
+ if (hasGridDisplay) {
255
+ // grid-template-columns パターンを検出
256
+ const columnMatch = html.match(/grid-template-columns:\s*repeat\s*\(\s*(\d+)/i);
257
+ if (columnMatch && columnMatch[1]) {
258
+ info.columnCount = parseInt(columnMatch[1], 10);
259
+ }
260
+ else {
261
+ // fr単位やピクセル値からカラム数を推定
262
+ const frMatch = html.match(/grid-template-columns:\s*([^;]+)/i);
263
+ if (frMatch && frMatch[1]) {
264
+ const frCount = (frMatch[1].match(/\dfr|\d+px|auto/gi) || []).length;
265
+ if (frCount > 0) {
266
+ info.columnCount = frCount;
267
+ }
268
+ }
269
+ }
270
+ // gap/ガター幅を推定
271
+ const gapMatch = html.match(/(?:grid-)?gap:\s*(\d+)px/i);
272
+ if (gapMatch && gapMatch[1]) {
273
+ info.gutterWidth = parseInt(gapMatch[1], 10);
274
+ }
275
+ }
276
+ return info;
277
+ }
278
+ /**
279
+ * タイポグラフィ情報を抽出
280
+ */
281
+ function extractTypography($, html) {
282
+ const headings = [];
283
+ const fontSizes = new Set();
284
+ const fontFamilies = new Set();
285
+ // 見出し要素を抽出
286
+ for (let level = 1; level <= 6; level++) {
287
+ const $headings = $(`h${level}`);
288
+ if ($headings.length > 0) {
289
+ headings.push({
290
+ level,
291
+ count: $headings.length,
292
+ });
293
+ }
294
+ }
295
+ // CSSからフォントサイズを抽出
296
+ const fontSizeMatches = html.match(/font-size:\s*([^;}\s]+)/gi);
297
+ if (fontSizeMatches) {
298
+ for (const match of fontSizeMatches) {
299
+ const size = match.replace(/font-size:\s*/i, "").trim();
300
+ if (size) {
301
+ fontSizes.add(size);
302
+ }
303
+ }
304
+ }
305
+ // CSSからフォントファミリーを抽出
306
+ const fontFamilyMatches = html.match(/font-family:\s*([^;]+)/gi);
307
+ if (fontFamilyMatches) {
308
+ for (const match of fontFamilyMatches) {
309
+ const family = match.replace(/font-family:\s*/i, "").trim();
310
+ // 最初のフォント名を抽出
311
+ const firstFont = family.split(",")[0]?.replace(/['"]/g, "").trim();
312
+ if (firstFont) {
313
+ fontFamilies.add(firstFont);
314
+ }
315
+ }
316
+ }
317
+ // exactOptionalPropertyTypes対応: undefined を代入せずプロパティを省略
318
+ const result = {
319
+ headings,
320
+ };
321
+ if (fontSizes.size > 0) {
322
+ result.fontSizes = Array.from(fontSizes);
323
+ }
324
+ if (fontFamilies.size > 0) {
325
+ result.fontFamilies = Array.from(fontFamilies);
326
+ }
327
+ return result;
328
+ }
329
+ /**
330
+ * 色情報を抽出(CSS変数解決対応)
331
+ *
332
+ * CSS変数(var(--color-bg) 等)を実際の色値に解決してから抽出します。
333
+ * これにより、ax1.vcのようなCSS変数を多用するサイトでも
334
+ * 正確に色情報を取得できます。
335
+ *
336
+ * @param $ - CheerioAPI
337
+ * @param html - HTML文字列
338
+ * @param externalCss - 外部CSSコンテンツ(オプション)
339
+ * @returns ColorInfo
340
+ */
341
+ function extractColors($, html, externalCss) {
342
+ const backgroundColors = new Set();
343
+ const textColors = new Set();
344
+ let hasGradients = false;
345
+ // CSS変数リゾルバを初期化
346
+ const resolver = new webdesign_core_1.CssVariableResolver();
347
+ // HTMLから変数定義を抽出
348
+ resolver.extractVariablesFromHtml(html);
349
+ // 外部CSSからも変数定義を抽出
350
+ if (externalCss) {
351
+ resolver.extractVariablesFromCss(externalCss);
352
+ }
353
+ if ((0, logger_1.isDevelopment)()) {
354
+ logger_1.logger.info("[LayoutAnalyzerService] CSS variables extracted", {
355
+ variableCount: resolver.size,
356
+ });
357
+ }
358
+ // ヘルパー: 色値を解決して追加
359
+ const resolveAndAddColor = (value, colorSet) => {
360
+ const trimmedValue = value.trim();
361
+ if (!trimmedValue)
362
+ return;
363
+ // CSS変数を解決
364
+ const result = resolver.resolve(trimmedValue);
365
+ const resolvedValue = result.success && result.resolvedValue ? result.resolvedValue : trimmedValue;
366
+ // 有効な色値かチェック
367
+ if ((0, webdesign_core_1.isValidColorValue)(resolvedValue)) {
368
+ colorSet.add(resolvedValue);
369
+ }
370
+ };
371
+ // ヘルパー: CSSテキストから色を抽出
372
+ const extractColorsFromCssText = (cssText) => {
373
+ // 背景色を抽出
374
+ const bgColorPattern = /background(?:-color)?:\s*([^;}\n]+)/gi;
375
+ let match;
376
+ while ((match = bgColorPattern.exec(cssText)) !== null) {
377
+ const value = match[1]?.trim();
378
+ if (value) {
379
+ // グラデーションチェック
380
+ if (value.includes("gradient")) {
381
+ hasGradients = true;
382
+ }
383
+ else if (!value.includes("url(")) {
384
+ resolveAndAddColor(value, backgroundColors);
385
+ }
386
+ }
387
+ }
388
+ // テキスト色を抽出(background-colorではなくcolorのみ)
389
+ const colorPattern = /(?:^|[;\s{])color:\s*([^;}\n]+)/gi;
390
+ while ((match = colorPattern.exec(cssText)) !== null) {
391
+ const value = match[1]?.trim();
392
+ if (value) {
393
+ resolveAndAddColor(value, textColors);
394
+ }
395
+ }
396
+ };
397
+ // 1. 全要素のstyle属性から色を抽出
398
+ $("[style]").each((_, elem) => {
399
+ const styleAttr = $(elem).attr("style");
400
+ if (styleAttr) {
401
+ extractColorsFromCssText(styleAttr);
402
+ }
403
+ });
404
+ // 2. <style>タグ内のCSSからも色を抽出
405
+ $("style").each((_, elem) => {
406
+ const cssContent = $(elem).html();
407
+ if (cssContent) {
408
+ extractColorsFromCssText(cssContent);
409
+ }
410
+ });
411
+ // 3. 外部CSSからも抽出
412
+ if (externalCss) {
413
+ extractColorsFromCssText(externalCss);
414
+ }
415
+ // パレット生成(頻出色上位)
416
+ const allColors = [...backgroundColors, ...textColors];
417
+ const palette = Array.from(new Set(allColors)).slice(0, 10);
418
+ // exactOptionalPropertyTypes対応: undefined を代入せずプロパティを省略
419
+ const result = {
420
+ hasGradients,
421
+ };
422
+ if (backgroundColors.size > 0) {
423
+ result.backgroundColors = Array.from(backgroundColors);
424
+ }
425
+ if (textColors.size > 0) {
426
+ result.textColors = Array.from(textColors);
427
+ }
428
+ if (palette.length > 0) {
429
+ result.palette = palette;
430
+ }
431
+ return result;
432
+ }
433
+ /**
434
+ * HTMLからCSSスニペットを抽出
435
+ *
436
+ * 抽出対象:
437
+ * - <style>タグ内のCSS(有効なセレクタ付きルールのみ)
438
+ * - 外部CSSリンク(参照のみ、@import形式)
439
+ *
440
+ * 注意:
441
+ * - インラインスタイル(style属性)は抽出しない
442
+ * → セレクタなしの宣言は無効なCSSとなるため
443
+ * → スタイルはhtmlSnippet内のstyle属性として既に適用されている
444
+ *
445
+ * @param $ - CheerioAPI
446
+ * @returns CSSスニペット
447
+ */
448
+ function extractCssSnippet($) {
449
+ const cssChunks = [];
450
+ // 1. <style>タグからCSS抽出
451
+ $("style").each((_, elem) => {
452
+ const css = $(elem).html();
453
+ if (css && css.trim().length > 0) {
454
+ cssChunks.push(`/* <style> tag */\n${css.trim()}`);
455
+ }
456
+ });
457
+ // 2. インラインスタイルは抽出しない
458
+ // 理由: セレクタなしのCSS宣言は無効であり、ブラウザで無視される
459
+ // 実際のスタイルはhtmlSnippet内の各要素のstyle属性に保持されている
460
+ // 3. 外部CSS参照
461
+ const externalCss = [];
462
+ $('link[rel="stylesheet"]').each((_, elem) => {
463
+ const href = $(elem).attr("href");
464
+ if (href && href.trim().length > 0) {
465
+ externalCss.push(href.trim());
466
+ }
467
+ });
468
+ if (externalCss.length > 0) {
469
+ cssChunks.push(`/* External CSS References (${externalCss.length} files) */\n${externalCss.map((href) => `@import url("${href}");`).join("\n")}`);
470
+ }
471
+ return cssChunks.length > 0 ? cssChunks.join("\n\n") : "";
472
+ }
473
+ /**
474
+ * HTMLから外部CSSリンクのURLを抽出
475
+ *
476
+ * @param $ - CheerioAPI
477
+ * @param baseUrl - ベースURL(相対URL解決用)
478
+ * @returns 外部CSSのURL配列
479
+ */
480
+ function extractExternalCssUrls($, baseUrl) {
481
+ const urls = [];
482
+ $('link[rel="stylesheet"]').each((_, elem) => {
483
+ const href = $(elem).attr("href");
484
+ if (href && href.trim().length > 0) {
485
+ const trimmedHref = href.trim();
486
+ // 相対URLを絶対URLに解決
487
+ try {
488
+ const absoluteUrl = new URL(trimmedHref, baseUrl).href;
489
+ urls.push(absoluteUrl);
490
+ }
491
+ catch {
492
+ // URLが無効な場合はスキップ
493
+ if ((0, logger_1.isDevelopment)()) {
494
+ logger_1.logger.warn("[LayoutAnalyzerService] Invalid CSS URL", { href: trimmedHref, baseUrl });
495
+ }
496
+ }
497
+ }
498
+ });
499
+ return urls;
500
+ }
501
+ /**
502
+ * 外部CSSファイルを取得してCSSスニペットに結合
503
+ *
504
+ * @param $ - CheerioAPI
505
+ * @param options - 外部CSS取得オプション
506
+ * @returns CSSスニペットと取得結果
507
+ */
508
+ async function extractCssWithExternalContent($, options) {
509
+ const startTime = Date.now();
510
+ const cssChunks = [];
511
+ const externalCssContentChunks = [];
512
+ // 1. <style>タグからCSS抽出
513
+ $("style").each((_, elem) => {
514
+ const css = $(elem).html();
515
+ if (css && css.trim().length > 0) {
516
+ cssChunks.push(`/* <style> tag */\n${css.trim()}`);
517
+ }
518
+ });
519
+ // 2. インラインスタイルは抽出しない
520
+ // 理由: セレクタなしのCSS宣言は無効であり、ブラウザで無視される
521
+ // 実際のスタイルはhtmlSnippet内の各要素のstyle属性に保持されている
522
+ // 3. 外部CSS参照(@import)
523
+ const baseUrl = options.baseUrl ?? "";
524
+ const maxCssFiles = options.maxCssFiles ?? 20;
525
+ // preExtractedUrlsが渡された場合はそれを使用
526
+ // (DOMPurifyで<link>タグが除去される問題の回避策)
527
+ let externalCssUrls;
528
+ if (options.preExtractedUrls && options.preExtractedUrls.length > 0) {
529
+ externalCssUrls = options.preExtractedUrls;
530
+ if ((0, logger_1.isDevelopment)()) {
531
+ logger_1.logger.debug("[LayoutAnalyzerService] Using pre-extracted CSS URLs", {
532
+ count: externalCssUrls.length,
533
+ });
534
+ }
535
+ }
536
+ else {
537
+ externalCssUrls = extractExternalCssUrls($, baseUrl);
538
+ }
539
+ // 最大取得数を制限
540
+ if (externalCssUrls.length > maxCssFiles) {
541
+ if ((0, logger_1.isDevelopment)()) {
542
+ logger_1.logger.warn("[LayoutAnalyzerService] Limiting external CSS files", {
543
+ total: externalCssUrls.length,
544
+ limit: maxCssFiles,
545
+ });
546
+ }
547
+ externalCssUrls = externalCssUrls.slice(0, maxCssFiles);
548
+ }
549
+ // 参照用の@importを追加(外部CSSはexternalCssContentに分離)
550
+ if (externalCssUrls.length > 0) {
551
+ cssChunks.push(`/* External CSS References (${externalCssUrls.length} files) */\n${externalCssUrls.map((href) => `@import url("${href}");`).join("\n")}`);
552
+ }
553
+ let fetchResult = {
554
+ successCount: 0,
555
+ failedCount: 0,
556
+ totalSize: 0,
557
+ processingTimeMs: 0,
558
+ results: [],
559
+ };
560
+ if (externalCssUrls.length > 0) {
561
+ const fetcher = new external_css_fetcher_1.ExternalCssFetcher({
562
+ timeout: options.timeout ?? 5000,
563
+ maxSize: options.maxSize ?? 5 * 1024 * 1024, // 5MB
564
+ maxConcurrent: options.maxConcurrent ?? 5,
565
+ });
566
+ if ((0, logger_1.isDevelopment)()) {
567
+ logger_1.logger.debug("[LayoutAnalyzerService] Fetching external CSS files", {
568
+ count: externalCssUrls.length,
569
+ urls: externalCssUrls,
570
+ });
571
+ }
572
+ const fetchAllOptions = {
573
+ timeout: options.timeout ?? 5000,
574
+ maxSize: options.maxSize ?? 5 * 1024 * 1024,
575
+ maxConcurrent: options.maxConcurrent ?? 5,
576
+ continueOnError: true,
577
+ };
578
+ // v0.1.0: 全体の外部CSS取得に30秒のハードタイムアウトを設定
579
+ // 多数のファイル(Tildaサイト等で43ファイル)のバッチ処理で
580
+ // 合計時間が膨れてページ分析全体がタイムアウトするのを防止
581
+ const EXTERNAL_CSS_OVERALL_TIMEOUT_MS = 30000; // 30秒
582
+ try {
583
+ const fetchAllResult = await Promise.race([
584
+ fetcher.fetchAllCss(externalCssUrls, fetchAllOptions),
585
+ new Promise((_, reject) => {
586
+ setTimeout(() => {
587
+ reject(new Error(`External CSS fetch overall timeout after ${EXTERNAL_CSS_OVERALL_TIMEOUT_MS}ms`));
588
+ }, EXTERNAL_CSS_OVERALL_TIMEOUT_MS);
589
+ }),
590
+ ]);
591
+ // 結果を外部CSSチャンクに追加
592
+ for (const result of fetchAllResult.results) {
593
+ if (result.success && result.content) {
594
+ const contentSize = result.contentSize ?? new TextEncoder().encode(result.content).length;
595
+ externalCssContentChunks.push(`/* External CSS: ${result.url} (${contentSize} bytes) */\n${result.content}`);
596
+ }
597
+ }
598
+ // FetchAllCssDetailedResultの値を直接使用
599
+ fetchResult = {
600
+ successCount: fetchAllResult.successCount,
601
+ failedCount: fetchAllResult.failedCount,
602
+ totalSize: fetchAllResult.totalSize,
603
+ processingTimeMs: Date.now() - startTime,
604
+ results: fetchAllResult.results.map((r) => {
605
+ const result = {
606
+ url: r.url,
607
+ content: r.success && r.content ? r.content : null,
608
+ };
609
+ if (r.error) {
610
+ result.error = r.error;
611
+ }
612
+ return result;
613
+ }),
614
+ };
615
+ if ((0, logger_1.isDevelopment)()) {
616
+ logger_1.logger.debug("[LayoutAnalyzerService] External CSS fetch completed", {
617
+ successCount: fetchResult.successCount,
618
+ failedCount: fetchResult.failedCount,
619
+ totalSize: fetchResult.totalSize,
620
+ processingTimeMs: fetchResult.processingTimeMs,
621
+ });
622
+ }
623
+ }
624
+ catch (overallFetchError) {
625
+ // 全体タイムアウト: Graceful Degradation(インラインCSSのみで分析を継続)
626
+ if ((0, logger_1.isDevelopment)()) {
627
+ logger_1.logger.warn("[LayoutAnalyzerService] External CSS fetch overall timeout (graceful degradation)", {
628
+ error: overallFetchError instanceof Error
629
+ ? overallFetchError.message
630
+ : String(overallFetchError),
631
+ urlCount: externalCssUrls.length,
632
+ timeoutMs: EXTERNAL_CSS_OVERALL_TIMEOUT_MS,
633
+ });
634
+ }
635
+ // fetchResult はデフォルト値のまま(successCount: 0)
636
+ }
637
+ }
638
+ return {
639
+ cssSnippet: cssChunks.length > 0 ? cssChunks.join("\n\n") : "",
640
+ externalCssContent: externalCssContentChunks.length > 0 ? externalCssContentChunks.join("\n\n") : "",
641
+ fetchResult,
642
+ };
643
+ }
644
+ // =====================================================
645
+ // CSSフレームワーク検出
646
+ // =====================================================
647
+ /**
648
+ * Tailwind CSS検出パターン
649
+ */
650
+ const TAILWIND_CDN_PATTERNS = [
651
+ "cdn.tailwindcss.com",
652
+ "tailwindcss.min.css",
653
+ "tailwindcss/base",
654
+ "tailwindcss/components",
655
+ "tailwindcss/utilities",
656
+ ];
657
+ /**
658
+ * Tailwind CSSユーティリティクラスパターン
659
+ */
660
+ const TAILWIND_UTILITY_PATTERNS = [
661
+ // Layout
662
+ "flex",
663
+ "grid",
664
+ "block",
665
+ "inline",
666
+ "hidden",
667
+ "absolute",
668
+ "relative",
669
+ "fixed",
670
+ "sticky",
671
+ "items-center",
672
+ "items-start",
673
+ "items-end",
674
+ "items-stretch",
675
+ "justify-center",
676
+ "justify-between",
677
+ "justify-start",
678
+ "justify-end",
679
+ "justify-around",
680
+ "flex-col",
681
+ "flex-row",
682
+ "flex-wrap",
683
+ "flex-1",
684
+ // Spacing - regex patterns
685
+ /^p-\d+$/,
686
+ /^px-\d+$/,
687
+ /^py-\d+$/,
688
+ /^pt-\d+$/,
689
+ /^pb-\d+$/,
690
+ /^pl-\d+$/,
691
+ /^pr-\d+$/,
692
+ /^m-\d+$/,
693
+ /^mx-\d+$/,
694
+ /^my-\d+$/,
695
+ /^mt-\d+$/,
696
+ /^mb-\d+$/,
697
+ /^ml-\d+$/,
698
+ /^mr-\d+$/,
699
+ /^-m\w?-\d+$/, // negative margins
700
+ /^gap-\d+$/,
701
+ /^gap-x-\d+$/,
702
+ /^gap-y-\d+$/,
703
+ /^space-[xy]-\d+$/,
704
+ // Sizing
705
+ /^w-\d+$/,
706
+ /^w-full$/,
707
+ /^w-screen$/,
708
+ /^w-auto$/,
709
+ /^w-\d+\/\d+$/,
710
+ /^h-\d+$/,
711
+ /^h-full$/,
712
+ /^h-screen$/,
713
+ /^h-auto$/,
714
+ /^min-w-/,
715
+ /^max-w-/,
716
+ /^min-h-/,
717
+ /^max-h-/,
718
+ // Colors
719
+ /^bg-\w+-\d+$/,
720
+ /^bg-\w+$/,
721
+ /^bg-gradient-/,
722
+ /^text-\w+-\d+$/,
723
+ /^text-white$/,
724
+ /^text-black$/,
725
+ /^border-\w+-\d+$/,
726
+ /^border-\w+$/,
727
+ // Typography
728
+ /^text-(xs|sm|base|lg|xl|2xl|3xl|4xl|5xl|6xl|7xl|8xl|9xl)$/,
729
+ /^font-(thin|extralight|light|normal|medium|semibold|bold|extrabold|black)$/,
730
+ /^leading-\d+$/,
731
+ /^tracking-\w+$/,
732
+ // Borders & Rounded
733
+ /^rounded(-\w+)?$/,
734
+ /^rounded-(sm|md|lg|xl|2xl|3xl|full|none)$/,
735
+ /^border(-\d+)?$/,
736
+ /^border-(t|b|l|r)-\d+$/,
737
+ // Shadows
738
+ /^shadow(-\w+)?$/,
739
+ // Transforms
740
+ /^scale-\d+$/,
741
+ /^rotate-\d+$/,
742
+ /^translate-[xy]-\d+$/,
743
+ // Containers
744
+ "container",
745
+ "mx-auto",
746
+ // Grid
747
+ /^grid-cols-\d+$/,
748
+ /^col-span-\d+$/,
749
+ /^grid-rows-\d+$/,
750
+ /^row-span-\d+$/,
751
+ // Hover/Focus states
752
+ /^hover:/,
753
+ /^focus:/,
754
+ /^active:/,
755
+ /^disabled:/,
756
+ // Responsive prefixes
757
+ /^(sm|md|lg|xl|2xl):/,
758
+ ];
759
+ /**
760
+ * Bootstrap検出パターン
761
+ */
762
+ const BOOTSTRAP_CDN_PATTERNS = [
763
+ "bootstrap.min.css",
764
+ "bootstrap.css",
765
+ "bootstrap.bundle",
766
+ "cdn.jsdelivr.net/npm/bootstrap",
767
+ "stackpath.bootstrapcdn.com",
768
+ "maxcdn.bootstrapcdn.com/bootstrap",
769
+ ];
770
+ /**
771
+ * Bootstrapクラスパターン
772
+ */
773
+ const BOOTSTRAP_CLASS_PATTERNS = [
774
+ // Components
775
+ "navbar",
776
+ "navbar-expand",
777
+ "navbar-dark",
778
+ "navbar-light",
779
+ "navbar-brand",
780
+ "navbar-nav",
781
+ "nav-link",
782
+ "nav-item",
783
+ "btn",
784
+ /^btn-\w+$/,
785
+ "btn-primary",
786
+ "btn-secondary",
787
+ "btn-success",
788
+ "btn-danger",
789
+ "btn-warning",
790
+ "btn-info",
791
+ "btn-light",
792
+ "btn-dark",
793
+ "card",
794
+ "card-body",
795
+ "card-header",
796
+ "card-footer",
797
+ "card-title",
798
+ "card-text",
799
+ "card-img",
800
+ "card-img-top",
801
+ "modal",
802
+ "modal-dialog",
803
+ "modal-content",
804
+ "modal-header",
805
+ "modal-body",
806
+ "modal-footer",
807
+ "alert",
808
+ /^alert-\w+$/,
809
+ "badge",
810
+ /^badge-\w+$/,
811
+ "form-control",
812
+ "form-group",
813
+ "form-label",
814
+ "form-check",
815
+ "form-select",
816
+ "table",
817
+ "table-striped",
818
+ "table-bordered",
819
+ "table-hover",
820
+ "list-group",
821
+ "list-group-item",
822
+ "dropdown",
823
+ "dropdown-menu",
824
+ "dropdown-item",
825
+ "dropdown-toggle",
826
+ "accordion",
827
+ "accordion-item",
828
+ "accordion-header",
829
+ "accordion-body",
830
+ // Layout
831
+ "container",
832
+ "container-fluid",
833
+ "container-sm",
834
+ "container-md",
835
+ "container-lg",
836
+ "container-xl",
837
+ "row",
838
+ "col",
839
+ /^col-\d+$/,
840
+ /^col-md-\d+$/,
841
+ /^col-lg-\d+$/,
842
+ /^col-sm-\d+$/,
843
+ /^col-xl-\d+$/,
844
+ // Utilities
845
+ "d-flex",
846
+ "d-grid",
847
+ "d-block",
848
+ "d-inline",
849
+ "d-none",
850
+ "justify-content-center",
851
+ "justify-content-between",
852
+ "justify-content-start",
853
+ "justify-content-end",
854
+ "align-items-center",
855
+ "align-items-start",
856
+ "align-items-end",
857
+ /^mt-\d+$/,
858
+ /^mb-\d+$/,
859
+ /^ms-\d+$/,
860
+ /^me-\d+$/,
861
+ /^mx-\d+$/,
862
+ /^my-\d+$/,
863
+ /^pt-\d+$/,
864
+ /^pb-\d+$/,
865
+ /^ps-\d+$/,
866
+ /^pe-\d+$/,
867
+ /^px-\d+$/,
868
+ /^py-\d+$/,
869
+ /^text-\w+$/,
870
+ /^bg-\w+$/,
871
+ ];
872
+ /**
873
+ * CSS Modules検出パターン
874
+ * 複数の形式に対応:
875
+ * 1. 従来形式: component_class__hash (e.g., Header_title__abc123)
876
+ * 2. GitHub/Next.js形式: ComponentName-module__className--hash (e.g., MarketingNavigation-module__nav--jA9Zq)
877
+ * 3. Vite形式: _class_hash (e.g., _title_1a2b3)
878
+ * 4. Webpack 5形式: ComponentModule-class-hash (e.g., HeaderModule-title-abc12)
879
+ */
880
+ const CSS_MODULES_PATTERNS = [
881
+ // 従来形式: component_class__hash
882
+ /^[a-zA-Z][a-zA-Z0-9]*_[a-zA-Z][a-zA-Z0-9]*__[a-zA-Z0-9]{5,}$/,
883
+ // GitHub/Next.js形式: ComponentName-module__className--hash
884
+ /^[a-zA-Z][a-zA-Z0-9]*-module__[a-zA-Z][a-zA-Z0-9_-]*--[a-zA-Z0-9]{4,}$/,
885
+ // 汎用形式: ComponentName__className--hash (moduleなし)
886
+ /^[a-zA-Z][a-zA-Z0-9-]*__[a-zA-Z][a-zA-Z0-9_-]*--[a-zA-Z0-9]{4,}$/,
887
+ // Vite形式: _class_hash
888
+ /^_[a-zA-Z][a-zA-Z0-9]*_[a-zA-Z0-9]{5,}$/,
889
+ ];
890
+ /**
891
+ * styled-components / Emotion検出パターン
892
+ */
893
+ const STYLED_COMPONENTS_PATTERNS = [
894
+ /^sc-[a-zA-Z0-9]+$/, // styled-components: sc-xyz123
895
+ /^css-[a-zA-Z0-9]+$/, // Emotion: css-xyz123
896
+ /^emotion-[a-zA-Z0-9]+$/, // Emotion: emotion-xyz123
897
+ /^e[a-z0-9]{6,}$/, // Emotion hash classes
898
+ ];
899
+ // =====================================================
900
+ // No-Code Tools / Additional Framework Patterns
901
+ // =====================================================
902
+ /**
903
+ * Webflow CDN検出パターン
904
+ */
905
+ const WEBFLOW_CDN_PATTERNS = [
906
+ "assets.website-files.com",
907
+ "uploads-ssl.webflow.com",
908
+ "global-uploads.webflow.com",
909
+ "d3e54v103j8qbb.cloudfront.net", // Webflow CDN
910
+ ];
911
+ /**
912
+ * Webflowクラス検出パターン
913
+ * Webflowは .w-* クラスパターンを使用
914
+ * 3つ以上マッチで確定(高信頼度)
915
+ */
916
+ const WEBFLOW_CLASS_PATTERNS = [
917
+ // Layout
918
+ /^w-container$/,
919
+ /^w-row$/,
920
+ /^w-col$/,
921
+ /^w-col-\d+$/,
922
+ /^w-layout-grid$/,
923
+ /^w-layout-\w+$/, // w-layout-* variants
924
+ // Display/Inline
925
+ /^w-inline-block$/,
926
+ /^w-inline$/,
927
+ /^w-block$/,
928
+ // Navigation
929
+ /^w-nav$/,
930
+ /^w-nav-brand$/,
931
+ /^w-nav-menu$/,
932
+ /^w-nav-link$/,
933
+ /^w-nav-button$/,
934
+ /^w-nav-overlay$/,
935
+ /^w-icon-nav-menu$/,
936
+ // Form
937
+ /^w-form$/,
938
+ /^w-form-\w+$/, // w-form-done, w-form-fail, etc.
939
+ /^w-input$/,
940
+ /^w-button$/,
941
+ /^w-select$/,
942
+ /^w-checkbox$/,
943
+ /^w-checkbox-input$/,
944
+ /^w-radio$/,
945
+ /^w-radio-input$/,
946
+ /^w-file-upload$/,
947
+ /^w-file-upload-\w+$/,
948
+ // Slider
949
+ /^w-slider$/,
950
+ /^w-slide$/,
951
+ /^w-slider-arrow-left$/,
952
+ /^w-slider-arrow-right$/,
953
+ /^w-slider-nav$/,
954
+ /^w-slider-dot$/,
955
+ /^w-slider-mask$/,
956
+ // Tabs
957
+ /^w-tabs$/,
958
+ /^w-tab-menu$/,
959
+ /^w-tab-link$/,
960
+ /^w-tab-content$/,
961
+ /^w-tab-pane$/,
962
+ // Lightbox
963
+ /^w-lightbox$/,
964
+ /^w-lightbox-thumbnail$/,
965
+ /^w-lightbox-\w+$/,
966
+ // Dropdown
967
+ /^w-dropdown$/,
968
+ /^w-dropdown-toggle$/,
969
+ /^w-dropdown-list$/,
970
+ /^w-dropdown-link$/,
971
+ /^w-dropdown-btn$/,
972
+ // Rich text
973
+ /^w-richtext$/,
974
+ /^w-richtext-\w+$/,
975
+ // Embed
976
+ /^w-embed$/,
977
+ /^w-embed-\w+$/,
978
+ // Video
979
+ /^w-background-video$/,
980
+ /^w-video$/,
981
+ /^w-video-\w+$/,
982
+ // State classes (w--current, w--open, etc.)
983
+ /^w--current$/,
984
+ /^w--open$/,
985
+ /^w--active$/,
986
+ /^w--redirecting-to-tab$/,
987
+ /^w--tab-active$/,
988
+ // Modifier classes (w-mod-*)
989
+ /^w-mod-\w+$/,
990
+ /^w-mod-touch$/,
991
+ /^w-mod-js$/,
992
+ // Responsive hiding
993
+ /^w-hidden-\w+$/,
994
+ /^w-hidden$/,
995
+ // Condition classes
996
+ /^w-condition-invisible$/,
997
+ // Dynamic list
998
+ /^w-dyn-list$/,
999
+ /^w-dyn-item$/,
1000
+ /^w-dyn-items$/,
1001
+ /^w-dyn-bind-empty$/,
1002
+ // Commerce
1003
+ /^w-commerce-\w+$/,
1004
+ ];
1005
+ /**
1006
+ * jQuery UI CDN検出パターン
1007
+ */
1008
+ const JQUERY_UI_CDN_PATTERNS = [
1009
+ "code.jquery.com/ui",
1010
+ "jquery-ui.min.js",
1011
+ "jquery-ui.js",
1012
+ "jquery-ui.min.css",
1013
+ "jquery-ui.css",
1014
+ "themes/base/jquery-ui",
1015
+ ];
1016
+ /**
1017
+ * jQuery UIクラス検出パターン
1018
+ * jQuery UIは ui-* クラスパターンを使用
1019
+ */
1020
+ const JQUERY_UI_CLASS_PATTERNS = [
1021
+ // Core
1022
+ /^ui-widget$/,
1023
+ /^ui-widget-header$/,
1024
+ /^ui-widget-content$/,
1025
+ /^ui-widget-overlay$/,
1026
+ /^ui-helper-\w+$/,
1027
+ /^ui-corner-\w+$/,
1028
+ // States
1029
+ /^ui-state-default$/,
1030
+ /^ui-state-hover$/,
1031
+ /^ui-state-focus$/,
1032
+ /^ui-state-active$/,
1033
+ /^ui-state-highlight$/,
1034
+ /^ui-state-error$/,
1035
+ /^ui-state-disabled$/,
1036
+ // Buttons
1037
+ /^ui-button$/,
1038
+ /^ui-button-\w+$/,
1039
+ // Dialog
1040
+ /^ui-dialog$/,
1041
+ /^ui-dialog-\w+$/,
1042
+ // Accordion
1043
+ /^ui-accordion$/,
1044
+ /^ui-accordion-\w+$/,
1045
+ // Tabs
1046
+ /^ui-tabs$/,
1047
+ /^ui-tabs-\w+$/,
1048
+ // Menu
1049
+ /^ui-menu$/,
1050
+ /^ui-menu-\w+$/,
1051
+ // Autocomplete
1052
+ /^ui-autocomplete$/,
1053
+ /^ui-autocomplete-\w+$/,
1054
+ // Datepicker
1055
+ /^ui-datepicker$/,
1056
+ /^ui-datepicker-\w+$/,
1057
+ // Progressbar
1058
+ /^ui-progressbar$/,
1059
+ /^ui-progressbar-\w+$/,
1060
+ // Slider (jQuery UI Slider)
1061
+ /^ui-slider$/,
1062
+ /^ui-slider-\w+$/,
1063
+ // Sortable/Draggable
1064
+ /^ui-sortable$/,
1065
+ /^ui-draggable$/,
1066
+ /^ui-droppable$/,
1067
+ /^ui-resizable$/,
1068
+ /^ui-selectable$/,
1069
+ ];
1070
+ /**
1071
+ * Squarespace CDN検出パターン
1072
+ */
1073
+ const SQUARESPACE_CDN_PATTERNS = [
1074
+ "static1.squarespace.com",
1075
+ "static.squarespace.com",
1076
+ "squarespace-cdn.com",
1077
+ "sqsp.io",
1078
+ ];
1079
+ /**
1080
+ * Squarespaceクラス検出パターン
1081
+ * Squarespaceは sqs-* クラスパターンを使用
1082
+ */
1083
+ const SQUARESPACE_CLASS_PATTERNS = [
1084
+ // Layout
1085
+ /^sqs-layout$/,
1086
+ /^sqs-row$/,
1087
+ /^sqs-col-\d+$/,
1088
+ /^sqs-grid-\d+$/,
1089
+ // Blocks
1090
+ /^sqs-block$/,
1091
+ /^sqs-block-\w+$/,
1092
+ /^sqs-block-content$/,
1093
+ // Gallery
1094
+ /^sqs-gallery$/,
1095
+ /^sqs-gallery-\w+$/,
1096
+ // Slide
1097
+ /^sqs-slide$/,
1098
+ /^sqs-slide-\w+$/,
1099
+ // Other
1100
+ /^sqs-image$/,
1101
+ /^sqs-title$/,
1102
+ /^sqs-button$/,
1103
+ /^sqs-video$/,
1104
+ /^sqs-audio$/,
1105
+ /^sqs-html-content$/,
1106
+ ];
1107
+ /**
1108
+ * Framer検出パターン(クラス + data-framer-* 属性)
1109
+ */
1110
+ const FRAMER_CLASS_PATTERNS = [
1111
+ // Class patterns
1112
+ /^framer-[a-zA-Z0-9]+$/, // framer-1abc23
1113
+ /^framer-text$/,
1114
+ /^framer-container$/,
1115
+ /^framer-button$/,
1116
+ /^framer-link$/,
1117
+ /^framer-image$/,
1118
+ /^framer-video$/,
1119
+ /^framer-nav$/,
1120
+ /^framer-rich-text-container$/,
1121
+ ];
1122
+ /**
1123
+ * Framer data-* 属性検出パターン
1124
+ */
1125
+ const FRAMER_DATA_ATTRIBUTES = [
1126
+ "data-framer-name",
1127
+ "data-framer-component-type",
1128
+ "data-framer-appear-id",
1129
+ "data-framer-generated",
1130
+ ];
1131
+ /**
1132
+ * Elementor CDN検出パターン
1133
+ */
1134
+ const ELEMENTOR_CDN_PATTERNS = [
1135
+ "/wp-content/plugins/elementor/",
1136
+ "/wp-content/plugins/elementor-pro/",
1137
+ "elementor/assets/",
1138
+ ];
1139
+ /**
1140
+ * Elementorクラス検出パターン
1141
+ * Elementorは elementor-* クラスパターンを使用
1142
+ */
1143
+ const ELEMENTOR_CLASS_PATTERNS = [
1144
+ // Core
1145
+ /^elementor$/,
1146
+ /^elementor-\d+$/, // elementor-123
1147
+ /^elementor-page$/,
1148
+ /^elementor-kit-\d+$/,
1149
+ // Sections
1150
+ /^elementor-section$/,
1151
+ /^elementor-section-\w+$/,
1152
+ /^elementor-top-section$/,
1153
+ /^elementor-inner-section$/,
1154
+ // Columns
1155
+ /^elementor-column$/,
1156
+ /^elementor-col-\d+$/,
1157
+ /^elementor-column-gap-\w+$/,
1158
+ // Widgets
1159
+ /^elementor-widget$/,
1160
+ /^elementor-widget-\w+$/,
1161
+ /^elementor-widget-container$/,
1162
+ /^elementor-widget-wrap$/,
1163
+ // Container
1164
+ /^elementor-container$/,
1165
+ // Elements
1166
+ /^elementor-heading-title$/,
1167
+ /^elementor-button$/,
1168
+ /^elementor-button-\w+$/,
1169
+ /^elementor-image$/,
1170
+ /^elementor-size-\w+$/,
1171
+ /^elementor-text-editor$/,
1172
+ ];
1173
+ /**
1174
+ * Wixクラス検出パターン
1175
+ * Wixは wixui-* や comp-* などのパターンを使用
1176
+ */
1177
+ const WIX_CLASS_PATTERNS = [
1178
+ // wixui components
1179
+ /^wixui-\w+$/,
1180
+ /^wixui-vertical-menu$/,
1181
+ /^wixui-vertical-menu__\w+$/,
1182
+ /^wixui-button$/,
1183
+ /^wixui-button__\w+$/,
1184
+ /^wixui-rich-text$/,
1185
+ /^wixui-rich-text__\w+$/,
1186
+ // comp- patterns
1187
+ /^comp-\w+$/,
1188
+ // font classes (Wix specific)
1189
+ /^font_\d+$/,
1190
+ // _3xyz hash classes (common in Wix)
1191
+ /^_[0-9a-zA-Z]{4,}$/,
1192
+ ];
1193
+ /**
1194
+ * Wix構造検出パターン(ID)
1195
+ */
1196
+ const WIX_STRUCTURE_IDS = [
1197
+ "SITE_CONTAINER",
1198
+ "SITE_HEADER",
1199
+ "SITE_PAGES",
1200
+ "SITE_FOOTER",
1201
+ "masterPage",
1202
+ "PAGES_CONTAINER",
1203
+ ];
1204
+ /**
1205
+ * クラス名がパターンにマッチするかチェック
1206
+ */
1207
+ function matchesPattern(className, pattern) {
1208
+ if (typeof pattern === "string") {
1209
+ return className === pattern;
1210
+ }
1211
+ return pattern.test(className);
1212
+ }
1213
+ /**
1214
+ * HTMLからCSSフレームワークを検出
1215
+ *
1216
+ * 検出対象:
1217
+ * - Tailwind CSS(CDNスクリプト/リンク、ユーティリティクラス)
1218
+ * - Bootstrap(CDNリンク、コンポーネントクラス)
1219
+ * - CSS Modules([component]_[class]__[hash] 形式)
1220
+ * - styled-components/Emotion(sc-*, css-* 形式)
1221
+ * - Webflow(.w-* クラスパターン)
1222
+ * - jQuery UI(.ui-* クラスパターン)
1223
+ * - Squarespace(.sqs-* クラスパターン)
1224
+ * - Framer(.framer-* クラス、data-framer-* 属性)
1225
+ * - Elementor(.elementor-* クラスパターン)
1226
+ * - Wix(.wixui-* クラス、SITE_* 構造)
1227
+ * - vanilla CSS(上記に該当しない場合)
1228
+ *
1229
+ * @param $ - CheerioAPI
1230
+ * @param html - 元のHTML文字列(CDN検出用)
1231
+ * @returns CSSフレームワーク検出結果
1232
+ */
1233
+ function detectCssFramework($, html) {
1234
+ const scores = [
1235
+ { framework: "tailwind", score: 0, evidence: [], cdnDetected: false },
1236
+ { framework: "bootstrap", score: 0, evidence: [], cdnDetected: false },
1237
+ { framework: "css_modules", score: 0, evidence: [], cdnDetected: false },
1238
+ { framework: "styled_components", score: 0, evidence: [], cdnDetected: false },
1239
+ { framework: "webflow", score: 0, evidence: [], cdnDetected: false },
1240
+ { framework: "jquery_ui", score: 0, evidence: [], cdnDetected: false },
1241
+ { framework: "squarespace", score: 0, evidence: [], cdnDetected: false },
1242
+ { framework: "framer", score: 0, evidence: [], cdnDetected: false },
1243
+ { framework: "elementor", score: 0, evidence: [], cdnDetected: false },
1244
+ { framework: "wix", score: 0, evidence: [], cdnDetected: false },
1245
+ ];
1246
+ const getScore = (framework) => scores.find((s) => s.framework === framework);
1247
+ // =====================================================
1248
+ // 1. CDN/外部参照検出(高信頼度)
1249
+ // =====================================================
1250
+ // Tailwind CDN検出
1251
+ for (const pattern of TAILWIND_CDN_PATTERNS) {
1252
+ if (html.includes(pattern)) {
1253
+ getScore("tailwind").score += 50;
1254
+ getScore("tailwind").evidence.push(`CDN detected: ${pattern}`);
1255
+ getScore("tailwind").cdnDetected = true;
1256
+ }
1257
+ }
1258
+ // Bootstrap CDN検出
1259
+ for (const pattern of BOOTSTRAP_CDN_PATTERNS) {
1260
+ if (html.includes(pattern)) {
1261
+ getScore("bootstrap").score += 50;
1262
+ getScore("bootstrap").evidence.push(`CDN detected: ${pattern}`);
1263
+ getScore("bootstrap").cdnDetected = true;
1264
+ }
1265
+ }
1266
+ // Webflow CDN検出
1267
+ for (const pattern of WEBFLOW_CDN_PATTERNS) {
1268
+ if (html.includes(pattern)) {
1269
+ getScore("webflow").score += 50;
1270
+ getScore("webflow").evidence.push(`Webflow CDN detected: ${pattern}`);
1271
+ getScore("webflow").cdnDetected = true;
1272
+ }
1273
+ }
1274
+ // jQuery UI CDN検出
1275
+ for (const pattern of JQUERY_UI_CDN_PATTERNS) {
1276
+ if (html.includes(pattern)) {
1277
+ getScore("jquery_ui").score += 50;
1278
+ getScore("jquery_ui").evidence.push(`jQuery UI CDN detected: ${pattern}`);
1279
+ getScore("jquery_ui").cdnDetected = true;
1280
+ }
1281
+ }
1282
+ // Squarespace CDN検出
1283
+ for (const pattern of SQUARESPACE_CDN_PATTERNS) {
1284
+ if (html.includes(pattern)) {
1285
+ getScore("squarespace").score += 50;
1286
+ getScore("squarespace").evidence.push(`Squarespace CDN detected: ${pattern}`);
1287
+ getScore("squarespace").cdnDetected = true;
1288
+ }
1289
+ }
1290
+ // Elementor CDN検出
1291
+ for (const pattern of ELEMENTOR_CDN_PATTERNS) {
1292
+ if (html.includes(pattern)) {
1293
+ getScore("elementor").score += 50;
1294
+ getScore("elementor").evidence.push(`Elementor plugin detected: ${pattern}`);
1295
+ getScore("elementor").cdnDetected = true;
1296
+ }
1297
+ }
1298
+ // =====================================================
1299
+ // 2. data-* 属性検出(Framer専用)
1300
+ // =====================================================
1301
+ let framerDataAttrCount = 0;
1302
+ for (const attr of FRAMER_DATA_ATTRIBUTES) {
1303
+ const elements = $(`[${attr}]`);
1304
+ if (elements.length > 0) {
1305
+ framerDataAttrCount += elements.length;
1306
+ }
1307
+ }
1308
+ if (framerDataAttrCount > 0) {
1309
+ const attrScore = Math.min(framerDataAttrCount * 10, 60);
1310
+ getScore("framer").score += attrScore;
1311
+ getScore("framer").evidence.push(`Found ${framerDataAttrCount} Framer data-* attributes`);
1312
+ }
1313
+ // =====================================================
1314
+ // 3. Wix構造検出(ID ベース)
1315
+ // =====================================================
1316
+ let wixStructureCount = 0;
1317
+ for (const id of WIX_STRUCTURE_IDS) {
1318
+ if ($(`#${id}`).length > 0) {
1319
+ wixStructureCount++;
1320
+ }
1321
+ }
1322
+ if (wixStructureCount >= 2) {
1323
+ const structureScore = Math.min(wixStructureCount * 15, 45);
1324
+ getScore("wix").score += structureScore;
1325
+ getScore("wix").evidence.push(`Found ${wixStructureCount} Wix structure IDs (SITE_*)`);
1326
+ }
1327
+ // =====================================================
1328
+ // 4. クラス名パターン検出
1329
+ // =====================================================
1330
+ // 全クラス名を収集
1331
+ const allClasses = new Set();
1332
+ $("[class]").each((_, elem) => {
1333
+ const classAttr = $(elem).attr("class");
1334
+ if (classAttr) {
1335
+ for (const className of classAttr.split(/\s+/)) {
1336
+ const trimmed = className.trim();
1337
+ if (trimmed.length > 0) {
1338
+ allClasses.add(trimmed);
1339
+ }
1340
+ }
1341
+ }
1342
+ });
1343
+ // クラス名カウンター
1344
+ let tailwindClassCount = 0;
1345
+ let bootstrapClassCount = 0;
1346
+ let cssModulesClassCount = 0;
1347
+ let styledComponentsClassCount = 0;
1348
+ let webflowClassCount = 0;
1349
+ let jqueryUiClassCount = 0;
1350
+ let squarespaceClassCount = 0;
1351
+ let framerClassCount = 0;
1352
+ let elementorClassCount = 0;
1353
+ let wixClassCount = 0;
1354
+ const cssModulesExamples = [];
1355
+ const styledComponentsExamples = [];
1356
+ const webflowExamples = [];
1357
+ const jqueryUiExamples = [];
1358
+ const squarespaceExamples = [];
1359
+ const framerExamples = [];
1360
+ const elementorExamples = [];
1361
+ const wixExamples = [];
1362
+ for (const className of allClasses) {
1363
+ // Tailwind検出
1364
+ for (const pattern of TAILWIND_UTILITY_PATTERNS) {
1365
+ if (matchesPattern(className, pattern)) {
1366
+ tailwindClassCount++;
1367
+ break;
1368
+ }
1369
+ }
1370
+ // Bootstrap検出
1371
+ for (const pattern of BOOTSTRAP_CLASS_PATTERNS) {
1372
+ if (matchesPattern(className, pattern)) {
1373
+ bootstrapClassCount++;
1374
+ break;
1375
+ }
1376
+ }
1377
+ // CSS Modules検出(複数パターンに対応)
1378
+ for (const cssModulesPattern of CSS_MODULES_PATTERNS) {
1379
+ if (cssModulesPattern.test(className)) {
1380
+ cssModulesClassCount++;
1381
+ if (cssModulesExamples.length < 3) {
1382
+ cssModulesExamples.push(className);
1383
+ }
1384
+ break;
1385
+ }
1386
+ }
1387
+ // styled-components / Emotion検出
1388
+ for (const pattern of STYLED_COMPONENTS_PATTERNS) {
1389
+ if (pattern.test(className)) {
1390
+ styledComponentsClassCount++;
1391
+ if (styledComponentsExamples.length < 3) {
1392
+ styledComponentsExamples.push(className);
1393
+ }
1394
+ break;
1395
+ }
1396
+ }
1397
+ // Webflow検出
1398
+ for (const pattern of WEBFLOW_CLASS_PATTERNS) {
1399
+ if (matchesPattern(className, pattern)) {
1400
+ webflowClassCount++;
1401
+ if (webflowExamples.length < 3) {
1402
+ webflowExamples.push(className);
1403
+ }
1404
+ break;
1405
+ }
1406
+ }
1407
+ // jQuery UI検出
1408
+ for (const pattern of JQUERY_UI_CLASS_PATTERNS) {
1409
+ if (matchesPattern(className, pattern)) {
1410
+ jqueryUiClassCount++;
1411
+ if (jqueryUiExamples.length < 3) {
1412
+ jqueryUiExamples.push(className);
1413
+ }
1414
+ break;
1415
+ }
1416
+ }
1417
+ // Squarespace検出
1418
+ for (const pattern of SQUARESPACE_CLASS_PATTERNS) {
1419
+ if (matchesPattern(className, pattern)) {
1420
+ squarespaceClassCount++;
1421
+ if (squarespaceExamples.length < 3) {
1422
+ squarespaceExamples.push(className);
1423
+ }
1424
+ break;
1425
+ }
1426
+ }
1427
+ // Framer検出
1428
+ for (const pattern of FRAMER_CLASS_PATTERNS) {
1429
+ if (matchesPattern(className, pattern)) {
1430
+ framerClassCount++;
1431
+ if (framerExamples.length < 3) {
1432
+ framerExamples.push(className);
1433
+ }
1434
+ break;
1435
+ }
1436
+ }
1437
+ // Elementor検出
1438
+ for (const pattern of ELEMENTOR_CLASS_PATTERNS) {
1439
+ if (matchesPattern(className, pattern)) {
1440
+ elementorClassCount++;
1441
+ if (elementorExamples.length < 3) {
1442
+ elementorExamples.push(className);
1443
+ }
1444
+ break;
1445
+ }
1446
+ }
1447
+ // Wix検出
1448
+ for (const pattern of WIX_CLASS_PATTERNS) {
1449
+ if (matchesPattern(className, pattern)) {
1450
+ wixClassCount++;
1451
+ if (wixExamples.length < 3) {
1452
+ wixExamples.push(className);
1453
+ }
1454
+ break;
1455
+ }
1456
+ }
1457
+ }
1458
+ // =====================================================
1459
+ // 5. スコア計算
1460
+ // =====================================================
1461
+ // Tailwind: ユーティリティクラス数に基づくスコア
1462
+ if (tailwindClassCount > 0) {
1463
+ // 10クラス以上で顕著、30クラス以上で確実
1464
+ const classScore = Math.min(tailwindClassCount * 2, 50);
1465
+ getScore("tailwind").score += classScore;
1466
+ getScore("tailwind").evidence.push(`Found ${tailwindClassCount} Tailwind utility classes`);
1467
+ }
1468
+ // Bootstrap: コンポーネントクラス数に基づくスコア
1469
+ if (bootstrapClassCount > 0) {
1470
+ const classScore = Math.min(bootstrapClassCount * 3, 50);
1471
+ getScore("bootstrap").score += classScore;
1472
+ getScore("bootstrap").evidence.push(`Found ${bootstrapClassCount} Bootstrap component classes`);
1473
+ }
1474
+ // CSS Modules: ハッシュ付きクラス数に基づくスコア
1475
+ if (cssModulesClassCount > 0) {
1476
+ const classScore = Math.min(cssModulesClassCount * 5, 70);
1477
+ getScore("css_modules").score += classScore;
1478
+ getScore("css_modules").evidence.push(`Found ${cssModulesClassCount} CSS Modules pattern classes (e.g., ${cssModulesExamples.join(", ")})`);
1479
+ }
1480
+ // styled-components: パターンマッチ数に基づくスコア
1481
+ if (styledComponentsClassCount > 0) {
1482
+ const classScore = Math.min(styledComponentsClassCount * 5, 70);
1483
+ getScore("styled_components").score += classScore;
1484
+ getScore("styled_components").evidence.push(`Found ${styledComponentsClassCount} styled-components/Emotion classes (e.g., ${styledComponentsExamples.join(", ")})`);
1485
+ }
1486
+ // Webflow: w-* クラス数に基づくスコア
1487
+ if (webflowClassCount > 0) {
1488
+ const classScore = Math.min(webflowClassCount * 5, 70);
1489
+ getScore("webflow").score += classScore;
1490
+ getScore("webflow").evidence.push(`Found ${webflowClassCount} Webflow classes (e.g., ${webflowExamples.join(", ")})`);
1491
+ }
1492
+ // jQuery UI: ui-* クラス数に基づくスコア
1493
+ if (jqueryUiClassCount > 0) {
1494
+ const classScore = Math.min(jqueryUiClassCount * 5, 70);
1495
+ getScore("jquery_ui").score += classScore;
1496
+ getScore("jquery_ui").evidence.push(`Found ${jqueryUiClassCount} jQuery UI classes (e.g., ${jqueryUiExamples.join(", ")})`);
1497
+ }
1498
+ // Squarespace: sqs-* クラス数に基づくスコア
1499
+ if (squarespaceClassCount > 0) {
1500
+ const classScore = Math.min(squarespaceClassCount * 5, 70);
1501
+ getScore("squarespace").score += classScore;
1502
+ getScore("squarespace").evidence.push(`Found ${squarespaceClassCount} Squarespace classes (e.g., ${squarespaceExamples.join(", ")})`);
1503
+ }
1504
+ // Framer: framer-* クラス数に基づくスコア
1505
+ if (framerClassCount > 0) {
1506
+ const classScore = Math.min(framerClassCount * 5, 70);
1507
+ getScore("framer").score += classScore;
1508
+ getScore("framer").evidence.push(`Found ${framerClassCount} Framer classes (e.g., ${framerExamples.join(", ")})`);
1509
+ }
1510
+ // Elementor: elementor-* クラス数に基づくスコア
1511
+ if (elementorClassCount > 0) {
1512
+ const classScore = Math.min(elementorClassCount * 5, 70);
1513
+ getScore("elementor").score += classScore;
1514
+ getScore("elementor").evidence.push(`Found ${elementorClassCount} Elementor classes (e.g., ${elementorExamples.join(", ")})`);
1515
+ }
1516
+ // Wix: comp-* / style-* クラス数に基づくスコア
1517
+ if (wixClassCount > 0) {
1518
+ const classScore = Math.min(wixClassCount * 5, 70);
1519
+ getScore("wix").score += classScore;
1520
+ getScore("wix").evidence.push(`Found ${wixClassCount} Wix classes (e.g., ${wixExamples.join(", ")})`);
1521
+ }
1522
+ // =====================================================
1523
+ // 4. CSS変数検出
1524
+ // =====================================================
1525
+ const cssVariablesResult = detectCssVariables(html);
1526
+ // =====================================================
1527
+ // 5. 結果決定
1528
+ // =====================================================
1529
+ // 最高スコアのフレームワークを選択
1530
+ const sortedScores = [...scores].sort((a, b) => b.score - a.score);
1531
+ const topScore = sortedScores[0];
1532
+ // スコアが低すぎる場合はvanilla
1533
+ if (!topScore || topScore.score < 10) {
1534
+ const vanillaResult = {
1535
+ framework: "vanilla",
1536
+ confidence: 0.3,
1537
+ evidence: ["No significant CSS framework patterns detected"],
1538
+ };
1539
+ // CSS変数が検出された場合のみcompositeを追加
1540
+ if (cssVariablesResult.detected) {
1541
+ vanillaResult.composite = {
1542
+ primary: "vanilla",
1543
+ secondary: [],
1544
+ confidenceMap: { vanilla: 0.3 },
1545
+ hasCssVariables: true,
1546
+ cssVariablesConfidence: cssVariablesResult.confidence,
1547
+ };
1548
+ vanillaResult.evidence.push(`Detected ${cssVariablesResult.variableCount} CSS custom properties (e.g., ${cssVariablesResult.examples.slice(0, 3).join(", ")})`);
1549
+ }
1550
+ return vanillaResult;
1551
+ }
1552
+ // 信頼度計算(0-1)
1553
+ // CDN検出 → 高信頼度、クラスパターンのみ → 中程度
1554
+ let confidence;
1555
+ if (topScore.cdnDetected) {
1556
+ confidence = Math.min(0.9 + (topScore.score - 50) * 0.002, 0.99);
1557
+ }
1558
+ else {
1559
+ // クラスパターンのみの場合、スコアに基づく信頼度
1560
+ confidence = Math.min(0.5 + topScore.score * 0.01, 0.89);
1561
+ }
1562
+ // =====================================================
1563
+ // 6. 複合検出結果の構築
1564
+ // =====================================================
1565
+ const result = {
1566
+ framework: topScore.framework,
1567
+ confidence: Math.round(confidence * 100) / 100,
1568
+ evidence: topScore.evidence,
1569
+ };
1570
+ // セカンダリフレームワークを検出(プライマリの30%以上のスコアがあるもの)
1571
+ const secondaryThreshold = topScore.score * 0.3;
1572
+ const secondaryFrameworks = [];
1573
+ const confidenceMap = {
1574
+ [topScore.framework]: result.confidence,
1575
+ };
1576
+ for (let i = 1; i < sortedScores.length; i++) {
1577
+ const scoreEntry = sortedScores[i];
1578
+ if (scoreEntry === undefined) {
1579
+ continue;
1580
+ }
1581
+ if (scoreEntry.score >= secondaryThreshold && scoreEntry.score >= 10) {
1582
+ secondaryFrameworks.push(scoreEntry.framework);
1583
+ // セカンダリの信頼度計算
1584
+ let secondaryConfidence;
1585
+ if (scoreEntry.cdnDetected) {
1586
+ secondaryConfidence = Math.min(0.9 + (scoreEntry.score - 50) * 0.002, 0.99);
1587
+ }
1588
+ else {
1589
+ secondaryConfidence = Math.min(0.5 + scoreEntry.score * 0.01, 0.89);
1590
+ }
1591
+ confidenceMap[scoreEntry.framework] = Math.round(secondaryConfidence * 100) / 100;
1592
+ // evidenceにセカンダリ検出を追加
1593
+ const evidenceText = scoreEntry.evidence[0] ?? "pattern matches";
1594
+ result.evidence.push(`Also detected ${scoreEntry.framework}: ${evidenceText}`);
1595
+ }
1596
+ }
1597
+ // 複合検出がある場合(セカンダリフレームワークまたはCSS変数がある場合)
1598
+ if (secondaryFrameworks.length > 0 || cssVariablesResult.detected) {
1599
+ result.composite = {
1600
+ primary: topScore.framework,
1601
+ secondary: secondaryFrameworks,
1602
+ confidenceMap,
1603
+ hasCssVariables: cssVariablesResult.detected,
1604
+ };
1605
+ if (cssVariablesResult.detected) {
1606
+ result.composite.cssVariablesConfidence = cssVariablesResult.confidence;
1607
+ result.evidence.push(`Detected ${cssVariablesResult.variableCount} CSS custom properties (e.g., ${cssVariablesResult.examples.slice(0, 3).join(", ")})`);
1608
+ }
1609
+ }
1610
+ return result;
1611
+ }
1612
+ function detectCssVariables(html) {
1613
+ // var(--*) パターンを検出(クラス属性、style属性、<style>タグ内)
1614
+ const varPattern = /var\s*\(\s*(--[\w-]+)\s*(?:,\s*[^)]+)?\s*\)/g;
1615
+ const definitionPattern = /(--[\w-]+)\s*:/g;
1616
+ const usedVariables = new Set();
1617
+ const definedVariables = new Set();
1618
+ // var(--*) の使用を検出
1619
+ let match;
1620
+ while ((match = varPattern.exec(html)) !== null) {
1621
+ const varName = match[1];
1622
+ if (varName !== undefined) {
1623
+ usedVariables.add(varName);
1624
+ }
1625
+ }
1626
+ // --variable: の定義を検出
1627
+ while ((match = definitionPattern.exec(html)) !== null) {
1628
+ const varName = match[1];
1629
+ if (varName !== undefined) {
1630
+ definedVariables.add(varName);
1631
+ }
1632
+ }
1633
+ const allVariables = new Set([...usedVariables, ...definedVariables]);
1634
+ const variableCount = allVariables.size;
1635
+ const examples = Array.from(allVariables).slice(0, 5);
1636
+ if (variableCount === 0) {
1637
+ return {
1638
+ detected: false,
1639
+ confidence: 0,
1640
+ variableCount: 0,
1641
+ examples: [],
1642
+ };
1643
+ }
1644
+ // 信頼度計算
1645
+ // 3個以上で中程度、10個以上で高信頼度
1646
+ let confidence;
1647
+ if (variableCount >= 10) {
1648
+ confidence = Math.min(0.8 + variableCount * 0.01, 0.95);
1649
+ }
1650
+ else if (variableCount >= 3) {
1651
+ confidence = 0.6 + variableCount * 0.03;
1652
+ }
1653
+ else {
1654
+ confidence = 0.4 + variableCount * 0.1;
1655
+ }
1656
+ return {
1657
+ detected: true,
1658
+ confidence: Math.round(confidence * 100) / 100,
1659
+ variableCount,
1660
+ examples,
1661
+ };
1662
+ }
1663
+ /**
1664
+ * CoreDetectedSection を DetectedSection に変換
1665
+ *
1666
+ * @param coreSection - コアのセクション
1667
+ * @param includeContent - コンテンツを含めるか
1668
+ * @param includeStyles - スタイルを含めるか
1669
+ * @param sectionIndex - セクションインデックス(computed styles マッチング用)
1670
+ * @param computedStyles - Computed Styles配列(オプション)
1671
+ * @returns 変換されたDetectedSection(computed styles適用済みの場合はhtmlSnippetにインラインスタイル含む)
1672
+ */
1673
+ function convertSection(coreSection, includeContent, includeStyles, sectionIndex, computedStyles) {
1674
+ const section = {
1675
+ id: (0, uuid_1.v7)(),
1676
+ type: coreSection.type,
1677
+ confidence: coreSection.confidence,
1678
+ position: {
1679
+ startY: coreSection.position.startY,
1680
+ endY: coreSection.position.endY,
1681
+ height: coreSection.position.height,
1682
+ },
1683
+ };
1684
+ // 要素情報 - exactOptionalPropertyTypes対応
1685
+ const element = {
1686
+ tagName: coreSection.element.tagName,
1687
+ };
1688
+ if (coreSection.element.selector !== undefined) {
1689
+ element.selector = coreSection.element.selector;
1690
+ }
1691
+ if (coreSection.element.classes !== undefined) {
1692
+ element.classes = coreSection.element.classes;
1693
+ }
1694
+ if (coreSection.element.id !== undefined) {
1695
+ element.id = coreSection.element.id;
1696
+ }
1697
+ section.element = element;
1698
+ // コンテンツ情報(オプション)- exactOptionalPropertyTypes対応
1699
+ if (includeContent && coreSection.content) {
1700
+ const content = {};
1701
+ if (coreSection.content.headings !== undefined) {
1702
+ content.headings = coreSection.content.headings;
1703
+ }
1704
+ if (coreSection.content.paragraphs !== undefined) {
1705
+ content.paragraphs = coreSection.content.paragraphs;
1706
+ }
1707
+ if (coreSection.content.links !== undefined) {
1708
+ content.links = coreSection.content.links;
1709
+ }
1710
+ if (coreSection.content.images !== undefined) {
1711
+ // images の alt プロパティも exactOptionalPropertyTypes 対応
1712
+ content.images = coreSection.content.images.map((img) => {
1713
+ const result = { src: img.src };
1714
+ if (img.alt !== undefined) {
1715
+ result.alt = img.alt;
1716
+ }
1717
+ return result;
1718
+ });
1719
+ }
1720
+ if (coreSection.content.buttons !== undefined) {
1721
+ content.buttons = coreSection.content.buttons.map((b) => {
1722
+ const result = { text: b.text };
1723
+ if (b.type !== undefined) {
1724
+ result.type = b.type;
1725
+ }
1726
+ return result;
1727
+ });
1728
+ }
1729
+ section.content = content;
1730
+ }
1731
+ // スタイル情報(オプション)- exactOptionalPropertyTypes対応
1732
+ if (includeStyles && coreSection.style) {
1733
+ const style = {};
1734
+ if (coreSection.style.backgroundColor !== undefined) {
1735
+ style.backgroundColor = coreSection.style.backgroundColor;
1736
+ }
1737
+ if (coreSection.style.textColor !== undefined) {
1738
+ style.textColor = coreSection.style.textColor;
1739
+ }
1740
+ if (coreSection.style.hasGradient !== undefined) {
1741
+ style.hasGradient = coreSection.style.hasGradient;
1742
+ }
1743
+ if (coreSection.style.hasImage !== undefined) {
1744
+ style.hasImage = coreSection.style.hasImage;
1745
+ }
1746
+ section.style = style;
1747
+ }
1748
+ // HTMLスニペット(存在する場合のみ)- exactOptionalPropertyTypes対応
1749
+ if (coreSection.htmlSnippet !== undefined) {
1750
+ let htmlSnippet = coreSection.htmlSnippet;
1751
+ // Computed Styles をインラインスタイルとして適用
1752
+ if (computedStyles && computedStyles.length > 0 && sectionIndex !== undefined) {
1753
+ const matchingStyles = findMatchingComputedStyles(sectionIndex, computedStyles);
1754
+ if (matchingStyles) {
1755
+ htmlSnippet = applyComputedStylesToHtml(htmlSnippet, matchingStyles);
1756
+ if ((0, logger_1.isDevelopment)()) {
1757
+ logger_1.logger.debug("[convertSection] Applied computed styles to section", {
1758
+ sectionIndex,
1759
+ sectionType: coreSection.type,
1760
+ childCount: matchingStyles.children?.length ?? 0,
1761
+ });
1762
+ }
1763
+ }
1764
+ }
1765
+ section.htmlSnippet = htmlSnippet;
1766
+ }
1767
+ return section;
1768
+ }
1769
+ // =====================================================
1770
+ // LayoutAnalyzerService クラス
1771
+ // =====================================================
1772
+ /**
1773
+ * レイアウト解析サービス
1774
+ *
1775
+ * Cheerioと@reftrixmcp/webdesign-coreを使用してHTMLを解析し、
1776
+ * セクション、グリッド、タイポグラフィ、色情報を抽出する
1777
+ */
1778
+ class LayoutAnalyzerService {
1779
+ sectionDetector;
1780
+ constructor() {
1781
+ this.sectionDetector = new webdesign_core_1.SectionDetector({
1782
+ detectLandmarks: true,
1783
+ detectSemanticTags: true,
1784
+ detectVisualSections: true,
1785
+ maxSectionsPerType: 30,
1786
+ });
1787
+ }
1788
+ /**
1789
+ * HTMLを解析してレイアウト情報を抽出
1790
+ *
1791
+ * @param html - 解析対象のHTML
1792
+ * @param options - 解析オプション
1793
+ * @returns レイアウト解析結果
1794
+ */
1795
+ async analyze(html, options = {}) {
1796
+ const startTime = Date.now();
1797
+ if ((0, logger_1.isDevelopment)()) {
1798
+ logger_1.logger.debug("[LayoutAnalyzerService] analyze called", {
1799
+ htmlLength: html.length,
1800
+ options,
1801
+ });
1802
+ }
1803
+ try {
1804
+ // 空のHTMLをチェック
1805
+ if (!html || html.trim().length === 0) {
1806
+ return {
1807
+ success: true,
1808
+ sections: [],
1809
+ sectionCount: 0,
1810
+ sectionTypes: {},
1811
+ cssFramework: {
1812
+ framework: "vanilla",
1813
+ confidence: 0.3,
1814
+ evidence: ["Empty or minimal HTML content"],
1815
+ },
1816
+ processingTimeMs: Date.now() - startTime,
1817
+ };
1818
+ }
1819
+ // Cheerioでパース
1820
+ const $ = cheerio.load(html);
1821
+ // セクション検出(@reftrixmcp/webdesign-core使用)
1822
+ let coreSections;
1823
+ try {
1824
+ coreSections = await this.sectionDetector.detect(html);
1825
+ }
1826
+ catch (detectionError) {
1827
+ // 検出エラーでも続行(空の配列で続ける)
1828
+ if ((0, logger_1.isDevelopment)()) {
1829
+ logger_1.logger.warn("[LayoutAnalyzerService] Section detection error", {
1830
+ error: detectionError,
1831
+ });
1832
+ }
1833
+ coreSections = [];
1834
+ }
1835
+ // セクションを変換
1836
+ const includeContent = options.includeContent ?? false;
1837
+ const includeStyles = options.includeStyles ?? false;
1838
+ let sections = coreSections.map((cs, index) => convertSection(cs, includeContent, includeStyles, index, options.computedStyles));
1839
+ // Computed styles 適用数のカウント
1840
+ let computedStylesAppliedCount = 0;
1841
+ if (options.computedStyles && options.computedStyles.length > 0) {
1842
+ for (let i = 0; i < sections.length; i++) {
1843
+ if (findMatchingComputedStyles(i, options.computedStyles)) {
1844
+ computedStylesAppliedCount++;
1845
+ }
1846
+ }
1847
+ }
1848
+ // maxSections制限
1849
+ if (options.maxSections !== undefined && sections.length > options.maxSections) {
1850
+ sections = sections.slice(0, options.maxSections);
1851
+ }
1852
+ // セクションタイプ別カウント
1853
+ const sectionTypes = {};
1854
+ for (const section of sections) {
1855
+ sectionTypes[section.type] = (sectionTypes[section.type] || 0) + 1;
1856
+ }
1857
+ // グリッド情報
1858
+ const grid = detectGridLayout($, html);
1859
+ // タイポグラフィ情報
1860
+ const typography = extractTypography($, html);
1861
+ // CSS抽出(外部CSS取得オプション対応)
1862
+ let cssSnippet;
1863
+ let externalCssFetch;
1864
+ let externalCssContent;
1865
+ if (options.externalCss?.fetchExternalCss && options.externalCss.baseUrl) {
1866
+ // 外部CSSファイルの内容を取得
1867
+ const cssResult = await extractCssWithExternalContent($, options.externalCss);
1868
+ cssSnippet = cssResult.cssSnippet;
1869
+ externalCssContent =
1870
+ cssResult.externalCssContent && cssResult.externalCssContent.trim().length > 0
1871
+ ? cssResult.externalCssContent
1872
+ : undefined;
1873
+ externalCssFetch = cssResult.fetchResult;
1874
+ }
1875
+ else {
1876
+ // 従来通り参照のみ
1877
+ cssSnippet = extractCssSnippet($);
1878
+ }
1879
+ // 色情報(外部CSSを含めてCSS変数を解決)
1880
+ const combinedExternalCss = externalCssContent
1881
+ ? [cssSnippet, externalCssContent].filter(Boolean).join("\n\n")
1882
+ : undefined;
1883
+ const colors = extractColors($, html, combinedExternalCss);
1884
+ // CSSフレームワーク検出(外部CSSを含めた場合は再度検出)
1885
+ // 外部CSSを取得した場合は、その内容も含めてフレームワーク検出を行う
1886
+ let cssFramework;
1887
+ if (externalCssFetch &&
1888
+ externalCssFetch.successCount > 0 &&
1889
+ (cssSnippet || externalCssContent)) {
1890
+ // 外部CSSの内容を含めたHTMLを構築して検出
1891
+ const combinedCss = [cssSnippet, externalCssContent].filter(Boolean).join("\n\n");
1892
+ const htmlWithCss = html + `<style>${combinedCss}</style>`;
1893
+ cssFramework = detectCssFramework($, htmlWithCss);
1894
+ }
1895
+ else {
1896
+ cssFramework = detectCssFramework($, html);
1897
+ }
1898
+ const processingTimeMs = Date.now() - startTime;
1899
+ if ((0, logger_1.isDevelopment)()) {
1900
+ logger_1.logger.debug("[LayoutAnalyzerService] analyze completed", {
1901
+ sectionCount: sections.length,
1902
+ sectionTypes,
1903
+ cssFramework: cssFramework.framework,
1904
+ cssFrameworkConfidence: cssFramework.confidence,
1905
+ externalCssFetch: externalCssFetch
1906
+ ? {
1907
+ successCount: externalCssFetch.successCount,
1908
+ failedCount: externalCssFetch.failedCount,
1909
+ totalSize: externalCssFetch.totalSize,
1910
+ }
1911
+ : undefined,
1912
+ computedStylesAppliedCount,
1913
+ processingTimeMs,
1914
+ });
1915
+ }
1916
+ // exactOptionalPropertyTypes対応: undefined を代入せずプロパティを省略
1917
+ const result = {
1918
+ success: true,
1919
+ sections,
1920
+ sectionCount: sections.length,
1921
+ sectionTypes,
1922
+ grid,
1923
+ typography,
1924
+ colors,
1925
+ cssSnippet,
1926
+ cssFramework,
1927
+ processingTimeMs,
1928
+ };
1929
+ if (externalCssContent) {
1930
+ result.externalCssContent = externalCssContent;
1931
+ }
1932
+ if (externalCssFetch) {
1933
+ result.externalCssFetch = externalCssFetch;
1934
+ const urls = externalCssFetch.results.map((r) => {
1935
+ const size = r.content ? new TextEncoder().encode(r.content).length : undefined;
1936
+ const entry = {
1937
+ url: r.url,
1938
+ success: !!r.content,
1939
+ };
1940
+ if (size !== undefined) {
1941
+ entry.size = size;
1942
+ }
1943
+ return entry;
1944
+ });
1945
+ result.externalCssMeta = {
1946
+ fetchedCount: externalCssFetch.successCount,
1947
+ failedCount: externalCssFetch.failedCount,
1948
+ totalSize: externalCssFetch.totalSize,
1949
+ urls,
1950
+ fetchedAt: new Date().toISOString(),
1951
+ };
1952
+ }
1953
+ // Computed styles が適用された場合のみカウントを追加
1954
+ if (computedStylesAppliedCount > 0) {
1955
+ result.computedStylesAppliedCount = computedStylesAppliedCount;
1956
+ }
1957
+ return result;
1958
+ }
1959
+ catch (error) {
1960
+ const processingTimeMs = Date.now() - startTime;
1961
+ if ((0, logger_1.isDevelopment)()) {
1962
+ logger_1.logger.error("[LayoutAnalyzerService] analyze error", { error });
1963
+ }
1964
+ return {
1965
+ success: true, // エラーでもグレースフルに成功として返す
1966
+ sections: [],
1967
+ sectionCount: 0,
1968
+ sectionTypes: {},
1969
+ processingTimeMs,
1970
+ error: {
1971
+ code: "LAYOUT_ANALYSIS_ERROR",
1972
+ message: error instanceof Error ? error.message : "Unknown error",
1973
+ },
1974
+ };
1975
+ }
1976
+ }
1977
+ }
1978
+ exports.LayoutAnalyzerService = LayoutAnalyzerService;
1979
+ // =====================================================
1980
+ // デフォルトエクスポート
1981
+ // =====================================================
1982
+ /**
1983
+ * シングルトンインスタンス
1984
+ */
1985
+ let sharedInstance = null;
1986
+ /**
1987
+ * 共有インスタンスを取得
1988
+ */
1989
+ function getLayoutAnalyzerService() {
1990
+ if (!sharedInstance) {
1991
+ sharedInstance = new LayoutAnalyzerService();
1992
+ }
1993
+ return sharedInstance;
1994
+ }
1995
+ /**
1996
+ * 共有インスタンスをリセット(テスト用)
1997
+ */
1998
+ function resetLayoutAnalyzerService() {
1999
+ sharedInstance = null;
2000
+ }
2001
+ //# sourceMappingURL=layout-analyzer.service.js.map