@caddis/cli 0.3.0 → 0.4.1
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/bundles/antigravity-plugin/agents/knowledge-transfer.md +17 -32
- package/bundles/antigravity-plugin/caddis_statusline.py +25 -3
- package/bundles/antigravity-plugin/guard_agy.py +41 -9
- package/bundles/antigravity-plugin/plugin.json +1 -1
- package/bundles/antigravity-plugin/scripts/caddis_inventory.py +73 -3
- package/bundles/antigravity-plugin/scripts/caddis_statusline.py +25 -3
- package/bundles/antigravity-plugin/scripts/check_doc_coverage.py +1 -1
- package/bundles/antigravity-plugin/scripts/claudster_config.py +0 -5
- package/bundles/antigravity-plugin/scripts/hook_log.py +1 -1
- package/bundles/antigravity-plugin/scripts/new-machine.ps1 +170 -0
- package/bundles/antigravity-plugin/scripts/oss_ask.py +1 -1
- package/bundles/antigravity-plugin/scripts/oss_model.py +10 -2
- package/bundles/antigravity-plugin/scripts/oss_review.py +1 -1
- package/bundles/antigravity-plugin/scripts/setup_project_ai.py +42 -10
- package/bundles/antigravity-plugin/session_end_agy.py +31 -6
- package/bundles/antigravity-plugin/skills/_registry.md +1 -0
- package/bundles/antigravity-plugin/skills/advisory-hub/SKILL.md +44 -0
- package/bundles/antigravity-plugin/skills/code-review/SKILL.md +11 -0
- package/bundles/antigravity-plugin/skills/feature-plan/SKILL.md +21 -0
- package/bundles/antigravity-plugin/skills/gate-review/SKILL.md +11 -0
- package/bundles/antigravity-plugin/skills/implement/SKILL.md +36 -0
- package/bundles/antigravity-plugin/skills/safe-cleanup/SKILL.md +186 -0
- package/bundles/antigravity-plugin/skills/security-review/SKILL.md +9 -0
- package/bundles/antigravity-plugin/skills/validate-phase/SKILL.md +31 -0
- package/bundles/antigravity-plugin/warm_start_agy.py +96 -9
- package/bundles/antigravity-plugin-extras/plugin.json +1 -1
- package/bundles/antigravity-plugin-extras/skills/_registry.md +1 -0
- package/bundles/antigravity-plugin-extras/skills/safe-cleanup/SKILL.md +186 -0
- package/bundles/codex/.codex/config.toml.example +36 -0
- package/bundles/codex/.codex/skills/coding/api-design/SKILL.md +249 -0
- package/bundles/codex/.codex/skills/coding/backend-development/SKILL.md +305 -0
- package/bundles/codex/.codex/skills/coding/code-review/SKILL.md +140 -0
- package/bundles/codex/.codex/skills/coding/codebase-audit/SKILL.md +204 -0
- package/bundles/codex/.codex/skills/coding/dashboard-perf-sweep/SKILL.md +132 -0
- package/bundles/codex/.codex/skills/coding/dashboard-perf-sweep/scripts/perf_sweep.py +249 -0
- package/bundles/codex/.codex/skills/coding/error-handling/SKILL.md +260 -0
- package/bundles/codex/.codex/skills/coding/fastapi-dev/SKILL.md +300 -0
- package/bundles/codex/.codex/skills/coding/javascript-typescript/SKILL.md +142 -0
- package/bundles/codex/.codex/skills/coding/python/SKILL.md +388 -0
- package/bundles/codex/.codex/skills/coding/refactoring/SKILL.md +486 -0
- package/bundles/codex/.codex/skills/coding/security-review/SKILL.md +205 -0
- package/bundles/codex/.codex/skills/coding/sql/SKILL.md +321 -0
- package/bundles/codex/.codex/skills/data/database-design/SKILL.md +177 -0
- package/bundles/codex/.codex/skills/data/db-diagram/SKILL.md +148 -0
- package/bundles/codex/.codex/skills/data/db-diagram/scripts/sql_to_graph.py +1212 -0
- package/bundles/codex/.codex/skills/devops/ci-cd-pipeline/SKILL.md +315 -0
- package/bundles/codex/.codex/skills/devops/gh-cli/SKILL.md +195 -0
- package/bundles/codex/.codex/skills/devops/git-commit/SKILL.md +285 -0
- package/bundles/codex/.codex/skills/devops/safe-cleanup/SKILL.md +186 -0
- package/bundles/codex/.codex/skills/devops/using-git-worktrees/SKILL.md +217 -0
- package/bundles/codex/.codex/skills/devops/windows-deployment/SKILL.md +880 -0
- package/bundles/codex/.codex/skills/docs/code-documentation/SKILL.md +271 -0
- package/bundles/codex/.codex/skills/docs/explainer-doc/SKILL.md +97 -0
- package/bundles/codex/.codex/skills/docs/technical-writing/SKILL.md +286 -0
- package/bundles/codex/.codex/skills/docs/writing-plans/SKILL.md +387 -0
- package/bundles/codex/.codex/skills/frontend/css-architecture/SKILL.md +305 -0
- package/bundles/codex/.codex/skills/frontend/css-architecture/references/RESPONSIVE-DESIGN.md +604 -0
- package/bundles/codex/.codex/skills/frontend/frontend-design/SKILL.md +193 -0
- package/bundles/codex/.codex/skills/frontend/frontend-design/references/my-tech-stack.md +127 -0
- package/bundles/codex/.codex/skills/frontend/mockup/SKILL.md +242 -0
- package/bundles/codex/.codex/skills/frontend/react-best-practices/SKILL.md +269 -0
- package/bundles/codex/.codex/skills/frontend/react-dev/README.md +404 -0
- package/bundles/codex/.codex/skills/frontend/react-dev/SKILL.md +459 -0
- package/bundles/codex/.codex/skills/frontend/react-dev/examples/generic-components.md +579 -0
- package/bundles/codex/.codex/skills/frontend/react-dev/examples/server-components.md +579 -0
- package/bundles/codex/.codex/skills/frontend/react-dev/references/event-handlers.md +574 -0
- package/bundles/codex/.codex/skills/frontend/react-dev/references/hooks.md +456 -0
- package/bundles/codex/.codex/skills/frontend/react-dev/references/react-19-patterns.md +638 -0
- package/bundles/codex/.codex/skills/frontend/react-dev/references/react-router.md +1002 -0
- package/bundles/codex/.codex/skills/frontend/react-dev/references/tanstack-router.md +587 -0
- package/bundles/codex/.codex/skills/frontend/ui-review/SKILL.md +176 -0
- package/bundles/codex/.codex/skills/frontend/ui-review/references/framework-fixes.md +471 -0
- package/bundles/codex/.codex/skills/frontend/ui-review/references/visual-checklist.md +236 -0
- package/bundles/codex/.codex/skills/frontend/warm-editorial-ui/DESIGN_TOKENS.md +487 -0
- package/bundles/codex/.codex/skills/frontend/warm-editorial-ui/IMPLEMENTATION_GUIDE.md +177 -0
- package/bundles/codex/.codex/skills/frontend/warm-editorial-ui/SKILL.md +732 -0
- package/bundles/codex/.codex/skills/media/draw-io/SKILL.md +162 -0
- package/bundles/codex/.codex/skills/media/draw-io/references/aws-icons.md +677 -0
- package/bundles/codex/.codex/skills/media/draw-io/references/layout-guidelines.md +142 -0
- package/bundles/codex/.codex/skills/media/draw-io/references/troubleshooting.md +118 -0
- package/bundles/codex/.codex/skills/media/draw-io/references/workflows.md +103 -0
- package/bundles/codex/.codex/skills/media/draw-io/scripts/convert-drawio-to-png.sh +25 -0
- package/bundles/codex/.codex/skills/media/draw-io/scripts/find_aws_icon.py +79 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/SKILL.md +292 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/ENHANCEMENTS.md +264 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/MERMAID-SUMMARY.md +137 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/advanced-features.md +556 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/architecture-diagrams.md +192 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/c4-diagrams.md +410 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/class-diagrams.md +361 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/erd-diagrams.md +510 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/flowcharts.md +450 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/sequence-diagrams.md +394 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/troubleshooting.md +335 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/workflows.md +418 -0
- package/bundles/codex/.codex/skills/media/particle-art/SKILL.md +243 -0
- package/bundles/codex/.codex/skills/media/particle-art/references/canvas-utils.ts +171 -0
- package/bundles/codex/.codex/skills/media/particle-art/references/dot-field.template.tsx +203 -0
- package/bundles/codex/.codex/skills/media/particle-art/references/flow-field.template.tsx +263 -0
- package/bundles/codex/.codex/skills/media/particle-art/references/node-shape.template.tsx +261 -0
- package/bundles/codex/.codex/skills/media/particle-art/references/shape-sampler.ts +281 -0
- package/bundles/codex/.codex/skills/media/particle-art/references/stipple-morph.template.tsx +167 -0
- package/bundles/codex/.codex/skills/media/particle-art/references/stipple.template.tsx +175 -0
- package/bundles/codex/.codex/skills/media/particle-art/references/trail-ghost.template.tsx +266 -0
- package/bundles/codex/.codex/skills/media/particle-art/references/usage-examples.md +320 -0
- package/bundles/codex/.codex/skills/testing/playwright/API_REFERENCE.md +653 -0
- package/bundles/codex/.codex/skills/testing/playwright/SKILL.md +454 -0
- package/bundles/codex/.codex/skills/testing/playwright/lib/helpers.js +441 -0
- package/bundles/codex/.codex/skills/testing/playwright/package.json +26 -0
- package/bundles/codex/.codex/skills/testing/playwright/run.js +228 -0
- package/bundles/codex/.codex/skills/testing/tdd-workflow/SKILL.md +188 -0
- package/bundles/codex/.codex/skills/testing/test-strategy/SKILL.md +155 -0
- package/bundles/codex/.codex/skills/testing/webapp-testing/LICENSE.txt +202 -0
- package/bundles/codex/.codex/skills/testing/webapp-testing/SKILL.md +97 -0
- package/bundles/codex/.codex/skills/testing/webapp-testing/examples/console_logging.py +35 -0
- package/bundles/codex/.codex/skills/testing/webapp-testing/examples/element_discovery.py +40 -0
- package/bundles/codex/.codex/skills/testing/webapp-testing/examples/static_html_automation.py +33 -0
- package/bundles/codex/.codex/skills/testing/webapp-testing/scripts/with_server.py +106 -0
- package/bundles/codex/.codex/skills/workflow/advisory-hub/SKILL.md +227 -0
- package/bundles/codex/.codex/skills/workflow/advisory-hub/reference/context-template.md +214 -0
- package/bundles/codex/.codex/skills/workflow/advisory-hub/reference/hub-handbook.md +233 -0
- package/bundles/codex/.codex/skills/workflow/advisory-hub/reference/report-contract.md +94 -0
- package/bundles/codex/.codex/skills/workflow/advisory-hub/reference/succession.md +118 -0
- package/bundles/codex/.codex/skills/workflow/best-practices/SKILL.md +500 -0
- package/bundles/codex/.codex/skills/workflow/best-practices/agents/best-practices-referencer.md +263 -0
- package/bundles/codex/.codex/skills/workflow/best-practices/agents/codebase-context-builder.md +326 -0
- package/bundles/codex/.codex/skills/workflow/best-practices/agents/task-intent-analyzer.md +245 -0
- package/bundles/codex/.codex/skills/workflow/best-practices/references/anti-patterns.md +571 -0
- package/bundles/codex/.codex/skills/workflow/best-practices/references/before-after-examples.md +1114 -0
- package/bundles/codex/.codex/skills/workflow/best-practices/references/best-practices-guide.md +513 -0
- package/bundles/codex/.codex/skills/workflow/best-practices/references/common-workflows.md +692 -0
- package/bundles/codex/.codex/skills/workflow/best-practices/references/prompt-patterns.md +547 -0
- package/bundles/codex/.codex/skills/workflow/brainstorming/SKILL.md +57 -0
- package/bundles/codex/.codex/skills/workflow/context-curator/SKILL.md +157 -0
- package/bundles/codex/.codex/skills/workflow/golden-plan/SKILL.md +586 -0
- package/bundles/codex/.codex/skills/workflow/preflight/SKILL.md +440 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/LICENSE.txt +202 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/SKILL.md +491 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/agents/analyzer.md +274 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/agents/comparator.md +202 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/agents/grader.md +223 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/assets/eval_review.html +146 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/eval-viewer/generate_review.py +471 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/eval-viewer/viewer.html +1325 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/references/schemas.md +430 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/__init__.py +0 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/generate_report.py +326 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/improve_description.py +247 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/package_skill.py +136 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/quick_validate.py +103 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/run_eval.py +310 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/run_loop.py +328 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/utils.py +47 -0
- package/bundles/codex/AGENTS.md +146 -0
- package/bundles/manifest.json +4 -3
- package/dist/claude-deepseek.js +2 -2
- package/dist/claude-glm.js +2 -2
- package/dist/claude-oss.js +2 -2
- package/dist/cli.js +187 -56
- package/package.json +1 -1
- package/bundles/antigravity-plugin/scripts/dream_capture.py +0 -249
- package/bundles/antigravity-plugin/scripts/dream_memory.py +0 -438
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +0 -94
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Jura-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: backend-development
|
|
3
|
+
description: Backend API design, database architecture, microservices patterns, and test-driven development. Use for designing APIs, database schemas, or backend system architecture.
|
|
4
|
+
source: wshobson/agents
|
|
5
|
+
license: MIT
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Backend Development
|
|
9
|
+
|
|
10
|
+
## API Design
|
|
11
|
+
|
|
12
|
+
### RESTful Conventions
|
|
13
|
+
```
|
|
14
|
+
GET /users # List users
|
|
15
|
+
POST /users # Create user
|
|
16
|
+
GET /users/:id # Get user
|
|
17
|
+
PUT /users/:id # Update user (full)
|
|
18
|
+
PATCH /users/:id # Update user (partial)
|
|
19
|
+
DELETE /users/:id # Delete user
|
|
20
|
+
|
|
21
|
+
GET /users/:id/posts # List user's posts
|
|
22
|
+
POST /users/:id/posts # Create post for user
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Response Format
|
|
26
|
+
```json
|
|
27
|
+
{
|
|
28
|
+
"data": { ... },
|
|
29
|
+
"meta": {
|
|
30
|
+
"page": 1,
|
|
31
|
+
"per_page": 20,
|
|
32
|
+
"total": 100
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Error Format
|
|
38
|
+
```json
|
|
39
|
+
{
|
|
40
|
+
"error": {
|
|
41
|
+
"code": "VALIDATION_ERROR",
|
|
42
|
+
"message": "Invalid input",
|
|
43
|
+
"details": [
|
|
44
|
+
{ "field": "email", "message": "Invalid format" }
|
|
45
|
+
]
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Database Patterns
|
|
51
|
+
|
|
52
|
+
### Schema Design
|
|
53
|
+
```sql
|
|
54
|
+
-- Use UUIDs for public IDs
|
|
55
|
+
CREATE TABLE users (
|
|
56
|
+
id SERIAL PRIMARY KEY,
|
|
57
|
+
public_id UUID DEFAULT gen_random_uuid() UNIQUE,
|
|
58
|
+
email VARCHAR(255) UNIQUE NOT NULL,
|
|
59
|
+
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
60
|
+
updated_at TIMESTAMPTZ DEFAULT NOW()
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
-- Soft deletes
|
|
64
|
+
ALTER TABLE users ADD COLUMN deleted_at TIMESTAMPTZ;
|
|
65
|
+
|
|
66
|
+
-- Indexes
|
|
67
|
+
CREATE INDEX idx_users_email ON users(email);
|
|
68
|
+
CREATE INDEX idx_users_created ON users(created_at DESC);
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Query Patterns
|
|
72
|
+
```sql
|
|
73
|
+
-- Pagination with cursor
|
|
74
|
+
SELECT * FROM posts
|
|
75
|
+
WHERE created_at < $cursor
|
|
76
|
+
ORDER BY created_at DESC
|
|
77
|
+
LIMIT 20;
|
|
78
|
+
|
|
79
|
+
-- Efficient counting
|
|
80
|
+
SELECT reltuples::bigint AS estimate
|
|
81
|
+
FROM pg_class WHERE relname = 'users';
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Authentication
|
|
85
|
+
|
|
86
|
+
### JWT Pattern
|
|
87
|
+
```typescript
|
|
88
|
+
interface TokenPayload {
|
|
89
|
+
sub: string; // User ID
|
|
90
|
+
iat: number; // Issued at
|
|
91
|
+
exp: number; // Expiration
|
|
92
|
+
scope: string[]; // Permissions
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function verifyToken(token: string): TokenPayload {
|
|
96
|
+
return jwt.verify(token, SECRET) as TokenPayload;
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Middleware
|
|
101
|
+
```typescript
|
|
102
|
+
async function authenticate(req: Request, res: Response, next: Next) {
|
|
103
|
+
const token = req.headers.authorization?.replace('Bearer ', '');
|
|
104
|
+
if (!token) {
|
|
105
|
+
return res.status(401).json({ error: 'Unauthorized' });
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
try {
|
|
109
|
+
req.user = verifyToken(token);
|
|
110
|
+
next();
|
|
111
|
+
} catch {
|
|
112
|
+
res.status(401).json({ error: 'Invalid token' });
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Caching Strategy
|
|
118
|
+
|
|
119
|
+
```typescript
|
|
120
|
+
// Cache-aside pattern
|
|
121
|
+
async function getUser(id: string): Promise<User> {
|
|
122
|
+
const cached = await redis.get(`user:${id}`);
|
|
123
|
+
if (cached) return JSON.parse(cached);
|
|
124
|
+
|
|
125
|
+
const user = await db.users.findById(id);
|
|
126
|
+
await redis.setex(`user:${id}`, 3600, JSON.stringify(user));
|
|
127
|
+
return user;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Cache invalidation
|
|
131
|
+
async function updateUser(id: string, data: Partial<User>) {
|
|
132
|
+
await db.users.update(id, data);
|
|
133
|
+
await redis.del(`user:${id}`);
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Architecture Patterns
|
|
138
|
+
|
|
139
|
+
### Repository Pattern
|
|
140
|
+
Abstract data access from business logic for testability and swappable backends.
|
|
141
|
+
|
|
142
|
+
```typescript
|
|
143
|
+
interface UserRepository {
|
|
144
|
+
findAll(filters?: UserFilters): Promise<User[]>
|
|
145
|
+
findById(id: string): Promise<User | null>
|
|
146
|
+
create(data: CreateUserDto): Promise<User>
|
|
147
|
+
update(id: string, data: UpdateUserDto): Promise<User>
|
|
148
|
+
delete(id: string): Promise<void>
|
|
149
|
+
}
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### Service Layer Pattern
|
|
153
|
+
Separate business logic from data access and HTTP concerns.
|
|
154
|
+
|
|
155
|
+
```typescript
|
|
156
|
+
class UserService {
|
|
157
|
+
constructor(private userRepo: UserRepository) {}
|
|
158
|
+
|
|
159
|
+
async createUser(data: CreateUserDto): Promise<User> {
|
|
160
|
+
// Business logic: validation, enrichment, side effects
|
|
161
|
+
const existing = await this.userRepo.findByEmail(data.email);
|
|
162
|
+
if (existing) throw new ConflictError('Email already registered');
|
|
163
|
+
return this.userRepo.create(data);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### N+1 Query Prevention
|
|
169
|
+
```typescript
|
|
170
|
+
// Bad: N+1 queries
|
|
171
|
+
const posts = await getPosts();
|
|
172
|
+
for (const post of posts) {
|
|
173
|
+
post.author = await getUser(post.author_id); // N queries
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// Good: Batch fetch
|
|
177
|
+
const posts = await getPosts();
|
|
178
|
+
const authorIds = posts.map(p => p.author_id);
|
|
179
|
+
const authors = await getUsers(authorIds); // 1 query
|
|
180
|
+
const authorMap = new Map(authors.map(a => [a.id, a]));
|
|
181
|
+
posts.forEach(post => { post.author = authorMap.get(post.author_id); });
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
## Rate Limiting
|
|
185
|
+
|
|
186
|
+
```typescript
|
|
187
|
+
// Library-based approach
|
|
188
|
+
const limiter = rateLimit({
|
|
189
|
+
windowMs: 60 * 1000, // 1 minute
|
|
190
|
+
max: 100, // 100 requests per window
|
|
191
|
+
keyGenerator: (req) => req.ip,
|
|
192
|
+
handler: (req, res) => {
|
|
193
|
+
res.status(429).json({ error: 'Too many requests' });
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
## Error Handling
|
|
199
|
+
|
|
200
|
+
### Retry with Exponential Backoff
|
|
201
|
+
```typescript
|
|
202
|
+
async function fetchWithRetry<T>(
|
|
203
|
+
fn: () => Promise<T>,
|
|
204
|
+
maxRetries = 3
|
|
205
|
+
): Promise<T> {
|
|
206
|
+
let lastError: Error;
|
|
207
|
+
for (let i = 0; i < maxRetries; i++) {
|
|
208
|
+
try {
|
|
209
|
+
return await fn();
|
|
210
|
+
} catch (error) {
|
|
211
|
+
lastError = error as Error;
|
|
212
|
+
if (i < maxRetries - 1) {
|
|
213
|
+
const delay = Math.pow(2, i) * 1000;
|
|
214
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
throw lastError!;
|
|
219
|
+
}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
### Centralized Error Handler
|
|
223
|
+
```typescript
|
|
224
|
+
class ApiError extends Error {
|
|
225
|
+
constructor(public statusCode: number, message: string, public isOperational = true) {
|
|
226
|
+
super(message);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
function errorHandler(error: unknown, req: Request): Response {
|
|
231
|
+
if (error instanceof ApiError) {
|
|
232
|
+
return json({ error: error.message }, { status: error.statusCode });
|
|
233
|
+
}
|
|
234
|
+
if (error instanceof z.ZodError) {
|
|
235
|
+
return json({ error: 'Validation failed', details: error.errors }, { status: 400 });
|
|
236
|
+
}
|
|
237
|
+
console.error('Unexpected error:', error);
|
|
238
|
+
return json({ error: 'Internal server error' }, { status: 500 });
|
|
239
|
+
}
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
## Role-Based Access Control
|
|
243
|
+
|
|
244
|
+
```typescript
|
|
245
|
+
type Permission = 'read' | 'write' | 'delete' | 'admin';
|
|
246
|
+
|
|
247
|
+
const rolePermissions: Record<string, Permission[]> = {
|
|
248
|
+
admin: ['read', 'write', 'delete', 'admin'],
|
|
249
|
+
moderator: ['read', 'write', 'delete'],
|
|
250
|
+
user: ['read', 'write']
|
|
251
|
+
};
|
|
252
|
+
|
|
253
|
+
function hasPermission(user: { role: string }, permission: Permission): boolean {
|
|
254
|
+
return (rolePermissions[user.role] || []).includes(permission);
|
|
255
|
+
}
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
## Background Jobs and Queues
|
|
259
|
+
|
|
260
|
+
```typescript
|
|
261
|
+
class JobQueue<T> {
|
|
262
|
+
private queue: T[] = [];
|
|
263
|
+
private processing = false;
|
|
264
|
+
|
|
265
|
+
async add(job: T): Promise<void> {
|
|
266
|
+
this.queue.push(job);
|
|
267
|
+
if (!this.processing) this.process();
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
private async process(): Promise<void> {
|
|
271
|
+
this.processing = true;
|
|
272
|
+
while (this.queue.length > 0) {
|
|
273
|
+
const job = this.queue.shift()!;
|
|
274
|
+
try { await this.execute(job); }
|
|
275
|
+
catch (error) { console.error('Job failed:', error); }
|
|
276
|
+
}
|
|
277
|
+
this.processing = false;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
private async execute(job: T): Promise<void> { /* implementation */ }
|
|
281
|
+
}
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
## Observability
|
|
285
|
+
|
|
286
|
+
### Structured Logging
|
|
287
|
+
```typescript
|
|
288
|
+
class Logger {
|
|
289
|
+
log(level: 'info' | 'warn' | 'error', message: string, context?: Record<string, unknown>) {
|
|
290
|
+
console.log(JSON.stringify({
|
|
291
|
+
timestamp: new Date().toISOString(), level, message, ...context
|
|
292
|
+
}));
|
|
293
|
+
}
|
|
294
|
+
info(msg: string, ctx?: Record<string, unknown>) { this.log('info', msg, ctx); }
|
|
295
|
+
warn(msg: string, ctx?: Record<string, unknown>) { this.log('warn', msg, ctx); }
|
|
296
|
+
error(msg: string, err: Error, ctx?: Record<string, unknown>) {
|
|
297
|
+
this.log('error', msg, { ...ctx, error: err.message, stack: err.stack });
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
### Health and Monitoring
|
|
303
|
+
- **Metrics**: Request latency, error rates, queue depths
|
|
304
|
+
- **Tracing**: Distributed tracing with correlation IDs
|
|
305
|
+
- **Health checks**: `/health` and `/ready` endpoints
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: code-review
|
|
3
|
+
context: fork
|
|
4
|
+
description: Automated code review for pull requests using specialized review patterns. Analyzes code for quality, security, performance, and best practices. Use when reviewing code changes, PRs, or doing code audits.
|
|
5
|
+
source: anthropics/claude-code
|
|
6
|
+
license: Apache-2.0
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Code Review
|
|
10
|
+
|
|
11
|
+
> **On Claude Code, prefer the native `/code-review`.** It is a command, not a skill, so it always
|
|
12
|
+
> fires — including headless — and it has grown capabilities this one does not have: effort levels
|
|
13
|
+
> (`low`…`max`), an `ultra` mode that runs a multi-agent review in the cloud, `--comment` to post
|
|
14
|
+
> findings as inline PR comments, and `--fix` to apply them to the working tree. Reach for it first.
|
|
15
|
+
>
|
|
16
|
+
> This surface remains because caddis ships to harnesses that have **no** native equivalent — agy,
|
|
17
|
+
> Codex and Copilot. There it is the only review you get. Do not delete it to tidy up Claude Code.
|
|
18
|
+
>
|
|
19
|
+
> `/caddis:cross-review` is NOT replaced by either. It sends the diff to a **different vendor's**
|
|
20
|
+
> model, which neither this nor the native reviewer can do.
|
|
21
|
+
|
|
22
|
+
## Review Categories
|
|
23
|
+
|
|
24
|
+
### 1. Security Review
|
|
25
|
+
Check for:
|
|
26
|
+
- SQL injection vulnerabilities
|
|
27
|
+
- XSS (Cross-Site Scripting)
|
|
28
|
+
- Command injection
|
|
29
|
+
- Insecure deserialization
|
|
30
|
+
- Hardcoded secrets/credentials
|
|
31
|
+
- Improper authentication/authorization
|
|
32
|
+
- Insecure direct object references
|
|
33
|
+
|
|
34
|
+
### 2. Performance Review
|
|
35
|
+
Check for:
|
|
36
|
+
- N+1 queries
|
|
37
|
+
- Missing database indexes
|
|
38
|
+
- Unnecessary re-renders (React)
|
|
39
|
+
- Memory leaks
|
|
40
|
+
- Blocking operations in async code
|
|
41
|
+
- Missing caching opportunities
|
|
42
|
+
- Large bundle sizes
|
|
43
|
+
|
|
44
|
+
### 3. Code Quality Review
|
|
45
|
+
Check for:
|
|
46
|
+
- Code duplication (DRY violations)
|
|
47
|
+
- Functions doing too much (SRP violations)
|
|
48
|
+
- Deep nesting / complex conditionals
|
|
49
|
+
- Magic numbers/strings
|
|
50
|
+
- Poor naming
|
|
51
|
+
- Missing error handling
|
|
52
|
+
- Incomplete type coverage
|
|
53
|
+
|
|
54
|
+
### 4. Testing Review
|
|
55
|
+
Check for:
|
|
56
|
+
- Missing test coverage for new code
|
|
57
|
+
- Tests that don't test behavior
|
|
58
|
+
- Flaky test patterns
|
|
59
|
+
- Missing edge cases
|
|
60
|
+
- Mocked external dependencies
|
|
61
|
+
|
|
62
|
+
## Review Output Format
|
|
63
|
+
|
|
64
|
+
```markdown
|
|
65
|
+
## Code Review Summary
|
|
66
|
+
|
|
67
|
+
### 🔴 Critical (Must Fix)
|
|
68
|
+
- **[File:Line]** [Issue description]
|
|
69
|
+
- **Why:** [Explanation]
|
|
70
|
+
- **Fix:** [Suggested fix]
|
|
71
|
+
|
|
72
|
+
### 🟡 Suggestions (Should Consider)
|
|
73
|
+
- **[File:Line]** [Issue description]
|
|
74
|
+
- **Why:** [Explanation]
|
|
75
|
+
- **Fix:** [Suggested fix]
|
|
76
|
+
|
|
77
|
+
### 🟢 Nits (Optional)
|
|
78
|
+
- **[File:Line]** [Minor suggestion]
|
|
79
|
+
|
|
80
|
+
### ✅ What's Good
|
|
81
|
+
- [Positive feedback on good patterns]
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Common Patterns to Flag
|
|
85
|
+
|
|
86
|
+
### Security
|
|
87
|
+
```javascript
|
|
88
|
+
// BAD: SQL injection
|
|
89
|
+
const query = `SELECT * FROM users WHERE id = ${userId}`;
|
|
90
|
+
|
|
91
|
+
// GOOD: Parameterized query
|
|
92
|
+
const query = 'SELECT * FROM users WHERE id = $1';
|
|
93
|
+
await db.query(query, [userId]);
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Performance
|
|
97
|
+
```javascript
|
|
98
|
+
// BAD: N+1 query
|
|
99
|
+
users.forEach(async user => {
|
|
100
|
+
const posts = await getPosts(user.id);
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
// GOOD: Batch query
|
|
104
|
+
const userIds = users.map(u => u.id);
|
|
105
|
+
const posts = await getPostsForUsers(userIds);
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Error Handling
|
|
109
|
+
```javascript
|
|
110
|
+
// BAD: Swallowing errors
|
|
111
|
+
try {
|
|
112
|
+
await riskyOperation();
|
|
113
|
+
} catch (e) {}
|
|
114
|
+
|
|
115
|
+
// GOOD: Handle or propagate
|
|
116
|
+
try {
|
|
117
|
+
await riskyOperation();
|
|
118
|
+
} catch (e) {
|
|
119
|
+
logger.error('Operation failed', { error: e });
|
|
120
|
+
throw new AppError('Operation failed', { cause: e });
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Review Checklist
|
|
125
|
+
|
|
126
|
+
- [ ] No hardcoded secrets
|
|
127
|
+
- [ ] Input validation present
|
|
128
|
+
- [ ] Error handling complete
|
|
129
|
+
- [ ] Types/interfaces defined
|
|
130
|
+
- [ ] Tests added for new code
|
|
131
|
+
- [ ] No obvious performance issues
|
|
132
|
+
- [ ] Code is readable and documented
|
|
133
|
+
- [ ] Breaking changes documented
|
|
134
|
+
|
|
135
|
+
## Machine Verdict (automated / headless runs)
|
|
136
|
+
|
|
137
|
+
**Then, as the very last line of your output (nothing after it), emit the machine verdict:**
|
|
138
|
+
`REVIEW: CLEAN` (no blocking issues found across the categories above) or `REVIEW: BLOCKING` (one
|
|
139
|
+
or more blocking issues). Automated runners read only this line; it must exactly match one of
|
|
140
|
+
those two forms.
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: codebase-audit
|
|
3
|
+
context: fork
|
|
4
|
+
description: Systematic codebase audit methodology for unfamiliar codebases before architecture or implementation work. Use for new codebase, unfamiliar codebase, pre-implementation audit, codebase review, technical due diligence, or onboarding to an existing project. Produces AUDIT-FINDINGS.md and QUESTIONS.md. Routes to Architect, Planner, or Code Reviewer agents.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Codebase Audit Skill
|
|
8
|
+
|
|
9
|
+
Systematic 6-step audit for entering an unfamiliar codebase before architecture changes, major features, or refactoring. Do not guess patterns — audit first.
|
|
10
|
+
|
|
11
|
+
## 1. When to Apply This Skill
|
|
12
|
+
|
|
13
|
+
**Trigger conditions:**
|
|
14
|
+
- "I'm new to this codebase"
|
|
15
|
+
- "Audit this project before we start building"
|
|
16
|
+
- "I need to understand what's here before changing it"
|
|
17
|
+
- "Pre-implementation review"
|
|
18
|
+
- Any major feature in a codebase you haven't worked in this session
|
|
19
|
+
|
|
20
|
+
**Do not skip the audit** even when the task seems small — hidden coupling causes broken assumptions.
|
|
21
|
+
|
|
22
|
+
## 2. Audit Scope — 20 Areas
|
|
23
|
+
|
|
24
|
+
| # | Area | What to Look For |
|
|
25
|
+
|---|---|---|
|
|
26
|
+
| 1 | **Architecture** | Monolith/microservice/monorepo, layer separation, module boundaries |
|
|
27
|
+
| 2 | **Entry Points** | Main files, router setup, CLI entry, exports index |
|
|
28
|
+
| 3 | **Framework & Runtime** | React version, Next.js, FastAPI, Django, Node version, Python version |
|
|
29
|
+
| 4 | **Dependencies** | `package.json`/`pyproject.toml` — packages, versions, peer deps, outdated |
|
|
30
|
+
| 5 | **Code Quality** | Lint config, formatter, TypeScript strict mode, type coverage |
|
|
31
|
+
| 6 | **Testing** | Test runner, coverage %, which layers are tested, missing tests |
|
|
32
|
+
| 7 | **Security Posture** | Auth implementation, env var usage, hardcoded secrets, CORS |
|
|
33
|
+
| 8 | **Documentation** | README completeness, inline comments, API docs |
|
|
34
|
+
| 9 | **Performance Signals** | Caching, lazy loading, database indexes, N+1 queries |
|
|
35
|
+
| 10 | **DevOps / CI** | Build commands, CI config, deployment method, Dockerfile |
|
|
36
|
+
| 11 | **API Design** | REST conventions, versioning, error response format, input validation |
|
|
37
|
+
| 12 | **Data Layer** | ORM vs raw SQL, migration strategy, schema location |
|
|
38
|
+
| 13 | **State Management** | Client state (Zustand, Redux, Context), server state (React Query) |
|
|
39
|
+
| 14 | **Error Handling** | Global error boundary, unhandled promise rejections, logging |
|
|
40
|
+
| 15 | **Environment Config** | `.env.example`, `pydantic-settings`, config validation on startup |
|
|
41
|
+
| 16 | **Dead Code / Tech Debt** | TODOs, commented-out code, unused packages, deprecated calls |
|
|
42
|
+
| 17 | **Naming Conventions** | Consistent file/folder naming, component vs module patterns |
|
|
43
|
+
| 18 | **Shared Libraries** | Utility functions, hooks, services — shared vs duplicated |
|
|
44
|
+
| 19 | **Accessibility** | ARIA usage, keyboard nav, color contrast, skip-nav |
|
|
45
|
+
| 20 | **Observability** | Logging format, tracing, health endpoints, error reporting |
|
|
46
|
+
|
|
47
|
+
## 3. 6-Step Audit Method
|
|
48
|
+
|
|
49
|
+
### Step 1 — Map the Repository
|
|
50
|
+
```
|
|
51
|
+
actions:
|
|
52
|
+
- List top-level directories and understand intent of each
|
|
53
|
+
- Identify the project type (app, library, monorepo, microservice)
|
|
54
|
+
- Read README.md fully — note setup instructions, known issues
|
|
55
|
+
- Check for CONTRIBUTING.md, ARCHITECTURE.md, or ADR folders
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Step 2 — Find Entry Points
|
|
59
|
+
```
|
|
60
|
+
actions:
|
|
61
|
+
- Identify main application entry (main.py, app.py, src/index.ts, src/main.ts)
|
|
62
|
+
- Trace the request lifecycle from entry to response (1 complete path)
|
|
63
|
+
- Identify router/controller/handler layers
|
|
64
|
+
- Find test entry (jest.config.ts, vite.config.ts, pytest.ini/pyproject.toml)
|
|
65
|
+
- Find build entry (package.json scripts, Makefile, Dockerfile)
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Step 3 — Dependencies and Versions
|
|
69
|
+
```
|
|
70
|
+
actions:
|
|
71
|
+
- Read package.json / pyproject.toml — note major dependencies and versions
|
|
72
|
+
- Check for deprecated or significantly outdated packages
|
|
73
|
+
- Identify direct vs transitive dependency conflicts
|
|
74
|
+
- Note peer dependency version mismatches
|
|
75
|
+
- Check for security advisories (mental note or npm audit / pip-audit)
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Step 4 — Audit by Severity
|
|
79
|
+
```
|
|
80
|
+
For each area in §2, assign:
|
|
81
|
+
🔴 CRITICAL — Security vulnerability, data loss risk, broken functionality
|
|
82
|
+
🟡 WARNING — Performance issue, tech debt, missing validation
|
|
83
|
+
🟢 NOTE — Style inconsistency, minor improvement opportunity
|
|
84
|
+
⚪ OK — Meets expectations, no action needed
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Step 5 — Compile Questions
|
|
88
|
+
```
|
|
89
|
+
For every assumption or ambiguity discovered:
|
|
90
|
+
- Business context: "Why does X exist? Is it still needed?"
|
|
91
|
+
- Architecture: "Is this pattern intentional or historical?"
|
|
92
|
+
- Implementation: "Is there a newer pattern preferred for this?"
|
|
93
|
+
- Scope: "Which areas are off-limits for this change?"
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Step 6 — Write Deliverables
|
|
97
|
+
Write two files in the project root (or `docs/` if it exists):
|
|
98
|
+
- `AUDIT-FINDINGS.md`
|
|
99
|
+
- `QUESTIONS.md`
|
|
100
|
+
|
|
101
|
+
## 4. Output Templates
|
|
102
|
+
|
|
103
|
+
### `AUDIT-FINDINGS.md`
|
|
104
|
+
```markdown
|
|
105
|
+
# Codebase Audit Findings
|
|
106
|
+
|
|
107
|
+
**Project**: [name]
|
|
108
|
+
**Audited**: [date]
|
|
109
|
+
**Scope**: [what was covered]
|
|
110
|
+
|
|
111
|
+
## Summary
|
|
112
|
+
[2–3 sentence high-level assessment]
|
|
113
|
+
|
|
114
|
+
## Critical Findings 🔴
|
|
115
|
+
|
|
116
|
+
### CRIT-001: [Title]
|
|
117
|
+
**File**: `path/to/file.ts` (line N)
|
|
118
|
+
**Issue**: [What is wrong and why]
|
|
119
|
+
**Risk**: [What can go wrong]
|
|
120
|
+
**Recommendation**: [Specific fix]
|
|
121
|
+
|
|
122
|
+
## Warnings 🟡
|
|
123
|
+
|
|
124
|
+
### WARN-001: [Title]
|
|
125
|
+
**File**: `path/to/file.py`
|
|
126
|
+
**Issue**: [What needs attention]
|
|
127
|
+
**Recommendation**: [Specific improvement]
|
|
128
|
+
|
|
129
|
+
## Notes 🟢
|
|
130
|
+
|
|
131
|
+
- [Minor observations, style, preferences]
|
|
132
|
+
|
|
133
|
+
## Architecture Overview
|
|
134
|
+
[Brief description of what was found — layers, patterns, notable design decisions]
|
|
135
|
+
|
|
136
|
+
## Scope for Current Task
|
|
137
|
+
Based on the requested change, these areas are in scope: …
|
|
138
|
+
These areas should NOT be touched: …
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### `QUESTIONS.md`
|
|
142
|
+
```markdown
|
|
143
|
+
# Pre-Implementation Questions
|
|
144
|
+
|
|
145
|
+
**For**: [next agent or human reviewer]
|
|
146
|
+
**Context**: [what we're about to build]
|
|
147
|
+
|
|
148
|
+
## Blocking Questions (must answer before code changes)
|
|
149
|
+
|
|
150
|
+
### Q1: [Question]
|
|
151
|
+
**Context**: [why this matters]
|
|
152
|
+
**Impact if wrong**: [what breaks]
|
|
153
|
+
|
|
154
|
+
### Q2: [Question]
|
|
155
|
+
|
|
156
|
+
## Advisory Questions (inform decisions but don't block)
|
|
157
|
+
|
|
158
|
+
### Q3: [Question]
|
|
159
|
+
|
|
160
|
+
## Assumptions Made
|
|
161
|
+
If we proceed without answers, these assumptions apply:
|
|
162
|
+
- [assumption 1]
|
|
163
|
+
- [assumption 2]
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## 5. Severity Tags
|
|
167
|
+
|
|
168
|
+
| Tag | Code | Meaning |
|
|
169
|
+
|---|---|---|
|
|
170
|
+
| 🔴 Critical | `CRIT-NNN` | Fix before any changes proceed |
|
|
171
|
+
| 🟡 Warning | `WARN-NNN` | Address in current or next sprint |
|
|
172
|
+
| 🟢 Note | `NOTE-NNN` | Backlog item or stylistic observation |
|
|
173
|
+
| ⚪ OK | — | No action needed |
|
|
174
|
+
|
|
175
|
+
## 6. Handoff Guidance
|
|
176
|
+
|
|
177
|
+
After completing the audit:
|
|
178
|
+
|
|
179
|
+
| Finding Type | Route To |
|
|
180
|
+
|---|---|
|
|
181
|
+
| Architecture redesign needed | `@Architect` — provide `AUDIT-FINDINGS.md` |
|
|
182
|
+
| Implementation can proceed with caution | `@Planner` — provide findings + questions |
|
|
183
|
+
| Major quality/security issues | `@Code-Reviewer` + `@Security-Analyst` |
|
|
184
|
+
| Only minor notes, clear path | Proceed directly with `@Implement` or `@Anchor` |
|
|
185
|
+
|
|
186
|
+
### Prompt template for handoff:
|
|
187
|
+
```
|
|
188
|
+
@[Agent]: I've completed a codebase audit.
|
|
189
|
+
Findings: [link or inline AUDIT-FINDINGS.md]
|
|
190
|
+
Blocking questions: [key Q from QUESTIONS.md]
|
|
191
|
+
The task is: [original task description]
|
|
192
|
+
Please [design solution / create plan / review / implement] with these findings in mind.
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## 7. Checklist
|
|
196
|
+
|
|
197
|
+
- [ ] README.md read fully
|
|
198
|
+
- [ ] Entry point traced end-to-end (one complete request/render cycle)
|
|
199
|
+
- [ ] All 20 audit areas assessed (even if just ⚪ OK)
|
|
200
|
+
- [ ] Critical findings have file + line citation
|
|
201
|
+
- [ ] `AUDIT-FINDINGS.md` written to disk
|
|
202
|
+
- [ ] `QUESTIONS.md` written to disk
|
|
203
|
+
- [ ] Blocking questions identified separately
|
|
204
|
+
- [ ] Agent handoff prompt prepared
|