workspace-architect 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (354) hide show
  1. package/.env.example +1 -0
  2. package/.gitattributes +1 -0
  3. package/.github/workflows/manual-publish.yml +36 -0
  4. package/.github/workflows/sync-and-publish.yml +58 -0
  5. package/.release-it.json +20 -0
  6. package/CHANGELOG.md +43 -0
  7. package/README.md +62 -0
  8. package/assets/chatmodes/4.1-Beast.chatmode.md +152 -0
  9. package/assets/chatmodes/Thinking-Beast-Mode.chatmode.md +337 -0
  10. package/assets/chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md +644 -0
  11. package/assets/chatmodes/accessibility.chatmode.md +298 -0
  12. package/assets/chatmodes/address-comments.chatmode.md +59 -0
  13. package/assets/chatmodes/aem-frontend-specialist.chatmode.md +385 -0
  14. package/assets/chatmodes/api-architect.chatmode.md +40 -0
  15. package/assets/chatmodes/atlassian-requirements-to-jira.chatmode.md +444 -0
  16. package/assets/chatmodes/azure-logic-apps-expert.chatmode.md +100 -0
  17. package/assets/chatmodes/azure-principal-architect.chatmode.md +58 -0
  18. package/assets/chatmodes/azure-saas-architect.chatmode.md +118 -0
  19. package/assets/chatmodes/azure-verified-modules-bicep.chatmode.md +44 -0
  20. package/assets/chatmodes/azure-verified-modules-terraform.chatmode.md +58 -0
  21. package/assets/chatmodes/bicep-implement.chatmode.md +40 -0
  22. package/assets/chatmodes/bicep-plan.chatmode.md +112 -0
  23. package/assets/chatmodes/blueprint-mode-codex.chatmode.md +110 -0
  24. package/assets/chatmodes/blueprint-mode.chatmode.md +171 -0
  25. package/assets/chatmodes/clojure-interactive-programming.chatmode.md +174 -0
  26. package/assets/chatmodes/code-tour.chatmode.md +205 -0
  27. package/assets/chatmodes/critical-thinking.chatmode.md +23 -0
  28. package/assets/chatmodes/csharp-dotnet-janitor.chatmode.md +83 -0
  29. package/assets/chatmodes/csharp-mcp-expert.chatmode.md +69 -0
  30. package/assets/chatmodes/debug.chatmode.md +79 -0
  31. package/assets/chatmodes/declarative-agents-architect.chatmode.md +76 -0
  32. package/assets/chatmodes/demonstrate-understanding.chatmode.md +60 -0
  33. package/assets/chatmodes/dotnet-upgrade.chatmode.md +222 -0
  34. package/assets/chatmodes/drupal-expert.chatmode.md +687 -0
  35. package/assets/chatmodes/electron-angular-native.chatmode.md +285 -0
  36. package/assets/chatmodes/expert-cpp-software-engineer.chatmode.md +27 -0
  37. package/assets/chatmodes/expert-dotnet-software-engineer.chatmode.md +22 -0
  38. package/assets/chatmodes/expert-nextjs-developer.chatmode.md +477 -0
  39. package/assets/chatmodes/expert-react-frontend-engineer.chatmode.md +738 -0
  40. package/assets/chatmodes/gilfoyle.chatmode.md +66 -0
  41. package/assets/chatmodes/go-mcp-expert.chatmode.md +122 -0
  42. package/assets/chatmodes/gpt-5-beast-mode.chatmode.md +109 -0
  43. package/assets/chatmodes/hlbpa.chatmode.md +232 -0
  44. package/assets/chatmodes/implementation-plan.chatmode.md +159 -0
  45. package/assets/chatmodes/janitor.chatmode.md +89 -0
  46. package/assets/chatmodes/java-mcp-expert.chatmode.md +325 -0
  47. package/assets/chatmodes/kotlin-mcp-expert.chatmode.md +181 -0
  48. package/assets/chatmodes/kusto-assistant.chatmode.md +143 -0
  49. package/assets/chatmodes/laravel-expert-agent.chatmode.md +628 -0
  50. package/assets/chatmodes/mentor.chatmode.md +32 -0
  51. package/assets/chatmodes/meta-agentic-project-scaffold.chatmode.md +15 -0
  52. package/assets/chatmodes/microsoft-agent-framework-dotnet.chatmode.md +62 -0
  53. package/assets/chatmodes/microsoft-agent-framework-python.chatmode.md +62 -0
  54. package/assets/chatmodes/microsoft-study-mode.chatmode.md +32 -0
  55. package/assets/chatmodes/microsoft_learn_contributor.chatmode.md +388 -0
  56. package/assets/chatmodes/ms-sql-dba.chatmode.md +25 -0
  57. package/assets/chatmodes/php-mcp-expert.chatmode.md +498 -0
  58. package/assets/chatmodes/pimcore-expert.chatmode.md +869 -0
  59. package/assets/chatmodes/plan.chatmode.md +114 -0
  60. package/assets/chatmodes/planner.chatmode.md +14 -0
  61. package/assets/chatmodes/playwright-tester.chatmode.md +13 -0
  62. package/assets/chatmodes/postgresql-dba.chatmode.md +17 -0
  63. package/assets/chatmodes/power-bi-data-modeling-expert.chatmode.md +319 -0
  64. package/assets/chatmodes/power-bi-dax-expert.chatmode.md +334 -0
  65. package/assets/chatmodes/power-bi-performance-expert.chatmode.md +533 -0
  66. package/assets/chatmodes/power-bi-visualization-expert.chatmode.md +549 -0
  67. package/assets/chatmodes/power-platform-expert.chatmode.md +116 -0
  68. package/assets/chatmodes/power-platform-mcp-integration-expert.chatmode.md +149 -0
  69. package/assets/chatmodes/prd.chatmode.md +201 -0
  70. package/assets/chatmodes/principal-software-engineer.chatmode.md +41 -0
  71. package/assets/chatmodes/prompt-builder.chatmode.md +352 -0
  72. package/assets/chatmodes/prompt-engineer.chatmode.md +72 -0
  73. package/assets/chatmodes/python-mcp-expert.chatmode.md +99 -0
  74. package/assets/chatmodes/refine-issue.chatmode.md +34 -0
  75. package/assets/chatmodes/research-technical-spike.chatmode.md +169 -0
  76. package/assets/chatmodes/ruby-mcp-expert.chatmode.md +346 -0
  77. package/assets/chatmodes/rust-gpt-4.1-beast-mode.chatmode.md +197 -0
  78. package/assets/chatmodes/rust-mcp-expert.chatmode.md +465 -0
  79. package/assets/chatmodes/search-ai-optimization-expert.chatmode.md +227 -0
  80. package/assets/chatmodes/semantic-kernel-dotnet.chatmode.md +31 -0
  81. package/assets/chatmodes/semantic-kernel-python.chatmode.md +28 -0
  82. package/assets/chatmodes/shopify-expert.chatmode.md +681 -0
  83. package/assets/chatmodes/simple-app-idea-generator.chatmode.md +134 -0
  84. package/assets/chatmodes/software-engineer-agent-v1.chatmode.md +164 -0
  85. package/assets/chatmodes/specification.chatmode.md +127 -0
  86. package/assets/chatmodes/swift-mcp-expert.chatmode.md +240 -0
  87. package/assets/chatmodes/task-planner.chatmode.md +374 -0
  88. package/assets/chatmodes/task-researcher.chatmode.md +254 -0
  89. package/assets/chatmodes/tdd-green.chatmode.md +59 -0
  90. package/assets/chatmodes/tdd-red.chatmode.md +59 -0
  91. package/assets/chatmodes/tdd-refactor.chatmode.md +84 -0
  92. package/assets/chatmodes/tech-debt-remediation-plan.chatmode.md +49 -0
  93. package/assets/chatmodes/terraform-azure-implement.chatmode.md +104 -0
  94. package/assets/chatmodes/terraform-azure-planning.chatmode.md +157 -0
  95. package/assets/chatmodes/typescript-mcp-expert.chatmode.md +91 -0
  96. package/assets/chatmodes/voidbeast-gpt41enhanced.chatmode.md +230 -0
  97. package/assets/chatmodes/wg-code-alchemist.chatmode.md +61 -0
  98. package/assets/chatmodes/wg-code-sentinel.chatmode.md +55 -0
  99. package/assets/collections/ai-prompt-engineering.json +18 -0
  100. package/assets/collections/angular-development.json +7 -0
  101. package/assets/collections/azure-cloud-architect.json +29 -0
  102. package/assets/collections/cpp-development.json +6 -0
  103. package/assets/collections/database-administration.json +8 -0
  104. package/assets/collections/devops-sre.json +11 -0
  105. package/assets/collections/dotnet-development.json +22 -0
  106. package/assets/collections/general-productivity.json +9 -0
  107. package/assets/collections/go-development.json +7 -0
  108. package/assets/collections/java-spring-developer.json +26 -0
  109. package/assets/collections/learning-mentoring.json +10 -0
  110. package/assets/collections/legacy-migration.json +4 -0
  111. package/assets/collections/mcp-specialist.json +41 -0
  112. package/assets/collections/mobile-development.json +4 -0
  113. package/assets/collections/php-cms-development.json +11 -0
  114. package/assets/collections/power-platform-specialist.json +31 -0
  115. package/assets/collections/project-management.json +12 -0
  116. package/assets/collections/python-development.json +13 -0
  117. package/assets/collections/quality-assurance.json +13 -0
  118. package/assets/collections/ruby-development.json +9 -0
  119. package/assets/collections/rust-development.json +10 -0
  120. package/assets/collections/security-specialist.json +8 -0
  121. package/assets/collections/software-architect.json +25 -0
  122. package/assets/collections/technical-writing.json +9 -0
  123. package/assets/collections/web-frontend-development.json +14 -0
  124. package/assets/instructions/a11y.instructions.md +369 -0
  125. package/assets/instructions/ai-prompt-engineering-safety-best-practices.instructions.md +867 -0
  126. package/assets/instructions/angular.instructions.md +104 -0
  127. package/assets/instructions/ansible.instructions.md +88 -0
  128. package/assets/instructions/aspnet-rest-apis.instructions.md +110 -0
  129. package/assets/instructions/astro.instructions.md +182 -0
  130. package/assets/instructions/azure-devops-pipelines.instructions.md +185 -0
  131. package/assets/instructions/azure-functions-typescript.instructions.md +14 -0
  132. package/assets/instructions/azure-logic-apps-power-automate.instructions.md +1943 -0
  133. package/assets/instructions/azure-verified-modules-terraform.instructions.md +229 -0
  134. package/assets/instructions/bicep-code-best-practices.instructions.md +54 -0
  135. package/assets/instructions/blazor.instructions.md +77 -0
  136. package/assets/instructions/clojure.instructions.md +349 -0
  137. package/assets/instructions/cmake-vcpkg.instructions.md +10 -0
  138. package/assets/instructions/codexer.instructions.md +428 -0
  139. package/assets/instructions/coldfusion-cfc.instructions.md +30 -0
  140. package/assets/instructions/coldfusion-cfm.instructions.md +28 -0
  141. package/assets/instructions/collections.instructions.md +54 -0
  142. package/assets/instructions/containerization-docker-best-practices.instructions.md +681 -0
  143. package/assets/instructions/convert-jpa-to-spring-data-cosmos.instructions.md +949 -0
  144. package/assets/instructions/copilot-thought-logging.instructions.md +62 -0
  145. package/assets/instructions/csharp-ja.instructions.md +114 -0
  146. package/assets/instructions/csharp-ko.instructions.md +77 -0
  147. package/assets/instructions/csharp-mcp-server.instructions.md +95 -0
  148. package/assets/instructions/csharp.instructions.md +114 -0
  149. package/assets/instructions/dart-n-flutter.instructions.md +447 -0
  150. package/assets/instructions/declarative-agents-microsoft365.instructions.md +316 -0
  151. package/assets/instructions/devbox-image-definition.instructions.md +302 -0
  152. package/assets/instructions/devops-core-principles.instructions.md +167 -0
  153. package/assets/instructions/dotnet-architecture-good-practices.instructions.md +279 -0
  154. package/assets/instructions/dotnet-framework.instructions.md +113 -0
  155. package/assets/instructions/dotnet-maui-9-to-dotnet-maui-10-upgrade.instructions.md +1922 -0
  156. package/assets/instructions/dotnet-maui.instructions.md +69 -0
  157. package/assets/instructions/dotnet-upgrade.instructions.md +287 -0
  158. package/assets/instructions/dotnet-wpf.instructions.md +79 -0
  159. package/assets/instructions/genaiscript.instructions.md +21 -0
  160. package/assets/instructions/generate-modern-terraform-code-for-azure.instructions.md +82 -0
  161. package/assets/instructions/gilfoyle-code-review.instructions.md +114 -0
  162. package/assets/instructions/github-actions-ci-cd-best-practices.instructions.md +607 -0
  163. package/assets/instructions/go-mcp-server.instructions.md +346 -0
  164. package/assets/instructions/go.instructions.md +373 -0
  165. package/assets/instructions/instructions.instructions.md +256 -0
  166. package/assets/instructions/java-11-to-java-17-upgrade.instructions.md +793 -0
  167. package/assets/instructions/java-17-to-java-21-upgrade.instructions.md +464 -0
  168. package/assets/instructions/java-21-to-java-25-upgrade.instructions.md +311 -0
  169. package/assets/instructions/java-mcp-server.instructions.md +553 -0
  170. package/assets/instructions/java.instructions.md +81 -0
  171. package/assets/instructions/joyride-user-project.instructions.md +206 -0
  172. package/assets/instructions/joyride-workspace-automation.instructions.md +46 -0
  173. package/assets/instructions/kotlin-mcp-server.instructions.md +481 -0
  174. package/assets/instructions/kubernetes-deployment-best-practices.instructions.md +307 -0
  175. package/assets/instructions/langchain-python.instructions.md +229 -0
  176. package/assets/instructions/localization.instructions.md +39 -0
  177. package/assets/instructions/makefile.instructions.md +410 -0
  178. package/assets/instructions/markdown.instructions.md +52 -0
  179. package/assets/instructions/memory-bank.instructions.md +299 -0
  180. package/assets/instructions/mongo-dba.instructions.md +25 -0
  181. package/assets/instructions/ms-sql-dba.instructions.md +25 -0
  182. package/assets/instructions/nestjs.instructions.md +406 -0
  183. package/assets/instructions/nextjs-tailwind.instructions.md +72 -0
  184. package/assets/instructions/nextjs.instructions.md +143 -0
  185. package/assets/instructions/nodejs-javascript-vitest.instructions.md +30 -0
  186. package/assets/instructions/object-calisthenics.instructions.md +302 -0
  187. package/assets/instructions/oqtane.instructions.md +86 -0
  188. package/assets/instructions/performance-optimization.instructions.md +420 -0
  189. package/assets/instructions/php-mcp-server.instructions.md +809 -0
  190. package/assets/instructions/playwright-dotnet.instructions.md +101 -0
  191. package/assets/instructions/playwright-python.instructions.md +62 -0
  192. package/assets/instructions/playwright-typescript.instructions.md +86 -0
  193. package/assets/instructions/power-apps-canvas-yaml.instructions.md +827 -0
  194. package/assets/instructions/power-apps-code-apps.instructions.md +601 -0
  195. package/assets/instructions/power-bi-custom-visuals-development.instructions.md +810 -0
  196. package/assets/instructions/power-bi-data-modeling-best-practices.instructions.md +639 -0
  197. package/assets/instructions/power-bi-dax-best-practices.instructions.md +795 -0
  198. package/assets/instructions/power-bi-devops-alm-best-practices.instructions.md +623 -0
  199. package/assets/instructions/power-bi-report-design-best-practices.instructions.md +752 -0
  200. package/assets/instructions/power-bi-security-rls-best-practices.instructions.md +504 -0
  201. package/assets/instructions/power-platform-connector.instructions.md +430 -0
  202. package/assets/instructions/power-platform-mcp-development.instructions.md +88 -0
  203. package/assets/instructions/powershell-pester-5.instructions.md +197 -0
  204. package/assets/instructions/powershell.instructions.md +356 -0
  205. package/assets/instructions/prompt.instructions.md +73 -0
  206. package/assets/instructions/python-mcp-server.instructions.md +204 -0
  207. package/assets/instructions/python.instructions.md +56 -0
  208. package/assets/instructions/quarkus-mcp-server-sse.instructions.md +49 -0
  209. package/assets/instructions/quarkus.instructions.md +98 -0
  210. package/assets/instructions/r.instructions.md +116 -0
  211. package/assets/instructions/reactjs.instructions.md +162 -0
  212. package/assets/instructions/ruby-mcp-server.instructions.md +629 -0
  213. package/assets/instructions/ruby-on-rails.instructions.md +124 -0
  214. package/assets/instructions/rust-mcp-server.instructions.md +715 -0
  215. package/assets/instructions/rust.instructions.md +135 -0
  216. package/assets/instructions/security-and-owasp.instructions.md +51 -0
  217. package/assets/instructions/self-explanatory-code-commenting.instructions.md +162 -0
  218. package/assets/instructions/shell.instructions.md +132 -0
  219. package/assets/instructions/spec-driven-workflow-v1.instructions.md +323 -0
  220. package/assets/instructions/springboot.instructions.md +68 -0
  221. package/assets/instructions/sql-sp-generation.instructions.md +74 -0
  222. package/assets/instructions/svelte.instructions.md +161 -0
  223. package/assets/instructions/swift-mcp-server.instructions.md +498 -0
  224. package/assets/instructions/taming-copilot.instructions.md +40 -0
  225. package/assets/instructions/tanstack-start-shadcn-tailwind.instructions.md +212 -0
  226. package/assets/instructions/task-implementation.instructions.md +190 -0
  227. package/assets/instructions/tasksync.instructions.md +352 -0
  228. package/assets/instructions/terraform-azure.instructions.md +254 -0
  229. package/assets/instructions/terraform-sap-btp.instructions.md +195 -0
  230. package/assets/instructions/terraform.instructions.md +113 -0
  231. package/assets/instructions/typescript-5-es2022.instructions.md +114 -0
  232. package/assets/instructions/typescript-mcp-server.instructions.md +228 -0
  233. package/assets/instructions/update-code-from-shorthand.instructions.md +130 -0
  234. package/assets/instructions/vuejs3.instructions.md +153 -0
  235. package/assets/instructions/wordpress.instructions.md +186 -0
  236. package/assets/prompts/add-educational-comments.prompt.md +129 -0
  237. package/assets/prompts/ai-prompt-engineering-safety-review.prompt.md +230 -0
  238. package/assets/prompts/architecture-blueprint-generator.prompt.md +322 -0
  239. package/assets/prompts/aspnet-minimal-api-openapi.prompt.md +42 -0
  240. package/assets/prompts/az-cost-optimize.prompt.md +305 -0
  241. package/assets/prompts/azure-resource-health-diagnose.prompt.md +290 -0
  242. package/assets/prompts/boost-prompt.prompt.md +25 -0
  243. package/assets/prompts/breakdown-epic-arch.prompt.md +66 -0
  244. package/assets/prompts/breakdown-epic-pm.prompt.md +58 -0
  245. package/assets/prompts/breakdown-feature-implementation.prompt.md +128 -0
  246. package/assets/prompts/breakdown-feature-prd.prompt.md +61 -0
  247. package/assets/prompts/breakdown-plan.prompt.md +509 -0
  248. package/assets/prompts/breakdown-test.prompt.md +365 -0
  249. package/assets/prompts/code-exemplars-blueprint-generator.prompt.md +126 -0
  250. package/assets/prompts/comment-code-generate-a-tutorial.prompt.md +26 -0
  251. package/assets/prompts/containerize-aspnet-framework.prompt.md +455 -0
  252. package/assets/prompts/containerize-aspnetcore.prompt.md +393 -0
  253. package/assets/prompts/conventional-commit.prompt.md +73 -0
  254. package/assets/prompts/copilot-instructions-blueprint-generator.prompt.md +294 -0
  255. package/assets/prompts/cosmosdb-datamodeling.prompt.md +1045 -0
  256. package/assets/prompts/create-agentsmd.prompt.md +249 -0
  257. package/assets/prompts/create-architectural-decision-record.prompt.md +97 -0
  258. package/assets/prompts/create-github-action-workflow-specification.prompt.md +276 -0
  259. package/assets/prompts/create-github-issue-feature-from-specification.prompt.md +28 -0
  260. package/assets/prompts/create-github-issues-feature-from-implementation-plan.prompt.md +28 -0
  261. package/assets/prompts/create-github-issues-for-unmet-specification-requirements.prompt.md +35 -0
  262. package/assets/prompts/create-github-pull-request-from-specification.prompt.md +24 -0
  263. package/assets/prompts/create-implementation-plan.prompt.md +157 -0
  264. package/assets/prompts/create-llms.prompt.md +210 -0
  265. package/assets/prompts/create-oo-component-documentation.prompt.md +193 -0
  266. package/assets/prompts/create-readme.prompt.md +21 -0
  267. package/assets/prompts/create-specification.prompt.md +127 -0
  268. package/assets/prompts/create-spring-boot-java-project.prompt.md +163 -0
  269. package/assets/prompts/create-spring-boot-kotlin-project.prompt.md +147 -0
  270. package/assets/prompts/create-technical-spike.prompt.md +231 -0
  271. package/assets/prompts/csharp-async.prompt.md +50 -0
  272. package/assets/prompts/csharp-docs.prompt.md +63 -0
  273. package/assets/prompts/csharp-mcp-server-generator.prompt.md +59 -0
  274. package/assets/prompts/csharp-mstest.prompt.md +67 -0
  275. package/assets/prompts/csharp-nunit.prompt.md +72 -0
  276. package/assets/prompts/csharp-tunit.prompt.md +101 -0
  277. package/assets/prompts/csharp-xunit.prompt.md +69 -0
  278. package/assets/prompts/declarative-agents.prompt.md +93 -0
  279. package/assets/prompts/documentation-writer.prompt.md +46 -0
  280. package/assets/prompts/dotnet-best-practices.prompt.md +84 -0
  281. package/assets/prompts/dotnet-design-pattern-review.prompt.md +41 -0
  282. package/assets/prompts/dotnet-upgrade.prompt.md +116 -0
  283. package/assets/prompts/editorconfig.prompt.md +64 -0
  284. package/assets/prompts/ef-core.prompt.md +76 -0
  285. package/assets/prompts/finalize-agent-prompt.prompt.md +27 -0
  286. package/assets/prompts/first-ask.prompt.md +29 -0
  287. package/assets/prompts/folder-structure-blueprint-generator.prompt.md +405 -0
  288. package/assets/prompts/gen-specs-as-issues.prompt.md +165 -0
  289. package/assets/prompts/generate-custom-instructions-from-codebase.prompt.md +240 -0
  290. package/assets/prompts/git-flow-branch-creator.prompt.md +293 -0
  291. package/assets/prompts/github-copilot-starter.prompt.md +372 -0
  292. package/assets/prompts/go-mcp-server-generator.prompt.md +334 -0
  293. package/assets/prompts/java-docs.prompt.md +24 -0
  294. package/assets/prompts/java-junit.prompt.md +64 -0
  295. package/assets/prompts/java-mcp-server-generator.prompt.md +756 -0
  296. package/assets/prompts/java-refactoring-extract-method.prompt.md +105 -0
  297. package/assets/prompts/java-refactoring-remove-parameter.prompt.md +85 -0
  298. package/assets/prompts/java-springboot.prompt.md +66 -0
  299. package/assets/prompts/javascript-typescript-jest.prompt.md +44 -0
  300. package/assets/prompts/kotlin-mcp-server-generator.prompt.md +449 -0
  301. package/assets/prompts/kotlin-springboot.prompt.md +71 -0
  302. package/assets/prompts/mcp-copilot-studio-server-generator.prompt.md +118 -0
  303. package/assets/prompts/memory-merger.prompt.md +107 -0
  304. package/assets/prompts/mkdocs-translations.prompt.md +110 -0
  305. package/assets/prompts/model-recommendation.prompt.md +677 -0
  306. package/assets/prompts/multi-stage-dockerfile.prompt.md +47 -0
  307. package/assets/prompts/my-issues.prompt.md +9 -0
  308. package/assets/prompts/my-pull-requests.prompt.md +15 -0
  309. package/assets/prompts/next-intl-add-language.prompt.md +20 -0
  310. package/assets/prompts/php-mcp-server-generator.prompt.md +522 -0
  311. package/assets/prompts/playwright-automation-fill-in-form.prompt.md +30 -0
  312. package/assets/prompts/playwright-explore-website.prompt.md +19 -0
  313. package/assets/prompts/playwright-generate-test.prompt.md +19 -0
  314. package/assets/prompts/postgresql-code-review.prompt.md +214 -0
  315. package/assets/prompts/postgresql-optimization.prompt.md +406 -0
  316. package/assets/prompts/power-apps-code-app-scaffold.prompt.md +150 -0
  317. package/assets/prompts/power-bi-dax-optimization.prompt.md +175 -0
  318. package/assets/prompts/power-bi-model-design-review.prompt.md +405 -0
  319. package/assets/prompts/power-bi-performance-troubleshooting.prompt.md +384 -0
  320. package/assets/prompts/power-bi-report-design-consultation.prompt.md +353 -0
  321. package/assets/prompts/power-platform-mcp-connector-suite.prompt.md +156 -0
  322. package/assets/prompts/project-workflow-analysis-blueprint-generator.prompt.md +294 -0
  323. package/assets/prompts/prompt-builder.prompt.md +142 -0
  324. package/assets/prompts/pytest-coverage.prompt.md +28 -0
  325. package/assets/prompts/python-mcp-server-generator.prompt.md +105 -0
  326. package/assets/prompts/readme-blueprint-generator.prompt.md +79 -0
  327. package/assets/prompts/remember-interactive-programming.prompt.md +13 -0
  328. package/assets/prompts/remember.prompt.md +125 -0
  329. package/assets/prompts/repo-story-time.prompt.md +156 -0
  330. package/assets/prompts/review-and-refactor.prompt.md +15 -0
  331. package/assets/prompts/ruby-mcp-server-generator.prompt.md +660 -0
  332. package/assets/prompts/rust-mcp-server-generator.prompt.md +578 -0
  333. package/assets/prompts/shuffle-json-data.prompt.md +151 -0
  334. package/assets/prompts/sql-code-review.prompt.md +303 -0
  335. package/assets/prompts/sql-optimization.prompt.md +298 -0
  336. package/assets/prompts/suggest-awesome-github-copilot-agents.prompt.md +72 -0
  337. package/assets/prompts/suggest-awesome-github-copilot-chatmodes.prompt.md +71 -0
  338. package/assets/prompts/suggest-awesome-github-copilot-collections.prompt.md +149 -0
  339. package/assets/prompts/suggest-awesome-github-copilot-instructions.prompt.md +88 -0
  340. package/assets/prompts/suggest-awesome-github-copilot-prompts.prompt.md +71 -0
  341. package/assets/prompts/swift-mcp-server-generator.prompt.md +669 -0
  342. package/assets/prompts/technology-stack-blueprint-generator.prompt.md +242 -0
  343. package/assets/prompts/typescript-mcp-server-generator.prompt.md +90 -0
  344. package/assets/prompts/update-avm-modules-in-bicep.prompt.md +60 -0
  345. package/assets/prompts/update-implementation-plan.prompt.md +157 -0
  346. package/assets/prompts/update-llms.prompt.md +216 -0
  347. package/assets/prompts/update-markdown-file-index.prompt.md +76 -0
  348. package/assets/prompts/update-oo-component-documentation.prompt.md +162 -0
  349. package/assets/prompts/update-specification.prompt.md +127 -0
  350. package/assets/prompts/write-coding-standards-from-file.prompt.md +316 -0
  351. package/bin/cli.js +200 -0
  352. package/package.json +53 -0
  353. package/scripts/sync.js +99 -0
  354. package/verdaccio/config.yaml +202 -0
@@ -0,0 +1,553 @@
1
+ ---
2
+ description: 'Best practices and patterns for building Model Context Protocol (MCP) servers in Java using the official MCP Java SDK with reactive streams and Spring integration.'
3
+ applyTo: "**/*.java, **/pom.xml, **/build.gradle, **/build.gradle.kts"
4
+ ---
5
+
6
+ # Java MCP Server Development Guidelines
7
+
8
+ When building MCP servers in Java, follow these best practices and patterns using the official Java SDK.
9
+
10
+ ## Dependencies
11
+
12
+ Add the MCP Java SDK to your Maven project:
13
+
14
+ ```xml
15
+ <dependencies>
16
+ <dependency>
17
+ <groupId>io.modelcontextprotocol.sdk</groupId>
18
+ <artifactId>mcp</artifactId>
19
+ <version>0.14.1</version>
20
+ </dependency>
21
+ </dependencies>
22
+ ```
23
+
24
+ Or for Gradle:
25
+
26
+ ```kotlin
27
+ dependencies {
28
+ implementation("io.modelcontextprotocol.sdk:mcp:0.14.1")
29
+ }
30
+ ```
31
+
32
+ ## Server Setup
33
+
34
+ Create an MCP server using the builder pattern:
35
+
36
+ ```java
37
+ import io.mcp.server.McpServer;
38
+ import io.mcp.server.McpServerBuilder;
39
+ import io.mcp.server.transport.StdioServerTransport;
40
+
41
+ McpServer server = McpServerBuilder.builder()
42
+ .serverInfo("my-server", "1.0.0")
43
+ .capabilities(capabilities -> capabilities
44
+ .tools(true)
45
+ .resources(true)
46
+ .prompts(true))
47
+ .build();
48
+
49
+ // Start with stdio transport
50
+ StdioServerTransport transport = new StdioServerTransport();
51
+ server.start(transport).subscribe();
52
+ ```
53
+
54
+ ## Adding Tools
55
+
56
+ Register tool handlers with the server:
57
+
58
+ ```java
59
+ import io.mcp.server.tool.Tool;
60
+ import io.mcp.server.tool.ToolHandler;
61
+ import reactor.core.publisher.Mono;
62
+
63
+ // Define a tool
64
+ Tool searchTool = Tool.builder()
65
+ .name("search")
66
+ .description("Search for information")
67
+ .inputSchema(JsonSchema.object()
68
+ .property("query", JsonSchema.string()
69
+ .description("Search query")
70
+ .required(true))
71
+ .property("limit", JsonSchema.integer()
72
+ .description("Maximum results")
73
+ .defaultValue(10)))
74
+ .build();
75
+
76
+ // Register tool handler
77
+ server.addToolHandler("search", (arguments) -> {
78
+ String query = arguments.get("query").asText();
79
+ int limit = arguments.has("limit")
80
+ ? arguments.get("limit").asInt()
81
+ : 10;
82
+
83
+ // Perform search
84
+ List<String> results = performSearch(query, limit);
85
+
86
+ return Mono.just(ToolResponse.success()
87
+ .addTextContent("Found " + results.size() + " results")
88
+ .build());
89
+ });
90
+ ```
91
+
92
+ ## Adding Resources
93
+
94
+ Implement resource handlers for data access:
95
+
96
+ ```java
97
+ import io.mcp.server.resource.Resource;
98
+ import io.mcp.server.resource.ResourceHandler;
99
+
100
+ // Register resource list handler
101
+ server.addResourceListHandler(() -> {
102
+ List<Resource> resources = List.of(
103
+ Resource.builder()
104
+ .name("Data File")
105
+ .uri("resource://data/example.txt")
106
+ .description("Example data file")
107
+ .mimeType("text/plain")
108
+ .build()
109
+ );
110
+ return Mono.just(resources);
111
+ });
112
+
113
+ // Register resource read handler
114
+ server.addResourceReadHandler((uri) -> {
115
+ if (uri.equals("resource://data/example.txt")) {
116
+ String content = loadResourceContent(uri);
117
+ return Mono.just(ResourceContent.text(content, uri));
118
+ }
119
+ throw new ResourceNotFoundException(uri);
120
+ });
121
+
122
+ // Register resource subscribe handler
123
+ server.addResourceSubscribeHandler((uri) -> {
124
+ subscriptions.add(uri);
125
+ log.info("Client subscribed to {}", uri);
126
+ return Mono.empty();
127
+ });
128
+ ```
129
+
130
+ ## Adding Prompts
131
+
132
+ Implement prompt handlers for templated conversations:
133
+
134
+ ```java
135
+ import io.mcp.server.prompt.Prompt;
136
+ import io.mcp.server.prompt.PromptMessage;
137
+ import io.mcp.server.prompt.PromptArgument;
138
+
139
+ // Register prompt list handler
140
+ server.addPromptListHandler(() -> {
141
+ List<Prompt> prompts = List.of(
142
+ Prompt.builder()
143
+ .name("analyze")
144
+ .description("Analyze a topic")
145
+ .argument(PromptArgument.builder()
146
+ .name("topic")
147
+ .description("Topic to analyze")
148
+ .required(true)
149
+ .build())
150
+ .argument(PromptArgument.builder()
151
+ .name("depth")
152
+ .description("Analysis depth")
153
+ .required(false)
154
+ .build())
155
+ .build()
156
+ );
157
+ return Mono.just(prompts);
158
+ });
159
+
160
+ // Register prompt get handler
161
+ server.addPromptGetHandler((name, arguments) -> {
162
+ if (name.equals("analyze")) {
163
+ String topic = arguments.getOrDefault("topic", "general");
164
+ String depth = arguments.getOrDefault("depth", "basic");
165
+
166
+ List<PromptMessage> messages = List.of(
167
+ PromptMessage.user("Please analyze this topic: " + topic),
168
+ PromptMessage.assistant("I'll provide a " + depth + " analysis of " + topic)
169
+ );
170
+
171
+ return Mono.just(PromptResult.builder()
172
+ .description("Analysis of " + topic + " at " + depth + " level")
173
+ .messages(messages)
174
+ .build());
175
+ }
176
+ throw new PromptNotFoundException(name);
177
+ });
178
+ ```
179
+
180
+ ## Reactive Streams Pattern
181
+
182
+ The Java SDK uses Reactive Streams (Project Reactor) for asynchronous processing:
183
+
184
+ ```java
185
+ // Return Mono for single results
186
+ server.addToolHandler("process", (args) -> {
187
+ return Mono.fromCallable(() -> {
188
+ String result = expensiveOperation(args);
189
+ return ToolResponse.success()
190
+ .addTextContent(result)
191
+ .build();
192
+ }).subscribeOn(Schedulers.boundedElastic());
193
+ });
194
+
195
+ // Return Flux for streaming results
196
+ server.addResourceListHandler(() -> {
197
+ return Flux.fromIterable(getResources())
198
+ .map(r -> Resource.builder()
199
+ .uri(r.getUri())
200
+ .name(r.getName())
201
+ .build())
202
+ .collectList();
203
+ });
204
+ ```
205
+
206
+ ## Synchronous Facade
207
+
208
+ For blocking use cases, use the synchronous API:
209
+
210
+ ```java
211
+ import io.mcp.server.McpSyncServer;
212
+
213
+ McpSyncServer syncServer = server.toSyncServer();
214
+
215
+ // Blocking tool handler
216
+ syncServer.addToolHandler("greet", (args) -> {
217
+ String name = args.get("name").asText();
218
+ return ToolResponse.success()
219
+ .addTextContent("Hello, " + name + "!")
220
+ .build();
221
+ });
222
+ ```
223
+
224
+ ## Transport Configuration
225
+
226
+ ### Stdio Transport
227
+
228
+ For local subprocess communication:
229
+
230
+ ```java
231
+ import io.mcp.server.transport.StdioServerTransport;
232
+
233
+ StdioServerTransport transport = new StdioServerTransport();
234
+ server.start(transport).block();
235
+ ```
236
+
237
+ ### HTTP Transport (Servlet)
238
+
239
+ For HTTP-based servers:
240
+
241
+ ```java
242
+ import io.mcp.server.transport.ServletServerTransport;
243
+ import jakarta.servlet.http.HttpServlet;
244
+
245
+ public class McpServlet extends HttpServlet {
246
+ private final McpServer server;
247
+ private final ServletServerTransport transport;
248
+
249
+ public McpServlet() {
250
+ this.server = createMcpServer();
251
+ this.transport = new ServletServerTransport();
252
+ }
253
+
254
+ @Override
255
+ protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
256
+ transport.handleRequest(server, req, resp).block();
257
+ }
258
+ }
259
+ ```
260
+
261
+ ## Spring Boot Integration
262
+
263
+ Use the Spring Boot starter for seamless integration:
264
+
265
+ ```xml
266
+ <dependency>
267
+ <groupId>io.modelcontextprotocol.sdk</groupId>
268
+ <artifactId>mcp-spring-boot-starter</artifactId>
269
+ <version>0.14.1</version>
270
+ </dependency>
271
+ ```
272
+
273
+ Configure the server with Spring:
274
+
275
+ ```java
276
+ import org.springframework.context.annotation.Configuration;
277
+ import io.mcp.spring.McpServerConfigurer;
278
+
279
+ @Configuration
280
+ public class McpConfiguration {
281
+
282
+ @Bean
283
+ public McpServerConfigurer mcpServerConfigurer() {
284
+ return server -> server
285
+ .serverInfo("spring-server", "1.0.0")
286
+ .capabilities(cap -> cap
287
+ .tools(true)
288
+ .resources(true)
289
+ .prompts(true));
290
+ }
291
+ }
292
+ ```
293
+
294
+ Register handlers as Spring beans:
295
+
296
+ ```java
297
+ import org.springframework.stereotype.Component;
298
+ import io.mcp.spring.ToolHandler;
299
+
300
+ @Component
301
+ public class SearchToolHandler implements ToolHandler {
302
+
303
+ @Override
304
+ public String getName() {
305
+ return "search";
306
+ }
307
+
308
+ @Override
309
+ public Tool getTool() {
310
+ return Tool.builder()
311
+ .name("search")
312
+ .description("Search for information")
313
+ .inputSchema(JsonSchema.object()
314
+ .property("query", JsonSchema.string().required(true)))
315
+ .build();
316
+ }
317
+
318
+ @Override
319
+ public Mono<ToolResponse> handle(JsonNode arguments) {
320
+ String query = arguments.get("query").asText();
321
+ return Mono.just(ToolResponse.success()
322
+ .addTextContent("Search results for: " + query)
323
+ .build());
324
+ }
325
+ }
326
+ ```
327
+
328
+ ## Error Handling
329
+
330
+ Use proper error handling with MCP exceptions:
331
+
332
+ ```java
333
+ server.addToolHandler("risky", (args) -> {
334
+ return Mono.fromCallable(() -> {
335
+ try {
336
+ String result = riskyOperation(args);
337
+ return ToolResponse.success()
338
+ .addTextContent(result)
339
+ .build();
340
+ } catch (ValidationException e) {
341
+ return ToolResponse.error()
342
+ .message("Invalid input: " + e.getMessage())
343
+ .build();
344
+ } catch (Exception e) {
345
+ log.error("Unexpected error", e);
346
+ return ToolResponse.error()
347
+ .message("Internal error occurred")
348
+ .build();
349
+ }
350
+ });
351
+ });
352
+ ```
353
+
354
+ ## JSON Schema Construction
355
+
356
+ Use the fluent schema builder:
357
+
358
+ ```java
359
+ import io.mcp.json.JsonSchema;
360
+
361
+ JsonSchema schema = JsonSchema.object()
362
+ .property("name", JsonSchema.string()
363
+ .description("User's name")
364
+ .minLength(1)
365
+ .maxLength(100)
366
+ .required(true))
367
+ .property("age", JsonSchema.integer()
368
+ .description("User's age")
369
+ .minimum(0)
370
+ .maximum(150))
371
+ .property("email", JsonSchema.string()
372
+ .description("Email address")
373
+ .format("email")
374
+ .required(true))
375
+ .property("tags", JsonSchema.array()
376
+ .items(JsonSchema.string())
377
+ .uniqueItems(true))
378
+ .additionalProperties(false)
379
+ .build();
380
+ ```
381
+
382
+ ## Logging and Observability
383
+
384
+ Use SLF4J for logging:
385
+
386
+ ```java
387
+ import org.slf4j.Logger;
388
+ import org.slf4j.LoggerFactory;
389
+
390
+ private static final Logger log = LoggerFactory.getLogger(MyMcpServer.class);
391
+
392
+ server.addToolHandler("process", (args) -> {
393
+ log.info("Tool called: process, args: {}", args);
394
+
395
+ return Mono.fromCallable(() -> {
396
+ String result = process(args);
397
+ log.debug("Processing completed successfully");
398
+ return ToolResponse.success()
399
+ .addTextContent(result)
400
+ .build();
401
+ }).doOnError(error -> {
402
+ log.error("Processing failed", error);
403
+ });
404
+ });
405
+ ```
406
+
407
+ Propagate context with Reactor:
408
+
409
+ ```java
410
+ import reactor.util.context.Context;
411
+
412
+ server.addToolHandler("traced", (args) -> {
413
+ return Mono.deferContextual(ctx -> {
414
+ String traceId = ctx.get("traceId");
415
+ log.info("Processing with traceId: {}", traceId);
416
+
417
+ return Mono.just(ToolResponse.success()
418
+ .addTextContent("Processed")
419
+ .build());
420
+ });
421
+ });
422
+ ```
423
+
424
+ ## Testing
425
+
426
+ Write tests using the synchronous API:
427
+
428
+ ```java
429
+ import org.junit.jupiter.api.Test;
430
+ import static org.assertj.core.Assertions.assertThat;
431
+
432
+ class McpServerTest {
433
+
434
+ @Test
435
+ void testToolHandler() {
436
+ McpServer server = createTestServer();
437
+ McpSyncServer syncServer = server.toSyncServer();
438
+
439
+ JsonNode args = objectMapper.createObjectNode()
440
+ .put("query", "test");
441
+
442
+ ToolResponse response = syncServer.callTool("search", args);
443
+
444
+ assertThat(response.isError()).isFalse();
445
+ assertThat(response.getContent()).hasSize(1);
446
+ }
447
+ }
448
+ ```
449
+
450
+ ## Jackson Integration
451
+
452
+ The SDK uses Jackson for JSON serialization. Customize as needed:
453
+
454
+ ```java
455
+ import com.fasterxml.jackson.databind.ObjectMapper;
456
+ import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
457
+
458
+ ObjectMapper mapper = new ObjectMapper();
459
+ mapper.registerModule(new JavaTimeModule());
460
+
461
+ // Use custom mapper with server
462
+ McpServer server = McpServerBuilder.builder()
463
+ .objectMapper(mapper)
464
+ .build();
465
+ ```
466
+
467
+ ## Content Types
468
+
469
+ Support multiple content types in responses:
470
+
471
+ ```java
472
+ import io.mcp.server.content.Content;
473
+
474
+ server.addToolHandler("multi", (args) -> {
475
+ return Mono.just(ToolResponse.success()
476
+ .addTextContent("Plain text response")
477
+ .addImageContent(imageBytes, "image/png")
478
+ .addResourceContent("resource://data", "application/json", jsonData)
479
+ .build());
480
+ });
481
+ ```
482
+
483
+ ## Server Lifecycle
484
+
485
+ Properly manage server lifecycle:
486
+
487
+ ```java
488
+ import reactor.core.Disposable;
489
+
490
+ Disposable serverDisposable = server.start(transport).subscribe();
491
+
492
+ // Graceful shutdown
493
+ Runtime.getRuntime().addShutdownHook(new Thread(() -> {
494
+ log.info("Shutting down MCP server");
495
+ serverDisposable.dispose();
496
+ server.stop().block();
497
+ }));
498
+ ```
499
+
500
+ ## Common Patterns
501
+
502
+ ### Request Validation
503
+
504
+ ```java
505
+ server.addToolHandler("validate", (args) -> {
506
+ if (!args.has("required_field")) {
507
+ return Mono.just(ToolResponse.error()
508
+ .message("Missing required_field")
509
+ .build());
510
+ }
511
+
512
+ return processRequest(args);
513
+ });
514
+ ```
515
+
516
+ ### Async Operations
517
+
518
+ ```java
519
+ server.addToolHandler("async", (args) -> {
520
+ return Mono.fromCallable(() -> callExternalApi(args))
521
+ .timeout(Duration.ofSeconds(30))
522
+ .onErrorResume(TimeoutException.class, e ->
523
+ Mono.just(ToolResponse.error()
524
+ .message("Operation timed out")
525
+ .build()))
526
+ .subscribeOn(Schedulers.boundedElastic());
527
+ });
528
+ ```
529
+
530
+ ### Resource Caching
531
+
532
+ ```java
533
+ private final Map<String, String> cache = new ConcurrentHashMap<>();
534
+
535
+ server.addResourceReadHandler((uri) -> {
536
+ return Mono.fromCallable(() ->
537
+ cache.computeIfAbsent(uri, this::loadResource))
538
+ .map(content -> ResourceContent.text(content, uri));
539
+ });
540
+ ```
541
+
542
+ ## Best Practices
543
+
544
+ 1. **Use Reactive Streams** for async operations and backpressure
545
+ 2. **Leverage Spring Boot** starter for enterprise applications
546
+ 3. **Implement proper error handling** with specific error messages
547
+ 4. **Use SLF4J** for logging, not System.out
548
+ 5. **Validate inputs** in tool and prompt handlers
549
+ 6. **Support graceful shutdown** with proper resource cleanup
550
+ 7. **Use bounded elastic scheduler** for blocking operations
551
+ 8. **Propagate context** for observability in reactive chains
552
+ 9. **Test with synchronous API** for simplicity
553
+ 10. **Follow Java naming conventions** (camelCase for methods, PascalCase for classes)
@@ -0,0 +1,81 @@
1
+ ---
2
+ description: 'Guidelines for building Java base applications'
3
+ applyTo: '**/*.java'
4
+ ---
5
+
6
+ # Java Development
7
+
8
+ ## General Instructions
9
+
10
+ - First, prompt the user if they want to integrate static analysis tools (SonarQube, PMD, Checkstyle) into their project setup.
11
+ - If yes, document a recommended static-analysis setup.
12
+ - Prefer SonarQube/SonarCloud (SonarLint in IDE + `sonar-scanner` in CI).
13
+ - Create a Sonar project key.
14
+ - Store the scanner token in CI secrets.
15
+ - Provide a sample CI job that runs the scanner.
16
+ - If the team declines Sonar, note this in the project README and continue.
17
+ - If Sonar is bound to the project:
18
+ - Use Sonar as the primary source of actionable issues.
19
+ - Reference Sonar rule keys in remediation guidance.
20
+ - If Sonar is unavailable:
21
+ - Perform up to 3 troubleshooting checks:
22
+ 1. Verify project binding and token.
23
+ 2. Ensure SonarScanner runs in CI.
24
+ 3. Confirm SonarLint is installed and configured.
25
+ - If still failing after 3 attempts:
26
+ - Enable SpotBugs, PMD, or Checkstyle as CI fallbacks.
27
+ - Open a short tracker issue documenting the blocker and next steps.
28
+ - If the user declines static analysis tools or wants to proceed without them, continue with implementing the Best practices, bug patterns and code smell prevention guidelines outlined below.
29
+ - Address code smells proactively during development rather than accumulating technical debt.
30
+ - Focus on readability, maintainability, and performance when refactoring identified issues.
31
+ - Use IDE / Code editor reported warnings and suggestions to catch common patterns early in development.
32
+
33
+ ## Best practices
34
+
35
+ - **Records**: For classes primarily intended to store data (e.g., DTOs, immutable data structures), **Java Records should be used instead of traditional classes**.
36
+ - **Pattern Matching**: Utilize pattern matching for `instanceof` and `switch` expression to simplify conditional logic and type casting.
37
+ - **Type Inference**: Use `var` for local variable declarations to improve readability, but only when the type is explicitly clear from the right-hand side of the expression.
38
+ - **Immutability**: Favor immutable objects. Make classes and fields `final` where possible. Use collections from `List.of()`/`Map.of()` for fixed data. Use `Stream.toList()` to create immutable lists.
39
+ - **Streams and Lambdas**: Use the Streams API and lambda expressions for collection processing. Employ method references (e.g., `stream.map(Foo::toBar)`).
40
+ - **Null Handling**: Avoid returning or accepting `null`. Use `Optional<T>` for possibly-absent values and `Objects` utility methods like `equals()` and `requireNonNull()`.
41
+
42
+ ### Naming Conventions
43
+
44
+ - Follow Google's Java style guide:
45
+ - `UpperCamelCase` for class and interface names.
46
+ - `lowerCamelCase` for method and variable names.
47
+ - `UPPER_SNAKE_CASE` for constants.
48
+ - `lowercase` for package names.
49
+ - Use nouns for classes (`UserService`) and verbs for methods (`getUserById`).
50
+ - Avoid abbreviations and Hungarian notation.
51
+
52
+ ### Common Bug Patterns
53
+
54
+ Below are concise, human-readable rules you can apply regardless of which static analysis tool you use. If you run Sonar/SonarLint, the IDE will show the matching rule and location — direct Sonar connections are preferred and should override this ruleset.
55
+
56
+ - Resource management — Always close resources (files, sockets, streams). Use try-with-resources where possible so resources are closed automatically.
57
+ - Equality checks — Compare object equality with `.equals()` or `Objects.equals(...)` rather than `==` for non-primitives; this avoids reference-equality bugs.
58
+ - Redundant casts — Remove unnecessary casts; prefer correct generic typing and let the compiler infer types where possible.
59
+ - Reachable conditions — Avoid conditional expressions that are always true or false; they indicate bugs or dead code and should be corrected.
60
+
61
+ For contributors who *do* use Sonar or SonarLint: the IDE/scan will show the specific rule key (for example, S2095 for resource leaks) and the affected file/line. Use that information to navigate to the exact location, then apply the recommended remediation.
62
+
63
+ ### Common Code Smells
64
+
65
+ These patterns are phrased for humans; they map cleanly to checks in Sonar, SpotBugs, PMD, or Checkstyle but do not require those tools to be useful.
66
+
67
+ - Parameter count — Keep method parameter lists short. If a method needs many params, consider grouping into a value object or using the builder pattern.
68
+ - Method size — Keep methods focused and small. Extract helper methods to improve readability and testability.
69
+ - Cognitive complexity — Reduce nested conditionals and heavy branching by extracting methods, using polymorphism, or applying the Strategy pattern.
70
+ - Duplicated literals — Extract repeated strings and numbers into named constants or enums to reduce errors and ease changes.
71
+ - Dead code — Remove unused variables and assignments. They confuse readers and can hide bugs.
72
+ - Magic numbers — Replace numeric literals with named constants that explain intent (e.g., MAX_RETRIES).
73
+
74
+ If you run a static analyzer like Sonar or SonarLint — direct Sonar connections are preferred and should override this ruleset. Sonar rule keys are useful for automation and suppression, but they are not required in day-to-day developer guidance.
75
+
76
+ ## Build and Verification
77
+
78
+ - After adding or modifying code, verify the project continues to build successfully.
79
+ - If the project uses Maven, run `mvn clean install`.
80
+ - If the project uses Gradle, run `./gradlew build` (or `gradlew.bat build` on Windows).
81
+ - Ensure all tests pass as part of the build.