forgepair 1.0.0__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 (429) hide show
  1. forgepair-1.0.0/.dockerignore +10 -0
  2. forgepair-1.0.0/.flake8 +3 -0
  3. forgepair-1.0.0/.github/ISSUE_TEMPLATE/issue.yml +21 -0
  4. forgepair-1.0.0/.github/workflows/check_pypi_version.yml +100 -0
  5. forgepair-1.0.0/.github/workflows/continuous-release.yml +76 -0
  6. forgepair-1.0.0/.github/workflows/docker-build-test.yml +69 -0
  7. forgepair-1.0.0/.github/workflows/docker-release.yml +60 -0
  8. forgepair-1.0.0/.github/workflows/issues.yml +41 -0
  9. forgepair-1.0.0/.github/workflows/model-list-freshness.yml +88 -0
  10. forgepair-1.0.0/.github/workflows/pages.yml +87 -0
  11. forgepair-1.0.0/.github/workflows/pre-commit.yml +48 -0
  12. forgepair-1.0.0/.github/workflows/release.yml +41 -0
  13. forgepair-1.0.0/.github/workflows/ubuntu-tests.yml +59 -0
  14. forgepair-1.0.0/.github/workflows/windows-tests.yml +45 -0
  15. forgepair-1.0.0/.gitignore +21 -0
  16. forgepair-1.0.0/.pre-commit-config.yaml +23 -0
  17. forgepair-1.0.0/ARCHITECTURE_REVIEW.md +685 -0
  18. forgepair-1.0.0/BUILD_PLAN.md +740 -0
  19. forgepair-1.0.0/CHANGES.md +355 -0
  20. forgepair-1.0.0/CNAME +1 -0
  21. forgepair-1.0.0/CONTRIBUTING.md +274 -0
  22. forgepair-1.0.0/HISTORY.md +1533 -0
  23. forgepair-1.0.0/LICENSE.txt +202 -0
  24. forgepair-1.0.0/MANIFEST.in +20 -0
  25. forgepair-1.0.0/PKG-INFO +563 -0
  26. forgepair-1.0.0/README.md +189 -0
  27. forgepair-1.0.0/SPEC.md +246 -0
  28. forgepair-1.0.0/STATUS.md +460 -0
  29. forgepair-1.0.0/aider/__init__.py +20 -0
  30. forgepair-1.0.0/aider/__main__.py +4 -0
  31. forgepair-1.0.0/aider/_version.py +24 -0
  32. forgepair-1.0.0/aider/analytics.py +258 -0
  33. forgepair-1.0.0/aider/args.py +966 -0
  34. forgepair-1.0.0/aider/args_formatter.py +228 -0
  35. forgepair-1.0.0/aider/coders/__init__.py +33 -0
  36. forgepair-1.0.0/aider/coders/agent_coder.py +201 -0
  37. forgepair-1.0.0/aider/coders/agent_prompts.py +38 -0
  38. forgepair-1.0.0/aider/coders/architect_coder.py +48 -0
  39. forgepair-1.0.0/aider/coders/architect_prompts.py +40 -0
  40. forgepair-1.0.0/aider/coders/ask_coder.py +9 -0
  41. forgepair-1.0.0/aider/coders/ask_prompts.py +41 -0
  42. forgepair-1.0.0/aider/coders/base_coder.py +2662 -0
  43. forgepair-1.0.0/aider/coders/base_prompts.py +60 -0
  44. forgepair-1.0.0/aider/coders/chat_chunks.py +64 -0
  45. forgepair-1.0.0/aider/coders/context_coder.py +53 -0
  46. forgepair-1.0.0/aider/coders/context_prompts.py +75 -0
  47. forgepair-1.0.0/aider/coders/editblock_coder.py +657 -0
  48. forgepair-1.0.0/aider/coders/editblock_fenced_coder.py +10 -0
  49. forgepair-1.0.0/aider/coders/editblock_fenced_prompts.py +143 -0
  50. forgepair-1.0.0/aider/coders/editblock_prompts.py +172 -0
  51. forgepair-1.0.0/aider/coders/editor_diff_fenced_coder.py +9 -0
  52. forgepair-1.0.0/aider/coders/editor_diff_fenced_prompts.py +11 -0
  53. forgepair-1.0.0/aider/coders/editor_editblock_coder.py +9 -0
  54. forgepair-1.0.0/aider/coders/editor_editblock_prompts.py +18 -0
  55. forgepair-1.0.0/aider/coders/editor_whole_coder.py +9 -0
  56. forgepair-1.0.0/aider/coders/editor_whole_prompts.py +10 -0
  57. forgepair-1.0.0/aider/coders/help_coder.py +16 -0
  58. forgepair-1.0.0/aider/coders/help_prompts.py +46 -0
  59. forgepair-1.0.0/aider/coders/patch_coder.py +706 -0
  60. forgepair-1.0.0/aider/coders/patch_prompts.py +159 -0
  61. forgepair-1.0.0/aider/coders/search_replace.py +594 -0
  62. forgepair-1.0.0/aider/coders/shell.py +37 -0
  63. forgepair-1.0.0/aider/coders/udiff_coder.py +429 -0
  64. forgepair-1.0.0/aider/coders/udiff_prompts.py +113 -0
  65. forgepair-1.0.0/aider/coders/udiff_simple.py +14 -0
  66. forgepair-1.0.0/aider/coders/udiff_simple_prompts.py +25 -0
  67. forgepair-1.0.0/aider/coders/wholefile_coder.py +144 -0
  68. forgepair-1.0.0/aider/coders/wholefile_prompts.py +64 -0
  69. forgepair-1.0.0/aider/commands.py +1843 -0
  70. forgepair-1.0.0/aider/copypaste.py +72 -0
  71. forgepair-1.0.0/aider/deprecated.py +126 -0
  72. forgepair-1.0.0/aider/diffs.py +128 -0
  73. forgepair-1.0.0/aider/dump.py +29 -0
  74. forgepair-1.0.0/aider/editor.py +147 -0
  75. forgepair-1.0.0/aider/exceptions.py +113 -0
  76. forgepair-1.0.0/aider/format_settings.py +26 -0
  77. forgepair-1.0.0/aider/gui.py +545 -0
  78. forgepair-1.0.0/aider/help.py +163 -0
  79. forgepair-1.0.0/aider/help_pats.py +19 -0
  80. forgepair-1.0.0/aider/history.py +143 -0
  81. forgepair-1.0.0/aider/io.py +1191 -0
  82. forgepair-1.0.0/aider/linter.py +304 -0
  83. forgepair-1.0.0/aider/llm.py +47 -0
  84. forgepair-1.0.0/aider/main.py +1300 -0
  85. forgepair-1.0.0/aider/mcp/__init__.py +19 -0
  86. forgepair-1.0.0/aider/mcp/config.py +237 -0
  87. forgepair-1.0.0/aider/mcp/manager.py +730 -0
  88. forgepair-1.0.0/aider/mdstream.py +243 -0
  89. forgepair-1.0.0/aider/models.py +1475 -0
  90. forgepair-1.0.0/aider/onboarding.py +428 -0
  91. forgepair-1.0.0/aider/openrouter.py +129 -0
  92. forgepair-1.0.0/aider/prompts.py +61 -0
  93. forgepair-1.0.0/aider/queries/tree-sitter-language-pack/README.md +7 -0
  94. forgepair-1.0.0/aider/queries/tree-sitter-language-pack/arduino-tags.scm +5 -0
  95. forgepair-1.0.0/aider/queries/tree-sitter-language-pack/bash-tags.scm +8 -0
  96. forgepair-1.0.0/aider/queries/tree-sitter-language-pack/c-tags.scm +9 -0
  97. forgepair-1.0.0/aider/queries/tree-sitter-language-pack/chatito-tags.scm +16 -0
  98. forgepair-1.0.0/aider/queries/tree-sitter-language-pack/clojure-tags.scm +7 -0
  99. forgepair-1.0.0/aider/queries/tree-sitter-language-pack/commonlisp-tags.scm +122 -0
  100. forgepair-1.0.0/aider/queries/tree-sitter-language-pack/cpp-tags.scm +15 -0
  101. forgepair-1.0.0/aider/queries/tree-sitter-language-pack/csharp-tags.scm +26 -0
  102. forgepair-1.0.0/aider/queries/tree-sitter-language-pack/d-tags.scm +26 -0
  103. forgepair-1.0.0/aider/queries/tree-sitter-language-pack/dart-tags.scm +92 -0
  104. forgepair-1.0.0/aider/queries/tree-sitter-language-pack/elisp-tags.scm +5 -0
  105. forgepair-1.0.0/aider/queries/tree-sitter-language-pack/elixir-tags.scm +54 -0
  106. forgepair-1.0.0/aider/queries/tree-sitter-language-pack/elm-tags.scm +19 -0
  107. forgepair-1.0.0/aider/queries/tree-sitter-language-pack/gleam-tags.scm +41 -0
  108. forgepair-1.0.0/aider/queries/tree-sitter-language-pack/go-tags.scm +42 -0
  109. forgepair-1.0.0/aider/queries/tree-sitter-language-pack/java-tags.scm +20 -0
  110. forgepair-1.0.0/aider/queries/tree-sitter-language-pack/javascript-tags.scm +88 -0
  111. forgepair-1.0.0/aider/queries/tree-sitter-language-pack/lua-tags.scm +34 -0
  112. forgepair-1.0.0/aider/queries/tree-sitter-language-pack/matlab-tags.scm +10 -0
  113. forgepair-1.0.0/aider/queries/tree-sitter-language-pack/ocaml-tags.scm +115 -0
  114. forgepair-1.0.0/aider/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +98 -0
  115. forgepair-1.0.0/aider/queries/tree-sitter-language-pack/pony-tags.scm +39 -0
  116. forgepair-1.0.0/aider/queries/tree-sitter-language-pack/properties-tags.scm +5 -0
  117. forgepair-1.0.0/aider/queries/tree-sitter-language-pack/python-tags.scm +14 -0
  118. forgepair-1.0.0/aider/queries/tree-sitter-language-pack/r-tags.scm +21 -0
  119. forgepair-1.0.0/aider/queries/tree-sitter-language-pack/racket-tags.scm +12 -0
  120. forgepair-1.0.0/aider/queries/tree-sitter-language-pack/ruby-tags.scm +64 -0
  121. forgepair-1.0.0/aider/queries/tree-sitter-language-pack/rust-tags.scm +60 -0
  122. forgepair-1.0.0/aider/queries/tree-sitter-language-pack/solidity-tags.scm +43 -0
  123. forgepair-1.0.0/aider/queries/tree-sitter-language-pack/swift-tags.scm +51 -0
  124. forgepair-1.0.0/aider/queries/tree-sitter-language-pack/udev-tags.scm +20 -0
  125. forgepair-1.0.0/aider/queries/tree-sitter-languages/README.md +24 -0
  126. forgepair-1.0.0/aider/queries/tree-sitter-languages/bash-tags.scm +8 -0
  127. forgepair-1.0.0/aider/queries/tree-sitter-languages/c-tags.scm +9 -0
  128. forgepair-1.0.0/aider/queries/tree-sitter-languages/c_sharp-tags.scm +46 -0
  129. forgepair-1.0.0/aider/queries/tree-sitter-languages/cpp-tags.scm +15 -0
  130. forgepair-1.0.0/aider/queries/tree-sitter-languages/dart-tags.scm +91 -0
  131. forgepair-1.0.0/aider/queries/tree-sitter-languages/elisp-tags.scm +8 -0
  132. forgepair-1.0.0/aider/queries/tree-sitter-languages/elixir-tags.scm +54 -0
  133. forgepair-1.0.0/aider/queries/tree-sitter-languages/elm-tags.scm +19 -0
  134. forgepair-1.0.0/aider/queries/tree-sitter-languages/fortran-tags.scm +15 -0
  135. forgepair-1.0.0/aider/queries/tree-sitter-languages/go-tags.scm +30 -0
  136. forgepair-1.0.0/aider/queries/tree-sitter-languages/haskell-tags.scm +3 -0
  137. forgepair-1.0.0/aider/queries/tree-sitter-languages/hcl-tags.scm +77 -0
  138. forgepair-1.0.0/aider/queries/tree-sitter-languages/java-tags.scm +20 -0
  139. forgepair-1.0.0/aider/queries/tree-sitter-languages/javascript-tags.scm +88 -0
  140. forgepair-1.0.0/aider/queries/tree-sitter-languages/julia-tags.scm +60 -0
  141. forgepair-1.0.0/aider/queries/tree-sitter-languages/kotlin-tags.scm +27 -0
  142. forgepair-1.0.0/aider/queries/tree-sitter-languages/matlab-tags.scm +10 -0
  143. forgepair-1.0.0/aider/queries/tree-sitter-languages/ocaml-tags.scm +115 -0
  144. forgepair-1.0.0/aider/queries/tree-sitter-languages/ocaml_interface-tags.scm +98 -0
  145. forgepair-1.0.0/aider/queries/tree-sitter-languages/php-tags.scm +26 -0
  146. forgepair-1.0.0/aider/queries/tree-sitter-languages/python-tags.scm +12 -0
  147. forgepair-1.0.0/aider/queries/tree-sitter-languages/ql-tags.scm +26 -0
  148. forgepair-1.0.0/aider/queries/tree-sitter-languages/ruby-tags.scm +64 -0
  149. forgepair-1.0.0/aider/queries/tree-sitter-languages/rust-tags.scm +60 -0
  150. forgepair-1.0.0/aider/queries/tree-sitter-languages/scala-tags.scm +65 -0
  151. forgepair-1.0.0/aider/queries/tree-sitter-languages/typescript-tags.scm +41 -0
  152. forgepair-1.0.0/aider/queries/tree-sitter-languages/zig-tags.scm +3 -0
  153. forgepair-1.0.0/aider/reasoning_tags.py +82 -0
  154. forgepair-1.0.0/aider/repo.py +622 -0
  155. forgepair-1.0.0/aider/repomap.py +868 -0
  156. forgepair-1.0.0/aider/report.py +200 -0
  157. forgepair-1.0.0/aider/resources/__init__.py +3 -0
  158. forgepair-1.0.0/aider/resources/model-metadata.json +1011 -0
  159. forgepair-1.0.0/aider/resources/model-settings.yml +3260 -0
  160. forgepair-1.0.0/aider/run_cmd.py +132 -0
  161. forgepair-1.0.0/aider/scrape.py +284 -0
  162. forgepair-1.0.0/aider/sendchat.py +61 -0
  163. forgepair-1.0.0/aider/special.py +203 -0
  164. forgepair-1.0.0/aider/urls.py +17 -0
  165. forgepair-1.0.0/aider/utils.py +348 -0
  166. forgepair-1.0.0/aider/versioncheck.py +113 -0
  167. forgepair-1.0.0/aider/voice.py +187 -0
  168. forgepair-1.0.0/aider/waiting.py +221 -0
  169. forgepair-1.0.0/aider/watch.py +318 -0
  170. forgepair-1.0.0/aider/watch_prompts.py +12 -0
  171. forgepair-1.0.0/aider/website/Gemfile +8 -0
  172. forgepair-1.0.0/aider/website/_includes/blame.md +162 -0
  173. forgepair-1.0.0/aider/website/_includes/get-started.md +22 -0
  174. forgepair-1.0.0/aider/website/_includes/help-tip.md +5 -0
  175. forgepair-1.0.0/aider/website/_includes/help.md +24 -0
  176. forgepair-1.0.0/aider/website/_includes/install.md +5 -0
  177. forgepair-1.0.0/aider/website/_includes/keys.md +4 -0
  178. forgepair-1.0.0/aider/website/_includes/model-warnings.md +67 -0
  179. forgepair-1.0.0/aider/website/_includes/multi-line.md +22 -0
  180. forgepair-1.0.0/aider/website/_includes/python-m-aider.md +5 -0
  181. forgepair-1.0.0/aider/website/_includes/recording.css +228 -0
  182. forgepair-1.0.0/aider/website/_includes/recording.md +34 -0
  183. forgepair-1.0.0/aider/website/_includes/replit-pipx.md +9 -0
  184. forgepair-1.0.0/aider/website/_includes/works-best.md +1 -0
  185. forgepair-1.0.0/aider/website/_sass/custom/custom.scss +103 -0
  186. forgepair-1.0.0/aider/website/docs/config/adv-model-settings.md +3431 -0
  187. forgepair-1.0.0/aider/website/docs/config/aider_conf.md +536 -0
  188. forgepair-1.0.0/aider/website/docs/config/api-keys.md +90 -0
  189. forgepair-1.0.0/aider/website/docs/config/dotenv.md +490 -0
  190. forgepair-1.0.0/aider/website/docs/config/editor.md +127 -0
  191. forgepair-1.0.0/aider/website/docs/config/model-aliases.md +105 -0
  192. forgepair-1.0.0/aider/website/docs/config/options.md +867 -0
  193. forgepair-1.0.0/aider/website/docs/config/reasoning.md +210 -0
  194. forgepair-1.0.0/aider/website/docs/config.md +44 -0
  195. forgepair-1.0.0/aider/website/docs/faq.md +384 -0
  196. forgepair-1.0.0/aider/website/docs/git.md +76 -0
  197. forgepair-1.0.0/aider/website/docs/index.md +47 -0
  198. forgepair-1.0.0/aider/website/docs/install/codespaces.md +39 -0
  199. forgepair-1.0.0/aider/website/docs/install/docker.md +57 -0
  200. forgepair-1.0.0/aider/website/docs/install/optional.md +100 -0
  201. forgepair-1.0.0/aider/website/docs/install/replit.md +8 -0
  202. forgepair-1.0.0/aider/website/docs/install.md +115 -0
  203. forgepair-1.0.0/aider/website/docs/languages.md +264 -0
  204. forgepair-1.0.0/aider/website/docs/legal/contributor-agreement.md +111 -0
  205. forgepair-1.0.0/aider/website/docs/legal/privacy.md +104 -0
  206. forgepair-1.0.0/aider/website/docs/llms/anthropic.md +77 -0
  207. forgepair-1.0.0/aider/website/docs/llms/azure.md +48 -0
  208. forgepair-1.0.0/aider/website/docs/llms/bedrock.md +132 -0
  209. forgepair-1.0.0/aider/website/docs/llms/cohere.md +34 -0
  210. forgepair-1.0.0/aider/website/docs/llms/deepseek.md +32 -0
  211. forgepair-1.0.0/aider/website/docs/llms/gemini.md +37 -0
  212. forgepair-1.0.0/aider/website/docs/llms/github.md +171 -0
  213. forgepair-1.0.0/aider/website/docs/llms/groq.md +36 -0
  214. forgepair-1.0.0/aider/website/docs/llms/lm-studio.md +39 -0
  215. forgepair-1.0.0/aider/website/docs/llms/ollama.md +75 -0
  216. forgepair-1.0.0/aider/website/docs/llms/openai-compat.md +39 -0
  217. forgepair-1.0.0/aider/website/docs/llms/openai.md +58 -0
  218. forgepair-1.0.0/aider/website/docs/llms/openrouter.md +78 -0
  219. forgepair-1.0.0/aider/website/docs/llms/other.md +117 -0
  220. forgepair-1.0.0/aider/website/docs/llms/vertex.md +50 -0
  221. forgepair-1.0.0/aider/website/docs/llms/warnings.md +10 -0
  222. forgepair-1.0.0/aider/website/docs/llms/xai.md +53 -0
  223. forgepair-1.0.0/aider/website/docs/llms.md +54 -0
  224. forgepair-1.0.0/aider/website/docs/more/analytics.md +127 -0
  225. forgepair-1.0.0/aider/website/docs/more/edit-formats.md +116 -0
  226. forgepair-1.0.0/aider/website/docs/more/infinite-output.md +258 -0
  227. forgepair-1.0.0/aider/website/docs/more-info.md +8 -0
  228. forgepair-1.0.0/aider/website/docs/recordings/auto-accept-architect.md +31 -0
  229. forgepair-1.0.0/aider/website/docs/recordings/dont-drop-original-read-files.md +35 -0
  230. forgepair-1.0.0/aider/website/docs/recordings/index.md +21 -0
  231. forgepair-1.0.0/aider/website/docs/recordings/model-accepts-settings.md +69 -0
  232. forgepair-1.0.0/aider/website/docs/recordings/tree-sitter-language-pack.md +80 -0
  233. forgepair-1.0.0/aider/website/docs/repomap.md +112 -0
  234. forgepair-1.0.0/aider/website/docs/scripting.md +136 -0
  235. forgepair-1.0.0/aider/website/docs/troubleshooting/aider-not-found.md +24 -0
  236. forgepair-1.0.0/aider/website/docs/troubleshooting/edit-errors.md +76 -0
  237. forgepair-1.0.0/aider/website/docs/troubleshooting/imports.md +62 -0
  238. forgepair-1.0.0/aider/website/docs/troubleshooting/models-and-keys.md +54 -0
  239. forgepair-1.0.0/aider/website/docs/troubleshooting/support.md +79 -0
  240. forgepair-1.0.0/aider/website/docs/troubleshooting/token-limits.md +96 -0
  241. forgepair-1.0.0/aider/website/docs/troubleshooting/warnings.md +12 -0
  242. forgepair-1.0.0/aider/website/docs/troubleshooting.md +11 -0
  243. forgepair-1.0.0/aider/website/docs/usage/browser.md +57 -0
  244. forgepair-1.0.0/aider/website/docs/usage/caching.md +49 -0
  245. forgepair-1.0.0/aider/website/docs/usage/commands.md +133 -0
  246. forgepair-1.0.0/aider/website/docs/usage/conventions.md +119 -0
  247. forgepair-1.0.0/aider/website/docs/usage/copypaste.md +121 -0
  248. forgepair-1.0.0/aider/website/docs/usage/images-urls.md +48 -0
  249. forgepair-1.0.0/aider/website/docs/usage/lint-test.md +118 -0
  250. forgepair-1.0.0/aider/website/docs/usage/modes.md +262 -0
  251. forgepair-1.0.0/aider/website/docs/usage/not-code.md +179 -0
  252. forgepair-1.0.0/aider/website/docs/usage/notifications.md +87 -0
  253. forgepair-1.0.0/aider/website/docs/usage/tips.md +79 -0
  254. forgepair-1.0.0/aider/website/docs/usage/tutorials.md +30 -0
  255. forgepair-1.0.0/aider/website/docs/usage/voice.md +121 -0
  256. forgepair-1.0.0/aider/website/docs/usage/watch.md +294 -0
  257. forgepair-1.0.0/aider/website/docs/usage.md +92 -0
  258. forgepair-1.0.0/aider/website/share/index.md +101 -0
  259. forgepair-1.0.0/benchmark/Dockerfile +64 -0
  260. forgepair-1.0.0/benchmark/README.md +146 -0
  261. forgepair-1.0.0/benchmark/__init__.py +0 -0
  262. forgepair-1.0.0/benchmark/benchmark.py +1059 -0
  263. forgepair-1.0.0/benchmark/clone-exercism.sh +20 -0
  264. forgepair-1.0.0/benchmark/cpp-test.sh +11 -0
  265. forgepair-1.0.0/benchmark/docker.sh +19 -0
  266. forgepair-1.0.0/benchmark/docker_build.sh +8 -0
  267. forgepair-1.0.0/benchmark/install-docker-ubuntu.sh +63 -0
  268. forgepair-1.0.0/benchmark/npm-test.sh +13 -0
  269. forgepair-1.0.0/benchmark/over_time.py +168 -0
  270. forgepair-1.0.0/benchmark/plot.sh +29 -0
  271. forgepair-1.0.0/benchmark/plots.py +417 -0
  272. forgepair-1.0.0/benchmark/problem_stats.py +355 -0
  273. forgepair-1.0.0/benchmark/prompts.py +16 -0
  274. forgepair-1.0.0/benchmark/refactor_tools.py +209 -0
  275. forgepair-1.0.0/benchmark/rsync.sh +45 -0
  276. forgepair-1.0.0/benchmark/rungrid.py +61 -0
  277. forgepair-1.0.0/benchmark/swe-bench-lite.txt +7 -0
  278. forgepair-1.0.0/benchmark/swe-bench.txt +7 -0
  279. forgepair-1.0.0/benchmark/swe_bench.py +131 -0
  280. forgepair-1.0.0/benchmark/test_benchmark.py +47 -0
  281. forgepair-1.0.0/docker/Dockerfile +80 -0
  282. forgepair-1.0.0/forgepair.egg-info/PKG-INFO +563 -0
  283. forgepair-1.0.0/forgepair.egg-info/SOURCES.txt +427 -0
  284. forgepair-1.0.0/forgepair.egg-info/dependency_links.txt +1 -0
  285. forgepair-1.0.0/forgepair.egg-info/entry_points.txt +3 -0
  286. forgepair-1.0.0/forgepair.egg-info/requires.txt +400 -0
  287. forgepair-1.0.0/forgepair.egg-info/scm_file_list.json +713 -0
  288. forgepair-1.0.0/forgepair.egg-info/scm_version.json +8 -0
  289. forgepair-1.0.0/forgepair.egg-info/top_level.txt +1 -0
  290. forgepair-1.0.0/pyproject.toml +54 -0
  291. forgepair-1.0.0/pytest.ini +12 -0
  292. forgepair-1.0.0/requirements/common-constraints.txt +766 -0
  293. forgepair-1.0.0/requirements/pydub.in +2 -0
  294. forgepair-1.0.0/requirements/python-compat.in +11 -0
  295. forgepair-1.0.0/requirements/requirements-browser.in +1 -0
  296. forgepair-1.0.0/requirements/requirements-browser.txt +169 -0
  297. forgepair-1.0.0/requirements/requirements-dev.in +19 -0
  298. forgepair-1.0.0/requirements/requirements-dev.txt +360 -0
  299. forgepair-1.0.0/requirements/requirements-help.in +13 -0
  300. forgepair-1.0.0/requirements/requirements-help.txt +496 -0
  301. forgepair-1.0.0/requirements/requirements-playwright.in +1 -0
  302. forgepair-1.0.0/requirements/requirements-playwright.txt +18 -0
  303. forgepair-1.0.0/requirements/requirements.in +52 -0
  304. forgepair-1.0.0/requirements/tree-sitter.in +3 -0
  305. forgepair-1.0.0/requirements.txt +560 -0
  306. forgepair-1.0.0/scripts/30k-image.py +239 -0
  307. forgepair-1.0.0/scripts/Dockerfile.jekyll +20 -0
  308. forgepair-1.0.0/scripts/__init__.py +0 -0
  309. forgepair-1.0.0/scripts/blame.py +296 -0
  310. forgepair-1.0.0/scripts/clean_metadata.py +258 -0
  311. forgepair-1.0.0/scripts/dl_icons.py +59 -0
  312. forgepair-1.0.0/scripts/history_prompts.py +26 -0
  313. forgepair-1.0.0/scripts/homepage.py +615 -0
  314. forgepair-1.0.0/scripts/issues.py +811 -0
  315. forgepair-1.0.0/scripts/jekyll_build.sh +4 -0
  316. forgepair-1.0.0/scripts/jekyll_run.sh +16 -0
  317. forgepair-1.0.0/scripts/logo_svg.py +174 -0
  318. forgepair-1.0.0/scripts/my_models.py +98 -0
  319. forgepair-1.0.0/scripts/pip-compile.sh +54 -0
  320. forgepair-1.0.0/scripts/recording_audio.py +338 -0
  321. forgepair-1.0.0/scripts/redact-cast.py +62 -0
  322. forgepair-1.0.0/scripts/tmux_record.sh +18 -0
  323. forgepair-1.0.0/scripts/tsl_pack_langs.py +145 -0
  324. forgepair-1.0.0/scripts/update-blame.sh +8 -0
  325. forgepair-1.0.0/scripts/update-docs.sh +34 -0
  326. forgepair-1.0.0/scripts/update-history.py +162 -0
  327. forgepair-1.0.0/scripts/update_model_lists.py +108 -0
  328. forgepair-1.0.0/scripts/versionbump.py +175 -0
  329. forgepair-1.0.0/scripts/yank-old-versions.py +51 -0
  330. forgepair-1.0.0/setup.cfg +4 -0
  331. forgepair-1.0.0/tests/__init__.py +0 -0
  332. forgepair-1.0.0/tests/basic/__init__.py +0 -0
  333. forgepair-1.0.0/tests/basic/test_agent_coder.py +231 -0
  334. forgepair-1.0.0/tests/basic/test_analytics.py +136 -0
  335. forgepair-1.0.0/tests/basic/test_aws_credentials.py +169 -0
  336. forgepair-1.0.0/tests/basic/test_coder.py +1781 -0
  337. forgepair-1.0.0/tests/basic/test_commands.py +2226 -0
  338. forgepair-1.0.0/tests/basic/test_deprecated.py +140 -0
  339. forgepair-1.0.0/tests/basic/test_editblock.py +618 -0
  340. forgepair-1.0.0/tests/basic/test_editor.py +159 -0
  341. forgepair-1.0.0/tests/basic/test_exceptions.py +104 -0
  342. forgepair-1.0.0/tests/basic/test_find_or_blocks.py +115 -0
  343. forgepair-1.0.0/tests/basic/test_history.py +120 -0
  344. forgepair-1.0.0/tests/basic/test_io.py +610 -0
  345. forgepair-1.0.0/tests/basic/test_issues_triage.py +195 -0
  346. forgepair-1.0.0/tests/basic/test_linter.py +84 -0
  347. forgepair-1.0.0/tests/basic/test_main.py +1565 -0
  348. forgepair-1.0.0/tests/basic/test_mcp_commands.py +146 -0
  349. forgepair-1.0.0/tests/basic/test_mcp_config.py +309 -0
  350. forgepair-1.0.0/tests/basic/test_mcp_manager.py +520 -0
  351. forgepair-1.0.0/tests/basic/test_model_info_manager.py +80 -0
  352. forgepair-1.0.0/tests/basic/test_models.py +758 -0
  353. forgepair-1.0.0/tests/basic/test_onboarding.py +437 -0
  354. forgepair-1.0.0/tests/basic/test_openrouter.py +73 -0
  355. forgepair-1.0.0/tests/basic/test_packaging_identity.py +57 -0
  356. forgepair-1.0.0/tests/basic/test_patch.py +347 -0
  357. forgepair-1.0.0/tests/basic/test_reasoning.py +609 -0
  358. forgepair-1.0.0/tests/basic/test_repo.py +716 -0
  359. forgepair-1.0.0/tests/basic/test_repomap.py +510 -0
  360. forgepair-1.0.0/tests/basic/test_report.py +166 -0
  361. forgepair-1.0.0/tests/basic/test_run_cmd.py +11 -0
  362. forgepair-1.0.0/tests/basic/test_sanity_check_repo.py +234 -0
  363. forgepair-1.0.0/tests/basic/test_scripting.py +39 -0
  364. forgepair-1.0.0/tests/basic/test_sendchat.py +193 -0
  365. forgepair-1.0.0/tests/basic/test_special.py +76 -0
  366. forgepair-1.0.0/tests/basic/test_ssl_verification.py +84 -0
  367. forgepair-1.0.0/tests/basic/test_udiff.py +119 -0
  368. forgepair-1.0.0/tests/basic/test_urls.py +15 -0
  369. forgepair-1.0.0/tests/basic/test_utils.py +15 -0
  370. forgepair-1.0.0/tests/basic/test_voice.py +103 -0
  371. forgepair-1.0.0/tests/basic/test_watch.py +166 -0
  372. forgepair-1.0.0/tests/basic/test_wholefile.py +359 -0
  373. forgepair-1.0.0/tests/browser/test_browser.py +34 -0
  374. forgepair-1.0.0/tests/fixtures/chat-history-search-replace-gold.txt +27810 -0
  375. forgepair-1.0.0/tests/fixtures/chat-history.md +99961 -0
  376. forgepair-1.0.0/tests/fixtures/languages/arduino/test.ino +21 -0
  377. forgepair-1.0.0/tests/fixtures/languages/bash/test.sh +19 -0
  378. forgepair-1.0.0/tests/fixtures/languages/c/test.c +21 -0
  379. forgepair-1.0.0/tests/fixtures/languages/chatito/test.chatito +20 -0
  380. forgepair-1.0.0/tests/fixtures/languages/clojure/test.clj +6 -0
  381. forgepair-1.0.0/tests/fixtures/languages/commonlisp/test.lisp +17 -0
  382. forgepair-1.0.0/tests/fixtures/languages/cpp/test.cpp +6 -0
  383. forgepair-1.0.0/tests/fixtures/languages/csharp/test.cs +39 -0
  384. forgepair-1.0.0/tests/fixtures/languages/d/test.d +26 -0
  385. forgepair-1.0.0/tests/fixtures/languages/dart/test.dart +21 -0
  386. forgepair-1.0.0/tests/fixtures/languages/elisp/test.el +25 -0
  387. forgepair-1.0.0/tests/fixtures/languages/elixir/test.ex +5 -0
  388. forgepair-1.0.0/tests/fixtures/languages/elm/test.elm +59 -0
  389. forgepair-1.0.0/tests/fixtures/languages/gleam/test.gleam +10 -0
  390. forgepair-1.0.0/tests/fixtures/languages/go/test.go +42 -0
  391. forgepair-1.0.0/tests/fixtures/languages/haskell/test.hs +7 -0
  392. forgepair-1.0.0/tests/fixtures/languages/hcl/test.tf +52 -0
  393. forgepair-1.0.0/tests/fixtures/languages/java/test.java +16 -0
  394. forgepair-1.0.0/tests/fixtures/languages/javascript/test.js +26 -0
  395. forgepair-1.0.0/tests/fixtures/languages/kotlin/test.kt +16 -0
  396. forgepair-1.0.0/tests/fixtures/languages/lua/test.lua +25 -0
  397. forgepair-1.0.0/tests/fixtures/languages/matlab/test.m +42 -0
  398. forgepair-1.0.0/tests/fixtures/languages/ocaml/test.ml +19 -0
  399. forgepair-1.0.0/tests/fixtures/languages/ocaml_interface/test.mli +14 -0
  400. forgepair-1.0.0/tests/fixtures/languages/php/test.php +5 -0
  401. forgepair-1.0.0/tests/fixtures/languages/pony/test.pony +8 -0
  402. forgepair-1.0.0/tests/fixtures/languages/properties/test.properties +14 -0
  403. forgepair-1.0.0/tests/fixtures/languages/python/test.py +28 -0
  404. forgepair-1.0.0/tests/fixtures/languages/ql/test.ql +3 -0
  405. forgepair-1.0.0/tests/fixtures/languages/r/test.r +17 -0
  406. forgepair-1.0.0/tests/fixtures/languages/racket/test.rkt +8 -0
  407. forgepair-1.0.0/tests/fixtures/languages/ruby/test.rb +3 -0
  408. forgepair-1.0.0/tests/fixtures/languages/rust/test.rs +33 -0
  409. forgepair-1.0.0/tests/fixtures/languages/scala/test.scala +61 -0
  410. forgepair-1.0.0/tests/fixtures/languages/solidity/test.sol +21 -0
  411. forgepair-1.0.0/tests/fixtures/languages/swift/test.swift +18 -0
  412. forgepair-1.0.0/tests/fixtures/languages/tsx/test.tsx +30 -0
  413. forgepair-1.0.0/tests/fixtures/languages/typescript/test.ts +3 -0
  414. forgepair-1.0.0/tests/fixtures/languages/udev/test.rules +22 -0
  415. forgepair-1.0.0/tests/fixtures/languages/zig/test.zig +10 -0
  416. forgepair-1.0.0/tests/fixtures/mcp_servers/auth_http_server.py +56 -0
  417. forgepair-1.0.0/tests/fixtures/mcp_servers/echo_server.py +22 -0
  418. forgepair-1.0.0/tests/fixtures/mcp_servers/resources_prompts_server.py +33 -0
  419. forgepair-1.0.0/tests/fixtures/mcp_servers/single_instance_server.py +69 -0
  420. forgepair-1.0.0/tests/fixtures/sample-code-base/sample.js +50 -0
  421. forgepair-1.0.0/tests/fixtures/sample-code-base/sample.py +68 -0
  422. forgepair-1.0.0/tests/fixtures/sample-code-base-repo-map.txt +55 -0
  423. forgepair-1.0.0/tests/fixtures/watch.js +38 -0
  424. forgepair-1.0.0/tests/fixtures/watch.lisp +19 -0
  425. forgepair-1.0.0/tests/fixtures/watch.py +21 -0
  426. forgepair-1.0.0/tests/fixtures/watch_question.js +11 -0
  427. forgepair-1.0.0/tests/help/test_help.py +147 -0
  428. forgepair-1.0.0/tests/scrape/test_playwright_disable.py +139 -0
  429. forgepair-1.0.0/tests/scrape/test_scrape.py +196 -0
@@ -0,0 +1,10 @@
1
+ .BC.*
2
+ tmp*
3
+ *~
4
+ OLD*
5
+ *.pyc
6
+ .DS_Store
7
+ .env
8
+ .venv
9
+ .aider.*
10
+ build
@@ -0,0 +1,3 @@
1
+ [flake8]
2
+ ignore = E203,W503
3
+ max-line-length = 100
@@ -0,0 +1,21 @@
1
+ name: Question or bug report
2
+ description: Submit a question or bug report to help us improve aider
3
+ labels: []
4
+ body:
5
+ - type: textarea
6
+ attributes:
7
+ label: Issue
8
+ description: Please describe your problem or question.
9
+ validations:
10
+ required: true
11
+ - type: textarea
12
+ attributes:
13
+ label: Version and model info
14
+ description: Please include aider version, model being used (`gpt-4-xxx`, etc) and any other switches or config settings that are active.
15
+ placeholder: |
16
+ Aider v0.XX.Y
17
+ Model: gpt-N-... using ???? edit format
18
+ Git repo: .git with ### files
19
+ Repo-map: using #### tokens
20
+ validations:
21
+ required: false
@@ -0,0 +1,100 @@
1
+ name: Check PyPI Version
2
+
3
+ # Confirms that ForgePair's latest git tag is actually the version PyPI
4
+ # currently serves as the latest release -- i.e. that "the release worked"
5
+ # is true, not just that continuous-release.yml *ran* successfully.
6
+ #
7
+ # Deliberately does NOT `pip install forgepair` and build it: aider's
8
+ # original version of this check did that, and it fails on unrelated build-
9
+ # environment issues (e.g. a missing/incompatible setuptools.build_meta
10
+ # backend) that have nothing to do with whether the release itself is
11
+ # healthy -- see the investigation notes in STATUS.md for a concrete
12
+ # example. Querying PyPI's own JSON API is enough to answer "does PyPI's
13
+ # latest match our latest tag" without doing a full package build, and
14
+ # runs identically on every OS (no bash/PowerShell duplication needed).
15
+ #
16
+ # Skips cleanly, not with a build-tool failure, if nothing has been
17
+ # published yet (continuous-release.yml is still in dry-run mode as of
18
+ # this writing -- see STATUS.md's "Known gaps" section).
19
+
20
+ on:
21
+ schedule:
22
+ # Once a day at midnight UTC
23
+ - cron: '0 0 * * *'
24
+ workflow_dispatch: # Allows manual triggering
25
+
26
+ jobs:
27
+ check_version:
28
+ runs-on: ubuntu-latest
29
+
30
+ steps:
31
+ - name: Check out code
32
+ uses: actions/checkout@v4
33
+ with:
34
+ fetch-depth: 0 # Fetch all history for all tags
35
+
36
+ - name: Get latest tag
37
+ id: latest_tag
38
+ run: |
39
+ set -x
40
+ git fetch --tags origin main
41
+ # Latest tag strictly matching vX.Y.Z (no .dev/.rc suffixes)
42
+ latest_tag=$(git tag --sort=-v:refname | grep -P '^v\d+\.\d+\.\d+$' | head -n 1)
43
+
44
+ if [ -z "$latest_tag" ]; then
45
+ echo "No vX.Y.Z tags found yet -- nothing to check against. Skipping."
46
+ echo "has_tag=false" >> "$GITHUB_OUTPUT"
47
+ exit 0
48
+ fi
49
+
50
+ echo "has_tag=true" >> "$GITHUB_OUTPUT"
51
+ echo "tag=${latest_tag#v}" >> "$GITHUB_OUTPUT"
52
+ echo "Latest tag: $latest_tag"
53
+
54
+ - name: Query PyPI for the latest published version
55
+ id: pypi_version
56
+ if: steps.latest_tag.outputs.has_tag == 'true'
57
+ run: |
58
+ set -x
59
+ http_status=$(curl -s -o /tmp/pypi.json -w '%{http_code}' https://pypi.org/pypi/forgepair/json)
60
+
61
+ if [ "$http_status" = "404" ]; then
62
+ echo "forgepair is not on PyPI yet (404) -- nothing published, skipping."
63
+ echo "published=false" >> "$GITHUB_OUTPUT"
64
+ exit 0
65
+ fi
66
+
67
+ if [ "$http_status" != "200" ]; then
68
+ echo "Error: PyPI API returned unexpected status $http_status"
69
+ cat /tmp/pypi.json
70
+ exit 1
71
+ fi
72
+
73
+ pypi_version=$(python3 -c "import json; print(json.load(open('/tmp/pypi.json'))['info']['version'])")
74
+
75
+ if [ -z "$pypi_version" ]; then
76
+ echo "Error: could not read version from PyPI API response"
77
+ cat /tmp/pypi.json
78
+ exit 1
79
+ fi
80
+
81
+ echo "published=true" >> "$GITHUB_OUTPUT"
82
+ echo "version=$pypi_version" >> "$GITHUB_OUTPUT"
83
+ echo "PyPI's latest version: $pypi_version"
84
+
85
+ - name: Compare versions
86
+ if: steps.latest_tag.outputs.has_tag == 'true' && steps.pypi_version.outputs.published == 'true'
87
+ run: |
88
+ tag_version="${{ steps.latest_tag.outputs.tag }}"
89
+ pypi_version="${{ steps.pypi_version.outputs.version }}"
90
+
91
+ echo "Latest git tag: $tag_version"
92
+ echo "PyPI latest: $pypi_version"
93
+
94
+ if [ "$tag_version" != "$pypi_version" ]; then
95
+ echo "Error: PyPI's latest published version ($pypi_version) does not match the latest git tag ($tag_version)."
96
+ echo "Either the release for $tag_version never published successfully, or something later got yanked."
97
+ exit 1
98
+ fi
99
+
100
+ echo "Versions match."
@@ -0,0 +1,76 @@
1
+ name: Continuous Release (dry run)
2
+
3
+ # Computes what the next release tag/version WOULD be on every merge to
4
+ # main, and reports it in the workflow summary -- without actually
5
+ # creating the tag or triggering a PyPI publish.
6
+ #
7
+ # This exists to close the exact gap that hurt upstream aider: commits
8
+ # landed on main for months with no corresponding release, so users
9
+ # never got the fixes. Once ForgePair is ready to publish real packages
10
+ # (see BUILD_PLAN.md Phase 2 item 4), flip DRY_RUN below to false --
11
+ # at that point this workflow will actually create and push the
12
+ # `vX.Y.Z` tag, which is release.yml's existing trigger for building
13
+ # and publishing to PyPI (that workflow is unchanged and already
14
+ # gated on the PYPI_API_TOKEN secret, which is intentionally not
15
+ # configured yet).
16
+ #
17
+ # Version bump policy (dry run and once live): patch bump on every
18
+ # merge to main. This is the aider-established policy already used by
19
+ # setuptools_scm (see pyproject.toml) -- ForgePair keeps it rather than
20
+ # inventing conventional-commit-based bumping, to stay compatible with
21
+ # how the fork's own version numbers are already being derived from
22
+ # git tags.
23
+
24
+ on:
25
+ push:
26
+ branches:
27
+ - main
28
+ paths-ignore:
29
+ - 'aider/website/**'
30
+ - 'README.md'
31
+ - 'HISTORY.md'
32
+ - 'CHANGES.md'
33
+
34
+ env:
35
+ DRY_RUN: "true"
36
+
37
+ jobs:
38
+ compute-next-version:
39
+ runs-on: ubuntu-latest
40
+ steps:
41
+ - name: Check out code
42
+ uses: actions/checkout@v4
43
+ with:
44
+ fetch-depth: 0 # need full history + tags for version computation
45
+
46
+ - name: Compute next version
47
+ id: next_version
48
+ run: |
49
+ set -x
50
+ latest_tag=$(git tag --sort=-v:refname | grep -P '^v\d+\.\d+\.\d+$' | head -n 1)
51
+ if [ -z "$latest_tag" ]; then
52
+ echo "No existing vX.Y.Z tag found -- would start at v0.1.0"
53
+ next="0.1.0"
54
+ else
55
+ tag_num=${latest_tag#v}
56
+ IFS='.' read -r major minor patch <<< "$tag_num"
57
+ next="${major}.${minor}.$((patch + 1))"
58
+ fi
59
+ echo "next_version=$next" >> "$GITHUB_OUTPUT"
60
+ echo "### Next release version: v${next}" >> "$GITHUB_STEP_SUMMARY"
61
+ echo "" >> "$GITHUB_STEP_SUMMARY"
62
+ if [ "$DRY_RUN" = "true" ]; then
63
+ echo "DRY RUN -- no tag created, no release published." >> "$GITHUB_STEP_SUMMARY"
64
+ echo "When ready to go live: set DRY_RUN to false in this workflow file," >> "$GITHUB_STEP_SUMMARY"
65
+ echo "add the PYPI_API_TOKEN repo secret, and this job will start" >> "$GITHUB_STEP_SUMMARY"
66
+ echo "pushing real vX.Y.Z tags, which trigger release.yml's publish step." >> "$GITHUB_STEP_SUMMARY"
67
+ fi
68
+
69
+ - name: Create and push tag
70
+ if: env.DRY_RUN != 'true'
71
+ run: |
72
+ set -x
73
+ git config user.name "github-actions[bot]"
74
+ git config user.email "github-actions[bot]@users.noreply.github.com"
75
+ git tag "v${{ steps.next_version.outputs.next_version }}"
76
+ git push origin "v${{ steps.next_version.outputs.next_version }}"
@@ -0,0 +1,69 @@
1
+ name: Docker Build Test
2
+
3
+ # Validates that docker/Dockerfile still builds successfully on every
4
+ # push/PR. Build-only (push: false) -- does not require or use any
5
+ # Docker Hub credentials, and never publishes anything. This is a
6
+ # deliberate choice (see CHANGES.md): the upstream version of this
7
+ # workflow attempted to push a `:dev` tag to Docker Hub on every push
8
+ # to main using DOCKERHUB_USERNAME/DOCKERHUB_PASSWORD secrets, which
9
+ # forks don't inherit -- so it failed on every run with "Username and
10
+ # password required" until fixed here. If/when ForgePair is ready to
11
+ # publish real Docker images, see docker-release.yml (tag-triggered,
12
+ # separately gated) rather than re-enabling pushes here.
13
+ #
14
+ # Performance notes (see CHANGES.md -- this workflow was originally
15
+ # taking 20+ minutes per run):
16
+ # - amd64 only, not amd64+arm64. arm64 here means QEMU-emulated
17
+ # software instruction translation, not real hardware -- compiling
18
+ # this project's heavier native dependencies (tree-sitter, etc.)
19
+ # under emulation is what made this slow. Since this workflow only
20
+ # needs to answer "does the Dockerfile still build", not "produce a
21
+ # real publishable arm64 image", amd64-only is sufficient. Real
22
+ # multi-arch correctness only matters once images are actually
23
+ # published -- see docker-release.yml, which still builds both
24
+ # platforms for that reason.
25
+ # - GitHub Actions layer cache (cache-from/cache-to: type=gha) so
26
+ # unchanged layers (base image, most pip installs) are reused across
27
+ # runs instead of rebuilding from scratch every time. First run after
28
+ # this change will still be a full build; subsequent runs should be
29
+ # much faster as long as the Dockerfile/dependencies haven't changed.
30
+ # - The two build targets (aider, aider-full) run as a matrix so they
31
+ # build concurrently instead of sequentially.
32
+ #
33
+ # No paths-ignore filter, deliberately: this check is required by
34
+ # branch protection, and a required check a path filter can skip
35
+ # permanently blocks matching PRs (confirmed directly, see CHANGES.md).
36
+
37
+ on:
38
+ push:
39
+ branches:
40
+ - main
41
+ pull_request:
42
+ branches:
43
+ - main
44
+
45
+ jobs:
46
+ docker_build_test:
47
+ runs-on: ubuntu-latest
48
+ strategy:
49
+ matrix:
50
+ target: [aider, aider-full]
51
+ steps:
52
+ - name: Checkout code
53
+ uses: actions/checkout@v4
54
+ with:
55
+ fetch-depth: 0
56
+
57
+ - name: Set up Docker Buildx
58
+ uses: docker/setup-buildx-action@v3
59
+
60
+ - name: Build Docker image (no push)
61
+ uses: docker/build-push-action@v5
62
+ with:
63
+ context: .
64
+ file: ./docker/Dockerfile
65
+ platforms: linux/amd64
66
+ push: false
67
+ target: ${{ matrix.target }}
68
+ cache-from: type=gha,scope=${{ matrix.target }}
69
+ cache-to: type=gha,mode=max,scope=${{ matrix.target }}
@@ -0,0 +1,60 @@
1
+ name: Docker Release
2
+
3
+ # Only runs when a real vX.Y.Z tag is pushed. Currently dormant: this
4
+ # repo's continuous-release.yml workflow is in dry-run mode and does
5
+ # not create/push tags yet (see BUILD_PLAN.md Phase 2 item 4), so this
6
+ # workflow never actually fires today. When continuous-release.yml is
7
+ # flipped to live, this will start running and WILL fail immediately
8
+ # unless DOCKERHUB_USERNAME/DOCKERHUB_PASSWORD secrets are added first
9
+ # (same gating consideration as release.yml's PyPI publish step).
10
+
11
+ on:
12
+ workflow_dispatch:
13
+ push:
14
+ tags:
15
+ - 'v[0-9]+.[0-9]+.[0-9]+'
16
+
17
+ jobs:
18
+ docker_build_and_push:
19
+ runs-on: ubuntu-latest
20
+ steps:
21
+ - name: Checkout code
22
+ uses: actions/checkout@v4
23
+ with:
24
+ fetch-depth: 0
25
+
26
+ - name: Set up QEMU
27
+ uses: docker/setup-qemu-action@v3
28
+
29
+ - name: Set up Docker Buildx
30
+ uses: docker/setup-buildx-action@v3
31
+
32
+ - name: Login to DockerHub
33
+ uses: docker/login-action@v3
34
+ with:
35
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
36
+ password: ${{ secrets.DOCKERHUB_PASSWORD }}
37
+
38
+ - name: Build and push Docker images
39
+ uses: docker/build-push-action@v5
40
+ with:
41
+ context: .
42
+ file: ./docker/Dockerfile
43
+ platforms: linux/amd64,linux/arm64
44
+ push: true
45
+ tags: |
46
+ ${{ secrets.DOCKERHUB_USERNAME }}/aider:${{ github.ref_name }}
47
+ ${{ secrets.DOCKERHUB_USERNAME }}/aider:latest
48
+ target: aider
49
+
50
+ - name: Build and push Docker full image
51
+ uses: docker/build-push-action@v5
52
+ with:
53
+ context: .
54
+ file: ./docker/Dockerfile
55
+ platforms: linux/amd64,linux/arm64
56
+ push: true
57
+ tags: |
58
+ ${{ secrets.DOCKERHUB_USERNAME }}/aider-full:${{ github.ref_name }}
59
+ ${{ secrets.DOCKERHUB_USERNAME }}/aider-full:latest
60
+ target: aider-full
@@ -0,0 +1,41 @@
1
+ name: Process GitHub Issues
2
+
3
+ # Automated issue/PR triage. Per SPEC.md section 5 / BUILD_PLAN.md
4
+ # Phase 3: verify-before-redirect duplicate handling (won't close a new
5
+ # crash report as a duplicate unless the canonical issue has evidence
6
+ # of being resolved), report-count-driven severity escalation
7
+ # (high-impact label) instead of silent dedup-closing, feature-request
8
+ # clustering by text similarity, and a rewritten known-issues dashboard
9
+ # issue. See scripts/issues.py's module docstring for the full design
10
+ # rationale vs. upstream's original bot.
11
+
12
+ on:
13
+ schedule:
14
+ - cron: '0 */12 * * *' # Run every 12 hours
15
+ workflow_dispatch: # Allow manual triggers
16
+
17
+ jobs:
18
+ process-issues:
19
+ runs-on: ubuntu-latest
20
+ permissions:
21
+ issues: write # Required to modify issues
22
+
23
+ steps:
24
+ - uses: actions/checkout@v4
25
+
26
+ - name: Set up Python
27
+ uses: actions/setup-python@v5
28
+ with:
29
+ python-version: '3.x'
30
+
31
+ - name: Install dependencies
32
+ run: |
33
+ python -m pip install --upgrade pip
34
+ pip install requests python-dotenv tqdm
35
+
36
+ - name: Run issues script
37
+ env:
38
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
39
+ GITHUB_REPOSITORY_OWNER: ${{ github.repository_owner }}
40
+ GITHUB_REPOSITORY_NAME: ${{ github.event.repository.name }}
41
+ run: python scripts/issues.py --yes
@@ -0,0 +1,88 @@
1
+ name: Model List Freshness Check
2
+
3
+ # Runs scripts/update_model_lists.py --check on a schedule to catch drift
4
+ # in the OPENAI_MODELS/ANTHROPIC_MODELS fast-path lists in aider/models.py
5
+ # (see CHANGES.md Phase 1 and BUILD_PLAN.md Phase 2's tracked sub-item).
6
+ #
7
+ # Phase 1 fixed *how* these lists get regenerated (accurately, from
8
+ # litellm's live data, via one command) but not *when* -- nothing ran
9
+ # the script automatically. This workflow closes that gap: it runs the
10
+ # check weekly and opens an issue if the lists have drifted, so
11
+ # staleness gets surfaced instead of silently accumulating again.
12
+ #
13
+ # This intentionally opens an issue rather than auto-committing the
14
+ # regenerated lists directly to main, so a human reviews the diff
15
+ # (per CONTRIBUTING.md's low-risk-tier review process) before it lands
16
+ # -- even though model list updates are low-risk, an unreviewed bot
17
+ # commit to main is a bigger governance risk than a slightly-stale list
18
+ # for a few days.
19
+
20
+ on:
21
+ schedule:
22
+ # Every Monday at 09:00 UTC
23
+ - cron: '0 9 * * 1'
24
+ workflow_dispatch: # Allows manual triggering
25
+
26
+ permissions:
27
+ issues: write
28
+
29
+ jobs:
30
+ check-model-lists:
31
+ runs-on: ubuntu-latest
32
+ steps:
33
+ - name: Check out code
34
+ uses: actions/checkout@v4
35
+
36
+ - name: Set up Python
37
+ uses: actions/setup-python@v5
38
+ with:
39
+ python-version: "3.x"
40
+
41
+ - name: Install aider (for litellm + aider.models)
42
+ run: |
43
+ python -m pip install --upgrade pip
44
+ pip install -e .
45
+
46
+ - name: Check model list freshness
47
+ id: check
48
+ run: |
49
+ set +e
50
+ python scripts/update_model_lists.py --check
51
+ echo "exit_code=$?" >> "$GITHUB_OUTPUT"
52
+ set -e
53
+
54
+ - name: Open issue if stale
55
+ if: steps.check.outputs.exit_code != '0'
56
+ uses: actions/github-script@v7
57
+ with:
58
+ script: |
59
+ const title = "Model list is stale: run scripts/update_model_lists.py";
60
+ const body = [
61
+ "This is an automated check (`.github/workflows/model-list-freshness.yml`).",
62
+ "",
63
+ "`scripts/update_model_lists.py --check` found that `aider/models.py`'s",
64
+ "OPENAI_MODELS / ANTHROPIC_MODELS fast-path lists are stale relative to",
65
+ "litellm's current bundled model data.",
66
+ "",
67
+ "To fix: run `python scripts/update_model_lists.py`, review the diff,",
68
+ "and open a PR (this falls under CONTRIBUTING.md's low-risk review tier).",
69
+ ].join("\n");
70
+
71
+ const existing = await github.rest.issues.listForRepo({
72
+ owner: context.repo.owner,
73
+ repo: context.repo.repo,
74
+ state: "open",
75
+ labels: "model-list-stale",
76
+ });
77
+ if (existing.data.length > 0) {
78
+ console.log("Issue already open, not creating a duplicate.");
79
+ return;
80
+ }
81
+
82
+ await github.rest.issues.create({
83
+ owner: context.repo.owner,
84
+ repo: context.repo.repo,
85
+ title,
86
+ body,
87
+ labels: ["model-list-stale"],
88
+ });
@@ -0,0 +1,87 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third-party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+
6
+ # Sample workflow for building and deploying a Jekyll site to GitHub Pages
7
+ name: Deploy Jekyll site to Pages
8
+
9
+ on:
10
+ push:
11
+ branches:
12
+ - "main"
13
+ paths:
14
+ - "aider/website/**"
15
+ - ".github/workflows/pages.yml"
16
+
17
+ # Allows you to run this workflow manually from the Actions tab
18
+ workflow_dispatch:
19
+
20
+ # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
21
+ permissions:
22
+ contents: read
23
+ pages: write
24
+ id-token: write
25
+
26
+ # Allow one concurrent deployment
27
+ concurrency:
28
+ group: "pages"
29
+ cancel-in-progress: true
30
+
31
+ jobs:
32
+ # Build job
33
+ build:
34
+ runs-on: ubuntu-latest
35
+ defaults:
36
+ run:
37
+ working-directory: aider/website
38
+ steps:
39
+ - name: Checkout
40
+ uses: actions/checkout@v4
41
+ with:
42
+ fetch-depth: 0
43
+ - name: Setup Ruby
44
+ uses: ruby/setup-ruby@v1
45
+ with:
46
+ ruby-version: '3.3' # Not needed with a .ruby-version file
47
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
48
+ cache-version: 0 # Increment this number if you need to re-download cached gems
49
+ working-directory: '${{ github.workspace }}/aider/website'
50
+ - name: Setup Pages
51
+ id: pages
52
+ uses: actions/configure-pages@v3
53
+ - name: Build with Jekyll
54
+ # Outputs to the './_site' directory by default
55
+ run: bundle exec jekyll build --baseurl "${{ steps.pages.outputs.base_path }}"
56
+ env:
57
+ JEKYLL_ENV: production
58
+ - name: Upload artifact
59
+ uses: actions/upload-pages-artifact@v3
60
+ with:
61
+ path: "aider/website/_site"
62
+
63
+ # Deployment job
64
+ deploy:
65
+ environment:
66
+ name: github-pages
67
+ url: ${{ steps.deployment.outputs.page_url }}
68
+ runs-on: ubuntu-latest
69
+ needs: build
70
+ steps:
71
+ - name: Deploy to GitHub Pages
72
+ id: deployment
73
+ uses: actions/deploy-pages@v4
74
+
75
+ - name: Set up Python 3.12
76
+ uses: actions/setup-python@v5
77
+ with:
78
+ python-version: '3.12'
79
+
80
+ - name: Install linkchecker
81
+ run: |
82
+ python -m pip install --upgrade pip
83
+ python -m pip install linkchecker
84
+
85
+ - name: Run linkchecker
86
+ run: |
87
+ linkchecker --ignore-url='.+\.(mp4|mov|avi)' https://aider.chat
@@ -0,0 +1,48 @@
1
+ ---
2
+ name: pre-commit
3
+ on:
4
+ pull_request:
5
+ push:
6
+ workflow_dispatch:
7
+ jobs:
8
+ pre-commit:
9
+ runs-on: ubuntu-latest
10
+ env:
11
+ RAW_LOG: pre-commit.log
12
+ CS_XML: pre-commit.xml
13
+ steps:
14
+ - run: sudo apt-get update && sudo apt-get install cppcheck uncrustify
15
+ if: false
16
+ - uses: actions/checkout@v4
17
+ - run: python -m pip install pre-commit
18
+ - uses: actions/cache/restore@v4
19
+ with:
20
+ path: ~/.cache/pre-commit/
21
+ key: pre-commit-4|${{ env.pythonLocation }}|${{ hashFiles('.pre-commit-config.yaml') }}
22
+ - name: Run pre-commit hooks
23
+ env:
24
+ SKIP: no-commit-to-branch
25
+ run: |
26
+ set -o pipefail
27
+ pre-commit gc
28
+ pre-commit run --show-diff-on-failure --color=always --all-files | tee ${RAW_LOG}
29
+ - name: Convert Raw Log to Checkstyle format (launch action)
30
+ uses: mdeweerd/logToCheckStyle@v2025.1.1
31
+ if: ${{ failure() }}
32
+ with:
33
+ in: ${{ env.RAW_LOG }}
34
+ # out: ${{ env.CS_XML }}
35
+ - uses: actions/cache/save@v4
36
+ if: ${{ ! cancelled() }}
37
+ with:
38
+ path: ~/.cache/pre-commit/
39
+ key: pre-commit-4|${{ env.pythonLocation }}|${{ hashFiles('.pre-commit-config.yaml') }}
40
+ - name: Provide log as artifact
41
+ uses: actions/upload-artifact@v4
42
+ if: ${{ ! cancelled() }}
43
+ with:
44
+ name: precommit-logs
45
+ path: |
46
+ ${{ env.RAW_LOG }}
47
+ ${{ env.CS_XML }}
48
+ retention-days: 2
@@ -0,0 +1,41 @@
1
+ name: PyPI Release
2
+
3
+ # Publishes to PyPI via Trusted Publishing (OIDC) -- no long-lived
4
+ # PYPI_API_TOKEN secret to store, rotate, or leak. PyPI authenticates
5
+ # this workflow run directly by its GitHub identity (repo + workflow
6
+ # file name), verified against the pending publisher registered at
7
+ # https://pypi.org/manage/account/publishing/ for the `forgepair`
8
+ # project (owner TVick64889, repo forgepair, workflow release.yml).
9
+
10
+ on:
11
+ workflow_dispatch:
12
+ push:
13
+ tags:
14
+ - 'v[0-9]+.[0-9]+.[0-9]+'
15
+
16
+ jobs:
17
+ build_and_publish:
18
+ runs-on: ubuntu-latest
19
+ permissions:
20
+ id-token: write # required for PyPI Trusted Publishing (OIDC)
21
+ steps:
22
+ - name: Checkout code
23
+ uses: actions/checkout@v4
24
+ with:
25
+ fetch-depth: 0
26
+
27
+ - name: Set up Python
28
+ uses: actions/setup-python@v5
29
+ with:
30
+ python-version: 3.x
31
+
32
+ - name: Install build dependencies
33
+ run: |
34
+ python -m pip install --upgrade pip
35
+ pip install build
36
+
37
+ - name: Build
38
+ run: python -m build
39
+
40
+ - name: Publish to PyPI
41
+ uses: pypa/gh-action-pypi-publish@release/v1