Pular para conteúdo

Estrutura do projeto

Organização

O código divide domínio, casos de uso e adapters, com handlers que montam dependências e traduzem os eventos de transporte. A pasta core/orchestrator/ contém apenas __init__.py; a lógica principal está em core/application/process_message_use_case.py. Não procure uma classe Orchestrator inexistente.

gogenetic/
├── src/
│   ├── core/
│   │   ├── domain/          # entidades, estados, códigos, catálogo
│   │   ├── application/     # casos de uso, parser, dispatcher, smokes
│   │   ├── agents/          # invocador e builders de prompt
│   │   ├── knowledge_base/  # packages, descoberta, overrides
│   │   ├── integrations/    # adapters HTTP, AWS, stubs e factories
│   │   └── config/          # Settings e leitura de ambiente
│   ├── webhook_handler/    # entrada Meta e enfileiramento
│   ├── orchestrator/       # consumo SQS e execução de turnos
│   ├── crm_sync/           # worker agendado e reconciliação CRM
│   ├── handoff_renotify/   # lembretes periódicos de fila
│   ├── admin_export/       # exportação periódica administrativa
│   ├── emulator/           # FastAPI, HTMX, templates e painel humano
│   └── shared/             # logging, buffer e tipos comuns
├── tests/                  # unitários, integração real e replay
├── scripts/                # CLI local, dashboard, smokes e deploy
├── template.yaml           # infraestrutura da aplicação AWS SAM
├── samconfig.toml          # perfis de execução SAM
├── infra/                  # template separado do frontend de operador
├── context/                # decisões, sprints e contexto histórico
├── docs/                   # especificações e guias preexistentes
└── technical-docs/          # esta referência MkDocs, isolada

Mapa dos módulos principais

Arquivo ou diretório Símbolo / responsabilidade Dependências e consumidores
src/webhook_handler/app.py lambda_handler: verificação, assinatura, mensagens, comandos de operador, fila Settings, repositories, SQS; chamado pela HTTP API
src/orchestrator/app.py lambda_handler: consumo e guarda de turno Use case, DynamoDB e WhatsApp; chamado por SQS
src/core/application/process_message_use_case.py process_message, ProcessOutcome, TurnGuard Dependencies, dispatcher, agentes; Lambda, dashboard e replay
src/core/application/action_mapping.py dispatch_triagem, dispatch_qualificacao, dispatch_coleta, ActionKind, ActionResult Domínio, parser, catálogo, KB; loop do orquestrador
src/core/application/parser.py parse_llm_response, ParsedLLMResponse JSON e erros de aplicação; caso de uso
src/core/domain/session.py Session e transições states.py, values; repositories e casos de uso
src/core/domain/services.py ServiceName, REQUIRED_FIELDS, missing_required_fields Sem I/O; qualificação e testes
src/core/agents/invoker.py AgentInvokerImpl Builders, histórico, overrides, LLM; orquestrador
src/core/integrations/factory.py Dependencies, build_dependencies e factories de provider Settings, repositories, adapters; entrypoints
src/core/integrations/dynamodb/ Repositories de sessão, mensagens, dedupe, admin, auth e sync boto3, transações e serializers; aplicação/handlers
src/core/application/confirm_action.py Confirmação cadastral e preparação do handoff CRM, eGestor, resumo; ação da Coleta
src/core/application/crm_sync.py CrmSyncProcessor e projeção do ciclo de vida CRM, repository sync, sessões; worker crm_sync/app.py
src/core/application/human_conversation.py Assumir, responder e encerrar Sessões, mensagens, WhatsApp; painel humano
src/core/application/operator_auth.py Links únicos, sessão e CSRF Repository auth e disponibilidade; webhook/painel
src/core/application/admin_tools.py Overrides, configurações e agregações Repositories e domínio; invocador e admin
src/emulator/app.py FastAPI e handler Mangum Factories, templates, autenticação; local e Lambda
src/shared/logging.py JSON logging e sanitização Entrypoints e módulos; observabilidade

Dependências seguem o contrato

Dependencies é uma dataclass congelada passada aos casos de uso. O factory escolhe adapters reais ou stubs com base em settings e pode receber table/agent_invoker nos testes. As interfaces usam typing.Protocol: implementações são aceitas pela estrutura dos métodos, sem precisar herdar de uma base.

O core tem limites práticos: alguns Protocols de repository vivem dentro de integrations/dynamodb/, e o contrato LLMClient está junto ao cliente OpenAI. Essa é a organização presente; uma arquitetura idealizada com ports/ separados não descreve este checkout.

Onde fazer cada mudança

Necessidade Primeiro ponto de alteração Validar também
Mudar uma pergunta ou tom Builder em src/core/agents/<agente>/system_prompt.py Overrides, runtime guards, testes do invocador e prompt
Alterar estado/ação domain/states.py, domain/codes.py, application/action_mapping.py Persistência atômica, worker CRM, painel e fixtures
Novo serviço domain/services.py e prompt Qualificação KB, required fields, testes de dispatcher/replay
Trocar provider Interface, implementação, stub e factory Payload builder, autenticação, retry, smoke controlado
Novo campo persistido Entidade e serializer/repository Compatibilidade de leitura, exportações e contratos públicos
Nova configuração Settings e consumidor .env.example, SAM, script deploy e testes de scoping
Corrigir mensagem sobreposta Orchestrator Lambda + debounce repository Guardas, receipts e testes de concorrência
Mudança operacional em UI emulator/app.py e template correspondente Auth/CSRF, área, concorrência e estado

Empacotamento e validação

pyproject.toml declara pacotes instaláveis admin_export*, core*, crm_sync*, handoff_renotify* e shared* sob src. Os scripts locais acrescentam src ao sys.path; handlers como emulator e webhook_handler não devem ser presumidos disponíveis em qualquer instalação wheel. O SAM empacota o código conforme CodeUri e requirements de cada recurso.

Para uma mudança futura, execute os testes dos módulos afetados e depois o conjunto local explícito:

python -m pytest tests/unit tests/integration/test_fixture_replay.py -q
python -m ruff check src tests scripts
python -m mypy

pytest sem seleção pode incluir OpenAI real quando houver chave. A CI atual usa pytest e não inclui build da documentação; o build MkDocs continua uma verificação separada. Não confunda um resultado antigo de cobertura com o resultado atual.

Fontes: pyproject.toml, .github/workflows/ci.yml, template.yaml, os módulos da tabela e tests/. Continue nos tutoriais de integrações, serviços e agentes.