@synapta/skills 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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-deepener/SKILL.md +86 -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
package/dist/index.js
CHANGED
|
@@ -62,9 +62,16 @@ function parseSkillMd(source) {
|
|
|
62
62
|
// src/load-bundled.ts
|
|
63
63
|
import { readdir, readFile, stat } from "fs/promises";
|
|
64
64
|
import { existsSync } from "fs";
|
|
65
|
-
import { join, resolve } from "path";
|
|
65
|
+
import { dirname, join, resolve } from "path";
|
|
66
|
+
import { fileURLToPath } from "url";
|
|
67
|
+
function resolveDefaultSkillsRoot() {
|
|
68
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
69
|
+
const inPackage = resolve(here, "..", "skills");
|
|
70
|
+
if (existsSync(inPackage)) return inPackage;
|
|
71
|
+
return resolve(process.cwd(), "skills");
|
|
72
|
+
}
|
|
66
73
|
async function loadBundledSkills(opts = {}) {
|
|
67
|
-
const root = opts.skillsRoot ? resolve(opts.skillsRoot) :
|
|
74
|
+
const root = opts.skillsRoot ? resolve(opts.skillsRoot) : resolveDefaultSkillsRoot();
|
|
68
75
|
if (!existsSync(root)) return [];
|
|
69
76
|
const entries = await readdir(root, { withFileTypes: true });
|
|
70
77
|
const skills = [];
|
|
@@ -94,10 +101,10 @@ async function loadBundledSkills(opts = {}) {
|
|
|
94
101
|
// src/scanner.ts
|
|
95
102
|
import { readdir as readdir2, stat as stat2 } from "fs/promises";
|
|
96
103
|
import { existsSync as existsSync2 } from "fs";
|
|
97
|
-
import { dirname, join as join2, extname } from "path";
|
|
104
|
+
import { dirname as dirname2, join as join2, extname } from "path";
|
|
98
105
|
var EXECUTABLE_EXTS = /* @__PURE__ */ new Set([".js", ".mjs", ".cjs", ".ts", ".mts", ".cts", ".sh", ".bash", ".py", ".rb"]);
|
|
99
106
|
async function scanSkill(loaded, _opts = {}) {
|
|
100
|
-
const dir =
|
|
107
|
+
const dir = dirname2(loaded.path);
|
|
101
108
|
const execs = await findExecutables(dir);
|
|
102
109
|
return {
|
|
103
110
|
skill: loaded.manifest.name,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@synapta/skills",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Agent Skills loader + bundled default skill pack",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -12,8 +12,7 @@
|
|
|
12
12
|
},
|
|
13
13
|
"files": [
|
|
14
14
|
"dist",
|
|
15
|
-
"skills
|
|
16
|
-
"skills/**/assets/**",
|
|
15
|
+
"skills",
|
|
17
16
|
"README.md",
|
|
18
17
|
"LICENSE"
|
|
19
18
|
],
|
|
@@ -27,7 +26,7 @@
|
|
|
27
26
|
"dependencies": {
|
|
28
27
|
"yaml": "^2.5.0",
|
|
29
28
|
"zod": "^3.23.0",
|
|
30
|
-
"@synapta/schemas": "0.
|
|
29
|
+
"@synapta/schemas": "0.2.0"
|
|
31
30
|
},
|
|
32
31
|
"devDependencies": {
|
|
33
32
|
"tsup": "^8.3.0",
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Synapta Skill Pack — Attribution
|
|
2
|
+
|
|
3
|
+
Synapta's default skill pack is composed of community-published Agent Skills, adapted "light-touch" (rename, retrigger, add Synapta source frontmatter; body kept verbatim) plus skills we authored from scratch where no upstream existed.
|
|
4
|
+
|
|
5
|
+
All adopted skills retain their original license. License files and the source `commit:` SHA are recorded in each SKILL.md's `source:` frontmatter block. The clones used during adaptation live in `.research/` (gitignored).
|
|
6
|
+
|
|
7
|
+
If you author a derivative work from Synapta's skill pack, include the upstream attribution chain.
|
|
8
|
+
|
|
9
|
+
## Adopted skills (24)
|
|
10
|
+
|
|
11
|
+
| Synapta skill | Upstream repo | Path | License | Commit |
|
|
12
|
+
|---|---|---|---|---|
|
|
13
|
+
| `mcp-builder` | [anthropics/skills](https://github.com/anthropics/skills) | `skills/mcp-builder` | see `LICENSE.txt` in source | `f458cee31a75` |
|
|
14
|
+
| `apps-sdk-builder` | [openai/skills](https://github.com/openai/skills) | `skills/.curated/chatgpt-apps` | see `LICENSE.txt` in source | `c25113bf4c64` |
|
|
15
|
+
| `playwright-qa` | [openai/skills](https://github.com/openai/skills) | `skills/.curated/playwright` | see `LICENSE.txt` + `NOTICE.txt` in source | `c25113bf4c64` |
|
|
16
|
+
| `deploy-vercel` | [vercel-labs/agent-skills](https://github.com/vercel-labs/agent-skills) | `skills/deploy-to-vercel` | see source repo | `b9c8ee0643d8` |
|
|
17
|
+
| `deploy-railway` | [railwayapp/railway-skills](https://github.com/railwayapp/railway-skills) | `plugins/railway/skills/use-railway` | MIT (Railway Corporation) | `380a2abbb0f9` |
|
|
18
|
+
| `deploy-cloudflare` | [cloudflare/skills](https://github.com/cloudflare/skills) | `skills/wrangler` | Apache-2.0 | `60147cbb7736` |
|
|
19
|
+
| `deploy-k8s` | [LukasNiessen/kubernetes-skill](https://github.com/LukasNiessen/kubernetes-skill) | `/` | see source repo `LICENSE` | `b7d32502e316` |
|
|
20
|
+
| `deploy-docker` | [github/awesome-copilot](https://github.com/github/awesome-copilot) | `skills/multi-stage-dockerfile` | MIT (GitHub, Inc.) | `4e4b34c48d3f` |
|
|
21
|
+
| `deploy-fly` | [yurikoval/dotfiles](https://github.com/yurikoval/dotfiles) | `claude/.claude/skills/flyctl` | see source repo | `933ff7260f40` |
|
|
22
|
+
| `dep-sbom-scan` | [AgentSecOps/SecOpsAgentKit](https://github.com/AgentSecOps/SecOpsAgentKit) | `skills/devsecops/sca-trivy` | see source repo | `6e25a4bc5743` |
|
|
23
|
+
| `iac-scan` | [AgentSecOps/SecOpsAgentKit](https://github.com/AgentSecOps/SecOpsAgentKit) | `skills/devsecops/iac-checkov` | see source repo | `6e25a4bc5743` |
|
|
24
|
+
| `secret-hygiene` | [AgentSecOps/SecOpsAgentKit](https://github.com/AgentSecOps/SecOpsAgentKit) | `skills/devsecops/secrets-gitleaks` | see source repo | `6e25a4bc5743` |
|
|
25
|
+
| `dast-zap` | [AgentSecOps/SecOpsAgentKit](https://github.com/AgentSecOps/SecOpsAgentKit) | `skills/appsec/dast-zap` | see source repo | `6e25a4bc5743` |
|
|
26
|
+
| `threat-model` | [sethdford/claude-skills](https://github.com/sethdford/claude-skills) | `security/threat-modeling/skills/stride-analysis` | MIT (Seth Ford) | `00bd9265f5a3` |
|
|
27
|
+
| `incident-triage` | [wshobson/agents](https://github.com/wshobson/agents) | `plugins/incident-response/skills/incident-runbook-templates` | MIT (Seth Hobson) | `112197c6bfd0` |
|
|
28
|
+
| `docs-runbooks` | [wshobson/agents](https://github.com/wshobson/agents) | `plugins/incident-response/skills/postmortem-writing` | MIT (Seth Hobson) | `112197c6bfd0` |
|
|
29
|
+
| `ops-sre` | [VoltAgent/awesome-claude-code-subagents](https://github.com/VoltAgent/awesome-claude-code-subagents) | `categories/03-infrastructure/sre-engineer.md` | MIT (VoltAgent) | `6f804f0cfab2` |
|
|
30
|
+
| `repo-bootstrap` | [netresearch/agent-rules-skill](https://github.com/netresearch/agent-rules-skill) | `skills/agent-rules` | MIT AND CC-BY-SA-4.0 (Netresearch DTT GmbH) | `9d1c57d1a131` |
|
|
31
|
+
| `backlog-planner` | [github/awesome-copilot](https://github.com/github/awesome-copilot) | `plugins/project-planning/skills/breakdown-epic-pm` | MIT (GitHub, Inc.) | `4e4b34c48d3f` |
|
|
32
|
+
| `ui-flow` | [nextlevelbuilder/ui-ux-pro-max-skill](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill) | `.claude/skills/ui-ux-pro-max` | MIT (Next Level Builder) | `b7e3af80f6e3` |
|
|
33
|
+
| `accessibility-audit` | [CrazyDubya/claude-skills](https://github.com/CrazyDubya/claude-skills) | `accessibility-auditor` | see source repo | `2798bb084fdf` |
|
|
34
|
+
| `telegram-control` | [AlexSKuznetsov/claude-skill-telegram](https://github.com/AlexSKuznetsov/claude-skill-telegram) | `/` | see source repo | `06a7b02172c4` |
|
|
35
|
+
| `concept-discovery` | [alirezarezvani/claude-skills](https://github.com/alirezarezvani/claude-skills) | `product-team/code-to-prd/skills/code-to-prd` | MIT (Alireza Rezvani) | `0796e1d70a9d` |
|
|
36
|
+
| `test-strategy` | [nousresearch/hermes-agent](https://github.com/nousresearch/hermes-agent) | `skills/software-development/test-driven-development` | MIT | hermes-agent main |
|
|
37
|
+
|
|
38
|
+
## Authored by Synapta (write-fresh)
|
|
39
|
+
|
|
40
|
+
These skills had no quality community upstream at adoption time. Synapta authors them with citations to the underlying public docs / patterns rather than community SKILL.md files.
|
|
41
|
+
|
|
42
|
+
| Synapta skill | Reason | Citation patterns |
|
|
43
|
+
|---|---|---|
|
|
44
|
+
| `architecture-selector` | No upstream selector found (existing skills were framework cheerleaders, not multi-axis selectors) | Twelve-Factor, AWS Well-Architected, Monolith First (Martin Fowler) |
|
|
45
|
+
| `stack-selector` | Same — no multi-axis stack picker | — |
|
|
46
|
+
| `schema-api-contracts` | Existing repos are codegen tools, not contract-first skills | Zod, Prisma, OpenAPI, tRPC docs |
|
|
47
|
+
| `ts-lint` | No SKILL.md found | typescript-eslint, Prettier, tsc strict docs |
|
|
48
|
+
| `release-publish` | skills.rest entry was 403; no good GH source | npm OIDC / Trusted Publishing docs, Changesets docs |
|
|
49
|
+
| `deploy-ssh` | Surprising community gap | DeployHQ rsync patterns, Lambros Petrou zero-downtime patterns |
|
|
50
|
+
| `drive-status-renderer` | Synapta-specific (iOS/CarPlay glanceable cards backed by gateway state) | WidgetKit, ActivityKit |
|
|
51
|
+
| `voice-command-router` | Synapta-specific (Siri/App Intents → gateway approval) | App Intents framework |
|
|
52
|
+
| `approval-policy-enforcer` | Synapta-specific (policies like "never deploy from car") | — |
|
|
53
|
+
| `incident-briefing` | Synapta-specific (voice-only hands-free summary) | TTS providers, SSML |
|
|
54
|
+
| `mobile-pairing` | Synapta-specific (QR/device-code pairing to local gateway) | openclaw pairing model (clean-room) |
|
|
55
|
+
| `apns-notifier` | Synapta-specific (gateway APNs delivery) | Apple Push Notification service docs |
|
|
56
|
+
| `widget-live-activity-sync` | Synapta-specific (Widget + Live Activity ↔ gateway) | ActivityKit, push tokens |
|
|
57
|
+
| `carplay-entitlement-checker` | Synapta-specific (verify entitlement, Track A fallback) | Apple CarPlay programming guide |
|
|
58
|
+
|
|
59
|
+
## Sister skills available for future expansion
|
|
60
|
+
|
|
61
|
+
These upstream sources contain additional skills adjacent to what Synapta adopted. Consider pulling them into v0.1+ as sub-packs.
|
|
62
|
+
|
|
63
|
+
- **threat-modeling pack** ([sethdford/claude-skills](https://github.com/sethdford/claude-skills)/security/threat-modeling/skills/): data-flow-diagram-security, risk-scoring, asset-inventory, attack-tree-modeling, threat-identification, abuse-case-design, threat-library, trust-boundary-analysis
|
|
64
|
+
- **incident-response pack** ([wshobson/agents](https://github.com/wshobson/agents)/plugins/incident-response/skills/): on-call-handoff-patterns, plus all of `sethdford/claude-skills/security/incident-response/skills/`
|
|
65
|
+
- **project-planning pack** ([github/awesome-copilot](https://github.com/github/awesome-copilot)/plugins/project-planning/skills/): breakdown-feature-prd, breakdown-feature-implementation, breakdown-epic-arch, create-implementation-plan, update-implementation-plan, create-technical-spike
|
|
66
|
+
- **secops devsecops pack** ([AgentSecOps/SecOpsAgentKit](https://github.com/AgentSecOps/SecOpsAgentKit)): container-grype, container-hadolint, sast-bandit, sast-semgrep, api-mitmproxy, api-spectral, sca-blackduck, sast-horusec, sbom-syft, reviewdog, policy-opa, vuln-defectdojo
|
|
67
|
+
- **cloudflare pack** ([cloudflare/skills](https://github.com/cloudflare/skills)): durable-objects, agents-sdk, cloudflare-email-service, workers-best-practices, sandbox-sdk, web-perf
|
|
68
|
+
- **vercel pack** ([vercel-labs/agent-skills](https://github.com/vercel-labs/agent-skills)): web-design-guidelines, vercel-cli-with-tokens, composition-patterns, react-best-practices, react-view-transitions, react-native-skills
|
|
69
|
+
- **hermes software-development** ([nousresearch/hermes-agent](https://github.com/nousresearch/hermes-agent)/skills/software-development/): plan, writing-plans, requesting-code-review, subagent-driven-development, systematic-debugging, spike, hermes-agent-skill-authoring
|
|
70
|
+
- **hermes mcp** (`skills/mcp/native-mcp/` + `optional-skills/mcp/fastmcp/`)
|
|
71
|
+
- **levnikolaevich code auditors** ([levnikolaevich/claude-code-skills](https://github.com/levnikolaevich/claude-code-skills)/plugins/codebase-audit-suite/): 30+ auditor skills (pattern-fitness, layer-ownership, transaction-correctness, test-business-logic, runtime-performance, dependency-topology, etc.)
|
|
72
|
+
|
|
73
|
+
## License compliance notes
|
|
74
|
+
|
|
75
|
+
- All upstream licenses observed at adoption time are MIT, Apache-2.0, or repository-defined permissive licenses compatible with Synapta's Apache-2.0.
|
|
76
|
+
- `repo-bootstrap` upstream is dual-licensed (MIT AND CC-BY-SA-4.0); the CC-BY-SA-4.0 portion applies to documentation/examples and requires share-alike attribution when redistributed.
|
|
77
|
+
- `accessibility-audit` and `concept-discovery` sources lacked top-level LICENSE files at time of clone; treat as "all rights reserved" until upstream license is confirmed. Open an issue if you intend to redistribute these.
|
|
78
|
+
- `deploy-fly` source repo (`yurikoval/dotfiles`) lacked a top-level LICENSE file; treat with caution.
|
|
79
|
+
|
|
80
|
+
If you spot a license-compliance issue, please file an issue or email the contact in `SECURITY.md`.
|
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: accessibility-audit
|
|
3
|
+
synapta_original_name: accessibility-auditor
|
|
4
|
+
triggers: [synapta a11y, WCAG, VoiceOver, ARIA, keyboard nav, accessibility]
|
|
5
|
+
network: off
|
|
6
|
+
source:
|
|
7
|
+
origin: https://github.com/CrazyDubya/claude-skills
|
|
8
|
+
path: accessibility-auditor
|
|
9
|
+
commit: 2798bb084fdf
|
|
10
|
+
license: see source repo
|
|
11
|
+
adapted: light-touch
|
|
12
|
+
description: Reviews UI components for WCAG compliance, ARIA attributes, keyboard navigation, and screen reader support. Use when building frontend components or user requests accessibility improvements.
|
|
13
|
+
allowed-tools: Read, Grep, Glob
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Accessibility Auditor
|
|
17
|
+
|
|
18
|
+
Audits web applications for accessibility compliance (WCAG 2.1 Level AA) and suggests improvements.
|
|
19
|
+
|
|
20
|
+
## When to Use
|
|
21
|
+
- Building or reviewing UI components
|
|
22
|
+
- User requests accessibility improvements
|
|
23
|
+
- Preparing for accessibility audit
|
|
24
|
+
- User mentions "accessibility", "a11y", "WCAG", "screen reader", or "keyboard navigation"
|
|
25
|
+
|
|
26
|
+
## Instructions
|
|
27
|
+
|
|
28
|
+
### 1. Semantic HTML Check
|
|
29
|
+
|
|
30
|
+
**Use proper HTML elements:**
|
|
31
|
+
```html
|
|
32
|
+
<!-- Bad -->
|
|
33
|
+
<div onclick="submit()">Submit</div>
|
|
34
|
+
|
|
35
|
+
<!-- Good -->
|
|
36
|
+
<button onclick="submit()">Submit</button>
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**Semantic structure:**
|
|
40
|
+
- `<header>`, `<nav>`, `<main>`, `<footer>`
|
|
41
|
+
- `<article>`, `<section>`, `<aside>`
|
|
42
|
+
- `<h1>` through `<h6>` in proper hierarchy
|
|
43
|
+
- `<button>` for actions, `<a>` for navigation
|
|
44
|
+
|
|
45
|
+
### 2. ARIA Attributes
|
|
46
|
+
|
|
47
|
+
**When to use ARIA:**
|
|
48
|
+
- Custom widgets (tabs, accordions, modals)
|
|
49
|
+
- Dynamic content updates
|
|
50
|
+
- Complex interactions
|
|
51
|
+
- When semantic HTML isn't sufficient
|
|
52
|
+
|
|
53
|
+
**Common ARIA attributes:**
|
|
54
|
+
```html
|
|
55
|
+
<!-- Landmark roles -->
|
|
56
|
+
<nav role="navigation" aria-label="Main">
|
|
57
|
+
|
|
58
|
+
<!-- Widget roles -->
|
|
59
|
+
<div role="button" tabindex="0" aria-pressed="false">
|
|
60
|
+
|
|
61
|
+
<!-- Live regions -->
|
|
62
|
+
<div role="alert" aria-live="assertive">Error occurred</div>
|
|
63
|
+
|
|
64
|
+
<!-- Labels and descriptions -->
|
|
65
|
+
<button aria-label="Close dialog">×</button>
|
|
66
|
+
<input aria-describedby="password-help" />
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**First rule of ARIA:** Don't use ARIA if semantic HTML works
|
|
70
|
+
|
|
71
|
+
### 3. Keyboard Navigation
|
|
72
|
+
|
|
73
|
+
**All interactive elements must be keyboard accessible:**
|
|
74
|
+
```javascript
|
|
75
|
+
// Add keyboard support to custom elements
|
|
76
|
+
<div
|
|
77
|
+
role="button"
|
|
78
|
+
tabindex="0"
|
|
79
|
+
onClick={handleClick}
|
|
80
|
+
onKeyDown={(e) => {
|
|
81
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
82
|
+
handleClick();
|
|
83
|
+
}
|
|
84
|
+
}}
|
|
85
|
+
>
|
|
86
|
+
Click me
|
|
87
|
+
</div>
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
**Tab order:**
|
|
91
|
+
- Use `tabindex="0"` for custom interactive elements
|
|
92
|
+
- Avoid `tabindex > 0` (creates confusing tab order)
|
|
93
|
+
- Use `tabindex="-1"` for programmatic focus only
|
|
94
|
+
|
|
95
|
+
**Focus management:**
|
|
96
|
+
- Visible focus indicators
|
|
97
|
+
- Trap focus in modals
|
|
98
|
+
- Return focus when closing dialogs
|
|
99
|
+
- Skip links for main content
|
|
100
|
+
|
|
101
|
+
### 4. Alt Text and Images
|
|
102
|
+
|
|
103
|
+
**Informative images:**
|
|
104
|
+
```html
|
|
105
|
+
<img src="chart.png" alt="Sales increased 25% in Q3" />
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**Decorative images:**
|
|
109
|
+
```html
|
|
110
|
+
<img src="decoration.png" alt="" />
|
|
111
|
+
<!-- or -->
|
|
112
|
+
<img src="decoration.png" role="presentation" />
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**Complex images:**
|
|
116
|
+
```html
|
|
117
|
+
<figure>
|
|
118
|
+
<img src="complex-chart.png" alt="Quarterly sales chart" />
|
|
119
|
+
<figcaption>
|
|
120
|
+
Detailed description of the chart data...
|
|
121
|
+
</figcaption>
|
|
122
|
+
</figure>
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### 5. Color and Contrast
|
|
126
|
+
|
|
127
|
+
**Contrast ratios (WCAG AA):**
|
|
128
|
+
- Normal text: 4.5:1 minimum
|
|
129
|
+
- Large text (18pt+): 3:1 minimum
|
|
130
|
+
- UI components: 3:1 minimum
|
|
131
|
+
|
|
132
|
+
**Don't rely on color alone:**
|
|
133
|
+
```html
|
|
134
|
+
<!-- Bad: Color only -->
|
|
135
|
+
<span style="color: red;">Error</span>
|
|
136
|
+
|
|
137
|
+
<!-- Good: Icon + color -->
|
|
138
|
+
<span style="color: red;">
|
|
139
|
+
<svg aria-hidden="true"><!-- error icon --></svg>
|
|
140
|
+
<span class="sr-only">Error: </span>
|
|
141
|
+
Invalid input
|
|
142
|
+
</span>
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### 6. Forms and Labels
|
|
146
|
+
|
|
147
|
+
**Every input needs a label:**
|
|
148
|
+
```html
|
|
149
|
+
<!-- Explicit label -->
|
|
150
|
+
<label for="email">Email</label>
|
|
151
|
+
<input id="email" type="email" />
|
|
152
|
+
|
|
153
|
+
<!-- Implicit label -->
|
|
154
|
+
<label>
|
|
155
|
+
Email
|
|
156
|
+
<input type="email" />
|
|
157
|
+
</label>
|
|
158
|
+
|
|
159
|
+
<!-- aria-label for icon buttons -->
|
|
160
|
+
<button aria-label="Search">
|
|
161
|
+
<svg><!-- search icon --></svg>
|
|
162
|
+
</button>
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
**Error messages:**
|
|
166
|
+
```html
|
|
167
|
+
<input
|
|
168
|
+
id="password"
|
|
169
|
+
aria-invalid="true"
|
|
170
|
+
aria-describedby="password-error"
|
|
171
|
+
/>
|
|
172
|
+
<div id="password-error" role="alert">
|
|
173
|
+
Password must be at least 8 characters
|
|
174
|
+
</div>
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### 7. Headings and Document Structure
|
|
178
|
+
|
|
179
|
+
**Proper heading hierarchy:**
|
|
180
|
+
```html
|
|
181
|
+
<h1>Page Title</h1>
|
|
182
|
+
<h2>Section 1</h2>
|
|
183
|
+
<h3>Subsection 1.1</h3>
|
|
184
|
+
<h3>Subsection 1.2</h3>
|
|
185
|
+
<h2>Section 2</h2>
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
**Don't skip levels:** h1 → h2 → h3 (not h1 → h3)
|
|
189
|
+
|
|
190
|
+
### 8. Dynamic Content
|
|
191
|
+
|
|
192
|
+
**Announce updates to screen readers:**
|
|
193
|
+
```html
|
|
194
|
+
<!-- Polite: wait for user to pause -->
|
|
195
|
+
<div role="status" aria-live="polite">
|
|
196
|
+
5 new messages
|
|
197
|
+
</div>
|
|
198
|
+
|
|
199
|
+
<!-- Assertive: interrupt immediately -->
|
|
200
|
+
<div role="alert" aria-live="assertive">
|
|
201
|
+
Your session will expire in 1 minute
|
|
202
|
+
</div>
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
**Loading states:**
|
|
206
|
+
```html
|
|
207
|
+
<button aria-busy="true" aria-label="Loading...">
|
|
208
|
+
<span aria-hidden="true">Loading</span>
|
|
209
|
+
</button>
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### 9. Screen Reader Testing
|
|
213
|
+
|
|
214
|
+
**Screen reader only text:**
|
|
215
|
+
```css
|
|
216
|
+
.sr-only {
|
|
217
|
+
position: absolute;
|
|
218
|
+
width: 1px;
|
|
219
|
+
height: 1px;
|
|
220
|
+
padding: 0;
|
|
221
|
+
margin: -1px;
|
|
222
|
+
overflow: hidden;
|
|
223
|
+
clip: rect(0, 0, 0, 0);
|
|
224
|
+
white-space: nowrap;
|
|
225
|
+
border-width: 0;
|
|
226
|
+
}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
**Hide decorative elements:**
|
|
230
|
+
```html
|
|
231
|
+
<svg aria-hidden="true"><!-- icon --></svg>
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
### 10. Common Issues to Check
|
|
235
|
+
|
|
236
|
+
**Missing:**
|
|
237
|
+
- [ ] Alt text on images
|
|
238
|
+
- [ ] Labels on form inputs
|
|
239
|
+
- [ ] Proper heading hierarchy
|
|
240
|
+
- [ ] Keyboard focus indicators
|
|
241
|
+
- [ ] ARIA labels on icon buttons
|
|
242
|
+
|
|
243
|
+
**Improper:**
|
|
244
|
+
- [ ] Low contrast text
|
|
245
|
+
- [ ] Non-semantic markup (divs as buttons)
|
|
246
|
+
- [ ] Missing focus management in modals
|
|
247
|
+
- [ ] Keyboard traps
|
|
248
|
+
- [ ] Auto-playing media
|
|
249
|
+
|
|
250
|
+
**Testing:**
|
|
251
|
+
- [ ] Keyboard only navigation
|
|
252
|
+
- [ ] Screen reader (NVDA, JAWS, VoiceOver)
|
|
253
|
+
- [ ] Color blindness simulation
|
|
254
|
+
- [ ] Zoom to 200%
|
|
255
|
+
- [ ] Automated tools (axe, Lighthouse)
|
|
256
|
+
|
|
257
|
+
### 11. Automated Testing
|
|
258
|
+
|
|
259
|
+
**Tools:**
|
|
260
|
+
```bash
|
|
261
|
+
# Lighthouse
|
|
262
|
+
npx lighthouse https://example.com --only-categories=accessibility
|
|
263
|
+
|
|
264
|
+
# axe-core
|
|
265
|
+
npm install --save-dev @axe-core/cli
|
|
266
|
+
npx axe https://example.com
|
|
267
|
+
|
|
268
|
+
# pa11y
|
|
269
|
+
npm install --save-dev pa11y
|
|
270
|
+
npx pa11y https://example.com
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
**In tests:**
|
|
274
|
+
```javascript
|
|
275
|
+
import { axe } from 'jest-axe';
|
|
276
|
+
|
|
277
|
+
test('should have no accessibility violations', async () => {
|
|
278
|
+
const { container } = render(<MyComponent />);
|
|
279
|
+
const results = await axe(container);
|
|
280
|
+
expect(results).toHaveNoViolations();
|
|
281
|
+
});
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
### 12. WCAG 2.1 Level AA Checklist
|
|
285
|
+
|
|
286
|
+
**Perceivable:**
|
|
287
|
+
- [ ] Text alternatives for non-text content
|
|
288
|
+
- [ ] Captions for audio/video
|
|
289
|
+
- [ ] Content adaptable (semantic markup)
|
|
290
|
+
- [ ] Sufficient color contrast
|
|
291
|
+
|
|
292
|
+
**Operable:**
|
|
293
|
+
- [ ] Keyboard accessible
|
|
294
|
+
- [ ] No keyboard traps
|
|
295
|
+
- [ ] Adequate time limits (adjustable)
|
|
296
|
+
- [ ] No seizure-inducing flashing
|
|
297
|
+
- [ ] Skip navigation links
|
|
298
|
+
- [ ] Descriptive page titles
|
|
299
|
+
- [ ] Focus order makes sense
|
|
300
|
+
- [ ] Link purpose clear from context
|
|
301
|
+
|
|
302
|
+
**Understandable:**
|
|
303
|
+
- [ ] Language of page specified (`<html lang="en">`)
|
|
304
|
+
- [ ] Predictable navigation
|
|
305
|
+
- [ ] Input assistance (labels, instructions, error messages)
|
|
306
|
+
|
|
307
|
+
**Robust:**
|
|
308
|
+
- [ ] Valid HTML
|
|
309
|
+
- [ ] Name, role, value for custom widgets
|
|
310
|
+
- [ ] Compatible with assistive technologies
|
|
311
|
+
|
|
312
|
+
## Best Practices
|
|
313
|
+
|
|
314
|
+
- Build accessibility in from start
|
|
315
|
+
- Test with real assistive technologies
|
|
316
|
+
- Use semantic HTML first, ARIA second
|
|
317
|
+
- Maintain logical document structure
|
|
318
|
+
- Provide multiple ways to access content
|
|
319
|
+
- Test keyboard navigation thoroughly
|
|
320
|
+
- Don't disable zoom
|
|
321
|
+
- Use landmarks and headings
|
|
322
|
+
|
|
323
|
+
## Supporting Files
|
|
324
|
+
- `reference/wcag-checklist.md`: Full WCAG 2.1 AA checklist
|
|
325
|
+
- `reference/aria-patterns.md`: Common ARIA widget patterns
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# WCAG 2.1 Level AA Compliance Checklist
|
|
2
|
+
|
|
3
|
+
## Principle 1: Perceivable
|
|
4
|
+
|
|
5
|
+
### 1.1 Text Alternatives
|
|
6
|
+
- [ ] 1.1.1 Non-text Content (A): All images have alt text
|
|
7
|
+
|
|
8
|
+
### 1.2 Time-based Media
|
|
9
|
+
- [ ] 1.2.1 Audio-only and Video-only (A): Alternatives provided
|
|
10
|
+
- [ ] 1.2.2 Captions (A): Captions for videos
|
|
11
|
+
- [ ] 1.2.3 Audio Description or Media Alternative (A)
|
|
12
|
+
- [ ] 1.2.4 Captions (Live) (AA): Live captions
|
|
13
|
+
- [ ] 1.2.5 Audio Description (AA): Pre-recorded video
|
|
14
|
+
|
|
15
|
+
### 1.3 Adaptable
|
|
16
|
+
- [ ] 1.3.1 Info and Relationships (A): Semantic markup
|
|
17
|
+
- [ ] 1.3.2 Meaningful Sequence (A): Logical reading order
|
|
18
|
+
- [ ] 1.3.3 Sensory Characteristics (A): Not color/shape only
|
|
19
|
+
- [ ] 1.3.4 Orientation (AA): No orientation lock
|
|
20
|
+
- [ ] 1.3.5 Identify Input Purpose (AA): Autocomplete attributes
|
|
21
|
+
|
|
22
|
+
### 1.4 Distinguishable
|
|
23
|
+
- [ ] 1.4.1 Use of Color (A): Not sole indicator
|
|
24
|
+
- [ ] 1.4.2 Audio Control (A): Pause/stop audio
|
|
25
|
+
- [ ] 1.4.3 Contrast (Minimum) (AA): 4.5:1 ratio
|
|
26
|
+
- [ ] 1.4.4 Resize text (AA): 200% zoom without loss
|
|
27
|
+
- [ ] 1.4.5 Images of Text (AA): Use real text
|
|
28
|
+
- [ ] 1.4.10 Reflow (AA): No horizontal scrolling at 320px
|
|
29
|
+
- [ ] 1.4.11 Non-text Contrast (AA): UI components 3:1
|
|
30
|
+
- [ ] 1.4.12 Text Spacing (AA): Adjustable spacing
|
|
31
|
+
- [ ] 1.4.13 Content on Hover or Focus (AA): Dismissible
|
|
32
|
+
|
|
33
|
+
## Principle 2: Operable
|
|
34
|
+
|
|
35
|
+
### 2.1 Keyboard Accessible
|
|
36
|
+
- [ ] 2.1.1 Keyboard (A): All functionality keyboard accessible
|
|
37
|
+
- [ ] 2.1.2 No Keyboard Trap (A): Can navigate away
|
|
38
|
+
- [ ] 2.1.4 Character Key Shortcuts (A): Remappable
|
|
39
|
+
|
|
40
|
+
### 2.2 Enough Time
|
|
41
|
+
- [ ] 2.2.1 Timing Adjustable (A): Extend/turn off time limits
|
|
42
|
+
- [ ] 2.2.2 Pause, Stop, Hide (A): Control moving content
|
|
43
|
+
|
|
44
|
+
### 2.3 Seizures
|
|
45
|
+
- [ ] 2.3.1 Three Flashes or Below Threshold (A)
|
|
46
|
+
|
|
47
|
+
### 2.4 Navigable
|
|
48
|
+
- [ ] 2.4.1 Bypass Blocks (A): Skip navigation
|
|
49
|
+
- [ ] 2.4.2 Page Titled (A): Descriptive page titles
|
|
50
|
+
- [ ] 2.4.3 Focus Order (A): Logical tab order
|
|
51
|
+
- [ ] 2.4.4 Link Purpose (A): Link text is descriptive
|
|
52
|
+
- [ ] 2.4.5 Multiple Ways (AA): Multiple nav methods
|
|
53
|
+
- [ ] 2.4.6 Headings and Labels (AA): Descriptive
|
|
54
|
+
- [ ] 2.4.7 Focus Visible (AA): Visible focus indicator
|
|
55
|
+
|
|
56
|
+
### 2.5 Input Modalities
|
|
57
|
+
- [ ] 2.5.1 Pointer Gestures (A): No complex gestures only
|
|
58
|
+
- [ ] 2.5.2 Pointer Cancellation (A): Can abort/undo
|
|
59
|
+
- [ ] 2.5.3 Label in Name (A): Accessible name includes visible text
|
|
60
|
+
- [ ] 2.5.4 Motion Actuation (A): Disable motion triggers
|
|
61
|
+
|
|
62
|
+
## Principle 3: Understandable
|
|
63
|
+
|
|
64
|
+
### 3.1 Readable
|
|
65
|
+
- [ ] 3.1.1 Language of Page (A): `<html lang="en">`
|
|
66
|
+
- [ ] 3.1.2 Language of Parts (AA): lang attribute for changes
|
|
67
|
+
|
|
68
|
+
### 3.2 Predictable
|
|
69
|
+
- [ ] 3.2.1 On Focus (A): No context change on focus
|
|
70
|
+
- [ ] 3.2.2 On Input (A): No unexpected changes
|
|
71
|
+
- [ ] 3.2.3 Consistent Navigation (AA): Same order
|
|
72
|
+
- [ ] 3.2.4 Consistent Identification (AA): Same function = same label
|
|
73
|
+
|
|
74
|
+
### 3.3 Input Assistance
|
|
75
|
+
- [ ] 3.3.1 Error Identification (A): Errors identified
|
|
76
|
+
- [ ] 3.3.2 Labels or Instructions (A): Labels provided
|
|
77
|
+
- [ ] 3.3.3 Error Suggestion (AA): Correction suggested
|
|
78
|
+
- [ ] 3.3.4 Error Prevention (AA): Confirm/undo for legal/financial
|
|
79
|
+
|
|
80
|
+
## Principle 4: Robust
|
|
81
|
+
|
|
82
|
+
### 4.1 Compatible
|
|
83
|
+
- [ ] 4.1.1 Parsing (A): Valid HTML
|
|
84
|
+
- [ ] 4.1.2 Name, Role, Value (A): For custom widgets
|
|
85
|
+
- [ ] 4.1.3 Status Messages (AA): Announced to screen readers
|
|
86
|
+
|
|
87
|
+
## Testing Tools
|
|
88
|
+
|
|
89
|
+
- **Automated**: Lighthouse, axe, WAVE
|
|
90
|
+
- **Manual**: Keyboard navigation, screen reader
|
|
91
|
+
- **Color**: Contrast checker
|
|
92
|
+
- **Screen Readers**: NVDA (Windows), JAWS (Windows), VoiceOver (Mac/iOS)
|
|
93
|
+
|
|
94
|
+
## Common Failures
|
|
95
|
+
|
|
96
|
+
- Missing alt text
|
|
97
|
+
- Insufficient contrast
|
|
98
|
+
- No keyboard access
|
|
99
|
+
- Empty links/buttons
|
|
100
|
+
- Form inputs without labels
|
|
101
|
+
- Heading hierarchy skipped
|
|
102
|
+
- No focus indicators
|
|
103
|
+
- Using color alone
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: apns-notifier
|
|
3
|
+
description: Send APNs push to paired iOS devices for approval requests and Live Activity updates. Uses JWT-signed Apple connection from the gateway. Silent + alert pushes are separate flows.
|
|
4
|
+
triggers: [synapta push, APNs, push notification, Live Activity update]
|
|
5
|
+
network: allowlist
|
|
6
|
+
tools: []
|
|
7
|
+
source:
|
|
8
|
+
origin: authored-by-synapta
|
|
9
|
+
reason: "Synapta-specific APNs integration for gateway → paired devices."
|
|
10
|
+
citation_patterns:
|
|
11
|
+
- "APNs documentation (Apple Developer)"
|
|
12
|
+
- "JWT-based provider authentication (ES256 with Apple .p8 key)"
|
|
13
|
+
- "sideshow/apns2 (Go) as reference implementation pattern"
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# APNs Notifier
|
|
17
|
+
|
|
18
|
+
Deliver push notifications from the gateway to paired iOS devices. Two flows:
|
|
19
|
+
|
|
20
|
+
1. **Alert push** — approval requests, incident summaries, deploy-ready prompts. Shows in Notification Center.
|
|
21
|
+
2. **Silent push** — Live Activity content updates + widget timeline reload triggers. No user-visible UI.
|
|
22
|
+
|
|
23
|
+
## Provider auth
|
|
24
|
+
|
|
25
|
+
JWT-based, ES256, signed with the Apple Push Notification key (`.p8`). Configured once via `synapta gateway apns setup`:
|
|
26
|
+
|
|
27
|
+
```yaml
|
|
28
|
+
apns:
|
|
29
|
+
team_id: "<10-char team id>"
|
|
30
|
+
key_id: "<10-char key id>"
|
|
31
|
+
key_path: "/path/to/AuthKey_<key_id>.p8" # OS-keychain-referenced, never in repo
|
|
32
|
+
environment: production # or sandbox for TestFlight
|
|
33
|
+
bundle_id: "com.synapta.drive"
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Payload shapes
|
|
37
|
+
|
|
38
|
+
### Alert (approval)
|
|
39
|
+
|
|
40
|
+
```json
|
|
41
|
+
{
|
|
42
|
+
"aps": {
|
|
43
|
+
"alert": { "title": "Approve deploy to Vercel?", "body": "preview → production, ref abc123" },
|
|
44
|
+
"sound": "default",
|
|
45
|
+
"interruption-level": "time-sensitive",
|
|
46
|
+
"category": "APPROVAL_REQUEST"
|
|
47
|
+
},
|
|
48
|
+
"synapta": {
|
|
49
|
+
"kind": "approval_request",
|
|
50
|
+
"request_id": "ar_...",
|
|
51
|
+
"expires_at": "2026-05-15T17:30:00Z"
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Live Activity update
|
|
57
|
+
|
|
58
|
+
```json
|
|
59
|
+
{
|
|
60
|
+
"aps": {
|
|
61
|
+
"timestamp": 1234567890,
|
|
62
|
+
"event": "update",
|
|
63
|
+
"content-state": { "phase": "deploying", "pct": 60 },
|
|
64
|
+
"stale-date": 1234567920
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Silent (widget reload)
|
|
70
|
+
|
|
71
|
+
```json
|
|
72
|
+
{ "aps": { "content-available": 1 }, "synapta": { "kind": "widget_reload", "surface": "session_status" } }
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Reliability
|
|
76
|
+
|
|
77
|
+
- **Retry**: APNs may return `Unregistered` (device token rotated) or `BadDeviceToken`. On either, mark the device's APNs token stale; iOS will re-register on next launch.
|
|
78
|
+
- **Rate**: respect Apple's per-device rate guidance; coalesce Live Activity updates to ≤ 1 / sec.
|
|
79
|
+
- **TTL**: alert pushes carry `apns-expiration: <epoch + 5min>` for time-sensitive approvals so stale prompts don't show after the approval window closes.
|
|
80
|
+
|
|
81
|
+
## Anti-patterns
|
|
82
|
+
|
|
83
|
+
- Storing the `.p8` key in the repo
|
|
84
|
+
- Sending alert pushes for non-time-sensitive events (battery drain + iOS deprioritizes the app)
|
|
85
|
+
- Skipping `interruption-level: time-sensitive` for approvals (system may delay delivery)
|
|
86
|
+
- Silent pushes used as a covert message channel (Apple rejects apps that do this)
|