lazycodex-ai 5.1.62 → 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 +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
|
@@ -43,9 +43,9 @@ foo === foo.bar
|
|
|
43
43
|
|
|
44
44
|
Useful for finding redundant comparisons, double assignments, etc.
|
|
45
45
|
|
|
46
|
-
### `$$$` is
|
|
46
|
+
### `$$$` is lazy
|
|
47
47
|
|
|
48
|
-
When you write `foo($$$A, b, $$$C)`, the matcher does **not** backtrack or try every possible split. It
|
|
48
|
+
When you write `foo($$$A, b, $$$C)`, the matcher does **not** backtrack or try every possible split. It fills `$$$A` only until the rest of the pattern can match — the first `b` here — then everything left goes into `$$$C`. On `foo(a, c, b, b, c)` that is `A=[a, c]` and `C=[b, c]`, never the longer `A=[a, c, b]`.
|
|
49
49
|
|
|
50
50
|
```ts
|
|
51
51
|
// Pattern
|
|
@@ -116,11 +116,11 @@ Two tools help you confirm a pattern parses the way you expect:
|
|
|
116
116
|
# Print the AST of the pattern itself
|
|
117
117
|
sg run -p 'console.log($MSG)' --lang ts --debug-query=ast
|
|
118
118
|
|
|
119
|
-
# Print the
|
|
120
|
-
sg run -p '
|
|
119
|
+
# Print the CST of code copied from a file (great for figuring out kind names)
|
|
120
|
+
sg run -p 'function f(x: number) { return x + 1 }' --lang ts --debug-query=cst src/example.ts 2>&1 >/dev/null | head -40
|
|
121
121
|
```
|
|
122
122
|
|
|
123
|
-
`--debug-query=ast` shows the named AST nodes only (cleaner). `--debug-query=cst` shows everything including punctuation. Both
|
|
123
|
+
`--debug-query=ast` shows the named AST nodes only (cleaner). `--debug-query=cst` shows everything including punctuation. Both dump the tree of the **pattern** (not of the searched files) to stderr, so they don't interfere with stdout JSON; redirect `2>&1 >/dev/null` to pipe the dump. To learn a file's node kinds, paste that file's code as the pattern.
|
|
124
124
|
|
|
125
125
|
The web playground is also fast: <https://ast-grep.github.io/playground.html>.
|
|
126
126
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Pitfalls — what breaks patterns and how to fix them
|
|
2
2
|
|
|
3
|
-
This is the failure-mode field guide. The `scripts/ast_grep_helper.py validate` subcommand mechanically checks
|
|
3
|
+
This is the failure-mode field guide. The `scripts/ast_grep_helper.py validate` subcommand mechanically checks the §1 items for backslash escapes, `.*`/`.+`, character classes, and `|` alternation before calling `sg` (it does not detect `^`/`$` anchors), plus the missing-body and trailing-colon cases from §2; the rest are lower-frequency but still common.
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -126,9 +126,9 @@ If you actually want two independent captures, name them differently: `$X = $Y`.
|
|
|
126
126
|
|
|
127
127
|
---
|
|
128
128
|
|
|
129
|
-
## 6. `$$$` is
|
|
129
|
+
## 6. `$$$` is lazy and never backtracks
|
|
130
130
|
|
|
131
|
-
`$$$` does **not** backtrack. It
|
|
131
|
+
`$$$` does **not** backtrack. It stops at the first node that lets the rest of the pattern match, then commits — on `foo($$$A, b, $$$C)` against `foo(a, c, b, b, c)`, `$$$A` is `[a, c]`, not `[a, c, b]`. If your pattern needs more to land in `$$$A`, structure it differently:
|
|
132
132
|
|
|
133
133
|
```ts
|
|
134
134
|
// You want "match foo($X), where $X is any single arg"
|
|
@@ -5,11 +5,13 @@ Every pattern in this file has been verified against the canonical syntax. They
|
|
|
5
5
|
Use them with the helper:
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
python3 scripts/ast_grep_helper.py search '<PATTERN>' [path] --lang <LANG>
|
|
9
|
+
python3 scripts/ast_grep_helper.py replace '<PATTERN>' '<REWRITE>' [path] --lang <LANG> # dry-run
|
|
10
|
+
python3 scripts/ast_grep_helper.py replace '<PATTERN>' '<REWRITE>' [path] --lang <LANG> --apply
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
+
Put any `[path]` BEFORE `--lang`: the helper's `paths` argument is `nargs='*'`, and on Python 3.9 (the stock macOS `python3`, which the helper supports) a positional after `--lang` is rejected with `unrecognized arguments`. A pattern or rewrite containing a literal `|` (e.g. `$T | None`) is refused by the helper's alternation check — run two calls, or pass `--force` to reach `sg` anyway.
|
|
14
|
+
|
|
13
15
|
Or directly:
|
|
14
16
|
|
|
15
17
|
```bash
|
|
@@ -132,7 +134,7 @@ sg run -p 'print($$$A)' -r 'logger.info($$$A)' --lang py --update-all .
|
|
|
132
134
|
# Optional[X] -> X | None
|
|
133
135
|
sg run -p 'Optional[$T]' -r '$T | None' --lang py --update-all .
|
|
134
136
|
|
|
135
|
-
# from typing import List ->
|
|
137
|
+
# from typing import List -> annotate for manual removal (built-in list works in 3.9+)
|
|
136
138
|
sg run -p 'from typing import List' -r 'from typing import List # TODO: remove, use list' --lang py --update-all .
|
|
137
139
|
```
|
|
138
140
|
|
|
@@ -488,14 +488,14 @@ ignores:
|
|
|
488
488
|
- '**/__generated__/**'
|
|
489
489
|
```
|
|
490
490
|
|
|
491
|
-
If omitted, the rule runs on every file matching its `language`.
|
|
491
|
+
If omitted, the rule runs on every file matching its `language`. `sgconfig.yml` has no project-wide `files`/`ignores` to override; its `languageGlobs` only changes which language a file parses as. To narrow a whole scan, pass `--globs` to `sg scan`.
|
|
492
492
|
|
|
493
493
|
Object form (rare):
|
|
494
494
|
|
|
495
495
|
```yaml
|
|
496
496
|
files:
|
|
497
|
-
-
|
|
498
|
-
|
|
497
|
+
- glob: 'src/**/*.ts'
|
|
498
|
+
caseInsensitive: true
|
|
499
499
|
```
|
|
500
500
|
|
|
501
501
|
---
|
|
@@ -27,13 +27,13 @@ USAGE
|
|
|
27
27
|
|
|
28
28
|
EXAMPLES
|
|
29
29
|
# Find all console.log calls in TypeScript
|
|
30
|
-
ast_grep_helper.py search 'console.log($MSG)' --lang ts
|
|
30
|
+
ast_grep_helper.py search 'console.log($MSG)' src/ --lang ts
|
|
31
31
|
|
|
32
32
|
# Migrate console.log -> logger.info (dry-run preview)
|
|
33
|
-
ast_grep_helper.py replace 'console.log($MSG)' 'logger.info($MSG)' --lang ts
|
|
33
|
+
ast_grep_helper.py replace 'console.log($MSG)' 'logger.info($MSG)' src/ --lang ts
|
|
34
34
|
|
|
35
35
|
# Apply the same replacement
|
|
36
|
-
ast_grep_helper.py replace 'console.log($MSG)' 'logger.info($MSG)' --lang ts
|
|
36
|
+
ast_grep_helper.py replace 'console.log($MSG)' 'logger.info($MSG)' src/ --lang ts --apply
|
|
37
37
|
|
|
38
38
|
# Validate a pattern offline (no sg call, no filesystem access)
|
|
39
39
|
ast_grep_helper.py validate '\\w+' --lang ts
|
|
@@ -117,9 +117,8 @@ changing the extension's automation settings.
|
|
|
117
117
|
out everywhere. No flow here needs it.
|
|
118
118
|
- **`focused: false` by default.** The browser belongs to someone who is probably using it.
|
|
119
119
|
- **One short, named session per task,** always stopped.
|
|
120
|
-
- **Bot-scored or WAF targets go
|
|
121
|
-
capture on every tab it drives, which is a known automation signal
|
|
122
|
-
`connectCloakProfile()` is the stealth path.
|
|
120
|
+
- **Bot-scored or WAF targets never go through the attached engine** — route them to the `ultimate-browsing` skill, whose browser tier is the owned engine (`connectCloakProfile()`). The attached engine's daemon enables console
|
|
121
|
+
capture on every tab it drives, which is a known automation signal.
|
|
123
122
|
|
|
124
123
|
## Where the rest lives
|
|
125
124
|
|
|
@@ -60,4 +60,4 @@ python3 -B scripts/find-agent-sessions.py read <session-id>
|
|
|
60
60
|
pytest scripts/tests
|
|
61
61
|
```
|
|
62
62
|
|
|
63
|
-
- Parent:
|
|
63
|
+
- Parent (source checkout only, not shipped with the installed skill): `packages/shared-skills/AGENTS.md`.
|
|
@@ -80,10 +80,11 @@ Each `match_reasons` entry includes `query`, `platform`, `field`, and `snippet`,
|
|
|
80
80
|
| `--cwd` | Working-directory substring |
|
|
81
81
|
| `--model` | Model substring |
|
|
82
82
|
| `--limit` | Maximum results |
|
|
83
|
-
| `--query` | Repeatable search query; multiple queries return per-query groups plus a de-duplicated merged result list |
|
|
84
83
|
| `--workers` | Parallel worker count for platform scans, transcript parsing, OpenCode message joins, and multi-query matching |
|
|
85
84
|
| `--include-subagents` | Include subagent/child sessions as standalone `list`/`search` results (hidden by default) |
|
|
86
85
|
|
|
86
|
+
`search` (alias `find`) also takes `--query`: a repeatable search query; multiple queries return per-query groups plus a de-duplicated merged result list. `list` ignores `--query` and positional text.
|
|
87
|
+
|
|
87
88
|
When `--platform` is omitted, the finder searches every registered platform in parallel. Each optional platform first probes fixed, known transcript roots and returns immediately when the product has no local store, so broad default searches stay cheap. Use repeatable flags such as `--platform openclaw --platform droid` only when narrowing. Comma-separated platform values are intentionally unsupported.
|
|
88
89
|
|
|
89
90
|
For OpenCode, the finder uses `opencode db path` plus direct SQLite queries first, then `opencode session list --format json` as a fallback. It avoids heavy `messages/` or `parts/` scans during normal list/search, and only falls back to file joins when the OpenCode DB/CLI is unavailable or explicit `--root` values request a nonstandard store.
|
|
@@ -42,8 +42,9 @@ Per-surface patterns and pitfalls: read `references/execution-surfaces.md` befor
|
|
|
42
42
|
older spellings.
|
|
43
43
|
- **numpy** when numeric work goes beyond SQL/DataFrame aggregation: statistical tests,
|
|
44
44
|
linear algebra, FFT, random sampling.
|
|
45
|
-
- **matplotlib** for
|
|
46
|
-
|
|
45
|
+
- **matplotlib** for charts in a kernel, a file or a document; a chart shown inline beside a
|
|
46
|
+
reply is drawn in HTML instead. Read `references/visualization.md` first either way; it
|
|
47
|
+
carries the quality bar, the inline case and a mandatory visual check.
|
|
47
48
|
|
|
48
49
|
Performance folklore ("X is Nx faster at filtering") varies with data shape, cardinality,
|
|
49
50
|
and hardware. When the engine choice materially matters, measure on the actual data instead
|
|
@@ -65,10 +66,11 @@ a direct scan. Then place the work:
|
|
|
65
66
|
takes longer.
|
|
66
67
|
- **Query remotely, in place** when the data lives elsewhere: DuckDB reads http(s)/S3
|
|
67
68
|
Parquet and CSV with projection and predicate pushdown, so fetch the columns and rows the
|
|
68
|
-
question needs, never the whole file. When data sits
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
data
|
|
69
|
+
question needs, never the whole file. When data sits in a database, run the aggregation
|
|
70
|
+
there in its own SQL and pull back the result rows, never a table dump. When data sits on
|
|
71
|
+
another machine you can execute on, ship the query to the data and return the small
|
|
72
|
+
result. Rule: result much smaller than data — move the query; repeated local iteration
|
|
73
|
+
planned — move a pruned copy of the data once.
|
|
72
74
|
|
|
73
75
|
Sizing heuristics and recipes: `references/placement.md`.
|
|
74
76
|
|
|
@@ -8,13 +8,17 @@ ten times) or kills the machine (loading a dataset larger than RAM and swapping)
|
|
|
8
8
|
Three facts, one cell or script:
|
|
9
9
|
|
|
10
10
|
```python
|
|
11
|
-
import os, shutil, subprocess, sys
|
|
11
|
+
import os, re, shutil, subprocess, sys
|
|
12
12
|
size = os.path.getsize("data.csv") # bytes on disk
|
|
13
13
|
disk_free = shutil.disk_usage(".").free # spill headroom
|
|
14
|
-
if sys.platform == "darwin":
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
if sys.platform == "darwin": # free RAM = free + inactive + speculative pages
|
|
15
|
+
vm = subprocess.run(["vm_stat"], capture_output=True, text=True).stdout
|
|
16
|
+
page = int(re.search(r"page size of (\d+)", vm).group(1))
|
|
17
|
+
ram_free = page * sum(int(re.search(rf"{k}:\s+(\d+)", vm).group(1))
|
|
18
|
+
for k in ("Pages free", "Pages inactive", "Pages speculative"))
|
|
19
|
+
else: # Linux: MemAvailable
|
|
20
|
+
ram_free = next(int(line.split()[1]) * 1024 for line in open("/proc/meminfo")
|
|
21
|
+
if line.startswith("MemAvailable:"))
|
|
18
22
|
# row estimate without loading (DuckDB streams the scan):
|
|
19
23
|
# duckdb.sql("SELECT count(*) FROM 'data.csv'")
|
|
20
24
|
```
|
|
@@ -6,10 +6,10 @@ This skill's uv lane (kernel-less harnesses, isolated one-shots) runs through `u
|
|
|
6
6
|
|
|
7
7
|
| Platform | Command |
|
|
8
8
|
|---|---|
|
|
9
|
-
| macOS / Linux / WSL
|
|
10
|
-
| Windows (PowerShell) | `powershell -ExecutionPolicy Bypass -File scripts/setup-uv.ps1` |
|
|
9
|
+
| macOS / Linux / WSL | `bash scripts/setup-uv.sh` |
|
|
10
|
+
| Windows (PowerShell; also from Git Bash, where `setup-uv.sh` exits) | `powershell -ExecutionPolicy Bypass -File scripts/setup-uv.ps1` |
|
|
11
11
|
|
|
12
|
-
Both scripts: detect OS + architecture → install uv to the latest release when missing → upgrade it when present (`uv self update`) → make it resolvable for the
|
|
12
|
+
Both scripts: detect OS + architecture → install uv to the latest release when missing → upgrade it when present (`uv self update`) → make it resolvable for the script's own `uv --version` check (an already-open shell still needs the PATH line below) → verify with `uv --version`. They are idempotent — safe to re-run any time.
|
|
13
13
|
|
|
14
14
|
## Manual install per platform
|
|
15
15
|
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
# Visualization
|
|
2
2
|
|
|
3
|
-
A chart exists to answer a question at a glance.
|
|
4
|
-
|
|
3
|
+
A chart exists to answer a question at a glance. A chart shown inline beside a reply
|
|
4
|
+
(`show_html_page`, `html_preview`, `html_render`) is drawn in HTML, never as a matplotlib PNG:
|
|
5
|
+
an image ignores the reader's theme and width. When the `visualize` skill is available, it builds
|
|
6
|
+
that page. There this file's chart-type table, Figures and Quality bar apply, and the matplotlib
|
|
7
|
+
calls do not. Everywhere else (a kernel, a file, a document) render it with matplotlib (resident
|
|
8
|
+
in most Python kernels; `uv run --with matplotlib` otherwise). Either way, look at it before delivering —
|
|
5
9
|
a chart nobody inspected is not evidence.
|
|
6
10
|
|
|
7
11
|
## When to chart
|
|
@@ -22,6 +26,15 @@ question — decoration dilutes the answer.
|
|
|
22
26
|
| Composition of a whole? | stacked or 100% bar — pie only for four or fewer slices |
|
|
23
27
|
| Many series over time? | small multiples over one spaghetti chart |
|
|
24
28
|
|
|
29
|
+
## Figures — every chart
|
|
30
|
+
|
|
31
|
+
- **Days start at the reader's midnight.** Cut daily, weekly and monthly buckets in the
|
|
32
|
+
reader's time zone, not UTC, and name the zone in the axis label or caption. A bucket still
|
|
33
|
+
filling (today, this week) is marked partial on its own bar, or it reads as a drop.
|
|
34
|
+
- **Cross-check one figure.** Recompute a headline number from a second source (another
|
|
35
|
+
table, the system's own dashboard, a raw count) and say beside the chart whether it
|
|
36
|
+
matched, and by how much it differed if not.
|
|
37
|
+
|
|
25
38
|
## Quality bar — every chart
|
|
26
39
|
|
|
27
40
|
- Title states the finding ("Seoul overtook Busan in March"), not the dataset name.
|
|
@@ -51,8 +64,10 @@ matplotlib.rcParams["axes.unicode_minus"] = False # keeps the minus sign rende
|
|
|
51
64
|
|
|
52
65
|
## Output contract
|
|
53
66
|
|
|
54
|
-
1.
|
|
55
|
-
|
|
67
|
+
1. Inline page beside a reply: no PNG. Draw the computed figures in HTML and preview them in
|
|
68
|
+
both themes, following the `visualize` skill when it is available.
|
|
69
|
+
2. Otherwise save a PNG next to the work: `plt.savefig(path, dpi=150, bbox_inches="tight")`,
|
|
70
|
+
and also render it inline when the surface displays rich output (kernels usually do).
|
|
56
71
|
3. Report the file path together with the answer.
|
|
57
72
|
|
|
58
73
|
## Visual QA — mandatory
|
|
@@ -26,7 +26,7 @@ The rest of this file is a map. **The knowledge is in `references/`.** This file
|
|
|
26
26
|
|
|
27
27
|
## Runtime Setup — MANDATORY READING BEFORE ATTACHING
|
|
28
28
|
|
|
29
|
-
The methodology is language-agnostic. The commands to launch, attach, breakpoint, and inspect are not. **Open the matching reference
|
|
29
|
+
The methodology is language-agnostic. The commands to launch, attach, breakpoint, and inspect are not. **Open the matching reference the moment you know the runtime (Phase 0, step 2) and before you attach anything. Not after.**
|
|
30
30
|
|
|
31
31
|
| Your runtime is… | Open this before attaching anything | Non-negotiable because… |
|
|
32
32
|
|---|---|---|
|
|
@@ -39,7 +39,7 @@ The methodology is language-agnostic. The commands to launch, attach, breakpoint
|
|
|
39
39
|
|
|
40
40
|
**If you cannot honestly say you just opened the reference for your runtime, open it now.**
|
|
41
41
|
|
|
42
|
-
> 🚨 **Native binary vs bundled binary — check before committing**: `file ./target` calls them both Mach-O / ELF. The 30-second discriminator is `du -h ./target` (50 MB+ suspect bundled) plus `strings -n 12 ./target | rg -
|
|
42
|
+
> 🚨 **Native binary vs bundled binary — check before committing**: `file ./target` calls them both Mach-O / ELF. The 30-second discriminator is `du -h ./target` (50 MB+ suspect bundled) plus `strings -n 12 ./target | rg -i 'bun|node_modules|webpack|esbuild|deno|pkg/lib|electron|pyinstaller|nexe|NODE_SEA_FUSE|tauri'`. If hits → bundled-js-binary.md. If clean → native-binary.md.
|
|
43
43
|
|
|
44
44
|
---
|
|
45
45
|
|
|
@@ -56,7 +56,7 @@ These are not "optional extras". They are the correct tool in their domain, and
|
|
|
56
56
|
| **Frida** | Any running process you must instrument live without source or symbols — hook a function and print real argument values, trace calls, stub a return. Complements Ghidra: Ghidra reads the bytes, Frida watches them execute. **If Ghidra's static decompile has hit its limit, reach for Frida.** | 📖 **[references/tools/frida.md](references/tools/frida.md)** |
|
|
57
57
|
| **DAP client (`dap.mjs`)** | Any time you would drive a debugger through a PTY and screen-scrape its text. Debuggers already speak the machine-readable Debug Adapter Protocol (debugpy, `dlv dap`, lldb-dap, js-debug); this bundled script drives it with bounded, monitorable output. **Prefer it over scraping `gdb`/`pdb` whenever the debugger speaks DAP.** Design modeled on oh-my-pi's `debug` tool (github.com/can1357/oh-my-pi). | 📖 **[references/tools/dap.md](references/tools/dap.md)** |
|
|
58
58
|
|
|
59
|
-
**Failing to use these tools in their domain is a process failure, not a stylistic choice.** If the bug is in a browser and you did Phase 8 without
|
|
59
|
+
**Failing to use these tools in their domain is a process failure, not a stylistic choice.** If the bug is in a browser and you did Phase 8 without omowright, you are doing it wrong. If the bug is in a stripped binary and you read hex with `xxd`, you are doing it wrong. The references tell you how. Read them.
|
|
60
60
|
|
|
61
61
|
---
|
|
62
62
|
|
|
@@ -74,8 +74,8 @@ Each phase has exactly one reference. Read it as you enter the phase — not in
|
|
|
74
74
|
| 5 | **User decision escalation** — only when evidence exhausted and the call has policy implications | [references/methodology/05-escalate.md](references/methodology/05-escalate.md) |
|
|
75
75
|
| 6 | **Root cause confirmation** — confirmed only when toggling the suspected cause toggles the bug | [references/methodology/06-fix.md](references/methodology/06-fix.md) |
|
|
76
76
|
| 7 | **Fix locked by a failing proof** — reuse the owner test that already fails or add one regression that fails on the pre-fix code, minimal green, no scope expansion | [references/methodology/06-fix.md](references/methodology/06-fix.md) |
|
|
77
|
-
| 8 | **Manual QA** — actually use the system (tmux for CLI,
|
|
78
|
-
| 9 | **Cleanup** — walk the journal, revert every artifact, verify `git diff` shows only fix + test | [references/methodology/09-cleanup.md](references/methodology/09-cleanup.md) |
|
|
77
|
+
| 8 | **Manual QA** — actually use the system (tmux for CLI, omowright for browser, real curl for API, real repro for binary) | [references/methodology/08-qa.md](references/methodology/08-qa.md) |
|
|
78
|
+
| 9 | **Cleanup** — walk the journal, revert every artifact, verify `git diff` shows only fix + test (plus any Phase 7 oversized-file split) | [references/methodology/09-cleanup.md](references/methodology/09-cleanup.md) |
|
|
79
79
|
| 10 | **Final verification** — four evidence gates before declaring done | [references/methodology/09-cleanup.md](references/methodology/09-cleanup.md) |
|
|
80
80
|
|
|
81
81
|
**Phase references are short by design.** Reading one takes a minute. Skipping one costs an hour.
|
|
@@ -66,7 +66,7 @@ Branch depending on what's available.
|
|
|
66
66
|
|
|
67
67
|
When the `team_*` tools are present, create a **debug-squad** team and split investigation across members working on different evidence sources. This is the right default whenever you have ≥3 hypotheses and any of them would take >10 minutes to investigate single-threaded.
|
|
68
68
|
|
|
69
|
-
**Team spec** — write to
|
|
69
|
+
**Team spec** — write to `.omo/teams/debug-squad/config.json` under the project root (the project-scoped spec location the team loader reads):
|
|
70
70
|
|
|
71
71
|
```json
|
|
72
72
|
{
|
|
@@ -86,7 +86,7 @@ When the `team_*` tools are present, create a **debug-squad** team and split inv
|
|
|
86
86
|
{
|
|
87
87
|
"kind": "category",
|
|
88
88
|
"category": "deep-low",
|
|
89
|
-
"prompt": "You are the Reproduction Engineer. Your job: build the smallest reliable repro — a curl command, a vitest/pytest/go test, a tmux script,
|
|
89
|
+
"prompt": "You are the Reproduction Engineer. Your job: build the smallest reliable repro — a curl command, a vitest/pytest/go test, a tmux script, an omowright script for browser bugs, a pwntools script for binary targets. It must reproduce on first try and be copy-pasteable by the Lead. Document exact input, expected output, observed output. Save repro artifacts under /tmp/ and tell the Lead to journal them. If the bug is browser-based you MUST drive a real browser through omowright (references/tools/browser-qa.md) — do not simulate with curl."
|
|
90
90
|
},
|
|
91
91
|
{
|
|
92
92
|
"kind": "category",
|
|
@@ -100,6 +100,8 @@ Only cleanup directly related to the fix. Do not re-architect.
|
|
|
100
100
|
|
|
101
101
|
If the code around the fix is rough, note it in the journal as a follow-up for the user; do not expand scope here. Refactoring during a bugfix is how one-line fixes turn into hundred-line diffs nobody can review.
|
|
102
102
|
|
|
103
|
+
**The one carve-out, and it runs before step 2, not after green:** if the fix must add lines to a file that already exceeds the `programming` skill's 250 pure-LOC ceiling (its DEFECT row forbids new lines in that file), first extract the unit you are touching into its own file as a separate, behavior-preserving move (the red test still fails for the same reason, every other test still passes), journal it, then make the minimal fix in the extracted file. The `programming` skill's SIZE_OK and pure-data-table exceptions still apply. That split ships with the fix; any other rough code stays a follow-up.
|
|
104
|
+
|
|
103
105
|
### 4. Regression — full suite green
|
|
104
106
|
|
|
105
107
|
Run the full test suite for the affected package (not just the one new test). Existing tests must still pass.
|
|
@@ -108,13 +108,13 @@ Last gate before reporting done. All four gates must be true, and all four must
|
|
|
108
108
|
|
|
109
109
|
### The four gates
|
|
110
110
|
|
|
111
|
-
1. **Red→green toggle confirmed** — show the failing test output from before the fix and passing output after. Both outputs visible in the
|
|
111
|
+
1. **Red→green toggle confirmed** — show the failing test output from before the fix and passing output after. Both outputs visible in the final message (the journal was removed in Phase 9).
|
|
112
112
|
|
|
113
113
|
2. **Full test suite green** — show the suite's final pass line (e.g. `42 passed in 3.14s`). Not just the new test.
|
|
114
114
|
|
|
115
115
|
3. **Manual QA reproduced the fix** — show the command or scenario that originally failed and its now-correct output. Verbatim, not paraphrased.
|
|
116
116
|
|
|
117
|
-
4. **Working tree clean of debug artifacts** — show `git diff --stat` output containing only fix + test, plus `git status` clean of untracked debug files.
|
|
117
|
+
4. **Working tree clean of debug artifacts** — show `git diff --stat` output containing only fix + test (plus the Phase 7 oversized-file split, if one was required), plus `git status` clean of untracked debug files.
|
|
118
118
|
|
|
119
119
|
If any of the four lacks evidence, you have not finished — return to the appropriate phase.
|
|
120
120
|
|
|
@@ -59,7 +59,7 @@ HTTPS_PROXY=http://127.0.0.1:8888 SSL_CERT_FILE=~/.mitmproxy/mitmproxy-ca-cert.p
|
|
|
59
59
|
```bash
|
|
60
60
|
# DYLD_INSERT_LIBRARIES / LD_PRELOAD shim approach
|
|
61
61
|
# Wrap the network call to log payload, return a fake 200
|
|
62
|
-
# See
|
|
62
|
+
# See ../runtimes/native-binary.md (DYLD_INSERT_LIBRARIES interception; "Option C: Wrap / shim") for shim examples
|
|
63
63
|
```
|
|
64
64
|
|
|
65
65
|
**Strength**: Wire-level ground truth, but requires the target to honor your proxy / preload.
|
|
@@ -41,7 +41,7 @@ Step 3 is the unlock — once you have plaintext source on disk, the rest is nor
|
|
|
41
41
|
|
|
42
42
|
```bash
|
|
43
43
|
# Look for runtime-specific markers in plaintext strings
|
|
44
|
-
strings -n 12 ./target 2>/dev/null | rg -
|
|
44
|
+
strings -n 12 ./target 2>/dev/null | rg -i 'bun|node_modules|webpack|esbuild|deno|pkg/lib|electron|pyinstaller|nexe|NODE_SEA_FUSE|NODE_SEA_BLOB|tauri|ESZIP_V2|denort' | head -20
|
|
45
45
|
```
|
|
46
46
|
|
|
47
47
|
| Marker pattern | Bundler | Source format |
|
|
@@ -20,7 +20,7 @@ Quick check:
|
|
|
20
20
|
```bash
|
|
21
21
|
file ./target # Mach-O / ELF / PE - inconclusive
|
|
22
22
|
du -h ./target # 50 MB+ for a "simple CLI" → suspect bundled
|
|
23
|
-
strings -n 12 ./target | rg -
|
|
23
|
+
strings -n 12 ./target | rg -i 'bun|node_modules|webpack|esbuild|deno|pkg/lib|electron|pyinstaller|nexe|NODE_SEA_FUSE|tauri' | head -5
|
|
24
24
|
```
|
|
25
25
|
|
|
26
26
|
**If any hits** → close this file, open [bundled-js-binary.md](bundled-js-binary.md) instead. Following the Ghidra/pwndbg path on a bundled-app binary wastes hours decompiling the runtime VM while the app-level bundle is recoverable with the right per-bundler tool (plaintext for Bun/pkg/nexe/Electron-asar; eszip / V8-cache / `.pyc` for Deno / Node SEA / PyInstaller).
|
|
@@ -25,8 +25,6 @@ const profile = mkdtempSync(join(tmpdir(), "debug-repro-"))
|
|
|
25
25
|
const browser = await omowright.connectPipe({ browserPath, browserArgs: ["--headless", `--user-data-dir=${profile}`], storageRoot: profile })
|
|
26
26
|
const page = await browser.newTab("about:blank")
|
|
27
27
|
const trace = omowright.createTrace(page, { dir: traceDir }) // trace.jsonl + trace.har + before/after screenshots
|
|
28
|
-
const consoleErrors = []
|
|
29
|
-
page.on("console", (entry) => { if (entry.type === "error") consoleErrors.push(entry.text) })
|
|
30
28
|
try {
|
|
31
29
|
await trace.step("open", () => page.goto(url, { waitUntil: "load" }))
|
|
32
30
|
await trace.step("submit", async () => {
|
|
@@ -36,6 +34,7 @@ try {
|
|
|
36
34
|
await page.waitForURL(/\/done/, { timeout: 10_000 })
|
|
37
35
|
})
|
|
38
36
|
await Bun.write(pngPath, await page.screenshot())
|
|
37
|
+
const consoleErrors = (await page.console.logs({ levels: ["error"] })).map((entry) => entry.message)
|
|
39
38
|
} finally {
|
|
40
39
|
await trace.stop()
|
|
41
40
|
await browser.close()
|
|
@@ -5,7 +5,7 @@ description: "Builds, styles, and polishes anything drawn with HTML, CSS, or SVG
|
|
|
5
5
|
|
|
6
6
|
# Frontend
|
|
7
7
|
|
|
8
|
-
This file is a router over `references/`; the rules live there. The flow is ground -> brief -> build -> subtract -> verify. The bar is restraint with a visible hierarchy: one primary action, the important thing first, nothing on the screen without a job. A quiet, correct screen that holds its hierarchy at 390 and 1440 in both themes is a finish. Atmosphere, motion, and award-grade surface work are opt-in: build them when the brief asks (a named brand, "premium", "make it stunning", a marketing page), never by default for an internal tool, dashboard, admin screen, report, or figure.
|
|
8
|
+
This file is a router over `references/`; the rules live there. The flow is ground -> brief -> build -> subtract -> verify. The bar is restraint with a visible hierarchy: one primary action, the important thing first, nothing on the screen without a job. A quiet, correct screen that holds its hierarchy at 390 and 1440 in both themes is a finish. Atmosphere, motion, and award-grade surface work are opt-in: build them when the brief asks (a named brand, "premium", "make it stunning", a marketing page), never by default for an internal tool, dashboard, admin screen, report, or figure. An inline page shown beside a reply (a chart, table, or diagram for `show_html_page`, `html_preview`, or `html_render`) follows the `visualize` skill when it is available; either way it is exempt from the `DESIGN.md` gate, the Lighthouse audit, and the research lanes, and keeps the build rules, the Draft guard, and the lint.
|
|
9
9
|
|
|
10
10
|
## Route: name the references, read exactly those
|
|
11
11
|
|
|
@@ -131,7 +131,7 @@ uv run $SKILL_DIR/scripts/perfection/lighthouse-audit.py https://localhost:3000
|
|
|
131
131
|
|
|
132
132
|
```bash
|
|
133
133
|
python3 -B $SKILL_DIR/references/ui-ux-db/scripts/search.py "<query>" --design-system -p "Project" # design-system generation
|
|
134
|
-
python3 -B $SKILL_DIR/references/ui-ux-db/scripts/search.py "<query>" --domain <domain> # product style typography color landing chart ux react web
|
|
134
|
+
python3 -B $SKILL_DIR/references/ui-ux-db/scripts/search.py "<query>" --domain <domain> # product style typography color landing chart ux react web icons google-fonts
|
|
135
135
|
python3 -B $SKILL_DIR/references/ui-ux-db/scripts/search.py "<query>" --stack <stack> # html-tailwind react nextjs vue svelte astro swiftui react-native flutter shadcn jetpack-compose
|
|
136
136
|
```
|
|
137
137
|
|
package/packages/omo-codex/plugin/skills/frontend/references/design/design-system-architecture.md
CHANGED
|
@@ -60,7 +60,7 @@ rather than borders, creating layers you feel more than see."
|
|
|
60
60
|
| Status/info | --status-info | #2563EB | #3B82F6 | Informational |
|
|
61
61
|
|
|
62
62
|
### Rules
|
|
63
|
-
- Accent marks the one
|
|
63
|
+
- Accent marks the screen's one primary action, on the control's background rather than its glyph or label; a second likely action takes a quieter style. Peer choices differ by style, never by size. Nothing decorative carries accent.
|
|
64
64
|
- Never introduce a color not in this table. Extend the table first.
|
|
65
65
|
|
|
66
66
|
## 3. Typography
|
|
@@ -73,4 +73,4 @@ pdftoppm -png -r 150 report.pdf out/page # one PNG per page
|
|
|
73
73
|
|
|
74
74
|
Read every page image for: blank or near-empty pages, a block stranded alone after a keep-together push, a table or figure split mid-exhibit, a heading orphaned at a page foot, clipped or overflowing text, and a running header or footer that drifted or vanished.
|
|
75
75
|
|
|
76
|
-
Extracting the text proves the words are present. It cannot see any defect in this list - layout is exactly the information that extraction discards. Fix, re-render, and look again until the pages are clean
|
|
76
|
+
Extracting the text proves the words are present. It cannot see any defect in this list - layout is exactly the information that extraction discards. Fix, re-render, and look again until the pages are clean. The `ulw-research` delivery gate and the `mass-ulw` verification wave hold the same page-by-page inspection standard; `ulw-research` bounds its repair loop (its `repair decide` stop rules) and ships any residual defect listed in its manifest.
|
|
@@ -90,7 +90,6 @@ Quick audit via the cross-platform Python CLI (macOS, Linux, Windows):
|
|
|
90
90
|
|
|
91
91
|
```bash
|
|
92
92
|
uv run $SKILL_DIR/scripts/perfection/lighthouse-audit.py https://localhost:3000
|
|
93
|
-
uv run $SKILL_DIR/scripts/perfection/lighthouse-audit.py https://localhost:3000 --threshold 95
|
|
94
93
|
uv run $SKILL_DIR/scripts/perfection/lighthouse-audit.py https://localhost:3000 --desktop-only
|
|
95
94
|
bun $SKILL_DIR/scripts/perfection/check-draft-guard.ts src/ # exit 1 = accent stripe or outline, promo copy, emoji icon, hype badge, or vanity stat
|
|
96
95
|
```
|
package/packages/omo-codex/plugin/skills/frontend/references/perfection/react-perf-tooling.md
CHANGED
|
@@ -20,17 +20,38 @@ If the project does not yet have react-scan and react-doctor wired into its dev
|
|
|
20
20
|
import { chromium } from "playwright";
|
|
21
21
|
import { playAudit } from "playwright-lighthouse";
|
|
22
22
|
|
|
23
|
+
declare global {
|
|
24
|
+
interface Window {
|
|
25
|
+
__renderEvents: unknown[];
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// Narrow only the fields this gate reads from a react-scan commit event.
|
|
30
|
+
function hasUnnecessaryRender(event: unknown): boolean {
|
|
31
|
+
if (typeof event !== "object" || event === null || !("tree" in event) || !Array.isArray(event.tree)) return false;
|
|
32
|
+
return event.tree.some(
|
|
33
|
+
(node: unknown) =>
|
|
34
|
+
typeof node === "object" &&
|
|
35
|
+
node !== null &&
|
|
36
|
+
"changeDescription" in node &&
|
|
37
|
+
typeof node.changeDescription === "object" &&
|
|
38
|
+
node.changeDescription !== null &&
|
|
39
|
+
"kind" in node.changeDescription &&
|
|
40
|
+
node.changeDescription.kind === "unnecessary",
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
23
44
|
const browser = await chromium.launch({ channel: "chrome" });
|
|
24
45
|
const context = await browser.newContext();
|
|
25
46
|
|
|
26
47
|
// Inject react-scan/lite BEFORE the app boots
|
|
27
48
|
await context.addInitScript(() => {
|
|
28
|
-
//
|
|
49
|
+
// react-scan is a dev dependency of the project (see ../design/react-dev-tooling-skill.md), so its types resolve
|
|
29
50
|
import("react-scan/lite").then(({ instrument }) => {
|
|
30
|
-
|
|
51
|
+
window.__renderEvents = [];
|
|
31
52
|
instrument({
|
|
32
|
-
onEvent: (event
|
|
33
|
-
if (event.kind === "commit")
|
|
53
|
+
onEvent: (event) => {
|
|
54
|
+
if (event.kind === "commit") window.__renderEvents.push(event);
|
|
34
55
|
},
|
|
35
56
|
recordChangeDescriptions: true,
|
|
36
57
|
includeFiberSource: true,
|
|
@@ -51,10 +72,8 @@ await playAudit({
|
|
|
51
72
|
});
|
|
52
73
|
|
|
53
74
|
// Pull render events and assert on render quality
|
|
54
|
-
const events = await page.evaluate(() =>
|
|
55
|
-
const unnecessary = events.filter(
|
|
56
|
-
e.tree?.some((node: any) => node.changeDescription?.kind === "unnecessary"),
|
|
57
|
-
);
|
|
75
|
+
const events = await page.evaluate(() => window.__renderEvents);
|
|
76
|
+
const unnecessary = events.filter(hasUnnecessaryRender);
|
|
58
77
|
|
|
59
78
|
if (unnecessary.length > 0) {
|
|
60
79
|
console.error(`FAIL: ${unnecessary.length} unnecessary renders detected during audit`);
|
|
@@ -16,7 +16,6 @@
|
|
|
16
16
|
# 3. Run:
|
|
17
17
|
# uv run lighthouse-audit.py https://example.com
|
|
18
18
|
# uv run lighthouse-audit.py https://example.com --desktop-only
|
|
19
|
-
# uv run lighthouse-audit.py https://example.com --threshold 95
|
|
20
19
|
# ──────────────────
|
|
21
20
|
|
|
22
21
|
"""Lighthouse audit via real Playwright Chrome.
|
|
@@ -16,7 +16,7 @@ Classify the request first:
|
|
|
16
16
|
- `HISTORY`: answer when, where, who, why, or which commit changed something.
|
|
17
17
|
- `STATUS`: inspect branch, diff, or working-tree state without changing it.
|
|
18
18
|
|
|
19
|
-
Do not commit, rebase, push, force-push, reset, stash-pop, or delete anything unless the user explicitly asked for that operation. If the request is only investigative, report findings and stop.
|
|
19
|
+
Do not commit, rebase, push, force-push, reset, stash-pop, or delete anything unless the user explicitly asked for that operation. When a workflow the user started mandates one of them (ulw-loop commits each verified unit, ulw-execute lands its branches), that workflow's instruction is the ask. If the request is only investigative, report findings and stop.
|
|
20
20
|
|
|
21
21
|
## Ground Truth
|
|
22
22
|
|
|
@@ -38,7 +38,17 @@ Missing upstream or missing `main`/`master` is normal. Fall back to the best ava
|
|
|
38
38
|
|
|
39
39
|
## PR Body Evidence Attachments
|
|
40
40
|
|
|
41
|
-
When a PR body needs screenshots or terminal PNGs,
|
|
41
|
+
When a PR body needs screenshots or terminal PNGs, the allowed hosting path is GitHub user attachments from the authenticated web attachment flow; never commit temporary images, never use GitHub Releases for PR evidence, and never use external image hosts. Do not log browser cookies, CSRF tokens, S3 form fields, or upload headers.
|
|
42
|
+
|
|
43
|
+
The flow needs an authenticated GitHub web session (a `gh` API token alone is not enough):
|
|
44
|
+
|
|
45
|
+
1. Open the target PR or issue page in that session and read its file-attachment CSRF token and repository id.
|
|
46
|
+
2. `POST https://github.com/upload/policies/assets` with `repository_id`, `name`, `size`, `content_type`, and that token as `authenticity_token`.
|
|
47
|
+
3. Upload the bytes to the returned S3 URL with the returned form fields exactly as given.
|
|
48
|
+
4. `PUT https://github.com/upload/assets/:id` with the returned `asset_upload_authenticity_token`.
|
|
49
|
+
5. Put only the final `https://github.com/user-attachments/assets/<uuid>` URL in the PR body (write the body to a temp file and pass it with `gh pr edit --body-file`).
|
|
50
|
+
|
|
51
|
+
If no authenticated browser session is available, leave the local evidence paths in the PR body and state the blocker.
|
|
42
52
|
|
|
43
53
|
## Commit Mode
|
|
44
54
|
|
|
@@ -195,7 +195,7 @@ for each background task ID (`bg_...`): background_output(task_id="bg_...")
|
|
|
195
195
|
```
|
|
196
196
|
AGENTS_LOCATIONS = [
|
|
197
197
|
{ path: ".", type: "root" },
|
|
198
|
-
{ path: "src/hooks", score:
|
|
198
|
+
{ path: "src/hooks", score: 16, reason: "high complexity" },
|
|
199
199
|
{ path: "src/api", score: 12, reason: "distinct domain" }
|
|
200
200
|
]
|
|
201
201
|
```
|