Skip to content

feat: add reaction to acknowledge message in createTelegramBot#178

Merged
steipete merged 3 commits intoopenclaw:mainfrom
obviyus:main
Jan 6, 2026
Merged

feat: add reaction to acknowledge message in createTelegramBot#178
steipete merged 3 commits intoopenclaw:mainfrom
obviyus:main

Conversation

@obviyus
Copy link
Copy Markdown
Contributor

@obviyus obviyus commented Jan 4, 2026

I use this heavily on Telegram and it would be great to have an acknowledgement that the message was read while the bot is still processing it. I've moved it under the validation checks so that messages that do not warrant a response don't get a reaction.

The build is currently failing due to duplicate Slack imports. Once #177 gets merged I can try again.

@obviyus
Copy link
Copy Markdown
Contributor Author

obviyus commented Jan 4, 2026

Thanks! Can confirm the build works now.

@steipete
Copy link
Copy Markdown
Contributor

steipete commented Jan 4, 2026

Hi Ayaan, thank you! thinking we make this configurable and generic across platforms.

@obviyus
Copy link
Copy Markdown
Contributor Author

obviyus commented Jan 4, 2026

Happy to do that! Only issue is Telegram has a limited subset of emojis that can be used to react. Not sure if that is also a thing on other platforms.

@steipete steipete merged commit b1bb3ff into openclaw:main Jan 6, 2026
@steipete
Copy link
Copy Markdown
Contributor

steipete commented Jan 6, 2026

Thanks @obviyus — merged this via rebase. Follow-up landed on main: global ack reactions (messages.ackReaction + messages.ackReactionScope, default 👀, fallback to identity.emoji), wired for Telegram/Slack/Discord, docs + schema updates, changelog credit. Tests: pnpm vitest run src/config/config.test.ts src/telegram/bot.test.ts src/slack/monitor.tool-result.test.ts.

dgarson referenced this pull request in dgarson/clawdbot Feb 7, 2026
@dwinter3 dwinter3 mentioned this pull request Feb 9, 2026
songliu0403-rgb pushed a commit to songliu0403-rgb/openclaw that referenced this pull request Feb 26, 2026
cael-dandelion-cult added a commit to karmaterminal/openclaw that referenced this pull request Mar 4, 2026
… comms discipline

Phase 4 adds:
- DELEGATE dispatch verification + attachment passthrough (openclaw#177)
- Time-based self-continuation with agent-specified delay (openclaw#176)
- Pre/post-compaction lifecycle hooks (openclaw#178)
- Config hot-reload gap (openclaw#182)
- Context-pressure canary confirmation (smaller model per figs)

Updated issue tracking: openclaw#174 closed, openclaw#175 root cause found.
Added Discord comms discipline section (Storm Lag Protocol + figs directives).
Thomistic basis: Summa II-II Q47-Q53, prudentia survives forgetfulness via voluntas.
sdntsng added a commit to tryvinci/engram-openclaw that referenced this pull request Mar 24, 2026
* feat(data-explorer): searchable icon-grid view of ingested connector data (openclaw#174)

Closes openclaw#173

- Backend: GET /v1/connectors/data — paginated, filterable, searchable
  query over connector_data_index (one entry per source doc). Adds
  store.list_connector_index_entries() with regex text search, provider
  filter, and skip/limit pagination.
- Frontend hook: useConnectorData(q, source, page) with abort-controlled
  fetch and debounce handled in the page.
- Frontend page: /dashboard/data — Google Drive-style icon grid with
  per-provider icons (Slack, Notion, Drive, Fathom), debounced search
  bar, source filter pills, spring-animated detail drawer, pagination,
  and empty state.
- Header: adds "Data" nav link with FolderSearch icon.

Co-authored-by: Claude Sonnet 4.6 <[email protected]>

* checkpoint (openclaw#177)

* feat(memory): add admin debug endpoints

* feat(memory): wire chat and slack publishers

* feat(memory): make synthesis profiles pluggable

* feat(frontend): add memory admin debug page

* feat(backend): publish refresh outputs to memory

* chore(dev): start memory with root dev loop

* feat(memory): add postgres storage provider

* feat(connectors): add slack memory sync observability

* docs(memory): document technical orchestration

* build(memory): generate and verify code mind map

* fix(frontend): remove leftover connectors merge marker

* docs(engram-chat): add connector migration matrix

* feat(engram-chat): migrate connector oauth parity

* feat(engram-chat): migrate connector sync to memory

* feat(engram-chat): migrate fathom webhook ingest

* docs(engram-chat): record remaining backend legacy surface

* chore(repo): remove stray ds store files

* refactor(routes): retire legacy backend chat surface

* fix(engram-chat): expose connector sync state collection

* feat(memory): include references in chat retrieval

* feat(memory): tighten connector retrieval semantics

* feat(engram-chat): add mongo-backed chat prompt configs

* feat(engram-chat): compose chat prompts at runtime

* docs(engram-chat): document prompt override workflow

* fix(engram-chat): restrict prompt overrides to admins

* feat(frontend): add prompt admin controls to memory page

* feat(prompts): scope product prompt control to admins

* build(dev): add oauth tunnel startup command

* docs(engram-chat): document stable oauth callbacks

* feat(engram-chat): add direct chat fallback for local runtime

* feat(frontend): enrich memory admin prompt controls

* feat(frontend): add admin workspace debug portal

* feat(frontend): fold memory into brand brain experience

* fix(memory): repair admin event and stats endpoints

* fix(frontend): expose full prompt catalog and route to chat

* feat(memory): add user-scoped memory steering

* feat(frontend): add explicit brand team switcher

* refactor(frontend): move prompt governance into admin portal

* feat(frontend): streamline brand switcher and add new brand entry

* fix(frontend): route team workspace to backend api

* build(dev): mirror runtime logs to root file

* fix(frontend): always open brand switcher menu

* refactor(frontend): remove team and data from primary nav

* feat(frontend): embed data explorer into connectors

* feat(frontend): add connect and explore tabs to connectors

* fix(frontend): load connector explorer data from backend

* fix(chat): keep product context across follow-up turns

* fix(chat): ground brand-scoped turns in profile context

* fix(chat): add website identity to brand context

* docs(traceability): capture aligned scope

* feat(chat): trace sync runs and expose admin inspection

* test(chat): add context regression harness

* feat(chat): expose retrieval provenance in traces

* feat(chat): trace streamed chat runs

* feat(frontend): inspect chat traces from admin portal

* feat(multi-brand): full multi-brand support — routing, access control, delete, refresh fix (openclaw#180)

* feat(multi-brand): support multiple brands per user (openclaw#178)

Backend:
- Store: add list_brand_profiles_for_user (all owned+member brands),
  create_brand_profile (new insert), upsert_brand_profile_by_id (owner-only update by id)
- Brand router: POST /v1/brand creates a new brand; GET /accessible now returns
  ALL owned and member brands via list_brand_profiles_for_user
- Add _get_brand_for_user helper for consistent owner/member access control
- Thread brand_id query param through /profile, /website-identity, /refresh,
  /refresh-status, /today, _trigger_refresh_task, _generate_daily_brief_task
- POST /profile accepts ?brand_id= to update a specific brand (owner only)
- Chat: ChatRequest.brand_id optional field; _get_context and run_content_pipeline
  tool respect active brand_id

Frontend:
- BrandContext: add createBrand(); saveTracking and setBrandThemeEnabled now
  pass ?brand_id= when activeBrandId is set
- useDailyBrief: accept brandId option, thread through today/refresh/refresh-status/
  website-identity API calls
- Header BrandSwitcher: "New brand" inline form to create additional brands

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* fix(multi-brand): clear stale activeBrandId on 403/404 profile fetch

If localStorage has a brand_id the user no longer has access to,
the profile request returns 403. Clear the key and retry without it.

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* feat(header): always show brand dropdown with + Add brand button

Removed the single-brand shortcut that rendered a plain link with no
dropdown — the trigger now always opens the dropdown, giving every user
access to the brand list and the inline "Add brand" form.

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* feat(multi-brand): add brand via website URL, not brand name

POST /v1/brand now accepts website_url, derives a seed name from the
domain, persists the new brand, then fires _trigger_refresh_task in the
background — same extraction flow as first-brand onboarding.

Frontend: createBrand() accepts a URL; Header "Add brand" input shows a
Globe icon with placeholder "example.com" and a "Go" submit button.

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* chore: restore stashed session changes (brand delete, context ACL, team brand_id, store methods)

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* fix(multi-brand): correct brand routing across all pages and fix refresh crash

- store: add get_brand_for_user() — single access-control resolver (owner or member)
- brand.py: remove local _get_brand_for_user(), replace all 7 call sites with store method
- chat.py: replace two inline access-control blocks with store.get_brand_for_user()
- context.py: simplify _assert_brand_access() to use store.get_brand_for_user()
- brand.py _synthesize_brief: fix NameError — bare brand_id → str(brand.id or "")
- useDailyBrief: add brandId to useCallback dep arrays (fetchBrief, fetchWebsiteIdentity, fetchRefreshStatus) — was stale on brand switch
- today/page: pass activeBrandId to useDailyBrief
- brand-brain/page: pass brand_id param to /v1/brand/profile and /v1/brand/website-identity fetches
- team/page: add useBrandProfile, pass brand_id to all 4 team API calls, add brandParam to fetchTeam deps

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

---------

Co-authored-by: Claude Sonnet 4.6 <[email protected]>

* feat(backend): add agent web research endpoint

* feat(chat): trigger web research from search intent

* feat(chat): add search policy prompt section

* feat(ux): show loading indicator when a new brand is being initialized

- toast.loading/success/error pair in BrandSwitcher for full-lifecycle feedback
- animated skeleton loading row appears in brand list while creation is in progress
- all brand-switch and delete buttons disabled while creating to prevent race conditions
- deferred setActiveBrandId until after fetchBrand resolves so the switcher does not flip to the new brand before its profile is ready

Closes openclaw#181

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* fix(frontend): surface saved search data in explore

* feat(chat): stream agent activity summaries

* fix(frontend): soften technical thinking summaries

* feat(chat): add langfuse tracing support

* feat(admin): surface langfuse metadata in traces

* speed up brand refresh

* fix(openclaw): bind gateway to 0.0.0.0 on Render

Render requires the service to listen on 0.0.0.0 for port detection.
Add dockerCommand to override the Dockerfile CMD with --bind lan --port 8080,
and remove the no-op OPENCLAW_GATEWAY_BIND env var (not read by the codebase).

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

---------

Co-authored-by: Claude Sonnet 4.6 <[email protected]>
Co-authored-by: sdntsng <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants