Commit graph

53 commits

Author SHA1 Message Date
0f79494fbe feat(deploy): finalize MVP deployment and file transfer approach 2026-05-02 23:45:52 +03:00
5b537880ae docs(deploy): finalize multi-agent surface image handoff 2026-04-28 20:11:27 +03:00
b1aaa210a1 feat(deploy): platform handoff — agent routing, persistence, docs cleanup
Agent routing:
- Remove !agent command and manual agent selection flow
- Registry auto-assigns agent from user_agents mapping (fallback: agents[0])
- provision_workspace_chat and !new both write agent_id to room_meta
- Reconciliation backfills agent_id from registry on cold start
- Fix duplicate agent_id block in auth.py

Deployment stability:
- Add bot-state named volume to persist lambda_matrix.db and matrix_store
- Fix docker-compose.prod.yml duplicate environment: key (was silently losing all Matrix credentials)
- Fix MATRIX_AGENT_REGISTRY_PATH to use absolute container path /app/config/...
- Add bot-state volume declaration to docker-compose.fullstack.yml

Docs and config:
- Rewrite README.md for platform handoff (deploy table, working commands only)
- Rewrite docs/matrix-prototype.md (remove stale commands and mock descriptions)
- Remove !save/!load/!context/!agent from help text and welcome message
- Add !clear, !list, !remove, !yes/!no to help text
- Clean up .env.example (remove Telegram token, internal vars, real URLs)
- Update config/matrix-agents.example.yaml with user_agents section and comments
- Add explanatory comment to Dockerfile for --ignore-requires-python
- Remove silent uv sync fallbacks in Dockerfile
2026-04-28 03:05:11 +03:00
ae37476ddf test(05-02): add failing regressions for clear routing
- cover room-local clear rotation and upstream disconnect behavior
- assert strict routed-platform failures on incomplete room bindings
2026-04-28 01:13:54 +03:00
a75b26a1cb test(05-01): add restart reconciliation regression coverage
- add startup reconciliation tests for recovery, idempotence, and startup ordering
- extend restart persistence coverage for legacy platform_chat_id backfill
2026-04-28 01:05:59 +03:00
cafb0ec9e4 test(05-03): add failing shared-volume attachment contract tests
- cover room-safe Matrix inbox paths under /agents workspaces
- assert /workspace and /agents file paths normalize to relative workspace paths
2026-04-28 01:04:31 +03:00
e733119d1e feat: enforce agent routing and persist restart state
Task 4: stale room blocking + agent_id binding
- MatrixBot._check_agent_routing: blocks normal messages when user has no
  selected agent or room is bound to a different agent
- agent_routing_enabled flag on MatrixRuntime activates the check only
  in real multi-agent mode (RoutedPlatformClient)
- make_handle_new_chat now writes agent_id into new room metadata when
  user already has a selected agent

Task 5: durable restart state tests
- test_restart_persistence.py proves selected_agent_id, room agent_id,
  platform_chat_id, and the sequence counter all survive SQLiteStore
  close/reopen; also covers clean startup with no prior state
2026-04-24 14:01:49 +03:00
74cf028e8f feat: add !agent command and durable user agent selection
Users can now list available agents with !agent and select one by
number. Selection persists in user metadata (selected_agent_id). If the
current room has no agent binding yet, selecting an agent binds it
immediately so the user can start messaging without !new.

Also updates the dispatcher test to reflect that real-mode platform is
now RoutedPlatformClient, not a bare RealPlatformClient.
2026-04-24 13:54:25 +03:00
a65227e490 test: align matrix dispatch chat id contract 2026-04-24 13:29:49 +03:00
9ccba161a2 fix: require matrix agent registry in real mode 2026-04-24 13:24:56 +03:00
242f4aadd3 feat: add matrix routed platform facade 2026-04-24 13:22:05 +03:00
3b0401fb7c Require string agent registry fields 2026-04-24 13:11:02 +03:00
25aa5d9313 Make Matrix agent registry immutable 2026-04-24 13:08:25 +03:00
2fb6c10a5a Reject null agent registry fields 2026-04-24 13:05:26 +03:00
e801225220 Tighten Matrix agent registry validation 2026-04-24 13:02:19 +03:00
b53523ad6c Reject non-mapping agent registry entries 2026-04-24 12:57:00 +03:00
37f7ce27a2 Add Matrix agent registry loader 2026-04-24 12:54:30 +03:00
7d58dd1caf fix: use direct agent api per request 2026-04-22 15:31:28 +03:00
0c2884c2b1 refactor: use thin upstream transport adapter 2026-04-22 01:25:11 +03:00
4524a6abc8 feat: finalize matrix platform audit and docs 2026-04-21 15:35:03 +03:00
6422c7db58 feat: support shared-workspace file flow for matrix 2026-04-21 00:26:21 +03:00
323a6d3144 feat: commit staged matrix attachments on next message 2026-04-20 21:39:37 +03:00
f111ed3348 feat: add matrix staging list and remove flow 2026-04-20 21:37:12 +03:00
83c9a1513b feat: parse matrix staged attachment commands 2026-04-20 16:26:37 +03:00
0eaf124e21 feat: add matrix staged attachment state 2026-04-20 16:21:00 +03:00
73c472ecc4 feat(matrix): implement !reset via new platform_chat_id
Instead of calling a /reset endpoint on platform-agent, !reset now
generates a new thread_id (platform_chat_id) for the room. The old
WebSocket connection is closed and the next message creates a fresh
context automatically. No platform changes required.
2026-04-19 21:20:31 +03:00
07c5078934 feat(task-7): verify matrix per-room context routing 2026-04-19 17:43:18 +03:00
c11c8ecfbf feat(task-5): scope matrix context state per room 2026-04-19 17:41:04 +03:00
8270e5821e Assign matrix platform chat ids on creation 2026-04-19 17:31:21 +03:00
0cdee532c4 fix: ensure lazy platform chat ids before load selection 2026-04-19 17:29:36 +03:00
9cb1657d21 Add lazy platform chat IDs for Matrix rooms 2026-04-19 17:25:25 +03:00
c666d908da fix: make matrix entry-room bootstrap idempotent 2026-04-19 17:23:07 +03:00
17d580096b Serialize Matrix chat sends 2026-04-19 17:18:32 +03:00
5782001d3d fix: preserve matrix room metadata when setting platform chat id 2026-04-19 16:52:43 +03:00
f3f9b10d6b feat: add platform chat id room metadata helpers 2026-04-19 16:50:12 +03:00
430c82dba1 feat(04-01): finalize AgentApi migration 2026-04-17 16:31:48 +03:00
b52fdc4670 feat(04-02): add matrix context management commands
- add save/load/reset/context handlers and matrix interception flows
- persist current session and last token usage in prototype state
2026-04-17 16:12:03 +03:00
8efc91b02b fix(matrix): accept repeat invites before provisioning 2026-04-08 02:18:11 +03:00
94bdb44b93 feat: wire matrix runtime to real backend 2026-04-08 01:40:38 +03:00
6ced154124 feat(matrix): land QA follow-ups and refresh docs
- harden Matrix onboarding/chat lifecycle after manual QA
- refresh README and Matrix docs to match current behavior
- add local ignores for runtime artifacts and include current planning/report docs

Closes #7
Closes #9
Closes #14
2026-04-05 19:08:58 +03:00
9cdb6118e9 test(01-06): harden matrix room-vs-chat regressions
- Seed invite tests with explicit next_chat_index progression instead of C1 assumptions
- Separate Matrix room ids from logical chat ids in dispatcher coverage
- Verify the full Matrix adapter suite against the tightened assertions
2026-04-03 12:35:09 +03:00
974935c880 test(01-06): add failing matrix command-only regressions
- Assert skills text no longer includes reaction-era labels
- Require converter to drop reaction callback support
- Lock !settings dashboard to read-only snapshot copy
2026-04-03 12:32:21 +03:00
716dec5dfd test(01-05): cover matrix confirm flow round trip
- assert room_id is preserved on !yes and !no callbacks
- exercise send_outgoing to confirm and cancel with user+room scope
2026-04-03 12:27:42 +03:00
97a3dc35ea test(01-04): add matrix space regression coverage
- add MAT-01..MAT-07 and MAT-09..MAT-12 regression tests for matrix adapter
- extend store and dispatcher coverage for pending confirmations and settings dashboard
- verify matrix adapter suite and full pytest suite stay green
2026-04-02 23:03:17 +03:00
6f1bdb4077 fix(01-04): update matrix dispatcher and reaction tests
- rewrite invite/new-chat assertions for Space-based Matrix flow
- replace legacy reaction text checks with !skill on/off expectations
- validate confirmation text against !yes and !no prompts
2026-04-02 23:00:50 +03:00
8a00d5ac54 fix(tg): /archive tries delete_forum_topic, falls back with explanation if API rejects 2026-04-02 15:16:39 +03:00
fcf5be7efa fix(tg): remove close_forum_topic from /archive — unsupported in Threaded Mode 2026-04-02 14:21:03 +03:00
d5ab527f5d fix(tg): QA fixes — stream_message, topic_created, archive reply
- sdk/mock.py: stream_message was async def (coroutine), must be async
  generator with yield — caused TypeError on every user message
- topic_events.py: on_topic_created now skips bot-created topics
  (from_user.id == bot.id); cmd_new already registers them under the
  correct human user_id
- commands.py: cmd_archive now sends "Чат архивирован." confirmation
- test_topic_events.py: add bot=SimpleNamespace(id=BOT_ID) to fixture
2026-04-02 14:14:19 +03:00
8901e60f6a fix(tg): reviewer fixes — error handling, timeouts, db index
- commands.py: try/except TelegramBadRequest around all Bot API calls (#2);
  /new handles "topics limit" with user-friendly message (#4)
- start.py: isolate _check_and_prune_stale_topics with try/except Exception (#3)
- message.py: asyncio.timeout(30) around stream_message; handle TimeoutError (#6)
- db.py: add idx_chats_user_id index in init_db() (#7)
- settings.py: remove dead active_chat_id variable (#8)
- tests: add test_message.py (stream error/success); add 2 tests in test_commands.py
  (topics limit, /archive in General topic)
2026-04-02 13:44:59 +03:00
24c61468d7 feat(tg): forum-first adapter complete — handlers, bot.py, 46 tests pass 2026-04-02 13:23:40 +03:00