Commit Graph

501 Commits

Author SHA1 Message Date
argenis de la rosa
a1d51b6454 feat(agent): add ProgressTracker for in-place tool progress updates 2026-02-28 21:19:16 -05:00
argenis de la rosa
bfacba20cb feat(config): add ProgressMode enum for streaming channel draft updates 2026-02-28 20:56:16 -05:00
xj
9095a54de3 fix(main): restore rust gates after bluebubbles merge 2026-02-28 17:00:18 -08: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
c3dbd9a7a7 fix(quality): remove infallible unwraps in sop and skillforge 2026-02-28 19:37:38 -05:00
argenis de la rosa
5b6348d103 fix(telegram): deduplicate attachment markers in single reply 2026-02-28 19:24:39 -05:00
argenis de la rosa
c56c33d477 test(channels): add new runtime context fields in approval command tests 2026-02-28 19:23:30 -05:00
Chummy
cc80d51388 fix: align telegram ack constructor usage after rebase 2026-02-28 19:23:30 -05:00
Chummy
f1009c43a3 fix: resolve ack config rebase drift across telegram runtime 2026-02-28 19:23:30 -05:00
Chummy
762ca25e19 feat(channels): add chat-scoped ACK rules and simulation aggregates 2026-02-28 19:23:30 -05:00
argenis de la rosa
cd3c6375d7 fix(channels): resolve approval command merge conflict on main 2026-02-28 19:23:30 -05:00
Chummy
f594a233b0 feat(channels): enrich ack reaction policy with regex sampling and simulate 2026-02-28 19:23:30 -05:00
Chummy
8583f59066 feat(channels): add configurable ack reactions and channel ack config tool 2026-02-28 19:23:30 -05:00
xj
09119d46ec
Merge pull request #2271 from maxtongwang/feat/channel-bluebubbles
feat(channel): add BlueBubbles iMessage channel
2026-02-28 15:56:36 -08:00
bevis
812c2f62f8 fix(channels): bound dingtalk rich text recursion 2026-02-28 18:50:59 -05:00
bevis
c2b361d093 fix(channels): accept richer dingtalk callback text payloads 2026-02-28 18:50:59 -05:00
argenis de la rosa
7d6d90174f feat(channel): use DingTalk Open API for sending messages
- Switch from sessionWebhook to /v1.0/robot/oToMessages/batchSend API
- Add access_token caching with automatic refresh (60s buffer)
- Enable cron job delivery to DingTalk (no user interaction required)

This change allows DingTalk to actively send messages (e.g., cron
reminders) without requiring the user to send a message first.
2026-02-28 18:41:51 -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
61d538b6d6 feat(slack): support listening on multiple configured channel IDs 2026-02-28 17:48:20 -05:00
argenis de la rosa
7f645e1a5c Merge remote-tracking branch 'origin/main' into pr2093-mainmerge 2026-02-28 17:43:48 -05:00
argenis de la rosa
c07314bd92 merge(main): resolve #2093 conflicts and restore session build/test parity 2026-02-28 17:42:37 -05:00
argenis de la rosa
e663ad274e fix(acp): harden process lifecycle and health validation 2026-02-28 17:36:39 -05:00
argenis de la rosa
1b8d747e1f fix(acp): stabilize send path, remove unreachable arms, and fix docs tables 2026-02-28 17:36:39 -05:00
feishiheng
579f0f3d9a feat(channels): add comprehensive ACP channel tests and fix implementation bugs (conflict resolution)
- Add 14 test functions for ACP channel (allowlist logic and JSON-RPC structures)
- Fix mutex guard across await in send() method using take() pattern
- Add acp: None default fields to ChannelsConfig in schema.rs
- Integrate ACP channel into channels/mod.rs and collect_configured_channels()
- Update channels-reference.md documentation
- Resolve merge conflicts with upstream/dev

All 17 ACP tests pass successfully.
2026-02-28 17:36:39 -05: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
9b9c36e84d test(channels): lock assistant autosave key namespace 2026-02-28 17:24:31 -05:00
argenis de la rosa
6a24f25f91 fix(memory): auto-save assistant responses alongside user messages 2026-02-28 17:24:31 -05:00
Preventnetworkhacking
d89e7ab415 fix(utf8): prevent panic on CJK text truncation [CDV-27]
Fix UTF-8 boundary panics in two locations not covered by PR #2154:

1. telegram.rs:3112 - OTP/approval message preview truncation
   - Changed from byte-based `&raw_args[..260]` to char-based truncation
   - Uses existing `truncate_with_ellipsis` utility

2. detection.rs:222 - Tool output hash prefix
   - Changed from `&output[..4096]` to UTF-8-safe boundary
   - Uses existing `floor_utf8_char_boundary` utility

Added test: hash_output_utf8_boundary_safe() verifies no panic on CJK text.

Fixes #2276
2026-02-28 16:35:09 -05:00
argenis de la rosa
df9ebcb3d2 fix(model): resolve provider-aware fallback model IDs 2026-02-28 16:33:04 -05:00
argenis de la rosa
9e4ecc0ee6 fix(slack): resolve sender display names with cache 2026-02-28 16:23:45 -05:00
argenis de la rosa
a30869112e fix(lark,config): complete feishu dedupe and profile config compatibility 2026-02-28 16:17:24 -05:00
argenis de la rosa
4f32b6d8e4 fix(lark): dedupe ws and webhook events by event key 2026-02-28 16:17:24 -05:00
maxtongwang
32150c85fb fix(channel/bluebubbles): address CodeRabbit review findings
- typing_handle → typing_handles: per-recipient HashMap to prevent
  concurrent conversations from cancelling each other's typing loops
- add is_sender_ignored() method; enforce ignore_senders before allowlist
  evaluation in parse_webhook_payload (precedence: ignore > allow)
- wire BlueBubblesConfig.password and .webhook_secret into
  decrypt_channel_secrets / encrypt_channel_secrets in config/schema.rs
- add 3 unit tests covering is_sender_ignored edge cases
2026-02-28 12:20:47 -08: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
0253752bc9 feat(memory): add observation memory tool 2026-02-28 13:32:13 -05:00
Argenis
a25ca6524f
feat(skills): support front-matter metadata and always-inject skills (#2248)
* feat(skills): support front matter always injection in compact mode

* chore(pr): retrigger intake after template and linear updates
2026-02-28 13:11:57 -05:00
argenis de la rosa
6500f048bc feat(email): add IMAP ID extension support 2026-02-28 13:05:49 -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
376d965088 Merge remote-tracking branch 'origin/main' into supersede-pr-1923-mergefix 2026-02-28 12:05:28 -05:00
loydccc
2044e828de fix(channel): mark discord inbound image attachments as [IMAGE]
# Conflicts:
#	src/channels/discord.rs
2026-02-28 11:57:17 -05:00
ZeroClaw Bot
8c0be20422 feat(providers): add quota_metadata to ChatResponse across all providers
Wire QuotaMetadata into ChatResponse for all provider implementations,
enabling quota tracking data to flow from API responses through the
agent loop to quota monitoring tools.

Depends on: circuit breaker (#1842) + quota monitoring (#1904)

Made-with: Cursor
2026-02-28 11:45:02 -05:00
Chummy
cf59171937 test: align channel context defaults and de-flake proxy assertion 2026-02-28 23:01:53 +08:00
Chummy
a89f5c25be fix: resolve rebase drift in channel approval runtime 2026-02-28 23:01:53 +08:00
Chummy
42471f4d3e fix: restore ws query-token fallback and telegram test fixtures 2026-02-28 23:01:53 +08:00
Chummy
be8f7efe82 test: stabilize flaky threshold assertions 2026-02-28 23:01:53 +08:00
Chummy
5ee6024914 Fix channel turn persistence and low-sensitivity leak detection 2026-02-28 23:01:53 +08:00