feat(talon): ingest Telegram approval reactions - #4346
Merged
John Kennedy (jkennedyvz) merged 5 commits intoJun 28, 2026
Conversation
John Kennedy (jkennedyvz)
marked this pull request as ready for review
June 27, 2026 22:47
John Kennedy (jkennedyvz)
deleted the
john/talon/telegram-reaction-approval
branch
June 28, 2026 22:19
This was referenced Jun 28, 2026
John Kennedy (jkennedyvz)
pushed a commit
that referenced
this pull request
Jun 30, 2026
> [!CAUTION] > Merging this PR will automatically publish to **PyPI** and create a **GitHub release**. For the full release process, see [`.github/RELEASING.md`](https://github.com/langchain-ai/deepagents/blob/main/.github/RELEASING.md). --- _Everything below this line will be the GitHub release body._ --- ## [0.0.2](deepagents-talon==0.0.1...deepagents-talon==0.0.2) (2026-06-30) ### Features * **talon:** `DEEPAGENTS_TALON_RECURSION_LIMIT` env var ([#4354](#4354)) ([82d1eac](82d1eac)) * **talon:** add reaction approval routing ([#4345](#4345)) ([3fe8c0c](3fe8c0c)) * **talon:** add Telegram channel adapter, CLI wiring, and offset persistence ([#4097](#4097)) ([7c87cec](7c87cec)) * **talon:** add tool approval env override ([#4349](#4349)) ([d26481d](d26481d)) * **talon:** audit reaction approval attempts ([#4348](#4348)) ([d7895c4](d7895c4)) * **talon:** ingest Telegram approval reactions ([#4346](#4346)) ([437af0b](437af0b)) ### Bug Fixes * **talon:** default workspace to current directory ([#4099](#4099)) ([5e337ae](5e337ae)) --- _Everything above this line will be the GitHub release body._ --- > [!NOTE] > A **New Contributors** section is appended to the GitHub release notes automatically at publish time (see [Release Pipeline](https://github.com/langchain-ai/deepagents/blob/main/.github/RELEASING.md#release-pipeline), step 2). --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Marcelo5444
pushed a commit
to Marcelo5444/deepagents
that referenced
this pull request
Jul 30, 2026
Stacked on langchain-ai#4345. Adds Telegram `message_reaction` ingestion for approval reactions. The adapter now requests `message_reaction` updates, extracts concrete-user emoji reactions into `ChannelReaction`, applies the existing Telegram exposure policy before dispatch, ignores anonymous or senderless reactions, and preserves offset advancement for processed or dropped reaction updates. Normal message and channel-post parsing remain unchanged. ## Approving by reaction When a tool requires approval the host posts a prompt like: ``` Tool approval required. 1. `shell` Args: `{"cmd": "make deploy production"}` Reply `👍` / `approve` to run or `👎` / `deny` to skip. ``` The operator can now respond two ways: - **Text reply** — `approve` / `deny` (unchanged). - **Emoji reaction** — tap 👍 on the prompt message to approve, 👎 to reject. Reactions are gated the same way as messages: only operators in the exposure policy's `operator_ids` or the channel's `allowed_user_ids` are honored, and the reaction must land on the exact approval prompt in the matching conversation. Anonymous or senderless reactions are dropped. 👍 maps to `approve`, 👎 to `reject`; everything else is ignored. This is most useful on mobile, where a single tap on the prompt beats typing a reply, and for high-volume approval queues where the operator is triaging many tool calls quickly. Validation run: - `uv run --group test pytest --disable-socket --allow-unix-socket tests/channels/test_telegram.py --timeout 10` - `make lint_diff` - `make test` <img width="936" height="738" alt="Screenshot 2026-06-27 at 4 30 02 PM" src="https://github.com/user-attachments/assets/58756f30-c8ff-4bd8-8057-84c8681b6687" /> --------- Co-authored-by: Deep Agent <agent@deepagents.dev>
Marcelo5444
pushed a commit
to Marcelo5444/deepagents
that referenced
this pull request
Jul 30, 2026
> [!CAUTION] > Merging this PR will automatically publish to **PyPI** and create a **GitHub release**. For the full release process, see [`.github/RELEASING.md`](https://github.com/langchain-ai/deepagents/blob/main/.github/RELEASING.md). --- _Everything below this line will be the GitHub release body._ --- ## [0.0.2](langchain-ai/deepagents@deepagents-talon==0.0.1...deepagents-talon==0.0.2) (2026-06-30) ### Features * **talon:** `DEEPAGENTS_TALON_RECURSION_LIMIT` env var ([langchain-ai#4354](langchain-ai#4354)) ([82d1eac](langchain-ai@82d1eac)) * **talon:** add reaction approval routing ([langchain-ai#4345](langchain-ai#4345)) ([3fe8c0c](langchain-ai@3fe8c0c)) * **talon:** add Telegram channel adapter, CLI wiring, and offset persistence ([langchain-ai#4097](langchain-ai#4097)) ([7c87cec](langchain-ai@7c87cec)) * **talon:** add tool approval env override ([langchain-ai#4349](langchain-ai#4349)) ([d26481d](langchain-ai@d26481d)) * **talon:** audit reaction approval attempts ([langchain-ai#4348](langchain-ai#4348)) ([d7895c4](langchain-ai@d7895c4)) * **talon:** ingest Telegram approval reactions ([langchain-ai#4346](langchain-ai#4346)) ([437af0b](langchain-ai@437af0b)) ### Bug Fixes * **talon:** default workspace to current directory ([langchain-ai#4099](langchain-ai#4099)) ([5e337ae](langchain-ai@5e337ae)) --- _Everything above this line will be the GitHub release body._ --- > [!NOTE] > A **New Contributors** section is appended to the GitHub release notes automatically at publish time (see [Release Pipeline](https://github.com/langchain-ai/deepagents/blob/main/.github/RELEASING.md#release-pipeline), step 2). --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #4345.
Adds Telegram
message_reactioningestion for approval reactions. The adapter now requestsmessage_reactionupdates, extracts concrete-user emoji reactions intoChannelReaction, applies the existing Telegram exposure policy before dispatch, ignores anonymous or senderless reactions, and preserves offset advancement for processed or dropped reaction updates. Normal message and channel-post parsing remain unchanged.Approving by reaction
When a tool requires approval the host posts a prompt like:
The operator can now respond two ways:
approve/deny(unchanged).Reactions are gated the same way as messages: only operators in the exposure policy's
operator_idsor the channel'sallowed_user_idsare honored, and the reaction must land on the exact approval prompt in the matching conversation. Anonymous or senderless reactions are dropped. 👍 maps toapprove, 👎 toreject; everything else is ignored.This is most useful on mobile, where a single tap on the prompt beats typing a reply, and for high-volume approval queues where the operator is triaging many tool calls quickly.
Validation run:
uv run --group test pytest --disable-socket --allow-unix-socket tests/channels/test_telegram.py --timeout 10make lint_diffmake test