agents-lab

Local-first lab for reusable AI-agent primitives and the curated pi-stack.

View on GitHub

Primitiva: Conversation Event Canonical Schema

Contrato canônico para ingestão de conversas/threads de múltiplas plataformas (pi local, Telegram, WhatsApp, Matrix, Signal, etc.) sem acoplar a triagem a um provider específico.

Objetivo

Entidade canônica (v1)

{
  "schemaVersion": "1.0",
  "source": {
    "provider": "pi|telegram|whatsapp|matrix|signal|custom",
    "account": "optional-account-id",
    "providerAccountKey": "provider[/account]",
    "workspace": "optional-workspace-id",
    "channelId": "optional-channel-id",
    "threadId": "thread-123",
    "branchId": "optional-branch-id"
  },
  "event": {
    "id": "evt-uuid-or-stable-id",
    "type": "message|summary|status|tool_call|tool_result|signal",
    "timestampIso": "2026-04-15T12:34:56.000Z",
    "role": "user|assistant|tool|system|agent|operator|bot",
    "text": "conteúdo textual normalizado",
    "labels": ["optional", "tags"],
    "refs": {
      "taskIds": ["TASK-BUD-020"],
      "issueIds": ["#123"],
      "runIds": ["c1|colony-..."]
    }
  },
  "meta": {
    "authorId": "optional-author",
    "messageId": "provider-message-id",
    "rawType": "provider-original-type",
    "ingestedAtIso": "2026-04-15T12:35:10.000Z"
  }
}

Campos obrigatórios mínimos

Regras de normalização

  1. timestampIso em UTC (.toISOString()).
  2. event.text deve ser texto plano (sem binário/HTML bruto).
  3. event.role mapeado para vocabulário canônico.
  4. IDs externos devem ficar em meta (não substituir event.id).
  5. Resumos compactados de branch/sessão devem usar event.type = "summary".
  6. source.providerAccountKey é canônico em formato provider[/account]:
    • com identidade de conta disponível: provider/account;
    • sem identidade de conta: fallback compatível provider.

Mapeamento rápido por plataforma

Governança

Status de adoção