@wondai/n8n-nodes-nucleo 0.6.2 → 0.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -26,7 +26,7 @@ parede. Isso mantém o segredo fora do workflow, a lógica num lugar só e o tok
26
26
  | Pedido | Alterar | `PATCH /api/v1/agent/pedido/:id` | `pedido:escrever` |
27
27
  | Pedido | Cancelar | `POST /api/v1/agent/pedido/:id/cancelar` | `pedido:escrever` |
28
28
  | Conversa | Preparar | `POST /api/v1/agent/conversa/preparar` | `contexto:ler` |
29
- | Contexto | Consultar Data | `POST /api/v1/agent/contexto/consultar` | `contexto:ler` |
29
+ | Contexto | Consultar por Escopo | `POST /api/v1/agent/contexto/consultar` | `contexto:ler` |
30
30
  | Conversa | Registrar | `POST /api/v1/agent/conversa/fechar` | `conversa:escrever` |
31
31
 
32
32
  **Resolver Produtos** é a operação inteligente: manda várias consultas numa chamada (máx 10),
@@ -75,6 +75,16 @@ telefone/endereço (allowlist) e distância opcional. **Disponibilidade NÃO é
75
75
  declarou e oferece o contato para o cliente confirmar. Este endpoint **não** entra no contexto fixo do
76
76
  gate; é chamado sob demanda. Tenant/unidade vêm do token — nunca do prompt.
77
77
 
78
+ **Contexto -> Consultar por Escopo** deve ser usado como **AI Tool** dentro do agente, sob demanda.
79
+ Passe `escopos` para buscar apenas o necessario:
80
+
81
+ - `hours` exige `data` (`YYYY-MM-DD`) e devolve horario/status da data, sem despejar semana inteira.
82
+ - `identity`, `delivery`, `payment` e `commercial_rules` devolvem somente o recorte pedido.
83
+ - `menus` e `promotions` continuam opcionais e so entram quando a pergunta pedir cardapio/promocao.
84
+
85
+ Chamadas antigas com apenas `data` seguem funcionando como `escopos=["hours"]`, mas o workflow novo nao
86
+ deve injetar horario/endereco/entrega/pagamento/regras comerciais em todo prompt.
87
+
78
88
  ## Gate da IA — Preparar como PRIMEIRO passo (ADR-021, Plano 004)
79
89
 
80
90
  **Conversa → Preparar** é o **gate determinístico** da IA. Use-o como **node normal** no primeiro
@@ -86,7 +96,8 @@ A resposta vem sempre em **HTTP 200** e o node a entrega **intacta** (não vira
86
96
  - `{ "allowed": false, "state": "disabled", "reason": "tenant_disabled" | "unit_disabled" | "configuration_error" | "unavailable" }`
87
97
  → **PARE o fluxo sem responder** ao cliente (a empresa/unidade desligou a IA; falha de consulta também para).
88
98
  - `{ "allowed": true, "state": "enabled", "runtime_version": N, "session_id": "...", "primeiro_contato": true, "contexto": { ... } }`
89
- → **siga** para memória/router/LLM. O `contexto` traz horário/status/flags/regras (Plano 003).
99
+ → **siga** para memória/router/LLM. O `contexto` inicial e compacto; detalhes de horario,
100
+ endereco, entrega, pagamento, regras comerciais, cardapio e promocoes devem vir da tool Contexto sob demanda.
90
101
 
91
102
  O Núcleo é a fonte da verdade do liga/desliga; o estado `active` do workflow no n8n **não** é usado
92
103
  como controle por padaria. Quem desliga é o dono/gerente em `/configuracoes` (ou o super-admin).
@@ -303,8 +303,8 @@ class Nucleo {
303
303
  {
304
304
  name: "Consultar Data",
305
305
  value: "consultar",
306
- action: "Consultar contexto de uma data",
307
- description: "Horário/exceção/regra vigente para UMA data (ex.: 'abrem no feriado?')",
306
+ action: "Consultar contexto por escopo",
307
+ description: "Busca somente os escopos necessarios (horario, identidade, entrega, pagamento, regras comerciais, cardapios ou promocoes). Use como AI Tool sob demanda, nao como contexto fixo do prompt.",
308
308
  },
309
309
  ],
310
310
  default: "consultar",
@@ -878,9 +878,52 @@ class Nucleo {
878
878
  name: "data",
879
879
  type: "string",
880
880
  default: "",
881
- required: true,
881
+ required: false,
882
882
  placeholder: "2026-12-25",
883
- description: "UMA data no formato YYYY-MM-DD (janela ±366 dias). Devolve horário/exceção/regra vigente para a data.",
883
+ description: "Obrigatoria apenas quando o escopo incluir Horarios. Use YYYY-MM-DD (janela ±366 dias).",
884
+ displayOptions: { show: { resource: ["contexto"], operation: ["consultar"] } },
885
+ },
886
+ {
887
+ displayName: "Escopos",
888
+ name: "contextoEscopos",
889
+ type: "multiOptions",
890
+ default: ["hours"],
891
+ description: "Recortes de contexto que a IA precisa para a pergunta atual.",
892
+ options: [
893
+ { name: "Identidade/Endereco", value: "identity" },
894
+ { name: "Operacao", value: "operation" },
895
+ { name: "Horarios", value: "hours" },
896
+ { name: "Entrega", value: "delivery" },
897
+ { name: "Pagamento", value: "payment" },
898
+ { name: "Regras Comerciais", value: "commercial_rules" },
899
+ { name: "Cardapios", value: "menus" },
900
+ { name: "Promocoes", value: "promotions" },
901
+ ],
902
+ displayOptions: { show: { resource: ["contexto"], operation: ["consultar"] } },
903
+ },
904
+ {
905
+ displayName: "Cidade",
906
+ name: "contextoCidade",
907
+ type: "string",
908
+ default: "",
909
+ description: "Opcional para validar se a cidade/bairro esta em area de entrega.",
910
+ displayOptions: { show: { resource: ["contexto"], operation: ["consultar"] } },
911
+ },
912
+ {
913
+ displayName: "Assuntos",
914
+ name: "contextoAssuntos",
915
+ type: "string",
916
+ default: "",
917
+ placeholder: "frete, pagamento",
918
+ description: "Opcional; texto livre separado por linhas ou virgulas para telemetria/contexto da pergunta.",
919
+ displayOptions: { show: { resource: ["contexto"], operation: ["consultar"] } },
920
+ },
921
+ {
922
+ displayName: "Unidade ID",
923
+ name: "contextoUnitId",
924
+ type: "string",
925
+ default: "",
926
+ description: "Opcional e somente compatibilidade: o servidor valida contra o vinculo do token.",
884
927
  displayOptions: { show: { resource: ["contexto"], operation: ["consultar"] } },
885
928
  },
886
929
  // ----------------------------------------------------------------- telemetria:enviar
@@ -1402,9 +1445,24 @@ class Nucleo {
1402
1445
  }
1403
1446
  else if (resource === "contexto" && operation === "consultar") {
1404
1447
  const data = this.getNodeParameter("data", i).trim();
1448
+ const escopos = this.getNodeParameter("contextoEscopos", i, ["hours"]);
1449
+ const cidade = this.getNodeParameter("contextoCidade", i, "").trim();
1450
+ const assuntos = parseIds(this.getNodeParameter("contextoAssuntos", i, ""));
1451
+ const unitId = this.getNodeParameter("contextoUnitId", i, "").trim();
1452
+ const b = {};
1453
+ if (data)
1454
+ b.data = data;
1455
+ if (Array.isArray(escopos) && escopos.length > 0)
1456
+ b.escopos = escopos;
1457
+ if (cidade)
1458
+ b.cidade = cidade;
1459
+ if (assuntos.length > 0)
1460
+ b.assuntos = assuntos;
1461
+ if (unitId)
1462
+ b.unit_id = unitId;
1405
1463
  method = "POST";
1406
1464
  path = "/api/v1/agent/contexto/consultar";
1407
- bodyObj = { data };
1465
+ bodyObj = b;
1408
1466
  }
1409
1467
  else if (resource === "telemetria" && operation === "enviar") {
1410
1468
  const eventKey = this.getNodeParameter("telEventKey", i).trim();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wondai/n8n-nodes-nucleo",
3
- "version": "0.6.2",
3
+ "version": "0.6.3",
4
4
  "description": "Node n8n para o Núcleo Wondai — atendimento de IA multi-vertical (gate liga/desliga, cliente/paciente, catálogo fuzzy, pedidos [padaria], procedimento/agenda/agendamento [odonto], contexto operacional, telemetria) com assinatura HMAC v1. Tenant e vertical vêm do token (a parede, ADR-013/038).",
5
5
  "keywords": [
6
6
  "n8n-community-node-package",