ninja-mcp 1.0.3__tar.gz

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 (482) hide show
  1. ninja_mcp-1.0.3/.agent/ARCHITECT.md +281 -0
  2. ninja_mcp-1.0.3/.agent/CONFIG_ARCHITECTURE_DESIGN.md +775 -0
  3. ninja_mcp-1.0.3/.agent/CONFIG_MIGRATOR_IMPLEMENTATION.md +297 -0
  4. ninja_mcp-1.0.3/.agent/CONFIG_REFACTOR_ANALYSIS.md +434 -0
  5. ninja_mcp-1.0.3/.agent/CREDENTIALS_IMPLEMENTATION.md +369 -0
  6. ninja_mcp-1.0.3/.agent/DYNAMIC_MODEL_SELECTOR_IMPLEMENTATION.md +294 -0
  7. ninja_mcp-1.0.3/.agent/FILE_DETECTION_INVESTIGATION.md +384 -0
  8. ninja_mcp-1.0.3/.agent/MIGRATION_GUIDE.md +342 -0
  9. ninja_mcp-1.0.3/.agent/OH_MY_OPENCODE_ANALYSIS.md +577 -0
  10. ninja_mcp-1.0.3/.agent/REFACTORING_PROGRESS.md +317 -0
  11. ninja_mcp-1.0.3/.agent/ROADMAP.md +354 -0
  12. ninja_mcp-1.0.3/.agent/STATUS.md +416 -0
  13. ninja_mcp-1.0.3/.agent/TIMEOUT_BUGS_ANALYSIS.md +212 -0
  14. ninja_mcp-1.0.3/.agent/TIMEOUT_FIX_DEPLOYMENT.md +238 -0
  15. ninja_mcp-1.0.3/.claude/scheduled_tasks.lock +1 -0
  16. ninja_mcp-1.0.3/.claude/settings.local.json +17 -0
  17. ninja_mcp-1.0.3/.claude-plugin/marketplace.json +12 -0
  18. ninja_mcp-1.0.3/.claude-plugin/plugin.json +9 -0
  19. ninja_mcp-1.0.3/.dockerignore +27 -0
  20. ninja_mcp-1.0.3/.editorconfig +29 -0
  21. ninja_mcp-1.0.3/.github/FUNDING.yml +7 -0
  22. ninja_mcp-1.0.3/.github/ISSUE_TEMPLATE/bug_report.yaml +53 -0
  23. ninja_mcp-1.0.3/.github/ISSUE_TEMPLATE/config.yaml +12 -0
  24. ninja_mcp-1.0.3/.github/ISSUE_TEMPLATE/feature_request.yaml +33 -0
  25. ninja_mcp-1.0.3/.github/ISSUE_TEMPLATE/question.yaml +21 -0
  26. ninja_mcp-1.0.3/.github/PULL_REQUEST_TEMPLATE.md +28 -0
  27. ninja_mcp-1.0.3/.github/RELEASE_PROCESS.md +311 -0
  28. ninja_mcp-1.0.3/.github/workflows/ci.yml +168 -0
  29. ninja_mcp-1.0.3/.github/workflows/release.yml +276 -0
  30. ninja_mcp-1.0.3/.github/workflows/update-homebrew.yml +46 -0
  31. ninja_mcp-1.0.3/.gitignore +169 -0
  32. ninja_mcp-1.0.3/.gitlab-ci.yml +268 -0
  33. ninja_mcp-1.0.3/.mcp.json +19 -0
  34. ninja_mcp-1.0.3/.mcp.json.backup +22 -0
  35. ninja_mcp-1.0.3/.plans/2026-05-08_universal-plugin-and-secrets.md +102 -0
  36. ninja_mcp-1.0.3/.plans/TODO.md +63 -0
  37. ninja_mcp-1.0.3/BUILD_TEST_RESULTS.md +263 -0
  38. ninja_mcp-1.0.3/CHANGELOG.md +35 -0
  39. ninja_mcp-1.0.3/CLAUDE.md +125 -0
  40. ninja_mcp-1.0.3/CODE_OF_CONDUCT.md +71 -0
  41. ninja_mcp-1.0.3/CONTRIBUTING.md +220 -0
  42. ninja_mcp-1.0.3/DAEMON_STABILITY_FIX.md +233 -0
  43. ninja_mcp-1.0.3/Dockerfile +29 -0
  44. ninja_mcp-1.0.3/FULL_SYSTEM_FIX_REPORT.md +401 -0
  45. ninja_mcp-1.0.3/GEMINI_FIX_REPORT.md +298 -0
  46. ninja_mcp-1.0.3/GITHUB_SETUP_GUIDE.md +269 -0
  47. ninja_mcp-1.0.3/INSTALL_GUIDE.md +428 -0
  48. ninja_mcp-1.0.3/INTERACTIVE_MODEL_SELECTOR.md +331 -0
  49. ninja_mcp-1.0.3/INVESTIGATION_2026-01-26.md +523 -0
  50. ninja_mcp-1.0.3/LICENSE +21 -0
  51. ninja_mcp-1.0.3/MIGRATION.md +394 -0
  52. ninja_mcp-1.0.3/MODERNIZATION_SUMMARY.md +355 -0
  53. ninja_mcp-1.0.3/Makefile +101 -0
  54. ninja_mcp-1.0.3/NINJA_MCP_ROADMAP.md +377 -0
  55. ninja_mcp-1.0.3/OPENCODE_SETUP.md +210 -0
  56. ninja_mcp-1.0.3/PHASE1_IMPLEMENTATION_PLAN.md +604 -0
  57. ninja_mcp-1.0.3/PKG-INFO +339 -0
  58. ninja_mcp-1.0.3/PYTHON_SETUP.md +300 -0
  59. ninja_mcp-1.0.3/QUICKSTART.md +313 -0
  60. ninja_mcp-1.0.3/QUICK_START.md +159 -0
  61. ninja_mcp-1.0.3/README.md +243 -0
  62. ninja_mcp-1.0.3/RELEASE_NOTES_v0.4.0.md +100 -0
  63. ninja_mcp-1.0.3/RESEARCH_FINDINGS.md +421 -0
  64. ninja_mcp-1.0.3/SECURITY.md +42 -0
  65. ninja_mcp-1.0.3/SESSION_SUMMARY.md +252 -0
  66. ninja_mcp-1.0.3/SYSTEMATIC_FIX_SUMMARY.md +260 -0
  67. ninja_mcp-1.0.3/TIMEOUT_FIX_2026-02-08.md +221 -0
  68. ninja_mcp-1.0.3/TOOL_VERIFICATION_REPORT.md +136 -0
  69. ninja_mcp-1.0.3/agents/ninja-architect.md +67 -0
  70. ninja_mcp-1.0.3/agents/ninja-reviewer.md +90 -0
  71. ninja_mcp-1.0.3/claude-integration/README.md +126 -0
  72. ninja_mcp-1.0.3/claude-integration/hooks/hooks.json +43 -0
  73. ninja_mcp-1.0.3/claude-integration/scripts/opencode-ensure.sh +50 -0
  74. ninja_mcp-1.0.3/claude-integration/scripts/opencode-health.sh +24 -0
  75. ninja_mcp-1.0.3/claude-integration/scripts/opencode-task.sh +71 -0
  76. ninja_mcp-1.0.3/commands/code.md +43 -0
  77. ninja_mcp-1.0.3/commands/explore.md +68 -0
  78. ninja_mcp-1.0.3/commands/ninja-code.md +18 -0
  79. ninja_mcp-1.0.3/commands/ninja-research.md +17 -0
  80. ninja_mcp-1.0.3/commands/ninja-review.md +20 -0
  81. ninja_mcp-1.0.3/commands/research.md +49 -0
  82. ninja_mcp-1.0.3/config/mcp-modules.json +252 -0
  83. ninja_mcp-1.0.3/configs/example_plan.json +118 -0
  84. ninja_mcp-1.0.3/data/builtin_prompts/architect-review.yml +114 -0
  85. ninja_mcp-1.0.3/data/builtin_prompts/architecture-design.yml +49 -0
  86. ninja_mcp-1.0.3/data/builtin_prompts/bug-debugging.yml +46 -0
  87. ninja_mcp-1.0.3/data/builtin_prompts/code-review.yml +40 -0
  88. ninja_mcp-1.0.3/data/builtin_prompts/feature-implementation.yml +55 -0
  89. ninja_mcp-1.0.3/docker/entrypoint.sh +15 -0
  90. ninja_mcp-1.0.3/docker/healthcheck.sh +19 -0
  91. ninja_mcp-1.0.3/docker-compose.yml +115 -0
  92. ninja_mcp-1.0.3/docs/AUTOMATIC_SAFETY.md +109 -0
  93. ninja_mcp-1.0.3/docs/CLAUDE_CODE_2026_INTEGRATION.md +536 -0
  94. ninja_mcp-1.0.3/docs/CLAUDE_CONFIG_LOCATIONS.md +222 -0
  95. ninja_mcp-1.0.3/docs/CLI_STRATEGIES.md +83 -0
  96. ninja_mcp-1.0.3/docs/CONFIGURATION.md +301 -0
  97. ninja_mcp-1.0.3/docs/EDITOR_INTEGRATIONS.md +666 -0
  98. ninja_mcp-1.0.3/docs/INSTALLATION_MODES.md +253 -0
  99. ninja_mcp-1.0.3/docs/INSTALLER_GUIDE.md +332 -0
  100. ninja_mcp-1.0.3/docs/INTEGRATION_TEST_RESULTS.md +175 -0
  101. ninja_mcp-1.0.3/docs/MCP_ARCHITECTURE.md +552 -0
  102. ninja_mcp-1.0.3/docs/MODEL_SELECTION.md +93 -0
  103. ninja_mcp-1.0.3/docs/OPENCODE_INTEGRATION.md +44 -0
  104. ninja_mcp-1.0.3/docs/OPENCODE_INTEGRATION_PLAN.md +1710 -0
  105. ninja_mcp-1.0.3/docs/PACKAGING.md +282 -0
  106. ninja_mcp-1.0.3/docs/POWER_CONFIGURATOR.md +163 -0
  107. ninja_mcp-1.0.3/docs/PROMPTS_API.md +512 -0
  108. ninja_mcp-1.0.3/docs/RATE_BALANCER.md +394 -0
  109. ninja_mcp-1.0.3/docs/README.md +22 -0
  110. ninja_mcp-1.0.3/docs/RESEARCHER.md +501 -0
  111. ninja_mcp-1.0.3/docs/RESEARCHER_SPEC.md +709 -0
  112. ninja_mcp-1.0.3/docs/RESOURCES_API.md +342 -0
  113. ninja_mcp-1.0.3/docs/SAFE_USAGE.md +332 -0
  114. ninja_mcp-1.0.3/docs/SEQUENTIAL_EXECUTION_ANALYSIS.md +429 -0
  115. ninja_mcp-1.0.3/docs/TESTING_GUIDE.md +664 -0
  116. ninja_mcp-1.0.3/docs/TUI_INSTALLER.md +73 -0
  117. ninja_mcp-1.0.3/docs/assets/tui-docker-installer.svg +99 -0
  118. ninja_mcp-1.0.3/docs/assets/tui-models.svg +225 -0
  119. ninja_mcp-1.0.3/docs/assets/tui-overview.svg +216 -0
  120. ninja_mcp-1.0.3/docs/coder/ARCHITECTURE.md +1491 -0
  121. ninja_mcp-1.0.3/docs/coder/CHANGELOG.md +9 -0
  122. ninja_mcp-1.0.3/docs/coder/MIGRATION_GUIDE.md +797 -0
  123. ninja_mcp-1.0.3/docs/coder/PERFORMANCE_BENCHMARKS.md +729 -0
  124. ninja_mcp-1.0.3/docs/coder/REFACTORING_SUMMARY.md +603 -0
  125. ninja_mcp-1.0.3/docs/container-quickstart.md +169 -0
  126. ninja_mcp-1.0.3/docs/researcher/CHANGELOG.md +1 -0
  127. ninja_mcp-1.0.3/docs/researcher/README.md +329 -0
  128. ninja_mcp-1.0.3/docs/secretary/CHANGELOG.md +7 -0
  129. ninja_mcp-1.0.3/docs/secretary/README.md +541 -0
  130. ninja_mcp-1.0.3/docs/superpowers/plans/2026-07-09-gitlab-release-jobs.md +61 -0
  131. ninja_mcp-1.0.3/examples/README.md +211 -0
  132. ninja_mcp-1.0.3/examples/claude-code-mcp.json +55 -0
  133. ninja_mcp-1.0.3/examples/dynamic_model_selector_demo.py +162 -0
  134. ninja_mcp-1.0.3/examples/hello_ninja.py +52 -0
  135. ninja_mcp-1.0.3/examples/mcp-config-local-dev.json +48 -0
  136. ninja_mcp-1.0.3/examples/mcp-config-template.json +45 -0
  137. ninja_mcp-1.0.3/examples/opencode_integration_example.py +353 -0
  138. ninja_mcp-1.0.3/examples/vscode-cline-mcp.json +55 -0
  139. ninja_mcp-1.0.3/examples/workflows/bug-debugger.yml +58 -0
  140. ninja_mcp-1.0.3/examples/workflows/code-reviewer.yml +60 -0
  141. ninja_mcp-1.0.3/examples/workflows/feature-developer.yml +70 -0
  142. ninja_mcp-1.0.3/examples/zed-settings.json +66 -0
  143. ninja_mcp-1.0.3/hello.py +1 -0
  144. ninja_mcp-1.0.3/hello.txt +1 -0
  145. ninja_mcp-1.0.3/install.sh +443 -0
  146. ninja_mcp-1.0.3/justfile +341 -0
  147. ninja_mcp-1.0.3/ninja-prompts/server.py +3 -0
  148. ninja_mcp-1.0.3/ninja_resources/server.py +81 -0
  149. ninja_mcp-1.0.3/ninja_resources/tools.py +17 -0
  150. ninja_mcp-1.0.3/notebooks/.gitignore +13 -0
  151. ninja_mcp-1.0.3/notebooks/01_model_comparison.ipynb +1231 -0
  152. ninja_mcp-1.0.3/notebooks/01_model_comparison.ipynb.bak +496 -0
  153. ninja_mcp-1.0.3/notebooks/02_cost_analysis.ipynb +420 -0
  154. ninja_mcp-1.0.3/notebooks/02_cost_analysis.ipynb.bak +431 -0
  155. ninja_mcp-1.0.3/notebooks/03_mcp_token_savings_analysis.ipynb +1825 -0
  156. ninja_mcp-1.0.3/notebooks/03_plugin_cost_savings.ipynb +1291 -0
  157. ninja_mcp-1.0.3/notebooks/MODEL_SELECTION.md +160 -0
  158. ninja_mcp-1.0.3/notebooks/QUICKSTART.md +227 -0
  159. ninja_mcp-1.0.3/notebooks/README.md +270 -0
  160. ninja_mcp-1.0.3/notebooks/livebench_data.py +340 -0
  161. ninja_mcp-1.0.3/notebooks/test_livebench_data.py +197 -0
  162. ninja_mcp-1.0.3/notebooks/test_minimal.ipynb +76 -0
  163. ninja_mcp-1.0.3/packaging/debian/ninja-mcp_0.2.0_all.deb +0 -0
  164. ninja_mcp-1.0.3/packaging/homebrew/ninja-mcp.rb +61 -0
  165. ninja_mcp-1.0.3/pyproject.toml +260 -0
  166. ninja_mcp-1.0.3/ruff.toml +71 -0
  167. ninja_mcp-1.0.3/scripts/clean_claude_env.sh +59 -0
  168. ninja_mcp-1.0.3/scripts/dev.sh +157 -0
  169. ninja_mcp-1.0.3/scripts/fix_config.sh +164 -0
  170. ninja_mcp-1.0.3/scripts/get_recommended_models.py +329 -0
  171. ninja_mcp-1.0.3/scripts/http_server.py +135 -0
  172. ninja_mcp-1.0.3/scripts/http_server_old.py +164 -0
  173. ninja_mcp-1.0.3/scripts/install.sh +162 -0
  174. ninja_mcp-1.0.3/scripts/install_gemini_mcp.sh.bak +0 -0
  175. ninja_mcp-1.0.3/scripts/install_interactive.sh.bak +1050 -0
  176. ninja_mcp-1.0.3/scripts/legacy_archive/README.md +70 -0
  177. ninja_mcp-1.0.3/scripts/legacy_archive/configure-opencode.sh +125 -0
  178. ninja_mcp-1.0.3/scripts/legacy_archive/install_claude_code_mcp.sh +431 -0
  179. ninja_mcp-1.0.3/scripts/legacy_archive/install_coding_cli.sh +91 -0
  180. ninja_mcp-1.0.3/scripts/legacy_archive/install_copilot_cli_mcp.sh +227 -0
  181. ninja_mcp-1.0.3/scripts/legacy_archive/install_daemon.sh +405 -0
  182. ninja_mcp-1.0.3/scripts/legacy_archive/install_gemini_mcp.sh +380 -0
  183. ninja_mcp-1.0.3/scripts/legacy_archive/install_gemini_mcp_claude_backup.sh +431 -0
  184. ninja_mcp-1.0.3/scripts/legacy_archive/install_ide_integrations.sh +322 -0
  185. ninja_mcp-1.0.3/scripts/legacy_archive/install_interactive.sh +1277 -0
  186. ninja_mcp-1.0.3/scripts/legacy_archive/install_opencode_mcp.sh +448 -0
  187. ninja_mcp-1.0.3/scripts/legacy_archive/install_vscode_mcp.sh +241 -0
  188. ninja_mcp-1.0.3/scripts/legacy_archive/install_zed_mcp.sh +357 -0
  189. ninja_mcp-1.0.3/scripts/ninja-cli-mcp.service +28 -0
  190. ninja_mcp-1.0.3/scripts/ninja-recover.sh +167 -0
  191. ninja_mcp-1.0.3/scripts/packaging/build-deb.sh +185 -0
  192. ninja_mcp-1.0.3/scripts/packaging/build-homebrew.sh +108 -0
  193. ninja_mcp-1.0.3/scripts/post-install.sh +30 -0
  194. ninja_mcp-1.0.3/scripts/restart_mcp.sh +141 -0
  195. ninja_mcp-1.0.3/scripts/run_daemon.sh +25 -0
  196. ninja_mcp-1.0.3/scripts/run_integration_tests.sh +155 -0
  197. ninja_mcp-1.0.3/scripts/run_notebooks.sh +90 -0
  198. ninja_mcp-1.0.3/scripts/run_server.sh +55 -0
  199. ninja_mcp-1.0.3/scripts/run_server_stdio.sh +19 -0
  200. ninja_mcp-1.0.3/scripts/run_stdio_proxy.sh +40 -0
  201. ninja_mcp-1.0.3/scripts/run_tests.sh +160 -0
  202. ninja_mcp-1.0.3/scripts/safe-ninja-task.sh +71 -0
  203. ninja_mcp-1.0.3/scripts/smoke_test.sh +272 -0
  204. ninja_mcp-1.0.3/scripts/socket_server.py +93 -0
  205. ninja_mcp-1.0.3/scripts/stdio_proxy.py +100 -0
  206. ninja_mcp-1.0.3/scripts/test_aider_integration.sh +175 -0
  207. ninja_mcp-1.0.3/scripts/test_copilot_mcp.sh +150 -0
  208. ninja_mcp-1.0.3/scripts/test_tui_installer.py +29 -0
  209. ninja_mcp-1.0.3/scripts/update_mcp_config.py +91 -0
  210. ninja_mcp-1.0.3/scripts/update_mcp_config.sh +797 -0
  211. ninja_mcp-1.0.3/skills/ninja-code/config.json +35 -0
  212. ninja_mcp-1.0.3/skills/ninja-code/skill.md +85 -0
  213. ninja_mcp-1.0.3/skills/ninja-research/config.json +34 -0
  214. ninja_mcp-1.0.3/skills/ninja-research/skill.md +93 -0
  215. ninja_mcp-1.0.3/specs/CLAUDE_HOOKS_CLI_SPEC.md +367 -0
  216. ninja_mcp-1.0.3/specs/SKILL_PACKAGING_SPEC.md +205 -0
  217. ninja_mcp-1.0.3/src/ninja_agent/__init__.py +3 -0
  218. ninja_mcp-1.0.3/src/ninja_agent/cli.py +394 -0
  219. ninja_mcp-1.0.3/src/ninja_agent/models.py +127 -0
  220. ninja_mcp-1.0.3/src/ninja_agent/server.py +324 -0
  221. ninja_mcp-1.0.3/src/ninja_agent/tools.py +499 -0
  222. ninja_mcp-1.0.3/src/ninja_coder/__init__.py +30 -0
  223. ninja_mcp-1.0.3/src/ninja_coder/benchmark/__init__.py +15 -0
  224. ninja_mcp-1.0.3/src/ninja_coder/benchmark/framework.py +328 -0
  225. ninja_mcp-1.0.3/src/ninja_coder/benchmark/tasks.py +110 -0
  226. ninja_mcp-1.0.3/src/ninja_coder/daemon.py +282 -0
  227. ninja_mcp-1.0.3/src/ninja_coder/driver.py +2655 -0
  228. ninja_mcp-1.0.3/src/ninja_coder/hooks_cli.py +265 -0
  229. ninja_mcp-1.0.3/src/ninja_coder/model_selector.py +363 -0
  230. ninja_mcp-1.0.3/src/ninja_coder/models.py +348 -0
  231. ninja_mcp-1.0.3/src/ninja_coder/multi_agent.py +310 -0
  232. ninja_mcp-1.0.3/src/ninja_coder/prompt_builder.py +741 -0
  233. ninja_mcp-1.0.3/src/ninja_coder/result_parser.py +290 -0
  234. ninja_mcp-1.0.3/src/ninja_coder/safety.py +507 -0
  235. ninja_mcp-1.0.3/src/ninja_coder/server.py +788 -0
  236. ninja_mcp-1.0.3/src/ninja_coder/sessions.py +278 -0
  237. ninja_mcp-1.0.3/src/ninja_coder/sessions.py.backup +278 -0
  238. ninja_mcp-1.0.3/src/ninja_coder/strategies/__init__.py +28 -0
  239. ninja_mcp-1.0.3/src/ninja_coder/strategies/aider_strategy.py +505 -0
  240. ninja_mcp-1.0.3/src/ninja_coder/strategies/base.py +173 -0
  241. ninja_mcp-1.0.3/src/ninja_coder/strategies/claude_strategy.py +336 -0
  242. ninja_mcp-1.0.3/src/ninja_coder/strategies/gemini_strategy.py +373 -0
  243. ninja_mcp-1.0.3/src/ninja_coder/strategies/junie_strategy.py +322 -0
  244. ninja_mcp-1.0.3/src/ninja_coder/strategies/opencode_server_pool.py +564 -0
  245. ninja_mcp-1.0.3/src/ninja_coder/strategies/opencode_strategy.py +777 -0
  246. ninja_mcp-1.0.3/src/ninja_coder/strategies/registry.py +116 -0
  247. ninja_mcp-1.0.3/src/ninja_coder/strategies/test_opencode_sessions.py +313 -0
  248. ninja_mcp-1.0.3/src/ninja_coder/tools.py +949 -0
  249. ninja_mcp-1.0.3/src/ninja_coder/tools.py.backup +1156 -0
  250. ninja_mcp-1.0.3/src/ninja_coder/worktree.py +557 -0
  251. ninja_mcp-1.0.3/src/ninja_common/__init__.py +38 -0
  252. ninja_mcp-1.0.3/src/ninja_common/config_cli.py +944 -0
  253. ninja_mcp-1.0.3/src/ninja_common/config_manager.py +373 -0
  254. ninja_mcp-1.0.3/src/ninja_common/daemon.py +941 -0
  255. ninja_mcp-1.0.3/src/ninja_common/defaults.py +629 -0
  256. ninja_mcp-1.0.3/src/ninja_common/hooks_base.py +168 -0
  257. ninja_mcp-1.0.3/src/ninja_common/init_cli.py +277 -0
  258. ninja_mcp-1.0.3/src/ninja_common/init_targets/__init__.py +1 -0
  259. ninja_mcp-1.0.3/src/ninja_common/init_targets/_common.py +76 -0
  260. ninja_mcp-1.0.3/src/ninja_common/init_targets/_json_target.py +214 -0
  261. ninja_mcp-1.0.3/src/ninja_common/init_targets/antigravity.py +18 -0
  262. ninja_mcp-1.0.3/src/ninja_common/init_targets/claude_code.py +160 -0
  263. ninja_mcp-1.0.3/src/ninja_common/init_targets/codex.py +154 -0
  264. ninja_mcp-1.0.3/src/ninja_common/init_targets/cursor.py +44 -0
  265. ninja_mcp-1.0.3/src/ninja_common/init_targets/generic.py +45 -0
  266. ninja_mcp-1.0.3/src/ninja_common/init_targets/kiro.py +18 -0
  267. ninja_mcp-1.0.3/src/ninja_common/init_targets/roo_code.py +18 -0
  268. ninja_mcp-1.0.3/src/ninja_common/init_targets/vscode_cline.py +18 -0
  269. ninja_mcp-1.0.3/src/ninja_common/init_targets/windsurf.py +18 -0
  270. ninja_mcp-1.0.3/src/ninja_common/logging_utils.py +279 -0
  271. ninja_mcp-1.0.3/src/ninja_common/metrics.py +469 -0
  272. ninja_mcp-1.0.3/src/ninja_common/ninja_cli.py +202 -0
  273. ninja_mcp-1.0.3/src/ninja_common/path_utils.py +258 -0
  274. ninja_mcp-1.0.3/src/ninja_common/rate_balancer.py +372 -0
  275. ninja_mcp-1.0.3/src/ninja_common/security.py +572 -0
  276. ninja_mcp-1.0.3/src/ninja_common/skill_cli.py +269 -0
  277. ninja_mcp-1.0.3/src/ninja_common/skill_packager.py +393 -0
  278. ninja_mcp-1.0.3/src/ninja_common/structured_logger.py +411 -0
  279. ninja_mcp-1.0.3/src/ninja_common/update_cli.py +64 -0
  280. ninja_mcp-1.0.3/src/ninja_common/version_tracker.py +177 -0
  281. ninja_mcp-1.0.3/src/ninja_config/__init__.py +62 -0
  282. ninja_mcp-1.0.3/src/ninja_config/auto_updater.py +511 -0
  283. ninja_mcp-1.0.3/src/ninja_config/config_loader.py +261 -0
  284. ninja_mcp-1.0.3/src/ninja_config/config_migrator.py +667 -0
  285. ninja_mcp-1.0.3/src/ninja_config/config_schema.py +738 -0
  286. ninja_mcp-1.0.3/src/ninja_config/config_shared.py +376 -0
  287. ninja_mcp-1.0.3/src/ninja_config/configurator.py +573 -0
  288. ninja_mcp-1.0.3/src/ninja_config/credentials.py +792 -0
  289. ninja_mcp-1.0.3/src/ninja_config/docker_installer.py +227 -0
  290. ninja_mcp-1.0.3/src/ninja_config/interactive_configurator.py +1820 -0
  291. ninja_mcp-1.0.3/src/ninja_config/interactive_configurator.py.backup +1825 -0
  292. ninja_mcp-1.0.3/src/ninja_config/litellm.py +137 -0
  293. ninja_mcp-1.0.3/src/ninja_config/menuconfig_tui.py +332 -0
  294. ninja_mcp-1.0.3/src/ninja_config/model_selector.py +1472 -0
  295. ninja_mcp-1.0.3/src/ninja_config/modern_tui.py +1286 -0
  296. ninja_mcp-1.0.3/src/ninja_config/opencode_integration.py +462 -0
  297. ninja_mcp-1.0.3/src/ninja_config/secrets_store.py +291 -0
  298. ninja_mcp-1.0.3/src/ninja_config/settings_registry.py +377 -0
  299. ninja_mcp-1.0.3/src/ninja_config/tui_installer.py +511 -0
  300. ninja_mcp-1.0.3/src/ninja_config/ui/__init__.py +118 -0
  301. ninja_mcp-1.0.3/src/ninja_config/ui/base.py +126 -0
  302. ninja_mcp-1.0.3/src/ninja_config/ui/component_setup.py +483 -0
  303. ninja_mcp-1.0.3/src/ninja_config/ui/main_menu.py +189 -0
  304. ninja_mcp-1.0.3/src/ninja_config/ui/model_autocomplete.py +479 -0
  305. ninja_mcp-1.0.3/src/ninja_config/ui/model_cache.py +131 -0
  306. ninja_mcp-1.0.3/src/ninja_config/ui/model_selector.py +654 -0
  307. ninja_mcp-1.0.3/src/ninja_config/ui/operator_config.py +439 -0
  308. ninja_mcp-1.0.3/src/ninja_config/ui/settings.py +442 -0
  309. ninja_mcp-1.0.3/src/ninja_config/ui/theme.py +115 -0
  310. ninja_mcp-1.0.3/src/ninja_config/ui/theme.tcss +311 -0
  311. ninja_mcp-1.0.3/src/ninja_researcher/__init__.py +38 -0
  312. ninja_mcp-1.0.3/src/ninja_researcher/models.py +149 -0
  313. ninja_mcp-1.0.3/src/ninja_researcher/search_providers.py +359 -0
  314. ninja_mcp-1.0.3/src/ninja_researcher/server.py +442 -0
  315. ninja_mcp-1.0.3/src/ninja_researcher/tools.py +606 -0
  316. ninja_mcp-1.0.3/src/ninja_secretary/__init__.py +44 -0
  317. ninja_mcp-1.0.3/src/ninja_secretary/hooks_cli.py +301 -0
  318. ninja_mcp-1.0.3/src/ninja_secretary/models.py +273 -0
  319. ninja_mcp-1.0.3/src/ninja_secretary/server.py +334 -0
  320. ninja_mcp-1.0.3/src/ninja_secretary/tests/test_git_models.py +414 -0
  321. ninja_mcp-1.0.3/src/ninja_secretary/tests/test_git_tools.py +585 -0
  322. ninja_mcp-1.0.3/src/ninja_secretary/tests/test_models_smart_commit.py +374 -0
  323. ninja_mcp-1.0.3/src/ninja_secretary/tests/test_smart_commit.py +393 -0
  324. ninja_mcp-1.0.3/src/ninja_secretary/tools.py +815 -0
  325. ninja_mcp-1.0.3/test.txt +1 -0
  326. ninja_mcp-1.0.3/test_api_v2.py +13 -0
  327. ninja_mcp-1.0.3/test_final_haiku.py +19 -0
  328. ninja_mcp-1.0.3/test_models_v2.py +14 -0
  329. ninja_mcp-1.0.3/test_ninja_refactored.py +2 -0
  330. ninja_mcp-1.0.3/test_output/EXECUTION_SUMMARY.txt +359 -0
  331. ninja_mcp-1.0.3/test_output/INDEX.md +391 -0
  332. ninja_mcp-1.0.3/test_output/QUICK_REFERENCE.md +267 -0
  333. ninja_mcp-1.0.3/test_output/START_HERE.md +315 -0
  334. ninja_mcp-1.0.3/test_output/SUMMARY.txt +236 -0
  335. ninja_mcp-1.0.3/test_output/TEST_REPORT.md +406 -0
  336. ninja_mcp-1.0.3/test_output/TEST_RESULTS.md +69 -0
  337. ninja_mcp-1.0.3/test_output/config_helper.py +32 -0
  338. ninja_mcp-1.0.3/test_output/full_test/README.md +145 -0
  339. ninja_mcp-1.0.3/test_output/full_test/test_parallel_collections.py +55 -0
  340. ninja_mcp-1.0.3/test_output/full_test/test_parallel_math.py +39 -0
  341. ninja_mcp-1.0.3/test_output/full_test/test_parallel_string.py +45 -0
  342. ninja_mcp-1.0.3/test_output/full_test/test_sequential_step1.py +28 -0
  343. ninja_mcp-1.0.3/test_output/full_test/test_sequential_step2.py +42 -0
  344. ninja_mcp-1.0.3/test_output/full_test/test_sequential_step3.py +54 -0
  345. ninja_mcp-1.0.3/test_output/full_test/test_simple_task.py +91 -0
  346. ninja_mcp-1.0.3/test_output/math_helper.py +13 -0
  347. ninja_mcp-1.0.3/test_output/string_utils.py +26 -0
  348. ninja_mcp-1.0.3/test_output/success_test.py +2 -0
  349. ninja_mcp-1.0.3/test_output/test_combined.py +1 -0
  350. ninja_mcp-1.0.3/test_output/test_integration.py +36 -0
  351. ninja_mcp-1.0.3/test_output/test_utils.py +6 -0
  352. ninja_mcp-1.0.3/test_output/test_utils_module.py +50 -0
  353. ninja_mcp-1.0.3/test_output/test_validators_module.py +29 -0
  354. ninja_mcp-1.0.3/test_output/tool_verification/FINAL_SUMMARY.txt +115 -0
  355. ninja_mcp-1.0.3/test_output/tool_verification/QUICK_SUMMARY.txt +100 -0
  356. ninja_mcp-1.0.3/test_output/tool_verification/README.md +169 -0
  357. ninja_mcp-1.0.3/test_output/tool_verification/VERIFICATION_REPORT.md +226 -0
  358. ninja_mcp-1.0.3/test_output/tool_verification/direct_test.py +128 -0
  359. ninja_mcp-1.0.3/test_output/tool_verification/test_all_tools.py +172 -0
  360. ninja_mcp-1.0.3/test_output/tool_verification/verify_tools.py +170 -0
  361. ninja_mcp-1.0.3/test_output/utils.py +24 -0
  362. ninja_mcp-1.0.3/test_output/validators.py +11 -0
  363. ninja_mcp-1.0.3/test_output/victory.py +73 -0
  364. ninja_mcp-1.0.3/test_refactor_v2.py +2 -0
  365. ninja_mcp-1.0.3/test_services_v2.py +15 -0
  366. ninja_mcp-1.0.3/tests/README.md +153 -0
  367. ninja_mcp-1.0.3/tests/__init__.py +1 -0
  368. ninja_mcp-1.0.3/tests/conftest.py +145 -0
  369. ninja_mcp-1.0.3/tests/integration/__init__.py +1 -0
  370. ninja_mcp-1.0.3/tests/integration/test_parallel_execution.py +515 -0
  371. ninja_mcp-1.0.3/tests/legacy/README.md +29 -0
  372. ninja_mcp-1.0.3/tests/legacy/conftest.py +16 -0
  373. ninja_mcp-1.0.3/tests/legacy/test_cli_adapter.py +225 -0
  374. ninja_mcp-1.0.3/tests/legacy/test_e2e.py +219 -0
  375. ninja_mcp-1.0.3/tests/legacy/test_integration_aider.py +145 -0
  376. ninja_mcp-1.0.3/tests/legacy/test_integration_claude.py +258 -0
  377. ninja_mcp-1.0.3/tests/legacy/test_integration_openrouter.py +182 -0
  378. ninja_mcp-1.0.3/tests/legacy/test_metrics.py +395 -0
  379. ninja_mcp-1.0.3/tests/legacy/test_models.py +227 -0
  380. ninja_mcp-1.0.3/tests/legacy/test_paths.py +172 -0
  381. ninja_mcp-1.0.3/tests/legacy/test_qwen_driver.py +338 -0
  382. ninja_mcp-1.0.3/tests/legacy/test_security.py +337 -0
  383. ninja_mcp-1.0.3/tests/legacy/test_tools.py +333 -0
  384. ninja_mcp-1.0.3/tests/researcher/__init__.py +1 -0
  385. ninja_mcp-1.0.3/tests/researcher/test_search_providers.py +121 -0
  386. ninja_mcp-1.0.3/tests/test_activity_timeout.py +638 -0
  387. ninja_mcp-1.0.3/tests/test_agent.py +136 -0
  388. ninja_mcp-1.0.3/tests/test_agent_cli.py +196 -0
  389. ninja_mcp-1.0.3/tests/test_auto_updater.py +135 -0
  390. ninja_mcp-1.0.3/tests/test_calculator.py +9 -0
  391. ninja_mcp-1.0.3/tests/test_calculator_tests.py +17 -0
  392. ninja_mcp-1.0.3/tests/test_coder/__init__.py +1 -0
  393. ninja_mcp-1.0.3/tests/test_coder/test_coder_smoke.py +374 -0
  394. ninja_mcp-1.0.3/tests/test_coder/test_daemon.py +438 -0
  395. ninja_mcp-1.0.3/tests/test_coder/test_daemon_integration.py +102 -0
  396. ninja_mcp-1.0.3/tests/test_coder/test_driver_unit.py +373 -0
  397. ninja_mcp-1.0.3/tests/test_coder/test_eval.py +588 -0
  398. ninja_mcp-1.0.3/tests/test_coder/test_opencode_e2e.py +323 -0
  399. ninja_mcp-1.0.3/tests/test_coder/test_opencode_strategy.py +204 -0
  400. ninja_mcp-1.0.3/tests/test_coder/test_parallel_complexity.py +115 -0
  401. ninja_mcp-1.0.3/tests/test_coder/test_sequential_execution.py +677 -0
  402. ninja_mcp-1.0.3/tests/test_coder/test_tools_unit.py +116 -0
  403. ninja_mcp-1.0.3/tests/test_common/__init__.py +1 -0
  404. ninja_mcp-1.0.3/tests/test_common/test_config_manager.py +254 -0
  405. ninja_mcp-1.0.3/tests/test_common/test_config_shared.py +440 -0
  406. ninja_mcp-1.0.3/tests/test_common/test_credentials.py +477 -0
  407. ninja_mcp-1.0.3/tests/test_common/test_daemon_module_config.py +70 -0
  408. ninja_mcp-1.0.3/tests/test_common/test_deduplicator.py +182 -0
  409. ninja_mcp-1.0.3/tests/test_common/test_defaults.py +126 -0
  410. ninja_mcp-1.0.3/tests/test_common/test_opencode_integration.py +584 -0
  411. ninja_mcp-1.0.3/tests/test_common/test_tui_installer.py +620 -0
  412. ninja_mcp-1.0.3/tests/test_config_manager_migration.py +372 -0
  413. ninja_mcp-1.0.3/tests/test_container_config.py +104 -0
  414. ninja_mcp-1.0.3/tests/test_corruption_fix.py +135 -0
  415. ninja_mcp-1.0.3/tests/test_docker_installer.py +204 -0
  416. ninja_mcp-1.0.3/tests/test_driver.py +849 -0
  417. ninja_mcp-1.0.3/tests/test_dynamic_model_selector.py +106 -0
  418. ninja_mcp-1.0.3/tests/test_final_haiku.py +71 -0
  419. ninja_mcp-1.0.3/tests/test_final_par2.py +107 -0
  420. ninja_mcp-1.0.3/tests/test_final_seq.py +102 -0
  421. ninja_mcp-1.0.3/tests/test_final_simple.py +176 -0
  422. ninja_mcp-1.0.3/tests/test_hello.py +12 -0
  423. ninja_mcp-1.0.3/tests/test_hello_functional.py +12 -0
  424. ninja_mcp-1.0.3/tests/test_hello_proper.py +12 -0
  425. ninja_mcp-1.0.3/tests/test_hello_script.py +12 -0
  426. ninja_mcp-1.0.3/tests/test_hello_simple.py +9 -0
  427. ninja_mcp-1.0.3/tests/test_hooks/test_coder_hooks.py +478 -0
  428. ninja_mcp-1.0.3/tests/test_hooks/test_hooks_base.py +338 -0
  429. ninja_mcp-1.0.3/tests/test_hooks/test_secretary_hooks.py +302 -0
  430. ninja_mcp-1.0.3/tests/test_hooks_cli.py +278 -0
  431. ninja_mcp-1.0.3/tests/test_init_cli.py +529 -0
  432. ninja_mcp-1.0.3/tests/test_integration.py +378 -0
  433. ninja_mcp-1.0.3/tests/test_junie_strategy.py +143 -0
  434. ninja_mcp-1.0.3/tests/test_litellm.py +76 -0
  435. ninja_mcp-1.0.3/tests/test_logging_integration.py +226 -0
  436. ninja_mcp-1.0.3/tests/test_mcp_timeout_integration.py +326 -0
  437. ninja_mcp-1.0.3/tests/test_mcp_works.py +118 -0
  438. ninja_mcp-1.0.3/tests/test_model_selector.py +264 -0
  439. ninja_mcp-1.0.3/tests/test_modern_tui_api_keys.py +18 -0
  440. ninja_mcp-1.0.3/tests/test_modern_tui_modules.py +60 -0
  441. ninja_mcp-1.0.3/tests/test_multi_agent.py +320 -0
  442. ninja_mcp-1.0.3/tests/test_ninja_fixed.py +122 -0
  443. ninja_mcp-1.0.3/tests/test_opencode_server_pool.py +252 -0
  444. ninja_mcp-1.0.3/tests/test_parallel_strings.py +5 -0
  445. ninja_mcp-1.0.3/tests/test_prompt_builder.py +905 -0
  446. ninja_mcp-1.0.3/tests/test_real_ninja_integration.py +384 -0
  447. ninja_mcp-1.0.3/tests/test_researcher/__init__.py +0 -0
  448. ninja_mcp-1.0.3/tests/test_researcher/test_eval.py +668 -0
  449. ninja_mcp-1.0.3/tests/test_researcher/test_researcher_integration.py +489 -0
  450. ninja_mcp-1.0.3/tests/test_researcher/test_search_providers.py +322 -0
  451. ninja_mcp-1.0.3/tests/test_researcher/test_tools.py +422 -0
  452. ninja_mcp-1.0.3/tests/test_researcher_fixes.py +165 -0
  453. ninja_mcp-1.0.3/tests/test_result_parser.py +873 -0
  454. ninja_mcp-1.0.3/tests/test_safety.py +309 -0
  455. ninja_mcp-1.0.3/tests/test_secretary/__init__.py +0 -0
  456. ninja_mcp-1.0.3/tests/test_secretary/test_secretary_integration.py.bak +601 -0
  457. ninja_mcp-1.0.3/tests/test_secretary/test_tools.py +482 -0
  458. ninja_mcp-1.0.3/tests/test_secretary_fixes.py +180 -0
  459. ninja_mcp-1.0.3/tests/test_secrets_panel.py +365 -0
  460. ninja_mcp-1.0.3/tests/test_secrets_store.py +279 -0
  461. ninja_mcp-1.0.3/tests/test_sequential_hanging_fix.py +321 -0
  462. ninja_mcp-1.0.3/tests/test_sessions.py +230 -0
  463. ninja_mcp-1.0.3/tests/test_skill/__init__.py +1 -0
  464. ninja_mcp-1.0.3/tests/test_skill/test_skill_cli.py +571 -0
  465. ninja_mcp-1.0.3/tests/test_skill/test_skill_packager.py +677 -0
  466. ninja_mcp-1.0.3/tests/test_smoke.py +143 -0
  467. ninja_mcp-1.0.3/tests/test_strategies.py +875 -0
  468. ninja_mcp-1.0.3/tests/test_structured_logger.py +534 -0
  469. ninja_mcp-1.0.3/tests/test_test_parallel_1.py +28 -0
  470. ninja_mcp-1.0.3/tests/test_timeout_defaults.py +128 -0
  471. ninja_mcp-1.0.3/tests/test_ui_integration.py +312 -0
  472. ninja_mcp-1.0.3/tests/test_ui_refactoring.py +119 -0
  473. ninja_mcp-1.0.3/tests/test_update_cli.py +31 -0
  474. ninja_mcp-1.0.3/tests/test_validator.py +173 -0
  475. ninja_mcp-1.0.3/tests/test_works.py +56 -0
  476. ninja_mcp-1.0.3/tests/test_worktree.py +573 -0
  477. ninja_mcp-1.0.3/training/losses/vea_qp_alignment.py +456 -0
  478. ninja_mcp-1.0.3/training/models/vea/qp_injection.py +248 -0
  479. ninja_mcp-1.0.3/training/tests/test_vea_qp_alignment.py +304 -0
  480. ninja_mcp-1.0.3/utils.py +2 -0
  481. ninja_mcp-1.0.3/uv.lock +4137 -0
  482. ninja_mcp-1.0.3/verify_migration.py +174 -0
@@ -0,0 +1,281 @@
1
+ # ARCHITECT.md - Architecture Style Guide
2
+
3
+ This document defines the architectural patterns, principles, and standards for autonomous development.
4
+
5
+ ## Core Architecture: Hexagonal Architecture
6
+
7
+ All code must follow Hexagonal (Ports and Adapters) Architecture principles.
8
+
9
+ ### Layers
10
+
11
+ 1. **Domain Layer** (Innermost)
12
+ - Pure business logic
13
+ - No external dependencies
14
+ - No framework-specific code
15
+ - Domain models and entities
16
+ - Use cases / application services
17
+
18
+ 2. **Application Layer**
19
+ - Orchestrates domain use cases
20
+ - Defines ports (interfaces)
21
+ - Implements application services
22
+ - No infrastructure dependencies
23
+
24
+ 3. **Infrastructure Layer** (Outermost)
25
+ - Implements ports defined in Application layer
26
+ - External dependencies (databases, APIs, file system)
27
+ - Framework-specific code
28
+ - Adapters and drivers
29
+
30
+ ### Directory Structure (Example)
31
+
32
+ ```
33
+ src/
34
+ ├── my_module/
35
+ │ ├── domain/
36
+ │ │ ├── models/
37
+ │ │ ├── entities/
38
+ │ │ └── value_objects/
39
+ │ ├── application/
40
+ │ │ ├── ports/ # Interfaces
41
+ │ │ ├── services/ # Use cases
42
+ │ │ └── dtos/
43
+ │ └── infrastructure/
44
+ │ ├── adapters/ # Port implementations
45
+ │ ├── repositories/ # Data access
46
+ │ └── external/ # External API clients
47
+ ```
48
+
49
+ ## Dependency Injection (DI)
50
+
51
+ **MANDATORY:** All dependencies must be injected. Never instantiate dependencies directly.
52
+
53
+ ### Principles
54
+
55
+ 1. **Constructor Injection**
56
+ ```python
57
+ # ✅ CORRECT
58
+ class UserService:
59
+ def __init__(self, user_repository: UserRepository):
60
+ self._user_repository = user_repository
61
+
62
+ # ❌ WRONG
63
+ class UserService:
64
+ def __init__(self):
65
+ self._user_repository = UserRepository()
66
+ ```
67
+
68
+ 2. **Interface-Based Dependencies**
69
+ ```python
70
+ # ✅ CORRECT - Depend on abstractions
71
+ class UserService:
72
+ def __init__(self, user_repository: UserRepositoryInterface):
73
+ self._user_repository = user_repository
74
+
75
+ # ❌ WRONG - Depend on concretions
76
+ class UserService:
77
+ def __init__(self, user_repository: PostgresUserRepository):
78
+ self._user_repository = user_repository
79
+ ```
80
+
81
+ 3. **No Service Locator Pattern**
82
+ ```python
83
+ # ❌ WRONG - Don't fetch dependencies
84
+ class UserService:
85
+ def __init__(self):
86
+ self._user_repository = ServiceLocator.get(UserRepository)
87
+ ```
88
+
89
+ ### DI Container Pattern
90
+
91
+ Use a simple DI container or factory pattern:
92
+
93
+ ```python
94
+ class Container:
95
+ @staticmethod
96
+ def create_user_service() -> UserService:
97
+ return UserService(
98
+ user_repository=Container.create_user_repository()
99
+ )
100
+
101
+ @staticmethod
102
+ def create_user_repository() -> UserRepositoryInterface:
103
+ return PostgresUserRepository(db_connection=Container.get_db_connection())
104
+ ```
105
+
106
+ ## Type Safety
107
+
108
+ **MANDATORY:** All code must be fully typed. No `Any` types, no `# type: ignore` comments.
109
+
110
+ ### Principles
111
+
112
+ 1. **Full Type Coverage**
113
+ ```python
114
+ # ✅ CORRECT
115
+ def process_user(user_id: str, options: dict[str, int]) -> Result[User, Error]:
116
+ ...
117
+
118
+ # ❌ WRONG
119
+ def process_user(user_id, options):
120
+ ...
121
+ ```
122
+
123
+ 2. **Use Pydantic Models**
124
+ ```python
125
+ # ✅ CORRECT
126
+ class UserCreateRequest(BaseModel):
127
+ name: str
128
+ email: EmailStr
129
+ age: Annotated[int, Field(ge=0, le=120)]
130
+
131
+ # ❌ WRONG
132
+ def create_user(name, email, age):
133
+ ...
134
+ ```
135
+
136
+ 3. **No Any Types**
137
+ ```python
138
+ # ❌ WRONG
139
+ def process(data: Any) -> Any:
140
+ ...
141
+
142
+ # ❌ WRONG
143
+ def process(data: dict) -> dict:
144
+ ...
145
+
146
+ # ✅ CORRECT
147
+ def process(data: dict[str, int]) -> dict[str, str]:
148
+ ...
149
+ ```
150
+
151
+ 4. **Strict Type Checking**
152
+ ```python
153
+ # mypy.ini
154
+ [mypy]
155
+ strict = True
156
+ warn_return_any = True
157
+ warn_unused_configs = True
158
+ disallow_untyped_defs = True
159
+ ```
160
+
161
+ ## Banned Patterns
162
+
163
+ ### 1. Direct Database Access in Domain Layer
164
+ ```python
165
+ # ❌ WRONG - Domain layer with infrastructure
166
+ class User:
167
+ def save(self):
168
+ db.execute("INSERT INTO users ...")
169
+
170
+ # ✅ CORRECT - Infrastructure handles persistence
171
+ class UserRepositoryInterface:
172
+ def save(self, user: User) -> None:
173
+ ...
174
+ ```
175
+
176
+ ### 2. Singleton Pattern
177
+ ```python
178
+ # ❌ WRONG
179
+ class DatabaseConnection:
180
+ _instance = None
181
+
182
+ def __new__(cls):
183
+ if not cls._instance:
184
+ cls._instance = super().__new__(cls)
185
+ return cls._instance
186
+
187
+ # ✅ CORRECT - Inject dependencies
188
+ class UserService:
189
+ def __init__(self, db_connection: DatabaseConnection):
190
+ self._db = db_connection
191
+ ```
192
+
193
+ ### 3. Global State
194
+ ```python
195
+ # ❌ WRONG
196
+ current_user = None
197
+
198
+ def set_user(user):
199
+ global current_user
200
+ current_user = user
201
+
202
+ # ✅ CORRECT - Pass as parameter
203
+ def process_with_user(user: User, data: Data):
204
+ ...
205
+ ```
206
+
207
+ ### 4. God Classes
208
+ ```python
209
+ # ❌ WRONG - Too many responsibilities
210
+ class System:
211
+ def handle_database(self): ...
212
+ def handle_api(self): ...
213
+ def handle_auth(self): ...
214
+ def handle_ui(self): ...
215
+
216
+ # ✅ CORRECT - Single responsibility
217
+ class DatabaseService: ...
218
+ class ApiService: ...
219
+ class AuthService: ...
220
+ class UIService: ...
221
+ ```
222
+
223
+ ### 5. Tight Coupling
224
+ ```python
225
+ # ❌ WRONG - Concrete dependencies
226
+ class OrderService:
227
+ def __init__(self):
228
+ self._payment_gateway = StripePaymentGateway(api_key="...")
229
+ self._email_service = SendGridService(api_key="...")
230
+ self._db = PostgresDatabase(host="...")
231
+
232
+ # ✅ CORRECT - Interface-based DI
233
+ class OrderService:
234
+ def __init__(
235
+ self,
236
+ payment_gateway: PaymentGatewayInterface,
237
+ email_service: EmailServiceInterface,
238
+ database: DatabaseInterface,
239
+ ):
240
+ self._payment_gateway = payment_gateway
241
+ self._email_service = email_service
242
+ self._database = database
243
+ ```
244
+
245
+ ## Code Quality Standards
246
+
247
+ ### Linting
248
+ - Use `ruff` for linting
249
+ - No linting errors allowed
250
+ - Configuration in `ruff.toml`
251
+
252
+ ### Type Checking
253
+ - Use `mypy` for type checking
254
+ - Strict mode enabled
255
+ - All errors must be resolved before commit
256
+
257
+ ### Documentation
258
+ - All public functions must have docstrings
259
+ - Use Google-style docstrings
260
+ - Document complex algorithms
261
+
262
+ ### Testing
263
+ - All changes must be covered by tests
264
+ - Test coverage > 80%
265
+ - Use pytest for testing
266
+
267
+ ## Review Criteria
268
+
269
+ All code must pass these architectural gates:
270
+
271
+ 1. **Isolation** - Domain logic independent of external concerns
272
+ 2. **Dependency Injection** - All dependencies injected, not instantiated
273
+ 3. **Type Safety** - Full type coverage, no `Any` or `ignore` comments
274
+ 4. **Single Responsibility** - Each class/function has one clear purpose
275
+ 5. **Interface Segregation** - Dependencies are interfaces, not concretions
276
+ 6. **No Circular Dependencies** - Clean dependency graph
277
+ 7. **Clear Layer Boundaries** - No layer violations
278
+
279
+ ---
280
+
281
+ **Remember:** Adhere to these principles for maintainable, testable, and scalable code.