Commit graph

329 commits

Author SHA1 Message Date
Chummy
f13ce909c4
Merge pull request #274 from mai1015/feat/refactor-agent-loop
feat(providers): add native tool-calling for OpenRouter/Anthropic and align provider tests with simple_chat
2026-02-17 01:06:56 +08:00
Chummy
88de2555ab
Merge pull request #391 from fettpl/fix/361-browser-security
security(browser): harden SSRF blocking and block file:// URLs
2026-02-17 01:06:50 +08:00
Chummy
e005b6d9e4 fix(rebase): unify agent config and remove duplicate fields 2026-02-17 01:01:57 +08:00
Chummy
413ecfd143 fix(rebase): resolve main drift and restore CI contracts 2026-02-17 01:01:57 +08:00
Chummy
b2dd3582a4 fix(ci): align reliable tests with simple_chat contract 2026-02-17 01:01:56 +08:00
mai1015
dc5e14d7d2 refactor: improve code formatting and structure across multiple files 2026-02-17 01:01:56 +08:00
mai1015
b341fdb368 feat: add agent structure and improve tooling for provider 2026-02-17 01:01:56 +08:00
Chummy
98822498fb
Merge pull request #398 from zeroclaw-labs/docs/agents-supersede-commit-template
docs(agents): add superseded-PR commit message template
2026-02-17 01:01:55 +08:00
Chummy
dbff1b40b1 docs(agents): add superseded-PR commit message template 2026-02-17 01:00:39 +08:00
Chummy
e2c966d31e
Merge pull request #389 from reidliu41/add-qwen
feat(provider): add Qwen/DashScope provider with multi-region support
2026-02-17 00:58:04 +08:00
Chummy
e6d79283d1
Merge pull request #378 from fettpl/fix/353-rate-limiter-memory
fix(gateway): add periodic sweep to SlidingWindowRateLimiter
2026-02-17 00:57:38 +08:00
fettpl
882defef12 security(browser): harden SSRF blocking and block file:// URLs
- Block file:// URLs which bypassed all SSRF and domain-allowlist
  controls, enabling arbitrary local file exfiltration via browser
- Harden is_private_host() to match http_request.rs coverage:
  multicast, broadcast, reserved (240/4), shared address space
  (100.64/10), documentation IPs, benchmarking IPs
- Add .localhost subdomain and .local mDNS TLD blocking
- Extract is_non_global_v4() and is_non_global_v6() helpers

Closes #361

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 17:49:21 +01:00
Chummy
c11c569ddd
Merge pull request #377 from fettpl/fix/352-ssrf-ip-blocking
fix(security): block multicast/broadcast/reserved IPs in SSRF protection
2026-02-17 00:47:46 +08:00
Chummy
def9fe4e23
Merge pull request #390 from zeroclaw-labs/docs/agents-supersede-template
docs(agents): add superseded-PR title/body template
2026-02-17 00:47:24 +08:00
Chummy
44ef48f3c6 docs(agents): add superseded-PR title/body template 2026-02-17 00:46:01 +08:00
reidliu41
6bb9bc47c0 feat(provider): add Qwen/DashScope provider with multi-region support
- Add Alibaba Qwen as an OpenAI-compatible provider via DashScope API
- Support three regional endpoints: China (Beijing), Singapore, and US (Virginia)
- All regions share a single `DASHSCOPE_API_KEY` environment variable

| Config Value | Region | Base URL |
|---|---|---|
| `qwen` / `dashscope` | China (Beijing) | `dashscope.aliyuncs.com/compatible-mode/v1` |
| `qwen-intl` / `dashscope-intl` | Singapore | `dashscope-intl.aliyuncs.com/compatible-mode/v1` |
| `qwen-us` / `dashscope-us` | US (Virginia) | `dashscope-us.aliyuncs.com/compatible-mode/v1` |
2026-02-17 00:42:53 +08:00
Chummy
02decd309f fix(security): tighten SSRF IP classification for docs ranges 2026-02-17 00:41:48 +08:00
ehu shubham shaw
de3ec87d16
Ehu shubham shaw contribution --> Hardware support (#306)
* feat: add ZeroClaw firmware for ESP32 and Nucleo

* Introduced new firmware for ZeroClaw on ESP32 and Nucleo-F401RE, enabling JSON-over-serial communication for GPIO control.
* Added `zeroclaw-esp32` with support for commands like `gpio_read` and `gpio_write`, along with capabilities reporting.
* Implemented `zeroclaw-nucleo` firmware with similar functionality for STM32, ensuring compatibility with existing ZeroClaw protocols.
* Updated `.gitignore` to include new firmware targets and added necessary dependencies in `Cargo.toml` for both platforms.
* Created README files for both firmware projects detailing setup, build, and usage instructions.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>

* feat: enhance hardware peripheral support and documentation

- Added `Peripheral` trait implementation in `src/peripherals/` to manage hardware boards (STM32, RPi GPIO).
- Updated `AGENTS.md` to include new extension points for peripherals and their configuration.
- Introduced comprehensive documentation for adding boards and tools, including a quick start guide and supported boards.
- Enhanced `Cargo.toml` to include optional dependencies for PDF extraction and peripheral support.
- Created new datasheets for Arduino Uno, ESP32, and Nucleo-F401RE, detailing pin aliases and GPIO usage.
- Implemented new tools for hardware memory reading and board information retrieval in the agent loop.

This update significantly improves the integration and usability of hardware peripherals within the ZeroClaw framework.

* feat: add ZeroClaw firmware for ESP32 and Nucleo

* Introduced new firmware for ZeroClaw on ESP32 and Nucleo-F401RE, enabling JSON-over-serial communication for GPIO control.
* Added `zeroclaw-esp32` with support for commands like `gpio_read` and `gpio_write`, along with capabilities reporting.
* Implemented `zeroclaw-nucleo` firmware with similar functionality for STM32, ensuring compatibility with existing ZeroClaw protocols.
* Updated `.gitignore` to include new firmware targets and added necessary dependencies in `Cargo.toml` for both platforms.
* Created README files for both firmware projects detailing setup, build, and usage instructions.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>

* feat: enhance hardware peripheral support and documentation

- Added `Peripheral` trait implementation in `src/peripherals/` to manage hardware boards (STM32, RPi GPIO).
- Updated `AGENTS.md` to include new extension points for peripherals and their configuration.
- Introduced comprehensive documentation for adding boards and tools, including a quick start guide and supported boards.
- Enhanced `Cargo.toml` to include optional dependencies for PDF extraction and peripheral support.
- Created new datasheets for Arduino Uno, ESP32, and Nucleo-F401RE, detailing pin aliases and GPIO usage.
- Implemented new tools for hardware memory reading and board information retrieval in the agent loop.

This update significantly improves the integration and usability of hardware peripherals within the ZeroClaw framework.

* feat: Introduce hardware auto-discovery and expanded configuration options for agents, hardware, and security.

* chore: update dependencies and improve probe-rs integration

- Updated `Cargo.lock` to remove specific version constraints for several dependencies, including `zerocopy`, `syn`, and `strsim`, allowing for more flexibility in version resolution.
- Upgraded `bincode` and `bitfield` to their latest versions, enhancing serialization and memory management capabilities.
- Updated `Cargo.toml` to reflect the new version of `probe-rs` from `0.24` to `0.30`, improving hardware probing functionality.
- Refactored code in `src/hardware` and `src/tools` to utilize the new `SessionConfig` for session management in `probe-rs`, ensuring better compatibility and performance.
- Cleaned up documentation in `docs/datasheets/nucleo-f401re.md` by removing unnecessary lines.

* fix: apply cargo fmt

* docs: add hardware architecture diagram.

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 11:40:10 -05:00
Chummy
b36f23784a
fix(build): harden rustls dependency path for Linux builds (#275) 2026-02-17 00:39:28 +08:00
fettpl
91ae151548 style: fix rustfmt formatting in SSRF tests
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 17:35:30 +01:00
Chummy
3234159c6c
chore(clippy): clear warning backlog and harden conversions (#383) 2026-02-17 00:32:33 +08:00
Chummy
a91516df7a
Merge pull request #368 from fettpl/fix/349-email-bounded-seen-set
fix(channels): bound email seen_messages set to prevent memory leak
2026-02-17 00:32:29 +08:00
Chummy
53844f7207
feat(memory): lucid memory integration with optional backends (#285) 2026-02-17 00:31:50 +08:00
Chummy
04bf94443f
feat(browser): add optional computer-use sidecar backend (#335) 2026-02-17 00:31:45 +08:00
Chummy
db0904c8a4
Merge pull request #384 from zeroclaw-labs/chore/agents-supersede-coauthor
docs(agents): require co-author trailers when superseding PRs
2026-02-17 00:31:18 +08:00
Chummy
dc17a0575c docs(agents): require co-author attribution for superseded PR integrations 2026-02-17 00:29:21 +08:00
fettpl
5af74d1d20 fix(gateway): add periodic sweep to SlidingWindowRateLimiter
Add a sweep mechanism that removes stale IP entries from the rate
limiter's HashMap every 5 minutes. Previously, IPs that made a single
request and never returned would accumulate indefinitely, causing
unbounded memory growth proportional to unique client IPs.

The sweep runs inline during allow() calls — no background task needed.
A last_sweep timestamp ensures the full-map scan only happens once per
sweep interval, keeping amortized overhead minimal.

Closes #353

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 17:20:12 +01:00
fettpl
7db71de043 fix(channels): bound email seen_messages set to prevent memory leak
Replace unbounded HashSet<String> with a BoundedSeenSet that evicts
the oldest message IDs (FIFO) when the 100k capacity is reached. This
prevents memory growth proportional to email volume over the process
lifetime, capping the set at ~100k entries regardless of runtime.

Closes #349

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 00:19:03 +08:00
Chummy
7f4c688145
Merge pull request #374 from zeroclaw-labs/rewrite/coauthor-80da
chore(meta): fix co-author trailers for scheduled-task integration commit
2026-02-17 00:18:56 +08:00
fettpl
dd74e29f71 fix(security): block multicast/broadcast/reserved IPs in SSRF protection
Rewrite is_private_or_local_host() to use std::net::IpAddr for robust
IP classification instead of manual octet matching. Now blocks all
non-globally-routable address ranges:

- Multicast (224.0.0.0/4, ff00::/8)
- Broadcast (255.255.255.255)
- Reserved (240.0.0.0/4)
- Documentation (192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24)
- Benchmarking (198.18.0.0/15)
- IPv6 unique-local (fc00::/7) and link-local (fe80::/10)
- IPv4-mapped IPv6 (::ffff:x.x.x.x) with recursive v4 checks

Closes #352

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 17:18:17 +01:00
Chummy
6d856990c2 chore(meta): anchor co-author history rewrite to current main 2026-02-17 00:17:29 +08:00
Chummy
602ec1507c Merge pull request #331 from stakeswky/feat/lark-channel
feat(channels): add Lark/Feishu IM channel support
2026-02-17 00:14:35 +08:00
Chummy
703e701e31 Merge pull request #367 from fettpl/fix/348-http-header-sanitization
fix(tools): use original headers for HTTP requests, redact only in display
2026-02-17 00:14:34 +08:00
Will Sarg
6fd8b523b9 ci: route trusted docker and release publish jobs to self-hosted (#371) 2026-02-17 00:14:34 +08:00
fettpl
d5ca9a4a5c fix(main): remove duplicate ModelCommands enum definition
A duplicate ModelCommands enum was introduced in a recent merge,
causing E0119/E0428 compile errors on CI (Rust 1.92).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 00:14:34 +08:00
Will Sarg
a7d19b332e ci: route trusted security and workflow checks to self-hosted (#370) 2026-02-17 00:14:34 +08:00
fettpl
444d80e178 fix(tools): use original headers for HTTP requests, redact only in display
sanitize_headers was replacing sensitive header values with
***REDACTED*** before passing them to the actual HTTP request,
breaking any authenticated API call. Split into parse_headers
(preserves original values for the request) and
redact_headers_for_display (returns redacted copy for output/logging).

Closes #348

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 00:14:34 +08:00
Will Sarg
8e23cbc596 ci: route trusted pushes to self-hosted runner (#369) 2026-02-17 00:14:34 +08:00
cd slash
e349067f70 fix(providers): correct Fireworks AI base URL to include /v1 path (#346)
The Fireworks API endpoint requires /v1/chat/completions, but the
base URL was missing the /v1 path segment, causing 404 errors and
triggering a broken responses fallback.

Fix: Add /v1 to base URL so correct endpoint is built:
  https://api.fireworks.ai/inference/v1/chat/completions
2026-02-17 00:14:34 +08:00
Chummy
22714271fd feat(cost): add budget tracking core and harden storage reliability (#292) 2026-02-17 00:14:34 +08:00
Chummy
fac1b780cd fix(onboard): refresh MiniMax defaults and endpoint (#299) 2026-02-17 00:14:34 +08:00
Chummy
a85fcf43c3 fix(build): reduce release-build memory pressure on low-RAM devices (#303) 2026-02-17 00:14:34 +08:00
Chummy
fe1fb04278 fix(composio): align v3 execute path and honor configured entity_id (#322) 2026-02-17 00:14:34 +08:00
Chummy
e9fa267c84 feat(onboard): add provider model refresh command with TTL cache (#323) 2026-02-17 00:14:34 +08:00
Chummy
d7cca4b150 feat: unify scheduled tasks from #337 and #338 with security-first integration
Unifies scheduled task capabilities and consolidates overlapping implementations from #337 and #338 into a single security-first integration path.

Co-authored-by: Edvard <ecschoye@users.noreply.github.com>
Co-authored-by: stawky <stakeswky@users.noreply.github.com>
2026-02-17 00:14:34 +08:00
Chummy
639032c952
Merge pull request #331 from stakeswky/feat/lark-channel
feat(channels): add Lark/Feishu IM channel support
2026-02-17 00:08:05 +08:00
Chummy
2eb1c82a9b
Merge pull request #367 from fettpl/fix/348-http-header-sanitization
fix(tools): use original headers for HTTP requests, redact only in display
2026-02-17 00:06:21 +08:00
Will Sarg
9d21e2b28c
ci: route trusted docker and release publish jobs to self-hosted (#371) 2026-02-16 11:00:25 -05:00
fettpl
60e72a6ed5 fix(main): remove duplicate ModelCommands enum definition
A duplicate ModelCommands enum was introduced in a recent merge,
causing E0119/E0428 compile errors on CI (Rust 1.92).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 17:00:10 +01:00
fettpl
a871b28f85 fix(tools): use original headers for HTTP requests, redact only in display
sanitize_headers was replacing sensitive header values with
***REDACTED*** before passing them to the actual HTTP request,
breaking any authenticated API call. Split into parse_headers
(preserves original values for the request) and
redact_headers_for_display (returns redacted copy for output/logging).

Closes #348

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 16:59:05 +01:00