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,150 @@
1
+ import { describe, expect, it } from "bun:test";
2
+ import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
3
+ import { tmpdir } from "node:os";
4
+ import { join } from "node:path";
5
+
6
+ import { resolveCodegraphCommandInvocation, runCodegraphSessionStartWorker } from "../src/hook.ts";
7
+
8
+ describe("CodeGraph SessionStart worker flow", () => {
9
+ it("#given Windows install_dir has codegraph.cmd #when worker resolves provisioned CodeGraph #then it uses the cmd shim", async () => {
10
+ await withProcessPlatform("win32", async () => {
11
+ // given
12
+ const workspace = mkdtempSync(join(tmpdir(), "omo-codegraph-worker-win32-"));
13
+ const homeDir = mkdtempSync(join(tmpdir(), "omo-codegraph-worker-win32-home-"));
14
+ const installDir = mkdtempSync(join(tmpdir(), "omo-codegraph-worker-win32-install-"));
15
+ const binPath = join(installDir, "bin", "codegraph.cmd");
16
+ const calls: { readonly args: readonly string[]; readonly command: string; readonly env: Record<string, string> }[] = [];
17
+ const outcomes: unknown[] = [];
18
+ try {
19
+ mkdirSync(join(installDir, "bin"), { recursive: true });
20
+ writeFileSync(binPath, "");
21
+
22
+ // when
23
+ const result = await runCodegraphSessionStartWorker({
24
+ config: { codegraph: { enabled: true, install_dir: installDir }, sources: [], trustedCodegraphInstallDir: installDir, warnings: [] },
25
+ nodeVersion: "22.14.0",
26
+ cwd: workspace,
27
+ env: { HOME: homeDir },
28
+ logOutcome: (outcome) => outcomes.push(outcome),
29
+ deps: {
30
+ ensureGitignored: () => true,
31
+ ensureProvisioned: () => {
32
+ throw new Error("provisioning should not run when install_dir binary exists");
33
+ },
34
+ prepareWorkspace: () => ({
35
+ dataDir: join(homeDir, ".omo/codegraph/projects/test"),
36
+ dataRoot: join(homeDir, ".omo/codegraph"),
37
+ linked: true,
38
+ mode: "global-linked",
39
+ projectLink: join(workspace, ".codegraph"),
40
+ }),
41
+ resolveCommand: (options) => {
42
+ const provisioned = options?.provisioned?.() ?? null;
43
+ return { argsPrefix: [], command: provisioned ?? "missing-codegraph", exists: provisioned !== null, source: provisioned === null ? "path" : "provisioned" };
44
+ },
45
+ runCommand: (_projectRoot, command, args, options) => {
46
+ calls.push({ args, command, env: options.env });
47
+ return Promise.resolve({ exitCode: 0, stdout: calls.length === 1 ? '{"initialized":false}' : "", timedOut: false });
48
+ },
49
+ },
50
+ });
51
+
52
+ // then
53
+ expect(result).toEqual({ action: "initialized" });
54
+ expect(calls.map((call) => ({ args: [...call.args], command: call.command }))).toEqual([
55
+ { args: ["status", "--json"], command: binPath },
56
+ { args: ["init"], command: binPath },
57
+ ]);
58
+ expect(calls[0]?.env["CODEGRAPH_INSTALL_DIR"]).toBe(installDir);
59
+ expect(outcomes).toEqual([{ action: "initialized", exitCode: 0, projectRoot: workspace, source: "provisioned", timedOut: false }]);
60
+ } finally {
61
+ rmSync(workspace, { recursive: true, force: true });
62
+ rmSync(homeDir, { recursive: true, force: true });
63
+ rmSync(installDir, { recursive: true, force: true });
64
+ }
65
+ });
66
+ });
67
+
68
+ it("#given Windows codegraph.cmd #when default worker runner builds invocation #then it runs through cmd.exe", () => {
69
+ // given
70
+ const command = "C:\\Users\\test\\.omo\\codegraph\\bin\\codegraph.cmd";
71
+
72
+ // when
73
+ const invocation = resolveCodegraphCommandInvocation(command, ["status", "--json"], "win32");
74
+
75
+ // then
76
+ expect(invocation).toEqual({
77
+ args: ["/d", "/s", "/c", command, "status", "--json"],
78
+ command: "cmd.exe",
79
+ });
80
+ });
81
+
82
+ it("#given non-Windows codegraph command #when default worker runner builds invocation #then it executes directly", () => {
83
+ // given
84
+ const command = "/home/test/.omo/codegraph/bin/codegraph";
85
+
86
+ // when
87
+ const invocation = resolveCodegraphCommandInvocation(command, ["sync"], "linux");
88
+
89
+ // then
90
+ expect(invocation).toEqual({ args: ["sync"], command });
91
+ });
92
+
93
+ it("#given resolved CodeGraph status #when worker runs #then it runs status before init or sync", async () => {
94
+ for (const scenario of [
95
+ { action: "initialized", args: [["status", "--json"], ["init"]], stdout: '{"initialized":false}' },
96
+ { action: "synced", args: [["status", "--json"], ["sync"]], stdout: '{"initialized":true}' },
97
+ ] as const) {
98
+ // given
99
+ const workspace = mkdtempSync(join(tmpdir(), "omo-codegraph-status-"));
100
+ const homeDir = mkdtempSync(join(tmpdir(), "omo-codegraph-status-home-"));
101
+ const calls: { readonly args: readonly string[]; readonly command: string; readonly env: Record<string, string> }[] = [];
102
+ const outcomes: unknown[] = [];
103
+ try {
104
+ // when
105
+ const result = await runCodegraphSessionStartWorker({
106
+ config: { codegraph: { enabled: true, install_dir: "/tmp/codegraph-install" }, sources: [], trustedCodegraphInstallDir: "/tmp/codegraph-install", warnings: [] },
107
+ nodeVersion: "22.14.0",
108
+ cwd: workspace,
109
+ env: { HOME: homeDir },
110
+ logOutcome: (outcome) => outcomes.push(outcome),
111
+ deps: {
112
+ ensureGitignored: () => true,
113
+ ensureProvisioned: () => Promise.resolve({ binPath: "/tmp/codegraph", provisioned: true }),
114
+ prepareWorkspace: () => ({
115
+ dataDir: join(homeDir, ".omo/codegraph/projects/test"),
116
+ dataRoot: join(homeDir, ".omo/codegraph"),
117
+ linked: true,
118
+ mode: "global-linked",
119
+ projectLink: join(workspace, ".codegraph"),
120
+ }),
121
+ resolveCommand: () => ({ argsPrefix: [], command: "/tmp/codegraph", exists: true, source: "path" }),
122
+ runCommand: (_projectRoot, command, args, options) => {
123
+ calls.push({ args, command, env: options.env });
124
+ return Promise.resolve({ exitCode: 0, stdout: calls.length === 1 ? scenario.stdout : "", timedOut: false });
125
+ },
126
+ },
127
+ });
128
+
129
+ // then
130
+ expect(result).toEqual({ action: scenario.action });
131
+ expect(calls.map((call) => [...call.args])).toEqual(scenario.args.map((args) => [...args]));
132
+ expect(calls[0]?.env["CODEGRAPH_INSTALL_DIR"]).toBe("/tmp/codegraph-install");
133
+ expect(outcomes).toEqual([{ action: scenario.action, exitCode: 0, projectRoot: workspace, source: "path", timedOut: false }]);
134
+ } finally {
135
+ rmSync(workspace, { recursive: true, force: true });
136
+ rmSync(homeDir, { recursive: true, force: true });
137
+ }
138
+ }
139
+ });
140
+ });
141
+
142
+ async function withProcessPlatform(platform: NodeJS.Platform, run: () => Promise<void>): Promise<void> {
143
+ const descriptor = Object.getOwnPropertyDescriptor(process, "platform");
144
+ Object.defineProperty(process, "platform", { configurable: true, enumerable: true, value: platform });
145
+ try {
146
+ await run();
147
+ } finally {
148
+ if (descriptor !== undefined) Object.defineProperty(process, "platform", descriptor);
149
+ }
150
+ }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-comment-checker",
3
- "version": "4.12.0",
3
+ "version": "4.13.0",
4
4
  "description": "Codex plugin that runs comment-checker after edit-like PostToolUse hooks.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-git-bash-hook",
3
- "version": "4.12.0",
3
+ "version": "4.13.0",
4
4
  "description": "Codex hook component that reminds Windows sessions to prefer the OMO git_bash MCP.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-lazycodex-executor-verify",
3
- "version": "4.12.0",
3
+ "version": "4.13.0",
4
4
  "description": "Codex SubagentStop evidence verifier for LazyCodex executor completions.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-lsp",
3
- "version": "4.12.0",
3
+ "version": "4.13.0",
4
4
  "description": "Codex plugin that exposes Language Server Protocol tools and post-edit diagnostics.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -4032,9 +4032,9 @@ function getSparkShellRuntimeAwareness(env = process.env, deps = {}) {
4032
4032
  return [
4033
4033
  SPARKSHELL_AWARENESS_MARKER,
4034
4034
  "",
4035
- `- Prefer \`${command} sparkshell <command>\` for repo inspection, CLI smoke tests, git/history checks, and bounded verification before falling back to raw shell commands.`,
4036
- `- Use \`${command} sparkshell --shell '<command>'\` only when shell metacharacters are required.`,
4037
- `- Use \`${command} sparkshell --tmux-pane <pane-id> --tail-lines 400\` to inspect an existing tmux pane. Tail lines must stay between 100 and 1000.`,
4035
+ `- Use \`${command} sparkshell <command>\` first for repo inspection, CLI smoke tests, git/history checks, and bounded command output. Raw \`rg\`/\`grep\`/\`cat\`/\`git\` are fallbacks when Sparkshell is unavailable or too narrow for the task.`,
4036
+ `- Use \`${command} sparkshell --shell '<command>'\` only for shell metacharacters or pipelines.`,
4037
+ `- Use \`${command} sparkshell --tmux-pane <pane-id> --tail-lines 400\` only to inspect an existing pane, never to launch ordinary commands. Tail lines must stay between 100 and 1000.`,
4038
4038
  "- When no native sidecar or appserver is available, Sparkshell silently falls back to raw command execution. `OMO_SPARKSHELL_BIN` selects a native sidecar path.",
4039
4039
  "- When `CODEX_THREAD_ID` identifies a Codex session, Sparkshell feeds recent session context (first/latest user request + last 5 conversation messages) into oversized-output condensation for relevance ranking, but never appends that context to command output. `OMO_SPARKSHELL_SESSION_CONTEXT=0` disables the lookup.",
4040
4040
  `- Route potentially huge output (full log files, big diffs, \`cat\`/\`grep\` over large artifacts) through \`${command} sparkshell\` instead of reading it raw: oversized output is condensed to a budget while preserving error signatures, repeated patterns, session-goal-relevant lines, and head/tail. Tune with \`--budget <chars>\`; disable with \`OMO_SPARKSHELL_CONDENSE=0\`.`,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-rules",
3
- "version": "4.12.0",
3
+ "version": "4.13.0",
4
4
  "description": "Codex plugin that injects project rule files into model context through lifecycle hooks.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -81,9 +81,9 @@ export function getSparkShellRuntimeAwareness(env: RuntimeEnv = process.env, dep
81
81
  return [
82
82
  SPARKSHELL_AWARENESS_MARKER,
83
83
  "",
84
- `- Prefer \`${command} sparkshell <command>\` for repo inspection, CLI smoke tests, git/history checks, and bounded verification before falling back to raw shell commands.`,
85
- `- Use \`${command} sparkshell --shell '<command>'\` only when shell metacharacters are required.`,
86
- `- Use \`${command} sparkshell --tmux-pane <pane-id> --tail-lines 400\` to inspect an existing tmux pane. Tail lines must stay between 100 and 1000.`,
84
+ `- Use \`${command} sparkshell <command>\` first for repo inspection, CLI smoke tests, git/history checks, and bounded command output. Raw \`rg\`/\`grep\`/\`cat\`/\`git\` are fallbacks when Sparkshell is unavailable or too narrow for the task.`,
85
+ `- Use \`${command} sparkshell --shell '<command>'\` only for shell metacharacters or pipelines.`,
86
+ `- Use \`${command} sparkshell --tmux-pane <pane-id> --tail-lines 400\` only to inspect an existing pane, never to launch ordinary commands. Tail lines must stay between 100 and 1000.`,
87
87
  "- When no native sidecar or appserver is available, Sparkshell silently falls back to raw command execution. `OMO_SPARKSHELL_BIN` selects a native sidecar path.",
88
88
  "- When `CODEX_THREAD_ID` identifies a Codex session, Sparkshell feeds recent session context (first/latest user request + last 5 conversation messages) into oversized-output condensation for relevance ranking, but never appends that context to command output. `OMO_SPARKSHELL_SESSION_CONTEXT=0` disables the lookup.",
89
89
  `- Route potentially huge output (full log files, big diffs, \`cat\`/\`grep\` over large artifacts) through \`${command} sparkshell\` instead of reading it raw: oversized output is condensed to a budget while preserving error signatures, repeated patterns, session-goal-relevant lines, and head/tail. Tune with \`--budget <chars>\`; disable with \`OMO_SPARKSHELL_CONDENSE=0\`.`,
@@ -19,6 +19,29 @@ function parseAdditionalContext(output: string): string {
19
19
  return parsed.hookSpecificOutput?.additionalContext ?? "";
20
20
  }
21
21
 
22
+ function normalizeGuidance(value: string): string {
23
+ return value.toLowerCase().replace(/\s+/g, " ").trim();
24
+ }
25
+
26
+ function expectSparkshellFirstContract(value: string): void {
27
+ const guidance = normalizeGuidance(value);
28
+
29
+ expect(guidance).toMatch(/`omo sparkshell <command>`[^.]*\bfirst\b/);
30
+ expect(guidance).toMatch(/\brepo inspection\b/);
31
+ expect(guidance).toMatch(/\bcli smoke tests\b/);
32
+ expect(guidance).toMatch(/\bgit\/history checks\b/);
33
+ expect(guidance).toMatch(/\bbounded command output\b/);
34
+ expect(guidance).toMatch(/\braw\b[^.]*`rg`\/`grep`\/`cat`\/`git`[^.]*\bfallbacks?\b/);
35
+ expect(guidance).toMatch(/\bsparkshell is unavailable\b/);
36
+ expect(guidance).toMatch(/\btoo narrow\b/);
37
+ expect(guidance).toMatch(/`omo sparkshell --shell '<command>'`[^.]*\bmetacharacters\b[^.]*\bpipelines\b/);
38
+ expect(guidance).toMatch(
39
+ /`omo sparkshell --tmux-pane <pane-id> --tail-lines 400`[^.]*\bonly\b[^.]*\binspect\b[^.]*\bexisting pane\b/,
40
+ );
41
+ expect(guidance).toMatch(/`omo sparkshell --tmux-pane <pane-id> --tail-lines 400`[^.]*\bnever\b[^.]*\blaunch ordinary commands\b/);
42
+ expect(guidance).not.toMatch(/\bprefer\b[^.]*\bbefore raw shell commands\b/);
43
+ }
44
+
22
45
  function parseHookOutput(value: unknown): HookOutput {
23
46
  if (typeof value !== "object" || value === null) {
24
47
  return {};
@@ -85,15 +108,16 @@ describe("Codex Sparkshell awareness", () => {
85
108
  );
86
109
 
87
110
  // then
88
- expect(parseAdditionalContext(output)).toContain("omo sparkshell <command>");
89
- expect(parseAdditionalContext(output)).toContain("OMO_SPARKSHELL_SESSION_CONTEXT");
90
- expect(parseAdditionalContext(output)).toContain("OMO_SPARKSHELL_CONDENSE");
91
- expect(parseAdditionalContext(output)).toContain("OMO_SPARKSHELL_SPARK");
92
- expect(parseAdditionalContext(output)).toContain("[sparkshell caption]");
93
- expect(parseAdditionalContext(output)).toContain("never appends that context to command output");
94
- expect(parseAdditionalContext(output)).toContain("what the full output contained");
95
- expect(parseAdditionalContext(output)).not.toContain("[REDACTED]");
96
- expect(parseAdditionalContext(output)).not.toContain("appends recent session context");
111
+ const context = parseAdditionalContext(output);
112
+ expectSparkshellFirstContract(context);
113
+ expect(context).toContain("OMO_SPARKSHELL_SESSION_CONTEXT");
114
+ expect(context).toContain("OMO_SPARKSHELL_CONDENSE");
115
+ expect(context).toContain("OMO_SPARKSHELL_SPARK");
116
+ expect(context).toContain("[sparkshell caption]");
117
+ expect(context).toContain("never appends that context to command output");
118
+ expect(context).toContain("what the full output contained");
119
+ expect(context).not.toContain("[REDACTED]");
120
+ expect(context).not.toContain("appends recent session context");
97
121
  });
98
122
 
99
123
  it("#given inactive env #when SessionStart runs #then emits no Sparkshell guidance", async () => {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-start-work-continuation",
3
- "version": "4.12.0",
3
+ "version": "4.13.0",
4
4
  "description": "Codex Stop hook continuation injector for omo-codex start-work plans.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -0,0 +1,94 @@
1
+ #!/usr/bin/env node
2
+
3
+ // components/teammode/src/codex-hook.ts
4
+ var CREATE_THREAD_TOOL_NAMES = new Set(["create_thread", "codex_app.create_thread"]);
5
+ function parsePostToolUsePayload(raw) {
6
+ if (raw.trim().length === 0)
7
+ return null;
8
+ try {
9
+ const parsed = JSON.parse(raw);
10
+ return isPostToolUsePayload(parsed) ? parsed : null;
11
+ } catch (error) {
12
+ if (error instanceof SyntaxError)
13
+ return null;
14
+ return null;
15
+ }
16
+ }
17
+ function runPostToolUseHook(payload) {
18
+ if (payload.hook_event_name !== "PostToolUse")
19
+ return "";
20
+ if (!CREATE_THREAD_TOOL_NAMES.has(payload.tool_name))
21
+ return "";
22
+ const threadReference = extractThreadCreationReference(payload.tool_response);
23
+ if (threadReference === null)
24
+ return "";
25
+ const output = {
26
+ hookSpecificOutput: {
27
+ hookEventName: "PostToolUse",
28
+ additionalContext: threadTitleReminder(threadReference)
29
+ }
30
+ };
31
+ return `${JSON.stringify(output)}
32
+ `;
33
+ }
34
+ async function runTeammodeHookCli(stdin, stdout) {
35
+ const payload = parsePostToolUsePayload(await readAll(stdin));
36
+ if (payload === null)
37
+ return;
38
+ const output = runPostToolUseHook(payload);
39
+ if (output.length > 0)
40
+ stdout.write(output);
41
+ }
42
+ function threadTitleReminder(threadReference) {
43
+ const id = formatIdentifier(threadReference.id);
44
+ return threadReference.kind === "thread" ? `THREAD ID ${id}: CALL codex_app.set_thread_title NOW. USE THE REAL TASK/ROLE.` : `PENDING WORKTREE ID ${id}: CALL codex_app.set_thread_title AS SOON AS THREAD ID EXISTS. USE THE REAL TASK/ROLE.`;
45
+ }
46
+ function formatIdentifier(value) {
47
+ const normalized = value.replace(/\s+/g, " ").trim();
48
+ return normalized.length <= 200 ? normalized : `${normalized.slice(0, 197)}...`;
49
+ }
50
+ function extractThreadCreationReference(toolResponse) {
51
+ if (!isRecord(toolResponse))
52
+ return null;
53
+ const threadId = toolResponse["threadId"];
54
+ if (typeof threadId === "string" && threadId.trim().length > 0) {
55
+ return { kind: "thread", id: threadId };
56
+ }
57
+ const pendingWorktreeId = toolResponse["pendingWorktreeId"];
58
+ if (typeof pendingWorktreeId === "string" && pendingWorktreeId.trim().length > 0) {
59
+ return { kind: "pendingWorktree", id: pendingWorktreeId };
60
+ }
61
+ return null;
62
+ }
63
+ function isPostToolUsePayload(value) {
64
+ if (!isRecord(value))
65
+ return false;
66
+ return value["hook_event_name"] === "PostToolUse" && typeof value["session_id"] === "string" && typeof value["tool_name"] === "string" && Object.hasOwn(value, "tool_input") && Object.hasOwn(value, "tool_response") && optionalString(value["turn_id"]) && optionalString(value["cwd"]) && optionalString(value["model"]) && optionalString(value["permission_mode"]) && optionalString(value["tool_use_id"]) && (value["transcript_path"] === undefined || value["transcript_path"] === null || typeof value["transcript_path"] === "string");
67
+ }
68
+ function optionalString(value) {
69
+ return value === undefined || typeof value === "string";
70
+ }
71
+ function isRecord(value) {
72
+ return typeof value === "object" && value !== null && !Array.isArray(value);
73
+ }
74
+ function readAll(stdin) {
75
+ return new Promise((resolve, reject) => {
76
+ let data = "";
77
+ stdin.setEncoding("utf8");
78
+ stdin.on("data", (chunk) => {
79
+ data += chunk instanceof Buffer ? chunk.toString() : String(chunk);
80
+ });
81
+ stdin.once("error", reject);
82
+ stdin.once("end", () => resolve(data));
83
+ });
84
+ }
85
+
86
+ // components/teammode/src/cli.ts
87
+ var [command, subcommand] = process.argv.slice(2);
88
+ if (command === "hook" && subcommand === "post-tool-use") {
89
+ await runTeammodeHookCli(process.stdin, process.stdout);
90
+ } else {
91
+ process.stderr.write(`Usage: omo-teammode hook post-tool-use
92
+ `);
93
+ process.exitCode = 2;
94
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "hooks": {
3
+ "PostToolUse": [
4
+ {
5
+ "matcher": "^(create_thread|codex_app\\.create_thread)$",
6
+ "hooks": [
7
+ {
8
+ "type": "command",
9
+ "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
10
+ "timeout": 10,
11
+ "statusMessage": "(OmO) Checking Thread Title Hygiene"
12
+ }
13
+ ]
14
+ }
15
+ ]
16
+ }
17
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "@sisyphuslabs/codex-teammode",
3
+ "version": "4.13.0",
4
+ "description": "Codex team-mode hook component that keeps background thread titles descriptive after create_thread.",
5
+ "type": "module",
6
+ "private": true,
7
+ "files": [
8
+ "dist",
9
+ "hooks",
10
+ "skills"
11
+ ],
12
+ "scripts": {
13
+ "build": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && bun build src/cli.ts --target node --format esm --outfile dist/cli.js",
14
+ "test": "bun test test/*.test.ts",
15
+ "typecheck": "tsc --noEmit"
16
+ },
17
+ "devDependencies": {
18
+ "@types/node": "^25.9.3",
19
+ "bun-types": "^1.3.1",
20
+ "typescript": "^6.0.3",
21
+ "vitest": "^4.1.8"
22
+ },
23
+ "engines": {
24
+ "node": ">=20.0.0"
25
+ }
26
+ }
@@ -26,11 +26,15 @@ Use plain subagents (`$ulw` / `multi_agent_v1.spawn_agent`) - NOT a team - when
26
26
  A team buys cross-member coordination at a real overhead cost; only spend it when coordination
27
27
  is the thing you actually need.
28
28
 
29
- ## You are the leader
29
+ ## You are the leader - orchestrate, do not implement
30
30
 
31
- The main session is ALWAYS the team leader. Do NOT create a separate leader thread - you
32
- orchestrate directly. Members are the threads you create; they report to you, and you own the
33
- final synthesis and any integration.
31
+ The main session is ALWAYS the team leader; you orchestrate directly and never spin up a separate
32
+ leader thread. Your job is orchestration, NOT writing product code: split the work and assign each
33
+ slice, hold live situational awareness of every member, verify and QA what they deliver, relay
34
+ findings between members, instruct and unblock, and synthesize the result. DELEGATE every code edit
35
+ to a member - if you catch yourself editing product files while the team runs, that work was a
36
+ member's slice you should have handed off. You own direction, verification, and integration (the
37
+ merge), not the keystrokes.
34
38
 
35
39
  ## Compose by part, ownership, or perspective - not by job title
36
40
 
@@ -45,6 +49,9 @@ member by a concrete slice: a specific part of the codebase, an ownership area,
45
49
  perspective/lens. Assigning a vague role ("backend dev", "release analyst", "the tester") is an
46
50
  anti-pattern - it gives the member no real boundary and invites overlap. Each member's `focus`
47
51
  names what they own concretely; the `lens` is one of `area`, `ownership`, or `perspective`.
52
+ Give each member a short, distinct `--name` too - its role or what it watches (e.g.
53
+ `app-server-lifecycle`, `mailbox-delivery`) - because that name titles its thread; never reuse
54
+ one name for two members.
48
55
 
49
56
  ## Run the script - never hand-write team state
50
57
 
@@ -54,10 +61,13 @@ Replace `<skill-root>` with this skill's own directory.
54
61
 
55
62
  ```
56
63
  node "<skill-root>/scripts/team.mjs" init --name "<team>" --session-name "<session>" [--session <leader_session_id>] [--worktree] [--base-branch dev]
57
- node "<skill-root>/scripts/team.mjs" add-member --team <session_id> --id A --focus "<part/ownership/perspective>" --lens area|ownership|perspective --deliverable "<...>" [--branch <branch>]
64
+ node "<skill-root>/scripts/team.mjs" add-member --team <session_id> --id A --name "<short role>" --focus "<part/ownership/perspective>" --lens area|ownership|perspective --deliverable "<...>" [--branch <branch>]
58
65
  node "<skill-root>/scripts/team.mjs" bind-thread --team <session_id> --id A --thread <thread_id> [--cwd <path>]
59
66
  node "<skill-root>/scripts/team.mjs" member-prompt --team <session_id> --id A
60
67
  node "<skill-root>/scripts/team.mjs" set-status --team <session_id> --id A --status reported|blocked|active|archived [--note "<...>"]
68
+ node "<skill-root>/scripts/team.mjs" worktree-add --team <session_id> --id A [--base-branch <branch>]
69
+ node "<skill-root>/scripts/team.mjs" worktree-remove --team <session_id> --id A [--force]
70
+ node "<skill-root>/scripts/team.mjs" integrate --team <session_id> [--id A]
61
71
  node "<skill-root>/scripts/team.mjs" archive --team <session_id> [--id A]
62
72
  node "<skill-root>/scripts/team.mjs" delete --team <session_id> [--force]
63
73
  node "<skill-root>/scripts/team.mjs" status --team <session_id>
@@ -74,11 +84,11 @@ subcommand rewrites `guide.md`, so the manual always matches the current team.
74
84
 
75
85
  1. `init` the team, then `add-member` once per member.
76
86
  2. Create a durable thread per member with `codex_app.create_thread` - ALWAYS this tool for every
77
- member, never a spawned agent - titled EXACTLY
78
- `[team name] {session name}` (keep this convention strictly). If `codex_app.create_thread`
79
- accepts a working directory / cwd argument, set it to that member's worktree; otherwise the
80
- member's manual tells it to `cd` there first. Use `codex_app.set_thread_title` if the title
81
- did not land at creation.
87
+ member, never a spawned agent - titled `[team name] <member name>`, using THAT member's own
88
+ name (its role / what it watches), so no two threads share a title. `add-member` prints the
89
+ exact title to use. If `codex_app.create_thread` accepts a working directory / cwd argument,
90
+ set it to that member's worktree; otherwise the member's manual tells it to `cd` there first.
91
+ Use `codex_app.set_thread_title` if the title did not land at creation.
82
92
  3. `bind-thread` to record each thread id (and `--cwd`), then send that member's bootstrap
83
93
  trigger (printed by `add-member` / `member-prompt`) as the thread's first message. The trigger
84
94
  is short on purpose: it tells the new thread to READ its `guide.md` and `team.json` rather than
@@ -87,7 +97,7 @@ subcommand rewrites `guide.md`, so the manual always matches the current team.
87
97
  Every team member is a real Codex thread created with `codex_app.create_thread` - this is strict,
88
98
  not a preference. NEVER substitute `multi_agent_v1.spawn_agent`, or any other in-process subagent,
89
99
  for a team member: a spawned agent is an ephemeral helper that does not show up as a team thread,
90
- cannot carry the `[team name] {session name}` title, and cannot be inspected, titled, archived, or
100
+ cannot carry the `[team name] <member name>` title, and cannot be inspected, titled, archived, or
91
101
  re-opened with the `codex_app.*` thread tools - which defeats the entire point of a durable team.
92
102
  A member only counts once you have `bind-thread`-ed it to a real `codex_app.create_thread` thread
93
103
  id. If the thread-creation tool is unavailable, STOP and say so (see Stop rules); do not quietly
@@ -95,24 +105,41 @@ fall back to a spawned agent.
95
105
 
96
106
  ## Communication
97
107
 
98
- Coordinate with `codex_app.send_message_to_thread` (leader-to-member and peer digests) and inspect
99
- status with `codex_app.read_thread`. The generated manual already binds members to the hard rules,
100
- so you mostly enforce them: all member-to-member and member-to-leader communication is in English;
101
- when the END user addresses a member, that member replies in the user's own language. Members
102
- over-communicate relentlessly - constant, small, lean updates that report every finding, hand-off,
103
- and even the smallest or most trivial step as it happens rather than one final dump - and send
104
- `WORKING:`/`BLOCKED:` markers so the leader always knows their state; stale, stuck, or
105
- silently-blocked members are not acceptable, and a finished
106
- member reports to the leader immediately. Members hand off files and
107
- memos through the team `artifacts/` directory and reference them by path instead of pasting large
108
- content. Wait for every required member's final report before you declare the team done.
109
-
110
- ## Worktrees (optional isolation)
111
-
112
- When parallel members would edit overlapping files, enable isolation with `init --worktree`. Create
113
- one git worktree per member off the base branch, `bind-thread --cwd <worktree>` so each member's
114
- worktree is recorded in `team.json`, and rely on the manual to direct each member into its own
115
- worktree. Each member commits inside its worktree so you can integrate.
108
+ Members push to you and to one another with `codex_app.send_message_to_thread`; you inspect their
109
+ state with `codex_app.read_thread`. So members can actually reach you, run `init` with
110
+ `--session <your own thread id>` - that makes `leader.sessionId` in team.json a real, messageable
111
+ thread; without it members cannot report to you and you are stuck polling. The generated manual binds
112
+ members to the hard rules, so you mainly keep the channel open: expect frequent small inbound updates
113
+ from each member - findings, `WORKING:`/`BLOCKED:` markers, peer digests - rather than one final
114
+ dump, and act on them as they arrive. All member-to-member and member-to-leader traffic is in English;
115
+ when the END user addresses a member, that member replies in the user's own language. Members hand off
116
+ files and memos through the team `artifacts/` directory and reference them by path. Wait for every
117
+ required member's final report before you declare the team done.
118
+
119
+ ## Worktrees - isolate members who would touch the same files
120
+
121
+ The moment two members' slices would edit the same files, give each its own git worktree so they
122
+ cannot clobber each other. Decide this whenever you see the collision - at team creation OR mid-run,
123
+ not only up front. For each colliding member run `worktree-add --team <id> --id <member>`: it creates
124
+ the worktree off the base branch on a derived branch, flips the team into worktree mode, records it in
125
+ `team.json`, and prints the `cd` path to hand that member. The member works and commits only inside
126
+ its own worktree. To land the work, `integrate --team <id>` merges every member branch into your
127
+ current branch with a merge commit (never a squash or rebase); resolve any conflict it reports, then
128
+ `worktree-remove` each worktree at cleanup.
129
+
130
+ ## Run a ulw-plan in parallel
131
+
132
+ When a decision-complete plan already exists at `.omo/plans/<slug>.md` (from ulw-plan), execute its
133
+ parallel waves as a team instead of one todo at a time. Map it directly:
134
+ - one wave's independent todos -> one member each; the todo's scope/files become that member's `focus`,
135
+ and its acceptance criteria + QA become the member's `deliverable`.
136
+ - the plan's dependency matrix sets the shape: todos with no unmet dependency inside a wave run as
137
+ concurrent members; a todo that depends on another waits, so launch the next wave only after the
138
+ blocking members report.
139
+ - todos in the same wave that touch overlapping files -> give those members worktrees (see above).
140
+
141
+ Keep the plan file as the shared spec: point each member at its todo by path, and verify the member's
142
+ result against that todo's acceptance criteria before you integrate.
116
143
 
117
144
  ## Archive, delete, and cleanup
118
145
 
@@ -126,9 +153,9 @@ then delete the team state. A finished team that is never disbanded is a leak.
126
153
  and tell the user - never pretend a member was archived.
127
154
  - `delete` removes `.omo/teams/{session_id}` and refuses while the team is unarchived or any member
128
155
  is still active unless `--force`.
129
- - When the work wraps up, integrate each member's worktree the way the user asked - merge directly,
130
- or open a fresh PR and merge it - then archive and delete. Cleanup is real work; respect the
131
- user's instruction on how to land it.
156
+ - When the work wraps up, land it the way the user asked: `integrate --team <id>` for a direct merge
157
+ commit, or push each member branch and open a PR. Then `worktree-remove` each worktree, archive, and
158
+ delete. Cleanup is real work; respect the user's instruction on how to land it.
132
159
 
133
160
  ## Stop rules
134
161