@jakkrichm/create-nexus-devflow 2.0.0
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/LICENSE +21 -0
- package/README.md +82 -0
- package/bin/create-nexus-devflow.js +275 -0
- package/lib/update.js +379 -0
- package/package.json +53 -0
- package/template/.agents/skills/00-discover/SKILL.md +170 -0
- package/template/.agents/skills/10-define/SKILL.md +170 -0
- package/template/.agents/skills/20-spec/SKILL.md +156 -0
- package/template/.agents/skills/30-plan/SKILL.md +221 -0
- package/template/.agents/skills/40-implement/SKILL.md +166 -0
- package/template/.agents/skills/50-verify/SKILL.md +188 -0
- package/template/.agents/skills/60-report/SKILL.md +183 -0
- package/template/.agents/skills/70-release/SKILL.md +155 -0
- package/template/.agents/skills/9arm-skills/README.md +51 -0
- package/template/.agents/skills/9arm-skills/debug-mantra/SKILL.md +86 -0
- package/template/.agents/skills/9arm-skills/management-talk/SKILL.md +79 -0
- package/template/.agents/skills/9arm-skills/post-mortem/SKILL.md +71 -0
- package/template/.agents/skills/9arm-skills/scrutinize/SKILL.md +72 -0
- package/template/.agents/skills/agent/SKILL.md +165 -0
- package/template/.agents/skills/api-and-interface-design/SKILL.md +294 -0
- package/template/.agents/skills/app-builder/SKILL.md +75 -0
- package/template/.agents/skills/app-builder/agent-coordination.md +71 -0
- package/template/.agents/skills/app-builder/feature-building.md +53 -0
- package/template/.agents/skills/app-builder/project-detection.md +34 -0
- package/template/.agents/skills/app-builder/scaffolding.md +118 -0
- package/template/.agents/skills/app-builder/tech-stack.md +40 -0
- package/template/.agents/skills/app-builder/templates/SKILL.md +39 -0
- package/template/.agents/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
- package/template/.agents/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
- package/template/.agents/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
- package/template/.agents/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
- package/template/.agents/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
- package/template/.agents/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
- package/template/.agents/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
- package/template/.agents/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +122 -0
- package/template/.agents/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +122 -0
- package/template/.agents/skills/app-builder/templates/nextjs-static/TEMPLATE.md +169 -0
- package/template/.agents/skills/app-builder/templates/nuxt-app/TEMPLATE.md +134 -0
- package/template/.agents/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
- package/template/.agents/skills/app-builder/templates/react-native-app/TEMPLATE.md +119 -0
- package/template/.agents/skills/architecture/SKILL.md +55 -0
- package/template/.agents/skills/architecture/context-discovery.md +43 -0
- package/template/.agents/skills/architecture/examples.md +94 -0
- package/template/.agents/skills/architecture/pattern-selection.md +68 -0
- package/template/.agents/skills/architecture/patterns-reference.md +50 -0
- package/template/.agents/skills/architecture/trade-off-analysis.md +77 -0
- package/template/.agents/skills/bash-linux/SKILL.md +199 -0
- package/template/.agents/skills/behavioral-modes/SKILL.md +242 -0
- package/template/.agents/skills/brainstorm/SKILL.md +168 -0
- package/template/.agents/skills/browser-testing-with-devtools/SKILL.md +302 -0
- package/template/.agents/skills/changelog/SKILL.md +109 -0
- package/template/.agents/skills/check-for-updates/SKILL.md +117 -0
- package/template/.agents/skills/ci-cd-and-automation/SKILL.md +390 -0
- package/template/.agents/skills/code-review-and-quality/SKILL.md +392 -0
- package/template/.agents/skills/code-simplification/SKILL.md +331 -0
- package/template/.agents/skills/codebase-design/DEEPENING.md +24 -0
- package/template/.agents/skills/codebase-design/DESIGN-IT-TWICE.md +28 -0
- package/template/.agents/skills/codebase-design/SKILL.md +58 -0
- package/template/.agents/skills/commit/SKILL.md +63 -0
- package/template/.agents/skills/competitor-analysis/SKILL.md +66 -0
- package/template/.agents/skills/context-engineering/SKILL.md +290 -0
- package/template/.agents/skills/database-design/SKILL.md +52 -0
- package/template/.agents/skills/database-design/database-selection.md +43 -0
- package/template/.agents/skills/database-design/indexing.md +39 -0
- package/template/.agents/skills/database-design/migrations.md +48 -0
- package/template/.agents/skills/database-design/optimization.md +36 -0
- package/template/.agents/skills/database-design/orm-selection.md +30 -0
- package/template/.agents/skills/database-design/schema-design.md +56 -0
- package/template/.agents/skills/database-design/scripts/schema_validator.py +172 -0
- package/template/.agents/skills/debug/SKILL.md +131 -0
- package/template/.agents/skills/debugging-and-error-recovery/SKILL.md +298 -0
- package/template/.agents/skills/deploy/SKILL.md +91 -0
- package/template/.agents/skills/deployment-procedures/SKILL.md +241 -0
- package/template/.agents/skills/deprecation-and-migration/SKILL.md +206 -0
- package/template/.agents/skills/devflow/SKILL.md +89 -0
- package/template/.agents/skills/devflow-concept-intake/SKILL.md +150 -0
- package/template/.agents/skills/devflow-concept-intake/agents/openai.yaml +4 -0
- package/template/.agents/skills/devflow-concept-intake/references/adoption-proposal-template.md +60 -0
- package/template/.agents/skills/devflow-concept-intake/references/concept-report-template.md +47 -0
- package/template/.agents/skills/devflow-concept-intake/references/upstream-tracking-template.md +51 -0
- package/template/.agents/skills/devflow-wiki/SKILL.md +75 -0
- package/template/.agents/skills/diagnosing-bugs/SKILL.md +93 -0
- package/template/.agents/skills/documentation-and-adrs/SKILL.md +278 -0
- package/template/.agents/skills/domain-modeling/ADR-FORMAT.md +47 -0
- package/template/.agents/skills/domain-modeling/CONTEXT-FORMAT.md +60 -0
- package/template/.agents/skills/domain-modeling/SKILL.md +74 -0
- package/template/.agents/skills/english-to-thai-translator/SKILL.md +125 -0
- package/template/.agents/skills/followup/SKILL.md +83 -0
- package/template/.agents/skills/frontend-ui-engineering/SKILL.md +326 -0
- package/template/.agents/skills/frontend-ui-engineering/accessibility-checklist.md +159 -0
- package/template/.agents/skills/git-workflow-and-versioning/SKILL.md +300 -0
- package/template/.agents/skills/goal/SKILL.md +148 -0
- package/template/.agents/skills/handoff/SKILL.md +46 -0
- package/template/.agents/skills/help/SKILL.md +253 -0
- package/template/.agents/skills/human-review-decisions/SKILL.md +74 -0
- package/template/.agents/skills/i18n-localization/SKILL.md +154 -0
- package/template/.agents/skills/i18n-localization/scripts/i18n_checker.py +241 -0
- package/template/.agents/skills/idea-refine/SKILL.md +178 -0
- package/template/.agents/skills/idea-refine/examples.md +238 -0
- package/template/.agents/skills/idea-refine/frameworks.md +99 -0
- package/template/.agents/skills/idea-refine/refinement-criteria.md +113 -0
- package/template/.agents/skills/idea-refine/scripts/idea-refine.sh +15 -0
- package/template/.agents/skills/incremental-implementation/SKILL.md +248 -0
- package/template/.agents/skills/insight/SKILL.md +131 -0
- package/template/.agents/skills/insight-capture/SKILL.md +84 -0
- package/template/.agents/skills/intelligent-routing/SKILL.md +176 -0
- package/template/.agents/skills/issue-triage/SKILL.md +115 -0
- package/template/.agents/skills/lint-and-validate/SKILL.md +45 -0
- package/template/.agents/skills/lint-and-validate/scripts/lint_runner.py +184 -0
- package/template/.agents/skills/lint-and-validate/scripts/type_coverage.py +173 -0
- package/template/.agents/skills/mcp-builder/SKILL.md +176 -0
- package/template/.agents/skills/md2html/SKILL.md +154 -0
- package/template/.agents/skills/md2html/components.md +505 -0
- package/template/.agents/skills/md2html/template.html +1152 -0
- package/template/.agents/skills/merge/SKILL.md +76 -0
- package/template/.agents/skills/mobile-design/SKILL.md +394 -0
- package/template/.agents/skills/mobile-design/decision-trees.md +516 -0
- package/template/.agents/skills/mobile-design/mobile-backend.md +491 -0
- package/template/.agents/skills/mobile-design/mobile-color-system.md +420 -0
- package/template/.agents/skills/mobile-design/mobile-debugging.md +122 -0
- package/template/.agents/skills/mobile-design/mobile-design-thinking.md +357 -0
- package/template/.agents/skills/mobile-design/mobile-navigation.md +458 -0
- package/template/.agents/skills/mobile-design/mobile-performance.md +767 -0
- package/template/.agents/skills/mobile-design/mobile-testing.md +356 -0
- package/template/.agents/skills/mobile-design/mobile-typography.md +433 -0
- package/template/.agents/skills/mobile-design/platform-android.md +666 -0
- package/template/.agents/skills/mobile-design/platform-ios.md +561 -0
- package/template/.agents/skills/mobile-design/scripts/mobile_audit.py +670 -0
- package/template/.agents/skills/mobile-design/touch-psychology.md +537 -0
- package/template/.agents/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +312 -0
- package/template/.agents/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +240 -0
- package/template/.agents/skills/nextjs-react-expert/3-server-server-side-performance.md +490 -0
- package/template/.agents/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +264 -0
- package/template/.agents/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +581 -0
- package/template/.agents/skills/nextjs-react-expert/6-rendering-rendering-performance.md +432 -0
- package/template/.agents/skills/nextjs-react-expert/7-js-javascript-performance.md +684 -0
- package/template/.agents/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +150 -0
- package/template/.agents/skills/nextjs-react-expert/SKILL.md +286 -0
- package/template/.agents/skills/nextjs-react-expert/scripts/convert_rules.py +222 -0
- package/template/.agents/skills/nextjs-react-expert/scripts/react_performance_checker.py +252 -0
- package/template/.agents/skills/nodejs-best-practices/SKILL.md +333 -0
- package/template/.agents/skills/obsidian-bases/SKILL.md +506 -0
- package/template/.agents/skills/obsidian-bases/references/FUNCTIONS_REFERENCE.md +173 -0
- package/template/.agents/skills/obsidian-cli/SKILL.md +115 -0
- package/template/.agents/skills/obsidian-clipper-template-creator/SKILL.md +73 -0
- package/template/.agents/skills/obsidian-clipper-template-creator/assets/clipping-template.json +51 -0
- package/template/.agents/skills/obsidian-clipper-template-creator/assets/recipe-template.json +48 -0
- package/template/.agents/skills/obsidian-clipper-template-creator/references/analysis-workflow.md +79 -0
- package/template/.agents/skills/obsidian-clipper-template-creator/references/bases-workflow.md +44 -0
- package/template/.agents/skills/obsidian-clipper-template-creator/references/filters.md +51 -0
- package/template/.agents/skills/obsidian-clipper-template-creator/references/json-schema.md +77 -0
- package/template/.agents/skills/obsidian-clipper-template-creator/references/logic.md +67 -0
- package/template/.agents/skills/obsidian-clipper-template-creator/references/variables.md +64 -0
- package/template/.agents/skills/obsidian-markdown/SKILL.md +205 -0
- package/template/.agents/skills/obsidian-markdown/references/CALLOUTS.md +58 -0
- package/template/.agents/skills/obsidian-markdown/references/EMBEDS.md +63 -0
- package/template/.agents/skills/obsidian-markdown/references/PROPERTIES.md +61 -0
- package/template/.agents/skills/package-json-generator/SKILL.md +60 -0
- package/template/.agents/skills/package-json-generator/scripts/generate.js +120 -0
- package/template/.agents/skills/package-json-generator/scripts/run.sh +19 -0
- package/template/.agents/skills/parallel-agents/SKILL.md +144 -0
- package/template/.agents/skills/performance-optimization/SKILL.md +299 -0
- package/template/.agents/skills/performance-optimization/performance-checklist.md +113 -0
- package/template/.agents/skills/planning-and-task-breakdown/SKILL.md +239 -0
- package/template/.agents/skills/powershell-windows/SKILL.md +167 -0
- package/template/.agents/skills/pr/SKILL.md +93 -0
- package/template/.agents/skills/pr-review/SKILL.md +143 -0
- package/template/.agents/skills/pr-review-analysis/SKILL.md +89 -0
- package/template/.agents/skills/prd/SKILL.md +127 -0
- package/template/.agents/skills/preview/SKILL.md +121 -0
- package/template/.agents/skills/preview-local-check/SKILL.md +59 -0
- package/template/.agents/skills/prompt-addons/SKILL.md +99 -0
- package/template/.agents/skills/prototype/SKILL.md +44 -0
- package/template/.agents/skills/prp-dev-fastapi/SKILL.md +114 -0
- package/template/.agents/skills/prp-dev-multiplatform/SKILL.md +36 -0
- package/template/.agents/skills/prp-dev-odoo/SKILL.md +71 -0
- package/template/.agents/skills/prp-dev-php/SKILL.md +63 -0
- package/template/.agents/skills/prp-sa-ba/SKILL.md +52 -0
- package/template/.agents/skills/python-patterns/SKILL.md +441 -0
- package/template/.agents/skills/red-team-tactics/SKILL.md +199 -0
- package/template/.agents/skills/release-git-operations/SKILL.md +97 -0
- package/template/.agents/skills/research/SKILL.md +143 -0
- package/template/.agents/skills/review/SKILL.md +55 -0
- package/template/.agents/skills/review-followup-routing/SKILL.md +98 -0
- package/template/.agents/skills/roadmap-strategy/SKILL.md +97 -0
- package/template/.agents/skills/security-and-hardening/SKILL.md +349 -0
- package/template/.agents/skills/security-and-hardening/security-checklist.md +134 -0
- package/template/.agents/skills/security-review/SKILL.md +166 -0
- package/template/.agents/skills/seo-fundamentals/SKILL.md +129 -0
- package/template/.agents/skills/seo-fundamentals/scripts/seo_checker.py +219 -0
- package/template/.agents/skills/server-management/SKILL.md +161 -0
- package/template/.agents/skills/shipping-and-launch/SKILL.md +311 -0
- package/template/.agents/skills/silent-failure-audit/SKILL.md +73 -0
- package/template/.agents/skills/simplify/SKILL.md +79 -0
- package/template/.agents/skills/skill-development/SKILL.md +86 -0
- package/template/.agents/skills/spec-driven-development/SKILL.md +207 -0
- package/template/.agents/skills/spec-orchestration/SKILL.md +91 -0
- package/template/.agents/skills/specialist-agent-routing/SKILL.md +107 -0
- package/template/.agents/skills/tailwind-patterns/SKILL.md +269 -0
- package/template/.agents/skills/test/SKILL.md +82 -0
- package/template/.agents/skills/test-driven-development/SKILL.md +422 -0
- package/template/.agents/skills/test-driven-development/testing-patterns.md +236 -0
- package/template/.agents/skills/test-execution-and-coverage/SKILL.md +56 -0
- package/template/.agents/skills/type-design/SKILL.md +84 -0
- package/template/.agents/skills/ui-ux-pro-max/SKILL.md +75 -0
- package/template/.agents/skills/using-agent-skills/SKILL.md +171 -0
- package/template/.agents/skills/verification-orchestration/SKILL.md +68 -0
- package/template/.agents/skills/vulnerability-scanner/SKILL.md +276 -0
- package/template/.agents/skills/vulnerability-scanner/checklists.md +121 -0
- package/template/.agents/skills/vulnerability-scanner/scripts/security_scan.py +458 -0
- package/template/.agents/skills/wiki/SKILL.md +149 -0
- package/template/.agents/skills/workflow-documentation-sync/SKILL.md +87 -0
- package/template/.agents/skills/writing-great-skills/SKILL.md +65 -0
- package/template/.claude/skills/00-discover/SKILL.md +170 -0
- package/template/.claude/skills/10-define/SKILL.md +170 -0
- package/template/.claude/skills/20-spec/SKILL.md +156 -0
- package/template/.claude/skills/30-plan/SKILL.md +221 -0
- package/template/.claude/skills/40-implement/SKILL.md +166 -0
- package/template/.claude/skills/50-verify/SKILL.md +188 -0
- package/template/.claude/skills/60-report/SKILL.md +183 -0
- package/template/.claude/skills/70-release/SKILL.md +155 -0
- package/template/.claude/skills/9arm-skills/README.md +51 -0
- package/template/.claude/skills/9arm-skills/debug-mantra/SKILL.md +86 -0
- package/template/.claude/skills/9arm-skills/management-talk/SKILL.md +79 -0
- package/template/.claude/skills/9arm-skills/post-mortem/SKILL.md +71 -0
- package/template/.claude/skills/9arm-skills/scrutinize/SKILL.md +72 -0
- package/template/.claude/skills/agent/SKILL.md +165 -0
- package/template/.claude/skills/api-and-interface-design/SKILL.md +294 -0
- package/template/.claude/skills/app-builder/SKILL.md +75 -0
- package/template/.claude/skills/app-builder/agent-coordination.md +71 -0
- package/template/.claude/skills/app-builder/feature-building.md +53 -0
- package/template/.claude/skills/app-builder/project-detection.md +34 -0
- package/template/.claude/skills/app-builder/scaffolding.md +118 -0
- package/template/.claude/skills/app-builder/tech-stack.md +40 -0
- package/template/.claude/skills/app-builder/templates/SKILL.md +39 -0
- package/template/.claude/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
- package/template/.claude/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
- package/template/.claude/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
- package/template/.claude/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
- package/template/.claude/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
- package/template/.claude/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
- package/template/.claude/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
- package/template/.claude/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +122 -0
- package/template/.claude/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +122 -0
- package/template/.claude/skills/app-builder/templates/nextjs-static/TEMPLATE.md +169 -0
- package/template/.claude/skills/app-builder/templates/nuxt-app/TEMPLATE.md +134 -0
- package/template/.claude/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
- package/template/.claude/skills/app-builder/templates/react-native-app/TEMPLATE.md +119 -0
- package/template/.claude/skills/architecture/SKILL.md +55 -0
- package/template/.claude/skills/architecture/context-discovery.md +43 -0
- package/template/.claude/skills/architecture/examples.md +94 -0
- package/template/.claude/skills/architecture/pattern-selection.md +68 -0
- package/template/.claude/skills/architecture/patterns-reference.md +50 -0
- package/template/.claude/skills/architecture/trade-off-analysis.md +77 -0
- package/template/.claude/skills/bash-linux/SKILL.md +199 -0
- package/template/.claude/skills/behavioral-modes/SKILL.md +242 -0
- package/template/.claude/skills/brainstorm/SKILL.md +168 -0
- package/template/.claude/skills/browser-testing-with-devtools/SKILL.md +302 -0
- package/template/.claude/skills/changelog/SKILL.md +109 -0
- package/template/.claude/skills/check-for-updates/SKILL.md +117 -0
- package/template/.claude/skills/ci-cd-and-automation/SKILL.md +390 -0
- package/template/.claude/skills/code-review-and-quality/SKILL.md +392 -0
- package/template/.claude/skills/code-simplification/SKILL.md +331 -0
- package/template/.claude/skills/codebase-design/DEEPENING.md +24 -0
- package/template/.claude/skills/codebase-design/DESIGN-IT-TWICE.md +28 -0
- package/template/.claude/skills/codebase-design/SKILL.md +58 -0
- package/template/.claude/skills/commit/SKILL.md +63 -0
- package/template/.claude/skills/competitor-analysis/SKILL.md +66 -0
- package/template/.claude/skills/context-engineering/SKILL.md +290 -0
- package/template/.claude/skills/database-design/SKILL.md +52 -0
- package/template/.claude/skills/database-design/database-selection.md +43 -0
- package/template/.claude/skills/database-design/indexing.md +39 -0
- package/template/.claude/skills/database-design/migrations.md +48 -0
- package/template/.claude/skills/database-design/optimization.md +36 -0
- package/template/.claude/skills/database-design/orm-selection.md +30 -0
- package/template/.claude/skills/database-design/schema-design.md +56 -0
- package/template/.claude/skills/database-design/scripts/schema_validator.py +172 -0
- package/template/.claude/skills/debug/SKILL.md +131 -0
- package/template/.claude/skills/debugging-and-error-recovery/SKILL.md +298 -0
- package/template/.claude/skills/deploy/SKILL.md +91 -0
- package/template/.claude/skills/deployment-procedures/SKILL.md +241 -0
- package/template/.claude/skills/deprecation-and-migration/SKILL.md +206 -0
- package/template/.claude/skills/devflow/SKILL.md +89 -0
- package/template/.claude/skills/devflow-concept-intake/SKILL.md +150 -0
- package/template/.claude/skills/devflow-concept-intake/agents/openai.yaml +4 -0
- package/template/.claude/skills/devflow-concept-intake/references/adoption-proposal-template.md +60 -0
- package/template/.claude/skills/devflow-concept-intake/references/concept-report-template.md +47 -0
- package/template/.claude/skills/devflow-concept-intake/references/upstream-tracking-template.md +51 -0
- package/template/.claude/skills/devflow-wiki/SKILL.md +75 -0
- package/template/.claude/skills/diagnosing-bugs/SKILL.md +93 -0
- package/template/.claude/skills/documentation-and-adrs/SKILL.md +278 -0
- package/template/.claude/skills/domain-modeling/ADR-FORMAT.md +47 -0
- package/template/.claude/skills/domain-modeling/CONTEXT-FORMAT.md +60 -0
- package/template/.claude/skills/domain-modeling/SKILL.md +74 -0
- package/template/.claude/skills/english-to-thai-translator/SKILL.md +125 -0
- package/template/.claude/skills/followup/SKILL.md +83 -0
- package/template/.claude/skills/frontend-ui-engineering/SKILL.md +326 -0
- package/template/.claude/skills/frontend-ui-engineering/accessibility-checklist.md +159 -0
- package/template/.claude/skills/git-workflow-and-versioning/SKILL.md +300 -0
- package/template/.claude/skills/goal/SKILL.md +148 -0
- package/template/.claude/skills/handoff/SKILL.md +46 -0
- package/template/.claude/skills/help/SKILL.md +253 -0
- package/template/.claude/skills/human-review-decisions/SKILL.md +74 -0
- package/template/.claude/skills/i18n-localization/SKILL.md +154 -0
- package/template/.claude/skills/i18n-localization/scripts/i18n_checker.py +241 -0
- package/template/.claude/skills/idea-refine/SKILL.md +178 -0
- package/template/.claude/skills/idea-refine/examples.md +238 -0
- package/template/.claude/skills/idea-refine/frameworks.md +99 -0
- package/template/.claude/skills/idea-refine/refinement-criteria.md +113 -0
- package/template/.claude/skills/idea-refine/scripts/idea-refine.sh +15 -0
- package/template/.claude/skills/incremental-implementation/SKILL.md +248 -0
- package/template/.claude/skills/insight/SKILL.md +131 -0
- package/template/.claude/skills/insight-capture/SKILL.md +84 -0
- package/template/.claude/skills/intelligent-routing/SKILL.md +176 -0
- package/template/.claude/skills/issue-triage/SKILL.md +115 -0
- package/template/.claude/skills/lint-and-validate/SKILL.md +45 -0
- package/template/.claude/skills/lint-and-validate/scripts/lint_runner.py +184 -0
- package/template/.claude/skills/lint-and-validate/scripts/type_coverage.py +173 -0
- package/template/.claude/skills/mcp-builder/SKILL.md +176 -0
- package/template/.claude/skills/md2html/SKILL.md +154 -0
- package/template/.claude/skills/md2html/components.md +505 -0
- package/template/.claude/skills/md2html/template.html +1152 -0
- package/template/.claude/skills/merge/SKILL.md +76 -0
- package/template/.claude/skills/mobile-design/SKILL.md +394 -0
- package/template/.claude/skills/mobile-design/decision-trees.md +516 -0
- package/template/.claude/skills/mobile-design/mobile-backend.md +491 -0
- package/template/.claude/skills/mobile-design/mobile-color-system.md +420 -0
- package/template/.claude/skills/mobile-design/mobile-debugging.md +122 -0
- package/template/.claude/skills/mobile-design/mobile-design-thinking.md +357 -0
- package/template/.claude/skills/mobile-design/mobile-navigation.md +458 -0
- package/template/.claude/skills/mobile-design/mobile-performance.md +767 -0
- package/template/.claude/skills/mobile-design/mobile-testing.md +356 -0
- package/template/.claude/skills/mobile-design/mobile-typography.md +433 -0
- package/template/.claude/skills/mobile-design/platform-android.md +666 -0
- package/template/.claude/skills/mobile-design/platform-ios.md +561 -0
- package/template/.claude/skills/mobile-design/scripts/mobile_audit.py +670 -0
- package/template/.claude/skills/mobile-design/touch-psychology.md +537 -0
- package/template/.claude/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +312 -0
- package/template/.claude/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +240 -0
- package/template/.claude/skills/nextjs-react-expert/3-server-server-side-performance.md +490 -0
- package/template/.claude/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +264 -0
- package/template/.claude/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +581 -0
- package/template/.claude/skills/nextjs-react-expert/6-rendering-rendering-performance.md +432 -0
- package/template/.claude/skills/nextjs-react-expert/7-js-javascript-performance.md +684 -0
- package/template/.claude/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +150 -0
- package/template/.claude/skills/nextjs-react-expert/SKILL.md +286 -0
- package/template/.claude/skills/nextjs-react-expert/scripts/convert_rules.py +222 -0
- package/template/.claude/skills/nextjs-react-expert/scripts/react_performance_checker.py +252 -0
- package/template/.claude/skills/nodejs-best-practices/SKILL.md +333 -0
- package/template/.claude/skills/obsidian-bases/SKILL.md +506 -0
- package/template/.claude/skills/obsidian-bases/references/FUNCTIONS_REFERENCE.md +173 -0
- package/template/.claude/skills/obsidian-cli/SKILL.md +115 -0
- package/template/.claude/skills/obsidian-clipper-template-creator/SKILL.md +73 -0
- package/template/.claude/skills/obsidian-clipper-template-creator/assets/clipping-template.json +51 -0
- package/template/.claude/skills/obsidian-clipper-template-creator/assets/recipe-template.json +48 -0
- package/template/.claude/skills/obsidian-clipper-template-creator/references/analysis-workflow.md +79 -0
- package/template/.claude/skills/obsidian-clipper-template-creator/references/bases-workflow.md +44 -0
- package/template/.claude/skills/obsidian-clipper-template-creator/references/filters.md +51 -0
- package/template/.claude/skills/obsidian-clipper-template-creator/references/json-schema.md +77 -0
- package/template/.claude/skills/obsidian-clipper-template-creator/references/logic.md +67 -0
- package/template/.claude/skills/obsidian-clipper-template-creator/references/variables.md +64 -0
- package/template/.claude/skills/obsidian-markdown/SKILL.md +205 -0
- package/template/.claude/skills/obsidian-markdown/references/CALLOUTS.md +58 -0
- package/template/.claude/skills/obsidian-markdown/references/EMBEDS.md +63 -0
- package/template/.claude/skills/obsidian-markdown/references/PROPERTIES.md +61 -0
- package/template/.claude/skills/package-json-generator/SKILL.md +60 -0
- package/template/.claude/skills/package-json-generator/scripts/generate.js +120 -0
- package/template/.claude/skills/package-json-generator/scripts/run.sh +19 -0
- package/template/.claude/skills/parallel-agents/SKILL.md +144 -0
- package/template/.claude/skills/performance-optimization/SKILL.md +299 -0
- package/template/.claude/skills/performance-optimization/performance-checklist.md +113 -0
- package/template/.claude/skills/planning-and-task-breakdown/SKILL.md +239 -0
- package/template/.claude/skills/powershell-windows/SKILL.md +167 -0
- package/template/.claude/skills/pr/SKILL.md +93 -0
- package/template/.claude/skills/pr-review/SKILL.md +143 -0
- package/template/.claude/skills/pr-review-analysis/SKILL.md +89 -0
- package/template/.claude/skills/prd/SKILL.md +127 -0
- package/template/.claude/skills/preview/SKILL.md +121 -0
- package/template/.claude/skills/preview-local-check/SKILL.md +59 -0
- package/template/.claude/skills/prompt-addons/SKILL.md +99 -0
- package/template/.claude/skills/prototype/SKILL.md +44 -0
- package/template/.claude/skills/prp-dev-fastapi/SKILL.md +114 -0
- package/template/.claude/skills/prp-dev-multiplatform/SKILL.md +36 -0
- package/template/.claude/skills/prp-dev-odoo/SKILL.md +71 -0
- package/template/.claude/skills/prp-dev-php/SKILL.md +63 -0
- package/template/.claude/skills/prp-sa-ba/SKILL.md +52 -0
- package/template/.claude/skills/python-patterns/SKILL.md +441 -0
- package/template/.claude/skills/red-team-tactics/SKILL.md +199 -0
- package/template/.claude/skills/release-git-operations/SKILL.md +97 -0
- package/template/.claude/skills/research/SKILL.md +143 -0
- package/template/.claude/skills/review/SKILL.md +55 -0
- package/template/.claude/skills/review-followup-routing/SKILL.md +98 -0
- package/template/.claude/skills/roadmap-strategy/SKILL.md +97 -0
- package/template/.claude/skills/security-and-hardening/SKILL.md +349 -0
- package/template/.claude/skills/security-and-hardening/security-checklist.md +134 -0
- package/template/.claude/skills/security-review/SKILL.md +166 -0
- package/template/.claude/skills/seo-fundamentals/SKILL.md +129 -0
- package/template/.claude/skills/seo-fundamentals/scripts/seo_checker.py +219 -0
- package/template/.claude/skills/server-management/SKILL.md +161 -0
- package/template/.claude/skills/shipping-and-launch/SKILL.md +311 -0
- package/template/.claude/skills/silent-failure-audit/SKILL.md +73 -0
- package/template/.claude/skills/simplify/SKILL.md +79 -0
- package/template/.claude/skills/skill-development/SKILL.md +86 -0
- package/template/.claude/skills/spec-driven-development/SKILL.md +207 -0
- package/template/.claude/skills/spec-orchestration/SKILL.md +91 -0
- package/template/.claude/skills/specialist-agent-routing/SKILL.md +107 -0
- package/template/.claude/skills/tailwind-patterns/SKILL.md +269 -0
- package/template/.claude/skills/test/SKILL.md +82 -0
- package/template/.claude/skills/test-driven-development/SKILL.md +422 -0
- package/template/.claude/skills/test-driven-development/testing-patterns.md +236 -0
- package/template/.claude/skills/test-execution-and-coverage/SKILL.md +56 -0
- package/template/.claude/skills/type-design/SKILL.md +84 -0
- package/template/.claude/skills/ui-ux-pro-max/SKILL.md +75 -0
- package/template/.claude/skills/using-agent-skills/SKILL.md +171 -0
- package/template/.claude/skills/verification-orchestration/SKILL.md +68 -0
- package/template/.claude/skills/vulnerability-scanner/SKILL.md +276 -0
- package/template/.claude/skills/vulnerability-scanner/checklists.md +121 -0
- package/template/.claude/skills/vulnerability-scanner/scripts/security_scan.py +458 -0
- package/template/.claude/skills/wiki/SKILL.md +149 -0
- package/template/.claude/skills/workflow-documentation-sync/SKILL.md +87 -0
- package/template/.claude/skills/writing-great-skills/SKILL.md +65 -0
- package/template/.nexus/nexus-devflow.json +44 -0
- package/template/AGENTS.md +58 -0
- package/template/CLAUDE.md +5 -0
- package/template/LICENSE +21 -0
- package/template/devflow/context/ai-interaction.md +34 -0
- package/template/devflow/context/coding-standards.md +19 -0
- package/template/devflow/context/current-stage.md +6 -0
- package/template/devflow/context/findings.md +13 -0
- package/template/devflow/context/project-overview.md +20 -0
- package/template/devflow/reference/running-id-contract.md +39 -0
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: intelligent-routing
|
|
3
|
+
description: Automatic agent and stage routing for DevFlow 2.0. Use when deciding which active workflow, skill, or specialist should own the next step.
|
|
4
|
+
version: 2.0.0
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Intelligent Routing For DevFlow 2.0
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Analyze a user request and route it to the correct DevFlow 2.0 surface without requiring the user to name the exact workflow, skill, or agent.
|
|
12
|
+
|
|
13
|
+
## Canonical Routing Order
|
|
14
|
+
|
|
15
|
+
Always route in this order:
|
|
16
|
+
|
|
17
|
+
1. Mainline stage if the request is lifecycle work
|
|
18
|
+
2. Public companion command if the request is support work
|
|
19
|
+
3. Specialist agent if the user needs focused expert judgment
|
|
20
|
+
4. Internal companion or skill only when the public surface should stay thin
|
|
21
|
+
|
|
22
|
+
Do not route new work into retired JSON-first commands, dashboard-first flows, or removed aliases.
|
|
23
|
+
|
|
24
|
+
When routing to support skills, follow `docs/skill-selection-policy.md`.
|
|
25
|
+
|
|
26
|
+
## Timeline Stages
|
|
27
|
+
|
|
28
|
+
`/00-Discover -> /10-Define -> /20-Spec -> /30-Plan -> /40-Implement -> /50-Verify -> /60-Report -> /70-Release`
|
|
29
|
+
|
|
30
|
+
## Public Companion Commands
|
|
31
|
+
|
|
32
|
+
- `Goal`
|
|
33
|
+
- `Brainstorm`
|
|
34
|
+
- `Research`
|
|
35
|
+
- `Debug`
|
|
36
|
+
- `PRD`
|
|
37
|
+
- `Issue-Triage`
|
|
38
|
+
- `Wiki`
|
|
39
|
+
- `Check-For-Updates`
|
|
40
|
+
- `Help`
|
|
41
|
+
|
|
42
|
+
## Specialist Agent Routing
|
|
43
|
+
|
|
44
|
+
Use these agent mappings when expert judgment is the best next step:
|
|
45
|
+
|
|
46
|
+
| Request Type | Route To |
|
|
47
|
+
|---|---|
|
|
48
|
+
| requirements clarification | `requirements-engineer` |
|
|
49
|
+
| product framing | `prp-core-prd-architect` |
|
|
50
|
+
| planning breakdown | `prp-core-planner` |
|
|
51
|
+
| codebase exploration | `codebase-explorer` |
|
|
52
|
+
| backend implementation or API review | `backend-specialist` |
|
|
53
|
+
| frontend implementation or UI review | `frontend-specialist` |
|
|
54
|
+
| schema and query design | `database-architect` |
|
|
55
|
+
| implementation execution | `prp-core-coder` |
|
|
56
|
+
| tests and coverage | `test-engineer` |
|
|
57
|
+
| code review and risk review | `code-reviewer` |
|
|
58
|
+
| security review | `security-auditor` |
|
|
59
|
+
| performance review | `performance-engineer` |
|
|
60
|
+
| root-cause debugging | `prp-core-debugger` |
|
|
61
|
+
| release packaging and commit scope | `prp-core-git-committer`, `prp-core-git-pr-maker` |
|
|
62
|
+
| broad orchestration across domains | `orchestrator` |
|
|
63
|
+
| overnight maintenance loops and repo cleanup | `ob-loop-engineer` |
|
|
64
|
+
|
|
65
|
+
## Lifecycle Routing Rules
|
|
66
|
+
|
|
67
|
+
| User State | Recommended Route |
|
|
68
|
+
|---|---|
|
|
69
|
+
| new request, vague or clear | `/00-Discover`; it selects support inquiry and owns the delivery decision |
|
|
70
|
+
| approved discovery needs one or more delivery boundaries | `/10-Define {discovery_id}` |
|
|
71
|
+
| needs requirements and acceptance criteria | `/20-Spec` |
|
|
72
|
+
| has a stable spec and needs execution plan | `/30-Plan` |
|
|
73
|
+
| needs implementation work | `/40-Implement` |
|
|
74
|
+
| needs testing, review, or validation evidence | `/50-Verify` |
|
|
75
|
+
| needs packaging, commit, PR, or release handling | `/70-Release` |
|
|
76
|
+
| needs the final summary or handoff narrative | `/60-Report` |
|
|
77
|
+
|
|
78
|
+
## Routing Heuristics
|
|
79
|
+
|
|
80
|
+
### Use a Timeline stage when:
|
|
81
|
+
|
|
82
|
+
- the request advances a task through its lifecycle
|
|
83
|
+
- the user needs an artifact in `.workspaces`
|
|
84
|
+
- the next step should change stage ownership
|
|
85
|
+
|
|
86
|
+
### Use a public companion command when:
|
|
87
|
+
|
|
88
|
+
- the request supports a stage rather than replacing it
|
|
89
|
+
- the user needs exploration, research, debugging, or help
|
|
90
|
+
- the output is advisory or investigative
|
|
91
|
+
|
|
92
|
+
### Use an internal clarification skill when:
|
|
93
|
+
|
|
94
|
+
- the current stage is blocked by ambiguity, not by missing execution effort
|
|
95
|
+
- a small amount of user interaction could change scope, acceptance criteria, or planning decisions
|
|
96
|
+
- the public surface should stay the same and the questioning method is only supporting the active stage
|
|
97
|
+
|
|
98
|
+
If `grill-with-docs` is available in the current environment, prefer it as an optional internal support skill for:
|
|
99
|
+
|
|
100
|
+
- `/10-Define` when scope or terminology is unstable
|
|
101
|
+
- `/20-Spec` when acceptance criteria or rules are ambiguous
|
|
102
|
+
- `/30-Plan` when architecture or verification choices are still reversible but unclear
|
|
103
|
+
|
|
104
|
+
Do not use deep questioning by default in every stage. Collect only the information that affects the current Timeline-stage decision.
|
|
105
|
+
|
|
106
|
+
### Use an internal clarification skill when:
|
|
107
|
+
|
|
108
|
+
- the current stage is blocked by ambiguity, not by missing execution effort
|
|
109
|
+
- a small amount of user interaction could change scope, acceptance criteria, or planning decisions
|
|
110
|
+
- the public surface should stay the same and the questioning method is only supporting the active stage
|
|
111
|
+
|
|
112
|
+
If `grill-with-docs` is available in the current environment, prefer it as an optional internal support skill for:
|
|
113
|
+
|
|
114
|
+
- `/10-Define` when scope or terminology is unstable
|
|
115
|
+
- `/20-Spec` when acceptance criteria or rules are ambiguous
|
|
116
|
+
- `/30-Plan` when architecture or verification choices are still reversible but unclear
|
|
117
|
+
|
|
118
|
+
Do not use deep questioning by default in every stage. Collect only the information that affects the current stage decision.
|
|
119
|
+
|
|
120
|
+
### Use a specialist agent when:
|
|
121
|
+
|
|
122
|
+
- the user explicitly asks for one
|
|
123
|
+
- a narrow expert lens is more useful than a workflow shell
|
|
124
|
+
- the active stage already exists and only specialist judgment is missing
|
|
125
|
+
|
|
126
|
+
### Use a support skill when:
|
|
127
|
+
|
|
128
|
+
- a mainline stage or public companion already owns the work
|
|
129
|
+
- the skill resolves a bounded uncertainty inside that owner
|
|
130
|
+
- the skill is more specific than the general companion surface
|
|
131
|
+
- the skill output can be captured in the owning stage artifact, `CONTEXT.md`, an ADR, or a focused doc
|
|
132
|
+
|
|
133
|
+
Support skill limits:
|
|
134
|
+
|
|
135
|
+
- choose one primary skill per pass
|
|
136
|
+
- add at most two secondary skills when each has a distinct purpose
|
|
137
|
+
- prefer the most specific skill when descriptions overlap
|
|
138
|
+
- route back to the owning stage when a skill finds a lifecycle-level contradiction
|
|
139
|
+
|
|
140
|
+
Key conflict defaults:
|
|
141
|
+
|
|
142
|
+
| Conflict | Route |
|
|
143
|
+
|---|---|
|
|
144
|
+
| `Brainstorm` vs `grilling` | `Brainstorm` for option generation; `grilling` for stress-testing a candidate idea |
|
|
145
|
+
| `grilling` vs `grill-with-docs` | `grill-with-docs` when a codebase or durable docs matter |
|
|
146
|
+
| `grill-with-docs` vs `domain-modeling` | `grill-with-docs` interviews; `domain-modeling` records confirmed glossary terms or ADRs |
|
|
147
|
+
| `to-prd` vs `PRD` | `PRD` owns the public surface; `to-prd` is an internal synthesis method |
|
|
148
|
+
| `to-issues` vs `/30-Plan` | `/30-Plan` owns work breakdown; `to-issues` packages slices when issue tracker output is needed |
|
|
149
|
+
| `implement` vs `/40-Implement` | `/40-Implement` owns implementation |
|
|
150
|
+
| `review` vs `/50-Verify` | `/50-Verify` owns verification; `review` is one lane |
|
|
151
|
+
|
|
152
|
+
## Examples
|
|
153
|
+
|
|
154
|
+
| User Request | Route |
|
|
155
|
+
|---|---|
|
|
156
|
+
| "I have an idea but not the shape yet" | `/00-Discover`, likely `Brainstorm`, then return to Discover |
|
|
157
|
+
| "Turn this stable new goal into requirements" | `/00-Discover`, then `/10-Define {discovery_id}` before `/20-Spec {running_id}` |
|
|
158
|
+
| "Fix this newly reported broken auth flow" | `/00-Discover`, likely `Debug`, then return to Discover before Define |
|
|
159
|
+
| "Review this implementation for risks" | `/50-Verify` or `Agent code-reviewer ...` |
|
|
160
|
+
| "Install or upgrade Nexus-DevFlow on this machine" | `Check-For-Updates` |
|
|
161
|
+
| "Help me figure out which command to use" | `Help` |
|
|
162
|
+
|
|
163
|
+
## Guardrails
|
|
164
|
+
|
|
165
|
+
- Do not recommend removed numeric aliases such as old task/code/verify commands.
|
|
166
|
+
- Do not mention legacy external control files as part of the routing model.
|
|
167
|
+
- Do not invent agent names that are not present in the current repo.
|
|
168
|
+
- If the request spans multiple domains and the owner is unclear, route to `orchestrator`.
|
|
169
|
+
- If clarification is needed, ask only for information that can change the active stage decision.
|
|
170
|
+
- If clarification is needed, ask only for information that can change the active stage decision.
|
|
171
|
+
|
|
172
|
+
## Output Pattern
|
|
173
|
+
|
|
174
|
+
When applying this skill, answer in one short line before proceeding:
|
|
175
|
+
|
|
176
|
+
`Applying DevFlow 2.0 routing: <chosen route> because <reason>.`
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: issue-triage
|
|
3
|
+
description: Issue-Triage workflow
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
description: Issue Triage Addon - Analyze GitHub issues, detect duplicates or spam, and route actionable work into DevFlow workflows.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Phase 57: Issue Triage Addon
|
|
11
|
+
|
|
12
|
+
## Target: $ARGUMENTS
|
|
13
|
+
|
|
14
|
+
Use this workflow to evaluate GitHub issues, bug reports, feature requests, support requests, duplicates, or noisy reports before creating or resuming work.
|
|
15
|
+
Use `triage` as the support skill for classification, verification, and agent-ready briefs. Use `to-issues` only when a stable spec or PRD must be packaged into vertical slices.
|
|
16
|
+
|
|
17
|
+
## Prompt Sources
|
|
18
|
+
|
|
19
|
+
Adapted from:
|
|
20
|
+
|
|
21
|
+
- `github/issue_analyzer.md`
|
|
22
|
+
- `github/issue_triager.md`
|
|
23
|
+
- `github/duplicate_detector.md`
|
|
24
|
+
- `github/spam_detector.md`
|
|
25
|
+
- `github/pr_ai_triage.md`
|
|
26
|
+
|
|
27
|
+
## Process
|
|
28
|
+
|
|
29
|
+
### 1. Read Issue Context
|
|
30
|
+
|
|
31
|
+
Collect:
|
|
32
|
+
|
|
33
|
+
- issue title and body
|
|
34
|
+
- comments and maintainer notes
|
|
35
|
+
- labels and linked PRs
|
|
36
|
+
- reproduction steps
|
|
37
|
+
- affected versions or environment
|
|
38
|
+
- related files, logs, screenshots, or references
|
|
39
|
+
|
|
40
|
+
### 2. Triage
|
|
41
|
+
|
|
42
|
+
Classify the issue:
|
|
43
|
+
|
|
44
|
+
- bug
|
|
45
|
+
- feature request
|
|
46
|
+
- documentation request
|
|
47
|
+
- question or support
|
|
48
|
+
- duplicate
|
|
49
|
+
- spam or noise
|
|
50
|
+
- needs more information
|
|
51
|
+
|
|
52
|
+
Assess:
|
|
53
|
+
|
|
54
|
+
- severity
|
|
55
|
+
- user impact
|
|
56
|
+
- reproducibility
|
|
57
|
+
- affected area
|
|
58
|
+
- confidence
|
|
59
|
+
|
|
60
|
+
Separate:
|
|
61
|
+
|
|
62
|
+
- what is already evidenced
|
|
63
|
+
- what is inferred
|
|
64
|
+
- what still needs proof
|
|
65
|
+
|
|
66
|
+
### 3. Create Issue Triage Report
|
|
67
|
+
|
|
68
|
+
- **MANDATORY:** Before generating the final report, inspect `.agent/resources/schemas/triage.template.md` for layout, required sections, and format.
|
|
69
|
+
- Before reporting completion, run:
|
|
70
|
+
|
|
71
|
+
Review `{report_path}` against `triage.template.md`, keep the required headings, and remove placeholder text before completion.
|
|
72
|
+
|
|
73
|
+
- Replace any placeholder or template text with concrete issue summary, classification, impact, routing decision, and next command.
|
|
74
|
+
- Save the final report to:
|
|
75
|
+
|
|
76
|
+
```text
|
|
77
|
+
devflow/issues/{date}-triage-{issue_number}.md
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### 4. Route
|
|
81
|
+
|
|
82
|
+
Use:
|
|
83
|
+
|
|
84
|
+
- `Debug` for confirmed bugs needing root cause work
|
|
85
|
+
- `Research` or `Spec-Research` for external dependency uncertainty
|
|
86
|
+
- `PRD` for product-level feature requests that need problem framing
|
|
87
|
+
- `/10-Define` for actionable work that still needs scope decisions
|
|
88
|
+
- `/20-Spec` for work that is already stable enough to become a delivery contract
|
|
89
|
+
- `Help` when the issue is not actionable yet
|
|
90
|
+
|
|
91
|
+
## Output Triage Recommendation
|
|
92
|
+
|
|
93
|
+
Return:
|
|
94
|
+
|
|
95
|
+
- classification
|
|
96
|
+
- duplicate or spam assessment
|
|
97
|
+
- confidence level
|
|
98
|
+
- recommended route into DevFlow 2.0
|
|
99
|
+
- where the report was written
|
|
100
|
+
|
|
101
|
+
## Relationship To DevFlow 2.0
|
|
102
|
+
|
|
103
|
+
- Classification: Companion command
|
|
104
|
+
- Mainline status: Intake support command, not a numbered stage
|
|
105
|
+
- Typical entry points: issue intake before scope or implementation begins
|
|
106
|
+
- Typical handoff targets: `Debug`, `PRD`, `/10-Define`, `Research`, `Help`
|
|
107
|
+
|
|
108
|
+
## Sources
|
|
109
|
+
|
|
110
|
+
- `AGENTS.md`
|
|
111
|
+
- `.agent/resources/schemas/triage.template.md`
|
|
112
|
+
- Related commands: `Debug`, `PRD`, `/10-Define`, `Research`, `Help`
|
|
113
|
+
- Support skills: `triage`, `to-issues`, `domain-modeling`
|
|
114
|
+
|
|
115
|
+
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: lint-and-validate
|
|
3
|
+
description: Automatic quality control, linting, and static analysis procedures. Use after every code modification to ensure syntax correctness and project standards. Triggers onKeywords: lint, format, check, validate, types, static analysis.
|
|
4
|
+
allowed-tools: Read, Glob, Grep, Bash
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Lint and Validate Skill
|
|
8
|
+
|
|
9
|
+
> **MANDATORY:** Run appropriate validation tools after EVERY code change. Do not finish a task until the code is error-free.
|
|
10
|
+
|
|
11
|
+
### Procedures by Ecosystem
|
|
12
|
+
|
|
13
|
+
#### Node.js / TypeScript
|
|
14
|
+
1. **Lint/Fix:** `npm run lint` or `npx eslint "path" --fix`
|
|
15
|
+
2. **Types:** `npx tsc --noEmit`
|
|
16
|
+
3. **Security:** `npm audit --audit-level=high`
|
|
17
|
+
|
|
18
|
+
#### Python
|
|
19
|
+
1. **Linter (Ruff):** `ruff check "path" --fix` (Fast & Modern)
|
|
20
|
+
2. **Security (Bandit):** `bandit -r "path" -ll`
|
|
21
|
+
3. **Types (MyPy):** `mypy "path"`
|
|
22
|
+
|
|
23
|
+
## The Quality Loop
|
|
24
|
+
1. **Write/Edit Code**
|
|
25
|
+
2. **Run Audit:** `npm run lint && npx tsc --noEmit`
|
|
26
|
+
3. **Analyze Report:** Check the "FINAL AUDIT REPORT" section.
|
|
27
|
+
4. **Fix & Repeat:** Submitting code with "FINAL AUDIT" failures is NOT allowed.
|
|
28
|
+
|
|
29
|
+
## Error Handling
|
|
30
|
+
- If `lint` fails: Fix the style or syntax issues immediately.
|
|
31
|
+
- If `tsc` fails: Correct type mismatches before proceeding.
|
|
32
|
+
- If no tool is configured: Check the project root for `.eslintrc`, `tsconfig.json`, `pyproject.toml` and suggest creating one.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
**Strict Rule:** No code should be committed or reported as "done" without passing these checks.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Scripts
|
|
40
|
+
|
|
41
|
+
| Script | Purpose | Command |
|
|
42
|
+
|--------|---------|---------|
|
|
43
|
+
| `scripts/lint_runner.py` | Unified lint check | `python scripts/lint_runner.py <project_path>` |
|
|
44
|
+
| `scripts/type_coverage.py` | Type coverage analysis | `python scripts/type_coverage.py <project_path>` |
|
|
45
|
+
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Lint Runner - Unified linting and type checking
|
|
4
|
+
Runs appropriate linters based on project type.
|
|
5
|
+
|
|
6
|
+
Usage:
|
|
7
|
+
python lint_runner.py <project_path>
|
|
8
|
+
|
|
9
|
+
Supports:
|
|
10
|
+
- Node.js: npm run lint, npx tsc --noEmit
|
|
11
|
+
- Python: ruff check, mypy
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
import subprocess
|
|
15
|
+
import sys
|
|
16
|
+
import json
|
|
17
|
+
import platform
|
|
18
|
+
import shutil
|
|
19
|
+
from pathlib import Path
|
|
20
|
+
from datetime import datetime
|
|
21
|
+
|
|
22
|
+
# Fix Windows console encoding
|
|
23
|
+
try:
|
|
24
|
+
sys.stdout.reconfigure(encoding='utf-8', errors='replace')
|
|
25
|
+
except:
|
|
26
|
+
pass
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def detect_project_type(project_path: Path) -> dict:
|
|
30
|
+
"""Detect project type and available linters."""
|
|
31
|
+
result = {
|
|
32
|
+
"type": "unknown",
|
|
33
|
+
"linters": []
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
# Node.js project
|
|
37
|
+
package_json = project_path / "package.json"
|
|
38
|
+
if package_json.exists():
|
|
39
|
+
result["type"] = "node"
|
|
40
|
+
try:
|
|
41
|
+
pkg = json.loads(package_json.read_text(encoding='utf-8'))
|
|
42
|
+
scripts = pkg.get("scripts", {})
|
|
43
|
+
deps = {**pkg.get("dependencies", {}), **pkg.get("devDependencies", {})}
|
|
44
|
+
|
|
45
|
+
# Check for lint script
|
|
46
|
+
if "lint" in scripts:
|
|
47
|
+
result["linters"].append({"name": "npm lint", "cmd": ["npm", "run", "lint"]})
|
|
48
|
+
elif "eslint" in deps:
|
|
49
|
+
result["linters"].append({"name": "eslint", "cmd": ["npx", "eslint", "."]})
|
|
50
|
+
|
|
51
|
+
# Check for TypeScript
|
|
52
|
+
if "typescript" in deps or (project_path / "tsconfig.json").exists():
|
|
53
|
+
result["linters"].append({"name": "tsc", "cmd": ["npx", "tsc", "--noEmit"]})
|
|
54
|
+
|
|
55
|
+
except:
|
|
56
|
+
pass
|
|
57
|
+
|
|
58
|
+
# Python project
|
|
59
|
+
if (project_path / "pyproject.toml").exists() or (project_path / "requirements.txt").exists():
|
|
60
|
+
result["type"] = "python"
|
|
61
|
+
|
|
62
|
+
# Check for ruff
|
|
63
|
+
result["linters"].append({"name": "ruff", "cmd": ["ruff", "check", "."]})
|
|
64
|
+
|
|
65
|
+
# Check for mypy
|
|
66
|
+
if (project_path / "mypy.ini").exists() or (project_path / "pyproject.toml").exists():
|
|
67
|
+
result["linters"].append({"name": "mypy", "cmd": ["mypy", "."]})
|
|
68
|
+
|
|
69
|
+
return result
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def run_linter(linter: dict, cwd: Path) -> dict:
|
|
73
|
+
"""Run a single linter and return results."""
|
|
74
|
+
result = {
|
|
75
|
+
"name": linter["name"],
|
|
76
|
+
"passed": False,
|
|
77
|
+
"output": "",
|
|
78
|
+
"error": ""
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
try:
|
|
82
|
+
cmd = linter["cmd"]
|
|
83
|
+
|
|
84
|
+
# Windows compatibility for npm/npx
|
|
85
|
+
if platform.system() == "Windows":
|
|
86
|
+
if cmd[0] in ["npm", "npx"]:
|
|
87
|
+
# Force .cmd extension on Windows
|
|
88
|
+
if not cmd[0].lower().endswith(".cmd"):
|
|
89
|
+
cmd[0] = f"{cmd[0]}.cmd"
|
|
90
|
+
|
|
91
|
+
proc = subprocess.run(
|
|
92
|
+
cmd,
|
|
93
|
+
cwd=str(cwd),
|
|
94
|
+
capture_output=True,
|
|
95
|
+
text=True,
|
|
96
|
+
encoding='utf-8',
|
|
97
|
+
errors='replace',
|
|
98
|
+
timeout=120,
|
|
99
|
+
shell=platform.system() == "Windows" # Shell=True often helps with path resolution on Windows
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
result["output"] = proc.stdout[:2000] if proc.stdout else ""
|
|
103
|
+
result["error"] = proc.stderr[:500] if proc.stderr else ""
|
|
104
|
+
result["passed"] = proc.returncode == 0
|
|
105
|
+
|
|
106
|
+
except FileNotFoundError:
|
|
107
|
+
result["error"] = f"Command not found: {linter['cmd'][0]}"
|
|
108
|
+
except subprocess.TimeoutExpired:
|
|
109
|
+
result["error"] = "Timeout after 120s"
|
|
110
|
+
except Exception as e:
|
|
111
|
+
result["error"] = str(e)
|
|
112
|
+
|
|
113
|
+
return result
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def main():
|
|
117
|
+
project_path = Path(sys.argv[1] if len(sys.argv) > 1 else ".").resolve()
|
|
118
|
+
|
|
119
|
+
print(f"\n{'='*60}")
|
|
120
|
+
print(f"[LINT RUNNER] Unified Linting")
|
|
121
|
+
print(f"{'='*60}")
|
|
122
|
+
print(f"Project: {project_path}")
|
|
123
|
+
print(f"Time: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
|
|
124
|
+
|
|
125
|
+
# Detect project type
|
|
126
|
+
project_info = detect_project_type(project_path)
|
|
127
|
+
print(f"Type: {project_info['type']}")
|
|
128
|
+
print(f"Linters: {len(project_info['linters'])}")
|
|
129
|
+
print("-"*60)
|
|
130
|
+
|
|
131
|
+
if not project_info["linters"]:
|
|
132
|
+
print("No linters found for this project type.")
|
|
133
|
+
output = {
|
|
134
|
+
"script": "lint_runner",
|
|
135
|
+
"project": str(project_path),
|
|
136
|
+
"type": project_info["type"],
|
|
137
|
+
"checks": [],
|
|
138
|
+
"passed": True,
|
|
139
|
+
"message": "No linters configured"
|
|
140
|
+
}
|
|
141
|
+
print(json.dumps(output, indent=2))
|
|
142
|
+
sys.exit(0)
|
|
143
|
+
|
|
144
|
+
# Run each linter
|
|
145
|
+
results = []
|
|
146
|
+
all_passed = True
|
|
147
|
+
|
|
148
|
+
for linter in project_info["linters"]:
|
|
149
|
+
print(f"\nRunning: {linter['name']}...")
|
|
150
|
+
result = run_linter(linter, project_path)
|
|
151
|
+
results.append(result)
|
|
152
|
+
|
|
153
|
+
if result["passed"]:
|
|
154
|
+
print(f" [PASS] {linter['name']}")
|
|
155
|
+
else:
|
|
156
|
+
print(f" [FAIL] {linter['name']}")
|
|
157
|
+
if result["error"]:
|
|
158
|
+
print(f" Error: {result['error'][:200]}")
|
|
159
|
+
all_passed = False
|
|
160
|
+
|
|
161
|
+
# Summary
|
|
162
|
+
print("\n" + "="*60)
|
|
163
|
+
print("SUMMARY")
|
|
164
|
+
print("="*60)
|
|
165
|
+
|
|
166
|
+
for r in results:
|
|
167
|
+
icon = "[PASS]" if r["passed"] else "[FAIL]"
|
|
168
|
+
print(f"{icon} {r['name']}")
|
|
169
|
+
|
|
170
|
+
output = {
|
|
171
|
+
"script": "lint_runner",
|
|
172
|
+
"project": str(project_path),
|
|
173
|
+
"type": project_info["type"],
|
|
174
|
+
"checks": results,
|
|
175
|
+
"passed": all_passed
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
print("\n" + json.dumps(output, indent=2))
|
|
179
|
+
|
|
180
|
+
sys.exit(0 if all_passed else 1)
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
if __name__ == "__main__":
|
|
184
|
+
main()
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Type Coverage Checker - Measures TypeScript/Python type coverage.
|
|
4
|
+
Identifies untyped functions, any usage, and type safety issues.
|
|
5
|
+
"""
|
|
6
|
+
import sys
|
|
7
|
+
import re
|
|
8
|
+
import subprocess
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
|
|
11
|
+
# Fix Windows console encoding for Unicode output
|
|
12
|
+
try:
|
|
13
|
+
sys.stdout.reconfigure(encoding='utf-8', errors='replace')
|
|
14
|
+
sys.stderr.reconfigure(encoding='utf-8', errors='replace')
|
|
15
|
+
except AttributeError:
|
|
16
|
+
pass # Python < 3.7
|
|
17
|
+
|
|
18
|
+
def check_typescript_coverage(project_path: Path) -> dict:
|
|
19
|
+
"""Check TypeScript type coverage."""
|
|
20
|
+
issues = []
|
|
21
|
+
passed = []
|
|
22
|
+
stats = {'any_count': 0, 'untyped_functions': 0, 'total_functions': 0}
|
|
23
|
+
|
|
24
|
+
ts_files = list(project_path.rglob("*.ts")) + list(project_path.rglob("*.tsx"))
|
|
25
|
+
ts_files = [f for f in ts_files if 'node_modules' not in str(f) and '.d.ts' not in str(f)]
|
|
26
|
+
|
|
27
|
+
if not ts_files:
|
|
28
|
+
return {'type': 'typescript', 'files': 0, 'passed': [], 'issues': ["[!] No TypeScript files found"], 'stats': stats}
|
|
29
|
+
|
|
30
|
+
for file_path in ts_files[:30]: # Limit
|
|
31
|
+
try:
|
|
32
|
+
content = file_path.read_text(encoding='utf-8', errors='ignore')
|
|
33
|
+
|
|
34
|
+
# Count 'any' usage
|
|
35
|
+
any_matches = re.findall(r':\s*any\b', content)
|
|
36
|
+
stats['any_count'] += len(any_matches)
|
|
37
|
+
|
|
38
|
+
# Find functions without return types
|
|
39
|
+
# function name(params) { - no return type
|
|
40
|
+
untyped = re.findall(r'function\s+\w+\s*\([^)]*\)\s*{', content)
|
|
41
|
+
# Arrow functions without types: const fn = (x) => or (x) =>
|
|
42
|
+
untyped += re.findall(r'=\s*\([^:)]*\)\s*=>', content)
|
|
43
|
+
stats['untyped_functions'] += len(untyped)
|
|
44
|
+
|
|
45
|
+
# Count typed functions
|
|
46
|
+
typed = re.findall(r'function\s+\w+\s*\([^)]*\)\s*:\s*\w+', content)
|
|
47
|
+
typed += re.findall(r':\s*\([^)]*\)\s*=>\s*\w+', content)
|
|
48
|
+
stats['total_functions'] += len(typed) + len(untyped)
|
|
49
|
+
|
|
50
|
+
except Exception:
|
|
51
|
+
continue
|
|
52
|
+
|
|
53
|
+
# Analyze results
|
|
54
|
+
if stats['any_count'] == 0:
|
|
55
|
+
passed.append("[OK] No 'any' types found")
|
|
56
|
+
elif stats['any_count'] <= 5:
|
|
57
|
+
issues.append(f"[!] {stats['any_count']} 'any' types found (acceptable)")
|
|
58
|
+
else:
|
|
59
|
+
issues.append(f"[X] {stats['any_count']} 'any' types found (too many)")
|
|
60
|
+
|
|
61
|
+
if stats['total_functions'] > 0:
|
|
62
|
+
typed_ratio = (stats['total_functions'] - stats['untyped_functions']) / stats['total_functions'] * 100
|
|
63
|
+
if typed_ratio >= 80:
|
|
64
|
+
passed.append(f"[OK] Type coverage: {typed_ratio:.0f}%")
|
|
65
|
+
elif typed_ratio >= 50:
|
|
66
|
+
issues.append(f"[!] Type coverage: {typed_ratio:.0f}% (improve)")
|
|
67
|
+
else:
|
|
68
|
+
issues.append(f"[X] Type coverage: {typed_ratio:.0f}% (too low)")
|
|
69
|
+
|
|
70
|
+
passed.append(f"[OK] Analyzed {len(ts_files)} TypeScript files")
|
|
71
|
+
|
|
72
|
+
return {'type': 'typescript', 'files': len(ts_files), 'passed': passed, 'issues': issues, 'stats': stats}
|
|
73
|
+
|
|
74
|
+
def check_python_coverage(project_path: Path) -> dict:
|
|
75
|
+
"""Check Python type hints coverage."""
|
|
76
|
+
issues = []
|
|
77
|
+
passed = []
|
|
78
|
+
stats = {'untyped_functions': 0, 'typed_functions': 0, 'any_count': 0}
|
|
79
|
+
|
|
80
|
+
py_files = list(project_path.rglob("*.py"))
|
|
81
|
+
py_files = [f for f in py_files if not any(x in str(f) for x in ['venv', '__pycache__', '.git', 'node_modules'])]
|
|
82
|
+
|
|
83
|
+
if not py_files:
|
|
84
|
+
return {'type': 'python', 'files': 0, 'passed': [], 'issues': ["[!] No Python files found"], 'stats': stats}
|
|
85
|
+
|
|
86
|
+
for file_path in py_files[:30]: # Limit
|
|
87
|
+
try:
|
|
88
|
+
content = file_path.read_text(encoding='utf-8', errors='ignore')
|
|
89
|
+
|
|
90
|
+
# Count Any usage
|
|
91
|
+
any_matches = re.findall(r':\s*Any\b', content)
|
|
92
|
+
stats['any_count'] += len(any_matches)
|
|
93
|
+
|
|
94
|
+
# Find functions with type hints
|
|
95
|
+
typed_funcs = re.findall(r'def\s+\w+\s*\([^)]*:[^)]+\)', content)
|
|
96
|
+
typed_funcs += re.findall(r'def\s+\w+\s*\([^)]*\)\s*->', content)
|
|
97
|
+
stats['typed_functions'] += len(typed_funcs)
|
|
98
|
+
|
|
99
|
+
# Find functions without type hints
|
|
100
|
+
all_funcs = re.findall(r'def\s+\w+\s*\(', content)
|
|
101
|
+
stats['untyped_functions'] += len(all_funcs) - len(typed_funcs)
|
|
102
|
+
|
|
103
|
+
except Exception:
|
|
104
|
+
continue
|
|
105
|
+
|
|
106
|
+
total = stats['typed_functions'] + stats['untyped_functions']
|
|
107
|
+
|
|
108
|
+
if total > 0:
|
|
109
|
+
typed_ratio = stats['typed_functions'] / total * 100
|
|
110
|
+
if typed_ratio >= 70:
|
|
111
|
+
passed.append(f"[OK] Type hints coverage: {typed_ratio:.0f}%")
|
|
112
|
+
elif typed_ratio >= 40:
|
|
113
|
+
issues.append(f"[!] Type hints coverage: {typed_ratio:.0f}%")
|
|
114
|
+
else:
|
|
115
|
+
issues.append(f"[X] Type hints coverage: {typed_ratio:.0f}% (add type hints)")
|
|
116
|
+
|
|
117
|
+
if stats['any_count'] == 0:
|
|
118
|
+
passed.append("[OK] No 'Any' types found")
|
|
119
|
+
elif stats['any_count'] <= 3:
|
|
120
|
+
issues.append(f"[!] {stats['any_count']} 'Any' types found")
|
|
121
|
+
else:
|
|
122
|
+
issues.append(f"[X] {stats['any_count']} 'Any' types found")
|
|
123
|
+
|
|
124
|
+
passed.append(f"[OK] Analyzed {len(py_files)} Python files")
|
|
125
|
+
|
|
126
|
+
return {'type': 'python', 'files': len(py_files), 'passed': passed, 'issues': issues, 'stats': stats}
|
|
127
|
+
|
|
128
|
+
def main():
|
|
129
|
+
target = sys.argv[1] if len(sys.argv) > 1 else "."
|
|
130
|
+
project_path = Path(target)
|
|
131
|
+
|
|
132
|
+
print("\n" + "=" * 60)
|
|
133
|
+
print(" TYPE COVERAGE CHECKER")
|
|
134
|
+
print("=" * 60 + "\n")
|
|
135
|
+
|
|
136
|
+
results = []
|
|
137
|
+
|
|
138
|
+
# Check TypeScript
|
|
139
|
+
ts_result = check_typescript_coverage(project_path)
|
|
140
|
+
if ts_result['files'] > 0:
|
|
141
|
+
results.append(ts_result)
|
|
142
|
+
|
|
143
|
+
# Check Python
|
|
144
|
+
py_result = check_python_coverage(project_path)
|
|
145
|
+
if py_result['files'] > 0:
|
|
146
|
+
results.append(py_result)
|
|
147
|
+
|
|
148
|
+
if not results:
|
|
149
|
+
print("[!] No TypeScript or Python files found.")
|
|
150
|
+
sys.exit(0)
|
|
151
|
+
|
|
152
|
+
# Print results
|
|
153
|
+
critical_issues = 0
|
|
154
|
+
for result in results:
|
|
155
|
+
print(f"\n[{result['type'].upper()}]")
|
|
156
|
+
print("-" * 40)
|
|
157
|
+
for item in result['passed']:
|
|
158
|
+
print(f" {item}")
|
|
159
|
+
for item in result['issues']:
|
|
160
|
+
print(f" {item}")
|
|
161
|
+
if item.startswith("[X]"):
|
|
162
|
+
critical_issues += 1
|
|
163
|
+
|
|
164
|
+
print("\n" + "=" * 60)
|
|
165
|
+
if critical_issues == 0:
|
|
166
|
+
print("[OK] TYPE COVERAGE: ACCEPTABLE")
|
|
167
|
+
sys.exit(0)
|
|
168
|
+
else:
|
|
169
|
+
print(f"[X] TYPE COVERAGE: {critical_issues} critical issues")
|
|
170
|
+
sys.exit(1)
|
|
171
|
+
|
|
172
|
+
if __name__ == "__main__":
|
|
173
|
+
main()
|