@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,530 @@
|
|
|
1
|
+
# Secret Remediation Guide
|
|
2
|
+
|
|
3
|
+
Comprehensive procedures for remediating exposed secrets detected by Gitleaks.
|
|
4
|
+
|
|
5
|
+
## Table of Contents
|
|
6
|
+
|
|
7
|
+
- [Immediate Response](#immediate-response)
|
|
8
|
+
- [Remediation Workflow](#remediation-workflow)
|
|
9
|
+
- [Git History Cleanup](#git-history-cleanup)
|
|
10
|
+
- [Cloud Provider Specific](#cloud-provider-specific)
|
|
11
|
+
- [Database Credentials](#database-credentials)
|
|
12
|
+
- [API Keys and Tokens](#api-keys-and-tokens)
|
|
13
|
+
- [Post-Remediation](#post-remediation)
|
|
14
|
+
|
|
15
|
+
## Immediate Response
|
|
16
|
+
|
|
17
|
+
When secrets are detected, follow this priority order:
|
|
18
|
+
|
|
19
|
+
### 1. Assess Exposure (0-15 minutes)
|
|
20
|
+
|
|
21
|
+
**Questions to answer immediately:**
|
|
22
|
+
- Is the repository public or private?
|
|
23
|
+
- Has the commit been pushed to remote?
|
|
24
|
+
- How long has the secret been exposed?
|
|
25
|
+
- What systems does this credential access?
|
|
26
|
+
|
|
27
|
+
**Actions:**
|
|
28
|
+
```bash
|
|
29
|
+
# Check if commit is pushed
|
|
30
|
+
git log origin/main..HEAD # If output, not yet pushed
|
|
31
|
+
|
|
32
|
+
# Check repository visibility
|
|
33
|
+
gh repo view --json visibility
|
|
34
|
+
|
|
35
|
+
# Check commit age
|
|
36
|
+
git log -1 --format="%ar" <commit-sha>
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### 2. Rotate Credentials (0-30 minutes)
|
|
40
|
+
|
|
41
|
+
**CRITICAL**: Rotate the exposed credential immediately, regardless of exposure duration.
|
|
42
|
+
|
|
43
|
+
Priority order:
|
|
44
|
+
1. **Production credentials** - Immediate rotation
|
|
45
|
+
2. **Payment/financial systems** - Immediate rotation
|
|
46
|
+
3. **Customer data access** - Immediate rotation
|
|
47
|
+
4. **Development/test credentials** - Rotate within 24 hours
|
|
48
|
+
|
|
49
|
+
### 3. Review Access Logs (30-60 minutes)
|
|
50
|
+
|
|
51
|
+
Check for unauthorized access:
|
|
52
|
+
- Cloud provider audit logs (CloudTrail, Cloud Audit Logs, Activity Log)
|
|
53
|
+
- Application logs showing authentication attempts
|
|
54
|
+
- Database connection logs
|
|
55
|
+
- API usage logs
|
|
56
|
+
|
|
57
|
+
### 4. Remove from Code (0-24 hours)
|
|
58
|
+
|
|
59
|
+
Remove secret from current code and optionally from git history.
|
|
60
|
+
|
|
61
|
+
## Remediation Workflow
|
|
62
|
+
|
|
63
|
+
### Step 1: Rotate the Credential
|
|
64
|
+
|
|
65
|
+
**Before removing from code**, rotate the credential to prevent race conditions.
|
|
66
|
+
|
|
67
|
+
#### Cloud Providers
|
|
68
|
+
|
|
69
|
+
**AWS**:
|
|
70
|
+
```bash
|
|
71
|
+
# Deactivate compromised key
|
|
72
|
+
aws iam update-access-key \
|
|
73
|
+
--access-key-id AKIA... \
|
|
74
|
+
--status Inactive \
|
|
75
|
+
--user-name username
|
|
76
|
+
|
|
77
|
+
# Create new key
|
|
78
|
+
aws iam create-access-key --user-name username
|
|
79
|
+
|
|
80
|
+
# Delete old key after updating applications
|
|
81
|
+
aws iam delete-access-key \
|
|
82
|
+
--access-key-id AKIA... \
|
|
83
|
+
--user-name username
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
**GCP**:
|
|
87
|
+
```bash
|
|
88
|
+
# Delete service account key
|
|
89
|
+
gcloud iam service-accounts keys delete KEY_ID \
|
|
90
|
+
--iam-account=SERVICE_ACCOUNT_EMAIL
|
|
91
|
+
|
|
92
|
+
# Create new key
|
|
93
|
+
gcloud iam service-accounts keys create new-key.json \
|
|
94
|
+
--iam-account=SERVICE_ACCOUNT_EMAIL
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
**Azure**:
|
|
98
|
+
```bash
|
|
99
|
+
# Regenerate storage account key
|
|
100
|
+
az storage account keys renew \
|
|
101
|
+
--account-name ACCOUNT_NAME \
|
|
102
|
+
--key primary
|
|
103
|
+
|
|
104
|
+
# List keys to verify
|
|
105
|
+
az storage account keys list \
|
|
106
|
+
--account-name ACCOUNT_NAME
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
#### API Tokens
|
|
110
|
+
|
|
111
|
+
**GitHub**:
|
|
112
|
+
1. Navigate to Settings > Developer settings > Personal access tokens
|
|
113
|
+
2. Find the compromised token (check "Last used" column)
|
|
114
|
+
3. Click "Delete"
|
|
115
|
+
4. Generate new token with minimal required scopes
|
|
116
|
+
|
|
117
|
+
**Stripe**:
|
|
118
|
+
1. Log into Stripe Dashboard
|
|
119
|
+
2. Navigate to Developers > API keys
|
|
120
|
+
3. Click "Roll" on the compromised key
|
|
121
|
+
4. Update all applications with new key
|
|
122
|
+
|
|
123
|
+
**Generic API Key**:
|
|
124
|
+
1. Access provider's console/dashboard
|
|
125
|
+
2. Locate API key management
|
|
126
|
+
3. Revoke/delete compromised key
|
|
127
|
+
4. Generate new key
|
|
128
|
+
5. Update applications
|
|
129
|
+
6. Test connectivity
|
|
130
|
+
|
|
131
|
+
### Step 2: Remove from Current Code
|
|
132
|
+
|
|
133
|
+
Replace hardcoded secrets with environment variables or secret management:
|
|
134
|
+
|
|
135
|
+
**Before** (insecure):
|
|
136
|
+
```python
|
|
137
|
+
API_KEY = "sk_live_51ABC123..."
|
|
138
|
+
db_password = "MyP@ssw0rd123"
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
**After** (secure):
|
|
142
|
+
```python
|
|
143
|
+
import os
|
|
144
|
+
|
|
145
|
+
API_KEY = os.environ.get("STRIPE_API_KEY")
|
|
146
|
+
if not API_KEY:
|
|
147
|
+
raise ValueError("STRIPE_API_KEY environment variable not set")
|
|
148
|
+
|
|
149
|
+
db_password = os.environ.get("DB_PASSWORD")
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
**Using secret management**:
|
|
153
|
+
```python
|
|
154
|
+
from azure.keyvault.secrets import SecretClient
|
|
155
|
+
from azure.identity import DefaultAzureCredential
|
|
156
|
+
|
|
157
|
+
credential = DefaultAzureCredential()
|
|
158
|
+
client = SecretClient(vault_url="https://myvault.vault.azure.net/", credential=credential)
|
|
159
|
+
|
|
160
|
+
db_password = client.get_secret("database-password").value
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Step 3: Commit the Fix
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
# Add changes
|
|
167
|
+
git add .
|
|
168
|
+
|
|
169
|
+
# Commit with clear message
|
|
170
|
+
git commit -m "refactor: Move API credentials to environment variables
|
|
171
|
+
|
|
172
|
+
- Replace hardcoded Stripe API key with environment variable
|
|
173
|
+
- Replace database password with AWS Secrets Manager reference
|
|
174
|
+
- Add validation for required environment variables
|
|
175
|
+
|
|
176
|
+
Addresses: Secret exposure detected by Gitleaks scan"
|
|
177
|
+
|
|
178
|
+
# Push
|
|
179
|
+
git push origin main
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## Git History Cleanup
|
|
183
|
+
|
|
184
|
+
If secrets are in pushed commits, consider removing from git history.
|
|
185
|
+
|
|
186
|
+
### Decision Matrix
|
|
187
|
+
|
|
188
|
+
| Scenario | Action | Reason |
|
|
189
|
+
|----------|--------|--------|
|
|
190
|
+
| Public repo, secret exposed | **Mandatory** history rewrite | Secret is public knowledge |
|
|
191
|
+
| Private repo, < 24 hours, < 5 collaborators | **Recommended** history rewrite | Minimal disruption |
|
|
192
|
+
| Private repo, > 1 week, > 10 collaborators | **Optional** - Rotate only | High coordination cost |
|
|
193
|
+
| Production repo with CI/CD | **Coordinate carefully** | May break automation |
|
|
194
|
+
|
|
195
|
+
### Method 1: git-filter-repo (Recommended)
|
|
196
|
+
|
|
197
|
+
Install:
|
|
198
|
+
```bash
|
|
199
|
+
pip install git-filter-repo
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
Remove specific file from all history:
|
|
203
|
+
```bash
|
|
204
|
+
# Backup first
|
|
205
|
+
git clone --mirror <repo-url> backup-repo.git
|
|
206
|
+
|
|
207
|
+
# Remove file
|
|
208
|
+
git filter-repo --path config/secrets.yaml --invert-paths
|
|
209
|
+
|
|
210
|
+
# Force push
|
|
211
|
+
git push origin --force --all
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
Remove secrets matching pattern:
|
|
215
|
+
```bash
|
|
216
|
+
# Use callback for complex filtering
|
|
217
|
+
git filter-repo --replace-text <(echo 'regex:sk_live_[a-zA-Z0-9]{24}==>REDACTED')
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Method 2: BFG Repo-Cleaner
|
|
221
|
+
|
|
222
|
+
Download:
|
|
223
|
+
```bash
|
|
224
|
+
# macOS
|
|
225
|
+
brew install bfg
|
|
226
|
+
|
|
227
|
+
# Or download JAR from https://rtyley.github.io/bfg-repo-cleaner/
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
Remove specific file:
|
|
231
|
+
```bash
|
|
232
|
+
# Clone mirror
|
|
233
|
+
git clone --mirror <repo-url> repo-mirror.git
|
|
234
|
+
cd repo-mirror.git
|
|
235
|
+
|
|
236
|
+
# Remove file
|
|
237
|
+
bfg --delete-files secrets.env
|
|
238
|
+
|
|
239
|
+
# Clean up
|
|
240
|
+
git reflog expire --expire=now --all
|
|
241
|
+
git gc --prune=now --aggressive
|
|
242
|
+
|
|
243
|
+
# Force push
|
|
244
|
+
git push
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
Remove secrets by pattern:
|
|
248
|
+
```bash
|
|
249
|
+
# Create replacements.txt
|
|
250
|
+
echo "PASSWORD1==>***REMOVED***" > replacements.txt
|
|
251
|
+
echo "sk_live_51ABC==>***REMOVED***" >> replacements.txt
|
|
252
|
+
|
|
253
|
+
# Run BFG
|
|
254
|
+
bfg --replace-text replacements.txt repo-mirror.git
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
### Method 3: Interactive Rebase (Small Changes)
|
|
258
|
+
|
|
259
|
+
For recent commits not yet widely distributed:
|
|
260
|
+
|
|
261
|
+
```bash
|
|
262
|
+
# Rebase last N commits
|
|
263
|
+
git rebase -i HEAD~5
|
|
264
|
+
|
|
265
|
+
# In editor, mark commits to 'edit'
|
|
266
|
+
# When stopped at each commit:
|
|
267
|
+
git rm config/secrets.yaml
|
|
268
|
+
git commit --amend --no-edit
|
|
269
|
+
git rebase --continue
|
|
270
|
+
|
|
271
|
+
# Force push
|
|
272
|
+
git push --force-with-lease
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
### Post-Rewrite Coordination
|
|
276
|
+
|
|
277
|
+
After rewriting history:
|
|
278
|
+
|
|
279
|
+
1. **Notify team immediately**:
|
|
280
|
+
```text
|
|
281
|
+
URGENT: Git history rewritten to remove exposed credentials.
|
|
282
|
+
|
|
283
|
+
Action required for all developers:
|
|
284
|
+
1. Commit/stash any local changes
|
|
285
|
+
2. Run: git fetch origin && git reset --hard origin/main
|
|
286
|
+
3. Delete and re-clone if issues persist
|
|
287
|
+
|
|
288
|
+
Contact security team with questions.
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
2. **Update CI/CD**:
|
|
292
|
+
- Invalidate old caches
|
|
293
|
+
- May need to reconfigure webhooks
|
|
294
|
+
- Update any hardcoded commit references
|
|
295
|
+
|
|
296
|
+
3. **Update branch protection**:
|
|
297
|
+
- May need to temporarily disable
|
|
298
|
+
- Re-enable after force push completes
|
|
299
|
+
|
|
300
|
+
## Cloud Provider Specific
|
|
301
|
+
|
|
302
|
+
### AWS
|
|
303
|
+
|
|
304
|
+
**Check for unauthorized access**:
|
|
305
|
+
```bash
|
|
306
|
+
# List recent API calls for access key
|
|
307
|
+
aws cloudtrail lookup-events \
|
|
308
|
+
--lookup-attributes AttributeKey=Username,AttributeValue=compromised-user \
|
|
309
|
+
--max-results 50 \
|
|
310
|
+
--start-time $(date -u -d '7 days ago' +%Y-%m-%dT%H:%M:%S)
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
**Revoke all sessions**:
|
|
314
|
+
```bash
|
|
315
|
+
# Attach policy to deny all actions
|
|
316
|
+
aws iam put-user-policy \
|
|
317
|
+
--user-name compromised-user \
|
|
318
|
+
--policy-name DenyAll \
|
|
319
|
+
--policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Deny","Action":"*","Resource":"*"}]}'
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
### GCP
|
|
323
|
+
|
|
324
|
+
**Check audit logs**:
|
|
325
|
+
```bash
|
|
326
|
+
gcloud logging read "protoPayload.authenticationInfo.principalEmail=SERVICE_ACCOUNT_EMAIL" \
|
|
327
|
+
--limit 100 \
|
|
328
|
+
--format json
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
**Disable service account**:
|
|
332
|
+
```bash
|
|
333
|
+
gcloud iam service-accounts disable SERVICE_ACCOUNT_EMAIL
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
### Azure
|
|
337
|
+
|
|
338
|
+
**Review activity logs**:
|
|
339
|
+
```bash
|
|
340
|
+
az monitor activity-log list \
|
|
341
|
+
--start-time 2024-01-01T00:00:00Z \
|
|
342
|
+
--resource-id /subscriptions/SUBSCRIPTION_ID
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
**Revoke access**:
|
|
346
|
+
```bash
|
|
347
|
+
# Regenerate keys
|
|
348
|
+
az storage account keys renew \
|
|
349
|
+
--account-name STORAGE_ACCOUNT \
|
|
350
|
+
--key primary
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
## Database Credentials
|
|
354
|
+
|
|
355
|
+
### PostgreSQL
|
|
356
|
+
|
|
357
|
+
```sql
|
|
358
|
+
-- Change password
|
|
359
|
+
ALTER USER app_user WITH PASSWORD 'new_secure_password';
|
|
360
|
+
|
|
361
|
+
-- View recent connections
|
|
362
|
+
SELECT datname, usename, client_addr, backend_start
|
|
363
|
+
FROM pg_stat_activity
|
|
364
|
+
WHERE usename = 'app_user'
|
|
365
|
+
ORDER BY backend_start DESC;
|
|
366
|
+
|
|
367
|
+
-- Kill active connections (if suspicious)
|
|
368
|
+
SELECT pg_terminate_backend(pid)
|
|
369
|
+
FROM pg_stat_activity
|
|
370
|
+
WHERE usename = 'app_user' AND client_addr != 'trusted_ip';
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
### MySQL
|
|
374
|
+
|
|
375
|
+
```sql
|
|
376
|
+
-- Change password
|
|
377
|
+
ALTER USER 'app_user'@'%' IDENTIFIED BY 'new_secure_password';
|
|
378
|
+
FLUSH PRIVILEGES;
|
|
379
|
+
|
|
380
|
+
-- View recent connections
|
|
381
|
+
SELECT * FROM information_schema.PROCESSLIST
|
|
382
|
+
WHERE USER = 'app_user';
|
|
383
|
+
|
|
384
|
+
-- Kill connections
|
|
385
|
+
KILL CONNECTION process_id;
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
### MongoDB
|
|
389
|
+
|
|
390
|
+
```javascript
|
|
391
|
+
// Change password
|
|
392
|
+
use admin
|
|
393
|
+
db.changeUserPassword("app_user", "new_secure_password")
|
|
394
|
+
|
|
395
|
+
// View recent operations
|
|
396
|
+
db.currentOp({ "active": true })
|
|
397
|
+
|
|
398
|
+
// Kill operation
|
|
399
|
+
db.killOp(opid)
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
## API Keys and Tokens
|
|
403
|
+
|
|
404
|
+
### GitHub
|
|
405
|
+
|
|
406
|
+
**Audit unauthorized access**:
|
|
407
|
+
```bash
|
|
408
|
+
# List recent events for token
|
|
409
|
+
gh api /users/{username}/events/public | jq '.[] | {type, repo: .repo.name, created_at}'
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
**Revoke all tokens** (if compromised account):
|
|
413
|
+
1. Settings > Developer settings > Personal access tokens
|
|
414
|
+
2. Select all tokens
|
|
415
|
+
3. Click "Delete"
|
|
416
|
+
|
|
417
|
+
### Slack
|
|
418
|
+
|
|
419
|
+
**Check workspace audit logs**:
|
|
420
|
+
1. Go to workspace settings (admin required)
|
|
421
|
+
2. Navigate to Logs > Audit Logs
|
|
422
|
+
3. Filter by token usage
|
|
423
|
+
|
|
424
|
+
**Regenerate token**:
|
|
425
|
+
1. Go to api.slack.com/apps
|
|
426
|
+
2. Select your app
|
|
427
|
+
3. Navigate to OAuth & Permissions
|
|
428
|
+
4. Click "Regenerate" on token
|
|
429
|
+
|
|
430
|
+
## Post-Remediation
|
|
431
|
+
|
|
432
|
+
### 1. Implement Prevention
|
|
433
|
+
|
|
434
|
+
**Pre-commit hooks**:
|
|
435
|
+
```bash
|
|
436
|
+
# Install Gitleaks pre-commit hook
|
|
437
|
+
cd /path/to/repo
|
|
438
|
+
cat << 'EOF' > .git/hooks/pre-commit
|
|
439
|
+
#!/bin/sh
|
|
440
|
+
gitleaks protect --verbose --redact --staged
|
|
441
|
+
EOF
|
|
442
|
+
chmod +x .git/hooks/pre-commit
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
**CI/CD checks**:
|
|
446
|
+
```yaml
|
|
447
|
+
# .github/workflows/secrets-scan.yml
|
|
448
|
+
name: Secret Scanning
|
|
449
|
+
on: [push, pull_request]
|
|
450
|
+
jobs:
|
|
451
|
+
scan:
|
|
452
|
+
runs-on: ubuntu-latest
|
|
453
|
+
steps:
|
|
454
|
+
- uses: actions/checkout@v3
|
|
455
|
+
with:
|
|
456
|
+
fetch-depth: 0
|
|
457
|
+
- uses: gitleaks/gitleaks-action@v2
|
|
458
|
+
env:
|
|
459
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
460
|
+
```
|
|
461
|
+
|
|
462
|
+
### 2. Update Secret Management
|
|
463
|
+
|
|
464
|
+
Migrate to proper secret management:
|
|
465
|
+
|
|
466
|
+
**Environment variables** (minimal):
|
|
467
|
+
```bash
|
|
468
|
+
# .env (never commit!)
|
|
469
|
+
DATABASE_URL=postgresql://user:pass@host:5432/db
|
|
470
|
+
API_KEY=sk_live_...
|
|
471
|
+
|
|
472
|
+
# .gitignore
|
|
473
|
+
.env
|
|
474
|
+
.env.local
|
|
475
|
+
```
|
|
476
|
+
|
|
477
|
+
**Secret management services**:
|
|
478
|
+
- AWS: Secrets Manager, Systems Manager Parameter Store
|
|
479
|
+
- GCP: Secret Manager
|
|
480
|
+
- Azure: Key Vault
|
|
481
|
+
- HashiCorp: Vault
|
|
482
|
+
- Kubernetes: Secrets
|
|
483
|
+
|
|
484
|
+
### 3. Document Incident
|
|
485
|
+
|
|
486
|
+
Create incident report including:
|
|
487
|
+
- **Timeline**: When secret was committed, detected, remediated
|
|
488
|
+
- **Exposure**: Duration, repository visibility, access scope
|
|
489
|
+
- **Impact**: Systems accessed, data at risk, unauthorized activity
|
|
490
|
+
- **Response**: Rotation completed, logs reviewed, history cleaned
|
|
491
|
+
- **Prevention**: Controls implemented to prevent recurrence
|
|
492
|
+
|
|
493
|
+
### 4. Team Training
|
|
494
|
+
|
|
495
|
+
Conduct training on:
|
|
496
|
+
- Using environment variables and secret management
|
|
497
|
+
- Pre-commit hooks and local scanning
|
|
498
|
+
- Recognizing secrets in code review
|
|
499
|
+
- Incident response procedures
|
|
500
|
+
|
|
501
|
+
### 5. Compliance Notifications
|
|
502
|
+
|
|
503
|
+
If required by regulations:
|
|
504
|
+
- **GDPR**: Notify supervisory authority within 72 hours if personal data at risk
|
|
505
|
+
- **PCI-DSS**: Notify card brands and processor if payment data affected
|
|
506
|
+
- **SOC2**: Document in compliance report, may trigger audit
|
|
507
|
+
- **HIPAA**: Notify covered entities if PHI exposed
|
|
508
|
+
|
|
509
|
+
## Prevention Checklist
|
|
510
|
+
|
|
511
|
+
- [ ] Credential rotated and old credential deactivated
|
|
512
|
+
- [ ] Access logs reviewed for unauthorized activity
|
|
513
|
+
- [ ] Secret removed from current code
|
|
514
|
+
- [ ] Git history cleaned (if applicable)
|
|
515
|
+
- [ ] Team notified of credential change
|
|
516
|
+
- [ ] Applications updated with new credential
|
|
517
|
+
- [ ] Pre-commit hooks installed
|
|
518
|
+
- [ ] CI/CD secret scanning enabled
|
|
519
|
+
- [ ] Secret management solution implemented
|
|
520
|
+
- [ ] Incident documented
|
|
521
|
+
- [ ] Compliance notifications sent (if required)
|
|
522
|
+
- [ ] Team training scheduled
|
|
523
|
+
|
|
524
|
+
## Emergency Contacts
|
|
525
|
+
|
|
526
|
+
Maintain contact list for rapid response:
|
|
527
|
+
- **Security Team**: security@company.com
|
|
528
|
+
- **DevOps On-Call**: devops-oncall@company.com
|
|
529
|
+
- **Cloud Provider Support**: Account-specific
|
|
530
|
+
- **Compliance Officer**: compliance@company.com
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: stack-selector
|
|
3
|
+
description: Map an ArchitectureDoc to concrete runtime, framework, database, queue/scheduler, and deployment target. Bias toward boring, popular, well-supported choices. Anti-pattern check on every selection.
|
|
4
|
+
triggers: [synapta stack, stack selection, framework choice, runtime, database choice]
|
|
5
|
+
network: off
|
|
6
|
+
tools: []
|
|
7
|
+
source:
|
|
8
|
+
origin: authored-by-synapta
|
|
9
|
+
reason: "Existing community skills are framework cheerleaders, not multi-axis selectors."
|
|
10
|
+
citation_patterns:
|
|
11
|
+
- "Choose Boring Technology — Dan McKinley"
|
|
12
|
+
- "Twelve-Factor App"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Stack Selector
|
|
16
|
+
|
|
17
|
+
Choose technologies the project will actually depend on. Bias hard toward boring and popular — more docs, easier hiring, fewer 3 AM surprises.
|
|
18
|
+
|
|
19
|
+
## Axes
|
|
20
|
+
|
|
21
|
+
| Axis | Default candidates | Avoid without justification |
|
|
22
|
+
|---|---|---|
|
|
23
|
+
| **Runtime** | Node 22 LTS, Bun 1.x, Python 3.12, Go 1.23 | bleeding-edge majors, unmaintained runtimes |
|
|
24
|
+
| **Framework** | Next.js (web), Fastify/Hono (API), Django/FastAPI (Python), Gin (Go) | rolled-your-own HTTP, abandoned forks |
|
|
25
|
+
| **Database** | Postgres | NoSQL for relational data; SQLite in distributed deploys |
|
|
26
|
+
| **Queue/Scheduler** | none, then BullMQ / SQS / Temporal / Cron | bespoke queue implementations |
|
|
27
|
+
| **Auth** | external IdP (Auth0, Clerk, Workos, Cognito) | rolled-your-own |
|
|
28
|
+
| **Observability** | OpenTelemetry + a managed backend | grep-the-logs |
|
|
29
|
+
| **Deployment** | one of `deploy-{vercel, fly, railway, cloudflare, docker, k8s, ssh}` adapters | mix-and-match providers across the same plane |
|
|
30
|
+
|
|
31
|
+
## Process
|
|
32
|
+
|
|
33
|
+
1. Read `ArchitectureDoc`. Note: tenancy, geo, latency budget, compliance, integrations.
|
|
34
|
+
2. For each axis, propose the default; if rejecting, write one sentence justifying why.
|
|
35
|
+
3. Cross-check the proposal against `deploy-*` skills' `preflightFor` to confirm the chosen deployment target supports the chosen runtime/framework.
|
|
36
|
+
4. Output: `StackSelection` artifact (table + one-sentence justification per axis) and a list of decisions that need ADRs.
|
|
37
|
+
|
|
38
|
+
## Default rejections (require explicit justification to override)
|
|
39
|
+
|
|
40
|
+
- ORMs: prefer query builders or SQL strings + a thin migration tool over heavy ORM for new projects
|
|
41
|
+
- GraphQL: don't introduce GraphQL unless there are ≥3 distinct clients with different field needs
|
|
42
|
+
- Service mesh: don't introduce until you have ≥5 services actually communicating
|
|
43
|
+
- Custom build tooling: don't write a bundler; use Vite/esbuild/tsup
|
|
44
|
+
- Kubernetes for <3-service projects: use the platform tier instead
|
|
45
|
+
|
|
46
|
+
## Output shape
|
|
47
|
+
|
|
48
|
+
```yaml
|
|
49
|
+
runtime: { choice: "Node 22 LTS", reason: "team familiarity + Synapta CLI ecosystem" }
|
|
50
|
+
framework: { choice: "Fastify", reason: "Node, async, plugin model, used by gateway" }
|
|
51
|
+
database: { choice: "Postgres 16", reason: "default; relational data; mature tooling" }
|
|
52
|
+
queue: { choice: "none", reason: "no background work needed at v0" }
|
|
53
|
+
auth: { choice: "Auth0", reason: "SOC2 boundary + existing IdP" }
|
|
54
|
+
observability: { choice: "OpenTelemetry + Grafana Cloud", reason: "OSS protocol + managed backend" }
|
|
55
|
+
deployment: { choice: "Fly.io", reason: "multi-region + persistent storage + secrets via flyctl" }
|
|
56
|
+
```
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: telegram-control
|
|
3
|
+
synapta_original_name: telegram-reminders
|
|
4
|
+
triggers: [synapta telegram, BYO bot, approval bot, telegram allowlist]
|
|
5
|
+
network: allowlist
|
|
6
|
+
source:
|
|
7
|
+
origin: https://github.com/AlexSKuznetsov/claude-skill-telegram
|
|
8
|
+
path: /
|
|
9
|
+
commit: 06a7b02172c4
|
|
10
|
+
license: see source repo
|
|
11
|
+
adapted: light-touch
|
|
12
|
+
note: "Source skill is reminder-focused; Synapta uses it as a starting pattern for BYO-bot allowlisted command routing. Synapta does NOT use Convex; see Synapta gateway docs for the production wiring."
|
|
13
|
+
description: Send reminders and messages to Telegram with cloud-based scheduling. Use when the user wants to send immediate messages or schedule future reminders to Telegram. Supports text messages, timestamp-based scheduling, recurring reminders, viewing and canceling scheduled messages, and message history.
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Telegram Reminders Skill
|
|
17
|
+
|
|
18
|
+
Send immediate messages and schedule reminders to Telegram with cloud-based scheduling powered by Convex. Your reminders run 24/7 in Convex Cloud with zero infrastructure management.
|
|
19
|
+
|
|
20
|
+
## Quick Reference
|
|
21
|
+
|
|
22
|
+
IMPORTANT! Always use these commands in order:
|
|
23
|
+
|
|
24
|
+
- Send now: `tsx scripts/send_message.ts [message_text]`
|
|
25
|
+
- Send now with attachment: `tsx scripts/send_message.ts [message_text] /path/to/file.pdf`
|
|
26
|
+
- Schedule: `tsx scripts/schedule_message.ts [time expression] [title] [message_text] [file_path]`
|
|
27
|
+
- Schedule with attachment: `tsx scripts/schedule_message.ts [time expression] [title] [message_text] /path/to/file`
|
|
28
|
+
- List pending: `tsx scripts/list_scheduled.ts`
|
|
29
|
+
- Cancel: `tsx scripts/cancel_message.ts <message_id>`
|
|
30
|
+
- History: `tsx scripts/view_history.ts [limit]`
|
|
31
|
+
|
|
32
|
+
## Initial Setup
|
|
33
|
+
|
|
34
|
+
**Prerequisites** (user must provide):
|
|
35
|
+
|
|
36
|
+
1. **Bot Token**: Message [@BotFather](https://t.me/BotFather) → `/newbot` → copy token
|
|
37
|
+
2. **User ID**: Message [@userinfobot](https://t.me/userinfobot) → copy numeric ID
|
|
38
|
+
3. **Deploy Key**: [dashboard.convex.dev](https://dashboard.convex.dev) → Create project → Settings → Deploy Keys → Create "Production" key
|
|
39
|
+
|
|
40
|
+
**Setup steps**:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# 1. Install dependencies
|
|
44
|
+
cd /mnt/skills/user/telegram-reminders && npm install
|
|
45
|
+
|
|
46
|
+
# 2. Save configuration
|
|
47
|
+
mkdir -p /mnt/user-data/outputs
|
|
48
|
+
cat > /mnt/user-data/outputs/telegram_config.json << 'EOF'
|
|
49
|
+
{
|
|
50
|
+
"botToken": "YOUR_BOT_TOKEN",
|
|
51
|
+
"userId": "YOUR_USER_ID",
|
|
52
|
+
"deployKey": "YOUR_DEPLOY_KEY",
|
|
53
|
+
"setupDate": "CURRENT_DATE"
|
|
54
|
+
}
|
|
55
|
+
EOF
|
|
56
|
+
|
|
57
|
+
# 3. Create .env.local
|
|
58
|
+
cat > .env.local << 'EOF'
|
|
59
|
+
CONVEX_DEPLOY_KEY=YOUR_DEPLOY_KEY
|
|
60
|
+
EOF
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
# 4. Set environment variables in Convex
|
|
64
|
+
npx convex env set TELEGRAM_BOT_TOKEN "YOUR_BOT_TOKEN"
|
|
65
|
+
npx convex env set TELEGRAM_USER_ID "YOUR_USER_ID"
|
|
66
|
+
|
|
67
|
+
# 5. Deploy to Convex
|
|
68
|
+
npx convex deploy
|
|
69
|
+
|
|
70
|
+
# 6. Test with a message
|
|
71
|
+
tsx scripts/send_message.ts "Setup complete!"
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**Critical**: User must start a chat with their bot (search and press "Start") before the bot can send messages.
|
|
75
|
+
|
|
76
|
+
## Core Operations
|
|
77
|
+
|
|
78
|
+
### Send Immediate Message
|
|
79
|
+
|
|
80
|
+
**Send text message**:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
tsx scripts/send_message.ts "Your message text here"
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
**Example with special characters**:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
tsx scripts/send_message.ts "Hello! Here's a test message 🚀"
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Timezone
|
|
93
|
+
|
|
94
|
+
All times use user's configured timezone. The Convex backend stores UTC internally; client scripts handle conversion via chrono-node.
|
|
95
|
+
|
|
96
|
+
## Limitations
|
|
97
|
+
|
|
98
|
+
- Files sent as documents (not inline images)
|
|
99
|
+
- Maximum file size: 50MB (Telegram limit)
|
|
100
|
+
- Cron granularity: 1 minute minimum
|
|
101
|
+
- No message editing (cancel and reschedule instead)
|
|
102
|
+
- Rate limits: 20 messages/minute per user
|
|
103
|
+
|
|
104
|
+
## References
|
|
105
|
+
|
|
106
|
+
- [`references/initial_setup.md`](references/initial_setup.md) - Detailed setup process
|
|
107
|
+
- [`references/architecture.md`](references/architecture.md) - System architecture
|
|
108
|
+
- [`references/convex.md`](references/convex.md) - Convex platform details
|
|
109
|
+
- [`references/telegram_api.md`](references/telegram_api.md) - Telegram Bot API
|
|
110
|
+
- [`references/error_handling.md`](references/error_handling.md) - Error resolution guide
|