New features: Route Stickness, Handoff, Clarification, Read-Only/Transactional, Long Term Memory

This commit is contained in:
2026-08-03 10:51:44 -03:00
parent 8e414e4e26
commit 32b85c2f84
303 changed files with 9063 additions and 1 deletions

View File

@@ -4211,3 +4211,9 @@ Com esse desenho, adicionar um novo agente não exige reescrever o frontend nem
## Política read-only/transacional
Este template inclui o arquivo opcional `config/tool_policies.yaml`. Use `operation_type: read_only` para consultas e `operation_type: transactional` com `require_confirmation: true` para ações que só podem executar após confirmação booleana explícita. Se o arquivo for removido ou não existir em um template antigo, os campos legados de `config/tools.yaml` continuam válidos.
## Workflows transacionais determinísticos
Além da execução direta de MCP tools, uma operação transacional pode usar um workflow LangGraph determinístico após `clarification` e confirmação explícita. Configure `execution.mode: workflow` em `config/tool_policies.yaml`, mantenha as definições versionadas em `workflows/` e implemente as actions do domínio no projeto do agente. O runtime genérico está em `agent_framework.workflows`.
Consulte `libs/agent_framework/docs/TRANSACTIONAL_WORKFLOWS_PT.md` e o exemplo `workflows/devolucao_pedido.v1.yaml`.

View File

@@ -0,0 +1 @@
from . import devolucao # noqa: F401

View File

@@ -0,0 +1,13 @@
"""Actions de domínio permanecem no agente; o runtime está no framework."""
from agent_framework.workflows import workflow_action
@workflow_action("validar_pedido")
async def validar_pedido(params: dict, state: dict) -> dict:
return {"valid": bool(params.get("order_id"))}
@workflow_action("registrar_devolucao")
async def registrar_devolucao(params: dict, state: dict) -> dict:
# Substitua pela chamada real ao serviço/MCP e use chave idempotente.
return {"protocol": f"DEV-{params['order_id']}", "status": "REQUESTED"}

View File

@@ -14,6 +14,11 @@ tool_policies:
solicitar_devolucao:
operation_type: transactional
require_confirmation: true
requires: [order_id, reason]
execution:
mode: workflow
workflow: devolucao_pedido
version: active
# Exemplo para uma operação real que só pode executar após confirmação:
# cancelar_servico:

View File

@@ -0,0 +1 @@
version: 1

View File

@@ -0,0 +1,27 @@
name: devolucao_pedido
version: 1
start: validar_pedido
nodes:
- id: validar_pedido
action: validar_pedido
input:
order_id: $.input.order_id
- id: registrar_devolucao
action: registrar_devolucao
retry: 1
input:
order_id: $.input.order_id
reason: $.input.reason
edges:
- from: validar_pedido
to: registrar_devolucao
when:
path: $.nodes.validar_pedido.valid
equals: true
- from: validar_pedido
to: END
when:
path: $.nodes.validar_pedido.valid
equals: false
- from: registrar_devolucao
to: END