Commit Graph

588 Commits

Author SHA1 Message Date
Ziheng Zhang 3647ff1afa fix: preserve QQ markdown formatting and newline rendering (#144)
* fix: preserve QQ markdown formatting

* fix: remove stale qq trace fallback hook

* fix: narrow qq markdown fallback handling

* style: format qq channel with ruff
2026-04-08 13:52:45 +01:00
Xiaohui Yan e89b71aa60 feat(cli): add --debug flag for verbose logging in serve mode (#141)
* feat(cli): add --debug flag for verbose logging in serve mode

* feat(cli): add log_level config field with priority over env var

Replace dead `debug` parameter in `main()` with a proper `log_level`
config field in EvoScientistConfig. Enables `EvoSci config set log_level
debug` with priority: config file > EVOSCIENTIST_LOG_LEVEL env var.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 13:23:10 +08:00
Ziheng Zhang 729cab11be Fix late channel response delivery after timeout (#140)
* Fix late channel response delivery after timeout

* Fix
2026-04-07 15:48:12 +01:00
X-iZhang 080a5c06f3 feat: enhance OpenRouter support with additional reasoning handling and model entries 2026-04-03 17:14:19 +01:00
X-iZhang 117750eda7 chore: update wechat group image asset 2026-04-03 15:44:40 +01:00
Xi Zhang 028dbe79d3 Release/v0.0.6 (#138)
* chore: clean up empty code change sections in the changes log

* feat: add adaptive tools and context editing features to README
2026-04-03 15:20:45 +01:00
Allen d08ca535c6 fix:Telegram channel start failed #133 (#134)
* fix:Telegram channel start failed #133

* refactor: simplify bus thread and add nest_asyncio warning

- Remove unnecessary _run_as_task() wrapper; run_until_complete()
  already creates a Task internally via ensure_future()
- Add comment noting nest_asyncio.apply() is global and irreversible

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Xi Zhang <zacharyzhang2022@gmail.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Xi Zhang <106144707+X-iZhang@users.noreply.github.com>
2026-04-03 14:47:15 +01:00
Yinhan Lu 5aa8353613 feat(llm): upgrade OpenAI reasoning effort from high to xhigh (#136)
* feat(llm): upgrade OpenAI reasoning effort from high to xhigh

The OpenAI Responses API supports "xhigh" as a reasoning effort level,
which provides deeper reasoning than "high". This is already used by
other CLI tools (e.g., OpenClaw) for OpenAI models.

Only affects the direct API key path; the ccproxy/OAuth path is
unchanged (reasoning is still skipped there).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(llm): limit xhigh reasoning to gpt-5.4+ and codex models

Only gpt-5.4 series and codex models support xhigh reasoning effort.
Older models (gpt-5, gpt-5.1, gpt-5.2, gpt-5.3) fall back to high.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Xi Zhang <zacharyzhang2022@gmail.com>
Co-authored-by: Xi Zhang <106144707+X-iZhang@users.noreply.github.com>
2026-04-03 14:35:14 +01:00
Xiaohui Yan 91de173c78 feat: Add GLM-5.1 support for Zhipu providers (#137)
* feat: Add GLM-5.1 support for Zhipu providers

Add GLM-5.1 model entries to both zhipu-code (coding endpoint) and
zhipu (general endpoint) providers, following the existing pattern
for GLM models.

* feat: add glm-5v-turbo support for Zhipu providers

---------

Co-authored-by: Xi Zhang <106144707+X-iZhang@users.noreply.github.com>
Co-authored-by: Xi Zhang <zacharyzhang2022@gmail.com>
2026-04-03 14:00:21 +01:00
dependabot[bot] 70629e254c chore(deps): bump aiohttp in the uv group across 1 directory (#132)
---
updated-dependencies:
- dependency-name: aiohttp
  dependency-version: 3.13.4
  dependency-type: direct:production
  dependency-group: uv
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Xi Zhang <106144707+X-iZhang@users.noreply.github.com>
2026-04-03 20:38:13 +08:00
Xi Zhang 68f3ab2962 feat: enable reasoning for OpenRouter via extra_body to prevent multi… (#124)
* feat: enable reasoning for OpenRouter via extra_body to prevent multi-turn errors

* feat: implement OpenRouter native reasoning support and patch langchain-openrouter bug

* feat: add OpenRouter reasoning effort configuration and update related tests

* feat: add langchain-openrouter dependency for enhanced reasoning support

* fix: correct spacing in reasoning effort choice label

* feat: implement patch for OpenRouter reasoning details to prevent Pydantic errors

* feat: add patches for OpenRouter reasoning and content handling utilities

* feat: prevent multiple patches of OpenRouter reasoning details by using a global flag

* feat: update OpenRouter reasoning patch to ensure single application with global flag

* feat: refine OpenAI responses API handling to apply only for OpenAI provider

* feat: Enhance TUI interaction by updating todo widget positioning and skipping empty tool call chunks

* feat: Update tool selector threshold and adjust logging level for selector failures

* feat: Temporarily disable timestamp toast in tool call widget for UX review

* feat: Re-enable timestamp toast in tool call widget on click
2026-04-03 11:04:34 +01:00
Xi Zhang 897b444d27 Feat/context management middleware (#127)
* feat: Add context management middleware for improved error handling and context editing

* feat: Implement LLMToolSelectorMiddleware for enhanced tool selection and tracking

* feat(tests): update test functions to include mock timestamp parameter

* refactor: simplify tool selection state storage and update comments in middleware

* feat: Enhance tool selection handling and suppress structured output for improved event streaming

* refactor: simplify patching in test_create_tool_selector functions

* feat: add model parameter to create_tool_selector_middleware for enhanced flexibility

* feat: enhance tool selection suppression with JSON buffering for improved accuracy
2026-04-02 22:39:20 +02:00
Xi Zhang d8720a0b35 feat: Upgrade ccproxy to version 0.2.7 and remove deprecated thinking… (#130)
* feat: Upgrade ccproxy to version 0.2.7 and remove deprecated thinking tag handling

* feat: Enhance ccproxy compatibility and strip legacy thinking tags
2026-04-02 15:09:20 +01:00
dinos b9e809aeb6 fix: use uv tool install --with for durable MCP server installs (#125)
* fix: use `uv tool install --with` for durable MCP server installs (#121)

When EvoScientist is installed via `uv tool install`, MCP server packages
added during onboarding were installed with `uv pip install`, which is
not tracked by uv. Running `uv tool upgrade evoscientist` would recreate
the venv from scratch and silently wipe the MCP server binaries.

Now `install_pip_package()` detects uv tool environments and uses
`uv tool install <tool> --with <package>`, which records the dependency
in uv-receipt.toml so it survives upgrades. Existing --with packages
are read from the receipt and preserved.

Falls back to the old `uv pip install` path if the durable method fails.

* style: fmt

* fix: preserve requirement specs and normalize dedup in uv tool installs

Address review feedback: _uv_tool_existing_requirements() now returns
a dict mapping bare names to full PEP 508 specs (preserving extras and
version constraints from uv-receipt.toml). Dedup check uses
_bare_package_name() to normalize the incoming package argument before
comparing against receipt entries.
2026-04-02 10:51:54 +02:00
dependabot[bot] 3c7e1e5b8f chore(deps): bump anthropic in the uv group across 1 directory (#129)
Bumps the uv group with 1 update in the / directory: [anthropic](https://github.com/anthropics/anthropic-sdk-python).


Updates `anthropic` from 0.86.0 to 0.87.0
- [Release notes](https://github.com/anthropics/anthropic-sdk-python/releases)
- [Changelog](https://github.com/anthropics/anthropic-sdk-python/blob/main/CHANGELOG.md)
- [Commits](https://github.com/anthropics/anthropic-sdk-python/compare/v0.86.0...v0.87.0)

---
updated-dependencies:
- dependency-name: anthropic
  dependency-version: 0.87.0
  dependency-type: indirect
  dependency-group: uv
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-02 10:41:20 +02:00
Xi Zhang 6e5844a68f Fix/tui file mention display (#123)
* fix: enhance user message display in run_textual_interactive function

* fix: add binary file detection in file mention resolution
2026-03-31 16:52:46 +08:00
Xi Zhang dd6cbe3b45 docs: clarify uv upgrade command in README files (#120) 2026-03-30 09:58:04 +02:00
dependabot[bot] 5c9cd353b9 chore(deps): bump cryptography in the uv group across 1 directory (#117)
Bumps the uv group with 1 update in the / directory: [cryptography](https://github.com/pyca/cryptography).


Updates `cryptography` from 46.0.5 to 46.0.6
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/46.0.5...46.0.6)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-version: 46.0.6
  dependency-type: indirect
  dependency-group: uv
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Xi Zhang <106144707+X-iZhang@users.noreply.github.com>
2026-03-29 13:58:49 +02:00
Yuyue Zhao 4505300c8d feat: Add **More Effort** code generation mode (#118)
* feat: Add **More Effort** code generation mode

* feat: Enhance code generation mode selection and update documentation

---------

Co-authored-by: X-iZhang <zacharyzhang2022@gmail.com>
2026-03-28 18:17:47 +00:00
dependabot[bot] 29533cce7f chore(deps): bump langchain-core in the uv group across 1 directory (#114)
Bumps the uv group with 1 update in the / directory: [langchain-core](https://github.com/langchain-ai/langchain).


Updates `langchain-core` from 1.2.21 to 1.2.22
- [Release notes](https://github.com/langchain-ai/langchain/releases)
- [Commits](https://github.com/langchain-ai/langchain/compare/langchain-core==1.2.21...langchain-core==1.2.22)

---
updated-dependencies:
- dependency-name: langchain-core
  dependency-version: 1.2.22
  dependency-type: indirect
  dependency-group: uv
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Xi Zhang <106144707+X-iZhang@users.noreply.github.com>
2026-03-28 13:23:59 +01:00
Xi Zhang db72fb507f fix: update wechat_group image asset (#116) 2026-03-28 13:19:27 +01:00
Xi Zhang 6e23e98cca fix: inject thread_id into LangGraph context for compact conversation (#112) 2026-03-27 20:46:12 +00:00
Yuyue Zhao 4a9562229f Go0day patch 1 (#113)
* Update news section with latest ranking information

* Update awards and rankings in README.zh-CN.md
2026-03-27 20:40:34 +00:00
Yuyue Zhao 10e0364163 Update awards section in README.md (#111) 2026-03-27 19:15:43 +00:00
Xi Zhang d3284ee881 v0.0.5 (#110)
* fix: update OpenRouter API key validation to use /auth/key endpoint and httpx

* Refactor code structure for improved readability and maintainability

* feat: enhance welcome banner to include file commands indication

* feat: update LaTeX setup prompt to use selection UI for better user experience

* feat: update version to v0.0.5 in badges and project configuration
2026-03-27 20:03:36 +01:00
dinos 6dc8a25579 feat: add use_responses_api config to force Chat Completions for OpenAI relays (#105)
* feat(config): use_responses_api (#98)

langchain-openai auto-switches to the Responses API when reasoning
params are set, which breaks OpenAI-compatible relays that only support
Chat Completions. This adds a user-facing config option to override
that behavior:

  evosci config set use_responses_api false
  # or EVOSCIENTIST_USE_RESPONSES_API=false

* fix: propagate use_responses_api from config file and add normalization tests

Address PR #105 review comments:
- apply_config_to_env() now sets EVOSCIENTIST_USE_RESPONSES_API so
  config file values take effect (not just the env var directly)
- Add parametrized tests for case/whitespace normalization

---------

Co-authored-by: Xi Zhang <106144707+X-iZhang@users.noreply.github.com>
2026-03-27 16:15:48 +00:00
MuXinCG a813f8afd9 fix(feishu): isolate SDK event loop to prevent cross-thread RuntimeError on Linux
lark_oapi.ws.client captures the main thread's event loop in a
module-level variable at import time. When the WebSocket SDK thread
calls loop.run_until_complete() on that shared loop, nest_asyncio's
global patches cause task-tracking conflicts on Linux/Python 3.12:
    - RuntimeError: Leaving task … does not match the current task
    - AttributeError: 'NoneType' object has no attribute 'select'

Replace the previous Handle._run monkey-patch (which only suppressed
symptoms) with a proper fix: create a fresh event loop in the SDK
thread and swap the module-level loop variable so the SDK operates
on a fully isolated loop with no cross-thread interaction.

Closes #97
2026-03-27 22:23:08 +08:00
Jan Piotrowski 5bc33adeb0 fix(tui): simplify behaviour of pasting clipboard to textbox
Closes #107
2026-03-27 14:39:34 +01:00
dependabot[bot] 5ae3d47945 chore(deps): bump requests in the uv group across 1 directory
Bumps the uv group with 1 update in the / directory: [requests](https://github.com/psf/requests).

Updates `requests` from 2.32.5 to 2.33.0
- [Release notes](https://github.com/psf/requests/releases)
- [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md)
- [Commits](https://github.com/psf/requests/compare/v2.32.5...v2.33.0)

---
updated-dependencies:
- dependency-name: requests
  dependency-version: 2.33.0
  dependency-type: indirect
  dependency-group: uv
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-27 14:31:30 +01:00
Xi Zhang fe6a2c4b83 fix: resolve #93 review comments and close #95 (#92 regression fix included) (#96)
* feat: enhance file mention parsing with deduplication and warning handling

* feat: optimize ancestor grouping by improving path comparison efficiency

* fix: update middleware injection to use extend for better readability

* Refactor code structure for improved readability and maintainability

* feat: update README files to include AstaBench ranking and adjust award image layout

* update

* fix: deduplicate file mentions and improve warning message formatting
2026-03-25 17:01:46 +00:00
Jan Piotrowski 259842243d feat: add context retry middleware when API returns 4xx errors cause by context exceeding limits (#92) 2026-03-25 15:41:06 +00:00
Xi Zhang fab5f85eee v0.0.4 (#93)
* feat(tui): enhance conversation history rendering and implement two-level thread hierarchy in picker

* feat(tui): improve conversation history display and enhance thread selection UI

* feat(file_mentions): implement @file mention parsing and completion for CLI and TUI

* feat(uv-tool): add compatibility checks and installation helpers for uv tool environments

* feat(dependencies): update package versions in uv.lock for compatibility and improvements

* feat(badges): update PyPI version to v0.0.4 in SVG assets and README files

* feat(tests): format code in TestUvToolCompat for improved readability
2026-03-24 18:13:42 +00:00
Xi Zhang cc266dd6b1 Feat/latex onboard setup and tui completion fix (#88)
* feat(onboard): add LaTeX setup steps and TinyTeX installation helpers

* fix(onboard): improve LaTeX status output to a single-line summary

* fix(assets): update wechat_group image
2026-03-23 10:51:42 +00:00
Ziheng Zhang 65cec64445 feat(feishu): add WebSocket long connection subscription mode (#87)
* feat(feishu): add WebSocket long connection subscription mode

Add WebSocket (长连接) mode as an alternative to webhook for Feishu
event subscription. This allows running without a public IP, port
forwarding, or tunnel — ideal for local dev and NAT/firewall setups.

- New `feishu_subscription_mode` config: "webhook" (default) or "websocket"
- WebSocket mode uses official `lark-oapi` SDK with thread-safe queue bridge
- Onboard wizard: mode selection, SDK install prompt for websocket
- CLI: `--mode webhook|websocket` for standalone serve
- `pip install evoscientist[feishu]` optional dependency
- 5 new tests covering config, SDK missing error, message bridge, cleanup
- Docs: subscription mode comparison table, prerequisites per mode

* Fix: Ruff

* Fix: small fix
2026-03-22 14:45:28 +00:00
Xi Zhang 3503142af6 feat(tui): UX polish — multi-line input, timestamps, update check & v0.0.3 (#85)
* feat: implement background update check and startup notifications

* feat: enhance user experience with timestamp notifications and UI polish

* feat: implement multi-line chat input with Enter-to-submit and modifier+Enter newline

* update

* update

* v0.0.3

* feat: improve code readability with consistent formatting in TUI and test files

* feat: update PyPI badge version to v0.0.3 in README files

* feat: add docstrings for test classes in test_update_check.py
2026-03-20 19:57:35 +00:00
Ziheng Zhang a7d3ef8087 fix: subagent summerize (#83)
* fix: subagent summerize

* fix: group subagent text by agent name for parallel fallback

The flat subagent_text_buffer list would interleave text from parallel
sub-agents into incoherent output. Replace with a dict grouped by
agent name so each sub-agent's text stays coherent, with [name]:
attribution when multiple agents contribute.

Add comprehensive tests for the new behavior (24 tests).

* fix: group subagent text by agent name for parallel fallback

The flat subagent_text_buffer list would interleave text from parallel
sub-agents into incoherent output. Replace with a dict grouped by
agent name so each sub-agent's text stays coherent, with [name]:
attribution when multiple agents contribute.

Add comprehensive tests for the new behavior (24 tests).

* fix: group subagent text by agent name for parallel fallback

The flat subagent_text_buffer list would interleave text from parallel
sub-agents into incoherent output. Replace with a dict grouped by
agent name so each sub-agent's text stays coherent, with [name]:
attribution when multiple agents contribute.

Add comprehensive tests for the new behavior (24 tests).

* chore: fix multiple agent

* test: add test

* fix linter

* remove redundant
2026-03-20 17:13:27 +00:00
Xi Zhang 372a6272b7 fix(onboard): Windows npx detection & rename /install-skills to /evoskills (#79)
* fix: improve npx detection on Windows using shutil.which

* fix: rename /install-skills command to /evoskills for consistency
2026-03-20 10:42:56 +00:00
Jiao Huifeng fdafebd47f feat: add STT voice transcription for all messaging channels (#28)
* feat: add STT voice transcription for all channels

Automatically transcribes audio/voice messages (Telegram, WeChat, Slack,
etc.) into text before the agent sees them. Enabled via config, off by default.

Changes:
- EvoScientist/stt.py: new STT engine using faster-whisper with lazy
  model loading and per-language model selection (zh/en/auto)
- EvoScientist/channels/base.py: hook in _enqueue_raw() to transcribe
  audio files and prepend transcript to message text; removes the raw
  [voice: ...] annotation after successful transcription so the agent
  does not attempt further audio processing
- EvoScientist/config/settings.py: stt_enabled (default False),
  stt_language (default "auto")
- pyproject.toml: optional [stt] dependency group (faster-whisper>=1.0)
- tests/test_stt.py: unit tests covering all backends and channel integration

Usage:
  pip install 'EvoScientist[stt]'
  EvoSci config set stt_enabled true
  EvoSci config set stt_language zh   # zh / en / auto

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: remove unused imports (ruff F401)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: address PR #28 reviewer feedback

Changes per SemiGlassFace review (CHANGES_REQUESTED):

1. Cache config at channel __init__ — no longer calls load_config() on
   every incoming message; STT settings stored as instance attributes
   (_stt_enabled, _stt_language, _stt_model, _stt_device,
   _stt_compute_type) set once during Channel.__init__().

2. Replace deprecated asyncio.get_event_loop() with get_running_loop()
   to avoid DeprecationWarning on Python 3.12+.

3. Annotation removal now uses exact path matching instead of substring
   search — checks fp == a or a.endswith(f": {fp}]") so only the
   correct annotation is removed after transcription.

4. Expose stt_model, stt_device, stt_compute_type as config fields so
   users can override the HuggingFace model id, inference device, and
   quantisation without touching code. transcribe_file() forwards all
   three to the engine.

Also: _engines dict replaced with single _engine + _engine_key tuple
(model_id, device, compute_type) — reuses cached model unless settings
change, simpler than a dict.

Tests: 19 STT-specific tests all pass; total 1105 tests green, ruff clean.

* fix: resolve ruff lint errors (UP037, I001, PT006)

* style: apply ruff format

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-20 10:59:30 +01:00
Xi Zhang 210d71c590 feat(tui): double Ctrl+C quit confirmation & docs Examples/Recipes section (#78)
* feat: enhance quit handling with double Ctrl+C confirmation and cleanup logic

* feat: enhance TUI cancellation handling and improve user interruption messages

* feat: add Examples & Recipes section to documentation

* docs: remove guideline to follow the structure of existing recipes
2026-03-20 00:25:31 +00:00
Icy Fish 649f2ca121 fix: resolve TAB cursor disappearance and up/down double-handling (#58)
- Add priority binding for TAB to intercept before Textual's focus_next
- Remove duplicate up/down handling in on_key (now handled by priority
  bindings from PR #76)
- Update tests to use cmd_manager.list_commands() instead of removed
  _TUI_SLASH_COMMANDS

Closes #57

Co-authored-by: X-iZhang <zacharyzhang2022@gmail.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 23:28:34 +00:00
Ziheng Zhang c627aadd39 Fix/deepseek sequence content error (#77)
* feat: add DeepSeek as a recognized third-party provider

Register DeepSeek API (https://api.deepseek.com) with DEEPSEEK_API_KEY
env var and add model short names: deepseek-r1 → deepseek-reasoner,
deepseek-v3 → deepseek-chat.

* feat: add _flatten_message_content utility for list-to-string conversion

Extract text from content block lists while skipping thinking/reasoning
blocks. This handles the case where LangChain stores assistant messages
with content as a list of content blocks instead of a plain string.

* fix: flatten list content to strings for OpenAI-compatible providers

Add _patch_openai_compat_content() that wraps _generate/_agenerate to
sanitize message content before API calls. Apply it for all third-party
OpenAI-compat providers and native OpenAI proxies.

This fixes "invalid type: sequence, expected a string" errors from
strict APIs like DeepSeek that reject list-format content in assistant
messages during multi-turn conversations.

* feat: add DeepSeek API key validation and integrate into onboarding process
test: implement unit tests for content flattening utility in OpenAI-compatible providers

---------

Co-authored-by: Xi Zhang <106144707+X-iZhang@users.noreply.github.com>
Co-authored-by: X-iZhang <zacharyzhang2022@gmail.com>
2026-03-19 19:28:48 +00:00
Jiao Huifeng 28f0d15cda docs: add macOS 24/7 deployment guide for EvoSci + ccproxy + Telegram STT bot (#32)
Comprehensive step-by-step guide covering:
- ccproxy installation from source (patched fork required for Claude 4+)
- ccproxy OAuth login via `ccproxy auth login claude-api`
- EvoScientist install with telegram + stt extras using uv
- STT model pre-download to avoid first-message delay
- launchd plist setup for auto-start on login with KeepAlive
- Full troubleshooting section based on real deployment experience:
  - OAuth token not found (.credentials.json location)
  - Packages installed in wrong Python environment (conda vs .venv)
  - Shell glob eating brackets in pip install 'pkg[extra]'
  - Whisper hallucination / VAD filter
  - ffmpeg approval prompts → --auto-approve
  - heredoc variable expansion gotcha
  - External drive mount timing with launchd

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Xi Zhang <106144707+X-iZhang@users.noreply.github.com>
2026-03-19 18:45:34 +00:00
X-iZhang ac7fdcecf2 refactor: improve readability of command validation and path extraction logic 2026-03-19 18:38:57 +00:00
X-iZhang edd3823881 feat: implement absolute system path detection in command validation 2026-03-19 18:28:54 +00:00
Jan Piotrowski 8862531738 chore: add pre-commit config 2026-03-19 17:04:06 +01:00
Jan Piotrowski 2fdf961fee chore: fix ruff linting and async patterns in tests/ 2026-03-19 17:04:05 +01:00
Jan Piotrowski 81316ffb2d chore: resolve all ruff linting and static analysis errors in EvoScientist/
- Fix RUF006: Implement background task tracking in Discord, iMessage, WeChat, and TUI to prevent premature GC of fire-and-forget tasks.
- Fix B904: Add explicit exception chaining (raise ... from) across all exception handlers.
- Fix RUF012: Annotate mutable class attributes with ClassVar for command arguments and media maps.
- Fix B008: Refactor Typer commands in cli/commands.py to use Annotated for argument and option defaults.
- Fix B023/B018: Resolve late-binding issues in lambdas and remove useless expressions.
- Fix syntax errors in retry.py docstrings and models.py lambda parameter ordering.
2026-03-19 17:04:03 +01:00
Jan Piotrowski 4a3d6c0318 chore: add ruff lint rules and turn on formatting 2026-03-19 17:04:02 +01:00
X-iZhang 793b3f32af feat: add WeChat QR code to README files for community engagement 2026-03-19 15:32:55 +00:00
Allen 97d00808e1 fix: The input prompt box supports selection using the up and down arrow keys (#76)
* Add the ability to read text from the system clipboard

* The input prompt box supports selection using the up and down arrow keys.
2026-03-19 15:15:01 +00:00