@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,1423 @@
1
+ // SPDX-FileCopyrightText: 2026 TKMD and Reftrix Contributors
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+
4
+ /**
5
+ * page.analyze レイアウト分析ハンドラー
6
+ *
7
+ * analyze.tool.tsから抽出したレイアウト分析ロジック
8
+ * - LayoutAnalyzerService を使用したHTML解析
9
+ * - Vision API (Ollama + llama3.2-vision) による画像解析
10
+ * - Per-Section Vision分析
11
+ *
12
+ * @module tools/page/handlers/layout-handler
13
+ */
14
+
15
+ import { v7 as uuidv7 } from "uuid";
16
+ import { logger, isDevelopment } from "../../../utils/logger";
17
+ import {
18
+ getLayoutAnalyzerService,
19
+ type LayoutAnalysisResult,
20
+ } from "../../../services/page/layout-analyzer.service";
21
+ import { SectionScreenshotService } from "../../../services/section-screenshot.service";
22
+ import { PAGE_ANALYZE_ERROR_CODES, type PageAnalyzeInput, type VisualFeatures } from "../schemas";
23
+ import type { VisionAnalysisResult, SectionBoundariesData } from "../../../services/vision-adapter";
24
+ import type { ComputedStyleInfo } from "../../../services/page-ingest-adapter";
25
+ import { postProcessSections } from "../../../services/page/section-postprocessor.service";
26
+ import {
27
+ type LayoutServiceResult,
28
+ type CssFrameworkType,
29
+ DEFAULT_SCREENSHOT,
30
+ MAX_SECTIONS_FOR_PER_SECTION_VISION,
31
+ } from "./types";
32
+ // Visual Feature Extraction Services (Phase 1 - Deterministic)
33
+ import { createColorExtractorService } from "../../../services/visual-extractor/color-extractor.service";
34
+ import { createThemeDetectorService } from "../../../services/visual-extractor/theme-detector.service";
35
+ import { createDensityCalculatorService } from "../../../services/visual-extractor/density-calculator.service";
36
+ import { createGradientDetectorService } from "../../../services/visual-extractor/gradient-detector.service";
37
+ import {
38
+ createVisualFeatureMerger,
39
+ type DeterministicExtractionInput,
40
+ } from "../../../services/visual-extractor/visual-feature-merger.service";
41
+ // CSS Variable Extraction (v0.1.0)
42
+ import { createCSSVariableExtractorService } from "../../../services/visual/css-variable-extractor.service";
43
+ // Background Design Detection
44
+ import {
45
+ createBackgroundDesignDetectorService,
46
+ type BackgroundDesignDetection,
47
+ } from "../../../services/background/background-design-detector.service";
48
+
49
+ // Vision CPU完走保証 (Phase 1-2 Services)
50
+ import { HardwareDetector, HardwareType } from "../../../services/vision/hardware-detector";
51
+ import { TimeoutCalculator } from "../../../services/vision/timeout-calculator";
52
+ import { ImageOptimizer } from "../../../services/vision/image-optimizer";
53
+ import type { VisionOptions } from "../schemas";
54
+
55
+ // Vision CPU完走保証 Phase 4: MCP進捗報告統合
56
+ import type { ProgressContext } from "../../../router";
57
+ import { createMCPProgressCallback, ProgressReporter } from "../../../services/vision/index";
58
+
59
+ // =====================================================
60
+ // 内部型定義
61
+ // =====================================================
62
+
63
+ /**
64
+ * セクション型定義(mutable版 - perSectionVisionで後から更新されるため)
65
+ */
66
+ type MutableSection = {
67
+ id: string;
68
+ type: string;
69
+ positionIndex: number;
70
+ heading?: string;
71
+ confidence: number;
72
+ htmlSnippet?: string;
73
+ position?: { startY: number; endY: number; height: number };
74
+ visionFeatures?: {
75
+ success: boolean;
76
+ features: Array<{
77
+ type: string;
78
+ confidence: number;
79
+ description?: string;
80
+ }>;
81
+ textRepresentation?: string;
82
+ error?: string;
83
+ processingTimeMs: number;
84
+ modelName: string;
85
+ sectionBounds?: {
86
+ startY: number;
87
+ endY: number;
88
+ height: number;
89
+ };
90
+ };
91
+ };
92
+
93
+ // =====================================================
94
+ // セクション統合処理(Phase 1: Vision統合)
95
+ // =====================================================
96
+
97
+ /**
98
+ * Vision検出セクション境界をHTML検出結果と統合
99
+ *
100
+ * HTML解析で検出できなかったビジュアルセクションをVision分析結果から追加する。
101
+ * - 既存セクションとの重複を除去(Y座標の50%以上重複で同一とみなす)
102
+ * - Vision専用セクションは新規IDで追加
103
+ * - 信頼度スコアを統合計算
104
+ *
105
+ * @param htmlSections - HTML解析で検出されたセクション
106
+ * @param visionBoundaries - Vision分析で検出されたセクション境界
107
+ * @returns 統合されたセクション配列
108
+ */
109
+ function mergeVisionDetectedSections(
110
+ htmlSections: MutableSection[],
111
+ visionBoundaries: SectionBoundariesData | undefined
112
+ ): MutableSection[] {
113
+ if (!visionBoundaries || !visionBoundaries.sections || visionBoundaries.sections.length === 0) {
114
+ if (isDevelopment()) {
115
+ logger.debug("[layout-handler] mergeVisionDetectedSections: No vision boundaries to merge");
116
+ }
117
+ return htmlSections;
118
+ }
119
+
120
+ const mergedSections: MutableSection[] = [...htmlSections];
121
+ let addedVisionSections = 0;
122
+ let boostedSections = 0;
123
+
124
+ for (const visionSection of visionBoundaries.sections) {
125
+ const visionStartY = visionSection.startY;
126
+ const visionEndY = visionSection.endY;
127
+ const visionHeight = visionEndY - visionStartY;
128
+
129
+ if (visionHeight <= 0) {
130
+ continue;
131
+ }
132
+
133
+ // 既存セクションとの重複チェック
134
+ let hasOverlap = false;
135
+ let bestOverlapIndex = -1;
136
+ let bestOverlapRatio = 0;
137
+
138
+ for (let i = 0; i < mergedSections.length; i++) {
139
+ const htmlSection = mergedSections[i];
140
+ if (!htmlSection?.position) {
141
+ continue;
142
+ }
143
+
144
+ const htmlStartY = htmlSection.position.startY;
145
+ const htmlEndY = htmlSection.position.endY;
146
+
147
+ // 重複領域を計算
148
+ const overlapStartY = Math.max(visionStartY, htmlStartY);
149
+ const overlapEndY = Math.min(visionEndY, htmlEndY);
150
+ const overlapHeight = Math.max(0, overlapEndY - overlapStartY);
151
+
152
+ // 重複率を計算(両方向で確認)
153
+ const overlapRatioVision = overlapHeight / visionHeight;
154
+ const overlapRatioHtml = overlapHeight / (htmlEndY - htmlStartY);
155
+ const maxOverlapRatio = Math.max(overlapRatioVision, overlapRatioHtml);
156
+
157
+ if (maxOverlapRatio > 0.5) {
158
+ hasOverlap = true;
159
+ if (maxOverlapRatio > bestOverlapRatio) {
160
+ bestOverlapRatio = maxOverlapRatio;
161
+ bestOverlapIndex = i;
162
+ }
163
+ }
164
+ }
165
+
166
+ if (hasOverlap && bestOverlapIndex >= 0) {
167
+ // 既存セクションと重複: 信頼度をブースト
168
+ const existingSection = mergedSections[bestOverlapIndex];
169
+ if (existingSection) {
170
+ // Vision検出で確認されたので信頼度を上げる(最大15%ブースト)
171
+ const boostAmount = Math.min(0.15, visionSection.confidence * 0.2);
172
+ existingSection.confidence = Math.min(1, existingSection.confidence + boostAmount);
173
+
174
+ // セクションタイプがunknownの場合はVisionの結果で更新
175
+ if (existingSection.type === "unknown" && visionSection.type !== "unknown") {
176
+ existingSection.type = visionSection.type;
177
+ }
178
+
179
+ boostedSections++;
180
+ }
181
+ } else {
182
+ // 新規Vision専用セクションとして追加
183
+ const newSection: MutableSection = {
184
+ id: uuidv7(),
185
+ type: visionSection.type || "unknown",
186
+ positionIndex: mergedSections.length,
187
+ confidence: visionSection.confidence * 0.85, // Vision検出は若干低めに設定
188
+ position: {
189
+ startY: visionStartY,
190
+ endY: visionEndY,
191
+ height: visionHeight,
192
+ },
193
+ // Vision検出セクションはHTMLスニペットなし(後で取得可能)
194
+ visionFeatures: {
195
+ success: true,
196
+ features: [
197
+ {
198
+ type: "section_boundaries",
199
+ confidence: visionSection.confidence,
200
+ description: `Vision-detected ${visionSection.type} section`,
201
+ },
202
+ ],
203
+ processingTimeMs: 0,
204
+ modelName: "llama3.2-vision",
205
+ },
206
+ };
207
+
208
+ mergedSections.push(newSection);
209
+ addedVisionSections++;
210
+ }
211
+ }
212
+
213
+ // 位置インデックスを再計算(Y座標順にソート)
214
+ mergedSections.sort((a, b) => {
215
+ const aStartY = a.position?.startY ?? 0;
216
+ const bStartY = b.position?.startY ?? 0;
217
+ return aStartY - bStartY;
218
+ });
219
+
220
+ mergedSections.forEach((section, index) => {
221
+ section.positionIndex = index;
222
+ });
223
+
224
+ if (isDevelopment()) {
225
+ logger.info("[layout-handler] mergeVisionDetectedSections: completed", {
226
+ originalHtmlSections: htmlSections.length,
227
+ visionSections: visionBoundaries.sections.length,
228
+ addedVisionSections,
229
+ boostedSections,
230
+ totalMergedSections: mergedSections.length,
231
+ });
232
+ }
233
+
234
+ return mergedSections;
235
+ }
236
+
237
+ // =====================================================
238
+ // Deterministic Visual Feature Extraction (Phase 1)
239
+ // =====================================================
240
+
241
+ /**
242
+ * スクリーンショットから決定論的なVisual Featuresを抽出
243
+ *
244
+ * 4つのサービスを使用して画像から特徴を抽出:
245
+ * - ColorExtractor: 支配色・アクセントカラー抽出
246
+ * - ThemeDetector: light/dark/mixed テーマ検出
247
+ * - DensityCalculator: コンテンツ密度・ホワイトスペース計算
248
+ * - GradientDetector: グラデーション検出
249
+ *
250
+ * @param screenshot - Base64エンコードされたスクリーンショット
251
+ * @param computedStyles - Computed Styles(Playwrightから取得、optional)
252
+ * @returns Visual Features(エラー時はundefined)
253
+ */
254
+ async function extractDeterministicVisualFeatures(
255
+ screenshot: { base64: string; mimeType: string },
256
+ computedStyles?: ComputedStyleInfo[]
257
+ ): Promise<VisualFeatures | undefined> {
258
+ const startTime = Date.now();
259
+
260
+ if (isDevelopment()) {
261
+ logger.info("[layout-handler] extractDeterministicVisualFeatures: starting", {
262
+ screenshotSize: screenshot.base64.length,
263
+ mimeType: screenshot.mimeType,
264
+ });
265
+ }
266
+
267
+ try {
268
+ // Convert base64 to Buffer
269
+ const imageBuffer = Buffer.from(screenshot.base64, "base64");
270
+
271
+ // Create service instances
272
+ const colorExtractor = createColorExtractorService();
273
+ const themeDetector = createThemeDetectorService();
274
+ const densityCalculator = createDensityCalculatorService();
275
+ const gradientDetector = createGradientDetectorService();
276
+ const visualFeatureMerger = createVisualFeatureMerger();
277
+
278
+ // Execute all deterministic extractions in parallel
279
+ // Note: Theme detection uses computed styles if available for more accurate results
280
+ const [colorResult, themeResult, densityResult, gradientResult] = await Promise.all([
281
+ colorExtractor.extractColors(imageBuffer).catch((error) => {
282
+ if (isDevelopment()) {
283
+ logger.warn("[layout-handler] ColorExtractor failed", {
284
+ error: error instanceof Error ? error.message : "Unknown error",
285
+ });
286
+ }
287
+ return undefined;
288
+ }),
289
+ // Use detectThemeWithComputedStyles for more accurate theme detection
290
+ // This prioritizes computed backgroundColor values from Playwright over screenshot analysis
291
+ themeDetector.detectThemeWithComputedStyles(imageBuffer, computedStyles).catch((error) => {
292
+ if (isDevelopment()) {
293
+ logger.warn("[layout-handler] ThemeDetector failed", {
294
+ error: error instanceof Error ? error.message : "Unknown error",
295
+ });
296
+ }
297
+ return undefined;
298
+ }),
299
+ densityCalculator.calculateDensity(imageBuffer).catch((error) => {
300
+ if (isDevelopment()) {
301
+ logger.warn("[layout-handler] DensityCalculator failed", {
302
+ error: error instanceof Error ? error.message : "Unknown error",
303
+ });
304
+ }
305
+ return undefined;
306
+ }),
307
+ gradientDetector.detectGradient(imageBuffer).catch((error) => {
308
+ if (isDevelopment()) {
309
+ logger.warn("[layout-handler] GradientDetector failed", {
310
+ error: error instanceof Error ? error.message : "Unknown error",
311
+ });
312
+ }
313
+ return undefined;
314
+ }),
315
+ ]);
316
+
317
+ // Check if at least one extraction succeeded
318
+ if (!colorResult && !themeResult && !densityResult && !gradientResult) {
319
+ if (isDevelopment()) {
320
+ logger.warn("[layout-handler] All deterministic extractions failed");
321
+ }
322
+ return undefined;
323
+ }
324
+
325
+ // Prepare deterministic input for merger (used for metadata calculation)
326
+ const deterministicInput: DeterministicExtractionInput = {};
327
+ if (colorResult) deterministicInput.colors = colorResult;
328
+ if (themeResult) deterministicInput.theme = themeResult;
329
+ if (densityResult) deterministicInput.density = densityResult;
330
+
331
+ // Merge deterministic results (no Vision AI input for now)
332
+ // Note: We use merger for metadata calculation, but build visualFeatures directly
333
+ // to avoid type incompatibility between MergedVisualFeatures and VisualFeatures
334
+ const mergedFeatures = await visualFeatureMerger.merge(deterministicInput, null);
335
+
336
+ // Build final VisualFeatures directly from service results
337
+ // This avoids type incompatibility issues between Merger types and Schema types
338
+ const visualFeatures: VisualFeatures = {
339
+ // Colors: Build from colorResult directly
340
+ colors: colorResult
341
+ ? {
342
+ dominant: colorResult.dominantColors,
343
+ accent: colorResult.accentColors,
344
+ palette: colorResult.colorPalette,
345
+ source: "deterministic" as const,
346
+ confidence: 0.95,
347
+ }
348
+ : null,
349
+ // Theme: Build from themeResult with luminance
350
+ theme: themeResult
351
+ ? {
352
+ type: themeResult.theme,
353
+ backgroundColor: themeResult.backgroundColor,
354
+ textColor: themeResult.textColor,
355
+ contrastRatio: themeResult.contrastRatio,
356
+ luminance: themeResult.luminance,
357
+ source: "deterministic" as const,
358
+ confidence: themeResult.confidence,
359
+ }
360
+ : null,
361
+ // Density: Build from densityResult directly
362
+ // Note: regions and metrics are optional in schema, and service types differ
363
+ // from schema types, so we only include the core fields
364
+ density: densityResult
365
+ ? {
366
+ contentDensity: densityResult.contentDensity,
367
+ whitespaceRatio: densityResult.whitespaceRatio,
368
+ visualBalance: densityResult.visualBalance,
369
+ source: "deterministic" as const,
370
+ confidence: 0.95,
371
+ }
372
+ : null,
373
+ // Mood and BrandTone: null for now (Phase 2 Vision AI features)
374
+ mood: null,
375
+ brandTone: null,
376
+ // Metadata from merger
377
+ metadata: mergedFeatures.metadata,
378
+ // Gradient: Build from gradientResult directly
379
+ gradient: gradientResult
380
+ ? {
381
+ hasGradient: gradientResult.hasGradient,
382
+ gradients: gradientResult.gradients,
383
+ dominantGradientType: gradientResult.dominantGradientType,
384
+ confidence: gradientResult.confidence,
385
+ processingTimeMs: gradientResult.processingTimeMs,
386
+ source: "deterministic" as const,
387
+ }
388
+ : null,
389
+ };
390
+
391
+ const processingTimeMs = Date.now() - startTime;
392
+
393
+ if (isDevelopment()) {
394
+ logger.info("[layout-handler] extractDeterministicVisualFeatures: completed", {
395
+ processingTimeMs,
396
+ hasColors: !!visualFeatures.colors,
397
+ hasTheme: !!visualFeatures.theme,
398
+ hasDensity: !!visualFeatures.density,
399
+ hasGradient: !!visualFeatures.gradient,
400
+ overallConfidence: visualFeatures.metadata?.overallConfidence,
401
+ });
402
+ }
403
+
404
+ return visualFeatures;
405
+ } catch (error) {
406
+ if (isDevelopment()) {
407
+ logger.error("[layout-handler] extractDeterministicVisualFeatures failed", {
408
+ error: error instanceof Error ? error.message : "Unknown error",
409
+ processingTimeMs: Date.now() - startTime,
410
+ });
411
+ }
412
+ // Graceful degradation - return undefined, don't throw
413
+ return undefined;
414
+ }
415
+ }
416
+
417
+ // =====================================================
418
+ // Vision分析処理
419
+ // =====================================================
420
+
421
+ /**
422
+ * Vision分析結果(セクション境界検出を含む)
423
+ */
424
+ interface VisionAnalysisWithBoundaries {
425
+ sectionBoundaries?: SectionBoundariesData;
426
+ }
427
+
428
+ /**
429
+ * ページ全体のVision分析を実行(セクション境界検出を含む)
430
+ *
431
+ * Vision CPU完走保証 Phase 3:
432
+ * - HardwareDetector: GPU/CPU自動判定(Ollama /api/ps API使用)
433
+ * - TimeoutCalculator: ハードウェア・画像サイズに基づく動的タイムアウト
434
+ * - ImageOptimizer: CPU推論向け画像最適化(リサイズ、圧縮)
435
+ * - Graceful Degradation: タイムアウト時はHTML解析のみで続行
436
+ *
437
+ * @param screenshot - スクリーンショットデータ
438
+ * @param result - レイアウト分析結果(更新される)
439
+ * @param visionStartTime - Vision分析開始時刻
440
+ * @param visionOptions - Vision CPU完走保証オプション(Phase 3)
441
+ * @param progressContext - MCP進捗報告コンテキスト(Phase 4)
442
+ * @returns セクション境界データ(HTMLセクションとのマージに使用)
443
+ */
444
+ async function executePageVisionAnalysis(
445
+ screenshot: { base64: string; mimeType: string },
446
+ result: LayoutServiceResult,
447
+ visionStartTime: number,
448
+ visionOptions?: VisionOptions,
449
+ progressContext?: ProgressContext
450
+ ): Promise<VisionAnalysisWithBoundaries> {
451
+ const analysisResult: VisionAnalysisWithBoundaries = {};
452
+
453
+ // Vision CPU完走保証: デフォルトオプション
454
+ const visionForceCpu = visionOptions?.visionForceCpu ?? false;
455
+ const visionEnableProgress = visionOptions?.visionEnableProgress ?? false;
456
+ const visionFallbackToHtmlOnly = visionOptions?.visionFallbackToHtmlOnly ?? true;
457
+ const visionTimeoutMs = visionOptions?.visionTimeoutMs;
458
+ // @ts-expect-error Phase 4予定: 最大画像サイズ制限で使用
459
+ const _visionImageMaxSize = visionOptions?.visionImageMaxSize;
460
+
461
+ // Vision CPU完走保証 Phase 4: 進捗報告セットアップ
462
+ let progressReporter: ProgressReporter | null = null;
463
+ if (visionEnableProgress && progressContext?.progressToken !== undefined) {
464
+ const progressCallback = createMCPProgressCallback({
465
+ progressToken: progressContext.progressToken,
466
+ sendNotification: progressContext.sendNotification,
467
+ });
468
+ if (progressCallback) {
469
+ // Vision分析の推定時間: CPU環境では180秒(3分)をデフォルトとする
470
+ const estimatedTotalMs = visionOptions?.visionTimeoutMs ?? 180000;
471
+ progressReporter = new ProgressReporter({ onProgress: progressCallback });
472
+ progressReporter.start(estimatedTotalMs);
473
+ }
474
+ }
475
+
476
+ try {
477
+ const { LlamaVisionAdapter } = await import("../../../services/vision-adapter/index.js");
478
+ const visionAdapter = new LlamaVisionAdapter();
479
+
480
+ const isAvailable = await visionAdapter.isAvailable();
481
+ if (isAvailable) {
482
+ let imageBuffer = Buffer.from(screenshot.base64, "base64");
483
+ const mimeType = screenshot.mimeType as "image/png" | "image/jpeg" | "image/webp";
484
+ const originalImageSize = imageBuffer.length;
485
+
486
+ // ================================================================
487
+ // Vision CPU完走保証 Phase 1: ハードウェア検出
488
+ // ================================================================
489
+ const hardwareDetector = new HardwareDetector();
490
+ let hardwareType = HardwareType.CPU; // デフォルトはCPU(安全側)
491
+ let hardwareInfo: Awaited<ReturnType<HardwareDetector["detect"]>> | null = null;
492
+
493
+ try {
494
+ hardwareInfo = await hardwareDetector.detect();
495
+ hardwareType = visionForceCpu ? HardwareType.CPU : hardwareInfo.type;
496
+
497
+ if (isDevelopment()) {
498
+ logger.info("[layout-handler] Hardware detection completed", {
499
+ detectedType: hardwareInfo.type,
500
+ effectiveType: hardwareType,
501
+ forceCpu: visionForceCpu,
502
+ vramBytes: hardwareInfo.vramBytes,
503
+ isGpuAvailable: hardwareInfo.isGpuAvailable,
504
+ });
505
+ }
506
+ } catch (hwError) {
507
+ // ハードウェア検出失敗時はCPUと仮定(安全側)
508
+ if (isDevelopment()) {
509
+ logger.warn("[layout-handler] Hardware detection failed, assuming CPU", {
510
+ error: hwError instanceof Error ? hwError.message : "Unknown error",
511
+ });
512
+ }
513
+ }
514
+
515
+ // Phase 4: 進捗報告 - ハードウェア検出完了 (5%)
516
+ if (progressReporter) {
517
+ progressReporter.updatePhase("preparing");
518
+ progressReporter.updateProgress(5);
519
+ }
520
+
521
+ // ================================================================
522
+ // Vision CPU完走保証 Phase 1: タイムアウト計算
523
+ // ================================================================
524
+ const timeoutCalculator = new TimeoutCalculator();
525
+ const calculatedTimeout =
526
+ visionTimeoutMs ?? timeoutCalculator.calculate(hardwareType, originalImageSize);
527
+
528
+ if (isDevelopment()) {
529
+ logger.info("[layout-handler] Vision timeout calculated", {
530
+ hardwareType,
531
+ imageSizeBytes: originalImageSize,
532
+ calculatedTimeoutMs: calculatedTimeout,
533
+ userOverride: visionTimeoutMs !== undefined,
534
+ formatted: timeoutCalculator.formatTimeout(calculatedTimeout),
535
+ });
536
+ }
537
+
538
+ // ================================================================
539
+ // Vision CPU完走保証 Phase 2: 画像最適化(CPU時のみ)
540
+ // ================================================================
541
+ const imageOptimizer = new ImageOptimizer();
542
+ let optimizationApplied = false;
543
+
544
+ if (hardwareType === HardwareType.CPU) {
545
+ try {
546
+ const optimizeResult = await imageOptimizer.optimizeForCPU(imageBuffer, {
547
+ hardwareType,
548
+ });
549
+
550
+ if (!optimizeResult.skipped) {
551
+ // Buffer型の互換性を確保するため、新しいBufferとしてコピー
552
+ imageBuffer = Buffer.from(optimizeResult.buffer);
553
+ optimizationApplied = true;
554
+
555
+ if (isDevelopment()) {
556
+ logger.info("[layout-handler] Image optimization applied", {
557
+ originalSize: optimizeResult.originalSizeBytes,
558
+ optimizedSize: optimizeResult.optimizedSizeBytes,
559
+ compressionRatio: optimizeResult.compressionRatio.toFixed(2),
560
+ dimensions: optimizeResult.dimensions,
561
+ processingTimeMs: optimizeResult.processingTimeMs,
562
+ });
563
+ }
564
+ } else {
565
+ if (isDevelopment()) {
566
+ logger.debug("[layout-handler] Image optimization skipped", {
567
+ reason: optimizeResult.reason,
568
+ });
569
+ }
570
+ }
571
+ } catch (optError) {
572
+ // 最適化失敗時は元の画像を使用
573
+ if (isDevelopment()) {
574
+ logger.warn("[layout-handler] Image optimization failed, using original", {
575
+ error: optError instanceof Error ? optError.message : "Unknown error",
576
+ });
577
+ }
578
+ }
579
+ }
580
+
581
+ // Phase 4: 進捗報告 - 画像最適化完了 (20%)
582
+ if (progressReporter) {
583
+ progressReporter.updatePhase("optimizing");
584
+ progressReporter.updateProgress(20);
585
+ }
586
+
587
+ // ================================================================
588
+ // Vision分析実行(タイムアウト付き)
589
+ // ================================================================
590
+ const analyzeWithTimeout = async (): Promise<VisionAnalysisResult> => {
591
+ return new Promise((resolve, reject) => {
592
+ const timeoutId = setTimeout(() => {
593
+ reject(
594
+ new Error(
595
+ `Vision analysis timeout after ${calculatedTimeout}ms (${timeoutCalculator.formatTimeout(calculatedTimeout)})`
596
+ )
597
+ );
598
+ }, calculatedTimeout);
599
+
600
+ visionAdapter
601
+ .analyze({ imageBuffer, mimeType })
602
+ .then((result) => {
603
+ clearTimeout(timeoutId);
604
+ resolve(result);
605
+ })
606
+ .catch((error) => {
607
+ clearTimeout(timeoutId);
608
+ reject(error);
609
+ });
610
+ });
611
+ };
612
+
613
+ // Phase 4: 進捗報告 - Vision分析開始 (30%)
614
+ if (progressReporter) {
615
+ progressReporter.updatePhase("analyzing");
616
+ progressReporter.updateProgress(30);
617
+ }
618
+
619
+ try {
620
+ const visionResult = await analyzeWithTimeout();
621
+ const visionProcessingTimeMs = Date.now() - visionStartTime;
622
+
623
+ // Phase 4: 進捗報告 - Vision分析完了 (70%)
624
+ if (progressReporter) {
625
+ progressReporter.updateProgress(70);
626
+ }
627
+
628
+ result.visionFeatures = {
629
+ success: visionResult.success,
630
+ features: visionResult.features.map((f) => {
631
+ const desc =
632
+ "description" in f.data
633
+ ? (f.data as { description?: string }).description
634
+ : undefined;
635
+ const feature: { type: string; confidence: number; description?: string } = {
636
+ type: f.type,
637
+ confidence: f.confidence,
638
+ };
639
+ if (desc !== undefined) {
640
+ feature.description = desc;
641
+ }
642
+ return feature;
643
+ }),
644
+ processingTimeMs: visionProcessingTimeMs,
645
+ modelName: visionResult.modelName,
646
+ // Vision CPU完走保証: メタ情報を追加
647
+ hardwareType,
648
+ timeoutMs: calculatedTimeout,
649
+ optimizationApplied,
650
+ };
651
+
652
+ result.textRepresentation = visionAdapter.generateTextRepresentation(visionResult);
653
+
654
+ if (isDevelopment()) {
655
+ logger.info("[layout-handler] Vision analysis completed", {
656
+ featureCount: visionResult.features.length,
657
+ processingTimeMs: visionProcessingTimeMs,
658
+ textRepresentationLength: result.textRepresentation?.length,
659
+ hardwareType,
660
+ optimizationApplied,
661
+ });
662
+ }
663
+
664
+ // Reftrix専用: セクション境界検出
665
+ try {
666
+ const boundaryStartTime = Date.now();
667
+ const boundaryResult = await visionAdapter.detectSectionBoundaries({
668
+ imageBuffer,
669
+ mimeType,
670
+ });
671
+
672
+ if (boundaryResult.success && boundaryResult.data) {
673
+ analysisResult.sectionBoundaries = boundaryResult.data;
674
+
675
+ if (isDevelopment()) {
676
+ logger.info("[layout-handler] Section boundary detection completed", {
677
+ sectionCount: boundaryResult.data.sections?.length ?? 0,
678
+ processingTimeMs: Date.now() - boundaryStartTime,
679
+ });
680
+ }
681
+ } else {
682
+ if (isDevelopment()) {
683
+ logger.warn("[layout-handler] Section boundary detection failed", {
684
+ error: boundaryResult.error,
685
+ });
686
+ }
687
+ }
688
+ } catch (boundaryError) {
689
+ if (isDevelopment()) {
690
+ logger.warn("[layout-handler] Section boundary detection error (non-critical)", {
691
+ error: boundaryError instanceof Error ? boundaryError.message : "Unknown error",
692
+ });
693
+ }
694
+ // セクション境界検出エラーは非クリティカル - 続行
695
+ }
696
+
697
+ // Phase 4: 進捗報告 - セクション境界検出完了 (90%)
698
+ if (progressReporter) {
699
+ progressReporter.updatePhase("completing");
700
+ progressReporter.updateProgress(90);
701
+ }
702
+
703
+ // Phase 4: 進捗報告 - 完了 (100%)
704
+ if (progressReporter) {
705
+ progressReporter.complete();
706
+ }
707
+ } catch (visionError) {
708
+ // ================================================================
709
+ // Vision CPU完走保証 Phase 3: Graceful Degradation
710
+ // ================================================================
711
+ const isTimeout = visionError instanceof Error && visionError.message.includes("timeout");
712
+
713
+ if (isDevelopment()) {
714
+ logger.warn("[layout-handler] Vision analysis failed", {
715
+ error: visionError instanceof Error ? visionError.message : "Unknown error",
716
+ isTimeout,
717
+ fallbackEnabled: visionFallbackToHtmlOnly,
718
+ });
719
+ }
720
+
721
+ if (visionFallbackToHtmlOnly) {
722
+ // Graceful Degradation: HTML解析のみで続行
723
+ result.visionFeatures = {
724
+ success: false,
725
+ features: [],
726
+ error: visionError instanceof Error ? visionError.message : "Vision analysis failed",
727
+ processingTimeMs: Date.now() - visionStartTime,
728
+ modelName: "llama3.2-vision",
729
+ // Vision CPU完走保証: フォールバック情報
730
+ fallback: true,
731
+ fallbackReason: isTimeout ? "timeout" : "error",
732
+ hardwareType,
733
+ timeoutMs: calculatedTimeout,
734
+ };
735
+
736
+ // Phase 4: 進捗報告 - フォールバック完了 (100%)
737
+ if (progressReporter) {
738
+ progressReporter.updatePhase("completing");
739
+ progressReporter.complete();
740
+ }
741
+
742
+ if (isDevelopment()) {
743
+ logger.info(
744
+ "[layout-handler] Graceful Degradation: continuing with HTML analysis only"
745
+ );
746
+ }
747
+ } else {
748
+ // フォールバック無効: エラーを再スロー
749
+ throw visionError;
750
+ }
751
+ }
752
+ } else {
753
+ if (isDevelopment()) {
754
+ logger.warn("[layout-handler] VisionAdapter not available, skipping Vision analysis");
755
+ }
756
+
757
+ result.visionFeatures = {
758
+ success: false,
759
+ features: [],
760
+ error:
761
+ "Ollama service unavailable. Please ensure Ollama is running with llama3.2-vision model.",
762
+ processingTimeMs: Date.now() - visionStartTime,
763
+ modelName: "llama3.2-vision",
764
+ };
765
+
766
+ // Phase 4: 進捗報告 - Ollama利用不可(100%で完了扱い)
767
+ if (progressReporter) {
768
+ progressReporter.updatePhase("completing");
769
+ progressReporter.complete();
770
+ }
771
+ }
772
+ } catch (visionError) {
773
+ if (isDevelopment()) {
774
+ logger.error("[layout-handler] Vision analysis failed", { error: visionError });
775
+ }
776
+
777
+ result.visionFeatures = {
778
+ success: false,
779
+ features: [],
780
+ error: visionError instanceof Error ? visionError.message : "Vision analysis failed",
781
+ processingTimeMs: Date.now() - visionStartTime,
782
+ modelName: "llama3.2-vision",
783
+ };
784
+
785
+ // Phase 4: 進捗報告 - エラー終了(100%で完了扱い)
786
+ if (progressReporter) {
787
+ progressReporter.updatePhase("completing");
788
+ progressReporter.complete();
789
+ }
790
+ }
791
+
792
+ return analysisResult;
793
+ }
794
+
795
+ /**
796
+ * Per-Section Vision分析を実行
797
+ */
798
+ async function executePerSectionVisionAnalysis(
799
+ screenshot: { base64: string; mimeType: string },
800
+ sections: MutableSection[],
801
+ options?: PageAnalyzeInput["layoutOptions"]
802
+ ): Promise<void> {
803
+ const perSectionStartTime = Date.now();
804
+
805
+ if (isDevelopment()) {
806
+ logger.info("[layout-handler] Per-section Vision analysis: starting", {
807
+ sectionCount: sections.length,
808
+ batchSize: options?.visionBatchSize ?? 3,
809
+ });
810
+ }
811
+
812
+ try {
813
+ const screenshotService = new SectionScreenshotService();
814
+ const batchSize = options?.visionBatchSize ?? 3;
815
+
816
+ // セクション境界情報を収集
817
+ const allSectionsWithBounds = sections
818
+ .filter((s) => s.position?.startY !== undefined && s.position?.endY !== undefined)
819
+ .map((s) => ({
820
+ id: s.id,
821
+ type: s.type,
822
+ bounds: {
823
+ startY: s.position!.startY,
824
+ endY: s.position!.endY,
825
+ height: s.position!.endY - s.position!.startY,
826
+ },
827
+ }));
828
+
829
+ // メモリ保護: 最大セクション数に制限
830
+ const sectionsWithBounds = allSectionsWithBounds.slice(0, MAX_SECTIONS_FOR_PER_SECTION_VISION);
831
+
832
+ if (allSectionsWithBounds.length > MAX_SECTIONS_FOR_PER_SECTION_VISION) {
833
+ logger.warn("[layout-handler] Per-section Vision analysis: section count exceeded limit", {
834
+ totalSections: allSectionsWithBounds.length,
835
+ processedSections: sectionsWithBounds.length,
836
+ maxSections: MAX_SECTIONS_FOR_PER_SECTION_VISION,
837
+ skippedSections: allSectionsWithBounds.length - sectionsWithBounds.length,
838
+ });
839
+ }
840
+
841
+ if (sectionsWithBounds.length > 0) {
842
+ if (isDevelopment()) {
843
+ logger.debug("[layout-handler] Per-section Vision analysis: extracting sections", {
844
+ sectionsWithBoundsCount: sectionsWithBounds.length,
845
+ });
846
+ }
847
+
848
+ const extractResult = await screenshotService.extractMultipleSections(
849
+ screenshot.base64,
850
+ sectionsWithBounds.map((s) => ({ id: s.id, bounds: s.bounds }))
851
+ );
852
+
853
+ if (isDevelopment()) {
854
+ logger.debug("[layout-handler] Per-section Vision analysis: extraction complete", {
855
+ successCount: extractResult.successes.length,
856
+ errorCount: extractResult.errors.length,
857
+ });
858
+ }
859
+
860
+ const { LlamaVisionAdapter } = await import("../../../services/vision-adapter/index.js");
861
+ const visionAdapter = new LlamaVisionAdapter();
862
+
863
+ const isVisionAvailable = await visionAdapter.isAvailable();
864
+
865
+ if (isVisionAvailable) {
866
+ const totalBatches = Math.ceil(extractResult.successes.length / batchSize);
867
+
868
+ for (let i = 0; i < extractResult.successes.length; i += batchSize) {
869
+ const batch = extractResult.successes.slice(i, i + batchSize);
870
+ const batchIndex = Math.floor(i / batchSize) + 1;
871
+
872
+ if (isDevelopment()) {
873
+ logger.info(
874
+ `[layout-handler] Per-section Vision analysis: batch ${batchIndex}/${totalBatches}`,
875
+ {
876
+ batchSectionIds: batch.map((b) => b.sectionId),
877
+ }
878
+ );
879
+ }
880
+
881
+ const visionResults = await Promise.allSettled(
882
+ batch.map((ss) => {
883
+ const sectionInfo = sectionsWithBounds.find((s) => s.id === ss.sectionId);
884
+ const sectionType = sectionInfo?.type;
885
+ if (sectionType !== undefined) {
886
+ return visionAdapter.analyzeSection({
887
+ imageBuffer: ss.imageBuffer,
888
+ mimeType: "image/png" as const,
889
+ features: ["layout_structure", "color_palette", "whitespace"] as const,
890
+ sectionId: ss.sectionId,
891
+ sectionTypeHint: sectionType,
892
+ });
893
+ }
894
+ return visionAdapter.analyzeSection({
895
+ imageBuffer: ss.imageBuffer,
896
+ mimeType: "image/png" as const,
897
+ features: ["layout_structure", "color_palette", "whitespace"] as const,
898
+ sectionId: ss.sectionId,
899
+ });
900
+ })
901
+ );
902
+
903
+ // 結果をセクションに紐付け
904
+ for (let j = 0; j < batch.length; j++) {
905
+ const batchItem = batch[j];
906
+ if (!batchItem) continue;
907
+
908
+ const sectionIndex = sections.findIndex((s) => s.id === batchItem.sectionId);
909
+ if (sectionIndex >= 0) {
910
+ const currentSection = sections[sectionIndex];
911
+ if (!currentSection) continue;
912
+
913
+ const visionResult = visionResults[j];
914
+ if (!visionResult) continue;
915
+
916
+ if (visionResult.status === "fulfilled") {
917
+ const vr = visionResult.value;
918
+ currentSection.visionFeatures = {
919
+ success: vr.success,
920
+ features: vr.features.map((f) => {
921
+ const feature: { type: string; confidence: number; description?: string } = {
922
+ type: f.type,
923
+ confidence: f.confidence,
924
+ };
925
+ const featureData = f.data as unknown as Record<string, unknown> | undefined;
926
+ if (
927
+ featureData &&
928
+ typeof featureData === "object" &&
929
+ "description" in featureData
930
+ ) {
931
+ feature.description = String(featureData.description);
932
+ }
933
+ return feature;
934
+ }),
935
+ textRepresentation: visionAdapter.generateSectionTextRepresentation(
936
+ vr,
937
+ currentSection.type
938
+ ),
939
+ processingTimeMs: vr.processingTimeMs,
940
+ modelName: vr.modelName,
941
+ sectionBounds: batchItem.bounds,
942
+ };
943
+ } else if (visionResult.status === "rejected") {
944
+ currentSection.visionFeatures = {
945
+ success: false,
946
+ features: [],
947
+ error: String(visionResult.reason),
948
+ processingTimeMs: 0,
949
+ modelName: "llama3.2-vision",
950
+ };
951
+ }
952
+ }
953
+ }
954
+ }
955
+ } else {
956
+ if (isDevelopment()) {
957
+ logger.warn("[layout-handler] Per-section Vision analysis: Ollama not available");
958
+ }
959
+
960
+ for (const section of sections) {
961
+ if (section.position) {
962
+ section.visionFeatures = {
963
+ success: false,
964
+ features: [],
965
+ error: "Ollama service unavailable for per-section Vision analysis.",
966
+ processingTimeMs: 0,
967
+ modelName: "llama3.2-vision",
968
+ };
969
+ }
970
+ }
971
+ }
972
+
973
+ // 切り出し失敗したセクションの処理
974
+ for (const extractError of extractResult.errors) {
975
+ const sectionIndex = sections.findIndex((s) => s.id === extractError.sectionId);
976
+ if (sectionIndex >= 0) {
977
+ const failedSection = sections[sectionIndex];
978
+ if (failedSection) {
979
+ failedSection.visionFeatures = {
980
+ success: false,
981
+ features: [],
982
+ error: `Screenshot extraction failed: ${extractError.errorMessage}`,
983
+ processingTimeMs: 0,
984
+ modelName: "llama3.2-vision",
985
+ };
986
+ }
987
+ }
988
+ }
989
+ }
990
+
991
+ if (isDevelopment()) {
992
+ const perSectionProcessingTime = Date.now() - perSectionStartTime;
993
+ const successCount = sections.filter((s) => s.visionFeatures?.success).length;
994
+ logger.info("[layout-handler] Per-section Vision analysis: completed", {
995
+ totalSections: sections.length,
996
+ processedSections: sectionsWithBounds.length,
997
+ successCount,
998
+ processingTimeMs: perSectionProcessingTime,
999
+ });
1000
+ }
1001
+ } catch (perSectionError) {
1002
+ if (isDevelopment()) {
1003
+ logger.error("[layout-handler] Per-section Vision analysis failed", {
1004
+ error: perSectionError instanceof Error ? perSectionError.message : "Unknown error",
1005
+ });
1006
+ }
1007
+
1008
+ for (const section of sections) {
1009
+ if (section.position && !section.visionFeatures) {
1010
+ section.visionFeatures = {
1011
+ success: false,
1012
+ features: [],
1013
+ error: `Per-section analysis failed: ${perSectionError instanceof Error ? perSectionError.message : "Unknown error"}`,
1014
+ processingTimeMs: 0,
1015
+ modelName: "llama3.2-vision",
1016
+ };
1017
+ }
1018
+ }
1019
+ }
1020
+ }
1021
+
1022
+ // =====================================================
1023
+ // メインエクスポート関数
1024
+ // =====================================================
1025
+
1026
+ /**
1027
+ * デフォルトのレイアウト分析
1028
+ *
1029
+ * @reftrixmcp/webdesign-core の SectionDetector を使用した高精度なセクション検出
1030
+ * - セマンティック要素(header, nav, main, section, article, aside, footer)の検出
1031
+ * - class/id名ベースのヒューリスティックによるセクションタイプ推定
1032
+ * - グリッド/フレックスレイアウトの検出
1033
+ * - タイポグラフィ・色情報の抽出
1034
+ * - Vision API解析(useVision=true時、スクリーンショートから直接セクション検出)
1035
+ * - Computed Stylesのインラインスタイル適用(computedStyles指定時)
1036
+ *
1037
+ * @param html - 分析対象のHTML
1038
+ * @param options - レイアウト分析オプション
1039
+ * @param screenshot - Vision解析用スクリーンショート(useVision=true時に使用)
1040
+ * @param computedStyles - Computed Styles配列(PageIngestAdapterから取得、htmlSnippetにインラインスタイルとして適用)
1041
+ * @param baseUrl - ベースURL(外部CSS解決用)
1042
+ * @param preExtractedCssUrls - サニタイズ前のHTMLから抽出した外部CSS URL配列(DOMPurifyで<link>タグが除去される問題の回避策)
1043
+ * @param visionOptions - Vision CPU完走保証オプション
1044
+ * @param progressContext - MCP進捗報告コンテキスト(Vision CPU完走保証 Phase 4)
1045
+ * @param webPageId - 外部から渡されたwebPageId(asyncモードで一貫性を保証するため)
1046
+ */
1047
+ export async function defaultAnalyzeLayout(
1048
+ html: string,
1049
+ options?: PageAnalyzeInput["layoutOptions"],
1050
+ screenshot?: { base64: string; mimeType: string },
1051
+ computedStyles?: ComputedStyleInfo[],
1052
+ baseUrl?: string,
1053
+ preExtractedCssUrls?: string[],
1054
+ visionOptions?: VisionOptions,
1055
+ progressContext?: ProgressContext,
1056
+ webPageId?: string
1057
+ ): Promise<LayoutServiceResult> {
1058
+ const startTime = Date.now();
1059
+
1060
+ if (isDevelopment()) {
1061
+ logger.debug("[layout-handler] defaultAnalyzeLayout called", {
1062
+ htmlLength: html.length,
1063
+ hasOptions: !!options,
1064
+ useVision: options?.useVision,
1065
+ hasScreenshot: !!screenshot,
1066
+ hasComputedStyles: !!computedStyles,
1067
+ computedStylesCount: computedStyles?.length ?? 0,
1068
+ hasBaseUrl: !!baseUrl,
1069
+ });
1070
+ }
1071
+
1072
+ try {
1073
+ const useVision = options?.useVision === true;
1074
+ const shouldFetchExternalCss = options?.fetchExternalCss ?? true;
1075
+
1076
+ // LayoutAnalyzerService を使用してセクション検出(HTML解析)
1077
+ const layoutAnalyzer = getLayoutAnalyzerService();
1078
+ const analysisResult: LayoutAnalysisResult = await layoutAnalyzer.analyze(html, {
1079
+ includeContent: true,
1080
+ includeStyles: true,
1081
+ ...(shouldFetchExternalCss &&
1082
+ baseUrl && {
1083
+ externalCss: {
1084
+ fetchExternalCss: true,
1085
+ baseUrl,
1086
+ // DOMPurifyで<link>タグが除去される問題の回避策
1087
+ // サニタイズ前のHTMLから抽出したURLを使用
1088
+ ...(preExtractedCssUrls &&
1089
+ preExtractedCssUrls.length > 0 && {
1090
+ preExtractedUrls: preExtractedCssUrls,
1091
+ }),
1092
+ },
1093
+ }),
1094
+ // Computed StylesをhtmlSnippetにインラインスタイルとして適用
1095
+ ...(computedStyles && computedStyles.length > 0 && { computedStyles }),
1096
+ });
1097
+
1098
+ // セクションを LayoutServiceResult 形式に変換
1099
+ const sections: MutableSection[] = analysisResult.sections.map((section, index) => {
1100
+ const result: MutableSection = {
1101
+ id: section.id,
1102
+ type: section.type,
1103
+ positionIndex: index,
1104
+ confidence: section.confidence,
1105
+ };
1106
+ const headingText = section.content?.headings?.[0]?.text;
1107
+ if (headingText !== undefined) {
1108
+ result.heading = headingText;
1109
+ }
1110
+ if (section.htmlSnippet !== undefined) {
1111
+ result.htmlSnippet = section.htmlSnippet;
1112
+ }
1113
+ if (section.position) {
1114
+ result.position = {
1115
+ startY: section.position.startY,
1116
+ endY: section.position.endY,
1117
+ height: section.position.height,
1118
+ };
1119
+ }
1120
+ return result;
1121
+ });
1122
+
1123
+ const result: LayoutServiceResult = {
1124
+ success: true,
1125
+ sectionCount: analysisResult.sectionCount,
1126
+ sectionTypes: analysisResult.sectionTypes,
1127
+ processingTimeMs: analysisResult.processingTimeMs,
1128
+ };
1129
+
1130
+ // cssSnippetが存在する場合は結果に含める(exactOptionalPropertyTypes対応)
1131
+ if (analysisResult.cssSnippet !== undefined && analysisResult.cssSnippet.length > 0) {
1132
+ result.cssSnippet = analysisResult.cssSnippet;
1133
+
1134
+ if (isDevelopment()) {
1135
+ logger.debug("[layout-handler] CSS snippet extracted", {
1136
+ cssSnippetLength: analysisResult.cssSnippet.length,
1137
+ });
1138
+ }
1139
+ }
1140
+
1141
+ if (
1142
+ analysisResult.externalCssContent !== undefined &&
1143
+ analysisResult.externalCssContent.length > 0
1144
+ ) {
1145
+ result.externalCssContent = analysisResult.externalCssContent;
1146
+
1147
+ // v0.1.0: CSS変数抽出(外部CSSが取得された場合)
1148
+ // Webサイト構築時の参考データとして活用可能
1149
+ try {
1150
+ const cssVariableExtractor = createCSSVariableExtractorService();
1151
+ const combinedCss = [analysisResult.cssSnippet, analysisResult.externalCssContent]
1152
+ .filter(Boolean)
1153
+ .join("\n");
1154
+ const cssVariablesResult = cssVariableExtractor.extractFromCSS(combinedCss);
1155
+
1156
+ if (cssVariablesResult.variables.length > 0 || cssVariablesResult.clampValues.length > 0) {
1157
+ result.cssVariables = cssVariablesResult;
1158
+
1159
+ if (isDevelopment()) {
1160
+ logger.info("[layout-handler] CSS variables extracted", {
1161
+ variableCount: cssVariablesResult.variables.length,
1162
+ clampValueCount: cssVariablesResult.clampValues.length,
1163
+ calcExpressionCount: cssVariablesResult.calcExpressions.length,
1164
+ designTokensFramework: cssVariablesResult.designTokens.framework,
1165
+ processingTimeMs: cssVariablesResult.processingTimeMs,
1166
+ });
1167
+ }
1168
+ }
1169
+ } catch (error) {
1170
+ if (isDevelopment()) {
1171
+ logger.warn("[layout-handler] CSS variable extraction failed", { error });
1172
+ }
1173
+ // エラー時はcssVariablesを省略(Graceful Degradation)
1174
+ }
1175
+ }
1176
+
1177
+ if (analysisResult.externalCssMeta !== undefined) {
1178
+ result.externalCssMeta = analysisResult.externalCssMeta;
1179
+ }
1180
+
1181
+ // cssFrameworkが存在する場合は結果に含める(exactOptionalPropertyTypes対応)
1182
+ if (isDevelopment()) {
1183
+ logger.debug("[layout-handler] Checking cssFramework from analysisResult", {
1184
+ hasCssFramework: analysisResult.cssFramework !== undefined,
1185
+ cssFrameworkValue: analysisResult.cssFramework,
1186
+ });
1187
+ }
1188
+
1189
+ if (analysisResult.cssFramework !== undefined) {
1190
+ result.cssFramework = {
1191
+ framework: analysisResult.cssFramework.framework as CssFrameworkType,
1192
+ confidence: analysisResult.cssFramework.confidence,
1193
+ evidence: analysisResult.cssFramework.evidence,
1194
+ };
1195
+
1196
+ if (isDevelopment()) {
1197
+ logger.debug("[layout-handler] CSS framework detected and set", {
1198
+ framework: analysisResult.cssFramework.framework,
1199
+ confidence: analysisResult.cssFramework.confidence,
1200
+ evidenceCount: analysisResult.cssFramework.evidence.length,
1201
+ resultCssFramework: result.cssFramework,
1202
+ });
1203
+ }
1204
+ } else {
1205
+ if (isDevelopment()) {
1206
+ logger.warn("[layout-handler] cssFramework is undefined in analysisResult");
1207
+ }
1208
+ }
1209
+
1210
+ // Background Design Detection
1211
+ // CSSコンテンツから背景デザインパターンを検出(Graceful Degradation)
1212
+ let backgroundDesigns: BackgroundDesignDetection[] = [];
1213
+ try {
1214
+ const bgDetector = createBackgroundDesignDetectorService();
1215
+ const bgResult = bgDetector.detect({
1216
+ cssContent: analysisResult.cssSnippet ?? "",
1217
+ htmlContent: html,
1218
+ externalCssContent: analysisResult.externalCssContent ?? "",
1219
+ });
1220
+ backgroundDesigns = bgResult.backgrounds;
1221
+
1222
+ if (isDevelopment() && backgroundDesigns.length > 0) {
1223
+ logger.info("[layout-handler] Background designs detected", {
1224
+ count: backgroundDesigns.length,
1225
+ types: backgroundDesigns.map((bg) => bg.designType),
1226
+ processingTimeMs: bgResult.processingTimeMs.toFixed(1),
1227
+ });
1228
+ }
1229
+ } catch (bgError) {
1230
+ if (isDevelopment()) {
1231
+ logger.warn("[layout-handler] Background design detection failed", {
1232
+ error: bgError instanceof Error ? bgError.message : String(bgError),
1233
+ });
1234
+ }
1235
+ // Graceful Degradation: 背景デザイン検出失敗はpage.analyzeを中断しない
1236
+ }
1237
+
1238
+ // 検出された背景デザインを結果に含める
1239
+ if (backgroundDesigns.length > 0) {
1240
+ result.backgroundDesigns = backgroundDesigns;
1241
+ }
1242
+
1243
+ // Vision解析実行(useVision=true かつ スクリーンショートがある場合)
1244
+ let visionAnalysisResult: VisionAnalysisWithBoundaries = {};
1245
+
1246
+ if (useVision && screenshot) {
1247
+ const visionStartTime = Date.now();
1248
+
1249
+ if (isDevelopment()) {
1250
+ logger.info("[layout-handler] Starting Vision analysis", {
1251
+ screenshotSize: screenshot.base64.length,
1252
+ mimeType: screenshot.mimeType,
1253
+ });
1254
+ }
1255
+
1256
+ visionAnalysisResult = await executePageVisionAnalysis(
1257
+ screenshot,
1258
+ result,
1259
+ visionStartTime,
1260
+ visionOptions,
1261
+ progressContext
1262
+ );
1263
+ } else if (useVision && !screenshot) {
1264
+ if (isDevelopment()) {
1265
+ logger.warn(
1266
+ "[layout-handler] useVision=true but no screenshot available, falling back to HTML analysis"
1267
+ );
1268
+ }
1269
+
1270
+ result.visionFeatures = {
1271
+ success: false,
1272
+ features: [],
1273
+ error: "Screenshot not available for Vision analysis. Falling back to HTML analysis.",
1274
+ processingTimeMs: 0,
1275
+ modelName: "llama3.2-vision",
1276
+ };
1277
+ }
1278
+
1279
+ // Phase 1: Vision検出セクション境界とHTML検出セクションをマージ
1280
+ const visionMergedSections = mergeVisionDetectedSections(
1281
+ sections,
1282
+ visionAnalysisResult.sectionBoundaries
1283
+ );
1284
+
1285
+ // Phase 1: Section Merge Post-Processor(過剰分割修正)
1286
+ // JSDOM cannot interpret CSS layout (flexbox, grid, inline-block) → over-segmentation.
1287
+ // Post-processor merges consecutive same-type sections and absorbs empty content.
1288
+ const postProcessResult = postProcessSections(visionMergedSections);
1289
+ const mergedSections = postProcessResult.sections;
1290
+
1291
+ if (
1292
+ postProcessResult.stats.mergedGroups > 0 ||
1293
+ postProcessResult.stats.absorbedCount > 0 ||
1294
+ postProcessResult.stats.splitCount > 0
1295
+ ) {
1296
+ if (isDevelopment()) {
1297
+ logger.info("[layout-handler] Section post-processing applied", postProcessResult.stats);
1298
+ }
1299
+ }
1300
+
1301
+ // マージ結果を更新(sectionCount, sectionTypesも更新)
1302
+ if (mergedSections.length !== sections.length) {
1303
+ result.sectionCount = mergedSections.length;
1304
+
1305
+ // sectionTypesを再計算
1306
+ const updatedSectionTypes: Record<string, number> = {};
1307
+ for (const section of mergedSections) {
1308
+ updatedSectionTypes[section.type] = (updatedSectionTypes[section.type] ?? 0) + 1;
1309
+ }
1310
+ result.sectionTypes = updatedSectionTypes;
1311
+
1312
+ if (isDevelopment()) {
1313
+ logger.info("[layout-handler] Sections merged with Vision boundaries", {
1314
+ originalCount: sections.length,
1315
+ mergedCount: mergedSections.length,
1316
+ addedSections: mergedSections.length - sections.length,
1317
+ });
1318
+ }
1319
+ }
1320
+
1321
+ // Phase 1: Deterministic Visual Feature Extraction (Screenshot必須)
1322
+ // Note: computedStyles are passed for improved theme detection
1323
+ // This allows accurate detection of dark themes from CSS-in-JS/Tailwind
1324
+ if (useVision && screenshot) {
1325
+ const visualFeaturesStartTime = Date.now();
1326
+
1327
+ if (isDevelopment()) {
1328
+ logger.info("[layout-handler] Starting Deterministic Visual Feature Extraction", {
1329
+ screenshotSize: screenshot.base64.length,
1330
+ hasComputedStyles: !!computedStyles,
1331
+ computedStylesCount: computedStyles?.length ?? 0,
1332
+ });
1333
+ }
1334
+
1335
+ const visualFeatures = await extractDeterministicVisualFeatures(screenshot, computedStyles);
1336
+
1337
+ if (visualFeatures) {
1338
+ result.visualFeatures = visualFeatures;
1339
+
1340
+ if (isDevelopment()) {
1341
+ logger.info("[layout-handler] Deterministic Visual Features extracted", {
1342
+ hasDominantColors: !!visualFeatures.colors?.dominant?.length,
1343
+ hasAccentColors: !!visualFeatures.colors?.accent?.length,
1344
+ hasTheme: !!visualFeatures.theme,
1345
+ themeType: visualFeatures.theme?.type,
1346
+ hasDensity: !!visualFeatures.density,
1347
+ hasGradients: !!visualFeatures.gradient?.gradients?.length,
1348
+ processingTimeMs: Date.now() - visualFeaturesStartTime,
1349
+ });
1350
+ }
1351
+ } else {
1352
+ if (isDevelopment()) {
1353
+ logger.warn(
1354
+ "[layout-handler] Deterministic Visual Feature Extraction failed, continuing without visualFeatures"
1355
+ );
1356
+ }
1357
+ }
1358
+ }
1359
+
1360
+ // オプションに応じて詳細を追加
1361
+ // MCP-RESP-03: snake_case (include_html) を優先し、camelCase (includeHtml) はフォールバック
1362
+ const shouldIncludeHtml = options?.include_html ?? options?.includeHtml;
1363
+ const shouldIncludeScreenshot = options?.include_screenshot ?? options?.includeScreenshot;
1364
+
1365
+ if (shouldIncludeHtml) {
1366
+ result.html = html;
1367
+ }
1368
+
1369
+ if (shouldIncludeScreenshot) {
1370
+ result.screenshot = {
1371
+ base64: "placeholder",
1372
+ format: DEFAULT_SCREENSHOT.FORMAT,
1373
+ width: DEFAULT_SCREENSHOT.WIDTH,
1374
+ height: DEFAULT_SCREENSHOT.HEIGHT,
1375
+ };
1376
+ }
1377
+
1378
+ if (options?.saveToDb) {
1379
+ // webPageIdが外部から渡された場合はそれを使用(asyncモードでの一貫性保証)
1380
+ // 渡されていない場合は新規生成
1381
+ result.pageId = webPageId ?? uuidv7();
1382
+ }
1383
+
1384
+ // sections は summary=false の場合に返す(マージ後のセクションを使用)
1385
+ result.sections = mergedSections;
1386
+
1387
+ // Per-Section Vision Analysis (perSectionVision=true の場合)
1388
+ // マージ後のセクションを使用して各セクションの詳細Vision分析を実行
1389
+ if (useVision && options?.perSectionVision && screenshot?.base64 && mergedSections.length > 0) {
1390
+ await executePerSectionVisionAnalysis(screenshot, mergedSections, options);
1391
+ }
1392
+
1393
+ // 最終処理時間を更新(Vision解析含む)
1394
+ result.processingTimeMs = Date.now() - startTime;
1395
+
1396
+ if (isDevelopment()) {
1397
+ logger.debug("[layout-handler] defaultAnalyzeLayout completed", {
1398
+ sectionCount: result.sectionCount,
1399
+ sectionTypes: result.sectionTypes,
1400
+ processingTimeMs: result.processingTimeMs,
1401
+ hasVisionFeatures: !!result.visionFeatures,
1402
+ hasTextRepresentation: !!result.textRepresentation,
1403
+ });
1404
+ }
1405
+
1406
+ return result;
1407
+ } catch (error) {
1408
+ if (isDevelopment()) {
1409
+ logger.error("[layout-handler] defaultAnalyzeLayout error", { error });
1410
+ }
1411
+
1412
+ return {
1413
+ success: false,
1414
+ sectionCount: 0,
1415
+ sectionTypes: {},
1416
+ processingTimeMs: Date.now() - startTime,
1417
+ error: {
1418
+ code: PAGE_ANALYZE_ERROR_CODES.LAYOUT_ANALYSIS_FAILED,
1419
+ message: error instanceof Error ? error.message : "Layout analysis failed",
1420
+ },
1421
+ };
1422
+ }
1423
+ }