Skip to content

feat(talon): ingest Telegram approval reactions - #4346

Merged
John Kennedy (jkennedyvz) merged 5 commits into
mainfrom
john/talon/telegram-reaction-approval
Jun 28, 2026
Merged

feat(talon): ingest Telegram approval reactions#4346
John Kennedy (jkennedyvz) merged 5 commits into
mainfrom
john/talon/telegram-reaction-approval

Conversation

@jkennedyvz

@jkennedyvz John Kennedy (jkennedyvz) commented Jun 27, 2026

Copy link
Copy Markdown
Contributor

Stacked on #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 replyapprove / 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
Screenshot 2026-06-27 at 4 30 02 PM

@github-actions github-actions Bot added feature New feature/enhancement or request for one internal User is a member of the `langchain-ai` GitHub organization size: M 200-499 LOC talon labels Jun 27, 2026
@jkennedyvz
John Kennedy (jkennedyvz) marked this pull request as ready for review June 27, 2026 22:47

@open-swe open-swe Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Open SWE Review found 1 potential issue.

Open in WebView Open SWE trace

Comment thread libs/talon/deepagents_talon/channels/telegram.py Outdated
Base automatically changed from john/talon/reaction-approval-contract to main June 28, 2026 22:12
@jkennedyvz
John Kennedy (jkennedyvz) merged commit 437af0b into main Jun 28, 2026
49 checks passed
@jkennedyvz
John Kennedy (jkennedyvz) deleted the john/talon/telegram-reaction-approval branch June 28, 2026 22:19
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature New feature/enhancement or request for one internal User is a member of the `langchain-ai` GitHub organization size: M 200-499 LOC talon

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant