Commit graph

54 commits

Author SHA1 Message Date
CREDO23
f2a61bc0ef refactor(agents): consolidate chat runtime infra under chat/runtime
Move the lower-level runtime/infra modules out of multi_agent_chat/shared/
(they were never used by subagents, so they failed the shared-by-all-siblings
rule) and unify them with the already-relocated checkpointer:

  agents/runtime/                      -> agents/chat/runtime/
  mac/shared/errors.py                 -> chat/runtime/errors.py
  mac/shared/llm_config.py             -> chat/runtime/llm_config.py
  mac/shared/prompt_caching.py         -> chat/runtime/prompt_caching.py
  mac/shared/mention_resolver.py       -> chat/runtime/mention_resolver.py
  mac/shared/path_resolver.py          -> chat/runtime/path_resolver.py

These sit below the agent packages: the boundary + agent factory + shared
middleware depend on them, and they import no agent code (acyclic).
2026-06-05 13:19:24 +02:00
CREDO23
24b62a63b4 refactor(agents): introduce chat/ category; dissolve top-level agents/shared
Recursive shared-folder rule: a shared/ must be shared by ALL siblings at its
level. The kernel (context, compaction, retry_after, web_search) was shared by
only 2 of the agents -- anonymous_chat + multi_agent_chat -- never by podcaster
or video_presentation. Those 2 are the "chat" category, so their shared code
belongs in that category's shared/, not the top-level one.

  app/agents/anonymous_chat/   -> app/agents/chat/anonymous_chat/
  app/agents/multi_agent_chat/ -> app/agents/chat/multi_agent_chat/
  app/agents/shared/           -> app/agents/chat/shared/   (anon<->mac kernel)

Top-level app/agents/shared/ is gone: nothing was shared across all three
categories (chat / podcaster / video_presentation).

~289 import sites rewritten (app.agents.{anonymous_chat,multi_agent_chat,shared}
-> app.agents.chat.*); all moves are git renames (history preserved).
app/agents/ now: chat/, podcaster/, video_presentation/, runtime/.
2026-06-05 12:54:02 +02:00
CREDO23
d59bb2b5aa refactor(agents): evict mac-only tools/middleware from shared kernel
These were never shared with anonymous_chat (nor podcaster/video_presentation)
-- only multi_agent_chat (subagents/main agent) and the boundary use them:

  shared/tools/mcp/             -> multi_agent_chat/shared/tools/mcp/
  shared/tools/hitl.py          -> multi_agent_chat/shared/tools/hitl.py
  shared/tools/catalog.py       -> multi_agent_chat/shared/tools/catalog.py
  shared/middleware/dedup_tool_calls.py
                                -> multi_agent_chat/shared/middleware/dedup_tool_calls.py

app/agents/shared/ now holds only the genuine anon<->mac kernel:
context, middleware/{compaction,retry_after}, tools/web_search.
2026-06-05 12:50:46 +02:00
CREDO23
82c5dc5b02 refactor(agents): move mac-only modules out of the cross-agent shared kernel
app/agents/shared/ is a sibling of anonymous_chat/podcaster/multi_agent_chat/
video_presentation, so it should only hold code shared across 2+ of those
agents. In practice podcaster and video_presentation import nothing from it,
and anonymous_chat needs only context + compaction + retry_after + web_search.
Everything else was multi_agent_chat-only (the boundary just passes through).

Move the multi_agent_chat-only cluster into multi_agent_chat/shared/ (files
moved verbatim via git rename; ~116 import sites rewritten):

  errors, feature_flags, filesystem_selection, path_resolver, prompt_caching,
  sandbox, llm_config, mention_resolver
  middleware/busy_mutex, middleware/kb_persistence

busy_mutex/llm_config/mention_resolver are boundary-only but import the moved
modules, so they were folded in to avoid a backwards shared -> multi_agent_chat
dependency. main_agent builders now import the impls directly; the shared
middleware barrel keeps only the genuinely-shared compaction + retry_after.

Also delete the dead leftover shared/plugins and shared/skills dirs (live
copies already live under main_agent/).

Remaining in app/agents/shared/: context, system_prompt(+prompts), checkpointer,
middleware/{compaction,retry_after,dedup_tool_calls}, tools/. checkpointer and
system_prompt are boundary-only infra pending a dedicated home decision.
2026-06-05 12:30:15 +02:00
CREDO23
c51aca6ccc refactor(agents): group MCP tools into shared/tools/mcp/ subpackage
The three MCP siblings (mcp_client/mcp_tool/mcp_tools_cache) served one
objective but sat loose at the top of shared/tools. Grouped them into an
mcp/ package and dropped the redundant prefix: client.py, tool.py, cache.py.
Updated all importers (routes, mcp_tools subagent, e2e fake patch targets,
unit test) to the new paths.
2026-06-04 20:35:38 +02:00
CREDO23
64512c604d refactor(agents): colocate gmail + calendar connector tools into subagent slices
Gmail and Calendar are handled together because both Google connectors share
the _build_credentials helper that lived in shared/tools/gmail.

- relocate the gmail helpers (_get_token_encryption, _build_credentials,
  _gmail_headers, _format_gmail_summary) into the gmail subagent slice
  (tools/_helpers.py); repoint gmail search_emails/read_email to it.
- calendar search_events now imports _build_credentials from the gmail slice
  (preserving the existing cross-connector Google-auth dependency).
- repoint both dead tools/__init__ shims at the live local impls.
- fix tests/e2e native_google fake: it patched the dead shared
  google_calendar.*.build paths; point it at the live subagent calendar
  modules (which actually import googleapiclient build).
- delete dead shared/tools/{gmail,google_calendar} twins.

shared/tools now has zero connector dirs. agents unit suite green (942).
2026-06-04 20:09:37 +02:00
CREDO23
5b45f78a16 refactor(chat): delete legacy stream_new_chat monolith (cutover complete)
The flows orchestrators (new_chat/resume_chat) are now the sole live path
after the byte-for-byte differential proof, so the monolith and its
monolith-vs-flows parity scaffolding are removed.

- Repoint the last live importer (anonymous_chat_routes) to
  streaming.agent.event_loop.stream_agent_events + shared.stream_result.StreamResult
  (drop-in; the keyword-only fallback-commit params default to inert for anon).
- Repoint e2e launcher patch targets to flows.shared.llm_bundle.
- Repoint helper unit tests (chunk_parts, thinking-step ids, tool-input
  streaming) to their flows homes to preserve coverage.
- Delete the monolith, the contract test, and the parity tests
  (parallel_refactor, stage_1, stage_2, orchestrator_frame) whose sole
  purpose was comparing against the now-removed monolith.

Full suite green (2622 passed, 1 skipped); the two excluded live-app dirs
(document_upload, composio) have a pre-existing, env-gated registration 404
unrelated to this change.
2026-06-04 14:35:45 +02:00
CREDO23
aab95b9130 refactor(agents): move tools package to app/agents/shared (slice 6)
Relocate the entire new_chat/tools/ package (62 files incl. registry, hitl, MCP
cluster, and all connector subpackages: gmail/slack/discord/teams/drive/etc.)
to the shared kernel. The package turned out to be a clean cohesive cluster:
its only references to non-tools new_chat modules were comments, and its
middleware deps were already flipped to shared in slice 5c.

Flip 33 live importers (multi-agent, flows, routes, services, anonymous_agent,
tests). Re-export shims remain for the frozen single-agent stack: a package
__init__ mirroring the public surface (new_chat.__init__ imports it) plus
invalid_tool + registry submodule shims (chat_deepagent imports those).

Resolves slice 5c's two transient back-edges: shared/middleware/action_log
(TYPE_CHECKING ToolDefinition) and tool_call_repair (local INVALID_TOOL_NAME)
now point at app.agents.shared.tools.
2026-06-04 13:11:56 +02:00
CREDO23
946f8a8c5d refactor(agents): move llm_config + prompt_caching to app/agents/shared (slice 4b)
Relocate the mutually-dependent LLM config layer and the LiteLLM prompt-caching
helper to the shared kernel as one unit, rewiring their internal cross-reference
to the shared paths. Flip 21 non-frozen importers. Re-export shims remain at
new_chat/{llm_config,prompt_caching}.py for the frozen single-agent stack
(chat_deepagent); they will be removed when that stack is retired.
2026-06-04 12:41:52 +02:00
Anish Sarkar
cc06cff4fb feat(tests): add mock response for file ownership in composio_module 2026-05-16 20:20:04 +05:30
Anish Sarkar
275e2c9e83 chore: fix linting 2026-05-12 04:00:04 +05:30
Anish Sarkar
bed2041a1b chore: modify E2E test configuration by updating global LLM model IDs to negative values for improved test isolation 2026-05-12 03:30:01 +05:30
Anish Sarkar
0b9fc00663 chore: update global LLM config fixture to include both premium and free models for comprehensive E2E testing 2026-05-12 03:00:35 +05:30
Anish Sarkar
650b691a39 chore: enhance E2E tests by adding synthetic global LLM config and updating environment variables for Google OAuth 2026-05-12 02:37:39 +05:30
Anish Sarkar
c052fc9304 chore: add fake DoclingService for E2E tests and integrate into runtime fakes 2026-05-12 00:30:16 +05:30
Anish Sarkar
b247ff37df chore: implement test-only token mint endpoint and update E2E test authentication flow 2026-05-11 19:48:18 +05:30
Anish Sarkar
5344fa47e6 chore: update E2E test documentation for clarity and local setup instructions 2026-05-11 03:29:32 +05:30
Anish Sarkar
68f45335bc chore: implement E2E testing setup with Docker Compose and update workflow for backend and Redis services 2026-05-11 03:09:01 +05:30
Anish Sarkar
dbf575fbd0 chore: ran linting 2026-05-09 05:16:20 +05:30
Anish Sarkar
2f540ee065 refactor(tests): simplify logging messages and enhance manual upload journey tests 2026-05-09 05:10:05 +05:30
Anish Sarkar
fbfde74cdc test(e2e): route connector PDF canary responses in chat fake & add connector PDF canaries 2026-05-09 05:03:38 +05:30
Anish Sarkar
5a2357b981 test(e2e): serve binary PDF bytes from storage connector fakes 2026-05-09 05:03:07 +05:30
Anish Sarkar
ad226853e5 test(e2e): wire PDF metadata into connector fixture JSONs 2026-05-09 05:02:40 +05:30
Anish Sarkar
fc32ab0cf3 test(e2e): add shared binary fixture loader for connector fakes 2026-05-09 05:02:23 +05:30
Anish Sarkar
523563b948 test(e2e): add canary PDFs and reproducer for connector docling coverage 2026-05-09 05:02:04 +05:30
Anish Sarkar
e211028866 test(e2e): add ClickUp MCP backend fake 2026-05-08 13:12:34 +05:30
Anish Sarkar
7303e3ebb3 test(e2e): wire Dropbox Playwright fixtures 2026-05-08 12:28:26 +05:30
Anish Sarkar
69437b1fe4 test(e2e): add Dropbox backend fake 2026-05-08 12:27:45 +05:30
Anish Sarkar
da8b151634 test(e2e): wire OneDrive fake into harness 2026-05-08 03:48:35 +05:30
Anish Sarkar
3ee633cb23 test(e2e): add OneDrive Graph backend fake 2026-05-08 03:48:18 +05:30
Anish Sarkar
73b6375688 test(e2e): wire Slack fake into harness 2026-05-08 03:08:36 +05:30
Anish Sarkar
bf23cb2381 test(e2e): add Slack MCP backend fake 2026-05-08 02:24:39 +05:30
Anish Sarkar
d36bd33733 test(backend): route Confluence canary responses in E2E chat 2026-05-08 01:09:49 +05:30
Anish Sarkar
b74caf157b test(backend): add Confluence indexing E2E fake 2026-05-08 01:09:40 +05:30
Anish Sarkar
640ae03030 test(backend): add Confluence OAuth E2E fakes 2026-05-08 01:02:52 +05:30
Anish Sarkar
ebdf6cbaed test(backend): route Jira tool responses in E2E chat 2026-05-08 00:15:18 +05:30
Anish Sarkar
369f0aaff3 test(backend): add Jira MCP E2E fakes 2026-05-08 00:15:08 +05:30
Anish Sarkar
e6297e2e40 test(backend): add shared MCP runtime E2E fake 2026-05-08 00:14:43 +05:30
Anish Sarkar
43eae11197 test(backend): add shared MCP OAuth E2E fake 2026-05-08 00:14:34 +05:30
Anish Sarkar
fb0e12c86c test(backend): route Linear tool responses in E2E chat 2026-05-07 23:15:37 +05:30
Anish Sarkar
2cbedf2eb4 test(backend): add Linear MCP E2E fakes 2026-05-07 23:15:20 +05:30
Anish Sarkar
a9ea063108 test(backend): route Notion canary responses in E2E chat 2026-05-07 22:22:01 +05:30
Anish Sarkar
15709b82f7 test(backend): add Notion E2E fakes 2026-05-07 22:21:52 +05:30
Anish Sarkar
597bd34053 test(backend): add native Google Calendar E2E fakes 2026-05-07 04:42:28 +05:30
Anish Sarkar
d81f5a1d2a fix(tests): update LLM bindings in E2E tests for document processors 2026-05-07 04:27:46 +05:30
Anish Sarkar
a5c04cb38d test(backend): generalize native Google E2E fakes for Gmail 2026-05-07 04:22:59 +05:30
Anish Sarkar
3f2912a4ca test(backend): add native Google Drive E2E fakes 2026-05-07 03:59:40 +05:30
Anish Sarkar
bc2dc21a75 test(backend): add Composio Calendar live-tool fakes 2026-05-07 03:41:47 +05:30
Anish Sarkar
7864cbbeea test(backend): teach fake chat LLM Gmail tool-call flow 2026-05-07 03:16:02 +05:30
Anish Sarkar
f2e62a09b3 test(backend): add deterministic Composio Gmail E2E fakes 2026-05-07 02:52:14 +05:30