lazycodex-ai 5.1.61 → 5.1.63

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 (300) hide show
  1. package/dist/cli/index.js +1722 -281
  2. package/dist/cli/service-auth/closed-device-login.fixture.d.ts +1 -0
  3. package/dist/cli/service-auth/credential-lock.d.ts +8 -2
  4. package/dist/cli/service-auth/index.d.ts +2 -1
  5. package/dist/cli/service-auth/keychain-helper/access.d.ts +27 -0
  6. package/dist/cli/service-auth/keychain-helper/approval-cache.d.ts +51 -0
  7. package/dist/cli/service-auth/keychain-helper/client.d.ts +68 -0
  8. package/dist/cli/service-auth/keychain-helper/creator-handoff.d.ts +31 -0
  9. package/dist/cli/service-auth/keychain-helper/darwin-backend.d.ts +75 -0
  10. package/dist/cli/service-auth/keychain-helper/darwin-read.d.ts +46 -0
  11. package/dist/cli/service-auth/keychain-helper/darwin-store.d.ts +28 -0
  12. package/dist/cli/service-auth/keychain-helper/fake-keychain.test-support.d.ts +85 -0
  13. package/dist/cli/service-auth/keychain-helper/location.d.ts +28 -0
  14. package/dist/cli/service-auth/keychain-helper/migration.d.ts +20 -0
  15. package/dist/cli/service-auth/keychain-helper/owner-marker.d.ts +7 -0
  16. package/dist/cli/service-auth/keychain-helper/pin.d.ts +20 -0
  17. package/dist/cli/service-auth/keychain-helper/process-copy.test-support.d.ts +3 -0
  18. package/dist/cli/service-auth/keychain-helper/process-state.d.ts +19 -0
  19. package/dist/cli/service-auth/keychain-helper/prompt-lock.d.ts +14 -0
  20. package/dist/cli/service-auth/keychain-helper/recovery.d.ts +34 -0
  21. package/dist/cli/service-auth/keychain-helper/runtime-capabilities.d.ts +13 -0
  22. package/dist/cli/service-auth/keychain-helper/secrets-gate.d.ts +4 -0
  23. package/dist/cli/service-auth/keychain-helper/signature.d.ts +17 -0
  24. package/dist/cli/service-auth/keychain-helper/store-binding.d.ts +46 -0
  25. package/dist/cli/service-auth/keystore.d.ts +18 -3
  26. package/dist/cli/service-auth/session.d.ts +29 -2
  27. package/dist/cli/service-auth/sync-pin-retire.d.ts +7 -0
  28. package/dist/cli-node/index.js +1722 -281
  29. package/package.json +1 -1
  30. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  31. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  32. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  33. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  34. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  35. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  36. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  37. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  38. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  39. package/packages/omo-codex/plugin/components/lcx/skills/lcx-doctor/SKILL.md +1 -1
  40. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
  41. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  42. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  43. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  44. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  45. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  46. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  47. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  48. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  49. package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +2 -0
  50. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  51. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  52. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +1 -1
  53. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-unclear.md +2 -2
  54. package/packages/omo-codex/plugin/components/ultrawork/src/directive-content.ts +1 -1
  55. package/packages/omo-codex/plugin/components/ulw-execute-continuation/directive.md +1 -1
  56. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
  57. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  58. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +2 -0
  59. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  60. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  61. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +1 -1
  62. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/define-goal.md +1 -1
  63. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +10 -10
  64. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  65. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  66. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  67. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  68. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  69. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  70. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  71. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  72. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  73. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  74. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  75. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  76. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  77. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  78. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  79. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  80. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  81. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  82. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  83. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  84. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  85. package/packages/omo-codex/plugin/package-lock.json +12 -12
  86. package/packages/omo-codex/plugin/package.json +1 -1
  87. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +6 -3
  88. package/packages/omo-codex/plugin/skills/ast-grep/AGENTS.md +2 -2
  89. package/packages/omo-codex/plugin/skills/ast-grep/README.md +4 -4
  90. package/packages/omo-codex/plugin/skills/ast-grep/SKILL.md +10 -8
  91. package/packages/omo-codex/plugin/skills/ast-grep/references/cli.md +4 -3
  92. package/packages/omo-codex/plugin/skills/ast-grep/references/patterns.md +5 -5
  93. package/packages/omo-codex/plugin/skills/ast-grep/references/pitfalls.md +3 -3
  94. package/packages/omo-codex/plugin/skills/ast-grep/references/recipes.md +6 -4
  95. package/packages/omo-codex/plugin/skills/ast-grep/references/yaml-rules.md +3 -3
  96. package/packages/omo-codex/plugin/skills/ast-grep/scripts/ast_grep_helper.py +3 -3
  97. package/packages/omo-codex/plugin/skills/browser/SKILL.md +2 -3
  98. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/README.md +1 -1
  99. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +1 -1
  100. package/packages/omo-codex/plugin/skills/coding-agent-sessions/AGENTS.md +1 -1
  101. package/packages/omo-codex/plugin/skills/coding-agent-sessions/SKILL.md +2 -1
  102. package/packages/omo-codex/plugin/skills/data-scientist/SKILL.md +8 -6
  103. package/packages/omo-codex/plugin/skills/data-scientist/references/placement.md +9 -5
  104. package/packages/omo-codex/plugin/skills/data-scientist/references/uv-setup.md +3 -3
  105. package/packages/omo-codex/plugin/skills/data-scientist/references/visualization.md +19 -4
  106. package/packages/omo-codex/plugin/skills/debugging/SKILL.md +5 -5
  107. package/packages/omo-codex/plugin/skills/debugging/references/methodology/02-investigate.md +2 -2
  108. package/packages/omo-codex/plugin/skills/debugging/references/methodology/06-fix.md +2 -0
  109. package/packages/omo-codex/plugin/skills/debugging/references/methodology/09-cleanup.md +2 -2
  110. package/packages/omo-codex/plugin/skills/debugging/references/methodology/partial-runtime-evidence.md +1 -1
  111. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/bundled-js-binary.md +1 -1
  112. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/native-binary.md +1 -1
  113. package/packages/omo-codex/plugin/skills/debugging/references/tools/browser-qa.md +1 -2
  114. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +4 -4
  115. package/packages/omo-codex/plugin/skills/frontend/references/design/README.md +2 -2
  116. package/packages/omo-codex/plugin/skills/frontend/references/design/component-catalogs.md +1 -1
  117. package/packages/omo-codex/plugin/skills/frontend/references/design/design-system-architecture.md +2 -2
  118. package/packages/omo-codex/plugin/skills/frontend/references/design/print-paged-media.md +1 -1
  119. package/packages/omo-codex/plugin/skills/frontend/references/design/react-dev-tooling-skill.md +1 -1
  120. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-a-direction.md +5 -5
  121. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/routing.md +2 -2
  122. package/packages/omo-codex/plugin/skills/frontend/references/perfection/README.md +1 -2
  123. package/packages/omo-codex/plugin/skills/frontend/references/perfection/react-perf-tooling.md +27 -8
  124. package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/lighthouse-audit.py +0 -1
  125. package/packages/omo-codex/plugin/skills/git-master/SKILL.md +12 -2
  126. package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +1 -1
  127. package/packages/omo-codex/plugin/skills/lcx-doctor/SKILL.md +1 -1
  128. package/packages/omo-codex/plugin/skills/lsp-setup/SKILL.md +24 -15
  129. package/packages/omo-codex/plugin/skills/lsp-setup/references/bash/README.md +3 -3
  130. package/packages/omo-codex/plugin/skills/lsp-setup/references/c-cpp/README.md +2 -2
  131. package/packages/omo-codex/plugin/skills/lsp-setup/references/csharp/README.md +2 -2
  132. package/packages/omo-codex/plugin/skills/lsp-setup/references/dart/README.md +2 -2
  133. package/packages/omo-codex/plugin/skills/lsp-setup/references/elixir/README.md +2 -2
  134. package/packages/omo-codex/plugin/skills/lsp-setup/references/go/README.md +2 -2
  135. package/packages/omo-codex/plugin/skills/lsp-setup/references/haskell/README.md +2 -2
  136. package/packages/omo-codex/plugin/skills/lsp-setup/references/java/README.md +3 -3
  137. package/packages/omo-codex/plugin/skills/lsp-setup/references/julia/README.md +3 -3
  138. package/packages/omo-codex/plugin/skills/lsp-setup/references/kotlin/README.md +4 -4
  139. package/packages/omo-codex/plugin/skills/lsp-setup/references/lua/README.md +2 -2
  140. package/packages/omo-codex/plugin/skills/lsp-setup/references/php/README.md +3 -3
  141. package/packages/omo-codex/plugin/skills/lsp-setup/references/python/README.md +13 -12
  142. package/packages/omo-codex/plugin/skills/lsp-setup/references/ruby/README.md +2 -2
  143. package/packages/omo-codex/plugin/skills/lsp-setup/references/rust/README.md +2 -2
  144. package/packages/omo-codex/plugin/skills/lsp-setup/references/swift/README.md +4 -4
  145. package/packages/omo-codex/plugin/skills/lsp-setup/references/terraform/README.md +2 -2
  146. package/packages/omo-codex/plugin/skills/lsp-setup/references/typescript/README.md +3 -3
  147. package/packages/omo-codex/plugin/skills/lsp-setup/references/yaml/README.md +2 -2
  148. package/packages/omo-codex/plugin/skills/lsp-setup/references/zig/README.md +2 -2
  149. package/packages/omo-codex/plugin/skills/lsp-setup/scripts/detect-lsp.ts +1 -1
  150. package/packages/omo-codex/plugin/skills/lsp-setup/scripts/lsp-server-table.ts +3 -2
  151. package/packages/omo-codex/plugin/skills/programming/SKILL.md +5 -5
  152. package/packages/omo-codex/plugin/skills/programming/references/code-smells.md +2 -2
  153. package/packages/omo-codex/plugin/skills/programming/references/go/README.md +3 -3
  154. package/packages/omo-codex/plugin/skills/programming/references/python/README.md +8 -8
  155. package/packages/omo-codex/plugin/skills/programming/references/python/data-processing.md +9 -9
  156. package/packages/omo-codex/plugin/skills/programming/references/python/libraries.md +3 -3
  157. package/packages/omo-codex/plugin/skills/programming/references/python/one-liners.md +1 -1
  158. package/packages/omo-codex/plugin/skills/programming/references/python/pyproject-strict.md +1 -1
  159. package/packages/omo-codex/plugin/skills/programming/references/rust/libraries.md +2 -2
  160. package/packages/omo-codex/plugin/skills/programming/references/rust-ub/README.md +3 -3
  161. package/packages/omo-codex/plugin/skills/programming/references/typescript/README.md +5 -5
  162. package/packages/omo-codex/plugin/skills/programming/scripts/typescript/new-project.ts +1 -1
  163. package/packages/omo-codex/plugin/skills/refactor/SKILL.md +36 -36
  164. package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +6 -6
  165. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +2 -2
  166. package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +11 -8
  167. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/AGENTS.md +4 -4
  168. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/README.md +2 -2
  169. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/career.md +1 -1
  170. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/social.md +1 -1
  171. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/web.md +4 -4
  172. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +2 -1
  173. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +17 -18
  174. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/fallback.md +10 -6
  175. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/jina.md +12 -12
  176. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/naver.md +3 -3
  177. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/playwright.md +1 -1
  178. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/rss.md +1 -1
  179. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/tls-impersonate.md +12 -7
  180. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +2 -0
  181. package/packages/omo-codex/plugin/skills/ulw-execute/SKILL.md +9 -6
  182. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +1 -1
  183. package/packages/omo-codex/plugin/skills/ulw-loop/references/define-goal.md +1 -1
  184. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +10 -10
  185. package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +1 -1
  186. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-unclear.md +2 -2
  187. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +4 -4
  188. package/packages/omo-codex/plugin/skills/ulw-research/references/deliverable-phase.md +5 -5
  189. package/packages/omo-codex/plugin/skills/ulw-research/references/report-visualization.md +2 -2
  190. package/packages/omo-codex/plugin/skills/ulw-research/references/research-collection.md +2 -2
  191. package/packages/omo-codex/plugin/skills/ulw-research/references/unit-rules.md +2 -2
  192. package/packages/omo-codex/plugin/skills/visual-qa/AGENTS.md +1 -1
  193. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +5 -5
  194. package/packages/omo-codex/plugin/skills/visual-qa/references/browser-setup.md +4 -2
  195. package/packages/omo-codex/plugin/test/sync-skills-codex-compatibility.test.mjs +2 -0
  196. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +7 -3
  197. package/packages/omo-codex/scripts/install-dist/install-local.mjs +2 -2
  198. package/packages/prompts-core/prompts/ultrawork/codex.md +2 -0
  199. package/packages/shared-skills/skills/ast-grep/AGENTS.md +2 -2
  200. package/packages/shared-skills/skills/ast-grep/README.md +4 -4
  201. package/packages/shared-skills/skills/ast-grep/SKILL.md +10 -8
  202. package/packages/shared-skills/skills/ast-grep/references/cli.md +4 -3
  203. package/packages/shared-skills/skills/ast-grep/references/patterns.md +5 -5
  204. package/packages/shared-skills/skills/ast-grep/references/pitfalls.md +3 -3
  205. package/packages/shared-skills/skills/ast-grep/references/recipes.md +6 -4
  206. package/packages/shared-skills/skills/ast-grep/references/yaml-rules.md +3 -3
  207. package/packages/shared-skills/skills/ast-grep/scripts/ast_grep_helper.py +3 -3
  208. package/packages/shared-skills/skills/browser/SKILL.md +2 -3
  209. package/packages/shared-skills/skills/browser/references/owned-engine/README.md +1 -1
  210. package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +1 -1
  211. package/packages/shared-skills/skills/coding-agent-sessions/AGENTS.md +1 -1
  212. package/packages/shared-skills/skills/coding-agent-sessions/SKILL.md +2 -1
  213. package/packages/shared-skills/skills/data-scientist/SKILL.md +8 -6
  214. package/packages/shared-skills/skills/data-scientist/references/placement.md +9 -5
  215. package/packages/shared-skills/skills/data-scientist/references/uv-setup.md +3 -3
  216. package/packages/shared-skills/skills/data-scientist/references/visualization.md +19 -4
  217. package/packages/shared-skills/skills/debugging/SKILL.md +5 -5
  218. package/packages/shared-skills/skills/debugging/references/methodology/02-investigate.md +2 -2
  219. package/packages/shared-skills/skills/debugging/references/methodology/06-fix.md +2 -0
  220. package/packages/shared-skills/skills/debugging/references/methodology/09-cleanup.md +2 -2
  221. package/packages/shared-skills/skills/debugging/references/methodology/partial-runtime-evidence.md +1 -1
  222. package/packages/shared-skills/skills/debugging/references/runtimes/bundled-js-binary.md +1 -1
  223. package/packages/shared-skills/skills/debugging/references/runtimes/native-binary.md +1 -1
  224. package/packages/shared-skills/skills/debugging/references/tools/browser-qa.md +1 -2
  225. package/packages/shared-skills/skills/frontend/SKILL.md +4 -4
  226. package/packages/shared-skills/skills/frontend/references/design/README.md +2 -2
  227. package/packages/shared-skills/skills/frontend/references/design/component-catalogs.md +1 -1
  228. package/packages/shared-skills/skills/frontend/references/design/design-system-architecture.md +2 -2
  229. package/packages/shared-skills/skills/frontend/references/design/print-paged-media.md +1 -1
  230. package/packages/shared-skills/skills/frontend/references/design/react-dev-tooling-skill.md +1 -1
  231. package/packages/shared-skills/skills/frontend/references/designpowers/lane-a-direction.md +5 -5
  232. package/packages/shared-skills/skills/frontend/references/designpowers/routing.md +2 -2
  233. package/packages/shared-skills/skills/frontend/references/perfection/README.md +1 -2
  234. package/packages/shared-skills/skills/frontend/references/perfection/react-perf-tooling.md +27 -8
  235. package/packages/shared-skills/skills/frontend/scripts/perfection/lighthouse-audit.py +0 -1
  236. package/packages/shared-skills/skills/git-master/SKILL.md +12 -2
  237. package/packages/shared-skills/skills/init-deep/SKILL.md +1 -1
  238. package/packages/shared-skills/skills/lsp-setup/SKILL.md +24 -15
  239. package/packages/shared-skills/skills/lsp-setup/references/bash/README.md +3 -3
  240. package/packages/shared-skills/skills/lsp-setup/references/c-cpp/README.md +2 -2
  241. package/packages/shared-skills/skills/lsp-setup/references/csharp/README.md +2 -2
  242. package/packages/shared-skills/skills/lsp-setup/references/dart/README.md +2 -2
  243. package/packages/shared-skills/skills/lsp-setup/references/elixir/README.md +2 -2
  244. package/packages/shared-skills/skills/lsp-setup/references/go/README.md +2 -2
  245. package/packages/shared-skills/skills/lsp-setup/references/haskell/README.md +2 -2
  246. package/packages/shared-skills/skills/lsp-setup/references/java/README.md +3 -3
  247. package/packages/shared-skills/skills/lsp-setup/references/julia/README.md +3 -3
  248. package/packages/shared-skills/skills/lsp-setup/references/kotlin/README.md +4 -4
  249. package/packages/shared-skills/skills/lsp-setup/references/lua/README.md +2 -2
  250. package/packages/shared-skills/skills/lsp-setup/references/php/README.md +3 -3
  251. package/packages/shared-skills/skills/lsp-setup/references/python/README.md +13 -12
  252. package/packages/shared-skills/skills/lsp-setup/references/ruby/README.md +2 -2
  253. package/packages/shared-skills/skills/lsp-setup/references/rust/README.md +2 -2
  254. package/packages/shared-skills/skills/lsp-setup/references/swift/README.md +4 -4
  255. package/packages/shared-skills/skills/lsp-setup/references/terraform/README.md +2 -2
  256. package/packages/shared-skills/skills/lsp-setup/references/typescript/README.md +3 -3
  257. package/packages/shared-skills/skills/lsp-setup/references/yaml/README.md +2 -2
  258. package/packages/shared-skills/skills/lsp-setup/references/zig/README.md +2 -2
  259. package/packages/shared-skills/skills/lsp-setup/scripts/detect-lsp.ts +1 -1
  260. package/packages/shared-skills/skills/lsp-setup/scripts/lsp-server-table.ts +3 -2
  261. package/packages/shared-skills/skills/programming/SKILL.md +5 -5
  262. package/packages/shared-skills/skills/programming/references/code-smells.md +2 -2
  263. package/packages/shared-skills/skills/programming/references/go/README.md +3 -3
  264. package/packages/shared-skills/skills/programming/references/python/README.md +8 -8
  265. package/packages/shared-skills/skills/programming/references/python/data-processing.md +9 -9
  266. package/packages/shared-skills/skills/programming/references/python/libraries.md +3 -3
  267. package/packages/shared-skills/skills/programming/references/python/one-liners.md +1 -1
  268. package/packages/shared-skills/skills/programming/references/python/pyproject-strict.md +1 -1
  269. package/packages/shared-skills/skills/programming/references/rust/libraries.md +2 -2
  270. package/packages/shared-skills/skills/programming/references/rust-ub/README.md +3 -3
  271. package/packages/shared-skills/skills/programming/references/typescript/README.md +5 -5
  272. package/packages/shared-skills/skills/programming/scripts/typescript/new-project.ts +1 -1
  273. package/packages/shared-skills/skills/refactor/SKILL.md +36 -36
  274. package/packages/shared-skills/skills/remove-ai-slops/SKILL.md +6 -6
  275. package/packages/shared-skills/skills/review-work/SKILL.md +2 -2
  276. package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +11 -8
  277. package/packages/shared-skills/skills/ultimate-browsing/engine/AGENTS.md +4 -4
  278. package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/README.md +2 -2
  279. package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/career.md +1 -1
  280. package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/social.md +1 -1
  281. package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/web.md +4 -4
  282. package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +2 -1
  283. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +17 -18
  284. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/fallback.md +10 -6
  285. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/jina.md +12 -12
  286. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/naver.md +3 -3
  287. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/playwright.md +1 -1
  288. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/rss.md +1 -1
  289. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/tls-impersonate.md +12 -7
  290. package/packages/shared-skills/skills/ulw-execute/SKILL.md +9 -6
  291. package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +1 -1
  292. package/packages/shared-skills/skills/ulw-plan/references/intent-unclear.md +2 -2
  293. package/packages/shared-skills/skills/ulw-research/SKILL.md +5 -5
  294. package/packages/shared-skills/skills/ulw-research/references/deliverable-phase.md +5 -5
  295. package/packages/shared-skills/skills/ulw-research/references/report-visualization.md +2 -2
  296. package/packages/shared-skills/skills/ulw-research/references/research-collection.md +2 -2
  297. package/packages/shared-skills/skills/ulw-research/references/unit-rules.md +2 -2
  298. package/packages/shared-skills/skills/visual-qa/AGENTS.md +1 -1
  299. package/packages/shared-skills/skills/visual-qa/SKILL.md +5 -5
  300. package/packages/shared-skills/skills/visual-qa/references/browser-setup.md +4 -2
@@ -82,17 +82,15 @@ Should I proceed with [recommendation], or would you prefer differently?
82
82
 
83
83
  ## Step 0.3: Create Initial Todos
84
84
 
85
- **IMMEDIATELY after understanding the request, create todos:**
85
+ **IMMEDIATELY after understanding the request, create these todos with the session's todo tool (all pending):**
86
86
 
87
87
  \`\`\`
88
- TodoWrite([
89
- {"id": "phase-1", "content": "PHASE 1: Codebase Analysis - launch parallel explore agents", "status": "pending", "priority": "high"},
90
- {"id": "phase-2", "content": "PHASE 2: Build Codemap - map dependencies and impact zones", "status": "pending", "priority": "high"},
91
- {"id": "phase-3", "content": "PHASE 3: Test Assessment - analyze test coverage and verification strategy", "status": "pending", "priority": "high"},
92
- {"id": "phase-4", "content": "PHASE 4: Plan Generation - invoke Plan agent for detailed refactoring plan", "status": "pending", "priority": "high"},
93
- {"id": "phase-5", "content": "PHASE 5: Execute Refactoring - step-by-step with continuous verification", "status": "pending", "priority": "high"},
94
- {"id": "phase-6", "content": "PHASE 6: Final Verification - full test suite and regression check", "status": "pending", "priority": "high"}
95
- ])
88
+ - phase-1: PHASE 1: Codebase Analysis - launch parallel explore agents
89
+ - phase-2: PHASE 2: Build Codemap - map dependencies and impact zones
90
+ - phase-3: PHASE 3: Test Assessment - analyze test coverage and verification strategy
91
+ - phase-4: PHASE 4: Plan Generation - invoke Plan agent for detailed refactoring plan
92
+ - phase-5: PHASE 5: Execute Refactoring - step-by-step with continuous verification
93
+ - phase-6: PHASE 6: Final Verification - full test suite and regression check
96
94
  \`\`\`
97
95
 
98
96
  ---
@@ -155,14 +153,14 @@ While background agents are running, use direct tools:
155
153
 
156
154
  \`\`\`typescript
157
155
  // Find definition(s)
158
- LspGotoDefinition(filePath, line, character) // Where is it defined?
156
+ lsp_goto_definition(filePath, line, character) // Where is it defined?
159
157
 
160
158
  // Find ALL usages across workspace
161
- LspFindReferences(filePath, line, character, includeDeclaration=true)
159
+ lsp_find_references(filePath, line, character, includeDeclaration=true)
162
160
 
163
161
  // Get file structure
164
- LspDocumentSymbols(filePath) // Hierarchical outline
165
- LspWorkspaceSymbols(filePath, query="[target_symbol]") // Search by name
162
+ lsp_symbols(filePath, scope="document") // Hierarchical outline
163
+ lsp_symbols(filePath, scope="workspace", query="[target_symbol]") // Search by name
166
164
 
167
165
  // Get current diagnostics
168
166
  lsp_diagnostics(filePath) // Errors, warnings before we start
@@ -171,8 +169,8 @@ lsp_diagnostics(filePath) // Errors, warnings before we start
171
169
  ### AST-Grep Skill for Pattern Analysis:
172
170
 
173
171
  \`\`\`bash
174
- // Find structural patterns
175
- python3 scripts/ast_grep_helper.py search 'function $NAME($$$) { $$$ }' --lang ts src/
172
+ // Find structural patterns — run this from the ast-grep skill's directory; this skill ships no scripts/
173
+ python3 scripts/ast_grep_helper.py search 'function $NAME($$$) { $$$ }' src/ --lang ts
176
174
 
177
175
  # Preview refactoring first
178
176
  sg --pattern '[old_pattern]' --rewrite '[new_pattern]' --lang ts src/
@@ -181,7 +179,7 @@ sg --pattern '[old_pattern]' --rewrite '[new_pattern]' --lang ts src/
181
179
  ### Grep for Text Patterns:
182
180
 
183
181
  \`\`\`
184
- grep(pattern="[search_term]", path="src/", include="*.ts")
182
+ grep(pattern="[search_term]", path="src/") // narrow to *.ts with the grep tool's file-filter parameter
185
183
  \`\`\`
186
184
 
187
185
  ## 1.3: Collect Background Results
@@ -318,6 +316,11 @@ Which approach do you prefer?
318
316
  - Unit: \`bun test\` / \`npm test\` / \`pytest\` / etc.
319
317
  - Integration: [command if exists]
320
318
  - Type check: \`tsc --noEmit\` / \`pyright\` / etc.
319
+ - Lint: [project's linter command, the one Phase 6.3 runs]
320
+
321
+ ### Baseline (before any change)
322
+ - Pass counts: [X/Y passing per test command above]
323
+ - lsp_diagnostics: [pre-existing diagnostics recorded in Phase 1.2]
321
324
 
322
325
  ### Verification Checkpoints
323
326
  After each refactoring step:
@@ -381,17 +384,14 @@ After receiving plan from Plan agent:
381
384
 
382
385
  ## 4.3: Register Detailed Todos
383
386
 
384
- Convert Plan agent output into granular todos:
387
+ Convert Plan agent output into granular todos with the session's todo tool (each step from the plan becomes a todo, followed by its verify todo):
385
388
 
386
389
  \`\`\`
387
- TodoWrite([
388
- // Each step from the plan becomes a todo
389
- {"id": "refactor-1", "content": "Step 1: [description]", "status": "pending", "priority": "high"},
390
- {"id": "verify-1", "content": "Verify Step 1: run tests", "status": "pending", "priority": "high"},
391
- {"id": "refactor-2", "content": "Step 2: [description]", "status": "pending", "priority": "medium"},
392
- {"id": "verify-2", "content": "Verify Step 2: run tests", "status": "pending", "priority": "medium"},
393
- // ... continue for all steps
394
- ])
390
+ - refactor-1: Step 1: [description]
391
+ - verify-1: Verify Step 1: run tests
392
+ - refactor-2: Step 2: [description]
393
+ - verify-2: Verify Step 2: run tests
394
+ - ... continue for all steps
395
395
  \`\`\`
396
396
 
397
397
  **Mark phase-4 as completed.**
@@ -425,8 +425,8 @@ lsp_rename(filePath, line, character, newName) // Execute rename
425
425
  // Preview first
426
426
  sg --pattern '[pattern]' --rewrite '[rewrite]' --lang ts path/to/file.ts
427
427
 
428
- // If preview looks good, execute
429
- python3 scripts/ast_grep_helper.py replace '[pattern]' '[rewrite]' --lang ts path/to/file.ts --apply
428
+ // If preview looks good, execute (from the ast-grep skill's directory)
429
+ python3 scripts/ast_grep_helper.py replace '[pattern]' '[rewrite]' path/to/file.ts --lang ts --apply
430
430
  \`\`\`
431
431
 
432
432
  **For Structural Changes:**
@@ -519,7 +519,7 @@ bun run build # or npm run build, etc.
519
519
  \`\`\`typescript
520
520
  // Check all changed files
521
521
  for (file of changedFiles) {
522
- lsp_diagnostics(file) // Must all be clean
522
+ lsp_diagnostics(file) // Must be clean or same as the Phase 1 baseline: zero new diagnostics
523
523
  }
524
524
  \`\`\`
525
525
 
@@ -585,8 +585,8 @@ You already know these tools. Use them intelligently:
585
585
 
586
586
  ## LSP Tools
587
587
  Leverage LSP tools for precision analysis. Key patterns:
588
- - **Understand before changing**: \`LspGotoDefinition\` to grasp context
589
- - **Impact analysis**: \`LspFindReferences\` to map all usages before modification
588
+ - **Understand before changing**: \`lsp_goto_definition\` to grasp context
589
+ - **Impact analysis**: \`lsp_find_references\` to map all usages before modification
590
590
  - **Safe refactoring**: \`lsp_prepare_rename\` → \`lsp_rename\` for symbol renames
591
591
  - **Continuous verification**: \`lsp_diagnostics\` after every change
592
592
 
@@ -650,17 +650,17 @@ Then choose the path:
650
650
  - **Team path (5.1-T)**: when the plan recommends \`team\` AND \`file_independent_steps >= 3\`. Members execute in parallel, Lead orchestrates, a \`deep-high\` verifier lives outside the team.
651
651
  - **Legacy path (5.1-L)**: otherwise. Use the original 5.1 / 5.2 / 5.3 flow from above.
652
652
 
653
- Record the chosen path in the TodoWrite list.
653
+ Record the chosen path in the todo list.
654
654
 
655
655
  ## Phase 5.1-T: \`refactor-squad\` team execution
656
656
 
657
657
  **Precondition checks** (fail hard if any step fails):
658
658
 
659
- 1. Load the \`team-mode\` skill via the \`skill\` tool for lifecycle, message protocol, and limits.
659
+ 1. When the session lists the \`team-mode\` skill, load it for lifecycle, message protocol, and limits.
660
660
  2. Call \`team_list\` and verify no active \`refactor-squad\` run exists; if one does, shutdown + delete the orphan before proceeding.
661
- 3. If \`~/.omo/teams/refactor-squad/config.json\` is missing, write it using the spec below.
661
+ 3. If the project-level spec \`.omo/teams/refactor-squad/config.json\` (under the project root) is missing, write it using the spec below.
662
662
 
663
- **Team spec** (\`~/.omo/teams/refactor-squad/config.json\`):
663
+ **Team spec** (\`<project root>/.omo/teams/refactor-squad/config.json\`):
664
664
 
665
665
  \`\`\`json
666
666
  {
@@ -724,7 +724,7 @@ While any team task is \`pending | claimed | in_progress\`:
724
724
  prompt=<files touched + verify-spec commands + instruction to return "PASS" or "FAIL:<failing test + specific error + suggested revert hunks>">
725
725
  )
726
726
  \`\`\`
727
- If \`deep\` is unavailable, fall back to \`category="unspecified-high"\`. Do not create a commit checkpoint until the verifier returns PASS.
727
+ If \`deep-high\` is unavailable, fall back to \`category="unspecified-high"\`. Do not create a commit checkpoint until the verifier returns PASS.
728
728
  - On a verifier PASS: make the commit checkpoint for that step (see original 5.3). Proceed.
729
729
  - On a verifier FAIL: Lead decides:
730
730
  - **Retry with fix hint**: \`team_task_update(status=pending)\` on the original step + \`team_send_message(teamRunId=<id>, to=<original member>, summary="retry", body=<specific failure from verifier>)\`. Runtime reassigns.
@@ -741,7 +741,7 @@ If Phase 5 used the team path, dismantle \`refactor-squad\` BEFORE producing the
741
741
  2. \`team_delete(teamRunId=<id>)\`.
742
742
  3. \`team_list\` to confirm no residual \`refactor-squad\` run.
743
743
 
744
- The \`~/.omo/teams/refactor-squad/config.json\` declaration stays on disk; next session reuses it.
744
+ The \`.omo/teams/refactor-squad/config.json\` declaration stays on disk in the project; next session reuses it.
745
745
 
746
746
  Append to the 6.6 summary a "Dispatch path" line and, when team path was used, team metrics (teamRunId, tasks created, verifier runs, team lifetime).
747
747
 
@@ -72,12 +72,12 @@ The agent looks for these ten categories. The first three are stylistic, the nex
72
72
  10. **Oversized modules** — any source file exceeding **250 pure LOC** (non-blank, non-comment lines). This is an architectural defect, not a style preference. Measure: `awk '!/^[[:space:]]*$/ && !/^[[:space:]]*(#|\/\/)/' <file> | wc -l`.
73
73
 
74
74
  **When found, do NOT just flag it. Execute a full modular refactoring:**
75
- 1. Run `check-no-excuse-rules.py` recursively on scope to list all violations.
75
+ 1. List every oversized file in scope: run the `awk` measure above on each source file. For `.py` files you may instead run the `programming` skill's Python checker (`uv run <programming skill dir>/scripts/python/check-no-excuse-rules.py <paths>`, rule `oversized-module`); it scans only `.py` files, so it never covers another language.
76
76
  2. For each oversized file, identify distinct responsibilities (single-responsibility principle).
77
77
  3. Plan the split: name each new file after the concept it owns (never `utils.py`, `helpers.py`, `common.py`, `part_1.py`).
78
78
  4. Present the split plan to the user before executing.
79
79
  5. Extract into clean modules with explicit `__init__.py` re-exports (re-exports ONLY, no logic in `__init__.py`).
80
- 6. Verify: run `check-no-excuse-rules.py` again — every file must be ≤250 pure LOC. Run tests, typecheck, lint.
80
+ 6. Verify: re-measure exactly as in step 1 — every file must be ≤250 pure LOC. Run tests, typecheck, lint.
81
81
 
82
82
  **Forbidden escapes**:
83
83
  - Counting blanks/comments toward budget.
@@ -86,7 +86,7 @@ The agent looks for these ten categories. The first three are stylistic, the nex
86
86
  - "It's generated" — only valid if the file lives in a build output directory.
87
87
  - "230 LOC, close enough" — a 230-LOC file about to grow is already over. Split now.
88
88
 
89
- KEEP: genuinely self-contained single-responsibility scripts (e.g., a standalone CLI checker). Opt out with `# noqa: SIZE_OK` in first 5 lines and a comment explaining why.
89
+ KEEP: genuinely self-contained single-responsibility scripts (e.g., a standalone CLI checker). Opt out with the language's SIZE_OK marker in the first 10 lines (`# noqa: SIZE_OK` in Python, the form the Python checker reads; `// allow: SIZE_OK` in `//`-comment languages) and a comment explaining why.
90
90
 
91
91
  ---
92
92
 
@@ -106,7 +106,7 @@ A pass is complete only when all applicable gates are green. Skip gates that are
106
106
 
107
107
  ## Process
108
108
 
109
- ### Phase 0: Plan with TodoWrite
109
+ ### Phase 0: Plan with the todo tool
110
110
 
111
111
  Create todos for all phases below. Mark `in_progress` one at a time.
112
112
 
@@ -246,8 +246,8 @@ If any gate fails or any checklist item flips:
246
246
 
247
247
  1. Identify the specific change that caused the failure.
248
248
  2. Explain why it broke things.
249
- 3. `git checkout` the affected file (or use `git diff` + targeted `Edit` to revert just the problematic hunk).
250
- 4. If genuine slop remains after revert, edit the file directly yourself — in parallel per file via multiple Edit calls — applying only the changes you can prove are safe.
249
+ 3. `git checkout` the affected file (or use `git diff` + targeted `edit` to revert just the problematic hunk).
250
+ 4. If genuine slop remains after revert, edit the file directly yourself — in parallel per file via multiple `edit` calls — applying only the changes you can prove are safe.
251
251
  5. Re-run the failing gate and re-walk the checklist for the affected file.
252
252
  6. Repeat until all gates green AND checklist clean.
253
253
 
@@ -121,7 +121,7 @@ For GOAL, CONSTRAINTS, BACKGROUND - review the full conversation history. The us
121
121
 
122
122
  ## Phase 1: Manual QA (you run it)
123
123
 
124
- You are the QA lane. Do not delegate hands-on QA to a sub-agent: the orchestrator owns the real-surface proof, exactly as the ulw-loop final gate records `manualQa` under the main session.
124
+ You are the QA lane. Do not delegate hands-on QA to a sub-agent: the orchestrator owns the real-surface proof, exactly as the ulw-loop final gate records `manualQa` under the main session. One exception: inside a `ulw-execute` run, whose root never runs QA itself, dispatch these scenarios to one QA worker and build the matrix from the artifacts it captures.
125
125
 
126
126
  1. **Reuse first.** If this session already captured real-surface evidence for the FINAL tree (an ultrawork or ulw-loop evidence directory, a `visual-qa` verdict on this same build), consume it as QA rows instead of re-running. A fix committed after a capture stales that capture: re-run the rows it covered.
127
127
  2. **Pick the channel that faithfully exercises the surface** and capture the artifact:
@@ -240,7 +240,7 @@ Store the lane verdicts independently:
240
240
  | Manual QA (Phase 1) | PASS/FAIL | rows, artifact paths |
241
241
  | Gate review | pending/APPROVE/REJECT/INCONCLUSIVE | - |
242
242
 
243
- If the reviewer stays silent after the reliability followup, record the lane INCONCLUSIVE and respawn one smaller reviewer scoped to the same inputs. If that retry also ends without a verdict, close the still-running agent if safe, keep the lane INCONCLUSIVE, and emit the final result naming the incomplete lane. Do not spin in repeated wait/followup cycles, and do not use a queued followup as a cancellation.
243
+ If the reviewer ends without a verdict (it completed without one, answered ack-only to one follow-up, or reported `BLOCKED:`), record the lane INCONCLUSIVE and respawn one smaller reviewer scoped to the same inputs. A reviewer that is still running is alive, not silent. If that retry also ends without a verdict, close the still-running agent if safe, keep the lane INCONCLUSIVE, and emit the final result naming the incomplete lane. Do not spin in repeated wait/followup cycles, and do not use a queued followup as a cancellation.
244
244
 
245
245
  After the lane reaches a terminal state and before delivering the verdict, tear down the review worktree: run `git worktree unlock <path>` followed by `git worktree remove <path>`. The reviewer runs inside that worktree, so removing it earlier destroys its working directory; a crashed review leaves the locked tree as a recoverable marker for manual cleanup.
246
246
 
@@ -15,14 +15,14 @@ Web access for the hosts the user's browser cannot open (WAF / 403 / Cloudflare
15
15
  User request
16
16
  |
17
17
  +- a page the user's browser can open (read, click, screenshot, QA, login) NOT this skill (browser skill, attached engine)
18
- +- simple search query ------------------------------ NOT this skill (use web-search)
18
+ +- simple search query ------------------------------ NOT this skill (use web search)
19
19
  |
20
20
  +- URL blocked / 403 / Cloudflare / WAF ------------- TIER 1 insane-search
21
21
  +- YouTube/Vimeo/TikTok subtitles or metadata ------- TIER 1 insane-search (yt-dlp)
22
22
  +- archive snapshot of a dead or changed page ------- TIER 1 insane-search (surrogates, provenance-tagged)
23
23
  |
24
24
  +- Chinese platform (xhs/douyin/weibo/bilibili/v2ex/wechat) TIER 1.5 agent-reach
25
- +- podcast transcript / stock forum ----------------- TIER 1.5 agent-reach
25
+ +- podcast transcript ------------------------------- TIER 1.5 agent-reach
26
26
  +- Twitter feed / LinkedIn profile / GitHub via CLI - TIER 1.5 agent-reach
27
27
  |
28
28
  +- Tier 1/1.5 returned empty or partial ------------- TIER 2 2a owned engine (stealth)
@@ -71,8 +71,8 @@ The full engine harness (rules R1-R7, the Phase 0 official-API index, the no-sit
71
71
  | search | Exa AI | [references/agent-reach/search.md](references/agent-reach/search.md) |
72
72
 
73
73
  ```bash
74
- mcporter call 'douyin.parse_douyin_video_info(url: "<URL>")' # douyin, zero-config
75
- curl -s "https://r.jina.ai/https://weibo.com/<uid>/<pid>" # weibo via Jina
74
+ mcporter call 'douyin.parse_douyin_video_info(share_link: "<URL>")' # douyin, zero-config
75
+ curl -s -H "Authorization: Bearer ${JINA_API_KEY}" "https://r.jina.ai/https://weibo.com/<uid>/<pid>" # weibo via Jina (key required)
76
76
  yt-dlp --dump-json "<bilibili-url>" # Bilibili (overseas: add --cookies-from-browser)
77
77
  curl -s "https://www.v2ex.com/api/topics/hot.json" # V2EX public API
78
78
  ```
@@ -115,17 +115,19 @@ When the blocked flow needs the user's account, drive the browser they are alrea
115
115
 
116
116
  ### Cookie login (cross-platform)
117
117
 
118
- `scripts/extract_cookies.py` reads cookies from a local Chromium-family or Firefox-family browser and optionally injects them into the running CDP session. It resolves browser profile paths and decrypts cookie values per-OS (macOS Keychain, Linux libsecret, Windows DPAPI):
118
+ A login the user holds goes through Tier 2b, never through their cookies: the `browser` skill forbids copying a session out of the user's real browser profile (`references/owned-engine/network.md`, Cookies).
119
+
120
+ `scripts/extract_cookies.py` reads cookies from the default profile store of a local Chromium-family or Firefox-family browser and optionally injects them over CDP. It resolves browser profile paths and decrypts cookie values per-OS (macOS Keychain, Linux libsecret, Windows DPAPI). Because it always reads that default store, run it only where that browser profile is not the user's live profile (for example a dedicated automation account whose browser the task owns); on the user's own machine it would copy their session, so use Tier 2b instead.
119
121
 
120
122
  ```bash
121
123
  # Extract cookies to a file:
122
124
  mkdir -p ~/.local/state/omo-cookies
123
125
  python3 -B scripts/extract_cookies.py --browser chrome --domain youtube.com --output ~/.local/state/omo-cookies/youtube.cookies.json
124
- # Extract and inject into the running CDP session:
126
+ # Extract and inject over CDP (needs a browser started with --remote-debugging-port=9242; connectPipe opens no port):
125
127
  python3 -B scripts/extract_cookies.py --browser chrome --domain youtube.com --inject --cdp 9242
126
128
  ```
127
129
 
128
- Cookie export files are written with owner-only `0600` permissions. Do not place live auth cookies in shared temp directories or commit them to a repo. Cookie injection sends values to CDP over stdin rather than argv. Cookies apply on next navigation — reload after injecting. Google services use fingerprint-bound tokens that may not transfer across browser profiles. Limits in [references/chrome-stealth.md](references/chrome-stealth.md).
130
+ For a Tier 2a owned page, load the exported file and call `omowright.injectCookies(page, cookies)` instead (see [references/chrome-stealth.md](references/chrome-stealth.md)). Cookie export files are written with owner-only `0600` permissions. Do not place live auth cookies in shared temp directories or commit them to a repo. Cookie injection sends values to CDP over stdin rather than argv. Cookies apply on next navigation — reload after injecting. Google services use fingerprint-bound tokens that may not transfer across browser profiles. Limits in [references/chrome-stealth.md](references/chrome-stealth.md).
129
131
 
130
132
  ## Reference docs
131
133
 
@@ -139,7 +141,8 @@ Cookie export files are written with owner-only `0600` permissions. Do not place
139
141
 
140
142
  ```bash
141
143
  # agent-reach auth: set the channel-specific env vars from each tool's docs only if you have access
142
- # insane-search needs no env vars — it auto-installs deps on first run
144
+ # insane-search: JINA_API_KEY only for the Jina Reader route (the engine skips that surrogate without it)
145
+ # insane-search Python deps: the install one-liner in references/insane-search/README.md
143
146
  ```
144
147
 
145
148
  ## Anti-patterns
@@ -61,7 +61,7 @@ is a regression, not an upgrade:
61
61
  - **Module split of the fetch chain** — `curl_probe` / `referers` / `url_transforms` /
62
62
  `waf_detector` / `validators` / `executor` / `summary` as separate modules rather than
63
63
  one monolith.
64
- - **The Python test suite** under `engine/tests/` with its HTML/JSON fixtures.
64
+ - **The Python test suite** under `engine/tests/` with its HTML/JSON fixtures (source checkout only: the skill copy filter drops `engine/tests/` from every shipped edition).
65
65
  - **De-personalization** — no personal absolute paths, no personal auth token literals,
66
66
  no personal browser choice; enforced by `depersonalization-gate.test.ts`.
67
67
  - **Skill-level layering** — the engine is Tier 1 under a router that also owns Tier 1.5
@@ -115,7 +115,7 @@ Any future upstream sync preserves BOTH sides. Concretely:
115
115
 
116
116
  ## OVERVIEW
117
117
 
118
- A 17-module Python package embedded in the `ultimate-browsing` skill: a site-agnostic fetch chain that escalates from a cheap curl probe to a real browser, with declarative WAF and surrogate registries. Not "optional scripts" — it has its own CLI entry (`python3 -B -m engine URL`; `-B` keeps bytecode caches out of a signed app bundle, #11373), two YAML config schemas, a 4-file test suite, and a standalone CI guard. Package exports (`__init__.py`): `fetch`, `FetchResult`, `Attempt`, `Verdict`, `ValidationResult`, `validate`, `CHALLENGE_MARKERS`, `detect`, `TRANSFORMS`, `apply_transform`.
118
+ A 13-file Python package (`__init__.py`, `__main__.py` and 11 modules) embedded in the `ultimate-browsing` skill: a site-agnostic fetch chain that escalates from a cheap curl probe to a real browser, with declarative WAF and surrogate registries. Not "optional scripts" — it has its own CLI entry (`python3 -B -m engine URL`; `-B` keeps bytecode caches out of a signed app bundle, #11373), two YAML config schemas, a 6-file test suite (source checkout only), and a standalone CI guard. Package exports (`__init__.py`): `fetch`, `FetchResult`, `Attempt`, `Verdict`, `ValidationResult`, `validate`, `CHALLENGE_MARKERS`, `detect`, `TRANSFORMS`, `apply_transform`.
119
119
 
120
120
  ## THE NO-SITE-NAME RULE (enforced in CI)
121
121
 
@@ -170,11 +170,11 @@ python3 -B -m engine URL [--selector S] [--device auto|desktop|mobile]
170
170
 
171
171
  ## TESTS
172
172
 
173
- `tests/` — `test_surrogate.py` (staleness, proxy gating, short-circuit), `test_surrogate_validators.py`, `test_fetch_chain.py`, `test_playwright_templates.py`, plus HTML/JSON fixtures under `tests/fixtures/`.
173
+ `tests/` (source checkout only; not shipped with the skill) — `test_surrogate.py` (staleness, proxy gating, short-circuit), `test_surrogate_validators.py`, `test_fetch_chain.py`, `test_playwright_templates.py`, `test_playwright_stealth.py`, `test_executor_timeout.py`, plus HTML/JSON fixtures under `tests/fixtures/`.
174
174
 
175
175
  ## NOTES
176
176
 
177
177
  - `summary.py` emits an **R7 API-first hint** after >=3 challenge verdicts against a known WAF profile: look for `/api/`, `/graphql`, or `.json` endpoints, which usually carry weaker WAF protection than the HTML surface.
178
178
  - `templates/` holds the Playwright JS templates (`playwright_real_chrome.js`, `playwright_mobile_chrome.js`) the executor drives.
179
179
  - `url_transforms.py` transforms stay domain-agnostic (`mobile_subdomain`, `am_prefix`, `drop_www`).
180
- - Parent: [`packages/shared-skills/AGENTS.md`](../../../AGENTS.md).
180
+ - Parent (source checkout only; not shipped with the skill): `packages/shared-skills/AGENTS.md`.
@@ -25,13 +25,13 @@
25
25
  mcporter call 'exa.web_search_exa(query: "query", numResults: 5)'
26
26
 
27
27
  # 通用网页阅读
28
- curl -s "https://r.jina.ai/URL"
28
+ curl -s -H "Authorization: Bearer ${JINA_API_KEY}" "https://r.jina.ai/URL"
29
29
 
30
30
  # GitHub 搜索
31
31
  gh search repos "query" --sort stars --limit 10
32
32
 
33
33
  # Twitter 搜索
34
- twitter search "query" --limit 10
34
+ twitter search "query" -n 10
35
35
 
36
36
  # YouTube/B站字幕
37
37
  yt-dlp --write-sub --skip-download -o "/tmp/%(id)s" "URL"
@@ -25,5 +25,5 @@ mcporter call 'linkedin-scraper.search_jobs(keyword: "software engineer", limit:
25
25
  如果 MCP 不可用,可以用 Jina Reader:
26
26
 
27
27
  ```bash
28
- curl -s "https://r.jina.ai/https://linkedin.com/in/username"
28
+ curl -s -H "Authorization: Bearer ${JINA_API_KEY}" "https://r.jina.ai/https://linkedin.com/in/username"
29
29
  ```
@@ -105,7 +105,7 @@ twitter likes
105
105
 
106
106
  ```bash
107
107
  # 使用 Jina Reader 读取
108
- curl -s "https://r.jina.ai/https://weibo.com/USER_ID/POST_ID"
108
+ curl -s -H "Authorization: Bearer ${JINA_API_KEY}" "https://r.jina.ai/https://weibo.com/USER_ID/POST_ID"
109
109
  ```
110
110
 
111
111
  > 微博主要通过网页抓取,推荐使用通用网页读取方式。
@@ -6,13 +6,13 @@
6
6
 
7
7
  ```bash
8
8
  # 读取任意网页内容
9
- curl -s "https://r.jina.ai/URL"
9
+ curl -s -H "Authorization: Bearer ${JINA_API_KEY}" "https://r.jina.ai/URL"
10
10
 
11
11
  # 示例
12
- curl -s "https://r.jina.ai/https://example.com/article"
12
+ curl -s -H "Authorization: Bearer ${JINA_API_KEY}" "https://r.jina.ai/https://example.com/article"
13
13
  ```
14
14
 
15
- **适用场景**: 大多数网页可以直接用 Jina Reader 读取。
15
+ **适用场景**: 大多数网页可以直接用 Jina Reader 读取。匿名调用返回 401,必须带 `JINA_API_KEY`(见 [../insane-search/jina.md](../insane-search/jina.md))。
16
16
 
17
17
  ## Web Reader (MCP)
18
18
 
@@ -69,7 +69,7 @@ for e in feedparser.parse('FEED_URL').entries[:5]:
69
69
 
70
70
  | 场景 | 推荐工具 |
71
71
  |-----|---------|
72
- | 通用网页 | Jina Reader (`curl r.jina.ai`) |
72
+ | 通用网页 | Jina Reader (`curl r.jina.ai`,需 `JINA_API_KEY`) |
73
73
  | 需要图片/格式控制 | web-reader MCP |
74
74
  | 微信公众号 | Exa (搜索+阅读) / Camoufox (可选阅读) |
75
75
  | RSS 订阅 | feedparser |
@@ -29,7 +29,8 @@ page that only a signed-in user can reach belongs to the attached engine, not to
29
29
 
30
30
  ## Cookie login limits
31
31
 
32
- `scripts/extract_cookies.py` still exports cookies from a local browser; inject them with
32
+ `scripts/extract_cookies.py` still exports cookies from a local browser's default profile store (run it only where
33
+ that profile is not the user's live one; see `../SKILL.md`, Cookie login); inject them with
33
34
  `injectCookies(page, cookies)` into an **owned** profile. It sanitizes the set (drops expired
34
35
  entries, keeps host-prefixed cookies secure and root-scoped). Limits that do not change:
35
36
 
@@ -17,7 +17,7 @@
17
17
  2. 즉시 다음을 실행:
18
18
  ```bash
19
19
  python3 -B -m engine "<URL>" [--selector "<CSS>"] [--device auto|desktop|mobile] [--trace] \
20
- [--no-retry] [--no-extract]
20
+ [--timeout 25] [--max-attempts 12] [--no-playwright] [--allow-proxy] [--json]
21
21
  ```
22
22
  3. 종료코드 0(ok) 또는 1(fail) 받은 뒤 판단. trace를 먼저 읽고 재시도 결정.
23
23
  4. 실패 시에만 `--trace --json`으로 재호출해서 원인 진단 후 `--device` 또는 `user_hint` 조정.
@@ -46,7 +46,7 @@
46
46
  - Claude는 그 사이 foreground에서 MCP Playwright 정찰 루트를 진행
47
47
  - engine이 먼저 성공해도 좋고, MCP 정찰로 얻은 API가 먼저 성공해도 좋음. 빠른 쪽 결과 채택
48
48
 
49
- **MCP 정찰 루트**:
49
+ **MCP 정찰 루트** (Playwright MCP가 로드된 세션 전용. 없으면 the `browser` skill's `references/owned-engine/network.md` 로 같은 XHR/fetch 목록을 모은다):
50
50
  1. `mcp__playwright__browser_navigate` → 대상 페이지 로드 (브라우저 렌더링)
51
51
  2. `mcp__playwright__browser_network_requests` → XHR/fetch 호출 목록 수집, `/api/`·`/graphql`·`\.json` 필터로 내부 엔드포인트 식별
52
52
  3. 식별된 JSON API URL을 `python3 -B -m engine <API_URL>`로 재호출 (백그라운드 engine과는 별개 호출). 대부분 API 레이어는 페이지 HTML보다 WAF 보호가 얕아 curl_cffi로 바로 수집됨
@@ -124,7 +124,7 @@
124
124
  ### 단일 진입점
125
125
 
126
126
  ```python
127
- from insane_search.engine import fetch
127
+ from engine import fetch # 스킬 디렉터리에서 실행 (패키지는 engine/)
128
128
 
129
129
  result = fetch(
130
130
  "https://example.com/path",
@@ -136,15 +136,13 @@ result = fetch(
136
136
 
137
137
  if result.ok:
138
138
  print(result.verdict) # strong_ok | weak_ok
139
- html = result.content # raw body — 단, content-rescue가 발동한 경우 구조 텍스트
140
- # v0.10.0 content-rescue: PDF 응답은 pypdf 추출 텍스트, visible text가 얇은
141
- # SPA 셸은 JSON-LD articleBody / 렌더된 innerText로 대체될 수 있다.
142
- # result.extraction_source로 판별: "raw"(원문 그대로) | pdf | json_ld | *+inner_text.
143
- # 일반 HTML 성공은 항상 raw. 끄기: enable_extraction=False / --no-extract.
144
- # 429/502/503/504는 probe에서 백오프 재시도(Retry-After 반영, 총 10초 캡);
145
- # 끄기: enable_retry=False / --no-retry.
139
+ html = result.content # raw body (내장 추출/변환 없음)
140
+ # 필드: ok, content, final_url, verdict, profile_used, trace, summary,
141
+ # provenance, snapshot_timestamp, trust (engine/result_schema.py FetchResult).
142
+ # 업스트림 신버전의 content-rescue(PDF/JSON-LD 추출)와 Retry-After 백오프는
143
+ # 이 스냅샷에 없다 — engine/AGENTS.md의 WANT 목록. grid 시도 사이에는 짧은 jitter만 둔다.
146
144
  else:
147
- # Phase 3 수동 개입 (Playwright MCP) 필요 — result.trace로 원인 진단
145
+ # result.trace로 원인 진단. 브라우저가 필요하면 아래 "needs_js_exec only 폴백 규칙"을 따른다
148
146
  pass
149
147
  ```
150
148
 
@@ -191,16 +189,17 @@ report — FetchResult(ok, verdict, profile_used, trace, summary)
191
189
  | 태그 | 실행기 | 언제 |
192
190
  |------|--------|------|
193
191
  | `needs_real_tls_stack` + `needs_js_exec` | `playwright_real_chrome.js` (로컬 Node) | Akamai Bot Manager 등 — Chromium 번들 TLS는 탐지됨 |
194
- | `needs_js_exec` only | Playwright MCP (`mcp__playwright__*`) | Cloudflare 기본 방어 등 |
192
+ | `needs_js_exec` only | 에이전트가 직접 띄우는 브라우저 (엔진은 stub만 반환, 아래 규칙) | Cloudflare 기본 방어 등 |
195
193
  | `needs_mobile_context` (+ real_tls) | `playwright_mobile_chrome.js` | 모바일 디바이스 에뮬레이션 필요 |
196
194
 
197
195
  자세한 선택 기준: [playwright.md](playwright.md).
198
196
 
199
- ### Playwright MCP 호출 규칙
197
+ ### `needs_js_exec only` 폴백 규칙
200
198
 
201
- `fetch_chain`의 `needs_js_exec only` 케이스는 **Claude 세션에서 MCP 도구를 직접 호출**해야 한다. subprocess 경로 없음. 즉:
199
+ `fetch_chain`의 `needs_js_exec only` 케이스는 subprocess 경로가 없어 **에이전트가 직접 브라우저를 다뤄야** 한다. 즉:
202
200
  1. `result.summary`에 "Playwright MCP must be invoked from the Claude session"이 포함되면
203
- 2. `mcp__playwright__browser_navigate` → `browser_wait_for` → `browser_snapshot` 흐름으로 Claude가 직접 처리
201
+ 2. 엔진 문구가 MCP를 가리켜도 기본 경로는 Tier 2a owned engine이다: js eval에서 omowright `connectPipe`, 스텔스는 `connectCloakProfile` (`../../SKILL.md` Tier 2, the `browser` skill's `references/owned-engine/`)
202
+ 3. `mcp__playwright__*` 도구는 그 MCP가 이미 세션에 연결된 경우에만 쓴다. 없으면 새로 설치하지 않는다 ([playwright.md](playwright.md))
204
203
 
205
204
  ## Phase 2 — 수동 개입 (옵션)
206
205
 
@@ -233,7 +232,7 @@ Tier 1 추출 폴백 전용이며 에이전트가 직접 브라우저를 다루
233
232
 
234
233
  ```bash
235
234
  # 범용 웹 (Jina Reader — 일반 HTML만, WAF 사이트엔 무효)
236
- curl -s "https://r.jina.ai/{URL}"
235
+ curl -s -H "Authorization: Bearer ${JINA_API_KEY}" "https://r.jina.ai/{URL}"
237
236
 
238
237
  # yt-dlp — 1,858 사이트 미디어 메타데이터
239
238
  yt-dlp --dump-json "URL"
@@ -290,7 +289,7 @@ yt-dlp --write-sub --write-auto-sub --sub-lang "en,ko" --skip-download -o "/tmp/
290
289
  | 파일 | 언제 읽는가 | 무엇을 다루는가 |
291
290
  |------|-------------|-----------------|
292
291
  | [`tls-impersonate.md`](tls-impersonate.md) | curl_cffi 격자가 전부 `challenge`/`blocked`로 끝날 때, 새 impersonate 타겟을 `waf_profiles.yaml`에 추가할 때 | curl_cffi로 Safari/Chrome/Firefox TLS(JA3/JA4) 지문 복제하는 방법, WAF(Akamai/Cloudflare/F5 등)별 최적 타겟 조합, 임퍼소네이션 타겟 버전 목록, `tls_impersonate_avoid`의 실증 근거 |
293
- | [`playwright.md`](playwright.md) | engine이 Playwright fallback으로 넘어가는데 MCP/Local Chrome 중 어디로 갈지 확인 필요할 때 | Approach 1 (`mcp__playwright__*` — Cloudflare급 챌린지), Approach 2 (Local Node + `channel:'chrome'` + stealth — Akamai Bot Manager급), 템플릿 파라미터 규격 |
292
+ | [`playwright.md`](playwright.md) | engine이 Playwright fallback으로 넘어가는데 MCP/Local Chrome 중 어디로 갈지 확인 필요할 때 | Approach 1 (이미 연결된 경우의 `mcp__playwright__*`, 없으면 omowright owned engine — Cloudflare급 챌린지), Approach 2 (Local Node + `channel:'chrome'` + stealth — Akamai Bot Manager급), 템플릿 파라미터 규격 |
294
293
  | [`fallback.md`](fallback.md) | `verdict`가 애매하거나 Phase 전환 타이밍 결정 필요할 때 | engine의 Phase 0→1→2→3 에스컬레이션 원칙, 응답 성공/실패 판정 기준 세부, 각 Phase 종료 조건 |
295
294
  | [`metadata.md`](metadata.md) | 본문 전체를 못 가져왔지만 제목·요약·가격·저자 같은 핵심만이라도 필요할 때 | OGP 메타 태그, JSON-LD (Schema.org), Twitter Card 파싱, 구조화 데이터 추출 패턴 |
296
295
 
@@ -298,7 +297,7 @@ yt-dlp --write-sub --write-auto-sub --sub-lang "en,ko" --skip-download -o "/tmp/
298
297
 
299
298
  | 파일 | 언제 읽는가 | 무엇을 다루는가 |
300
299
  |------|-------------|-----------------|
301
- | [`jina.md`](jina.md) | WAF 없는 일반 웹(블로그·뉴스·Wiki)의 깨끗한 마크다운 추출 필요할 때 | `r.jina.ai/URL` 한 줄로 Puppeteer 기반 JS SPA 렌더링, 마크다운 변환, 무료 500 RPM, API 키 불필요 |
300
+ | [`jina.md`](jina.md) | WAF 없는 일반 웹(블로그·뉴스·Wiki)의 깨끗한 마크다운 추출 필요할 때 | `r.jina.ai/URL` + `JINA_API_KEY` Bearer 헤더(익명 호출은 401)로 Puppeteer 기반 JS SPA 렌더링, 마크다운 변환 |
302
301
  | [`cache-archive.md`](cache-archive.md) | 원본 사이트가 차단됐지만 과거 스냅샷으로라도 접근 필요할 때 | Wayback Machine CDX API, archive.today, AMP Cache (Google Cache는 2024-07 종료됨) |
303
302
  | [`rss.md`](rss.md) | 뉴스·블로그·커뮤니티의 시계열 업데이트를 구조화해 받고 싶을 때 | RSS/Atom 자동 발견, 피드 파싱, 인증 불필요 — 가장 깔끔한 시계열 데이터 소스 |
304
303
 
@@ -23,9 +23,12 @@
23
23
 
24
24
  ## Phase 1: 경량 프로브 (병렬)
25
25
 
26
+ > **R1 ([README.md](README.md))**: 차단된 URL에는 WebFetch나 즉흥 curl을 쓰지 않는다. `python3 -B -m engine "<URL>"`이
27
+ > 아래 Phase 1-3(curl_cffi 프로브, Referer/변환/디바이스 격자, 서로게이트, Playwright 폴백)을 실행한다.
28
+ > 이 문서는 `--trace` 출력을 읽기 위한 단계 설명이다.
29
+
26
30
  **먼저 시도** (동시):
27
- - WebFetch (Claude 내장)
28
- - Jina Reader (기본 / JSON / SPA 모드)
31
+ - Jina Reader (기본 / JSON / SPA 모드, `JINA_API_KEY` 있을 때만)
29
32
  - curl Chrome Desktop UA
30
33
 
31
34
  **아직 성공 없으면 추가 시도**:
@@ -34,7 +37,6 @@
34
37
  - URL 변형 시도: `.json`, `/rss`, `/feed`
35
38
 
36
39
  **사이드카** (1차와 동시, low-trust):
37
- - Google AMP 캐시
38
40
  - archive.today
39
41
  - Wayback Machine
40
42
  → **원본이 하나라도 성공하면 사이드카는 참고만.** 전부 실패 시에만 사이드카 채택 (provenance 태깅 필수)
@@ -90,7 +92,7 @@ for target in TARGETS:
90
92
  session = requests.Session(impersonate=target)
91
93
  session.headers.update(HEADERS)
92
94
  resp = session.get("{URL}", timeout=20)
93
- if resp.status_code == 200 and len(resp.text) > 300:
95
+ if resp.status_code == 200 and len(resp.text) >= 3072 and not any(m in resp.text for m in ("Access Denied", "Just a moment...", "DataDome", "sec-if-cpt-container")):
94
96
  # 성공 — JSON-LD도 같이 추출
95
97
  break
96
98
  except:
@@ -103,7 +105,7 @@ for target in TARGETS:
103
105
 
104
106
  ---
105
107
 
106
- ## Phase 3: Playwright MCP (브라우저)
108
+ ## Phase 3: 브라우저 (owned engine, 또는 이미 연결된 Playwright MCP)
107
109
 
108
110
  **조건**: Phase 2도 실패 또는 JS 챌린지/CAPTCHA 감지
109
111
 
@@ -114,7 +116,9 @@ browser_evaluate → () => document.body.innerText (Light Mode — 먼저)
114
116
  필요 시 browser_snapshot → 접근성 트리 전체
115
117
  ```
116
118
 
117
- **API 발견**: `browser_network_requests`로 숨은 JSON API를 찾으면 이후 curl_cffi로 재사용 가능.
119
+ 위 흐름은 Playwright MCP가 이미 세션에 연결된 경우의 도구 이름이다. 없으면 같은 단계를 Tier 2a owned engine(js eval의 omowright `connectPipe` / `connectCloakProfile`)으로 실행한다 — [README.md](README.md) "`needs_js_exec only` 폴백 규칙".
120
+
121
+ **API 발견**: `browser_network_requests`(MCP) 또는 owned engine의 `createNetworkSnoop`(the `browser` skill's `references/owned-engine/network.md`)로 숨은 JSON API를 찾으면 이후 curl_cffi로 재사용 가능.
118
122
 
119
123
  상세: [playwright.md](playwright.md)
120
124