argenis de la rosa
3a8e7d6edf
feat(providers): support custom auth_header for custom endpoints
2026-03-04 05:38:56 -05:00
argenis de la rosa
cc53ba6685
fix(gateway): clarify public-bind warning wording
2026-03-03 19:54:57 -05:00
Chummy
61398eb900
fix(channels): robust qq/feishu image delivery and multimodal proxy fetch routing
2026-03-02 18:03:55 +08:00
xj
91d8abf723
feat(observability): add labeled WATI webhook auth failure metric
2026-03-02 00:29:53 -08:00
xj
b171955335
fix(gateway): accept case-insensitive WATI Bearer token scheme
2026-03-02 00:29:52 -08:00
xj
a56479f15b
fix: address coderabbit feedback for wati auth/docs
2026-03-02 00:29:52 -08:00
xj
b4087d547b
fix(gateway): satisfy strict lint and codeql for wati tests
2026-03-02 00:29:52 -08:00
xj
ca99948993
fix(gateway): accept any valid WATI signature header
2026-03-02 00:29:52 -08:00
xj
d59b2cb13e
fix(gateway): enforce WATI webhook authentication
2026-03-02 00:29:52 -08:00
xj
13feef9cee
fix(plugins): address copilot review follow-ups
2026-03-01 14:37:02 -08:00
xj
61ee2a4664
Merge pull request #1365 from gh-xj/feat/wasm-plugin-runtime-exec
...
feat(plugins): add wasm runtime execution bridge, limits, and docs (part 2/2) (RMN-271)
2026-03-01 14:00:26 -08:00
argenis de la rosa
13790ac2b9
fix(agent): refresh system prompt datetime across long-lived turns
2026-03-01 15:51:10 -05:00
xj
886d48ccbe
fix(ci): isolate rust homes and harden self-hosted cache usage
2026-03-01 11:23:13 -08:00
argenis de la rosa
c5d84ebc59
test(gateway): fill bluebubbles fields in AppState fixture
...
Add missing bluebubbles fixture fields to the node-control AppState test
initializer so lib tests compile after AppState struct expansion.
2026-03-01 13:16:47 -05:00
xj
9294d38eba
Merge remote-tracking branch 'upstream/main' into tmp/pr1365-sync
...
# Conflicts:
# .github/workflows/ci-run.yml
2026-03-01 09:57:27 -08:00
Chummy
364ab048ac
fix(security): harden non-local gateway auth boundaries
2026-03-02 00:21:19 +08:00
xj
0605f65ca8
style: apply rustfmt for CI lint gate
2026-03-01 03:11:24 -08:00
xj
05d36862c5
feat(plugins): add hot-reload state and activate observer bridge
2026-02-28 21:33:11 -05:00
argenis de la rosa
f677367e4b
style: apply rustfmt to agent-authored changes
2026-02-28 19:51:37 -05:00
argenis de la rosa
467fea87c6
refactor(hooks): extract HookRunner factory and make plugin registry init idempotent
...
- Add HookRunner::from_config() factory that encapsulates hook construction
from HooksConfig, replacing 3 duplicated blocks in agent/loop_, gateway,
and channels modules.
- Make plugin registry initialize_from_config() idempotent: skip re-init
if already initialized, log debug message instead of silently overwriting.
- Add capability gating for tool_result_persist hook modifications.
2026-02-28 19:51:37 -05:00
argenis de la rosa
ade0e91898
feat(plugins): route declared tools/providers through plugin registry
2026-02-28 19:51:37 -05:00
argenis de la rosa
1d6afe792b
feat(plugins): scaffold wasm runtime and wire core hook lifecycle
2026-02-28 19:51:37 -05:00
argenis de la rosa
d9dba0c76f
fix(observability): propagate prometheus metric registration failures
2026-02-28 19:34:19 -05:00
argenis de la rosa
9a16098f49
fix(gateway): pass session id in bluebubbles chat path
2026-02-28 19:23:30 -05:00
xj
f2c7498345
Merge remote-tracking branch 'upstream/main' into feat/channel-bluebubbles
...
# Conflicts:
# src/channels/mod.rs
2026-02-28 14:52:34 -08:00
argenis de la rosa
f7de9cda3a
Merge remote-tracking branch 'origin/main' into pr2093-mainmerge
2026-02-28 17:33:17 -05:00
argenis de la rosa
5d248bf6bf
fix(build): restore gateway and cursor compile compatibility
2026-02-28 16:32:38 -05:00
argenis de la rosa
bd0a12ad3c
fix(gateway): persist ws chat history by session
2026-02-28 16:23:15 -05:00
argenis de la rosa
991955ddce
fix(gateway): pass optional session id in github webhook path
2026-02-28 16:01:42 -05:00
maxtongwang
4d195be713
feat(channel): add BlueBubbles iMessage channel
...
Adds a BlueBubbles channel so ZeroClaw can send and receive iMessages
via a locally-running BlueBubbles server on macOS.
What changed:
- src/channels/bluebubbles.rs — new BlueBubblesChannel implementing Channel
- Webhook-based ingestion (push, no polling)
- Allowlist + ignore_senders filtering
- Rich text via iMessage Private API (attributedBody bold/italic/underline)
- Typing indicator (start_typing / stop_typing) while LLM processes
- Message effects ([EFFECT:confetti], [EFFECT:slam], etc.)
- 500-entry fromMe FIFO cache for reply-context resolution
- Attachment placeholder format matching OpenClaw (<media:image>)
- 38 unit tests covering parsing, filtering, timestamps, effects
- src/config/schema.rs — BlueBubblesConfig struct + ChannelsConfig field
- Fields: server_url, password, allowed_senders, webhook_secret, ignore_senders
- Debug impl redacts password and webhook_secret
- src/gateway/mod.rs — POST /bluebubbles route + handler
- Bearer token auth if webhook_secret is set
- Typing indicator around LLM call
- Memory auto-save on incoming messages
- src/channels/mod.rs — module + re-export + iMessage delivery instructions
- src/providers/cursor.rs — fix pre-existing missing quota_metadata field
Non-goals: BlueBubbles Private API pairing, polling mode, contact management.
Closes #2268
2026-02-28 12:08:24 -08:00
argenis de la rosa
3825eca3dc
fix(memory): thread session IDs through runtime paths
2026-02-28 15:00:27 -05:00
argenis de la rosa
9784e3bfc1
feat(channel): add github native channel MVP
2026-02-28 14:03:10 -05:00
argenis de la rosa
3f70cbbf9b
feat(gateway): add paired devices API and dashboard tab
2026-02-28 13:34:33 -05:00
argenis de la rosa
cc0bc49b2f
feat(channel): add napcat support for qq protocol
2026-02-28 13:02:55 -05:00
argenis de la rosa
62b719c447
fix(gateway): allow ws query fallback without subprotocol header
2026-02-28 08:36:18 -05:00
Chummy
51ad52d0e8
security: harden sensitive I/O and outbound leak controls
2026-02-28 21:30:37 +08:00
Chummy
61e738287b
chore(ws): mention query token auth in unauthorized hint
2026-02-28 21:21:33 +08:00
Chummy
2a865ac713
chore(gateway): remove unused ws chat artifacts
2026-02-28 21:21:33 +08:00
Chummy
32205fb038
fix(gateway): accept websocket token query fallback
2026-02-28 21:21:33 +08:00
VirtualHotBar
857cb3c054
Merge remote-tracking branch 'origin/main'
2026-02-28 19:00:27 +08:00
VirtualHotBar
0a357064d9
session/history: allowlist persistable roles (user, assistant) via ROLE_* constants; unify filtering in channel + agent; memory/session: reduce read contention with RwLock+AtomicI64 and refresh updated_at on get_history; providers: export role constants and helper; security: switch HMAC verifications to ring::hmac for Linq/Nextcloud/WhatsApp; channels tests: auto-approve mock_price to avoid non-CLI approval dead-wait; misc: ignore target_ci/.idea; main: use local rag module.
2026-02-28 18:40:48 +08:00
VirtualHotBar
fae10cd5c4
Merge remote-tracking branch 'origin/main'
...
# Conflicts:
# src/channels/mod.rs
# src/config/mod.rs
# src/config/schema.rs
2026-02-28 16:12:02 +08:00
Chummy
7470bded5d
fix: harden browser and web search validation paths
2026-02-28 15:50:06 +08:00
Chummy
6716391502
feat: harden web access policy and add flexible web search/runtime config
2026-02-28 15:50:06 +08:00
VirtualHotBar
0a42329ca5
fix: session leftovers after db47f56
...
- Demote session normal flow logs to debug\n- Skip session operations when CHANNEL_SESSION_CONFIG is uninitialized\n- Add spawn_blocking panic context for SQLite session manager\n- Fix fmt/clippy regressions (Box::pin large futures, cfg features, misc lints)
2026-02-28 15:23:42 +08:00
Preventnetworkhacking
479b6da4ce
feat(cost): wire provider token usage to cost tracking ( #2111 )
...
Implement CostObserver that intercepts LlmResponse observer events and
records token usage to the CostTracker with proper cost calculations.
Changes:
- Add src/observability/cost.rs: CostObserver implementation
- Listens for LlmResponse events with token counts
- Looks up model pricing from CostConfig (with fallback defaults)
- Records usage via CostTracker.record_usage()
- Includes model family matching for pricing lookups
- Update src/observability/mod.rs:
- Export CostObserver
- Add create_observer_with_cost_tracking() helper that wraps base
observer with CostObserver when cost tracking is enabled
- Update src/gateway/mod.rs:
- Use create_observer_with_cost_tracking() to wire cost observer
into the gateway observer stack when config.cost.enabled is true
The /api/cost endpoint already exists and will now return accurate
session/daily/monthly cost data populated by the CostObserver.
Resolves #2111
2026-02-28 02:00:13 -05:00
Chummy
81387f9896
fix(codex): preserve transport overrides across runtimes
2026-02-28 13:48:41 +08:00
Chummy
b721754ead
feat(codex): add websocket-first transport selection
2026-02-28 13:48:41 +08:00
VirtualHotBar
fa8a98113e
Merge remote-tracking branch 'origin/main'
2026-02-28 12:06:01 +08:00
argenis de la rosa
b8de8ce8b9
feat(transcription): support config-level api_key
2026-02-27 15:15:02 -05:00