Bump to zeroclawlabs fork (0.6.9 → 0.7.x) with native poll/interactive support#116
Merged
Bump to zeroclawlabs fork (0.6.9 → 0.7.x) with native poll/interactive support#116
Conversation
Bumps Calciforge to a fork branch of zeroclawlabs that adds two
features upstream silently dropped:
* Signal: dataMessage.pollAnswer field exposed via ChannelMessage
content '[choice]<title>' (or '[choice-index]N' fallback) so
poll-vote events flow back to the dispatcher.
* WhatsApp Cloud: interactive.button_reply / list_reply parsing
in webhook payload, surfacing the option's id as '[choice]<id>'.
Plus outbound send_interactive_buttons / send_interactive_list
helpers (Meta /v18.0/{phone_number_id}/messages with the
interactive body shape).
The 0.6.9 → 0.7.x major-version bump is a structural refactor:
upstream split the umbrella crate into per-concern subcrates
(zeroclaw-api, zeroclaw-channels, zeroclaw-config, etc.). Calciforge
adapts via mechanical import-path renames:
zeroclaw::channels::traits::* → zeroclaw_api::channel::*
zeroclaw::channels::SignalChannel → zeroclaw_channels::signal::SignalChannel
zeroclaw::channels::WhatsAppWebChannel → zeroclaw_channels::whatsapp_web::WhatsAppWebChannel
zeroclaw::channels::LinqChannel → zeroclaw_channels::linq::LinqChannel
zeroclaw::channels::linq::verify_linq_signature
→ zeroclaw_channels::linq::verify_linq_signature
zeroclaw::config::WhatsAppWebMode → zeroclaw_config::schema::WhatsAppWebMode
zeroclaw::config::WhatsAppChatPolicy → zeroclaw_config::schema::WhatsAppChatPolicy
No semantic changes; everything Calciforge consumed at the call-site
level still has the same shape on master. The umbrella zeroclawlabs
package stays as a dep (its own ZeroClawAdapter + lib name 'zeroclaw'
still exist). Adds three new workspace deps for the subcrates that
host channels, traits, and config types.
Cargo.toml uses git+branch references rather than tag/version because
the fork's calciforge-interactive branch tracks upstream master with
our two patches on top. Once upstream merges the patches, this can
flip back to a published version. The branch is small and easy to
rebase on upstream churn.
The matcher already added in PR #114 will pair with this in a
follow-up PR that wires native poll/interactive rendering on
signal::send_outbound and whatsapp::send_outbound when
OutboundMessage.controls is non-empty.
ⓘ You've reached your Qodo monthly free-tier limit. Reviews pause until next month — upgrade your plan to continue now, or link your paid account if you already have one. |
There was a problem hiding this comment.
Pull request overview
This PR updates Calciforge’s embedded zeroclaw integration from the 0.6.9 umbrella crate to a 0.7.x fork that splits the API into subcrates, laying the dependency groundwork for a follow-up PR that will add native Signal polls and WhatsApp interactive controls. In the current codebase, this mainly affects the channel adapters and config types that wrap zeroclaw transports.
Changes:
- Bumps workspace zeroclaw dependencies from the published 0.6.9 crate to the
calciforge-interactivegit fork and adds the new split subcrates. - Updates Calciforge channel/config imports to use
zeroclaw_api,zeroclaw_channels, andzeroclaw_config. - Refreshes the lockfile to the forked 0.7.4 dependency graph and its transitive crates.
Reviewed changes
Copilot reviewed 6 out of 7 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
crates/calciforge/src/config.rs |
Switches WhatsApp config field types to the new zeroclaw_config::schema enums. |
crates/calciforge/src/channels/whatsapp.rs |
Updates WhatsApp channel imports and module docs for the split zeroclaw crates. |
crates/calciforge/src/channels/sms.rs |
Repoints SMS/Linq channel imports and signature verification helper to the new crate paths. |
crates/calciforge/src/channels/signal.rs |
Updates Signal channel imports and top-level docs to the split crate layout. |
crates/calciforge/Cargo.toml |
Adds direct Calciforge dependencies on zeroclaw-api, zeroclaw-channels, and zeroclaw-config. |
Cargo.toml |
Replaces the workspace zeroclaw dependency with git-based forked 0.7.x workspace entries. |
Cargo.lock |
Locks the workspace to the fork commit and records the expanded 0.7.4 transitive dependency set. |
| [workspace.dependencies] | ||
| # External agent dependencies | ||
| zeroclawlabs = "0.6.9" | ||
| zeroclawlabs = { package = "zeroclawlabs", git = "https://github.com/bglusman/zeroclaw", branch = "calciforge-interactive" } |
| /// WhatsApp Web operating mode. | ||
| #[serde(default)] | ||
| pub whatsapp_mode: zeroclaw::config::WhatsAppWebMode, | ||
| pub whatsapp_mode: zeroclaw_config::schema::WhatsAppWebMode, |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
PR #114 landed the matcher utility for text-fallback choice resolution. To wire native rendering (Signal polls, WhatsApp interactive buttons/lists), upstream
zeroclawlabsneeds two additive patches that surface inbound events it currently silently drops.This PR bumps Calciforge to a small fork branch that carries those patches, paired with the major-version structural refactor that upstream did between 0.6.9 and 0.7.x.
What's in the fork
bglusman/zeroclaw:calciforge-interactive(~140 LOC, 2 commits atop upstream master):Signal poll-vote events — extends
dataMessage.pollAnswerdeserialization soChannel::listenemits a syntheticChannelMessagewith content[choice]<title>(or[choice-index]Nfallback) when a user votes. AddsSignalChannel::send_poll(recipient, question, options, multi)outbound helper that POSTs to signal-cli-rest-api/v2/sendwithpollDetails.WhatsApp Cloud interactive replies — extends
parse_webhook_payloadto recognizetype=interactivemessages withbutton_reply/list_replysub-types, surfacing the option'sidas[choice]<id>. AddsWhatsAppChannel::send_interactive_buttonsandsend_interactive_listhelpers.Both are fully additive — no breaking changes to upstream's public API. Upstream PR planned once verified in production.
What's in this PR (Calciforge side)
The 0.6.9 → 0.7.x bump is structural — upstream split the umbrella crate into subcrates. Mechanical import-path renames:
zeroclaw::channels::traits::*zeroclaw_api::channel::*zeroclaw::channels::SignalChannelzeroclaw_channels::signal::SignalChannelzeroclaw::channels::WhatsAppWebChannelzeroclaw_channels::whatsapp_web::WhatsAppWebChannelzeroclaw::channels::LinqChannelzeroclaw_channels::linq::LinqChannelzeroclaw::config::WhatsAppWebModezeroclaw_config::schema::WhatsAppWebModezeroclaw::config::WhatsAppChatPolicyzeroclaw_config::schema::WhatsAppChatPolicyNo semantic changes. Everything Calciforge consumed at the call-site level still has the same shape.
Cargo.tomladds three new git deps for the subcrates Calciforge directly uses.What this PR does NOT do
It bumps the dep + adapts imports. It does not yet wire the native rendering — that's a follow-up PR that updates
signal::send_outboundandwhatsapp::send_outboundto:Plus per-channel inbound dispatch for the
[choice]<id>sentinel. Splitting it lets this PR ship the dep bump cleanly without compounding two concerns.Stats
Migration / compat
version = "..."dep and the fork goes away.ZeroClawAdapter(Calciforge's HTTP RPC adapter for daemon-mode zeroclaw peers) still works unchanged; it's at the same path on the umbrella crate.🤖 Generated with Claude Code