@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,721 @@
1
+ ---
2
+ name: quarkus-patterns
3
+ description: Quarkus 3.x LTS architecture patterns with Camel for messaging, RESTful API design, CDI services, data access with Panache, and async processing. Use for Java Quarkus backend work with event-driven architectures.
4
+ ---
5
+
6
+ # Quarkus Development Patterns
7
+
8
+ Quarkus 3.x architecture and API patterns for cloud-native, event-driven services with Apache Camel.
9
+
10
+ ## When to Activate
11
+
12
+ - Building REST APIs with JAX-RS or RESTEasy Reactive
13
+ - Structuring resource → service → repository layers
14
+ - Implementing event-driven patterns with Apache Camel and RabbitMQ
15
+ - Configuring Hibernate Panache, caching, or reactive streams
16
+ - Adding validation, exception mapping, or pagination
17
+ - Setting up profiles for dev/staging/production environments (YAML config)
18
+ - Custom logging with LogContext and Logback/Logstash encoder
19
+ - Working with CompletableFuture for async operations
20
+ - Implementing conditional flow processing
21
+ - Working with GraalVM native compilation
22
+
23
+ ## Service Layer with Multiple Dependencies
24
+
25
+ ```java
26
+ @Slf4j
27
+ @ApplicationScoped
28
+ @RequiredArgsConstructor
29
+ public class OrderProcessingService {
30
+
31
+ private final OrderValidator orderValidator;
32
+ private final EventService eventService;
33
+ private final OrderRepository orderRepository;
34
+ private final FulfillmentPublisher fulfillmentPublisher;
35
+ private final AuditPublisher auditPublisher;
36
+
37
+ @Transactional
38
+ public OrderReceipt process(CreateOrderCommand command) {
39
+ ValidationResult validation = orderValidator.validate(command);
40
+ if (!validation.valid()) {
41
+ eventService.createErrorEvent(command, "ORDER_REJECTED", validation.message());
42
+ throw new WebApplicationException(validation.message(), Response.Status.BAD_REQUEST);
43
+ }
44
+
45
+ Order order = Order.from(command);
46
+ orderRepository.persist(order);
47
+
48
+ OrderReceipt receipt = OrderReceipt.from(order);
49
+ fulfillmentPublisher.publishAsync(receipt);
50
+ auditPublisher.publish("ORDER_ACCEPTED", receipt);
51
+ eventService.createSuccessEvent(receipt, "ORDER_ACCEPTED");
52
+
53
+ log.info("Processed order {}", order.id);
54
+ return receipt;
55
+ }
56
+ }
57
+ ```
58
+
59
+ **Key Patterns:**
60
+ - `@RequiredArgsConstructor` for constructor injection via Lombok
61
+ - `@Slf4j` for Logback logging
62
+ - `@Transactional` on service methods that write through Panache or repositories
63
+ - Validate input before persistence or message publication
64
+ - Event tracking for success/error scenarios
65
+ - Async Camel message publishing
66
+
67
+ ## Custom Logging Context Pattern (Logback)
68
+
69
+ ```java
70
+ @ApplicationScoped
71
+ public class ProcessingService {
72
+
73
+ public void processDocument(Document doc) {
74
+ LogContext logContext = CustomLog.getCurrentContext();
75
+ try (SafeAutoCloseable ignored = CustomLog.startScope(logContext)) {
76
+ // Add context to all log statements
77
+ logContext.put("documentId", doc.getId().toString());
78
+ logContext.put("documentType", doc.getType());
79
+ logContext.put("userId", SecurityContext.getUserId());
80
+
81
+ log.info("Starting document processing");
82
+
83
+ // All logs within this scope inherit the context
84
+ processInternal(doc);
85
+
86
+ log.info("Document processing completed");
87
+ } catch (Exception e) {
88
+ log.error("Document processing failed", e);
89
+ throw e;
90
+ }
91
+ }
92
+ }
93
+ ```
94
+
95
+ **Logback Configuration (logback.xml):**
96
+
97
+ ```xml
98
+ <configuration>
99
+ <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
100
+ <encoder class="net.logstash.logback.encoder.LogstashEncoder">
101
+ <includeContext>true</includeContext>
102
+ <includeMdc>true</includeMdc>
103
+ </encoder>
104
+ </appender>
105
+
106
+ <logger name="com.example" level="INFO"/>
107
+ <root level="WARN">
108
+ <appender-ref ref="CONSOLE"/>
109
+ </root>
110
+ </configuration>
111
+ ```
112
+
113
+ ## Event Service Pattern
114
+
115
+ ```java
116
+ @Slf4j
117
+ @ApplicationScoped
118
+ @RequiredArgsConstructor
119
+ public class EventService {
120
+ private final EventRepository eventRepository;
121
+ private final ObjectMapper objectMapper;
122
+
123
+ public void createSuccessEvent(Object payload, String eventType) {
124
+ Objects.requireNonNull(payload, "Payload cannot be null");
125
+ Event event = new Event();
126
+ event.setType(eventType);
127
+ event.setStatus(EventStatus.SUCCESS);
128
+ event.setPayload(serializePayload(payload));
129
+ event.setTimestamp(Instant.now());
130
+
131
+ eventRepository.persist(event);
132
+ log.info("Success event created: {}", eventType);
133
+ }
134
+
135
+ public void createErrorEvent(Object payload, String eventType, String errorMessage) {
136
+ Objects.requireNonNull(payload, "Payload cannot be null");
137
+ if (errorMessage == null || errorMessage.isBlank()) {
138
+ throw new IllegalArgumentException("Error message cannot be blank");
139
+ }
140
+ Event event = new Event();
141
+ event.setType(eventType);
142
+ event.setStatus(EventStatus.ERROR);
143
+ event.setErrorMessage(errorMessage);
144
+ event.setPayload(serializePayload(payload));
145
+ event.setTimestamp(Instant.now());
146
+
147
+ eventRepository.persist(event);
148
+ log.error("Error event created: {} - {}", eventType, errorMessage);
149
+ }
150
+
151
+ private String serializePayload(Object payload) {
152
+ try {
153
+ return objectMapper.writeValueAsString(payload);
154
+ } catch (JsonProcessingException e) {
155
+ throw new IllegalStateException("Failed to serialize event payload", e);
156
+ }
157
+ }
158
+ }
159
+ ```
160
+
161
+ ## Camel Message Publishing (RabbitMQ)
162
+
163
+ ```java
164
+ @Slf4j
165
+ @ApplicationScoped
166
+ @RequiredArgsConstructor
167
+ public class BusinessRulesPublisher {
168
+ private final ProducerTemplate producerTemplate;
169
+
170
+ public void publishSync(BusinessRulesPayload payload) {
171
+ producerTemplate.sendBody(
172
+ "direct:business-rules-publisher",
173
+ payload
174
+ );
175
+ }
176
+ }
177
+ ```
178
+
179
+ **Camel Route Configuration:**
180
+
181
+ ```java
182
+ @ApplicationScoped
183
+ public class BusinessRulesRoute extends RouteBuilder {
184
+
185
+ @ConfigProperty(name = "camel.rabbitmq.queue.business-rules")
186
+ String businessRulesQueue;
187
+
188
+ @ConfigProperty(name = "rabbitmq.host")
189
+ String rabbitHost;
190
+
191
+ @ConfigProperty(name = "rabbitmq.port")
192
+ Integer rabbitPort;
193
+
194
+ @Override
195
+ public void configure() {
196
+ from("direct:business-rules-publisher")
197
+ .routeId("business-rules-publisher")
198
+ .log("Publishing message to RabbitMQ: ${body}")
199
+ .marshal().json(JsonLibrary.Jackson)
200
+ .toF("spring-rabbitmq:%s?hostname=%s&portNumber=%d",
201
+ businessRulesQueue, rabbitHost, rabbitPort);
202
+ }
203
+ }
204
+ ```
205
+
206
+ ## Camel Direct Routes (In-Memory)
207
+
208
+ ```java
209
+ @ApplicationScoped
210
+ public class DocumentProcessingRoute extends RouteBuilder {
211
+
212
+ @Override
213
+ public void configure() {
214
+ // Error handling
215
+ onException(ValidationException.class)
216
+ .handled(true)
217
+ .to("direct:validation-error-handler")
218
+ .log("Validation error: ${exception.message}");
219
+
220
+ // Main processing route
221
+ from("direct:process-document")
222
+ .routeId("document-processing")
223
+ .log("Processing document: ${header.documentId}")
224
+ .bean(DocumentValidator.class, "validate")
225
+ .bean(DocumentTransformer.class, "transform")
226
+ .choice()
227
+ .when(header("documentType").isEqualTo("INVOICE"))
228
+ .to("direct:process-invoice")
229
+ .when(header("documentType").isEqualTo("CREDIT_NOTE"))
230
+ .to("direct:process-credit-note")
231
+ .otherwise()
232
+ .to("direct:process-generic")
233
+ .end();
234
+
235
+ from("direct:validation-error-handler")
236
+ .bean(EventService.class, "createErrorEvent")
237
+ .log("Validation error handled");
238
+ }
239
+ }
240
+ ```
241
+
242
+ ## Camel File Processing
243
+
244
+ ```java
245
+ @ApplicationScoped
246
+ public class FileMonitoringRoute extends RouteBuilder {
247
+
248
+ @ConfigProperty(name = "file.input.directory")
249
+ String inputDirectory;
250
+
251
+ @ConfigProperty(name = "file.processed.directory")
252
+ String processedDirectory;
253
+
254
+ @ConfigProperty(name = "file.error.directory")
255
+ String errorDirectory;
256
+
257
+ @Override
258
+ public void configure() {
259
+ from("file:" + inputDirectory + "?move=" + processedDirectory +
260
+ "&moveFailed=" + errorDirectory + "&delay=5000")
261
+ .routeId("file-monitor")
262
+ .log("Processing file: ${header.CamelFileName}")
263
+ .to("direct:process-file");
264
+
265
+ from("direct:process-file")
266
+ .bean(OrderProcessingService.class, "processFile")
267
+ .log("File processing completed");
268
+ }
269
+ }
270
+ ```
271
+
272
+ ## Camel Bean Invocation
273
+
274
+ ```java
275
+ @ApplicationScoped
276
+ public class InvoiceRoute extends RouteBuilder {
277
+
278
+ @Override
279
+ public void configure() {
280
+ from("direct:invoice-validation")
281
+ .bean(InvoiceFlowValidator.class, "validateFlowWithConfig")
282
+ .log("Validation result: ${body}");
283
+
284
+ from("direct:persist-and-publish")
285
+ .bean(DocumentJobService.class, "createDocumentAndJobEntities")
286
+ .bean(BusinessRulesPublisher.class, "publishAsync")
287
+ .bean(EventService.class, "createSuccessEvent(${body}, 'PUBLISHED')");
288
+ }
289
+ }
290
+ ```
291
+
292
+ ## REST API Structure
293
+
294
+ ```java
295
+ @Path("/api/documents")
296
+ @Produces(MediaType.APPLICATION_JSON)
297
+ @Consumes(MediaType.APPLICATION_JSON)
298
+ @RequiredArgsConstructor
299
+ public class DocumentResource {
300
+ private final DocumentService documentService;
301
+
302
+ @GET
303
+ public Response list(
304
+ @QueryParam("page") @DefaultValue("0") int page,
305
+ @QueryParam("size") @DefaultValue("20") int size) {
306
+ List<Document> documents = documentService.list(page, size);
307
+ return Response.ok(documents).build();
308
+ }
309
+
310
+ @POST
311
+ public Response create(@Valid CreateDocumentRequest request, @Context UriInfo uriInfo) {
312
+ Document document = documentService.create(request);
313
+ URI location = uriInfo.getAbsolutePathBuilder()
314
+ .path(String.valueOf(document.id))
315
+ .build();
316
+ return Response.created(location).entity(DocumentResponse.from(document)).build();
317
+ }
318
+
319
+ @GET
320
+ @Path("/{id}")
321
+ public Response getById(@PathParam("id") Long id) {
322
+ return documentService.findById(id)
323
+ .map(DocumentResponse::from)
324
+ .map(Response::ok)
325
+ .orElse(Response.status(Response.Status.NOT_FOUND))
326
+ .build();
327
+ }
328
+ }
329
+ ```
330
+
331
+ ## Repository Pattern (Panache Repository)
332
+
333
+ ```java
334
+ @ApplicationScoped
335
+ public class DocumentRepository implements PanacheRepository<Document> {
336
+
337
+ public List<Document> findByStatus(DocumentStatus status, int page, int size) {
338
+ return find("status = ?1 order by createdAt desc", status)
339
+ .page(page, size)
340
+ .list();
341
+ }
342
+
343
+ public Optional<Document> findByReferenceNumber(String referenceNumber) {
344
+ return find("referenceNumber", referenceNumber).firstResultOptional();
345
+ }
346
+
347
+ public long countByStatusAndDate(DocumentStatus status, LocalDate date) {
348
+ return count("status = ?1 and createdAt >= ?2", status, date.atStartOfDay());
349
+ }
350
+ }
351
+ ```
352
+
353
+ ## Service Layer with Transactions
354
+
355
+ ```java
356
+ @ApplicationScoped
357
+ @RequiredArgsConstructor
358
+ public class DocumentService {
359
+ private final DocumentRepository repo;
360
+ private final EventService eventService;
361
+
362
+ @Transactional
363
+ public Document create(CreateDocumentRequest request) {
364
+ Document document = new Document();
365
+ document.setReferenceNumber(request.referenceNumber());
366
+ document.setDescription(request.description());
367
+ document.setStatus(DocumentStatus.PENDING);
368
+ document.setCreatedAt(Instant.now());
369
+
370
+ repo.persist(document);
371
+
372
+ eventService.createSuccessEvent(document, "DOCUMENT_CREATED");
373
+
374
+ return document;
375
+ }
376
+
377
+ public Optional<Document> findById(Long id) {
378
+ return repo.findByIdOptional(id);
379
+ }
380
+
381
+ public List<Document> list(int page, int size) {
382
+ return repo.findAll()
383
+ .page(page, size)
384
+ .list();
385
+ }
386
+ }
387
+ ```
388
+
389
+ ## DTOs and Validation
390
+
391
+ ```java
392
+ public record CreateDocumentRequest(
393
+ @NotBlank @Size(max = 200) String referenceNumber,
394
+ @NotBlank @Size(max = 2000) String description,
395
+ @NotNull @FutureOrPresent Instant validUntil,
396
+ @NotEmpty List<@NotBlank String> categories) {}
397
+
398
+ public record DocumentResponse(Long id, String referenceNumber, DocumentStatus status) {
399
+ public static DocumentResponse from(Document document) {
400
+ return new DocumentResponse(document.getId(), document.getReferenceNumber(),
401
+ document.getStatus());
402
+ }
403
+ }
404
+ ```
405
+
406
+ ## Exception Mapping
407
+
408
+ ```java
409
+ @Provider
410
+ public class ValidationExceptionMapper implements ExceptionMapper<ConstraintViolationException> {
411
+ @Override
412
+ public Response toResponse(ConstraintViolationException exception) {
413
+ String message = exception.getConstraintViolations().stream()
414
+ .map(cv -> cv.getPropertyPath() + ": " + cv.getMessage())
415
+ .collect(Collectors.joining(", "));
416
+
417
+ return Response.status(Response.Status.BAD_REQUEST)
418
+ .entity(Map.of("error", "validation_error", "message", message))
419
+ .build();
420
+ }
421
+ }
422
+
423
+ @Provider
424
+ @Slf4j
425
+ public class GenericExceptionMapper implements ExceptionMapper<Exception> {
426
+
427
+ @Override
428
+ public Response toResponse(Exception exception) {
429
+ log.error("Unhandled exception", exception);
430
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
431
+ .entity(Map.of("error", "internal_error", "message", "An unexpected error occurred"))
432
+ .build();
433
+ }
434
+ }
435
+ ```
436
+
437
+ ## CompletableFuture Async Operations
438
+
439
+ ```java
440
+ @Slf4j
441
+ @ApplicationScoped
442
+ @RequiredArgsConstructor
443
+ public class FileStorageService {
444
+ private final S3Client s3Client;
445
+ private final ExecutorService executorService;
446
+
447
+ @ConfigProperty(name = "storage.bucket-name")
448
+ String bucketName;
449
+
450
+ public CompletableFuture<StoredDocumentInfo> uploadOriginalFile(
451
+ InputStream inputStream,
452
+ long size,
453
+ LogContext logContext,
454
+ InvoiceFormat format) {
455
+
456
+ return CompletableFuture.supplyAsync(() -> {
457
+ try (SafeAutoCloseable ignored = CustomLog.startScope(logContext)) {
458
+ String path = generateStoragePath(format);
459
+
460
+ PutObjectRequest request = PutObjectRequest.builder()
461
+ .bucket(bucketName)
462
+ .key(path)
463
+ .contentLength(size)
464
+ .build();
465
+
466
+ s3Client.putObject(request, RequestBody.fromInputStream(inputStream, size));
467
+
468
+ log.info("File uploaded to S3: {}", path);
469
+
470
+ return new StoredDocumentInfo(path, size, Instant.now());
471
+ } catch (Exception e) {
472
+ log.error("Failed to upload file to S3", e);
473
+ throw new StorageException("Upload failed", e);
474
+ }
475
+ }, executorService);
476
+ }
477
+ }
478
+ ```
479
+
480
+ ## Caching
481
+
482
+ ```java
483
+ @ApplicationScoped
484
+ @RequiredArgsConstructor
485
+ public class DocumentCacheService {
486
+ private final DocumentRepository repo;
487
+
488
+ @CacheResult(cacheName = "document-cache")
489
+ public Optional<Document> getById(@CacheKey Long id) {
490
+ return repo.findByIdOptional(id);
491
+ }
492
+
493
+ @CacheInvalidate(cacheName = "document-cache")
494
+ public void evict(@CacheKey Long id) {}
495
+
496
+ @CacheInvalidateAll(cacheName = "document-cache")
497
+ public void evictAll() {}
498
+ }
499
+ ```
500
+
501
+ ## Configuration as YAML
502
+
503
+ ```yaml
504
+ # application.yml
505
+ "%dev":
506
+ quarkus:
507
+ datasource:
508
+ jdbc:
509
+ url: jdbc:postgresql://localhost:5432/dev_db
510
+ username: dev_user
511
+ password: ${DB_PASSWORD}
512
+ hibernate-orm:
513
+ database:
514
+ generation: drop-and-create
515
+
516
+ rabbitmq:
517
+ host: localhost
518
+ port: 5672
519
+ username: ${RABBITMQ_USER}
520
+ password: ${RABBITMQ_PASSWORD}
521
+
522
+ "%test":
523
+ quarkus:
524
+ datasource:
525
+ jdbc:
526
+ url: jdbc:h2:mem:test
527
+ hibernate-orm:
528
+ database:
529
+ generation: drop-and-create
530
+
531
+ "%prod":
532
+ quarkus:
533
+ datasource:
534
+ jdbc:
535
+ url: ${DATABASE_URL}
536
+ username: ${DB_USER}
537
+ password: ${DB_PASSWORD}
538
+ hibernate-orm:
539
+ database:
540
+ generation: validate
541
+
542
+ rabbitmq:
543
+ host: ${RABBITMQ_HOST}
544
+ port: ${RABBITMQ_PORT}
545
+ username: ${RABBITMQ_USER}
546
+ password: ${RABBITMQ_PASSWORD}
547
+
548
+ # Camel configuration
549
+ camel:
550
+ rabbitmq:
551
+ queue:
552
+ business-rules: business-rules-queue
553
+ invoice-processing: invoice-processing-queue
554
+ ```
555
+
556
+ ## Health Checks
557
+
558
+ ```java
559
+ @Readiness
560
+ @ApplicationScoped
561
+ @RequiredArgsConstructor
562
+ public class DatabaseHealthCheck implements HealthCheck {
563
+ private final AgroalDataSource dataSource;
564
+
565
+ @Override
566
+ public HealthCheckResponse call() {
567
+ try (Connection conn = dataSource.getConnection()) {
568
+ boolean valid = conn.isValid(2);
569
+ return HealthCheckResponse.named("Database connection")
570
+ .status(valid)
571
+ .build();
572
+ } catch (SQLException e) {
573
+ return HealthCheckResponse.down("Database connection");
574
+ }
575
+ }
576
+ }
577
+
578
+ @Liveness
579
+ @ApplicationScoped
580
+ public class CamelHealthCheck implements HealthCheck {
581
+ @Inject
582
+ CamelContext camelContext;
583
+
584
+ @Override
585
+ public HealthCheckResponse call() {
586
+ boolean isStarted = camelContext.getStatus().isStarted();
587
+ return HealthCheckResponse.named("Camel Context")
588
+ .status(isStarted)
589
+ .build();
590
+ }
591
+ }
592
+ ```
593
+
594
+ ## Dependencies (Maven)
595
+
596
+ ```xml
597
+ <properties>
598
+ <quarkus.platform.version>3.27.0</quarkus.platform.version>
599
+ <lombok.version>1.18.42</lombok.version>
600
+ <assertj-core.version>3.24.2</assertj-core.version>
601
+ <jacoco-maven-plugin.version>0.8.13</jacoco-maven-plugin.version>
602
+ <maven.compiler.release>17</maven.compiler.release>
603
+ </properties>
604
+
605
+ <dependencyManagement>
606
+ <dependencies>
607
+ <dependency>
608
+ <groupId>io.quarkus.platform</groupId>
609
+ <artifactId>quarkus-bom</artifactId>
610
+ <version>${quarkus.platform.version}</version>
611
+ <type>pom</type>
612
+ <scope>import</scope>
613
+ </dependency>
614
+ <dependency>
615
+ <groupId>io.quarkus.platform</groupId>
616
+ <artifactId>quarkus-camel-bom</artifactId>
617
+ <version>${quarkus.platform.version}</version>
618
+ <type>pom</type>
619
+ <scope>import</scope>
620
+ </dependency>
621
+ </dependencies>
622
+ </dependencyManagement>
623
+
624
+ <dependencies>
625
+ <!-- Quarkus Core -->
626
+ <dependency>
627
+ <groupId>io.quarkus</groupId>
628
+ <artifactId>quarkus-arc</artifactId>
629
+ </dependency>
630
+ <dependency>
631
+ <groupId>io.quarkus</groupId>
632
+ <artifactId>quarkus-config-yaml</artifactId>
633
+ </dependency>
634
+
635
+ <!-- Camel Extensions -->
636
+ <dependency>
637
+ <groupId>org.apache.camel.quarkus</groupId>
638
+ <artifactId>camel-quarkus-spring-rabbitmq</artifactId>
639
+ </dependency>
640
+ <dependency>
641
+ <groupId>org.apache.camel.quarkus</groupId>
642
+ <artifactId>camel-quarkus-direct</artifactId>
643
+ </dependency>
644
+ <dependency>
645
+ <groupId>org.apache.camel.quarkus</groupId>
646
+ <artifactId>camel-quarkus-bean</artifactId>
647
+ </dependency>
648
+
649
+ <!-- Lombok -->
650
+ <dependency>
651
+ <groupId>org.projectlombok</groupId>
652
+ <artifactId>lombok</artifactId>
653
+ <version>${lombok.version}</version>
654
+ <scope>provided</scope>
655
+ </dependency>
656
+
657
+ <!-- Logging -->
658
+ <dependency>
659
+ <groupId>io.quarkiverse.logging.logback</groupId>
660
+ <artifactId>quarkus-logging-logback</artifactId>
661
+ </dependency>
662
+ <dependency>
663
+ <groupId>net.logstash.logback</groupId>
664
+ <artifactId>logstash-logback-encoder</artifactId>
665
+ </dependency>
666
+ </dependencies>
667
+ ```
668
+
669
+ ## Best Practices
670
+
671
+ ### Architecture
672
+ - Use `@RequiredArgsConstructor` with Lombok for constructor injection
673
+ - Keep service layer thin; delegate complex logic to specialized classes
674
+ - Use Camel routes for message routing and integration patterns
675
+ - Prefer Panache Repository pattern for data access
676
+
677
+ ### Event-Driven
678
+ - Always track operations with EventService (success/error events)
679
+ - Use Camel `direct:` endpoints for in-memory routing
680
+ - Use `spring-rabbitmq` component for RabbitMQ integration
681
+ - Implement async publishing with `ProducerTemplate.asyncSendBody()`
682
+
683
+ ### Logging
684
+ - Use Logback with Logstash encoder for structured logging
685
+ - Propagate LogContext through service calls with `SafeAutoCloseable`
686
+ - Add contextual information to LogContext for request tracing
687
+ - Use `@Slf4j` instead of manual logger instantiation
688
+
689
+ ### Async Operations
690
+ - Use CompletableFuture for non-blocking I/O operations
691
+ - Call `.join()` when you need to wait for completion
692
+ - Handle exceptions from CompletableFuture properly
693
+ - Pass LogContext to async operations for tracing
694
+
695
+ ### Configuration
696
+ - Use YAML configuration (`quarkus-config-yaml`)
697
+ - Profile-aware configuration for dev/test/prod environments
698
+ - Externalize sensitive configuration to environment variables
699
+ - Use `@ConfigProperty` for type-safe config injection
700
+
701
+ ### Validation
702
+ - Validate at resource layer with `@Valid`
703
+ - Use Bean Validation annotations on DTOs
704
+ - Map exceptions to proper HTTP responses with `@Provider`
705
+
706
+ ### Transactions
707
+ - Use `@Transactional` on service methods that modify data
708
+ - Keep transactions short and focused
709
+ - Avoid calling async operations within transactions
710
+
711
+ ### Testing
712
+ - Use `camel-quarkus-junit5` for route testing
713
+ - Use AssertJ for assertions
714
+ - Mock all external dependencies
715
+ - Test conditional flow logic thoroughly
716
+
717
+ ### Quarkus-Specific
718
+ - Stay on latest LTS version (3.x)
719
+ - Use Quarkus dev mode for hot reload
720
+ - Add health checks for production readiness
721
+ - Test native compilation compatibility periodically