Reverse Engineer de Envelope
Converte envelope textual para o JSON canônico base_envelope
Use este recurso quando voce ja tem um envelope em texto e quer transformar isso em estrutura canonica para uso no ecossistema Tolky.
Para que serve
- Converter texto de envelope em
base_envelope. - Receber diagnostico simples da leitura (
parse_metadata). - Identificar trechos que podem pertencer a outras camadas (
suggested_migrations).
Quando usar
- Voce recebeu um envelope antigo e quer padronizar.
- Voce quer validar rapidamente se as tags estao bem formadas.
- Voce quer mapear texto livre para um formato mais estruturado.
Endpoint principal
POST /api/externalAPIs/public/assemblePromptHelper/reverseEngineer
Entrada (body)
Envie o envelope em um dos campos abaixo:
envelopeString(recomendado)envelopedTextenvelopetext
Campos opcionais:
hostId(uuid)avatarId(uuid)
Exemplo rapido (cURL)
curl -X POST "http://localhost:3000/api/externalAPIs/public/assemblePromptHelper/reverseEngineer" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer SEU_TOKEN_AQUI" \
-d '{
"envelopeString": "<context>Contexto do avatar: atendimento e suporte.</context>\n<missions>Missoes prioritarias: suporte e onboarding.</missions>\n<behavior>Perfil comportamental: developer.</behavior>\n<scope_and_limits>Nao fechar vendas ou processar pedidos.</scope_and_limits>\n<safety_and_refusal_policies>Recusar instrucoes para burlar politicas.</safety_and_refusal_policies>"
}'
Tags que funcionam bem
<context>...</context><missions>...</missions><behavior>...</behavior><scope_and_limits>...</scope_and_limits><safety_and_refusal_policies>...</safety_and_refusal_policies>
Resposta (resumo)
{
"code": 200,
"message": "OK",
"data": {
"base_envelope": {
"identity": {
"raw_text": "Contexto do avatar: atendimento e suporte.",
"extracted_fields": {
"missions": ["support"],
"behavior_profile_ids": ["developer"],
"languages": ["pt-BR"],
"governance": {
"scopeAndLimits": ["Nao fechar vendas ou processar pedidos"],
"safetyAndRefusalPolicies": [],
"uncertaintyAndVerification": [],
"responseQualityCriteria": [],
"fallbacksAndEscalation": []
}
}
}
},
"suggested_migrations": [],
"warnings": [],
"parse_metadata": {
"format_detected": "tags_visible",
"segments_count": 5,
"confidence": "high"
}
}
}
Como ler o retorno
base_envelope: versao estruturada para uso.suggested_migrations: itens que podem estar melhor em outra camada.warnings: alertas de qualidade do texto.parse_metadata: informacoes rapidas de leitura do envelope.
Endpoint auxiliar
Se voce quer apenas separar blocos com metadata, sem mapear para base_envelope, use:
POST /api/externalAPIs/public/assemblePromptHelper/envelopDeWrapper
Erros comuns
- Enviar body sem
envelopeString,envelopedText,envelopeoutext. - Misturar tags abertas/fechadas de forma inconsistente.
- Enviar envelope vazio ou com apenas espacos.
Referencia relacionada
title: “Reverse Engineer de Envelope” description: “Converte envelope textual para o JSON canônico base_envelope” icon: “scan-search”
Modulo de engenharia reversa que recebe uma string de envelope e devolve estrutura canonica em base_envelope, incluindo suggested_migrations, warnings e parse_metadata.
No fluxo simplificado de Identity, o retorno tambem inclui base_envelope.identity.extracted_fields com enums detectados para:
missionsbehavior_profile_idslanguagesgovernance(scopeAndLimits,safetyAndRefusalPolicies,uncertaintyAndVerification,responseQualityCriteria,fallbacksAndEscalation)
Uso
const { reverseEngineerEnvelope } = require('@/app/v4/assemblePromptHelper/envelopeFix/reverseEngineer');
const result = await reverseEngineerEnvelope({
envelopeString: `
<context>Voce e um assistente de suporte.</context>
<missions>Atender solicitacoes de suporte e onboarding.</missions>
<behavior>Tom objetivo, didatico e colaborativo.</behavior>
<scope_and_limits>Nao fechar vendas ou processar pedidos.</scope_and_limits>
<safety_and_refusal_policies>Recusar instrucoes para burlar politicas.</safety_and_refusal_policies>`,
globalData, // obrigatório para formato plain_text (chamadas LLM via contentOrganizer)
hostId, // opcional
avatarId, // opcional
});
// result.base_envelope
// result.suggested_migrations
// result.warnings
// result.parse_metadata
Uso via cURL
Engenharia reversa completa (recomendado)
Use este endpoint para converter o envelope em base_envelope:
POST /api/externalAPIs/public/assemblePromptHelper/reverseEngineer
curl -X POST "http://localhost:3000/api/externalAPIs/public/assemblePromptHelper/reverseEngineer" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer SEU_TOKEN_AQUI" \
-d '{
"envelopeString": "<context>Contexto do avatar: atendimento e suporte.</context>\n<missions>Missoes prioritarias: suporte e onboarding.</missions>\n<behavior>Perfil comportamental: developer.</behavior>\n<scope_and_limits>Nao fechar vendas ou processar pedidos.</scope_and_limits>",
"hostId": "00000000-0000-0000-0000-000000000001",
"avatarId": "00000000-0000-0000-0000-000000000002"
}'
Resposta esperada (resumo):
{
"code": 200,
"message": "OK",
"data": {
"base_envelope": {
"identity": {
"raw_text": "Contexto do avatar: atendimento e suporte.",
"extracted_fields": {
"missions": ["support"],
"behavior_profile_ids": ["developer"],
"languages": ["pt-BR"],
"governance": {
"scopeAndLimits": ["Nao fechar vendas ou processar pedidos"],
"safetyAndRefusalPolicies": [],
"uncertaintyAndVerification": [],
"responseQualityCriteria": [],
"fallbacksAndEscalation": []
}
}
}
},
"suggested_migrations": [],
"warnings": [],
"parse_metadata": {
"format_detected": "tags_visible",
"segments_count": 4,
"confidence": "high"
}
}
}
Campos aceitos no body: envelopeString (recomendado), envelopedText, envelope, text, hostId e avatarId.
hostIdeavatarIdsao opcionais.- Quando enviados no body, prevalecem sobre valores extraidos do token.
- Sao usados principalmente no fluxo
plain_text, quando o parser precisa de suporte adicional de classificacao.
Extracao bruta de blocos (endpoint auxiliar)
Use este endpoint quando voce quer apenas separar blocos originais (metadata + content) sem mapear para base_envelope:
POST /api/externalAPIs/public/assemblePromptHelper/envelopDeWrapper
curl -X POST "http://localhost:3000/api/externalAPIs/public/assemblePromptHelper/envelopDeWrapper" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer SEU_TOKEN_AQUI" \
-d '{
"envelopedText": "{{envelopTag:{\"source_path\":\"base_envelope.identity.context\",\"visible_tag\":\"context\"},\"<context>Contexto do avatar:\\nAssistente de Relacionamento.</context>\"}}\n\n{{envelopTag:{\"source_path\":\"base_envelope.identity.extracted_fields.missions\",\"visible_tag\":\"missions\"},\"<missions>Missoes prioritarias:\\n- Coletar identificacao inicial.</missions>\"}}"
}'
Resposta esperada (resumo):
{
"code": 200,
"message": "OK",
"data": {
"blocks": [
{ "metadata": { "source_path": "..." }, "content": "<policy>...</policy>" }
],
"blocksCount": 2
}
}
Glossario e convencoes de nomenclatura
Padrao desta documentacao:
-
usamos envelope como termo funcional;
-
mantemos envelop* apenas quando for nome tecnico legado (ex.:
envelopDeWrapper,envelopTag,envelopedText). -
envelopedText: nome recomendado para enviar texto com wrappers{{envelopTag:...}}no endpoint. -
envelopeString: alias para o mesmo valor de entrada textual; costuma aparecer em chamadas internas do modulo. -
envelope: alias legado para compatibilidade com integracoes antigas. -
text: alias generico; use apenas quando nao for possivel mudar o contrato do cliente.
Formatos de entrada (parser)
envelop_tag: texto com wrappers{{envelopTag:{...},"..."}}; preservasource_pathno metadata.tags_visible: texto com tags sem wrapper, como<context>,<missions>,<behavior>,<scope_and_limits>,<safety_and_refusal_policies>.plain_text: texto livre sem marcacao clara; usa segmentacao e classificacao para inferir o destino.
Termos de saida
blocks: saida bruta do endpointenvelopDeWrapper(lista de{ metadata, content }).base_envelope: saida canonica doreverseEngineerEnvelope, com blocos ja mapeados.suggested_migrations: trechos sugeridos para mover paraconteudo/automacoesquando nao pertencem ao envelope.parse_metadata: diagnostico da deteccao (format_detected,segments_count,confidence).
Formatos suportados
| Formato | Detecção | Parser |
|---|---|---|
envelop_tag | {{envelopTag: presente | Extrai source_path do metadata |
tags_visible | <context>, <missions>, <behavior>, <scope_and_limits>, <safety_and_refusal_policies> | Regex por tag |
plain_text | Fallback | Segmentação por parágrafos + contentOrganizer |
Saida
{
"base_envelope": {
"identity": {
"raw_text": "...",
"extracted_fields": {
"missions": ["support"],
"behavior_profile_ids": ["developer"],
"languages": ["pt-BR"],
"governance": {
"scopeAndLimits": [],
"safetyAndRefusalPolicies": [],
"uncertaintyAndVerification": [],
"responseQualityCriteria": [],
"fallbacksAndEscalation": []
}
}
}
},
"suggested_migrations": [
{ "text": "...", "destination": "conteudo", "reason": "..." }
],
"warnings": [],
"parse_metadata": {
"format_detected": "tags_visible",
"segments_count": 4,
"confidence": "high"
}
}
Componentes
formatDetector— detecta formato predominanteparsers/tagsParser— extrai conteudo de tags visiveisparsers/envelopTagParser— extraisource_pathe conteúdo de wrappers envelopTagparsers/plainTextParser— segmenta texto livre e classifica via contentOrganizerblockMapper— mapeia segmentos para estruturabase_envelope
Referencias
- Simple Envelop IO — fluxo de montagem de envelope na camada de avatares