oh-my-opencode 4.12.1 → 4.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (539) hide show
  1. package/README.md +1 -1
  2. package/THIRD-PARTY-NOTICES.md +1 -1
  3. package/dist/agents/sisyphus-agent-factory.d.ts +9 -0
  4. package/dist/agents/sisyphus-runtime-prompt-reconciler.d.ts +31 -0
  5. package/dist/cli/index.js +896 -669
  6. package/dist/cli-node/index.js +896 -669
  7. package/dist/config/schema/codegraph.d.ts +1 -0
  8. package/dist/config/schema/oh-my-opencode-config.d.ts +2 -0
  9. package/dist/config/schema/runtime-fallback.d.ts +1 -0
  10. package/dist/features/background-agent/background-task-marker.d.ts +8 -0
  11. package/dist/features/background-agent/fallback-retry-handler.d.ts +1 -0
  12. package/dist/features/background-agent/manager.d.ts +1 -0
  13. package/dist/features/background-agent/parent-wake-dedupe.d.ts +1 -0
  14. package/dist/features/background-agent/parent-wake-notifier-types.d.ts +2 -0
  15. package/dist/features/background-agent/parent-wake-notifier.d.ts +1 -0
  16. package/dist/features/background-agent/parent-wake-window-recovery.d.ts +2 -0
  17. package/dist/hooks/runtime-fallback/auto-retry-dispatch.d.ts +2 -2
  18. package/dist/hooks/runtime-fallback/auto-retry-timeout.d.ts +2 -2
  19. package/dist/hooks/runtime-fallback/auto-retry.d.ts +1 -1
  20. package/dist/hooks/runtime-fallback/fallback-state-snapshot.d.ts +13 -0
  21. package/dist/hooks/runtime-fallback/types.d.ts +8 -0
  22. package/dist/index.js +708 -413
  23. package/dist/oh-my-opencode.schema.json +8 -0
  24. package/dist/plugin/runtime-skill-resolver.d.ts +35 -0
  25. package/dist/plugin/skill-context.d.ts +9 -0
  26. package/dist/skills/frontend/ATTRIBUTION.md +32 -8
  27. package/dist/skills/frontend/references/design/airbnb.md +3 -0
  28. package/dist/skills/frontend/references/design/airtable.md +3 -0
  29. package/dist/skills/frontend/references/design/apple.md +3 -0
  30. package/dist/skills/frontend/references/design/binance.md +3 -0
  31. package/dist/skills/frontend/references/design/bmw.md +3 -0
  32. package/dist/skills/frontend/references/design/bugatti.md +3 -0
  33. package/dist/skills/frontend/references/design/cal.md +3 -0
  34. package/dist/skills/frontend/references/design/claude.md +3 -0
  35. package/dist/skills/frontend/references/design/clay.md +3 -0
  36. package/dist/skills/frontend/references/design/clickhouse.md +3 -0
  37. package/dist/skills/frontend/references/design/cohere.md +3 -0
  38. package/dist/skills/frontend/references/design/coinbase.md +3 -0
  39. package/dist/skills/frontend/references/design/composio.md +3 -0
  40. package/dist/skills/frontend/references/design/cursor.md +3 -0
  41. package/dist/skills/frontend/references/design/elevenlabs.md +3 -0
  42. package/dist/skills/frontend/references/design/expo.md +3 -0
  43. package/dist/skills/frontend/references/design/ferrari.md +3 -0
  44. package/dist/skills/frontend/references/design/figma.md +3 -0
  45. package/dist/skills/frontend/references/design/framer.md +3 -0
  46. package/dist/skills/frontend/references/design/hashicorp.md +3 -0
  47. package/dist/skills/frontend/references/design/ibm.md +3 -0
  48. package/dist/skills/frontend/references/design/imagegen-frontend-web.md +380 -79
  49. package/dist/skills/frontend/references/design/intercom.md +3 -0
  50. package/dist/skills/frontend/references/design/kraken.md +3 -0
  51. package/dist/skills/frontend/references/design/lamborghini.md +3 -0
  52. package/dist/skills/frontend/references/design/linear.app.md +3 -0
  53. package/dist/skills/frontend/references/design/lovable.md +3 -0
  54. package/dist/skills/frontend/references/design/mastercard.md +3 -0
  55. package/dist/skills/frontend/references/design/meta.md +3 -0
  56. package/dist/skills/frontend/references/design/minimax.md +3 -0
  57. package/dist/skills/frontend/references/design/mintlify.md +3 -0
  58. package/dist/skills/frontend/references/design/miro.md +3 -0
  59. package/dist/skills/frontend/references/design/mistral.ai.md +3 -0
  60. package/dist/skills/frontend/references/design/mongodb.md +3 -0
  61. package/dist/skills/frontend/references/design/nike.md +3 -0
  62. package/dist/skills/frontend/references/design/notion.md +3 -0
  63. package/dist/skills/frontend/references/design/nvidia.md +3 -0
  64. package/dist/skills/frontend/references/design/ollama.md +3 -0
  65. package/dist/skills/frontend/references/design/opencode.ai.md +3 -0
  66. package/dist/skills/frontend/references/design/pinterest.md +3 -0
  67. package/dist/skills/frontend/references/design/playstation.md +3 -0
  68. package/dist/skills/frontend/references/design/posthog.md +3 -0
  69. package/dist/skills/frontend/references/design/raycast.md +3 -0
  70. package/dist/skills/frontend/references/design/renault.md +3 -0
  71. package/dist/skills/frontend/references/design/replicate.md +3 -0
  72. package/dist/skills/frontend/references/design/resend.md +3 -0
  73. package/dist/skills/frontend/references/design/revolut.md +3 -0
  74. package/dist/skills/frontend/references/design/runwayml.md +3 -0
  75. package/dist/skills/frontend/references/design/sanity.md +3 -0
  76. package/dist/skills/frontend/references/design/sentry.md +3 -0
  77. package/dist/skills/frontend/references/design/shopify.md +3 -0
  78. package/dist/skills/frontend/references/design/spacex.md +3 -0
  79. package/dist/skills/frontend/references/design/spotify.md +3 -0
  80. package/dist/skills/frontend/references/design/starbucks.md +3 -0
  81. package/dist/skills/frontend/references/design/stitch-skill.md +1 -1
  82. package/dist/skills/frontend/references/design/stripe.md +3 -0
  83. package/dist/skills/frontend/references/design/supabase.md +3 -0
  84. package/dist/skills/frontend/references/design/superhuman.md +3 -0
  85. package/dist/skills/frontend/references/design/taste-skill.md +1188 -208
  86. package/dist/skills/frontend/references/design/tesla.md +3 -0
  87. package/dist/skills/frontend/references/design/theverge.md +3 -0
  88. package/dist/skills/frontend/references/design/together.ai.md +3 -0
  89. package/dist/skills/frontend/references/design/uber.md +3 -0
  90. package/dist/skills/frontend/references/design/vercel.md +3 -0
  91. package/dist/skills/frontend/references/design/vodafone.md +3 -0
  92. package/dist/skills/frontend/references/design/voltagent.md +3 -0
  93. package/dist/skills/frontend/references/design/warp.md +3 -0
  94. package/dist/skills/frontend/references/design/webflow.md +3 -0
  95. package/dist/skills/frontend/references/design/wired.md +3 -0
  96. package/dist/skills/frontend/references/design/wise.md +3 -0
  97. package/dist/skills/frontend/references/design/x.ai.md +3 -0
  98. package/dist/skills/frontend/references/design/zapier.md +3 -0
  99. package/dist/skills/frontend/references/ui-ux-db/README.md +501 -115
  100. package/dist/skills/frontend/references/ui-ux-db/data/charts.csv +26 -26
  101. package/dist/skills/frontend/references/ui-ux-db/data/colors.csv +162 -97
  102. package/dist/skills/frontend/references/ui-ux-db/data/icons.csv +105 -100
  103. package/dist/skills/frontend/references/ui-ux-db/data/landing.csv +22 -18
  104. package/dist/skills/frontend/references/ui-ux-db/data/products.csv +162 -97
  105. package/dist/skills/frontend/references/ui-ux-db/data/stacks/flutter.csv +53 -53
  106. package/dist/skills/frontend/references/ui-ux-db/data/stacks/html-tailwind.csv +56 -56
  107. package/dist/skills/frontend/references/ui-ux-db/data/stacks/nextjs.csv +53 -53
  108. package/dist/skills/frontend/references/ui-ux-db/data/stacks/react.csv +54 -54
  109. package/dist/skills/frontend/references/ui-ux-db/data/stacks/svelte.csv +54 -54
  110. package/dist/skills/frontend/references/ui-ux-db/data/stacks/swiftui.csv +51 -51
  111. package/dist/skills/frontend/references/ui-ux-db/data/stacks/vue.csv +50 -50
  112. package/dist/skills/frontend/references/ui-ux-db/data/styles.csv +17 -0
  113. package/dist/skills/frontend/references/ui-ux-db/data/typography.csv +17 -1
  114. package/dist/skills/frontend/references/ui-ux-db/data/ui-reasoning.csv +162 -101
  115. package/dist/skills/frontend/references/ui-ux-db/data/web-interface.csv +30 -30
  116. package/dist/skills/frontend/references/ui-ux-db/scripts/core.py +31 -22
  117. package/dist/skills/frontend/references/ui-ux-db/scripts/design_system.py +150 -69
  118. package/dist/skills/frontend/references/ui-ux-db/scripts/search.py +3 -3
  119. package/dist/skills/lcx-doctor/SKILL.md +1 -1
  120. package/dist/skills/ultimate-browsing/ATTRIBUTION.md +105 -0
  121. package/dist/skills/ultimate-browsing/SKILL.md +140 -0
  122. package/dist/skills/ultimate-browsing/engine/__init__.py +24 -0
  123. package/dist/skills/ultimate-browsing/engine/__main__.py +106 -0
  124. package/dist/skills/ultimate-browsing/engine/bias_check.py +174 -0
  125. package/dist/skills/ultimate-browsing/engine/curl_probe.py +91 -0
  126. package/dist/skills/ultimate-browsing/engine/executor.py +192 -0
  127. package/dist/skills/ultimate-browsing/engine/fetch_chain.py +268 -0
  128. package/dist/skills/ultimate-browsing/engine/referers.py +15 -0
  129. package/dist/skills/ultimate-browsing/engine/result_schema.py +45 -0
  130. package/dist/skills/ultimate-browsing/engine/summary.py +37 -0
  131. package/dist/skills/ultimate-browsing/engine/templates/package.json +11 -0
  132. package/dist/skills/ultimate-browsing/engine/templates/playwright_mobile_chrome.js +129 -0
  133. package/dist/skills/ultimate-browsing/engine/templates/playwright_real_chrome.js +167 -0
  134. package/dist/skills/ultimate-browsing/engine/tests/test_fetch_chain.py +77 -0
  135. package/dist/skills/ultimate-browsing/engine/tests/test_playwright_templates.py +282 -0
  136. package/dist/skills/ultimate-browsing/engine/url_transforms.py +98 -0
  137. package/dist/skills/ultimate-browsing/engine/validators.py +216 -0
  138. package/dist/skills/ultimate-browsing/engine/waf_detector.py +214 -0
  139. package/dist/skills/ultimate-browsing/engine/waf_profiles.yaml +162 -0
  140. package/dist/skills/ultimate-browsing/references/agent-reach/README.md +79 -0
  141. package/dist/skills/ultimate-browsing/references/agent-reach/career.md +29 -0
  142. package/dist/skills/ultimate-browsing/references/agent-reach/dev.md +62 -0
  143. package/dist/skills/ultimate-browsing/references/agent-reach/search.md +33 -0
  144. package/dist/skills/ultimate-browsing/references/agent-reach/social.md +207 -0
  145. package/dist/skills/ultimate-browsing/references/agent-reach/video.md +115 -0
  146. package/dist/skills/ultimate-browsing/references/agent-reach/web.md +76 -0
  147. package/dist/skills/ultimate-browsing/references/chrome-stealth.md +120 -0
  148. package/dist/skills/ultimate-browsing/references/insane-search/README.md +319 -0
  149. package/dist/skills/ultimate-browsing/references/insane-search/cache-archive.md +83 -0
  150. package/dist/skills/ultimate-browsing/references/insane-search/fallback.md +159 -0
  151. package/dist/skills/ultimate-browsing/references/insane-search/jina.md +130 -0
  152. package/dist/skills/ultimate-browsing/references/insane-search/json-api.md +133 -0
  153. package/dist/skills/ultimate-browsing/references/insane-search/media.md +123 -0
  154. package/dist/skills/ultimate-browsing/references/insane-search/metadata.md +116 -0
  155. package/dist/skills/ultimate-browsing/references/insane-search/naver.md +107 -0
  156. package/dist/skills/ultimate-browsing/references/insane-search/playwright.md +142 -0
  157. package/dist/skills/ultimate-browsing/references/insane-search/public-api.md +119 -0
  158. package/dist/skills/ultimate-browsing/references/insane-search/rss.md +123 -0
  159. package/dist/skills/ultimate-browsing/references/insane-search/tls-impersonate.md +186 -0
  160. package/dist/skills/ultimate-browsing/references/insane-search/twitter.md +104 -0
  161. package/dist/skills/ultimate-browsing/scripts/cookie_crypto.py +75 -0
  162. package/dist/skills/ultimate-browsing/scripts/cookie_domains.py +38 -0
  163. package/dist/skills/ultimate-browsing/scripts/cookie_paths.py +112 -0
  164. package/dist/skills/ultimate-browsing/scripts/extract_cookies.py +280 -0
  165. package/dist/skills/ultimate-browsing/scripts/tests/test_cookie_domain_filter.py +110 -0
  166. package/dist/skills/ultimate-browsing/scripts/tests/test_extract_cookies.py +245 -0
  167. package/dist/skills/ultraresearch/ATTRIBUTION.md +49 -0
  168. package/dist/skills/ultraresearch/SKILL.md +23 -4
  169. package/dist/skills/ulw-plan/SKILL.md +4 -1
  170. package/dist/tools/delegate-task/sync-task-deps.d.ts +8 -6
  171. package/dist/tools/skill-mcp/tools.d.ts +1 -1
  172. package/dist/tui.js +9 -1
  173. package/package.json +16 -14
  174. package/packages/omo-codex/THIRD-PARTY-NOTICES.md +27 -4
  175. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  176. package/packages/omo-codex/plugin/README.md +1 -1
  177. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +134 -42
  178. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  179. package/packages/omo-codex/plugin/components/codegraph/LICENSE +21 -0
  180. package/packages/omo-codex/plugin/components/codegraph/NODE-RUNTIME-LICENSES.md +2951 -0
  181. package/packages/omo-codex/plugin/components/codegraph/NOTICE +16 -0
  182. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +323 -39
  183. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +292 -19
  184. package/packages/omo-codex/plugin/components/codegraph/package.json +9 -3
  185. package/packages/omo-codex/plugin/components/codegraph/src/mcp-unavailable.ts +75 -0
  186. package/packages/omo-codex/plugin/components/codegraph/src/serve.ts +29 -13
  187. package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker.ts +20 -7
  188. package/packages/omo-codex/plugin/components/codegraph/test/hook.test.ts +1 -243
  189. package/packages/omo-codex/plugin/components/codegraph/test/package-runtime.test.ts +91 -0
  190. package/packages/omo-codex/plugin/components/codegraph/test/provisioned-node-guard.test.ts +1 -1
  191. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-facade.test.ts +68 -0
  192. package/packages/omo-codex/plugin/components/codegraph/test/serve-node-support.test.ts +11 -1
  193. package/packages/omo-codex/plugin/components/codegraph/test/serve-unavailable.test.ts +133 -0
  194. package/packages/omo-codex/plugin/components/codegraph/test/serve.test.ts +1 -113
  195. package/packages/omo-codex/plugin/components/codegraph/test/session-start-node-support.test.ts +8 -1
  196. package/packages/omo-codex/plugin/components/codegraph/test/session-start-trust-boundary.test.ts +63 -0
  197. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-availability.test.ts +106 -0
  198. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-flow.test.ts +150 -0
  199. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  200. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  201. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  202. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  203. package/packages/omo-codex/plugin/components/rules/dist/cli.js +3 -3
  204. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  205. package/packages/omo-codex/plugin/components/rules/src/sparkshell-awareness.ts +3 -3
  206. package/packages/omo-codex/plugin/components/rules/test/sparkshell-awareness.test.ts +33 -9
  207. package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
  208. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  209. package/packages/omo-codex/plugin/components/teammode/skills/teammode/SKILL.md +59 -32
  210. package/packages/omo-codex/plugin/components/teammode/skills/teammode/scripts/team-guide.mjs +17 -16
  211. package/packages/omo-codex/plugin/components/teammode/skills/teammode/scripts/team-state.mjs +70 -3
  212. package/packages/omo-codex/plugin/components/teammode/skills/teammode/scripts/team-worktree.mjs +113 -0
  213. package/packages/omo-codex/plugin/components/teammode/skills/teammode/scripts/team.mjs +63 -4
  214. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  215. package/packages/omo-codex/plugin/components/ultrawork/agents/explorer.toml +1 -1
  216. package/packages/omo-codex/plugin/components/ultrawork/directive.md +5 -4
  217. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  218. package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +24 -3
  219. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  220. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +8 -7
  221. package/packages/omo-codex/plugin/components/ulw-loop/test/skill-contract.test.ts +1 -1
  222. package/packages/omo-codex/plugin/package-lock.json +112 -13
  223. package/packages/omo-codex/plugin/package.json +2 -2
  224. package/packages/omo-codex/plugin/scripts/auto-update-plan.mjs +133 -0
  225. package/packages/omo-codex/plugin/scripts/auto-update-release-notes.mjs +135 -0
  226. package/packages/omo-codex/plugin/scripts/auto-update.mjs +33 -133
  227. package/packages/omo-codex/plugin/scripts/materialize-shared-upstreams.mjs +41 -0
  228. package/packages/omo-codex/plugin/shared/src/config-loader.ts +20 -2
  229. package/packages/omo-codex/plugin/shared/test/config-loader.test.ts +16 -0
  230. package/packages/omo-codex/plugin/skills/frontend/ATTRIBUTION.md +32 -8
  231. package/packages/omo-codex/plugin/skills/frontend/references/design/airbnb.md +3 -0
  232. package/packages/omo-codex/plugin/skills/frontend/references/design/airtable.md +3 -0
  233. package/packages/omo-codex/plugin/skills/frontend/references/design/apple.md +3 -0
  234. package/packages/omo-codex/plugin/skills/frontend/references/design/binance.md +3 -0
  235. package/packages/omo-codex/plugin/skills/frontend/references/design/bmw.md +3 -0
  236. package/packages/omo-codex/plugin/skills/frontend/references/design/bugatti.md +3 -0
  237. package/packages/omo-codex/plugin/skills/frontend/references/design/cal.md +3 -0
  238. package/packages/omo-codex/plugin/skills/frontend/references/design/claude.md +3 -0
  239. package/packages/omo-codex/plugin/skills/frontend/references/design/clay.md +3 -0
  240. package/packages/omo-codex/plugin/skills/frontend/references/design/clickhouse.md +3 -0
  241. package/packages/omo-codex/plugin/skills/frontend/references/design/cohere.md +3 -0
  242. package/packages/omo-codex/plugin/skills/frontend/references/design/coinbase.md +3 -0
  243. package/packages/omo-codex/plugin/skills/frontend/references/design/composio.md +3 -0
  244. package/packages/omo-codex/plugin/skills/frontend/references/design/cursor.md +3 -0
  245. package/packages/omo-codex/plugin/skills/frontend/references/design/elevenlabs.md +3 -0
  246. package/packages/omo-codex/plugin/skills/frontend/references/design/expo.md +3 -0
  247. package/packages/omo-codex/plugin/skills/frontend/references/design/ferrari.md +3 -0
  248. package/packages/omo-codex/plugin/skills/frontend/references/design/figma.md +3 -0
  249. package/packages/omo-codex/plugin/skills/frontend/references/design/framer.md +3 -0
  250. package/packages/omo-codex/plugin/skills/frontend/references/design/hashicorp.md +3 -0
  251. package/packages/omo-codex/plugin/skills/frontend/references/design/ibm.md +3 -0
  252. package/packages/omo-codex/plugin/skills/frontend/references/design/imagegen-frontend-web.md +380 -79
  253. package/packages/omo-codex/plugin/skills/frontend/references/design/intercom.md +3 -0
  254. package/packages/omo-codex/plugin/skills/frontend/references/design/kraken.md +3 -0
  255. package/packages/omo-codex/plugin/skills/frontend/references/design/lamborghini.md +3 -0
  256. package/packages/omo-codex/plugin/skills/frontend/references/design/linear.app.md +3 -0
  257. package/packages/omo-codex/plugin/skills/frontend/references/design/lovable.md +3 -0
  258. package/packages/omo-codex/plugin/skills/frontend/references/design/mastercard.md +3 -0
  259. package/packages/omo-codex/plugin/skills/frontend/references/design/meta.md +3 -0
  260. package/packages/omo-codex/plugin/skills/frontend/references/design/minimax.md +3 -0
  261. package/packages/omo-codex/plugin/skills/frontend/references/design/mintlify.md +3 -0
  262. package/packages/omo-codex/plugin/skills/frontend/references/design/miro.md +3 -0
  263. package/packages/omo-codex/plugin/skills/frontend/references/design/mistral.ai.md +3 -0
  264. package/packages/omo-codex/plugin/skills/frontend/references/design/mongodb.md +3 -0
  265. package/packages/omo-codex/plugin/skills/frontend/references/design/nike.md +3 -0
  266. package/packages/omo-codex/plugin/skills/frontend/references/design/notion.md +3 -0
  267. package/packages/omo-codex/plugin/skills/frontend/references/design/nvidia.md +3 -0
  268. package/packages/omo-codex/plugin/skills/frontend/references/design/ollama.md +3 -0
  269. package/packages/omo-codex/plugin/skills/frontend/references/design/opencode.ai.md +3 -0
  270. package/packages/omo-codex/plugin/skills/frontend/references/design/pinterest.md +3 -0
  271. package/packages/omo-codex/plugin/skills/frontend/references/design/playstation.md +3 -0
  272. package/packages/omo-codex/plugin/skills/frontend/references/design/posthog.md +3 -0
  273. package/packages/omo-codex/plugin/skills/frontend/references/design/raycast.md +3 -0
  274. package/packages/omo-codex/plugin/skills/frontend/references/design/renault.md +3 -0
  275. package/packages/omo-codex/plugin/skills/frontend/references/design/replicate.md +3 -0
  276. package/packages/omo-codex/plugin/skills/frontend/references/design/resend.md +3 -0
  277. package/packages/omo-codex/plugin/skills/frontend/references/design/revolut.md +3 -0
  278. package/packages/omo-codex/plugin/skills/frontend/references/design/runwayml.md +3 -0
  279. package/packages/omo-codex/plugin/skills/frontend/references/design/sanity.md +3 -0
  280. package/packages/omo-codex/plugin/skills/frontend/references/design/sentry.md +3 -0
  281. package/packages/omo-codex/plugin/skills/frontend/references/design/shopify.md +3 -0
  282. package/packages/omo-codex/plugin/skills/frontend/references/design/spacex.md +3 -0
  283. package/packages/omo-codex/plugin/skills/frontend/references/design/spotify.md +3 -0
  284. package/packages/omo-codex/plugin/skills/frontend/references/design/starbucks.md +3 -0
  285. package/packages/omo-codex/plugin/skills/frontend/references/design/stitch-skill.md +1 -1
  286. package/packages/omo-codex/plugin/skills/frontend/references/design/stripe.md +3 -0
  287. package/packages/omo-codex/plugin/skills/frontend/references/design/supabase.md +3 -0
  288. package/packages/omo-codex/plugin/skills/frontend/references/design/superhuman.md +3 -0
  289. package/packages/omo-codex/plugin/skills/frontend/references/design/taste-skill.md +1188 -208
  290. package/packages/omo-codex/plugin/skills/frontend/references/design/tesla.md +3 -0
  291. package/packages/omo-codex/plugin/skills/frontend/references/design/theverge.md +3 -0
  292. package/packages/omo-codex/plugin/skills/frontend/references/design/together.ai.md +3 -0
  293. package/packages/omo-codex/plugin/skills/frontend/references/design/uber.md +3 -0
  294. package/packages/omo-codex/plugin/skills/frontend/references/design/vercel.md +3 -0
  295. package/packages/omo-codex/plugin/skills/frontend/references/design/vodafone.md +3 -0
  296. package/packages/omo-codex/plugin/skills/frontend/references/design/voltagent.md +3 -0
  297. package/packages/omo-codex/plugin/skills/frontend/references/design/warp.md +3 -0
  298. package/packages/omo-codex/plugin/skills/frontend/references/design/webflow.md +3 -0
  299. package/packages/omo-codex/plugin/skills/frontend/references/design/wired.md +3 -0
  300. package/packages/omo-codex/plugin/skills/frontend/references/design/wise.md +3 -0
  301. package/packages/omo-codex/plugin/skills/frontend/references/design/x.ai.md +3 -0
  302. package/packages/omo-codex/plugin/skills/frontend/references/design/zapier.md +3 -0
  303. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/README.md +501 -115
  304. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/charts.csv +26 -26
  305. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/colors.csv +162 -97
  306. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/icons.csv +105 -100
  307. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/landing.csv +22 -18
  308. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/products.csv +162 -97
  309. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/stacks/flutter.csv +53 -53
  310. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/stacks/html-tailwind.csv +56 -56
  311. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/stacks/nextjs.csv +53 -53
  312. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/stacks/react.csv +54 -54
  313. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/stacks/svelte.csv +54 -54
  314. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/stacks/swiftui.csv +51 -51
  315. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/stacks/vue.csv +50 -50
  316. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/styles.csv +17 -0
  317. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/typography.csv +17 -1
  318. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/ui-reasoning.csv +162 -101
  319. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/web-interface.csv +30 -30
  320. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/scripts/core.py +31 -22
  321. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/scripts/design_system.py +150 -69
  322. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/scripts/search.py +3 -3
  323. package/packages/omo-codex/plugin/skills/lcx-doctor/SKILL.md +1 -1
  324. package/packages/omo-codex/plugin/skills/teammode/SKILL.md +59 -32
  325. package/packages/omo-codex/plugin/skills/teammode/scripts/team-guide.mjs +17 -16
  326. package/packages/omo-codex/plugin/skills/teammode/scripts/team-state.mjs +70 -3
  327. package/packages/omo-codex/plugin/skills/teammode/scripts/team-worktree.mjs +113 -0
  328. package/packages/omo-codex/plugin/skills/teammode/scripts/team.mjs +63 -4
  329. package/packages/omo-codex/plugin/skills/ultimate-browsing/ATTRIBUTION.md +105 -0
  330. package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +140 -0
  331. package/packages/omo-codex/plugin/skills/ultimate-browsing/agents/openai.yaml +2 -0
  332. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/__init__.py +24 -0
  333. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/__main__.py +106 -0
  334. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/bias_check.py +174 -0
  335. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/curl_probe.py +91 -0
  336. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/executor.py +192 -0
  337. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/fetch_chain.py +268 -0
  338. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/referers.py +15 -0
  339. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/result_schema.py +45 -0
  340. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/summary.py +37 -0
  341. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/package.json +11 -0
  342. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/playwright_mobile_chrome.js +129 -0
  343. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/playwright_real_chrome.js +167 -0
  344. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_fetch_chain.py +77 -0
  345. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_playwright_templates.py +282 -0
  346. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/url_transforms.py +98 -0
  347. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/validators.py +216 -0
  348. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/waf_detector.py +214 -0
  349. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/waf_profiles.yaml +162 -0
  350. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/README.md +79 -0
  351. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/career.md +29 -0
  352. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/dev.md +62 -0
  353. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/search.md +33 -0
  354. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/social.md +207 -0
  355. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/video.md +115 -0
  356. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/web.md +76 -0
  357. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +120 -0
  358. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +319 -0
  359. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/cache-archive.md +83 -0
  360. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/fallback.md +159 -0
  361. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/jina.md +130 -0
  362. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/json-api.md +133 -0
  363. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/media.md +123 -0
  364. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/metadata.md +116 -0
  365. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/naver.md +107 -0
  366. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/playwright.md +142 -0
  367. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/public-api.md +119 -0
  368. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/rss.md +123 -0
  369. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/tls-impersonate.md +186 -0
  370. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/twitter.md +104 -0
  371. package/packages/omo-codex/plugin/skills/ultimate-browsing/scripts/cookie_crypto.py +75 -0
  372. package/packages/omo-codex/plugin/skills/ultimate-browsing/scripts/cookie_domains.py +38 -0
  373. package/packages/omo-codex/plugin/skills/ultimate-browsing/scripts/cookie_paths.py +112 -0
  374. package/packages/omo-codex/plugin/skills/ultimate-browsing/scripts/extract_cookies.py +280 -0
  375. package/packages/omo-codex/plugin/skills/ultimate-browsing/scripts/tests/test_cookie_domain_filter.py +110 -0
  376. package/packages/omo-codex/plugin/skills/ultimate-browsing/scripts/tests/test_extract_cookies.py +245 -0
  377. package/packages/omo-codex/plugin/skills/ultraresearch/ATTRIBUTION.md +49 -0
  378. package/packages/omo-codex/plugin/skills/ultraresearch/SKILL.md +23 -4
  379. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +8 -7
  380. package/packages/omo-codex/plugin/test/aggregate-build.test.mjs +2 -1
  381. package/packages/omo-codex/plugin/test/auto-update-release-notes.test.mjs +95 -0
  382. package/packages/omo-codex/plugin/test/auto-update-restart-notice.test.mjs +12 -3
  383. package/packages/omo-codex/plugin/test/component-codegraph-mcp-smoke.test.mjs +76 -0
  384. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +1 -0
  385. package/packages/omo-codex/plugin/test/teammode-communication.test.mjs +87 -0
  386. package/packages/omo-codex/plugin/test/teammode-thread-title.test.mjs +169 -0
  387. package/packages/omo-codex/plugin/test/teammode-worktree.test.mjs +246 -0
  388. package/packages/omo-codex/plugin/test/ultraresearch-skill-contract.test.mjs +30 -0
  389. package/packages/omo-codex/scripts/install-cli-args.test.mjs +1 -1
  390. package/packages/omo-codex/scripts/install-config-git-bash.test.mjs +23 -0
  391. package/packages/omo-codex/scripts/install-delegated-command.test.mjs +76 -4
  392. package/packages/omo-codex/scripts/install-dist/install-local.mjs +520 -216
  393. package/packages/omo-codex/scripts/install-local-entrypoint.test.mjs +40 -3
  394. package/packages/shared-skills/skills/frontend/ATTRIBUTION.md +32 -8
  395. package/packages/shared-skills/skills/frontend/references/design/airbnb.md +3 -0
  396. package/packages/shared-skills/skills/frontend/references/design/airtable.md +3 -0
  397. package/packages/shared-skills/skills/frontend/references/design/apple.md +3 -0
  398. package/packages/shared-skills/skills/frontend/references/design/binance.md +3 -0
  399. package/packages/shared-skills/skills/frontend/references/design/bmw.md +3 -0
  400. package/packages/shared-skills/skills/frontend/references/design/bugatti.md +3 -0
  401. package/packages/shared-skills/skills/frontend/references/design/cal.md +3 -0
  402. package/packages/shared-skills/skills/frontend/references/design/claude.md +3 -0
  403. package/packages/shared-skills/skills/frontend/references/design/clay.md +3 -0
  404. package/packages/shared-skills/skills/frontend/references/design/clickhouse.md +3 -0
  405. package/packages/shared-skills/skills/frontend/references/design/cohere.md +3 -0
  406. package/packages/shared-skills/skills/frontend/references/design/coinbase.md +3 -0
  407. package/packages/shared-skills/skills/frontend/references/design/composio.md +3 -0
  408. package/packages/shared-skills/skills/frontend/references/design/cursor.md +3 -0
  409. package/packages/shared-skills/skills/frontend/references/design/elevenlabs.md +3 -0
  410. package/packages/shared-skills/skills/frontend/references/design/expo.md +3 -0
  411. package/packages/shared-skills/skills/frontend/references/design/ferrari.md +3 -0
  412. package/packages/shared-skills/skills/frontend/references/design/figma.md +3 -0
  413. package/packages/shared-skills/skills/frontend/references/design/framer.md +3 -0
  414. package/packages/shared-skills/skills/frontend/references/design/hashicorp.md +3 -0
  415. package/packages/shared-skills/skills/frontend/references/design/ibm.md +3 -0
  416. package/packages/shared-skills/skills/frontend/references/design/imagegen-frontend-web.md +380 -79
  417. package/packages/shared-skills/skills/frontend/references/design/intercom.md +3 -0
  418. package/packages/shared-skills/skills/frontend/references/design/kraken.md +3 -0
  419. package/packages/shared-skills/skills/frontend/references/design/lamborghini.md +3 -0
  420. package/packages/shared-skills/skills/frontend/references/design/linear.app.md +3 -0
  421. package/packages/shared-skills/skills/frontend/references/design/lovable.md +3 -0
  422. package/packages/shared-skills/skills/frontend/references/design/mastercard.md +3 -0
  423. package/packages/shared-skills/skills/frontend/references/design/meta.md +3 -0
  424. package/packages/shared-skills/skills/frontend/references/design/minimax.md +3 -0
  425. package/packages/shared-skills/skills/frontend/references/design/mintlify.md +3 -0
  426. package/packages/shared-skills/skills/frontend/references/design/miro.md +3 -0
  427. package/packages/shared-skills/skills/frontend/references/design/mistral.ai.md +3 -0
  428. package/packages/shared-skills/skills/frontend/references/design/mongodb.md +3 -0
  429. package/packages/shared-skills/skills/frontend/references/design/nike.md +3 -0
  430. package/packages/shared-skills/skills/frontend/references/design/notion.md +3 -0
  431. package/packages/shared-skills/skills/frontend/references/design/nvidia.md +3 -0
  432. package/packages/shared-skills/skills/frontend/references/design/ollama.md +3 -0
  433. package/packages/shared-skills/skills/frontend/references/design/opencode.ai.md +3 -0
  434. package/packages/shared-skills/skills/frontend/references/design/pinterest.md +3 -0
  435. package/packages/shared-skills/skills/frontend/references/design/playstation.md +3 -0
  436. package/packages/shared-skills/skills/frontend/references/design/posthog.md +3 -0
  437. package/packages/shared-skills/skills/frontend/references/design/raycast.md +3 -0
  438. package/packages/shared-skills/skills/frontend/references/design/renault.md +3 -0
  439. package/packages/shared-skills/skills/frontend/references/design/replicate.md +3 -0
  440. package/packages/shared-skills/skills/frontend/references/design/resend.md +3 -0
  441. package/packages/shared-skills/skills/frontend/references/design/revolut.md +3 -0
  442. package/packages/shared-skills/skills/frontend/references/design/runwayml.md +3 -0
  443. package/packages/shared-skills/skills/frontend/references/design/sanity.md +3 -0
  444. package/packages/shared-skills/skills/frontend/references/design/sentry.md +3 -0
  445. package/packages/shared-skills/skills/frontend/references/design/shopify.md +3 -0
  446. package/packages/shared-skills/skills/frontend/references/design/spacex.md +3 -0
  447. package/packages/shared-skills/skills/frontend/references/design/spotify.md +3 -0
  448. package/packages/shared-skills/skills/frontend/references/design/starbucks.md +3 -0
  449. package/packages/shared-skills/skills/frontend/references/design/stitch-skill.md +1 -1
  450. package/packages/shared-skills/skills/frontend/references/design/stripe.md +3 -0
  451. package/packages/shared-skills/skills/frontend/references/design/supabase.md +3 -0
  452. package/packages/shared-skills/skills/frontend/references/design/superhuman.md +3 -0
  453. package/packages/shared-skills/skills/frontend/references/design/taste-skill.md +1188 -208
  454. package/packages/shared-skills/skills/frontend/references/design/tesla.md +3 -0
  455. package/packages/shared-skills/skills/frontend/references/design/theverge.md +3 -0
  456. package/packages/shared-skills/skills/frontend/references/design/together.ai.md +3 -0
  457. package/packages/shared-skills/skills/frontend/references/design/uber.md +3 -0
  458. package/packages/shared-skills/skills/frontend/references/design/vercel.md +3 -0
  459. package/packages/shared-skills/skills/frontend/references/design/vodafone.md +3 -0
  460. package/packages/shared-skills/skills/frontend/references/design/voltagent.md +3 -0
  461. package/packages/shared-skills/skills/frontend/references/design/warp.md +3 -0
  462. package/packages/shared-skills/skills/frontend/references/design/webflow.md +3 -0
  463. package/packages/shared-skills/skills/frontend/references/design/wired.md +3 -0
  464. package/packages/shared-skills/skills/frontend/references/design/wise.md +3 -0
  465. package/packages/shared-skills/skills/frontend/references/design/x.ai.md +3 -0
  466. package/packages/shared-skills/skills/frontend/references/design/zapier.md +3 -0
  467. package/packages/shared-skills/skills/frontend/references/ui-ux-db/README.md +501 -115
  468. package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/charts.csv +26 -26
  469. package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/colors.csv +162 -97
  470. package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/icons.csv +105 -100
  471. package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/landing.csv +22 -18
  472. package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/products.csv +162 -97
  473. package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/stacks/flutter.csv +53 -53
  474. package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/stacks/html-tailwind.csv +56 -56
  475. package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/stacks/nextjs.csv +53 -53
  476. package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/stacks/react.csv +54 -54
  477. package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/stacks/svelte.csv +54 -54
  478. package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/stacks/swiftui.csv +51 -51
  479. package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/stacks/vue.csv +50 -50
  480. package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/styles.csv +17 -0
  481. package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/typography.csv +17 -1
  482. package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/ui-reasoning.csv +162 -101
  483. package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/web-interface.csv +30 -30
  484. package/packages/shared-skills/skills/frontend/references/ui-ux-db/scripts/core.py +31 -22
  485. package/packages/shared-skills/skills/frontend/references/ui-ux-db/scripts/design_system.py +150 -69
  486. package/packages/shared-skills/skills/frontend/references/ui-ux-db/scripts/search.py +3 -3
  487. package/packages/shared-skills/skills/lcx-doctor/SKILL.md +1 -1
  488. package/packages/shared-skills/skills/ultimate-browsing/ATTRIBUTION.md +105 -0
  489. package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +140 -0
  490. package/packages/shared-skills/skills/ultimate-browsing/engine/__init__.py +24 -0
  491. package/packages/shared-skills/skills/ultimate-browsing/engine/__main__.py +106 -0
  492. package/packages/shared-skills/skills/ultimate-browsing/engine/bias_check.py +174 -0
  493. package/packages/shared-skills/skills/ultimate-browsing/engine/curl_probe.py +91 -0
  494. package/packages/shared-skills/skills/ultimate-browsing/engine/executor.py +192 -0
  495. package/packages/shared-skills/skills/ultimate-browsing/engine/fetch_chain.py +268 -0
  496. package/packages/shared-skills/skills/ultimate-browsing/engine/referers.py +15 -0
  497. package/packages/shared-skills/skills/ultimate-browsing/engine/result_schema.py +45 -0
  498. package/packages/shared-skills/skills/ultimate-browsing/engine/summary.py +37 -0
  499. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/package.json +11 -0
  500. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/playwright_mobile_chrome.js +129 -0
  501. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/playwright_real_chrome.js +167 -0
  502. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/test_fetch_chain.py +77 -0
  503. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/test_playwright_templates.py +282 -0
  504. package/packages/shared-skills/skills/ultimate-browsing/engine/url_transforms.py +98 -0
  505. package/packages/shared-skills/skills/ultimate-browsing/engine/validators.py +216 -0
  506. package/packages/shared-skills/skills/ultimate-browsing/engine/waf_detector.py +214 -0
  507. package/packages/shared-skills/skills/ultimate-browsing/engine/waf_profiles.yaml +162 -0
  508. package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/README.md +79 -0
  509. package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/career.md +29 -0
  510. package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/dev.md +62 -0
  511. package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/search.md +33 -0
  512. package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/social.md +207 -0
  513. package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/video.md +115 -0
  514. package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/web.md +76 -0
  515. package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +120 -0
  516. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +319 -0
  517. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/cache-archive.md +83 -0
  518. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/fallback.md +159 -0
  519. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/jina.md +130 -0
  520. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/json-api.md +133 -0
  521. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/media.md +123 -0
  522. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/metadata.md +116 -0
  523. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/naver.md +107 -0
  524. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/playwright.md +142 -0
  525. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/public-api.md +119 -0
  526. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/rss.md +123 -0
  527. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/tls-impersonate.md +186 -0
  528. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/twitter.md +104 -0
  529. package/packages/shared-skills/skills/ultimate-browsing/scripts/cookie_crypto.py +75 -0
  530. package/packages/shared-skills/skills/ultimate-browsing/scripts/cookie_domains.py +38 -0
  531. package/packages/shared-skills/skills/ultimate-browsing/scripts/cookie_paths.py +112 -0
  532. package/packages/shared-skills/skills/ultimate-browsing/scripts/extract_cookies.py +280 -0
  533. package/packages/shared-skills/skills/ultimate-browsing/scripts/tests/test_cookie_domain_filter.py +110 -0
  534. package/packages/shared-skills/skills/ultimate-browsing/scripts/tests/test_extract_cookies.py +245 -0
  535. package/packages/shared-skills/skills/ultraresearch/ATTRIBUTION.md +49 -0
  536. package/packages/shared-skills/skills/ultraresearch/SKILL.md +23 -4
  537. package/packages/shared-skills/skills/ulw-plan/SKILL.md +4 -1
  538. package/packages/omo-codex/plugin/components/codegraph/dist/cli.d.ts +0 -2
  539. package/packages/omo-codex/plugin/components/codegraph/dist/serve.d.ts +0 -32
@@ -0,0 +1,159 @@
1
+ # 접근 실패 시 — 적응형 스케줄러
2
+
3
+ > 인덱스 방법이 실패하거나 인덱스에 없는 사이트일 때 실행.
4
+ > Phase 0 → 1 → 2 → 3 순서로 에스컬레이션. 각 Phase에서 성공하면 즉시 종료.
5
+
6
+ ## 원칙
7
+
8
+ 1. **어떤 방법도 미리 제외하지 않는다** — 되는지는 시도해봐야 안다
9
+ 2. **의존성이 없으면 설치하고 시도한다** — 미설치를 이유로 건너뛰지 않는다
10
+ 3. **Phase 간 전환은 신호 기반** — 실패 유형에 따라 에스컬레이션
11
+ 4. **결과 채택 기준**: 정확성/신뢰도 > 신선도 > 완전성 > 구조화 > 비용
12
+
13
+ ---
14
+
15
+ ## Phase 0: 특수 엔드포인트 (인덱스 매칭)
16
+
17
+ 인덱스에 사이트가 있으면 해당 전용 방법을 **먼저** 시도.
18
+ 정확성과 비용이 가장 좋으므로 generic Phase 1보다 우선.
19
+
20
+ 성공 → 종료 / 실패 → Phase 1
21
+
22
+ ---
23
+
24
+ ## Phase 1: 경량 프로브 (병렬)
25
+
26
+ **먼저 시도** (동시):
27
+ - WebFetch (Claude 내장)
28
+ - Jina Reader (기본 / JSON / SPA 모드)
29
+ - curl Chrome Desktop UA
30
+
31
+ **아직 성공 없으면 추가 시도**:
32
+ - curl 모바일 UA + 모바일 URL (`m.{domain}`)
33
+ - curl Googlebot UA
34
+ - URL 변형 시도: `.json`, `/rss`, `/feed`
35
+
36
+ **사이드카** (1차와 동시, low-trust):
37
+ - Google AMP 캐시
38
+ - archive.today
39
+ - Wayback Machine
40
+ → **원본이 하나라도 성공하면 사이드카는 참고만.** 전부 실패 시에만 사이드카 채택 (provenance 태깅 필수)
41
+
42
+ **모든 응답에서 메타데이터도 추출**: OGP, JSON-LD — [metadata.md](metadata.md) 참조
43
+
44
+ 상세: [jina.md](jina.md), [cache-archive.md](cache-archive.md), [rss.md](rss.md)
45
+
46
+ ---
47
+
48
+ ## 에스컬레이션 신호
49
+
50
+ Phase 1 → Phase 2 전환 조건:
51
+
52
+ | 신호 | 감지 방법 | 의미 |
53
+ |------|-----------|------|
54
+ | HTTP 403/430 | 상태 코드 | WAF/봇 차단 |
55
+ | HTTP 429/503 | 상태 코드 | Rate limit (짧은 jitter retry 먼저, 실패 시 에스컬레이션) |
56
+ | WAF 헤더 | `cf-ray`, `server: cloudflare`, `x-datadome` | Cloudflare/Akamai/DataDome |
57
+ | WAF 쿠키 | `__cf_bm`, `_abck`, `datadome` | WAF 세션 |
58
+ | 챌린지 본문 | `captcha`, `verify`, `enable javascript`, `check your browser` | JS 챌린지 |
59
+ | 빈 SPA | `<div id="root"></div>` 외 콘텐츠 없음, 200자 미만 | JS 렌더링 필요 |
60
+ | Redirect loop | 3회 이상 302/307 | 챌린지 리다이렉트 |
61
+
62
+ **login/paywall 감지 시**: `login`, `sign in`, `로그인`, `subscribe`, `구독` 집중 → Phase 2/3으로 올려도 해결 안 됨. **"인증 필요"로 종료.**
63
+
64
+ ---
65
+
66
+ ## Phase 2: TLS 임퍼소네이션 (curl_cffi)
67
+
68
+ **조건**: Phase 1에서 WAF/봇 차단 신호 감지
69
+
70
+ **의존성 확보**:
71
+ ```bash
72
+ python3 -c "import curl_cffi" 2>/dev/null || pip install curl_cffi -q
73
+ ```
74
+ 설치 실패 시 → 즉시 Phase 3으로.
75
+
76
+ **다중 타겟 순차 시도**: safari → chrome → firefox
77
+
78
+ ```python
79
+ from curl_cffi import requests
80
+
81
+ TARGETS = ["safari", "chrome", "firefox"]
82
+ HEADERS = {
83
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
84
+ "Accept-Language": "ko-KR,ko;q=0.9,en-US;q=0.8",
85
+ "Referer": "https://www.google.com/",
86
+ }
87
+
88
+ for target in TARGETS:
89
+ try:
90
+ session = requests.Session(impersonate=target)
91
+ session.headers.update(HEADERS)
92
+ resp = session.get("{URL}", timeout=20)
93
+ if resp.status_code == 200 and len(resp.text) > 300:
94
+ # 성공 — JSON-LD도 같이 추출
95
+ break
96
+ except:
97
+ continue
98
+ ```
99
+
100
+ 성공 → 종료 / 실패 또는 JS 챌린지 → Phase 3
101
+
102
+ 상세: [tls-impersonate.md](tls-impersonate.md)
103
+
104
+ ---
105
+
106
+ ## Phase 3: Playwright MCP (브라우저)
107
+
108
+ **조건**: Phase 2도 실패 또는 JS 챌린지/CAPTCHA 감지
109
+
110
+ ```
111
+ browser_navigate → {URL}
112
+ browser_wait_for → "body" (3초)
113
+ browser_evaluate → () => document.body.innerText (Light Mode — 먼저)
114
+ 필요 시 browser_snapshot → 접근성 트리 전체
115
+ ```
116
+
117
+ **API 발견**: `browser_network_requests`로 숨은 JSON API를 찾으면 이후 curl_cffi로 재사용 가능.
118
+
119
+ 상세: [playwright.md](playwright.md)
120
+
121
+ ---
122
+
123
+ ## 응답 검증
124
+
125
+ | 판정 | 조건 | 결과 |
126
+ |------|------|------|
127
+ | **성공** | 콘텐츠 타입에 맞는 분량 + 주제 관련 키워드 | 채택 |
128
+ | **부분 성공** | OG 메타/JSON-LD만 (본문 없음) | 보조 소스 |
129
+ | **실패 — 인증** | login/paywall 감지 | "인증 필요"로 종료 |
130
+ | **실패 — 챌린지** | CAPTCHA/JS challenge | 다음 Phase로 |
131
+ | **실패 — 에러** | 4xx/5xx | 다음 Phase로 |
132
+ | **실패 — 빈 SPA** | 콘텐츠 없음 | 다음 Phase로 |
133
+
134
+ **콘텐츠 분량 기준** (유연하게):
135
+ - 기사/블로그: 500자 이상
136
+ - 상품 페이지: JSON-LD 있으면 성공
137
+ - 트윗/짧은 글: 100자 이상
138
+ - 프로필: JSON-LD Person 있으면 성공
139
+
140
+ ## False-Positive 마커 (HTTP 200이지만 실패)
141
+
142
+ | 패턴 | 감지 방법 | 처리 |
143
+ |------|----------|------|
144
+ | X SPA 셸 (247KB) | 200 OK + `Sign in to X` 또는 `hasResults: false` | 실패 — WebSearch+oEmbed 폴백 |
145
+ | CAPTCHA 페이지 | 200 OK + `captcha\|recaptcha\|hcaptcha\|cf-turnstile` | 실패 — 다음 Phase |
146
+ | 소프트 페이월 | 200 OK + `member-only\|subscribe to read\|구독하세요` | 부분 성공 — 메타만 채택 |
147
+ | DDG 소프트 리밋 | 202 Accepted + body 15KB 미만 | 실패 — 다른 엔진 폴백 |
148
+ | 빈 JSON | 200 OK + `hasResults.*false\|"entries":\s*\[\]` | 실패 — 다른 방법 시도 |
149
+ | 지역 차단 | 200 OK + `not available in your region\|geo-restricted` | 실패 — "지역 차단" 알림 |
150
+ | WAF 소프트 블록 | 200 OK + `checking your browser\|verify you are human` | 실패 — Phase 2/3 에스컬레이션 |
151
+ | Akamai behavioral | 200 OK + `behavioral-content\|sec-if-cpt` + `_abck` 쿠키 | 실패 — JS 실행 필수 → Phase 3 직행 (TLS 타겟 변경 무의미) |
152
+ | RSS Content-Type 오류 | RSS 기대 + `text/html` 응답 | 실패 — "RSS 미지원" |
153
+ | 에러 JSON | 200 OK + JSON `"error"` 키 존재 | 실패 — 에러 내용 로깅 |
154
+
155
+ ## 전부 실패 시
156
+
157
+ 1. 시도한 Phase와 각 실패 신호를 기록
158
+ 2. 사이드카 결과가 있으면 provenance 태깅하여 채택
159
+ 3. 사이드카도 없으면 사용자에게 실패 보고 + 시도 결과 공유
@@ -0,0 +1,130 @@
1
+ # 범용 웹 추출 — Jina Reader
2
+
3
+ > `r.jina.ai/URL` 한 줄로 거의 모든 공개 URL을 마크다운으로 변환.
4
+ > Puppeteer 기반 실제 브라우저 렌더링 — JS SPA까지 처리.
5
+ > **API 키 불필요. 무료: 분당 500 RPM.**
6
+
7
+ ## 기본 사용
8
+
9
+ ```bash
10
+ curl -s "https://r.jina.ai/{URL}"
11
+ ```
12
+
13
+ ## 고급 기능
14
+
15
+ ### JSON 구조화 출력
16
+
17
+ ```bash
18
+ curl -H "Accept: application/json" "https://r.jina.ai/{URL}"
19
+ ```
20
+
21
+ 반환: `data.{title, description, url, content, metadata, external, usage}`
22
+
23
+ **핵심**: `external.alternate`에서 사이트의 **RSS URL을 자동 발견** 가능.
24
+
25
+ ### CSS 선택자 타겟팅
26
+
27
+ ```bash
28
+ curl -H "X-Target-Selector: .article-body" "https://r.jina.ai/{URL}"
29
+ ```
30
+
31
+ 네비게이션/풋터 제거, 본문만 추출. 커뮤니티 게시판에서 특히 효과적.
32
+
33
+ ### SPA 스트리밍 모드
34
+
35
+ ```bash
36
+ curl -H "Accept: text/event-stream" "https://r.jina.ai/{URL}"
37
+ ```
38
+
39
+ JS 로딩 완료까지 대기. 동적 콘텐츠가 완전히 렌더링된 최종 버전 반환.
40
+
41
+ ### 스크린샷
42
+
43
+ ```bash
44
+ curl -H "X-Respond-With: screenshot" "https://r.jina.ai/{URL}"
45
+ ```
46
+
47
+ GCS 서명 URL 반환 (4시간 유효). 비주얼 검증 용도.
48
+
49
+ ### PDF 처리
50
+
51
+ ```bash
52
+ curl -s "https://r.jina.ai/https://example.com/file.pdf"
53
+ ```
54
+
55
+ PDF → 마크다운 자동 변환. 페이지 수 메타데이터 포함.
56
+
57
+ ### 쿠키 전달 (인증 사이트)
58
+
59
+ ```bash
60
+ curl -H "X-Set-Cookie: session=abc123" "https://r.jina.ai/{URL}"
61
+ ```
62
+
63
+ ### 링크 보존
64
+
65
+ ```bash
66
+ curl -H "X-With-Links: true" "https://r.jina.ai/{URL}"
67
+ ```
68
+
69
+ ### 캐시 제어
70
+
71
+ ```bash
72
+ # 캐시 우회 (실시간 필요 시)
73
+ curl -H "X-No-Cache: true" "https://r.jina.ai/{URL}"
74
+
75
+ # 캐시 TTL 지정 (초)
76
+ curl -H "X-Cache-Tolerance: 600" "https://r.jina.ai/{URL}"
77
+ ```
78
+
79
+ ### 순수 텍스트 / 원본 HTML
80
+
81
+ ```bash
82
+ # body.innerText만
83
+ curl -H "X-Respond-With: text" "https://r.jina.ai/{URL}"
84
+
85
+ # 원본 HTML
86
+ curl -H "X-Respond-With: html" "https://r.jina.ai/{URL}"
87
+ ```
88
+
89
+ ## 검증된 성공 사이트
90
+
91
+ | 사이트 | 결과 | 비고 |
92
+ |--------|------|------|
93
+ | Threads | 성공 | 프로필 + 포스트 |
94
+ | 클리앙 | 성공 | 게시글 목록 + 본문 |
95
+ | 루리웹 | 성공 | 게시글 목록 + 본문 |
96
+ | 뽐뿌 | 성공 | 게시글 + RSS도 가능 |
97
+ | 네이버 뉴스 | 성공 | 기사 목록 + 본문 완전 |
98
+ | 네이버 증권 | 성공 | 실시간 주가 |
99
+ | 긱뉴스 | 성공 | 토픽 목록 + 본문 |
100
+ | 44bits | 성공 | 기사 목록 |
101
+ | 커리어리 | 성공 | JS 렌더링으로 추출 |
102
+ | 브런치 | 성공 | 기사 전문 |
103
+ | 한경 | 성공 | 뉴스 기사 |
104
+ | 다음 뉴스 | 성공 | 뉴스 기사 |
105
+ | Medium | 성공 | 기사 전문 (paywall 제외) |
106
+ | Substack | 성공 | 뉴스레터 전문 |
107
+ | dev.to | 성공 | 기사 전문 |
108
+ | PDF (모든 URL) | 성공 | 자동 변환 |
109
+
110
+ ## 실패하는 사이트
111
+
112
+ | 사이트 | 이유 |
113
+ |--------|------|
114
+ | X/Twitter | 402 — Syndication/oEmbed 사용 (twitter.md 참조) |
115
+ | Reddit | 차단 — JSON API 사용 (json-api.md 참조) |
116
+ | 디시인사이드 | 빈 본문 반환 |
117
+ | 에펨코리아 | HTTP 430 |
118
+ | 요즘IT | CloudFront 403 |
119
+ | 네이버 쇼핑 | CAPTCHA |
120
+ | 쿠팡 | WAF 차단 |
121
+
122
+
123
+ ## RSS 자동 발견
124
+
125
+ Jina JSON 모드의 `external.alternate`에서 사이트의 RSS URL이 자동 노출됨:
126
+
127
+ ```bash
128
+ curl -H "Accept: application/json" "https://r.jina.ai/{URL}" | \
129
+ python3 -c "import sys,json; print(json.load(sys.stdin)['data'].get('external',{}))"
130
+ ```
@@ -0,0 +1,133 @@
1
+ # JSON API 직접 호출
2
+
3
+ > URL 변형이나 공개 엔드포인트로 구조화된 JSON을 직접 가져오는 패턴.
4
+ > 인증 불필요. Jina Reader보다 빠르고 정확한 구조화 데이터 획득.
5
+
6
+ ## Reddit
7
+
8
+ **Mobile User-Agent 필수** (없으면 403/429).
9
+
10
+ ```bash
11
+ UA="Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15"
12
+
13
+ # 서브레딧 핫 포스트
14
+ curl -sL -H "User-Agent: $UA" "https://www.reddit.com/r/{subreddit}/hot.json?limit=10"
15
+
16
+ # 검색
17
+ curl -sL -H "User-Agent: $UA" "https://www.reddit.com/r/{subreddit}/search.json?q={query}&restrict_sr=1"
18
+
19
+ # 포스트 + 댓글
20
+ curl -sL -H "User-Agent: $UA" "https://www.reddit.com/r/{subreddit}/comments/{post_id}/{slug}/.json"
21
+
22
+ # 정렬: hot.json / new.json / top.json?t=week
23
+ ```
24
+
25
+ 데이터: `title`, `author`, `score`, `selftext`(전문), `num_comments`, `created_utc`
26
+ 댓글: 응답 `[1]` 배열에 재귀적 트리
27
+
28
+ ## Hacker News (Firebase API)
29
+
30
+ Rate limit 사실상 없음.
31
+
32
+ ```bash
33
+ # 탑 스토리 ID 목록
34
+ curl -sL "https://hacker-news.firebaseio.com/v0/topstories.json?limitToFirst=10&orderBy=%22%24key%22"
35
+
36
+ # 개별 아이템
37
+ curl -sL "https://hacker-news.firebaseio.com/v0/item/{id}.json"
38
+
39
+ # 변형: beststories / newstories / askstories / showstories
40
+ ```
41
+
42
+ 데이터: `title`, `url`, `score`, `by`(작성자), `descendants`(댓글수), `kids`(댓글 ID)
43
+
44
+ 배치 조회:
45
+ ```bash
46
+ python3 -c "
47
+ import urllib.request, json
48
+ ids = json.load(urllib.request.urlopen('https://hacker-news.firebaseio.com/v0/topstories.json?limitToFirst=5&orderBy=\"\$key\"'))
49
+ for id in ids:
50
+ item = json.load(urllib.request.urlopen(f'https://hacker-news.firebaseio.com/v0/item/{id}.json'))
51
+ print(f'[{item.get(\"score\",0)}] {item.get(\"title\")}')
52
+ print(f' {item.get(\"url\",\"N/A\")[:60]}')
53
+ "
54
+ ```
55
+
56
+ ## Lobste.rs
57
+
58
+ Rate limit 없음. HN보다 작지만 고품질 큐레이션.
59
+
60
+ ```bash
61
+ # 핫 스토리
62
+ curl -sL "https://lobste.rs/hottest.json"
63
+
64
+ # 태그별 (ai, programming, web, security 등)
65
+ curl -sL "https://lobste.rs/t/ai.json"
66
+
67
+ # 최신
68
+ curl -sL "https://lobste.rs/newest.json"
69
+
70
+ # 개별 스토리 + 댓글
71
+ curl -sL "https://lobste.rs/s/{short_id}.json"
72
+ ```
73
+
74
+ 데이터: `title`, `url`, `score`, `comment_count`, `tags`, `submitter_user`
75
+
76
+ ## dev.to
77
+
78
+ ```bash
79
+ # 태그별 최신
80
+ curl -sL "https://dev.to/api/articles?tag=ai&per_page=5"
81
+
82
+ # 이번 주 탑
83
+ curl -sL "https://dev.to/api/articles?top=7&per_page=5"
84
+
85
+ # 특정 유저
86
+ curl -sL "https://dev.to/api/articles?username={user}&per_page=5"
87
+ ```
88
+
89
+ 데이터: `title`, `user.name`, `public_reactions_count`, `reading_time_minutes`, `tags`
90
+
91
+ ## npm Registry
92
+
93
+ ```bash
94
+ # 패키지 최신 버전
95
+ curl -sL "https://registry.npmjs.org/{package}/latest"
96
+
97
+ # 패키지 검색
98
+ curl -sL "https://registry.npmjs.org/-/v1/search?text={query}&size=5"
99
+
100
+ # 다운로드 통계
101
+ curl -sL "https://api.npmjs.org/downloads/range/last-month/{package}"
102
+ ```
103
+
104
+ ## PyPI
105
+
106
+ ```bash
107
+ # 패키지 정보
108
+ curl -sL "https://pypi.org/pypi/{package}/json"
109
+
110
+ # 다운로드 통계
111
+ curl -sL "https://pypistats.org/api/packages/{package}/recent"
112
+ ```
113
+
114
+ ## Wikipedia
115
+
116
+ ```bash
117
+ # 페이지 요약
118
+ curl -sL "https://en.wikipedia.org/api/rest_v1/page/summary/{title}"
119
+ # 한국어: https://ko.wikipedia.org/api/rest_v1/page/summary/{title}
120
+
121
+ # 검색
122
+ curl -sL "https://en.wikipedia.org/w/api.php?action=opensearch&search={query}&limit=5&format=json"
123
+ ```
124
+
125
+ ## V2EX
126
+
127
+ ```bash
128
+ curl -sL "https://www.v2ex.com/api/topics/hot.json" -H "User-Agent: insane-search/1.0"
129
+ ```
130
+
131
+ ## RSS 피드
132
+
133
+ → [rss.md](rss.md)로 이동. 한국 언론 RSS, Google News RSS, feedparser 사용법 등 상세 가이드 참조.
@@ -0,0 +1,123 @@
1
+ # 미디어 추출 — yt-dlp
2
+
3
+ > yt-dlp는 YouTube 전용 도구가 아니라 **1,858개 사이트**를 지원하는 범용 미디어 추출 도구.
4
+ > 영상, 오디오, 팟캐스트, 라이브 스트리밍 — 미디어 URL이면 yt-dlp를 먼저 시도한다.
5
+
6
+ ## 설치 확인
7
+
8
+ ```bash
9
+ which yt-dlp || python3 -m yt_dlp --version
10
+ ```
11
+
12
+ - `yt-dlp` 명령어가 PATH에 있으면 그대로 사용
13
+ - 없으면 `python3 -m yt_dlp`로 대체 (아래 모든 명령어에서 치환)
14
+ - 미설치 시: `pip install yt-dlp`
15
+
16
+ ## 핵심 명령어 (모든 지원 사이트 공통)
17
+
18
+ ### 메타데이터 추출 (가장 범용)
19
+
20
+ ```bash
21
+ yt-dlp --dump-json "URL"
22
+ ```
23
+
24
+ title, uploader, duration, view_count, description, tags 등 구조화 JSON 반환.
25
+ 전용 extractor가 있는 사이트에서 ~95% 성공.
26
+
27
+ ### 자막 추출
28
+
29
+ ```bash
30
+ yt-dlp --write-sub --write-auto-sub --sub-lang "en,ko" --skip-download -o "/tmp/%(id)s" "URL"
31
+ cat /tmp/VIDEO_ID.*.vtt
32
+ ```
33
+
34
+ YouTube는 100개 언어 자동자막 지원. 다른 사이트는 자체 자막 제공 시에만 동작.
35
+
36
+ ### 검색
37
+
38
+ ```bash
39
+ # YouTube
40
+ yt-dlp --dump-json "ytsearch5:{검색어}"
41
+
42
+ # SoundCloud
43
+ yt-dlp --dump-json "scsearch5:{검색어}"
44
+
45
+ # Dailymotion
46
+ yt-dlp --dump-json "dailymotionsearch5:{검색어}"
47
+
48
+ # Yahoo
49
+ yt-dlp --dump-json "yahoosearch5:{검색어}"
50
+ ```
51
+
52
+ ### 채널/플레이리스트 목록 (다운로드 없이)
53
+
54
+ ```bash
55
+ yt-dlp --flat-playlist --dump-json "채널_URL"
56
+ ```
57
+
58
+ title, id, url, duration 반환. 채널 전체 영상 목록을 초고속 수집.
59
+
60
+ ### 댓글 추출 (YouTube)
61
+
62
+ ```bash
63
+ yt-dlp --write-comments --skip-download --write-info-json \
64
+ --extractor-args "youtube:max_comments=20" \
65
+ -o "/tmp/%(id)s" "URL"
66
+ ```
67
+
68
+ ## 지원 플랫폼 카테고리
69
+
70
+ ### 영상
71
+
72
+ | 사이트 | 메타데이터 | 자막 | 검색 | 비고 |
73
+ |--------|----------|------|------|------|
74
+ | YouTube | O | O (자동생성 포함) | `ytsearch` | 최고 지원 |
75
+ | Vimeo | O | O (사이트 제공 시) | X | 학술/다큐 콘텐츠 풍부 |
76
+ | Twitch | O (VOD/클립) | X | X | 기술 스트리밍 |
77
+ | TikTok | O | X | X | 공개 계정만 |
78
+ | Dailymotion | O | O | `dailymotionsearch` | |
79
+ | Rumble | O | X | X | |
80
+ | PeerTube | O | X | X | 탈중앙화 |
81
+
82
+ ### 오디오/팟캐스트
83
+
84
+ | 사이트 | 메타데이터 | 검색 | 비고 |
85
+ |--------|----------|------|------|
86
+ | SoundCloud | O | `scsearch` | 검색까지 가능 — 최고 |
87
+ | Apple Podcasts | O | X | RSS 기반 |
88
+ | TuneIn | O | X | |
89
+ | acast | O | X | 채널 단위 지원 |
90
+ | Spreaker | O | X | |
91
+ | Audius | O | X | 블록체인 기반 |
92
+
93
+ ### 한국 플랫폼
94
+
95
+ | 사이트 | Extractor | 비고 |
96
+ |--------|-----------|------|
97
+ | Naver TV | `Naver`, `Naver:live` | |
98
+ | Kakao | `Kakao` | |
99
+ | SBS | `SBS`, `sbs.co.kr` | |
100
+ | JTBC | `JTBC`, `JTBC:program` | |
101
+ | Chzzk | `chzzk:video`, `chzzk:live` | 네이버 스트리밍 |
102
+ | Soop (구 AfreecaTV) | `soop`, `soop:live` | |
103
+ | Daum | `daum.net`, `daum.net:clip` | |
104
+ | Weverse | `Weverse`, `WeverseLive` | K-팝 팬덤 |
105
+
106
+ ### 뉴스 VOD
107
+
108
+ | 사이트 | 비고 |
109
+ |--------|------|
110
+ | BBC | 공개 VOD |
111
+ | ABC (호주) | iview |
112
+ | CBS News | |
113
+ | NBC News | 차단 많음 |
114
+
115
+ > 뉴스 사이트는 직접 URL보다 **YouTube 공식 채널 경유**가 더 안정적.
116
+ > 예: `ytsearch:BBC News {키워드}`
117
+
118
+ ## 주의사항
119
+
120
+ - 자동 생성 자막은 행간 중복 → 후처리 필요
121
+ - generic extractor는 성공률 ~30% — 전용 extractor 있는 사이트 우선
122
+ - 페이월/로그인 사이트는 대부분 실패
123
+ - `--dump-json`이 가장 안전한 범용 명령 (다운로드 없음, 메타데이터만)
@@ -0,0 +1,116 @@
1
+ # 메타데이터 추출 — OGP / JSON-LD / Schema.org
2
+
3
+ > HTML을 받았을 때 구조화된 데이터를 추출하는 보조 기법.
4
+ > 본문 전체를 못 가져와도 제목, 요약, 가격, 프로필 등 핵심 정보를 확보할 수 있다.
5
+
6
+ ## 의존성
7
+
8
+ 없음 (curl + python3 기본 모듈).
9
+
10
+ ## OGP (Open Graph Protocol) 메타태그
11
+
12
+ 대부분의 사이트가 소셜 공유용으로 삽입. 제목 + 설명 + 이미지 확보 가능.
13
+
14
+ ```bash
15
+ curl -sL -H "User-Agent: Mozilla/5.0 ..." "{URL}" | \
16
+ python3 -c "
17
+ import sys, re
18
+ html = sys.stdin.read()
19
+ for m in re.findall(r'<meta property=\"og:(\w+)\" content=\"([^\"]*?)\"', html):
20
+ print(f'og:{m[0]} = {m[1]}')
21
+ for m in re.findall(r'<meta name=\"description\" content=\"([^\"]*?)\"', html):
22
+ print(f'description = {m}')
23
+ "
24
+ ```
25
+
26
+ ## JSON-LD (Schema.org 구조화 데이터)
27
+
28
+ **가장 가치 높은 추출 대상.** 상품, 기사, 프로필 등 구조화된 정보가 JSON으로 들어있다.
29
+
30
+ ```bash
31
+ curl -sL "{URL}" | \
32
+ python3 -c "
33
+ import sys, re, json
34
+ html = sys.stdin.read()
35
+ blocks = re.findall(r'<script type=\"application/ld\+json\">(.*?)</script>', html, re.DOTALL)
36
+ for b in blocks:
37
+ try:
38
+ data = json.loads(b)
39
+ print(json.dumps(data, ensure_ascii=False, indent=2))
40
+ except:
41
+ pass
42
+ "
43
+ ```
44
+
45
+ ### 실제 사례
46
+
47
+ **쿠팡 검색 결과** — `CollectionPage` + `ItemList`:
48
+ ```json
49
+ {
50
+ "@type": "CollectionPage",
51
+ "mainEntity": {
52
+ "@type": "ItemList",
53
+ "itemListElement": [
54
+ {
55
+ "@type": "ListItem",
56
+ "item": {
57
+ "@type": "Product",
58
+ "name": "...",
59
+ "offers": { "price": 29900 }
60
+ }
61
+ }
62
+ ]
63
+ }
64
+ }
65
+ ```
66
+
67
+ **LinkedIn 프로필** — `Person`:
68
+ ```json
69
+ {
70
+ "@type": "Person",
71
+ "name": "...",
72
+ "jobTitle": "...",
73
+ "alumniOf": [
74
+ { "@type": "Organization", "name": "..." }
75
+ ]
76
+ }
77
+ ```
78
+
79
+ **뉴스 기사** — `NewsArticle`:
80
+ ```json
81
+ {
82
+ "@type": "NewsArticle",
83
+ "headline": "...",
84
+ "datePublished": "2026-04-16",
85
+ "author": { "name": "..." },
86
+ "articleBody": "..."
87
+ }
88
+ ```
89
+
90
+ ## Next.js RSC 페이로드 (요즘IT 등)
91
+
92
+ Next.js App Router 사이트는 `self.__next_f.push()` 스크립트에 콘텐츠가 포함됨.
93
+
94
+ ```bash
95
+ curl -sL "{URL}" | \
96
+ python3 -c "
97
+ import sys, re
98
+ html = sys.stdin.read()
99
+ chunks = re.findall(r'self\.__next_f\.push\(\[1,\"(.*?)\"\]\)', html)
100
+ text = ''.join(chunks)
101
+ # 한국어 텍스트 추출 (유니코드 이스케이프 디코딩)
102
+ decoded = text.encode().decode('unicode_escape', errors='ignore')
103
+ print(decoded[:3000])
104
+ "
105
+ ```
106
+
107
+ ## 활용 시점
108
+
109
+ 메타데이터 추출은 **독립 방법이 아니라 보조 기법**이다.
110
+ 어떤 Phase에서든 HTML을 받으면 같이 실행:
111
+
112
+ - Phase 1에서 curl로 HTML 받음 → JSON-LD도 추출
113
+ - Phase 2에서 curl_cffi로 HTML 받음 → JSON-LD도 추출
114
+ - Phase 3에서 Playwright로 DOM 받음 → `browser_evaluate`로 JSON-LD 추출
115
+
116
+ 본문은 못 가져와도 JSON-LD에서 **상품 가격, 기사 요약, 프로필 정보**는 확보될 수 있다.