@genne/genne-cli 0.1.36 → 0.1.41

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@genne/genne-cli",
3
- "version": "0.1.36",
3
+ "version": "0.1.41",
4
4
  "description": "CLI de produto Genne",
5
5
  "type": "module",
6
6
  "bin": {
@@ -34,7 +34,9 @@ Não peça acesso ao repositório ou credenciais no chat.
34
34
 
35
35
  ## Descoberta e execução
36
36
 
37
- Na CLI, use `genne help CAMINHO` ou `genne CAMINHO --help` para consultar
37
+ Na CLI, `genne` sem argumentos e `genne --help` mostram um guia curto de
38
+ comandos, sem autenticação. `genne help` mantém o catálogo completo em JSON.
39
+ Use `genne help CAMINHO` ou `genne CAMINHO --help` para consultar
38
40
  sintaxe, parâmetros, papel elegível, entrada JSON e confirmação. O help funciona
39
41
  sem sessão. Envie o JSON por stdin conforme indicado; nunca passe senhas,
40
42
  códigos ou tokens nos argumentos nem imprima credenciais nas respostas.
@@ -65,3 +67,23 @@ IDs, estados e cursores realmente retornados. Preserve os filtros ao usar
65
67
 
66
68
  Exiba somente os dados necessários ao pedido. Autenticação, abertura do
67
69
  plugin e sucesso de uma operação são verificações distintas.
70
+
71
+ ## WhatsApp para agentes
72
+
73
+ `genne admin whatsapp messages list|get|events|listen` e `send` usam os
74
+ endpoints do Core para a conta WhatsApp configurada. O papel ativo precisa ser
75
+ `admin`; identidades `driver`, `carrier` e `shipper` são recusadas pelo Core e
76
+ pela CLI antes da chamada. `listen` faz polling do feed durável e imprime uma
77
+ linha JSON por evento com o cursor individual retornado para aquele evento;
78
+ salve esse cursor e passe-o na retomada. O `meta.next_cursor` só é adotado
79
+ depois que todo o batch foi emitido. Timeout de rede pode ser repetido, mas um
80
+ `403` não é transitório.
81
+
82
+ `send` aceita somente texto e exige `to`, `text`, `idempotency_key` e
83
+ opcionalmente `reply_to` (ID Meta da mensagem inbound) em JSON por stdin. `to`
84
+ pode ser E.164 com `+` ou somente dígitos. Use confirmação no terminal ou a
85
+ forma explícita `--non-interactive` para agentes. Reutilize a mesma chave em um
86
+ timeout ambíguo e não faça resend com chave nova até consultar o resultado.
87
+ Respostas `202` ou `queued` significam processamento aceito, não entrega.
88
+ O MCP local publica somente as leituras de lista, detalhe e eventos; não expõe
89
+ envio.
package/src/api.js CHANGED
@@ -1 +1 @@
1
- var A=Object.defineProperty;var d=(e,o)=>A(e,"name",{value:o,configurable:!0});import{accessToken as b,clearSession as P,selectedOrigin as O}from"./session.js";import{currentRequestSignal as j}from"./request-scope.js";const w={401:"Sess\xE3o inv\xE1lida ou expirada",403:"Acesso negado",404:"Recurso n\xE3o encontrado",409:"Conflito no contexto da conta",422:"Dados inv\xE1lidos"},E={invalid_cpf:"CPF inv\xE1lido",invalid_input:"Dados do convite inv\xE1lidos",rate_limited:"Limite de convites atingido; tente novamente mais tarde",idempotency_conflict:"A chave de idempot\xEAncia j\xE1 foi usada com outra entrada",invitation_conflict:"O convite j\xE1 foi encerrado ou recebeu outra resposta",driver_already_linked:"Motorista j\xE1 vinculado \xE0 transportadora",invitation_recipient_unavailable:"Destinat\xE1rio indispon\xEDvel para convite",driver_carrier_link_blocked:"V\xEDnculo bloqueado pela transportadora",invitation_already_pending:"J\xE1 existe convite pendente",invitation_cooldown:"Aguarde o intervalo para enviar novo convite",carrier_unavailable:"Transportadora indispon\xEDvel"},F=new Set(["unsupported_file_type","invalid_file","empty_file","invalid_headers","invalid_pdf","pdf_encrypted","pdf_page_limit_exceeded","file_too_large","pdf_text_extraction_unavailable","pdf_text_extraction_failed","pdf_no_text","pdf_table_not_found","pdf_table_invalid","pdf_layout_invalid","pdf_layout_inference_unavailable","pdf_layout_inference_failed","pdf_visual_extraction_unavailable","pdf_visual_extraction_failed"]),I={unsupported_file_type:{stage:"reading",message:"N\xE3o conseguimos processar esse formato de arquivo. Envie uma planilha XLSX, XLS ou CSV, ou um PDF com as entregas."},empty_file:{stage:"reading",message:"N\xE3o conseguimos processar o arquivo porque a planilha est\xE1 vazia. Confira se selecionou o arquivo de entregas correto."},invalid_headers:{stage:"interpretation",message:"N\xE3o conseguimos processar a planilha porque n\xE3o identificamos quais colunas cont\xEAm os pedidos, endere\xE7os e volumes. Fale com o suporte para ajudar na importa\xE7\xE3o."},invalid_pdf:{stage:"reading",message:"N\xE3o conseguimos abrir o PDF recebido. Tente enviar o arquivo novamente. Se continuar, fale com o suporte."},pdf_encrypted:{stage:"reading",message:"N\xE3o conseguimos ler o PDF porque ele est\xE1 protegido por senha. Pe\xE7a a quem enviou o arquivo uma c\xF3pia sem senha."},pdf_page_limit_exceeded:{stage:"reading",message:"N\xE3o conseguimos processar o PDF porque ele excede o limite de p\xE1ginas por importa\xE7\xE3o. Pe\xE7a ajuda ao suporte para importar esse arquivo."},file_too_large:{stage:"reading",message:"N\xE3o conseguimos processar o arquivo porque ele excede o limite por importa\xE7\xE3o. Pe\xE7a ajuda ao suporte para importar esse arquivo."},pdf_text_extraction_unavailable:{stage:"reading",message:"N\xE3o conseguimos ler o conte\xFAdo do PDF neste momento. Tente novamente em alguns minutos."},pdf_text_extraction_failed:{stage:"reading",message:"N\xE3o conseguimos processar o PDF porque n\xE3o foi poss\xEDvel ler os dados das entregas. Fale com o suporte para ajudar na importa\xE7\xE3o."},invalid_csv:{stage:"reading",message:"N\xE3o conseguimos ler o arquivo CSV porque alguns campos de texto n\xE3o terminam como esperado. Tente enviar o arquivo novamente. Se continuar, fale com o suporte."},invalid_encoding:{stage:"reading",message:"N\xE3o conseguimos processar o arquivo porque n\xE3o reconhecemos alguns caracteres do texto. Fale com o suporte para ajudar na importa\xE7\xE3o."},unreadable_file:{stage:"reading",message:"N\xE3o conseguimos abrir o arquivo recebido. Tente enviar o arquivo novamente. Se continuar, fale com o suporte."},unreadable_content:{stage:"interpretation",message:"N\xE3o conseguimos processar o arquivo porque o conte\xFAdo n\xE3o ficou leg\xEDvel na leitura. Tente enviar o arquivo novamente. Se continuar, fale com o suporte."},no_delivery_table:{stage:"interpretation",message:"N\xE3o conseguimos processar o arquivo porque n\xE3o encontramos uma lista de entregas no conte\xFAdo lido. Confira se selecionou o arquivo certo. Se estiver correto, fale com o suporte."},missing_addresses:{stage:"interpretation",message:"N\xE3o conseguimos processar o arquivo porque n\xE3o identificamos os endere\xE7os das entregas. Fale com o suporte para ajudar na importa\xE7\xE3o."},missing_order_identifiers:{stage:"interpretation",message:"N\xE3o conseguimos processar o arquivo porque n\xE3o identificamos os c\xF3digos dos pedidos ou de rastreio. Fale com o suporte para ajudar na importa\xE7\xE3o."},ambiguous_columns:{stage:"interpretation",message:"N\xE3o conseguimos processar o arquivo porque mais de uma coluna pode conter os mesmos dados de entrega e n\xE3o foi poss\xEDvel distinguir qual usar. Fale com o suporte para ajudar na importa\xE7\xE3o."},analysis_timeout:{stage:"interpretation",message:"N\xE3o conseguimos concluir a leitura do arquivo porque a an\xE1lise demorou mais que o esperado. Tente novamente em instantes."},analysis_rate_limited:{stage:"interpretation",message:"N\xE3o conseguimos analisar o arquivo agora porque o servi\xE7o de leitura est\xE1 ocupado. Tente novamente em instantes."},analysis_unavailable:{stage:"interpretation",message:"N\xE3o conseguimos analisar o arquivo agora porque o servi\xE7o de leitura est\xE1 indispon\xEDvel. Tente novamente em instantes."},invalid_ai_response:{stage:"interpretation",message:"Tentamos analisar o arquivo, mas n\xE3o conseguimos interpretar as entregas com seguran\xE7a. Tente novamente. Se continuar, fale com o suporte."}};function C(e,o){if(!e||typeof e!="object"||Array.isArray(e))return null;const{error:i,reason:s,stage:n}=e;if(typeof i!="string"||typeof s!="string"||typeof n!="string"||typeof e.message!="string"||!F.has(i))return null;const u=I[s];if(!u||u.stage!==n)return null;const p=new q(i,u.message,o);return p.data={reason:s,stage:n},p}d(C,"routeImportError");class q extends Error{static{d(this,"CliError")}constructor(o,i,s){super(i),this.code=o,this.status=s}}function r(e,o,i){throw new q(e,o,i)}d(r,"fail");function L(e){return/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e??"")||r("USAGE","ID deve ser um UUID"),e}d(L,"uuid");function R(e){e||r("CONFIG","Defina GENNE_API_URL");let o;try{o=new URL(e)}catch{r("CONFIG","GENNE_API_URL deve ser uma origem HTTP ou HTTPS")}return(!["http:","https:"].includes(o.protocol)||o.username||o.password||o.pathname!=="/"||o.search||o.hash)&&r("CONFIG","GENNE_API_URL deve ser uma origem HTTP ou HTTPS"),o.protocol!=="https:"&&!["localhost","127.0.0.1","[::1]"].includes(o.hostname)&&r("CONFIG","A API exige HTTPS fora da m\xE1quina local"),o.origin}d(R,"apiOrigin");function k(e,{allowAnonymous:o=!1}={}){const i=R(O(e));return async(s,n,u,{idempotencyKey:p,deletionIntent:N,clientPlatform:y,ifMatch:S,withStatus:h,invitationErrorProjection:T}={})=>{(!n.startsWith("/")||n.startsWith("//"))&&r("USAGE","Caminho de API inv\xE1lido");const g=s==="PUT"&&n==="/auth/me/driver-access",f=g||s==="PUT"&&/^\/admin\/users\/[0-9a-f-]+\/driver-access$/i.test(n),x=g?"N\xE3o foi poss\xEDvel confirmar a habilita\xE7\xE3o; fa\xE7a genne login e consulte genne user me antes de repetir.":"N\xE3o foi poss\xEDvel confirmar a habilita\xE7\xE3o; confira os pap\xE9is do usu\xE1rio alvo antes de repetir. O titular pode precisar de novo login.",v=o?null:await b(e,i),_=u instanceof FormData;let a;try{a=await fetch(`${i}/api/v1${n}`,{method:s,redirect:"error",headers:{accept:"application/json",...v?{authorization:`Bearer ${v}`}:{},...p?{"idempotency-key":p}:{},...S?{"if-match":S}:{},...N?{"x-deletion-intent":N}:{},...y?{"x-client-platform":y}:{},...u===void 0||_?{}:{"content-type":"application/json"}},...u===void 0?{}:{body:_?u:JSON.stringify(u)},signal:AbortSignal.any([AbortSignal.timeout(_?6e4:15e3),j()].filter(Boolean))})}catch{f&&r("NETWORK",x),r("NETWORK","N\xE3o foi poss\xEDvel conectar \xE0 API")}if(!a.ok){if(f&&[409,422].includes(a.status)){let t;try{t=await a.json()}catch{}g&&a.status===422&&t?.error==="invalid_current_password"&&r("invalid_current_password","Senha atual incorreta",422),a.status===409&&t?.error==="unsupported_role_transition"&&r("unsupported_role_transition","Este usu\xE1rio n\xE3o pode habilitar motorista por esta opera\xE7\xE3o",409)}if(a.status===422&&s==="POST"&&n==="/routes/imports/preview"){let t;try{t=await a.json()}catch{}const m=C(t,a.status);if(m)throw m}const l=a.status===429&&s==="POST"&&n==="/carrier/driver-invitations";if(T&&([409,422].includes(a.status)||l)){let t;try{t=await a.json()}catch{}if(t&&typeof t.error=="string"&&Object.hasOwn(E,t.error)&&(t.error==="rate_limited"?l:!l)){const m=new q(t.error,E[t.error],a.status);throw a.status===409&&t.error==="invitation_conflict"&&t.data&&typeof t.data=="object"&&!Array.isArray(t.data)&&(m.data=T(t.data)),m}}r(`HTTP_${a.status}`,w[a.status]??"A API recusou a requisi\xE7\xE3o",a.status)}if(a.status===204)return!o&&!e.GENNE_ACCESS_TOKEN&&s==="POST"&&["/auth/logout","/auth/logout-all"].includes(n)&&await P(e,i),h?{http_status:a.status}:{};let c;try{const l=await a.text();if(!l)return{};c=JSON.parse(l)}catch{f&&r("RESPONSE",x),r("RESPONSE","Resposta inv\xE1lida da API")}return(!c||typeof c!="object"||Array.isArray(c))&&r("RESPONSE","Resposta inv\xE1lida da API"),g&&c.data?.status==="enabled"&&c.data.changed===!0&&c.data.reauthentication_required===!0&&!e.GENNE_ACCESS_TOKEN?.trim()&&await P(e,i,v),h?{...c,http_status:a.status}:c}}d(k,"createApi");export{q as CliError,R as apiOrigin,k as createApi,r as fail,L as uuid};
1
+ var x=Object.defineProperty;var d=(e,o)=>x(e,"name",{value:o,configurable:!0});import{accessToken as R,clearSession as O,selectedOrigin as C}from"./session.js";import{currentRequestSignal as D}from"./request-scope.js";const I={401:"Sess\xE3o inv\xE1lida ou expirada",403:"Acesso negado",404:"Recurso n\xE3o encontrado",409:"Conflito no contexto da conta",422:"Dados inv\xE1lidos"},b={invalid_cpf:"CPF inv\xE1lido",invalid_input:"Dados do convite inv\xE1lidos",rate_limited:"Limite de convites atingido; tente novamente mais tarde",idempotency_conflict:"A chave de idempot\xEAncia j\xE1 foi usada com outra entrada",invitation_conflict:"O convite j\xE1 foi encerrado ou recebeu outra resposta",driver_already_linked:"Motorista j\xE1 vinculado \xE0 transportadora",invitation_recipient_unavailable:"Destinat\xE1rio indispon\xEDvel para convite",driver_carrier_link_blocked:"V\xEDnculo bloqueado pela transportadora",invitation_already_pending:"J\xE1 existe convite pendente",invitation_cooldown:"Aguarde o intervalo para enviar novo convite",carrier_unavailable:"Transportadora indispon\xEDvel"},w=new Set(["unsupported_file_type","invalid_file","empty_file","invalid_headers","invalid_pdf","pdf_encrypted","pdf_page_limit_exceeded","file_too_large","pdf_text_extraction_unavailable","pdf_text_extraction_failed","pdf_no_text","pdf_table_not_found","pdf_table_invalid","pdf_layout_invalid","pdf_layout_inference_unavailable","pdf_layout_inference_failed","pdf_visual_extraction_unavailable","pdf_visual_extraction_failed"]),j={unsupported_file_type:{stage:"reading",message:"N\xE3o conseguimos processar esse formato de arquivo. Envie uma planilha XLSX, XLS ou CSV, ou um PDF com as entregas."},empty_file:{stage:"reading",message:"N\xE3o conseguimos processar o arquivo porque a planilha est\xE1 vazia. Confira se selecionou o arquivo de entregas correto."},invalid_headers:{stage:"interpretation",message:"N\xE3o conseguimos processar a planilha porque n\xE3o identificamos quais colunas cont\xEAm os pedidos, endere\xE7os e volumes. Fale com o suporte para ajudar na importa\xE7\xE3o."},invalid_pdf:{stage:"reading",message:"N\xE3o conseguimos abrir o PDF recebido. Tente enviar o arquivo novamente. Se continuar, fale com o suporte."},pdf_encrypted:{stage:"reading",message:"N\xE3o conseguimos ler o PDF porque ele est\xE1 protegido por senha. Pe\xE7a a quem enviou o arquivo uma c\xF3pia sem senha."},pdf_page_limit_exceeded:{stage:"reading",message:"N\xE3o conseguimos processar o PDF porque ele excede o limite de p\xE1ginas por importa\xE7\xE3o. Pe\xE7a ajuda ao suporte para importar esse arquivo."},file_too_large:{stage:"reading",message:"N\xE3o conseguimos processar o arquivo porque ele excede o limite por importa\xE7\xE3o. Pe\xE7a ajuda ao suporte para importar esse arquivo."},pdf_text_extraction_unavailable:{stage:"reading",message:"N\xE3o conseguimos ler o conte\xFAdo do PDF neste momento. Tente novamente em alguns minutos."},pdf_text_extraction_failed:{stage:"reading",message:"N\xE3o conseguimos processar o PDF porque n\xE3o foi poss\xEDvel ler os dados das entregas. Fale com o suporte para ajudar na importa\xE7\xE3o."},invalid_csv:{stage:"reading",message:"N\xE3o conseguimos ler o arquivo CSV porque alguns campos de texto n\xE3o terminam como esperado. Tente enviar o arquivo novamente. Se continuar, fale com o suporte."},invalid_encoding:{stage:"reading",message:"N\xE3o conseguimos processar o arquivo porque n\xE3o reconhecemos alguns caracteres do texto. Fale com o suporte para ajudar na importa\xE7\xE3o."},unreadable_file:{stage:"reading",message:"N\xE3o conseguimos abrir o arquivo recebido. Tente enviar o arquivo novamente. Se continuar, fale com o suporte."},unreadable_content:{stage:"interpretation",message:"N\xE3o conseguimos processar o arquivo porque o conte\xFAdo n\xE3o ficou leg\xEDvel na leitura. Tente enviar o arquivo novamente. Se continuar, fale com o suporte."},no_delivery_table:{stage:"interpretation",message:"N\xE3o conseguimos processar o arquivo porque n\xE3o encontramos uma lista de entregas no conte\xFAdo lido. Confira se selecionou o arquivo certo. Se estiver correto, fale com o suporte."},missing_addresses:{stage:"interpretation",message:"N\xE3o conseguimos processar o arquivo porque n\xE3o identificamos os endere\xE7os das entregas. Fale com o suporte para ajudar na importa\xE7\xE3o."},missing_order_identifiers:{stage:"interpretation",message:"N\xE3o conseguimos processar o arquivo porque n\xE3o identificamos os c\xF3digos dos pedidos ou de rastreio. Fale com o suporte para ajudar na importa\xE7\xE3o."},ambiguous_columns:{stage:"interpretation",message:"N\xE3o conseguimos processar o arquivo porque mais de uma coluna pode conter os mesmos dados de entrega e n\xE3o foi poss\xEDvel distinguir qual usar. Fale com o suporte para ajudar na importa\xE7\xE3o."},analysis_timeout:{stage:"interpretation",message:"N\xE3o conseguimos concluir a leitura do arquivo porque a an\xE1lise demorou mais que o esperado. Tente novamente em instantes."},analysis_rate_limited:{stage:"interpretation",message:"N\xE3o conseguimos analisar o arquivo agora porque o servi\xE7o de leitura est\xE1 ocupado. Tente novamente em instantes."},analysis_unavailable:{stage:"interpretation",message:"N\xE3o conseguimos analisar o arquivo agora porque o servi\xE7o de leitura est\xE1 indispon\xEDvel. Tente novamente em instantes."},invalid_ai_response:{stage:"interpretation",message:"Tentamos analisar o arquivo, mas n\xE3o conseguimos interpretar as entregas com seguran\xE7a. Tente novamente. Se continuar, fale com o suporte."}},F=new Set(["ECONNRESET","ETIMEDOUT","EPIPE","UND_ERR_BODY_TIMEOUT","UND_ERR_HEADERS_TIMEOUT","UND_ERR_SOCKET"]);function U(e){if(e?.name==="AbortError"||e?.name==="TimeoutError")return!0;let o=e;for(let i=0;o&&i<3;i+=1){if(F.has(o.code))return!0;o=o.cause}return e?.name==="TypeError"&&e?.message==="terminated"}d(U,"isBodyTransportError");function L(e,o){if(!e||typeof e!="object"||Array.isArray(e))return null;const{error:i,reason:s,stage:n}=e;if(typeof i!="string"||typeof s!="string"||typeof n!="string"||typeof e.message!="string"||!w.has(i))return null;const u=j[s];if(!u||u.stage!==n)return null;const l=new T(i,u.message,o);return l.data={reason:s,stage:n},l}d(L,"routeImportError");class T extends Error{static{d(this,"CliError")}constructor(o,i,s){super(i),this.code=o,this.status=s}}function t(e,o,i){throw new T(e,o,i)}d(t,"fail");function W(e){return/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e??"")||t("USAGE","ID deve ser um UUID"),e}d(W,"uuid");function G(e){e||t("CONFIG","Defina GENNE_API_URL");let o;try{o=new URL(e)}catch{t("CONFIG","GENNE_API_URL deve ser uma origem HTTP ou HTTPS")}return(!["http:","https:"].includes(o.protocol)||o.username||o.password||o.pathname!=="/"||o.search||o.hash)&&t("CONFIG","GENNE_API_URL deve ser uma origem HTTP ou HTTPS"),o.protocol!=="https:"&&!["localhost","127.0.0.1","[::1]"].includes(o.hostname)&&t("CONFIG","A API exige HTTPS fora da m\xE1quina local"),o.origin}d(G,"apiOrigin");function $(e,{allowAnonymous:o=!1}={}){const i=G(C(e));return async(s,n,u,{idempotencyKey:l,deletionIntent:S,clientPlatform:y,ifMatch:h,withStatus:P,invitationErrorProjection:A}={})=>{(!n.startsWith("/")||n.startsWith("//"))&&t("USAGE","Caminho de API inv\xE1lido");const f=s==="PUT"&&n==="/auth/me/driver-access",p=f||s==="PUT"&&/^\/admin\/users\/[0-9a-f-]+\/driver-access$/i.test(n),_=f?"N\xE3o foi poss\xEDvel confirmar a habilita\xE7\xE3o; fa\xE7a genne login e consulte genne user me antes de repetir.":"N\xE3o foi poss\xEDvel confirmar a habilita\xE7\xE3o; confira os pap\xE9is do usu\xE1rio alvo antes de repetir. O titular pode precisar de novo login.",v=o?null:await R(e,i),E=u instanceof FormData,N=D();let a;try{a=await fetch(`${i}/api/v1${n}`,{method:s,redirect:"error",headers:{accept:"application/json",...v?{authorization:`Bearer ${v}`}:{},...l?{"idempotency-key":l}:{},...h?{"if-match":h}:{},...S?{"x-deletion-intent":S}:{},...y?{"x-client-platform":y}:{},...u===void 0||E?{}:{"content-type":"application/json"}},...u===void 0?{}:{body:E?u:JSON.stringify(u)},signal:AbortSignal.any([AbortSignal.timeout(E?6e4:15e3),N].filter(Boolean))})}catch{N?.aborted&&t("CANCELLED","Requisi\xE7\xE3o cancelada"),p&&t("NETWORK",_),t("NETWORK","N\xE3o foi poss\xEDvel conectar \xE0 API")}if(!a.ok){if(p&&[409,422].includes(a.status)){let r;try{r=await a.json()}catch{}f&&a.status===422&&r?.error==="invalid_current_password"&&t("invalid_current_password","Senha atual incorreta",422),a.status===409&&r?.error==="unsupported_role_transition"&&t("unsupported_role_transition","Este usu\xE1rio n\xE3o pode habilitar motorista por esta opera\xE7\xE3o",409)}if(a.status===422&&s==="POST"&&n==="/routes/imports/preview"){let r;try{r=await a.json()}catch{}const g=L(r,a.status);if(g)throw g}const m=a.status===429&&s==="POST"&&n==="/carrier/driver-invitations";if(A&&([409,422].includes(a.status)||m)){let r;try{r=await a.json()}catch{}if(r&&typeof r.error=="string"&&Object.hasOwn(b,r.error)&&(r.error==="rate_limited"?m:!m)){const g=new T(r.error,b[r.error],a.status);throw a.status===409&&r.error==="invitation_conflict"&&r.data&&typeof r.data=="object"&&!Array.isArray(r.data)&&(g.data=A(r.data)),g}}t(`HTTP_${a.status}`,I[a.status]??"A API recusou a requisi\xE7\xE3o",a.status)}if(a.status===204)return!o&&!e.GENNE_ACCESS_TOKEN&&s==="POST"&&["/auth/logout","/auth/logout-all"].includes(n)&&await O(e,i),P?{http_status:a.status}:{};let c,q;try{q=await a.text()}catch(m){N?.aborted&&t("CANCELLED","Requisi\xE7\xE3o cancelada"),U(m)&&(p&&t("NETWORK",_),t("NETWORK","N\xE3o foi poss\xEDvel conectar \xE0 API")),p&&t("RESPONSE",_),t("RESPONSE","Resposta inv\xE1lida da API")}if(!q)return{};try{c=JSON.parse(q)}catch{p&&t("RESPONSE",_),t("RESPONSE","Resposta inv\xE1lida da API")}return(!c||typeof c!="object"||Array.isArray(c))&&t("RESPONSE","Resposta inv\xE1lida da API"),f&&c.data?.status==="enabled"&&c.data.changed===!0&&c.data.reauthentication_required===!0&&!e.GENNE_ACCESS_TOKEN?.trim()&&await O(e,i,v),P?{...c,http_status:a.status}:c}}d($,"createApi");export{T as CliError,G as apiOrigin,$ as createApi,t as fail,W as uuid};
package/src/cli.js CHANGED
@@ -1,7 +1,8 @@
1
1
  #!/usr/bin/env node
2
- var p=Object.defineProperty;var l=(e,t)=>p(e,"name",{value:t,configurable:!0});import{closeSync as g,openSync as h,readSync as y,writeSync as v}from"node:fs";import{CliError as N,fail as n}from"./api.js";import{deviceLogin as O,deviceLogout as b}from"./device-login.js";import{runOperation as w}from"./operations.js";import{environmentCommand as S}from"./session.js";import{globalCommand as C}from"./global.js";let a;async function I(){if(a!==void 0)return a;process.stdin.isTTY&&n("INPUT","Forne\xE7a JSON em stdin");let e="";for await(const t of process.stdin)e+=t,e.length>1e6&&n("INPUT","Entrada muito grande");try{a=JSON.parse(e)}catch{n("INPUT","JSON inv\xE1lido em stdin")}return(!a||typeof a!="object"||Array.isArray(a))&&n("INPUT","JSON em stdin deve ser um objeto"),a}l(I,"input");async function k(e,t){let i;try{i=h("/dev/tty","r")}catch{n("CONFIRM","Confirma\xE7\xE3o interativa necess\xE1ria")}try{v(2,`${e}
3
- Digite ${t} para confirmar: `);const r=[],o=Buffer.alloc(1024);let f=0,d="";for(;;){const u=y(i,o,0,o.length,null);u===0&&n("CONFIRM","Opera\xE7\xE3o cancelada");const s=o.subarray(0,u),c=s.indexOf(10),m=c===-1?s:s.subarray(0,c);if(f+=m.length,f>1e6&&n("CONFIRM","Confirma\xE7\xE3o muito longa"),r.push(Buffer.from(m)),c!==-1)break}return d=Buffer.concat(r).toString("utf8"),d.trim()!==t&&n("CONFIRM","Opera\xE7\xE3o cancelada"),!0}finally{g(i)}}l(k,"confirm");try{let e=process.argv.slice(2);const t=e[0]==="--non-interactive";if(t){e=e.slice(1);const r=e.length===5&&e[0]==="admin"&&e[1]==="blog"&&e[2]==="posts"&&e[3]==="create"&&e[4].startsWith("key="),o=e.length===5&&e[0]==="admin"&&e[1]==="feedbacks"&&["comment","status"].includes(e[2])&&e[4].startsWith("key=");!r&&!o&&n("USAGE","--non-interactive \xE9 aceito somente para Growth e Donna")}const i=e[0]==="global"&&e.at(-1)!=="--help"?(()=>{try{return C(e.slice(1))}catch(r){n("GLOBAL",r.message)}})():e[0]==="env"&&e.at(-1)!=="--help"?await S(process.env,e.slice(1)):e.length===1&&e[0]==="login"?await O(process.env,({verification_uri:r,user_code:o})=>{process.stderr.write(`Abra ${r}
4
- Digite o c\xF3digo ${o} e aprove o acesso.
5
- `)}):e.length===1&&e[0]==="logout"?await b(process.env):await w(e,{input:I,confirm:t?async()=>!0:k});process.stdout.write(`${JSON.stringify(i)}
2
+ var h=Object.defineProperty;var i=(e,t)=>h(e,"name",{value:t,configurable:!0});import{closeSync as g,openSync as y,readSync as w,writeSync as v}from"node:fs";import{CliError as N,fail as a}from"./api.js";import{deviceLogin as S,deviceLogout as b}from"./device-login.js";import{runOperation as I}from"./operations.js";import{environmentCommand as O}from"./session.js";import{globalCommand as C}from"./global.js";import{cliHelp as L}from"./help.js";import{runWithRequestSignal as T}from"./request-scope.js";let p;async function k(){if(p!==void 0)return p;process.stdin.isTTY&&a("INPUT","Forne\xE7a JSON em stdin");let e="";for await(const t of process.stdin)e+=t,e.length>1e6&&a("INPUT","Entrada muito grande");try{p=JSON.parse(e)}catch{a("INPUT","JSON inv\xE1lido em stdin")}return(!p||typeof p!="object"||Array.isArray(p))&&a("INPUT","JSON em stdin deve ser um objeto"),p}i(k,"input");async function A(e,t){let u;try{u=y("/dev/tty","r")}catch{a("CONFIRM","Confirma\xE7\xE3o interativa necess\xE1ria")}try{v(2,`${e}
3
+ Digite ${t} para confirmar: `);const n=[],o=Buffer.alloc(1024);let c=0,r="";for(;;){const l=w(u,o,0,o.length,null);l===0&&a("CONFIRM","Opera\xE7\xE3o cancelada");const f=o.subarray(0,l),s=f.indexOf(10),d=s===-1?f:f.subarray(0,s);if(c+=d.length,c>1e6&&a("CONFIRM","Confirma\xE7\xE3o muito longa"),n.push(Buffer.from(d)),s!==-1)break}return r=Buffer.concat(n).toString("utf8"),r.trim()!==t&&a("CONFIRM","Opera\xE7\xE3o cancelada"),!0}finally{g(u)}}i(A,"confirm");function m(e){return new Promise((t,u)=>{let n=!1;const o=i(()=>{process.stdout.removeListener("drain",l),process.stdout.removeListener("error",f)},"cleanup"),c=i(()=>{n||(n=!0,o(),t())},"finish"),r=i(s=>{n||(n=!0,o(),u(s))},"failWrite"),l=i(()=>c(),"onDrain"),f=i(s=>r(s),"onError");process.stdout.once("error",f);try{const s=process.stdout.write(e);if(n)return;s?c():process.stdout.once("drain",l)}catch(s){r(s)}})}i(m,"writeStdout");try{let e=process.argv.slice(2);const t=e[0]==="--non-interactive";if(t){e=e.slice(1);const r=e.length===5&&e[0]==="admin"&&e[1]==="blog"&&e[2]==="posts"&&e[3]==="create"&&e[4].startsWith("key="),l=e.length===5&&e[0]==="admin"&&e[1]==="feedbacks"&&["comment","status"].includes(e[2])&&e[4].startsWith("key="),f=e.length===4&&e[0]==="admin"&&e[1]==="whatsapp"&&e[2]==="messages"&&e[3]==="send";!r&&!l&&!f&&a("USAGE","--non-interactive \xE9 aceito somente para Growth, Donna e envio WhatsApp")}const n=e.length>=4&&e[0]==="admin"&&e[1]==="whatsapp"&&e[2]==="messages"&&e[3]==="listen"&&e.at(-1)!=="--help"?new AbortController:null,o=i(()=>n?.abort(),"stop");n&&(process.once("SIGINT",o),process.once("SIGTERM",o));const c=await T(n?.signal,async()=>e.length===0||e.length===1&&e[0]==="--help"?L():e[0]==="global"&&e.at(-1)!=="--help"?(()=>{try{return C(e.slice(1))}catch(r){a("GLOBAL",r.message)}})():e[0]==="env"&&e.at(-1)!=="--help"?await O(process.env,e.slice(1)):e.length===1&&e[0]==="login"?await S(process.env,({verification_uri:r,user_code:l})=>{process.stderr.write(`Abra ${r}
4
+ Digite o c\xF3digo ${l} e aprove o acesso.
5
+ `)}):e.length===1&&e[0]==="logout"?await b(process.env):await I(e,{input:k,signal:n?.signal,emit:i(r=>m(`${JSON.stringify(r)}
6
+ `),"emit"),confirm:t?async()=>!0:A}));n&&(process.removeListener("SIGINT",o),process.removeListener("SIGTERM",o)),await m(`${typeof c=="string"?c:JSON.stringify(c)}
6
7
  `)}catch(e){const t=e instanceof N;process.stderr.write(`${JSON.stringify({error:{code:t?e.code:"UNKNOWN",message:t?e.message:"Falha interna do CLI",...t&&e.status?{status:e.status}:{},...t&&e.data?{data:e.data}:{}}})}
7
8
  `),process.exitCode=1}
@@ -0,0 +1,2 @@
1
+ var A=Object.defineProperty;var p=(e,t)=>A(e,"name",{value:t,configurable:!0});import{CliError as g}from"../api.js";const h=4096,N=100,E=255;function y(e,t,r){const o=new URLSearchParams;for(const n of e){const d=n.indexOf("="),i=n.slice(0,d),s=n.slice(d+1);(d<1||!r.includes(i)||!s||o.has(i))&&t.fail("USAGE",`Filtro n\xE3o suportado: ${n}`,422),i==="limit"&&(!/^\d+$/.test(s)||Number(s)<1||Number(s)>N)&&t.fail("INPUT","Limit deve estar entre 1 e 100",422),i==="direction"&&!["inbound","outbound"].includes(s)&&t.fail("INPUT","direction deve ser inbound ou outbound",422),i==="peer"?(/^\+?\d{8,15}$/.test(s)||t.fail("INPUT","peer deve ser telefone E.164 ou somente d\xEDgitos",422),o.set(i,s.replace(/^\+/,""))):o.set(i,s)}return o.size?`?${o}`:""}p(y,"query");function b(e,t){(!e||typeof e!="object"||Array.isArray(e))&&t.fail("INPUT","A entrada deve ser um objeto JSON",422);const r=new Set(["to","text","idempotency_key","reply_to"]),o=Object.keys(e).find(d=>!r.has(d));o&&t.fail("INPUT",`Campo n\xE3o permitido: ${o}`,422),(typeof e.to!="string"||!/^\+?\d{8,15}$/.test(e.to))&&t.fail("INPUT","Informe to como telefone E.164 ou somente d\xEDgitos em JSON pelo stdin",422),(typeof e.text!="string"||!e.text.trim()||e.text.length>h)&&t.fail("INPUT",`Informe text com 1 a ${h} caracteres em JSON pelo stdin`,422),(typeof e.idempotency_key!="string"||!e.idempotency_key.isWellFormed()||e.idempotency_key.length<16||e.idempotency_key.length>128||/[\u0000-\u001F\u007F]/u.test(e.idempotency_key))&&t.fail("INPUT","Informe idempotency_key com 16 a 128 caracteres em JSON pelo stdin",422);const n={to:e.to,text:e.text,idempotency_key:e.idempotency_key};return e.reply_to!==void 0&&(e.reply_to!==null&&(typeof e.reply_to!="string"||!e.reply_to.trim()||e.reply_to.length>E)&&t.fail("INPUT",`Informe reply_to como ID Meta com 1 a ${E} caracteres`,422),n.reply_to=e.reply_to),n}p(b,"sendInput");function T(e){return e?.meta?.next_cursor??null}p(T,"nextCursor");function I(e,t){if((!e||typeof e!="object"||Array.isArray(e)||typeof e.cursor!="string"||!e.cursor)&&t.fail("RESPONSE","Cada evento WhatsApp deve retornar seu cursor de retomada"),e.event&&typeof e.event=="object"&&!Array.isArray(e.event))return{event:e.event,cursor:e.cursor};const{cursor:r,...o}=e;return{event:o,cursor:r}}p(I,"eventCheckpoint");function _(e,t){return e.sleep?e.sleep(t,e.signal):new Promise((r,o)=>{let n=!1,d;const i=p(()=>e.signal?.removeEventListener("abort",a),"cleanup"),s=p(()=>{n||(n=!0,i(),r())},"finish"),a=p(()=>{n||(n=!0,clearTimeout(d),i(),o(new g("CANCELLED","Escuta cancelada")))},"onAbort");if(d=setTimeout(s,t),!!e.signal){if(e.signal.aborted){a();return}e.signal.addEventListener("abort",a,{once:!0})}})}p(_,"wait");function u(e,t){return{data:{stopped:!0,cursor:t??null}}}p(u,"stopped");async function P(e,t){const r=y(e,t,["cursor","limit"]),o=new URLSearchParams(r.slice(1));let n=o.get("cursor");const d=o.get("limit")??"20",i=Math.max(250,Math.min(1e4,Number(t.listenInterval??1e3)));for(;!t.signal?.aborted;){const s=new URLSearchParams({limit:d});n&&s.set("cursor",n);try{const a=await t.api("GET",`/admin/whatsapp/events?${s}`),l=Array.isArray(a?.data)?a.data:a?.data?.events;Array.isArray(l)||t.fail("RESPONSE","Resposta inv\xE1lida da API");const c=T(a);let f=n;for(const w of l){if(t.signal?.aborted)return u(t,f);const m=I(w,t);if(await t.emit?.({event:m.event,cursor:m.cursor}),f=m.cursor,t.signal?.aborted)return u(t,f)}c!=null?n=c:f!=null&&(n=f),await _(t,i)}catch(a){if(a?.code==="CANCELLED"||t.signal?.aborted)return u(t,n);if(a?.code!=="NETWORK")throw a;try{await _(t,Math.min(i*2,1e4))}catch(l){if(l?.code==="CANCELLED"||t.signal?.aborted)return u(t,n);throw l}}}return u(t,n)}p(P,"listen");async function U(e,t){if(e[0]!=="admin"||e[1]!=="whatsapp"||e[2]!=="messages")return null;if(t.requireRole("admin"),e[3]==="list")return t.api("GET",`/admin/whatsapp/messages${y(e.slice(4),t,["limit","cursor","peer","direction"])}`);if(e[3]==="get"&&e.length===5)return t.api("GET",`/admin/whatsapp/messages/${t.uuid(e[4])}`);if(e[3]==="events")return t.api("GET",`/admin/whatsapp/events${y(e.slice(4),t,["limit","cursor"])}`);if(e[3]==="listen")return P(e.slice(4),t);if(e[3]==="send"&&e.length===4){const r=b(await t.input(),t);return await t.confirm(`Enviar mensagem WhatsApp para ${r.to}?
2
+ ${JSON.stringify(r,null,2)}`,r.idempotency_key),t.api("POST","/admin/whatsapp/messages",r,{idempotencyKey:r.idempotency_key})}t.fail("USAGE","Use: genne admin whatsapp messages list|get MESSAGE_ID|events|listen|send",2)}p(U,"whatsappCommand");export{U as whatsappCommand};
package/src/help.js CHANGED
@@ -1 +1,24 @@
1
- var v=Object.defineProperty;var n=(e,r)=>v(e,"name",{value:r,configurable:!0});import{globalHelp as g}from"./global.js";const u=[],a=n((e,r)=>{for(const[o,t,s,i]of r)u.push({usage:`genne ${o}`,roles:e,description:t,...s?{input:s}:{},...i?{confirmation:"terminal interativo"}:{}})},"add");a(["public"],[["help [CAMINHO]","Lista comandos ou detalha um caminho, sem autentica\xE7\xE3o."],["login","Autoriza uma sess\xE3o CLI pelo navegador em Prod por padr\xE3o; herda o papel e a conta selecionados na sess\xE3o que aprova."],["env show","Mostra a origem API (Prod por padr\xE3o ou GENNE_API_URL) e a disponibilidade da sess\xE3o salva, sem expor credenciais."],["users driver register","Cadastra uma conta de motorista.","JSON: name, email, password, phone E.164, registration_market_code BR|US"],["auth membership-invitations accept","Aceita convite de v\xEDnculo B2B; identidade j\xE1 ativa pode enviar s\xF3 token.","JSON obrigat\xF3rio: token; para ativar identidade convidada, name, phone E.164, password, registration_market_code BR|US; cpf opcional"],["password forgot","Solicita recupera\xE7\xE3o de senha.","JSON: email"],["password reset","Redefine senha com o c\xF3digo recebido.","JSON: email, code, password"]]),a(["public"],g),a(["driver","admin","carrier","shipper"],[["whoami","Mostra identidade, papel ativo e, para cliente B2B, conta selecionada."],["users me","Consulta o resumo do pr\xF3prio usu\xE1rio."],["user me","Consulta o resumo do pr\xF3prio usu\xE1rio."],["user me update","Atualiza o pr\xF3prio perfil.","JSON: name, phone, vehicle_type, navigation_app_preference"],["user me photo","Envia a pr\xF3pria foto.","JSON: path para JPG, PNG, WebP, HEIC ou HEIF at\xE9 6 MiB"],["user me email-change request","Solicita troca do pr\xF3prio email.","JSON: current_password, new_email"],["user me email-change confirm","Confirma troca de email e encerra as sess\xF5es.","JSON: code",!0],["user me deletion-request","Solicita exclus\xE3o dos pr\xF3prios dados.","JSON: accepted_terms=true",!0],["password change","Altera a pr\xF3pria senha.","JSON: current_password, new_password"],["logout","Revoga a sess\xE3o CLI salva."],["session logout","Revoga a sess\xE3o atual."],["session logout-all","Revoga todas as sess\xF5es da identidade.",null,!0]]),a(["carrier"],[["user me driver-access enable","Habilita motorista para o pr\xF3prio owner carrier ativo. Preserva a empresa; altera\xE7\xE3o efetiva encerra suas sess\xF5es e exige genne login. Ap\xF3s timeout, fa\xE7a login e consulte user me antes de repetir.","JSON em stdin: current_password obrigat\xF3rio; confirma o UUID da pr\xF3pria identidade",!0]]),a(["driver"],[["users driver carriers invitations list [status=S] [limit=N] [cursor=X]","Lista convites do motorista; status=pending|accepted|declined|cancelled|expired, limit=1..100 (padr\xE3o 20), cursor opaco."],["users driver carriers invitations show INVITATION_ID","Consulta identidade da carrier, validade e estado can\xF4nico do pr\xF3prio convite."],["users driver carriers invitations accept INVITATION_ID","Aceita convite e cria v\xEDnculo com a transportadora. Retry com a mesma chave preserva resultado; decis\xE3o oposta gera conflito. N\xE3o altera prefer\xEAncia ou outras carriers.","JSON em stdin: idempotency_key (Unicode v\xE1lido sem U+0000, 1 a 128 codepoints), sem normaliza\xE7\xE3o; header Idempotency-Key para ASCII printable sem espa\xE7os nas bordas, body idempotency_key para os demais valores",!0],["users driver carriers invitations decline INVITATION_ID","Recusa convite sem criar v\xEDnculo; retry com a mesma chave preserva resultado. Consulte show ap\xF3s conflito.","JSON em stdin: idempotency_key (Unicode v\xE1lido sem U+0000, 1 a 128 codepoints), sem normaliza\xE7\xE3o; header Idempotency-Key para ASCII printable sem espa\xE7os nas bordas, body idempotency_key para os demais valores",!0],["users driver profile","Consulta o resumo do pr\xF3prio cadastro de motorista."],["users driver carriers list","Lista v\xEDnculos com transportadoras."],["users driver carriers link","Vincula-se por c\xF3digo da transportadora.","JSON: driver_link_code (5 caracteres)",!0],["users driver carriers unlink CARRIER_ID","Remove um v\xEDnculo com transportadora.",null,!0],["users driver carriers preference","Define prefer\xEAncia de rota.","JSON: preference=independent_driver|carrier_direct; carrier_account_id se carrier_direct",!0],["driver profile show","Consulta cadastro operacional, prontid\xE3o GR, treinamento e estado dos documentos pr\xF3prios."],["driver profile draft","Salva rascunho do cadastro; campos opcionais conforme etapa.","JSON: personal_document_type, personal_document_number, personal_document_value, issuing_country_code, cpf, cnpj, mei_cnpj, cnh_number, cnh_state, cnh_security_code, naturalness, whatsapp_phone, emergency_whatsapp, emergency_contact_relationship, has_antt, antt_status, ownership_pending, has_vehicle, vehicle_owner_is_driver, vehicle_profile, vehicle_plate_state, vehicle_plate_city, vehicle_fleet_number, vehicle_axle_count, vehicle_bodywork, transportadora_client, client, operation_base, magazine_base, operation_state, operation_city, operation_region, operation_notes, has_mei, no_mei, mei_absence_reason, referral_whatsapp, residential_street, residential_number, residential_complement, residential_neighborhood, residential_city, residential_state, residential_postal_code, training_watched (booleano); documents opcional com caminhos cnh, crlv, antt, ownership_document, selfie, address_proof (PDF/JPG/PNG at\xE9 12 MiB)"],["driver profile complete","Envia cadastro completo; o Core valida a completude.","JSON: mesmos campos e documents de driver profile draft; consulte genne help driver profile draft"],["driver profile revalidate BLOCK","Revalida cnh, cnpj_mei, vehicle, residential_address, operation_preferences ou antt."],["driver profile mei consult","Consulta o CNPJ MEI do titular.","JSON: cnpj (14 d\xEDgitos)"],["driver profile mei confirm","Confirma o CNPJ MEI do titular.","JSON: cnpj (14 d\xEDgitos)"],["driver payout requirements BR|US","Consulta contrato de dados banc\xE1rios por mercado."],["driver payout accounts BR|US","Consulta repasse mascarado e vers\xE3o de proje\xE7\xE3o."],["driver payout primary","Substitui conta prim\xE1ria de repasse com controle de vers\xE3o e idempot\xEAncia.","JSON obrigat\xF3rio: market_code BR|US, rail bank_transfer|ach, requirements_version, expected_projection_version, account_number, account_type, holder_name, idempotency_key; opcionais: institution_identifier, branch_identifier, routing_number, holder_type, holder_document_type/value, holder_phone",!0],["driver market-context set","Seleciona a base operacional ou o mercado independente do motorista.","JSON: scope_type=shipper_base|carrier_base e scope_id=UUID, ou scope_type=independent e market_id=UUID"]]),a(["driver"],[["driver places search CONSULTA","Busca endere\xE7os para obter place_id no mercado do motorista."],["driver places details PLACE_ID","Resolve o lugar escolhido em endere\xE7o e coordenadas; confira o resultado antes de salvar."],["driver routes list [limit=N] [cursor=X] [status=X] [is_favorite=X] [date_from=X] [date_to=X] [search=X]","Lista SavedRoutes do motorista; status=open|completed|closed, is_favorite=true|false e datas AAAA-MM-DD."],["driver routes plan create","Enfileira planejamento com endere\xE7os ou waypoints; optimize=true \xE9 opcional e 202 retorna plan_public_id sem criar SavedRoute.","JSON: locations ou waypoints (2 a 500 itens), cada item pode ser endere\xE7o ou objeto com address/lat/lng; optimize, optimize_start, optimize_end, return_to_start, current_location e vehicle_type opcionais",!0],["driver routes plan JOB_ID show","Consulta o job de planejamento at\xE9 status completed ou failed; use os waypoints e a geometria conclu\xEDdos para criar o draft."],["driver routes imports preview ARQUIVO [persist_order_id_choice=true|false] [column_mapping=JSON]","Pr\xE9via de CSV, XLS, XLSX ou PDF local at\xE9 50 MiB; n\xE3o cria rota. Envie o arquivo original, inclusive sem cabe\xE7alho. Se data.ai_inference.status for failed em resposta de sucesso, a pr\xE9via continua utiliz\xE1vel: revise as colunas e repita com column_mapping=JSON. Erros de processamento 422 conhecidos retornam error.code, error.message seguro e error.data.reason/stage."],["driver routes draft create","Cria draft manual_app. Informe origem pura e paradas; use places details para preencher coordenadas.","JSON: name e waypoints obrigat\xF3rios; waypoints com type, address e, quando resolvidos, lat/lng; return_to_start e driver_payment_profile_public_id opcionais",!0],["driver routes ROUTE_ID show","Consulta SavedRoute, waypoints, manifesto e estado de execu\xE7\xE3o."],["driver routes ROUTE_ID waypoints set","Salva a lista completa de waypoints execut\xE1veis; preserve IDs e manifesto da rota operacional.","JSON: waypoints (lista completa com type; id para pontos existentes, sequence, address, lat/lng, stop_kind, reference_kind e demais campos execut\xE1veis)",!0],["driver routes ROUTE_ID coordinates validate","Verifica localmente as coordenadas dos waypoints salvos; endere\xE7o sozinho n\xE3o basta para otimizar."],["driver routes ROUTE_ID optimize","Enfileira otimiza\xE7\xE3o de waypoints com coordenadas; 202 retorna optimize_public_id e n\xE3o altera a SavedRoute.",null,!0],["driver optimization JOB_ID show","Consulta job de otimiza\xE7\xE3o at\xE9 status completed ou failed."],["driver routes ROUTE_ID optimize apply JOB_ID","Aplica ordem e geometria de job completed; o Core rejeita a escrita se a rota mudar ap\xF3s a leitura.","JSON: expected_waypoint_ids e expected_updated_at exibidos em routes ROUTE_ID show antes de otimizar",!0],["driver routes ROUTE_ID calculate","Enfileira c\xE1lculo sem otimizar; 202 retorna calculate_public_id e n\xE3o altera a SavedRoute.",null,!0],["driver calculation JOB_ID show","Consulta job de c\xE1lculo at\xE9 status completed ou failed."],["driver routes ROUTE_ID calculate apply JOB_ID","Aplica geometria de c\xE1lculo completed sem mudar a sequ\xEAncia; o Core rejeita snapshot alterado.","JSON: expected_waypoint_ids e expected_updated_at exibidos em routes ROUTE_ID show antes de calcular",!0],["driver routes ROUTE_ID start","Inicia execu\xE7\xE3o da SavedRoute pr\xF3pria ap\xF3s revisar rota e cota\xE7\xE3o aplic\xE1vel.",null,!0],["driver routes ROUTE_ID reactivate","Reabre uma rota manual antiga para o dia civil atual; rota operacional exige o fluxo B2B.",null,!0],["driver routes ROUTE_ID clone","Clona a SavedRoute pr\xF3pria em um novo draft, preservando waypoints e reiniciando execu\xE7\xE3o.",null,!0],["driver routes ROUTE_ID waypoints WAYPOINT_ID failure-policy","Consulta motivos de insucesso e exig\xEAncia de autoriza\xE7\xE3o do waypoint."],["driver routes ROUTE_ID waypoints WAYPOINT_ID notes","Atualiza a observa\xE7\xE3o da parada pr\xF3pria; string vazia limpa a observa\xE7\xE3o.","JSON: notes (string)",!0],["driver routes ROUTE_ID waypoints WAYPOINT_ID packages","Atualiza a quantidade de pacotes da parada; o Core recusa manifesto gerido por importa\xE7\xE3o.","JSON: packages_count (inteiro n\xE3o negativo)",!0],["driver routes ROUTE_ID waypoints WAYPOINT_ID navigation start","Registra o evento de in\xEDcio de navega\xE7\xE3o; n\xE3o abre um navegador ou aplicativo de mapas.","JSON: {} ou navigation_provider, nav_sdk_version, boot_duration_ms, waypoint_index e packages_count opcionais",!0],["driver routes ROUTE_ID waypoints WAYPOINT_ID items ITEM_ID enrich","Consulta os dados do item a partir da DANFE importada.",null,!0],["driver routes ROUTE_ID waypoints WAYPOINT_ID check-in","Registra a posi\xE7\xE3o informada para o check-in da parada; o Core calcula dist\xE2ncia e alerta.","JSON obrigat\xF3rio: lat e lng num\xE9ricos; accuracy_meters opcional",!0],["driver routes ROUTE_ID waypoints WAYPOINT_ID status","Registra baixa de waypoint; failed exige motivo e observa\xE7\xE3o.","JSON: status=pending|delivered|failed; para failed, failure_reason_code, failure_observation e failure_authorization_code se exigido",!0],["driver routes ROUTE_ID waypoints WAYPOINT_ID items ITEM_ID status","Registra baixa de item do manifesto.","JSON: status=pending|delivered|failed; para failed, failure_reason_code, failure_observation e failure_authorization_code se exigido",!0],["driver routes ROUTE_ID finish","Conclui rota pr\xF3pria depois que os waypoints exigidos tiverem baixa.",null,!0]]),a(["admin"],[["users admin list [limit=N] [cursor=X] [role=R] [search=X]","Lista usu\xE1rios vis\xEDveis \xE0 ACL interna."],["users admin show USER_ID","Consulta um usu\xE1rio."],["users admin driver-profile DRIVER_ID show","Consulta perfil operacional autorizado de um motorista."],["users admin driver-profile DRIVER_ID update","Corrige campos operacionais do motorista.","JSON: reason e profile com operation_base, operation_state, operation_city, operation_region, operation_notes, work_status, work_status_active, has_vehicle, vehicle_profile, vehicle_plate_state, vehicle_plate_city, vehicle_fleet_number, vehicle_axle_count, vehicle_bodywork",!0],["users drivers list [limit=N] [cursor=X] [search=X] [status=S] [carrier_account_id=UUID] [shipper_account_id=UUID]","Lista o diret\xF3rio de motoristas."],["admin users create","Cria usu\xE1rio; admin comum nasce staff sem grants.","JSON: name, email, password, phone E.164, registration_market_code BR|US, is_internal opcional",!0],["admin users USER_ID update","Atualiza usu\xE1rio.","JSON: um ou mais de name, email, phone, is_internal",!0],["admin users USER_ID block|unblock","Bloqueia ou desbloqueia usu\xE1rio.",null,!0],["admin users USER_ID roles","Altera pap\xE9is da identidade.","JSON: roles, reason",!0],["admin users USER_ID driver-access enable","Habilita motorista para um owner carrier ativo. Exige autoriza\xE7\xE3o de suporte; encerra as sess\xF5es do alvo e preserva a sess\xE3o do executor. J\xE1 habilitado retorna changed=false.","JSON em stdin: reason obrigat\xF3rio; confirma o UUID da identidade alvo",!0],["admin users USER_ID password","Redefine senha de usu\xE1rio.","JSON: password, reason",!0],["admin users USER_ID delete","Exclui usu\xE1rio ap\xF3s pr\xE9via; depend\xEAncias bloqueiam a exclus\xE3o.","JSON: email do usu\xE1rio",!0],["admin privacy preview","Consulta pr\xE9via de exclus\xE3o sem expor a inten\xE7\xE3o.","JSON: user_id ou email"],["admin privacy requests","Lista pedidos de exclus\xE3o."],["admin privacy requests status REQUEST_ID","Marca status de pedido; excluido n\xE3o prova apagamento.","JSON: new_status=solicitado|excluido|nao_ha_dados",!0],["access catalog","Consulta cat\xE1logo de permiss\xF5es internas."],["access accounts list [account_type=carrier|shipper] [limit=N] [cursor=X] [search=X]","Lista contas no escopo da ACL interna."],["access members list [status=X] [membership_role=X] [carrier_account_id=UUID] [shipper_account_id=UUID] [limit=N] [cursor=X] [search=X]","Lista v\xEDnculos B2B vis\xEDveis."],["access internal list","Lista acesso de usu\xE1rios internos."],["access internal show USER_ID","Consulta grants internos de um usu\xE1rio."],["access internal set USER_ID","Altera ACL interna conforme grants do ator.","JSON: access com admin_access_level ou permission_keys",!0],["access account ACCOUNT_ID members","Lista membros da conta."],["access account ACCOUNT_ID members create","Convida membro para a conta.","JSON: member com email, membership_role, workspace_role",!0],["access account ACCOUNT_ID members MEMBERSHIP_ID update","Atualiza v\xEDnculo do membro.","JSON: member com status, membership_role, workspace_role ou metadata",!0],["access account ACCOUNT_ID members MEMBERSHIP_ID resend-invitation","Reenvia convite pendente.",null,!0],["access account ACCOUNT_ID entitlements","Consulta m\xF3dulos da conta."],["access account ACCOUNT_ID entitlements set","Altera m\xF3dulos da conta.","JSON: access.module_keys",!0],["access account ACCOUNT_ID member-access MEMBERSHIP_ID","Consulta permiss\xF5es do membro."],["access account ACCOUNT_ID member-access MEMBERSHIP_ID set","Altera permiss\xF5es do membro.","JSON: access.permission_keys",!0],["access account ACCOUNT_ID member-bases MEMBERSHIP_ID","Consulta bases do membro."],["access account ACCOUNT_ID member-bases MEMBERSHIP_ID set","Altera bases do membro.","JSON: access.base_ids",!0]]),a(["carrier","shipper"],[["company my-account show","Consulta a empresa da sess\xE3o."],["company my-account update","Atualiza dados permitidos da empresa da sess\xE3o.","JSON: um ou mais de legal_name, trading_name, document, issuing_country_code, legal_identifier, contact_points, addresses",!0],["access my-account catalog","Consulta cat\xE1logo de permiss\xF5es B2B."],["access my-account members","Lista membros da conta da sess\xE3o."],["access my-account members create","Convida membro para a conta da sess\xE3o.","JSON: member com email e membership_role",!0],["access my-account members MEMBERSHIP_ID update","Atualiza v\xEDnculo de membro.","JSON: member com status, membership_role ou metadata",!0],["access my-account members MEMBERSHIP_ID resend-invitation","Reenvia convite pendente.",null,!0],["access my-account entitlements","Consulta m\xF3dulos da conta da sess\xE3o."],["access my-account entitlements set","Altera m\xF3dulos conforme a ACL B2B.","JSON: access.module_keys",!0],["access my-account member-access MEMBERSHIP_ID","Consulta permiss\xF5es do membro."],["access my-account member-access MEMBERSHIP_ID set","Altera permiss\xF5es do membro.","JSON: access.permission_keys",!0]]),a(["carrier"],[["users carrier drivers invitations create","Envia convite por CPF para motorista registrado. Exige m\xF3dulo carrier_driver_invitations ativo e permiss\xE3o manage no Core; nenhum grant \xE9 autom\xE1tico. Retorna convite pending, n\xE3o v\xEDnculo. Retry deve reutilizar chave e CPF.","JSON em stdin: cpf (string), idempotency_key (Unicode v\xE1lido sem U+0000, 1 a 128 codepoints), sem normaliza\xE7\xE3o; header Idempotency-Key para ASCII printable sem espa\xE7os nas bordas, body idempotency_key para os demais valores; CPF n\xE3o \xE9 argumento de shell",!0],["users carrier drivers invitations list [status=S] [limit=N] [cursor=X]","Lista convites da conta ativa com CPF mascarado; Core exige m\xF3dulo ativo e view OU manage. status=pending|accepted|declined|cancelled|expired, limit=1..100 (padr\xE3o 20), cursor opaco."],["users carrier drivers invitations show INVITATION_ID","Consulta convite da conta ativa com CPF mascarado; Core exige m\xF3dulo ativo e view OU manage."],["users carrier drivers invitations cancel INVITATION_ID","Cancela convite pendente da conta ativa; Core exige m\xF3dulo ativo e manage. Retry reutiliza a chave; consulte show ap\xF3s conflito.","JSON em stdin: idempotency_key (Unicode v\xE1lido sem U+0000, 1 a 128 codepoints), sem normaliza\xE7\xE3o; header Idempotency-Key para ASCII printable sem espa\xE7os nas bordas, body idempotency_key para os demais valores",!0],["users carrier drivers list [base_id=UUID] [limit=N] [cursor=X] [search=X]","Lista motoristas da transportadora."],["users carrier drivers link DRIVER_USER_ID","Consulta v\xEDnculo com motorista."],["users carrier drivers link DRIVER_USER_ID set-bases","Altera bases do v\xEDnculo.","JSON: base_ids",!0]]),a(["admin"],[["admin support threads list [status=open|closed] [limit=N] [cursor=X]","Lista conversas de suporte."],["admin support threads THREAD_ID messages [limit=N] [cursor=X]","Consulta mensagens da conversa."],["admin support threads THREAD_ID reply","Mostra at\xE9 100 mensagens antes da resposta; pagine o hist\xF3rico se houver mais.","JSON: body (1 a 4000 caracteres)",!0],["admin support threads THREAD_ID close","Fecha a conversa ap\xF3s pr\xE9via e confirma\xE7\xE3o pelo UUID. Exige messaging.manage no Core; resultado s\xEDncrono.","Sem JSON de entrada",!0],["admin support threads THREAD_ID reopen","Reabre a conversa ap\xF3s pr\xE9via e confirma\xE7\xE3o pelo UUID. Exige messaging.manage no Core; resultado s\xEDncrono.","Sem JSON de entrada",!0],["admin feedbacks list [status=S] [user_id=UUID] [order=recent|votes|oldest] [limit=N] [cursor=X]","Lista feedbacks."],["admin feedbacks show FEEDBACK_ID","Consulta feedback."],["admin feedbacks comments FEEDBACK_ID [limit=N] [cursor=X]","Lista coment\xE1rios."],["admin feedbacks delete FEEDBACK_ID","Exclui permanentemente o feedback ap\xF3s pr\xE9via e confirma\xE7\xE3o pelo UUID. O Core exige feedbacks.manage; HTTP 204 confirma conclus\xE3o.","Sem JSON de entrada; n\xE3o h\xE1 restore de feedback",!0],["admin feedbacks comments FEEDBACK_ID COMMENT_ID delete","Oculta o coment\xE1rio do feedback ap\xF3s pr\xE9via e confirma\xE7\xE3o pelo UUID do coment\xE1rio. O Core verifica v\xEDnculo e feedbacks.manage; HTTP 204 confirma conclus\xE3o.","Sem JSON de entrada",!0],["admin feedbacks comments FEEDBACK_ID COMMENT_ID restore","Restaura um coment\xE1rio oculto do feedback ap\xF3s pr\xE9via e confirma\xE7\xE3o pelo UUID do coment\xE1rio. O Core verifica v\xEDnculo e feedbacks.manage; HTTP 204 confirma conclus\xE3o.","Sem JSON de entrada",!0],["admin feedbacks comment FEEDBACK_ID key=CHAVE","Comenta com chave idempotente de 16 a 255 caracteres.","JSON: content, image_url opcional",!0],["admin feedbacks status FEEDBACK_ID key=CHAVE","Solicita mudan\xE7a de status; 202 pending exige consulta do receipt. Reuse chave e payload no retry.","JSON: new_status=pending|in_progress|prioritized|resolved|canceled|duplicate; closing_comment_id e reason opcionais",!0],["admin feedbacks receipt FEEDBACK_ID RECEIPT_ID","Consulta o resultado de uma mudan\xE7a terminal."],["admin crm assignees","Lista respons\xE1veis eleg\xEDveis por leads."],["admin crm leads list [status=S] [search=X] [limit=N] [cursor=X]","Lista leads."],["admin crm leads show LEAD_ID","Consulta lead e eventos."],["admin crm leads LEAD_ID status","Altera status do lead.","JSON: new_status=novo|em_contato|qualificado|perdido|convertido",!0],["admin crm leads LEAD_ID note","Adiciona nota ao lead.","JSON: note",!0],["admin crm leads LEAD_ID assign","Atribui respons\xE1vel eleg\xEDvel.","JSON: admin_id",!0],["admin notifications list [limit=N] [cursor=X]","Lista notifica\xE7\xF5es."],["admin notifications show MESSAGE_GROUP_ID","Consulta processamento e destinat\xE1rios autorizados."],["admin notifications send","Enfileira notifica\xE7\xE3o individual; 202 n\xE3o prova entrega.","JSON: user_id, title, body; action_url e action_label opcionais",!0],["admin blog posts list [locale=pt-BR|en|es] [translation_group_id=UUID]","Lista posts, inclusive rascunhos."],["admin blog posts create key=CHAVE","Cria post com idempot\xEAncia; chave est\xE1vel de 16 a 255 caracteres.","JSON obrigat\xF3rio: slug, title, description, author, category, content_markdown, content_html; opcionais: locale, tags, cover_image_url, published",!0],["--non-interactive admin blog posts create key=CHAVE","Exce\xE7\xE3o exclusiva do Growth para criar post sem confirma\xE7\xE3o no terminal; n\xE3o libera outras muta\xE7\xF5es.","JSON: mesmo contrato de admin blog posts create"],["admin blog posts POST_ID update","Atualiza post com If-Match.","JSON: version e campos alterados",!0],["admin blog posts POST_ID publish|unpublish version=N","Altera publica\xE7\xE3o com vers\xE3o esperada.",null,!0],["admin blog posts POST_ID delete","Exclui post.",null,!0],["admin blog images upload ARQUIVO","Envia imagem PNG, JPEG, WebP ou GIF at\xE9 8 MiB.",null,!0],["admin faqs list [path=X] [route_key=X] [locale=pt-BR|en|es] [category=X] [featured=true|false] [q=X]","Lista FAQs, inclusive rascunhos."],["admin faqs create key=CHAVE","Cria FAQ com idempot\xEAncia; chave est\xE1vel de 16 a 255 caracteres.","JSON obrigat\xF3rio: question, answer, category, paths ou route_keys; opcionais: locale, tags, featured_on_home, position, published",!0],["admin faqs FAQ_ID update","Atualiza FAQ com If-Match.","JSON: version e campos alterados",!0],["admin faqs FAQ_ID publish|unpublish version=N","Altera publica\xE7\xE3o com vers\xE3o esperada.",null,!0],["admin faqs FAQ_ID delete","Exclui FAQ.",null,!0],["admin companies list [account_type=carrier|shipper] [search=X] [limit=N] [cursor=X]","Lista empresas B2B."],["admin companies show BUSINESS_ACCOUNT_ID","Consulta empresa pelo ID jur\xEDdico; IDs operacionais de shipper/carrier s\xE3o distintos."],["admin companies consult","Consulta dados cadastrais de uma empresa pelo CNPJ. Retorna CNPJ, nomes e endere\xE7o, sem confirma\xE7\xE3o.","JSON em stdin: cnpj (string) e user_id opcional (UUID)"],["admin companies onboard-existing-user","Registra usu\xE1rio ativo existente como owner da conta carrier; o Core valida empresa, membership e ACL. Retorna empresa, v\xEDnculo, m\xF3dulos ativos e email_delivery.status=disabled|pending|sent|failed.","JSON em stdin: user_id (UUID), cnpj (string), send_email (booleano opcional; padr\xE3o false)",!0],["admin companies onboarding-users list [search=X] [limit=N] [cursor=X]","Lista identidades ativas de pap\xE9is can\xF4nicos para onboarding; exige business_accounts_registry.manage no Core e retorna somente user_id, nome, email e status."],["admin companies create","Cria empresa B2B.","JSON obrigat\xF3rio: legal_name e document ou issuing_country_code+legal_identifier; opcionais: trading_name, status, account_type, account_types, contact_points, addresses",!0],["admin companies BUSINESS_ACCOUNT_ID update","Atualiza empresa B2B.","JSON: um ou mais de legal_name, trading_name, document, issuing_country_code, legal_identifier, status, account_type, account_types, contact_points, addresses",!0],["admin shippers OPERATIONAL_ACCOUNT_ID bases list","Lista bases do embarcador."],["admin shippers OPERATIONAL_ACCOUNT_ID bases create","Cria base do embarcador.","JSON: market_id, country_code, currency_code, timezone, code, name e endere\xE7o",!0],["admin shippers OPERATIONAL_ACCOUNT_ID bases BASE_ID update|deactivate|reactivate","Altera ou ativa/desativa base do embarcador; update recebe JSON.","JSON para update: code, name, origin_address, origin_lat, origin_lng, postal_code, place_id, street, street_number, neighborhood, city, state, state_code, country, geocode_provider, timezone, triage_rules, balancing_policy, metadata",!0],["admin shippers|carriers OPERATIONAL_ACCOUNT_ID bases BASE_ID cutoff-windows set","Substitui todos os hor\xE1rios de corte no timezone da base; windows=[] limpa. Resultado s\xEDncrono; a CLI confirma no terminal, MCP remoto exige aprova\xE7\xE3o Core. Base shipper com execu\xE7\xF5es vinculadas \xE9 recusada com 409 cutoff_dispatches_exist.","JSON: windows (lista de weekday 0..6, cutoff_time HH:MM[:SS], auto_publish opcional)",!0],["admin shippers|carriers OPERATIONAL_ACCOUNT_ID bases BASE_ID service-area set|clear","Substitui ou remove a cobertura regional da base.","JSON para set: reference_zone_public_ids (lista de UUIDs)",!0],["admin shippers|carriers OPERATIONAL_ACCOUNT_ID bases BASE_ID region-groups create","Cria agrupamento nomeado de regi\xF5es para a base.","JSON: name, reference_zone_public_ids (lista de UUIDs)",!0],["admin shippers|carriers OPERATIONAL_ACCOUNT_ID bases BASE_ID zone-overrides list","Consulta zonas efetivas salvas da base; verifica a refer\xEAncia \xE0 conta operacional; depende das permiss\xF5es da sess\xE3o. Resultado s\xEDncrono, sem JSON ou confirma\xE7\xE3o."],["admin shippers OPERATIONAL_ACCOUNT_ID bases BASE_ID carrier-shares list","Consulta distribui\xE7\xE3o configurada de carriers da base shipper; verifica a refer\xEAncia \xE0 conta operacional; depende das permiss\xF5es da sess\xE3o. Resultado s\xEDncrono, sem JSON ou confirma\xE7\xE3o."],["admin carriers OPERATIONAL_ACCOUNT_ID bases list","Lista bases da transportadora."],["admin carriers OPERATIONAL_ACCOUNT_ID bases create","Cria base da transportadora.","JSON: market_id, country_code, currency_code, timezone, code, name e endere\xE7o",!0],["admin carriers OPERATIONAL_ACCOUNT_ID bases BASE_ID update|deactivate|reactivate","Altera ou ativa/desativa base da transportadora; update recebe JSON.","JSON para update: code, name, origin_address, origin_lat, origin_lng, postal_code, place_id, street, street_number, neighborhood, city, state, state_code, country, geocode_provider, timezone, triage_rules",!0]]),a(["carrier"],[["carrier bases BASE_ID reference-zone-features list [limit=N] [cursor=X] [search=X] [min_lng=X] [min_lat=X] [max_lng=X] [max_lat=X] [include_geometry=true|false]","Consulta cat\xE1logo OSM de refer\xEAncia para base pr\xF3pria da conta carrier ativa, conforme as permiss\xF5es da sess\xE3o; n\xE3o \xE9 cobertura operacional salva. Resultado s\xEDncrono com meta de pagina\xE7\xE3o, sem JSON ou confirma\xE7\xE3o."]]),a(["shipper"],[["shipper bases list","Lista as bases da conta embarcadora ativa."],["shipper bases create","Cria uma base na conta embarcadora ativa.","JSON obrigat\xF3rio: code, name; opcionais: origin_address, origin_lat, origin_lng, timezone, triage_rules, metadata",!0],["shipper bases BASE_ID carrier-shares list","Lista a distribui\xE7\xE3o de carriers configurada na base."],["shipper bases BASE_ID carrier-shares create","Adiciona share de carrier \xE0 base.","JSON: carrier_account_id, target_share_percent; quality_weight, priority_order e allocation_enabled opcionais",!0],["shipper bases BASE_ID carrier-shares replace","Substitui a distribui\xE7\xE3o de carriers da base.","JSON: carriers (lista de carrier_account_id, target_share_percent e campos opcionais)",!0],["shipper bases BASE_ID reference-zone-features list [limit=N] [cursor=X] [search=X] [min_lng=X] [min_lat=X] [max_lng=X] [max_lat=X] [include_geometry=true|false]","Lista fei\xE7\xF5es de refer\xEAncia para compor a cobertura da base."],["shipper bases BASE_ID reference-zone-features merge","Mescla fei\xE7\xF5es de refer\xEAncia em uma zona da base.","JSON: reference_zone_public_ids (lista de UUIDs); code e name opcionais",!0]]);for(const e of["admin","carrier"])a([e],[[`${e} gr provider-definitions list`,"Lista providers GR dispon\xEDveis no papel ativo."],[`${e} gr providers list [${e==="admin"?"carrier_account_id=UUID] [":""}provider_key=X] [status=X] [limit=N] [cursor=X]${e==="carrier"?" [search=X]":""}`,"Lista contas de providers GR no papel ativo."],[`${e} gr providers create`,"Cria conta de provider GR; credenciais s\xE3o aceitas somente via stdin.",`JSON: provider_key=m3risk|angellira, provider_label, mode=crawler|api|ftp|browser|api_jwt; status, config e credentials opcionais${e==="admin"?"; carrier_account_id ou carrier_account_public_id obrigat\xF3rio":""}`,!0],[`${e} gr providers PROVIDER_ID update`,"Atualiza conta de provider GR no escopo da sess\xE3o.","JSON: provider_label, mode, status, config e/ou credentials",!0],[`${e} gr providers PROVIDER_ID test`,"Testa a configura\xE7\xE3o da conta GR e retorna o healthcheck.",null,!0],[`${e} gr providers PROVIDER_ID operations`,"Descobre opera\xE7\xF5es expostas pela conta GR."],[`${e} gr providers PROVIDER_ID mappings list [active=true|false]`,"Lista mapeamentos de opera\xE7\xE3o da conta GR."],[`${e} gr providers PROVIDER_ID mappings upsert`,"Cria ou atualiza mapeamento de opera\xE7\xE3o GR.","JSON: operation_key, provider_client_id; provider_client_label, metadata e active opcionais",!0],[`${e} gr requests list [provider_key=X] [status=X] [phase=X] [operation_key=X] [search=X] [limit=N] [cursor=X]${e==="admin"?" [carrier_account_id=UUID]":""}`,"Lista solicita\xE7\xF5es GR no escopo da sess\xE3o."],[`${e} gr requests create`,"Enfileira solicita\xE7\xE3o GR; 202 n\xE3o prova conclus\xE3o.","JSON: driver_profile_id, provider_account_id, operation_key; priority opcional",!0],[`${e} gr requests REQUEST_ID show`,"Consulta solicita\xE7\xE3o GR."],[`${e} gr requests REQUEST_ID attempts|evidence|orchestration-events [limit=N] [cursor=X]`,"Consulta hist\xF3rico da solicita\xE7\xE3o GR."],[`${e} gr requests REQUEST_ID retry|verify|cancel`,"Altera solicita\xE7\xE3o GR conforme ACL e estado do Core.",null,!0],[`${e} gr requests REQUEST_ID confirm-recovery`,"Confirma a revis\xE3o exata de opera\xE7\xF5es de escrita ap\xF3s a pr\xE9via read-only.","JSON: recovery_revision, operations",!0],[`${e} gr requests REQUEST_ID operation`,"Seleciona opera\xE7\xE3o ativa para solicita\xE7\xE3o legada antes de qualquer escrita externa.","JSON: operation_key (UUID da base operacional)",!0],[`${e} gr requests REQUEST_ID personal-declarations`,"Atualiza declara\xE7\xF5es pessoais criptografadas e agenda reconcilia\xE7\xE3o.","JSON: sex=male|female|other e/ou marital_status=single|married|divorced|widowed|other",!0]]);a(["admin"],[["admin gr provider-definitions PROVIDER_ID update","Atualiza defini\xE7\xE3o global do provider GR; infraestrutura global continua restrita ao Admin.","JSON: provider_label, mode, status e/ou config com base_url, runner_url, runner_command",!0]]),a(["admin"],[["admin gr carriers CARRIER_ID dashboard","Consulta resumo GR da transportadora."],["admin gr drivers [carrier_account_id=UUID] [limit=N] [cursor=X] [provider_account_id=UUID] [search=X] [document=X] [status=X] [training_pending=true|false]","Consulta diret\xF3rio GR global, incluindo motoristas sem v\xEDnculo; depende das permiss\xF5es da sess\xE3o."],["admin gr carriers CARRIER_ID drivers [limit=N] [cursor=X] [provider_account_id=UUID] [search=X] [document=X] [status=X] [training_pending=true|false]","Consulta motoristas GR da transportadora."],["admin gr carriers CARRIER_ID blacklist list [limit=N] [cursor=X] [search=X]","Lista v\xEDnculos de motoristas bloqueados na transportadora."],["admin gr carriers CARRIER_ID links LINK_ID blacklist|unblock","Bloqueia ou desbloqueia v\xEDnculo; bloquear cancela solicita\xE7\xF5es GR abertas.",null,!0],["admin gr carriers CARRIER_ID links LINK_ID manual-approval","Aprova ou revoga GR externo somente nesse v\xEDnculo e transportadora; exige autoriza\xE7\xE3o e confirma\xE7\xE3o do LINK_ID. Retorna manual_approval com autor e data.",'JSON obrigat\xF3rio: {"approved":true} para aprovar ou {"approved":false} para revogar; CARRIER_ID e LINK_ID s\xE3o UUIDs p\xFAblicos',!0],["admin gr carriers CARRIER_ID drivers PROFILE_ID export","Consulta o perfil e a prontid\xE3o GR do motorista vinculado."],["admin gr carriers CARRIER_ID drivers PROFILE_ID documents TYPE reprocess","Reprocessa documento j\xE1 armazenado; 202 n\xE3o prova conclus\xE3o.","TYPE=cnh|crlv|address_proof|antt|ownership_document; JSON: {} ou document_id, registration_request_id e/ou requirements_revision",!0],["admin gr driver-profiles PROFILE_ID show","Consulta detalhe GR do motorista no escopo Admin."],["admin gr driver-profiles PROFILE_ID training","Registra se o treinamento GR foi assistido.","JSON obrigat\xF3rio: training_watched=true|false",!0]]),a(["carrier"],[["carrier gr dashboard","Consulta resumo GR da pr\xF3pria transportadora."],["carrier gr drivers [limit=N] [cursor=X] [provider_account_id=UUID] [search=X] [document=X] [status=X] [training_pending=true|false]","Consulta motoristas GR da pr\xF3pria transportadora."],["carrier gr blacklist list [limit=N] [cursor=X] [search=X]","Lista v\xEDnculos de motoristas bloqueados na pr\xF3pria transportadora."],["carrier gr links LINK_ID blacklist|unblock","Bloqueia ou desbloqueia v\xEDnculo pr\xF3prio; bloquear cancela solicita\xE7\xF5es GR abertas.",null,!0],["carrier gr links LINK_ID manual-approval","Aprova ou revoga GR externo no v\xEDnculo da transportadora da sess\xE3o; exige autoriza\xE7\xE3o e confirma\xE7\xE3o do LINK_ID. Retorna manual_approval com autor e data.",'JSON obrigat\xF3rio: {"approved":true} para aprovar ou {"approved":false} para revogar; LINK_ID \xE9 o UUID p\xFAblico do v\xEDnculo',!0],["carrier gr drivers PROFILE_ID export","Consulta o perfil e a prontid\xE3o GR do motorista vinculado."],["carrier gr drivers PROFILE_ID documents TYPE reprocess","Reprocessa documento j\xE1 armazenado; 202 n\xE3o prova conclus\xE3o.","TYPE=cnh|crlv|address_proof|antt|ownership_document; JSON: {} ou document_id, registration_request_id e/ou requirements_revision",!0],["carrier gr driver-profiles PROFILE_ID training","Registra se o treinamento GR foi assistido para motorista vinculado.","JSON obrigat\xF3rio: training_watched=true|false",!0]]);for(const[e,r]of[["carrier","carrier"],["admin","admin operations CARRIER_ID"]])a([e],[[`${r} orders lookup BARCODE`,"Consulta pedido por c\xF3digo."],[`${r} orders upsert`,"Cria ou atualiza pedido.","JSON obrigat\xF3rio: source_type=upload|proceda, external_id, postal_code, destination_address; opcionais: shipper_id, base_id, primary_barcode, aliases, destination_lat, destination_lng, destination_complement, geocode, recipient_name, recipient_doc, recipient_phone, packages_count, raw_payload, metadata",!0],[`${r} receiving scan`,"Registra recebimento ap\xF3s consultar o pedido.","JSON obrigat\xF3rio: barcode; opcionais: shipper_id, base_id, metadata",!0],[`${r} receiving rules list`,"Lista regras de recebimento."],[`${r} receiving rules create`,"Cria regra de recebimento global, por embarcador ou por base.","JSON obrigat\xF3rio: code, name, postal_code_start, postal_code_end; opcionais: shipper_id, base_id, priority_order, status, metadata. IDs s\xE3o UUIDs p\xFAblicos; sem shipper_id/base_id, a regra \xE9 global",!0],[`${r} receiving rules RULE_ID update`,"Atualiza parcialmente uma regra de recebimento.","JSON: um ou mais de shipper_id, base_id, code, name, postal_code_start, postal_code_end, priority_order, status, metadata. Campos omitidos s\xE3o preservados. base_id:null remove a base; shipper_id:null e base_id:null tornam a regra global",!0],[`${r} dispatch create`,"Expede pedidos ao motorista.","JSON: driver_user_id, barcodes; route_name/metadata opcionais",!0],[`${r} dispatch ROUTE_ID add-orders`,"Adiciona pedidos \xE0 rota manual ativa; a rota pode j\xE1 ter iniciado.","JSON obrigat\xF3rio: barcodes; reason opcional",!0]]);a(["carrier"],[["carrier desktop providers list","Lista providers publicados para ativa\xE7\xE3o; depende das permiss\xF5es da sess\xE3o."],["carrier desktop providers PROVIDER_ID activate","Ativa a integra\xE7\xE3o Desktop ap\xF3s confirmar o UUID do provider; n\xE3o habilita automaticamente a entrada de pedidos. Exige autoriza\xE7\xE3o da conta.",null,!0],["carrier desktop grants GRANT_ID flow-installations list","Consulta fluxos dispon\xEDveis e instala\xE7\xF5es do grant autorizado pelo Core."],["carrier desktop grants GRANT_ID flow-installations create","Instala um fluxo no grant; exige autoriza\xE7\xE3o e confirma\xE7\xE3o do grant.","JSON obrigat\xF3rio: flow_id; opcionais: connection_id, base_id, trigger, trigger_key, schedule, timezone, enabled, policies. O Core valida os gatilhos e agendamentos",!0],["carrier desktop flow-installations INSTALLATION_ID update","Altera uma instala\xE7\xE3o ap\xF3s confirmar seu UUID; o Core valida escopo, pol\xEDticas e concorr\xEAncia de vers\xE3o.","JSON parcial: enabled, schedule, timezone, policies, flow_version_id, expected_current_version_id. Para trocar vers\xE3o, informe a vers\xE3o atual esperada",!0],["carrier desktop flow-installations INSTALLATION_ID run","Enfileira um fluxo autorizado. 201 com execu\xE7\xE3o queued n\xE3o comprova conclus\xE3o; acompanhe por carrier desktop executions EXECUTION_ID show.","JSON obrigat\xF3rio: idempotency_key (16 a 128 caracteres) e input (objeto). Preserve os mesmos dados e a chave nos retries",!0],["carrier desktop grants GRANT_ID order-import-batches create","Importa um lote da execu\xE7\xE3o e dispositivo autorizados. Confirma o grant e preserva o receipt de idempot\xEAncia.","JSON obrigat\xF3rio: idempotency_key, execution_id, device_id, records (at\xE9 100 itens com external_id, order_requested_at, destination_address e packages_count); next_cursor e checkpoint opcionais. A chave \xE9 enviada em Idempotency-Key",!0],["carrier desktop grants GRANT_ID extractions preview","Obt\xE9m pr\xE9via estruturada de uma p\xE1gina autorizada. Confirma o grant, sem persistir pedidos.","JSON obrigat\xF3rio: run_id, base_id, flow_version=1, page_url, instruction, fields e snapshot. N\xE3o passe o conte\xFAdo da p\xE1gina em argumentos de shell",!0],["carrier desktop grants list","Lista integra\xE7\xF5es Desktop autorizadas para a transportadora."],["carrier desktop orders list [shipper_id=UUID] [base_id=UUID] [query=X] [cursor=X] [status_sync=true]","Lista pedidos can\xF4nicos da integra\xE7\xE3o Desktop dentro das bases autorizadas."],["carrier desktop orders ORDER_ID show","Consulta um pedido can\xF4nico da integra\xE7\xE3o Desktop."],["carrier desktop orders refresh","Enfileira atualiza\xE7\xE3o de pedidos selecionados no provedor; 202 \xE9 aceita\xE7\xE3o, n\xE3o conclus\xE3o.","JSON obrigat\xF3rio: order_ids (1 a 100 UUIDs) e idempotency_key (16 a 128 caracteres)",!0],["carrier desktop orders resync","Enfileira ressincroniza\xE7\xE3o dos pedidos selecionados; 202 \xE9 aceita\xE7\xE3o, n\xE3o conclus\xE3o.","JSON obrigat\xF3rio: order_ids (1 a 100 UUIDs) e idempotency_key (16 a 128 caracteres)",!0],["carrier desktop sync-runs list [shipper_id=UUID] [base_id=UUID] [connection_id=UUID] [device_id=X] [order_id=UUID] [status=X] [cursor=X]","Lista execu\xE7\xF5es de sincroniza\xE7\xE3o Desktop."],["carrier desktop sync-runs RUN_ID show","Consulta uma execu\xE7\xE3o de sincroniza\xE7\xE3o Desktop."],["carrier desktop sync-runs RUN_ID cancel","Cancela uma execu\xE7\xE3o ativa de sincroniza\xE7\xE3o Desktop.",null,!0],["carrier desktop executions EXECUTION_ID show","Consulta uma execu\xE7\xE3o Desktop pelo identificador."],["carrier desktop executions EXECUTION_ID candidates list [device_id=X] [cursor=X]","Lista candidatos de sincroniza\xE7\xE3o ap\xF3s a execu\xE7\xE3o assumir o dispositivo."],["carrier desktop executions EXECUTION_ID known-ids","Consulta no Core quais pedidos externos j\xE1 s\xE3o conhecidos.","JSON obrigat\xF3rio: device_id e external_orders; cada item usa external_id e external_base_code"],["carrier desktop executions EXECUTION_ID receipt device_id=X batch_key=CHAVE","Consulta o receipt conclu\xEDdo de um lote de importa\xE7\xE3o Desktop."],["carrier desktop operation-routes list","Lista rotas publicadas de recebimento Desktop no escopo da transportadora."],["carrier desktop operation-routes publish","Publica uma nova revis\xE3o da opera\xE7\xE3o Desktop na base.","JSON: base_id, shipper_id, operation_kind e target=core|flow; para flow, bindings com installation_id e requirement=required|optional; handler_key conforme a opera\xE7\xE3o Core",!0],["carrier desktop operation-contexts open","Abre contexto de recebimento e retorna context_token para as leituras.","JSON: base_id, shipper_id, operation_kind=sack_receipt|package_receipt, mode=fast|standard, device_id"],["carrier desktop operation-contexts SESSION_ID close","Encerra contexto de recebimento Desktop.",null,!0],["carrier desktop operation-scans batch","Aceita lote idempotente de leituras f\xEDsicas; cada resultado informa accepted, duplicate ou erro.","JSON: context_token e scans (1 a 100 itens com scan_id, barcode, occurred_at; association opcional)",!0],["carrier desktop operation-runs list [base_id=UUID] [shipper_id=UUID] [operation_kind=X] [device_id=X] [monitor=true|false] [cursor=X] [limit=N]","Lista resultados de recebimento do pr\xF3prio dispositivo ou o monitor da transportadora; device_id \xE9 obrigat\xF3rio sem monitor=true."],["carrier desktop operation-runs FLOW_RUN_ID retry","Reenfileira um fluxo de recebimento terminal usando a vers\xE3o publicada atual.",null,!0],["carrier desktop operation-runs retry-batch","Reenfileira de 1 a 100 fluxos de recebimento terminais.","JSON obrigat\xF3rio: flow_run_ids (UUIDs)",!0],["carrier desktop flow-actions ACTION_KEY run","Enfileira uma a\xE7\xE3o Desktop nomeada para uma base; 202 \xE9 aceita\xE7\xE3o, n\xE3o conclus\xE3o.","JSON obrigat\xF3rio: shipper_id, base_id, input (objeto) e idempotency_key",!0]]),a(["admin"],[["admin financial payment-profiles create","Cria perfil e publica a vers\xE3o de forma s\xEDncrona; pode desativar o perfil ativo do mesmo contexto/base/carrier. Exige autoriza\xE7\xE3o da sess\xE3o. Confirma o UUID de base, origem, owner ou client, ou payment-profiles quando ausentes; retorna o envelope Core.","JSON stdin obrigat\xF3rio: profile_mode=shipper_owned|carrier_managed|driver_self_managed e configuration (objeto opaco validado pelo Core). Opcionais: shipper_account_id, base_id (operacionais), client_id, origin_id, reference_shipper_id, reference_carrier_id (financeiros), owner_user_id, origin_name, origin_address, name, period_type, start_day, end_day, invoice_day, payment_day (inteiros ou null), active, is_default (booleanos), reference_payer_label, currency. Zeros, null e strings decimais da configuration s\xE3o preservados",!0],["admin financial carrier-margins ORIGIN_ID upsert","Substitui a regra ativa do par carrier/origem financeira, preservando hist\xF3rico no Core. S\xEDncrono; exige autoriza\xE7\xE3o, confirma ORIGIN_ID e retorna o envelope Core. ORIGIN_ID vem de data.origin.id do perfil, n\xE3o do base_id operacional.","JSON stdin obrigat\xF3rio: carrier_id (UUID financeiro), margin_percent (n\xFAmero ou string decimal, sem convers\xE3o; faixa validada pelo Core). origin_id opcional deve corresponder ao path; o body enviado usa ORIGIN_ID. Zero \xE9 v\xE1lido",!0]]);for(const e of["carrier","admin"]){const r=e==="carrier"?"carrier operations":"admin operations CARRIER_ID";a([e],[[`${r} config show`,"Consulta configura\xE7\xE3o operacional; o Core verifica ACL e retorna erro se ela ainda n\xE3o existir."],[`${r} config update`,"Atualiza parcialmente a configura\xE7\xE3o ap\xF3s confirmar a conta; exige carrier_clients.manage ou physical_receiving.manage no Core. Campos omitidos s\xE3o preservados.","JSON: um ou mais de integration_type=upload|proceda, order_entry_mode=upload|proceda, status_query_mode=disabled, receiving_enabled, dispatch_enabled, routing_enabled, quotation_enabled (booleanos), status=active|inactive, metadata (objeto). O Core deriva os modos quando aplic\xE1vel",!0]])}for(const[e,r]of[["carrier","carrier"],["admin","admin operations CARRIER_ID"]])a([e],[[`${r} shippers list`,"Lista embarcadores geridos pela transportadora."],[`${r} shippers create`,"Cria ou reutiliza embarcador vinculado \xE0 transportadora.","JSON: legal_name e document ou issuing_country_code + legal_identifier; trading_name opcional",!0],[`${r} shippers SHIPPER_ID bases list`,"Lista bases do embarcador vinculado."],[`${r} shippers SHIPPER_ID bases create`,"Cria ou reutiliza base do embarcador vinculado.","JSON: code, name; market_id, endere\xE7o, timezone, triage_rules, balancing_policy e metadata opcionais",!0],[`${r} status-outbox [sink_type=X] [shipper_id=UUID] [adapter_type=X]`,"Consulta eventos de status enviados ou pendentes da transportadora."]]);for(const e of["admin","carrier","shipper"])a([e],[[`${e} orders imports preview ARQUIVO [shipper_id=UUID] [base_id=UUID]`,"Pr\xE9via de CSV, XLS, XLSX ou PDF local antes da importa\xE7\xE3o."],[`${e} orders imports create ARQUIVO`,"Cria lote de importa\xE7\xE3o; a resposta \xE9 enfileiramento, consulte o lote para o resultado.",`JSON: base_id${e==="shipper"?"":", shipper_id"} obrigat\xF3rios; column_mapping e import_context opcionais`,!0],[`${e} orders imports BATCH_ID show [include_orders=true|false]`,"Consulta estado e resultado do lote."],[`${e} orders imports BATCH_ID source-preview`,"Consulta pr\xE9via da origem do lote."],[`${e} orders imports BATCH_ID orders list [limit=N] [cursor=X] [search=X] [geocode_status=X] [only_errors=true|false]`,"Lista pedidos do lote."],[`${e} orders imports BATCH_ID orders ORDER_ID update`,"Corrige endere\xE7o ou destinat\xE1rio de um pedido do lote.","JSON: um ou mais de destination_address, destination_street, destination_number, destination_neighborhood, destination_city, destination_state, destination_postal_code, destination_complement, recipient_name, recipient_phone, nfe_key",!0],[`${e} orders imports BATCH_ID remap`,"Cria novo lote com mapeamento corrigido; consulte o lote retornado.","JSON: column_mapping ou import_context como objeto",!0],[`${e} orders imports BATCH_ID requeue-geocode`,"Reenfileira geocode do lote; 202 n\xE3o prova conclus\xE3o.",null,!0],[`${e} orders ORDER_ID retry-geocode`,"Reexecuta geocode de um pedido vis\xEDvel ao papel ativo.","JSON: raw_address com pelo menos 3 caracteres",!0]]);a(["admin"],[["admin triage batches list [limit=N] [cursor=X] [search=X]","Lista lotes de importa\xE7\xE3o para triagem; search cobre ID, status, origem, arquivo, embarcador e base."],["admin triage batches BATCH_ID show","Consulta o lote, relat\xF3rio, runtime e candidatos de rota."],["admin triage batches BATCH_ID run","Enfileira a triagem do lote; 202 \xE9 aceita\xE7\xE3o, n\xE3o conclus\xE3o.",null,!0],["admin triage batches BATCH_ID orders ORDER_ID update","Corrige endere\xE7o de um pedido com falha de triagem e invalida candidatos antigos.","JSON obrigat\xF3rio: destination_address; destination_lat e destination_lng opcionais",!0]]);for(const e of["admin","carrier","shipper"])a([e],[[`${e} routes list [limit=N] [cursor=X] [status=X] [search=X]${e==="admin"?" [source_type=X] [operation_mode=X]":e==="carrier"?" [shipper_id=UUID] [base_id=UUID]":" [base_id=UUID]"}`,"Lista rotas operacionais vis\xEDveis ao papel ativo."],...e==="shipper"?[["shipper route-candidates list [base_id=UUID] [status=X]","Lista candidatos de planejamento da conta shipper; consulta s\xEDncrona, sem confirma\xE7\xE3o. Os par\xE2metros base_id/status n\xE3o filtram os resultados nesta vers\xE3o; n\xE3o h\xE1 pagina\xE7\xE3o por cursor."]]:e==="carrier"?[["carrier route-candidates list","Lista candidatos de planejamento atribu\xEDdos \xE0 conta carrier; consulta s\xEDncrona, sem confirma\xE7\xE3o."]]:[],[`${e} routes ROUTE_ID show`,"Consulta rota operacional vis\xEDvel."],...e==="carrier"?[[`${e} routes ROUTE_ID assign-driver`,"Atribui motorista eleg\xEDvel \xE0 rota candidata da transportadora.","JSON obrigat\xF3rio: driver_user_id",!0]]:[],[`${e} route-candidates CANDIDATE_ID publish`,"Publica candidato como SavedRoute operacional; o Core valida readiness, blockers e ACL.","JSON opcional: override booleano e reason obrigat\xF3rio quando override=true",!0],...["admin","shipper"].includes(e)?[[`${e} route-candidates CANDIDATE_ID reassign-stop`,"Move um ponto para outro candidato antes da publica\xE7\xE3o.","JSON obrigat\xF3rio: stop_id e target_route_candidate_id; reason opcional",!0],[`${e} route-candidates CANDIDATE_ID ai-assist`,"Solicita ou consulta assist\xEAncia de rearranjo do candidato; 202 significa processamento.",`${e==="admin"?"JSON obrigat\xF3rio":"JSON opcional"}: objective`,!0]]:[],...e==="admin"?[[`${e} route-candidates CANDIDATE_ID assign-driver`,"Atribui motorista vinculado \xE0 transportadora do candidato.","JSON obrigat\xF3rio: carrier_account_id e driver_user_id",!0]]:[],[`${e} workbench scopes`,"Lista escopos do workbench."],[`${e} workbench show batch_id=UUID`,"Consulta workbench pelo lote."],[`${e} workbench show shipper_account_id=UUID base_id=UUID`,"Consulta workbench pela base."],[`${e} workbench run`,"Executa workbench; 202 \xE9 aceita\xE7\xE3o, n\xE3o conclus\xE3o.","JSON: shipper_account_id, base_id",!0],[`${e} workbench refresh-quotation`,"Atualiza a cota\xE7\xE3o da workbench; 202 \xE9 aceita\xE7\xE3o, n\xE3o conclus\xE3o.","JSON: shipper_account_id, base_id",!0],[`${e} tower cockpit batch_id=UUID`,"Consulta cockpit pelo lote."],[`${e} tower cockpit shipper_account_id=UUID base_id=UUID`,"Consulta cockpit pela base."]]);a(["shipper"],[["shipper route show PUBLIC_ID","Consulta uma rota operacional do embarcador."]]),a(["admin"],[["admin routes ROUTE_ID assign-driver","Atribui motorista \xE0 rota conforme ACL e estado do Core.","JSON obrigat\xF3rio: driver_user_id; reason opcional",!0],["admin routes ROUTE_ID pause|cancel|reopen","Altera estado da rota conforme ACL do Core.","JSON: reason, notes e occurrence_type opcionais",!0],["admin routes ROUTE_ID occurrence","Registra ocorr\xEAncia na rota.","JSON obrigat\xF3rio: notes; reason e occurrence_type opcionais",!0],["admin tower overview","Consulta vis\xE3o geral da torre."],["admin tower failure-reasons catalog","Consulta cat\xE1logo de motivos de insucesso."]]),a(["driver"],[["driver tower validate","Valida DANFE e recebe assist_token de uso \xFAnico.","JSON: nf_key obrigat\xF3rio; reason opcional",!0],["driver tower assist","Consulta enriquecimento com token de validate; retorna query_id.","JSON: assist_token obrigat\xF3rio; reason e force_refresh opcionais",!0],["driver tower fallback","Consulta enriquecimento por documento informado; retorna query_id.","JSON: document obrigat\xF3rio; reason e force_refresh opcionais",!0],["driver tower queries QUERY_ID show","Consulta resultado de enriquecimento pr\xF3prio."]]);for(const e of["driver","carrier"])a([e],[[`${e} tower chat open`,"Abre ou retoma thread de rota e parada autorizadas.","JSON: route_id e waypoint_id obrigat\xF3rios; driver_user_id opcional",!0],[`${e} tower chat thread THREAD_ID messages`,"Consulta mensagens da thread autorizada."],[`${e} tower chat thread THREAD_ID send`,"Envia mensagem \xE0 thread autorizada.","JSON: body obrigat\xF3rio; message_type e metadata opcionais",!0]]);for(const e of["carrier","shipper"])a([e],[[`${e} tower failure-reasons policy show`,"Consulta policy de insucesso efetiva da pr\xF3pria conta."],[`${e} tower failure-reasons policy set`,"Altera policy de insucesso da pr\xF3pria conta.","JSON: reason_codes (lista de c\xF3digos)",!0]]);a(["carrier"],[["carrier tower chat thread THREAD_ID authorize","Gera c\xF3digo de uso \xFAnico para insucesso autorizado.",null,!0]]),a(["admin"],[["admin tower chat threads","Lista threads operacionais vis\xEDveis \xE0 ACL."],["admin tower chat thread THREAD_ID messages","Consulta mensagens da thread."],["admin tower chat thread THREAD_ID send","Envia mensagem \xE0 thread.","JSON: body obrigat\xF3rio; message_type e metadata opcionais",!0],["admin tower chat thread THREAD_ID authorize","Gera c\xF3digo de autoriza\xE7\xE3o de insucesso.",null,!0],["admin tower failure-reasons shippers SHIPPER_ID show","Consulta policy de insucesso do embarcador."],["admin tower failure-reasons shippers SHIPPER_ID set","Altera policy de insucesso do embarcador.","JSON: reason_codes (lista de c\xF3digos)",!0],["admin tower failure-reasons carriers CARRIER_ID show","Consulta policy de insucesso da transportadora."],["admin tower failure-reasons carriers CARRIER_ID set","Altera policy de insucesso da transportadora.","JSON: reason_codes (lista de c\xF3digos)",!0]]);for(const e of["driver","admin","carrier","shipper"])a([e],[[`${e} tower failure-reasons catalog-global [search=X]`,"Consulta s\xEDncrona do cat\xE1logo global de motivos; sem confirma\xE7\xE3o, gera\xE7\xE3o ou consumo de autoriza\xE7\xE3o."]]);function b(e,r){const o=e.startsWith("[")?e.slice(1,-1):e;return o.split("|").includes(r)?0:/^[A-Z][A-Z0-9_]*$/.test(o)||o.includes("=")&&o.split("=")[0]===r.split("=")[0]&&/^[A-Z][A-Z0-9_]*$/.test(o.split("=")[1])?1:1/0}n(b,"matchToken");function D(e=[]){const r=e.filter(Boolean),o=u.map(i=>{const{usage:p}=i,d=p.slice(6).split(" "),l=r.reduce((m,_,c)=>m+(d[c]?b(d[c],_):1/0),0);return{command:i,score:l}}),t=Math.min(...o.map(({score:i})=>i));if(!Number.isFinite(t))return null;const s=o.filter(({score:i})=>i===t).map(({command:i})=>i);return s.length?{data:{query:r.join(" "),authorization:"Papel ativo da sess\xE3o; o Core aplica grants internos, membership, m\xF3dulos, bases e ACL a cada chamada.",input:"Objetos JSON de muta\xE7\xE3o s\xE3o enviados por stdin. Confirma\xE7\xF5es exigem terminal interativo; n\xE3o passe secrets em argumentos.",commands:s}}:null}n(D,"commandHelp");export{D as commandHelp};
1
+ var v=Object.defineProperty;var t=(e,r)=>v(e,"name",{value:r,configurable:!0});import{globalHelp as g}from"./global.js";const u=[],a=t((e,r)=>{for(const[o,n,s,i]of r)u.push({usage:`genne ${o}`,roles:e,description:n,...s?{input:s}:{},...i?{confirmation:"terminal interativo"}:{}})},"add");a(["public"],[["help [CAMINHO]","Lista comandos ou detalha um caminho, sem autentica\xE7\xE3o."],["login","Autoriza uma sess\xE3o CLI pelo navegador em Prod por padr\xE3o; herda o papel e a conta selecionados na sess\xE3o que aprova."],["env show","Mostra a origem API (Prod por padr\xE3o ou GENNE_API_URL) e a disponibilidade da sess\xE3o salva, sem expor credenciais."],["users driver register","Cadastra uma conta de motorista.","JSON: name, email, password, phone E.164, registration_market_code BR|US"],["auth membership-invitations accept","Aceita convite de v\xEDnculo B2B; identidade j\xE1 ativa pode enviar s\xF3 token.","JSON obrigat\xF3rio: token; para ativar identidade convidada, name, phone E.164, password, registration_market_code BR|US; cpf opcional"],["password forgot","Solicita recupera\xE7\xE3o de senha.","JSON: email"],["password reset","Redefine senha com o c\xF3digo recebido.","JSON: email, code, password"]]),a(["public"],g),a(["driver","admin","carrier","shipper"],[["whoami","Mostra identidade, papel ativo e, para cliente B2B, conta selecionada."],["users me","Consulta o resumo do pr\xF3prio usu\xE1rio."],["user me","Consulta o resumo do pr\xF3prio usu\xE1rio."],["user me update","Atualiza o pr\xF3prio perfil.","JSON: name, phone, vehicle_type, navigation_app_preference"],["user me photo","Envia a pr\xF3pria foto.","JSON: path para JPG, PNG, WebP, HEIC ou HEIF at\xE9 6 MiB"],["user me email-change request","Solicita troca do pr\xF3prio email.","JSON: current_password, new_email"],["user me email-change confirm","Confirma troca de email e encerra as sess\xF5es.","JSON: code",!0],["user me deletion-request","Solicita exclus\xE3o dos pr\xF3prios dados.","JSON: accepted_terms=true",!0],["password change","Altera a pr\xF3pria senha.","JSON: current_password, new_password"],["logout","Revoga a sess\xE3o CLI salva."],["session logout","Revoga a sess\xE3o atual."],["session logout-all","Revoga todas as sess\xF5es da identidade.",null,!0]]),a(["carrier"],[["user me driver-access enable","Habilita motorista para o pr\xF3prio owner carrier ativo. Preserva a empresa; altera\xE7\xE3o efetiva encerra suas sess\xF5es e exige genne login. Ap\xF3s timeout, fa\xE7a login e consulte user me antes de repetir.","JSON em stdin: current_password obrigat\xF3rio; confirma o UUID da pr\xF3pria identidade",!0]]),a(["driver"],[["users driver carriers invitations list [status=S] [limit=N] [cursor=X]","Lista convites do motorista; status=pending|accepted|declined|cancelled|expired, limit=1..100 (padr\xE3o 20), cursor opaco."],["users driver carriers invitations show INVITATION_ID","Consulta identidade da carrier, validade e estado can\xF4nico do pr\xF3prio convite."],["users driver carriers invitations accept INVITATION_ID","Aceita convite e cria v\xEDnculo com a transportadora. Retry com a mesma chave preserva resultado; decis\xE3o oposta gera conflito. N\xE3o altera prefer\xEAncia ou outras carriers.","JSON em stdin: idempotency_key (Unicode v\xE1lido sem U+0000, 1 a 128 codepoints), sem normaliza\xE7\xE3o; header Idempotency-Key para ASCII printable sem espa\xE7os nas bordas, body idempotency_key para os demais valores",!0],["users driver carriers invitations decline INVITATION_ID","Recusa convite sem criar v\xEDnculo; retry com a mesma chave preserva resultado. Consulte show ap\xF3s conflito.","JSON em stdin: idempotency_key (Unicode v\xE1lido sem U+0000, 1 a 128 codepoints), sem normaliza\xE7\xE3o; header Idempotency-Key para ASCII printable sem espa\xE7os nas bordas, body idempotency_key para os demais valores",!0],["users driver profile","Consulta o resumo do pr\xF3prio cadastro de motorista."],["users driver carriers list","Lista v\xEDnculos com transportadoras."],["users driver carriers link","Vincula-se por c\xF3digo da transportadora.","JSON: driver_link_code (5 caracteres)",!0],["users driver carriers unlink CARRIER_ID","Remove um v\xEDnculo com transportadora.",null,!0],["users driver carriers preference","Define prefer\xEAncia de rota.","JSON: preference=independent_driver|carrier_direct; carrier_account_id se carrier_direct",!0],["driver profile show","Consulta cadastro operacional, prontid\xE3o GR, treinamento e estado dos documentos pr\xF3prios."],["driver profile draft","Salva rascunho do cadastro; campos opcionais conforme etapa.","JSON: personal_document_type, personal_document_number, personal_document_value, issuing_country_code, cpf, cnpj, mei_cnpj, cnh_number, cnh_state, cnh_security_code, naturalness, whatsapp_phone, emergency_whatsapp, emergency_contact_relationship, has_antt, antt_status, ownership_pending, has_vehicle, vehicle_owner_is_driver, vehicle_profile, vehicle_plate_state, vehicle_plate_city, vehicle_fleet_number, vehicle_axle_count, vehicle_bodywork, transportadora_client, client, operation_base, magazine_base, operation_state, operation_city, operation_region, operation_notes, has_mei, no_mei, mei_absence_reason, referral_whatsapp, residential_street, residential_number, residential_complement, residential_neighborhood, residential_city, residential_state, residential_postal_code, training_watched (booleano); documents opcional com caminhos cnh, crlv, antt, ownership_document, selfie, address_proof (PDF/JPG/PNG at\xE9 12 MiB)"],["driver profile complete","Envia cadastro completo; o Core valida a completude.","JSON: mesmos campos e documents de driver profile draft; consulte genne help driver profile draft"],["driver profile revalidate BLOCK","Revalida cnh, cnpj_mei, vehicle, residential_address, operation_preferences ou antt."],["driver profile mei consult","Consulta o CNPJ MEI do titular.","JSON: cnpj (14 d\xEDgitos)"],["driver profile mei confirm","Confirma o CNPJ MEI do titular.","JSON: cnpj (14 d\xEDgitos)"],["driver payout requirements BR|US","Consulta contrato de dados banc\xE1rios por mercado."],["driver payout accounts BR|US","Consulta repasse mascarado e vers\xE3o de proje\xE7\xE3o."],["driver payout primary","Substitui conta prim\xE1ria de repasse com controle de vers\xE3o e idempot\xEAncia.","JSON obrigat\xF3rio: market_code BR|US, rail bank_transfer|ach, requirements_version, expected_projection_version, account_number, account_type, holder_name, idempotency_key; opcionais: institution_identifier, branch_identifier, routing_number, holder_type, holder_document_type/value, holder_phone",!0],["driver market-context set","Seleciona a base operacional ou o mercado independente do motorista.","JSON: scope_type=shipper_base|carrier_base e scope_id=UUID, ou scope_type=independent e market_id=UUID"]]),a(["driver"],[["driver places search CONSULTA","Busca endere\xE7os para obter place_id no mercado do motorista."],["driver places details PLACE_ID","Resolve o lugar escolhido em endere\xE7o e coordenadas; confira o resultado antes de salvar."],["driver routes list [limit=N] [cursor=X] [status=X] [is_favorite=X] [date_from=X] [date_to=X] [search=X]","Lista SavedRoutes do motorista; status=open|completed|closed, is_favorite=true|false e datas AAAA-MM-DD."],["driver routes plan create","Enfileira planejamento com endere\xE7os ou waypoints; optimize=true \xE9 opcional e 202 retorna plan_public_id sem criar SavedRoute.","JSON: locations ou waypoints (2 a 500 itens), cada item pode ser endere\xE7o ou objeto com address/lat/lng; optimize, optimize_start, optimize_end, return_to_start, current_location e vehicle_type opcionais",!0],["driver routes plan JOB_ID show","Consulta o job de planejamento at\xE9 status completed ou failed; use os waypoints e a geometria conclu\xEDdos para criar o draft."],["driver routes imports preview ARQUIVO [persist_order_id_choice=true|false] [column_mapping=JSON]","Pr\xE9via de CSV, XLS, XLSX ou PDF local at\xE9 50 MiB; n\xE3o cria rota. Envie o arquivo original, inclusive sem cabe\xE7alho. Se data.ai_inference.status for failed em resposta de sucesso, a pr\xE9via continua utiliz\xE1vel: revise as colunas e repita com column_mapping=JSON. Erros de processamento 422 conhecidos retornam error.code, error.message seguro e error.data.reason/stage."],["driver routes draft create","Cria draft manual_app. Informe origem pura e paradas; use places details para preencher coordenadas.","JSON: name e waypoints obrigat\xF3rios; waypoints com type, address e, quando resolvidos, lat/lng; return_to_start e driver_payment_profile_public_id opcionais",!0],["driver routes ROUTE_ID show","Consulta SavedRoute, waypoints, manifesto e estado de execu\xE7\xE3o."],["driver routes ROUTE_ID waypoints set","Salva a lista completa de waypoints execut\xE1veis; preserve IDs e manifesto da rota operacional.","JSON: waypoints (lista completa com type; id para pontos existentes, sequence, address, lat/lng, stop_kind, reference_kind e demais campos execut\xE1veis)",!0],["driver routes ROUTE_ID coordinates validate","Verifica localmente as coordenadas dos waypoints salvos; endere\xE7o sozinho n\xE3o basta para otimizar."],["driver routes ROUTE_ID optimize","Enfileira otimiza\xE7\xE3o de waypoints com coordenadas; 202 retorna optimize_public_id e n\xE3o altera a SavedRoute.",null,!0],["driver optimization JOB_ID show","Consulta job de otimiza\xE7\xE3o at\xE9 status completed ou failed."],["driver routes ROUTE_ID optimize apply JOB_ID","Aplica ordem e geometria de job completed; o Core rejeita a escrita se a rota mudar ap\xF3s a leitura.","JSON: expected_waypoint_ids e expected_updated_at exibidos em routes ROUTE_ID show antes de otimizar",!0],["driver routes ROUTE_ID calculate","Enfileira c\xE1lculo sem otimizar; 202 retorna calculate_public_id e n\xE3o altera a SavedRoute.",null,!0],["driver calculation JOB_ID show","Consulta job de c\xE1lculo at\xE9 status completed ou failed."],["driver routes ROUTE_ID calculate apply JOB_ID","Aplica geometria de c\xE1lculo completed sem mudar a sequ\xEAncia; o Core rejeita snapshot alterado.","JSON: expected_waypoint_ids e expected_updated_at exibidos em routes ROUTE_ID show antes de calcular",!0],["driver routes ROUTE_ID start","Inicia execu\xE7\xE3o da SavedRoute pr\xF3pria ap\xF3s revisar rota e cota\xE7\xE3o aplic\xE1vel.",null,!0],["driver routes ROUTE_ID reactivate","Reabre uma rota manual antiga para o dia civil atual; rota operacional exige o fluxo B2B.",null,!0],["driver routes ROUTE_ID clone","Clona a SavedRoute pr\xF3pria em um novo draft, preservando waypoints e reiniciando execu\xE7\xE3o.",null,!0],["driver routes ROUTE_ID waypoints WAYPOINT_ID failure-policy","Consulta motivos de insucesso e exig\xEAncia de autoriza\xE7\xE3o do waypoint."],["driver routes ROUTE_ID waypoints WAYPOINT_ID notes","Atualiza a observa\xE7\xE3o da parada pr\xF3pria; string vazia limpa a observa\xE7\xE3o.","JSON: notes (string)",!0],["driver routes ROUTE_ID waypoints WAYPOINT_ID packages","Atualiza a quantidade de pacotes da parada; o Core recusa manifesto gerido por importa\xE7\xE3o.","JSON: packages_count (inteiro n\xE3o negativo)",!0],["driver routes ROUTE_ID waypoints WAYPOINT_ID navigation start","Registra o evento de in\xEDcio de navega\xE7\xE3o; n\xE3o abre um navegador ou aplicativo de mapas.","JSON: {} ou navigation_provider, nav_sdk_version, boot_duration_ms, waypoint_index e packages_count opcionais",!0],["driver routes ROUTE_ID waypoints WAYPOINT_ID items ITEM_ID enrich","Consulta os dados do item a partir da DANFE importada.",null,!0],["driver routes ROUTE_ID waypoints WAYPOINT_ID check-in","Registra a posi\xE7\xE3o informada para o check-in da parada; o Core calcula dist\xE2ncia e alerta.","JSON obrigat\xF3rio: lat e lng num\xE9ricos; accuracy_meters opcional",!0],["driver routes ROUTE_ID waypoints WAYPOINT_ID status","Registra baixa de waypoint; failed exige motivo e observa\xE7\xE3o.","JSON: status=pending|delivered|failed; para failed, failure_reason_code, failure_observation e failure_authorization_code se exigido",!0],["driver routes ROUTE_ID waypoints WAYPOINT_ID items ITEM_ID status","Registra baixa de item do manifesto.","JSON: status=pending|delivered|failed; para failed, failure_reason_code, failure_observation e failure_authorization_code se exigido",!0],["driver routes ROUTE_ID finish","Conclui rota pr\xF3pria depois que os waypoints exigidos tiverem baixa.",null,!0]]),a(["admin"],[["admin whatsapp messages list [limit=N] [cursor=X] [peer=E164] [direction=inbound|outbound]","Lista mensagens WhatsApp no escopo autorizado pelo Core. Somente a sess\xE3o com papel ativo admin pode usar o comando."],["admin whatsapp messages get MESSAGE_ID","Consulta uma mensagem WhatsApp pelo ID p\xFAblico."],["admin whatsapp messages events [limit=N] [cursor=X]","Consulta o feed dur\xE1vel de eventos WhatsApp; preserve meta.next_cursor para retomar a escuta."],["admin whatsapp messages listen [cursor=X] [limit=N]","Escuta eventos WhatsApp em JSONL por polling, emitindo o cursor individual de cada evento para retomada segura; meta.next_cursor s\xF3 avan\xE7a ap\xF3s o batch. Ctrl-C encerra e informa o \xFAltimo cursor; timeout de rede \xE9 repetido com backoff, mas 403 n\xE3o \xE9 repetido."],["admin whatsapp messages send","Envia texto WhatsApp para uma janela de atendimento v\xE1lida. 202/queued significa aceito para processamento, n\xE3o entregue; repita a mesma idempotency_key somente para confirmar um timeout amb\xEDguo.","JSON: to (telefone E.164 ou somente d\xEDgitos), text (1 a 4096 caracteres), idempotency_key (16 a 128 caracteres), reply_to opcional ID Meta (at\xE9 255 caracteres)",!0],["--non-interactive admin whatsapp messages send","Envia texto WhatsApp sem confirma\xE7\xE3o de terminal para uso expl\xEDcito por agente; a sess\xE3o ainda precisa ter papel ativo admin e a ACL efetiva \xE9 do Core.","JSON: mesmo contrato de admin whatsapp messages send"],["users admin list [limit=N] [cursor=X] [role=R] [search=X]","Lista usu\xE1rios vis\xEDveis \xE0 ACL interna."],["users admin show USER_ID","Consulta um usu\xE1rio."],["users admin driver-profile DRIVER_ID show","Consulta perfil operacional autorizado de um motorista."],["users admin driver-profile DRIVER_ID update","Corrige campos operacionais do motorista.","JSON: reason e profile com operation_base, operation_state, operation_city, operation_region, operation_notes, work_status, work_status_active, has_vehicle, vehicle_profile, vehicle_plate_state, vehicle_plate_city, vehicle_fleet_number, vehicle_axle_count, vehicle_bodywork",!0],["users drivers list [limit=N] [cursor=X] [search=X] [status=S] [carrier_account_id=UUID] [shipper_account_id=UUID]","Lista o diret\xF3rio de motoristas."],["admin users create","Cria usu\xE1rio; admin comum nasce staff sem grants.","JSON: name, email, password, phone E.164, registration_market_code BR|US, is_internal opcional",!0],["admin users USER_ID update","Atualiza usu\xE1rio.","JSON: um ou mais de name, email, phone, is_internal",!0],["admin users USER_ID block|unblock","Bloqueia ou desbloqueia usu\xE1rio.",null,!0],["admin users USER_ID roles","Altera pap\xE9is da identidade.","JSON: roles, reason",!0],["admin users USER_ID driver-access enable","Habilita motorista para um owner carrier ativo. Exige autoriza\xE7\xE3o de suporte; encerra as sess\xF5es do alvo e preserva a sess\xE3o do executor. J\xE1 habilitado retorna changed=false.","JSON em stdin: reason obrigat\xF3rio; confirma o UUID da identidade alvo",!0],["admin users USER_ID password","Redefine senha de usu\xE1rio.","JSON: password, reason",!0],["admin users USER_ID delete","Exclui usu\xE1rio ap\xF3s pr\xE9via; depend\xEAncias bloqueiam a exclus\xE3o.","JSON: email do usu\xE1rio",!0],["admin privacy preview","Consulta pr\xE9via de exclus\xE3o sem expor a inten\xE7\xE3o.","JSON: user_id ou email"],["admin privacy requests","Lista pedidos de exclus\xE3o."],["admin privacy requests status REQUEST_ID","Marca status de pedido; excluido n\xE3o prova apagamento.","JSON: new_status=solicitado|excluido|nao_ha_dados",!0],["access catalog","Consulta cat\xE1logo de permiss\xF5es internas."],["access accounts list [account_type=carrier|shipper] [limit=N] [cursor=X] [search=X]","Lista contas no escopo da ACL interna."],["access members list [status=X] [membership_role=X] [carrier_account_id=UUID] [shipper_account_id=UUID] [limit=N] [cursor=X] [search=X]","Lista v\xEDnculos B2B vis\xEDveis."],["access internal list","Lista acesso de usu\xE1rios internos."],["access internal show USER_ID","Consulta grants internos de um usu\xE1rio."],["access internal set USER_ID","Altera ACL interna conforme grants do ator.","JSON: access com admin_access_level ou permission_keys",!0],["access account ACCOUNT_ID members","Lista membros da conta."],["access account ACCOUNT_ID members create","Convida membro para a conta.","JSON: member com email, membership_role, workspace_role",!0],["access account ACCOUNT_ID members MEMBERSHIP_ID update","Atualiza v\xEDnculo do membro.","JSON: member com status, membership_role, workspace_role ou metadata",!0],["access account ACCOUNT_ID members MEMBERSHIP_ID resend-invitation","Reenvia convite pendente.",null,!0],["access account ACCOUNT_ID entitlements","Consulta m\xF3dulos da conta."],["access account ACCOUNT_ID entitlements set","Altera m\xF3dulos da conta.","JSON: access.module_keys",!0],["access account ACCOUNT_ID member-access MEMBERSHIP_ID","Consulta permiss\xF5es do membro."],["access account ACCOUNT_ID member-access MEMBERSHIP_ID set","Altera permiss\xF5es do membro.","JSON: access.permission_keys",!0],["access account ACCOUNT_ID member-bases MEMBERSHIP_ID","Consulta bases do membro."],["access account ACCOUNT_ID member-bases MEMBERSHIP_ID set","Altera bases do membro.","JSON: access.base_ids",!0]]),a(["carrier","shipper"],[["company my-account show","Consulta a empresa da sess\xE3o."],["company my-account update","Atualiza dados permitidos da empresa da sess\xE3o.","JSON: um ou mais de legal_name, trading_name, document, issuing_country_code, legal_identifier, contact_points, addresses",!0],["access my-account catalog","Consulta cat\xE1logo de permiss\xF5es B2B."],["access my-account members","Lista membros da conta da sess\xE3o."],["access my-account members create","Convida membro para a conta da sess\xE3o.","JSON: member com email e membership_role",!0],["access my-account members MEMBERSHIP_ID update","Atualiza v\xEDnculo de membro.","JSON: member com status, membership_role ou metadata",!0],["access my-account members MEMBERSHIP_ID resend-invitation","Reenvia convite pendente.",null,!0],["access my-account entitlements","Consulta m\xF3dulos da conta da sess\xE3o."],["access my-account entitlements set","Altera m\xF3dulos conforme a ACL B2B.","JSON: access.module_keys",!0],["access my-account member-access MEMBERSHIP_ID","Consulta permiss\xF5es do membro."],["access my-account member-access MEMBERSHIP_ID set","Altera permiss\xF5es do membro.","JSON: access.permission_keys",!0]]),a(["carrier"],[["users carrier drivers invitations create","Envia convite por CPF para motorista registrado. Exige m\xF3dulo carrier_driver_invitations ativo e permiss\xE3o manage no Core; nenhum grant \xE9 autom\xE1tico. Retorna convite pending, n\xE3o v\xEDnculo. Retry deve reutilizar chave e CPF.","JSON em stdin: cpf (string), idempotency_key (Unicode v\xE1lido sem U+0000, 1 a 128 codepoints), sem normaliza\xE7\xE3o; header Idempotency-Key para ASCII printable sem espa\xE7os nas bordas, body idempotency_key para os demais valores; CPF n\xE3o \xE9 argumento de shell",!0],["users carrier drivers invitations list [status=S] [limit=N] [cursor=X]","Lista convites da conta ativa com CPF mascarado; Core exige m\xF3dulo ativo e view OU manage. status=pending|accepted|declined|cancelled|expired, limit=1..100 (padr\xE3o 20), cursor opaco."],["users carrier drivers invitations show INVITATION_ID","Consulta convite da conta ativa com CPF mascarado; Core exige m\xF3dulo ativo e view OU manage."],["users carrier drivers invitations cancel INVITATION_ID","Cancela convite pendente da conta ativa; Core exige m\xF3dulo ativo e manage. Retry reutiliza a chave; consulte show ap\xF3s conflito.","JSON em stdin: idempotency_key (Unicode v\xE1lido sem U+0000, 1 a 128 codepoints), sem normaliza\xE7\xE3o; header Idempotency-Key para ASCII printable sem espa\xE7os nas bordas, body idempotency_key para os demais valores",!0],["users carrier drivers list [base_id=UUID] [limit=N] [cursor=X] [search=X]","Lista motoristas da transportadora."],["users carrier drivers link DRIVER_USER_ID","Consulta v\xEDnculo com motorista."],["users carrier drivers link DRIVER_USER_ID set-bases","Altera bases do v\xEDnculo.","JSON: base_ids",!0]]),a(["admin"],[["admin support threads list [status=open|closed] [limit=N] [cursor=X]","Lista conversas de suporte."],["admin support threads THREAD_ID messages [limit=N] [cursor=X]","Consulta mensagens da conversa."],["admin support threads THREAD_ID reply","Mostra at\xE9 100 mensagens antes da resposta; pagine o hist\xF3rico se houver mais.","JSON: body (1 a 4000 caracteres)",!0],["admin support threads THREAD_ID close","Fecha a conversa ap\xF3s pr\xE9via e confirma\xE7\xE3o pelo UUID. Exige messaging.manage no Core; resultado s\xEDncrono.","Sem JSON de entrada",!0],["admin support threads THREAD_ID reopen","Reabre a conversa ap\xF3s pr\xE9via e confirma\xE7\xE3o pelo UUID. Exige messaging.manage no Core; resultado s\xEDncrono.","Sem JSON de entrada",!0],["admin feedbacks list [status=S] [user_id=UUID] [order=recent|votes|oldest] [limit=N] [cursor=X]","Lista feedbacks."],["admin feedbacks show FEEDBACK_ID","Consulta feedback."],["admin feedbacks comments FEEDBACK_ID [limit=N] [cursor=X]","Lista coment\xE1rios."],["admin feedbacks delete FEEDBACK_ID","Exclui permanentemente o feedback ap\xF3s pr\xE9via e confirma\xE7\xE3o pelo UUID. O Core exige feedbacks.manage; HTTP 204 confirma conclus\xE3o.","Sem JSON de entrada; n\xE3o h\xE1 restore de feedback",!0],["admin feedbacks comments FEEDBACK_ID COMMENT_ID delete","Oculta o coment\xE1rio do feedback ap\xF3s pr\xE9via e confirma\xE7\xE3o pelo UUID do coment\xE1rio. O Core verifica v\xEDnculo e feedbacks.manage; HTTP 204 confirma conclus\xE3o.","Sem JSON de entrada",!0],["admin feedbacks comments FEEDBACK_ID COMMENT_ID restore","Restaura um coment\xE1rio oculto do feedback ap\xF3s pr\xE9via e confirma\xE7\xE3o pelo UUID do coment\xE1rio. O Core verifica v\xEDnculo e feedbacks.manage; HTTP 204 confirma conclus\xE3o.","Sem JSON de entrada",!0],["admin feedbacks comment FEEDBACK_ID key=CHAVE","Comenta com chave idempotente de 16 a 255 caracteres.","JSON: content, image_url opcional",!0],["admin feedbacks status FEEDBACK_ID key=CHAVE","Solicita mudan\xE7a de status; 202 pending exige consulta do receipt. Reuse chave e payload no retry.","JSON: new_status=pending|in_progress|prioritized|resolved|canceled|duplicate; closing_comment_id e reason opcionais",!0],["admin feedbacks receipt FEEDBACK_ID RECEIPT_ID","Consulta o resultado de uma mudan\xE7a terminal."],["admin crm assignees","Lista respons\xE1veis eleg\xEDveis por leads."],["admin crm leads list [status=S] [search=X] [limit=N] [cursor=X]","Lista leads."],["admin crm leads show LEAD_ID","Consulta lead e eventos."],["admin crm leads LEAD_ID status","Altera status do lead.","JSON: new_status=novo|em_contato|qualificado|perdido|convertido",!0],["admin crm leads LEAD_ID note","Adiciona nota ao lead.","JSON: note",!0],["admin crm leads LEAD_ID assign","Atribui respons\xE1vel eleg\xEDvel.","JSON: admin_id",!0],["admin notifications list [limit=N] [cursor=X]","Lista notifica\xE7\xF5es."],["admin notifications show MESSAGE_GROUP_ID","Consulta processamento e destinat\xE1rios autorizados."],["admin notifications send","Enfileira notifica\xE7\xE3o individual; 202 n\xE3o prova entrega.","JSON: user_id, title, body; action_url e action_label opcionais",!0],["admin blog posts list [locale=pt-BR|en|es] [translation_group_id=UUID]","Lista posts, inclusive rascunhos."],["admin blog posts create key=CHAVE","Cria post com idempot\xEAncia; chave est\xE1vel de 16 a 255 caracteres.","JSON obrigat\xF3rio: slug, title, description, author, category, content_markdown, content_html; opcionais: locale, tags, cover_image_url, published",!0],["--non-interactive admin blog posts create key=CHAVE","Exce\xE7\xE3o exclusiva do Growth para criar post sem confirma\xE7\xE3o no terminal; n\xE3o libera outras muta\xE7\xF5es.","JSON: mesmo contrato de admin blog posts create"],["admin blog posts POST_ID update","Atualiza post com If-Match.","JSON: version e campos alterados",!0],["admin blog posts POST_ID publish|unpublish version=N","Altera publica\xE7\xE3o com vers\xE3o esperada.",null,!0],["admin blog posts POST_ID delete","Exclui post.",null,!0],["admin blog images upload ARQUIVO","Envia imagem PNG, JPEG, WebP ou GIF at\xE9 8 MiB.",null,!0],["admin faqs list [path=X] [route_key=X] [locale=pt-BR|en|es] [category=X] [featured=true|false] [q=X]","Lista FAQs, inclusive rascunhos."],["admin faqs create key=CHAVE","Cria FAQ com idempot\xEAncia; chave est\xE1vel de 16 a 255 caracteres.","JSON obrigat\xF3rio: question, answer, category, paths ou route_keys; opcionais: locale, tags, featured_on_home, position, published",!0],["admin faqs FAQ_ID update","Atualiza FAQ com If-Match.","JSON: version e campos alterados",!0],["admin faqs FAQ_ID publish|unpublish version=N","Altera publica\xE7\xE3o com vers\xE3o esperada.",null,!0],["admin faqs FAQ_ID delete","Exclui FAQ.",null,!0],["admin companies list [account_type=carrier|shipper] [search=X] [limit=N] [cursor=X]","Lista empresas B2B."],["admin companies show BUSINESS_ACCOUNT_ID","Consulta empresa pelo ID jur\xEDdico; IDs operacionais de shipper/carrier s\xE3o distintos."],["admin companies consult","Consulta dados cadastrais de uma empresa pelo CNPJ. Retorna CNPJ, nomes e endere\xE7o, sem confirma\xE7\xE3o.","JSON em stdin: cnpj (string) e user_id opcional (UUID)"],["admin companies onboard-existing-user","Registra usu\xE1rio ativo existente como owner da conta carrier; o Core valida empresa, membership e ACL. Retorna empresa, v\xEDnculo, m\xF3dulos ativos e email_delivery.status=disabled|pending|sent|failed.","JSON em stdin: user_id (UUID), cnpj (string), send_email (booleano opcional; padr\xE3o false)",!0],["admin companies onboarding-users list [search=X] [limit=N] [cursor=X]","Lista identidades ativas de pap\xE9is can\xF4nicos para onboarding; exige business_accounts_registry.manage no Core e retorna somente user_id, nome, email e status."],["admin companies create","Cria empresa B2B.","JSON obrigat\xF3rio: legal_name e document ou issuing_country_code+legal_identifier; opcionais: trading_name, status, account_type, account_types, contact_points, addresses",!0],["admin companies BUSINESS_ACCOUNT_ID update","Atualiza empresa B2B.","JSON: um ou mais de legal_name, trading_name, document, issuing_country_code, legal_identifier, status, account_type, account_types, contact_points, addresses",!0],["admin shippers OPERATIONAL_ACCOUNT_ID bases list","Lista bases do embarcador."],["admin shippers OPERATIONAL_ACCOUNT_ID bases create","Cria base do embarcador.","JSON: market_id, country_code, currency_code, timezone, code, name e endere\xE7o",!0],["admin shippers OPERATIONAL_ACCOUNT_ID bases BASE_ID update|deactivate|reactivate","Altera ou ativa/desativa base do embarcador; update recebe JSON.","JSON para update: code, name, origin_address, origin_lat, origin_lng, postal_code, place_id, street, street_number, neighborhood, city, state, state_code, country, geocode_provider, timezone, triage_rules, balancing_policy, metadata",!0],["admin shippers|carriers OPERATIONAL_ACCOUNT_ID bases BASE_ID cutoff-windows set","Substitui todos os hor\xE1rios de corte no timezone da base; windows=[] limpa. Resultado s\xEDncrono; a CLI confirma no terminal, MCP remoto exige aprova\xE7\xE3o Core. Base shipper com execu\xE7\xF5es vinculadas \xE9 recusada com 409 cutoff_dispatches_exist.","JSON: windows (lista de weekday 0..6, cutoff_time HH:MM[:SS], auto_publish opcional)",!0],["admin shippers|carriers OPERATIONAL_ACCOUNT_ID bases BASE_ID service-area set|clear","Substitui ou remove a cobertura regional da base.","JSON para set: reference_zone_public_ids (lista de UUIDs)",!0],["admin shippers|carriers OPERATIONAL_ACCOUNT_ID bases BASE_ID region-groups create","Cria agrupamento nomeado de regi\xF5es para a base.","JSON: name, reference_zone_public_ids (lista de UUIDs)",!0],["admin shippers|carriers OPERATIONAL_ACCOUNT_ID bases BASE_ID zone-overrides list","Consulta zonas efetivas salvas da base; verifica a refer\xEAncia \xE0 conta operacional; depende das permiss\xF5es da sess\xE3o. Resultado s\xEDncrono, sem JSON ou confirma\xE7\xE3o."],["admin shippers OPERATIONAL_ACCOUNT_ID bases BASE_ID carrier-shares list","Consulta distribui\xE7\xE3o configurada de carriers da base shipper; verifica a refer\xEAncia \xE0 conta operacional; depende das permiss\xF5es da sess\xE3o. Resultado s\xEDncrono, sem JSON ou confirma\xE7\xE3o."],["admin carriers OPERATIONAL_ACCOUNT_ID bases list","Lista bases da transportadora."],["admin carriers OPERATIONAL_ACCOUNT_ID bases create","Cria base da transportadora.","JSON: market_id, country_code, currency_code, timezone, code, name e endere\xE7o",!0],["admin carriers OPERATIONAL_ACCOUNT_ID bases BASE_ID update|deactivate|reactivate","Altera ou ativa/desativa base da transportadora; update recebe JSON.","JSON para update: code, name, origin_address, origin_lat, origin_lng, postal_code, place_id, street, street_number, neighborhood, city, state, state_code, country, geocode_provider, timezone, triage_rules",!0]]),a(["carrier"],[["carrier bases BASE_ID reference-zone-features list [limit=N] [cursor=X] [search=X] [min_lng=X] [min_lat=X] [max_lng=X] [max_lat=X] [include_geometry=true|false]","Consulta cat\xE1logo OSM de refer\xEAncia para base pr\xF3pria da conta carrier ativa, conforme as permiss\xF5es da sess\xE3o; n\xE3o \xE9 cobertura operacional salva. Resultado s\xEDncrono com meta de pagina\xE7\xE3o, sem JSON ou confirma\xE7\xE3o."]]),a(["shipper"],[["shipper bases list","Lista as bases da conta embarcadora ativa."],["shipper bases create","Cria uma base na conta embarcadora ativa.","JSON obrigat\xF3rio: code, name; opcionais: origin_address, origin_lat, origin_lng, timezone, triage_rules, metadata",!0],["shipper bases BASE_ID carrier-shares list","Lista a distribui\xE7\xE3o de carriers configurada na base."],["shipper bases BASE_ID carrier-shares create","Adiciona share de carrier \xE0 base.","JSON: carrier_account_id, target_share_percent; quality_weight, priority_order e allocation_enabled opcionais",!0],["shipper bases BASE_ID carrier-shares replace","Substitui a distribui\xE7\xE3o de carriers da base.","JSON: carriers (lista de carrier_account_id, target_share_percent e campos opcionais)",!0],["shipper bases BASE_ID reference-zone-features list [limit=N] [cursor=X] [search=X] [min_lng=X] [min_lat=X] [max_lng=X] [max_lat=X] [include_geometry=true|false]","Lista fei\xE7\xF5es de refer\xEAncia para compor a cobertura da base."],["shipper bases BASE_ID reference-zone-features merge","Mescla fei\xE7\xF5es de refer\xEAncia em uma zona da base.","JSON: reference_zone_public_ids (lista de UUIDs); code e name opcionais",!0]]);for(const e of["admin","carrier"])a([e],[[`${e} gr provider-definitions list`,"Lista providers GR dispon\xEDveis no papel ativo."],[`${e} gr providers list [${e==="admin"?"carrier_account_id=UUID] [":""}provider_key=X] [status=X] [limit=N] [cursor=X]${e==="carrier"?" [search=X]":""}`,"Lista contas de providers GR no papel ativo."],[`${e} gr providers create`,"Cria conta de provider GR; credenciais s\xE3o aceitas somente via stdin.",`JSON: provider_key=m3risk|angellira, provider_label, mode=crawler|api|ftp|browser|api_jwt; status, config e credentials opcionais${e==="admin"?"; carrier_account_id ou carrier_account_public_id obrigat\xF3rio":""}`,!0],[`${e} gr providers PROVIDER_ID update`,"Atualiza conta de provider GR no escopo da sess\xE3o.","JSON: provider_label, mode, status, config e/ou credentials",!0],[`${e} gr providers PROVIDER_ID test`,"Testa a configura\xE7\xE3o da conta GR e retorna o healthcheck.",null,!0],[`${e} gr providers PROVIDER_ID operations`,"Descobre opera\xE7\xF5es expostas pela conta GR."],[`${e} gr providers PROVIDER_ID mappings list [active=true|false]`,"Lista mapeamentos de opera\xE7\xE3o da conta GR."],[`${e} gr providers PROVIDER_ID mappings upsert`,"Cria ou atualiza mapeamento de opera\xE7\xE3o GR.","JSON: operation_key, provider_client_id; provider_client_label, metadata e active opcionais",!0],[`${e} gr requests list [provider_key=X] [status=X] [phase=X] [operation_key=X] [search=X] [limit=N] [cursor=X]${e==="admin"?" [carrier_account_id=UUID]":""}`,"Lista solicita\xE7\xF5es GR no escopo da sess\xE3o."],[`${e} gr requests create`,"Enfileira solicita\xE7\xE3o GR; 202 n\xE3o prova conclus\xE3o.","JSON: driver_profile_id, provider_account_id, operation_key; priority opcional",!0],[`${e} gr requests REQUEST_ID show`,"Consulta solicita\xE7\xE3o GR."],[`${e} gr requests REQUEST_ID attempts|evidence|orchestration-events [limit=N] [cursor=X]`,"Consulta hist\xF3rico da solicita\xE7\xE3o GR."],[`${e} gr requests REQUEST_ID retry|verify|cancel`,"Altera solicita\xE7\xE3o GR conforme ACL e estado do Core.",null,!0],[`${e} gr requests REQUEST_ID confirm-recovery`,"Confirma a revis\xE3o exata de opera\xE7\xF5es de escrita ap\xF3s a pr\xE9via read-only.","JSON: recovery_revision, operations",!0],[`${e} gr requests REQUEST_ID operation`,"Seleciona opera\xE7\xE3o ativa para solicita\xE7\xE3o legada antes de qualquer escrita externa.","JSON: operation_key (UUID da base operacional)",!0],[`${e} gr requests REQUEST_ID personal-declarations`,"Atualiza declara\xE7\xF5es pessoais criptografadas e agenda reconcilia\xE7\xE3o.","JSON: sex=male|female|other e/ou marital_status=single|married|divorced|widowed|other",!0]]);a(["admin"],[["admin gr provider-definitions PROVIDER_ID update","Atualiza defini\xE7\xE3o global do provider GR; infraestrutura global continua restrita ao Admin.","JSON: provider_label, mode, status e/ou config com base_url, runner_url, runner_command",!0]]),a(["admin"],[["admin gr carriers CARRIER_ID dashboard","Consulta resumo GR da transportadora."],["admin gr drivers [carrier_account_id=UUID] [limit=N] [cursor=X] [provider_account_id=UUID] [search=X] [document=X] [status=X] [training_pending=true|false]","Consulta diret\xF3rio GR global, incluindo motoristas sem v\xEDnculo; depende das permiss\xF5es da sess\xE3o."],["admin gr carriers CARRIER_ID drivers [limit=N] [cursor=X] [provider_account_id=UUID] [search=X] [document=X] [status=X] [training_pending=true|false]","Consulta motoristas GR da transportadora."],["admin gr carriers CARRIER_ID blacklist list [limit=N] [cursor=X] [search=X]","Lista v\xEDnculos de motoristas bloqueados na transportadora."],["admin gr carriers CARRIER_ID links LINK_ID blacklist|unblock","Bloqueia ou desbloqueia v\xEDnculo; bloquear cancela solicita\xE7\xF5es GR abertas.",null,!0],["admin gr carriers CARRIER_ID links LINK_ID manual-approval","Aprova ou revoga GR externo somente nesse v\xEDnculo e transportadora; exige autoriza\xE7\xE3o e confirma\xE7\xE3o do LINK_ID. Retorna manual_approval com autor e data.",'JSON obrigat\xF3rio: {"approved":true} para aprovar ou {"approved":false} para revogar; CARRIER_ID e LINK_ID s\xE3o UUIDs p\xFAblicos',!0],["admin gr carriers CARRIER_ID drivers PROFILE_ID export","Consulta o perfil e a prontid\xE3o GR do motorista vinculado."],["admin gr carriers CARRIER_ID drivers PROFILE_ID documents TYPE reprocess","Reprocessa documento j\xE1 armazenado; 202 n\xE3o prova conclus\xE3o.","TYPE=cnh|crlv|address_proof|antt|ownership_document; JSON: {} ou document_id, registration_request_id e/ou requirements_revision",!0],["admin gr driver-profiles PROFILE_ID show","Consulta detalhe GR do motorista no escopo Admin."],["admin gr driver-profiles PROFILE_ID training","Registra se o treinamento GR foi assistido.","JSON obrigat\xF3rio: training_watched=true|false",!0]]),a(["carrier"],[["carrier gr dashboard","Consulta resumo GR da pr\xF3pria transportadora."],["carrier gr drivers [limit=N] [cursor=X] [provider_account_id=UUID] [search=X] [document=X] [status=X] [training_pending=true|false]","Consulta motoristas GR da pr\xF3pria transportadora."],["carrier gr blacklist list [limit=N] [cursor=X] [search=X]","Lista v\xEDnculos de motoristas bloqueados na pr\xF3pria transportadora."],["carrier gr links LINK_ID blacklist|unblock","Bloqueia ou desbloqueia v\xEDnculo pr\xF3prio; bloquear cancela solicita\xE7\xF5es GR abertas.",null,!0],["carrier gr links LINK_ID manual-approval","Aprova ou revoga GR externo no v\xEDnculo da transportadora da sess\xE3o; exige autoriza\xE7\xE3o e confirma\xE7\xE3o do LINK_ID. Retorna manual_approval com autor e data.",'JSON obrigat\xF3rio: {"approved":true} para aprovar ou {"approved":false} para revogar; LINK_ID \xE9 o UUID p\xFAblico do v\xEDnculo',!0],["carrier gr drivers PROFILE_ID export","Consulta o perfil e a prontid\xE3o GR do motorista vinculado."],["carrier gr drivers PROFILE_ID documents TYPE reprocess","Reprocessa documento j\xE1 armazenado; 202 n\xE3o prova conclus\xE3o.","TYPE=cnh|crlv|address_proof|antt|ownership_document; JSON: {} ou document_id, registration_request_id e/ou requirements_revision",!0],["carrier gr driver-profiles PROFILE_ID training","Registra se o treinamento GR foi assistido para motorista vinculado.","JSON obrigat\xF3rio: training_watched=true|false",!0]]);for(const[e,r]of[["carrier","carrier"],["admin","admin operations CARRIER_ID"]])a([e],[[`${r} orders lookup BARCODE`,"Consulta pedido por c\xF3digo."],[`${r} orders upsert`,"Cria ou atualiza pedido.","JSON obrigat\xF3rio: source_type=upload|proceda, external_id, postal_code, destination_address; opcionais: shipper_id, base_id, primary_barcode, aliases, destination_lat, destination_lng, destination_complement, geocode, recipient_name, recipient_doc, recipient_phone, packages_count, raw_payload, metadata",!0],[`${r} receiving scan`,"Registra recebimento ap\xF3s consultar o pedido.","JSON obrigat\xF3rio: barcode; opcionais: shipper_id, base_id, metadata",!0],[`${r} receiving rules list`,"Lista regras de recebimento."],[`${r} receiving rules create`,"Cria regra de recebimento global, por embarcador ou por base.","JSON obrigat\xF3rio: code, name, postal_code_start, postal_code_end; opcionais: shipper_id, base_id, priority_order, status, metadata. IDs s\xE3o UUIDs p\xFAblicos; sem shipper_id/base_id, a regra \xE9 global",!0],[`${r} receiving rules RULE_ID update`,"Atualiza parcialmente uma regra de recebimento.","JSON: um ou mais de shipper_id, base_id, code, name, postal_code_start, postal_code_end, priority_order, status, metadata. Campos omitidos s\xE3o preservados. base_id:null remove a base; shipper_id:null e base_id:null tornam a regra global",!0],[`${r} dispatch create`,"Expede pedidos ao motorista.","JSON: driver_user_id, barcodes; route_name/metadata opcionais",!0],[`${r} dispatch ROUTE_ID add-orders`,"Adiciona pedidos \xE0 rota manual ativa; a rota pode j\xE1 ter iniciado.","JSON obrigat\xF3rio: barcodes; reason opcional",!0]]);a(["carrier"],[["carrier desktop providers list","Lista providers publicados para ativa\xE7\xE3o; depende das permiss\xF5es da sess\xE3o."],["carrier desktop providers PROVIDER_ID activate","Ativa a integra\xE7\xE3o Desktop ap\xF3s confirmar o UUID do provider; n\xE3o habilita automaticamente a entrada de pedidos. Exige autoriza\xE7\xE3o da conta.",null,!0],["carrier desktop grants GRANT_ID flow-installations list","Consulta fluxos dispon\xEDveis e instala\xE7\xF5es do grant autorizado pelo Core."],["carrier desktop grants GRANT_ID flow-installations create","Instala um fluxo no grant; exige autoriza\xE7\xE3o e confirma\xE7\xE3o do grant.","JSON obrigat\xF3rio: flow_id; opcionais: connection_id, base_id, trigger, trigger_key, schedule, timezone, enabled, policies. O Core valida os gatilhos e agendamentos",!0],["carrier desktop flow-installations INSTALLATION_ID update","Altera uma instala\xE7\xE3o ap\xF3s confirmar seu UUID; o Core valida escopo, pol\xEDticas e concorr\xEAncia de vers\xE3o.","JSON parcial: enabled, schedule, timezone, policies, flow_version_id, expected_current_version_id. Para trocar vers\xE3o, informe a vers\xE3o atual esperada",!0],["carrier desktop flow-installations INSTALLATION_ID run","Enfileira um fluxo autorizado. 201 com execu\xE7\xE3o queued n\xE3o comprova conclus\xE3o; acompanhe por carrier desktop executions EXECUTION_ID show.","JSON obrigat\xF3rio: idempotency_key (16 a 128 caracteres) e input (objeto). Preserve os mesmos dados e a chave nos retries",!0],["carrier desktop grants GRANT_ID order-import-batches create","Importa um lote da execu\xE7\xE3o e dispositivo autorizados. Confirma o grant e preserva o receipt de idempot\xEAncia.","JSON obrigat\xF3rio: idempotency_key, execution_id, device_id, records (at\xE9 100 itens com external_id, order_requested_at, destination_address e packages_count); next_cursor e checkpoint opcionais. A chave \xE9 enviada em Idempotency-Key",!0],["carrier desktop grants GRANT_ID extractions preview","Obt\xE9m pr\xE9via estruturada de uma p\xE1gina autorizada. Confirma o grant, sem persistir pedidos.","JSON obrigat\xF3rio: run_id, base_id, flow_version=1, page_url, instruction, fields e snapshot. N\xE3o passe o conte\xFAdo da p\xE1gina em argumentos de shell",!0],["carrier desktop grants list","Lista integra\xE7\xF5es Desktop autorizadas para a transportadora."],["carrier desktop orders list [shipper_id=UUID] [base_id=UUID] [query=X] [cursor=X] [status_sync=true]","Lista pedidos can\xF4nicos da integra\xE7\xE3o Desktop dentro das bases autorizadas."],["carrier desktop orders ORDER_ID show","Consulta um pedido can\xF4nico da integra\xE7\xE3o Desktop."],["carrier desktop orders refresh","Enfileira atualiza\xE7\xE3o de pedidos selecionados no provedor; 202 \xE9 aceita\xE7\xE3o, n\xE3o conclus\xE3o.","JSON obrigat\xF3rio: order_ids (1 a 100 UUIDs) e idempotency_key (16 a 128 caracteres)",!0],["carrier desktop orders resync","Enfileira ressincroniza\xE7\xE3o dos pedidos selecionados; 202 \xE9 aceita\xE7\xE3o, n\xE3o conclus\xE3o.","JSON obrigat\xF3rio: order_ids (1 a 100 UUIDs) e idempotency_key (16 a 128 caracteres)",!0],["carrier desktop sync-runs list [shipper_id=UUID] [base_id=UUID] [connection_id=UUID] [device_id=X] [order_id=UUID] [status=X] [cursor=X]","Lista execu\xE7\xF5es de sincroniza\xE7\xE3o Desktop."],["carrier desktop sync-runs RUN_ID show","Consulta uma execu\xE7\xE3o de sincroniza\xE7\xE3o Desktop."],["carrier desktop sync-runs RUN_ID cancel","Cancela uma execu\xE7\xE3o ativa de sincroniza\xE7\xE3o Desktop.",null,!0],["carrier desktop executions EXECUTION_ID show","Consulta uma execu\xE7\xE3o Desktop pelo identificador."],["carrier desktop executions EXECUTION_ID candidates list [device_id=X] [cursor=X]","Lista candidatos de sincroniza\xE7\xE3o ap\xF3s a execu\xE7\xE3o assumir o dispositivo."],["carrier desktop executions EXECUTION_ID known-ids","Consulta no Core quais pedidos externos j\xE1 s\xE3o conhecidos.","JSON obrigat\xF3rio: device_id e external_orders; cada item usa external_id e external_base_code"],["carrier desktop executions EXECUTION_ID receipt device_id=X batch_key=CHAVE","Consulta o receipt conclu\xEDdo de um lote de importa\xE7\xE3o Desktop."],["carrier desktop operation-routes list","Lista rotas publicadas de recebimento Desktop no escopo da transportadora."],["carrier desktop operation-routes publish","Publica uma nova revis\xE3o da opera\xE7\xE3o Desktop na base.","JSON: base_id, shipper_id, operation_kind e target=core|flow; para flow, bindings com installation_id e requirement=required|optional; handler_key conforme a opera\xE7\xE3o Core",!0],["carrier desktop operation-contexts open","Abre contexto de recebimento e retorna context_token para as leituras.","JSON: base_id, shipper_id, operation_kind=sack_receipt|package_receipt, mode=fast|standard, device_id"],["carrier desktop operation-contexts SESSION_ID close","Encerra contexto de recebimento Desktop.",null,!0],["carrier desktop operation-scans batch","Aceita lote idempotente de leituras f\xEDsicas; cada resultado informa accepted, duplicate ou erro.","JSON: context_token e scans (1 a 100 itens com scan_id, barcode, occurred_at; association opcional)",!0],["carrier desktop operation-runs list [base_id=UUID] [shipper_id=UUID] [operation_kind=X] [device_id=X] [monitor=true|false] [cursor=X] [limit=N]","Lista resultados de recebimento do pr\xF3prio dispositivo ou o monitor da transportadora; device_id \xE9 obrigat\xF3rio sem monitor=true."],["carrier desktop operation-runs FLOW_RUN_ID retry","Reenfileira um fluxo de recebimento terminal usando a vers\xE3o publicada atual.",null,!0],["carrier desktop operation-runs retry-batch","Reenfileira de 1 a 100 fluxos de recebimento terminais.","JSON obrigat\xF3rio: flow_run_ids (UUIDs)",!0],["carrier desktop flow-actions ACTION_KEY run","Enfileira uma a\xE7\xE3o Desktop nomeada para uma base; 202 \xE9 aceita\xE7\xE3o, n\xE3o conclus\xE3o.","JSON obrigat\xF3rio: shipper_id, base_id, input (objeto) e idempotency_key",!0]]),a(["admin"],[["admin financial payment-profiles create","Cria perfil e publica a vers\xE3o de forma s\xEDncrona; pode desativar o perfil ativo do mesmo contexto/base/carrier. Exige autoriza\xE7\xE3o da sess\xE3o. Confirma o UUID de base, origem, owner ou client, ou payment-profiles quando ausentes; retorna o envelope Core.","JSON stdin obrigat\xF3rio: profile_mode=shipper_owned|carrier_managed|driver_self_managed e configuration (objeto opaco validado pelo Core). Opcionais: shipper_account_id, base_id (operacionais), client_id, origin_id, reference_shipper_id, reference_carrier_id (financeiros), owner_user_id, origin_name, origin_address, name, period_type, start_day, end_day, invoice_day, payment_day (inteiros ou null), active, is_default (booleanos), reference_payer_label, currency. Zeros, null e strings decimais da configuration s\xE3o preservados",!0],["admin financial carrier-margins ORIGIN_ID upsert","Substitui a regra ativa do par carrier/origem financeira, preservando hist\xF3rico no Core. S\xEDncrono; exige autoriza\xE7\xE3o, confirma ORIGIN_ID e retorna o envelope Core. ORIGIN_ID vem de data.origin.id do perfil, n\xE3o do base_id operacional.","JSON stdin obrigat\xF3rio: carrier_id (UUID financeiro), margin_percent (n\xFAmero ou string decimal, sem convers\xE3o; faixa validada pelo Core). origin_id opcional deve corresponder ao path; o body enviado usa ORIGIN_ID. Zero \xE9 v\xE1lido",!0]]);for(const e of["carrier","admin"]){const r=e==="carrier"?"carrier operations":"admin operations CARRIER_ID";a([e],[[`${r} config show`,"Consulta configura\xE7\xE3o operacional; o Core verifica ACL e retorna erro se ela ainda n\xE3o existir."],[`${r} config update`,"Atualiza parcialmente a configura\xE7\xE3o ap\xF3s confirmar a conta; exige carrier_clients.manage ou physical_receiving.manage no Core. Campos omitidos s\xE3o preservados.","JSON: um ou mais de integration_type=upload|proceda, order_entry_mode=upload|proceda, status_query_mode=disabled, receiving_enabled, dispatch_enabled, routing_enabled, quotation_enabled (booleanos), status=active|inactive, metadata (objeto). O Core deriva os modos quando aplic\xE1vel",!0]])}for(const[e,r]of[["carrier","carrier"],["admin","admin operations CARRIER_ID"]])a([e],[[`${r} shippers list`,"Lista embarcadores geridos pela transportadora."],[`${r} shippers create`,"Cria ou reutiliza embarcador vinculado \xE0 transportadora.","JSON: legal_name e document ou issuing_country_code + legal_identifier; trading_name opcional",!0],[`${r} shippers SHIPPER_ID bases list`,"Lista bases do embarcador vinculado."],[`${r} shippers SHIPPER_ID bases create`,"Cria ou reutiliza base do embarcador vinculado.","JSON: code, name; market_id, endere\xE7o, timezone, triage_rules, balancing_policy e metadata opcionais",!0],[`${r} status-outbox [sink_type=X] [shipper_id=UUID] [adapter_type=X]`,"Consulta eventos de status enviados ou pendentes da transportadora."]]);for(const e of["admin","carrier","shipper"])a([e],[[`${e} orders imports preview ARQUIVO [shipper_id=UUID] [base_id=UUID]`,"Pr\xE9via de CSV, XLS, XLSX ou PDF local antes da importa\xE7\xE3o."],[`${e} orders imports create ARQUIVO`,"Cria lote de importa\xE7\xE3o; a resposta \xE9 enfileiramento, consulte o lote para o resultado.",`JSON: base_id${e==="shipper"?"":", shipper_id"} obrigat\xF3rios; column_mapping e import_context opcionais`,!0],[`${e} orders imports BATCH_ID show [include_orders=true|false]`,"Consulta estado e resultado do lote."],[`${e} orders imports BATCH_ID source-preview`,"Consulta pr\xE9via da origem do lote."],[`${e} orders imports BATCH_ID orders list [limit=N] [cursor=X] [search=X] [geocode_status=X] [only_errors=true|false]`,"Lista pedidos do lote."],[`${e} orders imports BATCH_ID orders ORDER_ID update`,"Corrige endere\xE7o ou destinat\xE1rio de um pedido do lote.","JSON: um ou mais de destination_address, destination_street, destination_number, destination_neighborhood, destination_city, destination_state, destination_postal_code, destination_complement, recipient_name, recipient_phone, nfe_key",!0],[`${e} orders imports BATCH_ID remap`,"Cria novo lote com mapeamento corrigido; consulte o lote retornado.","JSON: column_mapping ou import_context como objeto",!0],[`${e} orders imports BATCH_ID requeue-geocode`,"Reenfileira geocode do lote; 202 n\xE3o prova conclus\xE3o.",null,!0],[`${e} orders ORDER_ID retry-geocode`,"Reexecuta geocode de um pedido vis\xEDvel ao papel ativo.","JSON: raw_address com pelo menos 3 caracteres",!0]]);a(["admin"],[["admin triage batches list [limit=N] [cursor=X] [search=X]","Lista lotes de importa\xE7\xE3o para triagem; search cobre ID, status, origem, arquivo, embarcador e base."],["admin triage batches BATCH_ID show","Consulta o lote, relat\xF3rio, runtime e candidatos de rota."],["admin triage batches BATCH_ID run","Enfileira a triagem do lote; 202 \xE9 aceita\xE7\xE3o, n\xE3o conclus\xE3o.",null,!0],["admin triage batches BATCH_ID orders ORDER_ID update","Corrige endere\xE7o de um pedido com falha de triagem e invalida candidatos antigos.","JSON obrigat\xF3rio: destination_address; destination_lat e destination_lng opcionais",!0]]);for(const e of["admin","carrier","shipper"])a([e],[[`${e} routes list [limit=N] [cursor=X] [status=X] [search=X]${e==="admin"?" [source_type=X] [operation_mode=X]":e==="carrier"?" [shipper_id=UUID] [base_id=UUID]":" [base_id=UUID]"}`,"Lista rotas operacionais vis\xEDveis ao papel ativo."],...e==="shipper"?[["shipper route-candidates list [base_id=UUID] [status=X]","Lista candidatos de planejamento da conta shipper; consulta s\xEDncrona, sem confirma\xE7\xE3o. Os par\xE2metros base_id/status n\xE3o filtram os resultados nesta vers\xE3o; n\xE3o h\xE1 pagina\xE7\xE3o por cursor."]]:e==="carrier"?[["carrier route-candidates list","Lista candidatos de planejamento atribu\xEDdos \xE0 conta carrier; consulta s\xEDncrona, sem confirma\xE7\xE3o."]]:[],[`${e} routes ROUTE_ID show`,"Consulta rota operacional vis\xEDvel."],...e==="carrier"?[[`${e} routes ROUTE_ID assign-driver`,"Atribui motorista eleg\xEDvel \xE0 rota candidata da transportadora.","JSON obrigat\xF3rio: driver_user_id",!0]]:[],[`${e} route-candidates CANDIDATE_ID publish`,"Publica candidato como SavedRoute operacional; o Core valida readiness, blockers e ACL.","JSON opcional: override booleano e reason obrigat\xF3rio quando override=true",!0],...["admin","shipper"].includes(e)?[[`${e} route-candidates CANDIDATE_ID reassign-stop`,"Move um ponto para outro candidato antes da publica\xE7\xE3o.","JSON obrigat\xF3rio: stop_id e target_route_candidate_id; reason opcional",!0],[`${e} route-candidates CANDIDATE_ID ai-assist`,"Solicita ou consulta assist\xEAncia de rearranjo do candidato; 202 significa processamento.",`${e==="admin"?"JSON obrigat\xF3rio":"JSON opcional"}: objective`,!0]]:[],...e==="admin"?[[`${e} route-candidates CANDIDATE_ID assign-driver`,"Atribui motorista vinculado \xE0 transportadora do candidato.","JSON obrigat\xF3rio: carrier_account_id e driver_user_id",!0]]:[],[`${e} workbench scopes`,"Lista escopos do workbench."],[`${e} workbench show batch_id=UUID`,"Consulta workbench pelo lote."],[`${e} workbench show shipper_account_id=UUID base_id=UUID`,"Consulta workbench pela base."],[`${e} workbench run`,"Executa workbench; 202 \xE9 aceita\xE7\xE3o, n\xE3o conclus\xE3o.","JSON: shipper_account_id, base_id",!0],[`${e} workbench refresh-quotation`,"Atualiza a cota\xE7\xE3o da workbench; 202 \xE9 aceita\xE7\xE3o, n\xE3o conclus\xE3o.","JSON: shipper_account_id, base_id",!0],[`${e} tower cockpit batch_id=UUID`,"Consulta cockpit pelo lote."],[`${e} tower cockpit shipper_account_id=UUID base_id=UUID`,"Consulta cockpit pela base."]]);a(["shipper"],[["shipper route show PUBLIC_ID","Consulta uma rota operacional do embarcador."]]),a(["admin"],[["admin routes ROUTE_ID assign-driver","Atribui motorista \xE0 rota conforme ACL e estado do Core.","JSON obrigat\xF3rio: driver_user_id; reason opcional",!0],["admin routes ROUTE_ID pause|cancel|reopen","Altera estado da rota conforme ACL do Core.","JSON: reason, notes e occurrence_type opcionais",!0],["admin routes ROUTE_ID occurrence","Registra ocorr\xEAncia na rota.","JSON obrigat\xF3rio: notes; reason e occurrence_type opcionais",!0],["admin tower overview","Consulta vis\xE3o geral da torre."],["admin tower failure-reasons catalog","Consulta cat\xE1logo de motivos de insucesso."]]),a(["driver"],[["driver tower validate","Valida DANFE e recebe assist_token de uso \xFAnico.","JSON: nf_key obrigat\xF3rio; reason opcional",!0],["driver tower assist","Consulta enriquecimento com token de validate; retorna query_id.","JSON: assist_token obrigat\xF3rio; reason e force_refresh opcionais",!0],["driver tower fallback","Consulta enriquecimento por documento informado; retorna query_id.","JSON: document obrigat\xF3rio; reason e force_refresh opcionais",!0],["driver tower queries QUERY_ID show","Consulta resultado de enriquecimento pr\xF3prio."]]);for(const e of["driver","carrier"])a([e],[[`${e} tower chat open`,"Abre ou retoma thread de rota e parada autorizadas.","JSON: route_id e waypoint_id obrigat\xF3rios; driver_user_id opcional",!0],[`${e} tower chat thread THREAD_ID messages`,"Consulta mensagens da thread autorizada."],[`${e} tower chat thread THREAD_ID send`,"Envia mensagem \xE0 thread autorizada.","JSON: body obrigat\xF3rio; message_type e metadata opcionais",!0]]);for(const e of["carrier","shipper"])a([e],[[`${e} tower failure-reasons policy show`,"Consulta policy de insucesso efetiva da pr\xF3pria conta."],[`${e} tower failure-reasons policy set`,"Altera policy de insucesso da pr\xF3pria conta.","JSON: reason_codes (lista de c\xF3digos)",!0]]);a(["carrier"],[["carrier tower chat thread THREAD_ID authorize","Gera c\xF3digo de uso \xFAnico para insucesso autorizado.",null,!0]]),a(["admin"],[["admin tower chat threads","Lista threads operacionais vis\xEDveis \xE0 ACL."],["admin tower chat thread THREAD_ID messages","Consulta mensagens da thread."],["admin tower chat thread THREAD_ID send","Envia mensagem \xE0 thread.","JSON: body obrigat\xF3rio; message_type e metadata opcionais",!0],["admin tower chat thread THREAD_ID authorize","Gera c\xF3digo de autoriza\xE7\xE3o de insucesso.",null,!0],["admin tower failure-reasons shippers SHIPPER_ID show","Consulta policy de insucesso do embarcador."],["admin tower failure-reasons shippers SHIPPER_ID set","Altera policy de insucesso do embarcador.","JSON: reason_codes (lista de c\xF3digos)",!0],["admin tower failure-reasons carriers CARRIER_ID show","Consulta policy de insucesso da transportadora."],["admin tower failure-reasons carriers CARRIER_ID set","Altera policy de insucesso da transportadora.","JSON: reason_codes (lista de c\xF3digos)",!0]]);for(const e of["driver","admin","carrier","shipper"])a([e],[[`${e} tower failure-reasons catalog-global [search=X]`,"Consulta s\xEDncrona do cat\xE1logo global de motivos; sem confirma\xE7\xE3o, gera\xE7\xE3o ou consumo de autoriza\xE7\xE3o."]]);function b(e,r){const o=e.startsWith("[")?e.slice(1,-1):e;return o.split("|").includes(r)?0:/^[A-Z][A-Z0-9_]*$/.test(o)||o.includes("=")&&o.split("=")[0]===r.split("=")[0]&&/^[A-Z][A-Z0-9_]*$/.test(o.split("=")[1])?1:1/0}t(b,"matchToken");function f(){return`Genne CLI
2
+
3
+ Uso: genne COMANDO [SUBCOMANDO] [PAR\xC2METROS]
4
+
5
+ Comece por aqui:
6
+ genne login Autorize o acesso pelo navegador
7
+ genne whoami Confira identidade, papel e conta ativos
8
+ genne env show Confira o destino da API
9
+ genne logout Encerre a sess\xE3o CLI
10
+
11
+ Comandos por perfil:
12
+ genne driver ... Rotas, paradas e entregas do motorista
13
+ genne carrier ... Pedidos, opera\xE7\xF5es e rotas da transportadora
14
+ genne shipper ... Pedidos, importa\xE7\xF5es e rotas do embarcador
15
+ genne admin ... Administra\xE7\xE3o e suporte
16
+ genne users ... Usu\xE1rios, cadastros e v\xEDnculos
17
+ genne user me Consulte seu perfil
18
+
19
+ Descubra os detalhes, sem autentica\xE7\xE3o:
20
+ genne help driver routes Exemplo de consulta por caminho
21
+ genne COMANDO --help Sintaxe, papel, entrada JSON e confirma\xE7\xE3o
22
+ genne help Cat\xE1logo completo em JSON
23
+
24
+ Envie dados JSON por stdin; nunca passe senhas ou tokens nos argumentos.`}t(f,"cliHelp");function D(e=[]){const r=e.filter(Boolean),o=u.map(i=>{const{usage:p}=i,d=p.slice(6).split(" "),l=r.reduce((m,_,c)=>m+(d[c]?b(d[c],_):1/0),0);return{command:i,score:l}}),n=Math.min(...o.map(({score:i})=>i));if(!Number.isFinite(n))return null;const s=o.filter(({score:i})=>i===n).map(({command:i})=>i);return s.length?{data:{query:r.join(" "),authorization:"Papel ativo da sess\xE3o; o Core aplica grants internos, membership, m\xF3dulos, bases e ACL a cada chamada.",input:"Objetos JSON de muta\xE7\xE3o s\xE3o enviados por stdin. Confirma\xE7\xF5es exigem terminal interativo; n\xE3o passe secrets em argumentos.",commands:s}}:null}t(D,"commandHelp");export{f as cliHelp,D as commandHelp};
@@ -1 +1 @@
1
- var r=Object.defineProperty;var m=(n,e)=>r(n,"name",{value:e,configurable:!0});import{z as a}from"zod";const i=m(()=>a.uuid(),"UUID"),t={limit:a.number().int().min(1).max(100).optional(),cursor:a.string().min(1).optional()};function s(n){return Object.entries(n).filter(([,e])=>e!==void 0).map(([e,d])=>`${e}=${d}`)}m(s,"queryArgs");const o=m(n=>`Papel eleg\xEDvel: admin. Consulta ${n}; o Core revalida ACL, escopo e dados da conta. Sem confirma\xE7\xE3o e sem muta\xE7\xE3o.`,"adminDescription");function p(n){n("genne_admin_support_threads",o("atendimentos de suporte"),{status:a.enum(["open","closed"]).optional(),...t},e=>["admin","support","threads","list",...s(e)]),n("genne_admin_support_thread_messages",o("mensagens de um atendimento"),{thread_id:i(),...t},({thread_id:e,...d})=>["admin","support","threads",e,"messages",...s(d)]),n("genne_admin_feedbacks",o("feedbacks"),{status:a.enum(["pending","in_progress","prioritized","resolved","canceled","duplicate"]).optional(),user_id:i().optional(),order:a.enum(["votes","recent","oldest"]).optional(),terminal_intents:a.literal("pending").optional(),...t},e=>["admin","feedbacks","list",...s(e)]),n("genne_admin_feedback_show",o("um feedback"),{feedback_id:i()},({feedback_id:e})=>["admin","feedbacks","show",e]),n("genne_admin_feedback_comments",o("coment\xE1rios de um feedback"),{feedback_id:i(),...t},({feedback_id:e,...d})=>["admin","feedbacks","comments",e,...s(d)]),n("genne_admin_feedback_receipt",o("o receipt terminal de um feedback"),{feedback_id:i(),receipt_id:i()},({feedback_id:e,receipt_id:d})=>["admin","feedbacks","receipt",e,d]),n("genne_admin_crm_assignees",o("respons\xE1veis eleg\xEDveis do CRM"),{},()=>["admin","crm","assignees"]),n("genne_admin_crm_leads",o("leads do CRM"),{status:a.enum(["novo","em_contato","qualificado","perdido","convertido"]).optional(),search:a.string().min(1).optional(),...t},e=>["admin","crm","leads","list",...s(e)]),n("genne_admin_crm_lead_show",o("um lead do CRM"),{lead_id:i()},({lead_id:e})=>["admin","crm","leads","show",e]),n("genne_admin_notifications",o("notifica\xE7\xF5es administrativas"),t,e=>["admin","notifications","list",...s(e)]),n("genne_admin_notification_show",o("o processamento de uma notifica\xE7\xE3o"),{message_group_id:i()},({message_group_id:e})=>["admin","notifications","show",e]),n("genne_admin_blog_posts",o("posts de blog, inclusive rascunhos"),{locale:a.enum(["pt-BR","en","es"]).optional(),translation_group_id:i().optional()},e=>["admin","blog","posts","list",...s(e)]),n("genne_admin_faqs",o("FAQs, inclusive rascunhos"),{path:a.string().min(1).optional(),route_key:a.string().min(1).optional(),locale:a.enum(["pt-BR","en","es"]).optional(),category:a.string().min(1).optional(),featured:a.boolean().optional(),q:a.string().min(1).optional()},e=>["admin","faqs","list",...s(e)]),n("genne_admin_privacy_requests",o("solicita\xE7\xF5es de privacidade"),{},()=>["admin","privacy","requests"]),n("genne_driver_payout_requirements","Papel eleg\xEDvel: driver. Consulta os requisitos de repasse do mercado informado; o Core aplica a sess\xE3o e o contrato vigente. Sem confirma\xE7\xE3o e sem muta\xE7\xE3o.",{market_code:a.enum(["BR","US"])},({market_code:e})=>["driver","payout","requirements",e]),n("genne_driver_payout_accounts","Papel eleg\xEDvel: driver. Consulta contas de repasse pr\xF3prias no mercado informado; a CLI retorna somente o resumo mascarado e o Core revalida a sess\xE3o. Sem confirma\xE7\xE3o e sem muta\xE7\xE3o.",{market_code:a.enum(["BR","US"])},({market_code:e})=>["driver","payout","accounts",e]),n("genne_admin_onboarding_users",o("identidades eleg\xEDveis para onboarding"),{search:a.string().min(1).optional(),...t},e=>["admin","companies","onboarding-users","list",...s(e)])}m(p,"registerAdministrationReads");export{p as registerAdministrationReads};
1
+ var p=Object.defineProperty;var m=(n,e)=>p(n,"name",{value:e,configurable:!0});import{z as a}from"zod";const s=m(()=>a.uuid(),"UUID"),t={limit:a.number().int().min(1).max(100).optional(),cursor:a.string().min(1).optional()};function i(n){return Object.entries(n).filter(([,e])=>e!==void 0).map(([e,d])=>`${e}=${d}`)}m(i,"queryArgs");const o=m(n=>`Papel eleg\xEDvel: admin. Consulta ${n}; o Core revalida ACL, escopo e dados da conta. Sem confirma\xE7\xE3o e sem muta\xE7\xE3o.`,"adminDescription");function _(n){n("genne_admin_support_threads",o("atendimentos de suporte"),{status:a.enum(["open","closed"]).optional(),...t},e=>["admin","support","threads","list",...i(e)]),n("genne_admin_support_thread_messages",o("mensagens de um atendimento"),{thread_id:s(),...t},({thread_id:e,...d})=>["admin","support","threads",e,"messages",...i(d)]),n("genne_admin_feedbacks",o("feedbacks"),{status:a.enum(["pending","in_progress","prioritized","resolved","canceled","duplicate"]).optional(),user_id:s().optional(),order:a.enum(["votes","recent","oldest"]).optional(),terminal_intents:a.literal("pending").optional(),...t},e=>["admin","feedbacks","list",...i(e)]),n("genne_admin_feedback_show",o("um feedback"),{feedback_id:s()},({feedback_id:e})=>["admin","feedbacks","show",e]),n("genne_admin_feedback_comments",o("coment\xE1rios de um feedback"),{feedback_id:s(),...t},({feedback_id:e,...d})=>["admin","feedbacks","comments",e,...i(d)]),n("genne_admin_feedback_receipt",o("o receipt terminal de um feedback"),{feedback_id:s(),receipt_id:s()},({feedback_id:e,receipt_id:d})=>["admin","feedbacks","receipt",e,d]),n("genne_admin_crm_assignees",o("respons\xE1veis eleg\xEDveis do CRM"),{},()=>["admin","crm","assignees"]),n("genne_admin_crm_leads",o("leads do CRM"),{status:a.enum(["novo","em_contato","qualificado","perdido","convertido"]).optional(),search:a.string().min(1).optional(),...t},e=>["admin","crm","leads","list",...i(e)]),n("genne_admin_crm_lead_show",o("um lead do CRM"),{lead_id:s()},({lead_id:e})=>["admin","crm","leads","show",e]),n("genne_admin_notifications",o("notifica\xE7\xF5es administrativas"),t,e=>["admin","notifications","list",...i(e)]),n("genne_admin_notification_show",o("o processamento de uma notifica\xE7\xE3o"),{message_group_id:s()},({message_group_id:e})=>["admin","notifications","show",e]),n("genne_admin_whatsapp_messages",o("mensagens WhatsApp"),{peer:a.string().min(1).optional(),direction:a.enum(["inbound","outbound"]).optional(),...t},e=>["admin","whatsapp","messages","list",...i(e)]),n("genne_admin_whatsapp_message",o("uma mensagem WhatsApp"),{message_id:s()},({message_id:e})=>["admin","whatsapp","messages","get",e]),n("genne_admin_whatsapp_events",o("eventos WhatsApp para retomada por cursor"),t,e=>["admin","whatsapp","messages","events",...i(e)]),n("genne_admin_blog_posts",o("posts de blog, inclusive rascunhos"),{locale:a.enum(["pt-BR","en","es"]).optional(),translation_group_id:s().optional()},e=>["admin","blog","posts","list",...i(e)]),n("genne_admin_faqs",o("FAQs, inclusive rascunhos"),{path:a.string().min(1).optional(),route_key:a.string().min(1).optional(),locale:a.enum(["pt-BR","en","es"]).optional(),category:a.string().min(1).optional(),featured:a.boolean().optional(),q:a.string().min(1).optional()},e=>["admin","faqs","list",...i(e)]),n("genne_admin_privacy_requests",o("solicita\xE7\xF5es de privacidade"),{},()=>["admin","privacy","requests"]),n("genne_driver_payout_requirements","Papel eleg\xEDvel: driver. Consulta os requisitos de repasse do mercado informado; o Core aplica a sess\xE3o e o contrato vigente. Sem confirma\xE7\xE3o e sem muta\xE7\xE3o.",{market_code:a.enum(["BR","US"])},({market_code:e})=>["driver","payout","requirements",e]),n("genne_driver_payout_accounts","Papel eleg\xEDvel: driver. Consulta contas de repasse pr\xF3prias no mercado informado; a CLI retorna somente o resumo mascarado e o Core revalida a sess\xE3o. Sem confirma\xE7\xE3o e sem muta\xE7\xE3o.",{market_code:a.enum(["BR","US"])},({market_code:e})=>["driver","payout","accounts",e]),n("genne_admin_onboarding_users",o("identidades eleg\xEDveis para onboarding"),{search:a.string().min(1).optional(),...t},e=>["admin","companies","onboarding-users","list",...i(e)])}m(_,"registerAdministrationReads");export{_ as registerAdministrationReads};
package/src/operations.js CHANGED
@@ -1 +1 @@
1
- var C=Object.defineProperty;var d=(o,t)=>C(o,"name",{value:t,configurable:!0});import{createApi as b,fail as i,uuid as p}from"./api.js";import{usersCommand as _}from"./commands/users.js";import{identityCommand as v}from"./commands/identity.js";import{accessCommand as w}from"./commands/access.js";import{driverCommand as R}from"./commands/driver.js";import{supportCommand as A}from"./commands/support.js";import{feedbackCommand as E}from"./commands/feedback.js";import{crmCommand as y}from"./commands/crm.js";import{notificationsCommand as S}from"./commands/notifications.js";import{contentCommand as T}from"./commands/content.js";import{companiesCommand as U}from"./commands/companies.js";import{grCommand as G}from"./commands/gr.js";import{ordersCommand as N}from"./commands/orders.js";import{driverRoutesCommand as O}from"./commands/driver-routes.js";import{logisticsCommand as P}from"./commands/logistics.js";import{operationsConfigCommand as I}from"./commands/operations-config.js";import{financialCommand as j}from"./commands/financial.js";import{routesCommand as q}from"./commands/routes.js";import{towerCommand as x}from"./commands/tower.js";import{commandHelp as F}from"./help.js";import{environmentCommand as H}from"./session.js";async function ro(o,{env:t=process.env,input:a,confirm:f}={}){if(o.length===0||o[0]==="help"||o.at(-1)==="--help"){const e=o[0]==="help"?o.slice(1).filter(n=>n!=="--help"):o.at(-1)==="--help"?o.slice(0,-1):[];return F(e)??i("USAGE",`Comando n\xE3o encontrado: ${e.join(" ")}. Use genne help.`,2)}if(o.length===2&&o[0]==="env"&&o[1]==="show")return H(t,["show"]);o.length===1&&o[0]==="logout"&&(o=["session","logout"]);const u=o.length===3&&o[0]==="users"&&o[1]==="driver"&&o[2]==="register",h=o.length===3&&o[0]==="auth"&&o[1]==="membership-invitations"&&o[2]==="accept",s=o[0]==="password"&&["forgot","reset"].includes(o[1])||u||h,c=o.length===4&&o[0]==="shipper"&&o[1]==="route"&&o[2]==="show";c&&p(o[3]);const r=b(t,{allowAnonymous:s});let m=null;s||(m=(await r("GET","/auth/me")).data,(!m||typeof m!="object"||typeof m.role!="string")&&i("RESPONSE","Resposta inv\xE1lida da API"));const l={api:r,user:m,uuid:p,fail:i,input:a??(()=>i("INPUT","Forne\xE7a JSON em stdin")),confirm:f??(()=>i("CONFIRM","Confirma\xE7\xE3o interativa necess\xE1ria")),requireRole(e){m?.role!==e&&i("HTTP_403","Acesso negado",403)}};if(o.length===1&&o[0]==="whoami"){const e=m.business_membership,n=e?.business_account_id&&["shipper","carrier"].includes(m.role)?{id:e.business_account_id,name:e.business_account?.name??null,membership_id:e.id,membership_role:e.membership_role}:null;return{data:{name:m.name,email:m.email,role:m.role,...n?{business_account:n}:{}}}}if(c)return l.requireRole("shipper"),r("GET",`/shipper/operational-routes/${p(o[3])}`);for(const e of[_,R,O,v,w,A,E,y,S,T,U,G,N,I,j,P,x,q]){const n=await e(o,l);if(n!==null)return n}i("USAGE","Comando desconhecido. Use genne help.",2)}d(ro,"runOperation");export{ro as runOperation};
1
+ var v=Object.defineProperty;var l=(o,t)=>v(o,"name",{value:t,configurable:!0});import{createApi as R,fail as i,uuid as p}from"./api.js";import{usersCommand as A}from"./commands/users.js";import{identityCommand as E}from"./commands/identity.js";import{accessCommand as y}from"./commands/access.js";import{driverCommand as S}from"./commands/driver.js";import{supportCommand as T}from"./commands/support.js";import{feedbackCommand as U}from"./commands/feedback.js";import{crmCommand as G}from"./commands/crm.js";import{notificationsCommand as N}from"./commands/notifications.js";import{whatsappCommand as O}from"./commands/whatsapp.js";import{contentCommand as P}from"./commands/content.js";import{companiesCommand as I}from"./commands/companies.js";import{grCommand as j}from"./commands/gr.js";import{ordersCommand as q}from"./commands/orders.js";import{driverRoutesCommand as x}from"./commands/driver-routes.js";import{logisticsCommand as F}from"./commands/logistics.js";import{operationsConfigCommand as H}from"./commands/operations-config.js";import{financialCommand as $}from"./commands/financial.js";import{routesCommand as k}from"./commands/routes.js";import{towerCommand as J}from"./commands/tower.js";import{commandHelp as M}from"./help.js";import{environmentCommand as z}from"./session.js";async function fo(o,{env:t=process.env,input:d,confirm:f,emit:u,signal:h,sleep:C,listenInterval:b}={}){if(o.length===0||o[0]==="help"||o.at(-1)==="--help"){const e=o[0]==="help"?o.slice(1).filter(n=>n!=="--help"):o.at(-1)==="--help"?o.slice(0,-1):[];return M(e)??i("USAGE",`Comando n\xE3o encontrado: ${e.join(" ")}. Use genne help.`,2)}if(o.length===2&&o[0]==="env"&&o[1]==="show")return z(t,["show"]);o.length===1&&o[0]==="logout"&&(o=["session","logout"]);const w=o.length===3&&o[0]==="users"&&o[1]==="driver"&&o[2]==="register",_=o.length===3&&o[0]==="auth"&&o[1]==="membership-invitations"&&o[2]==="accept",s=o[0]==="password"&&["forgot","reset"].includes(o[1])||w||_,c=o.length===4&&o[0]==="shipper"&&o[1]==="route"&&o[2]==="show";c&&p(o[3]);const r=R(t,{allowAnonymous:s});let m=null;s||(m=(await r("GET","/auth/me")).data,(!m||typeof m!="object"||typeof m.role!="string")&&i("RESPONSE","Resposta inv\xE1lida da API"));const a={api:r,user:m,uuid:p,fail:i,input:d??(()=>i("INPUT","Forne\xE7a JSON em stdin")),confirm:f??(()=>i("CONFIRM","Confirma\xE7\xE3o interativa necess\xE1ria")),emit:u??(()=>{}),signal:h,sleep:C,listenInterval:b,requireRole(e){m?.role!==e&&i("HTTP_403","Acesso negado",403)}};if(o.length===1&&o[0]==="whoami"){const e=m.business_membership,n=e?.business_account_id&&["shipper","carrier"].includes(m.role)?{id:e.business_account_id,name:e.business_account?.name??null,membership_id:e.id,membership_role:e.membership_role}:null;return{data:{name:m.name,email:m.email,role:m.role,...n?{business_account:n}:{}}}}if(c)return a.requireRole("shipper"),r("GET",`/shipper/operational-routes/${p(o[3])}`);for(const e of[A,S,x,E,y,T,U,G,N,O,P,I,j,q,H,$,F,J,k]){const n=await e(o,a);if(n!==null)return n}i("USAGE","Comando desconhecido. Use genne help.",2)}l(fo,"runOperation");export{fo as runOperation};