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
@@ -3,13 +3,15 @@
3
3
  // src/serve.ts
4
4
  import { spawn } from "node:child_process";
5
5
  import { existsSync as existsSync5, realpathSync } from "node:fs";
6
- import { homedir as homedir5 } from "node:os";
6
+ import { homedir as homedir6 } from "node:os";
7
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
 
@@ -473,6 +475,9 @@ function resolveCodegraphCommand(options = {}) {
473
475
  };
474
476
  }
475
477
 
478
+ // ../../shared/src/config-loader.ts
479
+ import { homedir as homedir5 } from "node:os";
480
+
476
481
  // ../../../../utils/src/omo-config/loader.ts
477
482
  import { existsSync as existsSync4, readFileSync } from "node:fs";
478
483
  import { homedir as homedir4 } from "node:os";
@@ -1698,18 +1703,278 @@ function loadOmoConfig(options) {
1698
1703
 
1699
1704
  // ../../shared/src/config-loader.ts
1700
1705
  function getCodexOmoConfig(options = {}) {
1706
+ const env = options.env ?? process.env;
1707
+ const homeDir = resolveHomeDir(options);
1701
1708
  const result = loadOmoConfig({
1702
1709
  ...options.cwd === undefined ? {} : { cwd: options.cwd },
1703
- ...options.env === undefined ? {} : { env: options.env },
1704
- ...options.homeDir === undefined ? {} : { homeDir: options.homeDir },
1710
+ env,
1711
+ homeDir,
1712
+ harness: "codex"
1713
+ });
1714
+ const trustedConfig = loadOmoConfig({
1715
+ cwd: homeDir,
1716
+ env,
1717
+ homeDir,
1705
1718
  harness: "codex"
1706
1719
  });
1720
+ const trustedCodegraphInstallDir = trustedConfig.config.codegraph?.install_dir;
1707
1721
  return {
1708
1722
  ...result.config,
1709
1723
  sources: result.sources,
1724
+ ...trustedCodegraphInstallDir === undefined ? {} : { trustedCodegraphInstallDir },
1710
1725
  warnings: result.warnings
1711
1726
  };
1712
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
+ }
1713
1978
 
1714
1979
  // src/serve.ts
1715
1980
  var CODEGRAPH_SKIP_HINT = `CodeGraph MCP skipped: codegraph binary not found. Install CodeGraph or set OMO_CODEGRAPH_BIN.
@@ -1721,43 +1986,41 @@ var WINDOWS_CMD_EXTENSIONS = new Set([".bat", ".cmd"]);
1721
1986
  var WINDOWS_NODE_SCRIPT_EXTENSIONS = new Set([".cjs", ".js", ".mjs"]);
1722
1987
  async function runCodegraphServe(options = {}) {
1723
1988
  const env = options.env ?? processEnv;
1724
- const homeDir = options.homeDir ?? homedir5();
1989
+ const homeDir = options.homeDir ?? homedir6();
1725
1990
  const config = options.config ?? getCodexOmoConfig({ cwd: options.cwd ?? processCwd(), env, homeDir });
1726
1991
  const codegraphConfig = config.codegraph ?? {};
1727
1992
  if (codegraphConfig.enabled === false) {
1728
- (options.stderr ?? processStderr).write(CODEGRAPH_DISABLED_HINT);
1729
- return 1;
1993
+ return runUnavailableMcp(CODEGRAPH_DISABLED_HINT, options);
1730
1994
  }
1995
+ const trustedInstallDir = config.trustedCodegraphInstallDir;
1731
1996
  const resolutionOptions = {
1732
1997
  env,
1733
1998
  homeDir,
1734
- provisioned: () => provisionedBinFromInstallDir(codegraphConfig.install_dir)
1999
+ provisioned: () => provisionedBinFromInstallDir(trustedInstallDir)
1735
2000
  };
1736
2001
  let resolution = options.resolve?.(resolutionOptions) ?? resolveCodegraphCommand(resolutionOptions);
1737
2002
  const nodeSupport = evaluateCodegraphNodeSupport({ env, nodeVersion: options.nodeVersion });
1738
2003
  if (!resolution.exists || shouldSkipResolvedCommand(resolution, options.commandExists ?? existsSync5)) {
1739
2004
  if (resolution.source === "path" && !nodeSupport.supported) {
1740
- (options.stderr ?? processStderr).write(buildCodegraphNodeSkipHint(nodeSupport));
1741
- return 1;
2005
+ return runUnavailableMcp(buildCodegraphNodeSkipHint(nodeSupport), options);
1742
2006
  }
1743
2007
  const provisioned = await provisionMissingCodegraph({
1744
2008
  config: codegraphConfig,
1745
2009
  ensureProvisioned: options.ensureProvisioned ?? ensureCodegraphProvisioned,
1746
2010
  homeDir,
1747
- resolution
2011
+ resolution,
2012
+ ...trustedInstallDir === undefined ? {} : { trustedInstallDir }
1748
2013
  });
1749
2014
  if (provisioned === null) {
1750
- (options.stderr ?? processStderr).write(CODEGRAPH_SKIP_HINT);
1751
- return 1;
2015
+ return runUnavailableMcp(CODEGRAPH_SKIP_HINT, options);
1752
2016
  }
1753
2017
  resolution = provisioned;
1754
2018
  }
1755
2019
  if (codegraphCommandRequiresSupportedLocalNode(resolution) && !nodeSupport.supported) {
1756
- (options.stderr ?? processStderr).write(buildCodegraphNodeSkipHint(nodeSupport));
1757
- return 1;
2020
+ return runUnavailableMcp(buildCodegraphNodeSkipHint(nodeSupport), options);
1758
2021
  }
1759
2022
  const runProcess = options.runProcess ?? runChildProcess;
1760
- const codegraphEnv = codegraphEnvForConfig(codegraphConfig, homeDir, options.buildEnv);
2023
+ const codegraphEnv = codegraphEnvForConfig(trustedInstallDir, homeDir, options.buildEnv);
1761
2024
  const mergedEnv = {
1762
2025
  ...env,
1763
2026
  ...codegraphEnv
@@ -1767,12 +2030,22 @@ async function runCodegraphServe(options = {}) {
1767
2030
  stdio: "inherit"
1768
2031
  });
1769
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
+ }
1770
2043
  async function provisionMissingCodegraph(options) {
1771
2044
  if (options.resolution.source === "env")
1772
2045
  return null;
1773
2046
  if (options.config.auto_provision === false)
1774
2047
  return null;
1775
- const installDir = options.config.install_dir ?? join6(options.homeDir, ".omo", "codegraph");
2048
+ const installDir = options.trustedInstallDir ?? join6(options.homeDir, ".omo", "codegraph");
1776
2049
  const result = await options.ensureProvisioned({
1777
2050
  installDir,
1778
2051
  lockDir: join6(installDir, ".locks"),
@@ -1792,9 +2065,9 @@ function shouldSkipResolvedCommand(resolution, commandExists) {
1792
2065
  function looksLikePath2(command) {
1793
2066
  return command.includes("/") || command.includes("\\");
1794
2067
  }
1795
- function codegraphEnvForConfig(config, homeDir, buildEnv) {
2068
+ function codegraphEnvForConfig(trustedInstallDir, homeDir, buildEnv) {
1796
2069
  const env = buildEnv?.({ homeDir }) ?? buildCodegraphEnv({ homeDir });
1797
- return config.install_dir === undefined ? env : { ...env, CODEGRAPH_INSTALL_DIR: config.install_dir };
2070
+ return trustedInstallDir === undefined ? env : { ...env, CODEGRAPH_INSTALL_DIR: trustedInstallDir };
1798
2071
  }
1799
2072
  function provisionedBinFromInstallDir(installDir) {
1800
2073
  if (installDir === undefined)
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-codegraph",
3
- "version": "4.12.1",
3
+ "version": "4.13.0",
4
4
  "description": "Codex plugin MCP wrapper for CodeGraph.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -8,10 +8,13 @@
8
8
  "omo-codegraph": "./dist/cli.js"
9
9
  },
10
10
  "files": [
11
- "dist"
11
+ "dist",
12
+ "LICENSE",
13
+ "NODE-RUNTIME-LICENSES.md",
14
+ "NOTICE"
12
15
  ],
13
16
  "scripts": {
14
- "build": "bun build src/serve.ts --target node --format esm --outfile dist/serve.js && bun build src/cli.ts --target node --format esm --outfile dist/cli.js",
17
+ "build": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && bun build src/serve.ts --target node --format esm --outfile dist/serve.js && bun build src/cli.ts --target node --format esm --outfile dist/cli.js",
15
18
  "test": "bun test test/*.test.ts",
16
19
  "typecheck": "tsc --noEmit"
17
20
  },
@@ -21,6 +24,9 @@
21
24
  "bun-types": "^1.3.1",
22
25
  "typescript": "^6.0.3"
23
26
  },
27
+ "optionalDependencies": {
28
+ "@colbymchenry/codegraph": "1.0.1"
29
+ },
24
30
  "engines": {
25
31
  "node": ">=20.0.0"
26
32
  }
@@ -0,0 +1,75 @@
1
+ import type { Readable, Writable } from "node:stream";
2
+
3
+ import {
4
+ errorResponse,
5
+ isPlainRecord,
6
+ jsonRpcId,
7
+ runJsonRpcStdioServer,
8
+ successResponse,
9
+ type JsonRpcResponse,
10
+ } from "../../../../../mcp-stdio-core/src/index.ts";
11
+
12
+ export interface UnavailableCodegraphMcpOptions {
13
+ readonly input: Readable;
14
+ readonly output: Writable;
15
+ readonly reason: string;
16
+ readonly serverVersion: string;
17
+ }
18
+
19
+ interface UnavailableCodegraphMcpHandlerOptions {
20
+ readonly reason: string;
21
+ readonly serverVersion: string;
22
+ }
23
+
24
+ export async function runUnavailableCodegraphMcpServer(
25
+ options: UnavailableCodegraphMcpOptions,
26
+ ): Promise<void> {
27
+ await runJsonRpcStdioServer({
28
+ handler: handleUnavailableCodegraphMcpRequest,
29
+ handlerOptions: {
30
+ reason: options.reason.trim(),
31
+ serverVersion: options.serverVersion,
32
+ },
33
+ input: options.input,
34
+ output: options.output,
35
+ });
36
+ }
37
+
38
+ async function handleUnavailableCodegraphMcpRequest(
39
+ input: unknown,
40
+ options: UnavailableCodegraphMcpHandlerOptions,
41
+ ): Promise<JsonRpcResponse | undefined> {
42
+ if (!isPlainRecord(input)) {
43
+ return errorResponse(null, -32600, "Invalid Request");
44
+ }
45
+
46
+ const id = jsonRpcId(input["id"]);
47
+ const method = input["method"];
48
+ if (method === "notifications/initialized") return undefined;
49
+ if (method === "ping") return successResponse(id, {});
50
+ if (method === "initialize") {
51
+ return successResponse(id, {
52
+ capabilities: { tools: { listChanged: false } },
53
+ protocolVersion: requestedProtocolVersion(input["params"]),
54
+ serverInfo: { name: "codegraph", version: options.serverVersion },
55
+ });
56
+ }
57
+
58
+ if (method === "tools/list") {
59
+ return successResponse(id, { tools: [] });
60
+ }
61
+
62
+ if (method === "tools/call") {
63
+ return successResponse(id, {
64
+ content: [{ text: options.reason, type: "text" }],
65
+ isError: true,
66
+ });
67
+ }
68
+
69
+ return errorResponse(id, -32601, `Method not found: ${String(method)}`);
70
+ }
71
+
72
+ function requestedProtocolVersion(params: unknown): string {
73
+ if (!isPlainRecord(params) || typeof params["protocolVersion"] !== "string") return "2024-11-05";
74
+ return params["protocolVersion"];
75
+ }
@@ -7,8 +7,11 @@ import {
7
7
  cwd as processCwd,
8
8
  env as processEnv,
9
9
  execPath as processExecPath,
10
+ stdin as processStdin,
10
11
  stderr as processStderr,
12
+ stdout as processStdout,
11
13
  } from "node:process";
14
+ import type { Readable, Writable } from "node:stream";
12
15
  import { fileURLToPath } from "node:url";
13
16
 
14
17
  import { buildCodegraphEnv } from "../../../../../utils/src/codegraph/env.ts";
@@ -28,6 +31,7 @@ import {
28
31
  } from "../../../../../utils/src/codegraph/resolve.ts";
29
32
  import { getCodexOmoConfig, type CodexOmoConfig } from "../../../shared/src/config-loader.ts";
30
33
  import type { CodegraphConfig } from "./hook.js";
34
+ import { runUnavailableCodegraphMcpServer } from "./mcp-unavailable.js";
31
35
 
32
36
  export type ServeStdio = "inherit";
33
37
 
@@ -61,6 +65,8 @@ export interface RunCodegraphServeOptions {
61
65
  readonly cwd?: string;
62
66
  readonly env?: Record<string, string | undefined>;
63
67
  readonly homeDir?: string;
68
+ readonly stdin?: Readable;
69
+ readonly stdout?: Writable;
64
70
  readonly nodeVersion?: string;
65
71
  readonly resolve?: (options: ResolveCodegraphCommandOptions) => ReturnType<typeof resolveCodegraphCommand>;
66
72
  readonly runProcess?: CodegraphServeProcessRunner;
@@ -82,42 +88,40 @@ export async function runCodegraphServe(options: RunCodegraphServeOptions = {}):
82
88
  const config = options.config ?? getCodexOmoConfig({ cwd: options.cwd ?? processCwd(), env, homeDir });
83
89
  const codegraphConfig = config.codegraph ?? {};
84
90
  if (codegraphConfig.enabled === false) {
85
- (options.stderr ?? processStderr).write(CODEGRAPH_DISABLED_HINT);
86
- return 1;
91
+ return runUnavailableMcp(CODEGRAPH_DISABLED_HINT, options);
87
92
  }
88
93
 
94
+ const trustedInstallDir = config.trustedCodegraphInstallDir;
89
95
  const resolutionOptions = {
90
96
  env,
91
97
  homeDir,
92
- provisioned: () => provisionedBinFromInstallDir(codegraphConfig.install_dir),
98
+ provisioned: () => provisionedBinFromInstallDir(trustedInstallDir),
93
99
  } satisfies ResolveCodegraphCommandOptions;
94
100
  let resolution = options.resolve?.(resolutionOptions) ?? resolveCodegraphCommand(resolutionOptions);
95
101
  const nodeSupport = evaluateCodegraphNodeSupport({ env, nodeVersion: options.nodeVersion });
96
102
  if (!resolution.exists || shouldSkipResolvedCommand(resolution, options.commandExists ?? existsSync)) {
97
103
  if (resolution.source === "path" && !nodeSupport.supported) {
98
- (options.stderr ?? processStderr).write(buildCodegraphNodeSkipHint(nodeSupport));
99
- return 1;
104
+ return runUnavailableMcp(buildCodegraphNodeSkipHint(nodeSupport), options);
100
105
  }
101
106
  const provisioned = await provisionMissingCodegraph({
102
107
  config: codegraphConfig,
103
108
  ensureProvisioned: options.ensureProvisioned ?? ensureCodegraphProvisioned,
104
109
  homeDir,
105
110
  resolution,
111
+ ...(trustedInstallDir === undefined ? {} : { trustedInstallDir }),
106
112
  });
107
113
  if (provisioned === null) {
108
- (options.stderr ?? processStderr).write(CODEGRAPH_SKIP_HINT);
109
- return 1;
114
+ return runUnavailableMcp(CODEGRAPH_SKIP_HINT, options);
110
115
  }
111
116
  resolution = provisioned;
112
117
  }
113
118
 
114
119
  if (codegraphCommandRequiresSupportedLocalNode(resolution) && !nodeSupport.supported) {
115
- (options.stderr ?? processStderr).write(buildCodegraphNodeSkipHint(nodeSupport));
116
- return 1;
120
+ return runUnavailableMcp(buildCodegraphNodeSkipHint(nodeSupport), options);
117
121
  }
118
122
 
119
123
  const runProcess = options.runProcess ?? runChildProcess;
120
- const codegraphEnv = codegraphEnvForConfig(codegraphConfig, homeDir, options.buildEnv);
124
+ const codegraphEnv = codegraphEnvForConfig(trustedInstallDir, homeDir, options.buildEnv);
121
125
  const mergedEnv = {
122
126
  ...env,
123
127
  ...codegraphEnv,
@@ -128,16 +132,28 @@ export async function runCodegraphServe(options: RunCodegraphServeOptions = {}):
128
132
  });
129
133
  }
130
134
 
135
+ async function runUnavailableMcp(reason: string, options: RunCodegraphServeOptions): Promise<number> {
136
+ (options.stderr ?? processStderr).write(reason);
137
+ await runUnavailableCodegraphMcpServer({
138
+ input: options.stdin ?? processStdin,
139
+ output: options.stdout ?? processStdout,
140
+ reason,
141
+ serverVersion: CODEGRAPH_VERSION,
142
+ });
143
+ return 0;
144
+ }
145
+
131
146
  async function provisionMissingCodegraph(options: {
132
147
  readonly config: CodegraphConfig;
133
148
  readonly ensureProvisioned: CodegraphProvisioner;
134
149
  readonly homeDir: string;
135
150
  readonly resolution: CodegraphCommandResolution;
151
+ readonly trustedInstallDir?: string;
136
152
  }): Promise<CodegraphCommandResolution | null> {
137
153
  if (options.resolution.source === "env") return null;
138
154
  if (options.config.auto_provision === false) return null;
139
155
 
140
- const installDir = options.config.install_dir ?? join(options.homeDir, ".omo", "codegraph");
156
+ const installDir = options.trustedInstallDir ?? join(options.homeDir, ".omo", "codegraph");
141
157
  const result = await options.ensureProvisioned({
142
158
  installDir,
143
159
  lockDir: join(installDir, ".locks"),
@@ -161,12 +177,12 @@ function looksLikePath(command: string): boolean {
161
177
  }
162
178
 
163
179
  function codegraphEnvForConfig(
164
- config: CodegraphConfig,
180
+ trustedInstallDir: string | undefined,
165
181
  homeDir: string,
166
182
  buildEnv: ((options: { readonly homeDir: string }) => Record<string, string>) | undefined,
167
183
  ): Record<string, string> {
168
184
  const env = buildEnv?.({ homeDir }) ?? buildCodegraphEnv({ homeDir });
169
- return config.install_dir === undefined ? env : { ...env, CODEGRAPH_INSTALL_DIR: config.install_dir };
185
+ return trustedInstallDir === undefined ? env : { ...env, CODEGRAPH_INSTALL_DIR: trustedInstallDir };
170
186
  }
171
187
 
172
188
  function provisionedBinFromInstallDir(installDir: string | undefined): string | null {