exonous 0.0.0-stage → 2.10.4
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/README.md +100 -2
- package/assets/THIRD-PARTY-NOTICES.md +29 -0
- package/assets/adapters/opencode/exonous.js +54 -0
- package/assets/agents/exo-backend.md +22 -0
- package/assets/agents/exo-cto.md +22 -0
- package/assets/agents/exo-data-ai.md +22 -0
- package/assets/agents/exo-designer.md +22 -0
- package/assets/agents/exo-devops.md +22 -0
- package/assets/agents/exo-frontend.md +22 -0
- package/assets/agents/exo-infra.md +22 -0
- package/assets/agents/exo-mobile.md +22 -0
- package/assets/agents/exo-pm.md +22 -0
- package/assets/agents/exo-qa.md +22 -0
- package/assets/agents/exo-researcher.md +22 -0
- package/assets/agents/exo-security.md +22 -0
- package/assets/agents/roster.json +209 -0
- package/assets/agents/taxis.js +189 -0
- package/assets/editors/cursor/frontend-skills.mdc +27 -0
- package/assets/editors/hooks/cursor/hooks.json +11 -0
- package/assets/machine/PR-TEMPLATE.md +21 -0
- package/assets/machine/hooks/anamnesis.cjs +61 -0
- package/assets/machine/hooks/ethos.cjs +48 -0
- package/assets/machine/hooks/kairos.cjs +46 -0
- package/assets/machine/hooks/lib/cli-options.cjs +133 -0
- package/assets/machine/hooks/lib/memory.cjs +488 -0
- package/assets/machine/hooks/lib/metron.cjs +52 -0
- package/assets/machine/hooks/lib/paths.cjs +99 -0
- package/assets/machine/hooks/lib/payload.cjs +81 -0
- package/assets/machine/hooks/lib/pr-template-validate.cjs +103 -0
- package/assets/machine/hooks/lib/release.cjs +58 -0
- package/assets/machine/hooks/lib/repo.cjs +138 -0
- package/assets/machine/hooks/lib/sanitize.cjs +37 -0
- package/assets/machine/hooks/lib/selfupdate.cjs +354 -0
- package/assets/machine/hooks/lib/shell.cjs +722 -0
- package/assets/machine/hooks/lib/template.cjs +70 -0
- package/assets/machine/hooks/lib/token.cjs +110 -0
- package/assets/machine/hooks/lib/validate-pr-body.cjs +21 -0
- package/assets/machine/hooks/pyle.cjs +302 -0
- package/assets/rules/nomos.md +59 -0
- package/assets/rules/praxis.md +38 -0
- package/assets/skills/code-review/SKILL.md +124 -0
- package/assets/skills/commit-changes/SKILL.md +49 -0
- package/assets/skills/deliver/SKILL.md +114 -0
- package/assets/skills/deliver/references/parallel.md +37 -0
- package/assets/skills/doc/SKILL.md +140 -0
- package/assets/skills/doc/doc.mjs +277 -0
- package/assets/skills/issue-board/SKILL.md +84 -0
- package/assets/skills/issue-board/board.mjs +389 -0
- package/assets/skills/issue-board/config.example.json +9 -0
- package/assets/skills/issue-board/render.py +189 -0
- package/assets/skills/make-pr/SKILL.md +24 -0
- package/assets/skills/native-ui/SKILL.md +67 -0
- package/assets/skills/native-ui/reference/apple.md +180 -0
- package/assets/skills/native-ui/reference/mobile-feel.md +221 -0
- package/assets/skills/native-ui/reference/swift.md +289 -0
- package/assets/skills/project-memory/SKILL.md +59 -0
- package/assets/skills/project-memory/config.example.json +4 -0
- package/assets/skills/project-memory/project-memory.mjs +478 -0
- package/assets/skills/security-review/SKILL.md +102 -0
- package/assets/skills/session-handoff/SKILL.md +23 -0
- package/assets/skills/session-handoff/config.example.json +3 -0
- package/assets/skills/ui-design/SKILL.md +75 -0
- package/assets/skills/ui-design/reference/adapt.md +151 -0
- package/assets/skills/ui-design/reference/adapt.native.md +35 -0
- package/assets/skills/ui-design/reference/android.md +50 -0
- package/assets/skills/ui-design/reference/animate.md +87 -0
- package/assets/skills/ui-design/reference/audit.md +76 -0
- package/assets/skills/ui-design/reference/audit.native.md +126 -0
- package/assets/skills/ui-design/reference/bolder.md +33 -0
- package/assets/skills/ui-design/reference/clarify.md +84 -0
- package/assets/skills/ui-design/reference/colorize.md +86 -0
- package/assets/skills/ui-design/reference/craft-floor.md +25 -0
- package/assets/skills/ui-design/reference/critique.md +345 -0
- package/assets/skills/ui-design/reference/degraded/asset-producer.md +35 -0
- package/assets/skills/ui-design/reference/degraded/documenter.md +23 -0
- package/assets/skills/ui-design/reference/degraded/finish-reviewer.md +43 -0
- package/assets/skills/ui-design/reference/degraded/manual-edit-applier.md +56 -0
- package/assets/skills/ui-design/reference/delight.md +63 -0
- package/assets/skills/ui-design/reference/distill.md +98 -0
- package/assets/skills/ui-design/reference/doctor.md +49 -0
- package/assets/skills/ui-design/reference/document.md +273 -0
- package/assets/skills/ui-design/reference/extract.md +52 -0
- package/assets/skills/ui-design/reference/harden.md +122 -0
- package/assets/skills/ui-design/reference/hooks.md +114 -0
- package/assets/skills/ui-design/reference/init.md +47 -0
- package/assets/skills/ui-design/reference/ios.md +55 -0
- package/assets/skills/ui-design/reference/layout.md +81 -0
- package/assets/skills/ui-design/reference/live-setup.md +75 -0
- package/assets/skills/ui-design/reference/live.md +326 -0
- package/assets/skills/ui-design/reference/new-work.md +350 -0
- package/assets/skills/ui-design/reference/onboard.md +85 -0
- package/assets/skills/ui-design/reference/operate.md +29 -0
- package/assets/skills/ui-design/reference/optimize.md +101 -0
- package/assets/skills/ui-design/reference/overdrive.md +83 -0
- package/assets/skills/ui-design/reference/polish.md +77 -0
- package/assets/skills/ui-design/reference/quieter.md +95 -0
- package/assets/skills/ui-design/reference/routing.md +37 -0
- package/assets/skills/ui-design/reference/shape.md +43 -0
- package/assets/skills/ui-design/reference/styles/brutalist.md +45 -0
- package/assets/skills/ui-design/reference/styles/design-md.md +70 -0
- package/assets/skills/ui-design/reference/styles/direction.md +95 -0
- package/assets/skills/ui-design/reference/styles/full-output.md +42 -0
- package/assets/skills/ui-design/reference/styles/minimalist.md +64 -0
- package/assets/skills/ui-design/reference/styles/premium.md +65 -0
- package/assets/skills/ui-design/reference/styles/redesign.md +59 -0
- package/assets/skills/ui-design/reference/typeset.md +73 -0
- package/assets/skills/ui-design/reference/visualize.md +156 -0
- package/assets/skills/ui-design/scripts/ENGINE-LICENSE +191 -0
- package/assets/skills/ui-design/scripts/VERSION +1 -0
- package/assets/skills/ui-design/scripts/bin/darwin-arm64/impeccable +0 -0
- package/assets/skills/ui-design/scripts/command-metadata.json +94 -0
- package/assets/skills/ui-design/scripts/data/font-index-failures.json +121 -0
- package/assets/skills/ui-design/scripts/data/font-index.json +1 -0
- package/assets/skills/ui-design/scripts/impeccable +206 -0
- package/assets/skills/ui-design/scripts/impeccable.cmd +214 -0
- package/assets/skills/ui-design/scripts/live-browser-dom.js +167 -0
- package/assets/skills/ui-design/scripts/live-browser-ignores.js +242 -0
- package/assets/skills/ui-design/scripts/live-browser-session.js +144 -0
- package/assets/skills/ui-design/scripts/live-browser.js +12990 -0
- package/assets/skills/ui-design/scripts/modern-screenshot.umd.js +14 -0
- package/assets/skills/ui-design/scripts/ui-design +6 -0
- package/assets/skills/ui-design/scripts/ui-design.cmd +3 -0
- package/assets/skills/ui-design/scripts/ui-design.mjs +124 -0
- package/assets/skills/ui-mockup/SKILL.md +68 -0
- package/assets/skills/ui-mockup/reference/brandkit.md +101 -0
- package/assets/skills/ui-mockup/reference/image-to-code.md +83 -0
- package/assets/skills/ui-mockup/reference/mobile-comps.md +94 -0
- package/assets/skills/ui-mockup/reference/web-comps.md +83 -0
- package/assets/skills/ui-motion/SKILL.md +112 -0
- package/assets/skills/ui-motion/reference/expo.md +224 -0
- package/assets/skills/ui-motion/reference/opportunities.md +81 -0
- package/assets/skills/ui-motion/reference/prototype.md +238 -0
- package/assets/skills/ui-motion/reference/review.md +163 -0
- package/assets/skills/ui-motion/reference/toasts.md +144 -0
- package/assets/skills/ui-motion/reference/ui-libraries.md +71 -0
- package/assets/skills/ui-motion/reference/vocabulary.md +130 -0
- package/assets/skills/ui-motion/reference/web.md +294 -0
- package/assets/skills/ui-patterns/SKILL.md +105 -0
- package/assets/skills/ui-patterns/references/stacks/html-tailwind.md +40 -0
- package/assets/skills/ui-patterns/references/stacks/nextjs.md +52 -0
- package/assets/skills/ui-patterns/references/stacks/nuxt.md +100 -0
- package/assets/skills/ui-patterns/references/stacks/react-native.md +48 -0
- package/assets/skills/ui-patterns/references/stacks/react.md +49 -0
- package/assets/skills/ui-patterns/references/stacks/shadcn.md +57 -0
- package/assets/skills/ui-patterns/references/stacks/vue.md +37 -0
- package/assets/techne/.claude-plugin/marketplace.json +31 -0
- package/assets/techne/.claude-plugin/plugin.json +24 -0
- package/assets/techne/.mcp.json +8 -0
- package/assets/techne/commands/build-fix.md +48 -0
- package/assets/techne/commands/refactor-clean.md +46 -0
- package/assets/techne/commands/test-coverage.md +42 -0
- package/assets/techne/hooks/hooks.json +49 -0
- package/assets/techne/rules/angular/coding-style.md +49 -0
- package/assets/techne/rules/angular/hooks.md +23 -0
- package/assets/techne/rules/angular/patterns.md +48 -0
- package/assets/techne/rules/angular/security.md +26 -0
- package/assets/techne/rules/angular/testing.md +46 -0
- package/assets/techne/rules/arkts/coding-style.md +63 -0
- package/assets/techne/rules/arkts/hooks.md +38 -0
- package/assets/techne/rules/arkts/patterns.md +42 -0
- package/assets/techne/rules/arkts/security.md +35 -0
- package/assets/techne/rules/arkts/testing.md +39 -0
- package/assets/techne/rules/common/agents.md +6 -0
- package/assets/techne/rules/common/code-review.md +15 -0
- package/assets/techne/rules/common/coding-style.md +13 -0
- package/assets/techne/rules/common/development-workflow.md +5 -0
- package/assets/techne/rules/common/git-workflow.md +30 -0
- package/assets/techne/rules/common/hooks.md +7 -0
- package/assets/techne/rules/common/patterns.md +3 -0
- package/assets/techne/rules/common/performance.md +3 -0
- package/assets/techne/rules/common/security.md +5 -0
- package/assets/techne/rules/common/testing.md +3 -0
- package/assets/techne/rules/cpp/coding-style.md +31 -0
- package/assets/techne/rules/cpp/hooks.md +26 -0
- package/assets/techne/rules/cpp/patterns.md +31 -0
- package/assets/techne/rules/cpp/security.md +37 -0
- package/assets/techne/rules/cpp/testing.md +31 -0
- package/assets/techne/rules/csharp/coding-style.md +30 -0
- package/assets/techne/rules/csharp/hooks.md +24 -0
- package/assets/techne/rules/csharp/patterns.md +28 -0
- package/assets/techne/rules/csharp/security.md +32 -0
- package/assets/techne/rules/csharp/testing.md +27 -0
- package/assets/techne/rules/dart/coding-style.md +47 -0
- package/assets/techne/rules/dart/hooks.md +26 -0
- package/assets/techne/rules/dart/patterns.md +38 -0
- package/assets/techne/rules/dart/security.md +44 -0
- package/assets/techne/rules/dart/testing.md +39 -0
- package/assets/techne/rules/fsharp/coding-style.md +34 -0
- package/assets/techne/rules/fsharp/hooks.md +25 -0
- package/assets/techne/rules/fsharp/patterns.md +43 -0
- package/assets/techne/rules/fsharp/security.md +32 -0
- package/assets/techne/rules/fsharp/testing.md +27 -0
- package/assets/techne/rules/golang/coding-style.md +30 -0
- package/assets/techne/rules/golang/hooks.md +17 -0
- package/assets/techne/rules/golang/patterns.md +43 -0
- package/assets/techne/rules/golang/security.md +33 -0
- package/assets/techne/rules/golang/testing.md +20 -0
- package/assets/techne/rules/java/coding-style.md +51 -0
- package/assets/techne/rules/java/hooks.md +18 -0
- package/assets/techne/rules/java/patterns.md +55 -0
- package/assets/techne/rules/java/security.md +33 -0
- package/assets/techne/rules/java/testing.md +33 -0
- package/assets/techne/rules/kotlin/coding-style.md +50 -0
- package/assets/techne/rules/kotlin/hooks.md +17 -0
- package/assets/techne/rules/kotlin/patterns.md +44 -0
- package/assets/techne/rules/kotlin/security.md +34 -0
- package/assets/techne/rules/kotlin/testing.md +38 -0
- package/assets/techne/rules/nuxt/coding-style.md +20 -0
- package/assets/techne/rules/nuxt/hooks.md +16 -0
- package/assets/techne/rules/nuxt/patterns.md +46 -0
- package/assets/techne/rules/nuxt/security.md +19 -0
- package/assets/techne/rules/nuxt/testing.md +15 -0
- package/assets/techne/rules/perl/coding-style.md +33 -0
- package/assets/techne/rules/perl/hooks.md +22 -0
- package/assets/techne/rules/perl/patterns.md +43 -0
- package/assets/techne/rules/perl/security.md +39 -0
- package/assets/techne/rules/perl/testing.md +42 -0
- package/assets/techne/rules/php/coding-style.md +30 -0
- package/assets/techne/rules/php/hooks.md +24 -0
- package/assets/techne/rules/php/patterns.md +26 -0
- package/assets/techne/rules/php/security.md +27 -0
- package/assets/techne/rules/php/testing.md +28 -0
- package/assets/techne/rules/python/coding-style.md +38 -0
- package/assets/techne/rules/python/fastapi.md +57 -0
- package/assets/techne/rules/python/hooks.md +19 -0
- package/assets/techne/rules/python/patterns.md +37 -0
- package/assets/techne/rules/python/security.md +26 -0
- package/assets/techne/rules/python/testing.md +32 -0
- package/assets/techne/rules/react/coding-style.md +24 -0
- package/assets/techne/rules/react/hooks.md +62 -0
- package/assets/techne/rules/react/patterns.md +48 -0
- package/assets/techne/rules/react/security.md +45 -0
- package/assets/techne/rules/react/testing.md +42 -0
- package/assets/techne/rules/react-native/accessibility.md +14 -0
- package/assets/techne/rules/react-native/coding-style.md +16 -0
- package/assets/techne/rules/react-native/hooks.md +16 -0
- package/assets/techne/rules/react-native/patterns.md +18 -0
- package/assets/techne/rules/react-native/performance.md +14 -0
- package/assets/techne/rules/react-native/production-readiness.md +16 -0
- package/assets/techne/rules/react-native/security.md +16 -0
- package/assets/techne/rules/react-native/testing.md +14 -0
- package/assets/techne/rules/ruby/coding-style.md +40 -0
- package/assets/techne/rules/ruby/hooks.md +33 -0
- package/assets/techne/rules/ruby/patterns.md +33 -0
- package/assets/techne/rules/ruby/security.md +39 -0
- package/assets/techne/rules/ruby/testing.md +35 -0
- package/assets/techne/rules/rust/coding-style.md +41 -0
- package/assets/techne/rules/rust/hooks.md +16 -0
- package/assets/techne/rules/rust/patterns.md +42 -0
- package/assets/techne/rules/rust/security.md +33 -0
- package/assets/techne/rules/rust/testing.md +30 -0
- package/assets/techne/rules/swift/coding-style.md +30 -0
- package/assets/techne/rules/swift/hooks.md +20 -0
- package/assets/techne/rules/swift/patterns.md +30 -0
- package/assets/techne/rules/swift/security.md +22 -0
- package/assets/techne/rules/swift/testing.md +28 -0
- package/assets/techne/rules/typescript/coding-style.md +38 -0
- package/assets/techne/rules/typescript/hooks.md +14 -0
- package/assets/techne/rules/typescript/patterns.md +12 -0
- package/assets/techne/rules/typescript/security.md +14 -0
- package/assets/techne/rules/typescript/testing.md +12 -0
- package/assets/techne/rules/vue/coding-style.md +19 -0
- package/assets/techne/rules/vue/hooks.md +13 -0
- package/assets/techne/rules/vue/patterns.md +29 -0
- package/assets/techne/rules/vue/security.md +11 -0
- package/assets/techne/rules/vue/testing.md +11 -0
- package/assets/techne/rules/web/coding-style.md +25 -0
- package/assets/techne/rules/web/design-quality.md +21 -0
- package/assets/techne/rules/web/hooks.md +39 -0
- package/assets/techne/rules/web/patterns.md +23 -0
- package/assets/techne/rules/web/performance.md +25 -0
- package/assets/techne/rules/web/security.md +23 -0
- package/assets/techne/rules/web/testing.md +21 -0
- package/assets/techne/scripts/hooks/config-guard.js +50 -0
- package/assets/techne/scripts/hooks/edit-tracker.js +26 -0
- package/assets/techne/scripts/hooks/lib/shell.js +204 -0
- package/assets/techne/scripts/hooks/no-verify-guard.js +205 -0
- package/assets/techne/scripts/hooks/run.js +92 -0
- package/assets/techne/scripts/hooks/stop-checks.js +136 -0
- package/assets/techne/skills/angular/SKILL.md +34 -0
- package/assets/techne/skills/angular/reference/components-and-templates.md +63 -0
- package/assets/techne/skills/angular/reference/dependency-injection.md +44 -0
- package/assets/techne/skills/angular/reference/forms.md +97 -0
- package/assets/techne/skills/angular/reference/routing.md +50 -0
- package/assets/techne/skills/angular/reference/signals-and-state.md +59 -0
- package/assets/techne/skills/angular/reference/styling-motion-a11y.md +54 -0
- package/assets/techne/skills/angular/reference/testing.md +52 -0
- package/assets/techne/skills/angular/reference/tooling.md +31 -0
- package/assets/techne/skills/cpp/SKILL.md +27 -0
- package/assets/techne/skills/cpp/reference/coding-standards.md +160 -0
- package/assets/techne/skills/databases/SKILL.md +35 -0
- package/assets/techne/skills/databases/reference/clickhouse.md +102 -0
- package/assets/techne/skills/databases/reference/migrations.md +94 -0
- package/assets/techne/skills/databases/reference/mysql.md +101 -0
- package/assets/techne/skills/databases/reference/postgres.md +72 -0
- package/assets/techne/skills/databases/reference/prisma.md +105 -0
- package/assets/techne/skills/databases/reference/redis.md +108 -0
- package/assets/techne/skills/delivery/SKILL.md +35 -0
- package/assets/techne/skills/delivery/reference/deployment-patterns.md +58 -0
- package/assets/techne/skills/delivery/reference/docker-patterns.md +77 -0
- package/assets/techne/skills/delivery/reference/git-workflow.md +64 -0
- package/assets/techne/skills/delivery/reference/github-ops.md +67 -0
- package/assets/techne/skills/delivery/reference/jira-integration.md +53 -0
- package/assets/techne/skills/delivery/reference/kubernetes-patterns.md +67 -0
- package/assets/techne/skills/dotnet/SKILL.md +27 -0
- package/assets/techne/skills/dotnet/reference/dotnet-core.md +131 -0
- package/assets/techne/skills/flutter/SKILL.md +29 -0
- package/assets/techne/skills/flutter/reference/code-review.md +76 -0
- package/assets/techne/skills/flutter/reference/patterns.md +201 -0
- package/assets/techne/skills/go/SKILL.md +28 -0
- package/assets/techne/skills/go/reference/patterns.md +87 -0
- package/assets/techne/skills/go/reference/testing.md +142 -0
- package/assets/techne/skills/java/SKILL.md +29 -0
- package/assets/techne/skills/java/reference/java-standards.md +117 -0
- package/assets/techne/skills/java/reference/springboot.md +108 -0
- package/assets/techne/skills/kotlin/SKILL.md +35 -0
- package/assets/techne/skills/kotlin/reference/android-clean-architecture.md +115 -0
- package/assets/techne/skills/kotlin/reference/compose-multiplatform-patterns.md +113 -0
- package/assets/techne/skills/kotlin/reference/kotlin-coroutines-flows.md +93 -0
- package/assets/techne/skills/kotlin/reference/kotlin-patterns.md +74 -0
- package/assets/techne/skills/kotlin/reference/kotlin-testing.md +115 -0
- package/assets/techne/skills/ml/SKILL.md +34 -0
- package/assets/techne/skills/ml/reference/ai-regression-testing.md +99 -0
- package/assets/techne/skills/ml/reference/cost-aware-llm-pipeline.md +133 -0
- package/assets/techne/skills/ml/reference/eval-harness.md +94 -0
- package/assets/techne/skills/ml/reference/mle-workflow.md +177 -0
- package/assets/techne/skills/ml/reference/prompt-optimizer.md +107 -0
- package/assets/techne/skills/ml/reference/pytorch-patterns.md +164 -0
- package/assets/techne/skills/php/SKILL.md +27 -0
- package/assets/techne/skills/php/reference/laravel.md +142 -0
- package/assets/techne/skills/python/SKILL.md +33 -0
- package/assets/techne/skills/python/reference/django.md +104 -0
- package/assets/techne/skills/python/reference/fastapi.md +118 -0
- package/assets/techne/skills/python/reference/python-core.md +88 -0
- package/assets/techne/skills/python/reference/python-testing.md +105 -0
- package/assets/techne/skills/quality/SKILL.md +34 -0
- package/assets/techne/skills/quality/reference/benchmark.md +55 -0
- package/assets/techne/skills/quality/reference/browser-qa.md +60 -0
- package/assets/techne/skills/quality/reference/coding-standards.md +88 -0
- package/assets/techne/skills/quality/reference/e2e-testing.md +99 -0
- package/assets/techne/skills/quality/reference/tdd-workflow.md +89 -0
- package/assets/techne/skills/quality/reference/verification-loop.md +80 -0
- package/assets/techne/skills/react/SKILL.md +30 -0
- package/assets/techne/skills/react/reference/nextjs-turbopack.md +42 -0
- package/assets/techne/skills/react/reference/react-patterns.md +139 -0
- package/assets/techne/skills/react/reference/react-performance.md +101 -0
- package/assets/techne/skills/react/reference/react-testing.md +139 -0
- package/assets/techne/skills/react-native/SKILL.md +28 -0
- package/assets/techne/skills/react-native/reference/expo-patterns.md +196 -0
- package/assets/techne/skills/research/SKILL.md +35 -0
- package/assets/techne/skills/research/reference/architecture-decision-records.md +65 -0
- package/assets/techne/skills/research/reference/codebase-onboarding.md +44 -0
- package/assets/techne/skills/research/reference/deep-research.md +50 -0
- package/assets/techne/skills/research/reference/iterative-retrieval.md +62 -0
- package/assets/techne/skills/research/reference/product-lens.md +38 -0
- package/assets/techne/skills/research/reference/search-first.md +50 -0
- package/assets/techne/skills/rust/SKILL.md +28 -0
- package/assets/techne/skills/rust/reference/patterns.md +108 -0
- package/assets/techne/skills/rust/reference/testing.md +142 -0
- package/assets/techne/skills/services/SKILL.md +32 -0
- package/assets/techne/skills/services/reference/api-contracts.md +139 -0
- package/assets/techne/skills/services/reference/backend-layers.md +95 -0
- package/assets/techne/skills/services/reference/errors-and-resilience.md +146 -0
- package/assets/techne/skills/services/reference/hexagonal-boundaries.md +93 -0
- package/assets/techne/skills/services/reference/mcp-servers.md +50 -0
- package/assets/techne/skills/services/reference/nestjs.md +96 -0
- package/assets/techne/skills/swift/SKILL.md +29 -0
- package/assets/techne/skills/swift/reference/concurrency.md +83 -0
- package/assets/techne/skills/swift/reference/swiftui.md +139 -0
- package/assets/techne/skills/vue/SKILL.md +29 -0
- package/assets/techne/skills/vue/reference/nuxt4-patterns.md +90 -0
- package/assets/techne/skills/vue/reference/ui-to-vue.md +90 -0
- package/assets/techne/skills/vue/reference/vue-patterns.md +151 -0
- package/assets/techne/skills/web/SKILL.md +30 -0
- package/assets/techne/skills/web/reference/bun-runtime.md +55 -0
- package/assets/techne/skills/web/reference/frontend-patterns.md +54 -0
- package/assets/techne/skills/web/reference/seo.md +77 -0
- package/assets/techne/skills/web/reference/vite-patterns.md +96 -0
- package/bin/native.cjs +30 -0
- package/native/aarch64-apple-darwin/exonous +0 -0
- package/native/aarch64-unknown-linux-gnu/exonous +0 -0
- package/native/x86_64-apple-darwin/exonous +0 -0
- package/native/x86_64-pc-windows-msvc/exonous.exe +0 -0
- package/native/x86_64-unknown-linux-gnu/exonous +0 -0
- package/package.json +1 -6
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.rb"
|
|
4
|
+
- "**/*.rake"
|
|
5
|
+
- "**/Gemfile"
|
|
6
|
+
- "**/*.gemspec"
|
|
7
|
+
- "**/config.ru"
|
|
8
|
+
---
|
|
9
|
+
# Ruby Coding Style
|
|
10
|
+
|
|
11
|
+
> Builds on the shared rules in `../common/coding-style.md`.
|
|
12
|
+
|
|
13
|
+
## Runtime
|
|
14
|
+
|
|
15
|
+
Target Ruby 3.3+ on new Rails apps; respect an existing pin to an older supported release. Enable YJIT in production only after measuring memory and throughput.
|
|
16
|
+
|
|
17
|
+
## Files
|
|
18
|
+
|
|
19
|
+
`# frozen_string_literal: true` when the repo uses it; keep metaprogramming behind small, tested APIs.
|
|
20
|
+
|
|
21
|
+
## Lint
|
|
22
|
+
|
|
23
|
+
Project RuboCop config (Rails 8+ often starts from omakase); run via binstub:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
bundle exec rubocop
|
|
27
|
+
bundle exec rubocop -A
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Narrow inline disables only with justification.
|
|
31
|
+
|
|
32
|
+
## Rails
|
|
33
|
+
|
|
34
|
+
MVC conventions first; thin controllers; domain in models/services/query/form objects as complexity demands; prefer `bin/rails` / binstubs.
|
|
35
|
+
|
|
36
|
+
## Errors
|
|
37
|
+
|
|
38
|
+
Rescue specific exceptions; log operations — no committed `puts`/`debugger`.
|
|
39
|
+
|
|
40
|
+
Layering: `techne:services` skill.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.rb"
|
|
4
|
+
- "**/*.rake"
|
|
5
|
+
- "**/Gemfile"
|
|
6
|
+
- "**/Gemfile.lock"
|
|
7
|
+
- "**/config/routes.rb"
|
|
8
|
+
---
|
|
9
|
+
# Ruby Hooks
|
|
10
|
+
|
|
11
|
+
> Builds on the shared rules in `../common/hooks.md`.
|
|
12
|
+
|
|
13
|
+
`EXONOUS_HOOK_PROFILE` / `EXONOUS_DISABLED_HOOKS`.
|
|
14
|
+
|
|
15
|
+
## PostToolUse
|
|
16
|
+
|
|
17
|
+
- **RuboCop** (`bundle exec rubocop -A` or project script)
|
|
18
|
+
- **Brakeman** after security-sensitive Rails edits
|
|
19
|
+
- Narrowest **bin/rails test** / **rspec** for touched paths
|
|
20
|
+
- **bundle-audit** when Gemfile/lock changes (if installed)
|
|
21
|
+
|
|
22
|
+
## Warnings
|
|
23
|
+
|
|
24
|
+
Debug helpers (`binding.pry`, `debugger`, `puts`) in app code; CSRF off; unsafe mass assignment; raw SQL.
|
|
25
|
+
|
|
26
|
+
## CI (use what exists)
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
bundle exec rubocop
|
|
30
|
+
bundle exec brakeman --no-progress
|
|
31
|
+
bin/rails test
|
|
32
|
+
bundle exec rspec
|
|
33
|
+
```
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.rb"
|
|
4
|
+
- "**/*.rake"
|
|
5
|
+
- "**/Gemfile"
|
|
6
|
+
- "**/app/**/*.erb"
|
|
7
|
+
- "**/config/routes.rb"
|
|
8
|
+
---
|
|
9
|
+
# Ruby Patterns
|
|
10
|
+
|
|
11
|
+
> Builds on the shared rules in `../common/patterns.md`.
|
|
12
|
+
|
|
13
|
+
## Rails first
|
|
14
|
+
|
|
15
|
+
MVC until boundaries blur — then extract named service/query/form objects (verb names, not `Manager`).
|
|
16
|
+
|
|
17
|
+
## Data store
|
|
18
|
+
|
|
19
|
+
PostgreSQL for typical multi-host production; SQLite defaults suit single-host — match platform reality. Parameterize all dynamic SQL.
|
|
20
|
+
|
|
21
|
+
## Jobs
|
|
22
|
+
|
|
23
|
+
Solid Queue for simple Rails 8 deployments; Sidekiq when Redis ops, throughput, or mature tooling already exist. Solid Cache/Cable vs Redis — match deployment needs.
|
|
24
|
+
|
|
25
|
+
## UI
|
|
26
|
+
|
|
27
|
+
Hotwire (Turbo/Stimulus/importmap) for server-rendered apps; SPA/Inertia when complexity or team ownership requires it. No persistence/auth in templates.
|
|
28
|
+
|
|
29
|
+
## Auth
|
|
30
|
+
|
|
31
|
+
Rails 8 generator for basic session auth; Devise (or similar) for OAuth/MFA/legacy Devise apps.
|
|
32
|
+
|
|
33
|
+
Boundaries: `techne:services` skill.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.rb"
|
|
4
|
+
- "**/*.rake"
|
|
5
|
+
- "**/Gemfile"
|
|
6
|
+
- "**/Gemfile.lock"
|
|
7
|
+
- "**/config/routes.rb"
|
|
8
|
+
- "**/config/credentials*.yml.enc"
|
|
9
|
+
---
|
|
10
|
+
# Ruby Security
|
|
11
|
+
|
|
12
|
+
> Builds on the shared rules in `../common/security.md`.
|
|
13
|
+
|
|
14
|
+
## Rails defaults
|
|
15
|
+
|
|
16
|
+
CSRF on; strong parameters or typed params; secrets in credentials/env/vault — never plaintext in git.
|
|
17
|
+
|
|
18
|
+
## SQL
|
|
19
|
+
|
|
20
|
+
ActiveRecord/query APIs or bound SQL — never interpolate request/job/webhook data into strings.
|
|
21
|
+
|
|
22
|
+
## Sessions
|
|
23
|
+
|
|
24
|
+
Rotate on login/elevation; rate-limit and audit recovery flows.
|
|
25
|
+
|
|
26
|
+
## Dependencies
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
bundle exec bundle-audit check --update
|
|
30
|
+
bundle exec brakeman --no-progress
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Review new gems for maintenance and native extension risk.
|
|
34
|
+
|
|
35
|
+
## Web
|
|
36
|
+
|
|
37
|
+
Default HTML escaping; treat `html_safe`/`raw` as security code; validate uploads; treat jobs/cable/turbo streams as untrusted input.
|
|
38
|
+
|
|
39
|
+
Review: `security-review` skill / `exo-security` agent.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.rb"
|
|
4
|
+
- "**/*.rake"
|
|
5
|
+
- "**/Gemfile"
|
|
6
|
+
- "**/test/**/*.rb"
|
|
7
|
+
- "**/spec/**/*.rb"
|
|
8
|
+
- "**/config/routes.rb"
|
|
9
|
+
---
|
|
10
|
+
# Ruby Testing
|
|
11
|
+
|
|
12
|
+
> Builds on the shared rules in `../common/testing.md`.
|
|
13
|
+
|
|
14
|
+
## Framework
|
|
15
|
+
|
|
16
|
+
Minitest when that is the app default; RSpec when established — do not mix in one feature without a migration plan.
|
|
17
|
+
|
|
18
|
+
## Pyramid
|
|
19
|
+
|
|
20
|
+
Model/service/job/policy unit tests; request specs for HTTP/auth/status; system tests only for critical browser flows; job unit + enqueue integration.
|
|
21
|
+
|
|
22
|
+
## Data
|
|
23
|
+
|
|
24
|
+
Fixtures for small graphs; factory_bot when traits/composition matter.
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
bin/rails test
|
|
28
|
+
bundle exec rspec
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Coverage
|
|
32
|
+
|
|
33
|
+
SimpleCov thresholds in CI; regression test before fixing production bugs.
|
|
34
|
+
|
|
35
|
+
Loop: `techne:quality` skill.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.rs"
|
|
4
|
+
---
|
|
5
|
+
# Rust Coding Style
|
|
6
|
+
|
|
7
|
+
> Builds on the shared rules in `../common/coding-style.md`.
|
|
8
|
+
|
|
9
|
+
## Format
|
|
10
|
+
|
|
11
|
+
`cargo fmt`; `cargo clippy -- -D warnings`; 100-col lines (rustfmt default).
|
|
12
|
+
|
|
13
|
+
## Immutability
|
|
14
|
+
|
|
15
|
+
Default `let`; `let mut` only when needed; return new values; `Cow` when borrow vs allocate is conditional.
|
|
16
|
+
|
|
17
|
+
## Naming
|
|
18
|
+
|
|
19
|
+
`snake_case` values/modules; `PascalCase` types; `SCREAMING_SNAKE_CASE` consts.
|
|
20
|
+
|
|
21
|
+
## Borrowing
|
|
22
|
+
|
|
23
|
+
Prefer `&str`, `&[T]` parameters; `impl Into<String>` when storing owned strings; avoid clone-to-placate the checker without understanding why.
|
|
24
|
+
|
|
25
|
+
## Errors
|
|
26
|
+
|
|
27
|
+
`Result` + `?`; libraries: `thiserror`; binaries: `anyhow` + `.context(...)`. No `unwrap` in production paths.
|
|
28
|
+
|
|
29
|
+
## Iterators vs loops
|
|
30
|
+
|
|
31
|
+
Chains for transforms; loops when control flow is irregular.
|
|
32
|
+
|
|
33
|
+
## Modules
|
|
34
|
+
|
|
35
|
+
Group by domain (`auth/`, `billing/`), not by layer file type.
|
|
36
|
+
|
|
37
|
+
## Visibility
|
|
38
|
+
|
|
39
|
+
Private by default; `pub(crate)` for internal API; re-export public surface from `lib.rs`.
|
|
40
|
+
|
|
41
|
+
Depth: `techne:rust` skill.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.rs"
|
|
4
|
+
- "**/Cargo.toml"
|
|
5
|
+
---
|
|
6
|
+
# Rust Hooks
|
|
7
|
+
|
|
8
|
+
> Builds on the shared rules in `../common/hooks.md`.
|
|
9
|
+
|
|
10
|
+
`EXONOUS_HOOK_PROFILE` / `EXONOUS_DISABLED_HOOKS` gate automation.
|
|
11
|
+
|
|
12
|
+
## PostToolUse
|
|
13
|
+
|
|
14
|
+
- **cargo fmt**
|
|
15
|
+
- **cargo clippy**
|
|
16
|
+
- **cargo check** (strict: after non-trivial edits)
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.rs"
|
|
4
|
+
---
|
|
5
|
+
# Rust Patterns
|
|
6
|
+
|
|
7
|
+
> Builds on the shared rules in `../common/patterns.md`.
|
|
8
|
+
|
|
9
|
+
## Repository trait
|
|
10
|
+
|
|
11
|
+
```rust
|
|
12
|
+
pub trait Ledger: Send + Sync {
|
|
13
|
+
fn by_id(&self, id: u64) -> Result<Option<Entry>, StoreErr>;
|
|
14
|
+
fn save(&self, row: &Entry) -> Result<Entry, StoreErr>;
|
|
15
|
+
}
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Services
|
|
19
|
+
|
|
20
|
+
Struct + constructor injecting `Box<dyn Ledger>` (or generics); business methods call traits, not concrete DB types.
|
|
21
|
+
|
|
22
|
+
## Newtypes
|
|
23
|
+
|
|
24
|
+
Wrap ids (`struct AccountId(u64)`) to prevent argument swaps.
|
|
25
|
+
|
|
26
|
+
## State enums
|
|
27
|
+
|
|
28
|
+
Model connection lifecycle as enum; match exhaustively — no catch-all on critical variants.
|
|
29
|
+
|
|
30
|
+
## Builders
|
|
31
|
+
|
|
32
|
+
Fluent builder for configs with many optional fields.
|
|
33
|
+
|
|
34
|
+
## Sealed traits
|
|
35
|
+
|
|
36
|
+
Private `Sealed` supertrait to block external impls when extension must stay internal.
|
|
37
|
+
|
|
38
|
+
## JSON envelope
|
|
39
|
+
|
|
40
|
+
Tagged enum with `serde` for `{ "status": "ok" | "error" }` responses.
|
|
41
|
+
|
|
42
|
+
Depth: `techne:rust` skill.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.rs"
|
|
4
|
+
---
|
|
5
|
+
# Rust Security
|
|
6
|
+
|
|
7
|
+
> Builds on the shared rules in `../common/security.md`.
|
|
8
|
+
|
|
9
|
+
## Secrets
|
|
10
|
+
|
|
11
|
+
`std::env::var` at startup; `.gitignore` for local env files; no const secrets.
|
|
12
|
+
|
|
13
|
+
## SQL
|
|
14
|
+
|
|
15
|
+
Bound parameters via sqlx/diesel/sea-orm — never format user input into SQL strings.
|
|
16
|
+
|
|
17
|
+
## Validation
|
|
18
|
+
|
|
19
|
+
Newtypes + parse-at-boundary; reject early with typed errors.
|
|
20
|
+
|
|
21
|
+
## Unsafe
|
|
22
|
+
|
|
23
|
+
Minimal blocks; mandatory `// SAFETY:` listing invariants; review every `unsafe`.
|
|
24
|
+
|
|
25
|
+
## Dependencies
|
|
26
|
+
|
|
27
|
+
`cargo audit`, `cargo deny check`, `cargo tree`; keep deps lean and updated.
|
|
28
|
+
|
|
29
|
+
## Responses
|
|
30
|
+
|
|
31
|
+
Generic client errors; `tracing` for server detail.
|
|
32
|
+
|
|
33
|
+
Review: `security-review` skill / `exo-security` agent. Idioms: `techne:rust` skill.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.rs"
|
|
4
|
+
---
|
|
5
|
+
# Rust Testing
|
|
6
|
+
|
|
7
|
+
> Builds on the shared rules in `../common/testing.md`.
|
|
8
|
+
|
|
9
|
+
## Tools
|
|
10
|
+
|
|
11
|
+
`#[test]` modules; **rstest** for cases; **proptest** for properties; **mockall** for trait mocks; **`#[tokio::test]`** for async.
|
|
12
|
+
|
|
13
|
+
## Layout
|
|
14
|
+
|
|
15
|
+
Unit tests in `#[cfg(test)]` beside code; integration tests under `tests/`; shared helpers in `tests/common/`.
|
|
16
|
+
|
|
17
|
+
## Mocks
|
|
18
|
+
|
|
19
|
+
Define traits in production; `mockall::mock!` in test modules with expectations.
|
|
20
|
+
|
|
21
|
+
## Coverage
|
|
22
|
+
|
|
23
|
+
~80% with **cargo-llvm-cov**; exclude generated/FFI glue.
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
cargo test
|
|
27
|
+
cargo llvm-cov --fail-under-lines 80
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Depth: `techne:rust` skill (testing reference).
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.swift"
|
|
4
|
+
- "**/Package.swift"
|
|
5
|
+
---
|
|
6
|
+
# Swift Coding Style
|
|
7
|
+
|
|
8
|
+
> Builds on the shared rules in `../common/coding-style.md`.
|
|
9
|
+
|
|
10
|
+
## Format
|
|
11
|
+
|
|
12
|
+
SwiftFormat + SwiftLint (or Xcode 16+ `swift-format` if that is the repo standard).
|
|
13
|
+
|
|
14
|
+
## Values
|
|
15
|
+
|
|
16
|
+
Prefer `let`; structs by default; classes only for identity/reference semantics.
|
|
17
|
+
|
|
18
|
+
## Naming
|
|
19
|
+
|
|
20
|
+
Apple API Design Guidelines — clarity at call site; omit redundant type words; `static let` for constants.
|
|
21
|
+
|
|
22
|
+
## Errors
|
|
23
|
+
|
|
24
|
+
Typed throws (Swift 6+) where applicable; structured `LoadError`-style enums.
|
|
25
|
+
|
|
26
|
+
## Concurrency
|
|
27
|
+
|
|
28
|
+
Strict concurrency checking; `Sendable` values across actors; actors for shared mutation; structured concurrency over detached tasks.
|
|
29
|
+
|
|
30
|
+
Depth: `techne:swift` skill.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.swift"
|
|
4
|
+
- "**/Package.swift"
|
|
5
|
+
---
|
|
6
|
+
# Swift Hooks
|
|
7
|
+
|
|
8
|
+
> Builds on the shared rules in `../common/hooks.md`.
|
|
9
|
+
|
|
10
|
+
`EXONOUS_HOOK_PROFILE` / `EXONOUS_DISABLED_HOOKS`.
|
|
11
|
+
|
|
12
|
+
## PostToolUse
|
|
13
|
+
|
|
14
|
+
- **SwiftFormat**
|
|
15
|
+
- **SwiftLint**
|
|
16
|
+
- **swift build** on package edits (standard/strict)
|
|
17
|
+
|
|
18
|
+
## Warnings
|
|
19
|
+
|
|
20
|
+
Flag `print()` — prefer `os.Logger` or structured logging.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.swift"
|
|
4
|
+
- "**/Package.swift"
|
|
5
|
+
---
|
|
6
|
+
# Swift Patterns
|
|
7
|
+
|
|
8
|
+
> Builds on the shared rules in `../common/patterns.md`.
|
|
9
|
+
|
|
10
|
+
## Protocols
|
|
11
|
+
|
|
12
|
+
Small `Sendable` protocols; default implementations in extensions.
|
|
13
|
+
|
|
14
|
+
## State enums
|
|
15
|
+
|
|
16
|
+
```swift
|
|
17
|
+
enum FetchPhase<T: Sendable>: Sendable {
|
|
18
|
+
case idle, working, done(T), broken(Error)
|
|
19
|
+
}
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Actors
|
|
23
|
+
|
|
24
|
+
Shared caches/registries as actors instead of manual locks.
|
|
25
|
+
|
|
26
|
+
## DI
|
|
27
|
+
|
|
28
|
+
Protocol parameters with production defaults; inject test doubles in tests.
|
|
29
|
+
|
|
30
|
+
Depth: `techne:swift` skill (concurrency, SwiftUI, testing).
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.swift"
|
|
4
|
+
- "**/Package.swift"
|
|
5
|
+
---
|
|
6
|
+
# Swift Security
|
|
7
|
+
|
|
8
|
+
> Builds on the shared rules in `../common/security.md`.
|
|
9
|
+
|
|
10
|
+
## Secrets
|
|
11
|
+
|
|
12
|
+
Keychain for tokens/passwords — not UserDefaults; build-time via `.xcconfig`/env; no literals in repo.
|
|
13
|
+
|
|
14
|
+
## Transport
|
|
15
|
+
|
|
16
|
+
Keep ATS enabled; pin certs for high-value endpoints; validate server trust.
|
|
17
|
+
|
|
18
|
+
## Input
|
|
19
|
+
|
|
20
|
+
Sanitize before render; validate `URL` and deep links; treat API/pasteboard data as untrusted until validated.
|
|
21
|
+
|
|
22
|
+
Review: `security-review` skill / `exo-security` agent.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.swift"
|
|
4
|
+
- "**/Package.swift"
|
|
5
|
+
---
|
|
6
|
+
# Swift Testing
|
|
7
|
+
|
|
8
|
+
> Builds on the shared rules in `../common/testing.md`.
|
|
9
|
+
|
|
10
|
+
## Framework
|
|
11
|
+
|
|
12
|
+
Swift Testing (`import Testing`) — `@Test`, `#expect`, `#require`.
|
|
13
|
+
|
|
14
|
+
## Isolation
|
|
15
|
+
|
|
16
|
+
Per-test setup in `init`/`deinit`; no shared mutable globals.
|
|
17
|
+
|
|
18
|
+
## Parameterized
|
|
19
|
+
|
|
20
|
+
`@Test(arguments: [...])` for matrix cases.
|
|
21
|
+
|
|
22
|
+
## Coverage
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
swift test --enable-code-coverage
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Depth: `techne:swift` skill (DI and mocks with Swift Testing).
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.ts"
|
|
4
|
+
- "**/*.tsx"
|
|
5
|
+
- "**/*.js"
|
|
6
|
+
- "**/*.jsx"
|
|
7
|
+
---
|
|
8
|
+
> Builds on the shared rules in `../common/coding-style.md`.
|
|
9
|
+
|
|
10
|
+
# TypeScript / JavaScript style
|
|
11
|
+
|
|
12
|
+
## Typing policy
|
|
13
|
+
|
|
14
|
+
- Exported functions, public class methods, and shared DTOs: explicit parameter + return types
|
|
15
|
+
- Locals: infer when obvious
|
|
16
|
+
- Repeated inline object shapes → named `type`/`interface`
|
|
17
|
+
|
|
18
|
+
`interface` for extend/implement shapes; `type` for unions, tuples, mapped types. Prefer string union literals over `enum` unless generating API contracts that require enums.
|
|
19
|
+
|
|
20
|
+
## Safety
|
|
21
|
+
|
|
22
|
+
Ban `any` in application code. External payloads: `unknown` + narrowing (`instanceof`, type guards, schema parse).
|
|
23
|
+
|
|
24
|
+
React props: dedicated `Props` type; skip `React.FC` unless children typing demands it.
|
|
25
|
+
|
|
26
|
+
## Data handling
|
|
27
|
+
|
|
28
|
+
Updates clone via spread/`Readonly` rather than mutating arguments.
|
|
29
|
+
|
|
30
|
+
`async`/`await` with `catch (err: unknown)` funneled through a small `getErrorMessage` helper.
|
|
31
|
+
|
|
32
|
+
## Validation
|
|
33
|
+
|
|
34
|
+
Zod (or equivalent) at IO edges; export inferred types via `z.infer`.
|
|
35
|
+
|
|
36
|
+
## Logging
|
|
37
|
+
|
|
38
|
+
No stray `console.log` in committed code — use the project logger; hooks may warn on debug prints in edited files.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.ts"
|
|
4
|
+
- "**/*.tsx"
|
|
5
|
+
- "**/*.js"
|
|
6
|
+
- "**/*.jsx"
|
|
7
|
+
---
|
|
8
|
+
> Builds on the shared rules in `../common/hooks.md`.
|
|
9
|
+
|
|
10
|
+
# TypeScript hooks
|
|
11
|
+
|
|
12
|
+
PostToolUse: Prettier, `tsc`, warn on `console.log` in touched files. Stop: scan session edits for debug logs.
|
|
13
|
+
|
|
14
|
+
Profile: `EXONOUS_HOOK_PROFILE`, `EXONOUS_DISABLED_HOOKS`.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.ts"
|
|
4
|
+
- "**/*.tsx"
|
|
5
|
+
- "**/*.js"
|
|
6
|
+
- "**/*.jsx"
|
|
7
|
+
---
|
|
8
|
+
> Builds on the shared rules in `../common/patterns.md`.
|
|
9
|
+
|
|
10
|
+
# TypeScript patterns
|
|
11
|
+
|
|
12
|
+
Typed API envelope (`success`, `data`, `error`, optional `meta`). Generic repository interface for persistence. Shared hooks (debounce, etc.) colocated under `hooks/`.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.ts"
|
|
4
|
+
- "**/*.tsx"
|
|
5
|
+
- "**/*.js"
|
|
6
|
+
- "**/*.jsx"
|
|
7
|
+
---
|
|
8
|
+
> Builds on the shared rules in `../common/security.md`.
|
|
9
|
+
|
|
10
|
+
# TypeScript security
|
|
11
|
+
|
|
12
|
+
Read secrets from `process.env`; throw at startup if missing. Never embed keys in source.
|
|
13
|
+
|
|
14
|
+
Use **exo-security** / `security-review` for audits.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.ts"
|
|
4
|
+
- "**/*.tsx"
|
|
5
|
+
- "**/*.js"
|
|
6
|
+
- "**/*.jsx"
|
|
7
|
+
---
|
|
8
|
+
> Builds on the shared rules in `../common/testing.md`.
|
|
9
|
+
|
|
10
|
+
# TypeScript testing
|
|
11
|
+
|
|
12
|
+
Playwright for critical E2E flows unless the repo standard differs. Component/unit via project runner (often Vitest/Jest).
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.vue"
|
|
4
|
+
---
|
|
5
|
+
> Builds on the shared rules in `../common/coding-style.md`.
|
|
6
|
+
|
|
7
|
+
# Vue coding style
|
|
8
|
+
|
|
9
|
+
`<script setup lang="ts">` only for new work. Order: script, template, scoped style. PascalCase SFC names; `use*` composables.
|
|
10
|
+
|
|
11
|
+
`ref` primary; `.value` in script; no destructuring reactive/Pinia without `toRefs`/`storeToRefs`.
|
|
12
|
+
|
|
13
|
+
Pure `computed`; lazy `watch` with getters; `watchEffect` stops tracking after first `await`.
|
|
14
|
+
|
|
15
|
+
Lifecycle registered synchronously in setup; cleanup on unmount; DOM reads after `nextTick`.
|
|
16
|
+
|
|
17
|
+
Macros: typed props/emits; `defineModel` for v-model; stable `:key` on `v-for` (never index); never `v-if` + `v-for` same element.
|
|
18
|
+
|
|
19
|
+
**techne:vue** skill for depth.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.vue"
|
|
4
|
+
- "**/*.ts"
|
|
5
|
+
- "**/*.tsx"
|
|
6
|
+
---
|
|
7
|
+
> Builds on the shared rules in `../common/hooks.md`.
|
|
8
|
+
|
|
9
|
+
# Vue harness hooks
|
|
10
|
+
|
|
11
|
+
After edits: eslint (vue plugin) + Prettier per file; debounced project `vue-tsc --noEmit` (not plain `tsc` for SFCs).
|
|
12
|
+
|
|
13
|
+
Optional boundary lint (FSD/steiger). `EXONOUS_HOOK_PROFILE`, `EXONOUS_DISABLED_HOOKS`.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.vue"
|
|
4
|
+
---
|
|
5
|
+
> Builds on the shared rules in `../common/patterns.md`.
|
|
6
|
+
|
|
7
|
+
# Vue patterns
|
|
8
|
+
|
|
9
|
+
## Composables
|
|
10
|
+
|
|
11
|
+
Export `useFeature()` accepting `MaybeRefOrGetter` inputs (`toValue` inside). Return `toRefs(reactiveState)` so callers can destructure safely.
|
|
12
|
+
|
|
13
|
+
If the composable registers lifecycle hooks or `provide`, call it synchronously from `setup` only.
|
|
14
|
+
|
|
15
|
+
## State split
|
|
16
|
+
|
|
17
|
+
Pinia (client/domain) vs `@tanstack/vue-query` (server cache). Keep fetch functions + `queryOptions` factories in an `api/` layer.
|
|
18
|
+
|
|
19
|
+
Query keys must include reactive refs/computed objects — **not** `.value` snapshots — or refetch breaks.
|
|
20
|
+
|
|
21
|
+
## Router
|
|
22
|
+
|
|
23
|
+
Lazy `import()` route components. Global guard checks `meta.requiresAuth`. Watch `() => route.params.id` instead of the whole route object.
|
|
24
|
+
|
|
25
|
+
## Provide / inject
|
|
26
|
+
|
|
27
|
+
Use `Symbol` keys typed with `InjectionKey<T>`. Expose readonly state + explicit mutators.
|
|
28
|
+
|
|
29
|
+
**techne:vue** skill for FSD/Nuxt overlap.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.vue"
|
|
4
|
+
---
|
|
5
|
+
> Builds on the shared rules in `../common/security.md`.
|
|
6
|
+
|
|
7
|
+
# Vue security
|
|
8
|
+
|
|
9
|
+
`{{ }}` and bound attrs escape; `v-html` and dynamic `:is` from users do not. Sanitize HTML; block `javascript:` in URLs; never bind user strings to `:style` objects or event attrs.
|
|
10
|
+
|
|
11
|
+
`import.meta.env.VITE_*` is public. Sessions via httpOnly cookies.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.vue"
|
|
4
|
+
---
|
|
5
|
+
> Builds on the shared rules in `../common/testing.md`.
|
|
6
|
+
|
|
7
|
+
# Vue testing
|
|
8
|
+
|
|
9
|
+
Vitest + `@vue/test-utils`; `happy-dom`/`jsdom`. `mount` vs `shallowMount`; await `trigger`/`setValue`.
|
|
10
|
+
|
|
11
|
+
Test props/emits/slots — not internals. Pinia: `createTestingPinia` or isolated store per test.
|