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
@@ -96,12 +96,12 @@ The agent looks for these ten categories. The first three are stylistic, the nex
96
96
  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`.
97
97
 
98
98
  **When found, do NOT just flag it. Execute a full modular refactoring:**
99
- 1. Run `check-no-excuse-rules.py` recursively on scope to list all violations.
99
+ 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.
100
100
  2. For each oversized file, identify distinct responsibilities (single-responsibility principle).
101
101
  3. Plan the split: name each new file after the concept it owns (never `utils.py`, `helpers.py`, `common.py`, `part_1.py`).
102
102
  4. Present the split plan to the user before executing.
103
103
  5. Extract into clean modules with explicit `__init__.py` re-exports (re-exports ONLY, no logic in `__init__.py`).
104
- 6. Verify: run `check-no-excuse-rules.py` again — every file must be ≤250 pure LOC. Run tests, typecheck, lint.
104
+ 6. Verify: re-measure exactly as in step 1 — every file must be ≤250 pure LOC. Run tests, typecheck, lint.
105
105
 
106
106
  **Forbidden escapes**:
107
107
  - Counting blanks/comments toward budget.
@@ -110,7 +110,7 @@ The agent looks for these ten categories. The first three are stylistic, the nex
110
110
  - "It's generated" — only valid if the file lives in a build output directory.
111
111
  - "230 LOC, close enough" — a 230-LOC file about to grow is already over. Split now.
112
112
 
113
- 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.
113
+ 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.
114
114
 
115
115
  ---
116
116
 
@@ -130,7 +130,7 @@ A pass is complete only when all applicable gates are green. Skip gates that are
130
130
 
131
131
  ## Process
132
132
 
133
- ### Phase 0: Plan with TodoWrite
133
+ ### Phase 0: Plan with the todo tool
134
134
 
135
135
  Create todos for all phases below. Mark `in_progress` one at a time.
136
136
 
@@ -270,8 +270,8 @@ If any gate fails or any checklist item flips:
270
270
 
271
271
  1. Identify the specific change that caused the failure.
272
272
  2. Explain why it broke things.
273
- 3. `git checkout` the affected file (or use `git diff` + targeted `Edit` to revert just the problematic hunk).
274
- 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.
273
+ 3. `git checkout` the affected file (or use `git diff` + targeted `edit` to revert just the problematic hunk).
274
+ 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.
275
275
  5. Re-run the failing gate and re-walk the checklist for the affected file.
276
276
  6. Repeat until all gates green AND checklist clean.
277
277
 
@@ -163,7 +163,7 @@ For GOAL, CONSTRAINTS, BACKGROUND - review the full conversation history. The us
163
163
 
164
164
  ## Phase 1: Manual QA (you run it)
165
165
 
166
- 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.
166
+ 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.
167
167
 
168
168
  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.
169
169
  2. **Pick the channel that faithfully exercises the surface** and capture the artifact:
@@ -282,7 +282,7 @@ Store the lane verdicts independently:
282
282
  | Manual QA (Phase 1) | PASS/FAIL | rows, artifact paths |
283
283
  | Gate review | pending/APPROVE/REJECT/INCONCLUSIVE | - |
284
284
 
285
- 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.
285
+ 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.
286
286
 
287
287
  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.
288
288
 
@@ -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
 
@@ -21,7 +21,7 @@ curl -s -H "Authorization: Bearer ${JINA_API_KEY}" "https://r.jina.ai/{URL}"
21
21
  ### JSON 구조화 출력
22
22
 
23
23
  ```bash
24
- curl -H "Accept: application/json" "https://r.jina.ai/{URL}"
24
+ curl -H "Authorization: Bearer ${JINA_API_KEY}" -H "Accept: application/json" "https://r.jina.ai/{URL}"
25
25
  ```
26
26
 
27
27
  반환: `data.{title, description, url, content, metadata, external, usage}`
@@ -31,7 +31,7 @@ curl -H "Accept: application/json" "https://r.jina.ai/{URL}"
31
31
  ### CSS 선택자 타겟팅
32
32
 
33
33
  ```bash
34
- curl -H "X-Target-Selector: .article-body" "https://r.jina.ai/{URL}"
34
+ curl -H "Authorization: Bearer ${JINA_API_KEY}" -H "X-Target-Selector: .article-body" "https://r.jina.ai/{URL}"
35
35
  ```
36
36
 
37
37
  네비게이션/풋터 제거, 본문만 추출. 커뮤니티 게시판에서 특히 효과적.
@@ -39,7 +39,7 @@ curl -H "X-Target-Selector: .article-body" "https://r.jina.ai/{URL}"
39
39
  ### SPA 스트리밍 모드
40
40
 
41
41
  ```bash
42
- curl -H "Accept: text/event-stream" "https://r.jina.ai/{URL}"
42
+ curl -H "Authorization: Bearer ${JINA_API_KEY}" -H "Accept: text/event-stream" "https://r.jina.ai/{URL}"
43
43
  ```
44
44
 
45
45
  JS 로딩 완료까지 대기. 동적 콘텐츠가 완전히 렌더링된 최종 버전 반환.
@@ -47,7 +47,7 @@ JS 로딩 완료까지 대기. 동적 콘텐츠가 완전히 렌더링된 최종
47
47
  ### 스크린샷
48
48
 
49
49
  ```bash
50
- curl -H "X-Respond-With: screenshot" "https://r.jina.ai/{URL}"
50
+ curl -H "Authorization: Bearer ${JINA_API_KEY}" -H "X-Respond-With: screenshot" "https://r.jina.ai/{URL}"
51
51
  ```
52
52
 
53
53
  GCS 서명 URL 반환 (4시간 유효). 비주얼 검증 용도.
@@ -55,7 +55,7 @@ GCS 서명 URL 반환 (4시간 유효). 비주얼 검증 용도.
55
55
  ### PDF 처리
56
56
 
57
57
  ```bash
58
- curl -s "https://r.jina.ai/https://example.com/file.pdf"
58
+ curl -s -H "Authorization: Bearer ${JINA_API_KEY}" "https://r.jina.ai/https://example.com/file.pdf"
59
59
  ```
60
60
 
61
61
  PDF → 마크다운 자동 변환. 페이지 수 메타데이터 포함.
@@ -63,33 +63,33 @@ PDF → 마크다운 자동 변환. 페이지 수 메타데이터 포함.
63
63
  ### 쿠키 전달 (인증 사이트)
64
64
 
65
65
  ```bash
66
- curl -H "X-Set-Cookie: session=abc123" "https://r.jina.ai/{URL}"
66
+ curl -H "Authorization: Bearer ${JINA_API_KEY}" -H "X-Set-Cookie: session=abc123" "https://r.jina.ai/{URL}"
67
67
  ```
68
68
 
69
69
  ### 링크 보존
70
70
 
71
71
  ```bash
72
- curl -H "X-With-Links: true" "https://r.jina.ai/{URL}"
72
+ curl -H "Authorization: Bearer ${JINA_API_KEY}" -H "X-With-Links: true" "https://r.jina.ai/{URL}"
73
73
  ```
74
74
 
75
75
  ### 캐시 제어
76
76
 
77
77
  ```bash
78
78
  # 캐시 우회 (실시간 필요 시)
79
- curl -H "X-No-Cache: true" "https://r.jina.ai/{URL}"
79
+ curl -H "Authorization: Bearer ${JINA_API_KEY}" -H "X-No-Cache: true" "https://r.jina.ai/{URL}"
80
80
 
81
81
  # 캐시 TTL 지정 (초)
82
- curl -H "X-Cache-Tolerance: 600" "https://r.jina.ai/{URL}"
82
+ curl -H "Authorization: Bearer ${JINA_API_KEY}" -H "X-Cache-Tolerance: 600" "https://r.jina.ai/{URL}"
83
83
  ```
84
84
 
85
85
  ### 순수 텍스트 / 원본 HTML
86
86
 
87
87
  ```bash
88
88
  # body.innerText만
89
- curl -H "X-Respond-With: text" "https://r.jina.ai/{URL}"
89
+ curl -H "Authorization: Bearer ${JINA_API_KEY}" -H "X-Respond-With: text" "https://r.jina.ai/{URL}"
90
90
 
91
91
  # 원본 HTML
92
- curl -H "X-Respond-With: html" "https://r.jina.ai/{URL}"
92
+ curl -H "Authorization: Bearer ${JINA_API_KEY}" -H "X-Respond-With: html" "https://r.jina.ai/{URL}"
93
93
  ```
94
94
 
95
95
  ## 검증된 성공 사이트
@@ -131,6 +131,6 @@ curl -H "X-Respond-With: html" "https://r.jina.ai/{URL}"
131
131
  Jina JSON 모드의 `external.alternate`에서 사이트의 RSS URL이 자동 노출됨:
132
132
 
133
133
  ```bash
134
- curl -H "Accept: application/json" "https://r.jina.ai/{URL}" | \
134
+ curl -H "Authorization: Bearer ${JINA_API_KEY}" -H "Accept: application/json" "https://r.jina.ai/{URL}" | \
135
135
  python3 -c "import sys,json; print(json.load(sys.stdin)['data'].get('external',{}))"
136
136
  ```
@@ -26,10 +26,10 @@ Jina Reader로 완전 접근 가능.
26
26
 
27
27
  ```bash
28
28
  # 기사 목록
29
- curl -s "https://r.jina.ai/https://news.naver.com/"
29
+ curl -s -H "Authorization: Bearer ${JINA_API_KEY}" "https://r.jina.ai/https://news.naver.com/"
30
30
 
31
31
  # 개별 기사
32
- curl -s "https://r.jina.ai/https://n.news.naver.com/article/{press_id}/{article_id}"
32
+ curl -s -H "Authorization: Bearer ${JINA_API_KEY}" "https://r.jina.ai/https://n.news.naver.com/article/{press_id}/{article_id}"
33
33
  ```
34
34
 
35
35
  ## 네이버 증권
@@ -37,7 +37,7 @@ curl -s "https://r.jina.ai/https://n.news.naver.com/article/{press_id}/{article_
37
37
  Jina Reader로 실시간 주가, 주요 뉴스 접근.
38
38
 
39
39
  ```bash
40
- curl -s "https://r.jina.ai/https://finance.naver.com/item/main.naver?code={종목코드}"
40
+ curl -s -H "Authorization: Bearer ${JINA_API_KEY}" "https://r.jina.ai/https://finance.naver.com/item/main.naver?code={종목코드}"
41
41
  ```
42
42
 
43
43
  ## 네이버 금융 시세 (비공식, 무인증)
@@ -65,7 +65,7 @@ bun install
65
65
  ### 호출 (engine 내부)
66
66
 
67
67
  ```python
68
- from insane_search.engine.executor import run_playwright_fallback
68
+ from engine.executor import run_playwright_fallback # 스킬 디렉터리에서 실행 (패키지는 engine/)
69
69
 
70
70
  attempt, html = run_playwright_fallback(
71
71
  "https://example.com/path",
@@ -13,7 +13,7 @@ python3 -c "import feedparser" 2>/dev/null || pip install feedparser -q
13
13
  Jina Reader JSON 모드로 사이트의 RSS URL을 자동 탐지:
14
14
 
15
15
  ```bash
16
- curl -sH "Accept: application/json" "https://r.jina.ai/{URL}" | \
16
+ curl -s -H "Authorization: Bearer ${JINA_API_KEY}" -H "Accept: application/json" "https://r.jina.ai/{URL}" | \
17
17
  python3 -c "import sys,json; print(json.load(sys.stdin)['data'].get('external',{}).get('alternate',[]))"
18
18
  ```
19
19
 
@@ -59,11 +59,11 @@ def cffi_fetch(url, locale="ko-KR"):
59
59
 
60
60
  generic alias는 항상 최신 버전으로 해석된다. **2026년에 chrome99 같은 옛 버전은 WAF가 의심하므로 generic alias 사용 권장.**
61
61
 
62
- | Alias | 해석 (2026.04) | 용도 |
62
+ | Alias | 해석 (v0.15.0) | 용도 |
63
63
  |-------|---------------|------|
64
- | `safari` | safari260 | **한국 사이트 최적** (쿠팡, 에펨코리아) |
64
+ | `safari` | safari2601 | **한국 사이트 최적** (쿠팡, 에펨코리아) |
65
65
  | `chrome` | chrome146 | 범용 (Cloudflare, Akamai) |
66
- | `firefox` | firefox135 | chrome/safari 실패 시 대안 |
66
+ | `firefox` | firefox147 | chrome/safari 실패 시 대안 |
67
67
  | `chrome_android` | chrome131_android | 모바일 API 엔드포인트 |
68
68
  | `safari_ios` | safari260_ios | iOS 모바일 |
69
69
 
@@ -71,15 +71,20 @@ generic alias는 항상 최신 버전으로 해석된다. **2026년에 chrome99
71
71
  <summary>핀 버전 전체 (클릭)</summary>
72
72
 
73
73
  ```
74
+ edge99, edge101,
74
75
  chrome99, chrome100, chrome101, chrome104, chrome107, chrome110,
75
76
  chrome116, chrome119, chrome120, chrome123, chrome124, chrome131,
76
77
  chrome133a, chrome136, chrome142, chrome145, chrome146,
77
- chrome131_android, edge99, edge101,
78
- safari15_3, safari15_5, safari17_0, safari17_2_ios,
79
- safari18_0, safari18_0_ios, safari260, safari260_ios,
80
- firefox133, firefox135
78
+ chrome99_android, chrome131_android,
79
+ safari153, safari155, safari170, safari172_ios,
80
+ safari180, safari180_ios, safari184, safari184_ios,
81
+ safari260, safari2601, safari260_ios,
82
+ firefox133, firefox135, firefox144, firefox147,
83
+ tor145
81
84
  ```
82
85
 
86
+ 구 표기(`safari15_3`, `safari15_5`, `safari17_0`, `safari17_2_ios`, `safari18_0`, `safari18_0_ios`, `safari18_4`, `safari18_4_ios`)는 deprecated alias로 아직 받는다.
87
+
83
88
  </details>
84
89
 
85
90
  ## WAF별 최적 전략
@@ -119,6 +119,8 @@ Before the first task command, create one `RUN_TMP=$(mktemp -d)` per task, track
119
119
  At task end, after owned processes exit, remove only owned directories, including runtime caches. Never wipe shared caches; retain worktrees still needed by open PRs and any parent directory containing them.
120
120
 
121
121
  ## 0. Survey the skills, gather context, then size the work
122
+ This section records into the notepad, so run section 2's `NOTE=`
123
+ command first; section 2 then initialises that same file.
122
124
  First, survey the loaded skill list and read the description of each
123
125
  loosely relevant skill. Decide explicitly which skills this task will
124
126
  use and prefer using every genuinely applicable one — name them in the