agent-skill-kit 3.9.135
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/.agent/global.d.ts +80 -0
- package/.agent/rules/GEMINI.md +210 -0
- package/.agent/rules/autopilot.md +287 -0
- package/.agent/rules/code-rules.md +227 -0
- package/.agent/scripts/audit_workflows.ts +23 -0
- package/.agent/scripts/auto_preview.ts +170 -0
- package/.agent/scripts/checklist.ts +180 -0
- package/.agent/scripts/compile-agents.ts +237 -0
- package/.agent/scripts/fix_skills.ts +49 -0
- package/.agent/scripts/session_manager.ts +222 -0
- package/.agent/scripts/skill-audit.ts +255 -0
- package/.agent/scripts/sync_workflows.ts +54 -0
- package/.agent/scripts/utils/colors.ts +58 -0
- package/.agent/scripts/utils/process-manager.ts +131 -0
- package/.agent/scripts/utils/reporter.ts +192 -0
- package/.agent/scripts/utils/runner.ts +128 -0
- package/.agent/scripts/verify_all.ts +243 -0
- package/.agent/scripts/version-sync.ts +256 -0
- package/.agent/skills/SKILL_INDEX.md +129 -0
- package/.agent/skills/agent-browser/AGENTS.md +728 -0
- package/.agent/skills/agent-browser/SKILL.md +193 -0
- package/.agent/skills/agent-browser/rules/_sections.md +15 -0
- package/.agent/skills/agent-browser/rules/_template.md +32 -0
- package/.agent/skills/agent-browser/rules/engineering-spec.md +528 -0
- package/.agent/skills/agent-browser/scripts/browser_cli.ts +52 -0
- package/.agent/skills/agent-browser/scripts/session_manager.ts +166 -0
- package/.agent/skills/ai-artist/AGENTS.md +1082 -0
- package/.agent/skills/ai-artist/SKILL.md +186 -0
- package/.agent/skills/ai-artist/rules/_sections.md +30 -0
- package/.agent/skills/ai-artist/rules/_template.md +32 -0
- package/.agent/skills/ai-artist/rules/domain-code.md +118 -0
- package/.agent/skills/ai-artist/rules/domain-marketing.md +105 -0
- package/.agent/skills/ai-artist/rules/engineering-spec.md +519 -0
- package/.agent/skills/ai-artist/rules/image-prompts.md +195 -0
- package/.agent/skills/ai-artist/rules/model-syntax.md +115 -0
- package/.agent/skills/ai-artist/scripts/prompt_compiler.ts +72 -0
- package/.agent/skills/ai-artist/templates/image-core.txt +1 -0
- package/.agent/skills/ai-artist/templates/llm-core.txt +6 -0
- package/.agent/skills/api-architect/AGENTS.md +1896 -0
- package/.agent/skills/api-architect/SKILL.md +173 -0
- package/.agent/skills/api-architect/rules/_sections.md +35 -0
- package/.agent/skills/api-architect/rules/_template.md +32 -0
- package/.agent/skills/api-architect/rules/api-style.md +115 -0
- package/.agent/skills/api-architect/rules/auth.md +134 -0
- package/.agent/skills/api-architect/rules/documentation.md +131 -0
- package/.agent/skills/api-architect/rules/engineering-spec.md +505 -0
- package/.agent/skills/api-architect/rules/graphql.md +154 -0
- package/.agent/skills/api-architect/rules/rate-limiting.md +76 -0
- package/.agent/skills/api-architect/rules/response.md +138 -0
- package/.agent/skills/api-architect/rules/rest.md +113 -0
- package/.agent/skills/api-architect/rules/security-testing.md +146 -0
- package/.agent/skills/api-architect/rules/trpc.md +129 -0
- package/.agent/skills/api-architect/rules/versioning.md +100 -0
- package/.agent/skills/api-architect/scripts/api_validator.ts +413 -0
- package/.agent/skills/auth-patterns/AGENTS.md +1830 -0
- package/.agent/skills/auth-patterns/SKILL.md +163 -0
- package/.agent/skills/auth-patterns/rules/_sections.md +30 -0
- package/.agent/skills/auth-patterns/rules/_template.md +32 -0
- package/.agent/skills/auth-patterns/rules/engineering-spec.md +515 -0
- package/.agent/skills/auth-patterns/rules/jwt-deep.md +196 -0
- package/.agent/skills/auth-patterns/rules/mfa.md +174 -0
- package/.agent/skills/auth-patterns/rules/oauth2.md +134 -0
- package/.agent/skills/auth-patterns/rules/passkey.md +243 -0
- package/.agent/skills/auth-patterns/rules/rbac-abac.md +206 -0
- package/.agent/skills/auth-patterns/rules/session.md +183 -0
- package/.agent/skills/auth-patterns/scripts/auth_validator.ts +121 -0
- package/.agent/skills/chrome-devtools/AGENTS.md +952 -0
- package/.agent/skills/chrome-devtools/SKILL.md +160 -0
- package/.agent/skills/chrome-devtools/rules/_sections.md +25 -0
- package/.agent/skills/chrome-devtools/rules/_template.md +32 -0
- package/.agent/skills/chrome-devtools/rules/aria-snapshot.md +95 -0
- package/.agent/skills/chrome-devtools/rules/engineering-spec.md +510 -0
- package/.agent/skills/chrome-devtools/rules/scripts-guide.md +174 -0
- package/.agent/skills/chrome-devtools/scripts/aria-snapshot.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/click.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/console.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/core_cli.ts +79 -0
- package/.agent/skills/chrome-devtools/scripts/evaluate.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/fill.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/navigate.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/network.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/performance.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/screenshot.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/select-ref.ts +3 -0
- package/.agent/skills/cicd-pipeline/AGENTS.md +809 -0
- package/.agent/skills/cicd-pipeline/SKILL.md +164 -0
- package/.agent/skills/cicd-pipeline/rules/_sections.md +15 -0
- package/.agent/skills/cicd-pipeline/rules/_template.md +32 -0
- package/.agent/skills/cicd-pipeline/rules/engineering-spec.md +477 -0
- package/.agent/skills/cicd-pipeline/scripts/flag-manager.ts +253 -0
- package/.agent/skills/cicd-pipeline/scripts/pipeline_validator.ts +133 -0
- package/.agent/skills/code-constitution/AGENTS.md +597 -0
- package/.agent/skills/code-constitution/CHANGELOG.md +216 -0
- package/.agent/skills/code-constitution/SKILL.md +191 -0
- package/.agent/skills/code-constitution/VERSION +3 -0
- package/.agent/skills/code-constitution/examples/violation-backend-mutation/after.tsx +59 -0
- package/.agent/skills/code-constitution/examples/violation-backend-mutation/before.tsx +42 -0
- package/.agent/skills/code-constitution/examples/violation-backend-mutation/explanation.md +91 -0
- package/.agent/skills/code-constitution/examples/violation-chart-injection/after.tsx +99 -0
- package/.agent/skills/code-constitution/examples/violation-chart-injection/before.tsx +57 -0
- package/.agent/skills/code-constitution/examples/violation-chart-injection/explanation.md +120 -0
- package/.agent/skills/code-constitution/knowledge/lessons-learned.yaml +3 -0
- package/.agent/skills/code-constitution/metadata/precedence.yaml +117 -0
- package/.agent/skills/code-constitution/metadata/scope-map.yaml +156 -0
- package/.agent/skills/code-constitution/proposals/v1.1-change-proposal-template.md +201 -0
- package/.agent/skills/code-constitution/resources/AUTHORITY_MODEL.md +115 -0
- package/.agent/skills/code-constitution/resources/ENFORCEMENT_GUIDE.md +246 -0
- package/.agent/skills/code-constitution/resources/LOAD_ORDER.md +86 -0
- package/.agent/skills/code-constitution/rules/_sections.md +15 -0
- package/.agent/skills/code-constitution/rules/_template.md +32 -0
- package/.agent/skills/code-constitution/rules/constitution/master-constitution.md +210 -0
- package/.agent/skills/code-constitution/rules/doctrines/architecture/architecture-doctrine.md +188 -0
- package/.agent/skills/code-constitution/rules/doctrines/backend/backend-data-engine-doctrine.md +218 -0
- package/.agent/skills/code-constitution/rules/doctrines/commercial/commercial-guardrails-doctrine.md +196 -0
- package/.agent/skills/code-constitution/rules/doctrines/data/data-integrity-doctrine.md +202 -0
- package/.agent/skills/code-constitution/rules/doctrines/frontend/frontend-mobile-doctrine.md +169 -0
- package/.agent/skills/code-constitution/rules/doctrines/frontend/interaction-patterns-doctrine.md +176 -0
- package/.agent/skills/code-constitution/rules/doctrines/learning/learning-engine-doctrine.md +192 -0
- package/.agent/skills/code-constitution/rules/doctrines/performance/performance-doctrine.md +180 -0
- package/.agent/skills/code-constitution/rules/doctrines/review/code-review-doctrine.md +174 -0
- package/.agent/skills/code-constitution/rules/enforcement/agents/agent-enforcement-protocol.md +218 -0
- package/.agent/skills/code-constitution/rules/enforcement/agents/agent-system-prompt.md +196 -0
- package/.agent/skills/code-constitution/rules/enforcement/checklists/backend-api-review-checklist.md +131 -0
- package/.agent/skills/code-constitution/rules/enforcement/checklists/chart-component-review-checklist.md +147 -0
- package/.agent/skills/code-constitution/rules/enforcement/checklists/frontend-review-checklist.md +194 -0
- package/.agent/skills/code-constitution/rules/enforcement/playbooks/doctrine-violation-playbook.md +236 -0
- package/.agent/skills/code-constitution/rules/engineering-spec.md +561 -0
- package/.agent/skills/code-constitution/scripts/audit_pr.ts +219 -0
- package/.agent/skills/code-constitution/scripts/check_boundaries.ts +134 -0
- package/.agent/skills/code-constitution/scripts/learn.ts +202 -0
- package/.agent/skills/code-constitution/scripts/validate_doctrine.ts +287 -0
- package/.agent/skills/code-craft/AGENTS.md +803 -0
- package/.agent/skills/code-craft/SKILL.md +170 -0
- package/.agent/skills/code-craft/rules/_sections.md +20 -0
- package/.agent/skills/code-craft/rules/_template.md +32 -0
- package/.agent/skills/code-craft/rules/engineering-spec.md +447 -0
- package/.agent/skills/code-craft/rules/verification-scripts.md +83 -0
- package/.agent/skills/code-craft/scripts/code_quality_checker.ts +193 -0
- package/.agent/skills/code-review/AGENTS.md +1664 -0
- package/.agent/skills/code-review/SKILL.md +152 -0
- package/.agent/skills/code-review/rules/_sections.md +15 -0
- package/.agent/skills/code-review/rules/_template.md +32 -0
- package/.agent/skills/code-review/rules/engineering-spec.md +466 -0
- package/.agent/skills/code-review/scripts/lint_runner.ts +213 -0
- package/.agent/skills/code-review/scripts/type_coverage.ts +118 -0
- package/.agent/skills/context-engineering/AGENTS.md +499 -0
- package/.agent/skills/context-engineering/SKILL.md +147 -0
- package/.agent/skills/context-engineering/rules/_sections.md +15 -0
- package/.agent/skills/context-engineering/rules/_template.md +32 -0
- package/.agent/skills/context-engineering/rules/engineering-spec.md +463 -0
- package/.agent/skills/context-engineering/scripts/context_analyzer.ts +127 -0
- package/.agent/skills/copywriting/AGENTS.md +501 -0
- package/.agent/skills/copywriting/SKILL.md +188 -0
- package/.agent/skills/copywriting/rules/_sections.md +15 -0
- package/.agent/skills/copywriting/rules/_template.md +32 -0
- package/.agent/skills/copywriting/rules/engineering-spec.md +465 -0
- package/.agent/skills/copywriting/scripts/copy_validator.ts +185 -0
- package/.agent/skills/data-modeler/AGENTS.md +814 -0
- package/.agent/skills/data-modeler/SKILL.md +195 -0
- package/.agent/skills/data-modeler/rules/_sections.md +15 -0
- package/.agent/skills/data-modeler/rules/_template.md +32 -0
- package/.agent/skills/data-modeler/rules/database-selection.md +124 -0
- package/.agent/skills/data-modeler/rules/engineering-spec.md +479 -0
- package/.agent/skills/data-modeler/rules/indexing.md +166 -0
- package/.agent/skills/data-modeler/rules/migrations.md +176 -0
- package/.agent/skills/data-modeler/rules/optimization.md +161 -0
- package/.agent/skills/data-modeler/rules/orm-selection.md +155 -0
- package/.agent/skills/data-modeler/rules/schema-design.md +162 -0
- package/.agent/skills/data-modeler/scripts/schema_validator.ts +357 -0
- package/.agent/skills/debug-pro/AGENTS.md +798 -0
- package/.agent/skills/debug-pro/SKILL.md +193 -0
- package/.agent/skills/debug-pro/defense-in-depth/SKILL.md +148 -0
- package/.agent/skills/debug-pro/root-cause-tracing/SKILL.md +196 -0
- package/.agent/skills/debug-pro/root-cause-tracing/find-polluter.sh +63 -0
- package/.agent/skills/debug-pro/rules/_sections.md +15 -0
- package/.agent/skills/debug-pro/rules/_template.md +32 -0
- package/.agent/skills/debug-pro/rules/engineering-spec.md +491 -0
- package/.agent/skills/debug-pro/scripts/debug_verifier.ts +148 -0
- package/.agent/skills/debug-pro/verification-before-completion/SKILL.md +160 -0
- package/.agent/skills/design-system/AGENTS.md +4216 -0
- package/.agent/skills/design-system/SKILL.md +186 -0
- package/.agent/skills/design-system/rules/_sections.md +65 -0
- package/.agent/skills/design-system/rules/_template.md +32 -0
- package/.agent/skills/design-system/rules/animation-guide.md +355 -0
- package/.agent/skills/design-system/rules/color-system.md +335 -0
- package/.agent/skills/design-system/rules/color-systems.md +133 -0
- package/.agent/skills/design-system/rules/decision-trees.md +442 -0
- package/.agent/skills/design-system/rules/design-extraction.md +152 -0
- package/.agent/skills/design-system/rules/engineering-spec.md +484 -0
- package/.agent/skills/design-system/rules/motion-design.md +161 -0
- package/.agent/skills/design-system/rules/motion-graphics.md +330 -0
- package/.agent/skills/design-system/rules/spatial-composition.md +184 -0
- package/.agent/skills/design-system/rules/typography-system.md +369 -0
- package/.agent/skills/design-system/rules/typography.md +124 -0
- package/.agent/skills/design-system/rules/ux-psychology.md +565 -0
- package/.agent/skills/design-system/rules/visual-effects.md +407 -0
- package/.agent/skills/design-system/scripts/accessibility_checker.ts +292 -0
- package/.agent/skills/design-system/scripts/ux_audit.ts +356 -0
- package/.agent/skills/doc-templates/AGENTS.md +820 -0
- package/.agent/skills/doc-templates/SKILL.md +260 -0
- package/.agent/skills/doc-templates/rules/_sections.md +20 -0
- package/.agent/skills/doc-templates/rules/_template.md +32 -0
- package/.agent/skills/doc-templates/rules/doc.md +355 -0
- package/.agent/skills/doc-templates/rules/engineering-spec.md +422 -0
- package/.agent/skills/doc-templates/scripts/editor-server.ts +162 -0
- package/.agent/skills/doc-templates/scripts/inject_otel.ts +22 -0
- package/.agent/skills/doc-templates/scripts/kanban-server.ts +171 -0
- package/.agent/skills/doc-templates/scripts/markdown-server.ts +185 -0
- package/.agent/skills/e2e-automation/AGENTS.md +882 -0
- package/.agent/skills/e2e-automation/SKILL.md +175 -0
- package/.agent/skills/e2e-automation/rules/_sections.md +20 -0
- package/.agent/skills/e2e-automation/rules/_template.md +32 -0
- package/.agent/skills/e2e-automation/rules/aria-snapshot.md +185 -0
- package/.agent/skills/e2e-automation/rules/engineering-spec.md +501 -0
- package/.agent/skills/e2e-automation/scripts/playwright_runner.ts +208 -0
- package/.agent/skills/execution-reporter/AGENTS.md +419 -0
- package/.agent/skills/execution-reporter/SKILL.md +152 -0
- package/.agent/skills/execution-reporter/rules/_sections.md +15 -0
- package/.agent/skills/execution-reporter/rules/_template.md +32 -0
- package/.agent/skills/execution-reporter/rules/engineering-spec.md +389 -0
- package/.agent/skills/game-development/2d-games/SKILL.md +140 -0
- package/.agent/skills/game-development/3d-games/SKILL.md +156 -0
- package/.agent/skills/game-development/AGENTS.md +783 -0
- package/.agent/skills/game-development/SKILL.md +178 -0
- package/.agent/skills/game-development/game-art/SKILL.md +207 -0
- package/.agent/skills/game-development/game-audio/SKILL.md +211 -0
- package/.agent/skills/game-development/game-design/SKILL.md +151 -0
- package/.agent/skills/game-development/mobile-games/SKILL.md +130 -0
- package/.agent/skills/game-development/multiplayer/SKILL.md +154 -0
- package/.agent/skills/game-development/pc-games/SKILL.md +167 -0
- package/.agent/skills/game-development/rules/_sections.md +15 -0
- package/.agent/skills/game-development/rules/_template.md +32 -0
- package/.agent/skills/game-development/rules/engineering-spec.md +480 -0
- package/.agent/skills/game-development/vr-ar/SKILL.md +144 -0
- package/.agent/skills/game-development/web-games/SKILL.md +173 -0
- package/.agent/skills/git-workflow/AGENTS.md +554 -0
- package/.agent/skills/git-workflow/SKILL.md +181 -0
- package/.agent/skills/git-workflow/rules/_sections.md +15 -0
- package/.agent/skills/git-workflow/rules/_template.md +32 -0
- package/.agent/skills/git-workflow/rules/engineering-spec.md +518 -0
- package/.agent/skills/gitops/AGENTS.md +921 -0
- package/.agent/skills/gitops/SKILL.md +163 -0
- package/.agent/skills/gitops/rules/_sections.md +25 -0
- package/.agent/skills/gitops/rules/_template.md +32 -0
- package/.agent/skills/gitops/rules/argocd-setup.md +148 -0
- package/.agent/skills/gitops/rules/engineering-spec.md +450 -0
- package/.agent/skills/gitops/rules/sync-policies.md +145 -0
- package/.agent/skills/google-adk-python/AGENTS.md +1054 -0
- package/.agent/skills/google-adk-python/SKILL.md +168 -0
- package/.agent/skills/google-adk-python/rules/_sections.md +25 -0
- package/.agent/skills/google-adk-python/rules/_template.md +32 -0
- package/.agent/skills/google-adk-python/rules/deployment.md +138 -0
- package/.agent/skills/google-adk-python/rules/engineering-spec.md +451 -0
- package/.agent/skills/google-adk-python/rules/multi-agent.md +146 -0
- package/.agent/skills/google-adk-python/rules/tools.md +131 -0
- package/.agent/skills/idea-storm/AGENTS.md +995 -0
- package/.agent/skills/idea-storm/SKILL.md +160 -0
- package/.agent/skills/idea-storm/rules/_sections.md +25 -0
- package/.agent/skills/idea-storm/rules/_template.md +32 -0
- package/.agent/skills/idea-storm/rules/architecture-debate.md +122 -0
- package/.agent/skills/idea-storm/rules/dynamic-questioning.md +374 -0
- package/.agent/skills/idea-storm/rules/engineering-spec.md +466 -0
- package/.agent/skills/knowledge-compiler/SKILL.md +320 -0
- package/.agent/skills/knowledge-graph/AGENTS.md +762 -0
- package/.agent/skills/knowledge-graph/SKILL.md +157 -0
- package/.agent/skills/knowledge-graph/rules/_sections.md +15 -0
- package/.agent/skills/knowledge-graph/rules/_template.md +32 -0
- package/.agent/skills/knowledge-graph/rules/engineering-spec.md +439 -0
- package/.agent/skills/knowledge-linter/SKILL.md +217 -0
- package/.agent/skills/lifecycle-orchestrator/AGENTS.md +989 -0
- package/.agent/skills/lifecycle-orchestrator/SKILL.md +169 -0
- package/.agent/skills/lifecycle-orchestrator/rules/_sections.md +15 -0
- package/.agent/skills/lifecycle-orchestrator/rules/_template.md +32 -0
- package/.agent/skills/lifecycle-orchestrator/rules/engineering-spec.md +525 -0
- package/.agent/skills/lifecycle-orchestrator/scripts/state_manager.ts +189 -0
- package/.agent/skills/mcp-builder/AGENTS.md +1653 -0
- package/.agent/skills/mcp-builder/SKILL.md +166 -0
- package/.agent/skills/mcp-builder/rules/_sections.md +40 -0
- package/.agent/skills/mcp-builder/rules/_template.md +32 -0
- package/.agent/skills/mcp-builder/rules/best-practices.md +157 -0
- package/.agent/skills/mcp-builder/rules/design-principles.md +105 -0
- package/.agent/skills/mcp-builder/rules/engineering-spec.md +473 -0
- package/.agent/skills/mcp-builder/rules/evaluation.md +103 -0
- package/.agent/skills/mcp-builder/rules/python-implementation.md +249 -0
- package/.agent/skills/mcp-builder/rules/quickstart.md +111 -0
- package/.agent/skills/mcp-builder/rules/typescript-implementation.md +280 -0
- package/.agent/skills/mcp-management/AGENTS.md +837 -0
- package/.agent/skills/mcp-management/SKILL.md +164 -0
- package/.agent/skills/mcp-management/rules/_sections.md +25 -0
- package/.agent/skills/mcp-management/rules/_template.md +32 -0
- package/.agent/skills/mcp-management/rules/cli-usage.md +146 -0
- package/.agent/skills/mcp-management/rules/engineering-spec.md +501 -0
- package/.agent/skills/mcp-management/rules/protocol.md +159 -0
- package/.agent/skills/media-processing/AGENTS.md +479 -0
- package/.agent/skills/media-processing/SKILL.md +176 -0
- package/.agent/skills/media-processing/rules/_sections.md +15 -0
- package/.agent/skills/media-processing/rules/_template.md +32 -0
- package/.agent/skills/media-processing/rules/engineering-spec.md +452 -0
- package/.agent/skills/media-processing/scripts/convert-video.ts +155 -0
- package/.agent/skills/media-processing/scripts/optimize-image.ts +127 -0
- package/.agent/skills/mobile-design/AGENTS.md +6531 -0
- package/.agent/skills/mobile-design/SKILL.md +165 -0
- package/.agent/skills/mobile-design/rules/_sections.md +45 -0
- package/.agent/skills/mobile-design/rules/_template.md +32 -0
- package/.agent/skills/mobile-design/rules/decision-trees.md +540 -0
- package/.agent/skills/mobile-design/rules/engineering-spec.md +467 -0
- package/.agent/skills/mobile-design/rules/mobile-backend.md +516 -0
- package/.agent/skills/mobile-design/rules/mobile-color-system.md +436 -0
- package/.agent/skills/mobile-design/rules/mobile-debugging.md +146 -0
- package/.agent/skills/mobile-design/rules/mobile-design-thinking.md +381 -0
- package/.agent/skills/mobile-design/rules/mobile-navigation.md +474 -0
- package/.agent/skills/mobile-design/rules/mobile-performance.md +783 -0
- package/.agent/skills/mobile-design/rules/mobile-testing.md +380 -0
- package/.agent/skills/mobile-design/rules/mobile-typography.md +449 -0
- package/.agent/skills/mobile-design/rules/platform-android.md +682 -0
- package/.agent/skills/mobile-design/rules/platform-ios.md +577 -0
- package/.agent/skills/mobile-design/rules/touch-psychology.md +553 -0
- package/.agent/skills/mobile-design/scripts/mobile_audit.ts +309 -0
- package/.agent/skills/mobile-developer/AGENTS.md +904 -0
- package/.agent/skills/mobile-developer/SKILL.md +194 -0
- package/.agent/skills/mobile-developer/rules/_sections.md +75 -0
- package/.agent/skills/mobile-developer/rules/_template.md +32 -0
- package/.agent/skills/mobile-developer/rules/anti-patterns.md +70 -0
- package/.agent/skills/mobile-developer/rules/app-store-optimization.md +319 -0
- package/.agent/skills/mobile-developer/rules/decision-trees.md +545 -0
- package/.agent/skills/mobile-developer/rules/deep-linking.md +441 -0
- package/.agent/skills/mobile-developer/rules/engineering-spec.md +477 -0
- package/.agent/skills/mobile-developer/rules/flutter.md +475 -0
- package/.agent/skills/mobile-developer/rules/mobile-backend.md +516 -0
- package/.agent/skills/mobile-developer/rules/mobile-color-system.md +444 -0
- package/.agent/skills/mobile-developer/rules/mobile-debugging.md +428 -0
- package/.agent/skills/mobile-developer/rules/mobile-design-thinking.md +367 -0
- package/.agent/skills/mobile-developer/rules/mobile-navigation.md +483 -0
- package/.agent/skills/mobile-developer/rules/mobile-performance.md +778 -0
- package/.agent/skills/mobile-developer/rules/mobile-testing.md +382 -0
- package/.agent/skills/mobile-developer/rules/mobile-typography.md +457 -0
- package/.agent/skills/mobile-developer/rules/native.md +572 -0
- package/.agent/skills/mobile-developer/rules/platform-android.md +676 -0
- package/.agent/skills/mobile-developer/rules/platform-ios.md +571 -0
- package/.agent/skills/mobile-developer/rules/push-notifications.md +599 -0
- package/.agent/skills/mobile-developer/rules/react-native.md +422 -0
- package/.agent/skills/mobile-developer/rules/touch-psychology.md +547 -0
- package/.agent/skills/mobile-developer/scripts/mobile_audit.ts +701 -0
- package/.agent/skills/nextjs-pro/AGENTS.md +3932 -0
- package/.agent/skills/nextjs-pro/SKILL.md +171 -0
- package/.agent/skills/nextjs-pro/rules/_sections.md +50 -0
- package/.agent/skills/nextjs-pro/rules/_template.md +32 -0
- package/.agent/skills/nextjs-pro/rules/advanced-event-handler-refs.md +59 -0
- package/.agent/skills/nextjs-pro/rules/advanced-init-once.md +46 -0
- package/.agent/skills/nextjs-pro/rules/advanced-use-latest.md +43 -0
- package/.agent/skills/nextjs-pro/rules/async-api-routes.md +42 -0
- package/.agent/skills/nextjs-pro/rules/async-defer-await.md +84 -0
- package/.agent/skills/nextjs-pro/rules/async-dependencies.md +55 -0
- package/.agent/skills/nextjs-pro/rules/async-parallel.md +32 -0
- package/.agent/skills/nextjs-pro/rules/async-suspense-boundaries.md +103 -0
- package/.agent/skills/nextjs-pro/rules/bundle-barrel-imports.md +63 -0
- package/.agent/skills/nextjs-pro/rules/bundle-conditional.md +35 -0
- package/.agent/skills/nextjs-pro/rules/bundle-defer-third-party.md +53 -0
- package/.agent/skills/nextjs-pro/rules/bundle-dynamic-imports.md +39 -0
- package/.agent/skills/nextjs-pro/rules/bundle-preload.md +54 -0
- package/.agent/skills/nextjs-pro/rules/client-event-listeners.md +78 -0
- package/.agent/skills/nextjs-pro/rules/client-localstorage-schema.md +75 -0
- package/.agent/skills/nextjs-pro/rules/client-passive-event-listeners.md +52 -0
- package/.agent/skills/nextjs-pro/rules/client-swr-dedup.md +60 -0
- package/.agent/skills/nextjs-pro/rules/engineering-spec.md +440 -0
- package/.agent/skills/nextjs-pro/rules/js-batch-dom-css.md +111 -0
- package/.agent/skills/nextjs-pro/rules/js-cache-function-results.md +84 -0
- package/.agent/skills/nextjs-pro/rules/js-cache-property-access.md +32 -0
- package/.agent/skills/nextjs-pro/rules/js-cache-storage.md +74 -0
- package/.agent/skills/nextjs-pro/rules/js-combine-iterations.md +36 -0
- package/.agent/skills/nextjs-pro/rules/js-early-exit.md +54 -0
- package/.agent/skills/nextjs-pro/rules/js-hoist-regexp.md +49 -0
- package/.agent/skills/nextjs-pro/rules/js-index-maps.md +41 -0
- package/.agent/skills/nextjs-pro/rules/js-length-check-first.md +53 -0
- package/.agent/skills/nextjs-pro/rules/js-min-max-loop.md +86 -0
- package/.agent/skills/nextjs-pro/rules/js-set-map-lookups.md +28 -0
- package/.agent/skills/nextjs-pro/rules/js-tosorted-immutable.md +61 -0
- package/.agent/skills/nextjs-pro/rules/rendering-activity.md +30 -0
- package/.agent/skills/nextjs-pro/rules/rendering-animate-svg-wrapper.md +51 -0
- package/.agent/skills/nextjs-pro/rules/rendering-conditional-render.md +44 -0
- package/.agent/skills/nextjs-pro/rules/rendering-content-visibility.md +42 -0
- package/.agent/skills/nextjs-pro/rules/rendering-hoist-jsx.md +50 -0
- package/.agent/skills/nextjs-pro/rules/rendering-hydration-no-flicker.md +86 -0
- package/.agent/skills/nextjs-pro/rules/rendering-hydration-suppress-warning.md +34 -0
- package/.agent/skills/nextjs-pro/rules/rendering-svg-precision.md +32 -0
- package/.agent/skills/nextjs-pro/rules/rendering-usetransition-loading.md +79 -0
- package/.agent/skills/nextjs-pro/rules/rerender-defer-reads.md +43 -0
- package/.agent/skills/nextjs-pro/rules/rerender-dependencies.md +49 -0
- package/.agent/skills/nextjs-pro/rules/rerender-derived-state-no-effect.md +44 -0
- package/.agent/skills/nextjs-pro/rules/rerender-derived-state.md +33 -0
- package/.agent/skills/nextjs-pro/rules/rerender-functional-setstate.md +78 -0
- package/.agent/skills/nextjs-pro/rules/rerender-lazy-state-init.md +62 -0
- package/.agent/skills/nextjs-pro/rules/rerender-memo-with-default-value.md +42 -0
- package/.agent/skills/nextjs-pro/rules/rerender-memo.md +48 -0
- package/.agent/skills/nextjs-pro/rules/rerender-move-effect-to-event.md +49 -0
- package/.agent/skills/nextjs-pro/rules/rerender-simple-expression-in-memo.md +39 -0
- package/.agent/skills/nextjs-pro/rules/rerender-transitions.md +44 -0
- package/.agent/skills/nextjs-pro/rules/rerender-use-ref-transient-values.md +77 -0
- package/.agent/skills/nextjs-pro/rules/schema.json +34 -0
- package/.agent/skills/nextjs-pro/rules/server-after-nonblocking.md +77 -0
- package/.agent/skills/nextjs-pro/rules/server-auth-actions.md +100 -0
- package/.agent/skills/nextjs-pro/rules/server-cache-lru.md +45 -0
- package/.agent/skills/nextjs-pro/rules/server-cache-react.md +80 -0
- package/.agent/skills/nextjs-pro/rules/server-dedup-props.md +69 -0
- package/.agent/skills/nextjs-pro/rules/server-parallel-fetching.md +87 -0
- package/.agent/skills/nextjs-pro/rules/server-serialization.md +42 -0
- package/.agent/skills/nodejs-pro/AGENTS.md +866 -0
- package/.agent/skills/nodejs-pro/SKILL.md +172 -0
- package/.agent/skills/nodejs-pro/rules/_sections.md +50 -0
- package/.agent/skills/nodejs-pro/rules/_template.md +32 -0
- package/.agent/skills/nodejs-pro/rules/architecture-patterns.md +229 -0
- package/.agent/skills/nodejs-pro/rules/async-patterns.md +246 -0
- package/.agent/skills/nodejs-pro/rules/engineering-spec.md +438 -0
- package/.agent/skills/nodejs-pro/rules/error-handling.md +257 -0
- package/.agent/skills/nodejs-pro/rules/framework-selection.md +220 -0
- package/.agent/skills/nodejs-pro/rules/runtime-modules.md +176 -0
- package/.agent/skills/nodejs-pro/rules/testing-strategy.md +266 -0
- package/.agent/skills/nodejs-pro/rules/validation-security.md +205 -0
- package/.agent/skills/observability/AGENTS.md +607 -0
- package/.agent/skills/observability/SKILL.md +178 -0
- package/.agent/skills/observability/rules/_sections.md +15 -0
- package/.agent/skills/observability/rules/_template.md +32 -0
- package/.agent/skills/observability/rules/engineering-spec.md +440 -0
- package/.agent/skills/offensive-sec/AGENTS.md +849 -0
- package/.agent/skills/offensive-sec/SKILL.md +191 -0
- package/.agent/skills/offensive-sec/rules/_sections.md +15 -0
- package/.agent/skills/offensive-sec/rules/_template.md +32 -0
- package/.agent/skills/offensive-sec/rules/engineering-spec.md +470 -0
- package/.agent/skills/perf-optimizer/AGENTS.md +870 -0
- package/.agent/skills/perf-optimizer/SKILL.md +189 -0
- package/.agent/skills/perf-optimizer/rules/_sections.md +15 -0
- package/.agent/skills/perf-optimizer/rules/_template.md +32 -0
- package/.agent/skills/perf-optimizer/rules/backend-patterns.md +312 -0
- package/.agent/skills/perf-optimizer/rules/engineering-spec.md +428 -0
- package/.agent/skills/perf-optimizer/scripts/lighthouse_audit.ts +201 -0
- package/.agent/skills/problem-checker/AGENTS.md +519 -0
- package/.agent/skills/problem-checker/SKILL.md +189 -0
- package/.agent/skills/problem-checker/rules/_sections.md +15 -0
- package/.agent/skills/problem-checker/rules/_template.md +32 -0
- package/.agent/skills/problem-checker/rules/engineering-spec.md +483 -0
- package/.agent/skills/problem-checker/scripts/check_problems.ts +396 -0
- package/.agent/skills/project-planner/AGENTS.md +2698 -0
- package/.agent/skills/project-planner/SKILL.md +166 -0
- package/.agent/skills/project-planner/rules/_sections.md +15 -0
- package/.agent/skills/project-planner/rules/_template.md +32 -0
- package/.agent/skills/project-planner/rules/engineering-spec.md +420 -0
- package/.agent/skills/python-pro/AGENTS.md +1871 -0
- package/.agent/skills/python-pro/SKILL.md +182 -0
- package/.agent/skills/python-pro/rules/_sections.md +50 -0
- package/.agent/skills/python-pro/rules/_template.md +32 -0
- package/.agent/skills/python-pro/rules/async-patterns.md +168 -0
- package/.agent/skills/python-pro/rules/django-patterns.md +194 -0
- package/.agent/skills/python-pro/rules/engineering-spec.md +442 -0
- package/.agent/skills/python-pro/rules/fastapi-patterns.md +179 -0
- package/.agent/skills/python-pro/rules/framework-selection.md +167 -0
- package/.agent/skills/python-pro/rules/project-structure.md +181 -0
- package/.agent/skills/python-pro/rules/testing-patterns.md +212 -0
- package/.agent/skills/python-pro/rules/type-hints.md +159 -0
- package/.agent/skills/react-pro/AGENTS.md +963 -0
- package/.agent/skills/react-pro/SKILL.md +232 -0
- package/.agent/skills/react-pro/rules/_sections.md +40 -0
- package/.agent/skills/react-pro/rules/_template.md +32 -0
- package/.agent/skills/react-pro/rules/component-patterns.md +145 -0
- package/.agent/skills/react-pro/rules/composition-compound.md +82 -0
- package/.agent/skills/react-pro/rules/data-fetching.md +133 -0
- package/.agent/skills/react-pro/rules/engineering-spec.md +453 -0
- package/.agent/skills/react-pro/rules/error-boundary.md +61 -0
- package/.agent/skills/react-pro/rules/file-organization.md +158 -0
- package/.agent/skills/react-pro/rules/hooks-custom.md +61 -0
- package/.agent/skills/react-pro/rules/mui-styling.md +138 -0
- package/.agent/skills/react-pro/rules/patterns.md +24 -0
- package/.agent/skills/react-pro/rules/performance-optimization.md +65 -0
- package/.agent/skills/react-pro/rules/performance.md +137 -0
- package/.agent/skills/react-pro/rules/react19-hooks.md +85 -0
- package/.agent/skills/react-pro/rules/state-management.md +90 -0
- package/.agent/skills/react-pro/rules/testing-patterns.md +52 -0
- package/.agent/skills/registry.json +1251 -0
- package/.agent/skills/security-scanner/AGENTS.md +851 -0
- package/.agent/skills/security-scanner/SKILL.md +182 -0
- package/.agent/skills/security-scanner/rules/_sections.md +15 -0
- package/.agent/skills/security-scanner/rules/_template.md +32 -0
- package/.agent/skills/security-scanner/rules/auth-patterns.md +281 -0
- package/.agent/skills/security-scanner/rules/checklists.md +186 -0
- package/.agent/skills/security-scanner/rules/engineering-spec.md +440 -0
- package/.agent/skills/security-scanner/scripts/security_scan.ts +513 -0
- package/.agent/skills/seo-optimizer/AGENTS.md +839 -0
- package/.agent/skills/seo-optimizer/SKILL.md +180 -0
- package/.agent/skills/seo-optimizer/rules/_sections.md +15 -0
- package/.agent/skills/seo-optimizer/rules/_template.md +32 -0
- package/.agent/skills/seo-optimizer/rules/engineering-spec.md +433 -0
- package/.agent/skills/seo-optimizer/scripts/geo_checker.ts +109 -0
- package/.agent/skills/seo-optimizer/scripts/seo_checker.ts +308 -0
- package/.agent/skills/server-ops/AGENTS.md +643 -0
- package/.agent/skills/server-ops/SKILL.md +194 -0
- package/.agent/skills/server-ops/rules/_sections.md +15 -0
- package/.agent/skills/server-ops/rules/_template.md +32 -0
- package/.agent/skills/server-ops/rules/engineering-spec.md +450 -0
- package/.agent/skills/shell-script/AGENTS.md +499 -0
- package/.agent/skills/shell-script/SKILL.md +205 -0
- package/.agent/skills/shell-script/rules/_sections.md +15 -0
- package/.agent/skills/shell-script/rules/_template.md +32 -0
- package/.agent/skills/shell-script/rules/engineering-spec.md +463 -0
- package/.agent/skills/skill-generator/SKILL.md +147 -0
- package/.agent/skills/smart-router/SKILL.md +95 -0
- package/.agent/skills/studio/AGENTS.md +636 -0
- package/.agent/skills/studio/SKILL.md +178 -0
- package/.agent/skills/studio/data/charts.csv +26 -0
- package/.agent/skills/studio/data/colors.csv +97 -0
- package/.agent/skills/studio/data/icons.csv +101 -0
- package/.agent/skills/studio/data/landing.csv +31 -0
- package/.agent/skills/studio/data/products.csv +97 -0
- package/.agent/skills/studio/data/prompts.csv +24 -0
- package/.agent/skills/studio/data/react-performance.csv +45 -0
- package/.agent/skills/studio/data/stacks/flutter.csv +52 -0
- package/.agent/skills/studio/data/stacks/html-tailwind.csv +56 -0
- package/.agent/skills/studio/data/stacks/jetpack-compose.csv +53 -0
- package/.agent/skills/studio/data/stacks/nextjs.csv +53 -0
- package/.agent/skills/studio/data/stacks/nuxt-ui.csv +51 -0
- package/.agent/skills/studio/data/stacks/nuxtjs.csv +59 -0
- package/.agent/skills/studio/data/stacks/react-native.csv +52 -0
- package/.agent/skills/studio/data/stacks/react.csv +54 -0
- package/.agent/skills/studio/data/stacks/shadcn.csv +61 -0
- package/.agent/skills/studio/data/stacks/svelte.csv +54 -0
- package/.agent/skills/studio/data/stacks/swiftui.csv +51 -0
- package/.agent/skills/studio/data/stacks/vue.csv +50 -0
- package/.agent/skills/studio/data/styles.csv +59 -0
- package/.agent/skills/studio/data/typography.csv +58 -0
- package/.agent/skills/studio/data/ui-reasoning.csv +101 -0
- package/.agent/skills/studio/data/ux-guidelines.csv +100 -0
- package/.agent/skills/studio/data/web-interface.csv +31 -0
- package/.agent/skills/studio/rules/_sections.md +15 -0
- package/.agent/skills/studio/rules/_template.md +32 -0
- package/.agent/skills/studio/rules/engineering-spec.md +455 -0
- package/.agent/skills/studio/scripts/core.ts +345 -0
- package/.agent/skills/studio/scripts/design_system.ts +953 -0
- package/.agent/skills/studio/scripts/search.ts +197 -0
- package/.agent/skills/studio/scripts/types.ts +147 -0
- package/.agent/skills/studio/scripts/utils/component-specs.ts +154 -0
- package/.agent/skills/studio/scripts/utils/config-loader.ts +165 -0
- package/.agent/skills/studio/scripts/utils/css-templates.ts +169 -0
- package/.agent/skills/studio/scripts/utils/css-validator.ts +95 -0
- package/.agent/skills/studio/scripts/utils/csv-loader.ts +52 -0
- package/.agent/skills/studio/scripts/utils/intelligent-overrides.ts +129 -0
- package/.agent/skills/studio/scripts/utils/page-override-formatter.ts +143 -0
- package/.agent/skills/studio/scripts/utils/page-type-detector.ts +124 -0
- package/.agent/skills/studio/scripts/utils/search-cache.ts +165 -0
- package/.agent/skills/studio/scripts/utils/text-utils.ts +44 -0
- package/.agent/skills/system-design/AGENTS.md +597 -0
- package/.agent/skills/system-design/SKILL.md +153 -0
- package/.agent/skills/system-design/rules/_sections.md +15 -0
- package/.agent/skills/system-design/rules/_template.md +32 -0
- package/.agent/skills/system-design/rules/context-discovery.md +117 -0
- package/.agent/skills/system-design/rules/engineering-spec.md +437 -0
- package/.agent/skills/system-design/rules/examples.md +180 -0
- package/.agent/skills/system-design/rules/pattern-selection.md +130 -0
- package/.agent/skills/system-design/rules/patterns-reference.md +110 -0
- package/.agent/skills/system-design/rules/trade-off-analysis.md +169 -0
- package/.agent/skills/tailwind-kit/AGENTS.md +1135 -0
- package/.agent/skills/tailwind-kit/SKILL.md +171 -0
- package/.agent/skills/tailwind-kit/rules/_sections.md +20 -0
- package/.agent/skills/tailwind-kit/rules/_template.md +32 -0
- package/.agent/skills/tailwind-kit/rules/components.md +232 -0
- package/.agent/skills/tailwind-kit/rules/engineering-spec.md +435 -0
- package/.agent/skills/tailwind-kit/rules/responsive.md +221 -0
- package/.agent/skills/tailwind-kit/rules/v4-config.md +72 -0
- package/.agent/skills/test-architect/AGENTS.md +851 -0
- package/.agent/skills/test-architect/SKILL.md +176 -0
- package/.agent/skills/test-architect/rules/_sections.md +15 -0
- package/.agent/skills/test-architect/rules/_template.md +32 -0
- package/.agent/skills/test-architect/rules/engineering-spec.md +434 -0
- package/.agent/skills/test-architect/scripts/test_runner.ts +265 -0
- package/.agent/skills/typescript-expert/AGENTS.md +1045 -0
- package/.agent/skills/typescript-expert/SKILL.md +200 -0
- package/.agent/skills/typescript-expert/rules/_sections.md +20 -0
- package/.agent/skills/typescript-expert/rules/_template.md +32 -0
- package/.agent/skills/typescript-expert/rules/engineering-spec.md +433 -0
- package/.agent/skills/typescript-expert/rules/tsconfig-strict.json +92 -0
- package/.agent/skills/typescript-expert/rules/typescript-cheatsheet.md +407 -0
- package/.agent/skills/typescript-expert/rules/utility-types.ts +264 -0
- package/.agent/skills/typescript-expert/scripts/ts_diagnostic.ts +321 -0
- package/.agent/skills/vercel-deploy/AGENTS.md +490 -0
- package/.agent/skills/vercel-deploy/SKILL.md +175 -0
- package/.agent/skills/vercel-deploy/rules/_sections.md +15 -0
- package/.agent/skills/vercel-deploy/rules/_template.md +32 -0
- package/.agent/skills/vercel-deploy/rules/engineering-spec.md +463 -0
- package/.agent/skills/vercel-deploy/scripts/deploy.sh +310 -0
- package/.agent/workflows/api.md +377 -0
- package/.agent/workflows/autopilot.md +344 -0
- package/.agent/workflows/build.md +338 -0
- package/.agent/workflows/chronicle.md +279 -0
- package/.agent/workflows/cook.md +217 -0
- package/.agent/workflows/diagnose.md +302 -0
- package/.agent/workflows/fix.md +253 -0
- package/.agent/workflows/game.md +329 -0
- package/.agent/workflows/inspect.md +276 -0
- package/.agent/workflows/knowledge.md +212 -0
- package/.agent/workflows/launch.md +345 -0
- package/.agent/workflows/mobile.md +354 -0
- package/.agent/workflows/monitor.md +239 -0
- package/.agent/workflows/optimize.md +269 -0
- package/.agent/workflows/plan.md +278 -0
- package/.agent/workflows/stage.md +286 -0
- package/.agent/workflows/studio.md +276 -0
- package/.agent/workflows/think.md +262 -0
- package/.agent/workflows/validate.md +289 -0
- package/.agentignore +161 -0
- package/.gitattributes +16 -0
- package/CHANGELOG.md +198 -0
- package/LICENSE +40 -0
- package/README.md +173 -0
- package/docs/SKILL_DESIGN_GUIDE.md +561 -0
- package/docs/The-Complete-Guide-to-Building-Skills-for-Claude.md +1207 -0
- package/docs/WORKFLOW_DESIGN_GUIDE.md +325 -0
- package/package.json +33 -0
- package/tsconfig.json +28 -0
|
@@ -0,0 +1,428 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Performance Profiler — Engineering Specification
|
|
3
|
+
impact: MEDIUM
|
|
4
|
+
tags: perf-optimizer
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Performance Profiler — Engineering Specification
|
|
8
|
+
|
|
9
|
+
> Production-grade specification for performance profiling and Core Web Vitals at FAANG scale.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 1. Overview
|
|
14
|
+
|
|
15
|
+
Performance Profiler provides structured performance analysis: Core Web Vitals targeting (LCP < 2.5s, INP < 200ms, CLS < 0.1), profiling tool selection (5 tools), 4-step profiling workflow (Baseline → Identify → Fix → Validate), bundle analysis (4 issues, 4 actions), runtime profiling (4 task patterns, 3 memory patterns), bottleneck diagnosis (4 symptom→cause mappings), and prioritized quick wins (5 ranked). The skill operates as an **Expert (decision tree)** — it produces profiling methodologies, tool recommendations, and fix strategies. It does not execute profiling tools, modify code, or run Lighthouse.
|
|
16
|
+
|
|
17
|
+
**Contract Version:** 2.0.0
|
|
18
|
+
**Backward Compatibility:** breaking (first hardened version)
|
|
19
|
+
**Breaking Changes:** None — new spec for first hardening
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 2. Problem Statement
|
|
24
|
+
|
|
25
|
+
Performance work at scale faces four quantified problems:
|
|
26
|
+
|
|
27
|
+
| Problem | Measurement | Impact |
|
|
28
|
+
|---------|-------------|--------|
|
|
29
|
+
| No baseline measurement | 55% of performance fixes lack before/after data | Unknown improvement |
|
|
30
|
+
| Wrong profiling tool | 40% of developers use Lighthouse for runtime issues | Misdiagnosis |
|
|
31
|
+
| Guessing at bottlenecks | 50% of changes target non-critical paths | Wasted effort |
|
|
32
|
+
| Missing Core Web Vitals | 35% of sites exceed LCP 4.0s threshold | Poor user experience, SEO penalty |
|
|
33
|
+
|
|
34
|
+
Performance Profiler eliminates these with mandatory baseline measurement, deterministic tool selection (symptom → tool), bottleneck diagnosis (symptom → cause), and fixed Core Web Vitals targets.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## 3. Design Goals
|
|
39
|
+
|
|
40
|
+
| ID | Goal | Measurable Constraint |
|
|
41
|
+
|----|------|-----------------------|
|
|
42
|
+
| G1 | Core Web Vitals targets | LCP < 2.5s, INP < 200ms, CLS < 0.1 |
|
|
43
|
+
| G2 | 4-step profiling workflow | Baseline → Identify → Fix → Validate |
|
|
44
|
+
| G3 | Tool selection | 5 tools mapped to 5 problem types |
|
|
45
|
+
| G4 | Bundle analysis | 4 issues with 4 fix actions |
|
|
46
|
+
| G5 | Runtime profiling | 4 task patterns + 3 memory patterns |
|
|
47
|
+
| G6 | Quick wins ranked | 5 priorities ordered by impact |
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## 4. Non-Goals
|
|
52
|
+
|
|
53
|
+
| ID | Excluded | Rationale |
|
|
54
|
+
|----|----------|-----------|
|
|
55
|
+
| NG1 | Running Lighthouse | Guidance only; execution is caller's responsibility |
|
|
56
|
+
| NG2 | Code modification | Owned by executing agents |
|
|
57
|
+
| NG3 | E2E testing | Owned by `e2e-automation` skill |
|
|
58
|
+
| NG4 | Browser automation | Owned by Lighthouse script in `scripts/` |
|
|
59
|
+
| NG5 | Backend profiling implementation | Guidance in `backend-patterns.md`; execution external |
|
|
60
|
+
| NG6 | CDN configuration | Infrastructure concern |
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## 5. System Boundaries
|
|
65
|
+
|
|
66
|
+
| Boundary | Owned | Not Owned |
|
|
67
|
+
|----------|-------|-----------|
|
|
68
|
+
| Core Web Vitals targets | Threshold definitions | Measurement execution |
|
|
69
|
+
| Profiling tool selection | Tool → problem mapping | Tool installation |
|
|
70
|
+
| Bundle analysis guidance | Issue identification + fix actions | Bundle build |
|
|
71
|
+
| Runtime profiling guidance | Pattern recognition | DevTools execution |
|
|
72
|
+
| Quick win prioritization | Ranked actions | Implementation |
|
|
73
|
+
| Backend profiling patterns | N+1 query detection guidance | Query execution |
|
|
74
|
+
|
|
75
|
+
**Side-effect boundary:** Performance Profiler produces methodologies, tool recommendations, and fix strategies. It does not run profiling tools, modify code, or access production systems.
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## 6. Integration Model
|
|
80
|
+
|
|
81
|
+
### 6.1 Agent Contract
|
|
82
|
+
|
|
83
|
+
#### Input Schema
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
Request_Type: string # "core-web-vitals" | "profiling-workflow" | "tool-select" |
|
|
87
|
+
# "bundle-analysis" | "runtime-profiling" | "memory-profiling" |
|
|
88
|
+
# "bottleneck-diagnosis" | "quick-wins" | "backend-patterns" |
|
|
89
|
+
# "full-guide"
|
|
90
|
+
Context: {
|
|
91
|
+
symptom: string | null # "slow-load" | "slow-interaction" | "scroll-jank" |
|
|
92
|
+
# "memory-growth" | "large-bundle" | null
|
|
93
|
+
stage: string | null # "development" | "ci-cd" | "production"
|
|
94
|
+
framework: string | null # "react" | "next" | "vue" | "angular" | null
|
|
95
|
+
current_lcp: number | null # Current LCP in seconds
|
|
96
|
+
current_inp: number | null # Current INP in milliseconds
|
|
97
|
+
current_cls: number | null # Current CLS score
|
|
98
|
+
}
|
|
99
|
+
contract_version: string # "2.0.0"
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
#### Output Schema
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
Status: "success" | "error"
|
|
106
|
+
Data: {
|
|
107
|
+
vitals: {
|
|
108
|
+
lcp: { target: string, current: number | null, status: string }
|
|
109
|
+
inp: { target: string, current: number | null, status: string }
|
|
110
|
+
cls: { target: string, current: number | null, status: string }
|
|
111
|
+
} | null
|
|
112
|
+
workflow: {
|
|
113
|
+
steps: Array<{
|
|
114
|
+
order: number
|
|
115
|
+
phase: string # "baseline" | "identify" | "fix" | "validate"
|
|
116
|
+
action: string
|
|
117
|
+
}>
|
|
118
|
+
} | null
|
|
119
|
+
tool: {
|
|
120
|
+
recommended: string
|
|
121
|
+
problem_type: string
|
|
122
|
+
} | null
|
|
123
|
+
bundle: {
|
|
124
|
+
issues: Array<{ issue: string, indicator: string, action: string }>
|
|
125
|
+
} | null
|
|
126
|
+
quick_wins: Array<{
|
|
127
|
+
priority: number
|
|
128
|
+
action: string
|
|
129
|
+
impact: string # "high" | "medium"
|
|
130
|
+
}> | null
|
|
131
|
+
metadata: {
|
|
132
|
+
contract_version: string
|
|
133
|
+
backward_compatibility: string
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
Error: ErrorSchema | null
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
#### Error Schema
|
|
140
|
+
|
|
141
|
+
```
|
|
142
|
+
Code: string # From Error Taxonomy (Section 11)
|
|
143
|
+
Message: string
|
|
144
|
+
Request_Type: string
|
|
145
|
+
Recoverable: boolean
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
#### Deterministic Guarantees
|
|
149
|
+
|
|
150
|
+
- Core Web Vitals targets are fixed: LCP < 2.5s, INP < 200ms, CLS < 0.1.
|
|
151
|
+
- Profiling workflow is fixed: 4 steps in defined order.
|
|
152
|
+
- Tool selection is deterministic: symptom → tool mapping.
|
|
153
|
+
- Bundle issues/actions are fixed: 4 issues, 4 actions.
|
|
154
|
+
- Quick wins are fixed: 5 priorities in ranked order.
|
|
155
|
+
- Same symptom = same tool recommendation.
|
|
156
|
+
|
|
157
|
+
#### What Agents May Assume
|
|
158
|
+
|
|
159
|
+
- Core Web Vitals thresholds match Google's published standards.
|
|
160
|
+
- Profiling tools are available in standard browser DevTools.
|
|
161
|
+
- Bundle analyzer is npm-installable.
|
|
162
|
+
- Lighthouse is available via CLI or browser.
|
|
163
|
+
|
|
164
|
+
#### What Agents Must NOT Assume
|
|
165
|
+
|
|
166
|
+
- Profiling tools are pre-installed.
|
|
167
|
+
- Current metrics are available (may be null).
|
|
168
|
+
- Framework-specific patterns always apply.
|
|
169
|
+
- Quick wins are sufficient (may need deeper analysis).
|
|
170
|
+
|
|
171
|
+
#### Side-Effect Boundaries
|
|
172
|
+
|
|
173
|
+
| Operation | Side Effects |
|
|
174
|
+
|-----------|-------------|
|
|
175
|
+
| Core Web Vitals | None; threshold output |
|
|
176
|
+
| Tool selection | None; recommendation |
|
|
177
|
+
| Bundle analysis | None; issue guidance |
|
|
178
|
+
| Runtime profiling | None; pattern guidance |
|
|
179
|
+
| Quick wins | None; prioritized list |
|
|
180
|
+
| Backend patterns | None; guidance output |
|
|
181
|
+
|
|
182
|
+
### 6.2 Workflow Contract
|
|
183
|
+
|
|
184
|
+
#### Invocation Pattern
|
|
185
|
+
|
|
186
|
+
```
|
|
187
|
+
1. Identify performance symptom (slow load, jank, memory, bundle)
|
|
188
|
+
2. Invoke tool-select for appropriate profiling tool
|
|
189
|
+
3. Invoke profiling-workflow for 4-step process
|
|
190
|
+
4. Run profiling tool (caller's responsibility)
|
|
191
|
+
5. Invoke bottleneck-diagnosis with results
|
|
192
|
+
6. Invoke quick-wins for prioritized fix actions
|
|
193
|
+
7. Apply fixes (caller's responsibility)
|
|
194
|
+
8. Re-invoke profiling-workflow for validation
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
#### Execution Guarantees
|
|
198
|
+
|
|
199
|
+
- Each invocation produces a complete recommendation.
|
|
200
|
+
- All decisions are independent (can be invoked in any order).
|
|
201
|
+
|
|
202
|
+
#### Failure Propagation Model
|
|
203
|
+
|
|
204
|
+
| Failure Severity | Propagation | Workflow Action |
|
|
205
|
+
|-----------------|-------------|-----------------|
|
|
206
|
+
| Unknown symptom | Return error | Describe symptom more specifically |
|
|
207
|
+
| Unknown framework | Return error | Specify supported framework |
|
|
208
|
+
| Invalid request type | Return error | Use supported type |
|
|
209
|
+
|
|
210
|
+
#### Retry Boundaries
|
|
211
|
+
|
|
212
|
+
- Zero internal retries. Deterministic output.
|
|
213
|
+
|
|
214
|
+
#### Isolation Model
|
|
215
|
+
|
|
216
|
+
- Each invocation is stateless and independent.
|
|
217
|
+
|
|
218
|
+
#### Idempotency Expectations
|
|
219
|
+
|
|
220
|
+
| Operation | Idempotent | Notes |
|
|
221
|
+
|-----------|-----------|-------|
|
|
222
|
+
| Core Web Vitals | Yes | Fixed thresholds |
|
|
223
|
+
| Tool selection | Yes | Same symptom = same tool |
|
|
224
|
+
| Quick wins | Yes | Fixed ranking |
|
|
225
|
+
| Bundle analysis | Yes | Fixed issues/actions |
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## 7. Execution Model
|
|
230
|
+
|
|
231
|
+
### 2-Phase Lifecycle
|
|
232
|
+
|
|
233
|
+
| Phase | Action | Output |
|
|
234
|
+
|-------|--------|--------|
|
|
235
|
+
| **Classify** | Map symptom to profiling domain | Classification |
|
|
236
|
+
| **Guide** | Generate tool recommendation, workflow, or fix strategy | Complete output |
|
|
237
|
+
|
|
238
|
+
All phases synchronous. No async pipeline.
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## 8. Deterministic Design Principles
|
|
243
|
+
|
|
244
|
+
| Principle | Enforcement |
|
|
245
|
+
|-----------|-------------|
|
|
246
|
+
| Core Web Vitals fixed | LCP < 2.5s (good), > 4.0s (poor); INP < 200ms (good), > 500ms (poor); CLS < 0.1 (good), > 0.25 (poor) |
|
|
247
|
+
| 4-step workflow fixed | Baseline → Identify → Fix → Validate |
|
|
248
|
+
| Tool selection deterministic | Page load → Lighthouse; Bundle → Analyzer; Runtime → DevTools Perf; Memory → DevTools Memory; Network → DevTools Network |
|
|
249
|
+
| Bundle issues fixed | Large deps → import specific; Duplicates → dedupe; Unused → tree-shake; Missing splits → code split |
|
|
250
|
+
| Quick wins ranked | 1: Compression, 2: Lazy images, 3: Code split, 4: Cache static, 5: Image formats |
|
|
251
|
+
| Long task threshold | > 50ms = UI blocking |
|
|
252
|
+
| Measure before fixing | Baseline mandatory; no guessing |
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## 9. State & Idempotency Model
|
|
257
|
+
|
|
258
|
+
Stateless. Fully idempotent. No persistent state.
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
## 10. Failure Handling Strategy
|
|
263
|
+
|
|
264
|
+
| Failure Class | Behavior | Caller Recovery |
|
|
265
|
+
|---------------|----------|-----------------|
|
|
266
|
+
| Unknown symptom | Return `ERR_UNKNOWN_SYMPTOM` | Describe symptom |
|
|
267
|
+
| Unknown framework | Return `ERR_UNKNOWN_FRAMEWORK` | Specify framework |
|
|
268
|
+
| Invalid request type | Return `ERR_INVALID_REQUEST_TYPE` | Use supported type |
|
|
269
|
+
|
|
270
|
+
**Invariant:** Every failure returns a structured error. No partial guidance.
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## 11. Error Taxonomy
|
|
275
|
+
|
|
276
|
+
| Code | Category | Recoverable | Description |
|
|
277
|
+
|------|----------|-------------|-------------|
|
|
278
|
+
| `ERR_INVALID_REQUEST_TYPE` | Validation | No | Request type not supported |
|
|
279
|
+
| `ERR_UNKNOWN_SYMPTOM` | Validation | Yes | Symptom not in known set |
|
|
280
|
+
| `ERR_UNKNOWN_FRAMEWORK` | Validation | Yes | Framework not recognized |
|
|
281
|
+
|
|
282
|
+
---
|
|
283
|
+
|
|
284
|
+
## 12. Timeout & Retry Policy
|
|
285
|
+
|
|
286
|
+
| Parameter | Default | Maximum | Rationale |
|
|
287
|
+
|-----------|---------|---------|-----------|
|
|
288
|
+
| Decision generation | N/A | N/A | Synchronous; < 50ms |
|
|
289
|
+
| Internal retries | Zero | Zero | Deterministic output |
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
|
|
293
|
+
## 13. Observability & Logging Schema
|
|
294
|
+
|
|
295
|
+
### Log Entry Format
|
|
296
|
+
|
|
297
|
+
```json
|
|
298
|
+
{
|
|
299
|
+
"trace_id": "uuid",
|
|
300
|
+
"skill_name": "perf-optimizer",
|
|
301
|
+
"contract_version": "2.0.0",
|
|
302
|
+
"execution_id": "uuid",
|
|
303
|
+
"timestamp": "ISO-8601",
|
|
304
|
+
"request_type": "string",
|
|
305
|
+
"symptom": "string|null",
|
|
306
|
+
"framework": "string|null",
|
|
307
|
+
"tool_recommended": "string|null",
|
|
308
|
+
"status": "success|error",
|
|
309
|
+
"error_code": "string|null",
|
|
310
|
+
"duration_ms": "number"
|
|
311
|
+
}
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
### Required Log Points
|
|
315
|
+
|
|
316
|
+
| Event | Log Level | Fields |
|
|
317
|
+
|-------|-----------|--------|
|
|
318
|
+
| Tool recommended | INFO | symptom, tool_recommended |
|
|
319
|
+
| Vitals assessed | INFO | current_lcp, current_inp, current_cls |
|
|
320
|
+
| Quick wins generated | INFO | priority_count |
|
|
321
|
+
| Decision failed | ERROR | error_code, message |
|
|
322
|
+
|
|
323
|
+
### Metrics
|
|
324
|
+
|
|
325
|
+
| Metric | Type | Unit |
|
|
326
|
+
|--------|------|------|
|
|
327
|
+
| `perfoptimizer.decision.duration` | Histogram | ms |
|
|
328
|
+
| `perfoptimizer.symptom.distribution` | Counter | per symptom type |
|
|
329
|
+
| `perfoptimizer.tool.distribution` | Counter | per recommended tool |
|
|
330
|
+
| `perfoptimizer.framework.distribution` | Counter | per framework |
|
|
331
|
+
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
## 14. Security & Trust Model
|
|
335
|
+
|
|
336
|
+
### Data Handling
|
|
337
|
+
|
|
338
|
+
- Performance Profiler processes no credentials, API keys, or PII.
|
|
339
|
+
- Current metric values (LCP, INP, CLS) are numeric only.
|
|
340
|
+
- No network calls, no file access, no system profiling.
|
|
341
|
+
|
|
342
|
+
---
|
|
343
|
+
|
|
344
|
+
## 15. Scalability Model
|
|
345
|
+
|
|
346
|
+
| Dimension | Constraint | Mitigation |
|
|
347
|
+
|-----------|-----------|------------|
|
|
348
|
+
| Throughput | CPU-bound decision tree | < 50ms; scales linearly |
|
|
349
|
+
| Concurrency | Stateless invocations | Unlimited parallel |
|
|
350
|
+
| Memory per invocation | < 1 MB | No accumulation |
|
|
351
|
+
| Network | Zero network calls | No external dependency |
|
|
352
|
+
|
|
353
|
+
---
|
|
354
|
+
|
|
355
|
+
## 16. Concurrency Model
|
|
356
|
+
|
|
357
|
+
Fully parallel. No shared state. No coordination required.
|
|
358
|
+
|
|
359
|
+
---
|
|
360
|
+
|
|
361
|
+
## 17. Resource Lifecycle Management
|
|
362
|
+
|
|
363
|
+
All resources scoped to invocation. No persistent handles.
|
|
364
|
+
|
|
365
|
+
---
|
|
366
|
+
|
|
367
|
+
## 18. Performance Constraints
|
|
368
|
+
|
|
369
|
+
| Operation | P50 Target | P99 Target | Hard Limit |
|
|
370
|
+
|-----------|-----------|-----------|------------|
|
|
371
|
+
| Tool selection | < 2 ms | < 5 ms | 20 ms |
|
|
372
|
+
| Vitals assessment | < 2 ms | < 5 ms | 20 ms |
|
|
373
|
+
| Full guide | < 10 ms | < 30 ms | 50 ms |
|
|
374
|
+
| Output size | ≤ 2,000 chars | ≤ 5,000 chars | 8,000 chars |
|
|
375
|
+
|
|
376
|
+
---
|
|
377
|
+
|
|
378
|
+
## 19. Operational Risks
|
|
379
|
+
|
|
380
|
+
| Risk | Likelihood | Impact | Mitigation |
|
|
381
|
+
|------|-----------|--------|------------|
|
|
382
|
+
| Core Web Vitals thresholds change | Low | Outdated targets | Track Google updates |
|
|
383
|
+
| New profiling tools emerge | Low | Missing recommendations | Annual review |
|
|
384
|
+
| Framework-specific patterns change | Medium | Stale guidance | Track framework releases |
|
|
385
|
+
| Bundle analyzer API changes | Low | Script breakage | Pin analyzer version |
|
|
386
|
+
|
|
387
|
+
---
|
|
388
|
+
|
|
389
|
+
## 20. Compliance with skill-design-guide.md
|
|
390
|
+
|
|
391
|
+
| Requirement | Status | Evidence |
|
|
392
|
+
|-------------|--------|----------|
|
|
393
|
+
| YAML frontmatter complete | ✅ | name, description, metadata with category, version, triggers, coordinates_with, success_metrics |
|
|
394
|
+
| SKILL.md < 200 lines | ✅ | Entry point under 200 lines |
|
|
395
|
+
| Prerequisites documented | ✅ | No external dependencies for guidance |
|
|
396
|
+
| When to Use section | ✅ | Situation-based routing table |
|
|
397
|
+
| Core content matches skill type | ✅ | Expert type: tool selection, profiling workflow, vitals targets |
|
|
398
|
+
| Troubleshooting section | ✅ | Anti-patterns table |
|
|
399
|
+
| Related section | ✅ | Cross-links to e2e-automation, /optimize |
|
|
400
|
+
| Content Map for multi-file | ✅ | Links to backend-patterns.md, scripts/, engineering-spec.md |
|
|
401
|
+
| Contract versioning | ✅ | contract_version, backward_compatibility, breaking_changes |
|
|
402
|
+
| Compliance matrix structured | ✅ | This table with ✅/❌ + evidence |
|
|
403
|
+
|
|
404
|
+
---
|
|
405
|
+
|
|
406
|
+
## 21. Production Readiness Checklist
|
|
407
|
+
|
|
408
|
+
| Category | Check | Status |
|
|
409
|
+
|----------|-------|--------|
|
|
410
|
+
| **Functionality** | Core Web Vitals (LCP, INP, CLS) with thresholds | ✅ |
|
|
411
|
+
| **Functionality** | 4-step profiling workflow | ✅ |
|
|
412
|
+
| **Functionality** | 5 profiling tools with symptom mapping | ✅ |
|
|
413
|
+
| **Functionality** | Bundle analysis (4 issues + 4 actions) | ✅ |
|
|
414
|
+
| **Functionality** | Quick wins (5 ranked by impact) | ✅ |
|
|
415
|
+
| **Contracts** | Input/output/error schemas in pseudo-schema format | ✅ |
|
|
416
|
+
| **Contracts** | Contract versioning with semver | ✅ |
|
|
417
|
+
| **Failure** | Error taxonomy with 3 categorized codes | ✅ |
|
|
418
|
+
| **Failure** | Zero internal retries | ✅ |
|
|
419
|
+
| **Determinism** | Fixed thresholds, fixed rankings, fixed tool mappings | ✅ |
|
|
420
|
+
| **Security** | No credentials, no PII, no network access | ✅ |
|
|
421
|
+
| **Observability** | Structured log schema with 5 mandatory fields | ✅ |
|
|
422
|
+
| **Observability** | 4 metrics defined | ✅ |
|
|
423
|
+
| **Performance** | P50/P99 targets for all operations | ✅ |
|
|
424
|
+
| **Compliance** | All skill-design-guide.md sections mapped with evidence | ✅ |
|
|
425
|
+
|
|
426
|
+
---
|
|
427
|
+
|
|
428
|
+
⚡ PikaKit v3.9.134
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// @ts-nocheck
|
|
3
|
+
/**
|
|
4
|
+
* Lighthouse Performance Audit
|
|
5
|
+
* Version: 2.0.0
|
|
6
|
+
*
|
|
7
|
+
* Runs Lighthouse CLI and extracts Core Web Vitals + category scores.
|
|
8
|
+
* Requires: npm install -g lighthouse
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* node lighthouse_audit.js <url>
|
|
12
|
+
* node lighthouse_audit.js <url> --threshold=80
|
|
13
|
+
* node lighthouse_audit.js <url> --mobile
|
|
14
|
+
* node lighthouse_audit.js --help
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { execFile } from 'node:child_process'
|
|
18
|
+
import { readFile, unlink, mkdir } from 'node:fs/promises'
|
|
19
|
+
import { existsSync } from 'node:fs'
|
|
20
|
+
import { tmpdir } from 'node:os'
|
|
21
|
+
import { join } from 'node:path'
|
|
22
|
+
import { promisify } from 'node:util'
|
|
23
|
+
|
|
24
|
+
const execFileAsync = promisify(execFile)
|
|
25
|
+
const VERSION = '2.0.0'
|
|
26
|
+
|
|
27
|
+
// --- CLI Argument Parsing ---
|
|
28
|
+
const args = process.argv.slice(2)
|
|
29
|
+
|
|
30
|
+
if (args.includes('--help') || args.length === 0) {
|
|
31
|
+
console.log(`
|
|
32
|
+
Lighthouse Audit v${VERSION}
|
|
33
|
+
|
|
34
|
+
Usage:
|
|
35
|
+
node lighthouse_audit.js <url> Run audit (desktop)
|
|
36
|
+
node lighthouse_audit.js <url> --mobile Run audit (mobile)
|
|
37
|
+
node lighthouse_audit.js <url> --threshold=80 Set pass/fail threshold
|
|
38
|
+
node lighthouse_audit.js <url> --categories=perf Audit specific categories
|
|
39
|
+
|
|
40
|
+
Options:
|
|
41
|
+
--mobile Emulate mobile device (default: desktop)
|
|
42
|
+
--threshold=N Performance score threshold (0-100). Exit 1 if below.
|
|
43
|
+
--categories=X Comma-separated: perf,a11y,bp,seo (default: all)
|
|
44
|
+
--help Show this help
|
|
45
|
+
|
|
46
|
+
Examples:
|
|
47
|
+
node lighthouse_audit.js https://example.com
|
|
48
|
+
node lighthouse_audit.js https://example.com --mobile --threshold=90
|
|
49
|
+
node lighthouse_audit.js http://localhost:3000 --categories=perf
|
|
50
|
+
|
|
51
|
+
Requires: npm install -g lighthouse
|
|
52
|
+
`)
|
|
53
|
+
process.exit(0)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const url = args.find(a => !a.startsWith('--'))
|
|
57
|
+
const isMobile = args.includes('--mobile')
|
|
58
|
+
const thresholdArg = args.find(a => a.startsWith('--threshold='))
|
|
59
|
+
const threshold = thresholdArg ? parseInt(thresholdArg.split('=')[1], 10) : null
|
|
60
|
+
const catArg = args.find(a => a.startsWith('--categories='))
|
|
61
|
+
|
|
62
|
+
const categoryMap = { perf: 'performance', a11y: 'accessibility', bp: 'best-practices', seo: 'seo' }
|
|
63
|
+
const categories = catArg
|
|
64
|
+
? catArg.split('=')[1].split(',').map(c => categoryMap[c] || c).join(',')
|
|
65
|
+
: 'performance,accessibility,best-practices,seo'
|
|
66
|
+
|
|
67
|
+
if (!url) {
|
|
68
|
+
console.log(JSON.stringify({ error: 'No URL provided. Use --help for usage.' }))
|
|
69
|
+
process.exit(1)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// --- Main Audit Function ---
|
|
73
|
+
async function runLighthouse(targetUrl) {
|
|
74
|
+
const outputDir = join(tmpdir(), 'lighthouse_audit')
|
|
75
|
+
if (!existsSync(outputDir)) await mkdir(outputDir, { recursive: true })
|
|
76
|
+
const outputPath = join(outputDir, `lighthouse_${Date.now()}.json`)
|
|
77
|
+
|
|
78
|
+
const lhArgs = [
|
|
79
|
+
targetUrl,
|
|
80
|
+
'--output=json',
|
|
81
|
+
`--output-path=${outputPath}`,
|
|
82
|
+
'--chrome-flags=--headless --no-sandbox',
|
|
83
|
+
`--only-categories=${categories}`,
|
|
84
|
+
]
|
|
85
|
+
|
|
86
|
+
if (!isMobile) {
|
|
87
|
+
lhArgs.push('--preset=desktop')
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
try {
|
|
91
|
+
await execFileAsync('lighthouse', lhArgs, {
|
|
92
|
+
timeout: 120_000,
|
|
93
|
+
maxBuffer: 10 * 1024 * 1024,
|
|
94
|
+
})
|
|
95
|
+
} catch (err) {
|
|
96
|
+
if (err.code === 'ENOENT') {
|
|
97
|
+
return { error: 'Lighthouse CLI not found. Install: npm install -g lighthouse' }
|
|
98
|
+
}
|
|
99
|
+
if (err.killed) {
|
|
100
|
+
return { error: 'Lighthouse audit timed out (120s)' }
|
|
101
|
+
}
|
|
102
|
+
// Lighthouse may exit non-zero but still produce output
|
|
103
|
+
if (!existsSync(outputPath)) {
|
|
104
|
+
return { error: `Lighthouse failed: ${err.message}` }
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
if (!existsSync(outputPath)) {
|
|
109
|
+
return { error: 'Lighthouse did not produce output' }
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
try {
|
|
113
|
+
const raw = await readFile(outputPath, 'utf-8')
|
|
114
|
+
await unlink(outputPath).catch(() => { })
|
|
115
|
+
|
|
116
|
+
const report = JSON.parse(raw)
|
|
117
|
+
return parseReport(report, targetUrl)
|
|
118
|
+
} catch (err) {
|
|
119
|
+
return { error: `Failed to parse report: ${err.message}` }
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function parseReport(report, targetUrl) {
|
|
124
|
+
const cats = report.categories || {}
|
|
125
|
+
const audits = report.audits || {}
|
|
126
|
+
|
|
127
|
+
// Category scores (0-100)
|
|
128
|
+
const scores = {}
|
|
129
|
+
for (const [key, cat] of Object.entries(cats)) {
|
|
130
|
+
scores[key] = Math.round((cat.score || 0) * 100)
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// Core Web Vitals
|
|
134
|
+
const cwv = {
|
|
135
|
+
lcp: extractMetric(audits, 'largest-contentful-paint'),
|
|
136
|
+
inp: extractMetric(audits, 'interaction-to-next-paint') ||
|
|
137
|
+
extractMetric(audits, 'total-blocking-time'), // TBT as INP proxy in lab
|
|
138
|
+
cls: extractMetric(audits, 'cumulative-layout-shift'),
|
|
139
|
+
fcp: extractMetric(audits, 'first-contentful-paint'),
|
|
140
|
+
ttfb: extractMetric(audits, 'server-response-time'),
|
|
141
|
+
si: extractMetric(audits, 'speed-index'),
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// CWV pass/fail
|
|
145
|
+
const cwvStatus = {
|
|
146
|
+
lcp: cwv.lcp ? (cwv.lcp.value <= 2500 ? 'GOOD' : cwv.lcp.value <= 4000 ? 'NEEDS_WORK' : 'POOR') : null,
|
|
147
|
+
cls: cwv.cls ? (cwv.cls.value <= 0.1 ? 'GOOD' : cwv.cls.value <= 0.25 ? 'NEEDS_WORK' : 'POOR') : null,
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// Summary
|
|
151
|
+
const perfScore = scores.performance ?? 0
|
|
152
|
+
let summary
|
|
153
|
+
if (perfScore >= 90) summary = '✅ Excellent performance'
|
|
154
|
+
else if (perfScore >= 50) summary = '⚠️ Needs improvement'
|
|
155
|
+
else summary = '❌ Poor performance'
|
|
156
|
+
|
|
157
|
+
// Top opportunities
|
|
158
|
+
const opportunities = (report.audits ? Object.values(report.audits) : [])
|
|
159
|
+
.filter(a => a.details?.type === 'opportunity' && a.details?.overallSavingsMs > 0)
|
|
160
|
+
.sort((a, b) => (b.details.overallSavingsMs || 0) - (a.details.overallSavingsMs || 0))
|
|
161
|
+
.slice(0, 5)
|
|
162
|
+
.map(a => ({
|
|
163
|
+
title: a.title,
|
|
164
|
+
savingsMs: Math.round(a.details.overallSavingsMs),
|
|
165
|
+
}))
|
|
166
|
+
|
|
167
|
+
return {
|
|
168
|
+
url: targetUrl,
|
|
169
|
+
device: isMobile ? 'mobile' : 'desktop',
|
|
170
|
+
scores,
|
|
171
|
+
cwv,
|
|
172
|
+
cwvStatus,
|
|
173
|
+
summary,
|
|
174
|
+
opportunities,
|
|
175
|
+
threshold: threshold ? { value: threshold, passed: perfScore >= threshold } : undefined,
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
function extractMetric(audits, id) {
|
|
180
|
+
const audit = audits[id]
|
|
181
|
+
if (!audit) return null
|
|
182
|
+
return {
|
|
183
|
+
value: audit.numericValue != null ? Math.round(audit.numericValue * 100) / 100 : null,
|
|
184
|
+
unit: audit.numericUnit || 'ms',
|
|
185
|
+
display: audit.displayValue || null,
|
|
186
|
+
score: audit.score != null ? Math.round(audit.score * 100) : null,
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// --- Run ---
|
|
191
|
+
const result = await runLighthouse(url)
|
|
192
|
+
console.log(JSON.stringify(result, null, 2))
|
|
193
|
+
|
|
194
|
+
// Exit code based on threshold
|
|
195
|
+
if (result.error) {
|
|
196
|
+
process.exit(2)
|
|
197
|
+
} else if (threshold && result.scores?.performance < threshold) {
|
|
198
|
+
process.exit(1)
|
|
199
|
+
} else {
|
|
200
|
+
process.exit(0)
|
|
201
|
+
}
|