lazycodex-ai 5.1.62 → 5.1.64
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 +1598 -284
- 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/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 +2 -2
- package/dist/cli-node/index.js +1598 -284
- 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/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/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 +2 -2
- package/packages/omo-codex/plugin/skills/frontend/references/design/design-system-architecture.md +1 -1
- package/packages/omo-codex/plugin/skills/frontend/references/design/print-paged-media.md +1 -1
- package/packages/omo-codex/plugin/skills/frontend/references/perfection/README.md +0 -1
- 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/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/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 +35 -35
- 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 +10 -7
- 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 +16 -17
- 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 +2 -2
- 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/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 +2 -2
- package/packages/shared-skills/skills/frontend/references/design/design-system-architecture.md +1 -1
- package/packages/shared-skills/skills/frontend/references/design/print-paged-media.md +1 -1
- package/packages/shared-skills/skills/frontend/references/perfection/README.md +0 -1
- 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/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 +35 -35
- 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 +10 -7
- 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 +16 -17
- 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 +3 -3
- 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
|
@@ -78,7 +78,7 @@ Apply unless the per-language reference overrides with something stricter.
|
|
|
78
78
|
| Exhaustive variant matching | `match` + `assert_never` | `match` (compiler-enforced) | `switch` + `assertNever` | sealed interface + type switch + **`exhaustive` linter** (the compiler will not help) |
|
|
79
79
|
| No untyped escape hatches | no `Any` in public sigs, no `cast`, no `# type: ignore` | no `unwrap`/`expect` outside tests (invariant `expect` only behind `#[expect(clippy::expect_used, reason)]`), no numeric `as`, no `#[allow]` (silence with `#[expect(lint, reason)]`) | no `any`, no `as` (except `as const`, `satisfies`), no `!`, no `@ts-ignore`, no `@ts-expect-error` | no `interface{}` / bare `any` in domain sigs; no `_ = err`; no `//nolint` without reason |
|
|
80
80
|
| No bare error strings | typed exception dataclass with `__str__` | `thiserror` enum (lib) or `anyhow` with `.context(...)` (app) | `Error` subclass with typed fields | sentinel `errors.New` + typed `*XError` struct; wrap with `%w`; check via `errors.Is/As` |
|
|
81
|
-
| Boundary catch only | catch the exact exception you expect; broad `except Exception` only
|
|
81
|
+
| Boundary catch only | catch the exact exception you expect; broad `except Exception` only at a top-level boundary (`main()`/CLI entry, HTTP handler), with logging + re-raise | `?` everywhere; never `panic!` in library code | `catch` must narrow with `instanceof` and re-throw or convert; no empty catch | every `(T, error)` checked; `panic` only in `main`/tests; one `httperr.Write` funnel in handlers |
|
|
82
82
|
| Resources via RAII | `with` (sync) / `async with` (async) | `Drop` impl or RAII guard | `using`/`await using` (TC39 explicit resource management) | `defer x.Close()` immediately after acquisition; `bodyclose`/`sqlclosecheck` linters enforce |
|
|
83
83
|
| Async runtime is mandatory | `anyio` (NEVER bare `asyncio`) | `tokio` (`async-std` is unmaintained) | platform-native async (Bun/Node) with structured cancellation via `AbortSignal` | `context.Context` as first param + `errgroup` for structured concurrency; `-race` on every test |
|
|
84
84
|
| Modern HTTP client | [`httpx2`](https://github.com/pydantic/httpx2) with HTTP/2 + brotli + zstd | `reqwest` with rustls | `ky` (default) / `undici` direct API (Node perf) - NEVER bare `fetch` in prod | stdlib `net/http.Client` with tuned `Transport` + `go-retryablehttp` for retry/backoff |
|
|
@@ -140,13 +140,13 @@ Full rationale, measurement methods, workaround detection, and split examples: *
|
|
|
140
140
|
|
|
141
141
|
A source file past 250 non-blank, non-comment lines has outgrown a single reviewer's working memory. The module is almost certainly doing more than one thing. Measure: `awk '!/^[[:space:]]*$/ && !/^[[:space:]]*(\/\/|#|--)/' <file> | wc -l`.
|
|
142
142
|
|
|
143
|
-
**When detected:** Name what the file owns in one short noun phrase. If the answer needs "and", the file needs splitting. Load `/refactor` and split by responsibility. If the file genuinely cannot be split (generated parser, indivisible state machine), mark with `// allow: SIZE_OK — <reason
|
|
143
|
+
**When detected:** Name what the file owns in one short noun phrase. If the answer needs "and", the file needs splitting. Load `/refactor` and split by responsibility. If the file genuinely cannot be split (generated parser, indivisible state machine), mark it in the first 10 lines with `# noqa: SIZE_OK — <reason>` in Python (the form `scripts/python/check-no-excuse-rules.py` reads) or `// allow: SIZE_OK — <reason>` in `//`-comment languages.
|
|
144
144
|
|
|
145
145
|
### Smell 2 — Function with more than 3 parameters
|
|
146
146
|
|
|
147
147
|
More than 3 arguments signals the function is doing too much, or that related parameters belong in a typed struct. **Workarounds count as the same smell** — passing `dict`/`Record<string, unknown>`/`map[string]any`/`**kwargs`/`...args` to smuggle parameters through one argument, or a throwaway "config" object with 6+ fields that exists solely to wrap what would otherwise be positional args (genuine reusable domain types like `HttpClientConfig` are fine).
|
|
148
148
|
|
|
149
|
-
**When detected:** Group related parameters into a typed value object with a domain name. If 4+ independent inputs are genuinely required, the justification must be SPECIFIC. See [`references/code-smells.md` Smell 2](references/code-smells.md#smell-2--function-with-more-than-3-parameters) for
|
|
149
|
+
**When detected:** Group related parameters into a typed value object with a domain name. If 4+ independent inputs are genuinely required, the justification must be SPECIFIC. See [`references/code-smells.md` Smell 2](references/code-smells.md#smell-2--function-with-more-than-3-parameters) for Python, TypeScript, and Go examples.
|
|
150
150
|
|
|
151
151
|
### Smell 3 — Redundant verification after a destructive action
|
|
152
152
|
|
|
@@ -242,9 +242,9 @@ These two skills are not optional cosmetics. They are the recovery path for the
|
|
|
242
242
|
|
|
243
243
|
| Trigger | Skill to load | Why |
|
|
244
244
|
|---|---|---|
|
|
245
|
-
| Any [code smell](#code-smells--automatic-review-triggers) fires (250+ LOC, >3 params, redundant verification), OR the post-write loop surfaces
|
|
245
|
+
| Any [code smell](#code-smells--automatic-review-triggers) fires (250+ LOC, >3 params, redundant verification, negative naming), OR the post-write loop surfaces more than two issues, OR the user says "reshape this", "extract this", "clean this up" | `refactor` | Safe codemap-driven multi-step refactor with LSP + tests after each step. Never improvise a structural change. |
|
|
246
246
|
| Recent branch contains AI-authored patterns (broad except, dead helpers, vague comments, oversized files, redundant post-action verification, junk tests), OR the user says "remove slop", "clean AI code", "deslop" | `remove-ai-slops` | Behavior locked by gate-passing tests FIRST, then categorized parallel cleanup (junk tests included, each cut proven by a mutation), then quality gates. Behavior-preserving. |
|
|
247
|
-
| Rust code touches `unsafe`, `*mut`, `*const`, `MaybeUninit`, FFI, `unsafe impl Send/Sync`, or a custom lock-free primitive | `references/rust-ub/` | Full UB taxonomy + Miri strictness escalation. Every `unsafe` block must survive Miri Level 3 (strict provenance + symbolic alignment + preemption) before it ships. |
|
|
247
|
+
| Rust code touches `unsafe`, `*mut`, `*const`, `MaybeUninit`, FFI, `unsafe impl Send/Sync`, or a custom lock-free primitive | `references/rust-ub/` | Full UB taxonomy + Miri strictness escalation. Every `unsafe` block must survive Miri Level 3 (strict provenance + symbolic alignment + preemption) and the Level 4 Tree Borrows pass before it ships. |
|
|
248
248
|
|
|
249
249
|
---
|
|
250
250
|
|
|
@@ -48,10 +48,10 @@ cloc --by-file <file> # the "code" column is the number
|
|
|
48
48
|
|
|
49
49
|
A file may legitimately exceed 250 pure LOC if **and only if** it is:
|
|
50
50
|
|
|
51
|
-
- A truly indivisible single-responsibility unit (e.g., a generated parser table, a state machine whose states share a single closure). Mark with `// allow: SIZE_OK — <reason
|
|
51
|
+
- A truly indivisible single-responsibility unit (e.g., a generated parser table, a state machine whose states share a single closure). Mark it in the first 10 lines with `# noqa: SIZE_OK — <reason>` in Python (the form `scripts/python/check-no-excuse-rules.py` reads) or `// allow: SIZE_OK — <reason>` in `//`-comment languages.
|
|
52
52
|
- A pure data table (translation strings, error code lookup, brand color palette).
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
A SIZE_OK marker without a justifying comment is itself slop.
|
|
55
55
|
|
|
56
56
|
### Concrete split examples
|
|
57
57
|
|
|
@@ -66,9 +66,9 @@ Read these per-file references for the canonical patterns:
|
|
|
66
66
|
- **HTTP backend** → `backend-stack.md` — `gin` server skeleton, middleware ordering, SSE/streaming with `http.Flusher`, structured slog logging, graceful shutdown — distilled from the CLIProxyAPI codebase (a real proxy serving OpenAI/Gemini/Claude APIs).
|
|
67
67
|
- **RPC** → `grpc-connect.md` — when to pick Connect vs grpc-go, codegen pipeline, protovalidate, streaming.
|
|
68
68
|
- **DB** → `sqlc-pgx.md` — compile-time-safe SQL via sqlc + pgx connection pool + migrations via goose + testcontainers in CI.
|
|
69
|
-
- **CLI** → `cobra-stack.md` — cobra layout, slog integration, graceful shutdown on signals,
|
|
69
|
+
- **CLI** → `cobra-stack.md` — cobra layout, slog integration, graceful shutdown on signals, shell completions, `huh` prompts styled with `lipgloss`.
|
|
70
70
|
- **TUI** → `bubbletea-v2.md` — v2 model, `SetVirtualCursor(false)` + `tea.View{Cursor}` for CJK IME, why v1 was broken for Korean/Japanese/Chinese input.
|
|
71
|
-
- **Testing** → `testing.md` — table-driven tests, `require` vs `assert`, `autogold` snapshots, `
|
|
71
|
+
- **Testing** → `testing.md` — table-driven tests, `require` vs `assert`, `autogold` snapshots, `rapid` property tests, `testcontainers` for integration, `goleak` for goroutine leaks.
|
|
72
72
|
- **Bootstrap** → `bootstrap.md` — `scripts/go/new-project.ts` invocation, project layout (`cmd/`, `internal/`, `pkg/`), Taskfile, CI.
|
|
73
73
|
- **Strict config** → `golangci-strict.md` — the canonical `.golangci.yml` with the full linter whitelist and per-linter rationale.
|
|
74
74
|
- **One-liners** → `one-liners.md` — `go run` scripts with `//go:build ignore`, `gorun`-style invocation.
|
|
@@ -81,7 +81,7 @@ The `cmd/server/main.go` is the most common violator. Refactor it: `main.go` onl
|
|
|
81
81
|
|
|
82
82
|
## Existing codebases — non-strict project
|
|
83
83
|
|
|
84
|
-
When editing an existing `.go` file that doesn't follow these rules: **write new code in strict style, don't refactor existing code in the same change.** Use the `remove-ai-slops` skill for branch-scope cleanup.
|
|
84
|
+
When editing an existing `.go` file that doesn't follow these rules: **write new code in strict style, don't refactor existing code in the same change.** The one exception is the 250 pure-LOC ceiling: if your edit adds lines to a file already over it, split the unit you are touching into its own file first (see [`../code-smells.md`](../code-smells.md) Smell 1); everything else waits for a separate change. Use the `remove-ai-slops` skill for branch-scope cleanup.
|
|
85
85
|
|
|
86
86
|
## Activation
|
|
87
87
|
|
|
@@ -41,7 +41,7 @@ These are deliberate project choices. Violations are always wrong, not "style pr
|
|
|
41
41
|
11. **No Any, no object** — both are banned as type annotations. `object` erases all structural information (zero callable attributes, zero narrowing). Use `Protocol` (structural typing), `TypeVar` (generic pass-through), explicit union (known variants), or `TypedDict` (dict shapes).
|
|
42
42
|
12. **No cast** — `cast()` is banned. Redesign the types.
|
|
43
43
|
13. **No type: ignore** — fix the type error. The checker is right; you are wrong.
|
|
44
|
-
14. **No broad except** — `except Exception` and `except BaseException` are banned. Catch the **specific** exception you expect. A broad catch swallows bugs you need to see — `KeyError`, `AttributeError`, `TypeError` all vanish silently. If you genuinely need a catch-all at a top-level boundary (CLI entry, HTTP handler),
|
|
44
|
+
14. **No broad except** — `except Exception` and `except BaseException` are banned. Catch the **specific** exception you expect. A broad catch swallows bugs you need to see — `KeyError`, `AttributeError`, `TypeError` all vanish silently. If you genuinely need a catch-all at a top-level boundary (CLI entry, HTTP handler), put `# noqa: BROAD_EXCEPT_OK` on the `except` line and log + re-raise.
|
|
45
45
|
|
|
46
46
|
### Typing and safety
|
|
47
47
|
|
|
@@ -147,19 +147,19 @@ except Exception:
|
|
|
147
147
|
# GOOD — catch what you expect
|
|
148
148
|
try:
|
|
149
149
|
result = api.fetch(url)
|
|
150
|
-
except
|
|
150
|
+
except httpx2.HTTPStatusError as e:
|
|
151
151
|
logger.error("API %d: %s", e.response.status_code, e.request.url)
|
|
152
152
|
return None
|
|
153
|
-
except
|
|
153
|
+
except httpx2.ConnectError:
|
|
154
154
|
raise ServiceUnavailableError(service="api") from None
|
|
155
155
|
|
|
156
|
-
# GOOD — top-level boundary (only
|
|
157
|
-
def main() -> int:
|
|
156
|
+
# GOOD — top-level boundary (CLI entry or HTTP handler: the only places a broad catch is acceptable)
|
|
157
|
+
def main() -> int:
|
|
158
158
|
try:
|
|
159
159
|
return run()
|
|
160
|
-
except Exception:
|
|
160
|
+
except Exception: # noqa: BROAD_EXCEPT_OK
|
|
161
161
|
logger.exception("unhandled error")
|
|
162
|
-
|
|
162
|
+
raise
|
|
163
163
|
```
|
|
164
164
|
|
|
165
165
|
### Async
|
|
@@ -307,7 +307,7 @@ Tests still follow the iron list — frozen dataclasses, typed errors, exhaustiv
|
|
|
307
307
|
|
|
308
308
|
## Existing codebases
|
|
309
309
|
|
|
310
|
-
When editing an existing file that doesn't follow these rules: **write new code in strict style, don't refactor existing code in the same change.** Mixing feature work with style migration makes reviews harder and bugs likelier.
|
|
310
|
+
When editing an existing file that doesn't follow these rules: **write new code in strict style, don't refactor existing code in the same change.** The one exception is the 250 pure-LOC ceiling: if your edit adds lines to a file already over it, split the unit you are touching into its own file first (see [`../code-smells.md`](../code-smells.md) Smell 1); everything else waits for a separate change. Mixing feature work with style migration makes reviews harder and bugs likelier.
|
|
311
311
|
|
|
312
312
|
## Activation
|
|
313
313
|
|
|
@@ -10,16 +10,16 @@ NEVER pandas. Polars (with numpy) plus DuckDB. Pandas is 10-50x slower, has weak
|
|
|
10
10
|
|---|---|---|
|
|
11
11
|
| `.csv` / `.parquet` / `.json` direct query | DuckDB | Zero memory load, SQL ergonomics |
|
|
12
12
|
| `.duckdb` file | DuckDB | Native format |
|
|
13
|
-
| Filter (any size) | Polars |
|
|
14
|
-
| Sort | Polars |
|
|
15
|
-
| Multi-table join | DuckDB |
|
|
16
|
-
| Heavy GROUP BY aggregation | DuckDB |
|
|
17
|
-
| Window function | Polars |
|
|
18
|
-
| Pivot / melt / string ops | Polars |
|
|
13
|
+
| Filter (any size) | Polars | row-wise filtering, low setup cost |
|
|
14
|
+
| Sort | Polars | in-memory sorting |
|
|
15
|
+
| Multi-table join | DuckDB | more join types, out-of-core joins |
|
|
16
|
+
| Heavy GROUP BY aggregation | DuckDB | large grouped aggregation |
|
|
17
|
+
| Window function | Polars | window expressions |
|
|
18
|
+
| Pivot / melt / string ops | Polars | reshape and string expressions |
|
|
19
19
|
| Larger than RAM | Polars streaming or DuckDB out-of-core | Both handle OOM |
|
|
20
20
|
| Mixed pipeline | Hybrid (zero-copy via Arrow) | Use each tool's strengths |
|
|
21
21
|
|
|
22
|
-
For the deep version (
|
|
22
|
+
For the deep version (engine choice, placement, OOM strategies, execution templates), load the **`data-scientist`** skill - it lives in this same skill set; when the engine choice matters, measure on the actual data, as that skill says.
|
|
23
23
|
|
|
24
24
|
## Standard imports
|
|
25
25
|
|
|
@@ -69,7 +69,7 @@ result = (
|
|
|
69
69
|
pl.len().alias("count"),
|
|
70
70
|
pl.sum("amount").alias("total"),
|
|
71
71
|
])
|
|
72
|
-
.collect(streaming
|
|
72
|
+
.collect(engine="streaming")
|
|
73
73
|
)
|
|
74
74
|
```
|
|
75
75
|
|
|
@@ -84,7 +84,7 @@ joined = duckdb.sql("""
|
|
|
84
84
|
JOIN 'products.parquet' p ON o.product_id = p.id
|
|
85
85
|
""").pl()
|
|
86
86
|
|
|
87
|
-
# Phase 2: Polars for filtering and transformation
|
|
87
|
+
# Phase 2: Polars for filtering and transformation
|
|
88
88
|
processed = (
|
|
89
89
|
joined
|
|
90
90
|
.filter(pl.col("amount") > 100)
|
|
@@ -98,7 +98,7 @@ MIRIFLAGS="\
|
|
|
98
98
|
**Interpret results:**
|
|
99
99
|
- Fails at Level 1 → Definite UB. Fix immediately.
|
|
100
100
|
- Passes Level 1, fails Level 2 → Provenance or alignment UB. Fix.
|
|
101
|
-
- Passes Levels 1-3, fails Level 4 → Tree Borrows found something Stacked Borrows missed (unusual). Investigate — may be a Tree Borrows false positive, but usually indicates fragile aliasing.
|
|
101
|
+
- Passes Levels 1-3, fails Level 4 → Tree Borrows found something Stacked Borrows missed (unusual). Investigate — may be a Tree Borrows false positive, but usually indicates fragile aliasing. It does not ship until the aliasing is fixed or the false positive is proven and recorded with the Miri output.
|
|
102
102
|
- Passes all 4 → Miri-clean. Proceed to supplementary tools.
|
|
103
103
|
|
|
104
104
|
### Phase 3: Supplementary Scans
|
|
@@ -159,11 +159,11 @@ Is there unsafe code in the changeset?
|
|
|
159
159
|
│ NO → Run Miri Level 2 (strict provenance).
|
|
160
160
|
│ Miri fails?
|
|
161
161
|
│ YES → Stop. Classify. Fix. Prove. Then continue.
|
|
162
|
-
│ NO → Proceed with the original task.
|
|
162
|
+
│ NO → Proceed with the original task; run Levels 3 and 4 before it ships.
|
|
163
163
|
NO → Proceed normally.
|
|
164
164
|
```
|
|
165
165
|
|
|
166
|
-
This is not optional. **Every `unsafe` block
|
|
166
|
+
This is not optional. **Every `unsafe` block passes Miri Levels 3 and 4 before it ships.**
|
|
167
167
|
|
|
168
168
|
## SAFETY Comment Standard
|
|
169
169
|
|
|
@@ -16,7 +16,7 @@ These are deliberate project choices. Violations are always wrong, not "style pr
|
|
|
16
16
|
| Category | Use | Never |
|
|
17
17
|
|---|---|---|
|
|
18
18
|
| Runtime | Bun (native TS, single binary) | ts-node, tsx |
|
|
19
|
-
| Package manager | `pnpm` | npm, yarn (unless workspace requires it) |
|
|
19
|
+
| Package manager | Bun (`bun install`); `pnpm` only when Node is forced | npm, yarn (unless workspace requires it) |
|
|
20
20
|
| Linter + formatter | **oxlint + oxfmt**, with both local copy rules | New ESLint, Prettier, or Biome setups; retain them only in repositories already using them |
|
|
21
21
|
| Type checker | `tsc --noEmit` with strict config | skip type checking |
|
|
22
22
|
| Web framework | Hono | Express |
|
|
@@ -39,7 +39,7 @@ These are deliberate project choices. Violations are always wrong, not "style pr
|
|
|
39
39
|
11. **as const for constants** — module-level constant objects and arrays use `as const`.
|
|
40
40
|
12. **import type** — type-only imports use `import type`. Enforced by `verbatimModuleSyntax`.
|
|
41
41
|
13. **Named exports only** — no `export default`. Exception: framework requirement (Next.js pages, etc.).
|
|
42
|
-
14. **No empty catch, no catch-and-swallow** — every `catch` block must either (a) narrow the error with `instanceof` and handle each case, or (b) re-throw. Empty catch blocks and `catch (e) { console.error(e) }` without narrowing or re-throw are banned — they hide bugs. At top-level boundaries (CLI entry, HTTP handler), opt out with `// no-excuse-ok: catch
|
|
42
|
+
14. **No empty catch, no catch-and-swallow** — every `catch` block must either (a) narrow the error with `instanceof` and handle each case, or (b) re-throw. Empty catch blocks and `catch (e) { console.error(e) }` without narrowing or re-throw are banned — they hide bugs. At top-level boundaries (CLI entry, HTTP handler), opt out with `// no-excuse-ok: catch` on the `catch` line.
|
|
43
43
|
|
|
44
44
|
### Data modeling — which construct, when
|
|
45
45
|
|
|
@@ -91,10 +91,10 @@ try {
|
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
// GOOD — top-level boundary (only place catch-all is acceptable)
|
|
94
|
-
async function main(): Promise<void> {
|
|
94
|
+
async function main(): Promise<void> {
|
|
95
95
|
try {
|
|
96
96
|
await run()
|
|
97
|
-
} catch (e) {
|
|
97
|
+
} catch (e) { // no-excuse-ok: catch
|
|
98
98
|
console.error("unhandled:", e)
|
|
99
99
|
process.exit(1)
|
|
100
100
|
}
|
|
@@ -190,7 +190,7 @@ Tests still follow the iron list — branded types, typed errors, exhaustive swi
|
|
|
190
190
|
|
|
191
191
|
## Existing codebases
|
|
192
192
|
|
|
193
|
-
When editing an existing file that doesn't follow these rules: **write new code in strict style, don't refactor existing code in the same change.**
|
|
193
|
+
When editing an existing file that doesn't follow these rules: **write new code in strict style, don't refactor existing code in the same change.** The one exception is the 250 pure-LOC ceiling: if your edit adds lines to a file already over it, split the unit you are touching into its own file first (see [`../code-smells.md`](../code-smells.md) Smell 1); everything else waits for a separate change.
|
|
194
194
|
|
|
195
195
|
## Activation
|
|
196
196
|
|
|
@@ -106,17 +106,15 @@ Should I proceed with [recommendation], or would you prefer differently?
|
|
|
106
106
|
|
|
107
107
|
## Step 0.3: Create Initial Todos
|
|
108
108
|
|
|
109
|
-
**IMMEDIATELY after understanding the request, create todos:**
|
|
109
|
+
**IMMEDIATELY after understanding the request, create these todos with the session's todo tool (all pending):**
|
|
110
110
|
|
|
111
111
|
\`\`\`
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
{"id": "phase-6", "content": "PHASE 6: Final Verification - full test suite and regression check", "status": "pending", "priority": "high"}
|
|
119
|
-
])
|
|
112
|
+
- phase-1: PHASE 1: Codebase Analysis - launch parallel explore agents
|
|
113
|
+
- phase-2: PHASE 2: Build Codemap - map dependencies and impact zones
|
|
114
|
+
- phase-3: PHASE 3: Test Assessment - analyze test coverage and verification strategy
|
|
115
|
+
- phase-4: PHASE 4: Plan Generation - invoke Plan agent for detailed refactoring plan
|
|
116
|
+
- phase-5: PHASE 5: Execute Refactoring - step-by-step with continuous verification
|
|
117
|
+
- phase-6: PHASE 6: Final Verification - full test suite and regression check
|
|
120
118
|
\`\`\`
|
|
121
119
|
|
|
122
120
|
---
|
|
@@ -179,14 +177,14 @@ While background agents are running, use direct tools:
|
|
|
179
177
|
|
|
180
178
|
\`\`\`typescript
|
|
181
179
|
// Find definition(s)
|
|
182
|
-
|
|
180
|
+
lsp_goto_definition(filePath, line, character) // Where is it defined?
|
|
183
181
|
|
|
184
182
|
// Find ALL usages across workspace
|
|
185
|
-
|
|
183
|
+
lsp_find_references(filePath, line, character, includeDeclaration=true)
|
|
186
184
|
|
|
187
185
|
// Get file structure
|
|
188
|
-
|
|
189
|
-
|
|
186
|
+
lsp_symbols(filePath, scope="document") // Hierarchical outline
|
|
187
|
+
lsp_symbols(filePath, scope="workspace", query="[target_symbol]") // Search by name
|
|
190
188
|
|
|
191
189
|
// Get current diagnostics
|
|
192
190
|
lsp_diagnostics(filePath) // Errors, warnings before we start
|
|
@@ -195,8 +193,8 @@ lsp_diagnostics(filePath) // Errors, warnings before we start
|
|
|
195
193
|
### AST-Grep Skill for Pattern Analysis:
|
|
196
194
|
|
|
197
195
|
\`\`\`bash
|
|
198
|
-
// Find structural patterns
|
|
199
|
-
python3 scripts/ast_grep_helper.py search 'function $NAME($$$) { $$$ }' --lang ts
|
|
196
|
+
// Find structural patterns — run this from the ast-grep skill's directory; this skill ships no scripts/
|
|
197
|
+
python3 scripts/ast_grep_helper.py search 'function $NAME($$$) { $$$ }' src/ --lang ts
|
|
200
198
|
|
|
201
199
|
# Preview refactoring first
|
|
202
200
|
sg --pattern '[old_pattern]' --rewrite '[new_pattern]' --lang ts src/
|
|
@@ -205,7 +203,7 @@ sg --pattern '[old_pattern]' --rewrite '[new_pattern]' --lang ts src/
|
|
|
205
203
|
### Grep for Text Patterns:
|
|
206
204
|
|
|
207
205
|
\`\`\`
|
|
208
|
-
grep(pattern="[search_term]", path="src/"
|
|
206
|
+
grep(pattern="[search_term]", path="src/") // narrow to *.ts with the grep tool's file-filter parameter
|
|
209
207
|
\`\`\`
|
|
210
208
|
|
|
211
209
|
## 1.3: Collect Background Results
|
|
@@ -342,6 +340,11 @@ Which approach do you prefer?
|
|
|
342
340
|
- Unit: \`bun test\` / \`npm test\` / \`pytest\` / etc.
|
|
343
341
|
- Integration: [command if exists]
|
|
344
342
|
- Type check: \`tsc --noEmit\` / \`pyright\` / etc.
|
|
343
|
+
- Lint: [project's linter command, the one Phase 6.3 runs]
|
|
344
|
+
|
|
345
|
+
### Baseline (before any change)
|
|
346
|
+
- Pass counts: [X/Y passing per test command above]
|
|
347
|
+
- lsp_diagnostics: [pre-existing diagnostics recorded in Phase 1.2]
|
|
345
348
|
|
|
346
349
|
### Verification Checkpoints
|
|
347
350
|
After each refactoring step:
|
|
@@ -405,17 +408,14 @@ After receiving plan from Plan agent:
|
|
|
405
408
|
|
|
406
409
|
## 4.3: Register Detailed Todos
|
|
407
410
|
|
|
408
|
-
Convert Plan agent output into granular todos:
|
|
411
|
+
Convert Plan agent output into granular todos with the session's todo tool (each step from the plan becomes a todo, followed by its verify todo):
|
|
409
412
|
|
|
410
413
|
\`\`\`
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
{"id": "verify-2", "content": "Verify Step 2: run tests", "status": "pending", "priority": "medium"},
|
|
417
|
-
// ... continue for all steps
|
|
418
|
-
])
|
|
414
|
+
- refactor-1: Step 1: [description]
|
|
415
|
+
- verify-1: Verify Step 1: run tests
|
|
416
|
+
- refactor-2: Step 2: [description]
|
|
417
|
+
- verify-2: Verify Step 2: run tests
|
|
418
|
+
- ... continue for all steps
|
|
419
419
|
\`\`\`
|
|
420
420
|
|
|
421
421
|
**Mark phase-4 as completed.**
|
|
@@ -449,8 +449,8 @@ lsp_rename(filePath, line, character, newName) // Execute rename
|
|
|
449
449
|
// Preview first
|
|
450
450
|
sg --pattern '[pattern]' --rewrite '[rewrite]' --lang ts path/to/file.ts
|
|
451
451
|
|
|
452
|
-
// If preview looks good, execute
|
|
453
|
-
python3 scripts/ast_grep_helper.py replace '[pattern]' '[rewrite]'
|
|
452
|
+
// If preview looks good, execute (from the ast-grep skill's directory)
|
|
453
|
+
python3 scripts/ast_grep_helper.py replace '[pattern]' '[rewrite]' path/to/file.ts --lang ts --apply
|
|
454
454
|
\`\`\`
|
|
455
455
|
|
|
456
456
|
**For Structural Changes:**
|
|
@@ -543,7 +543,7 @@ bun run build # or npm run build, etc.
|
|
|
543
543
|
\`\`\`typescript
|
|
544
544
|
// Check all changed files
|
|
545
545
|
for (file of changedFiles) {
|
|
546
|
-
lsp_diagnostics(file) // Must
|
|
546
|
+
lsp_diagnostics(file) // Must be clean or same as the Phase 1 baseline: zero new diagnostics
|
|
547
547
|
}
|
|
548
548
|
\`\`\`
|
|
549
549
|
|
|
@@ -609,8 +609,8 @@ You already know these tools. Use them intelligently:
|
|
|
609
609
|
|
|
610
610
|
## LSP Tools
|
|
611
611
|
Leverage LSP tools for precision analysis. Key patterns:
|
|
612
|
-
- **Understand before changing**: \`
|
|
613
|
-
- **Impact analysis**: \`
|
|
612
|
+
- **Understand before changing**: \`lsp_goto_definition\` to grasp context
|
|
613
|
+
- **Impact analysis**: \`lsp_find_references\` to map all usages before modification
|
|
614
614
|
- **Safe refactoring**: \`lsp_prepare_rename\` → \`lsp_rename\` for symbol renames
|
|
615
615
|
- **Continuous verification**: \`lsp_diagnostics\` after every change
|
|
616
616
|
|
|
@@ -674,7 +674,7 @@ Then choose the path:
|
|
|
674
674
|
- **Team path (5.1-T)**: when the plan recommends \`team\` AND \`file_independent_steps >= 3\`. Members execute in parallel, Lead orchestrates, a \`deep-high\` verifier lives outside the team.
|
|
675
675
|
- **Legacy path (5.1-L)**: otherwise. Use the original 5.1 / 5.2 / 5.3 flow from above.
|
|
676
676
|
|
|
677
|
-
Record the chosen path in the
|
|
677
|
+
Record the chosen path in the todo list.
|
|
678
678
|
|
|
679
679
|
## Phase 5.1-T: \`refactor-squad\` team execution
|
|
680
680
|
|
|
@@ -682,9 +682,9 @@ Record the chosen path in the TodoWrite list.
|
|
|
682
682
|
|
|
683
683
|
1. When the session lists the \`team-mode\` skill, load it for lifecycle, message protocol, and limits.
|
|
684
684
|
2. Call \`team_list\` and verify no active \`refactor-squad\` run exists; if one does, shutdown + delete the orphan before proceeding.
|
|
685
|
-
3. If
|
|
685
|
+
3. If the project-level spec \`.omo/teams/refactor-squad/config.json\` (under the project root) is missing, write it using the spec below.
|
|
686
686
|
|
|
687
|
-
**Team spec** (
|
|
687
|
+
**Team spec** (\`<project root>/.omo/teams/refactor-squad/config.json\`):
|
|
688
688
|
|
|
689
689
|
\`\`\`json
|
|
690
690
|
{
|
|
@@ -748,7 +748,7 @@ While any team task is \`pending | claimed | in_progress\`:
|
|
|
748
748
|
prompt=<files touched + verify-spec commands + instruction to return "PASS" or "FAIL:<failing test + specific error + suggested revert hunks>">
|
|
749
749
|
)
|
|
750
750
|
\`\`\`
|
|
751
|
-
If \`deep\` is unavailable, fall back to \`category="unspecified-high"\`. Do not create a commit checkpoint until the verifier returns PASS.
|
|
751
|
+
If \`deep-high\` is unavailable, fall back to \`category="unspecified-high"\`. Do not create a commit checkpoint until the verifier returns PASS.
|
|
752
752
|
- On a verifier PASS: make the commit checkpoint for that step (see original 5.3). Proceed.
|
|
753
753
|
- On a verifier FAIL: Lead decides:
|
|
754
754
|
- **Retry with fix hint**: \`team_task_update(status=pending)\` on the original step + \`team_send_message(teamRunId=<id>, to=<original member>, summary="retry", body=<specific failure from verifier>)\`. Runtime reassigns.
|
|
@@ -765,7 +765,7 @@ If Phase 5 used the team path, dismantle \`refactor-squad\` BEFORE producing the
|
|
|
765
765
|
2. \`team_delete(teamRunId=<id>)\`.
|
|
766
766
|
3. \`team_list\` to confirm no residual \`refactor-squad\` run.
|
|
767
767
|
|
|
768
|
-
The
|
|
768
|
+
The \`.omo/teams/refactor-squad/config.json\` declaration stays on disk in the project; next session reuses it.
|
|
769
769
|
|
|
770
770
|
Append to the 6.6 summary a "Dispatch path" line and, when team path was used, team metrics (teamRunId, tasks created, verifier runs, team lifetime).
|
|
771
771
|
|
|
@@ -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
|
|
|
@@ -22,7 +22,7 @@ User request
|
|
|
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
|
> 微博主要通过网页抓取,推荐使用通用网页读取方式。
|