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.
- forgepair-1.0.0/.dockerignore +10 -0
- forgepair-1.0.0/.flake8 +3 -0
- forgepair-1.0.0/.github/ISSUE_TEMPLATE/issue.yml +21 -0
- forgepair-1.0.0/.github/workflows/check_pypi_version.yml +100 -0
- forgepair-1.0.0/.github/workflows/continuous-release.yml +76 -0
- forgepair-1.0.0/.github/workflows/docker-build-test.yml +69 -0
- forgepair-1.0.0/.github/workflows/docker-release.yml +60 -0
- forgepair-1.0.0/.github/workflows/issues.yml +41 -0
- forgepair-1.0.0/.github/workflows/model-list-freshness.yml +88 -0
- forgepair-1.0.0/.github/workflows/pages.yml +87 -0
- forgepair-1.0.0/.github/workflows/pre-commit.yml +48 -0
- forgepair-1.0.0/.github/workflows/release.yml +41 -0
- forgepair-1.0.0/.github/workflows/ubuntu-tests.yml +59 -0
- forgepair-1.0.0/.github/workflows/windows-tests.yml +45 -0
- forgepair-1.0.0/.gitignore +21 -0
- forgepair-1.0.0/.pre-commit-config.yaml +23 -0
- forgepair-1.0.0/ARCHITECTURE_REVIEW.md +685 -0
- forgepair-1.0.0/BUILD_PLAN.md +740 -0
- forgepair-1.0.0/CHANGES.md +355 -0
- forgepair-1.0.0/CNAME +1 -0
- forgepair-1.0.0/CONTRIBUTING.md +274 -0
- forgepair-1.0.0/HISTORY.md +1533 -0
- forgepair-1.0.0/LICENSE.txt +202 -0
- forgepair-1.0.0/MANIFEST.in +20 -0
- forgepair-1.0.0/PKG-INFO +563 -0
- forgepair-1.0.0/README.md +189 -0
- forgepair-1.0.0/SPEC.md +246 -0
- forgepair-1.0.0/STATUS.md +460 -0
- forgepair-1.0.0/aider/__init__.py +20 -0
- forgepair-1.0.0/aider/__main__.py +4 -0
- forgepair-1.0.0/aider/_version.py +24 -0
- forgepair-1.0.0/aider/analytics.py +258 -0
- forgepair-1.0.0/aider/args.py +966 -0
- forgepair-1.0.0/aider/args_formatter.py +228 -0
- forgepair-1.0.0/aider/coders/__init__.py +33 -0
- forgepair-1.0.0/aider/coders/agent_coder.py +201 -0
- forgepair-1.0.0/aider/coders/agent_prompts.py +38 -0
- forgepair-1.0.0/aider/coders/architect_coder.py +48 -0
- forgepair-1.0.0/aider/coders/architect_prompts.py +40 -0
- forgepair-1.0.0/aider/coders/ask_coder.py +9 -0
- forgepair-1.0.0/aider/coders/ask_prompts.py +41 -0
- forgepair-1.0.0/aider/coders/base_coder.py +2662 -0
- forgepair-1.0.0/aider/coders/base_prompts.py +60 -0
- forgepair-1.0.0/aider/coders/chat_chunks.py +64 -0
- forgepair-1.0.0/aider/coders/context_coder.py +53 -0
- forgepair-1.0.0/aider/coders/context_prompts.py +75 -0
- forgepair-1.0.0/aider/coders/editblock_coder.py +657 -0
- forgepair-1.0.0/aider/coders/editblock_fenced_coder.py +10 -0
- forgepair-1.0.0/aider/coders/editblock_fenced_prompts.py +143 -0
- forgepair-1.0.0/aider/coders/editblock_prompts.py +172 -0
- forgepair-1.0.0/aider/coders/editor_diff_fenced_coder.py +9 -0
- forgepair-1.0.0/aider/coders/editor_diff_fenced_prompts.py +11 -0
- forgepair-1.0.0/aider/coders/editor_editblock_coder.py +9 -0
- forgepair-1.0.0/aider/coders/editor_editblock_prompts.py +18 -0
- forgepair-1.0.0/aider/coders/editor_whole_coder.py +9 -0
- forgepair-1.0.0/aider/coders/editor_whole_prompts.py +10 -0
- forgepair-1.0.0/aider/coders/help_coder.py +16 -0
- forgepair-1.0.0/aider/coders/help_prompts.py +46 -0
- forgepair-1.0.0/aider/coders/patch_coder.py +706 -0
- forgepair-1.0.0/aider/coders/patch_prompts.py +159 -0
- forgepair-1.0.0/aider/coders/search_replace.py +594 -0
- forgepair-1.0.0/aider/coders/shell.py +37 -0
- forgepair-1.0.0/aider/coders/udiff_coder.py +429 -0
- forgepair-1.0.0/aider/coders/udiff_prompts.py +113 -0
- forgepair-1.0.0/aider/coders/udiff_simple.py +14 -0
- forgepair-1.0.0/aider/coders/udiff_simple_prompts.py +25 -0
- forgepair-1.0.0/aider/coders/wholefile_coder.py +144 -0
- forgepair-1.0.0/aider/coders/wholefile_prompts.py +64 -0
- forgepair-1.0.0/aider/commands.py +1843 -0
- forgepair-1.0.0/aider/copypaste.py +72 -0
- forgepair-1.0.0/aider/deprecated.py +126 -0
- forgepair-1.0.0/aider/diffs.py +128 -0
- forgepair-1.0.0/aider/dump.py +29 -0
- forgepair-1.0.0/aider/editor.py +147 -0
- forgepair-1.0.0/aider/exceptions.py +113 -0
- forgepair-1.0.0/aider/format_settings.py +26 -0
- forgepair-1.0.0/aider/gui.py +545 -0
- forgepair-1.0.0/aider/help.py +163 -0
- forgepair-1.0.0/aider/help_pats.py +19 -0
- forgepair-1.0.0/aider/history.py +143 -0
- forgepair-1.0.0/aider/io.py +1191 -0
- forgepair-1.0.0/aider/linter.py +304 -0
- forgepair-1.0.0/aider/llm.py +47 -0
- forgepair-1.0.0/aider/main.py +1300 -0
- forgepair-1.0.0/aider/mcp/__init__.py +19 -0
- forgepair-1.0.0/aider/mcp/config.py +237 -0
- forgepair-1.0.0/aider/mcp/manager.py +730 -0
- forgepair-1.0.0/aider/mdstream.py +243 -0
- forgepair-1.0.0/aider/models.py +1475 -0
- forgepair-1.0.0/aider/onboarding.py +428 -0
- forgepair-1.0.0/aider/openrouter.py +129 -0
- forgepair-1.0.0/aider/prompts.py +61 -0
- forgepair-1.0.0/aider/queries/tree-sitter-language-pack/README.md +7 -0
- forgepair-1.0.0/aider/queries/tree-sitter-language-pack/arduino-tags.scm +5 -0
- forgepair-1.0.0/aider/queries/tree-sitter-language-pack/bash-tags.scm +8 -0
- forgepair-1.0.0/aider/queries/tree-sitter-language-pack/c-tags.scm +9 -0
- forgepair-1.0.0/aider/queries/tree-sitter-language-pack/chatito-tags.scm +16 -0
- forgepair-1.0.0/aider/queries/tree-sitter-language-pack/clojure-tags.scm +7 -0
- forgepair-1.0.0/aider/queries/tree-sitter-language-pack/commonlisp-tags.scm +122 -0
- forgepair-1.0.0/aider/queries/tree-sitter-language-pack/cpp-tags.scm +15 -0
- forgepair-1.0.0/aider/queries/tree-sitter-language-pack/csharp-tags.scm +26 -0
- forgepair-1.0.0/aider/queries/tree-sitter-language-pack/d-tags.scm +26 -0
- forgepair-1.0.0/aider/queries/tree-sitter-language-pack/dart-tags.scm +92 -0
- forgepair-1.0.0/aider/queries/tree-sitter-language-pack/elisp-tags.scm +5 -0
- forgepair-1.0.0/aider/queries/tree-sitter-language-pack/elixir-tags.scm +54 -0
- forgepair-1.0.0/aider/queries/tree-sitter-language-pack/elm-tags.scm +19 -0
- forgepair-1.0.0/aider/queries/tree-sitter-language-pack/gleam-tags.scm +41 -0
- forgepair-1.0.0/aider/queries/tree-sitter-language-pack/go-tags.scm +42 -0
- forgepair-1.0.0/aider/queries/tree-sitter-language-pack/java-tags.scm +20 -0
- forgepair-1.0.0/aider/queries/tree-sitter-language-pack/javascript-tags.scm +88 -0
- forgepair-1.0.0/aider/queries/tree-sitter-language-pack/lua-tags.scm +34 -0
- forgepair-1.0.0/aider/queries/tree-sitter-language-pack/matlab-tags.scm +10 -0
- forgepair-1.0.0/aider/queries/tree-sitter-language-pack/ocaml-tags.scm +115 -0
- forgepair-1.0.0/aider/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +98 -0
- forgepair-1.0.0/aider/queries/tree-sitter-language-pack/pony-tags.scm +39 -0
- forgepair-1.0.0/aider/queries/tree-sitter-language-pack/properties-tags.scm +5 -0
- forgepair-1.0.0/aider/queries/tree-sitter-language-pack/python-tags.scm +14 -0
- forgepair-1.0.0/aider/queries/tree-sitter-language-pack/r-tags.scm +21 -0
- forgepair-1.0.0/aider/queries/tree-sitter-language-pack/racket-tags.scm +12 -0
- forgepair-1.0.0/aider/queries/tree-sitter-language-pack/ruby-tags.scm +64 -0
- forgepair-1.0.0/aider/queries/tree-sitter-language-pack/rust-tags.scm +60 -0
- forgepair-1.0.0/aider/queries/tree-sitter-language-pack/solidity-tags.scm +43 -0
- forgepair-1.0.0/aider/queries/tree-sitter-language-pack/swift-tags.scm +51 -0
- forgepair-1.0.0/aider/queries/tree-sitter-language-pack/udev-tags.scm +20 -0
- forgepair-1.0.0/aider/queries/tree-sitter-languages/README.md +24 -0
- forgepair-1.0.0/aider/queries/tree-sitter-languages/bash-tags.scm +8 -0
- forgepair-1.0.0/aider/queries/tree-sitter-languages/c-tags.scm +9 -0
- forgepair-1.0.0/aider/queries/tree-sitter-languages/c_sharp-tags.scm +46 -0
- forgepair-1.0.0/aider/queries/tree-sitter-languages/cpp-tags.scm +15 -0
- forgepair-1.0.0/aider/queries/tree-sitter-languages/dart-tags.scm +91 -0
- forgepair-1.0.0/aider/queries/tree-sitter-languages/elisp-tags.scm +8 -0
- forgepair-1.0.0/aider/queries/tree-sitter-languages/elixir-tags.scm +54 -0
- forgepair-1.0.0/aider/queries/tree-sitter-languages/elm-tags.scm +19 -0
- forgepair-1.0.0/aider/queries/tree-sitter-languages/fortran-tags.scm +15 -0
- forgepair-1.0.0/aider/queries/tree-sitter-languages/go-tags.scm +30 -0
- forgepair-1.0.0/aider/queries/tree-sitter-languages/haskell-tags.scm +3 -0
- forgepair-1.0.0/aider/queries/tree-sitter-languages/hcl-tags.scm +77 -0
- forgepair-1.0.0/aider/queries/tree-sitter-languages/java-tags.scm +20 -0
- forgepair-1.0.0/aider/queries/tree-sitter-languages/javascript-tags.scm +88 -0
- forgepair-1.0.0/aider/queries/tree-sitter-languages/julia-tags.scm +60 -0
- forgepair-1.0.0/aider/queries/tree-sitter-languages/kotlin-tags.scm +27 -0
- forgepair-1.0.0/aider/queries/tree-sitter-languages/matlab-tags.scm +10 -0
- forgepair-1.0.0/aider/queries/tree-sitter-languages/ocaml-tags.scm +115 -0
- forgepair-1.0.0/aider/queries/tree-sitter-languages/ocaml_interface-tags.scm +98 -0
- forgepair-1.0.0/aider/queries/tree-sitter-languages/php-tags.scm +26 -0
- forgepair-1.0.0/aider/queries/tree-sitter-languages/python-tags.scm +12 -0
- forgepair-1.0.0/aider/queries/tree-sitter-languages/ql-tags.scm +26 -0
- forgepair-1.0.0/aider/queries/tree-sitter-languages/ruby-tags.scm +64 -0
- forgepair-1.0.0/aider/queries/tree-sitter-languages/rust-tags.scm +60 -0
- forgepair-1.0.0/aider/queries/tree-sitter-languages/scala-tags.scm +65 -0
- forgepair-1.0.0/aider/queries/tree-sitter-languages/typescript-tags.scm +41 -0
- forgepair-1.0.0/aider/queries/tree-sitter-languages/zig-tags.scm +3 -0
- forgepair-1.0.0/aider/reasoning_tags.py +82 -0
- forgepair-1.0.0/aider/repo.py +622 -0
- forgepair-1.0.0/aider/repomap.py +868 -0
- forgepair-1.0.0/aider/report.py +200 -0
- forgepair-1.0.0/aider/resources/__init__.py +3 -0
- forgepair-1.0.0/aider/resources/model-metadata.json +1011 -0
- forgepair-1.0.0/aider/resources/model-settings.yml +3260 -0
- forgepair-1.0.0/aider/run_cmd.py +132 -0
- forgepair-1.0.0/aider/scrape.py +284 -0
- forgepair-1.0.0/aider/sendchat.py +61 -0
- forgepair-1.0.0/aider/special.py +203 -0
- forgepair-1.0.0/aider/urls.py +17 -0
- forgepair-1.0.0/aider/utils.py +348 -0
- forgepair-1.0.0/aider/versioncheck.py +113 -0
- forgepair-1.0.0/aider/voice.py +187 -0
- forgepair-1.0.0/aider/waiting.py +221 -0
- forgepair-1.0.0/aider/watch.py +318 -0
- forgepair-1.0.0/aider/watch_prompts.py +12 -0
- forgepair-1.0.0/aider/website/Gemfile +8 -0
- forgepair-1.0.0/aider/website/_includes/blame.md +162 -0
- forgepair-1.0.0/aider/website/_includes/get-started.md +22 -0
- forgepair-1.0.0/aider/website/_includes/help-tip.md +5 -0
- forgepair-1.0.0/aider/website/_includes/help.md +24 -0
- forgepair-1.0.0/aider/website/_includes/install.md +5 -0
- forgepair-1.0.0/aider/website/_includes/keys.md +4 -0
- forgepair-1.0.0/aider/website/_includes/model-warnings.md +67 -0
- forgepair-1.0.0/aider/website/_includes/multi-line.md +22 -0
- forgepair-1.0.0/aider/website/_includes/python-m-aider.md +5 -0
- forgepair-1.0.0/aider/website/_includes/recording.css +228 -0
- forgepair-1.0.0/aider/website/_includes/recording.md +34 -0
- forgepair-1.0.0/aider/website/_includes/replit-pipx.md +9 -0
- forgepair-1.0.0/aider/website/_includes/works-best.md +1 -0
- forgepair-1.0.0/aider/website/_sass/custom/custom.scss +103 -0
- forgepair-1.0.0/aider/website/docs/config/adv-model-settings.md +3431 -0
- forgepair-1.0.0/aider/website/docs/config/aider_conf.md +536 -0
- forgepair-1.0.0/aider/website/docs/config/api-keys.md +90 -0
- forgepair-1.0.0/aider/website/docs/config/dotenv.md +490 -0
- forgepair-1.0.0/aider/website/docs/config/editor.md +127 -0
- forgepair-1.0.0/aider/website/docs/config/model-aliases.md +105 -0
- forgepair-1.0.0/aider/website/docs/config/options.md +867 -0
- forgepair-1.0.0/aider/website/docs/config/reasoning.md +210 -0
- forgepair-1.0.0/aider/website/docs/config.md +44 -0
- forgepair-1.0.0/aider/website/docs/faq.md +384 -0
- forgepair-1.0.0/aider/website/docs/git.md +76 -0
- forgepair-1.0.0/aider/website/docs/index.md +47 -0
- forgepair-1.0.0/aider/website/docs/install/codespaces.md +39 -0
- forgepair-1.0.0/aider/website/docs/install/docker.md +57 -0
- forgepair-1.0.0/aider/website/docs/install/optional.md +100 -0
- forgepair-1.0.0/aider/website/docs/install/replit.md +8 -0
- forgepair-1.0.0/aider/website/docs/install.md +115 -0
- forgepair-1.0.0/aider/website/docs/languages.md +264 -0
- forgepair-1.0.0/aider/website/docs/legal/contributor-agreement.md +111 -0
- forgepair-1.0.0/aider/website/docs/legal/privacy.md +104 -0
- forgepair-1.0.0/aider/website/docs/llms/anthropic.md +77 -0
- forgepair-1.0.0/aider/website/docs/llms/azure.md +48 -0
- forgepair-1.0.0/aider/website/docs/llms/bedrock.md +132 -0
- forgepair-1.0.0/aider/website/docs/llms/cohere.md +34 -0
- forgepair-1.0.0/aider/website/docs/llms/deepseek.md +32 -0
- forgepair-1.0.0/aider/website/docs/llms/gemini.md +37 -0
- forgepair-1.0.0/aider/website/docs/llms/github.md +171 -0
- forgepair-1.0.0/aider/website/docs/llms/groq.md +36 -0
- forgepair-1.0.0/aider/website/docs/llms/lm-studio.md +39 -0
- forgepair-1.0.0/aider/website/docs/llms/ollama.md +75 -0
- forgepair-1.0.0/aider/website/docs/llms/openai-compat.md +39 -0
- forgepair-1.0.0/aider/website/docs/llms/openai.md +58 -0
- forgepair-1.0.0/aider/website/docs/llms/openrouter.md +78 -0
- forgepair-1.0.0/aider/website/docs/llms/other.md +117 -0
- forgepair-1.0.0/aider/website/docs/llms/vertex.md +50 -0
- forgepair-1.0.0/aider/website/docs/llms/warnings.md +10 -0
- forgepair-1.0.0/aider/website/docs/llms/xai.md +53 -0
- forgepair-1.0.0/aider/website/docs/llms.md +54 -0
- forgepair-1.0.0/aider/website/docs/more/analytics.md +127 -0
- forgepair-1.0.0/aider/website/docs/more/edit-formats.md +116 -0
- forgepair-1.0.0/aider/website/docs/more/infinite-output.md +258 -0
- forgepair-1.0.0/aider/website/docs/more-info.md +8 -0
- forgepair-1.0.0/aider/website/docs/recordings/auto-accept-architect.md +31 -0
- forgepair-1.0.0/aider/website/docs/recordings/dont-drop-original-read-files.md +35 -0
- forgepair-1.0.0/aider/website/docs/recordings/index.md +21 -0
- forgepair-1.0.0/aider/website/docs/recordings/model-accepts-settings.md +69 -0
- forgepair-1.0.0/aider/website/docs/recordings/tree-sitter-language-pack.md +80 -0
- forgepair-1.0.0/aider/website/docs/repomap.md +112 -0
- forgepair-1.0.0/aider/website/docs/scripting.md +136 -0
- forgepair-1.0.0/aider/website/docs/troubleshooting/aider-not-found.md +24 -0
- forgepair-1.0.0/aider/website/docs/troubleshooting/edit-errors.md +76 -0
- forgepair-1.0.0/aider/website/docs/troubleshooting/imports.md +62 -0
- forgepair-1.0.0/aider/website/docs/troubleshooting/models-and-keys.md +54 -0
- forgepair-1.0.0/aider/website/docs/troubleshooting/support.md +79 -0
- forgepair-1.0.0/aider/website/docs/troubleshooting/token-limits.md +96 -0
- forgepair-1.0.0/aider/website/docs/troubleshooting/warnings.md +12 -0
- forgepair-1.0.0/aider/website/docs/troubleshooting.md +11 -0
- forgepair-1.0.0/aider/website/docs/usage/browser.md +57 -0
- forgepair-1.0.0/aider/website/docs/usage/caching.md +49 -0
- forgepair-1.0.0/aider/website/docs/usage/commands.md +133 -0
- forgepair-1.0.0/aider/website/docs/usage/conventions.md +119 -0
- forgepair-1.0.0/aider/website/docs/usage/copypaste.md +121 -0
- forgepair-1.0.0/aider/website/docs/usage/images-urls.md +48 -0
- forgepair-1.0.0/aider/website/docs/usage/lint-test.md +118 -0
- forgepair-1.0.0/aider/website/docs/usage/modes.md +262 -0
- forgepair-1.0.0/aider/website/docs/usage/not-code.md +179 -0
- forgepair-1.0.0/aider/website/docs/usage/notifications.md +87 -0
- forgepair-1.0.0/aider/website/docs/usage/tips.md +79 -0
- forgepair-1.0.0/aider/website/docs/usage/tutorials.md +30 -0
- forgepair-1.0.0/aider/website/docs/usage/voice.md +121 -0
- forgepair-1.0.0/aider/website/docs/usage/watch.md +294 -0
- forgepair-1.0.0/aider/website/docs/usage.md +92 -0
- forgepair-1.0.0/aider/website/share/index.md +101 -0
- forgepair-1.0.0/benchmark/Dockerfile +64 -0
- forgepair-1.0.0/benchmark/README.md +146 -0
- forgepair-1.0.0/benchmark/__init__.py +0 -0
- forgepair-1.0.0/benchmark/benchmark.py +1059 -0
- forgepair-1.0.0/benchmark/clone-exercism.sh +20 -0
- forgepair-1.0.0/benchmark/cpp-test.sh +11 -0
- forgepair-1.0.0/benchmark/docker.sh +19 -0
- forgepair-1.0.0/benchmark/docker_build.sh +8 -0
- forgepair-1.0.0/benchmark/install-docker-ubuntu.sh +63 -0
- forgepair-1.0.0/benchmark/npm-test.sh +13 -0
- forgepair-1.0.0/benchmark/over_time.py +168 -0
- forgepair-1.0.0/benchmark/plot.sh +29 -0
- forgepair-1.0.0/benchmark/plots.py +417 -0
- forgepair-1.0.0/benchmark/problem_stats.py +355 -0
- forgepair-1.0.0/benchmark/prompts.py +16 -0
- forgepair-1.0.0/benchmark/refactor_tools.py +209 -0
- forgepair-1.0.0/benchmark/rsync.sh +45 -0
- forgepair-1.0.0/benchmark/rungrid.py +61 -0
- forgepair-1.0.0/benchmark/swe-bench-lite.txt +7 -0
- forgepair-1.0.0/benchmark/swe-bench.txt +7 -0
- forgepair-1.0.0/benchmark/swe_bench.py +131 -0
- forgepair-1.0.0/benchmark/test_benchmark.py +47 -0
- forgepair-1.0.0/docker/Dockerfile +80 -0
- forgepair-1.0.0/forgepair.egg-info/PKG-INFO +563 -0
- forgepair-1.0.0/forgepair.egg-info/SOURCES.txt +427 -0
- forgepair-1.0.0/forgepair.egg-info/dependency_links.txt +1 -0
- forgepair-1.0.0/forgepair.egg-info/entry_points.txt +3 -0
- forgepair-1.0.0/forgepair.egg-info/requires.txt +400 -0
- forgepair-1.0.0/forgepair.egg-info/scm_file_list.json +713 -0
- forgepair-1.0.0/forgepair.egg-info/scm_version.json +8 -0
- forgepair-1.0.0/forgepair.egg-info/top_level.txt +1 -0
- forgepair-1.0.0/pyproject.toml +54 -0
- forgepair-1.0.0/pytest.ini +12 -0
- forgepair-1.0.0/requirements/common-constraints.txt +766 -0
- forgepair-1.0.0/requirements/pydub.in +2 -0
- forgepair-1.0.0/requirements/python-compat.in +11 -0
- forgepair-1.0.0/requirements/requirements-browser.in +1 -0
- forgepair-1.0.0/requirements/requirements-browser.txt +169 -0
- forgepair-1.0.0/requirements/requirements-dev.in +19 -0
- forgepair-1.0.0/requirements/requirements-dev.txt +360 -0
- forgepair-1.0.0/requirements/requirements-help.in +13 -0
- forgepair-1.0.0/requirements/requirements-help.txt +496 -0
- forgepair-1.0.0/requirements/requirements-playwright.in +1 -0
- forgepair-1.0.0/requirements/requirements-playwright.txt +18 -0
- forgepair-1.0.0/requirements/requirements.in +52 -0
- forgepair-1.0.0/requirements/tree-sitter.in +3 -0
- forgepair-1.0.0/requirements.txt +560 -0
- forgepair-1.0.0/scripts/30k-image.py +239 -0
- forgepair-1.0.0/scripts/Dockerfile.jekyll +20 -0
- forgepair-1.0.0/scripts/__init__.py +0 -0
- forgepair-1.0.0/scripts/blame.py +296 -0
- forgepair-1.0.0/scripts/clean_metadata.py +258 -0
- forgepair-1.0.0/scripts/dl_icons.py +59 -0
- forgepair-1.0.0/scripts/history_prompts.py +26 -0
- forgepair-1.0.0/scripts/homepage.py +615 -0
- forgepair-1.0.0/scripts/issues.py +811 -0
- forgepair-1.0.0/scripts/jekyll_build.sh +4 -0
- forgepair-1.0.0/scripts/jekyll_run.sh +16 -0
- forgepair-1.0.0/scripts/logo_svg.py +174 -0
- forgepair-1.0.0/scripts/my_models.py +98 -0
- forgepair-1.0.0/scripts/pip-compile.sh +54 -0
- forgepair-1.0.0/scripts/recording_audio.py +338 -0
- forgepair-1.0.0/scripts/redact-cast.py +62 -0
- forgepair-1.0.0/scripts/tmux_record.sh +18 -0
- forgepair-1.0.0/scripts/tsl_pack_langs.py +145 -0
- forgepair-1.0.0/scripts/update-blame.sh +8 -0
- forgepair-1.0.0/scripts/update-docs.sh +34 -0
- forgepair-1.0.0/scripts/update-history.py +162 -0
- forgepair-1.0.0/scripts/update_model_lists.py +108 -0
- forgepair-1.0.0/scripts/versionbump.py +175 -0
- forgepair-1.0.0/scripts/yank-old-versions.py +51 -0
- forgepair-1.0.0/setup.cfg +4 -0
- forgepair-1.0.0/tests/__init__.py +0 -0
- forgepair-1.0.0/tests/basic/__init__.py +0 -0
- forgepair-1.0.0/tests/basic/test_agent_coder.py +231 -0
- forgepair-1.0.0/tests/basic/test_analytics.py +136 -0
- forgepair-1.0.0/tests/basic/test_aws_credentials.py +169 -0
- forgepair-1.0.0/tests/basic/test_coder.py +1781 -0
- forgepair-1.0.0/tests/basic/test_commands.py +2226 -0
- forgepair-1.0.0/tests/basic/test_deprecated.py +140 -0
- forgepair-1.0.0/tests/basic/test_editblock.py +618 -0
- forgepair-1.0.0/tests/basic/test_editor.py +159 -0
- forgepair-1.0.0/tests/basic/test_exceptions.py +104 -0
- forgepair-1.0.0/tests/basic/test_find_or_blocks.py +115 -0
- forgepair-1.0.0/tests/basic/test_history.py +120 -0
- forgepair-1.0.0/tests/basic/test_io.py +610 -0
- forgepair-1.0.0/tests/basic/test_issues_triage.py +195 -0
- forgepair-1.0.0/tests/basic/test_linter.py +84 -0
- forgepair-1.0.0/tests/basic/test_main.py +1565 -0
- forgepair-1.0.0/tests/basic/test_mcp_commands.py +146 -0
- forgepair-1.0.0/tests/basic/test_mcp_config.py +309 -0
- forgepair-1.0.0/tests/basic/test_mcp_manager.py +520 -0
- forgepair-1.0.0/tests/basic/test_model_info_manager.py +80 -0
- forgepair-1.0.0/tests/basic/test_models.py +758 -0
- forgepair-1.0.0/tests/basic/test_onboarding.py +437 -0
- forgepair-1.0.0/tests/basic/test_openrouter.py +73 -0
- forgepair-1.0.0/tests/basic/test_packaging_identity.py +57 -0
- forgepair-1.0.0/tests/basic/test_patch.py +347 -0
- forgepair-1.0.0/tests/basic/test_reasoning.py +609 -0
- forgepair-1.0.0/tests/basic/test_repo.py +716 -0
- forgepair-1.0.0/tests/basic/test_repomap.py +510 -0
- forgepair-1.0.0/tests/basic/test_report.py +166 -0
- forgepair-1.0.0/tests/basic/test_run_cmd.py +11 -0
- forgepair-1.0.0/tests/basic/test_sanity_check_repo.py +234 -0
- forgepair-1.0.0/tests/basic/test_scripting.py +39 -0
- forgepair-1.0.0/tests/basic/test_sendchat.py +193 -0
- forgepair-1.0.0/tests/basic/test_special.py +76 -0
- forgepair-1.0.0/tests/basic/test_ssl_verification.py +84 -0
- forgepair-1.0.0/tests/basic/test_udiff.py +119 -0
- forgepair-1.0.0/tests/basic/test_urls.py +15 -0
- forgepair-1.0.0/tests/basic/test_utils.py +15 -0
- forgepair-1.0.0/tests/basic/test_voice.py +103 -0
- forgepair-1.0.0/tests/basic/test_watch.py +166 -0
- forgepair-1.0.0/tests/basic/test_wholefile.py +359 -0
- forgepair-1.0.0/tests/browser/test_browser.py +34 -0
- forgepair-1.0.0/tests/fixtures/chat-history-search-replace-gold.txt +27810 -0
- forgepair-1.0.0/tests/fixtures/chat-history.md +99961 -0
- forgepair-1.0.0/tests/fixtures/languages/arduino/test.ino +21 -0
- forgepair-1.0.0/tests/fixtures/languages/bash/test.sh +19 -0
- forgepair-1.0.0/tests/fixtures/languages/c/test.c +21 -0
- forgepair-1.0.0/tests/fixtures/languages/chatito/test.chatito +20 -0
- forgepair-1.0.0/tests/fixtures/languages/clojure/test.clj +6 -0
- forgepair-1.0.0/tests/fixtures/languages/commonlisp/test.lisp +17 -0
- forgepair-1.0.0/tests/fixtures/languages/cpp/test.cpp +6 -0
- forgepair-1.0.0/tests/fixtures/languages/csharp/test.cs +39 -0
- forgepair-1.0.0/tests/fixtures/languages/d/test.d +26 -0
- forgepair-1.0.0/tests/fixtures/languages/dart/test.dart +21 -0
- forgepair-1.0.0/tests/fixtures/languages/elisp/test.el +25 -0
- forgepair-1.0.0/tests/fixtures/languages/elixir/test.ex +5 -0
- forgepair-1.0.0/tests/fixtures/languages/elm/test.elm +59 -0
- forgepair-1.0.0/tests/fixtures/languages/gleam/test.gleam +10 -0
- forgepair-1.0.0/tests/fixtures/languages/go/test.go +42 -0
- forgepair-1.0.0/tests/fixtures/languages/haskell/test.hs +7 -0
- forgepair-1.0.0/tests/fixtures/languages/hcl/test.tf +52 -0
- forgepair-1.0.0/tests/fixtures/languages/java/test.java +16 -0
- forgepair-1.0.0/tests/fixtures/languages/javascript/test.js +26 -0
- forgepair-1.0.0/tests/fixtures/languages/kotlin/test.kt +16 -0
- forgepair-1.0.0/tests/fixtures/languages/lua/test.lua +25 -0
- forgepair-1.0.0/tests/fixtures/languages/matlab/test.m +42 -0
- forgepair-1.0.0/tests/fixtures/languages/ocaml/test.ml +19 -0
- forgepair-1.0.0/tests/fixtures/languages/ocaml_interface/test.mli +14 -0
- forgepair-1.0.0/tests/fixtures/languages/php/test.php +5 -0
- forgepair-1.0.0/tests/fixtures/languages/pony/test.pony +8 -0
- forgepair-1.0.0/tests/fixtures/languages/properties/test.properties +14 -0
- forgepair-1.0.0/tests/fixtures/languages/python/test.py +28 -0
- forgepair-1.0.0/tests/fixtures/languages/ql/test.ql +3 -0
- forgepair-1.0.0/tests/fixtures/languages/r/test.r +17 -0
- forgepair-1.0.0/tests/fixtures/languages/racket/test.rkt +8 -0
- forgepair-1.0.0/tests/fixtures/languages/ruby/test.rb +3 -0
- forgepair-1.0.0/tests/fixtures/languages/rust/test.rs +33 -0
- forgepair-1.0.0/tests/fixtures/languages/scala/test.scala +61 -0
- forgepair-1.0.0/tests/fixtures/languages/solidity/test.sol +21 -0
- forgepair-1.0.0/tests/fixtures/languages/swift/test.swift +18 -0
- forgepair-1.0.0/tests/fixtures/languages/tsx/test.tsx +30 -0
- forgepair-1.0.0/tests/fixtures/languages/typescript/test.ts +3 -0
- forgepair-1.0.0/tests/fixtures/languages/udev/test.rules +22 -0
- forgepair-1.0.0/tests/fixtures/languages/zig/test.zig +10 -0
- forgepair-1.0.0/tests/fixtures/mcp_servers/auth_http_server.py +56 -0
- forgepair-1.0.0/tests/fixtures/mcp_servers/echo_server.py +22 -0
- forgepair-1.0.0/tests/fixtures/mcp_servers/resources_prompts_server.py +33 -0
- forgepair-1.0.0/tests/fixtures/mcp_servers/single_instance_server.py +69 -0
- forgepair-1.0.0/tests/fixtures/sample-code-base/sample.js +50 -0
- forgepair-1.0.0/tests/fixtures/sample-code-base/sample.py +68 -0
- forgepair-1.0.0/tests/fixtures/sample-code-base-repo-map.txt +55 -0
- forgepair-1.0.0/tests/fixtures/watch.js +38 -0
- forgepair-1.0.0/tests/fixtures/watch.lisp +19 -0
- forgepair-1.0.0/tests/fixtures/watch.py +21 -0
- forgepair-1.0.0/tests/fixtures/watch_question.js +11 -0
- forgepair-1.0.0/tests/help/test_help.py +147 -0
- forgepair-1.0.0/tests/scrape/test_playwright_disable.py +139 -0
- forgepair-1.0.0/tests/scrape/test_scrape.py +196 -0
forgepair-1.0.0/.flake8
ADDED
|
@@ -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
|