@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,89 @@
|
|
|
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: go.mod — CI-sourced commands are most reliable
|
|
11
|
+
|
|
12
|
+
<!-- AGENTS-GENERATED:START commands -->
|
|
13
|
+
| Task | Command | ~Time |
|
|
14
|
+
|------|---------|-------|
|
|
15
|
+
| Typecheck | go build -v ./... | ~15s |
|
|
16
|
+
| Format | gofmt -w . | ~5s |
|
|
17
|
+
| Test (single) | go test -v -race | ~2s |
|
|
18
|
+
| Test (all) | go test -v -race -short ./... | ~30s |
|
|
19
|
+
| Build | go build -v ./... | ~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
|
+
internal/ → internal packages (not exported)
|
|
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 | `main.go` | standard patterns |
|
|
41
|
+
<!-- AGENTS-GENERATED:END golden-samples -->
|
|
42
|
+
|
|
43
|
+
## Heuristics (quick decisions)
|
|
44
|
+
<!-- AGENTS-GENERATED:START heuristics -->
|
|
45
|
+
| When | Do |
|
|
46
|
+
|------|-----|
|
|
47
|
+
| Adding package | Internal → `internal/`, Public → `pkg/` |
|
|
48
|
+
| Committing | Use Conventional Commits (feat:, fix:, docs:, etc.) |
|
|
49
|
+
| Merging PRs | Squash and merge |
|
|
50
|
+
| Adding dependency | Ask first - we minimize deps |
|
|
51
|
+
| Unsure about pattern | Check Golden Samples above |
|
|
52
|
+
<!-- AGENTS-GENERATED:END heuristics -->
|
|
53
|
+
|
|
54
|
+
## Repository Settings
|
|
55
|
+
<!-- AGENTS-GENERATED:START repo-settings -->
|
|
56
|
+
- **Default branch:** `main`
|
|
57
|
+
- **Merge strategy:** squash, merge, rebase
|
|
58
|
+
<!-- AGENTS-GENERATED:END repo-settings -->
|
|
59
|
+
|
|
60
|
+
## Boundaries
|
|
61
|
+
|
|
62
|
+
### Always Do
|
|
63
|
+
- Run pre-commit checks before committing
|
|
64
|
+
- Add tests for new code paths
|
|
65
|
+
- Use conventional commit format: `type(scope): subject`
|
|
66
|
+
- Follow Go 1.22 conventions and idioms
|
|
67
|
+
|
|
68
|
+
### Ask First
|
|
69
|
+
- Adding new dependencies
|
|
70
|
+
- Modifying CI/CD configuration
|
|
71
|
+
- Changing public API signatures
|
|
72
|
+
- Running full e2e test suites
|
|
73
|
+
- Repo-wide refactoring or rewrites
|
|
74
|
+
|
|
75
|
+
### Never Do
|
|
76
|
+
- Commit secrets, credentials, or sensitive data
|
|
77
|
+
- Modify vendor/, node_modules/, or generated files
|
|
78
|
+
- Push directly to main/master branch
|
|
79
|
+
- Delete migration files or schema changes
|
|
80
|
+
- Commit go.sum without go.mod changes
|
|
81
|
+
|
|
82
|
+
## Index of scoped AGENTS.md
|
|
83
|
+
<!-- AGENTS-GENERATED:START scope-index -->
|
|
84
|
+
- `./internal/web/AGENTS.md` — Frontend application (TypeScript/React/Vue)
|
|
85
|
+
<!-- AGENTS-GENERATED:END scope-index -->
|
|
86
|
+
|
|
87
|
+
## When instructions conflict
|
|
88
|
+
The nearest `AGENTS.md` wins. Explicit user prompts override files.
|
|
89
|
+
- For Go-specific patterns, defer to language idioms and standard library conventions
|
package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/internal/web/AGENTS.md
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
<!-- Managed by agent: keep sections and order; edit content, not structure. Last updated: 2026-02-04 -->
|
|
2
|
+
|
|
3
|
+
# AGENTS.md — web
|
|
4
|
+
|
|
5
|
+
<!-- AGENTS-GENERATED:START overview -->
|
|
6
|
+
## Overview
|
|
7
|
+
Frontend application (TypeScript/React/Vue)
|
|
8
|
+
<!-- AGENTS-GENERATED:END overview -->
|
|
9
|
+
|
|
10
|
+
<!-- AGENTS-GENERATED:START filemap -->
|
|
11
|
+
## Key Files
|
|
12
|
+
| File | Purpose |
|
|
13
|
+
|------|---------|
|
|
14
|
+
| `internal/web/src/Sidebar.tsx` | (add description) |
|
|
15
|
+
| `internal/web/src/App.tsx` | (add description) |
|
|
16
|
+
| `internal/web/src/Button.tsx` | (add description) |
|
|
17
|
+
| `internal/web/src/Header.tsx` | (add description) |
|
|
18
|
+
| `internal/web/src/Footer.tsx` | (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 | `internal/web/src/Sidebar.tsx` |
|
|
26
|
+
<!-- AGENTS-GENERATED:END golden-samples -->
|
|
27
|
+
|
|
28
|
+
<!-- AGENTS-GENERATED:START setup -->
|
|
29
|
+
## Setup & environment
|
|
30
|
+
- Framework: react
|
|
31
|
+
- Package manager: npm
|
|
32
|
+
- Environment variables: See .env.example
|
|
33
|
+
<!-- AGENTS-GENERATED:END setup -->
|
|
34
|
+
|
|
35
|
+
<!-- AGENTS-GENERATED:START commands -->
|
|
36
|
+
## Build & tests
|
|
37
|
+
- Install: `npm install`
|
|
38
|
+
- Typecheck: `npx tsc --noEmit`
|
|
39
|
+
- Lint: `npx eslint .`
|
|
40
|
+
- Format: `npx prettier --write .`
|
|
41
|
+
- Test: `npm test`
|
|
42
|
+
- Build: `npm run build`
|
|
43
|
+
- Dev server: `npm run dev`
|
|
44
|
+
<!-- AGENTS-GENERATED:END commands -->
|
|
45
|
+
|
|
46
|
+
<!-- AGENTS-GENERATED:START code-style -->
|
|
47
|
+
## Code style & conventions
|
|
48
|
+
- Follow tsconfig.json compiler options
|
|
49
|
+
- Use functional components with hooks
|
|
50
|
+
- Naming: `camelCase` for variables/functions, `PascalCase` for components
|
|
51
|
+
- File naming: `ComponentName.tsx`, `utilityName.ts`
|
|
52
|
+
- Imports: group and sort (external, internal, types)
|
|
53
|
+
- Avoid class components
|
|
54
|
+
<!-- AGENTS-GENERATED:END code-style -->
|
|
55
|
+
|
|
56
|
+
<!-- AGENTS-GENERATED:START security -->
|
|
57
|
+
## Security & safety
|
|
58
|
+
- Sanitize user inputs before rendering
|
|
59
|
+
- Raw HTML rendering only with sanitized content (use DOMPurify)
|
|
60
|
+
- Validate environment variables at build time
|
|
61
|
+
- Never expose secrets in client-side code
|
|
62
|
+
- Use HTTPS for all API calls
|
|
63
|
+
- Implement CSP headers
|
|
64
|
+
- WCAG 2.2 AA accessibility compliance
|
|
65
|
+
<!-- AGENTS-GENERATED:END security -->
|
|
66
|
+
|
|
67
|
+
<!-- AGENTS-GENERATED:START checklist -->
|
|
68
|
+
## PR/commit checklist
|
|
69
|
+
- [ ] Tests pass: `npm test`
|
|
70
|
+
- [ ] TypeScript compiles: `npx tsc --noEmit`
|
|
71
|
+
- [ ] Lint clean: `npx eslint .`
|
|
72
|
+
- [ ] Formatted: `npx prettier --write .`
|
|
73
|
+
- [ ] Accessibility: keyboard navigation works, ARIA labels present
|
|
74
|
+
- [ ] Responsive: tested on mobile, tablet, desktop
|
|
75
|
+
- [ ] Performance: no unnecessary re-renders
|
|
76
|
+
<!-- AGENTS-GENERATED:END checklist -->
|
|
77
|
+
|
|
78
|
+
<!-- AGENTS-GENERATED:START examples -->
|
|
79
|
+
## Patterns to Follow
|
|
80
|
+
> **Prefer looking at real code in this repo over generic examples.**
|
|
81
|
+
> See **Golden Samples** section above for files that demonstrate correct patterns.
|
|
82
|
+
<!-- AGENTS-GENERATED:END examples -->
|
|
83
|
+
|
|
84
|
+
<!-- AGENTS-GENERATED:START help -->
|
|
85
|
+
## When stuck
|
|
86
|
+
- Check React documentation: https://react.dev
|
|
87
|
+
- Review TypeScript handbook: https://www.typescriptlang.org/docs/
|
|
88
|
+
- Check root AGENTS.md for project-wide conventions
|
|
89
|
+
- Review existing components for patterns
|
|
90
|
+
<!-- AGENTS-GENERATED:END help -->
|
package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/internal/web/package.json
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "internal-web",
|
|
3
|
+
"private": true,
|
|
4
|
+
"scripts": {
|
|
5
|
+
"dev": "vite",
|
|
6
|
+
"build": "vite build",
|
|
7
|
+
"test": "vitest"
|
|
8
|
+
},
|
|
9
|
+
"dependencies": {
|
|
10
|
+
"react": "^18.2.0",
|
|
11
|
+
"react-dom": "^18.2.0"
|
|
12
|
+
},
|
|
13
|
+
"devDependencies": {
|
|
14
|
+
"vite": "^8.0.8",
|
|
15
|
+
"vitest": "^1.0.0"
|
|
16
|
+
}
|
|
17
|
+
}
|
package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/internal/web/src/App.tsx
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function App() { return <div>App</div>; }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function Button() { return <div>Button</div>; }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function Footer() { return <div>Footer</div>; }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function Header() { return <div>Header</div>; }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function Sidebar() { return <div>Sidebar</div>; }
|
|
File without changes
|
|
@@ -0,0 +1,70 @@
|
|
|
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: go.mod — CI-sourced commands are most reliable
|
|
11
|
+
|
|
12
|
+
<!-- AGENTS-GENERATED:START commands -->
|
|
13
|
+
| Task | Command | ~Time |
|
|
14
|
+
|------|---------|-------|
|
|
15
|
+
| Typecheck | go build -v ./... | ~15s |
|
|
16
|
+
| Format | gofmt -w . | ~5s |
|
|
17
|
+
| Test (single) | go test -v -race | ~2s |
|
|
18
|
+
| Test (all) | go test -v -race -short ./... | ~30s |
|
|
19
|
+
| Build | go build -v ./... | ~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
|
+
## Heuristics (quick decisions)
|
|
30
|
+
<!-- AGENTS-GENERATED:START heuristics -->
|
|
31
|
+
| When | Do |
|
|
32
|
+
|------|-----|
|
|
33
|
+
| Adding package | Internal → `internal/`, Public → `pkg/` |
|
|
34
|
+
| Committing | Use Conventional Commits (feat:, fix:, docs:, etc.) |
|
|
35
|
+
| Merging PRs | Squash and merge |
|
|
36
|
+
| Adding dependency | Ask first - we minimize deps |
|
|
37
|
+
| Unsure about pattern | Check Golden Samples above |
|
|
38
|
+
<!-- AGENTS-GENERATED:END heuristics -->
|
|
39
|
+
|
|
40
|
+
## Repository Settings
|
|
41
|
+
<!-- AGENTS-GENERATED:START repo-settings -->
|
|
42
|
+
- **Default branch:** `main`
|
|
43
|
+
- **Merge strategy:** squash, merge, rebase
|
|
44
|
+
<!-- AGENTS-GENERATED:END repo-settings -->
|
|
45
|
+
|
|
46
|
+
## Boundaries
|
|
47
|
+
|
|
48
|
+
### Always Do
|
|
49
|
+
- Run pre-commit checks before committing
|
|
50
|
+
- Add tests for new code paths
|
|
51
|
+
- Use conventional commit format: `type(scope): subject`
|
|
52
|
+
- Follow Go 1.25 conventions and idioms
|
|
53
|
+
|
|
54
|
+
### Ask First
|
|
55
|
+
- Adding new dependencies
|
|
56
|
+
- Modifying CI/CD configuration
|
|
57
|
+
- Changing public API signatures
|
|
58
|
+
- Running full e2e test suites
|
|
59
|
+
- Repo-wide refactoring or rewrites
|
|
60
|
+
|
|
61
|
+
### Never Do
|
|
62
|
+
- Commit secrets, credentials, or sensitive data
|
|
63
|
+
- Modify vendor/, node_modules/, or generated files
|
|
64
|
+
- Push directly to main/master branch
|
|
65
|
+
- Delete migration files or schema changes
|
|
66
|
+
- Commit go.sum without go.mod changes
|
|
67
|
+
|
|
68
|
+
## When instructions conflict
|
|
69
|
+
The nearest `AGENTS.md` wins. Explicit user prompts override files.
|
|
70
|
+
- For Go-specific patterns, defer to language idioms and standard library conventions
|
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
# Go Backend Services
|
|
2
|
+
|
|
3
|
+
<!-- Managed by agent: keep sections & order; edit content, not structure. Last updated: 2025-10-09 -->
|
|
4
|
+
|
|
5
|
+
**Scope**: Go backend packages in `internal/` directory
|
|
6
|
+
|
|
7
|
+
**See also**: [../AGENTS.md](../AGENTS.md) for global standards, [web/AGENTS.md](web/AGENTS.md) for frontend
|
|
8
|
+
|
|
9
|
+
## Overview
|
|
10
|
+
|
|
11
|
+
Backend services for LDAP selfservice password change/reset functionality. Organized as internal Go packages:
|
|
12
|
+
|
|
13
|
+
- **email/**: SMTP email service for password reset tokens
|
|
14
|
+
- **options/**: Configuration management from environment variables
|
|
15
|
+
- **ratelimit/**: IP-based rate limiting (3 req/hour default)
|
|
16
|
+
- **resettoken/**: Cryptographic token generation and validation
|
|
17
|
+
- **rpc/**: JSON-RPC 2.0 API handlers (password change/reset)
|
|
18
|
+
- **validators/**: Password policy validation logic
|
|
19
|
+
- **web/**: HTTP server setup, static assets, routing (see [web/AGENTS.md](web/AGENTS.md))
|
|
20
|
+
|
|
21
|
+
## Setup/Environment
|
|
22
|
+
|
|
23
|
+
**Required environment variables** (configure in `.env.local`):
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# LDAP connection
|
|
27
|
+
LDAP_URL=ldaps://ldap.example.com:636
|
|
28
|
+
LDAP_USER_BASE_DN=ou=users,dc=example,dc=com
|
|
29
|
+
LDAP_BIND_DN=cn=admin,dc=example,dc=com
|
|
30
|
+
LDAP_BIND_PASSWORD=secret
|
|
31
|
+
|
|
32
|
+
# Email for password reset
|
|
33
|
+
SMTP_HOST=smtp.example.com
|
|
34
|
+
SMTP_PORT=587
|
|
35
|
+
SMTP_USER=noreply@example.com
|
|
36
|
+
SMTP_PASSWORD=secret
|
|
37
|
+
SMTP_FROM=noreply@example.com
|
|
38
|
+
APP_BASE_URL=https://passwd.example.com
|
|
39
|
+
|
|
40
|
+
# Rate limiting (optional)
|
|
41
|
+
RATE_LIMIT_REQUESTS=3
|
|
42
|
+
RATE_LIMIT_WINDOW=1h
|
|
43
|
+
|
|
44
|
+
# Token expiry (optional)
|
|
45
|
+
TOKEN_EXPIRY_DURATION=1h
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**Go toolchain**: Requires Go 1.25+ (specified in `go.mod`)
|
|
49
|
+
|
|
50
|
+
**Key dependencies**:
|
|
51
|
+
|
|
52
|
+
- `github.com/gofiber/fiber/v2` - HTTP server
|
|
53
|
+
- `github.com/netresearch/simple-ldap-go` - LDAP client
|
|
54
|
+
- `github.com/testcontainers/testcontainers-go` - Integration testing
|
|
55
|
+
- `github.com/joho/godotenv` - Environment loading
|
|
56
|
+
|
|
57
|
+
## Build & Tests
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
# Development
|
|
61
|
+
go run . # Start server with hot-reload (via pnpm go:dev)
|
|
62
|
+
go build -v ./... # Compile all packages
|
|
63
|
+
go test -v ./... # Run all tests with verbose output
|
|
64
|
+
|
|
65
|
+
# Specific package testing
|
|
66
|
+
go test ./internal/validators/... # Test password validators
|
|
67
|
+
go test ./internal/ratelimit/... # Test rate limiter
|
|
68
|
+
go test ./internal/resettoken/... # Test token generation
|
|
69
|
+
go test -run TestSpecificFunction # Run specific test
|
|
70
|
+
|
|
71
|
+
# Integration tests (uses testcontainers)
|
|
72
|
+
go test -v ./internal/email/... # Requires Docker for MailHog container
|
|
73
|
+
|
|
74
|
+
# Coverage
|
|
75
|
+
go test -cover ./... # Coverage summary
|
|
76
|
+
go test -coverprofile=coverage.out ./... && go tool cover -html=coverage.out
|
|
77
|
+
|
|
78
|
+
# Build optimized binary
|
|
79
|
+
CGO_ENABLED=0 go build -ldflags="-w -s" -o ldap-passwd
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**CI validation** (from `.github/workflows/check.yml`):
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
go mod download
|
|
86
|
+
go build -v ./...
|
|
87
|
+
go test -v ./...
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Code Style
|
|
91
|
+
|
|
92
|
+
**Go Standards**:
|
|
93
|
+
|
|
94
|
+
- Use `go fmt` (automatic via Prettier with go-template plugin)
|
|
95
|
+
- Follow [Effective Go](https://go.dev/doc/effective_go)
|
|
96
|
+
- Package-level documentation comments required
|
|
97
|
+
- Exported functions must have doc comments
|
|
98
|
+
|
|
99
|
+
**Project Conventions**:
|
|
100
|
+
|
|
101
|
+
- Internal packages only: No public API outside this project
|
|
102
|
+
- Error wrapping with context: `fmt.Errorf("context: %w", err)`
|
|
103
|
+
- Use structured logging (consider adding in future)
|
|
104
|
+
- Prefer explicit over implicit
|
|
105
|
+
- Use interfaces for testability (see `email/service.go`)
|
|
106
|
+
|
|
107
|
+
**Naming**:
|
|
108
|
+
|
|
109
|
+
- `internal/package/file.go` - implementation
|
|
110
|
+
- `internal/package/file_test.go` - tests
|
|
111
|
+
- Descriptive variable names (not `x`, `y`, `tmp`)
|
|
112
|
+
- No stuttering: `email.Service`, not `email.EmailService`
|
|
113
|
+
|
|
114
|
+
**Error Handling**:
|
|
115
|
+
|
|
116
|
+
```go
|
|
117
|
+
// ✅ Good: wrap with context
|
|
118
|
+
if err != nil {
|
|
119
|
+
return fmt.Errorf("failed to connect LDAP at %s: %w", config.URL, err)
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// ❌ Bad: lose context
|
|
123
|
+
if err != nil {
|
|
124
|
+
return err
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// ❌ Worse: ignore
|
|
128
|
+
conn, _ := ldap.Dial(url)
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
**Testing**:
|
|
132
|
+
|
|
133
|
+
- Table-driven tests preferred
|
|
134
|
+
- Use testcontainers for external dependencies (LDAP, SMTP)
|
|
135
|
+
- Test files colocated with code: `validators/validate_test.go`
|
|
136
|
+
- Descriptive test names: `TestPasswordValidation_RequiresMinimumLength`
|
|
137
|
+
|
|
138
|
+
## Security
|
|
139
|
+
|
|
140
|
+
**LDAP Security**:
|
|
141
|
+
|
|
142
|
+
- Always use LDAPS in production (`ldaps://` URLs)
|
|
143
|
+
- Bind credentials in environment, never hardcoded
|
|
144
|
+
- Validate user input before LDAP queries (prevent injection)
|
|
145
|
+
- Use `simple-ldap-go` helpers to avoid raw LDAP filter construction
|
|
146
|
+
|
|
147
|
+
**Password Security**:
|
|
148
|
+
|
|
149
|
+
- Never log passwords (plain or hashed)
|
|
150
|
+
- No password storage - passwords go directly to LDAP
|
|
151
|
+
- Passwords only in memory during request lifetime
|
|
152
|
+
- HTTPS required for transport security
|
|
153
|
+
|
|
154
|
+
**Token Security**:
|
|
155
|
+
|
|
156
|
+
- Cryptographic random tokens (see `resettoken/token.go`)
|
|
157
|
+
- Configurable expiry (default 1h)
|
|
158
|
+
- Single-use tokens (invalidated after use)
|
|
159
|
+
- No token storage in logs or metrics
|
|
160
|
+
|
|
161
|
+
**Rate Limiting**:
|
|
162
|
+
|
|
163
|
+
- IP-based limits: 3 requests/hour default
|
|
164
|
+
- Configurable via `RATE_LIMIT_*` env vars
|
|
165
|
+
- In-memory store (consider Redis for multi-instance)
|
|
166
|
+
- Apply to both change and reset endpoints
|
|
167
|
+
|
|
168
|
+
**Input Validation**:
|
|
169
|
+
|
|
170
|
+
- Strict validation on all user inputs (see `validators/`)
|
|
171
|
+
- Reject malformed requests early
|
|
172
|
+
- Validate email format, username format, password policies
|
|
173
|
+
- No HTML/script injection vectors
|
|
174
|
+
|
|
175
|
+
## PR/Commit Checklist
|
|
176
|
+
|
|
177
|
+
**Before committing Go code**:
|
|
178
|
+
|
|
179
|
+
- [ ] Run `go fmt ./...` (or `pnpm prettier --write .`)
|
|
180
|
+
- [ ] Run `go vet ./...` (static analysis)
|
|
181
|
+
- [ ] Run `go test ./...` (all tests pass)
|
|
182
|
+
- [ ] Run `go build` (compilation check)
|
|
183
|
+
- [ ] Update package doc comments if API changed
|
|
184
|
+
- [ ] Add/update tests for new functionality
|
|
185
|
+
- [ ] Check for sensitive data in logs
|
|
186
|
+
- [ ] Verify error messages provide useful context
|
|
187
|
+
|
|
188
|
+
**Testing requirements**:
|
|
189
|
+
|
|
190
|
+
- New features must have tests
|
|
191
|
+
- Bug fixes must have regression tests
|
|
192
|
+
- Aim for ≥80% coverage on changed packages
|
|
193
|
+
- Integration tests for external dependencies
|
|
194
|
+
|
|
195
|
+
**Documentation**:
|
|
196
|
+
|
|
197
|
+
- Update package doc comments (godoc)
|
|
198
|
+
- Update [docs/api-reference.md](../docs/api-reference.md) for RPC changes
|
|
199
|
+
- Update [docs/development-guide.md](../docs/development-guide.md) for new setup steps
|
|
200
|
+
- Update environment variable examples in `.env` and docs
|
|
201
|
+
|
|
202
|
+
## Good vs Bad Examples
|
|
203
|
+
|
|
204
|
+
**✅ Good: Type-safe configuration**
|
|
205
|
+
|
|
206
|
+
```go
|
|
207
|
+
type Config struct {
|
|
208
|
+
LDAPURL string `env:"LDAP_URL" validate:"required,url"`
|
|
209
|
+
BindDN string `env:"LDAP_BIND_DN" validate:"required"`
|
|
210
|
+
BindPassword string `env:"LDAP_BIND_PASSWORD" validate:"required"`
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
func LoadConfig() (*Config, error) {
|
|
214
|
+
var cfg Config
|
|
215
|
+
if err := env.Parse(&cfg); err != nil {
|
|
216
|
+
return nil, fmt.Errorf("parse config: %w", err)
|
|
217
|
+
}
|
|
218
|
+
return &cfg, nil
|
|
219
|
+
}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
**❌ Bad: Unsafe configuration**
|
|
223
|
+
|
|
224
|
+
```go
|
|
225
|
+
func LoadConfig() *Config {
|
|
226
|
+
return &Config{
|
|
227
|
+
LDAPURL: os.Getenv("LDAP_URL"), // ❌ no validation, may be empty
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
**✅ Good: Table-driven tests**
|
|
233
|
+
|
|
234
|
+
```go
|
|
235
|
+
func TestPasswordValidation(t *testing.T) {
|
|
236
|
+
tests := []struct {
|
|
237
|
+
name string
|
|
238
|
+
password string
|
|
239
|
+
policy PasswordPolicy
|
|
240
|
+
wantErr bool
|
|
241
|
+
}{
|
|
242
|
+
{"valid password", "Test123!", PasswordPolicy{MinLength: 8}, false},
|
|
243
|
+
{"too short", "Ab1!", PasswordPolicy{MinLength: 8}, true},
|
|
244
|
+
{"no numbers", "TestTest", PasswordPolicy{RequireNumbers: true}, true},
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
for _, tt := range tests {
|
|
248
|
+
t.Run(tt.name, func(t *testing.T) {
|
|
249
|
+
err := ValidatePassword(tt.password, tt.policy)
|
|
250
|
+
if (err != nil) != tt.wantErr {
|
|
251
|
+
t.Errorf("got error %v, wantErr %v", err, tt.wantErr)
|
|
252
|
+
}
|
|
253
|
+
})
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
**❌ Bad: Non-descriptive tests**
|
|
259
|
+
|
|
260
|
+
```go
|
|
261
|
+
func TestPassword(t *testing.T) {
|
|
262
|
+
err := ValidatePassword("test") // ❌ what policy? what's expected?
|
|
263
|
+
if err == nil {
|
|
264
|
+
t.Fail()
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
**✅ Good: Interface for testability**
|
|
270
|
+
|
|
271
|
+
```go
|
|
272
|
+
type EmailService interface {
|
|
273
|
+
SendResetToken(ctx context.Context, to, token string) error
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
type SMTPService struct {
|
|
277
|
+
host string
|
|
278
|
+
port int
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
func (s *SMTPService) SendResetToken(ctx context.Context, to, token string) error {
|
|
282
|
+
// real implementation
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
// In tests, use mock implementation
|
|
286
|
+
type MockEmailService struct {
|
|
287
|
+
SendFunc func(ctx context.Context, to, token string) error
|
|
288
|
+
}
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
**❌ Bad: Hard-to-test concrete dependency**
|
|
292
|
+
|
|
293
|
+
```go
|
|
294
|
+
func ResetPassword(username string) error {
|
|
295
|
+
service := NewSMTPService() // ❌ hardcoded, can't mock
|
|
296
|
+
return service.SendEmail(...)
|
|
297
|
+
}
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
## When Stuck
|
|
301
|
+
|
|
302
|
+
**Go-specific issues**:
|
|
303
|
+
|
|
304
|
+
1. **Module issues**: `go mod tidy` to clean dependencies
|
|
305
|
+
2. **Import errors**: Check `go.mod` requires correct versions
|
|
306
|
+
3. **Test failures**: `go test -v ./... -run FailingTest` for verbose output
|
|
307
|
+
4. **LDAP connection**: Verify `LDAP_URL` format and network access
|
|
308
|
+
5. **Email testing**: Ensure Docker running for testcontainers (MailHog)
|
|
309
|
+
6. **Rate limit testing**: Tests may fail if system time incorrect
|
|
310
|
+
|
|
311
|
+
**Debugging**:
|
|
312
|
+
|
|
313
|
+
```bash
|
|
314
|
+
# Verbose test output
|
|
315
|
+
go test -v ./internal/package/...
|
|
316
|
+
|
|
317
|
+
# Run specific test
|
|
318
|
+
go test -run TestName ./internal/package/
|
|
319
|
+
|
|
320
|
+
# Race detector (for concurrency issues)
|
|
321
|
+
go test -race ./...
|
|
322
|
+
|
|
323
|
+
# Build with debug info
|
|
324
|
+
go build -gcflags="all=-N -l"
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
**Common pitfalls**:
|
|
328
|
+
|
|
329
|
+
- **Nil pointer dereference**: Check error returns before using values
|
|
330
|
+
- **Context cancellation**: Always respect `context.Context` in long operations
|
|
331
|
+
- **Resource leaks**: Defer `Close()` calls immediately after acquiring resources
|
|
332
|
+
- **Goroutine leaks**: Ensure all goroutines can exit
|
|
333
|
+
- **Time zones**: Use `time.UTC` for consistency
|
|
334
|
+
|
|
335
|
+
## Package-Specific Notes
|
|
336
|
+
|
|
337
|
+
### email/
|
|
338
|
+
|
|
339
|
+
- Uses testcontainers for integration tests
|
|
340
|
+
- MailHog container spins up automatically in tests
|
|
341
|
+
- Mock `EmailService` interface for unit tests in other packages
|
|
342
|
+
|
|
343
|
+
### options/
|
|
344
|
+
|
|
345
|
+
- Configuration loaded from environment via `godotenv`
|
|
346
|
+
- Validation happens at startup (fail-fast)
|
|
347
|
+
- See `.env.local.example` for required variables
|
|
348
|
+
|
|
349
|
+
### ratelimit/
|
|
350
|
+
|
|
351
|
+
- In-memory store (map with mutex)
|
|
352
|
+
- Consider Redis for multi-instance deployments
|
|
353
|
+
- Tests use fixed time.Now for deterministic results
|
|
354
|
+
|
|
355
|
+
### resettoken/
|
|
356
|
+
|
|
357
|
+
- Crypto/rand for token generation (never math/rand)
|
|
358
|
+
- Base64 URL encoding (safe for URLs)
|
|
359
|
+
- Store tokens server-side with expiry
|
|
360
|
+
|
|
361
|
+
### rpc/
|
|
362
|
+
|
|
363
|
+
- JSON-RPC 2.0 specification compliance
|
|
364
|
+
- Error codes defined in [docs/api-reference.md](../docs/api-reference.md)
|
|
365
|
+
- Request validation before processing
|
|
366
|
+
|
|
367
|
+
### validators/
|
|
368
|
+
|
|
369
|
+
- Pure functions (no side effects)
|
|
370
|
+
- Configurable policies from environment
|
|
371
|
+
- Clear error messages for user feedback
|