misc/py-aider-chat: Remove port

aider-chat upstream has stopped doing releases, and its dependencies have
drifted too much to be practically maintained within the ports tree.
This commit is contained in:
Dave Cottlehuber
2026-04-27 10:12:45 +00:00
parent a9bdc10794
commit 2cc531514d
7 changed files with 2 additions and 220 deletions
+2
View File
@@ -5253,3 +5253,5 @@ www/py-requests-cache0|www/py-requests-cache|2026-04-18|Remove obsoleted port. U
sysutils/py-azure-cli-base||2026-04-21|Remove obsoleted port
games/coronapoker||2026-04-25|Remove for security concerns: downloads closed source binary modules, should not be restored unless https://github.com/tonikelope/coronapoker/issues/7 is addressed
sysutils/py-ioztat|filesystems/py-ioztat|2026-04-27|Move to more appropriate category
misc/py-aider-chat||2026-04-27|Upstream project has stopped active releases and doesn't match ports dependencies
-85
View File
@@ -1,85 +0,0 @@
PORTNAME= aider_chat
DISTVERSION= 0.86.1
PORTREVISION= 1
CATEGORIES= misc python
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
DISTNAME= aider_chat-${PORTVERSION}
MAINTAINER= dch@FreeBSD.org
COMMENT= AI pair programming in your terminal
WWW= https://aider.chat/
LICENSE= APACHE20
LICENSE_FILE= ${WRKSRC}/LICENSE.txt
BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}setuptools-scm>=8.0:devel/py-setuptools-scm@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}setuptools>=63:devel/py-setuptools@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}wheel>=0.44:devel/py-wheel@${PY_FLAVOR}
RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}arrow>=1.3:devel/py-arrow@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}SoundFile>=0.12:audio/py-SoundFile@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}aiosqlite>0:databases/py-aiosqlite@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}backoff>=2.2:devel/py-backoff@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}beautifulsoup>=4.12:www/py-beautifulsoup@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}blinker>=1.8:devel/py-blinker@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}cachetools>=5.5:devel/py-cachetools@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}colorama>=0.4.6:devel/py-colorama@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}configargparse>=1.5:devel/py-configargparse@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}diff-match-patch>=0:textproc/py-diff-match-patch@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}diskcache>=5.6.0:devel/py-diskcache@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}flake8>=7.1.1:devel/py-flake8@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}gitpython>=3.1.30:devel/py-gitpython@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}greenlet>=3.0.3:devel/py-greenlet@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}grep-ast>=0.3.2:textproc/py-grep-ast@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}huggingface-hub>=0.24.6:misc/py-huggingface-hub@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}importlib-resources>=0:devel/py-importlib-resources@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}json5>=0.9.11:devel/py-json5@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}jsonschema>=4.23.0:devel/py-jsonschema@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}litellm>=1.44.7:misc/py-litellm@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}mixpanel>=4.10:misc/py-mixpanel@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}networkx>=3.3:math/py-networkx@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}numpy1<2.0:math/py-numpy1@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}openai>=1.43.1:misc/py-openai@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}oslex>=0.1.3:devel/py-oslex@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}packaging>=24.1:devel/py-packaging@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}pathspec>=0.12.1:devel/py-pathspec@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}pexpect>=4.9.0:misc/py-pexpect@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}pillow>=10.4.0:graphics/py-pillow@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}posthog>=4.0.1:misc/py-posthog@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}prompt-toolkit>=3.0.47:devel/py-prompt-toolkit@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}psutil>=5.8.0:sysutils/py-psutil@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}pydub>=0.25:audio/py-pydub@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}pypandoc>=1.5:textproc/py-pypandoc@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}pyperclip>=1.7.0:devel/py-pyperclip@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}pyyaml-include>=1.2:devel/py-pyyaml-include@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}rich>=13.8:textproc/py-rich@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}scipy>=1.11,1:science/py-scipy@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}shtab>0:devel/py-shtab@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}socksio>=1<2:net/py-socksio@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}sounddevice>=0.5.0:audio/py-sounddevice@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}streamlit>=1.38:www/py-streamlit@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}tiktoken>=0.7.0:textproc/py-tiktoken@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}tokenizers>=0.20.0:textproc/py-tokenizers@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}tree-sitter>=0.20,<0.22.2:devel/py-tree-sitter@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}watchfiles>=0:devel/py-watchfiles@${PY_FLAVOR}
# missing dependencies
# playwright its a chromium browser automation library
# watchdog is pulled in by streamlit
# google-generativeai is not a popular aider dependency
USES= python shebangfix
USE_PYTHON= autoplist concurrent pep517
SHEBANG_FILES= aider/coders/base_coder.py aider/coders/search_replace.py
NO_ARCH= yes
PORTDOCS= README.md
OPTIONS_DEFINE= DOCS
post-install-DOCS-on:
@${MKDIR} ${STAGEDIR}${DOCSDIR}
${INSTALL_MAN} ${PORTDOCS:S|^|${WRKSRC}/|} \
${STAGEDIR}${DOCSDIR}
.include <bsd.port.mk>
-3
View File
@@ -1,3 +0,0 @@
TIMESTAMP = 1756024923
SHA256 (aider_chat-0.86.1.tar.gz) = 48e489d20a4dfdd90ac4acc781f0170f688aaa5c5f2017d035e2d947fb801bbb
SIZE (aider_chat-0.86.1.tar.gz) = 1314126
@@ -1,32 +0,0 @@
--- aider/commands.py.orig 2025-05-09 22:41:18 UTC
+++ aider/commands.py
@@ -21,7 +21,7 @@ from aider.run_cmd import run_cmd
from aider.llm import litellm
from aider.repo import ANY_GIT_ERROR
from aider.run_cmd import run_cmd
-from aider.scrape import Scraper, install_playwright
+from aider.scrape import Scraper
from aider.utils import is_image_file
from .dump import dump # noqa: F401
@@ -220,20 +220,6 @@ class Commands:
return
self.io.tool_output(f"Scraping {url}...")
- if not self.scraper:
- disable_playwright = getattr(self.args, "disable_playwright", False)
- if disable_playwright:
- res = False
- else:
- res = install_playwright(self.io)
- if not res:
- self.io.tool_warning("Unable to initialize playwright.")
-
- self.scraper = Scraper(
- print_error=self.io.tool_error,
- playwright_available=res,
- verify_ssl=self.verify_ssl,
- )
content = self.scraper.scrape(url) or ""
content = f"Here is the content of {url}:\n\n" + content
@@ -1,82 +0,0 @@
--- aider/scrape.py.orig 2025-05-09 22:41:18 UTC
+++ aider/scrape.py
@@ -92,7 +92,7 @@ class Scraper:
else:
self.print_error = print
- self.playwright_available = playwright_available
+ self.playwright_available = False
self.verify_ssl = verify_ssl
def scrape(self, url):
@@ -103,10 +103,7 @@ class Scraper:
`url` - the URL to scrape.
"""
- if self.playwright_available:
- content, mime_type = self.scrape_with_playwright(url)
- else:
- content, mime_type = self.scrape_with_httpx(url)
+ content, mime_type = self.scrape_with_httpx(url)
if not content:
self.print_error(f"Failed to retrieve content from {url}")
@@ -138,58 +135,6 @@ class Scraper:
]
return any(re.search(pattern, content, re.IGNORECASE) for pattern in html_patterns)
return False
-
- # Internals...
- def scrape_with_playwright(self, url):
- import playwright # noqa: F401
- from playwright.sync_api import Error as PlaywrightError
- from playwright.sync_api import TimeoutError as PlaywrightTimeoutError
- from playwright.sync_api import sync_playwright
-
- with sync_playwright() as p:
- try:
- browser = p.chromium.launch()
- except Exception as e:
- self.playwright_available = False
- self.print_error(str(e))
- return None, None
-
- try:
- context = browser.new_context(ignore_https_errors=not self.verify_ssl)
- page = context.new_page()
-
- user_agent = page.evaluate("navigator.userAgent")
- user_agent = user_agent.replace("Headless", "")
- user_agent = user_agent.replace("headless", "")
- user_agent += " " + aider_user_agent
-
- page.set_extra_http_headers({"User-Agent": user_agent})
-
- response = None
- try:
- response = page.goto(url, wait_until="networkidle", timeout=5000)
- except PlaywrightTimeoutError:
- print(f"Page didn't quiesce, scraping content anyway: {url}")
- response = None
- except PlaywrightError as e:
- self.print_error(f"Error navigating to {url}: {str(e)}")
- return None, None
-
- try:
- content = page.content()
- mime_type = None
- if response:
- content_type = response.header_value("content-type")
- if content_type:
- mime_type = content_type.split(";")[0]
- except PlaywrightError as e:
- self.print_error(f"Error retrieving page content: {str(e)}")
- content = None
- mime_type = None
- finally:
- browser.close()
-
- return content, mime_type
def scrape_with_httpx(self, url):
import httpx
@@ -1,11 +0,0 @@
--- pyproject.toml.orig 2025-04-14 23:24:32 UTC
+++ pyproject.toml
@@ -41,7 +41,7 @@ include = ["aider"]
include = ["aider"]
[build-system]
-requires = ["setuptools>=68", "setuptools_scm[toml]>=8"]
+requires = ["setuptools>=61", "setuptools_scm[toml]>=8"]
build-backend = "setuptools.build_meta"
[tool.setuptools_scm]
-7
View File
@@ -1,7 +0,0 @@
Aider is a command line tool that lets you pair program with LLMs, to edit
code stored in your local git repository. Aider will directly edit the
code in your local source files, and git commit the changes with sensible
commit messages. You can start a new project or work with an existing git
repo. Aider is unique in that it lets you ask for changes to pre-existing,
larger codebases. Aider works well with GPT-4o, Claude 3 Opus, GPT-3.5 and
supports connecting to almost any LLM.