- lm_studio_fn: use urlparse to extract port from server_address so that
addresses with an http:// prefix (e.g. http://127.0.0.1:1234, as
documented in README) no longer break the Docker URL construction.
Previously split(":")[1] returned "//127.0.0.1" instead of the port
number, producing a malformed URL.
Also fix the non-Docker path to avoid prepending http:// when the address
already includes a scheme.
- api.py: pass the computed port variable to uvicorn.run() instead of the
hardcoded literal 7777, so that BACKEND_PORT environment variable is
actually honoured when starting the server directly.
- Use urllib.parse.urlencode to properly encode the POST body, so queries
containing special characters like '&', '+', '=' are sent correctly
- Extend execution_failure_check to also detect "No search results" as a
failure, preventing the agent from silently looping when all SearXNG
engines are rate-limited and return no results
When is_local=True, the Ollama host URL previously hardcoded port 11434,
ignoring the port specified in provider_server_address in config.ini.
Users who need to run Ollama on a non-default port (e.g. because 11434
is already in use) had no way to configure this without editing source code.
Now the port is extracted from provider_server_address when present,
falling back to 11434 if only a hostname is given.
The hardcoded --remote-debugging-port=9222 caused SessionNotCreatedException
when port 9222 was already in use by another Chrome instance or process.
Replace with a dynamically allocated free port via socket binding.
When AgenticSeek is deployed on a remote server and accessed from a
different machine, the frontend JavaScript runs in the user's browser
with localhost:7777 which resolves to the user's local machine, not
the server - causing the 'System offline' error even though the backend
is running.
Change docker-compose.yml to read REACT_APP_BACKEND_URL from .env
(defaulting to http://localhost:7777 for local use) and document the
variable in .env.example so users can point the frontend at their
server's public IP when deploying remotely.
- api.py: uvicorn.run was hardcoding port=7777 instead of using the
port variable populated from BACKEND_PORT env var, making BACKEND_PORT
ineffective when running python api.py directly
- searxSearch: add missing 'import sys' (caused NameError when run as
standalone script) and use constructor base_url arg with env var
fallback so searxSearch(base_url=...) actually takes effect
- Add 'anthropic' to available_providers and unsafe_providers so users can set
provider_name = anthropic in config.ini and use ANTHROPIC_API_KEY
- Add provider name alias normalization so 'togetherAI' (as documented in README)
is accepted as equivalent to 'together'
- Fix NameError in dsk_deepseek: add 'as e' to AuthenticationError, RateLimitError,
and NetworkError except clauses where 'e' was referenced but not bound
- Remove unreachable 'return thought' dead code at end of lm_studio_fn
- Update README to list Anthropic as a supported API provider
Previously, any unhandled exception during query processing caused the
entire backend server to exit via sys.exit(1), making the frontend show
'System offline. Deploy backend first.' until the container was restarted.
Also, is_generating was never reset to False on exception, permanently
blocking all subsequent queries with 429 responses.
- Replace sys.exit(1) with a proper HTTP 500 error response
- Move is_generating = False to the finally block so it always resets
Fixes#382
- Add MiniMax-M2.7 and MiniMax-M2.7-highspeed to supported models list
- Update docstring to list M2.7 models before M2.5
- Update README/README_CHS model references
- Add unit tests for M2.7 and M2.7-highspeed models
- Keep all previous models as alternatives
Add support for MiniMax M2.5 series models via OpenAI-compatible API:
- Add minimax_fn() to Provider class with configurable base URL
- Support both international and China mainland endpoints
- Update documentation in README.md and README_CHS.md
- Add MINIMAX_API_KEY and MINIMAX_BASE_URL to .env.example
- Add unit tests for MiniMax provider
Made-with: Cursor
Extend form handling to support:
- <select> dropdowns: detect options, select by visible text or value
- <textarea> fields: fill with text content
- <input type="file">: upload files by absolute path
- All element types are also discovered inside shadow DOM
Changes:
- find_inputs.js: discover <select> (with options) and <textarea>
- browser.py: import Select, handle new element types in
get_form_inputs() and fill_form_inputs()
Add version compatibility check before using existing ChromeDriver.
When the installed ChromeDriver major version does not match Chrome,
chromedriver_autoinstaller downloads the correct version automatically
instead of failing with a version mismatch error.
Add helper functions get_chromedriver_version() and
is_chromedriver_compatible() with tests for version matching logic.
Add try-except for json.JSONDecodeError in parse_agent_tasks() to
gracefully handle malformed JSON from LLM responses (e.g. Gemini 2.5
Flash via OpenRouter). Returns empty list on parse failure, which
triggers the existing retry mechanism in make_plan().
Add test suite for parse_agent_tasks() covering valid JSON, malformed
JSON, truncated JSON, and invalid agent name cases.
The originally specified version 3.11-slim is only an alias representing the latest version in the 3.11.x-slim series (for example, on November 22nd, its exact version number was 3.11.14-slim). After the base image is updated, various unexpected errors may occur when executing apt-get.