@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,1726 @@
1
+ "use strict";
2
+ // SPDX-FileCopyrightText: 2026 TKMD and Reftrix Contributors
3
+ // SPDX-License-Identifier: AGPL-3.0-only
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.pageIngestAdapter = exports.DNS_RETRY_CONFIG = void 0;
6
+ exports.isDnsRelatedError = isDnsRelatedError;
7
+ exports.calculateRetryDelay = calculateRetryDelay;
8
+ /**
9
+ * PageIngestAdapter
10
+ * Playwrightを直接使用してWebページをインジェストするサービス
11
+ *
12
+ * Crawler依存を排除し、MCP Server内で完結するPlaywright統合
13
+ *
14
+ * @module services/page-ingest-adapter
15
+ */
16
+ const playwright_1 = require("playwright");
17
+ const logger_1 = require("../utils/logger");
18
+ const gpu_browser_args_1 = require("../utils/gpu-browser-args");
19
+ const browser_process_manager_1 = require("./browser-process-manager");
20
+ const core_1 = require("@reftrixmcp/core");
21
+ const errors_1 = require("../utils/errors");
22
+ // =============================================
23
+ // DNS リトライ定数・関数
24
+ // =============================================
25
+ /**
26
+ * DNS関連エラーのリトライ設定
27
+ *
28
+ * ローカルDNSリゾルバ(systemd-resolved等)が断続的にEAI_AGAINを返す
29
+ * 環境に対応するため、DNS解決エラー時のみリトライを行う。
30
+ */
31
+ exports.DNS_RETRY_CONFIG = {
32
+ /** 最大リトライ回数 */
33
+ MAX_RETRIES: 3,
34
+ /** 基本遅延(ms) - exponential backoffの基本値 */
35
+ BASE_DELAY_MS: 5000,
36
+ /** 最大遅延(ms) - exponential backoffの上限 */
37
+ MAX_DELAY_MS: 20000,
38
+ };
39
+ /**
40
+ * リトライ可能なDNS関連エラーパターン
41
+ *
42
+ * NXDOMAINは永続的なエラー(ドメインが存在しない)のためリトライ対象外。
43
+ * 一時的なDNSリゾルバ障害のみリトライする。
44
+ */
45
+ const DNS_ERROR_PATTERNS = [
46
+ "ERR_NAME_NOT_RESOLVED",
47
+ "ERR_NAME_RESOLUTION_FAILED",
48
+ "EAI_AGAIN",
49
+ "ENOTFOUND",
50
+ ];
51
+ /**
52
+ * エラーがリトライ可能なDNS関連エラーかどうかを判定する
53
+ *
54
+ * NXDOMAINは永続的エラー(ドメインが存在しない)のため対象外。
55
+ * 一時的なDNSリゾルバ障害(EAI_AGAIN, ERR_NAME_NOT_RESOLVED等)のみリトライ。
56
+ *
57
+ * @param error - 判定するエラー
58
+ * @returns DNS関連の一時的エラーであればtrue
59
+ */
60
+ function isDnsRelatedError(error) {
61
+ if (error === null || error === undefined) {
62
+ return false;
63
+ }
64
+ const message = error instanceof Error ? error.message : "";
65
+ if (!message) {
66
+ return false;
67
+ }
68
+ return DNS_ERROR_PATTERNS.some((pattern) => message.includes(pattern));
69
+ }
70
+ /**
71
+ * リトライ遅延を計算する(exponential backoff)
72
+ *
73
+ * @param attempt - リトライ試行番号(0-indexed)
74
+ * @returns 遅延時間(ms)
75
+ */
76
+ function calculateRetryDelay(attempt) {
77
+ const delay = exports.DNS_RETRY_CONFIG.BASE_DELAY_MS * Math.pow(2, attempt);
78
+ return Math.min(delay, exports.DNS_RETRY_CONFIG.MAX_DELAY_MS);
79
+ }
80
+ // =============================================
81
+ // 定数
82
+ // =============================================
83
+ /**
84
+ * デフォルトタイムアウト(ms)
85
+ */
86
+ const DEFAULT_TIMEOUT = 30000;
87
+ /**
88
+ * デフォルトビューポート
89
+ */
90
+ const DEFAULT_VIEWPORT = {
91
+ width: 1920,
92
+ height: 1080,
93
+ };
94
+ /** Lazy Loadingスクロール最小ステップ幅(px) / Min scroll step for lazy loading (px) */
95
+ const LAZY_SCROLL_MIN_STEP_PX = 500;
96
+ /** Lazy Loadingスクロール最大反復回数 / Max lazy loading scroll iterations */
97
+ const LAZY_SCROLL_MAX_ITERATIONS = 50;
98
+ /** スクロール後描画安定待ち(ms) / Paint stabilization wait after scroll (ms) */
99
+ const LAZY_SCROLL_STABILIZE_MS = 500;
100
+ /** rAFタイムアウト(ms) / requestAnimationFrame timeout (ms) */
101
+ const RAF_TIMEOUT_MS = 2000;
102
+ /**
103
+ * WebGL関連定数
104
+ */
105
+ const WEBGL_CONSTANTS = {
106
+ /** デフォルトの追加待機時間(ms) */
107
+ DEFAULT_EXTRA_WAIT_MS: 5000,
108
+ /** フレームレート安定化の最大待機時間(ms) */
109
+ MAX_FRAME_RATE_WAIT_MS: 10000,
110
+ /** 安定判定に必要な連続安定フレーム数 */
111
+ STABLE_FRAME_COUNT: 3,
112
+ /** 最小許容フレームレート(fps) */
113
+ MIN_STABLE_FPS: 20,
114
+ /** 最大許容フレームレート(fps) */
115
+ MAX_STABLE_FPS: 120,
116
+ /** フレーム間隔の許容変動率(±50%) */
117
+ FRAME_INTERVAL_TOLERANCE: 0.5,
118
+ /** waitForWebGLモードのCanvas検出タイムアウト(ms) */
119
+ CANVAS_WAIT_TIMEOUT_MS: 10000,
120
+ /** waitForWebGLモードのデフォルト待機時間(ms) */
121
+ DEFAULT_WEBGL_WAIT_MS: 3000,
122
+ };
123
+ /**
124
+ * 操作レベルタイムアウト定数(WebGLサイト用)
125
+ */
126
+ const OPERATION_TIMEOUTS = {
127
+ /** page.content()のタイムアウト(ms) */
128
+ CONTENT_EXTRACTION: 30000,
129
+ /** metadata抽出のタイムアウト(ms) */
130
+ METADATA_EXTRACTION: 15000,
131
+ /** viewport情報取得のタイムアウト(ms) */
132
+ VIEWPORT_INFO: 10000,
133
+ /** WebGLサイト用のタイムアウト乗数(通常の2倍) */
134
+ WEBGL_MULTIPLIER: 2,
135
+ };
136
+ // =============================================
137
+ // ヘルパー関数
138
+ // =============================================
139
+ /**
140
+ * Promiseにタイムアウトを追加
141
+ * WebGLサイトなど重い処理がハングする場合の保護
142
+ *
143
+ * @param promise - 実行するPromise
144
+ * @param timeoutMs - タイムアウト時間(ms)
145
+ * @param operationName - 操作名(エラーメッセージ用)
146
+ * @returns Promise結果またはタイムアウトエラー
147
+ */
148
+ async function withTimeout(promise, timeoutMs, operationName) {
149
+ let timeoutId;
150
+ const timeoutPromise = new Promise((_, reject) => {
151
+ timeoutId = setTimeout(() => {
152
+ reject(new Error(`Operation '${operationName}' timed out after ${timeoutMs}ms`));
153
+ }, timeoutMs);
154
+ });
155
+ try {
156
+ const result = await Promise.race([promise, timeoutPromise]);
157
+ clearTimeout(timeoutId);
158
+ return result;
159
+ }
160
+ catch (error) {
161
+ clearTimeout(timeoutId);
162
+ throw error;
163
+ }
164
+ }
165
+ // =============================================
166
+ // PageIngestAdapter クラス
167
+ // =============================================
168
+ /**
169
+ * ページインジェストアダプター
170
+ *
171
+ * Playwrightを使用してWebページをキャプチャする
172
+ *
173
+ * @example
174
+ * ```typescript
175
+ * const result = await pageIngestAdapter.ingest({
176
+ * url: 'https://example.com',
177
+ * fullPage: true,
178
+ * timeout: 30000,
179
+ * });
180
+ * ```
181
+ */
182
+ class PageIngestAdapter {
183
+ browser = null;
184
+ /**
185
+ * ローディング要素の完全非表示を待機(CSS opacity/visibility対応)
186
+ *
187
+ * Playwrightの`state: 'hidden'`はCSSアニメーション(opacity変化)を検知しないため、
188
+ * JavaScript でcomputed styleを直接チェックする
189
+ *
190
+ * @param page - Playwrightページ
191
+ * @param selector - ローディング要素のセレクター(カンマ区切り複数可)
192
+ * @param timeout - 最大待機時間(ms)
193
+ */
194
+ async waitForLoadingElementHidden(page, selector, timeout = 30000) {
195
+ const startTime = Date.now();
196
+ // セレクターを分割(カンマ区切り対応)
197
+ const selectors = selector
198
+ .split(",")
199
+ .map((s) => s.trim())
200
+ .filter(Boolean);
201
+ const result = await page.evaluate(`(async function() {
202
+ var startTime = Date.now();
203
+ var timeout = ${timeout};
204
+ var selectors = ${JSON.stringify(selectors)};
205
+ var checkInterval = 100; // 100ms間隔でチェック
206
+
207
+ function isElementHidden(el) {
208
+ if (!el) return true;
209
+
210
+ var style = window.getComputedStyle(el);
211
+
212
+ // display: none
213
+ if (style.display === 'none') return true;
214
+
215
+ // visibility: hidden
216
+ if (style.visibility === 'hidden') return true;
217
+
218
+ // opacity: 0 (またはほぼ0)
219
+ var opacity = parseFloat(style.opacity);
220
+ if (opacity < 0.01) return true;
221
+
222
+ // サイズが0
223
+ var rect = el.getBoundingClientRect();
224
+ if (rect.width === 0 || rect.height === 0) return true;
225
+
226
+ // pointer-events: none かつ opacity < 0.1 はフェードアウト中とみなす
227
+ if (style.pointerEvents === 'none' && opacity < 0.1) return true;
228
+
229
+ return false;
230
+ }
231
+
232
+ function checkAllHidden() {
233
+ for (var i = 0; i < selectors.length; i++) {
234
+ var elements = document.querySelectorAll(selectors[i]);
235
+ for (var j = 0; j < elements.length; j++) {
236
+ if (!isElementHidden(elements[j])) {
237
+ return false; // まだ可視の要素がある
238
+ }
239
+ }
240
+ }
241
+ return true; // すべて非表示(または要素なし)
242
+ }
243
+
244
+ return new Promise(function(resolve) {
245
+ // 初回チェック
246
+ if (checkAllHidden()) {
247
+ resolve({
248
+ hidden: true,
249
+ waitTime: Date.now() - startTime,
250
+ reason: 'already_hidden'
251
+ });
252
+ return;
253
+ }
254
+
255
+ // ポーリングでチェック
256
+ var intervalId = setInterval(function() {
257
+ if (checkAllHidden()) {
258
+ clearInterval(intervalId);
259
+ resolve({
260
+ hidden: true,
261
+ waitTime: Date.now() - startTime,
262
+ reason: 'became_hidden'
263
+ });
264
+ return;
265
+ }
266
+
267
+ if (Date.now() - startTime >= timeout) {
268
+ clearInterval(intervalId);
269
+ resolve({
270
+ hidden: false,
271
+ waitTime: Date.now() - startTime,
272
+ reason: 'timeout'
273
+ });
274
+ }
275
+ }, checkInterval);
276
+ });
277
+ })()`);
278
+ const typedResult = result;
279
+ if ((0, logger_1.isDevelopment)()) {
280
+ logger_1.logger.debug("[PageIngestAdapter] Loading element visibility check", {
281
+ hidden: typedResult.hidden,
282
+ waitTime: typedResult.waitTime,
283
+ reason: typedResult.reason,
284
+ elapsedTotal: Date.now() - startTime,
285
+ });
286
+ }
287
+ return typedResult;
288
+ }
289
+ /**
290
+ * DOM安定化を待機(React/Vue/Next.js ハイドレーション対応)
291
+ *
292
+ * MutationObserverを使用してDOMの変更を監視し、
293
+ * 指定時間内に変更がなくなったら安定したと判断
294
+ *
295
+ * @param page - Playwrightページ
296
+ * @param stableTimeout - 安定判定の無変更時間(ms)
297
+ * @param maxWait - 最大待機時間(ms)
298
+ */
299
+ async waitForDomStable(page, stableTimeout = 500, maxWait = 10000) {
300
+ if ((0, logger_1.isDevelopment)()) {
301
+ logger_1.logger.debug("[PageIngestAdapter] Waiting for DOM to stabilize...", {
302
+ stableTimeout,
303
+ maxWait,
304
+ });
305
+ }
306
+ const result = await page.evaluate(`(async function() {
307
+ const stableTimeout = ${stableTimeout};
308
+ const maxWait = ${maxWait};
309
+ const startTime = Date.now();
310
+ let mutationCount = 0;
311
+ let lastMutationTime = Date.now();
312
+
313
+ return new Promise((resolve) => {
314
+ // 最大待機タイムアウト
315
+ const maxWaitTimer = setTimeout(() => {
316
+ observer.disconnect();
317
+ resolve({
318
+ stable: false,
319
+ mutations: mutationCount,
320
+ waitTime: Date.now() - startTime,
321
+ reason: 'max_wait_exceeded'
322
+ });
323
+ }, maxWait);
324
+
325
+ // 安定化チェック用インターバル
326
+ const checkInterval = setInterval(() => {
327
+ const timeSinceLastMutation = Date.now() - lastMutationTime;
328
+ if (timeSinceLastMutation >= stableTimeout) {
329
+ clearInterval(checkInterval);
330
+ clearTimeout(maxWaitTimer);
331
+ observer.disconnect();
332
+ resolve({
333
+ stable: true,
334
+ mutations: mutationCount,
335
+ waitTime: Date.now() - startTime,
336
+ reason: 'dom_stable'
337
+ });
338
+ }
339
+ }, 100);
340
+
341
+ // MutationObserver設定
342
+ const observer = new MutationObserver((mutations) => {
343
+ // 重要な変更のみカウント(テキストノードの軽微な変更を除外)
344
+ const significantMutations = mutations.filter(m => {
345
+ // 追加・削除されたノードがある
346
+ if (m.addedNodes.length > 0 || m.removedNodes.length > 0) {
347
+ // スクリプトタグやスタイルタグは除外
348
+ for (const node of m.addedNodes) {
349
+ if (node.nodeType === 1) {
350
+ const el = node;
351
+ if (el.tagName !== 'SCRIPT' && el.tagName !== 'STYLE') {
352
+ return true;
353
+ }
354
+ }
355
+ }
356
+ for (const node of m.removedNodes) {
357
+ if (node.nodeType === 1) {
358
+ const el = node;
359
+ if (el.tagName !== 'SCRIPT' && el.tagName !== 'STYLE') {
360
+ return true;
361
+ }
362
+ }
363
+ }
364
+ return false;
365
+ }
366
+ // 属性変更(class, style等)
367
+ if (m.type === 'attributes') {
368
+ return true;
369
+ }
370
+ return false;
371
+ });
372
+
373
+ if (significantMutations.length > 0) {
374
+ mutationCount += significantMutations.length;
375
+ lastMutationTime = Date.now();
376
+ }
377
+ });
378
+
379
+ observer.observe(document.body || document.documentElement, {
380
+ childList: true,
381
+ subtree: true,
382
+ attributes: true,
383
+ attributeFilter: ['class', 'style', 'data-loaded', 'data-hydrated'],
384
+ });
385
+ });
386
+ })()`);
387
+ const typedResult = result;
388
+ if ((0, logger_1.isDevelopment)()) {
389
+ logger_1.logger.info("[PageIngestAdapter] DOM stability check completed", {
390
+ stable: typedResult.stable,
391
+ mutations: typedResult.mutations,
392
+ waitTime: typedResult.waitTime,
393
+ reason: typedResult.reason,
394
+ });
395
+ }
396
+ return typedResult;
397
+ }
398
+ /**
399
+ * WebGL/Canvas要素を検出
400
+ *
401
+ * Canvas要素とWebGLコンテキストの存在を確認し、
402
+ * Three.js等の3Dライブラリの検出も行う
403
+ *
404
+ * @param page - Playwrightページ
405
+ * @returns WebGL検出結果
406
+ */
407
+ async detectWebGL(page) {
408
+ const startTime = Date.now();
409
+ if ((0, logger_1.isDevelopment)()) {
410
+ logger_1.logger.debug("[PageIngestAdapter] Detecting WebGL/Canvas elements...");
411
+ }
412
+ const result = await page.evaluate(`
413
+ (function() {
414
+ var canvases = document.querySelectorAll('canvas');
415
+ var webgl1Count = 0;
416
+ var webgl2Count = 0;
417
+
418
+ // 各Canvasに対してWebGLコンテキストをチェック
419
+ for (var i = 0; i < canvases.length; i++) {
420
+ var canvas = canvases[i];
421
+ try {
422
+ // WebGL2をまず試行
423
+ var gl2 = canvas.getContext('webgl2');
424
+ if (gl2) {
425
+ webgl2Count++;
426
+ continue;
427
+ }
428
+ // WebGL1を試行
429
+ var gl1 = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
430
+ if (gl1) {
431
+ webgl1Count++;
432
+ }
433
+ } catch (e) {
434
+ // コンテキスト取得エラーは無視
435
+ }
436
+ }
437
+
438
+ // Three.js検出
439
+ var threeJsDetected = !!(
440
+ window.THREE ||
441
+ window.__THREE__ ||
442
+ window.__THREE_DEVTOOLS__ ||
443
+ document.querySelector('[data-three]') ||
444
+ document.querySelector('[data-engine*="three"]')
445
+ );
446
+
447
+ // R3F (React Three Fiber) 検出
448
+ if (!threeJsDetected) {
449
+ threeJsDetected = !!(
450
+ document.querySelector('[class*="r3f"]') ||
451
+ document.querySelector('[data-r3f]')
452
+ );
453
+ }
454
+
455
+ return {
456
+ detected: canvases.length > 0 && (webgl1Count > 0 || webgl2Count > 0),
457
+ canvasCount: canvases.length,
458
+ webgl1Count: webgl1Count,
459
+ webgl2Count: webgl2Count,
460
+ threeJsDetected: threeJsDetected
461
+ };
462
+ })()
463
+ `);
464
+ const typedResult = result;
465
+ const detectionTimeMs = Date.now() - startTime;
466
+ if ((0, logger_1.isDevelopment)()) {
467
+ logger_1.logger.info("[PageIngestAdapter] WebGL detection completed", {
468
+ ...typedResult,
469
+ detectionTimeMs,
470
+ });
471
+ }
472
+ return {
473
+ ...typedResult,
474
+ detectionTimeMs,
475
+ };
476
+ }
477
+ /**
478
+ * requestAnimationFrameでフレームレート安定化を待機
479
+ *
480
+ * WebGLサイトの初期化完了を判定するため、
481
+ * 3フレーム連続で安定したフレームレート(20-120fps)になるまで待機
482
+ *
483
+ * @param page - Playwrightページ
484
+ * @param maxWaitMs - 最大待機時間(ms)
485
+ * @returns WebGL待機結果
486
+ */
487
+ async waitForStableFrameRate(page, maxWaitMs = WEBGL_CONSTANTS.MAX_FRAME_RATE_WAIT_MS) {
488
+ const startTime = Date.now();
489
+ if ((0, logger_1.isDevelopment)()) {
490
+ logger_1.logger.debug("[PageIngestAdapter] Waiting for stable frame rate...", {
491
+ maxWaitMs,
492
+ });
493
+ }
494
+ try {
495
+ const result = await page.evaluate(`(async function() {
496
+ var maxWait = ${maxWaitMs};
497
+ var startTime = performance.now();
498
+ var stableFrameCount = ${WEBGL_CONSTANTS.STABLE_FRAME_COUNT};
499
+ var minFps = ${WEBGL_CONSTANTS.MIN_STABLE_FPS};
500
+ var maxFps = ${WEBGL_CONSTANTS.MAX_STABLE_FPS};
501
+ var tolerance = ${WEBGL_CONSTANTS.FRAME_INTERVAL_TOLERANCE};
502
+
503
+ // フレーム間隔の期待値(60fps基準: 16.67ms)
504
+ var expectedInterval = 1000 / 60;
505
+ var minInterval = 1000 / maxFps; // 8.33ms (120fps)
506
+ var maxInterval = 1000 / minFps; // 50ms (20fps)
507
+
508
+ return new Promise(function(resolve) {
509
+ var frameCount = 0;
510
+ var lastTime = performance.now();
511
+ var stableFrames = 0;
512
+ var lastFps = 0;
513
+ var rafId = null;
514
+
515
+ function checkFrame(currentTime) {
516
+ var now = currentTime || performance.now();
517
+ var delta = now - lastTime;
518
+ lastTime = now;
519
+ frameCount++;
520
+
521
+ // 初回フレームはスキップ
522
+ if (frameCount === 1) {
523
+ rafId = requestAnimationFrame(checkFrame);
524
+ return;
525
+ }
526
+
527
+ // フレームレートを計算
528
+ var currentFps = delta > 0 ? 1000 / delta : 0;
529
+ lastFps = currentFps;
530
+
531
+ // 安定判定: フレーム間隔が許容範囲内か
532
+ var isStable = delta >= minInterval && delta <= maxInterval;
533
+
534
+ // さらに厳密に: 前回との変動率をチェック
535
+ if (frameCount > 2 && isStable) {
536
+ isStable = true;
537
+ }
538
+
539
+ if (isStable) {
540
+ stableFrames++;
541
+ } else {
542
+ stableFrames = 0;
543
+ }
544
+
545
+ // 安定判定達成
546
+ if (stableFrames >= stableFrameCount) {
547
+ cancelAnimationFrame(rafId);
548
+ resolve({
549
+ stable: true,
550
+ waitTimeMs: Math.round(now - startTime),
551
+ frameRateStable: true,
552
+ lastFrameRate: Math.round(lastFps),
553
+ reason: 'stable'
554
+ });
555
+ return;
556
+ }
557
+
558
+ // タイムアウトチェック
559
+ if (now - startTime >= maxWait) {
560
+ cancelAnimationFrame(rafId);
561
+ resolve({
562
+ stable: false,
563
+ waitTimeMs: Math.round(now - startTime),
564
+ frameRateStable: false,
565
+ lastFrameRate: Math.round(lastFps),
566
+ reason: 'timeout'
567
+ });
568
+ return;
569
+ }
570
+
571
+ rafId = requestAnimationFrame(checkFrame);
572
+ }
573
+
574
+ rafId = requestAnimationFrame(checkFrame);
575
+ });
576
+ })()`);
577
+ const typedResult = result;
578
+ if ((0, logger_1.isDevelopment)()) {
579
+ logger_1.logger.info("[PageIngestAdapter] Frame rate stabilization check completed", {
580
+ ...typedResult,
581
+ totalElapsed: Date.now() - startTime,
582
+ });
583
+ }
584
+ return typedResult;
585
+ }
586
+ catch (error) {
587
+ const errorMessage = error instanceof Error ? error.message : String(error);
588
+ if ((0, logger_1.isDevelopment)()) {
589
+ logger_1.logger.warn("[PageIngestAdapter] Frame rate check failed", {
590
+ error: errorMessage,
591
+ elapsed: Date.now() - startTime,
592
+ });
593
+ }
594
+ return {
595
+ stable: false,
596
+ waitTimeMs: Date.now() - startTime,
597
+ frameRateStable: false,
598
+ reason: "error",
599
+ };
600
+ }
601
+ }
602
+ /**
603
+ * WebGL初期化完了を待機(適応的待機戦略)
604
+ *
605
+ * 1. WebGL/Canvas検出
606
+ * 2. 検出時: requestAnimationFrame同期で安定化待機
607
+ * 3. 必要に応じてnetworkidleにフォールバック
608
+ * 4. 追加の固定待機時間
609
+ *
610
+ * @param page - Playwrightページ
611
+ * @param options - インジェストオプション
612
+ * @param warnings - 警告配列(Graceful Degradation時に追加)
613
+ * @returns WebGL検出・待機結果
614
+ */
615
+ async waitForWebGLReady(page, options, warnings) {
616
+ // Step 1: WebGL検出
617
+ const detection = await this.detectWebGL(page);
618
+ // WebGL未検出の場合は早期リターン
619
+ if (!detection.detected) {
620
+ if ((0, logger_1.isDevelopment)()) {
621
+ logger_1.logger.debug("[PageIngestAdapter] No WebGL detected, skipping adaptive wait");
622
+ }
623
+ return { detection };
624
+ }
625
+ // Step 2: フレームレート安定化待機
626
+ const maxWaitMs = Math.min(WEBGL_CONSTANTS.MAX_FRAME_RATE_WAIT_MS, (options.timeout ?? DEFAULT_TIMEOUT) / 3);
627
+ const waitResult = await this.waitForStableFrameRate(page, maxWaitMs);
628
+ // Step 3: Graceful Degradation - 安定化失敗時は警告を追加
629
+ if (!waitResult.stable) {
630
+ warnings.push({
631
+ code: "WEBGL_FRAME_RATE_UNSTABLE",
632
+ message: `WebGL frame rate not stabilized after ${waitResult.waitTimeMs}ms, continuing with current state`,
633
+ });
634
+ if ((0, logger_1.isDevelopment)()) {
635
+ logger_1.logger.warn("[PageIngestAdapter] WebGL frame rate not stabilized, continuing with current state", {
636
+ waitResult,
637
+ });
638
+ }
639
+ }
640
+ // Step 4: 追加の固定待機時間
641
+ const extraWaitMs = options.webglExtraWaitMs ?? WEBGL_CONSTANTS.DEFAULT_EXTRA_WAIT_MS;
642
+ if (extraWaitMs > 0) {
643
+ if ((0, logger_1.isDevelopment)()) {
644
+ logger_1.logger.debug("[PageIngestAdapter] Additional WebGL wait", { extraWaitMs });
645
+ }
646
+ await page.waitForTimeout(extraWaitMs);
647
+ }
648
+ return { detection, wait: waitResult };
649
+ }
650
+ /**
651
+ * 共有ブラウザインスタンスを取得(Worker pipeline用)
652
+ * PageIngestAdapterが管理するシングルトンブラウザを外部サービスと共有し、
653
+ * Chromiumプロセス数を削減する(4→1)
654
+ */
655
+ async getSharedBrowser() {
656
+ return this.getBrowser();
657
+ }
658
+ /**
659
+ * ブラウザを起動(遅延初期化)
660
+ *
661
+ * v0.1.0改善:
662
+ * - ブラウザが閉じられている場合を検出し、自動的に再起動
663
+ * - isConnected()チェックで陳腐化した参照を検出
664
+ *
665
+ * v0.1.0セキュリティ改善:
666
+ * - --no-sandboxを削除(セキュリティリスク軽減)
667
+ * - --gpu-sandbox-start-earlyを追加(GPUプロセスのサンドボックス強化)
668
+ */
669
+ async getBrowser() {
670
+ // ブラウザが存在するが閉じられている場合は参照をクリア
671
+ if (this.browser && !this.browser.isConnected()) {
672
+ if ((0, logger_1.isDevelopment)()) {
673
+ logger_1.logger.warn("[PageIngestAdapter] Browser disconnected, will re-launch...");
674
+ }
675
+ this.browser = null;
676
+ }
677
+ if (!this.browser) {
678
+ if ((0, logger_1.isDevelopment)()) {
679
+ logger_1.logger.info("[PageIngestAdapter] Launching Chromium browser...");
680
+ }
681
+ this.browser = await playwright_1.chromium.launch({
682
+ headless: true,
683
+ args: [
684
+ "--disable-gpu",
685
+ "--disable-dev-shm-usage",
686
+ "--disable-setuid-sandbox",
687
+ // セキュリティ強化: --no-sandboxを削除し、GPUサンドボックスを早期起動
688
+ "--gpu-sandbox-start-early",
689
+ ],
690
+ });
691
+ }
692
+ return this.browser;
693
+ }
694
+ /**
695
+ * GPU有効化ブラウザを起動(専用インスタンス、共有しない)
696
+ * WebGL重サイト(Linear、Vercel、Notion等)のレンダリングパフォーマンス向上のため使用
697
+ * --use-angle=glでOpenGL ESバックエンドを使用し、GPUアクセラレーションを有効化
698
+ * このブラウザは使用後に必ず閉じる必要がある
699
+ *
700
+ * Phase1-1: GPU有効化オプション追加
701
+ */
702
+ async launchGPUEnabledBrowser() {
703
+ if ((0, logger_1.isDevelopment)()) {
704
+ logger_1.logger.info("[PageIngestAdapter] Launching GPU-enabled Chromium browser...");
705
+ }
706
+ return playwright_1.chromium.launch({
707
+ headless: true,
708
+ args: [...gpu_browser_args_1.GPU_BROWSER_BASE_ARGS],
709
+ });
710
+ }
711
+ /**
712
+ * WebGL無効化ブラウザを起動(専用インスタンス、共有しない)
713
+ * 重い3Dサイトでハングを防止するため、WebGL関連機能を完全に無効化
714
+ * このブラウザは使用後に必ず閉じる必要がある
715
+ */
716
+ async launchWebGLDisabledBrowser() {
717
+ if ((0, logger_1.isDevelopment)()) {
718
+ logger_1.logger.info("[PageIngestAdapter] Launching WebGL-disabled Chromium browser...");
719
+ }
720
+ return playwright_1.chromium.launch({
721
+ headless: true,
722
+ args: [
723
+ // 標準のセキュリティ/パフォーマンス設定
724
+ "--disable-gpu",
725
+ "--disable-dev-shm-usage",
726
+ "--disable-setuid-sandbox",
727
+ // セキュリティ強化: --no-sandboxを削除し、GPUサンドボックスを早期起動
728
+ "--gpu-sandbox-start-early",
729
+ // WebGL/3D関連を完全に無効化
730
+ "--disable-webgl",
731
+ "--disable-webgl2",
732
+ "--disable-3d-apis",
733
+ "--disable-software-rasterizer",
734
+ "--disable-accelerated-2d-canvas",
735
+ "--disable-accelerated-video-decode",
736
+ // 追加のパフォーマンス最適化
737
+ "--disable-background-timer-throttling",
738
+ "--disable-renderer-backgrounding",
739
+ // タイムアウト強制用
740
+ "--disable-hang-monitor",
741
+ ],
742
+ });
743
+ }
744
+ /**
745
+ * ページからメタデータを抽出
746
+ */
747
+ async extractMetadata(page) {
748
+ // page.evaluate内でTypeScriptヘルパー関数(__name)が使用されないよう、
749
+ // シンプルな構造で記述
750
+ const result = await page.evaluate(`
751
+ (function() {
752
+ function getMetaContent(name) {
753
+ var el = document.querySelector('meta[name="' + name + '"]') ||
754
+ document.querySelector('meta[property="' + name + '"]');
755
+ return el ? el.getAttribute('content') : undefined;
756
+ }
757
+
758
+ function getFavicon() {
759
+ var link = document.querySelector('link[rel="icon"]') ||
760
+ document.querySelector('link[rel="shortcut icon"]');
761
+ return link ? link.getAttribute('href') : undefined;
762
+ }
763
+
764
+ var canonicalEl = document.querySelector('link[rel="canonical"]');
765
+ var keywordsStr = getMetaContent('keywords');
766
+
767
+ return {
768
+ title: document.title || '',
769
+ description: getMetaContent('description') || getMetaContent('og:description'),
770
+ ogImage: getMetaContent('og:image'),
771
+ favicon: getFavicon(),
772
+ lang: document.documentElement.lang || undefined,
773
+ canonical: canonicalEl ? canonicalEl.getAttribute('href') : undefined,
774
+ keywords: keywordsStr ? keywordsStr.split(',').map(function(k) { return k.trim(); }) : undefined,
775
+ };
776
+ })()
777
+ `);
778
+ return result;
779
+ }
780
+ /**
781
+ * ビューポート情報を取得
782
+ */
783
+ async getViewportInfo(page, viewport) {
784
+ // page.evaluate内でTypeScriptヘルパー関数(__name)が使用されないよう、
785
+ // 文字列形式で記述し、パラメータは別途渡す
786
+ const result = await page.evaluate(`
787
+ (function() {
788
+ return {
789
+ documentWidth: document.documentElement.scrollWidth,
790
+ documentHeight: document.documentElement.scrollHeight,
791
+ viewportWidth: ${viewport.width},
792
+ viewportHeight: ${viewport.height},
793
+ scrollHeight: document.body ? document.body.scrollHeight : 0,
794
+ };
795
+ })()
796
+ `);
797
+ return result;
798
+ }
799
+ /**
800
+ * セクション要素とその子要素のComputed Stylesを抽出
801
+ *
802
+ * ブラウザがレンダリングした実際のスタイル値を取得し、
803
+ * デザインの正確な再現を可能にする
804
+ *
805
+ * 取得する子要素:
806
+ * - 見出し: h1-h6
807
+ * - ボタン: button, a.btn, [role="button"]
808
+ * - リンク: a(主要なもの)
809
+ * - 入力: input, select, textarea
810
+ * - コンテナ: div(直接の子のみ、display: flex/gridのもの)
811
+ * - 画像: img
812
+ * - 段落: p(最初の3つのみ)
813
+ *
814
+ * @param page - Playwrightページ
815
+ * @returns Computed Styles配列
816
+ */
817
+ async extractComputedStyles(page) {
818
+ if ((0, logger_1.isDevelopment)()) {
819
+ logger_1.logger.debug("[PageIngestAdapter] Extracting computed styles...");
820
+ }
821
+ const result = await page.evaluate(`
822
+ (function() {
823
+ // ユニークなセレクタを生成
824
+ function getUniqueSelector(el) {
825
+ if (el.id) {
826
+ return '#' + el.id;
827
+ }
828
+ if (el.className && typeof el.className === 'string') {
829
+ var classes = el.className.trim().split(/\\s+/).filter(function(c) {
830
+ return c.length > 0 && !c.startsWith('_') && c.length < 50;
831
+ }).slice(0, 3);
832
+ if (classes.length > 0) {
833
+ return el.tagName.toLowerCase() + '.' + classes.join('.');
834
+ }
835
+ }
836
+ return el.tagName.toLowerCase();
837
+ }
838
+
839
+ // 親セクションからの相対パスを取得
840
+ function getRelativePath(el, sectionEl) {
841
+ var path = [];
842
+ var current = el;
843
+ while (current && current !== sectionEl) {
844
+ var tagName = current.tagName.toLowerCase();
845
+ var siblings = current.parentElement ? Array.from(current.parentElement.children).filter(function(s) {
846
+ return s.tagName === current.tagName;
847
+ }) : [];
848
+ if (siblings.length > 1) {
849
+ var index = siblings.indexOf(current) + 1;
850
+ path.unshift(tagName + '[' + index + ']');
851
+ } else {
852
+ path.unshift(tagName);
853
+ }
854
+ current = current.parentElement;
855
+ }
856
+ return path.join(' > ');
857
+ }
858
+
859
+ // 要素のComputed Stylesを取得
860
+ function getElementStyles(el) {
861
+ var style = window.getComputedStyle(el);
862
+ return {
863
+ // 背景
864
+ backgroundColor: style.backgroundColor,
865
+ backgroundImage: style.backgroundImage,
866
+ // テキスト
867
+ color: style.color,
868
+ fontSize: style.fontSize,
869
+ fontFamily: style.fontFamily,
870
+ fontWeight: style.fontWeight,
871
+ lineHeight: style.lineHeight,
872
+ letterSpacing: style.letterSpacing,
873
+ textAlign: style.textAlign,
874
+ textDecoration: style.textDecoration,
875
+ textTransform: style.textTransform,
876
+ // レイアウト
877
+ display: style.display,
878
+ position: style.position,
879
+ flexDirection: style.flexDirection,
880
+ justifyContent: style.justifyContent,
881
+ alignItems: style.alignItems,
882
+ padding: style.padding,
883
+ paddingTop: style.paddingTop,
884
+ paddingRight: style.paddingRight,
885
+ paddingBottom: style.paddingBottom,
886
+ paddingLeft: style.paddingLeft,
887
+ margin: style.margin,
888
+ marginTop: style.marginTop,
889
+ marginRight: style.marginRight,
890
+ marginBottom: style.marginBottom,
891
+ marginLeft: style.marginLeft,
892
+ gap: style.gap,
893
+ width: style.width,
894
+ height: style.height,
895
+ maxWidth: style.maxWidth,
896
+ minHeight: style.minHeight,
897
+ // 視覚効果
898
+ border: style.border,
899
+ borderRadius: style.borderRadius,
900
+ boxShadow: style.boxShadow,
901
+ backdropFilter: style.backdropFilter,
902
+ opacity: style.opacity,
903
+ overflow: style.overflow,
904
+ // トランジション・アニメーション
905
+ transition: style.transition,
906
+ transform: style.transform
907
+ };
908
+ }
909
+
910
+ // 子要素のスタイルを取得
911
+ function getChildrenStyles(sectionEl, maxChildren) {
912
+ var children = [];
913
+ var childSelectors = 'h1, h2, h3, h4, h5, h6, button, a[href], input, select, textarea, img, p, [role="button"], [class*="btn"], [class*="button"]';
914
+ var childElements = sectionEl.querySelectorAll(childSelectors);
915
+
916
+ // 直接の子divでflex/gridレイアウトのものも追加
917
+ var directDivs = Array.from(sectionEl.children).filter(function(el) {
918
+ if (el.tagName !== 'DIV') return false;
919
+ var style = window.getComputedStyle(el);
920
+ return style.display === 'flex' || style.display === 'grid';
921
+ });
922
+
923
+ var allElements = Array.from(childElements).concat(directDivs);
924
+ var processed = new Set();
925
+
926
+ // 段落は最初の3つのみ
927
+ var pCount = 0;
928
+ var MAX_P = 3;
929
+
930
+ for (var i = 0; i < allElements.length && children.length < maxChildren; i++) {
931
+ var el = allElements[i];
932
+
933
+ // 重複チェック
934
+ if (processed.has(el)) continue;
935
+ processed.add(el);
936
+
937
+ // 非表示要素はスキップ
938
+ var style = window.getComputedStyle(el);
939
+ if (style.display === 'none' || style.visibility === 'hidden') continue;
940
+
941
+ // 段落の制限
942
+ if (el.tagName === 'P') {
943
+ if (pCount >= MAX_P) continue;
944
+ pCount++;
945
+ }
946
+
947
+ var textContent = '';
948
+ if (el.tagName === 'BUTTON' || el.tagName === 'A' || el.getAttribute('role') === 'button') {
949
+ textContent = (el.textContent || '').trim().substring(0, 100);
950
+ } else if (el.tagName.match(/^H[1-6]$/)) {
951
+ textContent = (el.textContent || '').trim().substring(0, 200);
952
+ }
953
+
954
+ children.push({
955
+ selector: getUniqueSelector(el),
956
+ tagName: el.tagName,
957
+ className: el.className || '',
958
+ path: getRelativePath(el, sectionEl),
959
+ textContent: textContent || undefined,
960
+ styles: getElementStyles(el)
961
+ });
962
+ }
963
+
964
+ return children;
965
+ }
966
+
967
+ var sectionSelectors = 'section, header, footer, main, nav, article, aside, [role="banner"], [role="main"], [role="contentinfo"], [role="navigation"]';
968
+ var sections = document.querySelectorAll(sectionSelectors);
969
+ var MAX_CHILDREN_PER_SECTION = 30;
970
+
971
+ return Array.from(sections).map(function(el, index) {
972
+ var children = getChildrenStyles(el, MAX_CHILDREN_PER_SECTION);
973
+
974
+ return {
975
+ index: index,
976
+ tagName: el.tagName,
977
+ className: el.className || '',
978
+ id: el.id || '',
979
+ role: el.getAttribute('role') || '',
980
+ styles: getElementStyles(el),
981
+ children: children.length > 0 ? children : undefined
982
+ };
983
+ });
984
+ })()
985
+ `);
986
+ const computedStyles = result;
987
+ if ((0, logger_1.isDevelopment)()) {
988
+ const totalChildren = computedStyles.reduce((sum, s) => sum + (s.children?.length ?? 0), 0);
989
+ logger_1.logger.debug("[PageIngestAdapter] Computed styles extracted", {
990
+ sectionCount: computedStyles.length,
991
+ totalChildElements: totalChildren,
992
+ });
993
+ }
994
+ return computedStyles;
995
+ }
996
+ /**
997
+ * URLからWebページをインジェストする
998
+ *
999
+ * @param options - インジェストオプション
1000
+ * @returns インジェスト結果
1001
+ */
1002
+ async ingest(options) {
1003
+ const { url, ...ingestOptions } = options;
1004
+ const viewport = ingestOptions.viewport ?? DEFAULT_VIEWPORT;
1005
+ const timeout = ingestOptions.timeout ?? DEFAULT_TIMEOUT;
1006
+ // disableWebGLはenableGPUより優先される
1007
+ const useWebGLDisabledBrowser = ingestOptions.disableWebGL === true;
1008
+ // GPU有効化(disableWebGLがtrueの場合は無効)
1009
+ const useGPUEnabledBrowser = !useWebGLDisabledBrowser && ingestOptions.enableGPU === true;
1010
+ const forceKillOnTimeout = ingestOptions.forceKillOnTimeout === true;
1011
+ if ((0, logger_1.isDevelopment)()) {
1012
+ logger_1.logger.info("[PageIngestAdapter] Starting ingest", {
1013
+ url,
1014
+ viewport,
1015
+ timeout,
1016
+ disableWebGL: useWebGLDisabledBrowser,
1017
+ enableGPU: useGPUEnabledBrowser,
1018
+ forceKillOnTimeout,
1019
+ });
1020
+ }
1021
+ // robots.txt チェック(RFC 9309準拠)
1022
+ const robotsResult = await (0, core_1.isUrlAllowedByRobotsTxt)(url, ingestOptions.respectRobotsTxt);
1023
+ if (!robotsResult.allowed) {
1024
+ throw new errors_1.McpError(errors_1.ErrorCode.ROBOTS_TXT_BLOCKED, `Blocked by robots.txt: ${url} (domain: ${robotsResult.domain}, reason: ${robotsResult.reason}). ` +
1025
+ `Use respect_robots_txt: false to override. ` +
1026
+ `Note: Overriding robots.txt may have legal implications depending on jurisdiction (e.g., EU DSM Directive Article 4).`, { domain: robotsResult.domain, reason: robotsResult.reason });
1027
+ }
1028
+ let context = null;
1029
+ let page = null;
1030
+ let globalTimeoutId = null;
1031
+ // WebGL無効化またはGPU有効化ブラウザを使用する場合は専用インスタンス
1032
+ let dedicatedBrowser = null;
1033
+ // プロセス強制終了用のPID
1034
+ let browserPid;
1035
+ // タイムアウトreject関数(グローバルタイムアウト時にPromiseをrejectするため)
1036
+ let timeoutReject = null;
1037
+ // BrowserProcessManager(専用ブラウザ使用時のみ作成)
1038
+ let processManager = null;
1039
+ try {
1040
+ // ブラウザを取得
1041
+ // 優先順位: disableWebGL > enableGPU > 通常ブラウザ
1042
+ let browser;
1043
+ if (useWebGLDisabledBrowser) {
1044
+ dedicatedBrowser = await this.launchWebGLDisabledBrowser();
1045
+ browser = dedicatedBrowser;
1046
+ // browser.process() はPlaywrightの型定義に含まれていないが、実行時に存在
1047
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1048
+ browserPid = browser.process?.()?.pid;
1049
+ if ((0, logger_1.isDevelopment)()) {
1050
+ logger_1.logger.debug("[PageIngestAdapter] Using dedicated WebGL-disabled browser", {
1051
+ pid: browserPid,
1052
+ });
1053
+ }
1054
+ }
1055
+ else if (useGPUEnabledBrowser) {
1056
+ // GPU有効化ブラウザ(専用インスタンス)
1057
+ dedicatedBrowser = await this.launchGPUEnabledBrowser();
1058
+ browser = dedicatedBrowser;
1059
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1060
+ browserPid = browser.process?.()?.pid;
1061
+ if ((0, logger_1.isDevelopment)()) {
1062
+ logger_1.logger.debug("[PageIngestAdapter] Using dedicated GPU-enabled browser", {
1063
+ pid: browserPid,
1064
+ });
1065
+ }
1066
+ }
1067
+ else {
1068
+ browser = await this.getBrowser();
1069
+ // 共有ブラウザのPIDも取得(強制終了時に必要)
1070
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1071
+ browserPid = browser.process?.()?.pid;
1072
+ }
1073
+ // BrowserProcessManagerを作成(専用ブラウザ使用時またはforceKillOnTimeout有効時)
1074
+ if (dedicatedBrowser && forceKillOnTimeout) {
1075
+ processManager = new browser_process_manager_1.BrowserProcessManager({
1076
+ browser: dedicatedBrowser,
1077
+ forceKillOnTimeout: true,
1078
+ killGracePeriodMs: 5000,
1079
+ });
1080
+ if ((0, logger_1.isDevelopment)()) {
1081
+ logger_1.logger.debug("[PageIngestAdapter] BrowserProcessManager created for dedicated browser");
1082
+ }
1083
+ }
1084
+ // 新しいコンテキストを作成
1085
+ context = await browser.newContext({
1086
+ viewport,
1087
+ javaScriptEnabled: !ingestOptions.disableJavaScript,
1088
+ userAgent: core_1.ROBOTS_TXT.USER_AGENT,
1089
+ });
1090
+ page = await context.newPage();
1091
+ // ページレベルのデフォルトタイムアウトを設定
1092
+ // page.evaluate()等にはネイティブタイムアウトオプションがないため、
1093
+ // ページ全体のタイムアウトを設定することでハング防止
1094
+ page.setDefaultTimeout(timeout);
1095
+ // グローバルタイムアウトハンドラー: タイムアウト時にページ/ブラウザを強制クローズ
1096
+ // これにより、ハングしたpage.evaluate()も中断される
1097
+ // Note: page.evaluate()にはネイティブタイムアウトがないため、この方法でハングを防止
1098
+ // さらに、timeoutRejectを呼び出してメインのPromiseもrejectする
1099
+ const timeoutPromise = new Promise((_, reject) => {
1100
+ timeoutReject = reject;
1101
+ });
1102
+ const globalTimeoutMs = timeout + 5000;
1103
+ globalTimeoutId = setTimeout(async () => {
1104
+ const timeoutError = new Error(`Global timeout: ingest operation exceeded ${timeout}ms for ${url}`);
1105
+ if ((0, logger_1.isDevelopment)()) {
1106
+ logger_1.logger.error("[PageIngestAdapter] Global timeout triggered, force closing", {
1107
+ url,
1108
+ timeout,
1109
+ forceKillOnTimeout,
1110
+ browserPid,
1111
+ });
1112
+ }
1113
+ // Phase 1: ページをクローズ
1114
+ try {
1115
+ await Promise.race([
1116
+ page?.close(),
1117
+ new Promise((_, reject) => setTimeout(() => reject(new Error("page.close timeout")), 5000)),
1118
+ ]);
1119
+ }
1120
+ catch {
1121
+ if ((0, logger_1.isDevelopment)()) {
1122
+ logger_1.logger.warn("[PageIngestAdapter] page.close() failed or timed out");
1123
+ }
1124
+ }
1125
+ // Phase 2: 専用ブラウザを使用している場合はブラウザをクローズ
1126
+ // BrowserProcessManagerを使用してタイムアウト付きクローズと強制終了を処理
1127
+ if (dedicatedBrowser) {
1128
+ if (processManager) {
1129
+ // BrowserProcessManagerを使用: タイムアウト付きクローズ(失敗時は自動で強制終了)
1130
+ const closed = await processManager.closeWithTimeout(5000);
1131
+ if (!closed && (0, logger_1.isDevelopment)()) {
1132
+ logger_1.logger.warn("[PageIngestAdapter] browser.close() timed out, force kill attempted");
1133
+ }
1134
+ }
1135
+ else {
1136
+ // processManagerがない場合は従来の方法でクローズ
1137
+ try {
1138
+ await Promise.race([
1139
+ dedicatedBrowser.close(),
1140
+ new Promise((_, reject) => setTimeout(() => reject(new Error("browser.close timeout")), 5000)),
1141
+ ]);
1142
+ }
1143
+ catch {
1144
+ if ((0, logger_1.isDevelopment)()) {
1145
+ logger_1.logger.warn("[PageIngestAdapter] browser.close() failed or timed out");
1146
+ }
1147
+ // forceKillOnTimeoutが有効な場合は手動でkill
1148
+ if (forceKillOnTimeout && browserPid) {
1149
+ try {
1150
+ if ((0, logger_1.isDevelopment)()) {
1151
+ logger_1.logger.warn("[PageIngestAdapter] Force killing browser process", {
1152
+ pid: browserPid,
1153
+ });
1154
+ }
1155
+ process.kill(browserPid, "SIGKILL");
1156
+ }
1157
+ catch {
1158
+ // プロセスが既に終了している場合は無視
1159
+ }
1160
+ }
1161
+ }
1162
+ }
1163
+ }
1164
+ // Phase 4: メインのPromiseをrejectしてエラーを伝播
1165
+ // これにより、ハングしている操作があっても関数がエラーで返る
1166
+ if (timeoutReject) {
1167
+ timeoutReject(timeoutError);
1168
+ }
1169
+ }, globalTimeoutMs);
1170
+ // グローバルタイムアウトとレースするためのヘルパー関数
1171
+ // 既存のwithTimeout関数とは異なり、グローバルタイムアウトPromiseとレースする
1172
+ const withGlobalTimeout = async (operation, operationName) => {
1173
+ return Promise.race([
1174
+ operation,
1175
+ timeoutPromise.then(() => {
1176
+ // This branch never executes (timeoutPromise only rejects, never resolves)
1177
+ throw new Error(`${operationName} timed out`);
1178
+ }),
1179
+ ]);
1180
+ };
1181
+ // ページに移動
1182
+ // waitForWebGL: trueの場合は'domcontentloaded'を使用(networkidleは永遠に完了しない問題への対応)
1183
+ // adaptiveWebGLWait有効時も'domcontentloaded'を使用(WebGLサイトは'load'が発火しない場合がある)
1184
+ // WebGL検出とフレームレート安定化で追加待機を処理するため、早期のDOM準備完了で十分
1185
+ let waitUntil = ingestOptions.waitUntil ?? "load";
1186
+ if (ingestOptions.waitForWebGL === true) {
1187
+ // waitForWebGL: trueが明示的に指定された場合、常にdomcontentloadedを使用
1188
+ waitUntil = "domcontentloaded";
1189
+ if ((0, logger_1.isDevelopment)()) {
1190
+ logger_1.logger.debug("[PageIngestAdapter] Using domcontentloaded for waitForWebGL mode");
1191
+ }
1192
+ }
1193
+ else if (ingestOptions.adaptiveWebGLWait !== false && waitUntil === "load") {
1194
+ waitUntil = "domcontentloaded";
1195
+ if ((0, logger_1.isDevelopment)()) {
1196
+ logger_1.logger.debug("[PageIngestAdapter] Using domcontentloaded for adaptive WebGL wait");
1197
+ }
1198
+ }
1199
+ if ((0, logger_1.isDevelopment)()) {
1200
+ logger_1.logger.debug("[PageIngestAdapter] Navigating with waitUntil", { url, waitUntil, timeout });
1201
+ }
1202
+ // DNS不安定対策: リトライ機構付きpage.goto
1203
+ // ERR_NAME_NOT_RESOLVED, EAI_AGAIN等のDNSエラー時のみリトライする
1204
+ let response = null;
1205
+ let lastError = null;
1206
+ for (let attempt = 0; attempt <= exports.DNS_RETRY_CONFIG.MAX_RETRIES; attempt++) {
1207
+ try {
1208
+ response = await withGlobalTimeout(page.goto(url, {
1209
+ timeout,
1210
+ waitUntil,
1211
+ }), "page.goto");
1212
+ lastError = null;
1213
+ break; // 成功したらループを抜ける
1214
+ }
1215
+ catch (gotoError) {
1216
+ lastError = gotoError instanceof Error ? gotoError : new Error(String(gotoError));
1217
+ // DNSエラーでない場合はリトライしない(即座に再throw)
1218
+ if (!isDnsRelatedError(gotoError)) {
1219
+ throw lastError;
1220
+ }
1221
+ // 最後のリトライで失敗した場合は再throw
1222
+ if (attempt >= exports.DNS_RETRY_CONFIG.MAX_RETRIES) {
1223
+ logger_1.logger.error("[PageIngestAdapter] DNS retry exhausted", {
1224
+ url,
1225
+ attempts: attempt + 1,
1226
+ error: lastError.message,
1227
+ });
1228
+ throw lastError;
1229
+ }
1230
+ // リトライ遅延(exponential backoff)
1231
+ const retryDelay = calculateRetryDelay(attempt);
1232
+ // 残りタイムアウトをチェック: リトライ遅延 + 次の試行がタイムアウトを超えないこと
1233
+ // グローバルタイムアウトが管理しているため、ここでは警告ログのみ
1234
+ logger_1.logger.warn("[PageIngestAdapter] DNS error, retrying", {
1235
+ url,
1236
+ attempt: attempt + 1,
1237
+ maxRetries: exports.DNS_RETRY_CONFIG.MAX_RETRIES,
1238
+ retryDelayMs: retryDelay,
1239
+ error: lastError.message,
1240
+ });
1241
+ await new Promise((resolve) => setTimeout(resolve, retryDelay));
1242
+ }
1243
+ }
1244
+ if (!response) {
1245
+ throw lastError ?? new Error("No response received from page");
1246
+ }
1247
+ const finalUrl = page.url();
1248
+ // 特定のセレクターを待機(オプション)
1249
+ if (ingestOptions.waitForSelector) {
1250
+ await page.waitForSelector(ingestOptions.waitForSelector, {
1251
+ timeout: timeout / 2,
1252
+ });
1253
+ }
1254
+ // ステップ0: ユーザーインタラクション模倣(ローディング解除トリガー)
1255
+ // マウス移動でローディングアニメーションを解除するサイト対応
1256
+ if (ingestOptions.simulateUserInteraction !== false) {
1257
+ if ((0, logger_1.isDevelopment)()) {
1258
+ logger_1.logger.debug("[PageIngestAdapter] Step 0: Simulating user interaction");
1259
+ }
1260
+ try {
1261
+ // ビューポート中央にマウスを移動
1262
+ const vp = page.viewportSize() ?? { width: 1440, height: 900 };
1263
+ await page.mouse.move(vp.width / 2, vp.height / 2);
1264
+ // 少しスクロール
1265
+ await page.mouse.wheel(0, 100);
1266
+ await page.waitForTimeout(500);
1267
+ // 元に戻す
1268
+ await page.mouse.wheel(0, -100);
1269
+ if ((0, logger_1.isDevelopment)()) {
1270
+ logger_1.logger.debug("[PageIngestAdapter] User interaction simulation completed");
1271
+ }
1272
+ }
1273
+ catch (e) {
1274
+ if ((0, logger_1.isDevelopment)()) {
1275
+ logger_1.logger.warn("[PageIngestAdapter] User interaction simulation failed", {
1276
+ error: String(e),
1277
+ });
1278
+ }
1279
+ }
1280
+ }
1281
+ // ステップ0.5: waitForWebGLモードのCanvas待機(Phase1-2)
1282
+ // networkidleが永遠に完了しないWebGLサイト向けの最適化
1283
+ if (ingestOptions.waitForWebGL === true) {
1284
+ if ((0, logger_1.isDevelopment)()) {
1285
+ logger_1.logger.debug("[PageIngestAdapter] Step 0.5: waitForWebGL mode - waiting for canvas element");
1286
+ }
1287
+ try {
1288
+ // Canvas要素の出現を待機(最大10秒)
1289
+ await page.waitForSelector("canvas", { timeout: WEBGL_CONSTANTS.CANVAS_WAIT_TIMEOUT_MS });
1290
+ // WebGLコンテキスト取得確認
1291
+ const hasWebGL = await page.evaluate(`
1292
+ (function() {
1293
+ var canvas = document.querySelector('canvas');
1294
+ if (!canvas) return false;
1295
+ var gl = canvas.getContext('webgl') || canvas.getContext('webgl2');
1296
+ return !!gl;
1297
+ })()
1298
+ `);
1299
+ // WebGL初期化待機
1300
+ if (hasWebGL) {
1301
+ const webglWaitMs = ingestOptions.webglWaitMs ?? WEBGL_CONSTANTS.DEFAULT_WEBGL_WAIT_MS;
1302
+ if (webglWaitMs > 0) {
1303
+ if ((0, logger_1.isDevelopment)()) {
1304
+ logger_1.logger.debug("[PageIngestAdapter] WebGL context found, waiting for initialization", {
1305
+ webglWaitMs,
1306
+ });
1307
+ }
1308
+ await page.waitForTimeout(webglWaitMs);
1309
+ }
1310
+ }
1311
+ else {
1312
+ if ((0, logger_1.isDevelopment)()) {
1313
+ logger_1.logger.debug("[PageIngestAdapter] Canvas found but no WebGL context, skipping wait");
1314
+ }
1315
+ }
1316
+ }
1317
+ catch (e) {
1318
+ // Canvas未検出やエラー時もエラーにしない(Graceful Degradation)
1319
+ if ((0, logger_1.isDevelopment)()) {
1320
+ logger_1.logger.debug("[PageIngestAdapter] waitForWebGL canvas/context check failed, continuing", {
1321
+ error: e instanceof Error ? e.message : String(e),
1322
+ });
1323
+ }
1324
+ }
1325
+ }
1326
+ // ステップ1: ローディング要素の完全非表示を待機(最優先)
1327
+ // CSSアニメーション(opacity, transform)で隠れるローディング要素対応
1328
+ if (ingestOptions.waitForSelectorHidden) {
1329
+ if ((0, logger_1.isDevelopment)()) {
1330
+ logger_1.logger.debug("[PageIngestAdapter] Step 1: Waiting for loading element to become invisible", {
1331
+ selector: ingestOptions.waitForSelectorHidden,
1332
+ });
1333
+ }
1334
+ const loadingHiddenResult = await this.waitForLoadingElementHidden(page, ingestOptions.waitForSelectorHidden, Math.min(timeout / 2, 30000));
1335
+ if ((0, logger_1.isDevelopment)()) {
1336
+ logger_1.logger.debug("[PageIngestAdapter] Loading element check completed", loadingHiddenResult);
1337
+ }
1338
+ }
1339
+ // ステップ1.5: コンテンツ要素の可視性待機
1340
+ // 実際のコンテンツが描画されるまで待機(sr-only以外の可視要素)
1341
+ if (ingestOptions.waitForContentVisible) {
1342
+ if ((0, logger_1.isDevelopment)()) {
1343
+ logger_1.logger.debug("[PageIngestAdapter] Step 1.5: Waiting for content to become visible", {
1344
+ selector: ingestOptions.waitForContentVisible,
1345
+ });
1346
+ }
1347
+ try {
1348
+ await page.waitForSelector(ingestOptions.waitForContentVisible, {
1349
+ state: "visible",
1350
+ timeout: Math.min(timeout / 2, 30000),
1351
+ });
1352
+ if ((0, logger_1.isDevelopment)()) {
1353
+ logger_1.logger.debug("[PageIngestAdapter] Content element visible");
1354
+ }
1355
+ }
1356
+ catch {
1357
+ if ((0, logger_1.isDevelopment)()) {
1358
+ logger_1.logger.warn("[PageIngestAdapter] Content element not found or timeout", {
1359
+ selector: ingestOptions.waitForContentVisible,
1360
+ });
1361
+ }
1362
+ }
1363
+ }
1364
+ // ステップ2: DOM安定化待機(React/Vue/Next.js hydration対応)
1365
+ // ローディング完了後のコンテンツ描画を待つ
1366
+ if (ingestOptions.waitForDomStable !== false) {
1367
+ const domStableTimeout = ingestOptions.domStableTimeout ?? 500;
1368
+ const maxWait = Math.min(timeout / 2, 10000);
1369
+ if ((0, logger_1.isDevelopment)()) {
1370
+ logger_1.logger.debug("[PageIngestAdapter] Step 2: Waiting for DOM stability", {
1371
+ domStableTimeout,
1372
+ maxWait,
1373
+ });
1374
+ }
1375
+ const result = await withGlobalTimeout(this.waitForDomStable(page, domStableTimeout, maxWait), "waitForDomStable");
1376
+ if ((0, logger_1.isDevelopment)()) {
1377
+ logger_1.logger.debug("[PageIngestAdapter] DOM stability check completed", result);
1378
+ }
1379
+ }
1380
+ // ステップ2.5: WebGL/3Dサイト適応的待機(デフォルト有効)
1381
+ // Canvas/WebGLを検出し、フレームレート安定化を待機
1382
+ // disableWebGL=trueの場合はスキップ(WebGLが無効化されているため検出不要)
1383
+ const warnings = [];
1384
+ let webglDetection;
1385
+ let webglWait;
1386
+ // disableWebGL使用時は警告を追加
1387
+ if (useWebGLDisabledBrowser) {
1388
+ warnings.push({
1389
+ code: "WEBGL_DISABLED",
1390
+ message: "WebGL has been disabled for this ingest. 3D/WebGL content will not render correctly.",
1391
+ });
1392
+ if ((0, logger_1.isDevelopment)()) {
1393
+ logger_1.logger.info("[PageIngestAdapter] Skipping WebGL detection (disableWebGL=true)");
1394
+ }
1395
+ }
1396
+ else if (ingestOptions.adaptiveWebGLWait !== false) {
1397
+ if ((0, logger_1.isDevelopment)()) {
1398
+ logger_1.logger.debug("[PageIngestAdapter] Step 2.5: Adaptive WebGL wait (enabled by default)");
1399
+ }
1400
+ try {
1401
+ const webglResult = await withGlobalTimeout(this.waitForWebGLReady(page, ingestOptions, warnings), "waitForWebGLReady");
1402
+ webglDetection = webglResult.detection;
1403
+ webglWait = webglResult.wait;
1404
+ if (webglDetection.detected && (0, logger_1.isDevelopment)()) {
1405
+ logger_1.logger.info("[PageIngestAdapter] WebGL site detected", {
1406
+ canvasCount: webglDetection.canvasCount,
1407
+ webgl1Count: webglDetection.webgl1Count,
1408
+ webgl2Count: webglDetection.webgl2Count,
1409
+ threeJsDetected: webglDetection.threeJsDetected,
1410
+ frameRateStable: webglWait?.frameRateStable,
1411
+ lastFrameRate: webglWait?.lastFrameRate,
1412
+ });
1413
+ }
1414
+ }
1415
+ catch (e) {
1416
+ // Graceful Degradation: WebGL待機失敗時も処理を継続
1417
+ const errorMessage = e instanceof Error ? e.message : String(e);
1418
+ warnings.push({
1419
+ code: "WEBGL_WAIT_ERROR",
1420
+ message: `WebGL adaptive wait failed: ${errorMessage}`,
1421
+ });
1422
+ if ((0, logger_1.isDevelopment)()) {
1423
+ logger_1.logger.warn("[PageIngestAdapter] WebGL adaptive wait failed, continuing", {
1424
+ error: errorMessage,
1425
+ });
1426
+ }
1427
+ }
1428
+ }
1429
+ // ステップ3: 追加の固定待機時間(アニメーション完了用)
1430
+ if (ingestOptions.waitForTimeout && ingestOptions.waitForTimeout > 0) {
1431
+ if ((0, logger_1.isDevelopment)()) {
1432
+ logger_1.logger.debug("[PageIngestAdapter] Step 3: Additional wait", {
1433
+ waitForTimeout: ingestOptions.waitForTimeout,
1434
+ });
1435
+ }
1436
+ await page.waitForTimeout(ingestOptions.waitForTimeout);
1437
+ }
1438
+ // WebGLサイトかどうかでタイムアウトを調整
1439
+ const isWebGLSiteForTimeout = webglDetection?.detected ?? false;
1440
+ const timeoutMultiplier = isWebGLSiteForTimeout ? OPERATION_TIMEOUTS.WEBGL_MULTIPLIER : 1;
1441
+ // HTML取得(操作レベルタイムアウト付き)
1442
+ const html = await withTimeout(page.content(), OPERATION_TIMEOUTS.CONTENT_EXTRACTION * timeoutMultiplier, "page.content()");
1443
+ // メタデータ抽出(操作レベルタイムアウト付き)
1444
+ const metadata = await withTimeout(this.extractMetadata(page), OPERATION_TIMEOUTS.METADATA_EXTRACTION * timeoutMultiplier, "extractMetadata");
1445
+ // ビューポート情報取得(操作レベルタイムアウト付き)
1446
+ const viewportInfo = await withTimeout(this.getViewportInfo(page, viewport), OPERATION_TIMEOUTS.VIEWPORT_INFO * timeoutMultiplier, "getViewportInfo");
1447
+ // スクリーンショット取得(skipScreenshot: true の場合はスキップ)
1448
+ let screenshots;
1449
+ if (!ingestOptions.skipScreenshot) {
1450
+ // WebGLサイトの場合はスクリーンショットタイムアウトを延長(120秒)
1451
+ // 重い3Dサイトはフォント読み込みやレンダリングに時間がかかるため
1452
+ const isWebGLSite = webglDetection?.detected ?? false;
1453
+ const screenshotTimeout = isWebGLSite ? 120000 : 30000;
1454
+ try {
1455
+ // WebGLサイトではfullPageを強制無効化(SwiftShaderで極めて遅いため)
1456
+ // フルページスクロール+レンダリングはSwiftShaderで数分〜タイムアウトになる
1457
+ const effectiveFullPage = isWebGLSite ? false : (ingestOptions.fullPage ?? true);
1458
+ if ((0, logger_1.isDevelopment)()) {
1459
+ if (isWebGLSite) {
1460
+ logger_1.logger.debug("[PageIngestAdapter] WebGL site detected: using viewport-only screenshot (fullPage disabled)", {
1461
+ timeout: screenshotTimeout,
1462
+ originalFullPage: ingestOptions.fullPage ?? true,
1463
+ effectiveFullPage,
1464
+ });
1465
+ }
1466
+ else {
1467
+ logger_1.logger.debug("[PageIngestAdapter] Taking screenshot", {
1468
+ timeout: screenshotTimeout,
1469
+ fullPage: effectiveFullPage,
1470
+ });
1471
+ }
1472
+ }
1473
+ // Lazy Loading発火: fullPage screenshot前にページ全体をスクロール
1474
+ // Trigger Lazy Loading: scroll through entire page before fullPage screenshot
1475
+ // IntersectionObserverベースのLazy Loadingはビューポート外では発火しないため、
1476
+ // スクロールで各セクションをビューポート内に入れてコンテンツを描画させる
1477
+ if (effectiveFullPage) {
1478
+ try {
1479
+ const scrollHeight = await page.evaluate(() => document.documentElement.scrollHeight);
1480
+ const viewportHeight = await page.evaluate(() => window.innerHeight);
1481
+ // SEC: NaN/Infinity防御 — 無効値の場合はスクロールスキップ
1482
+ // SEC: NaN/Infinity defense — skip scroll on invalid dimensions
1483
+ if (!Number.isFinite(scrollHeight) ||
1484
+ !Number.isFinite(viewportHeight) ||
1485
+ scrollHeight <= 0) {
1486
+ if ((0, logger_1.isDevelopment)()) {
1487
+ logger_1.logger.debug("[PageIngestAdapter] Skipping lazy loading scroll: invalid dimensions", {
1488
+ scrollHeight,
1489
+ viewportHeight,
1490
+ });
1491
+ }
1492
+ }
1493
+ else {
1494
+ const scrollStep = Math.max(viewportHeight, LAZY_SCROLL_MIN_STEP_PX);
1495
+ const maxScrollIterations = LAZY_SCROLL_MAX_ITERATIONS;
1496
+ let iterations = 0;
1497
+ for (let y = 0; y < scrollHeight && iterations < maxScrollIterations; y += scrollStep) {
1498
+ await page.evaluate((sy) => window.scrollTo(0, sy), y);
1499
+ // requestAnimationFrame 2フレーム完了待ち + 2秒タイムアウトガード
1500
+ // Wait for 2 rAF frames + 2s timeout guard (consistent with section-screenshot-fallback.service.ts)
1501
+ await Promise.race([
1502
+ page.evaluate(() => new Promise((resolve) => {
1503
+ requestAnimationFrame(() => requestAnimationFrame(() => resolve()));
1504
+ })),
1505
+ page.waitForTimeout(RAF_TIMEOUT_MS),
1506
+ ]).catch(() => {
1507
+ /* non-fatal */
1508
+ });
1509
+ iterations++;
1510
+ }
1511
+ // 先頭に戻す / Scroll back to top
1512
+ await page.evaluate(() => window.scrollTo(0, 0));
1513
+ // 描画安定待ち / Wait for paint stabilization
1514
+ await page.waitForTimeout(LAZY_SCROLL_STABILIZE_MS);
1515
+ if ((0, logger_1.isDevelopment)()) {
1516
+ logger_1.logger.debug("[PageIngestAdapter] Lazy loading scroll completed", {
1517
+ scrollHeight,
1518
+ viewportHeight,
1519
+ iterations,
1520
+ });
1521
+ }
1522
+ }
1523
+ }
1524
+ catch (scrollError) {
1525
+ // Graceful Degradation: スクロール失敗時もスクリーンショットは続行
1526
+ // Graceful Degradation: continue screenshot even if scroll fails
1527
+ logger_1.logger.warn("[PageIngestAdapter] Pre-screenshot scroll failed (non-fatal)", {
1528
+ error: scrollError instanceof Error ? scrollError.message : String(scrollError),
1529
+ });
1530
+ }
1531
+ }
1532
+ const screenshotBuffer = await withGlobalTimeout(page.screenshot({
1533
+ fullPage: effectiveFullPage,
1534
+ type: "png",
1535
+ timeout: screenshotTimeout,
1536
+ }), "page.screenshot");
1537
+ const screenshotBase64 = screenshotBuffer.toString("base64");
1538
+ screenshots = [
1539
+ {
1540
+ viewportName: "desktop",
1541
+ viewport,
1542
+ data: screenshotBase64,
1543
+ format: "png",
1544
+ fullPage: effectiveFullPage,
1545
+ size: screenshotBuffer.length,
1546
+ },
1547
+ ];
1548
+ }
1549
+ catch (screenshotError) {
1550
+ // Graceful Degradation: スクリーンショット失敗時も続行
1551
+ const errorMessage = screenshotError instanceof Error ? screenshotError.message : String(screenshotError);
1552
+ warnings.push({
1553
+ code: "SCREENSHOT_FAILED",
1554
+ message: `Screenshot capture failed: ${errorMessage}. Analysis will continue without screenshot.`,
1555
+ });
1556
+ if ((0, logger_1.isDevelopment)()) {
1557
+ logger_1.logger.warn("[PageIngestAdapter] Screenshot failed, continuing without screenshot", {
1558
+ error: errorMessage,
1559
+ isWebGLSite,
1560
+ fullPage: ingestOptions.fullPage ?? true,
1561
+ });
1562
+ }
1563
+ }
1564
+ }
1565
+ // Computed Styles取得(includeComputedStyles: true の場合のみ)
1566
+ let computedStyles;
1567
+ if (ingestOptions.includeComputedStyles) {
1568
+ computedStyles = await this.extractComputedStyles(page);
1569
+ }
1570
+ if ((0, logger_1.isDevelopment)()) {
1571
+ logger_1.logger.info("[PageIngestAdapter] Ingest completed", {
1572
+ url,
1573
+ finalUrl,
1574
+ htmlSize: html.length,
1575
+ hasScreenshot: !!screenshots,
1576
+ hasComputedStyles: !!computedStyles,
1577
+ computedStylesCount: computedStyles?.length ?? 0,
1578
+ webglDetected: webglDetection?.detected ?? false,
1579
+ warningCount: warnings.length,
1580
+ });
1581
+ }
1582
+ // 結果オブジェクトを構築(undefinedプロパティを除外)
1583
+ const result = {
1584
+ success: true,
1585
+ url,
1586
+ finalUrl,
1587
+ html,
1588
+ htmlSize: html.length,
1589
+ viewportInfo,
1590
+ metadata,
1591
+ ingestedAt: new Date(),
1592
+ source: {
1593
+ type: ingestOptions.sourceType ?? "user_provided",
1594
+ usageScope: ingestOptions.usageScope ?? "inspiration_only",
1595
+ },
1596
+ };
1597
+ // screenshotsは値がある場合のみ設定
1598
+ if (screenshots) {
1599
+ result.screenshots = screenshots;
1600
+ }
1601
+ // computedStylesは値がある場合のみ設定
1602
+ if (computedStyles) {
1603
+ result.computedStyles = computedStyles;
1604
+ }
1605
+ // WebGL検出結果(検出された場合のみ設定)
1606
+ if (webglDetection?.detected) {
1607
+ result.webglDetection = webglDetection;
1608
+ if (webglWait) {
1609
+ result.webglWait = webglWait;
1610
+ }
1611
+ }
1612
+ // 警告がある場合のみ設定
1613
+ if (warnings.length > 0) {
1614
+ result.warnings = warnings;
1615
+ }
1616
+ // 正常完了時はグローバルタイムアウトをクリア
1617
+ if (globalTimeoutId) {
1618
+ clearTimeout(globalTimeoutId);
1619
+ }
1620
+ return result;
1621
+ }
1622
+ catch (error) {
1623
+ // エラー発生時もグローバルタイムアウトをクリア
1624
+ if (globalTimeoutId) {
1625
+ clearTimeout(globalTimeoutId);
1626
+ }
1627
+ // エラー処理
1628
+ const errorMessage = error instanceof Error ? error.message : String(error);
1629
+ if ((0, logger_1.isDevelopment)()) {
1630
+ logger_1.logger.error("[PageIngestAdapter] Ingest failed", {
1631
+ url,
1632
+ error: errorMessage,
1633
+ });
1634
+ }
1635
+ // エラー結果を返す
1636
+ return {
1637
+ success: false,
1638
+ error: errorMessage,
1639
+ url,
1640
+ finalUrl: url,
1641
+ html: "",
1642
+ htmlSize: 0,
1643
+ viewportInfo: {
1644
+ documentWidth: 0,
1645
+ documentHeight: 0,
1646
+ viewportWidth: 0,
1647
+ viewportHeight: 0,
1648
+ scrollHeight: 0,
1649
+ },
1650
+ metadata: { title: "" },
1651
+ ingestedAt: new Date(),
1652
+ source: {
1653
+ type: options.sourceType ?? "user_provided",
1654
+ usageScope: options.usageScope ?? "inspiration_only",
1655
+ },
1656
+ };
1657
+ }
1658
+ finally {
1659
+ // リソースクリーンアップ
1660
+ if (page) {
1661
+ await page.close().catch(() => { });
1662
+ }
1663
+ if (context) {
1664
+ await context.close().catch(() => { });
1665
+ }
1666
+ // 専用ブラウザを使用した場合はブラウザも閉じる
1667
+ // BrowserProcessManagerを使用して安全にクローズ
1668
+ if (dedicatedBrowser) {
1669
+ if ((0, logger_1.isDevelopment)()) {
1670
+ logger_1.logger.debug("[PageIngestAdapter] Closing dedicated browser");
1671
+ }
1672
+ if (processManager) {
1673
+ // BrowserProcessManagerを使用して安全にクローズ(タイムアウト10秒)
1674
+ const closed = await processManager.closeWithTimeout(10000);
1675
+ if (!closed && (0, logger_1.isDevelopment)()) {
1676
+ logger_1.logger.warn("[PageIngestAdapter] Dedicated browser close timed out in finally block");
1677
+ }
1678
+ }
1679
+ else {
1680
+ // processManagerがない場合は従来の方法でクローズ
1681
+ await dedicatedBrowser.close().catch(() => { });
1682
+ }
1683
+ dedicatedBrowser = null;
1684
+ processManager = null;
1685
+ }
1686
+ }
1687
+ }
1688
+ /**
1689
+ * ブラウザを終了
1690
+ */
1691
+ async close() {
1692
+ if (this.browser) {
1693
+ await this.browser.close();
1694
+ this.browser = null;
1695
+ if ((0, logger_1.isDevelopment)()) {
1696
+ logger_1.logger.info("[PageIngestAdapter] Browser closed");
1697
+ }
1698
+ }
1699
+ }
1700
+ }
1701
+ // シングルトンインスタンス
1702
+ exports.pageIngestAdapter = new PageIngestAdapter();
1703
+ // プロセスイベントリスナー重複登録防止フラグ
1704
+ let processListenersRegistered = false;
1705
+ // プロセス終了時にブラウザを閉じる(1回だけ登録)
1706
+ if (!processListenersRegistered) {
1707
+ processListenersRegistered = true;
1708
+ process.on("beforeExit", async () => {
1709
+ await exports.pageIngestAdapter.close();
1710
+ });
1711
+ process.on("SIGINT", async () => {
1712
+ await exports.pageIngestAdapter.close();
1713
+ process.exit(0);
1714
+ });
1715
+ process.on("SIGTERM", async () => {
1716
+ await exports.pageIngestAdapter.close();
1717
+ process.exit(0);
1718
+ });
1719
+ }
1720
+ // =============================================
1721
+ // 開発環境ログ
1722
+ // =============================================
1723
+ if ((0, logger_1.isDevelopment)()) {
1724
+ logger_1.logger.debug("[PageIngestAdapter] Module loaded (Playwright direct integration)");
1725
+ }
1726
+ //# sourceMappingURL=page-ingest-adapter.js.map