@heytherevibin/skillforge 0.2.1

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 (402) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/CODE_OF_CONDUCT.md +34 -0
  3. package/CONTRIBUTING.md +38 -0
  4. package/LICENSE +21 -0
  5. package/README.md +337 -0
  6. package/RELEASING.md +93 -0
  7. package/SECURITY.md +31 -0
  8. package/STRATEGY.md +26 -0
  9. package/bin/cli.js +547 -0
  10. package/lib/packs.js +184 -0
  11. package/package.json +38 -0
  12. package/python/app/__init__.py +0 -0
  13. package/python/app/__pycache__/__init__.cpython-312.pyc +0 -0
  14. package/python/app/__pycache__/auth.cpython-312.pyc +0 -0
  15. package/python/app/__pycache__/main.cpython-312.pyc +0 -0
  16. package/python/app/auth.py +63 -0
  17. package/python/app/cli.py +78 -0
  18. package/python/app/db_paths.py +26 -0
  19. package/python/app/events_cli.py +175 -0
  20. package/python/app/main.py +647 -0
  21. package/python/app/materialize.py +138 -0
  22. package/python/app/mcp_server.py +610 -0
  23. package/python/app/route_cli.py +117 -0
  24. package/python/requirements-dev.txt +1 -0
  25. package/python/requirements.txt +7 -0
  26. package/python/tests/test_db_paths.py +41 -0
  27. package/skills/accessibility/SKILL.md +145 -0
  28. package/skills/agent-architecture-audit/SKILL.md +256 -0
  29. package/skills/agent-eval/SKILL.md +144 -0
  30. package/skills/agent-harness-construction/SKILL.md +72 -0
  31. package/skills/agent-introspection-debugging/SKILL.md +152 -0
  32. package/skills/agent-payment-x402/SKILL.md +224 -0
  33. package/skills/agent-sort/SKILL.md +214 -0
  34. package/skills/agentic-engineering/SKILL.md +62 -0
  35. package/skills/agentic-os/SKILL.md +386 -0
  36. package/skills/ai-first-engineering/SKILL.md +50 -0
  37. package/skills/ai-regression-testing/SKILL.md +384 -0
  38. package/skills/android-clean-architecture/SKILL.md +338 -0
  39. package/skills/angular-developer/SKILL.md +153 -0
  40. package/skills/angular-developer/references/angular-animations.md +160 -0
  41. package/skills/angular-developer/references/angular-aria.md +410 -0
  42. package/skills/angular-developer/references/cli.md +86 -0
  43. package/skills/angular-developer/references/component-harnesses.md +59 -0
  44. package/skills/angular-developer/references/component-styling.md +91 -0
  45. package/skills/angular-developer/references/components.md +117 -0
  46. package/skills/angular-developer/references/creating-services.md +97 -0
  47. package/skills/angular-developer/references/data-resolvers.md +69 -0
  48. package/skills/angular-developer/references/define-routes.md +67 -0
  49. package/skills/angular-developer/references/defining-providers.md +72 -0
  50. package/skills/angular-developer/references/di-fundamentals.md +120 -0
  51. package/skills/angular-developer/references/e2e-testing.md +56 -0
  52. package/skills/angular-developer/references/effects.md +83 -0
  53. package/skills/angular-developer/references/hierarchical-injectors.md +43 -0
  54. package/skills/angular-developer/references/host-elements.md +80 -0
  55. package/skills/angular-developer/references/injection-context.md +63 -0
  56. package/skills/angular-developer/references/inputs.md +101 -0
  57. package/skills/angular-developer/references/linked-signal.md +59 -0
  58. package/skills/angular-developer/references/loading-strategies.md +61 -0
  59. package/skills/angular-developer/references/mcp.md +108 -0
  60. package/skills/angular-developer/references/navigate-to-routes.md +69 -0
  61. package/skills/angular-developer/references/outputs.md +86 -0
  62. package/skills/angular-developer/references/reactive-forms.md +122 -0
  63. package/skills/angular-developer/references/rendering-strategies.md +44 -0
  64. package/skills/angular-developer/references/resource.md +77 -0
  65. package/skills/angular-developer/references/route-animations.md +56 -0
  66. package/skills/angular-developer/references/route-guards.md +52 -0
  67. package/skills/angular-developer/references/router-lifecycle.md +45 -0
  68. package/skills/angular-developer/references/router-testing.md +87 -0
  69. package/skills/angular-developer/references/show-routes-with-outlets.md +68 -0
  70. package/skills/angular-developer/references/signal-forms.md +795 -0
  71. package/skills/angular-developer/references/signals-overview.md +94 -0
  72. package/skills/angular-developer/references/tailwind-css.md +69 -0
  73. package/skills/angular-developer/references/template-driven-forms.md +114 -0
  74. package/skills/angular-developer/references/testing-fundamentals.md +65 -0
  75. package/skills/api-connector-builder/SKILL.md +120 -0
  76. package/skills/api-design/SKILL.md +522 -0
  77. package/skills/architecture-decision-records/SKILL.md +178 -0
  78. package/skills/article-writing/SKILL.md +78 -0
  79. package/skills/automation-audit-ops/SKILL.md +141 -0
  80. package/skills/autonomous-agent-harness/SKILL.md +272 -0
  81. package/skills/autonomous-loops/SKILL.md +609 -0
  82. package/skills/backend-patterns/SKILL.md +560 -0
  83. package/skills/benchmark/SKILL.md +92 -0
  84. package/skills/blueprint/SKILL.md +104 -0
  85. package/skills/browser-qa/SKILL.md +86 -0
  86. package/skills/bun-runtime/SKILL.md +83 -0
  87. package/skills/canary-watch/SKILL.md +98 -0
  88. package/skills/carrier-relationship-management/SKILL.md +211 -0
  89. package/skills/cisco-ios-patterns/SKILL.md +163 -0
  90. package/skills/ck/SKILL.md +147 -0
  91. package/skills/ck/commands/forget.mjs +44 -0
  92. package/skills/ck/commands/info.mjs +24 -0
  93. package/skills/ck/commands/init.mjs +143 -0
  94. package/skills/ck/commands/list.mjs +40 -0
  95. package/skills/ck/commands/migrate.mjs +202 -0
  96. package/skills/ck/commands/resume.mjs +36 -0
  97. package/skills/ck/commands/save.mjs +210 -0
  98. package/skills/ck/commands/shared.mjs +387 -0
  99. package/skills/ck/hooks/session-start.mjs +224 -0
  100. package/skills/claude-devfleet/SKILL.md +103 -0
  101. package/skills/click-path-audit/SKILL.md +244 -0
  102. package/skills/clickhouse-io/SKILL.md +438 -0
  103. package/skills/code-tour/SKILL.md +235 -0
  104. package/skills/codebase-onboarding/SKILL.md +232 -0
  105. package/skills/coding-standards/SKILL.md +548 -0
  106. package/skills/compose-multiplatform-patterns/SKILL.md +298 -0
  107. package/skills/connections-optimizer/SKILL.md +188 -0
  108. package/skills/content-engine/SKILL.md +126 -0
  109. package/skills/content-hash-cache-pattern/SKILL.md +160 -0
  110. package/skills/context-budget/SKILL.md +134 -0
  111. package/skills/continuous-agent-loop/SKILL.md +44 -0
  112. package/skills/continuous-learning/SKILL.md +129 -0
  113. package/skills/continuous-learning/config.json +18 -0
  114. package/skills/continuous-learning/evaluate-session.sh +69 -0
  115. package/skills/continuous-learning-v2/SKILL.md +358 -0
  116. package/skills/continuous-learning-v2/agents/observer-loop.sh +322 -0
  117. package/skills/continuous-learning-v2/agents/observer.md +198 -0
  118. package/skills/continuous-learning-v2/agents/session-guardian.sh +150 -0
  119. package/skills/continuous-learning-v2/agents/start-observer.sh +248 -0
  120. package/skills/continuous-learning-v2/config.json +8 -0
  121. package/skills/continuous-learning-v2/hooks/observe.sh +476 -0
  122. package/skills/continuous-learning-v2/scripts/detect-project.sh +288 -0
  123. package/skills/continuous-learning-v2/scripts/instinct-cli.py +1519 -0
  124. package/skills/continuous-learning-v2/scripts/lib/homunculus-dir.sh +31 -0
  125. package/skills/continuous-learning-v2/scripts/migrate-homunculus.sh +62 -0
  126. package/skills/continuous-learning-v2/scripts/test_parse_instinct.py +1018 -0
  127. package/skills/cost-aware-llm-pipeline/SKILL.md +182 -0
  128. package/skills/cost-tracking/SKILL.md +147 -0
  129. package/skills/council/SKILL.md +202 -0
  130. package/skills/cpp-coding-standards/SKILL.md +722 -0
  131. package/skills/cpp-testing/SKILL.md +323 -0
  132. package/skills/crosspost/SKILL.md +110 -0
  133. package/skills/csharp-testing/SKILL.md +320 -0
  134. package/skills/customer-billing-ops/SKILL.md +139 -0
  135. package/skills/customs-trade-compliance/SKILL.md +262 -0
  136. package/skills/dart-flutter-patterns/SKILL.md +562 -0
  137. package/skills/dashboard-builder/SKILL.md +108 -0
  138. package/skills/data-scraper-agent/SKILL.md +764 -0
  139. package/skills/database-migrations/SKILL.md +428 -0
  140. package/skills/deep-research/SKILL.md +158 -0
  141. package/skills/defi-amm-security/SKILL.md +166 -0
  142. package/skills/deployment-patterns/SKILL.md +426 -0
  143. package/skills/design-system/SKILL.md +81 -0
  144. package/skills/django-celery/SKILL.md +456 -0
  145. package/skills/django-patterns/SKILL.md +733 -0
  146. package/skills/django-security/SKILL.md +592 -0
  147. package/skills/django-tdd/SKILL.md +728 -0
  148. package/skills/django-verification/SKILL.md +468 -0
  149. package/skills/dmux-workflows/SKILL.md +190 -0
  150. package/skills/docker-patterns/SKILL.md +363 -0
  151. package/skills/documentation-lookup/SKILL.md +89 -0
  152. package/skills/dotnet-patterns/SKILL.md +320 -0
  153. package/skills/e2e-testing/SKILL.md +325 -0
  154. package/skills/email-ops/SKILL.md +120 -0
  155. package/skills/energy-procurement/SKILL.md +227 -0
  156. package/skills/enterprise-agent-ops/SKILL.md +49 -0
  157. package/skills/error-handling/SKILL.md +375 -0
  158. package/skills/eval-harness/SKILL.md +269 -0
  159. package/skills/evm-token-decimals/SKILL.md +130 -0
  160. package/skills/exa-search/SKILL.md +106 -0
  161. package/skills/fal-ai-media/SKILL.md +287 -0
  162. package/skills/fastapi-patterns/SKILL.md +327 -0
  163. package/skills/finance-billing-ops/SKILL.md +126 -0
  164. package/skills/flox-environments/SKILL.md +496 -0
  165. package/skills/flutter-dart-code-review/SKILL.md +434 -0
  166. package/skills/foundation-models-on-device/SKILL.md +243 -0
  167. package/skills/frontend-design-direction/SKILL.md +92 -0
  168. package/skills/frontend-patterns/SKILL.md +641 -0
  169. package/skills/frontend-slides/SKILL.md +183 -0
  170. package/skills/frontend-slides/STYLE_PRESETS.md +330 -0
  171. package/skills/frontend-slides/animation-patterns.md +122 -0
  172. package/skills/frontend-slides/html-template.md +419 -0
  173. package/skills/frontend-slides/scripts/export-pdf.sh +418 -0
  174. package/skills/frontend-slides/scripts/extract-pptx.py +96 -0
  175. package/skills/frontend-slides/viewport-base.css +153 -0
  176. package/skills/fsharp-testing/SKILL.md +279 -0
  177. package/skills/gan-style-harness/SKILL.md +278 -0
  178. package/skills/gateguard/SKILL.md +125 -0
  179. package/skills/git-workflow/SKILL.md +714 -0
  180. package/skills/github-ops/SKILL.md +143 -0
  181. package/skills/golang-patterns/SKILL.md +673 -0
  182. package/skills/golang-testing/SKILL.md +719 -0
  183. package/skills/google-workspace-ops/SKILL.md +94 -0
  184. package/skills/healthcare-cdss-patterns/SKILL.md +245 -0
  185. package/skills/healthcare-emr-patterns/SKILL.md +159 -0
  186. package/skills/healthcare-eval-harness/SKILL.md +207 -0
  187. package/skills/healthcare-phi-compliance/SKILL.md +145 -0
  188. package/skills/hermes-imports/SKILL.md +87 -0
  189. package/skills/hexagonal-architecture/SKILL.md +275 -0
  190. package/skills/hipaa-compliance/SKILL.md +78 -0
  191. package/skills/homelab-network-readiness/SKILL.md +169 -0
  192. package/skills/homelab-network-setup/SKILL.md +129 -0
  193. package/skills/homelab-pihole-dns/SKILL.md +274 -0
  194. package/skills/homelab-vlan-segmentation/SKILL.md +311 -0
  195. package/skills/homelab-wireguard-vpn/SKILL.md +305 -0
  196. package/skills/hookify-rules/SKILL.md +128 -0
  197. package/skills/inventory-demand-planning/SKILL.md +246 -0
  198. package/skills/investor-materials/SKILL.md +95 -0
  199. package/skills/investor-outreach/SKILL.md +90 -0
  200. package/skills/ios-icon-gen/SKILL.md +157 -0
  201. package/skills/ios-icon-gen/scripts/generate_icons.swift +258 -0
  202. package/skills/ios-icon-gen/scripts/iconify_gen.sh +235 -0
  203. package/skills/iterative-retrieval/SKILL.md +209 -0
  204. package/skills/java-coding-standards/SKILL.md +382 -0
  205. package/skills/jira-integration/SKILL.md +292 -0
  206. package/skills/jpa-patterns/SKILL.md +150 -0
  207. package/skills/knowledge-ops/SKILL.md +153 -0
  208. package/skills/kotlin-coroutines-flows/SKILL.md +283 -0
  209. package/skills/kotlin-exposed-patterns/SKILL.md +718 -0
  210. package/skills/kotlin-ktor-patterns/SKILL.md +688 -0
  211. package/skills/kotlin-patterns/SKILL.md +710 -0
  212. package/skills/kotlin-testing/SKILL.md +823 -0
  213. package/skills/laravel-patterns/SKILL.md +414 -0
  214. package/skills/laravel-plugin-discovery/SKILL.md +228 -0
  215. package/skills/laravel-security/SKILL.md +284 -0
  216. package/skills/laravel-tdd/SKILL.md +282 -0
  217. package/skills/laravel-verification/SKILL.md +178 -0
  218. package/skills/lead-intelligence/SKILL.md +320 -0
  219. package/skills/lead-intelligence/agents/enrichment-agent.md +85 -0
  220. package/skills/lead-intelligence/agents/mutual-mapper.md +75 -0
  221. package/skills/lead-intelligence/agents/outreach-drafter.md +98 -0
  222. package/skills/lead-intelligence/agents/signal-scorer.md +60 -0
  223. package/skills/liquid-glass-design/SKILL.md +279 -0
  224. package/skills/llm-trading-agent-security/SKILL.md +146 -0
  225. package/skills/logistics-exception-management/SKILL.md +221 -0
  226. package/skills/make-interfaces-feel-better/SKILL.md +151 -0
  227. package/skills/manim-video/SKILL.md +88 -0
  228. package/skills/manim-video/assets/network_graph_scene.py +52 -0
  229. package/skills/market-research/SKILL.md +74 -0
  230. package/skills/mcp-server-patterns/SKILL.md +68 -0
  231. package/skills/messages-ops/SKILL.md +103 -0
  232. package/skills/mle-workflow/SKILL.md +345 -0
  233. package/skills/motion-advanced/SKILL.md +596 -0
  234. package/skills/motion-foundations/SKILL.md +299 -0
  235. package/skills/motion-patterns/SKILL.md +435 -0
  236. package/skills/motion-ui/SKILL.md +574 -0
  237. package/skills/mysql-patterns/SKILL.md +411 -0
  238. package/skills/nanoclaw-repl/SKILL.md +32 -0
  239. package/skills/nestjs-patterns/SKILL.md +229 -0
  240. package/skills/netmiko-ssh-automation/SKILL.md +173 -0
  241. package/skills/network-bgp-diagnostics/SKILL.md +167 -0
  242. package/skills/network-config-validation/SKILL.md +210 -0
  243. package/skills/network-interface-health/SKILL.md +152 -0
  244. package/skills/nextjs-turbopack/SKILL.md +43 -0
  245. package/skills/nodejs-keccak256/SKILL.md +102 -0
  246. package/skills/nutrient-document-processing/SKILL.md +166 -0
  247. package/skills/nuxt4-patterns/SKILL.md +99 -0
  248. package/skills/openclaw-persona-forge/SKILL.md +288 -0
  249. package/skills/openclaw-persona-forge/gacha.py +224 -0
  250. package/skills/openclaw-persona-forge/gacha.sh +5 -0
  251. package/skills/openclaw-persona-forge/references/avatar-style.md +124 -0
  252. package/skills/openclaw-persona-forge/references/boundary-rules.md +53 -0
  253. package/skills/openclaw-persona-forge/references/error-handling.md +53 -0
  254. package/skills/openclaw-persona-forge/references/identity-tension.md +48 -0
  255. package/skills/openclaw-persona-forge/references/naming-system.md +39 -0
  256. package/skills/openclaw-persona-forge/references/output-template.md +166 -0
  257. package/skills/opensource-pipeline/SKILL.md +254 -0
  258. package/skills/perl-patterns/SKILL.md +503 -0
  259. package/skills/perl-security/SKILL.md +502 -0
  260. package/skills/perl-testing/SKILL.md +474 -0
  261. package/skills/plan-orchestrate/SKILL.md +253 -0
  262. package/skills/plankton-code-quality/SKILL.md +236 -0
  263. package/skills/postgres-patterns/SKILL.md +146 -0
  264. package/skills/product-capability/SKILL.md +140 -0
  265. package/skills/product-lens/SKILL.md +91 -0
  266. package/skills/production-audit/SKILL.md +206 -0
  267. package/skills/production-scheduling/SKILL.md +237 -0
  268. package/skills/project-flow-ops/SKILL.md +110 -0
  269. package/skills/prompt-optimizer/SKILL.md +398 -0
  270. package/skills/python-patterns/SKILL.md +749 -0
  271. package/skills/python-testing/SKILL.md +815 -0
  272. package/skills/pytorch-patterns/SKILL.md +395 -0
  273. package/skills/quality-nonconformance/SKILL.md +259 -0
  274. package/skills/quarkus-patterns/SKILL.md +721 -0
  275. package/skills/quarkus-security/SKILL.md +466 -0
  276. package/skills/quarkus-tdd/SKILL.md +810 -0
  277. package/skills/quarkus-verification/SKILL.md +478 -0
  278. package/skills/ralphinho-rfc-pipeline/SKILL.md +66 -0
  279. package/skills/redis-patterns/SKILL.md +402 -0
  280. package/skills/regex-vs-llm-structured-text/SKILL.md +219 -0
  281. package/skills/remotion-video-creation/SKILL.md +43 -0
  282. package/skills/remotion-video-creation/rules/3d.md +86 -0
  283. package/skills/remotion-video-creation/rules/animations.md +29 -0
  284. package/skills/remotion-video-creation/rules/assets/charts-bar-chart.tsx +173 -0
  285. package/skills/remotion-video-creation/rules/assets/text-animations-typewriter.tsx +100 -0
  286. package/skills/remotion-video-creation/rules/assets/text-animations-word-highlight.tsx +108 -0
  287. package/skills/remotion-video-creation/rules/assets.md +78 -0
  288. package/skills/remotion-video-creation/rules/audio.md +172 -0
  289. package/skills/remotion-video-creation/rules/calculate-metadata.md +104 -0
  290. package/skills/remotion-video-creation/rules/can-decode.md +75 -0
  291. package/skills/remotion-video-creation/rules/charts.md +58 -0
  292. package/skills/remotion-video-creation/rules/compositions.md +146 -0
  293. package/skills/remotion-video-creation/rules/display-captions.md +126 -0
  294. package/skills/remotion-video-creation/rules/extract-frames.md +229 -0
  295. package/skills/remotion-video-creation/rules/fonts.md +152 -0
  296. package/skills/remotion-video-creation/rules/get-audio-duration.md +58 -0
  297. package/skills/remotion-video-creation/rules/get-video-dimensions.md +68 -0
  298. package/skills/remotion-video-creation/rules/get-video-duration.md +58 -0
  299. package/skills/remotion-video-creation/rules/gifs.md +138 -0
  300. package/skills/remotion-video-creation/rules/images.md +130 -0
  301. package/skills/remotion-video-creation/rules/import-srt-captions.md +67 -0
  302. package/skills/remotion-video-creation/rules/lottie.md +67 -0
  303. package/skills/remotion-video-creation/rules/measuring-dom-nodes.md +34 -0
  304. package/skills/remotion-video-creation/rules/measuring-text.md +143 -0
  305. package/skills/remotion-video-creation/rules/sequencing.md +106 -0
  306. package/skills/remotion-video-creation/rules/tailwind.md +11 -0
  307. package/skills/remotion-video-creation/rules/text-animations.md +20 -0
  308. package/skills/remotion-video-creation/rules/timing.md +179 -0
  309. package/skills/remotion-video-creation/rules/transcribe-captions.md +19 -0
  310. package/skills/remotion-video-creation/rules/transitions.md +122 -0
  311. package/skills/remotion-video-creation/rules/trimming.md +52 -0
  312. package/skills/remotion-video-creation/rules/videos.md +171 -0
  313. package/skills/repo-scan/SKILL.md +78 -0
  314. package/skills/research-ops/SKILL.md +111 -0
  315. package/skills/returns-reverse-logistics/SKILL.md +239 -0
  316. package/skills/rules-distill/SKILL.md +263 -0
  317. package/skills/rules-distill/scripts/scan-rules.sh +58 -0
  318. package/skills/rules-distill/scripts/scan-skills.sh +129 -0
  319. package/skills/rust-patterns/SKILL.md +498 -0
  320. package/skills/rust-testing/SKILL.md +499 -0
  321. package/skills/safety-guard/SKILL.md +74 -0
  322. package/skills/santa-method/SKILL.md +306 -0
  323. package/skills/scientific-db-pubmed-database/SKILL.md +175 -0
  324. package/skills/scientific-db-uspto-database/SKILL.md +177 -0
  325. package/skills/scientific-pkg-gget/SKILL.md +166 -0
  326. package/skills/scientific-thinking-literature-review/SKILL.md +192 -0
  327. package/skills/scientific-thinking-scholar-evaluation/SKILL.md +160 -0
  328. package/skills/search-first/SKILL.md +181 -0
  329. package/skills/security-bounty-hunter/SKILL.md +99 -0
  330. package/skills/security-review/SKILL.md +502 -0
  331. package/skills/security-review/cloud-infrastructure-security.md +361 -0
  332. package/skills/seo/SKILL.md +153 -0
  333. package/skills/skill-comply/SKILL.md +57 -0
  334. package/skills/skill-comply/fixtures/compliant_trace.jsonl +5 -0
  335. package/skills/skill-comply/fixtures/noncompliant_trace.jsonl +3 -0
  336. package/skills/skill-comply/fixtures/tdd_spec.yaml +44 -0
  337. package/skills/skill-comply/prompts/classifier.md +24 -0
  338. package/skills/skill-comply/prompts/scenario_generator.md +62 -0
  339. package/skills/skill-comply/prompts/spec_generator.md +42 -0
  340. package/skills/skill-comply/pyproject.toml +15 -0
  341. package/skills/skill-comply/scripts/__init__.py +0 -0
  342. package/skills/skill-comply/scripts/classifier.py +85 -0
  343. package/skills/skill-comply/scripts/grader.py +124 -0
  344. package/skills/skill-comply/scripts/parser.py +107 -0
  345. package/skills/skill-comply/scripts/report.py +170 -0
  346. package/skills/skill-comply/scripts/run.py +127 -0
  347. package/skills/skill-comply/scripts/runner.py +186 -0
  348. package/skills/skill-comply/scripts/scenario_generator.py +70 -0
  349. package/skills/skill-comply/scripts/spec_generator.py +72 -0
  350. package/skills/skill-comply/scripts/utils.py +13 -0
  351. package/skills/skill-comply/tests/test_grader.py +197 -0
  352. package/skills/skill-comply/tests/test_parser.py +90 -0
  353. package/skills/skill-comply/tests/test_runner.py +172 -0
  354. package/skills/skill-scout/SKILL.md +139 -0
  355. package/skills/skill-stocktake/SKILL.md +193 -0
  356. package/skills/skill-stocktake/scripts/quick-diff.sh +87 -0
  357. package/skills/skill-stocktake/scripts/save-results.sh +56 -0
  358. package/skills/skill-stocktake/scripts/scan.sh +170 -0
  359. package/skills/social-graph-ranker/SKILL.md +153 -0
  360. package/skills/springboot-patterns/SKILL.md +313 -0
  361. package/skills/springboot-security/SKILL.md +271 -0
  362. package/skills/springboot-tdd/SKILL.md +157 -0
  363. package/skills/springboot-verification/SKILL.md +230 -0
  364. package/skills/strategic-compact/SKILL.md +129 -0
  365. package/skills/strategic-compact/suggest-compact.sh +54 -0
  366. package/skills/swift-actor-persistence/SKILL.md +142 -0
  367. package/skills/swift-concurrency-6-2/SKILL.md +216 -0
  368. package/skills/swift-protocol-di-testing/SKILL.md +189 -0
  369. package/skills/swiftui-patterns/SKILL.md +259 -0
  370. package/skills/tdd-workflow/SKILL.md +462 -0
  371. package/skills/team-builder/SKILL.md +166 -0
  372. package/skills/terminal-ops/SKILL.md +108 -0
  373. package/skills/tinystruct-patterns/SKILL.md +130 -0
  374. package/skills/tinystruct-patterns/references/architecture.md +77 -0
  375. package/skills/tinystruct-patterns/references/data-handling.md +35 -0
  376. package/skills/tinystruct-patterns/references/routing.md +57 -0
  377. package/skills/tinystruct-patterns/references/system-usage.md +74 -0
  378. package/skills/tinystruct-patterns/references/testing.md +59 -0
  379. package/skills/token-budget-advisor/SKILL.md +133 -0
  380. package/skills/ui-demo/SKILL.md +464 -0
  381. package/skills/ui-to-vue/SKILL.md +134 -0
  382. package/skills/unified-notifications-ops/SKILL.md +186 -0
  383. package/skills/verification-loop/SKILL.md +125 -0
  384. package/skills/video-editing/SKILL.md +309 -0
  385. package/skills/videodb/SKILL.md +373 -0
  386. package/skills/videodb/reference/api-reference.md +550 -0
  387. package/skills/videodb/reference/capture-reference.md +407 -0
  388. package/skills/videodb/reference/capture.md +101 -0
  389. package/skills/videodb/reference/editor.md +443 -0
  390. package/skills/videodb/reference/generative.md +331 -0
  391. package/skills/videodb/reference/rtstream-reference.md +564 -0
  392. package/skills/videodb/reference/rtstream.md +65 -0
  393. package/skills/videodb/reference/search.md +230 -0
  394. package/skills/videodb/reference/streaming.md +406 -0
  395. package/skills/videodb/reference/use-cases.md +118 -0
  396. package/skills/videodb/scripts/ws_listener.py +282 -0
  397. package/skills/visa-doc-translate/README.md +86 -0
  398. package/skills/visa-doc-translate/SKILL.md +117 -0
  399. package/skills/vite-patterns/SKILL.md +448 -0
  400. package/skills/windows-desktop-e2e/SKILL.md +787 -0
  401. package/skills/workspace-surface-audit/SKILL.md +124 -0
  402. package/skills/x-api/SKILL.md +233 -0
@@ -0,0 +1,466 @@
1
+ ---
2
+ name: quarkus-security
3
+ description: Quarkus Security best practices for authentication, authorization, JWT/OIDC, RBAC, input validation, CSRF, secrets management, and dependency security.
4
+ ---
5
+
6
+ # Quarkus Security Review
7
+
8
+ Best practices for securing Quarkus applications with authentication, authorization, and input validation.
9
+
10
+ ## When to Activate
11
+
12
+ - Adding authentication (JWT, OIDC, Basic Auth)
13
+ - Implementing authorization with @RolesAllowed or SecurityIdentity
14
+ - Validating user input (Bean Validation, custom validators)
15
+ - Configuring CORS or security headers
16
+ - Managing secrets (Vault, environment variables, config sources)
17
+ - Adding rate limiting or brute-force protection
18
+ - Scanning dependencies for CVEs
19
+ - Working with MicroProfile JWT or SmallRye JWT
20
+
21
+ ## Authentication
22
+
23
+ ### JWT Authentication
24
+
25
+ ```java
26
+ // Resource protected with JWT
27
+ @Path("/api/protected")
28
+ @Authenticated
29
+ public class ProtectedResource {
30
+
31
+ @Inject
32
+ JsonWebToken jwt;
33
+
34
+ @Inject
35
+ SecurityIdentity securityIdentity;
36
+
37
+ @GET
38
+ public Response getData() {
39
+ String username = jwt.getName();
40
+ Set<String> roles = jwt.getGroups();
41
+ return Response.ok(Map.of(
42
+ "username", username,
43
+ "roles", roles,
44
+ "principal", securityIdentity.getPrincipal().getName()
45
+ )).build();
46
+ }
47
+ }
48
+ ```
49
+
50
+ Configuration (application.properties):
51
+ ```properties
52
+ mp.jwt.verify.publickey.location=publicKey.pem
53
+ mp.jwt.verify.issuer=https://auth.example.com
54
+
55
+ # OIDC
56
+ quarkus.oidc.auth-server-url=https://auth.example.com/realms/myrealm
57
+ quarkus.oidc.client-id=backend-service
58
+ quarkus.oidc.credentials.secret=${OIDC_SECRET}
59
+ ```
60
+
61
+ ### Custom Authentication Filter
62
+
63
+ ```java
64
+ @Provider
65
+ @Priority(Priorities.AUTHENTICATION)
66
+ public class CustomAuthFilter implements ContainerRequestFilter {
67
+
68
+ @Inject
69
+ SecurityIdentity identity;
70
+
71
+ @Override
72
+ public void filter(ContainerRequestContext requestContext) {
73
+ String authHeader = requestContext.getHeaderString(HttpHeaders.AUTHORIZATION);
74
+
75
+ // Reject immediately if header is absent or malformed
76
+ if (authHeader == null || !authHeader.startsWith("Bearer ")) {
77
+ requestContext.abortWith(Response.status(Response.Status.UNAUTHORIZED).build());
78
+ return;
79
+ }
80
+
81
+ String token = authHeader.substring(7);
82
+ if (!validateToken(token)) {
83
+ requestContext.abortWith(Response.status(Response.Status.UNAUTHORIZED).build());
84
+ }
85
+ }
86
+
87
+ private boolean validateToken(String token) {
88
+ // Token validation logic
89
+ return true;
90
+ }
91
+ }
92
+ ```
93
+
94
+ ## Authorization
95
+
96
+ ### Role-Based Access Control
97
+
98
+ ```java
99
+ @Path("/api/admin")
100
+ @RolesAllowed("ADMIN")
101
+ public class AdminResource {
102
+
103
+ @GET
104
+ @Path("/users")
105
+ public List<UserDto> listUsers() {
106
+ return userService.findAll();
107
+ }
108
+
109
+ @DELETE
110
+ @Path("/users/{id}")
111
+ @RolesAllowed({"ADMIN", "SUPER_ADMIN"})
112
+ public Response deleteUser(@PathParam("id") Long id) {
113
+ userService.delete(id);
114
+ return Response.noContent().build();
115
+ }
116
+ }
117
+
118
+ @Path("/api/users")
119
+ public class UserResource {
120
+
121
+ @Inject
122
+ SecurityIdentity securityIdentity;
123
+
124
+ @GET
125
+ @Path("/{id}")
126
+ @RolesAllowed("USER")
127
+ public Response getUser(@PathParam("id") Long id) {
128
+ // Check ownership
129
+ if (!securityIdentity.hasRole("ADMIN") &&
130
+ !isOwner(id, securityIdentity.getPrincipal().getName())) {
131
+ return Response.status(Response.Status.FORBIDDEN).build();
132
+ }
133
+ return Response.ok(userService.findById(id)).build();
134
+ }
135
+
136
+ private boolean isOwner(Long userId, String username) {
137
+ return userService.isOwner(userId, username);
138
+ }
139
+ }
140
+ ```
141
+
142
+ ### Programmatic Security
143
+
144
+ ```java
145
+ @ApplicationScoped
146
+ public class SecurityService {
147
+
148
+ @Inject
149
+ SecurityIdentity securityIdentity;
150
+
151
+ public boolean canAccessResource(Long resourceId) {
152
+ if (securityIdentity.isAnonymous()) {
153
+ return false;
154
+ }
155
+
156
+ if (securityIdentity.hasRole("ADMIN")) {
157
+ return true;
158
+ }
159
+
160
+ String userId = securityIdentity.getPrincipal().getName();
161
+ return resourceRepository.isOwner(resourceId, userId);
162
+ }
163
+ }
164
+ ```
165
+
166
+ ## Input Validation
167
+
168
+ ### Bean Validation
169
+
170
+ ```java
171
+ // BAD: No validation
172
+ @POST
173
+ public Response createUser(UserDto dto) {
174
+ return Response.ok(userService.create(dto)).build();
175
+ }
176
+
177
+ // GOOD: Validated DTO
178
+ public record CreateUserDto(
179
+ @NotBlank @Size(max = 100) String name,
180
+ @NotBlank @Email String email,
181
+ @NotNull @Min(18) @Max(150) Integer age,
182
+ @Pattern(regexp = "^\\+?[1-9]\\d{1,14}$") String phone
183
+ ) {}
184
+
185
+ @POST
186
+ @Path("/users")
187
+ public Response createUser(@Valid CreateUserDto dto) {
188
+ User user = userService.create(dto);
189
+ return Response.status(Response.Status.CREATED).entity(user).build();
190
+ }
191
+ ```
192
+
193
+ ### Custom Validators
194
+
195
+ ```java
196
+ @Target({ElementType.FIELD, ElementType.PARAMETER})
197
+ @Retention(RetentionPolicy.RUNTIME)
198
+ @Constraint(validatedBy = UsernameValidator.class)
199
+ public @interface ValidUsername {
200
+ String message() default "Invalid username format";
201
+ Class<?>[] groups() default {};
202
+ Class<? extends Payload>[] payload() default {};
203
+ }
204
+
205
+ public class UsernameValidator implements ConstraintValidator<ValidUsername, String> {
206
+ @Override
207
+ public boolean isValid(String value, ConstraintValidatorContext context) {
208
+ if (value == null) return false;
209
+ return value.matches("^[a-zA-Z0-9_-]{3,20}$");
210
+ }
211
+ }
212
+
213
+ // Usage
214
+ public record CreateUserDto(
215
+ @ValidUsername String username,
216
+ @NotBlank @Email String email
217
+ ) {}
218
+ ```
219
+
220
+ ## SQL Injection Prevention
221
+
222
+ ### Panache Active Record (Safe by Default)
223
+
224
+ ```java
225
+ // GOOD: Parameterized queries with Panache
226
+ List<User> users = User.list("email = ?1 and active = ?2", email, true);
227
+
228
+ Optional<User> user = User.find("username", username).firstResultOptional();
229
+
230
+ // GOOD: Named parameters
231
+ List<User> users = User.list("email = :email and age > :minAge",
232
+ Parameters.with("email", email).and("minAge", 18));
233
+ ```
234
+
235
+ ### Native Queries (Use Parameters)
236
+
237
+ ```java
238
+ // BAD: String concatenation
239
+ @Query(value = "SELECT * FROM users WHERE name = '" + name + "'", nativeQuery = true)
240
+
241
+ // GOOD: Parameterized native query
242
+ @Entity
243
+ public class User extends PanacheEntity {
244
+ public static List<User> findByEmailNative(String email) {
245
+ return getEntityManager()
246
+ .createNativeQuery("SELECT * FROM users WHERE email = :email", User.class)
247
+ .setParameter("email", email)
248
+ .getResultList();
249
+ }
250
+ }
251
+ ```
252
+
253
+ ## Password Hashing
254
+
255
+ ```java
256
+ @ApplicationScoped
257
+ public class PasswordService {
258
+
259
+ public String hash(String plainPassword) {
260
+ return BcryptUtil.bcryptHash(plainPassword);
261
+ }
262
+
263
+ public boolean verify(String plainPassword, String hashedPassword) {
264
+ return BcryptUtil.matches(plainPassword, hashedPassword);
265
+ }
266
+ }
267
+
268
+ // In service
269
+ @ApplicationScoped
270
+ public class UserService {
271
+ @Inject
272
+ PasswordService passwordService;
273
+
274
+ @Transactional
275
+ public User register(CreateUserDto dto) {
276
+ String hashedPassword = passwordService.hash(dto.password());
277
+ User user = new User();
278
+ user.email = dto.email();
279
+ user.password = hashedPassword;
280
+ user.persist();
281
+ return user;
282
+ }
283
+
284
+ public boolean authenticate(String email, String password) {
285
+ return User.find("email", email)
286
+ .firstResultOptional()
287
+ .map(u -> passwordService.verify(password, u.password))
288
+ .orElse(false);
289
+ }
290
+ }
291
+ ```
292
+
293
+ ## CORS Configuration
294
+
295
+ ```properties
296
+ # application.properties
297
+ quarkus.http.cors=true
298
+ quarkus.http.cors.origins=https://app.example.com,https://admin.example.com
299
+ quarkus.http.cors.methods=GET,POST,PUT,DELETE
300
+ quarkus.http.cors.headers=accept,authorization,content-type,x-requested-with
301
+ quarkus.http.cors.exposed-headers=Content-Disposition
302
+ quarkus.http.cors.access-control-max-age=24H
303
+ quarkus.http.cors.access-control-allow-credentials=true
304
+ ```
305
+
306
+ ## Secrets Management
307
+
308
+ ```properties
309
+ # application.properties - NO SECRETS HERE
310
+
311
+ # Use environment variables
312
+ quarkus.datasource.username=${DB_USER}
313
+ quarkus.datasource.password=${DB_PASSWORD}
314
+ quarkus.oidc.credentials.secret=${OIDC_CLIENT_SECRET}
315
+
316
+ # Or use Vault
317
+ quarkus.vault.url=https://vault.example.com
318
+ quarkus.vault.authentication.kubernetes.role=my-role
319
+ ```
320
+
321
+ ### HashiCorp Vault Integration
322
+
323
+ ```java
324
+ @ApplicationScoped
325
+ public class SecretService {
326
+
327
+ @ConfigProperty(name = "api-key")
328
+ String apiKey; // Fetched from Vault
329
+
330
+ public String getSecret(String key) {
331
+ return ConfigProvider.getConfig().getValue(key, String.class);
332
+ }
333
+ }
334
+ ```
335
+
336
+ ## Rate Limiting
337
+
338
+ **Security Note**: Never use `X-Forwarded-For` directly — clients can spoof it.
339
+ Use the actual remote address from the servlet request, or an authenticated
340
+ identity (API key, JWT subject) when available.
341
+
342
+ ```java
343
+ @ApplicationScoped
344
+ public class RateLimitFilter implements ContainerRequestFilter {
345
+ private final Map<String, RateLimiter> limiters = new ConcurrentHashMap<>();
346
+
347
+ @Inject
348
+ HttpServletRequest servletRequest;
349
+
350
+ @Override
351
+ public void filter(ContainerRequestContext requestContext) {
352
+ String clientId = getClientIdentifier();
353
+ RateLimiter limiter = limiters.computeIfAbsent(clientId,
354
+ k -> RateLimiter.create(100.0)); // 100 requests per second
355
+
356
+ if (!limiter.tryAcquire()) {
357
+ requestContext.abortWith(
358
+ Response.status(429)
359
+ .entity(Map.of("error", "Too many requests"))
360
+ .build()
361
+ );
362
+ }
363
+ }
364
+
365
+ private String getClientIdentifier() {
366
+ // Use the container-provided remote address (not X-Forwarded-For).
367
+ // If behind a trusted proxy, configure quarkus.http.proxy.proxy-address-forwarding=true
368
+ // so getRemoteAddr() returns the real client IP.
369
+ return servletRequest.getRemoteAddr();
370
+ }
371
+ }
372
+ ```
373
+
374
+ ## Security Headers
375
+
376
+ ```java
377
+ @Provider
378
+ public class SecurityHeadersFilter implements ContainerResponseFilter {
379
+
380
+ @Override
381
+ public void filter(ContainerRequestContext request, ContainerResponseContext response) {
382
+ MultivaluedMap<String, Object> headers = response.getHeaders();
383
+
384
+ // Prevent clickjacking
385
+ headers.putSingle("X-Frame-Options", "DENY");
386
+
387
+ // XSS protection
388
+ headers.putSingle("X-Content-Type-Options", "nosniff");
389
+ headers.putSingle("X-XSS-Protection", "1; mode=block");
390
+
391
+ // HSTS
392
+ headers.putSingle("Strict-Transport-Security", "max-age=31536000; includeSubDomains");
393
+
394
+ // CSP — avoid 'unsafe-inline' for script-src as it negates XSS protection;
395
+ // use nonces or hashes instead. 'unsafe-inline' for style-src is acceptable
396
+ // when CSS frameworks require it, but prefer nonces where possible.
397
+ headers.putSingle("Content-Security-Policy",
398
+ "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'");
399
+ }
400
+ }
401
+ ```
402
+
403
+ ## Audit Logging
404
+
405
+ ```java
406
+ @ApplicationScoped
407
+ public class AuditService {
408
+ private static final Logger LOG = Logger.getLogger(AuditService.class);
409
+
410
+ @Inject
411
+ SecurityIdentity securityIdentity;
412
+
413
+ public void logAccess(String resource, String action) {
414
+ String user = securityIdentity.isAnonymous()
415
+ ? "anonymous"
416
+ : securityIdentity.getPrincipal().getName();
417
+
418
+ LOG.infof("AUDIT: user=%s action=%s resource=%s timestamp=%s",
419
+ user, action, resource, Instant.now());
420
+ }
421
+ }
422
+
423
+ // Usage in resource
424
+ @Path("/api/sensitive")
425
+ public class SensitiveResource {
426
+ @Inject
427
+ AuditService auditService;
428
+
429
+ @GET
430
+ @RolesAllowed("ADMIN")
431
+ public Response getData() {
432
+ auditService.logAccess("sensitive-data", "READ");
433
+ return Response.ok(data).build();
434
+ }
435
+ }
436
+ ```
437
+
438
+ ## Dependency Security Scanning
439
+
440
+ ```bash
441
+ # Maven
442
+ mvn org.owasp:dependency-check-maven:check
443
+
444
+ # Gradle
445
+ ./gradlew dependencyCheckAnalyze
446
+
447
+ # Check Quarkus extensions
448
+ quarkus extension list --installable
449
+ ```
450
+
451
+ ## Best Practices
452
+
453
+ - Always use HTTPS in production
454
+ - Enable JWT or OIDC for stateless authentication
455
+ - Use `@RolesAllowed` for declarative authorization
456
+ - Validate all input with Bean Validation
457
+ - Hash passwords with BCrypt (never plaintext)
458
+ - Store secrets in Vault or environment variables
459
+ - Use parameterized queries to prevent SQL injection
460
+ - Add security headers to all responses
461
+ - Implement rate limiting for public endpoints
462
+ - Audit sensitive operations
463
+ - Keep dependencies updated and scan for CVEs
464
+ - Use SecurityIdentity for programmatic checks
465
+ - Set appropriate CORS policies
466
+ - Test authentication and authorization paths