Skip to content

feat(telegram): Phase 2 — deliver uploaded files to agent workspace (#354 follow-up) #487

Description

@vybe

Summary

Complete Phase 2 of #354: actually deliver files uploaded via Telegram into the agent workspace at /home/developer/uploads/ and inject a chat message so the agent sees the upload. Phase 1 (PR #355) shipped extraction, download, magic-byte MIME validation, size checks, and audit logging — but files are currently logged and dropped, not handed to the agent.

Context

PR #355 closed #354 as "Phase 1" with an explicit deferral:

Files are validated and logged but not yet delivered to agent workspace — that's Phase 2.

Right now a user can send a photo or document to an agent's Telegram bot and the backend will download, validate, and audit it — but the agent itself never sees the file. This issue tracks closing that gap for Telegram. Slack and public-link channels are tracked separately (see #354 "Out of Scope" and #222/#282 for Slack).

Acceptance Criteria

  • After successful validation in telegram_adapter/message_router, persist the downloaded bytes to the target agent's workspace at /home/developer/uploads/{sanitized_filename}
  • Filename sanitization: strip path traversal (.., /, \), normalize unicode, truncate to a sane length, de-dupe on collision (e.g. suffix -1, -2)
  • Inject a system/user chat message into the agent's stream in the documented format: [File uploaded by {verified_email}]: {filename} ({size}) saved to /home/developer/uploads/{filename}
  • Delivery path works for both photos (largest size variant) and documents
  • Audit log entry records the final stored path (extend the existing Phase 1 audit entry or add a file_delivered event)
  • Failure modes are graceful: if workspace write fails, the user gets a clear error message back in Telegram and nothing is injected into the chat stream
  • Unit tests cover: filename sanitization, collision handling, workspace write failure, chat injection format
  • docs/memory/feature-flows/telegram-integration.md updated with the Phase 2 delivery flow

Technical Notes

  • Phase 1 code lives in src/backend/adapters/telegram_adapter.py (_extract_files, download_file) and src/backend/adapters/message_router.py (validation + audit).
  • Workspace write needs to go through the agent container — look at how existing agent-workspace writes are done (credentials injection via routers/credentials.py is one precedent; docker_service / agent_client may be involved).
  • Chat injection: reuse whatever primitive Phase 1 uses to route the user's text message to the agent, just prepend/replace with the file-upload notice.
  • Out of scope (per feat: File upload support for external channels (Telegram, Slack, public links) #354): per-user namespaced folders, storage quotas, retention/cleanup, virus scanning, voice/video/stickers.

Related

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions