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.
- package/dist/cli/index.js +1722 -281
- package/dist/cli/service-auth/closed-device-login.fixture.d.ts +1 -0
- package/dist/cli/service-auth/credential-lock.d.ts +8 -2
- package/dist/cli/service-auth/index.d.ts +2 -1
- package/dist/cli/service-auth/keychain-helper/access.d.ts +27 -0
- package/dist/cli/service-auth/keychain-helper/approval-cache.d.ts +51 -0
- package/dist/cli/service-auth/keychain-helper/client.d.ts +68 -0
- package/dist/cli/service-auth/keychain-helper/creator-handoff.d.ts +31 -0
- package/dist/cli/service-auth/keychain-helper/darwin-backend.d.ts +75 -0
- package/dist/cli/service-auth/keychain-helper/darwin-read.d.ts +46 -0
- package/dist/cli/service-auth/keychain-helper/darwin-store.d.ts +28 -0
- package/dist/cli/service-auth/keychain-helper/fake-keychain.test-support.d.ts +85 -0
- package/dist/cli/service-auth/keychain-helper/location.d.ts +28 -0
- package/dist/cli/service-auth/keychain-helper/migration.d.ts +20 -0
- package/dist/cli/service-auth/keychain-helper/owner-marker.d.ts +7 -0
- package/dist/cli/service-auth/keychain-helper/pin.d.ts +20 -0
- package/dist/cli/service-auth/keychain-helper/process-copy.test-support.d.ts +3 -0
- package/dist/cli/service-auth/keychain-helper/process-state.d.ts +19 -0
- package/dist/cli/service-auth/keychain-helper/prompt-lock.d.ts +14 -0
- package/dist/cli/service-auth/keychain-helper/recovery.d.ts +34 -0
- package/dist/cli/service-auth/keychain-helper/runtime-capabilities.d.ts +13 -0
- package/dist/cli/service-auth/keychain-helper/secrets-gate.d.ts +4 -0
- package/dist/cli/service-auth/keychain-helper/signature.d.ts +17 -0
- package/dist/cli/service-auth/keychain-helper/store-binding.d.ts +46 -0
- package/dist/cli/service-auth/keystore.d.ts +18 -3
- package/dist/cli/service-auth/session.d.ts +29 -2
- package/dist/cli/service-auth/sync-pin-retire.d.ts +7 -0
- package/dist/cli-node/index.js +1722 -281
- package/package.json +1 -1
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
- package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
- package/packages/omo-codex/plugin/components/lcx/skills/lcx-doctor/SKILL.md +1 -1
- package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
- package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/rules/package.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +2 -0
- package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-unclear.md +2 -2
- package/packages/omo-codex/plugin/components/ultrawork/src/directive-content.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/directive.md +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/directive.md +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/define-goal.md +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +10 -10
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
- package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/package-lock.json +12 -12
- package/packages/omo-codex/plugin/package.json +1 -1
- package/packages/omo-codex/plugin/scripts/sync-skills.mjs +6 -3
- package/packages/omo-codex/plugin/skills/ast-grep/AGENTS.md +2 -2
- package/packages/omo-codex/plugin/skills/ast-grep/README.md +4 -4
- package/packages/omo-codex/plugin/skills/ast-grep/SKILL.md +10 -8
- package/packages/omo-codex/plugin/skills/ast-grep/references/cli.md +4 -3
- package/packages/omo-codex/plugin/skills/ast-grep/references/patterns.md +5 -5
- package/packages/omo-codex/plugin/skills/ast-grep/references/pitfalls.md +3 -3
- package/packages/omo-codex/plugin/skills/ast-grep/references/recipes.md +6 -4
- package/packages/omo-codex/plugin/skills/ast-grep/references/yaml-rules.md +3 -3
- package/packages/omo-codex/plugin/skills/ast-grep/scripts/ast_grep_helper.py +3 -3
- package/packages/omo-codex/plugin/skills/browser/SKILL.md +2 -3
- package/packages/omo-codex/plugin/skills/browser/references/owned-engine/README.md +1 -1
- package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +1 -1
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/AGENTS.md +1 -1
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/SKILL.md +2 -1
- package/packages/omo-codex/plugin/skills/data-scientist/SKILL.md +8 -6
- package/packages/omo-codex/plugin/skills/data-scientist/references/placement.md +9 -5
- package/packages/omo-codex/plugin/skills/data-scientist/references/uv-setup.md +3 -3
- package/packages/omo-codex/plugin/skills/data-scientist/references/visualization.md +19 -4
- package/packages/omo-codex/plugin/skills/debugging/SKILL.md +5 -5
- package/packages/omo-codex/plugin/skills/debugging/references/methodology/02-investigate.md +2 -2
- package/packages/omo-codex/plugin/skills/debugging/references/methodology/06-fix.md +2 -0
- package/packages/omo-codex/plugin/skills/debugging/references/methodology/09-cleanup.md +2 -2
- package/packages/omo-codex/plugin/skills/debugging/references/methodology/partial-runtime-evidence.md +1 -1
- package/packages/omo-codex/plugin/skills/debugging/references/runtimes/bundled-js-binary.md +1 -1
- package/packages/omo-codex/plugin/skills/debugging/references/runtimes/native-binary.md +1 -1
- package/packages/omo-codex/plugin/skills/debugging/references/tools/browser-qa.md +1 -2
- package/packages/omo-codex/plugin/skills/frontend/SKILL.md +4 -4
- package/packages/omo-codex/plugin/skills/frontend/references/design/README.md +2 -2
- package/packages/omo-codex/plugin/skills/frontend/references/design/component-catalogs.md +1 -1
- package/packages/omo-codex/plugin/skills/frontend/references/design/design-system-architecture.md +2 -2
- package/packages/omo-codex/plugin/skills/frontend/references/design/print-paged-media.md +1 -1
- package/packages/omo-codex/plugin/skills/frontend/references/design/react-dev-tooling-skill.md +1 -1
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-a-direction.md +5 -5
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/routing.md +2 -2
- package/packages/omo-codex/plugin/skills/frontend/references/perfection/README.md +1 -2
- package/packages/omo-codex/plugin/skills/frontend/references/perfection/react-perf-tooling.md +27 -8
- package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/lighthouse-audit.py +0 -1
- package/packages/omo-codex/plugin/skills/git-master/SKILL.md +12 -2
- package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/lcx-doctor/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/lsp-setup/SKILL.md +24 -15
- package/packages/omo-codex/plugin/skills/lsp-setup/references/bash/README.md +3 -3
- package/packages/omo-codex/plugin/skills/lsp-setup/references/c-cpp/README.md +2 -2
- package/packages/omo-codex/plugin/skills/lsp-setup/references/csharp/README.md +2 -2
- package/packages/omo-codex/plugin/skills/lsp-setup/references/dart/README.md +2 -2
- package/packages/omo-codex/plugin/skills/lsp-setup/references/elixir/README.md +2 -2
- package/packages/omo-codex/plugin/skills/lsp-setup/references/go/README.md +2 -2
- package/packages/omo-codex/plugin/skills/lsp-setup/references/haskell/README.md +2 -2
- package/packages/omo-codex/plugin/skills/lsp-setup/references/java/README.md +3 -3
- package/packages/omo-codex/plugin/skills/lsp-setup/references/julia/README.md +3 -3
- package/packages/omo-codex/plugin/skills/lsp-setup/references/kotlin/README.md +4 -4
- package/packages/omo-codex/plugin/skills/lsp-setup/references/lua/README.md +2 -2
- package/packages/omo-codex/plugin/skills/lsp-setup/references/php/README.md +3 -3
- package/packages/omo-codex/plugin/skills/lsp-setup/references/python/README.md +13 -12
- package/packages/omo-codex/plugin/skills/lsp-setup/references/ruby/README.md +2 -2
- package/packages/omo-codex/plugin/skills/lsp-setup/references/rust/README.md +2 -2
- package/packages/omo-codex/plugin/skills/lsp-setup/references/swift/README.md +4 -4
- package/packages/omo-codex/plugin/skills/lsp-setup/references/terraform/README.md +2 -2
- package/packages/omo-codex/plugin/skills/lsp-setup/references/typescript/README.md +3 -3
- package/packages/omo-codex/plugin/skills/lsp-setup/references/yaml/README.md +2 -2
- package/packages/omo-codex/plugin/skills/lsp-setup/references/zig/README.md +2 -2
- package/packages/omo-codex/plugin/skills/lsp-setup/scripts/detect-lsp.ts +1 -1
- package/packages/omo-codex/plugin/skills/lsp-setup/scripts/lsp-server-table.ts +3 -2
- package/packages/omo-codex/plugin/skills/programming/SKILL.md +5 -5
- package/packages/omo-codex/plugin/skills/programming/references/code-smells.md +2 -2
- package/packages/omo-codex/plugin/skills/programming/references/go/README.md +3 -3
- package/packages/omo-codex/plugin/skills/programming/references/python/README.md +8 -8
- package/packages/omo-codex/plugin/skills/programming/references/python/data-processing.md +9 -9
- package/packages/omo-codex/plugin/skills/programming/references/python/libraries.md +3 -3
- package/packages/omo-codex/plugin/skills/programming/references/python/one-liners.md +1 -1
- package/packages/omo-codex/plugin/skills/programming/references/python/pyproject-strict.md +1 -1
- package/packages/omo-codex/plugin/skills/programming/references/rust/libraries.md +2 -2
- package/packages/omo-codex/plugin/skills/programming/references/rust-ub/README.md +3 -3
- package/packages/omo-codex/plugin/skills/programming/references/typescript/README.md +5 -5
- package/packages/omo-codex/plugin/skills/programming/scripts/typescript/new-project.ts +1 -1
- package/packages/omo-codex/plugin/skills/refactor/SKILL.md +36 -36
- package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +6 -6
- package/packages/omo-codex/plugin/skills/review-work/SKILL.md +2 -2
- package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +11 -8
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/AGENTS.md +4 -4
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/README.md +2 -2
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/career.md +1 -1
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/social.md +1 -1
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/web.md +4 -4
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +2 -1
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +17 -18
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/fallback.md +10 -6
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/jina.md +12 -12
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/naver.md +3 -3
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/playwright.md +1 -1
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/rss.md +1 -1
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/tls-impersonate.md +12 -7
- package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +2 -0
- package/packages/omo-codex/plugin/skills/ulw-execute/SKILL.md +9 -6
- package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/ulw-loop/references/define-goal.md +1 -1
- package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +10 -10
- package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +1 -1
- package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-unclear.md +2 -2
- package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +4 -4
- package/packages/omo-codex/plugin/skills/ulw-research/references/deliverable-phase.md +5 -5
- package/packages/omo-codex/plugin/skills/ulw-research/references/report-visualization.md +2 -2
- package/packages/omo-codex/plugin/skills/ulw-research/references/research-collection.md +2 -2
- package/packages/omo-codex/plugin/skills/ulw-research/references/unit-rules.md +2 -2
- package/packages/omo-codex/plugin/skills/visual-qa/AGENTS.md +1 -1
- package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +5 -5
- package/packages/omo-codex/plugin/skills/visual-qa/references/browser-setup.md +4 -2
- package/packages/omo-codex/plugin/test/sync-skills-codex-compatibility.test.mjs +2 -0
- package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +7 -3
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +2 -2
- package/packages/prompts-core/prompts/ultrawork/codex.md +2 -0
- package/packages/shared-skills/skills/ast-grep/AGENTS.md +2 -2
- package/packages/shared-skills/skills/ast-grep/README.md +4 -4
- package/packages/shared-skills/skills/ast-grep/SKILL.md +10 -8
- package/packages/shared-skills/skills/ast-grep/references/cli.md +4 -3
- package/packages/shared-skills/skills/ast-grep/references/patterns.md +5 -5
- package/packages/shared-skills/skills/ast-grep/references/pitfalls.md +3 -3
- package/packages/shared-skills/skills/ast-grep/references/recipes.md +6 -4
- package/packages/shared-skills/skills/ast-grep/references/yaml-rules.md +3 -3
- package/packages/shared-skills/skills/ast-grep/scripts/ast_grep_helper.py +3 -3
- package/packages/shared-skills/skills/browser/SKILL.md +2 -3
- package/packages/shared-skills/skills/browser/references/owned-engine/README.md +1 -1
- package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +1 -1
- package/packages/shared-skills/skills/coding-agent-sessions/AGENTS.md +1 -1
- package/packages/shared-skills/skills/coding-agent-sessions/SKILL.md +2 -1
- package/packages/shared-skills/skills/data-scientist/SKILL.md +8 -6
- package/packages/shared-skills/skills/data-scientist/references/placement.md +9 -5
- package/packages/shared-skills/skills/data-scientist/references/uv-setup.md +3 -3
- package/packages/shared-skills/skills/data-scientist/references/visualization.md +19 -4
- package/packages/shared-skills/skills/debugging/SKILL.md +5 -5
- package/packages/shared-skills/skills/debugging/references/methodology/02-investigate.md +2 -2
- package/packages/shared-skills/skills/debugging/references/methodology/06-fix.md +2 -0
- package/packages/shared-skills/skills/debugging/references/methodology/09-cleanup.md +2 -2
- package/packages/shared-skills/skills/debugging/references/methodology/partial-runtime-evidence.md +1 -1
- package/packages/shared-skills/skills/debugging/references/runtimes/bundled-js-binary.md +1 -1
- package/packages/shared-skills/skills/debugging/references/runtimes/native-binary.md +1 -1
- package/packages/shared-skills/skills/debugging/references/tools/browser-qa.md +1 -2
- package/packages/shared-skills/skills/frontend/SKILL.md +4 -4
- package/packages/shared-skills/skills/frontend/references/design/README.md +2 -2
- package/packages/shared-skills/skills/frontend/references/design/component-catalogs.md +1 -1
- package/packages/shared-skills/skills/frontend/references/design/design-system-architecture.md +2 -2
- package/packages/shared-skills/skills/frontend/references/design/print-paged-media.md +1 -1
- package/packages/shared-skills/skills/frontend/references/design/react-dev-tooling-skill.md +1 -1
- package/packages/shared-skills/skills/frontend/references/designpowers/lane-a-direction.md +5 -5
- package/packages/shared-skills/skills/frontend/references/designpowers/routing.md +2 -2
- package/packages/shared-skills/skills/frontend/references/perfection/README.md +1 -2
- package/packages/shared-skills/skills/frontend/references/perfection/react-perf-tooling.md +27 -8
- package/packages/shared-skills/skills/frontend/scripts/perfection/lighthouse-audit.py +0 -1
- package/packages/shared-skills/skills/git-master/SKILL.md +12 -2
- package/packages/shared-skills/skills/init-deep/SKILL.md +1 -1
- package/packages/shared-skills/skills/lsp-setup/SKILL.md +24 -15
- package/packages/shared-skills/skills/lsp-setup/references/bash/README.md +3 -3
- package/packages/shared-skills/skills/lsp-setup/references/c-cpp/README.md +2 -2
- package/packages/shared-skills/skills/lsp-setup/references/csharp/README.md +2 -2
- package/packages/shared-skills/skills/lsp-setup/references/dart/README.md +2 -2
- package/packages/shared-skills/skills/lsp-setup/references/elixir/README.md +2 -2
- package/packages/shared-skills/skills/lsp-setup/references/go/README.md +2 -2
- package/packages/shared-skills/skills/lsp-setup/references/haskell/README.md +2 -2
- package/packages/shared-skills/skills/lsp-setup/references/java/README.md +3 -3
- package/packages/shared-skills/skills/lsp-setup/references/julia/README.md +3 -3
- package/packages/shared-skills/skills/lsp-setup/references/kotlin/README.md +4 -4
- package/packages/shared-skills/skills/lsp-setup/references/lua/README.md +2 -2
- package/packages/shared-skills/skills/lsp-setup/references/php/README.md +3 -3
- package/packages/shared-skills/skills/lsp-setup/references/python/README.md +13 -12
- package/packages/shared-skills/skills/lsp-setup/references/ruby/README.md +2 -2
- package/packages/shared-skills/skills/lsp-setup/references/rust/README.md +2 -2
- package/packages/shared-skills/skills/lsp-setup/references/swift/README.md +4 -4
- package/packages/shared-skills/skills/lsp-setup/references/terraform/README.md +2 -2
- package/packages/shared-skills/skills/lsp-setup/references/typescript/README.md +3 -3
- package/packages/shared-skills/skills/lsp-setup/references/yaml/README.md +2 -2
- package/packages/shared-skills/skills/lsp-setup/references/zig/README.md +2 -2
- package/packages/shared-skills/skills/lsp-setup/scripts/detect-lsp.ts +1 -1
- package/packages/shared-skills/skills/lsp-setup/scripts/lsp-server-table.ts +3 -2
- package/packages/shared-skills/skills/programming/SKILL.md +5 -5
- package/packages/shared-skills/skills/programming/references/code-smells.md +2 -2
- package/packages/shared-skills/skills/programming/references/go/README.md +3 -3
- package/packages/shared-skills/skills/programming/references/python/README.md +8 -8
- package/packages/shared-skills/skills/programming/references/python/data-processing.md +9 -9
- package/packages/shared-skills/skills/programming/references/python/libraries.md +3 -3
- package/packages/shared-skills/skills/programming/references/python/one-liners.md +1 -1
- package/packages/shared-skills/skills/programming/references/python/pyproject-strict.md +1 -1
- package/packages/shared-skills/skills/programming/references/rust/libraries.md +2 -2
- package/packages/shared-skills/skills/programming/references/rust-ub/README.md +3 -3
- package/packages/shared-skills/skills/programming/references/typescript/README.md +5 -5
- package/packages/shared-skills/skills/programming/scripts/typescript/new-project.ts +1 -1
- package/packages/shared-skills/skills/refactor/SKILL.md +36 -36
- package/packages/shared-skills/skills/remove-ai-slops/SKILL.md +6 -6
- package/packages/shared-skills/skills/review-work/SKILL.md +2 -2
- package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +11 -8
- package/packages/shared-skills/skills/ultimate-browsing/engine/AGENTS.md +4 -4
- package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/README.md +2 -2
- package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/career.md +1 -1
- package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/social.md +1 -1
- package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/web.md +4 -4
- package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +2 -1
- package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +17 -18
- package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/fallback.md +10 -6
- package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/jina.md +12 -12
- package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/naver.md +3 -3
- package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/playwright.md +1 -1
- package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/rss.md +1 -1
- package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/tls-impersonate.md +12 -7
- package/packages/shared-skills/skills/ulw-execute/SKILL.md +9 -6
- package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +1 -1
- package/packages/shared-skills/skills/ulw-plan/references/intent-unclear.md +2 -2
- package/packages/shared-skills/skills/ulw-research/SKILL.md +5 -5
- package/packages/shared-skills/skills/ulw-research/references/deliverable-phase.md +5 -5
- package/packages/shared-skills/skills/ulw-research/references/report-visualization.md +2 -2
- package/packages/shared-skills/skills/ulw-research/references/research-collection.md +2 -2
- package/packages/shared-skills/skills/ulw-research/references/unit-rules.md +2 -2
- package/packages/shared-skills/skills/visual-qa/AGENTS.md +1 -1
- package/packages/shared-skills/skills/visual-qa/SKILL.md +5 -5
- 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.
|
|
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:
|
|
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
|
|
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
|
|
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 `
|
|
274
|
-
4. If genuine slop remains after revert, edit the file directly yourself — in parallel per file via multiple
|
|
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
|
|
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
|
|
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
|
|
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(
|
|
75
|
-
curl -s "https://r.jina.ai/https://weibo.com/<uid>/<pid>"
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
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"
|
|
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
|
|
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
|
|
package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md
CHANGED
|
@@ -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
|
-
[--
|
|
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
|
|
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
|
|
140
|
-
#
|
|
141
|
-
#
|
|
142
|
-
#
|
|
143
|
-
#
|
|
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
|
-
#
|
|
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 |
|
|
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
|
-
###
|
|
197
|
+
### `needs_js_exec only` 폴백 규칙
|
|
200
198
|
|
|
201
|
-
`fetch_chain`의 `needs_js_exec only` 케이스는
|
|
199
|
+
`fetch_chain`의 `needs_js_exec only` 케이스는 subprocess 경로가 없어 **에이전트가 직접 브라우저를 다뤄야** 한다. 즉:
|
|
202
200
|
1. `result.summary`에 "Playwright MCP must be invoked from the Claude session"이 포함되면
|
|
203
|
-
2. `
|
|
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__
|
|
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`
|
|
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
|
|
package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/fallback.md
CHANGED
|
@@ -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
|
-
-
|
|
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)
|
|
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
|
-
|
|
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
|
```
|
package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/naver.md
CHANGED
|
@@ -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
|
## 네이버 금융 시세 (비공식, 무인증)
|
package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/playwright.md
CHANGED
|
@@ -65,7 +65,7 @@ bun install
|
|
|
65
65
|
### 호출 (engine 내부)
|
|
66
66
|
|
|
67
67
|
```python
|
|
68
|
-
from
|
|
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 -
|
|
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 | 해석 (
|
|
62
|
+
| Alias | 해석 (v0.15.0) | 용도 |
|
|
63
63
|
|-------|---------------|------|
|
|
64
|
-
| `safari` |
|
|
64
|
+
| `safari` | safari2601 | **한국 사이트 최적** (쿠팡, 에펨코리아) |
|
|
65
65
|
| `chrome` | chrome146 | 범용 (Cloudflare, Akamai) |
|
|
66
|
-
| `firefox` |
|
|
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
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
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
|