@genne/genne-cli 0.1.33 → 0.1.34

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.
@@ -1 +1 @@
1
- var h=Object.defineProperty;var c=(a,d)=>h(a,"name",{value:d,configurable:!0});import{z as e}from"zod";import{bindCoreFetch as k}from"./core-fetch.js";const n=c(()=>e.record(e.string(),e.unknown()),"object"),u=e.array(n()).min(1).max(5),C=e.object({flow_id:e.uuid(),connection_id:e.uuid().optional(),base_id:e.uuid().nullable().optional(),trigger:e.string().min(1).optional(),trigger_key:e.string().max(100).nullable().optional(),schedule:n().optional(),timezone:e.string().min(1).optional(),enabled:e.boolean().optional(),policies:u.optional()}).strict(),w=e.object({enabled:e.boolean().optional(),schedule:n().optional(),timezone:e.string().min(1).optional(),policies:u.optional(),flow_version_id:e.uuid().optional(),expected_current_version_id:e.uuid().optional()}).strict().refine(a=>Object.keys(a).length>0,"Informe uma altera\xE7\xE3o"),m=e.object({integration_type:e.enum(["upload","proceda"]).optional(),order_entry_mode:e.enum(["upload","proceda"]).optional(),status_query_mode:e.literal("disabled").optional(),receiving_enabled:e.boolean().optional(),dispatch_enabled:e.boolean().optional(),routing_enabled:e.boolean().optional(),quotation_enabled:e.boolean().optional(),status:e.enum(["active","inactive"]).optional(),metadata:n().optional()}).strict().refine(a=>Object.keys(a).length>0,"Informe uma altera\xE7\xE3o"),o=c(()=>e.string().min(1).max(255).optional(),"optionalRecordString"),O=e.object({external_id:e.string().min(1).max(255),order_requested_at:e.string().min(1).max(100),destination_address:e.string().min(1).max(2e3),packages_count:e.number().int().min(1).max(1e5),external_base_code:o(),order_id:o(),external_shipper_label:o(),provider_status:e.union([e.string().min(1).max(255),e.number().int()]).optional(),provider_status_label:o(),provider_failure_reason:e.union([e.string().min(1).max(255),e.number().int()]).optional(),provider_failure_reason_label:o(),postal_code:e.string().min(1).max(30).optional(),destination_complement:o(),nfe_key:o(),recipient_doc:o(),recipient_name:o(),recipient_phone:o(),recipient_email:o(),metadata:n().optional()}).strict(),j=[{name:"genne_carrier_desktop_provider_activate",operation:"desktop.provider.activate",role:"carrier",fields:{provider_id:e.uuid()},destructive:!1,description:"Ativa um provider Desktop da transportadora ativa ap\xF3s aprova\xE7\xE3o Core. Revise provider, grant e conex\xE3o; ativar n\xE3o habilita automaticamente a entrada de pedidos."},{name:"genne_carrier_desktop_flow_installation_create",operation:"desktop.flow_installation.create",role:"carrier",fields:{grant_id:e.uuid(),installation:C},destructive:!1,description:"Instala um fluxo Desktop no grant autorizado ap\xF3s aprova\xE7\xE3o Core. Revise fluxo, vers\xE3o, base e pol\xEDticas de execu\xE7\xE3o; o Core valida a conta e carrier_integrations.manage."},{name:"genne_carrier_desktop_flow_installation_update",operation:"desktop.flow_installation.update",role:"carrier",fields:{installation_id:e.uuid(),changes:w},destructive:!0,description:"Altera uma instala\xE7\xE3o Desktop ap\xF3s aprova\xE7\xE3o Core. Envie somente changes; troca de vers\xE3o preserva expected_current_version_id. O Core rejeita snapshot alterado desde a aprova\xE7\xE3o."},{name:"genne_carrier_desktop_flow_installation_run",operation:"desktop.flow_installation.run",role:"carrier",fields:{installation_id:e.uuid(),input:e.record(e.string().min(1).max(255),e.string().max(500))},destructive:!1,description:"Solicita execu\xE7\xE3o de um fluxo Desktop ap\xF3s aprova\xE7\xE3o Core. O resultado queued, inclusive com HTTP 201, exige acompanhamento por genne_carrier_desktop_execution; n\xE3o comprova conclus\xE3o do fluxo."},{name:"genne_carrier_desktop_order_import_batch_create",operation:"desktop.order_import_batch.create",role:"carrier",fields:{grant_id:e.uuid(),batch:e.object({execution_id:e.uuid(),device_id:e.string().min(8).max(128).regex(/^[A-Za-z0-9._:-]+$/),records:e.array(O).max(100),next_cursor:e.string().min(1).optional(),checkpoint:n().optional()}).strict()},destructive:!0,description:"Importa um lote Desktop ap\xF3s aprova\xE7\xE3o Core. Revise grant, execu\xE7\xE3o, dispositivo e resumo do lote. O Core valida claim, conta e conte\xFAdo e grava importa\xE7\xE3o e receipt atomicamente; replay n\xE3o repete a importa\xE7\xE3o."},{name:"genne_carrier_desktop_extraction_preview",operation:"desktop.extraction.preview",role:"carrier",fields:{grant_id:e.uuid(),extraction:e.object({run_id:e.uuid(),base_id:e.uuid(),flow_version:e.literal(1),page_url:e.url().max(2e3),instruction:e.string().min(1).max(500),fields:e.array(e.string().regex(/^[A-Za-z][A-Za-z0-9_]{0,63}$/)).min(1).max(20),snapshot:e.string().min(1).max(8e3)}).strict()},destructive:!1,description:"Obt\xE9m pr\xE9via de extra\xE7\xE3o Desktop ap\xF3s aprova\xE7\xE3o Core. O Core valida a origem da p\xE1gina e devolve o receipt da pr\xE9via; n\xE3o persiste pedidos. N\xE3o inclui o snapshot bruto no efeito de aprova\xE7\xE3o."},{name:"genne_carrier_operations_config_update",operation:"operations.carrier_config.update",role:"carrier",fields:{changes:m},destructive:!0,description:"Atualiza parcialmente a configura\xE7\xE3o operacional da transportadora ativa ap\xF3s aprova\xE7\xE3o Core. Revise antes e depois; o Core deriva os modos e decide a ACL. Campos omitidos permanecem preservados."},{name:"genne_admin_operations_config_update",operation:"operations.admin_config.update",role:"admin",fields:{carrier_account_id:e.uuid(),changes:m},destructive:!0,description:"Atualiza parcialmente a configura\xE7\xE3o operacional com Admin standalone e UUID operacional da carrier. Revise conta, antes e depois na aprova\xE7\xE3o Core; membership B2B e pap\xE9is globais n\xE3o concedem acesso Admin."}];function $(a,{coreOrigin:d,coreAccessToken:_,adapterKey:g,adminOrigin:v,fetchImpl:l=fetch}){l=k(l);for(const i of j)a.registerTool(i.name,{description:`${i.description} Repita os mesmos campos e idempotency_key com intent_id ap\xF3s aprovar em outra sess\xE3o de senha com o mesmo papel e conta. Em 412, releia e crie nova inten\xE7\xE3o com outra chave.`,inputSchema:e.object({...i.fields,idempotency_key:e.string().min(16).max(128).regex(/^[A-Za-z0-9._:-]+$/),intent_id:e.uuid().optional()}).strict(),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:i.destructive,idempotentHint:!0}},async({idempotency_key:f,intent_id:p,...x})=>{try{const b=p?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(p)}/execute`:"/api/v1/auth/mcp/write-intents",s=await l(new URL(b,d),{method:"POST",headers:{authorization:`Bearer ${_}`,"x-genne-mcp-adapter-key":g,"idempotency-key":f,"content-type":"application/json"},body:JSON.stringify({operation:i.operation,...x})});let r;try{r=await s.json()}catch{r={}}if(!s.ok){const y=typeof r?.error=="string"&&/^[A-Za-z0-9_.:-]{1,80}$/.test(r.error)?r.error:`http_${s.status}`;return{isError:!0,content:[{type:"text",text:JSON.stringify({status:s.status,error:y})}]}}const t=r?.data;return!t||typeof t!="object"||Array.isArray(t)||!p&&(!e.uuid().safeParse(t.public_id).success||t.active_role!==i.role)?{isError:!0,content:[{type:"text",text:JSON.stringify({status:s.status,error:"invalid_core_response"})}]}:p?{content:[{type:"text",text:JSON.stringify(t)}]}:{content:[{type:"text",text:JSON.stringify({...t,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(t.public_id)}?role=${i.role}`,v).href,next_step:"Revise e aprove em outra sess\xE3o de senha com o mesmo papel e conta; depois repita os mesmos campos e idempotency_key com intent_id."})}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}c($,"registerDesktopOperationsWrites");export{$ as registerDesktopOperationsWrites};
1
+ var h=Object.defineProperty;var c=(a,d)=>h(a,"name",{value:d,configurable:!0});import{z as e}from"zod";import{bindCoreFetch as k}from"./core-fetch.js";const n=c(()=>e.record(e.string(),e.unknown()),"object"),u=e.array(n()).min(1).max(5),C=e.object({flow_id:e.uuid(),connection_id:e.uuid().optional(),base_id:e.uuid().nullable().optional(),trigger:e.string().min(1).optional(),trigger_key:e.string().max(100).nullable().optional(),schedule:n().optional(),timezone:e.string().min(1).optional(),enabled:e.boolean().optional(),policies:u.optional()}).strict(),w=e.object({enabled:e.boolean().optional(),schedule:n().optional(),timezone:e.string().min(1).optional(),policies:u.optional(),flow_version_id:e.uuid().optional(),expected_current_version_id:e.uuid().optional()}).strict().refine(a=>Object.keys(a).length>0,"Informe uma altera\xE7\xE3o"),m=e.object({integration_type:e.enum(["upload","proceda"]).optional(),order_entry_mode:e.enum(["upload","proceda"]).optional(),status_query_mode:e.literal("disabled").optional(),receiving_enabled:e.boolean().optional(),dispatch_enabled:e.boolean().optional(),routing_enabled:e.boolean().optional(),quotation_enabled:e.boolean().optional(),status:e.enum(["active","inactive"]).optional(),metadata:n().optional()}).strict().refine(a=>Object.keys(a).length>0,"Informe uma altera\xE7\xE3o"),o=c(()=>e.string().min(1).max(255).optional(),"optionalRecordString"),j=e.object({external_id:e.string().min(1).max(255),order_requested_at:e.string().min(1).max(100),destination_address:e.string().min(1).max(2e3),packages_count:e.number().int().min(1).max(1e5),external_base_code:o(),order_id:o(),external_shipper_label:o(),provider_status:e.union([e.string().min(1).max(255),e.number().int()]).optional(),provider_status_label:o(),provider_failure_reason:e.union([e.string().min(1).max(255),e.number().int()]).optional(),provider_failure_reason_label:o(),postal_code:e.string().min(1).max(30).optional(),destination_complement:o(),nfe_key:o(),recipient_doc:o(),recipient_name:o(),recipient_phone:o(),recipient_email:o(),metadata:n().optional()}).strict(),A=[{name:"genne_carrier_desktop_provider_activate",operation:"desktop.provider.activate",role:"carrier",fields:{provider_id:e.uuid()},destructive:!1,description:"Ativa um provider Desktop da transportadora ativa ap\xF3s aprova\xE7\xE3o Core. Revise provider, grant e conex\xE3o; ativar n\xE3o habilita automaticamente a entrada de pedidos."},{name:"genne_carrier_desktop_flow_installation_create",operation:"desktop.flow_installation.create",role:"carrier",fields:{grant_id:e.uuid(),installation:C},destructive:!1,description:"Instala um fluxo Desktop no grant autorizado ap\xF3s aprova\xE7\xE3o Core. Revise fluxo, vers\xE3o, base e pol\xEDticas de execu\xE7\xE3o; exige autoriza\xE7\xE3o da conta."},{name:"genne_carrier_desktop_flow_installation_update",operation:"desktop.flow_installation.update",role:"carrier",fields:{installation_id:e.uuid(),changes:w},destructive:!0,description:"Altera uma instala\xE7\xE3o Desktop ap\xF3s aprova\xE7\xE3o Core. Envie somente changes; troca de vers\xE3o preserva expected_current_version_id. O Core rejeita snapshot alterado desde a aprova\xE7\xE3o."},{name:"genne_carrier_desktop_flow_installation_run",operation:"desktop.flow_installation.run",role:"carrier",fields:{installation_id:e.uuid(),input:e.record(e.string().min(1).max(255),e.string().max(500))},destructive:!1,description:"Solicita execu\xE7\xE3o de um fluxo Desktop ap\xF3s aprova\xE7\xE3o Core. O resultado queued, inclusive com HTTP 201, exige acompanhamento por genne_carrier_desktop_execution; n\xE3o comprova conclus\xE3o do fluxo."},{name:"genne_carrier_desktop_order_import_batch_create",operation:"desktop.order_import_batch.create",role:"carrier",fields:{grant_id:e.uuid(),batch:e.object({execution_id:e.uuid(),device_id:e.string().min(8).max(128).regex(/^[A-Za-z0-9._:-]+$/),records:e.array(j).max(100),next_cursor:e.string().min(1).optional(),checkpoint:n().optional()}).strict()},destructive:!0,description:"Importa um lote Desktop ap\xF3s aprova\xE7\xE3o Core. Revise grant, execu\xE7\xE3o, dispositivo e resumo do lote. Consulte o receipt retornado; repetir a mesma inten\xE7\xE3o n\xE3o repete a importa\xE7\xE3o."},{name:"genne_carrier_desktop_extraction_preview",operation:"desktop.extraction.preview",role:"carrier",fields:{grant_id:e.uuid(),extraction:e.object({run_id:e.uuid(),base_id:e.uuid(),flow_version:e.literal(1),page_url:e.url().max(2e3),instruction:e.string().min(1).max(500),fields:e.array(e.string().regex(/^[A-Za-z][A-Za-z0-9_]{0,63}$/)).min(1).max(20),snapshot:e.string().min(1).max(8e3)}).strict()},destructive:!1,description:"Obt\xE9m pr\xE9via de extra\xE7\xE3o Desktop ap\xF3s aprova\xE7\xE3o Core. O Core valida a origem da p\xE1gina e devolve o receipt da pr\xE9via; n\xE3o persiste pedidos. N\xE3o inclui o snapshot bruto no efeito de aprova\xE7\xE3o."},{name:"genne_carrier_operations_config_update",operation:"operations.carrier_config.update",role:"carrier",fields:{changes:m},destructive:!0,description:"Atualiza parcialmente a configura\xE7\xE3o operacional da transportadora ativa ap\xF3s aprova\xE7\xE3o Core. Revise antes e depois; o Core deriva os modos e decide a ACL. Campos omitidos permanecem preservados."},{name:"genne_admin_operations_config_update",operation:"operations.admin_config.update",role:"admin",fields:{carrier_account_id:e.uuid(),changes:m},destructive:!0,description:"Atualiza parcialmente a configura\xE7\xE3o operacional com Admin standalone e UUID operacional da carrier. Revise conta, antes e depois na aprova\xE7\xE3o Core; membership B2B e pap\xE9is globais n\xE3o concedem acesso Admin."}];function $(a,{coreOrigin:d,coreAccessToken:_,adapterKey:g,adminOrigin:v,fetchImpl:l=fetch}){l=k(l);for(const i of A)a.registerTool(i.name,{description:`${i.description} Repita os mesmos campos e idempotency_key com intent_id ap\xF3s aprovar em outra sess\xE3o de senha com o mesmo papel e conta. Em 412, releia e crie nova inten\xE7\xE3o com outra chave.`,inputSchema:e.object({...i.fields,idempotency_key:e.string().min(16).max(128).regex(/^[A-Za-z0-9._:-]+$/),intent_id:e.uuid().optional()}).strict(),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:i.destructive,idempotentHint:!0}},async({idempotency_key:f,intent_id:p,...x})=>{try{const b=p?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(p)}/execute`:"/api/v1/auth/mcp/write-intents",s=await l(new URL(b,d),{method:"POST",headers:{authorization:`Bearer ${_}`,"x-genne-mcp-adapter-key":g,"idempotency-key":f,"content-type":"application/json"},body:JSON.stringify({operation:i.operation,...x})});let r;try{r=await s.json()}catch{r={}}if(!s.ok){const y=typeof r?.error=="string"&&/^[A-Za-z0-9_.:-]{1,80}$/.test(r.error)?r.error:`http_${s.status}`;return{isError:!0,content:[{type:"text",text:JSON.stringify({status:s.status,error:y})}]}}const t=r?.data;return!t||typeof t!="object"||Array.isArray(t)||!p&&(!e.uuid().safeParse(t.public_id).success||t.active_role!==i.role)?{isError:!0,content:[{type:"text",text:JSON.stringify({status:s.status,error:"invalid_core_response"})}]}:p?{content:[{type:"text",text:JSON.stringify(t)}]}:{content:[{type:"text",text:JSON.stringify({...t,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(t.public_id)}?role=${i.role}`,v).href,next_step:"Revise e aprove em outra sess\xE3o de senha com o mesmo papel e conta; depois repita os mesmos campos e idempotency_key com intent_id."})}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}c($,"registerDesktopOperationsWrites");export{$ as registerDesktopOperationsWrites};
@@ -1 +1 @@
1
- var d=Object.defineProperty;var o=(i,e)=>d(i,"name",{value:e,configurable:!0});import{z as r}from"zod";function s(i){i("genne_admin_gr_driver_profile","Consulta s\xEDncrona do detalhe GR de um perfil p\xFAblico de motorista, sem confirma\xE7\xE3o. Exige Admin e gr.view/gr.manage; o Core aplica conta, v\xEDnculo e ACL.",{driver_profile_id:r.uuid()},({driver_profile_id:e})=>["admin","gr","driver-profiles",e,"show"]),i("genne_import_source_preview","Consulta s\xEDncrona da pr\xE9via sanitizada do arquivo de origem de um lote p\xFAblico de pedidos, sem confirma\xE7\xE3o. Exige admin, carrier ou shipper e order_intake.view, revalidados pelo Core. N\xE3o cria lote ou pedido.",{role:r.enum(["admin","carrier","shipper"]),batch_id:r.uuid()},({role:e,batch_id:a})=>[e,"orders","imports",a,"source-preview"])}o(s,"registerLogisticsReads");export{s as registerLogisticsReads};
1
+ var a=Object.defineProperty;var o=(e,i)=>a(e,"name",{value:i,configurable:!0});import{z as r}from"zod";function p(e){e("genne_admin_gr_driver_profile","Consulta s\xEDncrona do detalhe GR de um perfil p\xFAblico de motorista, sem confirma\xE7\xE3o. Exige sess\xE3o Admin autorizada.",{driver_profile_id:r.uuid()},({driver_profile_id:i})=>["admin","gr","driver-profiles",i,"show"]),e("genne_import_source_preview","Consulta s\xEDncrona da pr\xE9via sanitizada do arquivo de origem de um lote p\xFAblico de pedidos, sem confirma\xE7\xE3o. Exige sess\xE3o admin, carrier ou shipper autorizada. N\xE3o cria lote ou pedido.",{role:r.enum(["admin","carrier","shipper"]),batch_id:r.uuid()},({role:i,batch_id:d})=>[i,"orders","imports",d,"source-preview"])}o(p,"registerLogisticsReads");export{p as registerLogisticsReads};
@@ -1 +1 @@
1
- var n=Object.defineProperty;var r=(a,o)=>n(a,"name",{value:o,configurable:!0});import{z as e}from"zod";function t(a){a("genne_carrier_desktop_providers","Lista providers Desktop dispon\xEDveis para ativa\xE7\xE3o pela transportadora da sess\xE3o. Exige carrier_integrations.view ou manage no Core. Consulta s\xEDncrona, sem confirma\xE7\xE3o; n\xE3o ativa uma integra\xE7\xE3o.",{},()=>["carrier","desktop","providers","list"]),a("genne_carrier_desktop_flow_installations","Consulta fluxos dispon\xEDveis e instala\xE7\xF5es de um grant Desktop da transportadora ativa. O Core valida conta e permiss\xE3o efetiva de integra\xE7\xF5es ou importa\xE7\xE3o. Consulta s\xEDncrona, sem confirma\xE7\xE3o; n\xE3o executa fluxos.",{grant_id:e.uuid()},({grant_id:o})=>["carrier","desktop","grants",o,"flow-installations","list"]),a("genne_carrier_operations_config","Consulta a configura\xE7\xE3o operacional da transportadora ativa. O Core exige permiss\xE3o operacional eleg\xEDvel. Consulta s\xEDncrona, sem confirma\xE7\xE3o; configura\xE7\xE3o ausente retorna erro e n\xE3o \xE9 criada.",{},()=>["carrier","operations","config","show"]),a("genne_admin_operations_config","Consulta a configura\xE7\xE3o operacional de uma transportadora por UUID, com sess\xE3o Admin e ACL efetiva do Core. Consulta s\xEDncrona, sem confirma\xE7\xE3o; n\xE3o altera a conta selecionada nem cria configura\xE7\xE3o.",{carrier_account_id:e.uuid()},({carrier_account_id:o})=>["admin","operations",o,"config","show"])}r(t,"registerOperationalReads");export{t as registerOperationalReads};
1
+ var n=Object.defineProperty;var e=(a,o)=>n(a,"name",{value:o,configurable:!0});import{z as r}from"zod";function t(a){a("genne_carrier_desktop_providers","Lista providers Desktop dispon\xEDveis para ativa\xE7\xE3o pela transportadora da sess\xE3o. Depende das permiss\xF5es da conta. Consulta s\xEDncrona, sem confirma\xE7\xE3o; n\xE3o ativa uma integra\xE7\xE3o.",{},()=>["carrier","desktop","providers","list"]),a("genne_carrier_desktop_flow_installations","Consulta fluxos dispon\xEDveis e instala\xE7\xF5es de um grant Desktop da transportadora ativa. O Core valida conta e permiss\xE3o efetiva de integra\xE7\xF5es ou importa\xE7\xE3o. Consulta s\xEDncrona, sem confirma\xE7\xE3o; n\xE3o executa fluxos.",{grant_id:r.uuid()},({grant_id:o})=>["carrier","desktop","grants",o,"flow-installations","list"]),a("genne_carrier_operations_config","Consulta a configura\xE7\xE3o operacional da transportadora ativa. O Core exige permiss\xE3o operacional eleg\xEDvel. Consulta s\xEDncrona, sem confirma\xE7\xE3o; configura\xE7\xE3o ausente retorna erro e n\xE3o \xE9 criada.",{},()=>["carrier","operations","config","show"]),a("genne_admin_operations_config","Consulta a configura\xE7\xE3o operacional de uma transportadora por UUID, com sess\xE3o Admin e ACL efetiva do Core. Consulta s\xEDncrona, sem confirma\xE7\xE3o; n\xE3o altera a conta selecionada nem cria configura\xE7\xE3o.",{carrier_account_id:r.uuid()},({carrier_account_id:o})=>["admin","operations",o,"config","show"])}e(t,"registerOperationalReads");export{t as registerOperationalReads};
@@ -1 +1 @@
1
- var d=Object.defineProperty;var t=(a,e)=>d(a,"name",{value:e,configurable:!0});import{z as o}from"zod";const r=o.enum(["admin","carrier","shipper"]),u=o.enum(["driver","carrier","admin"]);function s(a){return Object.entries(a).filter(([,e])=>e!==void 0).map(([e,i])=>`${e}=${i}`)}t(s,"queryArgs");function p(a){a("genne_driver_routes","Lista SavedRoutes do motorista da sess\xE3o. Filtros s\xE3o aplicados pelo endpoint Core; 202 nunca \xE9 tratado como rota conclu\xEDda.",{limit:o.number().int().positive().max(100).optional(),cursor:o.string().min(1).optional(),status:o.enum(["open","completed","closed"]).optional(),is_favorite:o.enum(["true","false"]).optional(),date_from:o.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),date_to:o.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),search:o.string().min(1).optional()},e=>["driver","routes","list",...s(e)]),a("genne_driver_route_show","Consulta SavedRoute, waypoints, manifesto e estado de execu\xE7\xE3o do motorista autenticado; a posse \xE9 revalidada pelo Core.",{route_id:o.uuid()},({route_id:e})=>["driver","routes",e,"show"]),a("genne_driver_place_search","Busca endere\xE7os no mercado do motorista; somente consulta, sem criar waypoint ou rota.",{query:o.string().min(1)},({query:e})=>["driver","places","search",e]),a("genne_driver_place_details","Resolve um place_id em endere\xE7o e coordenadas para o motorista; n\xE3o grava a rota.",{place_id:o.string().min(1)},({place_id:e})=>["driver","places","details",e]),a("genne_driver_optimization","Consulta status e resultado de um job de otimiza\xE7\xE3o pr\xF3prio; processing ou 202 n\xE3o significa geometria aplic\xE1vel.",{job_id:o.uuid()},({job_id:e})=>["driver","optimization",e,"show"]),a("genne_driver_calculation","Consulta status e resultado de um job de c\xE1lculo pr\xF3prio; processing ou 202 n\xE3o significa geometria aplic\xE1vel.",{job_id:o.uuid()},({job_id:e})=>["driver","calculation",e,"show"]),a("genne_driver_plan","Consulta o job de planejamento pr\xF3prio; 202 \xE9 aceita\xE7\xE3o e n\xE3o cria uma SavedRoute.",{job_id:o.uuid()},({job_id:e})=>["driver","routes","plan",e,"show"]),a("genne_driver_failure_policy","Consulta os motivos de insucesso e a exig\xEAncia de autoriza\xE7\xE3o da parada pr\xF3pria; n\xE3o consome c\xF3digo de autoriza\xE7\xE3o.",{route_id:o.uuid(),waypoint_id:o.uuid()},({route_id:e,waypoint_id:i})=>["driver","routes",e,"waypoints",i,"failure-policy"]),a("genne_routes","Lista rotas operacionais vis\xEDveis no papel ativo. O Core revalida membership, conta, base e ACL; filtros incompat\xEDveis com o papel s\xE3o recusados pelo comando.",{role:r,limit:o.number().int().positive().max(100).optional(),cursor:o.string().min(1).optional(),status:o.string().min(1).optional(),search:o.string().min(1).optional(),source_type:o.string().min(1).optional(),operation_mode:o.string().min(1).optional(),shipper_id:o.uuid().optional(),base_id:o.uuid().optional()},({role:e,...i})=>[e,"routes","list",...s(i)]),a("genne_shipper_route_candidates","Papel eleg\xEDvel: shipper. Lista candidatos de rota na hierarquia da sess\xE3o. O contrato aceita base_id/status, mas o handler atual ignora esses filtros e n\xE3o retorna cursor. Consulta s\xEDncrona, sem confirma\xE7\xE3o; estes registros ainda pertencem ao planejamento e n\xE3o s\xE3o SavedRoutes nem rotas operacionais publicadas.",{base_id:o.uuid().optional(),status:o.string().min(1).optional()},e=>["shipper","route-candidates","list",...s(e)]),a("genne_carrier_route_candidates","Papel eleg\xEDvel: carrier. Lista candidatos de rota atribu\xEDdos \xE0 transportadora da sess\xE3o. Consulta s\xEDncrona, sem confirma\xE7\xE3o; estes registros ainda pertencem ao planejamento e n\xE3o s\xE3o SavedRoutes nem rotas operacionais publicadas.",{},()=>["carrier","route-candidates","list"]),a("genne_route_show","Consulta o detalhe de uma rota operacional vis\xEDvel ao papel ativo; o Core decide a ACL efetiva.",{role:r,route_id:o.uuid()},({role:e,route_id:i})=>[e,"routes",i,"show"]),a("genne_workbench_scopes","Lista escopos do workbench com backlog pendente para o papel ativo.",{role:r},({role:e})=>[e,"workbench","scopes"]),a("genne_workbench_batch","Get the route planning overview for an authorized import batch. Provide batch_id and set role to the active admin, carrier, or shipper role. Returns batch status, route candidates, order processing counts, and planning issues. Processing may still be pending. This read does not run planning or publish routes.",{role:r,batch_id:o.uuid()},({role:e,batch_id:i})=>[e,"workbench","show",`batch_id=${i}`]),a("genne_workbench_base","Get the route planning overview for an authorized shipper base. Provide shipper_account_id and base_id, and set role to the active admin, carrier, or shipper role. Returns the latest batch status, route candidates, order processing counts, and planning issues. This read does not run planning or publish routes.",{role:r,shipper_account_id:o.uuid(),base_id:o.uuid()},({role:e,shipper_account_id:i,base_id:n})=>[e,"workbench","show",`shipper_account_id=${i}`,`base_id=${n}`]),a("genne_tower_batch_cockpit","Consulta o cockpit da torre por lote autorizado; a leitura n\xE3o executa triagem nem gera assist\xEAncia.",{role:r,batch_id:o.uuid()},({role:e,batch_id:i})=>[e,"tower","cockpit",`batch_id=${i}`]),a("genne_tower_base_cockpit","Consulta o cockpit da torre por embarcador e base autorizados; a leitura n\xE3o executa triagem nem atualiza cota\xE7\xE3o.",{role:r,shipper_account_id:o.uuid(),base_id:o.uuid()},({role:e,shipper_account_id:i,base_id:n})=>[e,"tower","cockpit",`shipper_account_id=${i}`,`base_id=${n}`]),a("genne_tower_chat_messages","Consulta mensagens de uma thread da torre autorizada pelo Core. N\xE3o abre thread, envia mensagem nem gera c\xF3digo.",{role:u,thread_id:o.uuid()},({role:e,thread_id:i})=>[e,"tower","chat","thread",i,"messages"]),a("genne_admin_tower_threads","Lista threads de atendimento operacional vis\xEDveis ao Admin conforme ACL do Core.",{},()=>["admin","tower","chat","threads"]),a("genne_admin_tower_overview","Consulta a vis\xE3o geral da torre autorizada ao Admin; n\xE3o executa a\xE7\xF5es operacionais.",{},()=>["admin","tower","overview"]),a("genne_admin_tower_failure_catalog","Consulta o cat\xE1logo de motivos de insucesso dispon\xEDvel ao Admin; n\xE3o consome autoriza\xE7\xE3o.",{},()=>["admin","tower","failure-reasons","catalog"]),a("genne_tower_failure_catalog","Pap\xE9is eleg\xEDveis: driver, admin, carrier e shipper. Consulta o cat\xE1logo global de motivos de insucesso; \xE9 s\xEDncrona, sem confirma\xE7\xE3o, e n\xE3o altera policy, consome autoriza\xE7\xE3o ou gera assist\xEAncia.",{role:o.enum(["driver","admin","carrier","shipper"]),search:o.string().min(1).optional()},({role:e,search:i})=>[e,"tower","failure-reasons","catalog-global",...i===void 0?[]:[`search=${i}`]]),a("genne_admin_tower_failure_policy","Consulta a policy de insucesso de uma conta autorizada ao Admin; n\xE3o altera policy nem consome c\xF3digo.",{account_type:o.enum(["shippers","carriers"]),account_id:o.uuid()},({account_type:e,account_id:i})=>["admin","tower","failure-reasons",e,i,"show"]),a("genne_tower_failure_policy","Consulta a policy de insucesso efetiva da conta carrier ou shipper ativa; n\xE3o altera policy.",{role:o.enum(["carrier","shipper"])},({role:e})=>[e,"tower","failure-reasons","policy","show"]),a("genne_driver_tower_query","Get the saved document lookup result for the authenticated driver using a previously returned query_id. Returns that query_id and its stored lookup data. This read does not start a new lookup, refresh enrichment, or use credits.",{query_id:o.uuid()},({query_id:e})=>["driver","tower","queries",e,"show"])}t(p,"registerRoutesTowerReads");export{p as registerRoutesTowerReads};
1
+ var d=Object.defineProperty;var t=(a,e)=>d(a,"name",{value:e,configurable:!0});import{z as o}from"zod";const r=o.enum(["admin","carrier","shipper"]),u=o.enum(["driver","carrier","admin"]);function s(a){return Object.entries(a).filter(([,e])=>e!==void 0).map(([e,i])=>`${e}=${i}`)}t(s,"queryArgs");function p(a){a("genne_driver_routes","Lista SavedRoutes do motorista da sess\xE3o. Filtros s\xE3o aplicados pelo endpoint Core; 202 nunca \xE9 tratado como rota conclu\xEDda.",{limit:o.number().int().positive().max(100).optional(),cursor:o.string().min(1).optional(),status:o.enum(["open","completed","closed"]).optional(),is_favorite:o.enum(["true","false"]).optional(),date_from:o.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),date_to:o.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),search:o.string().min(1).optional()},e=>["driver","routes","list",...s(e)]),a("genne_driver_route_show","Consulta SavedRoute, waypoints, manifesto e estado de execu\xE7\xE3o do motorista autenticado; a posse \xE9 revalidada pelo Core.",{route_id:o.uuid()},({route_id:e})=>["driver","routes",e,"show"]),a("genne_driver_place_search","Busca endere\xE7os no mercado do motorista; somente consulta, sem criar waypoint ou rota.",{query:o.string().min(1)},({query:e})=>["driver","places","search",e]),a("genne_driver_place_details","Resolve um place_id em endere\xE7o e coordenadas para o motorista; n\xE3o grava a rota.",{place_id:o.string().min(1)},({place_id:e})=>["driver","places","details",e]),a("genne_driver_optimization","Consulta status e resultado de um job de otimiza\xE7\xE3o pr\xF3prio; processing ou 202 n\xE3o significa geometria aplic\xE1vel.",{job_id:o.uuid()},({job_id:e})=>["driver","optimization",e,"show"]),a("genne_driver_calculation","Consulta status e resultado de um job de c\xE1lculo pr\xF3prio; processing ou 202 n\xE3o significa geometria aplic\xE1vel.",{job_id:o.uuid()},({job_id:e})=>["driver","calculation",e,"show"]),a("genne_driver_plan","Consulta o job de planejamento pr\xF3prio; 202 \xE9 aceita\xE7\xE3o e n\xE3o cria uma SavedRoute.",{job_id:o.uuid()},({job_id:e})=>["driver","routes","plan",e,"show"]),a("genne_driver_failure_policy","Consulta os motivos de insucesso e a exig\xEAncia de autoriza\xE7\xE3o da parada pr\xF3pria; n\xE3o consome c\xF3digo de autoriza\xE7\xE3o.",{route_id:o.uuid(),waypoint_id:o.uuid()},({route_id:e,waypoint_id:i})=>["driver","routes",e,"waypoints",i,"failure-policy"]),a("genne_routes","Lista rotas operacionais vis\xEDveis no papel ativo. O Core revalida membership, conta, base e ACL; filtros incompat\xEDveis com o papel s\xE3o recusados pelo comando.",{role:r,limit:o.number().int().positive().max(100).optional(),cursor:o.string().min(1).optional(),status:o.string().min(1).optional(),search:o.string().min(1).optional(),source_type:o.string().min(1).optional(),operation_mode:o.string().min(1).optional(),shipper_id:o.uuid().optional(),base_id:o.uuid().optional()},({role:e,...i})=>[e,"routes","list",...s(i)]),a("genne_shipper_route_candidates","Papel eleg\xEDvel: shipper. Lista candidatos de rota na hierarquia da sess\xE3o. Os par\xE2metros base_id/status n\xE3o filtram os resultados nesta vers\xE3o; n\xE3o h\xE1 pagina\xE7\xE3o por cursor. Consulta s\xEDncrona, sem confirma\xE7\xE3o; estes registros ainda pertencem ao planejamento e n\xE3o s\xE3o SavedRoutes nem rotas operacionais publicadas.",{base_id:o.uuid().optional(),status:o.string().min(1).optional()},e=>["shipper","route-candidates","list",...s(e)]),a("genne_carrier_route_candidates","Papel eleg\xEDvel: carrier. Lista candidatos de rota atribu\xEDdos \xE0 transportadora da sess\xE3o. Consulta s\xEDncrona, sem confirma\xE7\xE3o; estes registros ainda pertencem ao planejamento e n\xE3o s\xE3o SavedRoutes nem rotas operacionais publicadas.",{},()=>["carrier","route-candidates","list"]),a("genne_route_show","Consulta o detalhe de uma rota operacional vis\xEDvel ao papel ativo; o Core decide a ACL efetiva.",{role:r,route_id:o.uuid()},({role:e,route_id:i})=>[e,"routes",i,"show"]),a("genne_workbench_scopes","Lista escopos do workbench com backlog pendente para o papel ativo.",{role:r},({role:e})=>[e,"workbench","scopes"]),a("genne_workbench_batch","Get the route planning overview for an authorized import batch. Provide batch_id and set role to the active admin, carrier, or shipper role. Returns batch status, route candidates, order processing counts, and planning issues. Processing may still be pending. This read does not run planning or publish routes.",{role:r,batch_id:o.uuid()},({role:e,batch_id:i})=>[e,"workbench","show",`batch_id=${i}`]),a("genne_workbench_base","Get the route planning overview for an authorized shipper base. Provide shipper_account_id and base_id, and set role to the active admin, carrier, or shipper role. Returns the latest batch status, route candidates, order processing counts, and planning issues. This read does not run planning or publish routes.",{role:r,shipper_account_id:o.uuid(),base_id:o.uuid()},({role:e,shipper_account_id:i,base_id:n})=>[e,"workbench","show",`shipper_account_id=${i}`,`base_id=${n}`]),a("genne_tower_batch_cockpit","Consulta o cockpit da torre por lote autorizado; a leitura n\xE3o executa triagem nem gera assist\xEAncia.",{role:r,batch_id:o.uuid()},({role:e,batch_id:i})=>[e,"tower","cockpit",`batch_id=${i}`]),a("genne_tower_base_cockpit","Consulta o cockpit da torre por embarcador e base autorizados; a leitura n\xE3o executa triagem nem atualiza cota\xE7\xE3o.",{role:r,shipper_account_id:o.uuid(),base_id:o.uuid()},({role:e,shipper_account_id:i,base_id:n})=>[e,"tower","cockpit",`shipper_account_id=${i}`,`base_id=${n}`]),a("genne_tower_chat_messages","Consulta mensagens de uma thread da torre autorizada pelo Core. N\xE3o abre thread, envia mensagem nem gera c\xF3digo.",{role:u,thread_id:o.uuid()},({role:e,thread_id:i})=>[e,"tower","chat","thread",i,"messages"]),a("genne_admin_tower_threads","Lista threads de atendimento operacional vis\xEDveis ao Admin conforme ACL do Core.",{},()=>["admin","tower","chat","threads"]),a("genne_admin_tower_overview","Consulta a vis\xE3o geral da torre autorizada ao Admin; n\xE3o executa a\xE7\xF5es operacionais.",{},()=>["admin","tower","overview"]),a("genne_admin_tower_failure_catalog","Consulta o cat\xE1logo de motivos de insucesso dispon\xEDvel ao Admin; n\xE3o consome autoriza\xE7\xE3o.",{},()=>["admin","tower","failure-reasons","catalog"]),a("genne_tower_failure_catalog","Pap\xE9is eleg\xEDveis: driver, admin, carrier e shipper. Consulta o cat\xE1logo global de motivos de insucesso; \xE9 s\xEDncrona, sem confirma\xE7\xE3o, e n\xE3o altera policy, consome autoriza\xE7\xE3o ou gera assist\xEAncia.",{role:o.enum(["driver","admin","carrier","shipper"]),search:o.string().min(1).optional()},({role:e,search:i})=>[e,"tower","failure-reasons","catalog-global",...i===void 0?[]:[`search=${i}`]]),a("genne_admin_tower_failure_policy","Consulta a policy de insucesso de uma conta autorizada ao Admin; n\xE3o altera policy nem consome c\xF3digo.",{account_type:o.enum(["shippers","carriers"]),account_id:o.uuid()},({account_type:e,account_id:i})=>["admin","tower","failure-reasons",e,i,"show"]),a("genne_tower_failure_policy","Consulta a policy de insucesso efetiva da conta carrier ou shipper ativa; n\xE3o altera policy.",{role:o.enum(["carrier","shipper"])},({role:e})=>[e,"tower","failure-reasons","policy","show"]),a("genne_driver_tower_query","Get the saved document lookup result for the authenticated driver using a previously returned query_id. Returns that query_id and its stored lookup data. This read does not start a new lookup, refresh enrichment, or use credits.",{query_id:o.uuid()},({query_id:e})=>["driver","tower","queries",e,"show"])}t(p,"registerRoutesTowerReads");export{p as registerRoutesTowerReads};
package/src/mcp.js CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- var $=Object.defineProperty;var h=(y,c)=>$(y,"name",{value:c,configurable:!0});import{McpServer as S}from"@modelcontextprotocol/server";import{serveStdio as U}from"@modelcontextprotocol/server/stdio";import{z as e}from"zod";import{pathToFileURL as j}from"node:url";import{CliError as I}from"./api.js";import{runOperation as H}from"./operations.js";import{registerLogisticsReads as L}from"./mcp-logistics.js";import{registerOperationalReads as O}from"./mcp-operational.js";import{registerAdministrationReads as E}from"./mcp-administration.js";import{registerRoutesTowerReads as N}from"./mcp-routes-tower.js";import{createRemoteMcpHandler as z}from"./remote-mcp.js";import{registerSupportFeedbackWrites as B}from"./mcp-support-feedback.js";import{registerDesktopOperationsWrites as J}from"./mcp-desktop-operations.js";import{bindCoreFetch as A}from"./core-fetch.js";function R(y=process.env){const c=new S({name:"genne-product",version:"0.1.0"}),a=h((t,o,r,n)=>{c.registerTool(t,{description:o,inputSchema:e.object(r),annotations:{readOnlyHint:!0,openWorldHint:t==="genne_driver_place_search"||t==="genne_driver_place_details",destructiveHint:!1}},async m=>{try{const i=await H(n(m),{env:y});return{content:[{type:"text",text:JSON.stringify(i)}]}}catch(i){return{isError:!0,content:[{type:"text",text:i instanceof I?i.message:"Falha interna do Genne MCP"}]}}})},"register");a("genne_help","Lista todos os comandos da CLI ou detalha um caminho; n\xE3o exige sess\xE3o Core.",{path:e.string().max(200).optional()},({path:t})=>["help",...t?.trim()?t.trim().split(/\s+/):[]]),a("genne_environment","Mostra o ambiente e a origem API efetivos sem expor credenciais.",{},()=>["env","show"]),a("genne_whoami","Consulta a identidade e o papel ativo da sess\xE3o Genne.",{},()=>["whoami"]),a("genne_shipper_route_show","Consulta uma rota operacional vis\xEDvel ao shipper da sess\xE3o.",{public_id:e.uuid()},({public_id:t})=>["shipper","route","show",t]),a("genne_user_me","Consulta os dados b\xE1sicos do usu\xE1rio da sess\xE3o.",{},()=>["users","me"]),a("genne_driver_profile","Consulta o perfil do motorista da sess\xE3o.",{},()=>["users","driver","profile"]),a("genne_driver_profile_details","Consulta o perfil operacional detalhado do motorista da sess\xE3o.",{},()=>["driver","profile","show"]),a("genne_driver_carriers","Lista transportadoras vinculadas ao motorista da sess\xE3o.",{},()=>["users","driver","carriers","list"]);for(const[t,o,r]of[["carrier","drivers","driver"],["driver","carriers","carrier"]])a(`genne_${t}_${r}_invitations`,`Lista convites da sess\xE3o ${t}; o Core decide ACL e escopo.`,{status:e.enum(["pending","accepted","declined","cancelled","expired"]).optional(),limit:e.number().int().min(1).max(100).optional(),cursor:e.string().optional()},n=>["users",t,o,"invitations","list",...Object.entries(n).filter(([,m])=>m!==void 0).map(([m,i])=>`${m}=${i}`)]),a(`genne_${t}_${r}_invitation_show`,`Consulta o estado can\xF4nico de um convite da sess\xE3o ${t}.`,{invitation_id:e.uuid()},({invitation_id:n})=>["users",t,o,"invitations","show",n]);a("genne_carrier_drivers","Lista motoristas vis\xEDveis \xE0 transportadora da sess\xE3o.",{},()=>["users","carrier","drivers","list"]),a("genne_carrier_driver_link","Consulta o v\xEDnculo de um motorista com a transportadora da sess\xE3o.",{driver_id:e.uuid()},({driver_id:t})=>["users","carrier","drivers","link",t]),a("genne_my_account_members","Lista os membros da conta shipper ou carrier da sess\xE3o.",{},()=>["access","my-account","members"]),a("genne_my_account_permission_catalog","Consulta permiss\xF5es B2B dispon\xEDveis na conta ativa.",{},()=>["access","my-account","catalog"]),a("genne_my_account_entitlements","Consulta m\xF3dulos habilitados na conta ativa.",{},()=>["access","my-account","entitlements"]),a("genne_my_account_member_access","Consulta permiss\xF5es de um membro da conta ativa.",{membership_id:e.uuid()},({membership_id:t})=>["access","my-account","member-access",t]),a("genne_admin_users","Lista usu\xE1rios vis\xEDveis ao admin da sess\xE3o.",{limit:e.number().int().positive().max(100).optional(),cursor:e.string().optional(),role:e.string().optional(),search:e.string().optional()},({limit:t,cursor:o,role:r,search:n})=>["users","admin","list",...Object.entries({limit:t,cursor:o,role:r,search:n}).filter(([,m])=>m!==void 0).map(([m,i])=>`${m}=${i}`)]),a("genne_admin_user_show","Consulta um usu\xE1rio vis\xEDvel ao admin da sess\xE3o.",{user_id:e.uuid()},({user_id:t})=>["users","admin","show",t]),a("genne_admin_drivers","Lista motoristas vis\xEDveis ao admin da sess\xE3o.",{},()=>["users","drivers","list"]),a("genne_admin_driver_profile","Consulta os campos operacionais do motorista autorizados ao admin.",{user_id:e.uuid()},({user_id:t})=>["users","admin","driver-profile",t,"show"]),a("genne_admin_permission_catalog","Consulta o cat\xE1logo de permiss\xF5es internas.",{},()=>["access","catalog"]),a("genne_admin_access_accounts","Lista contas dispon\xEDveis para gest\xE3o de acesso pelo admin autorizado.",{account_type:e.enum(["shipper","carrier"]).optional(),search:e.string().optional(),limit:e.number().int().positive().max(100).optional(),cursor:e.string().optional()},t=>["access","accounts","list",...Object.entries(t).map(([o,r])=>`${o}=${r}`)]),a("genne_admin_access_members","Lista v\xEDnculos B2B vis\xEDveis ao admin autorizado.",{limit:e.number().int().positive().max(100).optional(),cursor:e.string().optional(),search:e.string().optional(),status:e.string().optional(),membership_role:e.string().optional(),carrier_account_id:e.uuid().optional(),shipper_account_id:e.uuid().optional()},t=>["access","members","list",...Object.entries(t).map(([o,r])=>`${o}=${r}`)]),a("genne_admin_internal_users","Lista usu\xE1rios internos para gest\xE3o de ACL pelo admin autorizado.",{},()=>["access","internal","list"]),a("genne_admin_internal_access","Consulta o acesso interno de um usu\xE1rio admin.",{user_id:e.uuid()},({user_id:t})=>["access","internal","show",t]),a("genne_admin_account_members","Lista membros de uma conta B2B autorizada ao admin.",{business_account_id:e.uuid()},({business_account_id:t})=>["access","account",t,"members"]),a("genne_admin_account_entitlements","Consulta m\xF3dulos de uma conta B2B autorizada ao admin.",{business_account_id:e.uuid()},({business_account_id:t})=>["access","account",t,"entitlements"]),a("genne_admin_account_member_access","Consulta permiss\xF5es de um membro B2B autorizado ao admin.",{business_account_id:e.uuid(),membership_id:e.uuid()},({business_account_id:t,membership_id:o})=>["access","account",t,"member-access",o]),a("genne_admin_account_member_bases","Consulta bases autorizadas para um membro B2B.",{business_account_id:e.uuid(),membership_id:e.uuid()},({business_account_id:t,membership_id:o})=>["access","account",t,"member-bases",o]),a("genne_admin_companies","Lista empresas B2B vis\xEDveis ao admin.",{account_type:e.enum(["shipper","carrier"]).optional(),search:e.string().optional(),limit:e.number().int().positive().max(100).optional(),cursor:e.string().optional()},t=>["admin","companies","list",...Object.entries(t).map(([o,r])=>`${o}=${r}`)]),a("genne_admin_company_show","Consulta uma empresa B2B pelo ID p\xFAblico.",{business_account_id:e.uuid()},({business_account_id:t})=>["admin","companies","show",t]),a("genne_admin_shipper_bases","Lista bases de um embarcador pelo ID operacional p\xFAblico.",{shipper_account_id:e.uuid()},({shipper_account_id:t})=>["admin","shippers",t,"bases","list"]),a("genne_admin_carrier_bases","Lista bases de uma transportadora pelo ID operacional p\xFAblico.",{carrier_account_id:e.uuid()},({carrier_account_id:t})=>["admin","carriers",t,"bases","list"]);for(const t of["shipper","carrier"])a(`genne_admin_${t}_base_zones`,"Consulta zonas efetivas salvas da base com papel Admin e network_configuration.view ou manage, revalidados pelo Core. Informe account_id operacional do propriet\xE1rio e base_id p\xFAblicos; valida a refer\xEAncia \xE0 conta antes da leitura. Consulta s\xEDncrona, sem confirma\xE7\xE3o; n\xE3o altera cobertura.",{account_id:e.uuid().describe("UUID p\xFAblico operacional da conta propriet\xE1ria; n\xE3o \xE9 o ID da empresa B2B."),base_id:e.uuid().describe("UUID p\xFAblico da base pertencente \xE0 conta informada.")},({account_id:o,base_id:r})=>["admin",`${t}s`,o,"bases",r,"zone-overrides","list"]);return a("genne_admin_shipper_base_carrier_shares","Consulta distribui\xE7\xE3o configurada de carriers da base shipper com papel Admin e network_configuration.view ou manage, revalidados pelo Core. Informe account_id operacional do embarcador e base_id p\xFAblicos. Consulta s\xEDncrona, sem confirma\xE7\xE3o; n\xE3o altera shares.",{account_id:e.uuid().describe("UUID p\xFAblico operacional do embarcador propriet\xE1rio."),base_id:e.uuid()},({account_id:t,base_id:o})=>["admin","shippers",t,"bases",o,"carrier-shares","list"]),a("genne_carrier_base_reference_zones","Consulta cat\xE1logo de refer\xEAncia OSM para uma base pr\xF3pria da conta carrier ativa, com membership, ownership e route_operations.view, workbench ou publish revalidados pelo Core. N\xE3o representa cobertura operacional salva. Consulta s\xEDncrona, sem confirma\xE7\xE3o; use meta para pagina\xE7\xE3o e include_geometry para geometrias.",{base_id:e.uuid().describe("UUID p\xFAblico da base carrier da conta ativa."),limit:e.number().int().positive().max(100).optional(),cursor:e.string().min(1).optional(),search:e.string().min(1).optional(),min_lng:e.number().min(-180).max(180).optional(),min_lat:e.number().min(-90).max(90).optional(),max_lng:e.number().min(-180).max(180).optional(),max_lat:e.number().min(-90).max(90).optional(),include_geometry:e.boolean().optional()},({base_id:t,...o})=>["carrier","bases",t,"reference-zone-features","list",...Object.entries(o).map(([r,n])=>`${r}=${n}`)]),a("genne_shipper_bases","Lista bases da conta shipper ativa.",{},()=>["shipper","bases","list"]),a("genne_shipper_base_carrier_shares","Lista shares de transportadoras em uma base da conta shipper.",{base_id:e.uuid()},({base_id:t})=>["shipper","bases",t,"carrier-shares","list"]),a("genne_shipper_base_reference_zones","Lista zonas de refer\xEAncia de uma base da conta shipper.",{base_id:e.uuid(),limit:e.number().int().positive().max(100).optional(),cursor:e.string().min(1).optional(),search:e.string().min(1).optional(),min_lng:e.number().optional(),min_lat:e.number().optional(),max_lng:e.number().optional(),max_lat:e.number().optional(),include_geometry:e.boolean().optional()},({base_id:t,...o})=>["shipper","bases",t,"reference-zone-features","list",...Object.entries(o).map(([r,n])=>`${r}=${n}`)]),a("genne_my_company","Consulta a empresa ativa do embarcador ou transportadora da sess\xE3o.",{},()=>["company","my-account","show"]),a("genne_gr_requests","Lista solicita\xE7\xF5es de GR vis\xEDveis ao admin ou \xE0 transportadora da sess\xE3o.",{role:e.enum(["admin","carrier"]),carrier_account_id:e.uuid().optional(),provider_key:e.string().min(1).optional(),phase:e.string().min(1).optional(),operation_key:e.string().min(1).optional(),search:e.string().min(1).optional(),status:e.string().optional(),limit:e.number().int().positive().max(100).optional(),cursor:e.string().optional()},({role:t,...o})=>[t,"gr","requests","list",...Object.entries(o).filter(([,r])=>r!==void 0).map(([r,n])=>`${r}=${n}`)]),a("genne_gr_request_show","Consulta uma solicita\xE7\xE3o de GR pelo ID p\xFAblico, com ACL do Core.",{role:e.enum(["admin","carrier"]),request_id:e.uuid()},({role:t,request_id:o})=>[t,"gr","requests",o,"show"]),a("genne_gr_request_trail","Consulta tentativas, evid\xEAncias ou eventos de uma solicita\xE7\xE3o de GR autorizada.",{role:e.enum(["admin","carrier"]),request_id:e.uuid(),kind:e.enum(["attempts","evidence","orchestration-events"]),limit:e.number().int().positive().max(100).optional(),cursor:e.string().min(1).optional()},({role:t,request_id:o,kind:r,...n})=>[t,"gr","requests",o,r,...Object.entries(n).map(([m,i])=>`${m}=${i}`)]),a("genne_gr_provider_definitions","Lista defini\xE7\xF5es de providers GR vis\xEDveis \xE0 sess\xE3o.",{role:e.enum(["admin","carrier"])},({role:t})=>[t,"gr","provider-definitions","list"]),a("genne_gr_provider_accounts","Lista contas de providers GR vis\xEDveis ao papel ativo. carrier_account_id \xE9 filtro exclusivo Admin; search \xE9 exclusivo carrier; filtros incompat\xEDveis s\xE3o recusados.",{role:e.enum(["admin","carrier"]),carrier_account_id:e.uuid().optional(),search:e.string().min(1).optional(),provider_key:e.string().min(1).optional(),status:e.string().min(1).optional(),limit:e.number().int().positive().max(100).optional(),cursor:e.string().min(1).optional()},({role:t,...o})=>[t,"gr","providers","list",...Object.entries(o).map(([r,n])=>`${r}=${n}`)]),a("genne_gr_provider_mappings","Lista mapeamentos de opera\xE7\xF5es de uma conta GR autorizada.",{role:e.enum(["admin","carrier"]),provider_account_id:e.uuid(),active:e.boolean().optional()},({role:t,provider_account_id:o,...r})=>[t,"gr","providers",o,"mappings","list",...Object.entries(r).map(([n,m])=>`${n}=${m}`)]),a("genne_gr_provider_operations","Consulta opera\xE7\xF5es dispon\xEDveis na conta de provider GR autorizada.",{role:e.enum(["admin","carrier"]),provider_account_id:e.uuid()},({role:t,provider_account_id:o})=>[t,"gr","providers",o,"operations"]),a("genne_carrier_gr_blacklist","Lista v\xEDnculos bloqueados na transportadora da sess\xE3o.",{limit:e.number().int().positive().max(100).optional(),cursor:e.string().optional(),search:e.string().optional()},t=>["carrier","gr","blacklist","list",...Object.entries(t).map(([o,r])=>`${o}=${r}`)]),a("genne_admin_gr_blacklist","Lista v\xEDnculos bloqueados de uma transportadora vis\xEDvel ao admin.",{carrier_id:e.uuid(),limit:e.number().int().positive().max(100).optional(),cursor:e.string().optional(),search:e.string().optional()},({carrier_id:t,...o})=>["admin","gr","carriers",t,"blacklist","list",...Object.entries(o).map(([r,n])=>`${r}=${n}`)]),a("genne_carrier_gr_driver_export","Consulta perfil completo e prontid\xE3o GR de motorista vinculado \xE0 transportadora da sess\xE3o.",{driver_profile_id:e.uuid()},({driver_profile_id:t})=>["carrier","gr","drivers",t,"export"]),a("genne_admin_gr_driver_export","Consulta perfil completo e prontid\xE3o GR de motorista vinculado \xE0 transportadora autorizada.",{carrier_id:e.uuid(),driver_profile_id:e.uuid()},({carrier_id:t,driver_profile_id:o})=>["admin","gr","carriers",t,"drivers",o,"export"]),a("genne_carrier_gr_dashboard","Consulta o painel GR da transportadora ativa.",{},()=>["carrier","gr","dashboard"]),a("genne_admin_gr_dashboard","Consulta o painel GR de uma transportadora vis\xEDvel ao admin.",{carrier_id:e.uuid()},({carrier_id:t})=>["admin","gr","carriers",t,"dashboard"]),a("genne_carrier_gr_drivers","Lista motoristas GR da transportadora ativa.",{provider_account_id:e.uuid().optional(),document:e.string().min(1).optional(),training_pending:e.boolean().optional(),limit:e.number().int().positive().max(100).optional(),cursor:e.string().optional(),search:e.string().optional(),status:e.string().optional()},t=>["carrier","gr","drivers",...Object.entries(t).map(([o,r])=>`${o}=${r}`)]),a("genne_admin_gr_drivers","Lista motoristas GR de uma transportadora vis\xEDvel ao admin.",{carrier_id:e.uuid(),provider_account_id:e.uuid().optional(),document:e.string().min(1).optional(),training_pending:e.boolean().optional(),limit:e.number().int().positive().max(100).optional(),cursor:e.string().optional(),search:e.string().optional(),status:e.string().optional()},({carrier_id:t,...o})=>["admin","gr","carriers",t,"drivers",...Object.entries(o).map(([r,n])=>`${r}=${n}`)]),a("genne_admin_gr_driver_directory","Lista o diret\xF3rio GR global Admin, incluindo motoristas sem v\xEDnculo. carrier_account_id restringe \xE0 transportadora indicada; o Core exige gr.view ou gr.manage.",{carrier_account_id:e.uuid().optional(),provider_account_id:e.uuid().optional(),document:e.string().min(1).optional(),training_pending:e.boolean().optional(),limit:e.number().int().positive().max(100).optional(),cursor:e.string().optional(),search:e.string().optional(),status:e.string().optional()},t=>["admin","gr","drivers",...Object.entries(t).map(([o,r])=>`${o}=${r}`)]),a("genne_order_lookup","Consulta um pedido por c\xF3digo de barras na transportadora da sess\xE3o.",{barcode:e.string().min(1)},({barcode:t})=>["carrier","orders","lookup",t]),a("genne_carrier_shippers","Lista embarcadores geridos pela transportadora da sess\xE3o.",{},()=>["carrier","shippers","list"]),a("genne_carrier_shipper_bases","Lista bases de um embarcador vinculado \xE0 transportadora da sess\xE3o.",{shipper_id:e.uuid()},({shipper_id:t})=>["carrier","shippers",t,"bases","list"]),a("genne_admin_carrier_shippers","Lista embarcadores geridos por uma transportadora vis\xEDvel ao admin.",{carrier_id:e.uuid()},({carrier_id:t})=>["admin","operations",t,"shippers","list"]),a("genne_admin_carrier_shipper_bases","Lista bases de um embarcador gerido por uma transportadora vis\xEDvel ao admin.",{carrier_id:e.uuid(),shipper_id:e.uuid()},({carrier_id:t,shipper_id:o})=>["admin","operations",t,"shippers",o,"bases","list"]),a("genne_carrier_receiving_rules","Lista regras de recebimento da transportadora da sess\xE3o.",{},()=>["carrier","receiving","rules","list"]),a("genne_admin_receiving_rules","Lista regras de recebimento de uma transportadora vis\xEDvel ao admin.",{carrier_id:e.uuid()},({carrier_id:t})=>["admin","operations",t,"receiving","rules","list"]),a("genne_admin_order_lookup","Consulta pedido por c\xF3digo de barras em uma transportadora vis\xEDvel ao admin.",{carrier_id:e.uuid(),barcode:e.string().min(1)},({carrier_id:t,barcode:o})=>["admin","operations",t,"orders","lookup",o]),a("genne_admin_triage_batch","Consulta lote de triagem vis\xEDvel ao admin da sess\xE3o.",{batch_id:e.uuid()},({batch_id:t})=>["admin","triage","batches",t,"show"]),a("genne_admin_triage_batches","Lista lotes de triagem vis\xEDveis ao admin da sess\xE3o.",{limit:e.number().int().positive().max(100).optional(),cursor:e.string().min(1).optional(),search:e.string().min(1).optional()},t=>["admin","triage","batches","list",...Object.entries(t).map(([o,r])=>`${o}=${r}`)]),a("genne_carrier_desktop_grants","Lista concess\xF5es de providers Desktop da transportadora ativa.",{},()=>["carrier","desktop","grants","list"]),a("genne_carrier_desktop_sync_runs","Lista execu\xE7\xF5es de sincroniza\xE7\xE3o Desktop na transportadora da sess\xE3o.",{shipper_id:e.uuid().optional(),base_id:e.uuid().optional(),connection_id:e.uuid().optional(),device_id:e.string().min(8).max(128).regex(/^[A-Za-z0-9._:-]+$/).optional(),order_id:e.uuid().optional(),status:e.enum(["queued","claimed","running","succeeded","failed","blocked_no_runner","blocked_auth","outcome_unknown","cancelled"]).optional(),cursor:e.string().min(1).optional()},t=>["carrier","desktop","sync-runs","list",...Object.entries(t).map(([o,r])=>`${o}=${r}`)]),a("genne_carrier_desktop_execution","Consulta estado e receipt de uma execu\xE7\xE3o Desktop autorizada.",{execution_id:e.uuid()},({execution_id:t})=>["carrier","desktop","executions",t,"show"]),a("genne_carrier_desktop_candidates","Lista candidatos de pedido de uma execu\xE7\xE3o Desktop e dispositivo autorizados.",{execution_id:e.uuid(),device_id:e.string().min(8).max(128).regex(/^[A-Za-z0-9._:-]+$/),cursor:e.string().min(1).optional()},({execution_id:t,...o})=>["carrier","desktop","executions",t,"candidates","list",...Object.entries(o).map(([r,n])=>`${r}=${n}`)]),a("genne_carrier_desktop_receipt","Consulta receipt de importa\xE7\xE3o por execu\xE7\xE3o, dispositivo e chave de lote.",{execution_id:e.uuid(),device_id:e.string().min(8).max(128).regex(/^[A-Za-z0-9._:-]+$/),batch_key:e.string().min(16).max(128).regex(/^[A-Za-z0-9._:-]+$/)},({execution_id:t,device_id:o,batch_key:r})=>["carrier","desktop","executions",t,"receipt",`device_id=${o}`,`batch_key=${r}`]),a("genne_carrier_desktop_operation_routes","Lista revis\xF5es de rotas operacionais Desktop da transportadora.",{},()=>["carrier","desktop","operation-routes","list"]),a("genne_carrier_desktop_orders","Lista pedidos can\xF4nicos vis\xEDveis \xE0 transportadora ativa no Desktop.",{shipper_id:e.uuid().optional(),base_id:e.uuid().optional(),query:e.string().optional(),cursor:e.string().optional(),status_sync:e.literal(!0).optional()},t=>["carrier","desktop","orders","list",...Object.entries(t).map(([o,r])=>`${o}=${r}`)]),a("genne_carrier_desktop_order_show","Consulta pedido can\xF4nico por ID na transportadora ativa no Desktop.",{order_id:e.uuid()},({order_id:t})=>["carrier","desktop","orders",t,"show"]),a("genne_carrier_desktop_device_runs","Lista resultados de recebimento de um dispositivo da transportadora.",{base_id:e.uuid().optional(),shipper_id:e.uuid().optional(),operation_kind:e.enum(["sack_receipt","package_receipt","route_creation","dispatch","transfer","return"]).optional(),device_id:e.string().min(8).max(128),cursor:e.string().optional(),limit:e.number().int().positive().max(100).optional()},t=>["carrier","desktop","operation-runs","list",...Object.entries(t).map(([o,r])=>`${o}=${r}`)]),a("genne_carrier_desktop_monitor_runs","Lista resultados de recebimento no monitor da transportadora.",{base_id:e.uuid().optional(),shipper_id:e.uuid().optional(),operation_kind:e.enum(["sack_receipt","package_receipt","route_creation","dispatch","transfer","return"]).optional(),monitor:e.literal(!0),cursor:e.string().optional(),limit:e.number().int().positive().max(100).optional()},t=>["carrier","desktop","operation-runs","list",...Object.entries(t).map(([o,r])=>`${o}=${r}`)]),a("genne_import_batch","Consulta o estado de um lote de importa\xE7\xE3o vis\xEDvel ao papel ativo.",{role:e.enum(["admin","carrier","shipper"]),batch_id:e.uuid(),include_orders:e.boolean().optional()},({role:t,batch_id:o,include_orders:r})=>[t,"orders","imports",o,"show",...r===void 0?[]:[`include_orders=${r}`]]),a("genne_import_orders","Lista pedidos de um lote de importa\xE7\xE3o vis\xEDvel ao papel ativo.",{role:e.enum(["admin","carrier","shipper"]),batch_id:e.uuid(),search:e.string().min(1).optional(),geocode_status:e.string().min(1).optional(),only_errors:e.boolean().optional(),limit:e.number().int().positive().max(100).optional(),cursor:e.string().optional()},({role:t,batch_id:o,...r})=>[t,"orders","imports",o,"orders","list",...Object.entries(r).filter(([,n])=>n!==void 0).map(([n,m])=>`${n}=${m}`)]),a("genne_carrier_status_outbox","Consulta eventos de status da transportadora da sess\xE3o.",{shipper_id:e.uuid().optional(),sink_type:e.enum(["webhook","ocoren","adapter"]).optional(),adapter_type:e.string().min(1).optional()},t=>["carrier","status-outbox",...Object.entries(t).map(([o,r])=>`${o}=${r}`)]),a("genne_admin_status_outbox","Consulta eventos de status de uma transportadora vis\xEDvel ao admin.",{carrier_account_id:e.uuid(),shipper_id:e.uuid().optional(),sink_type:e.enum(["webhook","ocoren","adapter"]).optional(),adapter_type:e.string().min(1).optional()},({carrier_account_id:t,...o})=>["admin","operations",t,"status-outbox",...Object.entries(o).map(([r,n])=>`${r}=${n}`)]),L(a),O(a),E(a),N(a),c}h(R,"createProductServer");function F(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_faq_save_draft",{description:"Solicita aprova\xE7\xE3o humana para salvar uma FAQ publicada como rascunho; ap\xF3s a aprova\xE7\xE3o, executa a mesma inten\xE7\xE3o e devolve o receipt.",inputSchema:e.object({target:e.uuid(),expected_version:e.number().int().positive(),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({target:n,expected_version:m,idempotency_key:i,intent_id:s})=>{const l=s?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(s)}/execute`:"/api/v1/auth/mcp/write-intents";try{const u=await r(new URL(l,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":i,"content-type":"application/json"},body:JSON.stringify({target:n,expected_version:m})}),d=await u.json();if(!u.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${d.error??u.status}`}]};const p=d.data,_=s?p:{...p,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(p.public_id)}?role=${encodeURIComponent(p.active_role)}`,o).href,next_step:"A pessoa deve revisar e aprovar esta inten\xE7\xE3o em outra sess\xE3o Core de login por senha; depois repita a chamada com intent_id e os mesmos target, expected_version e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(_)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(F,"registerRemoteFaqDraft");function T(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_user_me_update",{description:"Solicita aprova\xE7\xE3o humana para alterar somente campos do pr\xF3prio perfil. Ap\xF3s aprova\xE7\xE3o, repita com intent_id, changes e idempotency_key id\xEAnticos para executar.",inputSchema:e.object({changes:e.object({name:e.string().optional(),phone:e.string().optional(),vehicle_type:e.string().optional(),navigation_app_preference:e.string().optional()}).strict(),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({changes:n,idempotency_key:m,intent_id:i})=>{const s=i?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(i)}/execute`:"/api/v1/auth/mcp/write-intents";try{const l=await r(new URL(s,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":m,"content-type":"application/json"},body:JSON.stringify({operation:"user.me.update",changes:n})}),u=await l.json();if(!l.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${u.error??l.status}`}]};const d=u.data,p=i?d:{...d,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(d.public_id)}?role=${encodeURIComponent(d.active_role)}`,o).href,next_step:"Revise e aprove o antes/depois em outra sess\xE3o Core de login por senha; depois repita com intent_id, changes e idempotency_key id\xEAnticos."};return{content:[{type:"text",text:JSON.stringify(p)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(T,"registerRemoteProfileUpdate");function P(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_admin_internal_user_access_set",{description:"Substitui todo o ACL de um usu\xE1rio interno Admin ap\xF3s aprova\xE7\xE3o em outra sess\xE3o. Informe user_id, admin_access_level (staff ou super_admin) e a lista completa permission_keys; para super_admin a lista deve ser vazia. Repita com intent_id e os mesmos campos e idempotency_key para executar. O Core valida permiss\xE3o access_governance.manage e mudan\xE7as de super_admin.",inputSchema:e.object({user_id:e.uuid(),admin_access_level:e.enum(["staff","super_admin"]),permission_keys:e.array(e.string()).refine(n=>new Set(n).size===n.length),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}).strict(),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({user_id:n,admin_access_level:m,permission_keys:i,idempotency_key:s,intent_id:l})=>{const u=l?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(l)}/execute`:"/api/v1/auth/mcp/write-intents";try{const d=await r(new URL(u,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":s,"content-type":"application/json"},body:JSON.stringify({operation:"admin.internal_user_access.set",user_id:n,admin_access_level:m,permission_keys:i})}),p=await d.json();if(!d.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${p.error??d.status}`}]};const _=p.data,v=l?_:{..._,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(_.public_id)}?role=${encodeURIComponent(_.active_role)}`,o).href,next_step:"Revise usu\xE1rio e ACL antes/depois em outra sess\xE3o Core; depois repita com intent_id, os mesmos campos e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(v)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(P,"registerRemoteAdminInternalUserAccessSet");function D(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_business_member_access_set",{description:"Substitui papel e lista completa de permiss\xF5es de um membro B2B com aprova\xE7\xE3o em outra sess\xE3o. Admin informa account_id; carrier/shipper usam a conta ativa e omitem account_id. Requer access_governance.manage no Admin ou workspace.permissions.manage no cliente. Repita com intent_id, os mesmos campos e idempotency_key para executar.",inputSchema:e.object({account_id:e.uuid().optional(),membership_id:e.uuid(),membership_role:e.enum(["owner","operator","dispatcher","finance"]),permission_keys:e.array(e.string()).refine(n=>new Set(n).size===n.length),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}).strict(),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({account_id:n,membership_id:m,membership_role:i,permission_keys:s,idempotency_key:l,intent_id:u})=>{const d=u?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(u)}/execute`:"/api/v1/auth/mcp/write-intents";try{const p=await r(new URL(d,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":l,"content-type":"application/json"},body:JSON.stringify({operation:"business.member_access.set",account_id:n,membership_id:m,membership_role:i,permission_keys:s})}),_=await p.json();if(!p.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${_.error??p.status}`}]};const v=_.data,g=u?v:{...v,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(v.public_id)}?role=${encodeURIComponent(v.active_role)}`,o).href,next_step:"Revise empresa, membro e ACL antes/depois em outra sess\xE3o Core; depois repita com intent_id e a mesma idempotency_key."};return{content:[{type:"text",text:JSON.stringify(g)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(D,"registerRemoteBusinessMemberAccessSet");function W(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_business_member_status_set",{description:"Ativa ou desativa um membro B2B com aprova\xE7\xE3o em outra sess\xE3o. Admin informa account_id; carrier/shipper usam a conta ativa e omitem account_id. Requer business_accounts_registry.manage no Admin ou workspace.members.manage no cliente. Repita com intent_id e a mesma idempotency_key ap\xF3s a aprova\xE7\xE3o.",inputSchema:e.object({account_id:e.uuid().optional(),membership_id:e.uuid(),status:e.enum(["active","inactive"]),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}).strict(),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({account_id:n,membership_id:m,status:i,idempotency_key:s,intent_id:l})=>{const u=l?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(l)}/execute`:"/api/v1/auth/mcp/write-intents";try{const d=await r(new URL(u,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":s,"content-type":"application/json"},body:JSON.stringify({operation:"business.member_status.set",account_id:n,membership_id:m,status:i})}),p=await d.json();if(!d.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${p.error??d.status}`}]};const _=p.data,v=l?_:{..._,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(_.public_id)}?role=${encodeURIComponent(_.active_role)}`,o).href,next_step:"Revise empresa, membro e status antes/depois em outra sess\xE3o Core; depois repita com intent_id e a mesma idempotency_key."};return{content:[{type:"text",text:JSON.stringify(v)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(W,"registerRemoteBusinessMemberStatusSet");function G(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){const n={account_id:e.uuid().optional(),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()},m=[{name:"genne_business_member_invite",operation:"business.member.invite",description:"Convida um membro B2B com aprova\xE7\xE3o separada. Admin informa account_id e member.workspace_role (carrier ou shipper); clientes omitem ambos e usam a conta ativa. Carrier permite operator, dispatcher e finance; shipper permite operator e finance; Admin tamb\xE9m permite owner. Requer a ACL de gest\xE3o de membros do endpoint existente. Repita os mesmos dados e idempotency_key com intent_id. Um v\xEDnculo existente conserva o acesso e n\xE3o gera outro envio. Receipt pending significa e-mail enfileirado; consulte genne_my_account_members ou genne_admin_account_members para acompanhar o envio.",inputSchema:e.object({...n,member:e.object({email:e.string().trim().toLowerCase().pipe(e.email()),membership_role:e.enum(["owner","operator","dispatcher","finance"]),workspace_role:e.enum(["carrier","shipper"]).optional()}).strict()}).strict()},{name:"genne_business_member_invitation_resend",operation:"business.member_invitation.resend",description:"Reenvia um convite B2B conforme as regras atuais, com aprova\xE7\xE3o separada. Admin informa account_id; carrier/shipper omitem e usam a conta ativa. Informe membership_id e chave est\xE1vel; repita com intent_id ap\xF3s aprova\xE7\xE3o. Receipt pending significa enfileirado. Consulte genne_my_account_members ou genne_admin_account_members para acompanhar; convite de cadastro j\xE1 enviado n\xE3o pode ser reenviado.",inputSchema:e.object({...n,membership_id:e.uuid()}).strict()}];for(const{name:i,operation:s,description:l,inputSchema:u}of m)y.registerTool(i,{description:l,inputSchema:u,annotations:{readOnlyHint:!1,openWorldHint:i==="genne_business_member_invite",destructiveHint:!0,idempotentHint:!0}},async({idempotency_key:d,intent_id:p,..._})=>{const v=p?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(p)}/execute`:"/api/v1/auth/mcp/write-intents";try{const g=await r(new URL(v,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":d,"content-type":"application/json"},body:JSON.stringify({operation:s,..._})}),b=await g.json();if(!g.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${b.error??g.status}`}]};const f=b.data,x=p?f:{...f,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(f.public_id)}?role=${encodeURIComponent(f.active_role)}`,o).href,next_step:"Revise empresa, destinat\xE1rio e papel em outra sess\xE3o Core. Repita os mesmos dados e chave com intent_id ap\xF3s aprova\xE7\xE3o. Pending indica enfileirado; acompanhe o envio na consulta de membros."};return{content:[{type:"text",text:JSON.stringify(x)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(G,"registerRemoteBusinessMemberInvitations");function q(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_company_my_account_update",{description:"Solicita aprova\xE7\xE3o para mudar legal_name ou trading_name da empresa carrier/shipper ativa. Repita com intent_id e a mesma chave ap\xF3s a aprova\xE7\xE3o.",inputSchema:e.object({changes:e.object({legal_name:e.string().min(1).max(255).optional(),trading_name:e.string().min(1).max(255).optional()}).strict().refine(n=>Object.keys(n).length>0),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({changes:n,idempotency_key:m,intent_id:i})=>{const s=i?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(i)}/execute`:"/api/v1/auth/mcp/write-intents";try{const l=await r(new URL(s,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":m,"content-type":"application/json"},body:JSON.stringify({operation:"company.my_account.update",changes:n})}),u=await l.json();if(!l.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${u.error??l.status}`}]};const d=u.data,p=i?d:{...d,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(d.public_id)}?role=${encodeURIComponent(d.active_role)}`,o).href,next_step:"Revise e aprove a altera\xE7\xE3o da empresa ativa no navegador; depois repita com intent_id, changes e idempotency_key id\xEAnticos."};return{content:[{type:"text",text:JSON.stringify(p)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(q,"registerRemoteCompanyUpdate");function M(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_admin_company_update",{description:"Solicita aprova\xE7\xE3o para alterar legal_name ou trading_name de uma empresa B2B selecionada por UUID. Exige sess\xE3o Admin com business_accounts_registry.manage. Repita com intent_id, account_id, changes e a mesma chave ap\xF3s aprova\xE7\xE3o em outra sess\xE3o Admin.",inputSchema:e.object({account_id:e.uuid(),changes:e.object({legal_name:e.string().min(1).max(255).optional(),trading_name:e.string().min(1).max(255).optional()}).strict().refine(n=>Object.keys(n).length>0),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}).strict(),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({account_id:n,changes:m,idempotency_key:i,intent_id:s})=>{const l=s?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(s)}/execute`:"/api/v1/auth/mcp/write-intents";try{const u=await r(new URL(l,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":i,"content-type":"application/json"},body:JSON.stringify({operation:"company.admin.update",account_id:n,changes:m})}),d=await u.json();if(!u.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${d.error??u.status}`}]};const p=d.data,_=s?p:{...p,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(p.public_id)}?role=admin`,o).href,next_step:"Revise empresa e valores antes/depois em outra sess\xE3o Core Admin; depois repita com intent_id, account_id, changes e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(_)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(M,"registerRemoteAdminCompanyUpdate");function Z(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){for(const n of[{tool:"genne_admin_carrier_base_create",operation:"base.carrier.create",subject:"transportadora"},{tool:"genne_admin_shipper_base_create",operation:"base.admin_shipper.create",subject:"embarcador"}])y.registerTool(n.tool,{description:`Solicita aprova\xE7\xE3o para criar uma base de ${n.subject} como Admin com a ACL do Core. Repita com intent_id e os mesmos dados ap\xF3s aprova\xE7\xE3o.`,inputSchema:e.object({account_id:e.uuid(),base:e.object({code:e.string().trim().min(1).max(255),name:e.string().trim().min(1).max(255),origin_address:e.string().trim().min(1).max(255),market_id:e.uuid(),country_code:e.string().regex(/^[A-Z]{2}$/),currency_code:e.string().regex(/^[A-Z]{3}$/),timezone:e.string().trim().min(1).max(255)}).strict(),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!1,idempotentHint:!0}},async({account_id:m,base:i,idempotency_key:s,intent_id:l})=>{const u=l?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(l)}/execute`:"/api/v1/auth/mcp/write-intents";try{const d=await r(new URL(u,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":s,"content-type":"application/json"},body:JSON.stringify({operation:n.operation,account_id:m,base:i})}),p=await d.json();if(!d.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${p.error??d.status}`}]};const _=p.data,v=l?_:{..._,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(_.public_id)}?role=admin`,o).href,next_step:`Revise ${n.subject} e base em outra sess\xE3o Core Admin; depois repita com intent_id, account_id, base e idempotency_key id\xEAnticos.`};return{content:[{type:"text",text:JSON.stringify(v)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(Z,"registerRemoteAdminBaseCreate");function X(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){const m={...Object.fromEntries(["code","name","origin_address","postal_code","place_id","street","street_number","neighborhood","city","state","state_code","country","geocode_provider","timezone"].map(i=>[i,e.string().optional()])),origin_lat:e.number().min(-90).max(90).optional(),origin_lng:e.number().min(-180).max(180).optional(),triage_rules:e.record(e.string(),e.unknown()).optional()};for(const i of[{tool:"genne_admin_shipper_base_update",operation:"base.admin_shipper.update",fields:{...m,metadata:e.record(e.string(),e.unknown()).optional(),balancing_policy:e.record(e.string(),e.unknown()).optional()}},{tool:"genne_admin_carrier_base_update",operation:"base.admin_carrier.update",fields:m},{tool:"genne_admin_shipper_base_set_status",operation:"base.admin_shipper.set_status"},{tool:"genne_admin_shipper_base_cutoff_windows_set",operation:"base.admin_shipper.cutoff_windows.set",cutoff:!0},{tool:"genne_admin_carrier_base_cutoff_windows_set",operation:"base.admin_carrier.cutoff_windows.set",cutoff:!0}])y.registerTool(i.tool,{description:i.fields?"Edita uma base com papel Admin standalone e network_configuration.manage. account_id \xE9 o UUID operacional da conta propriet\xE1ria. Revise conta, base, valores atuais e resultantes no link de aprova\xE7\xE3o; repita os mesmos dados e chave com intent_id. Campos omitidos s\xE3o preservados; mercado, country_code, moeda, ownership, status e null s\xE3o recusados. 412 exige nova leitura e inten\xE7\xE3o.":i.cutoff?"Substitui todos os hor\xE1rios de corte de uma base shipper/carrier com papel Admin standalone e network_configuration.manage. account_id \xE9 o UUID operacional propriet\xE1rio. windows cont\xE9m weekday 0..6, cutoff_time HH:MM[:SS] no timezone da base e auto_publish opcional; [] remove todos. Base shipper com execu\xE7\xF5es de corte vinculadas \xE9 recusada com 409 cutoff_dispatches_exist para preservar hist\xF3rico e execu\xE7\xE3o; n\xE3o h\xE1 reagendamento impl\xEDcito. Revise conta, base, timezone e hor\xE1rios atuais/resultantes na aprova\xE7\xE3o Core. Repita os mesmos dados e idempotency_key com intent_id. A execu\xE7\xE3o s\xEDncrona grava filhos e receipt atomicamente no Core; 412 exige nova inten\xE7\xE3o, replay retorna o receipt original.":"Ativa ou desativa uma base de embarcador com papel Admin standalone e network_configuration.manage. Informe account_id operacional da conta propriet\xE1ria, base_id e status active/inactive. Revise conta, base, status atual e resultante no link de aprova\xE7\xE3o; repita os mesmos dados e chave com intent_id. 412 exige nova leitura e inten\xE7\xE3o; replay devolve o receipt original.",inputSchema:e.object({account_id:e.uuid(),base_id:e.uuid(),...i.fields?{changes:e.object(i.fields).strict().refine(s=>Object.keys(s).length>0,"Informe uma altera\xE7\xE3o")}:i.cutoff?{windows:e.array(e.object({weekday:e.number().int().min(0).max(6),cutoff_time:e.string().regex(/^(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d)?$/),auto_publish:e.boolean().optional()}).strict())}:{status:e.enum(["active","inactive"])},idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}).strict(),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({account_id:s,base_id:l,changes:u,status:d,windows:p,idempotency_key:_,intent_id:v})=>{const g=v?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(v)}/execute`:"/api/v1/auth/mcp/write-intents";try{const b=await r(new URL(g,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":_,"content-type":"application/json"},body:JSON.stringify({operation:i.operation,account_id:s,base_id:l,...i.fields?{changes:u}:i.cutoff?{windows:p}:{status:d}})}),f=await b.json();if(!b.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${f.error??b.status}`}]};const x=v?f.data:{...f.data,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(f.data.public_id)}?role=admin`,o).href,next_step:"Revise a base em outra sess\xE3o Admin e repita com intent_id e os mesmos dados e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(x)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(X,"registerRemoteAdminBaseChange");function Q(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_admin_carrier_base_set_status",{description:"Solicita aprova\xE7\xE3o para ativar ou desativar operacionalmente uma base carrier como Admin com network_configuration.manage. Repita com intent_id, base_id, status e a mesma chave ap\xF3s aprova\xE7\xE3o.",inputSchema:e.object({base_id:e.uuid(),status:e.enum(["active","inactive"]),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}).strict(),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({base_id:n,status:m,idempotency_key:i,intent_id:s})=>{const l=s?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(s)}/execute`:"/api/v1/auth/mcp/write-intents";try{const u=await r(new URL(l,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":i,"content-type":"application/json"},body:JSON.stringify({operation:"base.admin_carrier.set_status",base_id:n,status:m})}),d=await u.json();if(!u.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${d.error??u.status}`}]};const p=d.data,_=s?p:{...p,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(p.public_id)}?role=admin`,o).href,next_step:"Revise base e estado antes/depois em outra sess\xE3o Core Admin; depois repita com intent_id, base_id, status e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(_)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(Q,"registerRemoteAdminCarrierBaseStatus");function V(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){const n=e.object({code:e.string().trim().min(1).max(255),name:e.string().trim().min(1).max(255),origin_address:e.string().trim().min(1).max(255).optional(),origin_lat:e.number().min(-90).max(90).optional(),origin_lng:e.number().min(-180).max(180).optional(),timezone:e.string().trim().min(1).max(255).optional(),triage_rules:e.record(e.string(),e.unknown()).optional(),metadata:e.record(e.string(),e.unknown()).optional()}).strict().refine(m=>m.origin_lat===void 0==(m.origin_lng===void 0),{message:"origin_lat e origin_lng devem ser informados juntos"});for(const m of[{tool:"genne_shipper_base_create",operation:"base.shipper.create",role:"shipper"},{tool:"genne_carrier_shipper_base_create",operation:"base.carrier_shipper.create",role:"carrier"}])y.registerTool(m.tool,{description:m.role==="carrier"?"Solicita aprova\xE7\xE3o para criar uma base nova de embarcador vinculada \xE0 transportadora ativa. Informe c\xF3digo em mai\xFAsculas; repita com intent_id e os mesmos dados ap\xF3s aprova\xE7\xE3o.":"Solicita aprova\xE7\xE3o para criar uma base da conta shipper ativa com route_operations.workbench. Repita com intent_id e os mesmos dados ap\xF3s aprova\xE7\xE3o.",inputSchema:e.object({...m.role==="carrier"?{shipper_id:e.uuid()}:{},base:m.role==="carrier"?n.refine(i=>i.code===i.code.toUpperCase(),{message:"code deve estar em mai\xFAsculas"}):n,idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}).strict(),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!1,idempotentHint:!0}},async({shipper_id:i,base:s,idempotency_key:l,intent_id:u})=>{const d=u?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(u)}/execute`:"/api/v1/auth/mcp/write-intents";try{const p=await r(new URL(d,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":l,"content-type":"application/json"},body:JSON.stringify({operation:m.operation,...i?{shipper_id:i}:{},base:s})}),_=await p.json();if(!p.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${_.error??p.status}`}]};const v=_.data,g=u?v:{...v,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(v.public_id)}?role=${m.role}`,o).href,next_step:m.role==="carrier"?"Revise a transportadora, o embarcador e a base em outra sess\xE3o Core da mesma conta carrier; depois repita com intent_id, shipper_id, base e idempotency_key id\xEAnticos.":"Revise a base em outra sess\xE3o Core da mesma conta shipper; depois repita com intent_id, base e idempotency_key id\xEAnticos."};return{content:[{type:"text",text:JSON.stringify(g)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(V,"registerRemoteShipperBaseCreate");function Y(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_gr_driver_training_update",{description:"Solicita aprova\xE7\xE3o para marcar o treinamento GR de um motorista vis\xEDvel ao admin ou carrier. Repita com intent_id e a mesma chave ap\xF3s a aprova\xE7\xE3o.",inputSchema:e.object({target:e.uuid(),training_watched:e.boolean(),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({target:n,training_watched:m,idempotency_key:i,intent_id:s})=>{const l=s?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(s)}/execute`:"/api/v1/auth/mcp/write-intents";try{const u=await r(new URL(l,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":i,"content-type":"application/json"},body:JSON.stringify({operation:"gr.driver_training.update",target:n,training_watched:m})}),d=await u.json();if(!u.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${d.error??u.status}`}]};const p=d.data,_=s?p:{...p,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(p.public_id)}?role=${encodeURIComponent(p.active_role)}`,o).href,next_step:"Revise e aprove o treinamento GR em outra sess\xE3o Core; depois repita com intent_id, target, training_watched e idempotency_key id\xEAnticos."};return{content:[{type:"text",text:JSON.stringify(_)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(Y,"registerRemoteGrTrainingUpdate");function K(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_order_triage_address_update",{description:"Solicita aprova\xE7\xE3o para corrigir o endere\xE7o de um pedido em lote de triagem (admin). Coordenadas manuais exigem latitude e longitude juntas. Repita com intent_id e a mesma chave ap\xF3s a aprova\xE7\xE3o.",inputSchema:e.object({batch_id:e.uuid(),order_id:e.uuid(),destination_address:e.string().min(1),destination_lat:e.number().min(-90).max(90).optional(),destination_lng:e.number().min(-180).max(180).optional(),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({batch_id:n,order_id:m,destination_address:i,destination_lat:s,destination_lng:l,idempotency_key:u,intent_id:d})=>{const p=d?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(d)}/execute`:"/api/v1/auth/mcp/write-intents",_={operation:"order.triage_address.update",batch_id:n,order_id:m,destination_address:i};s!==void 0&&l!==void 0&&(_.destination_lat=s,_.destination_lng=l);try{const v=await r(new URL(p,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":u,"content-type":"application/json"},body:JSON.stringify(_)}),g=await v.json();if(!v.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${g.error??v.status}`}]};const b=g.data,f=d?b:{...b,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(b.public_id)}?role=${encodeURIComponent(b.active_role)}`,o).href,next_step:"Revise e aprove a corre\xE7\xE3o do pedido em outra sess\xE3o Core; depois repita com intent_id e os mesmos campos e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(f)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(K,"registerRemoteTriageOrderUpdate");function ee(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_receiving_scan",{description:"Solicita aprova\xE7\xE3o para registrar um bip de recebimento na carrier ativa. Admin informa carrier_account_id; carrier usa a conta da sess\xE3o. Repita com intent_id e a mesma chave ap\xF3s aprova\xE7\xE3o.",inputSchema:e.object({barcode:e.string().min(1),carrier_account_id:e.uuid().optional(),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({barcode:n,carrier_account_id:m,idempotency_key:i,intent_id:s})=>{const l=s?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(s)}/execute`:"/api/v1/auth/mcp/write-intents",u={operation:"receiving.order.scan",barcode:n};m&&(u.carrier_account_id=m);try{const d=await r(new URL(l,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":i,"content-type":"application/json"},body:JSON.stringify(u)}),p=await d.json();if(!d.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${p.error??d.status}`}]};const _=p.data,v=s?_:{..._,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(_.public_id)}?role=${encodeURIComponent(_.active_role)}`,o).href,next_step:"Revise o pedido e c\xF3digo bipado em outra sess\xE3o Core; depois repita com intent_id, o mesmo barcode, carrier_account_id quando usado e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(v)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(ee,"registerRemoteReceivingScan");function te(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){const m={...{shipper_id:e.uuid().nullable().optional(),base_id:e.uuid().nullable().optional()},code:e.string().min(1).max(255),name:e.string().min(1).max(255),postal_code_start:e.string().min(1).max(16),postal_code_end:e.string().min(1).max(16),priority_order:e.number().int().min(0).optional(),status:e.enum(["active","inactive"]).optional(),metadata:e.record(e.string(),e.unknown()).optional()},i=e.object(m).strict(),s=i.partial().refine(u=>Object.keys(u).length>0,{message:"changes deve conter ao menos um campo"}),l=h(async({operation:u,carrier_account_id:d,rule_id:p,values:_,idempotency_key:v,intent_id:g})=>{const b=g?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(g)}/execute`:"/api/v1/auth/mcp/write-intents",f={operation:u,..._};d!==void 0&&(f.carrier_account_id=d),p!==void 0&&(f.rule_id=p);try{const x=await r(new URL(b,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":v,"content-type":"application/json"},body:JSON.stringify(f)}),k=await x.json();if(!x.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${k.error??x.status}`}]};const w=k.data,C=g?w:{...w,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(w.public_id)}?role=${encodeURIComponent(w.active_role)}`,o).href,next_step:"Revise transportadora, escopo e regra antes/depois em outra sess\xE3o Core; depois repita com intent_id, os mesmos campos e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(C)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}},"send");y.registerTool("genne_receiving_rule_create",{description:"Solicita aprova\xE7\xE3o para criar regra de recebimento global, de shipper ou por base. Admin informa carrier_account_id; carrier usa a conta ativa. Repita com intent_id e o mesmo rule ap\xF3s aprova\xE7\xE3o.",inputSchema:e.object({carrier_account_id:e.uuid().optional(),rule:i,idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}).strict(),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!1,idempotentHint:!0}},async({carrier_account_id:u,rule:d,idempotency_key:p,intent_id:_})=>l({operation:"receiving.rule.create",carrier_account_id:u,values:d,idempotency_key:p,intent_id:_})),y.registerTool("genne_receiving_rule_update",{description:"Solicita aprova\xE7\xE3o para atualizar parcialmente uma regra de recebimento. Campos de escopo omitidos s\xE3o preservados e null expl\xEDcito \xE9 enviado ao Core. Admin informa carrier_account_id; carrier usa a conta ativa.",inputSchema:e.object({carrier_account_id:e.uuid().optional(),rule_id:e.uuid(),changes:s,idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}).strict(),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({carrier_account_id:u,rule_id:d,changes:p,idempotency_key:_,intent_id:v})=>l({operation:"receiving.rule.update",carrier_account_id:u,rule_id:d,values:p,idempotency_key:_,intent_id:v}))}h(te,"registerRemoteReceivingRules");function oe(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_dispatch_route_create",{description:"Solicita aprova\xE7\xE3o para criar rota de expedi\xE7\xE3o com pedidos recebidos na carrier ativa. Admin informa carrier_account_id. Repita com intent_id e os mesmos campos e chave ap\xF3s aprova\xE7\xE3o.",inputSchema:e.object({driver_user_id:e.uuid(),barcodes:e.array(e.string().min(1).max(128)).min(1).max(100),route_name:e.string().min(1).max(120).optional(),carrier_account_id:e.uuid().optional(),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!1,idempotentHint:!0}},async({driver_user_id:n,barcodes:m,route_name:i,carrier_account_id:s,idempotency_key:l,intent_id:u})=>{const d=u?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(u)}/execute`:"/api/v1/auth/mcp/write-intents",p={operation:"dispatch.route.create",driver_user_id:n,barcodes:m};i&&(p.route_name=i),s&&(p.carrier_account_id=s);try{const _=await r(new URL(d,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":l,"content-type":"application/json"},body:JSON.stringify(p)}),v=await _.json();if(!_.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${v.error??_.status}`}]};const g=v.data,b=u?g:{...g,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(g.public_id)}?role=${encodeURIComponent(g.active_role)}`,o).href,next_step:"Revise motorista e pedidos em outra sess\xE3o Core; depois repita com intent_id, os mesmos campos e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(b)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(oe,"registerRemoteDispatchRouteCreate");function ae(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_dispatch_route_add_orders",{description:"Solicita aprova\xE7\xE3o para adicionar pedidos recebidos a uma rota de expedi\xE7\xE3o manual ativa da carrier. Admin informa carrier_account_id; carrier usa a conta ativa. A rota pode j\xE1 ter iniciado. Repita com intent_id e os mesmos campos e chave ap\xF3s aprova\xE7\xE3o.",inputSchema:e.object({route_id:e.uuid(),barcodes:e.array(e.string().min(1).max(128)).min(1).max(100),reason:e.string().min(1).max(500).optional(),carrier_account_id:e.uuid().optional(),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({route_id:n,barcodes:m,reason:i,carrier_account_id:s,idempotency_key:l,intent_id:u})=>{const d=u?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(u)}/execute`:"/api/v1/auth/mcp/write-intents",p={operation:"dispatch.route.add_orders",route_id:n,barcodes:m};i!==void 0&&(p.reason=i),s&&(p.carrier_account_id=s);try{const _=await r(new URL(d,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":l,"content-type":"application/json"},body:JSON.stringify(p)}),v=await _.json();if(!_.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${v.error??_.status}`}]};const g=v.data,b=u?g:{...g,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(g.public_id)}?role=${encodeURIComponent(g.active_role)}`,o).href,next_step:"Revise a rota, os pedidos e o motivo em outra sess\xE3o Core; depois repita com intent_id, os mesmos campos e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(b)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(ae,"registerRemoteDispatchRouteAddOrders");function ne(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){for(const n of[{tool:"genne_driver_route_start",operation:"driver.route.start",verb:"iniciar"},{tool:"genne_driver_route_finish",operation:"driver.route.finish",verb:"concluir"}])y.registerTool(n.tool,{description:`Solicita aprova\xE7\xE3o para ${n.verb} uma SavedRoute pr\xF3pria do motorista. Repita com intent_id, o mesmo route_id e a mesma chave ap\xF3s aprova\xE7\xE3o em outra sess\xE3o driver.`,inputSchema:e.object({route_id:e.uuid(),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({route_id:m,idempotency_key:i,intent_id:s})=>{const l=s?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(s)}/execute`:"/api/v1/auth/mcp/write-intents";try{const u=await r(new URL(l,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":i,"content-type":"application/json"},body:JSON.stringify({operation:n.operation,route_id:m})}),d=await u.json();if(!u.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${d.error??u.status}`}]};const p=d.data,_=s?p:{...p,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(p.public_id)}?role=driver`,o).href,next_step:"Revise a rota em outra sess\xE3o Core do mesmo motorista; depois repita com intent_id, route_id e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(_)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(ne,"registerRemoteDriverRouteTransitions");function ie(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_driver_waypoint_deliver",{description:"Solicita aprova\xE7\xE3o para entregar os itens pendentes de uma parada em SavedRoute pr\xF3pria. O Core valida check-in e atualiza manifesto e eventos quando aplic\xE1veis. Repita com intent_id, os mesmos IDs e a mesma chave ap\xF3s aprova\xE7\xE3o em outra sess\xE3o driver.",inputSchema:e.object({route_id:e.uuid(),waypoint_id:e.uuid(),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({route_id:n,waypoint_id:m,idempotency_key:i,intent_id:s})=>{const l=s?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(s)}/execute`:"/api/v1/auth/mcp/write-intents";try{const u=await r(new URL(l,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":i,"content-type":"application/json"},body:JSON.stringify({operation:"driver.waypoint.deliver",route_id:n,waypoint_id:m})}),d=await u.json();if(!u.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${d.error??u.status}`}]};const p=d.data,_=s?p:{...p,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(p.public_id)}?role=driver`,o).href,next_step:"Revise rota e parada em outra sess\xE3o Core do mesmo motorista; depois repita com intent_id, route_id, waypoint_id e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(_)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(ie,"registerRemoteDriverWaypointDeliver");function re(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_driver_package_item_deliver",{description:"Solicita aprova\xE7\xE3o para entregar um item pendente do manifesto em parada de rota pr\xF3pria. O Core valida check-in, estado e eventos. Repita com intent_id, os mesmos IDs e a mesma chave ap\xF3s aprova\xE7\xE3o em outra sess\xE3o driver.",inputSchema:e.object({route_id:e.uuid(),waypoint_id:e.uuid(),item_id:e.uuid(),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({route_id:n,waypoint_id:m,item_id:i,idempotency_key:s,intent_id:l})=>{const u=l?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(l)}/execute`:"/api/v1/auth/mcp/write-intents";try{const d=await r(new URL(u,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":s,"content-type":"application/json"},body:JSON.stringify({operation:"driver.package_item.deliver",route_id:n,waypoint_id:m,item_id:i})}),p=await d.json();if(!d.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${p.error??d.status}`}]};const _=p.data,v=l?_:{..._,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(_.public_id)}?role=driver`,o).href,next_step:"Revise rota, parada e item em outra sess\xE3o Core do mesmo motorista; depois repita com intent_id, route_id, waypoint_id, item_id e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(v)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(re,"registerRemoteDriverPackageItemDeliver");function se(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_driver_waypoint_navigation_start",{description:"Solicita aprova\xE7\xE3o para registrar um evento de in\xEDcio de navega\xE7\xE3o em uma parada pr\xF3pria. N\xE3o abre um aplicativo de navega\xE7\xE3o nem altera carga ou status. Telemetria \xE9 opcional; o provider padr\xE3o \xE9 navigation_sdk_in_app. O Core valida posse, janela de edi\xE7\xE3o e ACL. Repita com intent_id, os mesmos dados e a mesma chave ap\xF3s aprova\xE7\xE3o em outra sess\xE3o driver.",inputSchema:e.object({route_id:e.uuid(),waypoint_id:e.uuid(),navigation_provider:e.string().trim().min(1).optional(),nav_sdk_version:e.string().trim().min(1).optional(),boot_duration_ms:e.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER).optional(),waypoint_index:e.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER).optional(),packages_count:e.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER).optional(),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!1,idempotentHint:!0}},async({idempotency_key:n,intent_id:m,...i})=>{const s=m?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(m)}/execute`:"/api/v1/auth/mcp/write-intents",l={operation:"driver.waypoint.navigation.start",...i};try{const u=await r(new URL(s,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":n,"content-type":"application/json"},body:JSON.stringify(l)}),d=await u.json();if(!u.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${d.error??u.status}`}]};const p=d.data,_=m?p:{...p,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(p.public_id)}?role=driver`,o).href,next_step:"Revise a rota, a parada e a telemetria do evento em outra sess\xE3o Core do mesmo motorista; depois repita com intent_id, os mesmos dados e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(_)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(se,"registerRemoteDriverWaypointNavigationStart");function pe(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_driver_waypoint_notes",{description:"Solicita aprova\xE7\xE3o para substituir a observa\xE7\xE3o de uma parada pr\xF3pria do motorista. Envie notes como string; uma string vazia limpa a observa\xE7\xE3o. O Core valida posse e janela de edi\xE7\xE3o. Repita com intent_id, os mesmos dados e a mesma chave ap\xF3s aprova\xE7\xE3o em outra sess\xE3o driver.",inputSchema:e.object({route_id:e.uuid(),waypoint_id:e.uuid(),notes:e.string(),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({route_id:n,waypoint_id:m,notes:i,idempotency_key:s,intent_id:l})=>{const u=l?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(l)}/execute`:"/api/v1/auth/mcp/write-intents",d={operation:"driver.waypoint.notes",route_id:n,waypoint_id:m,notes:i};try{const p=await r(new URL(u,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":s,"content-type":"application/json"},body:JSON.stringify(d)}),_=await p.json();if(!p.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${_.error??p.status}`}]};const v=_.data,g=l?v:{...v,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(v.public_id)}?role=driver`,o).href,next_step:"Revise a rota, a parada e a observa\xE7\xE3o em outra sess\xE3o Core do mesmo motorista; depois repita com intent_id, os mesmos dados e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(g)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(pe,"registerRemoteDriverWaypointNotes");function ce(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_driver_waypoint_packages",{description:"Solicita aprova\xE7\xE3o para alterar a quantidade de volumes de uma parada pr\xF3pria sem manifesto importado. Zero \xE9 v\xE1lido. O Core protege os itens do manifesto, valida posse e janela de edi\xE7\xE3o. Repita com intent_id, os mesmos dados e a mesma chave ap\xF3s aprova\xE7\xE3o em outra sess\xE3o driver.",inputSchema:e.object({route_id:e.uuid(),waypoint_id:e.uuid(),packages_count:e.number().int().min(0).max(2147483647),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({route_id:n,waypoint_id:m,packages_count:i,idempotency_key:s,intent_id:l})=>{const u=l?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(l)}/execute`:"/api/v1/auth/mcp/write-intents",d={operation:"driver.waypoint.packages",route_id:n,waypoint_id:m,packages_count:i};try{const p=await r(new URL(u,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":s,"content-type":"application/json"},body:JSON.stringify(d)}),_=await p.json();if(!p.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${_.error??p.status}`}]};const v=_.data,g=l?v:{...v,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(v.public_id)}?role=driver`,o).href,next_step:"Revise a rota, a parada e a quantidade de volumes em outra sess\xE3o Core do mesmo motorista; depois repita com intent_id, os mesmos dados e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(g)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(ce,"registerRemoteDriverWaypointPackages");function de(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_driver_waypoint_check_in",{description:"Solicita aprova\xE7\xE3o para registrar a localiza\xE7\xE3o atual em uma parada pr\xF3pria do motorista. O check-in \xE9 aditivo e o Core calcula dist\xE2ncia, limite e alerta. Repita com intent_id, os mesmos dados e a mesma chave ap\xF3s aprova\xE7\xE3o em outra sess\xE3o driver.",inputSchema:e.object({route_id:e.uuid(),waypoint_id:e.uuid(),lat:e.number().min(-90).max(90),lng:e.number().min(-180).max(180),accuracy_meters:e.number().min(0).optional(),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!1,idempotentHint:!0}},async({route_id:n,waypoint_id:m,lat:i,lng:s,accuracy_meters:l,idempotency_key:u,intent_id:d})=>{const p=d?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(d)}/execute`:"/api/v1/auth/mcp/write-intents",_={operation:"driver.waypoint.check_in",route_id:n,waypoint_id:m,lat:i,lng:s};l!==void 0&&(_.accuracy_meters=l);try{const v=await r(new URL(p,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":u,"content-type":"application/json"},body:JSON.stringify(_)}),g=await v.json();if(!v.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${g.error??v.status}`}]};const b=g.data,f=d?b:{...b,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(b.public_id)}?role=driver`,o).href,next_step:"Revise a rota, a parada e as coordenadas em outra sess\xE3o Core do mesmo motorista; depois repita com intent_id, os mesmos dados e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(f)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(de,"registerRemoteDriverWaypointCheckIn");function me(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_driver_carrier_link",{description:"Solicita aprova\xE7\xE3o para vincular o motorista da sess\xE3o \xE0 transportadora identificada pelo c\xF3digo. O c\xF3digo n\xE3o aparece na aprova\xE7\xE3o. Repita com intent_id, o mesmo c\xF3digo e a mesma chave ap\xF3s aprova\xE7\xE3o em outra sess\xE3o driver.",inputSchema:e.object({driver_link_code:e.string().regex(/^\s*[A-Za-z0-9]{5}\s*$/),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({driver_link_code:n,idempotency_key:m,intent_id:i})=>{const s=i?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(i)}/execute`:"/api/v1/auth/mcp/write-intents";try{const l=await r(new URL(s,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":m,"content-type":"application/json"},body:JSON.stringify({operation:"driver.carrier.link",driver_link_code:n.trim().toUpperCase()})}),u=await l.json();if(!l.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${u.error??l.status}`}]};const d=u.data,p=i?d:{...d,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(d.public_id)}?role=driver`,o).href,next_step:"Revise a transportadora e o estado do v\xEDnculo em outra sess\xE3o Core driver; depois repita com intent_id, driver_link_code e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(p)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(me,"registerRemoteDriverCarrierLink");function ue(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_tower_failure_policy_update",{description:"Solicita aprova\xE7\xE3o para alterar os motivos de insucesso permitidos \xE0 conta carrier/shipper ativa. Admin informa account_type e account_id. Repita com intent_id e os mesmos dados ap\xF3s aprova\xE7\xE3o.",inputSchema:e.object({reason_codes:e.array(e.string().min(1).max(64)).max(100),account_type:e.enum(["carrier","shipper"]).optional(),account_id:e.uuid().optional(),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({reason_codes:n,account_type:m,account_id:i,idempotency_key:s,intent_id:l})=>{const u=l?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(l)}/execute`:"/api/v1/auth/mcp/write-intents",d={operation:"tower.failure_policy.update",reason_codes:n};m&&(d.account_type=m),i&&(d.account_id=i);try{const p=await r(new URL(u,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":s,"content-type":"application/json"},body:JSON.stringify(d)}),_=await p.json();if(!p.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${_.error??p.status}`}]};const v=_.data,g=l?v:{...v,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(v.public_id)}?role=${encodeURIComponent(v.active_role)}`,o).href,next_step:"Revise conta e lista de motivos em outra sess\xE3o Core; depois repita com intent_id, os mesmos campos e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(g)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(ue,"registerRemoteTowerFailurePolicyUpdate");function Ue({auth:y,coreOrigin:c,resource:a,adapterKey:t,adminOrigin:o,fetchImpl:r=fetch}){return z({auth:y,coreOrigin:c,resource:a,createServerForContext:h(({coreAccessToken:n,context:m})=>{const i=R({GENNE_API_URL:c,GENNE_ACCESS_TOKEN:n});if(t&&o&&m.scopes?.includes("genne.write.request")){const s=A(r);B(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),J(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),F(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),T(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),P(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),D(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),W(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),G(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),q(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),M(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),Z(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),X(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),Q(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),V(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),Y(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),K(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),ee(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),te(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),oe(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),ae(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),ne(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),de(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),se(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),pe(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),ce(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),me(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),ie(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),re(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),ue(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s})}return i},"createServerForContext")})}h(Ue,"createRemoteProductMcpHandler"),process.argv[1]&&import.meta.url===j(process.argv[1]).href&&U(()=>R());export{R as createProductServer,Ue as createRemoteProductMcpHandler};
2
+ var $=Object.defineProperty;var h=(y,c)=>$(y,"name",{value:c,configurable:!0});import{McpServer as S}from"@modelcontextprotocol/server";import{serveStdio as U}from"@modelcontextprotocol/server/stdio";import{z as e}from"zod";import{pathToFileURL as j}from"node:url";import{CliError as I}from"./api.js";import{runOperation as H}from"./operations.js";import{registerLogisticsReads as L}from"./mcp-logistics.js";import{registerOperationalReads as O}from"./mcp-operational.js";import{registerAdministrationReads as z}from"./mcp-administration.js";import{registerRoutesTowerReads as E}from"./mcp-routes-tower.js";import{createRemoteMcpHandler as N}from"./remote-mcp.js";import{registerSupportFeedbackWrites as B}from"./mcp-support-feedback.js";import{registerDesktopOperationsWrites as J}from"./mcp-desktop-operations.js";import{bindCoreFetch as F}from"./core-fetch.js";function k(y=process.env){const c=new S({name:"genne-product",version:"0.1.0"}),a=h((t,o,r,n)=>{c.registerTool(t,{description:o,inputSchema:e.object(r),annotations:{readOnlyHint:!0,openWorldHint:t==="genne_driver_place_search"||t==="genne_driver_place_details",destructiveHint:!1}},async m=>{try{const i=await H(n(m),{env:y});return{content:[{type:"text",text:JSON.stringify(i)}]}}catch(i){return{isError:!0,content:[{type:"text",text:i instanceof I?i.message:"Falha interna do Genne MCP"}]}}})},"register");a("genne_help","Lista todos os comandos da CLI ou detalha um caminho; n\xE3o exige sess\xE3o Core.",{path:e.string().max(200).optional()},({path:t})=>["help",...t?.trim()?t.trim().split(/\s+/):[]]),a("genne_environment","Mostra o ambiente e a origem API efetivos sem expor credenciais.",{},()=>["env","show"]),a("genne_whoami","Consulta a identidade e o papel ativo da sess\xE3o Genne.",{},()=>["whoami"]),a("genne_shipper_route_show","Consulta uma rota operacional vis\xEDvel ao shipper da sess\xE3o.",{public_id:e.uuid()},({public_id:t})=>["shipper","route","show",t]),a("genne_user_me","Consulta os dados b\xE1sicos do usu\xE1rio da sess\xE3o.",{},()=>["users","me"]),a("genne_driver_profile","Consulta o perfil do motorista da sess\xE3o.",{},()=>["users","driver","profile"]),a("genne_driver_profile_details","Consulta o perfil operacional detalhado do motorista da sess\xE3o.",{},()=>["driver","profile","show"]),a("genne_driver_carriers","Lista transportadoras vinculadas ao motorista da sess\xE3o.",{},()=>["users","driver","carriers","list"]);for(const[t,o,r]of[["carrier","drivers","driver"],["driver","carriers","carrier"]])a(`genne_${t}_${r}_invitations`,`Lista convites da sess\xE3o ${t}; o Core decide ACL e escopo.`,{status:e.enum(["pending","accepted","declined","cancelled","expired"]).optional(),limit:e.number().int().min(1).max(100).optional(),cursor:e.string().optional()},n=>["users",t,o,"invitations","list",...Object.entries(n).filter(([,m])=>m!==void 0).map(([m,i])=>`${m}=${i}`)]),a(`genne_${t}_${r}_invitation_show`,`Consulta o estado can\xF4nico de um convite da sess\xE3o ${t}.`,{invitation_id:e.uuid()},({invitation_id:n})=>["users",t,o,"invitations","show",n]);a("genne_carrier_drivers","Lista motoristas vis\xEDveis \xE0 transportadora da sess\xE3o.",{},()=>["users","carrier","drivers","list"]),a("genne_carrier_driver_link","Consulta o v\xEDnculo de um motorista com a transportadora da sess\xE3o.",{driver_id:e.uuid()},({driver_id:t})=>["users","carrier","drivers","link",t]),a("genne_my_account_members","Lista os membros da conta shipper ou carrier da sess\xE3o.",{},()=>["access","my-account","members"]),a("genne_my_account_permission_catalog","Consulta permiss\xF5es B2B dispon\xEDveis na conta ativa.",{},()=>["access","my-account","catalog"]),a("genne_my_account_entitlements","Consulta m\xF3dulos habilitados na conta ativa.",{},()=>["access","my-account","entitlements"]),a("genne_my_account_member_access","Consulta permiss\xF5es de um membro da conta ativa.",{membership_id:e.uuid()},({membership_id:t})=>["access","my-account","member-access",t]),a("genne_admin_users","Lista usu\xE1rios vis\xEDveis ao admin da sess\xE3o.",{limit:e.number().int().positive().max(100).optional(),cursor:e.string().optional(),role:e.string().optional(),search:e.string().optional()},({limit:t,cursor:o,role:r,search:n})=>["users","admin","list",...Object.entries({limit:t,cursor:o,role:r,search:n}).filter(([,m])=>m!==void 0).map(([m,i])=>`${m}=${i}`)]),a("genne_admin_user_show","Consulta um usu\xE1rio vis\xEDvel ao admin da sess\xE3o.",{user_id:e.uuid()},({user_id:t})=>["users","admin","show",t]),a("genne_admin_drivers","Lista motoristas vis\xEDveis ao admin da sess\xE3o.",{},()=>["users","drivers","list"]),a("genne_admin_driver_profile","Consulta os campos operacionais do motorista autorizados ao admin.",{user_id:e.uuid()},({user_id:t})=>["users","admin","driver-profile",t,"show"]),a("genne_admin_permission_catalog","Consulta o cat\xE1logo de permiss\xF5es internas.",{},()=>["access","catalog"]),a("genne_admin_access_accounts","Lista contas dispon\xEDveis para gest\xE3o de acesso pelo admin autorizado.",{account_type:e.enum(["shipper","carrier"]).optional(),search:e.string().optional(),limit:e.number().int().positive().max(100).optional(),cursor:e.string().optional()},t=>["access","accounts","list",...Object.entries(t).map(([o,r])=>`${o}=${r}`)]),a("genne_admin_access_members","Lista v\xEDnculos B2B vis\xEDveis ao admin autorizado.",{limit:e.number().int().positive().max(100).optional(),cursor:e.string().optional(),search:e.string().optional(),status:e.string().optional(),membership_role:e.string().optional(),carrier_account_id:e.uuid().optional(),shipper_account_id:e.uuid().optional()},t=>["access","members","list",...Object.entries(t).map(([o,r])=>`${o}=${r}`)]),a("genne_admin_internal_users","Lista usu\xE1rios internos para gest\xE3o de ACL pelo admin autorizado.",{},()=>["access","internal","list"]),a("genne_admin_internal_access","Consulta o acesso interno de um usu\xE1rio admin.",{user_id:e.uuid()},({user_id:t})=>["access","internal","show",t]),a("genne_admin_account_members","Lista membros de uma conta B2B autorizada ao admin.",{business_account_id:e.uuid()},({business_account_id:t})=>["access","account",t,"members"]),a("genne_admin_account_entitlements","Consulta m\xF3dulos de uma conta B2B autorizada ao admin.",{business_account_id:e.uuid()},({business_account_id:t})=>["access","account",t,"entitlements"]),a("genne_admin_account_member_access","Consulta permiss\xF5es de um membro B2B autorizado ao admin.",{business_account_id:e.uuid(),membership_id:e.uuid()},({business_account_id:t,membership_id:o})=>["access","account",t,"member-access",o]),a("genne_admin_account_member_bases","Consulta bases autorizadas para um membro B2B.",{business_account_id:e.uuid(),membership_id:e.uuid()},({business_account_id:t,membership_id:o})=>["access","account",t,"member-bases",o]),a("genne_admin_companies","Lista empresas B2B vis\xEDveis ao admin.",{account_type:e.enum(["shipper","carrier"]).optional(),search:e.string().optional(),limit:e.number().int().positive().max(100).optional(),cursor:e.string().optional()},t=>["admin","companies","list",...Object.entries(t).map(([o,r])=>`${o}=${r}`)]),a("genne_admin_company_show","Consulta uma empresa B2B pelo ID p\xFAblico.",{business_account_id:e.uuid()},({business_account_id:t})=>["admin","companies","show",t]),a("genne_admin_shipper_bases","Lista bases de um embarcador pelo ID operacional p\xFAblico.",{shipper_account_id:e.uuid()},({shipper_account_id:t})=>["admin","shippers",t,"bases","list"]),a("genne_admin_carrier_bases","Lista bases de uma transportadora pelo ID operacional p\xFAblico.",{carrier_account_id:e.uuid()},({carrier_account_id:t})=>["admin","carriers",t,"bases","list"]);for(const t of["shipper","carrier"])a(`genne_admin_${t}_base_zones`,"Consulta zonas efetivas salvas da base com sess\xE3o Admin autorizada. Informe account_id operacional do propriet\xE1rio e base_id p\xFAblicos; valida a refer\xEAncia \xE0 conta antes da leitura. Consulta s\xEDncrona, sem confirma\xE7\xE3o; n\xE3o altera cobertura.",{account_id:e.uuid().describe("UUID p\xFAblico operacional da conta propriet\xE1ria; n\xE3o \xE9 o ID da empresa B2B."),base_id:e.uuid().describe("UUID p\xFAblico da base pertencente \xE0 conta informada.")},({account_id:o,base_id:r})=>["admin",`${t}s`,o,"bases",r,"zone-overrides","list"]);return a("genne_admin_shipper_base_carrier_shares","Consulta distribui\xE7\xE3o configurada de carriers da base shipper com sess\xE3o Admin autorizada. Informe account_id operacional do embarcador e base_id p\xFAblicos. Consulta s\xEDncrona, sem confirma\xE7\xE3o; n\xE3o altera shares.",{account_id:e.uuid().describe("UUID p\xFAblico operacional do embarcador propriet\xE1rio."),base_id:e.uuid()},({account_id:t,base_id:o})=>["admin","shippers",t,"bases",o,"carrier-shares","list"]),a("genne_carrier_base_reference_zones","Consulta cat\xE1logo de refer\xEAncia OSM para uma base pr\xF3pria da conta carrier ativa, conforme as permiss\xF5es da sess\xE3o. N\xE3o representa cobertura operacional salva. Consulta s\xEDncrona, sem confirma\xE7\xE3o; use meta para pagina\xE7\xE3o e include_geometry para geometrias.",{base_id:e.uuid().describe("UUID p\xFAblico da base carrier da conta ativa."),limit:e.number().int().positive().max(100).optional(),cursor:e.string().min(1).optional(),search:e.string().min(1).optional(),min_lng:e.number().min(-180).max(180).optional(),min_lat:e.number().min(-90).max(90).optional(),max_lng:e.number().min(-180).max(180).optional(),max_lat:e.number().min(-90).max(90).optional(),include_geometry:e.boolean().optional()},({base_id:t,...o})=>["carrier","bases",t,"reference-zone-features","list",...Object.entries(o).map(([r,n])=>`${r}=${n}`)]),a("genne_shipper_bases","Lista bases da conta shipper ativa.",{},()=>["shipper","bases","list"]),a("genne_shipper_base_carrier_shares","Lista shares de transportadoras em uma base da conta shipper.",{base_id:e.uuid()},({base_id:t})=>["shipper","bases",t,"carrier-shares","list"]),a("genne_shipper_base_reference_zones","Lista zonas de refer\xEAncia de uma base da conta shipper.",{base_id:e.uuid(),limit:e.number().int().positive().max(100).optional(),cursor:e.string().min(1).optional(),search:e.string().min(1).optional(),min_lng:e.number().optional(),min_lat:e.number().optional(),max_lng:e.number().optional(),max_lat:e.number().optional(),include_geometry:e.boolean().optional()},({base_id:t,...o})=>["shipper","bases",t,"reference-zone-features","list",...Object.entries(o).map(([r,n])=>`${r}=${n}`)]),a("genne_my_company","Consulta a empresa ativa do embarcador ou transportadora da sess\xE3o.",{},()=>["company","my-account","show"]),a("genne_gr_requests","Lista solicita\xE7\xF5es de GR vis\xEDveis ao admin ou \xE0 transportadora da sess\xE3o.",{role:e.enum(["admin","carrier"]),carrier_account_id:e.uuid().optional(),provider_key:e.string().min(1).optional(),phase:e.string().min(1).optional(),operation_key:e.string().min(1).optional(),search:e.string().min(1).optional(),status:e.string().optional(),limit:e.number().int().positive().max(100).optional(),cursor:e.string().optional()},({role:t,...o})=>[t,"gr","requests","list",...Object.entries(o).filter(([,r])=>r!==void 0).map(([r,n])=>`${r}=${n}`)]),a("genne_gr_request_show","Consulta uma solicita\xE7\xE3o de GR pelo ID p\xFAblico, com ACL do Core.",{role:e.enum(["admin","carrier"]),request_id:e.uuid()},({role:t,request_id:o})=>[t,"gr","requests",o,"show"]),a("genne_gr_request_trail","Consulta tentativas, evid\xEAncias ou eventos de uma solicita\xE7\xE3o de GR autorizada.",{role:e.enum(["admin","carrier"]),request_id:e.uuid(),kind:e.enum(["attempts","evidence","orchestration-events"]),limit:e.number().int().positive().max(100).optional(),cursor:e.string().min(1).optional()},({role:t,request_id:o,kind:r,...n})=>[t,"gr","requests",o,r,...Object.entries(n).map(([m,i])=>`${m}=${i}`)]),a("genne_gr_provider_definitions","Lista defini\xE7\xF5es de providers GR vis\xEDveis \xE0 sess\xE3o.",{role:e.enum(["admin","carrier"])},({role:t})=>[t,"gr","provider-definitions","list"]),a("genne_gr_provider_accounts","Lista contas de providers GR vis\xEDveis ao papel ativo. carrier_account_id \xE9 filtro exclusivo Admin; search \xE9 exclusivo carrier; filtros incompat\xEDveis s\xE3o recusados.",{role:e.enum(["admin","carrier"]),carrier_account_id:e.uuid().optional(),search:e.string().min(1).optional(),provider_key:e.string().min(1).optional(),status:e.string().min(1).optional(),limit:e.number().int().positive().max(100).optional(),cursor:e.string().min(1).optional()},({role:t,...o})=>[t,"gr","providers","list",...Object.entries(o).map(([r,n])=>`${r}=${n}`)]),a("genne_gr_provider_mappings","Lista mapeamentos de opera\xE7\xF5es de uma conta GR autorizada.",{role:e.enum(["admin","carrier"]),provider_account_id:e.uuid(),active:e.boolean().optional()},({role:t,provider_account_id:o,...r})=>[t,"gr","providers",o,"mappings","list",...Object.entries(r).map(([n,m])=>`${n}=${m}`)]),a("genne_gr_provider_operations","Consulta opera\xE7\xF5es dispon\xEDveis na conta de provider GR autorizada.",{role:e.enum(["admin","carrier"]),provider_account_id:e.uuid()},({role:t,provider_account_id:o})=>[t,"gr","providers",o,"operations"]),a("genne_carrier_gr_blacklist","Lista v\xEDnculos bloqueados na transportadora da sess\xE3o.",{limit:e.number().int().positive().max(100).optional(),cursor:e.string().optional(),search:e.string().optional()},t=>["carrier","gr","blacklist","list",...Object.entries(t).map(([o,r])=>`${o}=${r}`)]),a("genne_admin_gr_blacklist","Lista v\xEDnculos bloqueados de uma transportadora vis\xEDvel ao admin.",{carrier_id:e.uuid(),limit:e.number().int().positive().max(100).optional(),cursor:e.string().optional(),search:e.string().optional()},({carrier_id:t,...o})=>["admin","gr","carriers",t,"blacklist","list",...Object.entries(o).map(([r,n])=>`${r}=${n}`)]),a("genne_carrier_gr_driver_export","Consulta perfil completo e prontid\xE3o GR de motorista vinculado \xE0 transportadora da sess\xE3o.",{driver_profile_id:e.uuid()},({driver_profile_id:t})=>["carrier","gr","drivers",t,"export"]),a("genne_admin_gr_driver_export","Consulta perfil completo e prontid\xE3o GR de motorista vinculado \xE0 transportadora autorizada.",{carrier_id:e.uuid(),driver_profile_id:e.uuid()},({carrier_id:t,driver_profile_id:o})=>["admin","gr","carriers",t,"drivers",o,"export"]),a("genne_carrier_gr_dashboard","Consulta o painel GR da transportadora ativa.",{},()=>["carrier","gr","dashboard"]),a("genne_admin_gr_dashboard","Consulta o painel GR de uma transportadora vis\xEDvel ao admin.",{carrier_id:e.uuid()},({carrier_id:t})=>["admin","gr","carriers",t,"dashboard"]),a("genne_carrier_gr_drivers","Lista motoristas GR da transportadora ativa.",{provider_account_id:e.uuid().optional(),document:e.string().min(1).optional(),training_pending:e.boolean().optional(),limit:e.number().int().positive().max(100).optional(),cursor:e.string().optional(),search:e.string().optional(),status:e.string().optional()},t=>["carrier","gr","drivers",...Object.entries(t).map(([o,r])=>`${o}=${r}`)]),a("genne_admin_gr_drivers","Lista motoristas GR de uma transportadora vis\xEDvel ao admin.",{carrier_id:e.uuid(),provider_account_id:e.uuid().optional(),document:e.string().min(1).optional(),training_pending:e.boolean().optional(),limit:e.number().int().positive().max(100).optional(),cursor:e.string().optional(),search:e.string().optional(),status:e.string().optional()},({carrier_id:t,...o})=>["admin","gr","carriers",t,"drivers",...Object.entries(o).map(([r,n])=>`${r}=${n}`)]),a("genne_admin_gr_driver_directory","Lista o diret\xF3rio GR global Admin, incluindo motoristas sem v\xEDnculo. carrier_account_id restringe \xE0 transportadora indicada; depende das permiss\xF5es da sess\xE3o.",{carrier_account_id:e.uuid().optional(),provider_account_id:e.uuid().optional(),document:e.string().min(1).optional(),training_pending:e.boolean().optional(),limit:e.number().int().positive().max(100).optional(),cursor:e.string().optional(),search:e.string().optional(),status:e.string().optional()},t=>["admin","gr","drivers",...Object.entries(t).map(([o,r])=>`${o}=${r}`)]),a("genne_order_lookup","Consulta um pedido por c\xF3digo de barras na transportadora da sess\xE3o.",{barcode:e.string().min(1)},({barcode:t})=>["carrier","orders","lookup",t]),a("genne_carrier_shippers","Lista embarcadores geridos pela transportadora da sess\xE3o.",{},()=>["carrier","shippers","list"]),a("genne_carrier_shipper_bases","Lista bases de um embarcador vinculado \xE0 transportadora da sess\xE3o.",{shipper_id:e.uuid()},({shipper_id:t})=>["carrier","shippers",t,"bases","list"]),a("genne_admin_carrier_shippers","Lista embarcadores geridos por uma transportadora vis\xEDvel ao admin.",{carrier_id:e.uuid()},({carrier_id:t})=>["admin","operations",t,"shippers","list"]),a("genne_admin_carrier_shipper_bases","Lista bases de um embarcador gerido por uma transportadora vis\xEDvel ao admin.",{carrier_id:e.uuid(),shipper_id:e.uuid()},({carrier_id:t,shipper_id:o})=>["admin","operations",t,"shippers",o,"bases","list"]),a("genne_carrier_receiving_rules","Lista regras de recebimento da transportadora da sess\xE3o.",{},()=>["carrier","receiving","rules","list"]),a("genne_admin_receiving_rules","Lista regras de recebimento de uma transportadora vis\xEDvel ao admin.",{carrier_id:e.uuid()},({carrier_id:t})=>["admin","operations",t,"receiving","rules","list"]),a("genne_admin_order_lookup","Consulta pedido por c\xF3digo de barras em uma transportadora vis\xEDvel ao admin.",{carrier_id:e.uuid(),barcode:e.string().min(1)},({carrier_id:t,barcode:o})=>["admin","operations",t,"orders","lookup",o]),a("genne_admin_triage_batch","Consulta lote de triagem vis\xEDvel ao admin da sess\xE3o.",{batch_id:e.uuid()},({batch_id:t})=>["admin","triage","batches",t,"show"]),a("genne_admin_triage_batches","Lista lotes de triagem vis\xEDveis ao admin da sess\xE3o.",{limit:e.number().int().positive().max(100).optional(),cursor:e.string().min(1).optional(),search:e.string().min(1).optional()},t=>["admin","triage","batches","list",...Object.entries(t).map(([o,r])=>`${o}=${r}`)]),a("genne_carrier_desktop_grants","Lista concess\xF5es de providers Desktop da transportadora ativa.",{},()=>["carrier","desktop","grants","list"]),a("genne_carrier_desktop_sync_runs","Lista execu\xE7\xF5es de sincroniza\xE7\xE3o Desktop na transportadora da sess\xE3o.",{shipper_id:e.uuid().optional(),base_id:e.uuid().optional(),connection_id:e.uuid().optional(),device_id:e.string().min(8).max(128).regex(/^[A-Za-z0-9._:-]+$/).optional(),order_id:e.uuid().optional(),status:e.enum(["queued","claimed","running","succeeded","failed","blocked_no_runner","blocked_auth","outcome_unknown","cancelled"]).optional(),cursor:e.string().min(1).optional()},t=>["carrier","desktop","sync-runs","list",...Object.entries(t).map(([o,r])=>`${o}=${r}`)]),a("genne_carrier_desktop_execution","Consulta estado e receipt de uma execu\xE7\xE3o Desktop autorizada.",{execution_id:e.uuid()},({execution_id:t})=>["carrier","desktop","executions",t,"show"]),a("genne_carrier_desktop_candidates","Lista candidatos de pedido de uma execu\xE7\xE3o Desktop e dispositivo autorizados.",{execution_id:e.uuid(),device_id:e.string().min(8).max(128).regex(/^[A-Za-z0-9._:-]+$/),cursor:e.string().min(1).optional()},({execution_id:t,...o})=>["carrier","desktop","executions",t,"candidates","list",...Object.entries(o).map(([r,n])=>`${r}=${n}`)]),a("genne_carrier_desktop_receipt","Consulta receipt de importa\xE7\xE3o por execu\xE7\xE3o, dispositivo e chave de lote.",{execution_id:e.uuid(),device_id:e.string().min(8).max(128).regex(/^[A-Za-z0-9._:-]+$/),batch_key:e.string().min(16).max(128).regex(/^[A-Za-z0-9._:-]+$/)},({execution_id:t,device_id:o,batch_key:r})=>["carrier","desktop","executions",t,"receipt",`device_id=${o}`,`batch_key=${r}`]),a("genne_carrier_desktop_operation_routes","Lista revis\xF5es de rotas operacionais Desktop da transportadora.",{},()=>["carrier","desktop","operation-routes","list"]),a("genne_carrier_desktop_orders","Lista pedidos can\xF4nicos vis\xEDveis \xE0 transportadora ativa no Desktop.",{shipper_id:e.uuid().optional(),base_id:e.uuid().optional(),query:e.string().optional(),cursor:e.string().optional(),status_sync:e.literal(!0).optional()},t=>["carrier","desktop","orders","list",...Object.entries(t).map(([o,r])=>`${o}=${r}`)]),a("genne_carrier_desktop_order_show","Consulta pedido can\xF4nico por ID na transportadora ativa no Desktop.",{order_id:e.uuid()},({order_id:t})=>["carrier","desktop","orders",t,"show"]),a("genne_carrier_desktop_device_runs","Lista resultados de recebimento de um dispositivo da transportadora.",{base_id:e.uuid().optional(),shipper_id:e.uuid().optional(),operation_kind:e.enum(["sack_receipt","package_receipt","route_creation","dispatch","transfer","return"]).optional(),device_id:e.string().min(8).max(128),cursor:e.string().optional(),limit:e.number().int().positive().max(100).optional()},t=>["carrier","desktop","operation-runs","list",...Object.entries(t).map(([o,r])=>`${o}=${r}`)]),a("genne_carrier_desktop_monitor_runs","Lista resultados de recebimento no monitor da transportadora.",{base_id:e.uuid().optional(),shipper_id:e.uuid().optional(),operation_kind:e.enum(["sack_receipt","package_receipt","route_creation","dispatch","transfer","return"]).optional(),monitor:e.literal(!0),cursor:e.string().optional(),limit:e.number().int().positive().max(100).optional()},t=>["carrier","desktop","operation-runs","list",...Object.entries(t).map(([o,r])=>`${o}=${r}`)]),a("genne_import_batch","Consulta o estado de um lote de importa\xE7\xE3o vis\xEDvel ao papel ativo.",{role:e.enum(["admin","carrier","shipper"]),batch_id:e.uuid(),include_orders:e.boolean().optional()},({role:t,batch_id:o,include_orders:r})=>[t,"orders","imports",o,"show",...r===void 0?[]:[`include_orders=${r}`]]),a("genne_import_orders","Lista pedidos de um lote de importa\xE7\xE3o vis\xEDvel ao papel ativo.",{role:e.enum(["admin","carrier","shipper"]),batch_id:e.uuid(),search:e.string().min(1).optional(),geocode_status:e.string().min(1).optional(),only_errors:e.boolean().optional(),limit:e.number().int().positive().max(100).optional(),cursor:e.string().optional()},({role:t,batch_id:o,...r})=>[t,"orders","imports",o,"orders","list",...Object.entries(r).filter(([,n])=>n!==void 0).map(([n,m])=>`${n}=${m}`)]),a("genne_carrier_status_outbox","Consulta eventos de status da transportadora da sess\xE3o.",{shipper_id:e.uuid().optional(),sink_type:e.enum(["webhook","ocoren","adapter"]).optional(),adapter_type:e.string().min(1).optional()},t=>["carrier","status-outbox",...Object.entries(t).map(([o,r])=>`${o}=${r}`)]),a("genne_admin_status_outbox","Consulta eventos de status de uma transportadora vis\xEDvel ao admin.",{carrier_account_id:e.uuid(),shipper_id:e.uuid().optional(),sink_type:e.enum(["webhook","ocoren","adapter"]).optional(),adapter_type:e.string().min(1).optional()},({carrier_account_id:t,...o})=>["admin","operations",t,"status-outbox",...Object.entries(o).map(([r,n])=>`${r}=${n}`)]),L(a),O(a),z(a),E(a),c}h(k,"createProductServer");function A(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_faq_save_draft",{description:"Solicita aprova\xE7\xE3o humana para salvar uma FAQ publicada como rascunho; ap\xF3s a aprova\xE7\xE3o, executa a mesma inten\xE7\xE3o e devolve o receipt.",inputSchema:e.object({target:e.uuid(),expected_version:e.number().int().positive(),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({target:n,expected_version:m,idempotency_key:i,intent_id:s})=>{const l=s?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(s)}/execute`:"/api/v1/auth/mcp/write-intents";try{const u=await r(new URL(l,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":i,"content-type":"application/json"},body:JSON.stringify({target:n,expected_version:m})}),d=await u.json();if(!u.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${d.error??u.status}`}]};const p=d.data,_=s?p:{...p,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(p.public_id)}?role=${encodeURIComponent(p.active_role)}`,o).href,next_step:"A pessoa deve revisar e aprovar esta inten\xE7\xE3o em outra sess\xE3o Core de login por senha; depois repita a chamada com intent_id e os mesmos target, expected_version e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(_)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(A,"registerRemoteFaqDraft");function T(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_user_me_update",{description:"Solicita aprova\xE7\xE3o humana para alterar somente campos do pr\xF3prio perfil. Ap\xF3s aprova\xE7\xE3o, repita com intent_id, changes e idempotency_key id\xEAnticos para executar.",inputSchema:e.object({changes:e.object({name:e.string().optional(),phone:e.string().optional(),vehicle_type:e.string().optional(),navigation_app_preference:e.string().optional()}).strict(),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({changes:n,idempotency_key:m,intent_id:i})=>{const s=i?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(i)}/execute`:"/api/v1/auth/mcp/write-intents";try{const l=await r(new URL(s,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":m,"content-type":"application/json"},body:JSON.stringify({operation:"user.me.update",changes:n})}),u=await l.json();if(!l.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${u.error??l.status}`}]};const d=u.data,p=i?d:{...d,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(d.public_id)}?role=${encodeURIComponent(d.active_role)}`,o).href,next_step:"Revise e aprove o antes/depois em outra sess\xE3o Core de login por senha; depois repita com intent_id, changes e idempotency_key id\xEAnticos."};return{content:[{type:"text",text:JSON.stringify(p)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(T,"registerRemoteProfileUpdate");function P(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_admin_internal_user_access_set",{description:"Substitui todo o ACL de um usu\xE1rio interno Admin ap\xF3s aprova\xE7\xE3o em outra sess\xE3o. Informe user_id, admin_access_level (staff ou super_admin) e a lista completa permission_keys; para super_admin a lista deve ser vazia. Repita com intent_id e os mesmos campos e idempotency_key para executar. Exige autoriza\xE7\xE3o para gerenciar o acesso do usu\xE1rio.",inputSchema:e.object({user_id:e.uuid(),admin_access_level:e.enum(["staff","super_admin"]),permission_keys:e.array(e.string()).refine(n=>new Set(n).size===n.length),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}).strict(),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({user_id:n,admin_access_level:m,permission_keys:i,idempotency_key:s,intent_id:l})=>{const u=l?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(l)}/execute`:"/api/v1/auth/mcp/write-intents";try{const d=await r(new URL(u,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":s,"content-type":"application/json"},body:JSON.stringify({operation:"admin.internal_user_access.set",user_id:n,admin_access_level:m,permission_keys:i})}),p=await d.json();if(!d.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${p.error??d.status}`}]};const _=p.data,v=l?_:{..._,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(_.public_id)}?role=${encodeURIComponent(_.active_role)}`,o).href,next_step:"Revise usu\xE1rio e ACL antes/depois em outra sess\xE3o Core; depois repita com intent_id, os mesmos campos e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(v)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(P,"registerRemoteAdminInternalUserAccessSet");function D(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_business_member_access_set",{description:"Substitui papel e lista completa de permiss\xF5es de um membro B2B com aprova\xE7\xE3o em outra sess\xE3o. Admin informa account_id; carrier/shipper usam a conta ativa e omitem account_id. Exige autoriza\xE7\xE3o para gerenciar as permiss\xF5es do membro. Repita com intent_id, os mesmos campos e idempotency_key para executar.",inputSchema:e.object({account_id:e.uuid().optional(),membership_id:e.uuid(),membership_role:e.enum(["owner","operator","dispatcher","finance"]),permission_keys:e.array(e.string()).refine(n=>new Set(n).size===n.length),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}).strict(),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({account_id:n,membership_id:m,membership_role:i,permission_keys:s,idempotency_key:l,intent_id:u})=>{const d=u?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(u)}/execute`:"/api/v1/auth/mcp/write-intents";try{const p=await r(new URL(d,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":l,"content-type":"application/json"},body:JSON.stringify({operation:"business.member_access.set",account_id:n,membership_id:m,membership_role:i,permission_keys:s})}),_=await p.json();if(!p.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${_.error??p.status}`}]};const v=_.data,g=u?v:{...v,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(v.public_id)}?role=${encodeURIComponent(v.active_role)}`,o).href,next_step:"Revise empresa, membro e ACL antes/depois em outra sess\xE3o Core; depois repita com intent_id e a mesma idempotency_key."};return{content:[{type:"text",text:JSON.stringify(g)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(D,"registerRemoteBusinessMemberAccessSet");function W(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_business_member_status_set",{description:"Ativa ou desativa um membro B2B com aprova\xE7\xE3o em outra sess\xE3o. Admin informa account_id; carrier/shipper usam a conta ativa e omitem account_id. Exige autoriza\xE7\xE3o para gerenciar membros. Repita com intent_id e a mesma idempotency_key ap\xF3s a aprova\xE7\xE3o.",inputSchema:e.object({account_id:e.uuid().optional(),membership_id:e.uuid(),status:e.enum(["active","inactive"]),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}).strict(),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({account_id:n,membership_id:m,status:i,idempotency_key:s,intent_id:l})=>{const u=l?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(l)}/execute`:"/api/v1/auth/mcp/write-intents";try{const d=await r(new URL(u,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":s,"content-type":"application/json"},body:JSON.stringify({operation:"business.member_status.set",account_id:n,membership_id:m,status:i})}),p=await d.json();if(!d.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${p.error??d.status}`}]};const _=p.data,v=l?_:{..._,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(_.public_id)}?role=${encodeURIComponent(_.active_role)}`,o).href,next_step:"Revise empresa, membro e status antes/depois em outra sess\xE3o Core; depois repita com intent_id e a mesma idempotency_key."};return{content:[{type:"text",text:JSON.stringify(v)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(W,"registerRemoteBusinessMemberStatusSet");function G(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){const n={account_id:e.uuid().optional(),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()},m=[{name:"genne_business_member_invite",operation:"business.member.invite",description:"Convida um membro B2B com aprova\xE7\xE3o separada. Admin informa account_id e member.workspace_role (carrier ou shipper); clientes omitem ambos e usam a conta ativa. Carrier permite operator, dispatcher e finance; shipper permite operator e finance; Admin tamb\xE9m permite owner. Requer a ACL de gest\xE3o de membros do endpoint existente. Repita os mesmos dados e idempotency_key com intent_id. Um v\xEDnculo existente conserva o acesso e n\xE3o gera outro envio. Receipt pending significa e-mail enfileirado; consulte genne_my_account_members ou genne_admin_account_members para acompanhar o envio.",inputSchema:e.object({...n,member:e.object({email:e.string().trim().toLowerCase().pipe(e.email()),membership_role:e.enum(["owner","operator","dispatcher","finance"]),workspace_role:e.enum(["carrier","shipper"]).optional()}).strict()}).strict()},{name:"genne_business_member_invitation_resend",operation:"business.member_invitation.resend",description:"Reenvia um convite B2B conforme as regras atuais, com aprova\xE7\xE3o separada. Admin informa account_id; carrier/shipper omitem e usam a conta ativa. Informe membership_id e chave est\xE1vel; repita com intent_id ap\xF3s aprova\xE7\xE3o. Receipt pending significa enfileirado. Consulte genne_my_account_members ou genne_admin_account_members para acompanhar; convite de cadastro j\xE1 enviado n\xE3o pode ser reenviado.",inputSchema:e.object({...n,membership_id:e.uuid()}).strict()}];for(const{name:i,operation:s,description:l,inputSchema:u}of m)y.registerTool(i,{description:l,inputSchema:u,annotations:{readOnlyHint:!1,openWorldHint:i==="genne_business_member_invite",destructiveHint:!0,idempotentHint:!0}},async({idempotency_key:d,intent_id:p,..._})=>{const v=p?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(p)}/execute`:"/api/v1/auth/mcp/write-intents";try{const g=await r(new URL(v,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":d,"content-type":"application/json"},body:JSON.stringify({operation:s,..._})}),b=await g.json();if(!g.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${b.error??g.status}`}]};const f=b.data,x=p?f:{...f,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(f.public_id)}?role=${encodeURIComponent(f.active_role)}`,o).href,next_step:"Revise empresa, destinat\xE1rio e papel em outra sess\xE3o Core. Repita os mesmos dados e chave com intent_id ap\xF3s aprova\xE7\xE3o. Pending indica enfileirado; acompanhe o envio na consulta de membros."};return{content:[{type:"text",text:JSON.stringify(x)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(G,"registerRemoteBusinessMemberInvitations");function q(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_company_my_account_update",{description:"Solicita aprova\xE7\xE3o para mudar legal_name ou trading_name da empresa carrier/shipper ativa. Repita com intent_id e a mesma chave ap\xF3s a aprova\xE7\xE3o.",inputSchema:e.object({changes:e.object({legal_name:e.string().min(1).max(255).optional(),trading_name:e.string().min(1).max(255).optional()}).strict().refine(n=>Object.keys(n).length>0),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({changes:n,idempotency_key:m,intent_id:i})=>{const s=i?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(i)}/execute`:"/api/v1/auth/mcp/write-intents";try{const l=await r(new URL(s,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":m,"content-type":"application/json"},body:JSON.stringify({operation:"company.my_account.update",changes:n})}),u=await l.json();if(!l.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${u.error??l.status}`}]};const d=u.data,p=i?d:{...d,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(d.public_id)}?role=${encodeURIComponent(d.active_role)}`,o).href,next_step:"Revise e aprove a altera\xE7\xE3o da empresa ativa no navegador; depois repita com intent_id, changes e idempotency_key id\xEAnticos."};return{content:[{type:"text",text:JSON.stringify(p)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(q,"registerRemoteCompanyUpdate");function M(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_admin_company_update",{description:"Solicita aprova\xE7\xE3o para alterar legal_name ou trading_name de uma empresa B2B selecionada por UUID. Exige sess\xE3o Admin com business_accounts_registry.manage. Repita com intent_id, account_id, changes e a mesma chave ap\xF3s aprova\xE7\xE3o em outra sess\xE3o Admin.",inputSchema:e.object({account_id:e.uuid(),changes:e.object({legal_name:e.string().min(1).max(255).optional(),trading_name:e.string().min(1).max(255).optional()}).strict().refine(n=>Object.keys(n).length>0),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}).strict(),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({account_id:n,changes:m,idempotency_key:i,intent_id:s})=>{const l=s?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(s)}/execute`:"/api/v1/auth/mcp/write-intents";try{const u=await r(new URL(l,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":i,"content-type":"application/json"},body:JSON.stringify({operation:"company.admin.update",account_id:n,changes:m})}),d=await u.json();if(!u.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${d.error??u.status}`}]};const p=d.data,_=s?p:{...p,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(p.public_id)}?role=admin`,o).href,next_step:"Revise empresa e valores antes/depois em outra sess\xE3o Core Admin; depois repita com intent_id, account_id, changes e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(_)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(M,"registerRemoteAdminCompanyUpdate");function Z(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){for(const n of[{tool:"genne_admin_carrier_base_create",operation:"base.carrier.create",subject:"transportadora"},{tool:"genne_admin_shipper_base_create",operation:"base.admin_shipper.create",subject:"embarcador"}])y.registerTool(n.tool,{description:`Solicita aprova\xE7\xE3o para criar uma base de ${n.subject} como Admin com a ACL do Core. Repita com intent_id e os mesmos dados ap\xF3s aprova\xE7\xE3o.`,inputSchema:e.object({account_id:e.uuid(),base:e.object({code:e.string().trim().min(1).max(255),name:e.string().trim().min(1).max(255),origin_address:e.string().trim().min(1).max(255),market_id:e.uuid(),country_code:e.string().regex(/^[A-Z]{2}$/),currency_code:e.string().regex(/^[A-Z]{3}$/),timezone:e.string().trim().min(1).max(255)}).strict(),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!1,idempotentHint:!0}},async({account_id:m,base:i,idempotency_key:s,intent_id:l})=>{const u=l?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(l)}/execute`:"/api/v1/auth/mcp/write-intents";try{const d=await r(new URL(u,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":s,"content-type":"application/json"},body:JSON.stringify({operation:n.operation,account_id:m,base:i})}),p=await d.json();if(!d.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${p.error??d.status}`}]};const _=p.data,v=l?_:{..._,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(_.public_id)}?role=admin`,o).href,next_step:`Revise ${n.subject} e base em outra sess\xE3o Core Admin; depois repita com intent_id, account_id, base e idempotency_key id\xEAnticos.`};return{content:[{type:"text",text:JSON.stringify(v)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(Z,"registerRemoteAdminBaseCreate");function X(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){const m={...Object.fromEntries(["code","name","origin_address","postal_code","place_id","street","street_number","neighborhood","city","state","state_code","country","geocode_provider","timezone"].map(i=>[i,e.string().optional()])),origin_lat:e.number().min(-90).max(90).optional(),origin_lng:e.number().min(-180).max(180).optional(),triage_rules:e.record(e.string(),e.unknown()).optional()};for(const i of[{tool:"genne_admin_shipper_base_update",operation:"base.admin_shipper.update",fields:{...m,metadata:e.record(e.string(),e.unknown()).optional(),balancing_policy:e.record(e.string(),e.unknown()).optional()}},{tool:"genne_admin_carrier_base_update",operation:"base.admin_carrier.update",fields:m},{tool:"genne_admin_shipper_base_set_status",operation:"base.admin_shipper.set_status"},{tool:"genne_admin_shipper_base_cutoff_windows_set",operation:"base.admin_shipper.cutoff_windows.set",cutoff:!0},{tool:"genne_admin_carrier_base_cutoff_windows_set",operation:"base.admin_carrier.cutoff_windows.set",cutoff:!0}])y.registerTool(i.tool,{description:i.fields?"Edita uma base com sess\xE3o Admin autorizada. account_id \xE9 o UUID operacional da conta propriet\xE1ria. Revise conta, base, valores atuais e resultantes no link de aprova\xE7\xE3o; repita os mesmos dados e chave com intent_id. Campos omitidos s\xE3o preservados; mercado, country_code, moeda, ownership, status e null s\xE3o recusados. 412 exige nova leitura e inten\xE7\xE3o.":i.cutoff?"Substitui todos os hor\xE1rios de corte de uma base shipper/carrier com sess\xE3o Admin autorizada. account_id \xE9 o UUID operacional propriet\xE1rio. windows cont\xE9m weekday 0..6, cutoff_time HH:MM[:SS] no timezone da base e auto_publish opcional; [] remove todos. Base shipper com execu\xE7\xF5es de corte vinculadas \xE9 recusada com 409 cutoff_dispatches_exist para preservar hist\xF3rico e execu\xE7\xE3o; n\xE3o h\xE1 reagendamento impl\xEDcito. Revise conta, base, timezone e hor\xE1rios atuais/resultantes na aprova\xE7\xE3o Core. Repita os mesmos dados e idempotency_key com intent_id. A execu\xE7\xE3o retorna o receipt; 412 exige nova inten\xE7\xE3o, replay retorna o receipt original.":"Ativa ou desativa uma base de embarcador com sess\xE3o Admin autorizada. Informe account_id operacional da conta propriet\xE1ria, base_id e status active/inactive. Revise conta, base, status atual e resultante no link de aprova\xE7\xE3o; repita os mesmos dados e chave com intent_id. 412 exige nova leitura e inten\xE7\xE3o; replay devolve o receipt original.",inputSchema:e.object({account_id:e.uuid(),base_id:e.uuid(),...i.fields?{changes:e.object(i.fields).strict().refine(s=>Object.keys(s).length>0,"Informe uma altera\xE7\xE3o")}:i.cutoff?{windows:e.array(e.object({weekday:e.number().int().min(0).max(6),cutoff_time:e.string().regex(/^(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d)?$/),auto_publish:e.boolean().optional()}).strict())}:{status:e.enum(["active","inactive"])},idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}).strict(),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({account_id:s,base_id:l,changes:u,status:d,windows:p,idempotency_key:_,intent_id:v})=>{const g=v?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(v)}/execute`:"/api/v1/auth/mcp/write-intents";try{const b=await r(new URL(g,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":_,"content-type":"application/json"},body:JSON.stringify({operation:i.operation,account_id:s,base_id:l,...i.fields?{changes:u}:i.cutoff?{windows:p}:{status:d}})}),f=await b.json();if(!b.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${f.error??b.status}`}]};const x=v?f.data:{...f.data,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(f.data.public_id)}?role=admin`,o).href,next_step:"Revise a base em outra sess\xE3o Admin e repita com intent_id e os mesmos dados e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(x)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(X,"registerRemoteAdminBaseChange");function Q(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_admin_carrier_base_set_status",{description:"Solicita aprova\xE7\xE3o para ativar ou desativar operacionalmente uma base carrier com sess\xE3o Admin autorizada. Repita com intent_id, base_id, status e a mesma chave ap\xF3s aprova\xE7\xE3o.",inputSchema:e.object({base_id:e.uuid(),status:e.enum(["active","inactive"]),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}).strict(),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({base_id:n,status:m,idempotency_key:i,intent_id:s})=>{const l=s?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(s)}/execute`:"/api/v1/auth/mcp/write-intents";try{const u=await r(new URL(l,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":i,"content-type":"application/json"},body:JSON.stringify({operation:"base.admin_carrier.set_status",base_id:n,status:m})}),d=await u.json();if(!u.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${d.error??u.status}`}]};const p=d.data,_=s?p:{...p,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(p.public_id)}?role=admin`,o).href,next_step:"Revise base e estado antes/depois em outra sess\xE3o Core Admin; depois repita com intent_id, base_id, status e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(_)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(Q,"registerRemoteAdminCarrierBaseStatus");function V(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){const n=e.object({code:e.string().trim().min(1).max(255),name:e.string().trim().min(1).max(255),origin_address:e.string().trim().min(1).max(255).optional(),origin_lat:e.number().min(-90).max(90).optional(),origin_lng:e.number().min(-180).max(180).optional(),timezone:e.string().trim().min(1).max(255).optional(),triage_rules:e.record(e.string(),e.unknown()).optional(),metadata:e.record(e.string(),e.unknown()).optional()}).strict().refine(m=>m.origin_lat===void 0==(m.origin_lng===void 0),{message:"origin_lat e origin_lng devem ser informados juntos"});for(const m of[{tool:"genne_shipper_base_create",operation:"base.shipper.create",role:"shipper"},{tool:"genne_carrier_shipper_base_create",operation:"base.carrier_shipper.create",role:"carrier"}])y.registerTool(m.tool,{description:m.role==="carrier"?"Solicita aprova\xE7\xE3o para criar uma base nova de embarcador vinculada \xE0 transportadora ativa. Informe c\xF3digo em mai\xFAsculas; repita com intent_id e os mesmos dados ap\xF3s aprova\xE7\xE3o.":"Solicita aprova\xE7\xE3o para criar uma base da conta shipper ativa e autorizada. Repita com intent_id e os mesmos dados ap\xF3s aprova\xE7\xE3o.",inputSchema:e.object({...m.role==="carrier"?{shipper_id:e.uuid()}:{},base:m.role==="carrier"?n.refine(i=>i.code===i.code.toUpperCase(),{message:"code deve estar em mai\xFAsculas"}):n,idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}).strict(),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!1,idempotentHint:!0}},async({shipper_id:i,base:s,idempotency_key:l,intent_id:u})=>{const d=u?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(u)}/execute`:"/api/v1/auth/mcp/write-intents";try{const p=await r(new URL(d,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":l,"content-type":"application/json"},body:JSON.stringify({operation:m.operation,...i?{shipper_id:i}:{},base:s})}),_=await p.json();if(!p.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${_.error??p.status}`}]};const v=_.data,g=u?v:{...v,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(v.public_id)}?role=${m.role}`,o).href,next_step:m.role==="carrier"?"Revise a transportadora, o embarcador e a base em outra sess\xE3o Core da mesma conta carrier; depois repita com intent_id, shipper_id, base e idempotency_key id\xEAnticos.":"Revise a base em outra sess\xE3o Core da mesma conta shipper; depois repita com intent_id, base e idempotency_key id\xEAnticos."};return{content:[{type:"text",text:JSON.stringify(g)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(V,"registerRemoteShipperBaseCreate");function Y(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_gr_driver_training_update",{description:"Solicita aprova\xE7\xE3o para marcar o treinamento GR de um motorista vis\xEDvel ao admin ou carrier. Repita com intent_id e a mesma chave ap\xF3s a aprova\xE7\xE3o.",inputSchema:e.object({target:e.uuid(),training_watched:e.boolean(),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({target:n,training_watched:m,idempotency_key:i,intent_id:s})=>{const l=s?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(s)}/execute`:"/api/v1/auth/mcp/write-intents";try{const u=await r(new URL(l,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":i,"content-type":"application/json"},body:JSON.stringify({operation:"gr.driver_training.update",target:n,training_watched:m})}),d=await u.json();if(!u.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${d.error??u.status}`}]};const p=d.data,_=s?p:{...p,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(p.public_id)}?role=${encodeURIComponent(p.active_role)}`,o).href,next_step:"Revise e aprove o treinamento GR em outra sess\xE3o Core; depois repita com intent_id, target, training_watched e idempotency_key id\xEAnticos."};return{content:[{type:"text",text:JSON.stringify(_)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(Y,"registerRemoteGrTrainingUpdate");function K(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_order_triage_address_update",{description:"Solicita aprova\xE7\xE3o para corrigir o endere\xE7o de um pedido em lote de triagem (admin). Coordenadas manuais exigem latitude e longitude juntas. Repita com intent_id e a mesma chave ap\xF3s a aprova\xE7\xE3o.",inputSchema:e.object({batch_id:e.uuid(),order_id:e.uuid(),destination_address:e.string().min(1),destination_lat:e.number().min(-90).max(90).optional(),destination_lng:e.number().min(-180).max(180).optional(),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({batch_id:n,order_id:m,destination_address:i,destination_lat:s,destination_lng:l,idempotency_key:u,intent_id:d})=>{const p=d?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(d)}/execute`:"/api/v1/auth/mcp/write-intents",_={operation:"order.triage_address.update",batch_id:n,order_id:m,destination_address:i};s!==void 0&&l!==void 0&&(_.destination_lat=s,_.destination_lng=l);try{const v=await r(new URL(p,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":u,"content-type":"application/json"},body:JSON.stringify(_)}),g=await v.json();if(!v.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${g.error??v.status}`}]};const b=g.data,f=d?b:{...b,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(b.public_id)}?role=${encodeURIComponent(b.active_role)}`,o).href,next_step:"Revise e aprove a corre\xE7\xE3o do pedido em outra sess\xE3o Core; depois repita com intent_id e os mesmos campos e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(f)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(K,"registerRemoteTriageOrderUpdate");function ee(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_receiving_scan",{description:"Solicita aprova\xE7\xE3o para registrar um bip de recebimento na carrier ativa. Admin informa carrier_account_id; carrier usa a conta da sess\xE3o. Repita com intent_id e a mesma chave ap\xF3s aprova\xE7\xE3o.",inputSchema:e.object({barcode:e.string().min(1),carrier_account_id:e.uuid().optional(),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({barcode:n,carrier_account_id:m,idempotency_key:i,intent_id:s})=>{const l=s?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(s)}/execute`:"/api/v1/auth/mcp/write-intents",u={operation:"receiving.order.scan",barcode:n};m&&(u.carrier_account_id=m);try{const d=await r(new URL(l,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":i,"content-type":"application/json"},body:JSON.stringify(u)}),p=await d.json();if(!d.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${p.error??d.status}`}]};const _=p.data,v=s?_:{..._,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(_.public_id)}?role=${encodeURIComponent(_.active_role)}`,o).href,next_step:"Revise o pedido e c\xF3digo bipado em outra sess\xE3o Core; depois repita com intent_id, o mesmo barcode, carrier_account_id quando usado e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(v)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(ee,"registerRemoteReceivingScan");function te(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){const m={...{shipper_id:e.uuid().nullable().optional(),base_id:e.uuid().nullable().optional()},code:e.string().min(1).max(255),name:e.string().min(1).max(255),postal_code_start:e.string().min(1).max(16),postal_code_end:e.string().min(1).max(16),priority_order:e.number().int().min(0).optional(),status:e.enum(["active","inactive"]).optional(),metadata:e.record(e.string(),e.unknown()).optional()},i=e.object(m).strict(),s=i.partial().refine(u=>Object.keys(u).length>0,{message:"changes deve conter ao menos um campo"}),l=h(async({operation:u,carrier_account_id:d,rule_id:p,values:_,idempotency_key:v,intent_id:g})=>{const b=g?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(g)}/execute`:"/api/v1/auth/mcp/write-intents",f={operation:u,..._};d!==void 0&&(f.carrier_account_id=d),p!==void 0&&(f.rule_id=p);try{const x=await r(new URL(b,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":v,"content-type":"application/json"},body:JSON.stringify(f)}),R=await x.json();if(!x.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${R.error??x.status}`}]};const w=R.data,C=g?w:{...w,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(w.public_id)}?role=${encodeURIComponent(w.active_role)}`,o).href,next_step:"Revise transportadora, escopo e regra antes/depois em outra sess\xE3o Core; depois repita com intent_id, os mesmos campos e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(C)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}},"send");y.registerTool("genne_receiving_rule_create",{description:"Solicita aprova\xE7\xE3o para criar regra de recebimento global, de shipper ou por base. Admin informa carrier_account_id; carrier usa a conta ativa. Repita com intent_id e o mesmo rule ap\xF3s aprova\xE7\xE3o.",inputSchema:e.object({carrier_account_id:e.uuid().optional(),rule:i,idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}).strict(),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!1,idempotentHint:!0}},async({carrier_account_id:u,rule:d,idempotency_key:p,intent_id:_})=>l({operation:"receiving.rule.create",carrier_account_id:u,values:d,idempotency_key:p,intent_id:_})),y.registerTool("genne_receiving_rule_update",{description:"Solicita aprova\xE7\xE3o para atualizar parcialmente uma regra de recebimento. Campos de escopo omitidos s\xE3o preservados e null expl\xEDcito \xE9 enviado ao Core. Admin informa carrier_account_id; carrier usa a conta ativa.",inputSchema:e.object({carrier_account_id:e.uuid().optional(),rule_id:e.uuid(),changes:s,idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}).strict(),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({carrier_account_id:u,rule_id:d,changes:p,idempotency_key:_,intent_id:v})=>l({operation:"receiving.rule.update",carrier_account_id:u,rule_id:d,values:p,idempotency_key:_,intent_id:v}))}h(te,"registerRemoteReceivingRules");function oe(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_dispatch_route_create",{description:"Solicita aprova\xE7\xE3o para criar rota de expedi\xE7\xE3o com pedidos recebidos na carrier ativa. Admin informa carrier_account_id. Repita com intent_id e os mesmos campos e chave ap\xF3s aprova\xE7\xE3o.",inputSchema:e.object({driver_user_id:e.uuid(),barcodes:e.array(e.string().min(1).max(128)).min(1).max(100),route_name:e.string().min(1).max(120).optional(),carrier_account_id:e.uuid().optional(),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!1,idempotentHint:!0}},async({driver_user_id:n,barcodes:m,route_name:i,carrier_account_id:s,idempotency_key:l,intent_id:u})=>{const d=u?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(u)}/execute`:"/api/v1/auth/mcp/write-intents",p={operation:"dispatch.route.create",driver_user_id:n,barcodes:m};i&&(p.route_name=i),s&&(p.carrier_account_id=s);try{const _=await r(new URL(d,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":l,"content-type":"application/json"},body:JSON.stringify(p)}),v=await _.json();if(!_.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${v.error??_.status}`}]};const g=v.data,b=u?g:{...g,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(g.public_id)}?role=${encodeURIComponent(g.active_role)}`,o).href,next_step:"Revise motorista e pedidos em outra sess\xE3o Core; depois repita com intent_id, os mesmos campos e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(b)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(oe,"registerRemoteDispatchRouteCreate");function ae(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_dispatch_route_add_orders",{description:"Solicita aprova\xE7\xE3o para adicionar pedidos recebidos a uma rota de expedi\xE7\xE3o manual ativa da carrier. Admin informa carrier_account_id; carrier usa a conta ativa. A rota pode j\xE1 ter iniciado. Repita com intent_id e os mesmos campos e chave ap\xF3s aprova\xE7\xE3o.",inputSchema:e.object({route_id:e.uuid(),barcodes:e.array(e.string().min(1).max(128)).min(1).max(100),reason:e.string().min(1).max(500).optional(),carrier_account_id:e.uuid().optional(),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({route_id:n,barcodes:m,reason:i,carrier_account_id:s,idempotency_key:l,intent_id:u})=>{const d=u?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(u)}/execute`:"/api/v1/auth/mcp/write-intents",p={operation:"dispatch.route.add_orders",route_id:n,barcodes:m};i!==void 0&&(p.reason=i),s&&(p.carrier_account_id=s);try{const _=await r(new URL(d,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":l,"content-type":"application/json"},body:JSON.stringify(p)}),v=await _.json();if(!_.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${v.error??_.status}`}]};const g=v.data,b=u?g:{...g,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(g.public_id)}?role=${encodeURIComponent(g.active_role)}`,o).href,next_step:"Revise a rota, os pedidos e o motivo em outra sess\xE3o Core; depois repita com intent_id, os mesmos campos e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(b)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(ae,"registerRemoteDispatchRouteAddOrders");function ne(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){for(const n of[{tool:"genne_driver_route_start",operation:"driver.route.start",verb:"iniciar"},{tool:"genne_driver_route_finish",operation:"driver.route.finish",verb:"concluir"}])y.registerTool(n.tool,{description:`Solicita aprova\xE7\xE3o para ${n.verb} uma SavedRoute pr\xF3pria do motorista. Repita com intent_id, o mesmo route_id e a mesma chave ap\xF3s aprova\xE7\xE3o em outra sess\xE3o driver.`,inputSchema:e.object({route_id:e.uuid(),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({route_id:m,idempotency_key:i,intent_id:s})=>{const l=s?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(s)}/execute`:"/api/v1/auth/mcp/write-intents";try{const u=await r(new URL(l,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":i,"content-type":"application/json"},body:JSON.stringify({operation:n.operation,route_id:m})}),d=await u.json();if(!u.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${d.error??u.status}`}]};const p=d.data,_=s?p:{...p,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(p.public_id)}?role=driver`,o).href,next_step:"Revise a rota em outra sess\xE3o Core do mesmo motorista; depois repita com intent_id, route_id e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(_)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(ne,"registerRemoteDriverRouteTransitions");function ie(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_driver_waypoint_deliver",{description:"Solicita aprova\xE7\xE3o para entregar os itens pendentes de uma parada em SavedRoute pr\xF3pria. O Core valida check-in e atualiza manifesto e eventos quando aplic\xE1veis. Repita com intent_id, os mesmos IDs e a mesma chave ap\xF3s aprova\xE7\xE3o em outra sess\xE3o driver.",inputSchema:e.object({route_id:e.uuid(),waypoint_id:e.uuid(),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({route_id:n,waypoint_id:m,idempotency_key:i,intent_id:s})=>{const l=s?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(s)}/execute`:"/api/v1/auth/mcp/write-intents";try{const u=await r(new URL(l,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":i,"content-type":"application/json"},body:JSON.stringify({operation:"driver.waypoint.deliver",route_id:n,waypoint_id:m})}),d=await u.json();if(!u.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${d.error??u.status}`}]};const p=d.data,_=s?p:{...p,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(p.public_id)}?role=driver`,o).href,next_step:"Revise rota e parada em outra sess\xE3o Core do mesmo motorista; depois repita com intent_id, route_id, waypoint_id e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(_)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(ie,"registerRemoteDriverWaypointDeliver");function re(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_driver_package_item_deliver",{description:"Solicita aprova\xE7\xE3o para entregar um item pendente do manifesto em parada de rota pr\xF3pria. O Core valida check-in, estado e eventos. Repita com intent_id, os mesmos IDs e a mesma chave ap\xF3s aprova\xE7\xE3o em outra sess\xE3o driver.",inputSchema:e.object({route_id:e.uuid(),waypoint_id:e.uuid(),item_id:e.uuid(),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({route_id:n,waypoint_id:m,item_id:i,idempotency_key:s,intent_id:l})=>{const u=l?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(l)}/execute`:"/api/v1/auth/mcp/write-intents";try{const d=await r(new URL(u,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":s,"content-type":"application/json"},body:JSON.stringify({operation:"driver.package_item.deliver",route_id:n,waypoint_id:m,item_id:i})}),p=await d.json();if(!d.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${p.error??d.status}`}]};const _=p.data,v=l?_:{..._,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(_.public_id)}?role=driver`,o).href,next_step:"Revise rota, parada e item em outra sess\xE3o Core do mesmo motorista; depois repita com intent_id, route_id, waypoint_id, item_id e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(v)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(re,"registerRemoteDriverPackageItemDeliver");function se(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_driver_waypoint_navigation_start",{description:"Solicita aprova\xE7\xE3o para registrar um evento de in\xEDcio de navega\xE7\xE3o em uma parada pr\xF3pria. N\xE3o abre um aplicativo de navega\xE7\xE3o nem altera carga ou status. Telemetria \xE9 opcional; o provider padr\xE3o \xE9 navigation_sdk_in_app. O Core valida posse, janela de edi\xE7\xE3o e ACL. Repita com intent_id, os mesmos dados e a mesma chave ap\xF3s aprova\xE7\xE3o em outra sess\xE3o driver.",inputSchema:e.object({route_id:e.uuid(),waypoint_id:e.uuid(),navigation_provider:e.string().trim().min(1).optional(),nav_sdk_version:e.string().trim().min(1).optional(),boot_duration_ms:e.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER).optional(),waypoint_index:e.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER).optional(),packages_count:e.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER).optional(),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!1,idempotentHint:!0}},async({idempotency_key:n,intent_id:m,...i})=>{const s=m?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(m)}/execute`:"/api/v1/auth/mcp/write-intents",l={operation:"driver.waypoint.navigation.start",...i};try{const u=await r(new URL(s,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":n,"content-type":"application/json"},body:JSON.stringify(l)}),d=await u.json();if(!u.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${d.error??u.status}`}]};const p=d.data,_=m?p:{...p,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(p.public_id)}?role=driver`,o).href,next_step:"Revise a rota, a parada e a telemetria do evento em outra sess\xE3o Core do mesmo motorista; depois repita com intent_id, os mesmos dados e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(_)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(se,"registerRemoteDriverWaypointNavigationStart");function pe(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_driver_waypoint_notes",{description:"Solicita aprova\xE7\xE3o para substituir a observa\xE7\xE3o de uma parada pr\xF3pria do motorista. Envie notes como string; uma string vazia limpa a observa\xE7\xE3o. O Core valida posse e janela de edi\xE7\xE3o. Repita com intent_id, os mesmos dados e a mesma chave ap\xF3s aprova\xE7\xE3o em outra sess\xE3o driver.",inputSchema:e.object({route_id:e.uuid(),waypoint_id:e.uuid(),notes:e.string(),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({route_id:n,waypoint_id:m,notes:i,idempotency_key:s,intent_id:l})=>{const u=l?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(l)}/execute`:"/api/v1/auth/mcp/write-intents",d={operation:"driver.waypoint.notes",route_id:n,waypoint_id:m,notes:i};try{const p=await r(new URL(u,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":s,"content-type":"application/json"},body:JSON.stringify(d)}),_=await p.json();if(!p.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${_.error??p.status}`}]};const v=_.data,g=l?v:{...v,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(v.public_id)}?role=driver`,o).href,next_step:"Revise a rota, a parada e a observa\xE7\xE3o em outra sess\xE3o Core do mesmo motorista; depois repita com intent_id, os mesmos dados e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(g)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(pe,"registerRemoteDriverWaypointNotes");function ce(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_driver_waypoint_packages",{description:"Solicita aprova\xE7\xE3o para alterar a quantidade de volumes de uma parada pr\xF3pria sem manifesto importado. Zero \xE9 v\xE1lido. O Core protege os itens do manifesto, valida posse e janela de edi\xE7\xE3o. Repita com intent_id, os mesmos dados e a mesma chave ap\xF3s aprova\xE7\xE3o em outra sess\xE3o driver.",inputSchema:e.object({route_id:e.uuid(),waypoint_id:e.uuid(),packages_count:e.number().int().min(0).max(2147483647),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({route_id:n,waypoint_id:m,packages_count:i,idempotency_key:s,intent_id:l})=>{const u=l?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(l)}/execute`:"/api/v1/auth/mcp/write-intents",d={operation:"driver.waypoint.packages",route_id:n,waypoint_id:m,packages_count:i};try{const p=await r(new URL(u,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":s,"content-type":"application/json"},body:JSON.stringify(d)}),_=await p.json();if(!p.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${_.error??p.status}`}]};const v=_.data,g=l?v:{...v,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(v.public_id)}?role=driver`,o).href,next_step:"Revise a rota, a parada e a quantidade de volumes em outra sess\xE3o Core do mesmo motorista; depois repita com intent_id, os mesmos dados e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(g)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(ce,"registerRemoteDriverWaypointPackages");function de(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_driver_waypoint_check_in",{description:"Solicita aprova\xE7\xE3o para registrar a localiza\xE7\xE3o atual em uma parada pr\xF3pria do motorista. O check-in \xE9 aditivo e o Core calcula dist\xE2ncia, limite e alerta. Repita com intent_id, os mesmos dados e a mesma chave ap\xF3s aprova\xE7\xE3o em outra sess\xE3o driver.",inputSchema:e.object({route_id:e.uuid(),waypoint_id:e.uuid(),lat:e.number().min(-90).max(90),lng:e.number().min(-180).max(180),accuracy_meters:e.number().min(0).optional(),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!1,idempotentHint:!0}},async({route_id:n,waypoint_id:m,lat:i,lng:s,accuracy_meters:l,idempotency_key:u,intent_id:d})=>{const p=d?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(d)}/execute`:"/api/v1/auth/mcp/write-intents",_={operation:"driver.waypoint.check_in",route_id:n,waypoint_id:m,lat:i,lng:s};l!==void 0&&(_.accuracy_meters=l);try{const v=await r(new URL(p,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":u,"content-type":"application/json"},body:JSON.stringify(_)}),g=await v.json();if(!v.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${g.error??v.status}`}]};const b=g.data,f=d?b:{...b,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(b.public_id)}?role=driver`,o).href,next_step:"Revise a rota, a parada e as coordenadas em outra sess\xE3o Core do mesmo motorista; depois repita com intent_id, os mesmos dados e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(f)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(de,"registerRemoteDriverWaypointCheckIn");function me(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_driver_carrier_link",{description:"Solicita aprova\xE7\xE3o para vincular o motorista da sess\xE3o \xE0 transportadora identificada pelo c\xF3digo. O c\xF3digo n\xE3o aparece na aprova\xE7\xE3o. Repita com intent_id, o mesmo c\xF3digo e a mesma chave ap\xF3s aprova\xE7\xE3o em outra sess\xE3o driver.",inputSchema:e.object({driver_link_code:e.string().regex(/^\s*[A-Za-z0-9]{5}\s*$/),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({driver_link_code:n,idempotency_key:m,intent_id:i})=>{const s=i?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(i)}/execute`:"/api/v1/auth/mcp/write-intents";try{const l=await r(new URL(s,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":m,"content-type":"application/json"},body:JSON.stringify({operation:"driver.carrier.link",driver_link_code:n.trim().toUpperCase()})}),u=await l.json();if(!l.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${u.error??l.status}`}]};const d=u.data,p=i?d:{...d,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(d.public_id)}?role=driver`,o).href,next_step:"Revise a transportadora e o estado do v\xEDnculo em outra sess\xE3o Core driver; depois repita com intent_id, driver_link_code e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(p)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(me,"registerRemoteDriverCarrierLink");function ue(y,{coreOrigin:c,coreAccessToken:a,adapterKey:t,adminOrigin:o,fetchImpl:r}){y.registerTool("genne_tower_failure_policy_update",{description:"Solicita aprova\xE7\xE3o para alterar os motivos de insucesso permitidos \xE0 conta carrier/shipper ativa. Admin informa account_type e account_id. Repita com intent_id e os mesmos dados ap\xF3s aprova\xE7\xE3o.",inputSchema:e.object({reason_codes:e.array(e.string().min(1).max(64)).max(100),account_type:e.enum(["carrier","shipper"]).optional(),account_id:e.uuid().optional(),idempotency_key:e.string().min(16).max(128),intent_id:e.uuid().optional()}),annotations:{readOnlyHint:!1,openWorldHint:!1,destructiveHint:!0,idempotentHint:!0}},async({reason_codes:n,account_type:m,account_id:i,idempotency_key:s,intent_id:l})=>{const u=l?`/api/v1/auth/mcp/write-intents/${encodeURIComponent(l)}/execute`:"/api/v1/auth/mcp/write-intents",d={operation:"tower.failure_policy.update",reason_codes:n};m&&(d.account_type=m),i&&(d.account_id=i);try{const p=await r(new URL(u,c),{method:"POST",headers:{authorization:`Bearer ${a}`,"x-genne-mcp-adapter-key":t,"idempotency-key":s,"content-type":"application/json"},body:JSON.stringify(d)}),_=await p.json();if(!p.ok)return{isError:!0,content:[{type:"text",text:`Core recusou a inten\xE7\xE3o: ${_.error??p.status}`}]};const v=_.data,g=l?v:{...v,approval_url:new URL(`/admin/mcp-write-intents/${encodeURIComponent(v.public_id)}?role=${encodeURIComponent(v.active_role)}`,o).href,next_step:"Revise conta e lista de motivos em outra sess\xE3o Core; depois repita com intent_id, os mesmos campos e idempotency_key."};return{content:[{type:"text",text:JSON.stringify(g)}]}}catch{return{isError:!0,content:[{type:"text",text:"Falha ao consultar a inten\xE7\xE3o no Core; repita com a mesma idempotency_key."}]}}})}h(ue,"registerRemoteTowerFailurePolicyUpdate");function Ue({auth:y,coreOrigin:c,resource:a,adapterKey:t,adminOrigin:o,fetchImpl:r=fetch}){return N({auth:y,coreOrigin:c,resource:a,createServerForContext:h(({coreAccessToken:n,context:m})=>{const i=k({GENNE_API_URL:c,GENNE_ACCESS_TOKEN:n});if(t&&o&&m.scopes?.includes("genne.write.request")){const s=F(r);B(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),J(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),A(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),T(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),P(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),D(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),W(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),G(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),q(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),M(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),Z(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),X(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),Q(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),V(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),Y(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),K(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),ee(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),te(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),oe(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),ae(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),ne(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),de(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),se(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),pe(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),ce(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),me(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),ie(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),re(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s}),ue(i,{coreOrigin:c,coreAccessToken:n,adapterKey:t,adminOrigin:o,fetchImpl:s})}return i},"createServerForContext")})}h(Ue,"createRemoteProductMcpHandler"),process.argv[1]&&import.meta.url===j(process.argv[1]).href&&U(()=>k());export{k as createProductServer,Ue as createRemoteProductMcpHandler};