Skip to content

fix(nextcloud-talk): dispatch react action so agents can send reactions (#70110)#72348

Merged
clawsweeper[bot] merged 6 commits into
openclaw:mainfrom
nitinjwadhawan:fix/nextcloud-talk-reactions-70110
May 18, 2026
Merged

fix(nextcloud-talk): dispatch react action so agents can send reactions (#70110)#72348
clawsweeper[bot] merged 6 commits into
openclaw:mainfrom
nitinjwadhawan:fix/nextcloud-talk-reactions-70110

Conversation

@nitinjwadhawan

@nitinjwadhawan nitinjwadhawan commented Apr 26, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Problem: Nextcloud-Talk advertises capabilities.reactions: true, but the channel plugin never wired the existing sendReactionNextcloudTalk HTTP sender to the agent-facing action surface. Reporter traced it to extensions/nextcloud-talk/src/send.ts:192 ("this function is actually never called").
  • Why it matters: Reactions are a first-class Nextcloud Talk bot feature and a common agent workflow (acknowledge a message, approve, thumbs-up). Without the wiring, the capability flag is a lie and reaction attempts silently no-op.
  • What changed: Added a ChannelMessageActionAdapter at extensions/nextcloud-talk/src/message-actions.ts (matches the Signal pattern) and registered it via actions: nextcloudTalkMessageActions in extensions/nextcloud-talk/src/channel.ts. Added 16 unit tests for the adapter plus 2 tests for the existing reaction HTTP sender (URL/headers/body/signature on success, error surface on non-2xx).
  • What did NOT change (scope boundary): The existing reaction HTTP sender, URL/signature/body, capability flag, config schema, SSRF guard. Reaction removal (DELETE) is out of scope and left for a follow-up — the existing sendReactionNextcloudTalk only implements POST.

Change Type

  • Bug fix
  • Feature
  • Refactor required for the fix
  • Docs
  • Security hardening
  • Chore/infra

Scope

  • Integrations

Linked Issue/PR

Root Cause

  • Root cause: The Nextcloud-Talk channel plugin definition in extensions/nextcloud-talk/src/channel.ts did not register an actions adapter. The reaction HTTP sender sendReactionNextcloudTalk exists, but the only callers were tests — the shared message tool's action dispatcher (src/channels/plugins/message-action-dispatch.ts) never reached this channel for react because no actions.handleAction was registered. So the agent-visible capabilities.reactions: true had no execution path behind it.
  • Missing detection/guardrail: No contract test asserting that every channel advertising capabilities.reactions: true also exposes a react action through its actions adapter. Not added in this PR; happy to follow up if maintainers want.
  • Contributing context: The existing outbound.attachedResults block in channel.ts wires sendText and sendMedia, but reactions dispatch through the actions adapter (see Signal/WhatsApp/Matrix), not outbound. The seam was missing.

Regression Test Plan

  • Coverage level that should have caught this:
    • Unit test
  • Target tests:
    • extensions/nextcloud-talk/src/message-actions.test.ts (new) — 16 tests for the action adapter:
      • describeMessageTool returns null when no accounts configured / account disabled / account missing secret or baseUrl.
      • describeMessageTool returns ["send", "react"] when a configured account exists; honors accountId scoping.
      • supportsAction delegates send to outbound and owns react.
      • handleAction invokes sendReactionNextcloudTalk with the correct target/messageId/emoji/accountId/cfg.
      • handleAction falls back to toolContext.currentMessageId when params.messageId is absent.
      • handleAction throws clean errors on missing to / messageId / emoji.
      • handleAction rejects send (outbound owns it) and unsupported actions; propagates sender errors unchanged.
    • extensions/nextcloud-talk/src/send.cfg-threading.test.ts (extended) — 2 new tests for the reaction HTTP sender:
      • successful POST asserts URL https://.../ocs/v2.php/apps/spreed/api/v1/bot/<token>/reaction/<messageId>, headers (OCS-APIRequest, X-Nextcloud-Talk-Bot-Random/Signature), body {"reaction":"<emoji>"}, and that the signature is computed over the emoji only (not the full JSON body).
      • non-2xx surfaces Nextcloud Talk reaction failed: <status> <body>.
  • Why this is the smallest reliable guardrail: The fix is wiring; the sender is HTTP. Together these two files prove (a) the action gets dispatched at all, and (b) when dispatched, it forms the right Nextcloud Talk bot request and surfaces failures.

User-visible / Behavior Changes

  • Agents on Nextcloud-Talk can now send reactions via the shared message tool with action: "react", matching how Signal / Matrix / WhatsApp / Telegram work.
  • The "nothing happens" silent failure when an agent tried to react on Nextcloud-Talk is gone.
  • No config changes, no schema changes, no env changes, no defaults flipped.

Security Impact

  • New permissions/capabilities? Nocapabilities.reactions: true was already advertised at extensions/nextcloud-talk/src/channel.ts:77.
  • Secrets/tokens handling changed? No — reuses the existing bot-secret flow.
  • New/changed network calls? No — the endpoint POST /ocs/v2.php/apps/spreed/api/v1/bot/{token}/reaction/{messageId} is unchanged. Only the path by which it gets called changed.
  • Command/tool execution surface changed? No.
  • Data access scope changed? No.

Repro + Verification

Environment

  • OS: macOS 26.4.1
  • Runtime: Node 22+, vitest 4.1.5, pnpm 10.33.0
  • Channel: Nextcloud Talk (webhook bot)
  • Config: tests use mocked cfg + mocked sendReactionNextcloudTalk (adapter tests) and mocked global fetch (sender tests).

Steps (repro of bug on main before fix)

  1. Configure an agent with Nextcloud-Talk and observe capabilities.reactions: true exposed.
  2. Ask the agent to react ("👍") to an inbound message.
  3. The shared message tool dispatches react → no handler is registered for Nextcloud-Talk in message-action-dispatch.tsdispatchChannelMessageAction returns null → reaction silently dropped or surfaces as "action not supported," while the capability flag still says it is.

Expected

Reaction POST hits the Talk bot endpoint; emoji appears on the message.

Actual (pre-fix)

No request goes out; reporter confirmed via code inspection that sendReactionNextcloudTalk is unreachable from the channel plugin.

Verification after fix

  • pnpm test extensions/nextcloud-talk72 passed (was 46 on main before this PR; +26 tests, no skips).
  • pnpm check:changed → green across tsgo (extensions + extension tests), oxlint, runtime import cycles, and targeted tests.

Real Behavior Proof

Behavior or issue addressed: Nextcloud Talk advertises capabilities.reactions: true but never wires sendReactionNextcloudTalk into the channel actions adapter, so agent react requests on Nextcloud Talk silently no-op (issue #70110). This PR registers the missing adapter so the same shared message tool path that other channels use now reaches the Nextcloud Talk reaction HTTP sender.

Updated 2026-05-18: Earlier proof exercised the underlying HTTP sender via a standalone mirror. Per review feedback (ClawSweeper / Codex review), this section now also includes proof through the actual changed nextcloudTalkMessageActions.handleAction adapter path that this PR adds.

Real environment tested: Live Nextcloud 30.0.17 + Talk (spreed) 20.1.11 server running in a local Docker container (nextcloud:30-apache, sqlite backend), reachable on http://localhost:8081/. Two real Nextcloud accounts (admin, alice), one Talk bot installed via php occ talk:bot:install with --feature webhook --feature response, and a Talk room openclaw-proof-room with both users plus the bot attached.

Exact steps or command run after this patch:

  1. docker compose up -d against nextcloud:30-apache (compose file in repro harness).
  2. docker exec ... php occ app:install spreed → installed Talk 20.1.11.
  3. docker exec ... php occ user:add alice (with strong password from env).
  4. docker exec ... php occ talk:room:create --user admin --user alice --owner admin --description "OpenClaw #70110 proof" "openclaw-proof-room" → received room token.
  5. docker exec ... php occ talk:bot:install OpenClaw <64-hex-secret> <webhook-url> --feature webhook --feature response → bot id 1; php occ talk:bot:setup 1 <room-token> to attach.
  6. curl -u 'alice:<pw>' -H 'OCS-APIRequest: true' -X POST http://localhost:8081/ocs/v2.php/apps/spreed/api/v1/chat/<room-token> -d 'message=Hello%20OpenClaw' → message id 8.
  7. Ran a small Node harness (node proof-react.mjs) that mirrors extensions/nextcloud-talk/src/send.ts:sendReactionNextcloudTalk exactly — identical URL composition, identical generateNextcloudTalkSignature HMAC scheme (HMAC-SHA256(random + reaction, secret)), identical headers, identical {"reaction":"👍"} body — pointed at the live Nextcloud above.
  8. Re-fetched the chat tail as admin to confirm server-authoritative state.

Evidence after fix:

[1] Adapter-path proof (added 2026-05-18 in response to ClawSweeper review). A small Node driver imported the actual nextcloudTalkMessageActions adapter that this PR adds (no mocks of ./send.js or ./accounts.js) and invoked handleAction({ action: "react", ... }) against the live Nextcloud. This exercises the changed code path end-to-end: describeMessageToolsupportsActionhandleAction → param parsing → resolveReactionMessageIdsendReactionNextcloudTalk → live HTTP. Terminal capture from node --import tsx extensions/nextcloud-talk/.proof-adapter.mts:

[adapter] describing message tool for configured account…
[adapter] discovery.actions = ["send","react"]
[adapter] supportsAction react →  true
[adapter] supportsAction send →  false
[adapter] handleAction({ action: "react", to: "<room-token>", messageId: "5", emoji: "👍" })
[adapter] result: {"content":[{"type":"text","text":"{\n  \"ok\": true,\n  \"added\": \"👍\"\n}"}],"details":{"ok":true,"added":"👍"}}

[verify] re-reading chat tail as admin…
[verify] message text:     "Hello OpenClaw — adapter path proof"
[verify] message.reactions: {"👍":1}

[PROOF] ✓ adapter path landed reaction: Nextcloud Talk recorded 1× 👍 on message 5 via nextcloudTalkMessageActions.handleAction

[2] Underlying wire-contract proof (original). Redacted HTTP wire log from a standalone harness that mirrors sendReactionNextcloudTalk (URL, signature scheme, headers, body) against the same live Nextcloud — kept because it shows the redacted request shape explicitly:

[req] POST http://localhost:8081/ocs/v2.php/apps/spreed/api/v1/bot/<room-token>/reaction/<msg-id>
[req] body: {"reaction":"👍"}
[req] headers: {"Content-Type":"application/json","OCS-APIRequest":"true",
                "X-Nextcloud-Talk-Bot-Random":"<redacted-32-byte-hex>",
                "X-Nextcloud-Talk-Bot-Signature":"<redacted-hmac-sha256-hex>"}

[res] status: 201 Created
[res] body: <ocs><meta><status>ok</status><statuscode>201</statuscode>
            <message>OK</message></meta><data/></ocs>

[3] Talk web UI screenshot. Server-rendered Talk UI of Alice's message with the 👍 1 reaction beneath it after the bot reaction landed:

Nextcloud Talk web UI showing 1× 👍 reaction on Alice's message in openclaw-proof-room

Observed result after fix: The PR's adapter, when invoked with handleAction({action:"react", ...}), returns { ok: true, added: "👍" } and the live Nextcloud Talk server independently confirms the reaction is durably attached to the target message (reactions: {"👍":1} on chat readback as a different authenticated user, plus the Talk web UI rendering the reaction). End-to-end, the changed code path wires the agent-facing react action through to a real Nextcloud Talk install.

What was not tested:

  • Reaction removal (DELETE) — intentionally out of scope for this PR; the existing sendReactionNextcloudTalk only implements POST. The new adapter explicitly rejects params.remove === true so callers cannot get the opposite of what they asked for, and this is unit-tested.
  • Full agent loop (model → tool call → gateway → adapter) was not exercised end-to-end in one session; the adapter is invoked directly with a realistic ChannelMessageActionContext shape matching what the gateway dispatcher constructs.

Human Verification

  • Verified scenarios:
    • Read the channel-core SDK (src/channels/plugins/types.core.ts, src/plugin-sdk/channel-actions.ts, src/channels/plugins/message-action-dispatch.ts) to confirm ChannelMessageActionAdapter is the correct seam and that dispatch falls through to null when actions.handleAction is missing.
    • Matched the Signal action adapter as canonical reference (extensions/signal/src/message-actions.ts).
    • Confirmed via the new sender tests that sendReactionNextcloudTalk POSTs the correct URL/headers/body and that the signature is computed over the reaction string only (matches the comment in send.ts:202).
    • Ran the full nextcloud-talk test suite before and after the fix to confirm no regressions (46 → 72 tests).
    • Ran pnpm check:changed end-to-end locally.
    • Stood up Docker Nextcloud 30 + Talk 20 locally and exercised the reaction wire contract end-to-end (see Real Behavior Proof above). Server confirmed the reaction is recorded on the target message; no mocks involved in that path.
  • Edge cases checked:
    • toolContext.currentMessageId fallback when the model omits messageId (common in inbound-reply flows).
    • Account-scoped vs. unscoped discovery.
    • Disabled / unconfigured accounts return null from describeMessageTool.
  • What I did not verify:
    • The full openclaw gateway → channel-action-dispatch → adapter path against the live Nextcloud (covered by unit dispatch tests).
    • Reaction removal (DELETE) — intentionally out of scope; the existing sendReactionNextcloudTalk only implements POST. The PR explicitly rejects remove: true so callers can't get the opposite of what they asked for.

Review Conversations

  • I will resolve any bot review conversations I address in this PR.

Compatibility / Migration

  • Backward compatible? Yes — purely additive; no config, schema, or public API change.
  • Config/env changes? No.
  • Migration needed? No.

Risks and Mitigations

  • Risk: Reaction POST fails at runtime on Talk bot installs that lack --feature reaction when the bot was registered.
    • Mitigation: The HTTP sender propagates the non-2xx error body as Nextcloud Talk reaction failed: <status> <body> (now covered by a test). extensions/nextcloud-talk/src/setup-surface.ts:44 already documents the --feature reaction flag.
  • Risk: New describeMessageTool adds discovery overhead on large account sets.
    • Mitigation: Discovery does at most one resolveNextcloudTalkAccount call (when accountId is given) or one listEnabledNextcloudTalkAccounts.some(...) short-circuiting check. Mirrors the Signal pattern in extensions/signal/src/message-actions.ts.

AI-assisted: yes (Cursor). I read the relevant SDK contracts (ChannelMessageActionAdapter, ChannelMessageActionContext, dispatchChannelMessageAction, resolveReactionMessageId, readStringParam), verified the canonical pattern against Signal's adapter, and wrote the tests. codex review --base origin/main was unavailable in this environment; happy to rerun if a maintainer points to a hosted equivalent.

@openclaw-barnacle openclaw-barnacle Bot added channel: nextcloud-talk Channel integration: nextcloud-talk size: M labels Apr 26, 2026
@greptile-apps

greptile-apps Bot commented Apr 26, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR wires the existing sendReactionNextcloudTalk HTTP sender into a new ChannelMessageActionAdapter (message-actions.ts) and registers it on the Nextcloud Talk channel plugin, closing the gap where capabilities.reactions: true was advertised without an execution path. The change is purely additive and follows the Signal adapter pattern closely, with 18 new unit tests covering the adapter and the reaction HTTP sender.

Confidence Score: 4/5

Safe to merge; the only findings are P2 style/test-naming issues with no runtime impact.

All findings are P2: a discarded-return-value pattern that is harmless given current resolveReactionMessageId semantics, and a test whose description doesn't match its mock. No P0/P1 issues found. The SSRF guard is intact, the signature flow is correct, and the new adapter faithfully mirrors the Signal pattern.

No files require special attention for blocking concerns.

Prompt To Fix All With AI
This is a comment left during a code review.
Path: extensions/nextcloud-talk/src/message-actions.ts
Line: 54-58

Comment:
**Discarded return value obscures the null-fallback logic**

`readStringParam` is called for its throw side-effect only; its return value is silently discarded. If `resolveReactionMessageId` ever returned `null` while `params.messageId` is still present (e.g. a future change to `resolveReactionMessageId`'s semantics), execution would fall through to `String(null)``"null"` and silently send a reaction with messageId `"null"`. The Signal adapter avoids this by converting and guarding in one step:

```typescript
const messageIdRaw = resolveReactionMessageId({ args: params, toolContext });
const messageId = messageIdRaw != null ? String(messageIdRaw) : null;
if (!messageId) {
  // throws – same user-visible error, no discarded return value
  readStringParam(params, "messageId", { required: true });
}
```

How can I resolve this? If you propose a fix, please make it concise.

---

This is a comment left during a code review.
Path: extensions/nextcloud-talk/src/message-actions.test.ts
Line: 86-96

Comment:
**Test description does not match its mock setup**

The test is titled `"returns null when account is disabled"` but the mock returns `[]` (empty list), which is identical to the `"returns null when no accounts are configured"` test above it. The intent was presumably to verify that a disabled account (one that passes through `listEnabledNextcloudTalkAccounts` but fails `isAccountConfigured`) is rejected. As written, `disabledAccount` is never exercised through the `listEnabled…` path, leaving that branch untested.

```typescript
it("returns null when account is disabled", () => {
  hoisted.listEnabledNextcloudTalkAccounts.mockReturnValue([disabledAccount]);
  // ...
```

How can I resolve this? If you propose a fix, please make it concise.

Reviews (1): Last reviewed commit: "test(nextcloud-talk): cover reaction sen..." | Re-trigger Greptile

Comment thread extensions/nextcloud-talk/src/message-actions.ts
Comment thread extensions/nextcloud-talk/src/message-actions.test.ts Outdated
@clawsweeper

clawsweeper Bot commented Apr 26, 2026

Copy link
Copy Markdown
Contributor

Codex review: passed.

Workflow note: Future ClawSweeper reviews update this same comment in place.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

Summary
This PR adds and registers a Nextcloud Talk message action adapter for add-only reactions, updates reaction docs, and adds adapter plus sender tests.

Reproducibility: yes. Source inspection on current main shows Nextcloud Talk advertises reactions and has a guarded reaction sender, but the plugin lacks actions.handleAction, so shared react dispatch has no channel handler.

PR rating
Overall: 🦞 diamond lobster
Proof: 🦞 diamond lobster
Patch quality: 🦞 diamond lobster
Summary: Focused bug fix with strong adapter-path proof, relevant unit coverage, and no blocking findings in this review.

What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

PR egg
✨ Hatched: 🥚 common Pearl Review Wisp

        /\     /\            
      _/  \___/  \_          
     /  ( o   o )  \         
    |      \_/      |        
    |   /\  ===  /\ |        
     \_/  \_____/  \_/       
        _/|_| |_|\_          
       /__| | | |__\         
          ' ' ' '            
         /_/     \_\         
       .-----------.         
      '-------------'        

Rarity: 🥚 common.
Trait: sparkles near resolved comments.
Share on X: post this hatch
Copy: My PR egg hatched a 🥚 common Pearl Review Wisp in ClawSweeper.

What is this egg doing here?
  • Eggs appear after the PR passes real-behavior proof. It is here for vibes, not verdicts: it does not change labels, ratings, merge decisions, or automation.
  • The shell reacts to review momentum: open follow-up work warms it up, re-review makes it wobble, and a clean final review lets it hatch.
  • How to hatch it: reach status: 👀 ready for maintainer look or status: 🚀 automerge armed; that usually means sufficient real-behavior proof, no blocking P0/P1/P2 findings, no security attention needed, and clean correctness.
  • The hatch is seeded from this repository and PR number, so the same PR keeps the same creature; the reviewed head SHA can only change safe visual details.
  • Rarity is just collectible sparkle: 🥚 common, 🌱 uncommon, 💎 rare, ✨ glimmer, and 🌈 legendary.

Real behavior proof
Sufficient (terminal): The PR body includes after-fix terminal proof through the actual adapter against a live Nextcloud Talk server, with server readback and a UI screenshot confirming the reaction.

Risk before merge
Why this matters: - I did not execute tests in this read-only pass; merge should still rely on exact-head CI/automerge checks for the current head.

Maintainer options:

  1. Decide the mitigation before merge
    Land this Nextcloud Talk-owned action adapter after exact-head checks pass, then close [Bug]: Nextcloud-Talk channel does not send emoji reactions #70110 as fixed by the merge.
  2. Pause or close
    Do not merge this PR until maintainers decide whether the risk is worth taking.

Next step before merge
No repair lane is needed; the PR is review-clean and already opted into ClawSweeper automerge, so exact-head validation and merge handling are the next step.

Security
Cleared: No concrete security or supply-chain regression found; the diff wires an existing SSRF-guarded sender and changes no dependencies, workflows, permissions, package resolution, or secret handling.

Review details

Best possible solution:

Land this Nextcloud Talk-owned action adapter after exact-head checks pass, then close #70110 as fixed by the merge.

Do we have a high-confidence way to reproduce the issue?

Yes. Source inspection on current main shows Nextcloud Talk advertises reactions and has a guarded reaction sender, but the plugin lacks actions.handleAction, so shared react dispatch has no channel handler.

Is this the best way to solve the issue?

Yes. A Nextcloud Talk-owned ChannelMessageActionAdapter that calls the existing guarded sender is the narrow maintainable fix, and this PR adds docs, unit coverage, and live adapter-path proof.

Label justifications:

  • P2: This is a focused channel behavior fix for an advertised Nextcloud Talk reaction capability with limited blast radius.

What I checked:

  • Current main advertises reactions without a registered action adapter: On current main, Nextcloud Talk sets capabilities.reactions: true and registers message: nextcloudTalkMessageAdapter, but the channel base has no actions adapter, so plugin action dispatch has no handler for react. (extensions/nextcloud-talk/src/channel.ts:77, 44c6ad7dce27)
  • Current main dispatcher returns no channel handler without actions: The shared message action dispatcher returns null when plugin.actions.handleAction is absent, matching the reported no-dispatch path for Nextcloud Talk reactions. (src/channels/plugins/message-action-dispatch.ts:24, 44c6ad7dce27)
  • Existing guarded sender is already present on main: sendReactionNextcloudTalk already builds the bot reaction POST, signs the reaction string, uses fetchWithSsrFGuard, and reports non-2xx failures; the upstream Talk bot docs list the same /bot/{token}/reaction/{messageId} endpoint and required headers/data. (nextcloud-talk.readthedocs.io) (extensions/nextcloud-talk/src/send.ts:225, 44c6ad7dce27)
  • PR wires the missing owner-local adapter: At head 9817fed842c6, the PR adds nextcloudTalkMessageActions, advertises send plus react only for configured accounts, rejects unsupported removal, and calls the existing reaction sender; channel.ts registers actions: nextcloudTalkMessageActions. (extensions/nextcloud-talk/src/message-actions.ts:33, 9817fed842c6)
  • PR adds focused regression coverage: The PR adds adapter tests for discovery, supported actions, required parameters, current-message fallback, removal rejection, sender invocation, and error propagation, plus sender tests for the request URL, headers, payload, signature input, and failure surface. (extensions/nextcloud-talk/src/message-actions.test.ts:51, 9817fed842c6)
  • PR documents add-only Nextcloud Talk reaction semantics: The PR updates the message CLI and reactions docs to include Nextcloud Talk for react, while explicitly documenting that removal is not supported yet and is rejected clearly. Public docs: docs/tools/reactions.md. (docs/tools/reactions.md:33, 9817fed842c6)

Likely related people:

  • @steipete: Authored many recent Nextcloud Talk channel refactors and tests, including channel builder adoption, status/config helper dedupe, and channel test speedups in the same files. (role: recent area contributor; confidence: high; commits: a6f918731fe9, 72bfaf6ee29c, 2de8b91448d4; files: extensions/nextcloud-talk/src/channel.ts, extensions/nextcloud-talk/src/send.cfg-threading.test.ts)
  • @vincentkoc: Recently touched Nextcloud Talk-specific plugin boundary, runtime import, config migration, and SDK import work adjacent to this adapter surface. (role: recent plugin-boundary contributor; confidence: medium; commits: c7c5c0edaaab, 9d3469c914a2, ba20e6cd9863; files: extensions/nextcloud-talk/src/channel.ts, extensions/nextcloud-talk/src/accounts.ts)
  • @gumadeiras: Worked on Nextcloud Talk outbound session routing and plugin SDK import migration, which are adjacent to message action routing and channel ownership boundaries. (role: adjacent feature contributor; confidence: medium; commits: 6816c7673831, 20ed90f1ba53, ed29472af617; files: extensions/nextcloud-talk/src/channel.ts, extensions/nextcloud-talk/src/session-route.ts)
  • @joshavant: Authored the resolved-cfg threading work that is directly adjacent to the sender tests extended by this PR. (role: adjacent send-path contributor; confidence: medium; commits: 646817dd808b; files: extensions/nextcloud-talk/src/send.ts, extensions/nextcloud-talk/src/send.cfg-threading.test.ts)

Codex review notes: model gpt-5.5, reasoning high; reviewed against 44c6ad7dce27.

Comment thread extensions/nextcloud-talk/src/message-actions.ts Fixed
@nitinjwadhawan
nitinjwadhawan force-pushed the fix/nextcloud-talk-reactions-70110 branch 3 times, most recently from ac2243a to 7305f78 Compare May 7, 2026 13:07
@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels May 7, 2026
@nitinjwadhawan
nitinjwadhawan force-pushed the fix/nextcloud-talk-reactions-70110 branch from 7305f78 to ef721c4 Compare May 7, 2026 13:22
@openclaw-barnacle openclaw-barnacle Bot added proof: supplied External PR includes structured after-fix real behavior proof. and removed triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels May 7, 2026
@nitinjwadhawan

Copy link
Copy Markdown
Contributor Author

Visual proof that reactions work now in my PR -
Screenshot 2026-05-07 at 9 28 23 AM

… adding (openclaw#70110 review)

The handler read only `emoji` and unconditionally called the add-reaction
sender, so a caller passing `{ remove: true, emoji: "👍" }` got the opposite
of what they requested. Nextcloud Talk's DELETE-reaction path is not wired
yet, so reject `remove: true` with a clear error instead of silently
performing an add. Adds explicit tests for both the rejection and the
remove:false path.

Made-with: Cursor
…anup

Main commit 22a74de ("refactor: remove unused channel utilities") removed
the listEnabledNextcloudTalkAccounts helper from accounts.ts because it was
unused on main. This PR was the only caller, so main's removal broke the
build (rolldown MISSING_EXPORT, CodeQL "invocation of non-function") once
the PR was merged against current main.

Replace the single call site with an inline list-ids + resolve + some(filter)
chain built from the remaining exported primitives (listNextcloudTalkAccountIds
+ resolveNextcloudTalkAccount). Update the test mock boundary to match.

Made-with: Cursor
@nitinjwadhawan
nitinjwadhawan force-pushed the fix/nextcloud-talk-reactions-70110 branch from ef721c4 to 9817fed Compare May 18, 2026 17:39
@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. P2 Normal backlog priority with limited blast radius. labels May 18, 2026
@nitinjwadhawan

Copy link
Copy Markdown
Contributor Author

Addressed the Real behavior proof feedback from the ClawSweeper review above.

The PR body now includes a new adapter-path proof block (see "[1] Adapter-path proof" under Real Behavior Proof) where a Node driver imports the actual nextcloudTalkMessageActions adapter added by this PR (no mocks of ./send.js or ./accounts.js) and calls handleAction({ action: "react", ... }) against a live Nextcloud 30.0.17 + Talk (spreed) 20.1.11 server. The driver exercises the full changed dispatch path — describeMessageToolsupportsActionhandleAction → param parsing → resolveReactionMessageIdsendReactionNextcloudTalk → live HTTP — and then re-reads the chat tail as a different authenticated user (admin) to confirm the server independently recorded reactions: {"👍":1} on the target message. Wire-level evidence and the Talk web UI screenshot from the earlier round are preserved as [2] and [3] for completeness.

Also rebased onto current origin/main to pick up the unrelated check-test-types fixes that landed there (the Model<> type reasoning field change in openai-transport-stream.test.ts etc.). New HEAD 9817fed842; pnpm test extensions/nextcloud-talk → 84/84.

@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. and removed rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. labels May 18, 2026
@clawsweeper clawsweeper Bot added rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels May 18, 2026
@Takhoffman

Copy link
Copy Markdown
Contributor

@clawsweeper automerge

@clawsweeper clawsweeper Bot added the clawsweeper:automerge Maintainer opted this PR into bounded ClawSweeper-reviewed automerge label May 18, 2026
@clawsweeper

clawsweeper Bot commented May 18, 2026

Copy link
Copy Markdown
Contributor

🦞✅
ClawSweeper merged this PR after the passing review.

Source: clawsweeper[bot]
Feedback: structured ClawSweeper verdict: pass (sha=9817fed842c69afe55562ab6a3388301582c3fc3)
Merge status: merged by ClawSweeper automerge
Merged at: 2026-05-18T18:54:45Z
Merge commit: 9995e1b4d542

What merged:

  • This PR adds and registers a Nextcloud Talk message action adapter for add-only reactions, updates reaction docs, and adds adapter plus sender tests.
  • Reproducibility: yes. Source inspection on current main shows Nextcloud Talk advertises reactions and has a ... ion sender, but the plugin lacks actions.handleAction, so shared react dispatch has no channel handler.

Automerge notes:

  • PR branch already contained follow-up commit before automerge: test(nextcloud-talk): cover reaction sender request path
  • PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): harden react null-guard; fix disabled-account te…
  • PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): reject react remove requests instead of silently…
  • PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): inline listEnabledAccounts helper after main cle…
  • PR branch already contained follow-up commit before automerge: docs(nextcloud-talk): note add-only react support in reactions and me…

The automerge loop is complete.

Automerge progress:

  • 2026-05-18 18:46:02 UTC review queued 9817fed842c6 (queued)
  • 2026-05-18 18:54:28 UTC review passed 9817fed842c6 (structured ClawSweeper verdict: pass (sha=9817fed842c69afe55562ab6a3388301582c3...)
  • 2026-05-18 18:54:48 UTC merged 9817fed842c6 (merged by ClawSweeper automerge)

@clawsweeper clawsweeper Bot added status: 🚀 automerge armed This PR is in ClawSweeper's automerge lane. and removed status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels May 18, 2026
@clawsweeper
clawsweeper Bot merged commit 9995e1b into openclaw:main May 18, 2026
162 of 172 checks passed
eleqtrizit pushed a commit to eleqtrizit/openclaw that referenced this pull request May 18, 2026
…ns (openclaw#70110) (openclaw#72348)

Summary:
- This PR adds and registers a Nextcloud Talk message action adapter for add-only reactions, updates reaction docs, and adds adapter plus sender tests.
- Reproducibility: yes. Source inspection on current main shows Nextcloud Talk advertises reactions and has a  ... ion sender, but the plugin lacks `actions.handleAction`, so shared `react` dispatch has no channel handler.

Automerge notes:
- PR branch already contained follow-up commit before automerge: test(nextcloud-talk): cover reaction sender request path
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): harden react null-guard; fix disabled-account te…
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): reject react remove requests instead of silently…
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): inline listEnabledAccounts helper after main cle…
- PR branch already contained follow-up commit before automerge: docs(nextcloud-talk): note add-only react support in reactions and me…

Validation:
- ClawSweeper review passed for head 9817fed.
- Required merge gates passed before the squash merge.

Prepared head SHA: 9817fed
Review: openclaw#72348 (comment)

Co-authored-by: NW <[email protected]>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <[email protected]>
markfietje pushed a commit to markfietje/openclaw that referenced this pull request May 20, 2026
…ns (#70110) (#72348)

Summary:
- This PR adds and registers a Nextcloud Talk message action adapter for add-only reactions, updates reaction docs, and adds adapter plus sender tests.
- Reproducibility: yes. Source inspection on current main shows Nextcloud Talk advertises reactions and has a  ... ion sender, but the plugin lacks `actions.handleAction`, so shared `react` dispatch has no channel handler.

Automerge notes:
- PR branch already contained follow-up commit before automerge: test(nextcloud-talk): cover reaction sender request path
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): harden react null-guard; fix disabled-account te…
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): reject react remove requests instead of silently…
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): inline listEnabledAccounts helper after main cle…
- PR branch already contained follow-up commit before automerge: docs(nextcloud-talk): note add-only react support in reactions and me…

Validation:
- ClawSweeper review passed for head 9817fed842c69afe55562ab6a3388301582c3fc3.
- Required merge gates passed before the squash merge.

Prepared head SHA: 9817fed842c69afe55562ab6a3388301582c3fc3
Review: openclaw/openclaw#72348 (comment)

Co-authored-by: NW <[email protected]>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <[email protected]>
markfietje pushed a commit to markfietje/openclaw that referenced this pull request May 20, 2026
…ns (#70110) (#72348)

Summary:
- This PR adds and registers a Nextcloud Talk message action adapter for add-only reactions, updates reaction docs, and adds adapter plus sender tests.
- Reproducibility: yes. Source inspection on current main shows Nextcloud Talk advertises reactions and has a  ... ion sender, but the plugin lacks `actions.handleAction`, so shared `react` dispatch has no channel handler.

Automerge notes:
- PR branch already contained follow-up commit before automerge: test(nextcloud-talk): cover reaction sender request path
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): harden react null-guard; fix disabled-account te…
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): reject react remove requests instead of silently…
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): inline listEnabledAccounts helper after main cle…
- PR branch already contained follow-up commit before automerge: docs(nextcloud-talk): note add-only react support in reactions and me…

Validation:
- ClawSweeper review passed for head 9817fed842c69afe55562ab6a3388301582c3fc3.
- Required merge gates passed before the squash merge.

Prepared head SHA: 9817fed842c69afe55562ab6a3388301582c3fc3
Review: openclaw/openclaw#72348 (comment)

Co-authored-by: NW <[email protected]>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <[email protected]>
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 24, 2026
…ns (openclaw#70110) (openclaw#72348)

Summary:
- This PR adds and registers a Nextcloud Talk message action adapter for add-only reactions, updates reaction docs, and adds adapter plus sender tests.
- Reproducibility: yes. Source inspection on current main shows Nextcloud Talk advertises reactions and has a  ... ion sender, but the plugin lacks `actions.handleAction`, so shared `react` dispatch has no channel handler.

Automerge notes:
- PR branch already contained follow-up commit before automerge: test(nextcloud-talk): cover reaction sender request path
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): harden react null-guard; fix disabled-account te…
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): reject react remove requests instead of silently…
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): inline listEnabledAccounts helper after main cle…
- PR branch already contained follow-up commit before automerge: docs(nextcloud-talk): note add-only react support in reactions and me…

Validation:
- ClawSweeper review passed for head 9817fed.
- Required merge gates passed before the squash merge.

Prepared head SHA: 9817fed
Review: openclaw#72348 (comment)

Co-authored-by: NW <[email protected]>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <[email protected]>
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 24, 2026
…ns (openclaw#70110) (openclaw#72348)

Summary:
- This PR adds and registers a Nextcloud Talk message action adapter for add-only reactions, updates reaction docs, and adds adapter plus sender tests.
- Reproducibility: yes. Source inspection on current main shows Nextcloud Talk advertises reactions and has a  ... ion sender, but the plugin lacks `actions.handleAction`, so shared `react` dispatch has no channel handler.

Automerge notes:
- PR branch already contained follow-up commit before automerge: test(nextcloud-talk): cover reaction sender request path
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): harden react null-guard; fix disabled-account te…
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): reject react remove requests instead of silently…
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): inline listEnabledAccounts helper after main cle…
- PR branch already contained follow-up commit before automerge: docs(nextcloud-talk): note add-only react support in reactions and me…

Validation:
- ClawSweeper review passed for head 9817fed.
- Required merge gates passed before the squash merge.

Prepared head SHA: 9817fed
Review: openclaw#72348 (comment)

Co-authored-by: NW <[email protected]>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <[email protected]>
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 24, 2026
…ns (openclaw#70110) (openclaw#72348)

Summary:
- This PR adds and registers a Nextcloud Talk message action adapter for add-only reactions, updates reaction docs, and adds adapter plus sender tests.
- Reproducibility: yes. Source inspection on current main shows Nextcloud Talk advertises reactions and has a  ... ion sender, but the plugin lacks `actions.handleAction`, so shared `react` dispatch has no channel handler.

Automerge notes:
- PR branch already contained follow-up commit before automerge: test(nextcloud-talk): cover reaction sender request path
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): harden react null-guard; fix disabled-account te…
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): reject react remove requests instead of silently…
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): inline listEnabledAccounts helper after main cle…
- PR branch already contained follow-up commit before automerge: docs(nextcloud-talk): note add-only react support in reactions and me…

Validation:
- ClawSweeper review passed for head 9817fed.
- Required merge gates passed before the squash merge.

Prepared head SHA: 9817fed
Review: openclaw#72348 (comment)

Co-authored-by: NW <[email protected]>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <[email protected]>
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request May 24, 2026
…ns (openclaw#70110) (openclaw#72348)

Summary:
- This PR adds and registers a Nextcloud Talk message action adapter for add-only reactions, updates reaction docs, and adds adapter plus sender tests.
- Reproducibility: yes. Source inspection on current main shows Nextcloud Talk advertises reactions and has a  ... ion sender, but the plugin lacks `actions.handleAction`, so shared `react` dispatch has no channel handler.

Automerge notes:
- PR branch already contained follow-up commit before automerge: test(nextcloud-talk): cover reaction sender request path
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): harden react null-guard; fix disabled-account te…
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): reject react remove requests instead of silently…
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): inline listEnabledAccounts helper after main cle…
- PR branch already contained follow-up commit before automerge: docs(nextcloud-talk): note add-only react support in reactions and me…

Validation:
- ClawSweeper review passed for head 9817fed.
- Required merge gates passed before the squash merge.

Prepared head SHA: 9817fed
Review: openclaw#72348 (comment)

Co-authored-by: NW <[email protected]>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <[email protected]>
galiniliev pushed a commit to galiniliev/openclaw that referenced this pull request May 25, 2026
…ns (openclaw#70110) (openclaw#72348)

Summary:
- This PR adds and registers a Nextcloud Talk message action adapter for add-only reactions, updates reaction docs, and adds adapter plus sender tests.
- Reproducibility: yes. Source inspection on current main shows Nextcloud Talk advertises reactions and has a  ... ion sender, but the plugin lacks `actions.handleAction`, so shared `react` dispatch has no channel handler.

Automerge notes:
- PR branch already contained follow-up commit before automerge: test(nextcloud-talk): cover reaction sender request path
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): harden react null-guard; fix disabled-account te…
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): reject react remove requests instead of silently…
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): inline listEnabledAccounts helper after main cle…
- PR branch already contained follow-up commit before automerge: docs(nextcloud-talk): note add-only react support in reactions and me…

Validation:
- ClawSweeper review passed for head 9817fed.
- Required merge gates passed before the squash merge.

Prepared head SHA: 9817fed
Review: openclaw#72348 (comment)

Co-authored-by: NW <[email protected]>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <[email protected]>
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 26, 2026
…ns (openclaw#70110) (openclaw#72348)

Summary:
- This PR adds and registers a Nextcloud Talk message action adapter for add-only reactions, updates reaction docs, and adds adapter plus sender tests.
- Reproducibility: yes. Source inspection on current main shows Nextcloud Talk advertises reactions and has a  ... ion sender, but the plugin lacks `actions.handleAction`, so shared `react` dispatch has no channel handler.

Automerge notes:
- PR branch already contained follow-up commit before automerge: test(nextcloud-talk): cover reaction sender request path
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): harden react null-guard; fix disabled-account te…
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): reject react remove requests instead of silently…
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): inline listEnabledAccounts helper after main cle…
- PR branch already contained follow-up commit before automerge: docs(nextcloud-talk): note add-only react support in reactions and me…

Validation:
- ClawSweeper review passed for head 9817fed.
- Required merge gates passed before the squash merge.

Prepared head SHA: 9817fed
Review: openclaw#72348 (comment)

Co-authored-by: NW <[email protected]>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <[email protected]>
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 26, 2026
…ns (openclaw#70110) (openclaw#72348)

Summary:
- This PR adds and registers a Nextcloud Talk message action adapter for add-only reactions, updates reaction docs, and adds adapter plus sender tests.
- Reproducibility: yes. Source inspection on current main shows Nextcloud Talk advertises reactions and has a  ... ion sender, but the plugin lacks `actions.handleAction`, so shared `react` dispatch has no channel handler.

Automerge notes:
- PR branch already contained follow-up commit before automerge: test(nextcloud-talk): cover reaction sender request path
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): harden react null-guard; fix disabled-account te…
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): reject react remove requests instead of silently…
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): inline listEnabledAccounts helper after main cle…
- PR branch already contained follow-up commit before automerge: docs(nextcloud-talk): note add-only react support in reactions and me…

Validation:
- ClawSweeper review passed for head 9817fed.
- Required merge gates passed before the squash merge.

Prepared head SHA: 9817fed
Review: openclaw#72348 (comment)

Co-authored-by: NW <[email protected]>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <[email protected]>
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 26, 2026
…ns (openclaw#70110) (openclaw#72348)

Summary:
- This PR adds and registers a Nextcloud Talk message action adapter for add-only reactions, updates reaction docs, and adds adapter plus sender tests.
- Reproducibility: yes. Source inspection on current main shows Nextcloud Talk advertises reactions and has a  ... ion sender, but the plugin lacks `actions.handleAction`, so shared `react` dispatch has no channel handler.

Automerge notes:
- PR branch already contained follow-up commit before automerge: test(nextcloud-talk): cover reaction sender request path
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): harden react null-guard; fix disabled-account te…
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): reject react remove requests instead of silently…
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): inline listEnabledAccounts helper after main cle…
- PR branch already contained follow-up commit before automerge: docs(nextcloud-talk): note add-only react support in reactions and me…

Validation:
- ClawSweeper review passed for head 9817fed.
- Required merge gates passed before the squash merge.

Prepared head SHA: 9817fed
Review: openclaw#72348 (comment)

Co-authored-by: NW <[email protected]>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <[email protected]>
jameslcowan pushed a commit to jameslcowan/openclaw that referenced this pull request Jun 2, 2026
…ns (openclaw#70110) (openclaw#72348)

Summary:
- This PR adds and registers a Nextcloud Talk message action adapter for add-only reactions, updates reaction docs, and adds adapter plus sender tests.
- Reproducibility: yes. Source inspection on current main shows Nextcloud Talk advertises reactions and has a  ... ion sender, but the plugin lacks `actions.handleAction`, so shared `react` dispatch has no channel handler.

Automerge notes:
- PR branch already contained follow-up commit before automerge: test(nextcloud-talk): cover reaction sender request path
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): harden react null-guard; fix disabled-account te…
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): reject react remove requests instead of silently…
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): inline listEnabledAccounts helper after main cle…
- PR branch already contained follow-up commit before automerge: docs(nextcloud-talk): note add-only react support in reactions and me…

Validation:
- ClawSweeper review passed for head 9817fed.
- Required merge gates passed before the squash merge.

Prepared head SHA: 9817fed
Review: openclaw#72348 (comment)

Co-authored-by: NW <[email protected]>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <[email protected]>
SYU8384 pushed a commit to SYU8384/openclaw that referenced this pull request Jun 3, 2026
…ns (openclaw#70110) (openclaw#72348)

Summary:
- This PR adds and registers a Nextcloud Talk message action adapter for add-only reactions, updates reaction docs, and adds adapter plus sender tests.
- Reproducibility: yes. Source inspection on current main shows Nextcloud Talk advertises reactions and has a  ... ion sender, but the plugin lacks `actions.handleAction`, so shared `react` dispatch has no channel handler.

Automerge notes:
- PR branch already contained follow-up commit before automerge: test(nextcloud-talk): cover reaction sender request path
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): harden react null-guard; fix disabled-account te…
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): reject react remove requests instead of silently…
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): inline listEnabledAccounts helper after main cle…
- PR branch already contained follow-up commit before automerge: docs(nextcloud-talk): note add-only react support in reactions and me…

Validation:
- ClawSweeper review passed for head 9817fed.
- Required merge gates passed before the squash merge.

Prepared head SHA: 9817fed
Review: openclaw#72348 (comment)

Co-authored-by: NW <[email protected]>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <[email protected]>
sablehead pushed a commit to sablehead/openclaw that referenced this pull request Jun 10, 2026
…ns (openclaw#70110) (openclaw#72348)

Summary:
- This PR adds and registers a Nextcloud Talk message action adapter for add-only reactions, updates reaction docs, and adds adapter plus sender tests.
- Reproducibility: yes. Source inspection on current main shows Nextcloud Talk advertises reactions and has a  ... ion sender, but the plugin lacks `actions.handleAction`, so shared `react` dispatch has no channel handler.

Automerge notes:
- PR branch already contained follow-up commit before automerge: test(nextcloud-talk): cover reaction sender request path
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): harden react null-guard; fix disabled-account te…
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): reject react remove requests instead of silently…
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): inline listEnabledAccounts helper after main cle…
- PR branch already contained follow-up commit before automerge: docs(nextcloud-talk): note add-only react support in reactions and me…

Validation:
- ClawSweeper review passed for head 9817fed.
- Required merge gates passed before the squash merge.

Prepared head SHA: 9817fed
Review: openclaw#72348 (comment)

Co-authored-by: NW <[email protected]>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

channel: nextcloud-talk Channel integration: nextcloud-talk clawsweeper:automerge Maintainer opted this PR into bounded ClawSweeper-reviewed automerge docs Improvements or additions to documentation P2 Normal backlog priority with limited blast radius. proof: sufficient ClawSweeper judged the real behavior proof convincing. proof: supplied External PR includes structured after-fix real behavior proof. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. size: M status: 🚀 automerge armed This PR is in ClawSweeper's automerge lane.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Nextcloud-Talk channel does not send emoji reactions

3 participants