@synapta/skills 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +11 -4
- package/package.json +3 -4
- package/skills/ATTRIBUTION.md +80 -0
- package/skills/accessibility-audit/SKILL.md +325 -0
- package/skills/accessibility-audit/reference/wcag-checklist.md +103 -0
- package/skills/apns-notifier/SKILL.md +86 -0
- package/skills/approval-policy-enforcer/SKILL.md +66 -0
- package/skills/apps-sdk-builder/LICENSE.txt +201 -0
- package/skills/apps-sdk-builder/SKILL.md +328 -0
- package/skills/apps-sdk-builder/agents/openai.yaml +13 -0
- package/skills/apps-sdk-builder/references/app-archetypes.md +132 -0
- package/skills/apps-sdk-builder/references/apps-sdk-docs-workflow.md +135 -0
- package/skills/apps-sdk-builder/references/interactive-state-sync-patterns.md +113 -0
- package/skills/apps-sdk-builder/references/repo-contract-and-validation.md +93 -0
- package/skills/apps-sdk-builder/references/search-fetch-standard.md +67 -0
- package/skills/apps-sdk-builder/references/upstream-example-workflow.md +79 -0
- package/skills/apps-sdk-builder/references/window-openai-patterns.md +79 -0
- package/skills/apps-sdk-builder/scripts/scaffold_node_ext_apps.mjs +606 -0
- package/skills/architecture-selector/SKILL.md +64 -0
- package/skills/backlog-planner/SKILL.md +68 -0
- package/skills/carplay-entitlement-checker/SKILL.md +82 -0
- package/skills/concept-discovery/SKILL.md +517 -0
- package/skills/concept-discovery/assets/sample-analysis.json +81 -0
- package/skills/concept-discovery/expected_outputs/sample-enum-dictionary.md +25 -0
- package/skills/concept-discovery/expected_outputs/sample-page-user-list.md +83 -0
- package/skills/concept-discovery/expected_outputs/sample-prd-readme.md +43 -0
- package/skills/concept-discovery/references/framework-patterns.md +228 -0
- package/skills/concept-discovery/references/prd-quality-checklist.md +65 -0
- package/skills/concept-discovery/scripts/codebase_analyzer.py +732 -0
- package/skills/concept-discovery/scripts/prd_scaffolder.py +435 -0
- package/skills/dast-zap/SKILL.md +453 -0
- package/skills/dast-zap/assets/.gitkeep +9 -0
- package/skills/dast-zap/assets/github_action.yml +207 -0
- package/skills/dast-zap/assets/gitlab_ci.yml +226 -0
- package/skills/dast-zap/assets/zap_automation.yaml +196 -0
- package/skills/dast-zap/assets/zap_context.xml +192 -0
- package/skills/dast-zap/references/EXAMPLE.md +40 -0
- package/skills/dast-zap/references/api_testing_guide.md +475 -0
- package/skills/dast-zap/references/authentication_guide.md +431 -0
- package/skills/dast-zap/references/false_positive_handling.md +427 -0
- package/skills/dast-zap/references/owasp_mapping.md +255 -0
- package/skills/dep-sbom-scan/SKILL.md +466 -0
- package/skills/deploy-cloudflare/SKILL.md +930 -0
- package/skills/deploy-docker/SKILL.md +55 -0
- package/skills/deploy-fly/SKILL.md +228 -0
- package/skills/deploy-k8s/SKILL.md +108 -0
- package/skills/deploy-k8s/assets/logo.png +0 -0
- package/skills/deploy-k8s/docs/README.md +29 -0
- package/skills/deploy-k8s/docs/SUMMARY.md +56 -0
- package/skills/deploy-k8s/docs/advanced/token-efficiency.md +61 -0
- package/skills/deploy-k8s/docs/architecture/multi-tenancy.md +96 -0
- package/skills/deploy-k8s/docs/architecture/storage-and-state.md +102 -0
- package/skills/deploy-k8s/docs/architecture/workload-patterns.md +87 -0
- package/skills/deploy-k8s/docs/book.json +16 -0
- package/skills/deploy-k8s/docs/community/changelog.md +34 -0
- package/skills/deploy-k8s/docs/community/contributing.md +67 -0
- package/skills/deploy-k8s/docs/core-concepts/failure-modes.md +153 -0
- package/skills/deploy-k8s/docs/core-concepts/philosophy.md +83 -0
- package/skills/deploy-k8s/docs/core-concepts/workflow.md +124 -0
- package/skills/deploy-k8s/docs/examples/bad-patterns.md +47 -0
- package/skills/deploy-k8s/docs/examples/do-dont-checklist.md +37 -0
- package/skills/deploy-k8s/docs/examples/good-patterns.md +49 -0
- package/skills/deploy-k8s/docs/failure-modes/api-drift.md +104 -0
- package/skills/deploy-k8s/docs/failure-modes/fragile-rollouts.md +99 -0
- package/skills/deploy-k8s/docs/failure-modes/insecure-workload-defaults.md +80 -0
- package/skills/deploy-k8s/docs/failure-modes/network-exposure.md +98 -0
- package/skills/deploy-k8s/docs/failure-modes/privilege-sprawl.md +91 -0
- package/skills/deploy-k8s/docs/failure-modes/resource-starvation.md +85 -0
- package/skills/deploy-k8s/docs/getting-started/installation.md +152 -0
- package/skills/deploy-k8s/docs/getting-started/quick-start.md +115 -0
- package/skills/deploy-k8s/docs/guides/helm-patterns.md +71 -0
- package/skills/deploy-k8s/docs/guides/kustomize-patterns.md +65 -0
- package/skills/deploy-k8s/docs/guides/observability.md +67 -0
- package/skills/deploy-k8s/docs/guides/security-hardening.md +59 -0
- package/skills/deploy-k8s/docs/guides/validation-and-policy.md +66 -0
- package/skills/deploy-k8s/docs/integrations/mcp-integration.md +52 -0
- package/skills/deploy-k8s/docs/package-lock.json +2892 -0
- package/skills/deploy-k8s/docs/package.json +13 -0
- package/skills/deploy-k8s/references/api-drift.md +298 -0
- package/skills/deploy-k8s/references/conditional/aks-patterns.md +70 -0
- package/skills/deploy-k8s/references/conditional/eks-patterns.md +79 -0
- package/skills/deploy-k8s/references/conditional/gitops-controllers.md +71 -0
- package/skills/deploy-k8s/references/conditional/gke-patterns.md +74 -0
- package/skills/deploy-k8s/references/conditional/observability-stacks.md +80 -0
- package/skills/deploy-k8s/references/conditional/openshift-patterns.md +67 -0
- package/skills/deploy-k8s/references/daemonset-operator-patterns.md +155 -0
- package/skills/deploy-k8s/references/deployment-patterns.md +146 -0
- package/skills/deploy-k8s/references/do-dont-patterns.md +87 -0
- package/skills/deploy-k8s/references/examples-bad.md +282 -0
- package/skills/deploy-k8s/references/examples-good.md +440 -0
- package/skills/deploy-k8s/references/fragile-rollouts.md +303 -0
- package/skills/deploy-k8s/references/helm-patterns.md +203 -0
- package/skills/deploy-k8s/references/insecure-workload-defaults.md +300 -0
- package/skills/deploy-k8s/references/job-patterns.md +120 -0
- package/skills/deploy-k8s/references/kustomize-patterns.md +239 -0
- package/skills/deploy-k8s/references/multi-tenancy.md +343 -0
- package/skills/deploy-k8s/references/network-exposure.md +481 -0
- package/skills/deploy-k8s/references/observability.md +302 -0
- package/skills/deploy-k8s/references/privilege-sprawl.md +273 -0
- package/skills/deploy-k8s/references/resource-starvation.md +374 -0
- package/skills/deploy-k8s/references/security-hardening.md +209 -0
- package/skills/deploy-k8s/references/stateful-patterns.md +130 -0
- package/skills/deploy-k8s/references/storage-and-state.md +330 -0
- package/skills/deploy-k8s/references/validation-and-policy.md +242 -0
- package/skills/deploy-railway/SKILL.md +235 -0
- package/skills/deploy-railway/references/analyze-db-mongo.md +84 -0
- package/skills/deploy-railway/references/analyze-db-mysql.md +254 -0
- package/skills/deploy-railway/references/analyze-db-postgres.md +479 -0
- package/skills/deploy-railway/references/analyze-db-redis.md +208 -0
- package/skills/deploy-railway/references/analyze-db.md +344 -0
- package/skills/deploy-railway/references/configure.md +309 -0
- package/skills/deploy-railway/references/deploy.md +195 -0
- package/skills/deploy-railway/references/operate.md +214 -0
- package/skills/deploy-railway/references/request.md +248 -0
- package/skills/deploy-railway/references/setup.md +312 -0
- package/skills/deploy-railway/scripts/analyze-mongo.py +1549 -0
- package/skills/deploy-railway/scripts/analyze-mysql.py +1195 -0
- package/skills/deploy-railway/scripts/analyze-postgres.py +3058 -0
- package/skills/deploy-railway/scripts/analyze-redis.py +1090 -0
- package/skills/deploy-railway/scripts/dal.py +671 -0
- package/skills/deploy-railway/scripts/enable-pg-stats.py +170 -0
- package/skills/deploy-railway/scripts/pg-extensions.py +370 -0
- package/skills/deploy-railway/scripts/railway-api.sh +52 -0
- package/skills/deploy-ssh/SKILL.md +91 -0
- package/skills/deploy-vercel/SKILL.md +304 -0
- package/skills/deploy-vercel/resources/deploy-codex.sh +301 -0
- package/skills/deploy-vercel/resources/deploy.sh +301 -0
- package/skills/docs-runbooks/SKILL.md +399 -0
- package/skills/drive-status-renderer/SKILL.md +62 -0
- package/skills/iac-scan/SKILL.md +680 -0
- package/skills/iac-scan/assets/.gitkeep +9 -0
- package/skills/iac-scan/assets/checkov_config.yaml +94 -0
- package/skills/iac-scan/assets/github_actions.yml +199 -0
- package/skills/iac-scan/assets/gitlab_ci.yml +218 -0
- package/skills/iac-scan/assets/pre_commit_config.yaml +92 -0
- package/skills/iac-scan/references/EXAMPLE.md +40 -0
- package/skills/iac-scan/references/compliance_mapping.md +237 -0
- package/skills/iac-scan/references/custom_policies.md +460 -0
- package/skills/iac-scan/references/suppression_guide.md +431 -0
- package/skills/incident-briefing/SKILL.md +66 -0
- package/skills/incident-triage/SKILL.md +481 -0
- package/{LICENSE → skills/mcp-builder/LICENSE.txt} +15 -14
- package/skills/mcp-builder/SKILL.md +244 -0
- package/skills/mcp-builder/reference/evaluation.md +602 -0
- package/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
- package/skills/mcp-builder/reference/node_mcp_server.md +970 -0
- package/skills/mcp-builder/reference/python_mcp_server.md +719 -0
- package/skills/mcp-builder/scripts/connections.py +151 -0
- package/skills/mcp-builder/scripts/evaluation.py +373 -0
- package/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/skills/mcp-builder/scripts/requirements.txt +2 -0
- package/skills/mobile-pairing/SKILL.md +52 -0
- package/skills/ops-sre/SKILL.md +297 -0
- package/skills/playwright-qa/LICENSE.txt +201 -0
- package/skills/playwright-qa/NOTICE.txt +14 -0
- package/skills/playwright-qa/SKILL.md +156 -0
- package/skills/playwright-qa/agents/openai.yaml +6 -0
- package/skills/playwright-qa/assets/playwright-small.svg +3 -0
- package/skills/playwright-qa/assets/playwright.png +0 -0
- package/skills/playwright-qa/references/cli.md +116 -0
- package/skills/playwright-qa/references/workflows.md +95 -0
- package/skills/playwright-qa/scripts/playwright_cli.sh +25 -0
- package/skills/release-publish/SKILL.md +85 -0
- package/skills/repo-bootstrap/SKILL.md +92 -0
- package/skills/repo-bootstrap/assets/example-workflows/validate-agents.yml +89 -0
- package/skills/repo-bootstrap/assets/root-thin.md +141 -0
- package/skills/repo-bootstrap/assets/root-verbose.md +149 -0
- package/skills/repo-bootstrap/assets/scoped/backend-go.md +107 -0
- package/skills/repo-bootstrap/assets/scoped/backend-php.md +94 -0
- package/skills/repo-bootstrap/assets/scoped/backend-python.md +84 -0
- package/skills/repo-bootstrap/assets/scoped/backend-typescript.md +89 -0
- package/skills/repo-bootstrap/assets/scoped/claude-code-skill.md +101 -0
- package/skills/repo-bootstrap/assets/scoped/cli.md +83 -0
- package/skills/repo-bootstrap/assets/scoped/concourse.md +196 -0
- package/skills/repo-bootstrap/assets/scoped/ddev.md +68 -0
- package/skills/repo-bootstrap/assets/scoped/docker.md +160 -0
- package/skills/repo-bootstrap/assets/scoped/documentation.md +98 -0
- package/skills/repo-bootstrap/assets/scoped/examples.md +96 -0
- package/skills/repo-bootstrap/assets/scoped/frontend-typescript.md +88 -0
- package/skills/repo-bootstrap/assets/scoped/github-actions.md +174 -0
- package/skills/repo-bootstrap/assets/scoped/gitlab-ci.md +174 -0
- package/skills/repo-bootstrap/assets/scoped/oro-bundle.md +209 -0
- package/skills/repo-bootstrap/assets/scoped/oro-project.md +170 -0
- package/skills/repo-bootstrap/assets/scoped/python-modern.md +170 -0
- package/skills/repo-bootstrap/assets/scoped/resources.md +96 -0
- package/skills/repo-bootstrap/assets/scoped/skill-repo.md +139 -0
- package/skills/repo-bootstrap/assets/scoped/symfony.md +168 -0
- package/skills/repo-bootstrap/assets/scoped/testing.md +87 -0
- package/skills/repo-bootstrap/assets/scoped/typo3-docs.md +103 -0
- package/skills/repo-bootstrap/assets/scoped/typo3-extension.md +133 -0
- package/skills/repo-bootstrap/assets/scoped/typo3-project.md +137 -0
- package/skills/repo-bootstrap/assets/scoped/typo3-testing.md +80 -0
- package/skills/repo-bootstrap/checkpoints.yaml +279 -0
- package/skills/repo-bootstrap/evals/evals.json +385 -0
- package/skills/repo-bootstrap/references/ai-contribution-guidelines.md +63 -0
- package/skills/repo-bootstrap/references/ai-tool-compatibility.md +223 -0
- package/skills/repo-bootstrap/references/directory-coverage.md +82 -0
- package/skills/repo-bootstrap/references/examples/coding-agent-cli/AGENTS.md +70 -0
- package/skills/repo-bootstrap/references/examples/coding-agent-cli/go.mod +3 -0
- package/skills/repo-bootstrap/references/examples/coding-agent-cli/scripts-AGENTS.md +389 -0
- package/skills/repo-bootstrap/references/examples/express-api-ts/.env.example +13 -0
- package/skills/repo-bootstrap/references/examples/express-api-ts/AGENTS.md +91 -0
- package/skills/repo-bootstrap/references/examples/express-api-ts/package.json +33 -0
- package/skills/repo-bootstrap/references/examples/express-api-ts/pnpm-lock.yaml +3 -0
- package/skills/repo-bootstrap/references/examples/express-api-ts/src/AGENTS.md +91 -0
- package/skills/repo-bootstrap/references/examples/express-api-ts/src/config.ts +28 -0
- package/skills/repo-bootstrap/references/examples/express-api-ts/src/controllers/userController.ts +74 -0
- package/skills/repo-bootstrap/references/examples/express-api-ts/src/index.ts +26 -0
- package/skills/repo-bootstrap/references/examples/express-api-ts/src/middleware/errorHandler.ts +45 -0
- package/skills/repo-bootstrap/references/examples/express-api-ts/src/middleware/requestLogger.ts +18 -0
- package/skills/repo-bootstrap/references/examples/express-api-ts/src/routes/health.ts +18 -0
- package/skills/repo-bootstrap/references/examples/express-api-ts/src/routes/users.ts +13 -0
- package/skills/repo-bootstrap/references/examples/express-api-ts/src/utils/errors.ts +40 -0
- package/skills/repo-bootstrap/references/examples/express-api-ts/src/utils/logger.ts +14 -0
- package/skills/repo-bootstrap/references/examples/express-api-ts/tsconfig.json +24 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/.env.example +19 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/AGENTS.md +92 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/pyproject.toml +88 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/src/AGENTS.md +85 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/src/__init__.py +3 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/src/config.py +49 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/src/main.py +66 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/src/models/__init__.py +13 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/src/models/item.py +43 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/src/models/user.py +40 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/src/routes/__init__.py +5 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/src/routes/health.py +20 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/src/routes/items.py +61 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/src/routes/users.py +55 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/src/services/__init__.py +6 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/src/services/item_service.py +77 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/src/services/user_service.py +69 -0
- package/skills/repo-bootstrap/references/examples/fastapi-app/uv.lock +4 -0
- package/skills/repo-bootstrap/references/examples/go-api-with-react-admin/.scopes +3 -0
- package/skills/repo-bootstrap/references/examples/go-api-with-react-admin/AGENTS.md +86 -0
- package/skills/repo-bootstrap/references/examples/go-api-with-react-admin/admin/package.json +20 -0
- package/skills/repo-bootstrap/references/examples/go-api-with-react-admin/admin/src/App.tsx +5 -0
- package/skills/repo-bootstrap/references/examples/go-api-with-react-admin/cmd/api/main.go +7 -0
- package/skills/repo-bootstrap/references/examples/go-api-with-react-admin/go.mod +2 -0
- package/skills/repo-bootstrap/references/examples/go-api-with-react-admin/main.go +7 -0
- package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/.scopes +3 -0
- package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/AGENTS.md +89 -0
- package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/go.mod +2 -0
- package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/internal/web/AGENTS.md +90 -0
- package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/internal/web/package.json +17 -0
- package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/internal/web/src/App.tsx +1 -0
- package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/internal/web/src/Button.tsx +1 -0
- package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/internal/web/src/Footer.tsx +1 -0
- package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/internal/web/src/Header.tsx +1 -0
- package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/internal/web/src/Sidebar.tsx +1 -0
- package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/main.go +7 -0
- package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/package-lock.json +0 -0
- package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/package.json +12 -0
- package/skills/repo-bootstrap/references/examples/ldap-selfservice/AGENTS.md +70 -0
- package/skills/repo-bootstrap/references/examples/ldap-selfservice/go.mod +3 -0
- package/skills/repo-bootstrap/references/examples/ldap-selfservice/internal-AGENTS.md +371 -0
- package/skills/repo-bootstrap/references/examples/ldap-selfservice/internal-web-AGENTS.md +448 -0
- package/skills/repo-bootstrap/references/examples/php-with-frontend/.scopes +3 -0
- package/skills/repo-bootstrap/references/examples/php-with-frontend/AGENTS.md +91 -0
- package/skills/repo-bootstrap/references/examples/php-with-frontend/composer.json +8 -0
- package/skills/repo-bootstrap/references/examples/php-with-frontend/package.json +15 -0
- package/skills/repo-bootstrap/references/examples/php-with-frontend/pnpm-lock.yaml +0 -0
- package/skills/repo-bootstrap/references/examples/php-with-frontend/src/Controller.php +3 -0
- package/skills/repo-bootstrap/references/examples/php-with-frontend/web/AGENTS.md +92 -0
- package/skills/repo-bootstrap/references/examples/php-with-frontend/web/package.json +26 -0
- package/skills/repo-bootstrap/references/examples/php-with-frontend/web/src/App.tsx +3 -0
- package/skills/repo-bootstrap/references/examples/php-with-frontend/web/src/Button.tsx +10 -0
- package/skills/repo-bootstrap/references/examples/php-with-frontend/web/src/Footer.tsx +9 -0
- package/skills/repo-bootstrap/references/examples/php-with-frontend/web/src/Header.tsx +9 -0
- package/skills/repo-bootstrap/references/examples/php-with-frontend/web/src/main.tsx +3 -0
- package/skills/repo-bootstrap/references/examples/php-with-frontend/web/tsconfig.json +13 -0
- package/skills/repo-bootstrap/references/examples/pnpm-workspace/AGENTS.md +75 -0
- package/skills/repo-bootstrap/references/examples/pnpm-workspace/package.json +7 -0
- package/skills/repo-bootstrap/references/examples/pnpm-workspace/packages/web/package.json +11 -0
- package/skills/repo-bootstrap/references/examples/pnpm-workspace/packages/web/src/index.ts +11 -0
- package/skills/repo-bootstrap/references/examples/pnpm-workspace/pnpm-lock.yaml +42 -0
- package/skills/repo-bootstrap/references/examples/pnpm-workspace/pnpm-workspace.yaml +2 -0
- package/skills/repo-bootstrap/references/examples/simple-ldap-go/AGENTS.md +70 -0
- package/skills/repo-bootstrap/references/examples/simple-ldap-go/examples-AGENTS.md +45 -0
- package/skills/repo-bootstrap/references/examples/simple-ldap-go/go.mod +3 -0
- package/skills/repo-bootstrap/references/examples/t3x-rte-ckeditor-image/AGENTS.md +70 -0
- package/skills/repo-bootstrap/references/examples/t3x-rte-ckeditor-image/Classes-AGENTS.md +392 -0
- package/skills/repo-bootstrap/references/examples/t3x-rte-ckeditor-image/composer.json +8 -0
- package/skills/repo-bootstrap/references/feedback-memory-schema.md +135 -0
- package/skills/repo-bootstrap/references/git-hooks-setup.md +79 -0
- package/skills/repo-bootstrap/references/output-structure.md +124 -0
- package/skills/repo-bootstrap/references/scripts-guide.md +175 -0
- package/skills/repo-bootstrap/references/verification-guide.md +137 -0
- package/skills/repo-bootstrap/scripts/analyze-git-history.sh +315 -0
- package/skills/repo-bootstrap/scripts/check-freshness.sh +230 -0
- package/skills/repo-bootstrap/scripts/detect-golden-samples.sh +161 -0
- package/skills/repo-bootstrap/scripts/detect-heuristics.sh +93 -0
- package/skills/repo-bootstrap/scripts/detect-project.sh +486 -0
- package/skills/repo-bootstrap/scripts/detect-scopes.sh +330 -0
- package/skills/repo-bootstrap/scripts/detect-utilities.sh +133 -0
- package/skills/repo-bootstrap/scripts/extract-adrs.sh +194 -0
- package/skills/repo-bootstrap/scripts/extract-agent-configs.sh +331 -0
- package/skills/repo-bootstrap/scripts/extract-architecture-rules.sh +522 -0
- package/skills/repo-bootstrap/scripts/extract-ci-commands.sh +385 -0
- package/skills/repo-bootstrap/scripts/extract-ci-rules.sh +384 -0
- package/skills/repo-bootstrap/scripts/extract-commands.sh +358 -0
- package/skills/repo-bootstrap/scripts/extract-documentation.sh +308 -0
- package/skills/repo-bootstrap/scripts/extract-github-rulesets.sh +96 -0
- package/skills/repo-bootstrap/scripts/extract-github-settings.sh +88 -0
- package/skills/repo-bootstrap/scripts/extract-ide-settings.sh +228 -0
- package/skills/repo-bootstrap/scripts/extract-platform-files.sh +290 -0
- package/skills/repo-bootstrap/scripts/extract-quality-configs.sh +442 -0
- package/skills/repo-bootstrap/scripts/generate-agents.sh +2424 -0
- package/skills/repo-bootstrap/scripts/generate-file-map.sh +153 -0
- package/skills/repo-bootstrap/scripts/lib/config-root.sh +211 -0
- package/skills/repo-bootstrap/scripts/lib/summary.sh +244 -0
- package/skills/repo-bootstrap/scripts/lib/template.sh +397 -0
- package/skills/repo-bootstrap/scripts/validate-structure.sh +324 -0
- package/skills/repo-bootstrap/scripts/verify-commands.sh +615 -0
- package/skills/repo-bootstrap/scripts/verify-content.sh +302 -0
- package/skills/schema-api-contracts/SKILL.md +56 -0
- package/skills/secret-hygiene/SKILL.md +511 -0
- package/skills/secret-hygiene/assets/.gitkeep +9 -0
- package/skills/secret-hygiene/assets/config-balanced.toml +81 -0
- package/skills/secret-hygiene/assets/config-custom.toml +178 -0
- package/skills/secret-hygiene/assets/config-strict.toml +48 -0
- package/skills/secret-hygiene/assets/github-action.yml +181 -0
- package/skills/secret-hygiene/assets/gitlab-ci.yml +257 -0
- package/skills/secret-hygiene/assets/precommit-config.yaml +70 -0
- package/skills/secret-hygiene/references/EXAMPLE.md +40 -0
- package/skills/secret-hygiene/references/compliance_mapping.md +538 -0
- package/skills/secret-hygiene/references/detection_rules.md +276 -0
- package/skills/secret-hygiene/references/false_positives.md +598 -0
- package/skills/secret-hygiene/references/remediation_guide.md +530 -0
- package/skills/stack-selector/SKILL.md +56 -0
- package/skills/telegram-control/SKILL.md +110 -0
- package/skills/telegram-control/references/architecture.md +184 -0
- package/skills/telegram-control/references/convex.md +173 -0
- package/skills/telegram-control/references/error_handling.md +212 -0
- package/skills/telegram-control/references/initial_setup.md +165 -0
- package/skills/telegram-control/references/telegram_api.md +156 -0
- package/skills/telegram-control/scripts/cancel_message.ts +53 -0
- package/skills/telegram-control/scripts/list_scheduled.ts +103 -0
- package/skills/telegram-control/scripts/logger.ts +121 -0
- package/skills/telegram-control/scripts/proxy-util.ts +11 -0
- package/skills/telegram-control/scripts/schedule_message.ts +216 -0
- package/skills/telegram-control/scripts/send_message.ts +115 -0
- package/skills/telegram-control/scripts/setup.ts +185 -0
- package/skills/telegram-control/scripts/types.ts +75 -0
- package/skills/telegram-control/scripts/view_history.ts +74 -0
- package/skills/test-strategy/SKILL.md +352 -0
- package/skills/threat-model/SKILL.md +303 -0
- package/skills/threat-model/examples/example-output.md +196 -0
- package/skills/threat-model/template.md +96 -0
- package/skills/ts-lint/SKILL.md +80 -0
- package/skills/ui-flow/SKILL.md +668 -0
- package/skills/voice-command-router/SKILL.md +51 -0
- package/skills/widget-live-activity-sync/SKILL.md +66 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
<!-- Managed by agent: keep sections and order; edit content, not structure. Last updated: 2026-02-05 -->
|
|
2
|
+
|
|
3
|
+
# AGENTS.md — src
|
|
4
|
+
|
|
5
|
+
<!-- AGENTS-GENERATED:START overview -->
|
|
6
|
+
## Overview
|
|
7
|
+
Backend services (TypeScript/Node.js)
|
|
8
|
+
<!-- AGENTS-GENERATED:END overview -->
|
|
9
|
+
|
|
10
|
+
<!-- AGENTS-GENERATED:START filemap -->
|
|
11
|
+
## Key Files
|
|
12
|
+
| File | Purpose |
|
|
13
|
+
|------|---------|
|
|
14
|
+
| `src/config.ts` | (add description) |
|
|
15
|
+
| `src/routes/health.ts` | Add database connectivity check here |
|
|
16
|
+
| `src/routes/users.ts` | (add description) |
|
|
17
|
+
| `src/index.ts` | Middleware |
|
|
18
|
+
| `src/utils/logger.ts` | (add description) |
|
|
19
|
+
<!-- AGENTS-GENERATED:END filemap -->
|
|
20
|
+
|
|
21
|
+
<!-- AGENTS-GENERATED:START golden-samples -->
|
|
22
|
+
## Golden Samples (follow these patterns)
|
|
23
|
+
| Pattern | Reference |
|
|
24
|
+
|---------|-----------|
|
|
25
|
+
| Standard implementation | `src/controllers/userController.ts` |
|
|
26
|
+
<!-- AGENTS-GENERATED:END golden-samples -->
|
|
27
|
+
|
|
28
|
+
<!-- AGENTS-GENERATED:START setup -->
|
|
29
|
+
## Setup & environment
|
|
30
|
+
- Install: `pnpm install`
|
|
31
|
+
- Node version: >=20.0.0
|
|
32
|
+
- Package manager: pnpm
|
|
33
|
+
- Environment variables: See .env or .env.example
|
|
34
|
+
<!-- AGENTS-GENERATED:END setup -->
|
|
35
|
+
|
|
36
|
+
<!-- AGENTS-GENERATED:START commands -->
|
|
37
|
+
## Build & tests
|
|
38
|
+
- Typecheck (project-wide): `pnpm typecheck`
|
|
39
|
+
- Format: `pnpm format`
|
|
40
|
+
- Lint: `pnpm lint`
|
|
41
|
+
- Test: `pnpm test`
|
|
42
|
+
- Build: `pnpm build`
|
|
43
|
+
- Dev server: `pnpm dev`
|
|
44
|
+
<!-- AGENTS-GENERATED:END commands -->
|
|
45
|
+
|
|
46
|
+
<!-- AGENTS-GENERATED:START code-style -->
|
|
47
|
+
## Code style & conventions
|
|
48
|
+
- Use TypeScript strict mode (`strict: true` in tsconfig)
|
|
49
|
+
- No `any` without explicit justification comment
|
|
50
|
+
- Prefer `interface` over `type` for object shapes
|
|
51
|
+
- Naming: `camelCase` for functions/vars, `PascalCase` for classes/types
|
|
52
|
+
- Async/await over raw Promises
|
|
53
|
+
- Prefer `const` over `let`, never use `var`
|
|
54
|
+
- Destructure objects and arrays when appropriate
|
|
55
|
+
<!-- AGENTS-GENERATED:END code-style -->
|
|
56
|
+
|
|
57
|
+
<!-- AGENTS-GENERATED:START security -->
|
|
58
|
+
## Security & safety
|
|
59
|
+
- Validate all user inputs (use zod or similar)
|
|
60
|
+
- Parameterized queries only (no string concatenation)
|
|
61
|
+
- Never use dynamic code execution with user data
|
|
62
|
+
- Sensitive data: never log or expose in errors
|
|
63
|
+
- Environment: use dotenv, never hardcode secrets
|
|
64
|
+
- CORS: configure explicitly, no wildcard in production
|
|
65
|
+
- Rate limiting: implement for public endpoints
|
|
66
|
+
<!-- AGENTS-GENERATED:END security -->
|
|
67
|
+
|
|
68
|
+
<!-- AGENTS-GENERATED:START checklist -->
|
|
69
|
+
## PR/commit checklist
|
|
70
|
+
- [ ] Tests pass: `pnpm test`
|
|
71
|
+
- [ ] Type check clean: `pnpm typecheck`
|
|
72
|
+
- [ ] Lint clean: `pnpm lint`
|
|
73
|
+
- [ ] Formatted: `pnpm format`
|
|
74
|
+
- [ ] No `any` types without justification
|
|
75
|
+
- [ ] API endpoints have validation
|
|
76
|
+
- [ ] Error responses don't leak internals
|
|
77
|
+
<!-- AGENTS-GENERATED:END checklist -->
|
|
78
|
+
|
|
79
|
+
<!-- AGENTS-GENERATED:START examples -->
|
|
80
|
+
## Patterns to Follow
|
|
81
|
+
> **Prefer looking at real code in this repo over generic examples.**
|
|
82
|
+
> See **Golden Samples** section above for files that demonstrate correct patterns.
|
|
83
|
+
<!-- AGENTS-GENERATED:END examples -->
|
|
84
|
+
|
|
85
|
+
<!-- AGENTS-GENERATED:START help -->
|
|
86
|
+
## When stuck
|
|
87
|
+
- Check Node.js docs: https://nodejs.org/docs
|
|
88
|
+
- TypeScript handbook: https://www.typescriptlang.org/docs
|
|
89
|
+
- Review existing patterns in this codebase
|
|
90
|
+
- Check root AGENTS.md for project-wide conventions
|
|
91
|
+
<!-- AGENTS-GENERATED:END help -->
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
const envSchema = z.object({
|
|
4
|
+
PORT: z.coerce.number().default(3000),
|
|
5
|
+
NODE_ENV: z.enum(['development', 'production', 'test']).default('development'),
|
|
6
|
+
DATABASE_URL: z.string().url().optional(),
|
|
7
|
+
LOG_LEVEL: z.enum(['debug', 'info', 'warn', 'error']).default('info'),
|
|
8
|
+
JWT_SECRET: z.string().min(32).optional(),
|
|
9
|
+
CORS_ORIGIN: z.string().url().optional(),
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
const parsed = envSchema.safeParse(process.env);
|
|
13
|
+
|
|
14
|
+
if (!parsed.success) {
|
|
15
|
+
console.error('Invalid environment variables:', parsed.error.flatten().fieldErrors);
|
|
16
|
+
process.exit(1);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export const config = {
|
|
20
|
+
port: parsed.data.PORT,
|
|
21
|
+
nodeEnv: parsed.data.NODE_ENV,
|
|
22
|
+
databaseUrl: parsed.data.DATABASE_URL,
|
|
23
|
+
logLevel: parsed.data.LOG_LEVEL,
|
|
24
|
+
jwtSecret: parsed.data.JWT_SECRET,
|
|
25
|
+
corsOrigin: parsed.data.CORS_ORIGIN,
|
|
26
|
+
isDev: parsed.data.NODE_ENV === 'development',
|
|
27
|
+
isProd: parsed.data.NODE_ENV === 'production',
|
|
28
|
+
} as const;
|
package/skills/repo-bootstrap/references/examples/express-api-ts/src/controllers/userController.ts
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { Request, Response, NextFunction } from 'express';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { AppError } from '../utils/errors.js';
|
|
4
|
+
|
|
5
|
+
const createUserSchema = z.object({
|
|
6
|
+
email: z.string().email(),
|
|
7
|
+
name: z.string().min(1).max(100),
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
const updateUserSchema = createUserSchema.partial();
|
|
11
|
+
|
|
12
|
+
// In-memory store for demo purposes
|
|
13
|
+
const users = new Map<string, { id: string; email: string; name: string }>();
|
|
14
|
+
|
|
15
|
+
export class UserController {
|
|
16
|
+
getAll = async (_req: Request, res: Response): Promise<void> => {
|
|
17
|
+
const allUsers = Array.from(users.values());
|
|
18
|
+
res.json({ data: allUsers });
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
getById = async (req: Request, res: Response, next: NextFunction): Promise<void> => {
|
|
22
|
+
const user = users.get(req.params.id ?? '');
|
|
23
|
+
if (!user) {
|
|
24
|
+
next(new AppError('User not found', 404));
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
res.json({ data: user });
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
create = async (req: Request, res: Response, next: NextFunction): Promise<void> => {
|
|
31
|
+
const parsed = createUserSchema.safeParse(req.body);
|
|
32
|
+
if (!parsed.success) {
|
|
33
|
+
next(new AppError('Validation failed', 400, parsed.error.flatten()));
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const id = crypto.randomUUID();
|
|
38
|
+
const user = { id, ...parsed.data };
|
|
39
|
+
users.set(id, user);
|
|
40
|
+
|
|
41
|
+
res.status(201).json({ data: user });
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
update = async (req: Request, res: Response, next: NextFunction): Promise<void> => {
|
|
45
|
+
const id = req.params.id ?? '';
|
|
46
|
+
const existing = users.get(id);
|
|
47
|
+
if (!existing) {
|
|
48
|
+
next(new AppError('User not found', 404));
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const parsed = updateUserSchema.safeParse(req.body);
|
|
53
|
+
if (!parsed.success) {
|
|
54
|
+
next(new AppError('Validation failed', 400, parsed.error.flatten()));
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const updated = { ...existing, ...parsed.data };
|
|
59
|
+
users.set(id, updated);
|
|
60
|
+
|
|
61
|
+
res.json({ data: updated });
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
delete = async (req: Request, res: Response, next: NextFunction): Promise<void> => {
|
|
65
|
+
const id = req.params.id ?? '';
|
|
66
|
+
if (!users.has(id)) {
|
|
67
|
+
next(new AppError('User not found', 404));
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
users.delete(id);
|
|
72
|
+
res.status(204).send();
|
|
73
|
+
};
|
|
74
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
import { config } from './config.js';
|
|
3
|
+
import { logger } from './utils/logger.js';
|
|
4
|
+
import { errorHandler } from './middleware/errorHandler.js';
|
|
5
|
+
import { requestLogger } from './middleware/requestLogger.js';
|
|
6
|
+
import { userRoutes } from './routes/users.js';
|
|
7
|
+
import { healthRoutes } from './routes/health.js';
|
|
8
|
+
|
|
9
|
+
const app = express();
|
|
10
|
+
|
|
11
|
+
// Middleware
|
|
12
|
+
app.use(express.json());
|
|
13
|
+
app.use(requestLogger);
|
|
14
|
+
|
|
15
|
+
// Routes
|
|
16
|
+
app.use('/api/users', userRoutes);
|
|
17
|
+
app.use('/health', healthRoutes);
|
|
18
|
+
|
|
19
|
+
// Error handling (must be last)
|
|
20
|
+
app.use(errorHandler);
|
|
21
|
+
|
|
22
|
+
app.listen(config.port, () => {
|
|
23
|
+
logger.info(`Server running on port ${config.port}`);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
export { app };
|
package/skills/repo-bootstrap/references/examples/express-api-ts/src/middleware/errorHandler.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { Request, Response, NextFunction } from 'express';
|
|
2
|
+
import { AppError } from '../utils/errors.js';
|
|
3
|
+
import { logger } from '../utils/logger.js';
|
|
4
|
+
import { config } from '../config.js';
|
|
5
|
+
|
|
6
|
+
interface ErrorResponse {
|
|
7
|
+
error: {
|
|
8
|
+
message: string;
|
|
9
|
+
code?: string;
|
|
10
|
+
details?: unknown;
|
|
11
|
+
stack?: string;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function errorHandler(
|
|
16
|
+
err: Error,
|
|
17
|
+
_req: Request,
|
|
18
|
+
res: Response<ErrorResponse>,
|
|
19
|
+
_next: NextFunction
|
|
20
|
+
): void {
|
|
21
|
+
logger.error('Request error', { error: err.message, stack: err.stack });
|
|
22
|
+
|
|
23
|
+
if (err instanceof AppError) {
|
|
24
|
+
res.status(err.statusCode).json({
|
|
25
|
+
error: {
|
|
26
|
+
message: err.message,
|
|
27
|
+
code: err.code,
|
|
28
|
+
details: err.details,
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Unknown error - don't leak internals in production
|
|
35
|
+
const message = config.isProd ? 'Internal server error' : err.message;
|
|
36
|
+
const response: ErrorResponse = {
|
|
37
|
+
error: { message },
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
if (!config.isProd) {
|
|
41
|
+
response.error.stack = err.stack;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
res.status(500).json(response);
|
|
45
|
+
}
|
package/skills/repo-bootstrap/references/examples/express-api-ts/src/middleware/requestLogger.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Request, Response, NextFunction } from 'express';
|
|
2
|
+
import { logger } from '../utils/logger.js';
|
|
3
|
+
|
|
4
|
+
export function requestLogger(req: Request, res: Response, next: NextFunction): void {
|
|
5
|
+
const start = Date.now();
|
|
6
|
+
|
|
7
|
+
res.on('finish', () => {
|
|
8
|
+
const duration = Date.now() - start;
|
|
9
|
+
logger.info('Request completed', {
|
|
10
|
+
method: req.method,
|
|
11
|
+
path: req.path,
|
|
12
|
+
status: res.statusCode,
|
|
13
|
+
duration: `${duration}ms`,
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
next();
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Router, type Request, type Response } from 'express';
|
|
2
|
+
|
|
3
|
+
const router = Router();
|
|
4
|
+
|
|
5
|
+
router.get('/', (_req: Request, res: Response) => {
|
|
6
|
+
res.json({
|
|
7
|
+
status: 'healthy',
|
|
8
|
+
timestamp: new Date().toISOString(),
|
|
9
|
+
uptime: process.uptime(),
|
|
10
|
+
});
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
router.get('/ready', (_req: Request, res: Response) => {
|
|
14
|
+
// Add database connectivity check here
|
|
15
|
+
res.json({ ready: true });
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
export { router as healthRoutes };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Router } from 'express';
|
|
2
|
+
import { UserController } from '../controllers/userController.js';
|
|
3
|
+
|
|
4
|
+
const router = Router();
|
|
5
|
+
const controller = new UserController();
|
|
6
|
+
|
|
7
|
+
router.get('/', controller.getAll);
|
|
8
|
+
router.get('/:id', controller.getById);
|
|
9
|
+
router.post('/', controller.create);
|
|
10
|
+
router.put('/:id', controller.update);
|
|
11
|
+
router.delete('/:id', controller.delete);
|
|
12
|
+
|
|
13
|
+
export { router as userRoutes };
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export class AppError extends Error {
|
|
2
|
+
public readonly statusCode: number;
|
|
3
|
+
public readonly code?: string;
|
|
4
|
+
public readonly details?: unknown;
|
|
5
|
+
|
|
6
|
+
constructor(message: string, statusCode: number = 500, details?: unknown, code?: string) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.name = 'AppError';
|
|
9
|
+
this.statusCode = statusCode;
|
|
10
|
+
this.code = code;
|
|
11
|
+
this.details = details;
|
|
12
|
+
|
|
13
|
+
// Maintain proper stack trace
|
|
14
|
+
Error.captureStackTrace(this, this.constructor);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
static badRequest(message: string, details?: unknown): AppError {
|
|
18
|
+
return new AppError(message, 400, details, 'BAD_REQUEST');
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
static unauthorized(message = 'Unauthorized'): AppError {
|
|
22
|
+
return new AppError(message, 401, undefined, 'UNAUTHORIZED');
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
static forbidden(message = 'Forbidden'): AppError {
|
|
26
|
+
return new AppError(message, 403, undefined, 'FORBIDDEN');
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
static notFound(resource = 'Resource'): AppError {
|
|
30
|
+
return new AppError(`${resource} not found`, 404, undefined, 'NOT_FOUND');
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
static conflict(message: string): AppError {
|
|
34
|
+
return new AppError(message, 409, undefined, 'CONFLICT');
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
static internal(message = 'Internal server error'): AppError {
|
|
38
|
+
return new AppError(message, 500, undefined, 'INTERNAL_ERROR');
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import winston from 'winston';
|
|
2
|
+
import { config } from '../config.js';
|
|
3
|
+
|
|
4
|
+
export const logger = winston.createLogger({
|
|
5
|
+
level: config.logLevel,
|
|
6
|
+
format: winston.format.combine(
|
|
7
|
+
winston.format.timestamp(),
|
|
8
|
+
winston.format.errors({ stack: true }),
|
|
9
|
+
config.isDev
|
|
10
|
+
? winston.format.combine(winston.format.colorize(), winston.format.simple())
|
|
11
|
+
: winston.format.json()
|
|
12
|
+
),
|
|
13
|
+
transports: [new winston.transports.Console()],
|
|
14
|
+
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "NodeNext",
|
|
5
|
+
"moduleResolution": "NodeNext",
|
|
6
|
+
"lib": ["ES2022"],
|
|
7
|
+
"outDir": "./dist",
|
|
8
|
+
"rootDir": "./src",
|
|
9
|
+
"strict": true,
|
|
10
|
+
"esModuleInterop": true,
|
|
11
|
+
"skipLibCheck": true,
|
|
12
|
+
"forceConsistentCasingInFileNames": true,
|
|
13
|
+
"resolveJsonModule": true,
|
|
14
|
+
"declaration": true,
|
|
15
|
+
"declarationMap": true,
|
|
16
|
+
"sourceMap": true,
|
|
17
|
+
"noUncheckedIndexedAccess": true,
|
|
18
|
+
"noImplicitReturns": true,
|
|
19
|
+
"noFallthroughCasesInSwitch": true,
|
|
20
|
+
"exactOptionalPropertyTypes": true
|
|
21
|
+
},
|
|
22
|
+
"include": ["src/**/*"],
|
|
23
|
+
"exclude": ["node_modules", "dist"]
|
|
24
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Application Settings
|
|
2
|
+
APP_NAME=fastapi-app
|
|
3
|
+
APP_ENV=development
|
|
4
|
+
DEBUG=true
|
|
5
|
+
|
|
6
|
+
# Server Configuration
|
|
7
|
+
HOST=0.0.0.0
|
|
8
|
+
PORT=8000
|
|
9
|
+
WORKERS=1
|
|
10
|
+
|
|
11
|
+
# Database
|
|
12
|
+
DATABASE_URL=postgresql://user:password@localhost:5432/fastapi_app
|
|
13
|
+
|
|
14
|
+
# Security
|
|
15
|
+
SECRET_KEY=your-secret-key-change-in-production
|
|
16
|
+
API_KEY=your-api-key
|
|
17
|
+
|
|
18
|
+
# External Services
|
|
19
|
+
REDIS_URL=redis://localhost:6379/0
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
<!-- FOR AI AGENTS - Human readability is a side effect, not a goal -->
|
|
2
|
+
<!-- Managed by agent: keep sections and order; edit content, not structure -->
|
|
3
|
+
<!-- Last updated: 2026-02-05 | Last verified: never -->
|
|
4
|
+
|
|
5
|
+
# AGENTS.md
|
|
6
|
+
|
|
7
|
+
**Precedence:** the **closest `AGENTS.md`** to the files you're changing wins. Root holds global defaults only.
|
|
8
|
+
|
|
9
|
+
## Commands (unverified)
|
|
10
|
+
> Source: pyproject.toml — CI-sourced commands are most reliable
|
|
11
|
+
|
|
12
|
+
<!-- AGENTS-GENERATED:START commands -->
|
|
13
|
+
| Task | Command | ~Time |
|
|
14
|
+
|------|---------|-------|
|
|
15
|
+
| Typecheck | mypy . | ~15s |
|
|
16
|
+
| Lint | ruff check . | ~10s |
|
|
17
|
+
| Format | ruff format . | ~5s |
|
|
18
|
+
| Test (single) | pytest | ~2s |
|
|
19
|
+
| Test (all) | pytest | ~30s |
|
|
20
|
+
<!-- AGENTS-GENERATED:END commands -->
|
|
21
|
+
|
|
22
|
+
> If commands fail, verify against Makefile/package.json/composer.json or ask user to update.
|
|
23
|
+
|
|
24
|
+
## Workflow
|
|
25
|
+
1. **Before coding**: Read nearest `AGENTS.md` + check Golden Samples for the area you're touching
|
|
26
|
+
2. **After each change**: Run the smallest relevant check (lint → typecheck → single test)
|
|
27
|
+
3. **Before committing**: Run full test suite if changes affect >2 files or touch shared code
|
|
28
|
+
|
|
29
|
+
## File Map
|
|
30
|
+
<!-- AGENTS-GENERATED:START filemap -->
|
|
31
|
+
```
|
|
32
|
+
src/ → application source code
|
|
33
|
+
```
|
|
34
|
+
<!-- AGENTS-GENERATED:END filemap -->
|
|
35
|
+
|
|
36
|
+
## Golden Samples (follow these patterns)
|
|
37
|
+
<!-- AGENTS-GENERATED:START golden-samples -->
|
|
38
|
+
| For | Reference | Key patterns |
|
|
39
|
+
|-----|-----------|--------------|
|
|
40
|
+
| Entrypoint | `src/main.py` | (async) |
|
|
41
|
+
| Service | `src/services/item_service.py` | (class) |
|
|
42
|
+
<!-- AGENTS-GENERATED:END golden-samples -->
|
|
43
|
+
|
|
44
|
+
## Heuristics (quick decisions)
|
|
45
|
+
<!-- AGENTS-GENERATED:START heuristics -->
|
|
46
|
+
| When | Do |
|
|
47
|
+
|------|-----|
|
|
48
|
+
| Adding dependency | Update `pyproject.toml` |
|
|
49
|
+
| Adding env var | Add to `.env.example` first |
|
|
50
|
+
| Committing | Use Conventional Commits (feat:, fix:, docs:, etc.) |
|
|
51
|
+
| Merging PRs | Squash and merge |
|
|
52
|
+
| Adding dependency | Ask first - we minimize deps |
|
|
53
|
+
| Unsure about pattern | Check Golden Samples above |
|
|
54
|
+
<!-- AGENTS-GENERATED:END heuristics -->
|
|
55
|
+
|
|
56
|
+
## Repository Settings
|
|
57
|
+
<!-- AGENTS-GENERATED:START repo-settings -->
|
|
58
|
+
- **Default branch:** `main`
|
|
59
|
+
- **Merge strategy:** squash, merge, rebase
|
|
60
|
+
<!-- AGENTS-GENERATED:END repo-settings -->
|
|
61
|
+
|
|
62
|
+
## Boundaries
|
|
63
|
+
|
|
64
|
+
### Always Do
|
|
65
|
+
- Run pre-commit checks before committing
|
|
66
|
+
- Add tests for new code paths
|
|
67
|
+
- Use conventional commit format: `type(scope): subject`
|
|
68
|
+
- Follow PEP 8 style guide and Python >=3.11 features
|
|
69
|
+
|
|
70
|
+
### Ask First
|
|
71
|
+
- Adding new dependencies
|
|
72
|
+
- Modifying CI/CD configuration
|
|
73
|
+
- Changing public API signatures
|
|
74
|
+
- Running full e2e test suites
|
|
75
|
+
- Repo-wide refactoring or rewrites
|
|
76
|
+
|
|
77
|
+
### Never Do
|
|
78
|
+
- Commit secrets, credentials, or sensitive data
|
|
79
|
+
- Modify vendor/, node_modules/, or generated files
|
|
80
|
+
- Push directly to main/master branch
|
|
81
|
+
- Delete migration files or schema changes
|
|
82
|
+
- Commit requirements.txt without pyproject.toml changes
|
|
83
|
+
- Use print() for logging in production code
|
|
84
|
+
|
|
85
|
+
## Index of scoped AGENTS.md
|
|
86
|
+
<!-- AGENTS-GENERATED:START scope-index -->
|
|
87
|
+
- `./src/AGENTS.md` — Backend services (Python)
|
|
88
|
+
<!-- AGENTS-GENERATED:END scope-index -->
|
|
89
|
+
|
|
90
|
+
## When instructions conflict
|
|
91
|
+
The nearest `AGENTS.md` wins. Explicit user prompts override files.
|
|
92
|
+
- For Python-specific patterns, follow PEP 8 and project tooling (ruff/black)
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "fastapi-app"
|
|
3
|
+
version = "0.1.0"
|
|
4
|
+
description = "Example FastAPI application for AGENTS.md generator testing"
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
requires-python = ">=3.11"
|
|
7
|
+
license = { text = "MIT" }
|
|
8
|
+
authors = [
|
|
9
|
+
{ name = "Test Author", email = "test@example.com" }
|
|
10
|
+
]
|
|
11
|
+
dependencies = [
|
|
12
|
+
"fastapi>=0.109.0",
|
|
13
|
+
"uvicorn[standard]>=0.27.0",
|
|
14
|
+
"pydantic>=2.5.0",
|
|
15
|
+
"pydantic-settings>=2.1.0",
|
|
16
|
+
"sqlalchemy>=2.0.25",
|
|
17
|
+
"alembic>=1.13.0",
|
|
18
|
+
"httpx>=0.26.0",
|
|
19
|
+
]
|
|
20
|
+
|
|
21
|
+
[project.optional-dependencies]
|
|
22
|
+
dev = [
|
|
23
|
+
"pytest>=7.4.0",
|
|
24
|
+
"pytest-asyncio>=0.23.0",
|
|
25
|
+
"pytest-cov>=4.1.0",
|
|
26
|
+
"ruff>=0.1.14",
|
|
27
|
+
"mypy>=1.8.0",
|
|
28
|
+
"pre-commit>=3.6.0",
|
|
29
|
+
]
|
|
30
|
+
|
|
31
|
+
[project.scripts]
|
|
32
|
+
serve = "src.main:run"
|
|
33
|
+
|
|
34
|
+
[build-system]
|
|
35
|
+
requires = ["hatchling"]
|
|
36
|
+
build-backend = "hatchling.build"
|
|
37
|
+
|
|
38
|
+
[tool.hatch.build.targets.wheel]
|
|
39
|
+
packages = ["src"]
|
|
40
|
+
|
|
41
|
+
[tool.ruff]
|
|
42
|
+
target-version = "py311"
|
|
43
|
+
line-length = 100
|
|
44
|
+
src = ["src", "tests"]
|
|
45
|
+
|
|
46
|
+
[tool.ruff.lint]
|
|
47
|
+
select = [
|
|
48
|
+
"E", # pycodestyle errors
|
|
49
|
+
"W", # pycodestyle warnings
|
|
50
|
+
"F", # Pyflakes
|
|
51
|
+
"I", # isort
|
|
52
|
+
"B", # flake8-bugbear
|
|
53
|
+
"C4", # flake8-comprehensions
|
|
54
|
+
"UP", # pyupgrade
|
|
55
|
+
"ARG", # flake8-unused-arguments
|
|
56
|
+
"SIM", # flake8-simplify
|
|
57
|
+
]
|
|
58
|
+
ignore = ["E501"]
|
|
59
|
+
|
|
60
|
+
[tool.ruff.lint.isort]
|
|
61
|
+
known-first-party = ["src"]
|
|
62
|
+
|
|
63
|
+
[tool.mypy]
|
|
64
|
+
python_version = "3.11"
|
|
65
|
+
strict = true
|
|
66
|
+
warn_return_any = true
|
|
67
|
+
warn_unused_configs = true
|
|
68
|
+
plugins = ["pydantic.mypy"]
|
|
69
|
+
|
|
70
|
+
[[tool.mypy.overrides]]
|
|
71
|
+
module = ["uvicorn.*"]
|
|
72
|
+
ignore_missing_imports = true
|
|
73
|
+
|
|
74
|
+
[tool.pytest.ini_options]
|
|
75
|
+
testpaths = ["tests"]
|
|
76
|
+
asyncio_mode = "auto"
|
|
77
|
+
addopts = "-v --cov=src --cov-report=term-missing"
|
|
78
|
+
|
|
79
|
+
[tool.coverage.run]
|
|
80
|
+
source = ["src"]
|
|
81
|
+
branch = true
|
|
82
|
+
|
|
83
|
+
[tool.coverage.report]
|
|
84
|
+
exclude_lines = [
|
|
85
|
+
"pragma: no cover",
|
|
86
|
+
"if TYPE_CHECKING:",
|
|
87
|
+
"if __name__ == .__main__.:",
|
|
88
|
+
]
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
<!-- Managed by agent: keep sections and order; edit content, not structure. Last updated: 2026-02-05 -->
|
|
2
|
+
|
|
3
|
+
# AGENTS.md — src
|
|
4
|
+
|
|
5
|
+
<!-- AGENTS-GENERATED:START overview -->
|
|
6
|
+
## Overview
|
|
7
|
+
Backend services (Python)
|
|
8
|
+
<!-- AGENTS-GENERATED:END overview -->
|
|
9
|
+
|
|
10
|
+
<!-- AGENTS-GENERATED:START filemap -->
|
|
11
|
+
## Key Files
|
|
12
|
+
| File | Purpose |
|
|
13
|
+
|------|---------|
|
|
14
|
+
| `src/config.py` | Application |
|
|
15
|
+
| `src/__init__.py` | (add description) |
|
|
16
|
+
| `src/services/__init__.py` | (add description) |
|
|
17
|
+
| `src/services/item_service.py` | (add description) |
|
|
18
|
+
| `src/services/user_service.py` | (add description) |
|
|
19
|
+
<!-- AGENTS-GENERATED:END filemap -->
|
|
20
|
+
|
|
21
|
+
<!-- AGENTS-GENERATED:START golden-samples -->
|
|
22
|
+
## Golden Samples (follow these patterns)
|
|
23
|
+
| Pattern | Reference |
|
|
24
|
+
|---------|-----------|
|
|
25
|
+
| Standard implementation | `src/services/item_service.py` |
|
|
26
|
+
<!-- AGENTS-GENERATED:END golden-samples -->
|
|
27
|
+
|
|
28
|
+
<!-- AGENTS-GENERATED:START setup -->
|
|
29
|
+
## Setup & environment
|
|
30
|
+
- Install: `pip install -e .`
|
|
31
|
+
- Python version: >=3.11
|
|
32
|
+
- Package manager: uv
|
|
33
|
+
- Environment variables: See .env or .env.example
|
|
34
|
+
<!-- AGENTS-GENERATED:END setup -->
|
|
35
|
+
|
|
36
|
+
<!-- AGENTS-GENERATED:START commands -->
|
|
37
|
+
## Build & tests
|
|
38
|
+
- Typecheck: `mypy .`
|
|
39
|
+
- Format: `ruff format .`
|
|
40
|
+
- Lint: `ruff check .`
|
|
41
|
+
- Test: `pytest`
|
|
42
|
+
<!-- AGENTS-GENERATED:END commands -->
|
|
43
|
+
|
|
44
|
+
<!-- AGENTS-GENERATED:START code-style -->
|
|
45
|
+
## Code style & conventions
|
|
46
|
+
- Follow PEP 8 style guide
|
|
47
|
+
- Use type hints for all function signatures
|
|
48
|
+
- Naming: `snake_case` for functions/variables, `PascalCase` for classes
|
|
49
|
+
- Docstrings: Google style, required for public APIs
|
|
50
|
+
- Imports: group by stdlib, third-party, local (use isort)
|
|
51
|
+
- Modern Python: prefer `|` over `Union`, `list` over `List`
|
|
52
|
+
<!-- AGENTS-GENERATED:END code-style -->
|
|
53
|
+
|
|
54
|
+
<!-- AGENTS-GENERATED:START security -->
|
|
55
|
+
## Security & safety
|
|
56
|
+
- Validate and sanitize all user inputs
|
|
57
|
+
- Use parameterized queries for database access
|
|
58
|
+
- Never use dynamic code execution with untrusted data
|
|
59
|
+
- Sensitive data: never log or expose in errors
|
|
60
|
+
- File paths: validate and use `pathlib` for path operations
|
|
61
|
+
- Subprocess: use list args, avoid shell=True with user input
|
|
62
|
+
<!-- AGENTS-GENERATED:END security -->
|
|
63
|
+
|
|
64
|
+
<!-- AGENTS-GENERATED:START checklist -->
|
|
65
|
+
## PR/commit checklist
|
|
66
|
+
- [ ] Tests pass: `pytest`
|
|
67
|
+
- [ ] Type check clean: `mypy .`
|
|
68
|
+
- [ ] Lint clean: `ruff check .`
|
|
69
|
+
- [ ] Formatted: `ruff format .`
|
|
70
|
+
- [ ] Public functions have docstrings
|
|
71
|
+
<!-- AGENTS-GENERATED:END checklist -->
|
|
72
|
+
|
|
73
|
+
<!-- AGENTS-GENERATED:START examples -->
|
|
74
|
+
## Patterns to Follow
|
|
75
|
+
> **Prefer looking at real code in this repo over generic examples.**
|
|
76
|
+
> See **Golden Samples** section above for files that demonstrate correct patterns.
|
|
77
|
+
<!-- AGENTS-GENERATED:END examples -->
|
|
78
|
+
|
|
79
|
+
<!-- AGENTS-GENERATED:START help -->
|
|
80
|
+
## When stuck
|
|
81
|
+
- Check Python documentation: https://docs.python.org
|
|
82
|
+
- Review existing patterns in this codebase
|
|
83
|
+
- Check root AGENTS.md for project-wide conventions
|
|
84
|
+
- Use `python -m pydoc <module>` for stdlib help
|
|
85
|
+
<!-- AGENTS-GENERATED:END help -->
|