oh-my-opencode 4.12.0 → 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 (560) 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 +916 -670
  6. package/dist/cli-node/index.js +916 -670
  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 +1042 -640
  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 +34 -6
  169. package/dist/skills/ulw-plan/SKILL.md +4 -1
  170. package/dist/tools/background-task/constants.d.ts +1 -1
  171. package/dist/tools/delegate-task/sync-task-deps.d.ts +8 -6
  172. package/dist/tools/skill-mcp/tools.d.ts +1 -1
  173. package/dist/tui.js +18 -4
  174. package/package.json +16 -14
  175. package/packages/omo-codex/THIRD-PARTY-NOTICES.md +27 -4
  176. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +3 -1
  177. package/packages/omo-codex/plugin/README.md +1 -1
  178. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +134 -42
  179. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  180. package/packages/omo-codex/plugin/components/codegraph/LICENSE +21 -0
  181. package/packages/omo-codex/plugin/components/codegraph/NODE-RUNTIME-LICENSES.md +2951 -0
  182. package/packages/omo-codex/plugin/components/codegraph/NOTICE +16 -0
  183. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +633 -193
  184. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +561 -44
  185. package/packages/omo-codex/plugin/components/codegraph/package.json +9 -3
  186. package/packages/omo-codex/plugin/components/codegraph/src/cli.ts +11 -0
  187. package/packages/omo-codex/plugin/components/codegraph/src/hook-types.ts +12 -0
  188. package/packages/omo-codex/plugin/components/codegraph/src/hook.ts +34 -0
  189. package/packages/omo-codex/plugin/components/codegraph/src/mcp-unavailable.ts +75 -0
  190. package/packages/omo-codex/plugin/components/codegraph/src/serve.ts +66 -13
  191. package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker.ts +26 -12
  192. package/packages/omo-codex/plugin/components/codegraph/test/hook.test.ts +50 -330
  193. package/packages/omo-codex/plugin/components/codegraph/test/package-runtime.test.ts +91 -0
  194. package/packages/omo-codex/plugin/components/codegraph/test/provisioned-node-guard.test.ts +2 -2
  195. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-facade.test.ts +68 -0
  196. package/packages/omo-codex/plugin/components/codegraph/test/serve-node-support.test.ts +11 -1
  197. package/packages/omo-codex/plugin/components/codegraph/test/serve-provision.test.ts +48 -0
  198. package/packages/omo-codex/plugin/components/codegraph/test/serve-unavailable.test.ts +133 -0
  199. package/packages/omo-codex/plugin/components/codegraph/test/serve.test.ts +1 -112
  200. package/packages/omo-codex/plugin/components/codegraph/test/session-start-node-support.test.ts +149 -0
  201. package/packages/omo-codex/plugin/components/codegraph/test/session-start-trust-boundary.test.ts +63 -0
  202. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-availability.test.ts +106 -0
  203. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-flow.test.ts +150 -0
  204. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  205. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  206. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  207. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  208. package/packages/omo-codex/plugin/components/rules/dist/cli.js +3 -3
  209. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  210. package/packages/omo-codex/plugin/components/rules/src/sparkshell-awareness.ts +3 -3
  211. package/packages/omo-codex/plugin/components/rules/test/sparkshell-awareness.test.ts +33 -9
  212. package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
  213. package/packages/omo-codex/plugin/components/teammode/dist/cli.js +94 -0
  214. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +17 -0
  215. package/packages/omo-codex/plugin/components/teammode/package.json +26 -0
  216. package/packages/omo-codex/plugin/components/teammode/skills/teammode/SKILL.md +59 -32
  217. package/packages/omo-codex/plugin/components/teammode/skills/teammode/scripts/team-guide.mjs +17 -16
  218. package/packages/omo-codex/plugin/components/teammode/skills/teammode/scripts/team-state.mjs +70 -3
  219. package/packages/omo-codex/plugin/components/teammode/skills/teammode/scripts/team-worktree.mjs +113 -0
  220. package/packages/omo-codex/plugin/components/teammode/skills/teammode/scripts/team.mjs +63 -4
  221. package/packages/omo-codex/plugin/components/teammode/src/cli.ts +12 -0
  222. package/packages/omo-codex/plugin/components/teammode/src/codex-hook.ts +125 -0
  223. package/packages/omo-codex/plugin/components/teammode/test/thread-title-hook.test.ts +116 -0
  224. package/packages/omo-codex/plugin/components/teammode/tsconfig.json +25 -0
  225. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  226. package/packages/omo-codex/plugin/components/ultrawork/agents/explorer.toml +1 -1
  227. package/packages/omo-codex/plugin/components/ultrawork/directive.md +5 -4
  228. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  229. package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +24 -3
  230. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  231. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +8 -7
  232. package/packages/omo-codex/plugin/components/ulw-loop/test/skill-contract.test.ts +1 -1
  233. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +17 -0
  234. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +17 -0
  235. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
  236. package/packages/omo-codex/plugin/package-lock.json +129 -12
  237. package/packages/omo-codex/plugin/package.json +3 -2
  238. package/packages/omo-codex/plugin/scripts/auto-update-plan.mjs +133 -0
  239. package/packages/omo-codex/plugin/scripts/auto-update-release-notes.mjs +135 -0
  240. package/packages/omo-codex/plugin/scripts/auto-update.mjs +33 -133
  241. package/packages/omo-codex/plugin/scripts/hook-status-message.mjs +1 -0
  242. package/packages/omo-codex/plugin/scripts/materialize-shared-upstreams.mjs +41 -0
  243. package/packages/omo-codex/plugin/shared/src/config-loader.ts +20 -2
  244. package/packages/omo-codex/plugin/shared/test/config-loader.test.ts +16 -0
  245. package/packages/omo-codex/plugin/skills/frontend/ATTRIBUTION.md +32 -8
  246. package/packages/omo-codex/plugin/skills/frontend/references/design/airbnb.md +3 -0
  247. package/packages/omo-codex/plugin/skills/frontend/references/design/airtable.md +3 -0
  248. package/packages/omo-codex/plugin/skills/frontend/references/design/apple.md +3 -0
  249. package/packages/omo-codex/plugin/skills/frontend/references/design/binance.md +3 -0
  250. package/packages/omo-codex/plugin/skills/frontend/references/design/bmw.md +3 -0
  251. package/packages/omo-codex/plugin/skills/frontend/references/design/bugatti.md +3 -0
  252. package/packages/omo-codex/plugin/skills/frontend/references/design/cal.md +3 -0
  253. package/packages/omo-codex/plugin/skills/frontend/references/design/claude.md +3 -0
  254. package/packages/omo-codex/plugin/skills/frontend/references/design/clay.md +3 -0
  255. package/packages/omo-codex/plugin/skills/frontend/references/design/clickhouse.md +3 -0
  256. package/packages/omo-codex/plugin/skills/frontend/references/design/cohere.md +3 -0
  257. package/packages/omo-codex/plugin/skills/frontend/references/design/coinbase.md +3 -0
  258. package/packages/omo-codex/plugin/skills/frontend/references/design/composio.md +3 -0
  259. package/packages/omo-codex/plugin/skills/frontend/references/design/cursor.md +3 -0
  260. package/packages/omo-codex/plugin/skills/frontend/references/design/elevenlabs.md +3 -0
  261. package/packages/omo-codex/plugin/skills/frontend/references/design/expo.md +3 -0
  262. package/packages/omo-codex/plugin/skills/frontend/references/design/ferrari.md +3 -0
  263. package/packages/omo-codex/plugin/skills/frontend/references/design/figma.md +3 -0
  264. package/packages/omo-codex/plugin/skills/frontend/references/design/framer.md +3 -0
  265. package/packages/omo-codex/plugin/skills/frontend/references/design/hashicorp.md +3 -0
  266. package/packages/omo-codex/plugin/skills/frontend/references/design/ibm.md +3 -0
  267. package/packages/omo-codex/plugin/skills/frontend/references/design/imagegen-frontend-web.md +380 -79
  268. package/packages/omo-codex/plugin/skills/frontend/references/design/intercom.md +3 -0
  269. package/packages/omo-codex/plugin/skills/frontend/references/design/kraken.md +3 -0
  270. package/packages/omo-codex/plugin/skills/frontend/references/design/lamborghini.md +3 -0
  271. package/packages/omo-codex/plugin/skills/frontend/references/design/linear.app.md +3 -0
  272. package/packages/omo-codex/plugin/skills/frontend/references/design/lovable.md +3 -0
  273. package/packages/omo-codex/plugin/skills/frontend/references/design/mastercard.md +3 -0
  274. package/packages/omo-codex/plugin/skills/frontend/references/design/meta.md +3 -0
  275. package/packages/omo-codex/plugin/skills/frontend/references/design/minimax.md +3 -0
  276. package/packages/omo-codex/plugin/skills/frontend/references/design/mintlify.md +3 -0
  277. package/packages/omo-codex/plugin/skills/frontend/references/design/miro.md +3 -0
  278. package/packages/omo-codex/plugin/skills/frontend/references/design/mistral.ai.md +3 -0
  279. package/packages/omo-codex/plugin/skills/frontend/references/design/mongodb.md +3 -0
  280. package/packages/omo-codex/plugin/skills/frontend/references/design/nike.md +3 -0
  281. package/packages/omo-codex/plugin/skills/frontend/references/design/notion.md +3 -0
  282. package/packages/omo-codex/plugin/skills/frontend/references/design/nvidia.md +3 -0
  283. package/packages/omo-codex/plugin/skills/frontend/references/design/ollama.md +3 -0
  284. package/packages/omo-codex/plugin/skills/frontend/references/design/opencode.ai.md +3 -0
  285. package/packages/omo-codex/plugin/skills/frontend/references/design/pinterest.md +3 -0
  286. package/packages/omo-codex/plugin/skills/frontend/references/design/playstation.md +3 -0
  287. package/packages/omo-codex/plugin/skills/frontend/references/design/posthog.md +3 -0
  288. package/packages/omo-codex/plugin/skills/frontend/references/design/raycast.md +3 -0
  289. package/packages/omo-codex/plugin/skills/frontend/references/design/renault.md +3 -0
  290. package/packages/omo-codex/plugin/skills/frontend/references/design/replicate.md +3 -0
  291. package/packages/omo-codex/plugin/skills/frontend/references/design/resend.md +3 -0
  292. package/packages/omo-codex/plugin/skills/frontend/references/design/revolut.md +3 -0
  293. package/packages/omo-codex/plugin/skills/frontend/references/design/runwayml.md +3 -0
  294. package/packages/omo-codex/plugin/skills/frontend/references/design/sanity.md +3 -0
  295. package/packages/omo-codex/plugin/skills/frontend/references/design/sentry.md +3 -0
  296. package/packages/omo-codex/plugin/skills/frontend/references/design/shopify.md +3 -0
  297. package/packages/omo-codex/plugin/skills/frontend/references/design/spacex.md +3 -0
  298. package/packages/omo-codex/plugin/skills/frontend/references/design/spotify.md +3 -0
  299. package/packages/omo-codex/plugin/skills/frontend/references/design/starbucks.md +3 -0
  300. package/packages/omo-codex/plugin/skills/frontend/references/design/stitch-skill.md +1 -1
  301. package/packages/omo-codex/plugin/skills/frontend/references/design/stripe.md +3 -0
  302. package/packages/omo-codex/plugin/skills/frontend/references/design/supabase.md +3 -0
  303. package/packages/omo-codex/plugin/skills/frontend/references/design/superhuman.md +3 -0
  304. package/packages/omo-codex/plugin/skills/frontend/references/design/taste-skill.md +1188 -208
  305. package/packages/omo-codex/plugin/skills/frontend/references/design/tesla.md +3 -0
  306. package/packages/omo-codex/plugin/skills/frontend/references/design/theverge.md +3 -0
  307. package/packages/omo-codex/plugin/skills/frontend/references/design/together.ai.md +3 -0
  308. package/packages/omo-codex/plugin/skills/frontend/references/design/uber.md +3 -0
  309. package/packages/omo-codex/plugin/skills/frontend/references/design/vercel.md +3 -0
  310. package/packages/omo-codex/plugin/skills/frontend/references/design/vodafone.md +3 -0
  311. package/packages/omo-codex/plugin/skills/frontend/references/design/voltagent.md +3 -0
  312. package/packages/omo-codex/plugin/skills/frontend/references/design/warp.md +3 -0
  313. package/packages/omo-codex/plugin/skills/frontend/references/design/webflow.md +3 -0
  314. package/packages/omo-codex/plugin/skills/frontend/references/design/wired.md +3 -0
  315. package/packages/omo-codex/plugin/skills/frontend/references/design/wise.md +3 -0
  316. package/packages/omo-codex/plugin/skills/frontend/references/design/x.ai.md +3 -0
  317. package/packages/omo-codex/plugin/skills/frontend/references/design/zapier.md +3 -0
  318. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/README.md +501 -115
  319. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/charts.csv +26 -26
  320. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/colors.csv +162 -97
  321. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/icons.csv +105 -100
  322. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/landing.csv +22 -18
  323. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/products.csv +162 -97
  324. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/stacks/flutter.csv +53 -53
  325. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/stacks/html-tailwind.csv +56 -56
  326. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/stacks/nextjs.csv +53 -53
  327. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/stacks/react.csv +54 -54
  328. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/stacks/svelte.csv +54 -54
  329. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/stacks/swiftui.csv +51 -51
  330. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/stacks/vue.csv +50 -50
  331. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/styles.csv +17 -0
  332. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/typography.csv +17 -1
  333. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/ui-reasoning.csv +162 -101
  334. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/web-interface.csv +30 -30
  335. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/scripts/core.py +31 -22
  336. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/scripts/design_system.py +150 -69
  337. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/scripts/search.py +3 -3
  338. package/packages/omo-codex/plugin/skills/lcx-doctor/SKILL.md +1 -1
  339. package/packages/omo-codex/plugin/skills/teammode/SKILL.md +59 -32
  340. package/packages/omo-codex/plugin/skills/teammode/scripts/team-guide.mjs +17 -16
  341. package/packages/omo-codex/plugin/skills/teammode/scripts/team-state.mjs +70 -3
  342. package/packages/omo-codex/plugin/skills/teammode/scripts/team-worktree.mjs +113 -0
  343. package/packages/omo-codex/plugin/skills/teammode/scripts/team.mjs +63 -4
  344. package/packages/omo-codex/plugin/skills/ultimate-browsing/ATTRIBUTION.md +105 -0
  345. package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +140 -0
  346. package/packages/omo-codex/plugin/skills/ultimate-browsing/agents/openai.yaml +2 -0
  347. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/__init__.py +24 -0
  348. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/__main__.py +106 -0
  349. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/bias_check.py +174 -0
  350. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/curl_probe.py +91 -0
  351. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/executor.py +192 -0
  352. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/fetch_chain.py +268 -0
  353. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/referers.py +15 -0
  354. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/result_schema.py +45 -0
  355. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/summary.py +37 -0
  356. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/package.json +11 -0
  357. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/playwright_mobile_chrome.js +129 -0
  358. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/playwright_real_chrome.js +167 -0
  359. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_fetch_chain.py +77 -0
  360. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_playwright_templates.py +282 -0
  361. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/url_transforms.py +98 -0
  362. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/validators.py +216 -0
  363. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/waf_detector.py +214 -0
  364. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/waf_profiles.yaml +162 -0
  365. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/README.md +79 -0
  366. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/career.md +29 -0
  367. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/dev.md +62 -0
  368. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/search.md +33 -0
  369. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/social.md +207 -0
  370. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/video.md +115 -0
  371. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/web.md +76 -0
  372. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +120 -0
  373. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +319 -0
  374. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/cache-archive.md +83 -0
  375. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/fallback.md +159 -0
  376. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/jina.md +130 -0
  377. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/json-api.md +133 -0
  378. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/media.md +123 -0
  379. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/metadata.md +116 -0
  380. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/naver.md +107 -0
  381. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/playwright.md +142 -0
  382. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/public-api.md +119 -0
  383. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/rss.md +123 -0
  384. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/tls-impersonate.md +186 -0
  385. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/twitter.md +104 -0
  386. package/packages/omo-codex/plugin/skills/ultimate-browsing/scripts/cookie_crypto.py +75 -0
  387. package/packages/omo-codex/plugin/skills/ultimate-browsing/scripts/cookie_domains.py +38 -0
  388. package/packages/omo-codex/plugin/skills/ultimate-browsing/scripts/cookie_paths.py +112 -0
  389. package/packages/omo-codex/plugin/skills/ultimate-browsing/scripts/extract_cookies.py +280 -0
  390. package/packages/omo-codex/plugin/skills/ultimate-browsing/scripts/tests/test_cookie_domain_filter.py +110 -0
  391. package/packages/omo-codex/plugin/skills/ultimate-browsing/scripts/tests/test_extract_cookies.py +245 -0
  392. package/packages/omo-codex/plugin/skills/ultraresearch/ATTRIBUTION.md +49 -0
  393. package/packages/omo-codex/plugin/skills/ultraresearch/SKILL.md +34 -6
  394. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +8 -7
  395. package/packages/omo-codex/plugin/test/aggregate-build.test.mjs +2 -1
  396. package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +36 -0
  397. package/packages/omo-codex/plugin/test/aggregate-manifest.test.mjs +2 -1
  398. package/packages/omo-codex/plugin/test/aggregate-plugin-fixture.mjs +1 -1
  399. package/packages/omo-codex/plugin/test/auto-update-release-notes.test.mjs +95 -0
  400. package/packages/omo-codex/plugin/test/auto-update-restart-notice.test.mjs +12 -3
  401. package/packages/omo-codex/plugin/test/component-bundled-cli.test.mjs +1 -0
  402. package/packages/omo-codex/plugin/test/component-codegraph-mcp-smoke.test.mjs +76 -0
  403. package/packages/omo-codex/plugin/test/component-hook-contract-cases.mjs +24 -0
  404. package/packages/omo-codex/plugin/test/hook-status-message.test.mjs +1 -0
  405. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +1 -0
  406. package/packages/omo-codex/plugin/test/teammode-communication.test.mjs +87 -0
  407. package/packages/omo-codex/plugin/test/teammode-thread-title.test.mjs +169 -0
  408. package/packages/omo-codex/plugin/test/teammode-worktree.test.mjs +246 -0
  409. package/packages/omo-codex/plugin/test/ultraresearch-skill-contract.test.mjs +78 -0
  410. package/packages/omo-codex/scripts/install-cli-args.test.mjs +1 -1
  411. package/packages/omo-codex/scripts/install-config-git-bash.test.mjs +23 -0
  412. package/packages/omo-codex/scripts/install-delegated-command.test.mjs +76 -4
  413. package/packages/omo-codex/scripts/install-dist/install-local.mjs +531 -214
  414. package/packages/omo-codex/scripts/install-local-entrypoint.test.mjs +40 -3
  415. package/packages/shared-skills/skills/frontend/ATTRIBUTION.md +32 -8
  416. package/packages/shared-skills/skills/frontend/references/design/airbnb.md +3 -0
  417. package/packages/shared-skills/skills/frontend/references/design/airtable.md +3 -0
  418. package/packages/shared-skills/skills/frontend/references/design/apple.md +3 -0
  419. package/packages/shared-skills/skills/frontend/references/design/binance.md +3 -0
  420. package/packages/shared-skills/skills/frontend/references/design/bmw.md +3 -0
  421. package/packages/shared-skills/skills/frontend/references/design/bugatti.md +3 -0
  422. package/packages/shared-skills/skills/frontend/references/design/cal.md +3 -0
  423. package/packages/shared-skills/skills/frontend/references/design/claude.md +3 -0
  424. package/packages/shared-skills/skills/frontend/references/design/clay.md +3 -0
  425. package/packages/shared-skills/skills/frontend/references/design/clickhouse.md +3 -0
  426. package/packages/shared-skills/skills/frontend/references/design/cohere.md +3 -0
  427. package/packages/shared-skills/skills/frontend/references/design/coinbase.md +3 -0
  428. package/packages/shared-skills/skills/frontend/references/design/composio.md +3 -0
  429. package/packages/shared-skills/skills/frontend/references/design/cursor.md +3 -0
  430. package/packages/shared-skills/skills/frontend/references/design/elevenlabs.md +3 -0
  431. package/packages/shared-skills/skills/frontend/references/design/expo.md +3 -0
  432. package/packages/shared-skills/skills/frontend/references/design/ferrari.md +3 -0
  433. package/packages/shared-skills/skills/frontend/references/design/figma.md +3 -0
  434. package/packages/shared-skills/skills/frontend/references/design/framer.md +3 -0
  435. package/packages/shared-skills/skills/frontend/references/design/hashicorp.md +3 -0
  436. package/packages/shared-skills/skills/frontend/references/design/ibm.md +3 -0
  437. package/packages/shared-skills/skills/frontend/references/design/imagegen-frontend-web.md +380 -79
  438. package/packages/shared-skills/skills/frontend/references/design/intercom.md +3 -0
  439. package/packages/shared-skills/skills/frontend/references/design/kraken.md +3 -0
  440. package/packages/shared-skills/skills/frontend/references/design/lamborghini.md +3 -0
  441. package/packages/shared-skills/skills/frontend/references/design/linear.app.md +3 -0
  442. package/packages/shared-skills/skills/frontend/references/design/lovable.md +3 -0
  443. package/packages/shared-skills/skills/frontend/references/design/mastercard.md +3 -0
  444. package/packages/shared-skills/skills/frontend/references/design/meta.md +3 -0
  445. package/packages/shared-skills/skills/frontend/references/design/minimax.md +3 -0
  446. package/packages/shared-skills/skills/frontend/references/design/mintlify.md +3 -0
  447. package/packages/shared-skills/skills/frontend/references/design/miro.md +3 -0
  448. package/packages/shared-skills/skills/frontend/references/design/mistral.ai.md +3 -0
  449. package/packages/shared-skills/skills/frontend/references/design/mongodb.md +3 -0
  450. package/packages/shared-skills/skills/frontend/references/design/nike.md +3 -0
  451. package/packages/shared-skills/skills/frontend/references/design/notion.md +3 -0
  452. package/packages/shared-skills/skills/frontend/references/design/nvidia.md +3 -0
  453. package/packages/shared-skills/skills/frontend/references/design/ollama.md +3 -0
  454. package/packages/shared-skills/skills/frontend/references/design/opencode.ai.md +3 -0
  455. package/packages/shared-skills/skills/frontend/references/design/pinterest.md +3 -0
  456. package/packages/shared-skills/skills/frontend/references/design/playstation.md +3 -0
  457. package/packages/shared-skills/skills/frontend/references/design/posthog.md +3 -0
  458. package/packages/shared-skills/skills/frontend/references/design/raycast.md +3 -0
  459. package/packages/shared-skills/skills/frontend/references/design/renault.md +3 -0
  460. package/packages/shared-skills/skills/frontend/references/design/replicate.md +3 -0
  461. package/packages/shared-skills/skills/frontend/references/design/resend.md +3 -0
  462. package/packages/shared-skills/skills/frontend/references/design/revolut.md +3 -0
  463. package/packages/shared-skills/skills/frontend/references/design/runwayml.md +3 -0
  464. package/packages/shared-skills/skills/frontend/references/design/sanity.md +3 -0
  465. package/packages/shared-skills/skills/frontend/references/design/sentry.md +3 -0
  466. package/packages/shared-skills/skills/frontend/references/design/shopify.md +3 -0
  467. package/packages/shared-skills/skills/frontend/references/design/spacex.md +3 -0
  468. package/packages/shared-skills/skills/frontend/references/design/spotify.md +3 -0
  469. package/packages/shared-skills/skills/frontend/references/design/starbucks.md +3 -0
  470. package/packages/shared-skills/skills/frontend/references/design/stitch-skill.md +1 -1
  471. package/packages/shared-skills/skills/frontend/references/design/stripe.md +3 -0
  472. package/packages/shared-skills/skills/frontend/references/design/supabase.md +3 -0
  473. package/packages/shared-skills/skills/frontend/references/design/superhuman.md +3 -0
  474. package/packages/shared-skills/skills/frontend/references/design/taste-skill.md +1188 -208
  475. package/packages/shared-skills/skills/frontend/references/design/tesla.md +3 -0
  476. package/packages/shared-skills/skills/frontend/references/design/theverge.md +3 -0
  477. package/packages/shared-skills/skills/frontend/references/design/together.ai.md +3 -0
  478. package/packages/shared-skills/skills/frontend/references/design/uber.md +3 -0
  479. package/packages/shared-skills/skills/frontend/references/design/vercel.md +3 -0
  480. package/packages/shared-skills/skills/frontend/references/design/vodafone.md +3 -0
  481. package/packages/shared-skills/skills/frontend/references/design/voltagent.md +3 -0
  482. package/packages/shared-skills/skills/frontend/references/design/warp.md +3 -0
  483. package/packages/shared-skills/skills/frontend/references/design/webflow.md +3 -0
  484. package/packages/shared-skills/skills/frontend/references/design/wired.md +3 -0
  485. package/packages/shared-skills/skills/frontend/references/design/wise.md +3 -0
  486. package/packages/shared-skills/skills/frontend/references/design/x.ai.md +3 -0
  487. package/packages/shared-skills/skills/frontend/references/design/zapier.md +3 -0
  488. package/packages/shared-skills/skills/frontend/references/ui-ux-db/README.md +501 -115
  489. package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/charts.csv +26 -26
  490. package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/colors.csv +162 -97
  491. package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/icons.csv +105 -100
  492. package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/landing.csv +22 -18
  493. package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/products.csv +162 -97
  494. package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/stacks/flutter.csv +53 -53
  495. package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/stacks/html-tailwind.csv +56 -56
  496. package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/stacks/nextjs.csv +53 -53
  497. package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/stacks/react.csv +54 -54
  498. package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/stacks/svelte.csv +54 -54
  499. package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/stacks/swiftui.csv +51 -51
  500. package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/stacks/vue.csv +50 -50
  501. package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/styles.csv +17 -0
  502. package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/typography.csv +17 -1
  503. package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/ui-reasoning.csv +162 -101
  504. package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/web-interface.csv +30 -30
  505. package/packages/shared-skills/skills/frontend/references/ui-ux-db/scripts/core.py +31 -22
  506. package/packages/shared-skills/skills/frontend/references/ui-ux-db/scripts/design_system.py +150 -69
  507. package/packages/shared-skills/skills/frontend/references/ui-ux-db/scripts/search.py +3 -3
  508. package/packages/shared-skills/skills/lcx-doctor/SKILL.md +1 -1
  509. package/packages/shared-skills/skills/ultimate-browsing/ATTRIBUTION.md +105 -0
  510. package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +140 -0
  511. package/packages/shared-skills/skills/ultimate-browsing/engine/__init__.py +24 -0
  512. package/packages/shared-skills/skills/ultimate-browsing/engine/__main__.py +106 -0
  513. package/packages/shared-skills/skills/ultimate-browsing/engine/bias_check.py +174 -0
  514. package/packages/shared-skills/skills/ultimate-browsing/engine/curl_probe.py +91 -0
  515. package/packages/shared-skills/skills/ultimate-browsing/engine/executor.py +192 -0
  516. package/packages/shared-skills/skills/ultimate-browsing/engine/fetch_chain.py +268 -0
  517. package/packages/shared-skills/skills/ultimate-browsing/engine/referers.py +15 -0
  518. package/packages/shared-skills/skills/ultimate-browsing/engine/result_schema.py +45 -0
  519. package/packages/shared-skills/skills/ultimate-browsing/engine/summary.py +37 -0
  520. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/package.json +11 -0
  521. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/playwright_mobile_chrome.js +129 -0
  522. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/playwright_real_chrome.js +167 -0
  523. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/test_fetch_chain.py +77 -0
  524. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/test_playwright_templates.py +282 -0
  525. package/packages/shared-skills/skills/ultimate-browsing/engine/url_transforms.py +98 -0
  526. package/packages/shared-skills/skills/ultimate-browsing/engine/validators.py +216 -0
  527. package/packages/shared-skills/skills/ultimate-browsing/engine/waf_detector.py +214 -0
  528. package/packages/shared-skills/skills/ultimate-browsing/engine/waf_profiles.yaml +162 -0
  529. package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/README.md +79 -0
  530. package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/career.md +29 -0
  531. package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/dev.md +62 -0
  532. package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/search.md +33 -0
  533. package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/social.md +207 -0
  534. package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/video.md +115 -0
  535. package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/web.md +76 -0
  536. package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +120 -0
  537. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +319 -0
  538. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/cache-archive.md +83 -0
  539. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/fallback.md +159 -0
  540. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/jina.md +130 -0
  541. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/json-api.md +133 -0
  542. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/media.md +123 -0
  543. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/metadata.md +116 -0
  544. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/naver.md +107 -0
  545. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/playwright.md +142 -0
  546. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/public-api.md +119 -0
  547. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/rss.md +123 -0
  548. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/tls-impersonate.md +186 -0
  549. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/twitter.md +104 -0
  550. package/packages/shared-skills/skills/ultimate-browsing/scripts/cookie_crypto.py +75 -0
  551. package/packages/shared-skills/skills/ultimate-browsing/scripts/cookie_domains.py +38 -0
  552. package/packages/shared-skills/skills/ultimate-browsing/scripts/cookie_paths.py +112 -0
  553. package/packages/shared-skills/skills/ultimate-browsing/scripts/extract_cookies.py +280 -0
  554. package/packages/shared-skills/skills/ultimate-browsing/scripts/tests/test_cookie_domain_filter.py +110 -0
  555. package/packages/shared-skills/skills/ultimate-browsing/scripts/tests/test_extract_cookies.py +245 -0
  556. package/packages/shared-skills/skills/ultraresearch/ATTRIBUTION.md +49 -0
  557. package/packages/shared-skills/skills/ultraresearch/SKILL.md +34 -6
  558. package/packages/shared-skills/skills/ulw-plan/SKILL.md +4 -1
  559. package/packages/omo-codex/plugin/components/codegraph/dist/cli.d.ts +0 -2
  560. package/packages/omo-codex/plugin/components/codegraph/dist/serve.d.ts +0 -32
@@ -2,14 +2,16 @@
2
2
 
3
3
  // src/serve.ts
4
4
  import { spawn } from "node:child_process";
5
- import { existsSync as existsSync4, realpathSync } from "node:fs";
6
- import { homedir as homedir4 } from "node:os";
7
- import { basename as basename2, extname, join as join5, resolve as resolve2 } from "node:path";
5
+ import { existsSync as existsSync5, realpathSync } from "node:fs";
6
+ import { homedir as homedir6 } from "node:os";
7
+ import { basename as basename3, extname, join as join6, resolve as resolve2 } from "node:path";
8
8
  import {
9
9
  cwd as processCwd,
10
10
  env as processEnv,
11
11
  execPath as processExecPath,
12
- stderr as processStderr
12
+ stdin as processStdin,
13
+ stderr as processStderr,
14
+ stdout as processStdout
13
15
  } from "node:process";
14
16
  import { fileURLToPath } from "node:url";
15
17
 
@@ -59,16 +61,235 @@ function parseNodeMajor(version) {
59
61
  return Number.isNaN(major) ? 0 : major;
60
62
  }
61
63
 
62
- // ../../../../utils/src/codegraph/resolve.ts
64
+ // ../../../../utils/src/codegraph/provision.ts
65
+ import { createHash, randomUUID } from "node:crypto";
66
+ import { execFile } from "node:child_process";
67
+ import { chmod, mkdir, readdir, readFile, rename, rm, rmdir, stat, writeFile } from "node:fs/promises";
63
68
  import { existsSync } from "node:fs";
64
- import { homedir as homedir2 } from "node:os";
69
+ import { homedir as homedir2, hostname } from "node:os";
70
+ import { basename, join as join2 } from "node:path";
71
+ import { promisify } from "node:util";
72
+
73
+ // ../../../../utils/src/codegraph/manifest.ts
74
+ var CODEGRAPH_PROVISION_MANIFEST = {
75
+ assets: {
76
+ "darwin-arm64": {
77
+ executableName: "codegraph",
78
+ sha256: "95bb27bf6382b69659e158e0c04d71cc394778951e1317d582be7807e7866908",
79
+ url: "https://github.com/colbymchenry/codegraph/releases/download/v1.0.1/codegraph-darwin-arm64.tar.gz"
80
+ },
81
+ "darwin-x64": {
82
+ executableName: "codegraph",
83
+ sha256: "3311cc1d1f0f0ad742709b6a43d8a9187b1ef0af0dd30e0b58008dc673e29478",
84
+ url: "https://github.com/colbymchenry/codegraph/releases/download/v1.0.1/codegraph-darwin-x64.tar.gz"
85
+ },
86
+ "linux-arm64": {
87
+ executableName: "codegraph",
88
+ sha256: "e16f612bc96c2ebccd04574cbed500c9939147c80666ad6bb024398dff7992ae",
89
+ url: "https://github.com/colbymchenry/codegraph/releases/download/v1.0.1/codegraph-linux-arm64.tar.gz"
90
+ },
91
+ "linux-x64": {
92
+ executableName: "codegraph",
93
+ sha256: "d45a068f44596a85c7ba7d0ef924eaf7103fbbf3cafbeb668127daff60a52228",
94
+ url: "https://github.com/colbymchenry/codegraph/releases/download/v1.0.1/codegraph-linux-x64.tar.gz"
95
+ },
96
+ "win32-arm64": {
97
+ executableName: "codegraph.cmd",
98
+ sha256: "8d57ced73b24d35f758f2ede2318e80e1d7241987f37a999e3d80edb6fddf961",
99
+ url: "https://registry.npmjs.org/@colbymchenry/codegraph-win32-arm64/-/codegraph-win32-arm64-1.0.1.tgz"
100
+ },
101
+ "win32-x64": {
102
+ executableName: "codegraph.cmd",
103
+ sha256: "52607fe73b05e741fd1087da2ceca9d3c8f565e36bf1a7070600bdbdf3931e32",
104
+ url: "https://registry.npmjs.org/@colbymchenry/codegraph-win32-x64/-/codegraph-win32-x64-1.0.1.tgz"
105
+ }
106
+ },
107
+ version: "1.0.1"
108
+ };
109
+
110
+ // ../../../../utils/src/codegraph/provision.ts
111
+ var DEFAULT_LOCK_WAIT_MS = 5000;
112
+ var DEFAULT_LOCK_STALE_MS = 120000;
113
+ var DEFAULT_DOWNLOAD_TIMEOUT_MS = 60000;
114
+ var execFileAsync = promisify(execFile);
115
+ function platformKey() {
116
+ return `${process.platform}-${process.arch}`;
117
+ }
118
+ function markerPath(installDir, version) {
119
+ return join2(installDir, ".provisioned", `codegraph-${version}.json`);
120
+ }
121
+ function defaultInstallDir() {
122
+ return join2(homedir2(), ".omo", "codegraph");
123
+ }
124
+ function sha256(bytes) {
125
+ return createHash("sha256").update(bytes).digest("hex");
126
+ }
127
+ function isErrnoException(error) {
128
+ return error instanceof Error && "code" in error;
129
+ }
130
+ async function removeEmptyDirectory(path) {
131
+ try {
132
+ await rmdir(path);
133
+ } catch (error) {
134
+ if (isErrnoException(error) && error.code === "ENOENT")
135
+ return;
136
+ if (isErrnoException(error) && error.code === "ENOTEMPTY")
137
+ return;
138
+ throw error;
139
+ }
140
+ }
141
+ function sleep(ms) {
142
+ return new Promise((resolve) => setTimeout(resolve, ms));
143
+ }
144
+ async function defaultDownloader(asset, timeoutMs = DEFAULT_DOWNLOAD_TIMEOUT_MS) {
145
+ const response = await fetch(asset.url, { signal: AbortSignal.timeout(timeoutMs) });
146
+ if (!response.ok)
147
+ throw new Error(`download failed with HTTP ${response.status}`);
148
+ return new Uint8Array(await response.arrayBuffer());
149
+ }
150
+ function forcedBadChecksumOptions(options) {
151
+ if (options.forceBadChecksum !== true)
152
+ return null;
153
+ const key = options.platformKey ?? platformKey();
154
+ return {
155
+ downloader: async () => new TextEncoder().encode("checksum mismatch"),
156
+ installDir: options.installDir ?? join2(options.lockDir, "codegraph-force-bad-checksum"),
157
+ manifest: {
158
+ assets: {
159
+ [key]: { executableName: process.platform === "win32" ? "codegraph.cmd" : "codegraph", sha256: "0000", url: "memory://bad" }
160
+ },
161
+ version: options.version
162
+ },
163
+ platformKey: key
164
+ };
165
+ }
166
+ async function readMarker(path) {
167
+ if (!existsSync(path))
168
+ return null;
169
+ try {
170
+ const raw = JSON.parse(await readFile(path, "utf8"));
171
+ if (typeof raw === "object" && raw !== null && "binPath" in raw) {
172
+ const value = raw.binPath;
173
+ return typeof value === "string" && existsSync(value) ? value : null;
174
+ }
175
+ return null;
176
+ } catch (error) {
177
+ if (error instanceof Error)
178
+ return null;
179
+ throw error;
180
+ }
181
+ }
182
+ async function acquireLock(lockPath, waitMs, staleMs) {
183
+ const startedAt = Date.now();
184
+ await mkdir(join2(lockPath, ".."), { recursive: true });
185
+ while (Date.now() - startedAt <= waitMs) {
186
+ try {
187
+ await mkdir(lockPath);
188
+ return () => rm(lockPath, { force: true, recursive: true });
189
+ } catch (error) {
190
+ if (!isErrnoException(error) || error.code !== "EEXIST")
191
+ throw error;
192
+ const lockStat = await stat(lockPath).catch(() => null);
193
+ if (lockStat !== null && Date.now() - lockStat.mtimeMs > staleMs) {
194
+ await rm(lockPath, { force: true, recursive: true });
195
+ continue;
196
+ }
197
+ await sleep(25);
198
+ }
199
+ }
200
+ return null;
201
+ }
202
+ async function extractTarGz(archivePath, destinationDir) {
203
+ await execFileAsync("tar", ["-xzf", archivePath, "-C", destinationDir]);
204
+ }
205
+ async function installExtractedBundle(extractDir, installDir, executableName) {
206
+ const roots = await readdir(extractDir);
207
+ if (roots.length !== 1)
208
+ throw new Error(`CodeGraph archive should contain one root directory, found ${roots.length}`);
209
+ const bundleDir = join2(extractDir, roots[0] ?? "");
210
+ const bundleEntries = await readdir(bundleDir);
211
+ await mkdir(installDir, { recursive: true });
212
+ for (const entry of bundleEntries) {
213
+ await rm(join2(installDir, entry), { force: true, recursive: true });
214
+ await rename(join2(bundleDir, entry), join2(installDir, entry));
215
+ }
216
+ const destination = join2(installDir, "bin", executableName);
217
+ if (!existsSync(destination))
218
+ throw new Error(`CodeGraph archive did not contain bin/${executableName}`);
219
+ await chmod(destination, 493);
220
+ return destination;
221
+ }
222
+ async function installAsset(layout) {
223
+ const { asset, downloader, installDir, version } = layout;
224
+ const stagingDir = join2(installDir, ".staging", randomUUID());
225
+ const archivePath = join2(stagingDir, basename(asset.url));
226
+ const extractDir = join2(stagingDir, "extract");
227
+ try {
228
+ await mkdir(extractDir, { recursive: true });
229
+ const bytes = await downloader(asset);
230
+ const actualChecksum = sha256(bytes);
231
+ if (actualChecksum !== asset.sha256) {
232
+ throw new Error(`checksum mismatch for ${basename(asset.url)}: expected ${asset.sha256}, got ${actualChecksum}`);
233
+ }
234
+ if (!asset.url.endsWith(".tar.gz") && !asset.url.endsWith(".tgz")) {
235
+ throw new Error(`unsupported CodeGraph archive type for ${basename(asset.url)}`);
236
+ }
237
+ await writeFile(archivePath, bytes);
238
+ await extractTarGz(archivePath, extractDir);
239
+ const destination = await installExtractedBundle(extractDir, installDir, asset.executableName);
240
+ await mkdir(join2(installDir, ".provisioned"), { recursive: true });
241
+ await writeFile(markerPath(installDir, version), `${JSON.stringify({ binPath: destination, version })}
242
+ `);
243
+ return destination;
244
+ } finally {
245
+ await rm(stagingDir, { force: true, recursive: true });
246
+ await removeEmptyDirectory(join2(installDir, ".staging"));
247
+ }
248
+ }
249
+ async function ensureCodegraphProvisioned(options) {
250
+ const forced = forcedBadChecksumOptions(options);
251
+ const installDir = forced?.installDir ?? options.installDir ?? defaultInstallDir();
252
+ const manifest = forced?.manifest ?? options.manifest ?? CODEGRAPH_PROVISION_MANIFEST;
253
+ const activePlatformKey = forced?.platformKey ?? options.platformKey ?? platformKey();
254
+ const downloader = forced?.downloader ?? options.downloader ?? ((asset) => defaultDownloader(asset, options.downloadTimeoutMs));
255
+ const marker = markerPath(installDir, options.version);
256
+ const existing = await readMarker(marker);
257
+ if (existing !== null)
258
+ return { binPath: existing, provisioned: true };
259
+ const lockPath = join2(options.lockDir, `codegraph-${hostname()}.lock`);
260
+ const release = await acquireLock(lockPath, options.lockWaitMs ?? DEFAULT_LOCK_WAIT_MS, options.lockStaleMs ?? DEFAULT_LOCK_STALE_MS);
261
+ if (release === null)
262
+ return { error: "timed out waiting for codegraph provisioning lock", provisioned: false };
263
+ try {
264
+ const lockedExisting = await readMarker(marker);
265
+ if (lockedExisting !== null)
266
+ return { binPath: lockedExisting, provisioned: true };
267
+ if (manifest.version !== options.version) {
268
+ return { error: `manifest version ${manifest.version} does not match requested ${options.version}`, provisioned: false };
269
+ }
270
+ const asset = manifest.assets[activePlatformKey];
271
+ if (asset === undefined) {
272
+ return { error: `no CodeGraph ${options.version} asset for ${activePlatformKey}`, provisioned: false };
273
+ }
274
+ const binPath = await installAsset({ asset, downloader, installDir, version: options.version });
275
+ return { binPath, provisioned: true };
276
+ } catch (error) {
277
+ return { error: error instanceof Error ? error.message : String(error), provisioned: false };
278
+ } finally {
279
+ await release();
280
+ }
281
+ }
282
+
283
+ // ../../../../utils/src/codegraph/resolve.ts
284
+ import { existsSync as existsSync2 } from "node:fs";
285
+ import { homedir as homedir3 } from "node:os";
65
286
  import { spawnSync } from "node:child_process";
66
- import { basename, dirname, join as join3 } from "node:path";
287
+ import { basename as basename2, dirname, join as join4 } from "node:path";
67
288
  import { createRequire } from "node:module";
68
289
 
69
290
  // ../../../../utils/src/runtime/which.ts
70
291
  import { accessSync, constants } from "node:fs";
71
- import { delimiter, join as join2 } from "node:path";
292
+ import { delimiter, join as join3 } from "node:path";
72
293
  var runtime = globalThis;
73
294
  function isUnsafeCommandName(commandName) {
74
295
  if (commandName.includes("/") || commandName.includes("\\"))
@@ -123,7 +344,7 @@ function bunWhich(commandName) {
123
344
  return null;
124
345
  for (const pathEntry of pathEntries) {
125
346
  for (const candidateName of candidateNames) {
126
- const candidatePath = join2(pathEntry, candidateName);
347
+ const candidatePath = join3(pathEntry, candidateName);
127
348
  if (isExecutable(candidatePath))
128
349
  return candidatePath;
129
350
  }
@@ -164,7 +385,7 @@ ${result.stderr}`.trim().split(/\s+/)[0];
164
385
  }
165
386
  }
166
387
  function isNodeExecutableName(filePath) {
167
- const executable = basename(filePath).toLowerCase();
388
+ const executable = basename2(filePath).toLowerCase();
168
389
  return executable === "node" || executable === "node.exe" || /^node\d+(\.exe)?$/.test(executable);
169
390
  }
170
391
  function looksLikePath(command) {
@@ -204,8 +425,8 @@ function defaultNodeRuntime(env, fileExists, which, nodeVersion) {
204
425
  function defaultProvisionedBin(homeDir, fileExists) {
205
426
  const binaryName = process.platform === "win32" ? "codegraph.cmd" : "codegraph";
206
427
  const candidates = [
207
- join3(homeDir, ".omo", "codegraph", "bin", binaryName),
208
- join3(homeDir, ".omo", "codegraph", "node-servers", "node_modules", ".bin", binaryName)
428
+ join4(homeDir, ".omo", "codegraph", "bin", binaryName),
429
+ join4(homeDir, ".omo", "codegraph", "node-servers", "node_modules", ".bin", binaryName)
209
430
  ];
210
431
  return candidates.find((candidate) => fileExists(candidate)) ?? null;
211
432
  }
@@ -213,7 +434,7 @@ function resolveBundledShim(requireResolve, fileExists) {
213
434
  try {
214
435
  const packageJson = requireResolve(`${CODEGRAPH_PACKAGE}/package.json`);
215
436
  const packageRoot = dirname(packageJson);
216
- const candidates = [join3(packageRoot, "bin", "codegraph.js"), join3(packageRoot, "npm-shim.js")];
437
+ const candidates = [join4(packageRoot, "bin", "codegraph.js"), join4(packageRoot, "npm-shim.js")];
217
438
  return candidates.find((candidate) => fileExists(candidate)) ?? null;
218
439
  } catch (error) {
219
440
  if (error instanceof Error)
@@ -229,7 +450,7 @@ function resolveBundledShim(requireResolve, fileExists) {
229
450
  }
230
451
  function resolveCodegraphCommand(options = {}) {
231
452
  const env = options.env ?? process.env;
232
- const fileExists = options.fileExists ?? existsSync;
453
+ const fileExists = options.fileExists ?? existsSync2;
233
454
  const configuredBin = env[CODEGRAPH_ENV_BIN]?.trim() || env[CODEGRAPH_LEGACY_ENV_BIN]?.trim();
234
455
  if (configuredBin !== undefined && configuredBin.length > 0) {
235
456
  return { argsPrefix: [], command: configuredBin, exists: fileExists(configuredBin), source: "env" };
@@ -241,7 +462,7 @@ function resolveCodegraphCommand(options = {}) {
241
462
  if (bundled !== null && runtime2 !== null) {
242
463
  return { argsPrefix: [bundled], command: runtime2, exists: true, source: "bundled" };
243
464
  }
244
- const provisioned = options.provisioned?.() ?? defaultProvisionedBin(options.homeDir ?? homedir2(), fileExists);
465
+ const provisioned = options.provisioned?.() ?? defaultProvisionedBin(options.homeDir ?? homedir3(), fileExists);
245
466
  if (provisioned !== null && fileExists(provisioned)) {
246
467
  return { argsPrefix: [], command: provisioned, exists: true, source: "provisioned" };
247
468
  }
@@ -254,9 +475,12 @@ function resolveCodegraphCommand(options = {}) {
254
475
  };
255
476
  }
256
477
 
478
+ // ../../shared/src/config-loader.ts
479
+ import { homedir as homedir5 } from "node:os";
480
+
257
481
  // ../../../../utils/src/omo-config/loader.ts
258
- import { existsSync as existsSync3, readFileSync } from "node:fs";
259
- import { homedir as homedir3 } from "node:os";
482
+ import { existsSync as existsSync4, readFileSync } from "node:fs";
483
+ import { homedir as homedir4 } from "node:os";
260
484
 
261
485
  // ../../../../utils/src/deep-merge.ts
262
486
  var DANGEROUS_KEYS = new Set(["__proto__", "constructor", "prototype"]);
@@ -1212,8 +1436,8 @@ function buildEnvOverrides(harness, env, warnings, merge) {
1212
1436
  }
1213
1437
 
1214
1438
  // ../../../../utils/src/omo-config/resolve.ts
1215
- import { existsSync as existsSync2 } from "node:fs";
1216
- import { dirname as dirname2, isAbsolute, join as join4, relative, resolve } from "node:path";
1439
+ import { existsSync as existsSync3 } from "node:fs";
1440
+ import { dirname as dirname2, isAbsolute, join as join5, relative, resolve } from "node:path";
1217
1441
  function containsPath(parent, child) {
1218
1442
  const pathToChild = relative(parent, child);
1219
1443
  return pathToChild === "" || !pathToChild.startsWith("..") && !isAbsolute(pathToChild);
@@ -1226,8 +1450,8 @@ function findProjectConfigPathsNearestFirst(cwd, homeDir) {
1226
1450
  while (true) {
1227
1451
  if (stopBeforeDir !== null && currentDir === stopBeforeDir)
1228
1452
  break;
1229
- const configPath = join4(currentDir, ".omo", "config.jsonc");
1230
- if (existsSync2(configPath)) {
1453
+ const configPath = join5(currentDir, ".omo", "config.jsonc");
1454
+ if (existsSync3(configPath)) {
1231
1455
  paths.push(configPath);
1232
1456
  }
1233
1457
  const parentDir = dirname2(currentDir);
@@ -1238,7 +1462,7 @@ function findProjectConfigPathsNearestFirst(cwd, homeDir) {
1238
1462
  return paths;
1239
1463
  }
1240
1464
  function resolveOmoConfigPaths(options) {
1241
- const globalPath = join4(resolve(options.homeDir), ".omo", "config.jsonc");
1465
+ const globalPath = join5(resolve(options.homeDir), ".omo", "config.jsonc");
1242
1466
  const projectPathsFarthestFirst = findProjectConfigPathsNearestFirst(options.cwd, options.homeDir).reverse();
1243
1467
  return [
1244
1468
  { path: globalPath, scope: "global" },
@@ -1449,13 +1673,13 @@ function validateHarnessApplicability(config, harness) {
1449
1673
  }
1450
1674
  function loadOmoConfig(options) {
1451
1675
  const cwd = options.cwd ?? process.cwd();
1452
- const homeDir = options.homeDir ?? process.env["HOME"] ?? process.env["USERPROFILE"] ?? homedir3();
1676
+ const homeDir = options.homeDir ?? process.env["HOME"] ?? process.env["USERPROFILE"] ?? homedir4();
1453
1677
  const env = options.env ?? process.env;
1454
1678
  let config = BUILT_IN_DEFAULTS;
1455
1679
  const sources = [];
1456
1680
  const warnings = [];
1457
1681
  for (const candidate of resolveOmoConfigPaths({ cwd, homeDir })) {
1458
- if (!existsSync3(candidate.path)) {
1682
+ if (!existsSync4(candidate.path)) {
1459
1683
  if (candidate.scope === "global") {
1460
1684
  sources.push(toMissingSource(candidate));
1461
1685
  }
@@ -1479,56 +1703,324 @@ function loadOmoConfig(options) {
1479
1703
 
1480
1704
  // ../../shared/src/config-loader.ts
1481
1705
  function getCodexOmoConfig(options = {}) {
1706
+ const env = options.env ?? process.env;
1707
+ const homeDir = resolveHomeDir(options);
1482
1708
  const result = loadOmoConfig({
1483
1709
  ...options.cwd === undefined ? {} : { cwd: options.cwd },
1484
- ...options.env === undefined ? {} : { env: options.env },
1485
- ...options.homeDir === undefined ? {} : { homeDir: options.homeDir },
1710
+ env,
1711
+ homeDir,
1486
1712
  harness: "codex"
1487
1713
  });
1714
+ const trustedConfig = loadOmoConfig({
1715
+ cwd: homeDir,
1716
+ env,
1717
+ homeDir,
1718
+ harness: "codex"
1719
+ });
1720
+ const trustedCodegraphInstallDir = trustedConfig.config.codegraph?.install_dir;
1488
1721
  return {
1489
1722
  ...result.config,
1490
1723
  sources: result.sources,
1724
+ ...trustedCodegraphInstallDir === undefined ? {} : { trustedCodegraphInstallDir },
1491
1725
  warnings: result.warnings
1492
1726
  };
1493
1727
  }
1728
+ function resolveHomeDir(options) {
1729
+ const env = options.env ?? process.env;
1730
+ return options.homeDir ?? env["HOME"] ?? env["USERPROFILE"] ?? homedir5();
1731
+ }
1732
+
1733
+ // ../../../../mcp-stdio-core/src/record.ts
1734
+ function isPlainRecord(value) {
1735
+ return typeof value === "object" && value !== null && !Array.isArray(value);
1736
+ }
1737
+ // ../../../../mcp-stdio-core/src/responses.ts
1738
+ function successResponse(id, result) {
1739
+ return { jsonrpc: "2.0", id, result };
1740
+ }
1741
+ function errorResponse(id, code, message, data) {
1742
+ return { jsonrpc: "2.0", id, error: data === undefined ? { code, message } : { code, message, data } };
1743
+ }
1744
+ function jsonRpcId(value) {
1745
+ return typeof value === "string" || typeof value === "number" || value === null ? value : null;
1746
+ }
1747
+ // ../../../../mcp-stdio-core/src/transport.ts
1748
+ var HEADER_SEPARATOR = Buffer.from(`\r
1749
+ \r
1750
+ `);
1751
+ async function* readStdioJsonRpcMessages(input) {
1752
+ let buffer = Buffer.alloc(0);
1753
+ for await (const chunk of input) {
1754
+ buffer = Buffer.concat([buffer, bufferFromChunk(chunk)]);
1755
+ while (true) {
1756
+ const result = readNextMessage(buffer);
1757
+ if (result.kind === "incomplete")
1758
+ break;
1759
+ buffer = result.remaining;
1760
+ if (result.message)
1761
+ yield result.message;
1762
+ }
1763
+ }
1764
+ const trailing = buffer.toString("utf8").trim();
1765
+ if (trailing.length > 0) {
1766
+ yield parseJsonPayload(trailing, "line");
1767
+ }
1768
+ }
1769
+ function writeStdioJsonRpcResponse(output, response, responseMode) {
1770
+ const body = JSON.stringify(response);
1771
+ if (responseMode === "framed") {
1772
+ output.write(`Content-Length: ${Buffer.byteLength(body, "utf8")}\r
1773
+ \r
1774
+ ${body}`);
1775
+ return;
1776
+ }
1777
+ output.write(`${body}
1778
+ `);
1779
+ }
1780
+ function readNextMessage(buffer) {
1781
+ if (buffer.length === 0)
1782
+ return { kind: "incomplete" };
1783
+ return startsWithContentLength(buffer) ? readFramedMessage(buffer) : readLineMessage(buffer);
1784
+ }
1785
+ function readLineMessage(buffer) {
1786
+ const newlineIndex = buffer.indexOf(10);
1787
+ if (newlineIndex === -1)
1788
+ return { kind: "incomplete" };
1789
+ const line = buffer.subarray(0, newlineIndex).toString("utf8").replace(/\r$/, "");
1790
+ if (line.trim().length === 0) {
1791
+ return { kind: "complete", remaining: buffer.subarray(newlineIndex + 1) };
1792
+ }
1793
+ return {
1794
+ kind: "complete",
1795
+ message: parseJsonPayload(line, "line"),
1796
+ remaining: buffer.subarray(newlineIndex + 1)
1797
+ };
1798
+ }
1799
+ function readFramedMessage(buffer) {
1800
+ const separatorIndex = buffer.indexOf(HEADER_SEPARATOR);
1801
+ if (separatorIndex === -1)
1802
+ return { kind: "incomplete" };
1803
+ const headers = buffer.subarray(0, separatorIndex).toString("ascii");
1804
+ const contentLength = parseContentLength(headers);
1805
+ const bodyStart = separatorIndex + HEADER_SEPARATOR.length;
1806
+ if (contentLength === undefined) {
1807
+ return {
1808
+ kind: "complete",
1809
+ message: {
1810
+ kind: "parse_error",
1811
+ message: "Missing or invalid Content-Length header",
1812
+ responseMode: "framed"
1813
+ },
1814
+ remaining: buffer.subarray(bodyStart)
1815
+ };
1816
+ }
1817
+ const bodyEnd = bodyStart + contentLength;
1818
+ if (buffer.length < bodyEnd)
1819
+ return { kind: "incomplete" };
1820
+ const body = buffer.subarray(bodyStart, bodyEnd).toString("utf8");
1821
+ return {
1822
+ kind: "complete",
1823
+ message: parseJsonPayload(body, "framed"),
1824
+ remaining: buffer.subarray(bodyEnd)
1825
+ };
1826
+ }
1827
+ function startsWithContentLength(buffer) {
1828
+ const prefix = buffer.subarray(0, "content-length:".length).toString("ascii").toLowerCase();
1829
+ return prefix === "content-length:";
1830
+ }
1831
+ function parseContentLength(headers) {
1832
+ for (const line of headers.split(`\r
1833
+ `)) {
1834
+ const match = /^content-length:\s*(\d+)$/i.exec(line);
1835
+ if (match === null)
1836
+ continue;
1837
+ const value = match[1];
1838
+ if (value === undefined)
1839
+ return;
1840
+ return Number(value);
1841
+ }
1842
+ return;
1843
+ }
1844
+ function parseJsonPayload(payload, responseMode) {
1845
+ try {
1846
+ return { kind: "request", payload: JSON.parse(payload), responseMode };
1847
+ } catch (error) {
1848
+ return { kind: "parse_error", message: error instanceof Error ? error.message : String(error), responseMode };
1849
+ }
1850
+ }
1851
+ function bufferFromChunk(chunk) {
1852
+ if (Buffer.isBuffer(chunk))
1853
+ return chunk;
1854
+ if (typeof chunk === "string")
1855
+ return Buffer.from(chunk);
1856
+ throw new TypeError(`Unsupported stdio chunk type: ${typeof chunk}`);
1857
+ }
1858
+
1859
+ // ../../../../mcp-stdio-core/src/server.ts
1860
+ var DEFAULT_IDLE_TIMEOUT_MS = 10 * 60000;
1861
+ var noopLog = () => {};
1862
+ async function runJsonRpcStdioServer(config) {
1863
+ const log = config.log ?? noopLog;
1864
+ const idleTimeoutMs = config.idleTimeoutMs ?? DEFAULT_IDLE_TIMEOUT_MS;
1865
+ const idleTimer = createIdleTimer(idleTimeoutMs, log, config.onIdleTimeout);
1866
+ log("stdio_started", { cwd: process.cwd(), idle_timeout_ms: idleTimeoutMs });
1867
+ idleTimer.arm();
1868
+ try {
1869
+ for await (const message of readStdioJsonRpcMessages(config.input)) {
1870
+ if (idleTimer.closed())
1871
+ break;
1872
+ idleTimer.arm();
1873
+ if (message.kind === "parse_error") {
1874
+ handleParseError(message, config, log);
1875
+ continue;
1876
+ }
1877
+ await handleRequest(message, config, log);
1878
+ }
1879
+ } finally {
1880
+ idleTimer.clear();
1881
+ log("stdio_stopped");
1882
+ }
1883
+ }
1884
+ function handleParseError(message, config, log) {
1885
+ log("parse_error", { message: message.message });
1886
+ const response = config.parseErrorResponse?.(message.message) ?? errorResponse(null, -32700, "Parse error", message.message);
1887
+ if (response !== undefined) {
1888
+ writeStdioJsonRpcResponse(config.output, response, message.responseMode);
1889
+ }
1890
+ }
1891
+ async function handleRequest(message, config, log) {
1892
+ const parsed = message.payload;
1893
+ const id = isPlainRecord(parsed) ? jsonRpcId(parsed["id"]) : null;
1894
+ const method = isPlainRecord(parsed) && typeof parsed["method"] === "string" ? parsed["method"] : null;
1895
+ log("request", { id: id === null ? null : String(id), method });
1896
+ try {
1897
+ const response = await config.handler(parsed, config.handlerOptions);
1898
+ if (response === undefined)
1899
+ return;
1900
+ writeStdioJsonRpcResponse(config.output, response, message.responseMode);
1901
+ log("response", { id: String(response.id), method, is_error: response.error !== undefined });
1902
+ } catch (error) {
1903
+ if (config.onHandlerError === undefined)
1904
+ throw error;
1905
+ config.onHandlerError(error);
1906
+ }
1907
+ }
1908
+ function createIdleTimer(idleTimeoutMs, log, onIdleTimeout) {
1909
+ let timer = null;
1910
+ let isClosed = false;
1911
+ return {
1912
+ arm: () => {
1913
+ if (timer !== null)
1914
+ clearTimeout(timer);
1915
+ if (idleTimeoutMs <= 0)
1916
+ return;
1917
+ timer = setTimeout(() => {
1918
+ isClosed = true;
1919
+ log("idle_timeout", { idle_timeout_ms: idleTimeoutMs });
1920
+ onIdleTimeout?.();
1921
+ }, idleTimeoutMs);
1922
+ timer.unref();
1923
+ },
1924
+ clear: () => {
1925
+ if (timer === null)
1926
+ return;
1927
+ clearTimeout(timer);
1928
+ timer = null;
1929
+ },
1930
+ closed: () => isClosed
1931
+ };
1932
+ }
1933
+ // src/mcp-unavailable.ts
1934
+ async function runUnavailableCodegraphMcpServer(options) {
1935
+ await runJsonRpcStdioServer({
1936
+ handler: handleUnavailableCodegraphMcpRequest,
1937
+ handlerOptions: {
1938
+ reason: options.reason.trim(),
1939
+ serverVersion: options.serverVersion
1940
+ },
1941
+ input: options.input,
1942
+ output: options.output
1943
+ });
1944
+ }
1945
+ async function handleUnavailableCodegraphMcpRequest(input, options) {
1946
+ if (!isPlainRecord(input)) {
1947
+ return errorResponse(null, -32600, "Invalid Request");
1948
+ }
1949
+ const id = jsonRpcId(input["id"]);
1950
+ const method = input["method"];
1951
+ if (method === "notifications/initialized")
1952
+ return;
1953
+ if (method === "ping")
1954
+ return successResponse(id, {});
1955
+ if (method === "initialize") {
1956
+ return successResponse(id, {
1957
+ capabilities: { tools: { listChanged: false } },
1958
+ protocolVersion: requestedProtocolVersion(input["params"]),
1959
+ serverInfo: { name: "codegraph", version: options.serverVersion }
1960
+ });
1961
+ }
1962
+ if (method === "tools/list") {
1963
+ return successResponse(id, { tools: [] });
1964
+ }
1965
+ if (method === "tools/call") {
1966
+ return successResponse(id, {
1967
+ content: [{ text: options.reason, type: "text" }],
1968
+ isError: true
1969
+ });
1970
+ }
1971
+ return errorResponse(id, -32601, `Method not found: ${String(method)}`);
1972
+ }
1973
+ function requestedProtocolVersion(params) {
1974
+ if (!isPlainRecord(params) || typeof params["protocolVersion"] !== "string")
1975
+ return "2024-11-05";
1976
+ return params["protocolVersion"];
1977
+ }
1494
1978
 
1495
1979
  // src/serve.ts
1496
1980
  var CODEGRAPH_SKIP_HINT = `CodeGraph MCP skipped: codegraph binary not found. Install CodeGraph or set OMO_CODEGRAPH_BIN.
1497
1981
  `;
1498
1982
  var CODEGRAPH_DISABLED_HINT = `CodeGraph MCP skipped: disabled by OMO SOT config. Set [codex].codegraph.enabled=true to enable it.
1499
1983
  `;
1984
+ var CODEGRAPH_VERSION = "1.0.1";
1500
1985
  var WINDOWS_CMD_EXTENSIONS = new Set([".bat", ".cmd"]);
1501
1986
  var WINDOWS_NODE_SCRIPT_EXTENSIONS = new Set([".cjs", ".js", ".mjs"]);
1502
1987
  async function runCodegraphServe(options = {}) {
1503
1988
  const env = options.env ?? processEnv;
1504
- const homeDir = options.homeDir ?? homedir4();
1989
+ const homeDir = options.homeDir ?? homedir6();
1505
1990
  const config = options.config ?? getCodexOmoConfig({ cwd: options.cwd ?? processCwd(), env, homeDir });
1506
1991
  const codegraphConfig = config.codegraph ?? {};
1507
1992
  if (codegraphConfig.enabled === false) {
1508
- (options.stderr ?? processStderr).write(CODEGRAPH_DISABLED_HINT);
1509
- return 1;
1993
+ return runUnavailableMcp(CODEGRAPH_DISABLED_HINT, options);
1510
1994
  }
1995
+ const trustedInstallDir = config.trustedCodegraphInstallDir;
1511
1996
  const resolutionOptions = {
1512
1997
  env,
1513
1998
  homeDir,
1514
- provisioned: () => provisionedBinFromInstallDir(codegraphConfig.install_dir)
1999
+ provisioned: () => provisionedBinFromInstallDir(trustedInstallDir)
1515
2000
  };
1516
- const resolution = options.resolve?.(resolutionOptions) ?? resolveCodegraphCommand(resolutionOptions);
2001
+ let resolution = options.resolve?.(resolutionOptions) ?? resolveCodegraphCommand(resolutionOptions);
1517
2002
  const nodeSupport = evaluateCodegraphNodeSupport({ env, nodeVersion: options.nodeVersion });
1518
- if (!resolution.exists || shouldSkipResolvedCommand(resolution, options.commandExists ?? existsSync4)) {
2003
+ if (!resolution.exists || shouldSkipResolvedCommand(resolution, options.commandExists ?? existsSync5)) {
1519
2004
  if (resolution.source === "path" && !nodeSupport.supported) {
1520
- (options.stderr ?? processStderr).write(buildCodegraphNodeSkipHint(nodeSupport));
1521
- return 1;
2005
+ return runUnavailableMcp(buildCodegraphNodeSkipHint(nodeSupport), options);
1522
2006
  }
1523
- (options.stderr ?? processStderr).write(CODEGRAPH_SKIP_HINT);
1524
- return 1;
2007
+ const provisioned = await provisionMissingCodegraph({
2008
+ config: codegraphConfig,
2009
+ ensureProvisioned: options.ensureProvisioned ?? ensureCodegraphProvisioned,
2010
+ homeDir,
2011
+ resolution,
2012
+ ...trustedInstallDir === undefined ? {} : { trustedInstallDir }
2013
+ });
2014
+ if (provisioned === null) {
2015
+ return runUnavailableMcp(CODEGRAPH_SKIP_HINT, options);
2016
+ }
2017
+ resolution = provisioned;
1525
2018
  }
1526
2019
  if (codegraphCommandRequiresSupportedLocalNode(resolution) && !nodeSupport.supported) {
1527
- (options.stderr ?? processStderr).write(buildCodegraphNodeSkipHint(nodeSupport));
1528
- return 1;
2020
+ return runUnavailableMcp(buildCodegraphNodeSkipHint(nodeSupport), options);
1529
2021
  }
1530
2022
  const runProcess = options.runProcess ?? runChildProcess;
1531
- const codegraphEnv = codegraphEnvForConfig(codegraphConfig, homeDir, options.buildEnv);
2023
+ const codegraphEnv = codegraphEnvForConfig(trustedInstallDir, homeDir, options.buildEnv);
1532
2024
  const mergedEnv = {
1533
2025
  ...env,
1534
2026
  ...codegraphEnv
@@ -1538,6 +2030,31 @@ async function runCodegraphServe(options = {}) {
1538
2030
  stdio: "inherit"
1539
2031
  });
1540
2032
  }
2033
+ async function runUnavailableMcp(reason, options) {
2034
+ (options.stderr ?? processStderr).write(reason);
2035
+ await runUnavailableCodegraphMcpServer({
2036
+ input: options.stdin ?? processStdin,
2037
+ output: options.stdout ?? processStdout,
2038
+ reason,
2039
+ serverVersion: CODEGRAPH_VERSION
2040
+ });
2041
+ return 0;
2042
+ }
2043
+ async function provisionMissingCodegraph(options) {
2044
+ if (options.resolution.source === "env")
2045
+ return null;
2046
+ if (options.config.auto_provision === false)
2047
+ return null;
2048
+ const installDir = options.trustedInstallDir ?? join6(options.homeDir, ".omo", "codegraph");
2049
+ const result = await options.ensureProvisioned({
2050
+ installDir,
2051
+ lockDir: join6(installDir, ".locks"),
2052
+ version: CODEGRAPH_VERSION
2053
+ });
2054
+ if (!result.provisioned || result.binPath === undefined)
2055
+ return null;
2056
+ return { argsPrefix: [], command: result.binPath, exists: true, source: "provisioned" };
2057
+ }
1541
2058
  function shouldSkipResolvedCommand(resolution, commandExists) {
1542
2059
  if (resolution.source !== "env")
1543
2060
  return false;
@@ -1548,15 +2065,15 @@ function shouldSkipResolvedCommand(resolution, commandExists) {
1548
2065
  function looksLikePath2(command) {
1549
2066
  return command.includes("/") || command.includes("\\");
1550
2067
  }
1551
- function codegraphEnvForConfig(config, homeDir, buildEnv) {
2068
+ function codegraphEnvForConfig(trustedInstallDir, homeDir, buildEnv) {
1552
2069
  const env = buildEnv?.({ homeDir }) ?? buildCodegraphEnv({ homeDir });
1553
- return config.install_dir === undefined ? env : { ...env, CODEGRAPH_INSTALL_DIR: config.install_dir };
2070
+ return trustedInstallDir === undefined ? env : { ...env, CODEGRAPH_INSTALL_DIR: trustedInstallDir };
1554
2071
  }
1555
2072
  function provisionedBinFromInstallDir(installDir) {
1556
2073
  if (installDir === undefined)
1557
2074
  return null;
1558
- const candidate = join5(installDir, "bin", process.platform === "win32" ? "codegraph.cmd" : "codegraph");
1559
- return existsSync4(candidate) ? candidate : null;
2075
+ const candidate = join6(installDir, "bin", process.platform === "win32" ? "codegraph.cmd" : "codegraph");
2076
+ return existsSync5(candidate) ? candidate : null;
1560
2077
  }
1561
2078
  async function runCodegraphServeCli() {
1562
2079
  process.exitCode = await runCodegraphServe();
@@ -1598,7 +2115,7 @@ function isDirectInvocation(argvPath) {
1598
2115
  if (argvPath === undefined)
1599
2116
  return false;
1600
2117
  const modulePath = fileURLToPath(import.meta.url);
1601
- const moduleName = basename2(modulePath);
2118
+ const moduleName = basename3(modulePath);
1602
2119
  if (moduleName !== "serve.js" && moduleName !== "serve.ts")
1603
2120
  return false;
1604
2121
  return realpathSync(resolve2(argvPath)) === realpathSync(modulePath);