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
@@ -0,0 +1,110 @@
1
+ #!/usr/bin/env python3
2
+ from __future__ import annotations
3
+
4
+ import shutil
5
+ import sqlite3
6
+ import sys
7
+ import tempfile
8
+ import unittest
9
+ from collections.abc import Callable
10
+ from pathlib import Path
11
+
12
+ sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
13
+
14
+ from extract_cookies import extract_cookies # noqa: E402
15
+
16
+
17
+ def _make_chromium_db(path: Path, rows: list[tuple[str, bytes, str]]) -> None:
18
+ conn = sqlite3.connect(str(path))
19
+ conn.execute(
20
+ "CREATE TABLE cookies (name TEXT, encrypted_value BLOB, host_key TEXT, path TEXT, "
21
+ "expires_utc INTEGER, is_secure INTEGER, is_httponly INTEGER, samesite INTEGER)"
22
+ )
23
+ conn.executemany(
24
+ "INSERT INTO cookies VALUES (?,?,?,?,?,?,?,?)",
25
+ [
26
+ (name, value, host, "/", 13_300_000_000_000_000, 1, 1, 1)
27
+ for name, value, host in rows
28
+ ],
29
+ )
30
+ conn.commit()
31
+ conn.close()
32
+
33
+
34
+ def _make_firefox_db(path: Path, rows: list[tuple[str, str, str]]) -> None:
35
+ conn = sqlite3.connect(str(path))
36
+ conn.execute(
37
+ "CREATE TABLE moz_cookies (name TEXT, value TEXT, host TEXT, path TEXT, "
38
+ "expiry INTEGER, isSecure INTEGER, isHttpOnly INTEGER, sameSite INTEGER)"
39
+ )
40
+ conn.executemany(
41
+ "INSERT INTO moz_cookies VALUES (?,?,?,?,?,?,?,?)",
42
+ [
43
+ (name, value, host, "/", 9999999999, 1, 1, 1)
44
+ for name, value, host in rows
45
+ ],
46
+ )
47
+ conn.commit()
48
+ conn.close()
49
+
50
+
51
+ class DomainFilter(unittest.TestCase):
52
+ def _base_with_db(self, rel: str, make: Callable[[Path], None]) -> Path:
53
+ base = Path(tempfile.mkdtemp())
54
+ self.addCleanup(lambda: shutil.rmtree(str(base), ignore_errors=True))
55
+ db = base / rel
56
+ db.parent.mkdir(parents=True)
57
+ make(db)
58
+ return base
59
+
60
+ def test_chromium_does_not_overmatch_suffix_text(self) -> None:
61
+ base = self._base_with_db(
62
+ "Google/Chrome/User Data/Default/Cookies",
63
+ lambda p: _make_chromium_db(
64
+ p,
65
+ [
66
+ ("exact", b"exact-value", "example.com"),
67
+ ("sub", b"sub-value", ".login.example.com"),
68
+ ("near", b"near-value", ".example.com"),
69
+ ],
70
+ ),
71
+ )
72
+
73
+ near = extract_cookies(
74
+ "chrome", ["ample.com"], platform="win32",
75
+ keyring_reader=lambda _s: b"k" * 32, base_override=base,
76
+ )
77
+ exact = extract_cookies(
78
+ "chrome", ["example.com"], platform="win32",
79
+ keyring_reader=lambda _s: b"k" * 32, base_override=base,
80
+ )
81
+
82
+ self.assertEqual(near, [])
83
+ self.assertEqual({cookie["name"] for cookie in exact}, {"exact", "near", "sub"})
84
+
85
+ def test_firefox_does_not_overmatch_suffix_text(self) -> None:
86
+ base = self._base_with_db(
87
+ "Firefox/Profiles/abc.default/cookies.sqlite",
88
+ lambda p: _make_firefox_db(
89
+ p,
90
+ [
91
+ ("exact", "exact-value", "example.com"),
92
+ ("sub", "sub-value", ".login.example.com"),
93
+ ("near", "near-value", ".example.com"),
94
+ ],
95
+ ),
96
+ )
97
+
98
+ near = extract_cookies(
99
+ "firefox", ["ample.com"], platform="darwin", base_override=base,
100
+ )
101
+ exact = extract_cookies(
102
+ "firefox", ["example.com"], platform="darwin", base_override=base,
103
+ )
104
+
105
+ self.assertEqual(near, [])
106
+ self.assertEqual({cookie["name"] for cookie in exact}, {"exact", "near", "sub"})
107
+
108
+
109
+ if __name__ == "__main__":
110
+ unittest.main(verbosity=2)
@@ -0,0 +1,245 @@
1
+ #!/usr/bin/env python3
2
+ """Synthetic-fixture tests for cross-platform cookie extraction (no live browser)."""
3
+ from __future__ import annotations
4
+
5
+ import shutil
6
+ import sqlite3
7
+ import sys
8
+ import tempfile
9
+ import unittest
10
+ from pathlib import Path
11
+ from typing import Callable
12
+ from unittest.mock import patch
13
+
14
+ sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
15
+
16
+ from cookie_crypto import decrypt_chromium_value, derive_key # noqa: E402
17
+ from cookie_paths import UnsupportedPlatform, resolve_cookie_db # noqa: E402
18
+ from extract_cookies import extract_cookies, inject_cookies, write_cookie_file # noqa: E402
19
+
20
+
21
+ def _make_chromium_db(path: Path, name: str, encrypted_value: bytes, host: str) -> None:
22
+ conn = sqlite3.connect(str(path))
23
+ conn.execute(
24
+ "CREATE TABLE cookies (name TEXT, encrypted_value BLOB, host_key TEXT, path TEXT, "
25
+ "expires_utc INTEGER, is_secure INTEGER, is_httponly INTEGER, samesite INTEGER)"
26
+ )
27
+ conn.execute(
28
+ "INSERT INTO cookies VALUES (?,?,?,?,?,?,?,?)",
29
+ (name, encrypted_value, host, "/", 13_300_000_000_000_000, 1, 1, 1),
30
+ )
31
+ conn.commit()
32
+ conn.close()
33
+
34
+
35
+ def _make_firefox_db(path: Path, name: str, value: str, host: str) -> None:
36
+ conn = sqlite3.connect(str(path))
37
+ conn.execute(
38
+ "CREATE TABLE moz_cookies (name TEXT, value TEXT, host TEXT, path TEXT, "
39
+ "expiry INTEGER, isSecure INTEGER, isHttpOnly INTEGER, sameSite INTEGER)"
40
+ )
41
+ conn.execute("INSERT INTO moz_cookies VALUES (?,?,?,?,?,?,?,?)", (name, value, host, "/", 9999999999, 1, 1, 1))
42
+ conn.commit()
43
+ conn.close()
44
+
45
+
46
+ def _encrypt_cbc_v10(key: bytes, plaintext: str) -> bytes:
47
+ from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
48
+
49
+ data = plaintext.encode()
50
+ pad = 16 - (len(data) % 16)
51
+ padded = data + bytes([pad]) * pad
52
+ encryptor = Cipher(algorithms.AES128(key), modes.CBC(b" " * 16)).encryptor()
53
+ return b"v10" + encryptor.update(padded) + encryptor.finalize()
54
+
55
+
56
+ def _encrypt_gcm_v10(key: bytes, plaintext: str) -> bytes:
57
+ from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
58
+
59
+ nonce = b"n" * 12
60
+ encryptor = Cipher(algorithms.AES(key), modes.GCM(nonce)).encryptor()
61
+ ciphertext = encryptor.update(plaintext.encode()) + encryptor.finalize()
62
+ return b"v10" + nonce + ciphertext + encryptor.tag
63
+
64
+
65
+ class PathResolution(unittest.TestCase):
66
+ def test_macos_chromium_path(self) -> None:
67
+ base = Path(self.tmp())
68
+ target = base / "Google/Chrome/Default/Cookies"
69
+ target.parent.mkdir(parents=True)
70
+ target.write_bytes(b"")
71
+ self.assertEqual(resolve_cookie_db("chrome", "darwin", base_override=base), target)
72
+
73
+ def test_linux_chromium_network_path(self) -> None:
74
+ base = Path(self.tmp())
75
+ target = base / "google-chrome/Default/Network/Cookies"
76
+ target.parent.mkdir(parents=True)
77
+ target.write_bytes(b"")
78
+ self.assertEqual(resolve_cookie_db("chrome", "linux", base_override=base), target)
79
+
80
+ def test_windows_chromium_path(self) -> None:
81
+ base = Path(self.tmp())
82
+ target = base / "Google/Chrome/User Data/Default/Cookies"
83
+ target.parent.mkdir(parents=True)
84
+ target.write_bytes(b"")
85
+ self.assertEqual(resolve_cookie_db("chrome", "win32", base_override=base), target)
86
+
87
+ def test_unsupported_platform_raises(self) -> None:
88
+ with self.assertRaises(UnsupportedPlatform):
89
+ resolve_cookie_db("chrome", "sunos")
90
+
91
+ def test_unsupported_browser_raises(self) -> None:
92
+ with self.assertRaises(UnsupportedPlatform):
93
+ resolve_cookie_db("nonexistent", "darwin")
94
+
95
+ def tmp(self) -> str:
96
+ import tempfile
97
+
98
+ d = tempfile.mkdtemp()
99
+ self.addCleanup(lambda: __import__("shutil").rmtree(d, ignore_errors=True))
100
+ return d
101
+
102
+
103
+ class KeyDerivation(unittest.TestCase):
104
+ def test_macos_iters_differ_from_linux(self) -> None:
105
+ secret = b"some-keychain-secret"
106
+ self.assertNotEqual(derive_key("darwin", secret), derive_key("linux", secret))
107
+ self.assertEqual(len(derive_key("darwin", secret)), 16)
108
+
109
+ def test_windows_passthrough_32_bytes(self) -> None:
110
+ key = b"k" * 32
111
+ self.assertEqual(derive_key("win32", key), key)
112
+
113
+ def test_windows_rejects_wrong_length(self) -> None:
114
+ with self.assertRaises(ValueError):
115
+ derive_key("win32", b"short")
116
+
117
+ def test_unsupported_platform_raises(self) -> None:
118
+ with self.assertRaises(UnsupportedPlatform):
119
+ derive_key("sunos", b"x")
120
+
121
+
122
+ class Decryption(unittest.TestCase):
123
+ def test_macos_cbc_roundtrip(self) -> None:
124
+ key = derive_key("darwin", b"secret")
125
+ blob = _encrypt_cbc_v10(key, "session-token-123")
126
+ self.assertEqual(decrypt_chromium_value("darwin", key, blob), "session-token-123")
127
+
128
+ def test_windows_gcm_roundtrip(self) -> None:
129
+ key = b"k" * 32
130
+ blob = _encrypt_gcm_v10(key, "win-token-xyz")
131
+ self.assertEqual(decrypt_chromium_value("win32", key, blob), "win-token-xyz")
132
+
133
+
134
+ class EndToEnd(unittest.TestCase):
135
+ def _base_with_db(self, rel: str, make: Callable[[Path], None]) -> Path:
136
+ base = Path(tempfile.mkdtemp())
137
+ self.addCleanup(lambda: shutil.rmtree(str(base), ignore_errors=True))
138
+ db = base / rel
139
+ db.parent.mkdir(parents=True)
140
+ make(db)
141
+ return base
142
+
143
+ def test_chromium_extract_with_injected_keyring(self) -> None:
144
+ key = derive_key("darwin", b"secret")
145
+ blob = _encrypt_cbc_v10(key, "logged-in")
146
+ base = self._base_with_db(
147
+ "Google/Chrome/Default/Cookies",
148
+ lambda p: _make_chromium_db(p, "SID", blob, ".youtube.com"),
149
+ )
150
+ cookies = extract_cookies(
151
+ "chrome", ["youtube.com"], platform="darwin",
152
+ keyring_reader=lambda _s: b"secret", base_override=base,
153
+ )
154
+ self.assertEqual(len(cookies), 1)
155
+ self.assertEqual(cookies[0]["value"], "logged-in")
156
+ self.assertEqual(cookies[0]["name"], "SID")
157
+
158
+ def test_firefox_extract_unencrypted(self) -> None:
159
+ base = self._base_with_db(
160
+ "Firefox/Profiles/abc.default/cookies.sqlite",
161
+ lambda p: _make_firefox_db(p, "auth", "plain-value", ".example.com"),
162
+ )
163
+ cookies = extract_cookies("firefox", ["example.com"], platform="darwin", base_override=base)
164
+ self.assertEqual(len(cookies), 1)
165
+ self.assertEqual(cookies[0]["value"], "plain-value")
166
+
167
+
168
+ class SecretHandling(unittest.TestCase):
169
+ def test_cookie_output_file_is_owner_only(self) -> None:
170
+ base = Path(tempfile.mkdtemp())
171
+ self.addCleanup(lambda: shutil.rmtree(str(base), ignore_errors=True))
172
+ output = base / "cookies.json"
173
+
174
+ write_cookie_file(output, [{"name": "SID", "value": "secret"}])
175
+
176
+ self.assertEqual(output.stat().st_mode & 0o777, 0o600)
177
+ self.assertIn("secret", output.read_text())
178
+
179
+ def test_cookie_output_replaces_existing_file_only_after_private_temp_write(self) -> None:
180
+ base = Path(tempfile.mkdtemp())
181
+ self.addCleanup(lambda: shutil.rmtree(str(base), ignore_errors=True))
182
+ output = base / "cookies.json"
183
+ output.write_text("old\n")
184
+ output.chmod(0o644)
185
+
186
+ def _dump(_cookies, f, indent: int) -> None:
187
+ self.assertEqual(output.read_text(), "old\n")
188
+ self.assertEqual(output.stat().st_mode & 0o777, 0o644)
189
+ temp_files = list(base.glob(".cookies.json.*.tmp"))
190
+ self.assertEqual(len(temp_files), 1)
191
+ self.assertEqual(temp_files[0].stat().st_mode & 0o777, 0o600)
192
+ f.write('[{"name": "SID", "value": "secret"}]')
193
+
194
+ with patch("extract_cookies.json.dump", side_effect=_dump):
195
+ write_cookie_file(output, [{"name": "SID", "value": "secret"}])
196
+
197
+ self.assertEqual(output.stat().st_mode & 0o777, 0o600)
198
+ self.assertIn("secret", output.read_text())
199
+
200
+ def test_cookie_output_refuses_symlinks(self) -> None:
201
+ base = Path(tempfile.mkdtemp())
202
+ self.addCleanup(lambda: shutil.rmtree(str(base), ignore_errors=True))
203
+ target = base / "target.json"
204
+ target.write_text("{}")
205
+ link = base / "cookies.json"
206
+ link.symlink_to(target)
207
+
208
+ with self.assertRaises(ValueError):
209
+ write_cookie_file(link, [{"name": "SID", "value": "secret"}])
210
+
211
+ def test_cookie_output_refuses_dangling_symlinks(self) -> None:
212
+ base = Path(tempfile.mkdtemp())
213
+ self.addCleanup(lambda: shutil.rmtree(str(base), ignore_errors=True))
214
+ link = base / "cookies.json"
215
+ link.symlink_to(base / "missing.json")
216
+
217
+ with self.assertRaises(ValueError):
218
+ write_cookie_file(link, [{"name": "SID", "value": "secret"}])
219
+
220
+ def test_inject_cookies_sends_values_over_stdin_not_argv(self) -> None:
221
+ cookie = {
222
+ "name": "SID",
223
+ "value": "secret-token",
224
+ "domain": ".youtube.com",
225
+ "path": "/",
226
+ "expires": 9999999999,
227
+ "secure": True,
228
+ "httpOnly": True,
229
+ "sameSite": "Lax",
230
+ }
231
+
232
+ with patch("extract_cookies.subprocess.run") as run:
233
+ run.return_value.returncode = 0
234
+ run.return_value.stdout = "1"
235
+ run.return_value.stderr = ""
236
+
237
+ inject_cookies([cookie], 9242)
238
+
239
+ command = run.call_args.args[0]
240
+ self.assertNotIn("secret-token", command)
241
+ self.assertIn("secret-token", run.call_args.kwargs["input"])
242
+
243
+
244
+ if __name__ == "__main__":
245
+ unittest.main(verbosity=2)
@@ -0,0 +1,49 @@
1
+ # ATTRIBUTION / NOTICE
2
+
3
+ This skill (`ultraresearch`, part of `@oh-my-opencode/shared-skills`) is authored by
4
+ the oh-my-openagent project. One design idea is adapted from a third-party project,
5
+ credited below. No third-party source is vendored here — only the verification idea
6
+ is adapted into this skill's prompt contract.
7
+
8
+ ---
9
+
10
+ ## 1. insane-research (fivetaku) — inspiration for the claim-ledger verification gate
11
+
12
+ The non-code claim-ledger verification gate (Phase 3b: a data-flow-lock where the
13
+ synthesis may assert a high-risk non-code claim only after it clears `>= 2 independent
14
+ source domains + 1 counter-search + a primary source`, otherwise it is abstained to an
15
+ unresolved/refuted annex) is inspired by the data-flow-lock verification design in
16
+ **insane-research** by fivetaku.
17
+
18
+ - Source: https://github.com/fivetaku/insane-research
19
+ - License: MIT (declared in the project's `README.md`).
20
+ - **What is adapted:** the IDEA only — a verification gate whose output is the sole
21
+ allowlist the synthesis draws from, so skipping verification leaves nothing to
22
+ synthesize. No insane-research code is copied or redistributed. The upstream gate is
23
+ a Python checker (`validate_ledger.py`); this skill translates the concept into a
24
+ runtime-agnostic prompt + message-text contract, because the Codex Light edition has
25
+ no guaranteed Python.
26
+
27
+ ```
28
+ MIT License
29
+
30
+ Copyright (c) 2026 fivetaku
31
+
32
+ Permission is hereby granted, free of charge, to any person obtaining a copy
33
+ of this software and associated documentation files (the "Software"), to deal
34
+ in the Software without restriction, including without limitation the rights
35
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
36
+ copies of the Software, and to permit persons to whom the Software is
37
+ furnished to do so, subject to the following conditions:
38
+
39
+ The above copyright notice and this permission notice shall be included in all
40
+ copies or substantial portions of the Software.
41
+
42
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
43
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
44
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
45
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
46
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
47
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
48
+ SOFTWARE.
49
+ ```
@@ -51,6 +51,14 @@ The research is done when all of these hold:
51
51
  - Every claim in the deliverable cites a source or a verification artifact.
52
52
  - The session journal reconstructs what was searched, found, and expanded, wave by wave.
53
53
 
54
+ ## Run the swarm as a cooperating team
55
+
56
+ Saturation research is the textbook case for a cooperating team, not isolated fire-and-forget workers: a lead one worker surfaces almost always reshapes what another should search next. So when your harness gives you real cooperating members — Codex: the `teammode` skill (`codex_app` threads); OpenCode: `team_mode` — run this swarm as a team. Fall back to the background-worker swarm below only when team mode is unavailable, or the axes are genuinely independent with no cross-pollination expected.
57
+
58
+ - **One member per axis — by part, ownership, or perspective, never a job title.** Each Phase 0 axis is one member owning one concrete slice: a codebase part, a source territory, or a question lens. No two members share an angle. "Backend researcher" or "the web person" gives no real boundary and invites overlap — name what the member owns.
59
+ - **The raise law — broadcast every lead the instant it surfaces.** Members over-communicate relentlessly: every new lead, finding, contradiction, and dead end is raised to you the moment it surfaces, never hoarded for a final dump. Through long passes they send `WORKING: <axis> - <phase>`, and `BLOCKED: <reason>` the moment progress stops, so you always know a member is alive. Too many small updates is correct here; going quiet is the only failure.
60
+ - **You lead; expand on each raised lead.** Members raise via message text, never write session files. Journal each lead and spawn its expansion the instant it lands (Phase 2), not only when a member's final reply arrives.
61
+
54
62
  ## Worker ground rules
55
63
 
56
64
  Research workers (explore, librarian, browsing) differ by harness, but assume:
@@ -106,7 +114,7 @@ Append each digest the moment its worker returns, not in a batch at the end —
106
114
 
107
115
  ## Phase 1 — Saturation wave
108
116
 
109
- Launch every first-wave worker in a single turn, all in background. Sequential launches and "start with one and see" defeat the mode.
117
+ Launch the entire first wave in one turn — every axis at once, as team members if you formed a team, else as background workers. Sequential launches and "start with one and see" defeat the mode.
110
118
 
111
119
  Scaling floor — more angles always justify more workers:
112
120
 
@@ -122,7 +130,7 @@ Role protocols — embed the relevant one in each spawn message; every worker ge
122
130
 
123
131
  - **Codebase (explore), 2-4 workers.** Grep with 3+ keyword variations; structural/AST search; LSP definitions and references; file-name globs; `git log --all -S '<keyword>'` and `--grep` for history including deleted code. Cross-validate hits across tools. Report absolute file paths, patterns with `file:line`, and how findings connect.
124
132
  - **Web (librarian), 3-6 workers.** At least 10 distinct websearch queries per worker, each with a different operator or angle (see Search craft); fetch the full page for every result that matters — snippets lie. Context7 with 3+ queries per known library. grep.app and `gh search code|repos|issues` for real-world usage. Official docs via sitemap discovery (`<base>/sitemap.xml`), then targeted pages.
125
- - **Browsing, 0-3 workers.** Pages plain fetch cannot read (WAF, dynamic rendering, login): use the browsing skill; capture screenshots when visual context matters.
133
+ - **Browsing, 0-3 workers.** Pages plain fetch cannot read (WAF, 403, Cloudflare, dynamic rendering, login): the worker loads the `ultimate-browsing` skill and escalates through its tiers — Tier-1 insane-search engine first, then Tier-2 Chrome stealth — rather than abandoning the source. Capture screenshots when visual context matters. When one blocked territory hides many leads, fan out more browsing subagents in parallel for breadth instead of serializing one worker through them.
126
134
  - **Repo deep-dive (librarian), 0-2 workers.** Shallow-clone the most relevant repos to `${TMPDIR:-/tmp}`, pin the HEAD SHA, read core modules, follow call chains, return SHA-pinned permalinks.
127
135
 
128
136
  Example spawn (codebase axis; librarian, browsing, and repo-dive follow the same contract with their own protocol):
@@ -137,7 +145,7 @@ End your reply with the ## EXPAND tail: '- LEAD: <discovery> — WHY: <why> —
137
145
 
138
146
  ## Phase 2 — Expand until convergence
139
147
 
140
- This loop is what makes the mode research rather than search. Collect workers as they finish — never wait for the full wave:
148
+ This loop is what makes the mode research rather than search. Collect returns as they landand in team mode, act on each lead the moment a member raises it, never waiting for the full wave or a member's final reply:
141
149
 
142
150
  1. Journal the return: digest plus verbatim EXPAND markers into `wave-<N>-<kind>-<axis>.md`.
143
151
  2. Deduplicate new markers against `expansion-log.md` — every lead ever seen, not just confirmed ones, or rejected leads resurface each wave.
@@ -171,6 +179,25 @@ Reply with: the exact code, the full output, environment (OS, runtime, dependenc
171
179
 
172
180
  Journal each verdict to `verify-<slug>.md`.
173
181
 
182
+ ## Phase 3b — Lock non-code claims through a claim ledger
183
+
184
+ Code settles code-shaped claims (Phase 3). Numeric, market-share, legal, dated, causal, and financial claims cannot be run — so they pass through a data-flow-lock instead (the verification idea adapted from fivetaku/insane-research): the synthesis may assert a high-risk non-code claim **only** if it cleared this gate, and the gate's output is the sole allowlist the synthesis draws from. Skip the gate and there is nothing to synthesize — the lock is self-enforcing.
185
+
186
+ The claim ledger is orchestrator-owned. Workers only return verified-claim markers as message text, the same channel as EXPAND markers — never a file. As leads resolve, you record one ledger entry per asserted claim and compute its status; workers report claim candidates in their replies, and you decide.
187
+
188
+ A high-risk claim clears the gate to `verified-claims` only when all hold:
189
+
190
+ - **>= 2 independent source domains** corroborate it (two pages on the same domain count once).
191
+ - **One counter-search** actively looked for a refutation and did not find a stronger one.
192
+ - **A primary source** (the standard, filing, dataset, or first-party doc) backs it, not only secondary commentary.
193
+
194
+ Anything that fails goes to an `Unresolved` (insufficient evidence) or `Refuted` (counter-search won) annex — abstention is a correct outcome, not a gap to paper over. Maintain `claim-ledger.md` with one row per claim — `claim | risk | domains | counter-search | primary? | status (verified/unresolved/refuted)` — and write the cleared rows into a `verified-claims` digest. Worker reply marker (message text, same channel as EXPAND):
195
+
196
+ ```
197
+ ## CLAIMS
198
+ - CLAIM: <non-code assertion> — RISK: high|normal — SOURCES: <domain1, domain2> — COUNTER: <refutation search result> — PRIMARY: <primary source or none>
199
+ ```
200
+
174
201
  ## Phase 4 — Synthesize
175
202
 
176
203
  After convergence and all verifications, re-read the whole journal and write `SYNTHESIS.md`:
@@ -183,13 +210,13 @@ Workers: <total> · Waves: <count> · Sources: <count> · Verifications: <count>
183
210
  ## Findings by theme — per theme: consensus, evidence links, key quote (<20 words, attributed), verified yes/no
184
211
  ## Codebase findings — absolute paths with line references
185
212
  ## Sources (ranked) — URL, what it contains, reliability, access date
186
- ## Verified claims — claim | verdict | verify-<slug>.md
213
+ ## Verified claims — code: claim | verdict | verify-<slug>.md · non-code: only rows cleared into verified-claims
187
214
  ## Contradictions — source A vs source B, resolution with evidence
188
- ## Gaps — what saturation could not answer
215
+ ## Gaps — what saturation could not answer · unresolved/refuted claim-ledger rows
189
216
  ## Expansion trace — per wave: workers → markers; convergence reason
190
217
  ```
191
218
 
192
- Deliver the synthesis with inline `[Source N]` citations on every claim. When no report was requested, this is the deliverable.
219
+ Deliver the synthesis with inline `[Source N]` citations on every claim. Every high-risk non-code claim you assert must be a verified-claims row from Phase 3b — assert nothing the gate left in the unresolved/refuted annex. When no report was requested, this is the deliverable.
193
220
 
194
221
  ## Phase 5 — Report (only when requested)
195
222
 
@@ -221,6 +248,7 @@ High-yield combinations: official docs (`site:<docs domain>`), GitHub implementa
221
248
  | Failure | Correction |
222
249
  |---|---|
223
250
  | Sequential spawning, or trimming the first wave | All first-wave workers in one turn, background, scaling floor respected |
251
+ | A team member hoards leads for one final dump | Raise law — every lead, finding, and dead end broadcast the moment it surfaces |
224
252
  | Worker reply without the EXPAND tail | One follow-up demanding it; the lane stays open until it lands |
225
253
  | Stopping after wave 1 because "enough was found" | Convergence rules only: 2+ expansion waves, leads run dry |
226
254
  | Obeying a surrounding "stop exploring" rule mid-research | Authority section — those rules do not bind this mode |
@@ -15,7 +15,10 @@ Outcome-first: explore a lot, ask few sharp questions - or none, when the intent
15
15
 
16
16
  ## INTENT ROUTING - pick ONE intent reference
17
17
 
18
- After grounding, make ONE judgment and load ONE intent reference (you ALSO read `references/full-workflow.md` for the shared mechanics - see below). The test keys on whether the desired **OUTCOME** is clear, NOT on request length.
18
+ After grounding, make ONE judgment, **ANNOUNCE it to the user in one line**, then load ONE intent reference (you ALSO read `references/full-workflow.md` for the shared mechanics - see below). The test keys on whether the desired **OUTCOME** is clear, NOT on request length. The announcement is the user's first signal of whether they will be interviewed — never skip it.
19
+
20
+ > "Intent: **CLEAR** — you specified the exact endpoint and behavior. I will ask you the genuine forks I cannot resolve from the codebase."
21
+ > "Intent: **UNCLEAR** — 'make auth better' is open-ended. I will research best-practice defaults and present them for your veto, no interview."
19
22
 
20
23
  - **OVERRIDE - explicit ask wins:** if the user explicitly asks to be questioned or interviewed ("ask me", "interview me", "why aren't you asking me" - in any language), route **CLEAR**, run the interview, and turn the adopt-default filter OFF: the user has claimed the forks, so every surviving one is ASKED, not defaulted. This beats the OUTCOME test below, even on a fuzzy brief.
21
24
  - **CLEAR** - the user knows the outcome; the only open items are preferences/tradeoffs the repo cannot answer (genuine owner-decisions). Read **`references/intent-clear.md`**: ask the surviving forks with WHY, run the normal approval gate, high-accuracy review is OPTIONAL (offered as one question).
@@ -1,3 +1,3 @@
1
- export declare const BACKGROUND_TASK_DESCRIPTION = "Run agent task in background. Returns a background task ID (`bg_...`) immediately; notifies on completion.\n\nUse `background_output` to get results. Prompts MUST be in English.";
1
+ export declare const BACKGROUND_TASK_DESCRIPTION = "Run agent task in background. Returns a background task ID (`bg_...`) immediately and notifies on completion.\n\nDo NOT poll for results. The system delivers a <system-reminder> when the task finishes.\n\nPrompts MUST be in English.";
2
2
  export declare const BACKGROUND_OUTPUT_DESCRIPTION = "Get output from background task. Use full_session=true to fetch session messages with filters. System notifies on completion, so block=true rarely needed. - Timeout values are in milliseconds (ms), NOT seconds.\n\nIMPORTANT: ONLY call this tool AFTER receiving a <system-reminder> notification for the task. Do NOT call immediately after launching a background task - wait for the notification first.";
3
3
  export declare const BACKGROUND_CANCEL_DESCRIPTION = "Cancel running background task(s). Use all=true to cancel ALL before final answer.";
@@ -1,11 +1,13 @@
1
+ import { isProviderExhaustionFallbackEligible } from "@oh-my-opencode/model-core";
1
2
  import { createSyncSession } from "./sync-session-creator";
2
3
  import { sendSyncPrompt } from "./sync-prompt-sender";
3
4
  import { pollSyncSession } from "./sync-session-poller";
4
5
  import { fetchSyncResult } from "./sync-result-fetcher";
5
- export declare const syncTaskDeps: {
6
- createSyncSession: typeof createSyncSession;
7
- sendSyncPrompt: typeof sendSyncPrompt;
8
- pollSyncSession: typeof pollSyncSession;
9
- fetchSyncResult: typeof fetchSyncResult;
6
+ export type SyncTaskDeps = {
7
+ readonly createSyncSession: typeof createSyncSession;
8
+ readonly sendSyncPrompt: typeof sendSyncPrompt;
9
+ readonly pollSyncSession: typeof pollSyncSession;
10
+ readonly fetchSyncResult: typeof fetchSyncResult;
11
+ readonly isProviderExhaustionFallbackEligible?: typeof isProviderExhaustionFallbackEligible;
10
12
  };
11
- export type SyncTaskDeps = typeof syncTaskDeps;
13
+ export declare const syncTaskDeps: SyncTaskDeps;
@@ -3,7 +3,7 @@ import type { SkillMcpManager } from "../../features/skill-mcp-manager";
3
3
  import type { LoadedSkill } from "../../features/opencode-skill-loader/types";
4
4
  interface SkillMcpToolOptions {
5
5
  manager: SkillMcpManager;
6
- getLoadedSkills: () => LoadedSkill[];
6
+ getLoadedSkills: () => LoadedSkill[] | Promise<LoadedSkill[]>;
7
7
  getSessionID?: () => string | undefined;
8
8
  }
9
9
  export declare function applyGrepFilter(output: string, pattern: string | undefined): string;
package/dist/tui.js CHANGED
@@ -4163,6 +4163,14 @@ var init_ast_grep = __esm(() => {
4163
4163
 
4164
4164
  // packages/utils/src/codegraph/env.ts
4165
4165
  var init_env = () => {};
4166
+
4167
+ // packages/utils/src/codegraph/workspace.ts
4168
+ var init_workspace = () => {};
4169
+
4170
+ // packages/utils/src/codegraph/guidance.ts
4171
+ var init_guidance = __esm(() => {
4172
+ init_workspace();
4173
+ });
4166
4174
  // packages/utils/src/codegraph/manifest.ts
4167
4175
  var init_manifest = () => {};
4168
4176
 
@@ -4183,12 +4191,10 @@ var init_resolve2 = __esm(() => {
4183
4191
  requireFromHere = createRequire(import.meta.url);
4184
4192
  });
4185
4193
 
4186
- // packages/utils/src/codegraph/workspace.ts
4187
- var init_workspace = () => {};
4188
-
4189
4194
  // packages/utils/src/codegraph/index.ts
4190
4195
  var init_codegraph = __esm(() => {
4191
4196
  init_env();
4197
+ init_guidance();
4192
4198
  init_provision();
4193
4199
  init_resolve2();
4194
4200
  init_workspace();
@@ -20062,6 +20068,7 @@ var CodegraphConfigSchema;
20062
20068
  var init_codegraph2 = __esm(() => {
20063
20069
  init_zod();
20064
20070
  CodegraphConfigSchema = exports_external.object({
20071
+ auto_init: exports_external.boolean().default(true),
20065
20072
  auto_provision: exports_external.boolean().default(true),
20066
20073
  enabled: exports_external.boolean().default(true),
20067
20074
  install_dir: exports_external.string().optional(),
@@ -20392,7 +20399,8 @@ var init_runtime_fallback = __esm(() => {
20392
20399
  max_fallback_attempts: exports_external.number().min(1).max(20).optional(),
20393
20400
  cooldown_seconds: exports_external.number().min(0).optional(),
20394
20401
  timeout_seconds: exports_external.number().min(0).optional(),
20395
- notify_on_fallback: exports_external.boolean().optional()
20402
+ notify_on_fallback: exports_external.boolean().optional(),
20403
+ restore_primary_after_cooldown: exports_external.boolean().optional()
20396
20404
  });
20397
20405
  });
20398
20406
 
@@ -21462,6 +21470,11 @@ var init_runtime_fallback_error_classifier = __esm(() => {
21462
21470
  init_runtime_fallback_error_shape();
21463
21471
  });
21464
21472
 
21473
+ // packages/model-core/src/provider-exhaustion-fallback-policy.ts
21474
+ var init_provider_exhaustion_fallback_policy = __esm(() => {
21475
+ init_runtime_fallback_error_classifier();
21476
+ });
21477
+
21465
21478
  // packages/model-core/src/runtime-fallback-model.ts
21466
21479
  var init_runtime_fallback_model = __esm(() => {
21467
21480
  init_model_string_parser();
@@ -21890,6 +21903,7 @@ var init_src3 = __esm(() => {
21890
21903
  init_runtime_fallback_auto_retry_signal();
21891
21904
  init_runtime_fallback_error_classifier();
21892
21905
  init_runtime_fallback_error_shape();
21906
+ init_provider_exhaustion_fallback_policy();
21893
21907
  init_runtime_fallback_model();
21894
21908
  init_model_capabilities2();
21895
21909
  init_context_limit_resolver();