opencode-skills-collection 4.0.68 → 4.0.70

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.
Files changed (491) hide show
  1. package/bundled-skills/.antigravity-install-manifest.json +304 -1
  2. package/bundled-skills/access-review/SKILL.md +394 -0
  3. package/bundled-skills/access-review/references/details.md +121 -0
  4. package/bundled-skills/agent-evals/SKILL.md +420 -0
  5. package/bundled-skills/agent-observability/SKILL.md +346 -0
  6. package/bundled-skills/agent-observability/references/details.md +786 -0
  7. package/bundled-skills/ai-agent-security/SKILL.md +393 -0
  8. package/bundled-skills/ai-agent-security/references/details.md +912 -0
  9. package/bundled-skills/ai-coding-agent-guardrails/SKILL.md +442 -0
  10. package/bundled-skills/ai-coding-agent-guardrails/references/details.md +753 -0
  11. package/bundled-skills/ai-inference-service-mesh/SKILL.md +449 -0
  12. package/bundled-skills/ai-pipeline-orchestration/SKILL.md +287 -0
  13. package/bundled-skills/ai-red-teaming/SKILL.md +409 -0
  14. package/bundled-skills/ai-security-hardening/SKILL.md +343 -0
  15. package/bundled-skills/ai-sre-incident-response/SKILL.md +336 -0
  16. package/bundled-skills/alerting-oncall/SKILL.md +458 -0
  17. package/bundled-skills/alerting-oncall/references/details.md +84 -0
  18. package/bundled-skills/api-integration-architect/SKILL.md +241 -0
  19. package/bundled-skills/apify-generate-output-schema/SKILL.md +438 -0
  20. package/bundled-skills/apify-integration-development/SKILL.md +168 -0
  21. package/bundled-skills/apify-integration-development/references/ai-framework-package.md +158 -0
  22. package/bundled-skills/apify-integration-development/references/ai-harness-plugin.md +192 -0
  23. package/bundled-skills/apify-integration-development/references/sdk-integration.md +236 -0
  24. package/bundled-skills/apify-integration-development/references/workflow-automation.md +163 -0
  25. package/bundled-skills/apk-redteam-pipeline/SKILL.md +446 -0
  26. package/bundled-skills/architecture-review/README.md +42 -0
  27. package/bundled-skills/architecture-review/SKILL.md +77 -0
  28. package/bundled-skills/architecture-review/examples.md +11 -0
  29. package/bundled-skills/architecture-review/reference/best-practices.md +7 -0
  30. package/bundled-skills/architecture-review/reference/capabilities.md +20 -0
  31. package/bundled-skills/architecture-review/reference/fallbacks.md +11 -0
  32. package/bundled-skills/architecture-review/reference/graph.md +15 -0
  33. package/bundled-skills/architecture-review/reference/mcp.md +14 -0
  34. package/bundled-skills/architecture-review/reference/workflow.md +15 -0
  35. package/bundled-skills/architecture-review/templates/architecture-review.md +21 -0
  36. package/bundled-skills/argocd-gitops/SKILL.md +469 -0
  37. package/bundled-skills/arm-templates/SKILL.md +438 -0
  38. package/bundled-skills/arm-templates/references/details.md +64 -0
  39. package/bundled-skills/asset-inventory/SKILL.md +412 -0
  40. package/bundled-skills/asset-inventory/references/details.md +127 -0
  41. package/bundled-skills/audit-logging/SKILL.md +476 -0
  42. package/bundled-skills/aws-cloudtrail/SKILL.md +486 -0
  43. package/bundled-skills/aws-cost-optimization/SKILL.md +331 -0
  44. package/bundled-skills/aws-ec2/SKILL.md +426 -0
  45. package/bundled-skills/aws-ecs-fargate/SKILL.md +388 -0
  46. package/bundled-skills/aws-iam/SKILL.md +463 -0
  47. package/bundled-skills/aws-lambda/SKILL.md +428 -0
  48. package/bundled-skills/aws-rds/SKILL.md +380 -0
  49. package/bundled-skills/aws-s3/SKILL.md +434 -0
  50. package/bundled-skills/aws-secrets-manager/SKILL.md +486 -0
  51. package/bundled-skills/aws-vpc/SKILL.md +436 -0
  52. package/bundled-skills/azure-ai-document-intelligence-ts/SKILL.md +1 -1
  53. package/bundled-skills/azure-aks/SKILL.md +423 -0
  54. package/bundled-skills/azure-devops/SKILL.md +457 -0
  55. package/bundled-skills/azure-functions-devsec/SKILL.md +436 -0
  56. package/bundled-skills/azure-keyvault/SKILL.md +455 -0
  57. package/bundled-skills/azure-keyvault/references/details.md +83 -0
  58. package/bundled-skills/azure-monitor-audit/SKILL.md +379 -0
  59. package/bundled-skills/azure-networking/SKILL.md +448 -0
  60. package/bundled-skills/azure-networking/references/details.md +135 -0
  61. package/bundled-skills/azure-sql/SKILL.md +413 -0
  62. package/bundled-skills/azure-sql/references/details.md +113 -0
  63. package/bundled-skills/azure-vms/SKILL.md +402 -0
  64. package/bundled-skills/azure-vms/references/details.md +134 -0
  65. package/bundled-skills/backup-recovery/SKILL.md +388 -0
  66. package/bundled-skills/bb-methodology/SKILL.md +451 -0
  67. package/bundled-skills/bb-methodology/references/details.md +120 -0
  68. package/bundled-skills/block-storage/SKILL.md +371 -0
  69. package/bundled-skills/blue-green-deploy/SKILL.md +453 -0
  70. package/bundled-skills/blue-green-deploy/references/details.md +90 -0
  71. package/bundled-skills/bug-bounty/SKILL.md +447 -0
  72. package/bundled-skills/bug-bounty/references/details.md +1316 -0
  73. package/bundled-skills/bugcrowd-reporting/SKILL.md +351 -0
  74. package/bundled-skills/business-continuity/SKILL.md +463 -0
  75. package/bundled-skills/career-ops/SKILL.md +186 -0
  76. package/bundled-skills/cdn-setup/SKILL.md +374 -0
  77. package/bundled-skills/change-management/SKILL.md +438 -0
  78. package/bundled-skills/change-management/references/details.md +105 -0
  79. package/bundled-skills/circleci/SKILL.md +475 -0
  80. package/bundled-skills/cis-benchmarks/SKILL.md +150 -0
  81. package/bundled-skills/cloudflare-pages/SKILL.md +318 -0
  82. package/bundled-skills/cloudflare-r2/SKILL.md +353 -0
  83. package/bundled-skills/cloudflare-workers/SKILL.md +415 -0
  84. package/bundled-skills/cloudflare-zero-trust/SKILL.md +361 -0
  85. package/bundled-skills/cloudformation/SKILL.md +461 -0
  86. package/bundled-skills/code-review-sensei/SKILL.md +177 -0
  87. package/bundled-skills/codebase-onboarding/README.md +42 -0
  88. package/bundled-skills/codebase-onboarding/SKILL.md +77 -0
  89. package/bundled-skills/codebase-onboarding/examples.md +11 -0
  90. package/bundled-skills/codebase-onboarding/reference/best-practices.md +7 -0
  91. package/bundled-skills/codebase-onboarding/reference/capabilities.md +20 -0
  92. package/bundled-skills/codebase-onboarding/reference/fallbacks.md +11 -0
  93. package/bundled-skills/codebase-onboarding/reference/graph.md +15 -0
  94. package/bundled-skills/codebase-onboarding/reference/mcp.md +14 -0
  95. package/bundled-skills/codebase-onboarding/reference/workflow.md +15 -0
  96. package/bundled-skills/codebase-onboarding/templates/repository-onboarding.md +21 -0
  97. package/bundled-skills/connection-auth-rules/SKILL.md +199 -0
  98. package/bundled-skills/connection-auth-rules/fetch_schema.py +320 -0
  99. package/bundled-skills/constraint-driven-development/SKILL.md +335 -0
  100. package/bundled-skills/constraint-driven-development/references/floor-guard.md +99 -0
  101. package/bundled-skills/container-hardening/SKILL.md +126 -0
  102. package/bundled-skills/container-registries/SKILL.md +435 -0
  103. package/bundled-skills/container-scanning/SKILL.md +416 -0
  104. package/bundled-skills/convex-backend/SKILL.md +338 -0
  105. package/bundled-skills/dast-scanning/SKILL.md +437 -0
  106. package/bundled-skills/database-backups/SKILL.md +425 -0
  107. package/bundled-skills/datadog/SKILL.md +487 -0
  108. package/bundled-skills/dependency-analysis/README.md +42 -0
  109. package/bundled-skills/dependency-analysis/SKILL.md +76 -0
  110. package/bundled-skills/dependency-analysis/examples.md +11 -0
  111. package/bundled-skills/dependency-analysis/reference/best-practices.md +7 -0
  112. package/bundled-skills/dependency-analysis/reference/capabilities.md +20 -0
  113. package/bundled-skills/dependency-analysis/reference/fallbacks.md +11 -0
  114. package/bundled-skills/dependency-analysis/reference/graph.md +15 -0
  115. package/bundled-skills/dependency-analysis/reference/mcp.md +14 -0
  116. package/bundled-skills/dependency-analysis/reference/workflow.md +15 -0
  117. package/bundled-skills/dependency-analysis/templates/dependency-review.md +21 -0
  118. package/bundled-skills/dependency-scanning/SKILL.md +457 -0
  119. package/bundled-skills/devcontainers-nix/SKILL.md +416 -0
  120. package/bundled-skills/devops-pipeline-builder/SKILL.md +200 -0
  121. package/bundled-skills/disaster-recovery/SKILL.md +374 -0
  122. package/bundled-skills/disaster-recovery/references/details.md +219 -0
  123. package/bundled-skills/dns-management/SKILL.md +375 -0
  124. package/bundled-skills/docker-compose/SKILL.md +482 -0
  125. package/bundled-skills/docker-management/SKILL.md +426 -0
  126. package/bundled-skills/eas-app-stores/SKILL.md +197 -0
  127. package/bundled-skills/eas-app-stores/agents/openai.yaml +4 -0
  128. package/bundled-skills/eas-app-stores/references/app-store-metadata.md +497 -0
  129. package/bundled-skills/eas-app-stores/references/ios-app-store.md +376 -0
  130. package/bundled-skills/eas-app-stores/references/native-ios.md +167 -0
  131. package/bundled-skills/eas-app-stores/references/play-store.md +244 -0
  132. package/bundled-skills/eas-app-stores/references/testflight.md +62 -0
  133. package/bundled-skills/eas-app-stores/references/workflows.md +120 -0
  134. package/bundled-skills/eas-hosting/SKILL.md +448 -0
  135. package/bundled-skills/eas-hosting/agents/openai.yaml +4 -0
  136. package/bundled-skills/eas-observe/SKILL.md +75 -0
  137. package/bundled-skills/eas-observe/agents/openai.yaml +4 -0
  138. package/bundled-skills/eas-observe/references/metrics.md +98 -0
  139. package/bundled-skills/eas-observe/references/queries.md +403 -0
  140. package/bundled-skills/eas-observe/references/setup.md +476 -0
  141. package/bundled-skills/eas-observe/references/third-party.md +136 -0
  142. package/bundled-skills/eas-simulator/SKILL.md +251 -0
  143. package/bundled-skills/eas-simulator/agents/openai.yaml +4 -0
  144. package/bundled-skills/eas-simulator/references/controllers.md +135 -0
  145. package/bundled-skills/eas-simulator/references/run-your-app.md +240 -0
  146. package/bundled-skills/eas-simulator/references/troubleshooting.md +47 -0
  147. package/bundled-skills/eas-workflows/SKILL.md +119 -0
  148. package/bundled-skills/eas-workflows/agents/openai.yaml +4 -0
  149. package/bundled-skills/eas-workflows/scripts/fetch.js +109 -0
  150. package/bundled-skills/ebpf-observability/SKILL.md +436 -0
  151. package/bundled-skills/ebpf-observability/references/details.md +542 -0
  152. package/bundled-skills/elk-stack/SKILL.md +487 -0
  153. package/bundled-skills/enterprise-vpn-attack/SKILL.md +395 -0
  154. package/bundled-skills/evidence-hygiene/SKILL.md +404 -0
  155. package/bundled-skills/expo-animation/LICENSE +21 -0
  156. package/bundled-skills/expo-animation/RECIPES.md +385 -0
  157. package/bundled-skills/expo-animation/SKILL.md +295 -0
  158. package/bundled-skills/expo-animation/agents/openai.yaml +4 -0
  159. package/bundled-skills/fact-check-x-unified/SKILL.md +178 -0
  160. package/bundled-skills/fact-check-x-unified/agents/openai.yaml +4 -0
  161. package/bundled-skills/fact-check-x-unified/references/acceptance-criteria.md +44 -0
  162. package/bundled-skills/fact-check-x-unified/references/contracts.md +39 -0
  163. package/bundled-skills/fact-check-x-unified/scripts/common.py +31 -0
  164. package/bundled-skills/fact-check-x-unified/scripts/fact_check_x.py +1832 -0
  165. package/bundled-skills/fact-check-x-unified/scripts/trusted_search_config.py +324 -0
  166. package/bundled-skills/fact-check-x-unified/tests/anchor_downgrade_test.py +90 -0
  167. package/bundled-skills/fact-check-x-unified/tests/multi_platform_test.py +369 -0
  168. package/bundled-skills/fact-check-x-unified/tests/smoke_test.py +740 -0
  169. package/bundled-skills/fact-check-x-unified/tests/stage_checkpoint_test.py +103 -0
  170. package/bundled-skills/fact-check-x-unified/tests/trusted_search_config_test.py +156 -0
  171. package/bundled-skills/feature-flags/SKILL.md +426 -0
  172. package/bundled-skills/feature-flags/references/details.md +86 -0
  173. package/bundled-skills/fedramp-compliance/SKILL.md +453 -0
  174. package/bundled-skills/firebase-app-platform/SKILL.md +381 -0
  175. package/bundled-skills/firewall-config/SKILL.md +479 -0
  176. package/bundled-skills/gcp-audit-logs/SKILL.md +452 -0
  177. package/bundled-skills/gcp-audit-logs/references/details.md +56 -0
  178. package/bundled-skills/gcp-cloud-functions/SKILL.md +284 -0
  179. package/bundled-skills/gcp-cloud-sql/SKILL.md +277 -0
  180. package/bundled-skills/gcp-compute/SKILL.md +319 -0
  181. package/bundled-skills/gcp-gke/SKILL.md +307 -0
  182. package/bundled-skills/gcp-networking/SKILL.md +293 -0
  183. package/bundled-skills/gcp-secret-manager/SKILL.md +421 -0
  184. package/bundled-skills/gcp-secret-manager/references/details.md +131 -0
  185. package/bundled-skills/gdpr-compliance/SKILL.md +451 -0
  186. package/bundled-skills/gdpr-compliance/references/details.md +145 -0
  187. package/bundled-skills/geo-audit/SKILL.md +368 -0
  188. package/bundled-skills/geo-brand-mentions/SKILL.md +68 -0
  189. package/bundled-skills/geo-brand-mentions/references/details.md +471 -0
  190. package/bundled-skills/geo-citability/SKILL.md +350 -0
  191. package/bundled-skills/geo-compare/SKILL.md +340 -0
  192. package/bundled-skills/geo-content/SKILL.md +383 -0
  193. package/bundled-skills/geo-crawlers/SKILL.md +408 -0
  194. package/bundled-skills/geo-llmstxt/SKILL.md +464 -0
  195. package/bundled-skills/geo-platform-optimizer/SKILL.md +314 -0
  196. package/bundled-skills/geo-proposal/SKILL.md +378 -0
  197. package/bundled-skills/geo-prospect/SKILL.md +225 -0
  198. package/bundled-skills/geo-report/SKILL.md +436 -0
  199. package/bundled-skills/geo-report-pdf/SKILL.md +157 -0
  200. package/bundled-skills/geo-schema/SKILL.md +408 -0
  201. package/bundled-skills/geo-technical/SKILL.md +78 -0
  202. package/bundled-skills/geo-technical/references/details.md +543 -0
  203. package/bundled-skills/git-workflow/SKILL.md +460 -0
  204. package/bundled-skills/github-actions/SKILL.md +368 -0
  205. package/bundled-skills/gitlab-ci/SKILL.md +340 -0
  206. package/bundled-skills/gpt-taste/SKILL.md +8 -1
  207. package/bundled-skills/gpu-kubernetes-operations/SKILL.md +468 -0
  208. package/bundled-skills/gpu-server-management/SKILL.md +236 -0
  209. package/bundled-skills/hashicorp-vault/SKILL.md +408 -0
  210. package/bundled-skills/helm-charts/SKILL.md +469 -0
  211. package/bundled-skills/hf-cli/SKILL.md +263 -0
  212. package/bundled-skills/hipaa-compliance/SKILL.md +451 -0
  213. package/bundled-skills/huggingface-community-evals/SKILL.md +228 -0
  214. package/bundled-skills/huggingface-community-evals/examples/.env.example +3 -0
  215. package/bundled-skills/huggingface-community-evals/examples/USAGE_EXAMPLES.md +101 -0
  216. package/bundled-skills/huggingface-community-evals/scripts/inspect_eval_uv.py +104 -0
  217. package/bundled-skills/huggingface-community-evals/scripts/inspect_vllm_uv.py +306 -0
  218. package/bundled-skills/huggingface-community-evals/scripts/lighteval_vllm_uv.py +297 -0
  219. package/bundled-skills/huggingface-datasets/SKILL.md +130 -0
  220. package/bundled-skills/hunt-aspnet/SKILL.md +321 -0
  221. package/bundled-skills/hunt-ato/SKILL.md +184 -0
  222. package/bundled-skills/hunt-auth-bypass/SKILL.md +426 -0
  223. package/bundled-skills/hunt-auth-bypass/references/details.md +80 -0
  224. package/bundled-skills/hunt-brute-force/SKILL.md +341 -0
  225. package/bundled-skills/hunt-business-logic/SKILL.md +281 -0
  226. package/bundled-skills/hunt-cache-poison/SKILL.md +382 -0
  227. package/bundled-skills/hunt-captcha-bypass/SKILL.md +136 -0
  228. package/bundled-skills/hunt-cicd/SKILL.md +311 -0
  229. package/bundled-skills/hunt-clickjacking/SKILL.md +110 -0
  230. package/bundled-skills/hunt-cors/SKILL.md +335 -0
  231. package/bundled-skills/hunt-dom/SKILL.md +323 -0
  232. package/bundled-skills/hunt-exceptional-conditions/SKILL.md +111 -0
  233. package/bundled-skills/hunt-file-upload/SKILL.md +202 -0
  234. package/bundled-skills/hunt-fintech-graphql/SKILL.md +289 -0
  235. package/bundled-skills/hunt-forgot-password/SKILL.md +114 -0
  236. package/bundled-skills/hunt-grpc/SKILL.md +317 -0
  237. package/bundled-skills/hunt-host-header/SKILL.md +309 -0
  238. package/bundled-skills/hunt-html-injection/SKILL.md +106 -0
  239. package/bundled-skills/hunt-http-smuggling/SKILL.md +129 -0
  240. package/bundled-skills/hunt-http-smuggling/references/phase2h-smuggling-cachepoison.md +177 -0
  241. package/bundled-skills/hunt-idor/SKILL.md +434 -0
  242. package/bundled-skills/hunt-jwt-crypto/SKILL.md +221 -0
  243. package/bundled-skills/hunt-k8s/SKILL.md +337 -0
  244. package/bundled-skills/hunt-laravel/SKILL.md +255 -0
  245. package/bundled-skills/hunt-ldap/SKILL.md +351 -0
  246. package/bundled-skills/hunt-lfi/SKILL.md +311 -0
  247. package/bundled-skills/hunt-llm-ai/SKILL.md +289 -0
  248. package/bundled-skills/hunt-mfa-bypass/SKILL.md +177 -0
  249. package/bundled-skills/hunt-misc/SKILL.md +378 -0
  250. package/bundled-skills/hunt-nextjs/SKILL.md +299 -0
  251. package/bundled-skills/hunt-nodejs/SKILL.md +263 -0
  252. package/bundled-skills/hunt-nosqli/SKILL.md +210 -0
  253. package/bundled-skills/hunt-ntlm-info/SKILL.md +314 -0
  254. package/bundled-skills/hunt-oauth/SKILL.md +459 -0
  255. package/bundled-skills/hunt-open-redirect/SKILL.md +223 -0
  256. package/bundled-skills/hunt-race-condition/SKILL.md +381 -0
  257. package/bundled-skills/hunt-race-condition/references/details.md +159 -0
  258. package/bundled-skills/hunt-rag-vector/SKILL.md +212 -0
  259. package/bundled-skills/hunt-rce/SKILL.md +444 -0
  260. package/bundled-skills/hunt-rce/references/details.md +110 -0
  261. package/bundled-skills/hunt-saml/SKILL.md +156 -0
  262. package/bundled-skills/hunt-session/SKILL.md +342 -0
  263. package/bundled-skills/hunt-shadow-api/SKILL.md +198 -0
  264. package/bundled-skills/hunt-source-leak/SKILL.md +345 -0
  265. package/bundled-skills/hunt-spa-api/SKILL.md +163 -0
  266. package/bundled-skills/hunt-springboot/SKILL.md +285 -0
  267. package/bundled-skills/hunt-sqli/SKILL.md +466 -0
  268. package/bundled-skills/hunt-ssrf/SKILL.md +396 -0
  269. package/bundled-skills/hunt-ssrf/references/details.md +179 -0
  270. package/bundled-skills/hunt-ssti/SKILL.md +163 -0
  271. package/bundled-skills/hunt-subdomain/SKILL.md +379 -0
  272. package/bundled-skills/hunt-tls-network/SKILL.md +399 -0
  273. package/bundled-skills/hunt-xxe/SKILL.md +466 -0
  274. package/bundled-skills/i-have-adhd/SKILL.md +170 -0
  275. package/bundled-skills/identity-access-management/SKILL.md +382 -0
  276. package/bundled-skills/identity-access-management/references/details.md +524 -0
  277. package/bundled-skills/incident-management/SKILL.md +484 -0
  278. package/bundled-skills/incident-response/SKILL.md +448 -0
  279. package/bundled-skills/incident-response/references/details.md +113 -0
  280. package/bundled-skills/interview-me/SKILL.md +248 -0
  281. package/bundled-skills/iso27001-compliance/SKILL.md +460 -0
  282. package/bundled-skills/jenkins/SKILL.md +462 -0
  283. package/bundled-skills/jev-social/SKILL.md +182 -0
  284. package/bundled-skills/jev-use/SKILL.md +158 -0
  285. package/bundled-skills/kubernetes-hardening/SKILL.md +154 -0
  286. package/bundled-skills/kubernetes-ops/SKILL.md +449 -0
  287. package/bundled-skills/kubernetes-ops/references/details.md +108 -0
  288. package/bundled-skills/kustomize/SKILL.md +478 -0
  289. package/bundled-skills/linux-administration/SKILL.md +367 -0
  290. package/bundled-skills/linux-hardening/SKILL.md +154 -0
  291. package/bundled-skills/llm-app-security/SKILL.md +389 -0
  292. package/bundled-skills/llm-app-security/references/details.md +674 -0
  293. package/bundled-skills/llm-caching/SKILL.md +334 -0
  294. package/bundled-skills/llm-cost-optimization/SKILL.md +311 -0
  295. package/bundled-skills/llm-fine-tuning/SKILL.md +329 -0
  296. package/bundled-skills/llm-gateway/SKILL.md +282 -0
  297. package/bundled-skills/llm-inference-scaling/SKILL.md +286 -0
  298. package/bundled-skills/llmops-platform-engineering/SKILL.md +472 -0
  299. package/bundled-skills/load-balancing/SKILL.md +403 -0
  300. package/bundled-skills/loki-logging/SKILL.md +479 -0
  301. package/bundled-skills/longbridge-derivatives/SKILL.md +117 -0
  302. package/bundled-skills/longbridge-derivatives/references/option.md +36 -0
  303. package/bundled-skills/longbridge-derivatives/references/options-advanced.md +101 -0
  304. package/bundled-skills/longbridge-derivatives/references/options-pnl.md +74 -0
  305. package/bundled-skills/longbridge-derivatives/references/options-strategy.md +82 -0
  306. package/bundled-skills/longbridge-derivatives/references/options-volatility.md +70 -0
  307. package/bundled-skills/longbridge-derivatives/references/warrant.md +12 -0
  308. package/bundled-skills/longbridge-quant/SKILL.md +151 -0
  309. package/bundled-skills/longbridge-quant/references/correlation.md +51 -0
  310. package/bundled-skills/longbridge-quant/references/execution-model.md +68 -0
  311. package/bundled-skills/longbridge-quant/references/factor-research.md +95 -0
  312. package/bundled-skills/longbridge-quant/references/factor-screen.md +101 -0
  313. package/bundled-skills/longbridge-quant/references/hedging.md +136 -0
  314. package/bundled-skills/longbridge-quant/references/ml-strategy.md +77 -0
  315. package/bundled-skills/longbridge-quant/references/multifactor.md +68 -0
  316. package/bundled-skills/longbridge-quant/references/pairs-trading.md +61 -0
  317. package/bundled-skills/longbridge-quant/references/quant-cli.md +133 -0
  318. package/bundled-skills/longbridge-quant/references/quant-stats.md +150 -0
  319. package/bundled-skills/longbridge-quant/references/seasonality.md +50 -0
  320. package/bundled-skills/longbridge-quant/references/strategy-optimizer.md +68 -0
  321. package/bundled-skills/longbridge-quant/references/volatility-strategy.md +52 -0
  322. package/bundled-skills/longbridge-research/SKILL.md +187 -0
  323. package/bundled-skills/longbridge-research/references/company-profile.md +96 -0
  324. package/bundled-skills/longbridge-research/references/company-tearsheet.md +82 -0
  325. package/bundled-skills/longbridge-research/references/competitive-analysis.md +81 -0
  326. package/bundled-skills/longbridge-research/references/consensus.md +92 -0
  327. package/bundled-skills/longbridge-research/references/coverage-initiation.md +76 -0
  328. package/bundled-skills/longbridge-research/references/defi-yield.md +60 -0
  329. package/bundled-skills/longbridge-research/references/finance-calendar.md +165 -0
  330. package/bundled-skills/longbridge-research/references/financial-planning.md +77 -0
  331. package/bundled-skills/longbridge-research/references/forecast-eps.md +39 -0
  332. package/bundled-skills/longbridge-research/references/fund-holder.md +44 -0
  333. package/bundled-skills/longbridge-research/references/hkipo-analysis.md +101 -0
  334. package/bundled-skills/longbridge-research/references/industry-peers.md +46 -0
  335. package/bundled-skills/longbridge-research/references/industry-rank.md +62 -0
  336. package/bundled-skills/longbridge-research/references/insider-trades.md +48 -0
  337. package/bundled-skills/longbridge-research/references/institution-rating.md +62 -0
  338. package/bundled-skills/longbridge-research/references/investment-ideas.md +69 -0
  339. package/bundled-skills/longbridge-research/references/investment-proposal.md +95 -0
  340. package/bundled-skills/longbridge-research/references/investors.md +87 -0
  341. package/bundled-skills/longbridge-research/references/onchain.md +70 -0
  342. package/bundled-skills/longbridge-research/references/post-investment.md +76 -0
  343. package/bundled-skills/longbridge-research/references/shareholder.md +72 -0
  344. package/bundled-skills/longbridge-research/references/short-positions.md +50 -0
  345. package/bundled-skills/longbridge-research/references/short-trades.md +50 -0
  346. package/bundled-skills/longbridge-research/references/stock-research.md +61 -0
  347. package/bundled-skills/longbridge-research/references/thesis-tracker.md +64 -0
  348. package/bundled-skills/m365-entra-attack/SKILL.md +423 -0
  349. package/bundled-skills/mac-mini-llm-lab/SKILL.md +350 -0
  350. package/bundled-skills/makepad-2-0-animation/SKILL.md +318 -0
  351. package/bundled-skills/makepad-2-0-animation/references/animator-reference.md +433 -0
  352. package/bundled-skills/makepad-2-0-dsl/SKILL.md +492 -0
  353. package/bundled-skills/makepad-2-0-dsl/references/dsl-syntax-reference.md +511 -0
  354. package/bundled-skills/makepad-2-0-dsl/references/extended-guide.md +56 -0
  355. package/bundled-skills/makepad-2-0-dsl/references/property-system.md +757 -0
  356. package/bundled-skills/makepad-2-0-events/SKILL.md +497 -0
  357. package/bundled-skills/makepad-2-0-events/references/event-patterns.md +802 -0
  358. package/bundled-skills/makepad-2-0-events/references/extended-guide.md +590 -0
  359. package/bundled-skills/makepad-2-0-layout/SKILL.md +499 -0
  360. package/bundled-skills/makepad-2-0-layout/references/extended-guide.md +243 -0
  361. package/bundled-skills/makepad-2-0-layout/references/layout-patterns.md +881 -0
  362. package/bundled-skills/makepad-2-0-widgets/SKILL.md +261 -0
  363. package/bundled-skills/makepad-2-0-widgets/references/widget-advanced.md +648 -0
  364. package/bundled-skills/makepad-2-0-widgets/references/widget-catalog.md +547 -0
  365. package/bundled-skills/mcp-server-security/SKILL.md +356 -0
  366. package/bundled-skills/mcp-server-security/references/details.md +745 -0
  367. package/bundled-skills/mdm-device-management/SKILL.md +404 -0
  368. package/bundled-skills/mdm-device-management/references/details.md +410 -0
  369. package/bundled-skills/meeting-distiller-pro/SKILL.md +120 -0
  370. package/bundled-skills/meme-coin-audit/SKILL.md +402 -0
  371. package/bundled-skills/mid-engagement-ir-detection/SKILL.md +377 -0
  372. package/bundled-skills/model-registry-governance/SKILL.md +452 -0
  373. package/bundled-skills/model-serving-kubernetes/SKILL.md +339 -0
  374. package/bundled-skills/model-supply-chain-security/SKILL.md +427 -0
  375. package/bundled-skills/mongodb/SKILL.md +436 -0
  376. package/bundled-skills/monte-carlo-analyze-root-cause/SKILL.md +12 -1
  377. package/bundled-skills/monte-carlo-asset-health/SKILL.md +12 -1
  378. package/bundled-skills/monte-carlo-context-detection/SKILL.md +170 -0
  379. package/bundled-skills/monte-carlo-context-detection/references/signal-definitions.md +46 -0
  380. package/bundled-skills/multi-tenant-llm-hosting/SKILL.md +435 -0
  381. package/bundled-skills/multi-tenant-llm-hosting/references/details.md +211 -0
  382. package/bundled-skills/mysql/SKILL.md +390 -0
  383. package/bundled-skills/new-relic/SKILL.md +472 -0
  384. package/bundled-skills/nfs-storage/SKILL.md +356 -0
  385. package/bundled-skills/object-storage/SKILL.md +378 -0
  386. package/bundled-skills/offensive-osint/SKILL.md +443 -0
  387. package/bundled-skills/okta-attack/SKILL.md +436 -0
  388. package/bundled-skills/ollama-stack/SKILL.md +379 -0
  389. package/bundled-skills/openclaw-deployment-hardening/SKILL.md +135 -0
  390. package/bundled-skills/openclaw-local-mac-mini/SKILL.md +426 -0
  391. package/bundled-skills/openclaw-local-mac-mini/references/details.md +221 -0
  392. package/bundled-skills/openclaw-security-hardening/SKILL.md +135 -0
  393. package/bundled-skills/openshift/SKILL.md +485 -0
  394. package/bundled-skills/opentelemetry/SKILL.md +438 -0
  395. package/bundled-skills/opentelemetry/references/details.md +78 -0
  396. package/bundled-skills/opentofu-migration/SKILL.md +349 -0
  397. package/bundled-skills/osint-methodology/SKILL.md +460 -0
  398. package/bundled-skills/osint-methodology/references/details.md +1350 -0
  399. package/bundled-skills/pci-dss-compliance/SKILL.md +446 -0
  400. package/bundled-skills/penetration-testing/SKILL.md +152 -0
  401. package/bundled-skills/performance-tuning/SKILL.md +381 -0
  402. package/bundled-skills/planetscale/SKILL.md +297 -0
  403. package/bundled-skills/platform-engineering/SKILL.md +348 -0
  404. package/bundled-skills/platform-engineering/references/details.md +944 -0
  405. package/bundled-skills/podman/SKILL.md +405 -0
  406. package/bundled-skills/policy-as-code/SKILL.md +434 -0
  407. package/bundled-skills/policy-as-code/references/details.md +204 -0
  408. package/bundled-skills/postgresql-devsec/SKILL.md +378 -0
  409. package/bundled-skills/prometheus-grafana/SKILL.md +469 -0
  410. package/bundled-skills/prompt-injection-defense/SKILL.md +483 -0
  411. package/bundled-skills/rag-infrastructure/SKILL.md +269 -0
  412. package/bundled-skills/rag-observability-evals/SKILL.md +444 -0
  413. package/bundled-skills/rag-observability-evals/references/details.md +92 -0
  414. package/bundled-skills/recon-scope-triage/SKILL.md +128 -0
  415. package/bundled-skills/redis/SKILL.md +421 -0
  416. package/bundled-skills/redteam-report-template/SKILL.md +370 -0
  417. package/bundled-skills/remotion-captions/SKILL.md +57 -0
  418. package/bundled-skills/remotion-captions/agents/openai.yaml +7 -0
  419. package/bundled-skills/remotion-captions/assets/remotion-icon.svg +4 -0
  420. package/bundled-skills/remotion-captions/display-captions.md +190 -0
  421. package/bundled-skills/remotion-captions/import-srt-captions.md +73 -0
  422. package/bundled-skills/remotion-captions/transcribe-captions.md +70 -0
  423. package/bundled-skills/remotion-create/SKILL.md +106 -0
  424. package/bundled-skills/remotion-create/agents/openai.yaml +7 -0
  425. package/bundled-skills/remotion-create/assets/remotion-icon.svg +4 -0
  426. package/bundled-skills/remotion-create/tailwind.md +11 -0
  427. package/bundled-skills/remotion-create/video-layout.md +9 -0
  428. package/bundled-skills/remotion-docs/SKILL.md +67 -0
  429. package/bundled-skills/remotion-docs/agents/openai.yaml +7 -0
  430. package/bundled-skills/remotion-docs/assets/remotion-icon.svg +4 -0
  431. package/bundled-skills/remotion-interactivity/SKILL.md +270 -0
  432. package/bundled-skills/remotion-interactivity/agents/openai.yaml +7 -0
  433. package/bundled-skills/remotion-interactivity/assets/remotion-icon.svg +4 -0
  434. package/bundled-skills/remotion-render/SKILL.md +48 -0
  435. package/bundled-skills/remotion-render/agents/openai.yaml +7 -0
  436. package/bundled-skills/remotion-render/assets/remotion-icon.svg +4 -0
  437. package/bundled-skills/remotion-render/transparent-videos.md +106 -0
  438. package/bundled-skills/report-writing/SKILL.md +426 -0
  439. package/bundled-skills/report-writing/references/details.md +187 -0
  440. package/bundled-skills/reverse-proxy/SKILL.md +420 -0
  441. package/bundled-skills/runbook-creation/SKILL.md +438 -0
  442. package/bundled-skills/runbook-creation/references/details.md +71 -0
  443. package/bundled-skills/saas-pricing-strategist/SKILL.md +169 -0
  444. package/bundled-skills/saas-security-posture/SKILL.md +415 -0
  445. package/bundled-skills/sast-scanning/SKILL.md +444 -0
  446. package/bundled-skills/sbom-supply-chain/SKILL.md +433 -0
  447. package/bundled-skills/score-eval/SKILL.md +35 -0
  448. package/bundled-skills/security-arsenal/SKILL.md +446 -0
  449. package/bundled-skills/security-arsenal/references/details.md +540 -0
  450. package/bundled-skills/security-automation/SKILL.md +146 -0
  451. package/bundled-skills/semantic-versioning/SKILL.md +434 -0
  452. package/bundled-skills/semantic-versioning/references/details.md +83 -0
  453. package/bundled-skills/service-mesh/SKILL.md +422 -0
  454. package/bundled-skills/soc2-compliance/SKILL.md +409 -0
  455. package/bundled-skills/sops-encryption/SKILL.md +124 -0
  456. package/bundled-skills/sre-dashboards/SKILL.md +143 -0
  457. package/bundled-skills/ssh-configuration/SKILL.md +324 -0
  458. package/bundled-skills/ssl-tls-management/SKILL.md +428 -0
  459. package/bundled-skills/ssl-tls-management/references/details.md +99 -0
  460. package/bundled-skills/startup-it-troubleshooting/SKILL.md +415 -0
  461. package/bundled-skills/supply-chain-attack-recon/SKILL.md +453 -0
  462. package/bundled-skills/supply-chain-attack-recon/references/details.md +258 -0
  463. package/bundled-skills/systemd-services/SKILL.md +379 -0
  464. package/bundled-skills/terraform-aws/SKILL.md +125 -0
  465. package/bundled-skills/terraform-azure/SKILL.md +415 -0
  466. package/bundled-skills/terraform-azure/references/details.md +231 -0
  467. package/bundled-skills/terraform-gcp/SKILL.md +369 -0
  468. package/bundled-skills/threat-modeling/SKILL.md +487 -0
  469. package/bundled-skills/user-management/SKILL.md +383 -0
  470. package/bundled-skills/using-agent-skills/SKILL.md +220 -0
  471. package/bundled-skills/vector-database-ops/SKILL.md +300 -0
  472. package/bundled-skills/vendor-management/SKILL.md +439 -0
  473. package/bundled-skills/vendor-management/references/details.md +109 -0
  474. package/bundled-skills/vercel-deployments/SKILL.md +296 -0
  475. package/bundled-skills/vllm-server/SKILL.md +236 -0
  476. package/bundled-skills/vmware-vcenter-attack/SKILL.md +412 -0
  477. package/bundled-skills/vpn-setup/SKILL.md +452 -0
  478. package/bundled-skills/vulnerability-scanning/SKILL.md +448 -0
  479. package/bundled-skills/waf-setup/SKILL.md +354 -0
  480. package/bundled-skills/waf-setup/references/details.md +211 -0
  481. package/bundled-skills/web2-recon/SKILL.md +440 -0
  482. package/bundled-skills/web2-recon/references/details.md +319 -0
  483. package/bundled-skills/web3-audit/SKILL.md +445 -0
  484. package/bundled-skills/web3-audit/references/details.md +224 -0
  485. package/bundled-skills/windows-hardening/SKILL.md +454 -0
  486. package/bundled-skills/windows-hardening/references/details.md +204 -0
  487. package/bundled-skills/windows-server/SKILL.md +318 -0
  488. package/bundled-skills/writing-guidelines/SKILL.md +60 -0
  489. package/bundled-skills/zero-trust/SKILL.md +461 -0
  490. package/package.json +1 -1
  491. package/skills_index.json +7874 -277
@@ -0,0 +1,103 @@
1
+ #!/usr/bin/env python3
2
+ from __future__ import annotations
3
+
4
+ import json
5
+ import subprocess
6
+ import sys
7
+ import tempfile
8
+ from pathlib import Path
9
+
10
+
11
+ ROOT = Path(__file__).resolve().parents[1]
12
+ SKILLS = ROOT / "modules" if (ROOT / "modules").is_dir() else ROOT.parent
13
+ FIXTURES = SKILLS / "fact-check-x-knowledge-compare" / "tests" / "fixtures"
14
+ PIPELINE = ROOT / "scripts" / "fact_check_x.py"
15
+
16
+
17
+ def command(*arguments: str) -> list[str]:
18
+ return [sys.executable, str(PIPELINE), *arguments]
19
+
20
+
21
+ def run(arguments: list[str], success: bool = True) -> dict:
22
+ process = subprocess.run(arguments, text=True, capture_output=True, check=False)
23
+ if success and process.returncode:
24
+ raise AssertionError(process.stdout or process.stderr)
25
+ if not success and process.returncode == 0:
26
+ raise AssertionError("命令应被阶段门禁拒绝")
27
+ return json.loads([line for line in process.stdout.splitlines() if line.strip()][-1])
28
+
29
+
30
+ def acknowledge(run_dir: Path, checkpoint: dict, decision: str = "continue") -> dict:
31
+ return run(command(
32
+ "acknowledge-stage",
33
+ "--run-dir", str(run_dir),
34
+ "--stage", checkpoint["stage"],
35
+ "--token", checkpoint["acknowledgement"]["token"],
36
+ "--decision", decision,
37
+ ))
38
+
39
+
40
+ def main() -> int:
41
+ with tempfile.TemporaryDirectory(prefix="fcx-stage-gate-") as temporary:
42
+ root = Path(temporary)
43
+ run_dir = root / "interactive"
44
+ results = FIXTURES / "results.json"
45
+ analysis = FIXTURES / "comparison-analysis.json"
46
+ capture = run(command(
47
+ "prepare-comparison",
48
+ "--results", str(results),
49
+ "--run-dir", str(run_dir),
50
+ ))
51
+ assert capture["checkpoint"]["status"] == "awaiting_user"
52
+ assert capture["checkpoint"]["acknowledgement"]["token"].startswith("fcx_")
53
+ blocked = run(command(
54
+ "complete-comparison",
55
+ "--results", str(results),
56
+ "--analysis", str(analysis),
57
+ "--run-dir", str(run_dir),
58
+ ), success=False)
59
+ assert "尚未得到" in blocked["error"]
60
+
61
+ wrong = run(command(
62
+ "acknowledge-stage",
63
+ "--run-dir", str(run_dir),
64
+ "--stage", "capture",
65
+ "--token", "wrong-token",
66
+ "--decision", "continue",
67
+ ), success=False)
68
+ assert "令牌无效" in wrong["error"]
69
+ assert acknowledge(run_dir, capture["checkpoint"])["nextStageAllowed"] is True
70
+
71
+ comparison = run(command(
72
+ "complete-comparison",
73
+ "--results", str(results),
74
+ "--analysis", str(analysis),
75
+ "--run-dir", str(run_dir),
76
+ ))
77
+ assert comparison["checkpoint"]["status"] == "awaiting_user"
78
+ authority_blocked = run(command(
79
+ "prepare-authority", "--run-dir", str(run_dir),
80
+ ), success=False)
81
+ assert "尚未得到" in authority_blocked["error"]
82
+ assert acknowledge(run_dir, comparison["checkpoint"], "stop")["nextStageAllowed"] is False
83
+ stopped = run(command(
84
+ "prepare-authority", "--run-dir", str(run_dir),
85
+ ), success=False)
86
+ assert "尚未得到" in stopped["error"]
87
+
88
+ automatic_dir = root / "automatic"
89
+ rejected = subprocess.run(command(
90
+ "prepare-comparison",
91
+ "--results", str(results),
92
+ "--run-dir", str(automatic_dir),
93
+ "--execution-mode", "full-auto",
94
+ ), text=True, capture_output=True, check=False)
95
+ assert rejected.returncode != 0
96
+ assert "invalid choice" in rejected.stderr
97
+
98
+ print("PASS 互动模式硬门禁且 full-auto 无法绕过")
99
+ return 0
100
+
101
+
102
+ if __name__ == "__main__":
103
+ raise SystemExit(main())
@@ -0,0 +1,156 @@
1
+ #!/usr/bin/env python3
2
+ from __future__ import annotations
3
+
4
+ import json
5
+ import os
6
+ import subprocess
7
+ import sys
8
+ import tempfile
9
+ import threading
10
+ from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
11
+ from pathlib import Path
12
+ from unittest.mock import patch
13
+
14
+
15
+ ROOT = Path(__file__).resolve().parents[1]
16
+ sys.path.insert(0, str(ROOT / "scripts"))
17
+
18
+ from trusted_search_config import ( # noqa: E402
19
+ ConfigurationError,
20
+ configure,
21
+ credential_path,
22
+ load_trusted_search_key,
23
+ locate_onboarding_script,
24
+ trusted_search_key_for_execution,
25
+ validated_trusted_search_key,
26
+ validate_trusted_search_key,
27
+ )
28
+
29
+
30
+ TEST_KEY = "fixture_fact_check_x_key_123456"
31
+
32
+
33
+ class SearchHandler(BaseHTTPRequestHandler):
34
+ def do_POST(self) -> None:
35
+ length = int(self.headers.get("Content-Length", "0"))
36
+ self.rfile.read(length)
37
+ if self.headers.get("api-key") != TEST_KEY:
38
+ self.send_response(403)
39
+ self.end_headers()
40
+ return
41
+ payload = json.dumps({"code": 200, "content": {"data": {"检索文章": []}}})
42
+ encoded = payload.encode("utf-8")
43
+ self.send_response(200)
44
+ self.send_header("Content-Type", "application/json")
45
+ self.send_header("Content-Length", str(len(encoded)))
46
+ self.end_headers()
47
+ self.wfile.write(encoded)
48
+
49
+ def log_message(self, format: str, *args: object) -> None:
50
+ return
51
+
52
+
53
+ def main() -> int:
54
+ previous = os.environ.copy()
55
+ server = ThreadingHTTPServer(("127.0.0.1", 0), SearchHandler)
56
+ worker = threading.Thread(target=server.serve_forever, daemon=True)
57
+ worker.start()
58
+ try:
59
+ with tempfile.TemporaryDirectory(prefix="fact-check-x-key-config-") as temp:
60
+ key_file = Path(temp) / "credentials" / "trusted-search-key"
61
+ key_file.parent.mkdir(parents=True)
62
+ key_file.write_text(f"{TEST_KEY}\n", encoding="utf-8")
63
+ key_file.chmod(0o600)
64
+ os.environ["TRUSTED_SEARCH_KEY"] = "fixture_stale_environment_key_123456"
65
+ os.environ["FACT_CHECK_X_TRUSTED_SEARCH_KEY_FILE"] = str(key_file)
66
+ os.environ["FACTCHECK_TRUSTED_SEARCH_URL"] = (
67
+ f"http://127.0.0.1:{server.server_port}/dependable/search"
68
+ )
69
+
70
+ assert credential_path() == key_file
71
+ assert load_trusted_search_key() == TEST_KEY
72
+ validate_trusted_search_key(TEST_KEY)
73
+ selected, source = validated_trusted_search_key()
74
+ assert selected == TEST_KEY
75
+ assert source == "shared_local_credential"
76
+ existing = configure()
77
+ assert existing["status"] == "already_configured"
78
+ assert existing["source"] == "shared_local_credential"
79
+ assert existing["created"] is False
80
+ assert existing["validated"] is True
81
+ assert locate_onboarding_script().name == "trusted-search-onboarding.js"
82
+
83
+ with patch(
84
+ "trusted_search_config.urllib.request.urlopen",
85
+ side_effect=OSError("The read operation timed out"),
86
+ ):
87
+ executable, executable_source, validation = (
88
+ trusted_search_key_for_execution()
89
+ )
90
+ assert executable == TEST_KEY
91
+ assert executable_source == "shared_local_credential"
92
+ assert validation == "service_unavailable"
93
+
94
+ process = subprocess.run(
95
+ [
96
+ sys.executable,
97
+ str(ROOT / "scripts" / "trusted_search_config.py"),
98
+ "status",
99
+ ],
100
+ text=True,
101
+ capture_output=True,
102
+ check=False,
103
+ env=os.environ.copy(),
104
+ )
105
+ assert process.returncode == 0
106
+ status = json.loads(process.stdout)
107
+ assert status == {
108
+ "status": "configured",
109
+ "configured": True,
110
+ "source": "shared_local_credential",
111
+ "providerUrl": "https://platform.dknowc.cn/auth/#/login",
112
+ }
113
+ assert TEST_KEY not in process.stdout
114
+ assert TEST_KEY not in process.stderr
115
+
116
+ try:
117
+ validate_trusted_search_key("fixture_invalid_key_123456")
118
+ except ConfigurationError as exc:
119
+ assert "无效" in str(exc)
120
+ else:
121
+ raise AssertionError("无效 Key 应被拒绝")
122
+
123
+ os.environ["FACTCHECK_TRUSTED_SEARCH_URL"] = (
124
+ "http://127.0.0.1:1/dependable/search"
125
+ )
126
+ executable, executable_source, validation = (
127
+ trusted_search_key_for_execution()
128
+ )
129
+ assert executable == TEST_KEY
130
+ assert executable_source == "shared_local_credential"
131
+ assert validation == "service_unavailable"
132
+ transient = configure()
133
+ assert transient["status"] == "already_configured"
134
+ assert transient["validated"] is False
135
+ assert transient["validation"] == "service_unavailable"
136
+ assert "不会要求重复登录" in transient["message"]
137
+
138
+ if os.name != "nt":
139
+ key_file.chmod(0o644)
140
+ try:
141
+ load_trusted_search_key()
142
+ except ConfigurationError as exc:
143
+ assert "权限不安全" in str(exc)
144
+ else:
145
+ raise AssertionError("权限过宽的本机 Key 应被拒绝")
146
+ finally:
147
+ server.shutdown()
148
+ server.server_close()
149
+ os.environ.clear()
150
+ os.environ.update(previous)
151
+ print("PASS 可信搜索跨载体共享配置、Key 验证与秘密不外显")
152
+ return 0
153
+
154
+
155
+ if __name__ == "__main__":
156
+ raise SystemExit(main())
@@ -0,0 +1,426 @@
1
+ ---
2
+ name: feature-flags
3
+ description: Implement feature flags for progressive feature rollout using LaunchDarkly,
4
+ Unleash, or custom solutions.
5
+ category: devops
6
+ risk: critical
7
+ source: https://github.com/BagelHole/DevOps-Security-Agent-Skills
8
+ source_repo: BagelHole/DevOps-Security-Agent-Skills
9
+ source_type: community
10
+ date_added: '2026-09-20'
11
+ license: MIT
12
+ license_source: https://github.com/BagelHole/DevOps-Security-Agent-Skills/blob/main/LICENSE
13
+ compatibility: Requires the relevant platform CLIs (kubectl, helm, terraform, git,
14
+ CI runners) and authorized access to the target environment. Docs-only; helper scripts
15
+ and templates not bundled.
16
+ metadata:
17
+ author: devops-skills
18
+ version: '1.0'
19
+ ---
20
+
21
+ # Feature Flags
22
+
23
+ Control feature releases and enable progressive rollout with feature flag systems.
24
+
25
+ ## Prerequisites
26
+
27
+ - Application code access
28
+ - Feature flag service or self-hosted solution
29
+ - Basic understanding of deployment patterns
30
+
31
+ ## Feature Flag Types
32
+
33
+ | Type | Purpose | Example |
34
+ |------|---------|---------|
35
+ | Release | Control feature visibility | New checkout flow |
36
+ | Experiment | A/B testing | Button color test |
37
+ | Ops | Runtime configuration | Rate limiting |
38
+ | Permission | User access control | Premium features |
39
+ | Kill Switch | Emergency disable | Third-party integration |
40
+
41
+ ## LaunchDarkly
42
+
43
+ ### SDK Setup (Node.js)
44
+
45
+ ```javascript
46
+ const LaunchDarkly = require('launchdarkly-node-server-sdk');
47
+
48
+ const client = LaunchDarkly.init(process.env.LAUNCHDARKLY_SDK_KEY);
49
+
50
+ await client.waitForInitialization();
51
+
52
+ // Evaluate flag
53
+ const user = {
54
+ key: 'user-123',
55
+ email: 'user@example.com',
56
+ custom: {
57
+ plan: 'premium',
58
+ company: 'acme'
59
+ }
60
+ };
61
+
62
+ const showNewFeature = await client.variation('new-checkout', user, false);
63
+
64
+ if (showNewFeature) {
65
+ // New feature code
66
+ } else {
67
+ // Existing code
68
+ }
69
+ ```
70
+
71
+ ### React SDK
72
+
73
+ ```javascript
74
+ import { withLDProvider, useFlags, useLDClient } from 'launchdarkly-react-client-sdk';
75
+
76
+ // Provider setup
77
+ export default withLDProvider({
78
+ clientSideID: 'your-client-side-id',
79
+ user: {
80
+ key: 'user-123',
81
+ email: 'user@example.com'
82
+ }
83
+ })(App);
84
+
85
+ // Using flags in component
86
+ function FeatureComponent() {
87
+ const { newCheckout, experimentVariant } = useFlags();
88
+ const ldClient = useLDClient();
89
+
90
+ // Track events
91
+ const handleClick = () => {
92
+ ldClient.track('checkout-started');
93
+ };
94
+
95
+ if (newCheckout) {
96
+ return <NewCheckout onClick={handleClick} />;
97
+ }
98
+ return <OldCheckout onClick={handleClick} />;
99
+ }
100
+ ```
101
+
102
+ ### Targeting Rules
103
+
104
+ ```yaml
105
+ # LaunchDarkly targeting configuration
106
+ flag: new-checkout
107
+ targeting:
108
+ # Individual users
109
+ targets:
110
+ - variation: true
111
+ values: ['user-123', 'user-456']
112
+
113
+ # Rules
114
+ rules:
115
+ # Beta users
116
+ - variation: true
117
+ clauses:
118
+ - attribute: email
119
+ op: endsWith
120
+ values: ['@company.com']
121
+
122
+ # Premium plan
123
+ - variation: true
124
+ clauses:
125
+ - attribute: plan
126
+ op: in
127
+ values: ['premium', 'enterprise']
128
+
129
+ # Percentage rollout
130
+ - variation: true
131
+ rollout:
132
+ variations:
133
+ - variation: true
134
+ weight: 20000 # 20%
135
+ - variation: false
136
+ weight: 80000 # 80%
137
+
138
+ # Default
139
+ fallthrough:
140
+ variation: false
141
+ ```
142
+
143
+ ## Unleash
144
+
145
+ ### Server Setup
146
+
147
+ ```yaml
148
+ # docker-compose.yml
149
+ version: '3.8'
150
+
151
+ services:
152
+ unleash:
153
+ image: unleashorg/unleash-server:latest
154
+ ports:
155
+ - "4242:4242"
156
+ environment:
157
+ - DATABASE_URL=postgres://postgres:password@db/unleash
158
+ - DATABASE_SSL=false
159
+ depends_on:
160
+ - db
161
+
162
+ db:
163
+ image: postgres:15
164
+ environment:
165
+ - POSTGRES_PASSWORD=password
166
+ - POSTGRES_DB=unleash
167
+ volumes:
168
+ - postgres-data:/var/lib/postgresql/data
169
+
170
+ volumes:
171
+ postgres-data:
172
+ ```
173
+
174
+ ### SDK Setup (Node.js)
175
+
176
+ ```javascript
177
+ const { initialize } = require('unleash-client');
178
+
179
+ const unleash = initialize({
180
+ url: 'http://localhost:4242/api',
181
+ appName: 'my-app',
182
+ customHeaders: {
183
+ Authorization: 'your-api-token'
184
+ }
185
+ });
186
+
187
+ unleash.on('ready', () => {
188
+ // Check feature
189
+ const isEnabled = unleash.isEnabled('new-checkout');
190
+
191
+ // With context
192
+ const context = {
193
+ userId: 'user-123',
194
+ properties: {
195
+ plan: 'premium'
196
+ }
197
+ };
198
+
199
+ const isEnabledForUser = unleash.isEnabled('new-checkout', context);
200
+
201
+ // Get variant
202
+ const variant = unleash.getVariant('experiment-flag', context);
203
+ console.log(variant.name); // 'control' or 'treatment'
204
+ });
205
+ ```
206
+
207
+ ### Activation Strategies
208
+
209
+ ```yaml
210
+ # Standard strategies
211
+ strategies:
212
+ - name: default
213
+ # On/off for everyone
214
+
215
+ - name: userWithId
216
+ parameters:
217
+ userIds: 'user-1,user-2,user-3'
218
+
219
+ - name: gradualRolloutUserId
220
+ parameters:
221
+ percentage: 25
222
+ groupId: 'new-feature'
223
+
224
+ - name: gradualRolloutRandom
225
+ parameters:
226
+ percentage: 50
227
+
228
+ - name: flexibleRollout
229
+ parameters:
230
+ rollout: 30
231
+ stickiness: userId
232
+ groupId: 'checkout-exp'
233
+ ```
234
+
235
+ ## Custom Implementation
236
+
237
+ ### Database-Backed Flags
238
+
239
+ ```python
240
+ # models.py
241
+ from django.db import models
242
+
243
+ class FeatureFlag(models.Model):
244
+ name = models.CharField(max_length=100, unique=True)
245
+ enabled = models.BooleanField(default=False)
246
+ rollout_percentage = models.IntegerField(default=0)
247
+ allowed_users = models.JSONField(default=list)
248
+ rules = models.JSONField(default=dict)
249
+ created_at = models.DateTimeField(auto_now_add=True)
250
+ updated_at = models.DateTimeField(auto_now=True)
251
+
252
+ # service.py
253
+ import hashlib
254
+
255
+ class FeatureFlagService:
256
+ def __init__(self):
257
+ self._cache = {}
258
+
259
+ def is_enabled(self, flag_name, user_id=None, context=None):
260
+ flag = self._get_flag(flag_name)
261
+
262
+ if not flag or not flag.enabled:
263
+ return False
264
+
265
+ # Check user allowlist
266
+ if user_id and user_id in flag.allowed_users:
267
+ return True
268
+
269
+ # Check rules
270
+ if context and self._evaluate_rules(flag.rules, context):
271
+ return True
272
+
273
+ # Check percentage rollout
274
+ if flag.rollout_percentage > 0 and user_id:
275
+ return self._is_in_rollout(flag_name, user_id, flag.rollout_percentage)
276
+
277
+ return flag.rollout_percentage == 100
278
+
279
+ def _is_in_rollout(self, flag_name, user_id, percentage):
280
+ hash_input = f"{flag_name}:{user_id}"
281
+ hash_value = int(hashlib.md5(hash_input.encode()).hexdigest(), 16)
282
+ return (hash_value % 100) < percentage
283
+
284
+ def _evaluate_rules(self, rules, context):
285
+ for rule in rules.get('rules', []):
286
+ if self._evaluate_rule(rule, context):
287
+ return True
288
+ return False
289
+ ```
290
+
291
+ ### Redis-Backed Flags
292
+
293
+ ```python
294
+ import redis
295
+ import json
296
+
297
+ class RedisFeatureFlags:
298
+ def __init__(self, redis_url):
299
+ self.redis = redis.from_url(redis_url)
300
+ self.prefix = 'feature_flag:'
301
+
302
+ def set_flag(self, name, config):
303
+ key = f"{self.prefix}{name}"
304
+ self.redis.set(key, json.dumps(config))
305
+
306
+ def is_enabled(self, name, user_id=None):
307
+ key = f"{self.prefix}{name}"
308
+ data = self.redis.get(key)
309
+
310
+ if not data:
311
+ return False
312
+
313
+ config = json.loads(data)
314
+
315
+ if not config.get('enabled', False):
316
+ return False
317
+
318
+ # User allowlist
319
+ if user_id in config.get('users', []):
320
+ return True
321
+
322
+ # Percentage rollout
323
+ percentage = config.get('percentage', 0)
324
+ if percentage == 100:
325
+ return True
326
+
327
+ if percentage > 0 and user_id:
328
+ return self._hash_user(name, user_id) < percentage
329
+
330
+ return False
331
+
332
+ def _hash_user(self, flag, user_id):
333
+ import hashlib
334
+ hash_input = f"{flag}:{user_id}"
335
+ return int(hashlib.sha256(hash_input.encode()).hexdigest(), 16) % 100
336
+ ```
337
+
338
+ ## Testing with Feature Flags
339
+
340
+ ### Unit Testing
341
+
342
+ ```javascript
343
+ // Jest mocking
344
+ jest.mock('launchdarkly-node-server-sdk', () => ({
345
+ init: jest.fn(() => ({
346
+ waitForInitialization: jest.fn().mockResolvedValue(undefined),
347
+ variation: jest.fn()
348
+ }))
349
+ }));
350
+
351
+ describe('Checkout', () => {
352
+ it('shows new checkout when flag enabled', async () => {
353
+ const ldClient = require('launchdarkly-node-server-sdk').init();
354
+ ldClient.variation.mockResolvedValue(true);
355
+
356
+ const result = await renderCheckout(user);
357
+ expect(result).toContain('NewCheckout');
358
+ });
359
+
360
+ it('shows old checkout when flag disabled', async () => {
361
+ const ldClient = require('launchdarkly-node-server-sdk').init();
362
+ ldClient.variation.mockResolvedValue(false);
363
+
364
+ const result = await renderCheckout(user);
365
+ expect(result).toContain('OldCheckout');
366
+ });
367
+ });
368
+ ```
369
+
370
+ ### Integration Testing
371
+
372
+ ```python
373
+ # pytest fixtures
374
+ import pytest
375
+
376
+ @pytest.fixture
377
+ def feature_flags():
378
+ """Provide controllable feature flags for testing."""
379
+ flags = {}
380
+
381
+ class TestFlags:
382
+ def set(self, name, value):
383
+ flags[name] = value
384
+
385
+ def is_enabled(self, name, **kwargs):
386
+ return flags.get(name, False)
387
+
388
+ return TestFlags()
389
+
390
+ def test_new_checkout(feature_flags):
391
+ feature_flags.set('new-checkout', True)
392
+
393
+ response = client.get('/checkout')
394
+ assert 'new-checkout-form' in response.content
395
+ ```
396
+
397
+
398
+ ## Contents
399
+
400
+ - [Monitoring and Analytics](references/details.md)
401
+ - [Common Issues](references/details.md)
402
+ - [Best Practices](references/details.md)
403
+ - [Related Skills](references/details.md)
404
+
405
+ ## When to Use This Skill
406
+
407
+ Use this skill when:
408
+ - Implementing gradual feature rollouts
409
+ - Enabling trunk-based development
410
+ - Running A/B tests and experiments
411
+ - Managing feature lifecycles
412
+ - Implementing kill switches for production
413
+
414
+ ## Limitations
415
+
416
+ - Guidance executes against real environments: confirm target, blast radius, and rollback plan before applying anything.
417
+ - Never deploy to production without explicit approval. Docs-only import: upstream scripts and templates not bundled.
418
+
419
+ ### Example
420
+
421
+ ```bash
422
+ git status && git diff --stat
423
+ kubectl diff -f manifest.yaml
424
+ ```
425
+
426
+ > Adapted from [BagelHole/DevOps-Security-Agent-Skills](https://github.com/BagelHole/DevOps-Security-Agent-Skills) (MIT); frontmatter, When to Use/Limitations, and safety boundaries added for upstream compliance. Docs-only import: helper scripts and templates not bundled.