Align Linq messaging with the OpenClaw channel runtime - #10
Conversation
26dd4d3 to
c98e1a6
Compare
|
Compatibility correction after auditing the host-version boundary:
The PR description has been updated to make this boundary explicit. |
c98e1a6 to
d3fd2d3
Compare
|
Follow-up proof on head I tested more than compilation against the minimum host. OpenClaw 2026.6.1 loaded the plugin runtime from an isolated state/config, registered the That loader test caught one real omission: Current matrix:
The remaining version distinction is deliberate and documented: 7.1 adds recipient-aware session selection for one-shot CLI agent runs; it is not required for the rest of the Linq channel to operate. |
|
Full minimum-version E2E is now complete. This was run with the published OpenClaw 2026.6.1 package, not the current host:
The peer requirement remains |
|
Setup/runtime follow-up added on the current head (
This is the architecture finding assigned to #10; token prompting and provider-mutation guards remain on stacked #12. |
ghsmc
left a comment
There was a problem hiding this comment.
solid refactor — approving. ran the suite against both openclaw 2026.7.1 and the 2026.6.1 minimum peer: typecheck clean and 41/41 tests pass on both, and every plugin-sdk import used here exists in 6.1, so the compat claim holds. also nice catch moving read receipts/typing behind sender authorization — the old monitor leaked presence to unauthorized senders.
a few comments, none blocking:
-
src/linq/ingress.ts—normalizeLinqSenderstrips dots (plus spaces/parens/hyphens) and lowercases before allowlist/pairing matching. fine for phone formatting, but imessage handles can be emails, soj.doe@example.comandjdoe@example.comcollide into one identity on the auth surface. i'd restrict the dot-stripping to phone-shaped senders. this is the one i'd like addressed before or shortly after merge. -
src/linq/inbound.ts— context extra hardcodesWasMentioned: true, CommandAuthorized: true. equivalent today since dispatch only happens post-authorization, but it throws away any finer-grainedauthorization.senderAccessthe shared ingress result carries. -
src/linq/inbound.test.ts— one test usesdmPolicy: "allowlist", which isn't a legal value in the plugin's own config schema (pairing|open|disabled). it only compiles because tests are excluded from typecheck. either addallowlistto the enum if that's the intent, or point the test at a reachable policy. -
fyi: reply context moved from the visible
[Replying to message <id>]body suffix toextra.ReplyToId— if the shared context builder doesn't render that, agents lose visible reply context. -
fyi, pre-existing not a regression: with no
webhookSecretconfigured and the defaultdmPolicy: open, an unsigned POST to the webhook path dispatches the agent fully command-authorized. carried over unchanged (hmac + 300s replay window intact when a secret is set) but deserves a startup warning at some point.
Summary
Validation
loaded, Linq channel registered, strict recursive account schema exposed, andplugins doctorreports no issuesLive OpenClaw 2026.6.1 proof
message.receivedsubscription targeting a public tunnel405for GET and401for an unsigned POSThello61message from the sandbox senderHey Dallin — I’m here.to the same Linq chat; the provider API recorded both messageslastChannel: linq, the account, and the exactlinq:chat:<chat_id>delivery targetLinq 6.1 restart route verified.from the stored session; OpenClaw reporteddeliverySucceeded: trueand Linq recorded the messageNo sandbox token, phone number, signing secret, chat ID, or tunnel URL is included in this PR.
Compatibility notes
openclaw >=2026.6.1; OpenClaw 7.1 is not a prerequisitedmPolicy: openbehavior while using shared ingressopenclaw agent --channel linq --to ...runs is a host capability added in OpenClaw 7.1Next phases
This completes messaging runtime alignment. The stacked #12 handles webhook onboarding correctness next; structured status and guided smoke diagnostics follow in Phase 2. FaceTime Audio work remains gated on a supported Linq call-control and duplex-media contract; once available, the planned sequence is voice config/security, call lifecycle, authenticated media transport, shared OpenClaw realtime-voice bridging, and production hardening.