Commit graph

465 commits

Author SHA1 Message Date
Chummy
e21285f453 docs(readme): remove extra blank line for markdownlint 2026-02-17 19:24:50 +08:00
A Walker
6f475723fc docs(readme): add PATH hint for ~/.cargo/bin in Quick Start
`cargo install` places the binary in ~/.cargo/bin, which may not be in
the user's PATH by default. This adds an explicit export step so new
users don't hit a "not found" error after install.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 19:24:50 +08:00
Chummy
0087bcc496 fix(security): resolve rebase conflicts and provider regressions 2026-02-17 19:19:06 +08:00
Chummy
5d131a8903 fix(security): tighten provider credential log hygiene
- remove as_deref credential routing path in provider factory
- avoid raw provider error text in warmup/retry failure summaries
- keep retry telemetry while reducing secret propagation risk
2026-02-17 19:19:06 +08:00
Chummy
a1bb72767a fix(security): remove provider init error detail logging 2026-02-17 19:19:06 +08:00
Chummy
e5a8cd3f57 fix(ci): suppress option_as_ref_deref on credential refs 2026-02-17 19:19:06 +08:00
Chummy
a6ca68a4fb fix(ci): satisfy strict lint delta on security follow-ups 2026-02-17 19:19:06 +08:00
Chummy
60d81fb706 fix(security): reduce residual CodeQL logging flows
- remove secret-presence logging path in gateway startup output
- reduce credential-derived warning path in provider fallback setup
- avoid as_deref credential propagation in delegate/provider wiring
- harden Composio error rendering to avoid raw body leakage
- simplify onboarding secrets status output to non-sensitive wording
2026-02-17 19:19:06 +08:00
Chummy
1711f140be fix(security): remediate unassigned CodeQL findings
- harden URL/request handling for composio and whatsapp integrations
- reduce cleartext logging exposure across providers/tools/gateway
- hash and constant-time compare gateway webhook secrets
- expand nested secret encryption coverage in config
- align feature aliases and add regression tests for security paths
- fix bubblewrap all-features test invocation surfaced during deep validation
2026-02-17 19:19:06 +08:00
Chummy
f9d681063d fix(fmt): align providers test formatting with rustfmt 2026-02-17 19:10:09 +08:00
Chummy
d00c1140d9 fix(tools): harden pushover security and validation 2026-02-17 19:10:09 +08:00
Vernon Stinebaker
82790735cf feat(tools): add native Pushover tool with priority and sound support
- Implements Pushover API as native tool (reqwest-based)
- Supports message, title, priority (-2 to 2), sound parameters
- Reads credentials from .env file in workspace
- 11 comprehensive tests covering schema, credentials, edge cases
- Follows CONTRIBUTING.md tool implementation patterns
2026-02-17 19:10:09 +08:00
Chummy
5d274dae12 fix(lark): align region endpoints and doctor config parity 2026-02-17 19:03:12 +08:00
FISHers6
e161e4aed3 opt: cargo fmt 2026-02-17 19:03:12 +08:00
FISHers6
aedb58b87e opt(channel): remove unused tests code 2026-02-17 19:03:12 +08:00
FISHers6
0e498f2702 opt(channel): lark channel parse_post_content opt 2026-02-17 19:03:12 +08:00
FISHers6
b322960899 feat(channels): add lark/feishu websocket long-connection mode 2026-02-17 19:03:12 +08:00
Chummy
e9e45acd6d providers: map native tool support from capabilities 2026-02-17 18:59:04 +08:00
YubinghanBai
b5869d424e feat(provider): add capabilities detection mechanism
Add ProviderCapabilities struct to enable runtime detection of
provider-specific features, starting with native tool calling support.

This is a foundational change that enables future PRs to implement
intelligent tool calling mode selection (native vs prompt-guided).

Changes:
- Add ProviderCapabilities struct with native_tool_calling field
- Add capabilities() method to Provider trait with default impl
- Add unit tests for capabilities equality and defaults

Why:
- Current design cannot distinguish providers with native tool calling
- Needed to enable Gemini/Anthropic/OpenAI native function calling
- Fully backward compatible (all providers inherit default)

What did NOT change:
- No existing Provider methods modified
- No behavior changes for existing code
- Zero breaking changes

Testing:
- cargo test: all tests passed
- cargo fmt: pass
- cargo clippy: pass
2026-02-17 18:59:04 +08:00
Chummy
42fa802bad fix(ollama): sanitize provider payload logging 2026-02-17 18:48:45 +08:00
Kieran
1c0d7bbcb8 feat: ollama tools 2026-02-17 18:48:45 +08:00
Kieran
808450c48e feat: custom global api_url 2026-02-17 18:48:45 +08:00
Kieran
c4c1272580 feat: ollama tool calls 2026-02-17 18:48:45 +08:00
Kieran
b828873426 feat: accept RUST_LOG env filter 2026-02-17 18:48:45 +08:00
Kieran
9e456336b2 chore: add ollama logs 2026-02-17 18:48:45 +08:00
Kieran
3d3d471cd5 fix(email): use proper MIME encoding for UTF-8 responses
Replace bare .body() call with .singlepart(SinglePart::plain()) to ensure
outgoing emails have explicit Content-Type: text/plain; charset=utf-8
header. This fixes recipients seeing raw quoted-printable encoding
(e.g., =E2=80=99) instead of properly decoded UTF-8 characters.
2026-02-17 18:47:28 +08:00
Chummy
ab2cd51748 fix(config): honor ZEROCLAW_WORKSPACE with legacy layout compatibility 2026-02-17 18:43:48 +08:00
argenis de la rosa
75c18ad256 fix(config): check ZEROCLAW_WORKSPACE before loading config
- Move ZEROCLAW_WORKSPACE check to the start of load_or_init()
- Use custom workspace for both config and workspace directories
- Fixes issue where env var was applied AFTER config loading

Fixes #417

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 18:43:48 +08:00
Chummy
23db125971 docs(security): refine local secret management guidance
Supersedes: #406

Co-authored-by: Gabriel Nahum <gnahum12345@users.noreply.github.com>
2026-02-17 18:39:13 +08:00
Chummy
8371f412f8 feat(observability): propagate optional cost_usd on agent end 2026-02-17 18:16:12 +08:00
Chummy
52a4c9d2b8 fix(browser): preserve backend-specific unsupported-action errors 2026-02-17 18:12:27 +08:00
fettpl
46b199c50f refactor: extract browser action parsing and IRC config struct
browser.rs:
- Extract parse_browser_action() from Tool::execute, removing one
  #[allow(clippy::too_many_lines)] suppression

irc.rs:
- Replace 10-parameter IrcChannel::new() with IrcChannelConfig struct,
  removing #[allow(clippy::too_many_arguments)] suppression
- Update all call sites (mod.rs and tests)

Closes #366

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 18:12:27 +08:00
Argenis
69a9adde33
Merge PR #500: streaming support and security fixes
- feat(streaming): add streaming support for LLM responses (fixes #211)
- security(deps): remove vulnerable xmas-elf dependency via embuild (fixes #399)
- fix: resolve merge conflicts and integrate chat_with_tools from main

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 05:05:57 -05:00
Chummy
f75f73a50d fix(agent): preserve native tool-call fallbacks and history fidelity 2026-02-17 17:55:38 +08:00
Vernon Stinebaker
f322360248 feat(providers): add native tool-call API support via chat_with_tools
Add chat_with_tools() to the Provider trait with a default fallback to
chat_with_history(). Implement native tool calling in OpenRouterProvider,
reusing existing NativeChatRequest/NativeChatResponse structs. Wire the
agent loop to use native tool calls when the provider supports them,
falling back to XML-based parsing otherwise.

Changes are purely additive to traits.rs and openrouter.rs. The only
deletions (36 lines) are within run_tool_call_loop() in loop_.rs where
the LLM call section was replaced with a branching if/else for native
vs XML tool calling.

Includes 5 new tests covering:
- chat_with_tools error path (missing API key)
- NativeChatResponse deserialization (tool calls only, mixed)
- parse_native_response conversion to ChatResponse
- tools_to_openai_format schema validation
2026-02-17 17:55:38 +08:00
Chummy
a3fc894580 chore(codeowners): co-own ci/cd docs between willsarg and chumyin 2026-02-17 17:50:34 +08:00
Chummy
89d3fcc8f7 chore(codeowners): route security and ci/cd ownership to @willsarg 2026-02-17 17:50:34 +08:00
Chummy
b9e2dae49f feat(doctor): harden provider and workspace diagnostics 2026-02-17 17:20:56 +08:00
stawky
b0d4a1297b feat(doctor): add enhanced diagnostics and config validation
- Expand  with grouped health report output
- Add semantic config checks (provider/model/temp/routes/channels)
- Add workspace checks (existence, write probe, disk availability)
- Preserve daemon/scheduler/channel freshness diagnostics
- Add environment checks (git/curl/shell/home)
- Add unit tests for provider validation and config edge cases

Also fix upstream signature drift to keep build green:
- channels: pass provider_name to agent_turn
- channels: pass workspace_dir to all_tools_with_runtime
- daemon: pass verbose flag to agent::run
2026-02-17 17:20:56 +08:00
Chummy
7ebda43fdd fix(gateway): remove unused prompt bootstrap variables 2026-02-17 17:06:28 +08:00
Chummy
37df8f6b33 style(cron): apply rustfmt ordering for exports 2026-02-17 17:06:28 +08:00
mai1015
0e9852ec06 feat: pass a cloned config to all_tools_with_runtime for improved tool initialization 2026-02-17 17:06:28 +08:00
mai1015
3dc44ae132 feat: add chrono-tz and phf packages for enhanced time zone handling and performance 2026-02-17 17:06:28 +08:00
mai1015
fb2d1cea0b Implement cron job management tools and types
- Added `JobType`, `SessionTarget`, `Schedule`, `DeliveryConfig`, `CronJob`, `CronRun`, and `CronJobPatch` types in `src/cron/types.rs` for cron job configuration and management.
- Introduced `CronAddTool`, `CronListTool`, `CronRemoveTool`, `CronRunTool`, `CronRunsTool`, and `CronUpdateTool` in `src/tools` for adding, listing, removing, running, and updating cron jobs.
- Updated the `run` function in `src/daemon/mod.rs` to conditionally start the scheduler based on the cron configuration.
- Modified command-line argument parsing in `src/lib.rs` and `src/main.rs` to support new cron job commands.
- Enhanced the onboarding wizard in `src/onboard/wizard.rs` to include cron configuration.
- Added tests for cron job tools to ensure functionality and error handling.
2026-02-17 17:06:28 +08:00
Argenis
0ec46ac3d1
feat(build): add release-fast profile for powerful build machines
Added release-fast profile with codegen-units=8 for faster builds on powerful machines.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 04:02:52 -05:00
Chummy
3d8ece4c59 test(email): align seen-message tests with HashSet impl 2026-02-17 17:01:05 +08:00
Daniel Willitzer
b38797341b Add comprehensive tests for 16 previously untested modules
- Channels: traits, email_channel (includes lock poisoning fix)
- Tunnel: cloudflare, custom, ngrok, none, tailscale
- Core: doctor, health, integrations, lib, memory/traits
- Providers: openrouter
- Runtime: traits, observability/traits, tools/traits

Test coverage improved from 70/91 (77%) to 86/91 (95%)
All 1272 tests passing

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 17:01:05 +08:00
LiWeny16
6a7a914f41 fix: resolve rebase conflicts in config exports 2026-02-17 16:53:56 +08:00
Chummy
abdf99cf8c chore(lint): extend low-risk clippy cleanup batch
- normalize numeric literals (115_200) in hardware/peripheral config paths

- remove test-only useless format! allocations in discord IDs

- simplify closures and auto-deref in browser/http/rag/peripherals

- keep behavior unchanged while reducing warning surface
2026-02-17 16:40:58 +08:00
darwin808
4413790859 chore(lint): remove unused imports, variables, and redundant mut bindings
Eliminate low-risk clippy warnings as part of the strict lint backlog (#409):

- Remove unused `uuid::Uuid` imports from slack and telegram channels
- Remove unnecessary `mut` and redundant rebindings in agent loop
- Prefix unused `channel_id` variable in discord channel
- Remove unused test imports (`ChatResponse`, `ToolCall`, `TempDir`, `Path`)
2026-02-17 16:40:58 +08:00