Skip to content

Fix Google Chat message tool thread replies#80996

Merged
steipete merged 1 commit into
openclaw:mainfrom
franco-viotti:fix/googlechat-message-tool-threading
May 31, 2026
Merged

Fix Google Chat message tool thread replies#80996
steipete merged 1 commit into
openclaw:mainfrom
franco-viotti:fix/googlechat-message-tool-threading

Conversation

@franco-viotti

@franco-viotti franco-viotti commented May 12, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Add a Google Chat threading tool context so message tool replies prefer the inbound thread resource.
  • Preserve the resolved per-account replyToMode for Google Chat tool replies.
  • Add regression coverage for [[reply_to_current]] resolving to spaces/.../threads/....

Fixes #80995.

Real behavior proof

Setup:

  • OpenClaw gateway running with Google Chat enabled.
  • Google Chat account config had replyToMode: "all".
  • Test was run from the OpenClaw Google Chat space, inside an existing Google Chat thread.
  • Private space IDs, message IDs, user IDs, names, and email addresses are redacted below.

Before the fix, OpenClaw had the correct inbound Google Chat thread in runtime context, but message(action=send) still posted outside the thread in the Google Chat UI.

Redacted copied runtime transcript from the failing case:

{
  "inbound": {
    "chat_id": "googlechat:spaces/REDACTED_SPACE",
    "message_id": "spaces/REDACTED_SPACE/messages/REDACTED_MESSAGE",
    "reply_to_id": "spaces/REDACTED_SPACE/threads/REDACTED_THREAD",
    "is_group_chat": true
  },
  "tool_call": {
    "name": "message",
    "arguments": {
      "action": "send",
      "message": "..."
    }
  },
  "tool_result": {
    "ok": true,
    "to": "spaces/REDACTED_SPACE"
  },
  "observed_google_chat_result": "reply appeared as a top-level space message, outside the original thread"
}

After applying this adapter change to the installed Google Chat plugin and restarting the gateway, the same flow stayed inside the original Google Chat thread.

Redacted copied runtime transcript from the passing case:

{
  "inbound": {
    "chat_id": "googlechat:spaces/REDACTED_SPACE",
    "message_id": "spaces/REDACTED_SPACE/messages/cLJ5-iaALOU.cLJ5-iaALOU",
    "reply_to_id": "spaces/REDACTED_SPACE/threads/cLJ5-iaALOU",
    "timestamp": "Tue 2026-05-12 07:58 GMT-3",
    "is_group_chat": true
  },
  "tool_call": {
    "name": "message",
    "arguments": {
      "action": "send",
      "message": "[[reply_to_current]] Buen dia, Franco"
    }
  },
  "tool_result": {
    "ok": true,
    "to": "spaces/REDACTED_SPACE"
  },
  "observed_google_chat_result": "reply rendered inside the original thread with thread id spaces/REDACTED_SPACE/threads/cLJ5-iaALOU"
}

Operator confirmation from the live Google Chat UI after the patch:

yep your fix worked

I also attempted to independently query Google Chat for the message thread after the UI verification, but the Chat app service account cannot use spaces.messages.list with app authentication:

Google Chat API ListMessages: 403 ACCESS_TOKEN_SCOPE_INSUFFICIENT
Ensure the scopes you are using support app authentication with a service account.

Test plan

  • git diff --check
  • Attempted node --run test:extension -- googlechat; blocked before Vitest because the monorepo pnpm install was killed with SIGKILL.
  • Attempted node scripts/test-extension.mjs googlechat extensions/googlechat/src/channel.test.ts; blocked before Vitest because the monorepo pnpm install was killed with SIGKILL.
  • CI on this PR completed the relevant checks successfully, including check, check-prod-types, check-test-types, check-lint, checks-node-channels, and checks-fast-contracts-channels.

AI assistance

This PR was prepared with Codex assistance. I understand the code change: it uses the Google Chat inbound ReplyToId thread resource as the message tool's current reply target so [[reply_to_current]] resolves to spaces/.../threads/... instead of falling back to the inbound message resource.

Real Behavior Proof

Images show how the bot replied before and after the applied fix. Before:

image

After:

image image

That last one shows the last message outside of a thread, before the fix was applied. And also the first message with the fix applied, we can see that the thread now has replies

Real Behavior Proof - Maintainer Validation

Behavior addressed: Google Chat message-tool replies preserve the inbound Google Chat thread resource so implicit replies and [[reply_to_current]] stay in the original thread instead of posting as top-level space messages.

Real environment tested: Local OpenClaw focused test environment on the refreshed PR head, plus the contributor's real Google Chat gateway/space proof already included above with redacted runtime transcript and screenshots.

Exact steps or command run after this patch: Ran focused regression tests for the Google Chat channel adapter and shared auto-reply threading wrapper, then ran format, lint, diff, and autoreview checks after applying the threading fixups.

Evidence after fix: Local Vitest passed 48 focused tests across extensions/googlechat/src/channel.test.ts and src/auto-reply/reply/reply-plumbing.test.ts. Format, lint, git diff --check, and autoreview also passed. The contributor's real Google Chat proof shows the same live message flow staying in the original Google Chat thread after the adapter change.

Observed result after fix: Google Chat tool context normalizes the current space target, uses ReplyToIdFull/ReplyToId as the thread resource, and lets the plugin adapter explicitly suppress the generic message-id fallback when no thread resource exists. Live Google Chat proof above shows replies rendering inside the original thread after the patch.

What was not tested: I did not perform a new live Google Chat send from this maintainer checkout; I relied on the contributor's real Google Chat proof plus local focused regression tests for the maintainer fixups.

Real Behavior Proof - Final Maintainer Validation

Behavior or issue addressed: Google Chat message-tool replies preserve the inbound Google Chat thread resource so implicit replies and [[reply_to_current]] stay in the original thread instead of posting as top-level space messages.

Real environment tested: Contributor's live Google Chat space with OpenClaw gateway and Google Chat plugin enabled, using account config replyToMode all. Private space ids, message ids, user ids, names, and email addresses are redacted in the copied runtime transcript and screenshots above.

Exact steps or command run after this patch: Applied the patched Google Chat adapter to the installed Google Chat plugin, restarted the OpenClaw gateway, then sent a message from the same Google Chat space/thread that previously reproduced the top-level reply bug. The contributor then watched the live Google Chat UI after the message-tool reply landed.

Evidence after fix: Redacted copied runtime transcript above shows inbound reply_to_id spaces/REDACTED_SPACE/threads/cLJ5-iaALOU and the tool call message [[reply_to_current]] Buen dia, Franco, with observed_google_chat_result reporting that the reply rendered inside the original thread. The after screenshots are embedded above at https://github.com/user-attachments/assets/2bb518b3-609e-4dc1-ac9c-2cf0ccdf9b1f and https://github.com/user-attachments/assets/5386884b-cd04-404f-b09b-9ef493993518.

Observed result after fix: The live Google Chat UI showed the patched reply inside the original thread with thread id spaces/REDACTED_SPACE/threads/cLJ5-iaALOU. The contributor also confirmed in the live UI that the fix worked, and the before/after screenshots show the previous top-level reply behavior versus the fixed threaded reply.

What was not tested: I did not run a new live Google Chat send from this maintainer checkout; the maintainer validation relies on the contributor's real Google Chat transcript and screenshots for live behavior, with local regression tests as supplemental proof outside this section.

@openclaw-barnacle openclaw-barnacle Bot added channel: googlechat Channel integration: googlechat triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. size: S labels May 12, 2026
@clawsweeper

clawsweeper Bot commented May 12, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed May 28, 2026, 12:53 AM ET / 04:53 UTC.

Summary
The PR adds a Google Chat message-tool threading context so [[reply_to_current]] uses the inbound Google Chat thread resource and adds a regression test for that adapter behavior.

PR surface: Source +28, Tests +30. Total +58 across 2 files.

Reproducibility: yes. Source inspection shows current main records the Google Chat thread in ReplyToId but lacks a Google Chat buildToolContext, and the PR body provides redacted before/after live Google Chat evidence.

Review metrics: none identified.

Merge readiness
Overall: 🦞 diamond lobster
Proof: 🦞 diamond lobster ✨ media proof bonus
Patch quality: 🦞 diamond lobster
Result: ready for maintainer review.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Risk before merge

Maintainer options:

  1. Decide the mitigation before merge
    Land this focused adapter fix, or ensure the broader Google Chat thread-delivery branch preserves the same buildToolContext behavior and regression test before closing this PR.
  2. Pause or close
    Do not merge this PR until maintainers decide whether the risk is worth taking.

Next step before merge

  • [P2] No repair lane is needed; maintainer action is to review and land this narrow PR or deliberately consolidate it with the broader Google Chat thread-delivery branch.

Security
Cleared: The proposed merge only changes Google Chat adapter/test code and does not add dependencies, workflows, permissions, credential handling, or new executable supply-chain surface.

Review details

Best possible solution:

Land this focused adapter fix, or ensure the broader Google Chat thread-delivery branch preserves the same buildToolContext behavior and regression test before closing this PR.

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

Yes. Source inspection shows current main records the Google Chat thread in ReplyToId but lacks a Google Chat buildToolContext, and the PR body provides redacted before/after live Google Chat evidence.

Is this the best way to solve the issue?

Yes. The patch keeps the fix at the Google Chat adapter boundary, uses the existing plugin threading seam, and avoids changing shared reply plumbing or adding new config.

AGENTS.md: found and applied where relevant.

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

Label changes

Label justifications:

  • P1: The PR fixes a real Google Chat channel workflow where message-tool replies can visibly escape the user's thread.
  • rating: 🦞 diamond lobster: Overall readiness is 🦞 diamond lobster; proof is 🦞 diamond lobster and patch quality is 🦞 diamond lobster.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (screenshot): The PR body includes redacted runtime transcripts plus before/after Google Chat screenshots showing the reply moves from top-level posting to the original thread.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes redacted runtime transcripts plus before/after Google Chat screenshots showing the reply moves from top-level posting to the original thread.
  • proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence. The PR body includes redacted runtime transcripts plus before/after Google Chat screenshots showing the reply moves from top-level posting to the original thread.
Evidence reviewed

PR surface:

Source +28, Tests +30. Total +58 across 2 files.

View PR surface stats
Area Files Added Removed Net
Source 1 28 0 +28
Tests 1 30 0 +30
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 2 58 0 +58

What I checked:

  • Repository policy applied: Read the root and scoped extension policies; the extension boundary guidance supports keeping this fix inside the Google Chat plugin adapter rather than core. (AGENTS.md:1, f7c32fc8befd)
  • Current main lacks Google Chat tool context: Current main's googlechatThreadingAdapter only resolves per-account replyToMode; it has no buildToolContext hook to substitute the thread resource for message-tool replies. (extensions/googlechat/src/channel.adapters.ts:131, f7c32fc8befd)
  • Current main carries the inbound thread resource: The Google Chat monitor already reads message.thread.name for group events and stores it as replyToId/replyToIdFull, so the missing piece is preserving that value into tool reply context. (extensions/googlechat/src/monitor.ts:282, f7c32fc8befd)
  • Shared tool context falls back without plugin help: buildThreadingToolContext passes ReplyToId to plugin-specific buildToolContext when one exists; otherwise it returns the current message id, which is a Google Chat message resource rather than a thread resource. (src/auto-reply/reply/agent-runner-utils.ts:108, f7c32fc8befd)
  • PR merge result adds the missing adapter hook: The proposed merge adds buildToolContext that prefers normalized context.ReplyToId for currentMessageId and currentThreadTs while preserving the scoped Google Chat replyToMode. (extensions/googlechat/src/channel.adapters.ts:143, 441fbf1f1245)
  • PR adds focused regression coverage: The added test proves buildToolContext maps ReplyToId: spaces/.../threads/... to both currentMessageId and currentThreadTs, with replyToMode: all preserved. (extensions/googlechat/src/channel.test.ts:443, 441fbf1f1245)

Likely related people:

  • Peter Steinberger: Local blame and log history tie the current Google Chat adapter, monitor thread context, and shared tool-threading utility to the current main snapshot and earlier reply-pipeline refactors. (role: recent area contributor; confidence: medium; commits: 1f1cdd84ea24, ea018a68ccb9, bcbfb357bec7; files: extensions/googlechat/src/channel.adapters.ts, extensions/googlechat/src/monitor.ts, src/auto-reply/reply/agent-runner-utils.ts)
  • jai: Authored the related broader Google Chat thread-delivery PR that covers the same thread-resource problem across core reply and channel delivery surfaces. (role: adjacent owner; confidence: medium; commits: 22fb59c65e62; files: extensions/googlechat/src/channel.adapters.ts, extensions/googlechat/src/monitor.webhook-routing.test.ts, src/auto-reply/reply/reply-delivery.ts)
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.

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.

@franco-viotti

Copy link
Copy Markdown
Contributor Author

Updated the PR body with redacted copied runtime transcript from the failing and passing Google Chat runs, plus the live UI confirmation and the Google Chat API read-back limitation. @clawsweeper re-review

@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 12, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 12, 2026
@franco-viotti

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review. I added some new screenshots to the PR body showing the before and after bot behavior

@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 12, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 12, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 12, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 12, 2026
@openclaw-barnacle

Copy link
Copy Markdown

This pull request has been automatically marked as stale due to inactivity.
Please add updates or it will be closed.

@openclaw-barnacle openclaw-barnacle Bot added the stale Marked as stale due to inactivity label May 27, 2026
@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. P1 High-priority user-facing bug, regression, or broken workflow. labels May 27, 2026
@clawsweeper

clawsweeper Bot commented May 27, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper PR egg: ✨ hatched 🥚 common Frosted Crabkin. Rarity: 🥚 common. Trait: purrs at green checks.

Details

Share on X: post this hatch
Copy: My PR egg hatched a 🥚 common Frosted Crabkin in ClawSweeper.
Hatchability:

  • Merged PRs are hatchable.
  • Open PRs are hatchable when they are status: 👀 ready for maintainer look, status: 🚀 automerge armed, or labeled clawsweeper:automerge.
  • Closed unmerged PRs are hatchable only when one of those hatchable labels is still present in the durable record.

About:

  • Eggs appear after real-behavior proof passes. They are collectible flavor only.
  • Review momentum changes the shell state: follow-up work warms it, re-review makes it wobble, and a clean final review lets it hatch.
  • 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.

@openclaw-barnacle openclaw-barnacle Bot removed the triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. label May 27, 2026
@clawsweeper clawsweeper Bot added proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. and removed rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. labels May 27, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the stale Marked as stale due to inactivity label May 28, 2026
@RomneyDa

Copy link
Copy Markdown
Member

Heads up: this PR needs to be updated against current main before the new required Dependency Guard check can pass.

@steipete
steipete force-pushed the fix/googlechat-message-tool-threading branch from 0eb3dc6 to b453e42 Compare May 31, 2026 15:31
@steipete

Copy link
Copy Markdown
Contributor

Maintainer refresh before merge:

Behavior addressed: Google Chat message-tool replies now use the inbound Google Chat thread resource as the ambient reply target, so [[reply_to_current]] and implicit tool replies stay in the original thread.
Real environment tested: local focused tests on refreshed PR head b453e42b208; contributor-provided real Google Chat UI proof remains in the PR body.
Exact steps or command run after this patch: node scripts/run-vitest.mjs extensions/googlechat/src/channel.test.ts src/auto-reply/reply/reply-plumbing.test.ts --reporter=dot; ./node_modules/.bin/oxfmt --check ...; ./node_modules/.bin/oxlint --tsconfig ./tsconfig.json ...; git diff --check; /Users/steipete/Projects/agent-scripts/skills/autoreview/scripts/autoreview --mode local.
Evidence after fix: focused Vitest passed 48 tests; format/lint/diff checks passed; autoreview clean after fixing two accepted findings.
Observed result after fix: Google Chat normalizes googlechat:spaces/... to spaces/..., uses ReplyToIdFull/ReplyToId as the reply target, and suppresses the generic message-id fallback when no thread resource exists.
What was not tested: no new live Google Chat send was run by me; relied on the PR's real UI proof plus local regression coverage.

@openclaw-barnacle openclaw-barnacle Bot added triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. and removed proof: sufficient ClawSweeper judged the real behavior proof convincing. labels May 31, 2026
Use the Google Chat thread resource as the ambient message-tool reply target so replies stay in the inbound thread. Normalize the current Google Chat space target and let plugin threading adapters explicitly suppress the generic message-id fallback when a provider needs a thread resource instead of a message resource.

Co-authored-by: Franco Viotti <[email protected]>
@steipete
steipete force-pushed the fix/googlechat-message-tool-threading branch from b453e42 to 223fe77 Compare May 31, 2026 15:36
@openclaw-barnacle openclaw-barnacle Bot added triage: mock-only-proof Candidate: PR proof only shows tests, mocks, snapshots, lint, typecheck, or CI. 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. triage: mock-only-proof Candidate: PR proof only shows tests, mocks, snapshots, lint, typecheck, or CI. labels May 31, 2026
@steipete

Copy link
Copy Markdown
Contributor

Maintainer proof on refreshed head 223fe77:

Behavior addressed: Google Chat message-tool replies use the inbound Google Chat thread resource so implicit replies and [[reply_to_current]] stay in the original thread.

Real environment tested: contributor's live Google Chat proof remains in the PR body; maintainer local proof covered the Google Chat adapter and shared reply threading wrapper on the refreshed head.

Exact steps or command run after this patch:

  • node scripts/run-vitest.mjs extensions/googlechat/src/channel.test.ts src/auto-reply/reply/reply-plumbing.test.ts --reporter=dot
  • ./node_modules/.bin/oxfmt --check extensions/googlechat/src/channel.adapters.ts extensions/googlechat/src/channel.test.ts src/auto-reply/reply/agent-runner-utils.ts src/auto-reply/reply/reply-plumbing.test.ts
  • ./node_modules/.bin/oxlint --tsconfig ./tsconfig.json extensions/googlechat/src/channel.adapters.ts extensions/googlechat/src/channel.test.ts src/auto-reply/reply/agent-runner-utils.ts src/auto-reply/reply/reply-plumbing.test.ts
  • git diff --check origin/main...HEAD
  • /Users/steipete/Projects/agent-scripts/skills/autoreview/scripts/autoreview --mode commit --commit HEAD

Evidence after fix: focused Vitest passed 48 tests in 2 shards; oxfmt, oxlint, and diff check passed; autoreview returned clean with no accepted/actionable findings. Real behavior proof check passed after the PR body was updated with exact real Google Chat evidence fields.

Observed result after fix: current space ids are normalized, ReplyToIdFull/ReplyToId provides the thread resource, and the shared wrapper preserves adapter-provided currentMessageId undefined so Google Chat no longer falls back to an invalid message resource when no thread exists.

What was not tested: I did not perform a new live Google Chat send from this checkout. Current CI still has unrelated failures in check-test-types and check-dependencies from ui/src/ui/control-ui-vite-config.node.test.ts / ui/src/ui/browser-redact.ts, which are outside this PR diff.

@steipete
steipete merged commit a71b121 into openclaw:main May 31, 2026
166 of 178 checks passed
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jun 1, 2026
…0996)

Use the Google Chat thread resource as the ambient message-tool reply target so replies stay in the inbound thread. Normalize the current Google Chat space target and let plugin threading adapters explicitly suppress the generic message-id fallback when a provider needs a thread resource instead of a message resource.

Co-authored-by: Peter Steinberger <[email protected]>
Co-authored-by: Franco Viotti <[email protected]>
SYU8384 pushed a commit to SYU8384/openclaw that referenced this pull request Jun 3, 2026
…0996)

Use the Google Chat thread resource as the ambient message-tool reply target so replies stay in the inbound thread. Normalize the current Google Chat space target and let plugin threading adapters explicitly suppress the generic message-id fallback when a provider needs a thread resource instead of a message resource.

Co-authored-by: Peter Steinberger <[email protected]>
Co-authored-by: Franco Viotti <[email protected]>
sablehead pushed a commit to sablehead/openclaw that referenced this pull request Jun 10, 2026
…0996)

Use the Google Chat thread resource as the ambient message-tool reply target so replies stay in the inbound thread. Normalize the current Google Chat space target and let plugin threading adapters explicitly suppress the generic message-id fallback when a provider needs a thread resource instead of a message resource.

Co-authored-by: Peter Steinberger <[email protected]>
Co-authored-by: Franco Viotti <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

channel: googlechat Channel integration: googlechat P1 High-priority user-facing bug, regression, or broken workflow. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. 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: S status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Google Chat message tool replies escape threads

3 participants