@hiperplano/aluy-cli 1.0.0-rc.21 → 1.0.0-rc.22

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,4 +1,4 @@
1
- var EN=Object.defineProperty;var S=(t,e,o)=>()=>{if(o)throw o[0];try{return t&&(e=t(t=0)),e}catch(n){throw o=[n],n}};var Wf=(t,e)=>{for(var o in e)EN(t,o,{get:e[o],enumerable:!0})};var ca,Ax=S(()=>{"use strict";ca="1.0.0-rc.21"});function Pn(t,e){return t.decide(e)}var Hr=S(()=>{"use strict"});var en,Nn,In=S(()=>{"use strict";en="remember",Nn="recall"});var Gf,TN,Ws,zf=S(()=>{"use strict";Gf=class{id;horizon;label;parentId;children;dependencies;pinned;closed;createdAt;lastAccessedAt;accessCount;context;constructor(e,o,n,r,s){this.id=e,this.horizon=o,this.label=n,this.parentId=r,this.children=new Set,this.dependencies=new Set,this.pinned=!1,this.closed=!1,this.createdAt=s,this.lastAccessedAt=s,this.accessCount=0,this.context=[]}touch(e){this.lastAccessedAt=e,this.accessCount+=1}snapshot(){return{id:this.id,horizon:this.horizon,label:this.label,parentId:this.parentId,children:[...this.children],dependencies:[...this.dependencies],pinned:this.pinned,closed:this.closed,createdAt:this.createdAt,lastAccessedAt:this.lastAccessedAt,accessCount:this.accessCount,contextSize:this.context.length}}},TN=200,Ws=class{nodes=new Map;maxBoxes;now;constructor(e){this.maxBoxes=e?.maxBoxes??TN,this.now=e?.clock??Date.now}static boxId(e,o){return`${e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"").slice(0,60)}-${o.toString(36)}`}openBox(e,o,n,r){let s=this.nodes.get(e);if(s)return s.touch(this.now()),{box:s.snapshot(),created:!1};if(this.nodes.size>=this.maxBoxes&&(this.evictOne(),this.nodes.size>=this.maxBoxes))return null;let i=this.now(),a=new Gf(e,o,n,r??null,i);if(r){let c=this.nodes.get(r);c&&c.children.add(e)}return this.nodes.set(e,a),{box:a.snapshot(),created:!0}}closeBox(e){let o=this.nodes.get(e);return o?(o.closed=!0,o.touch(this.now()),o.snapshot()):null}isClosed(e){let o=this.nodes.get(e);return o?o.closed:!1}reopenBox(e){let o=this.nodes.get(e);return o?(o.closed=!1,o.touch(this.now()),o.snapshot()):null}setHorizon(e,o){let n=this.nodes.get(e);return n?(n.horizon=o,n.touch(this.now()),n.snapshot()):null}setParent(e,o){let n=this.nodes.get(e);return n?n.parentId===o?n.snapshot():o!==null&&this.wouldCreateCycle(e,o)?null:(n.parentId&&this.nodes.get(n.parentId)?.children.delete(e),n.parentId=o,o&&this.nodes.get(o)?.children.add(e),n.touch(this.now()),n.snapshot()):null}wouldCreateCycle(e,o){let n=new Set,r=o;for(;r!==null;){if(r===e||n.has(r))return!0;n.add(r),r=this.nodes.get(r)?.parentId??null}return!1}getBox(e){let o=this.nodes.get(e);return o?(o.touch(this.now()),o.snapshot()):null}listBoxes(e="lastAccessedAt"){let o=[...this.nodes.values()].map(n=>n.snapshot());switch(e){case"createdAt":return o.sort((n,r)=>n.createdAt-r.createdAt);case"accessCount":return o.sort((n,r)=>r.accessCount-n.accessCount);default:return o.sort((n,r)=>r.lastAccessedAt-n.lastAccessedAt)}}get size(){return this.nodes.size}addContext(e,o){let n=this.nodes.get(e);return n?(n.context.push({ts:this.now(),text:o}),n.touch(this.now()),n.snapshot()):null}getContext(e){let o=this.nodes.get(e);return o?(o.touch(this.now()),[...o.context]):[]}getContextChain(e){let o=[],n=new Set,r=e;for(;r&&!n.has(r);){n.add(r);let s=this.nodes.get(r);if(!s)break;s.touch(this.now()),o.push({boxId:s.id,entries:[...s.context]}),r=s.parentId}return o}addDependency(e,o){let n=this.nodes.get(e);return!n||!this.nodes.has(o)||n.id===o?!1:(n.dependencies.add(o),n.touch(this.now()),!0)}getDependencies(e){let o=this.nodes.get(e);return o?[...o.dependencies]:[]}pinBox(e){let o=this.nodes.get(e);return o?(o.pinned=!0,o.touch(this.now()),o.snapshot()):null}unpinBox(e){let o=this.nodes.get(e);return o?(o.pinned=!1,o.touch(this.now()),o.snapshot()):null}evictOne(){let e=[];for(let n of this.nodes.values())n.horizon==="longo"||n.pinned||e.push(n);if(e.length===0)return null;e.sort((n,r)=>{let s=n.horizon==="curto"?0:1,i=r.horizon==="curto"?0:1;if(s!==i)return s-i;let a=n.closed?0:1,c=r.closed?0:1;return a!==c?a-c:n.lastAccessedAt!==r.lastAccessedAt?n.lastAccessedAt-r.lastAccessedAt:n.accessCount-r.accessCount});let o=e[0];return this.removeNode(o)}forceEvict(e){let o=this.nodes.get(e);return!o||o.horizon==="longo"||o.pinned?null:this.removeNode(o)}removeBox(e){let o=this.nodes.get(e);return o?this.removeNode(o):null}removeNode(e){if(e.parentId){let o=this.nodes.get(e.parentId);o&&o.children.delete(e.id)}return this.nodes.delete(e.id),e.snapshot()}}});function sd(t){let e=[];for(let o of t){e.push({step:o,depth:0});for(let n of o.substeps??[])e.push({step:n,depth:1})}return e}function _x(t,e){let o,n="pending",r;if(typeof t=="string")o=t;else if(t!==null&&typeof t=="object"){let i=t,a=i.title??i.step??i.text??i.name??i.content;if(typeof a=="string"&&(o=a),typeof i.status=="string"&&_N.has(i.status)&&(n=i.status),e){let c=i.substeps??i.subtasks??i.subpassos??i.children;if(Array.isArray(c)&&c.length>0){let l=[];for(let d of c){let f=_x(d,!1);if(typeof f=="string")return f;l.push(f)}r=l}}}if(o===void 0||o.trim()==="")return CN;let s=o.trim().slice(0,RN);return r?{title:s,status:n,substeps:r}:{title:s,status:n}}function ON(t){let e=t.steps??t.plan??t.todos??t.items;if(!Array.isArray(e))return{error:'update_plan: passe "steps" como uma LISTA de passos (string ou {title,status}).'};if(e.length===0)return{error:"update_plan: a lista de passos est\xE1 vazia."};let o=[];for(let i of e){let a=_x(i,!0);if(typeof a=="string")return{error:a};o.push(a)}let n=new Set,r=i=>{if(!n.has(i))return n.add(i),i;for(let a=2;;a++){let c=`${i} #${a}`;if(!n.has(c))return n.add(c),c}};for(let i=0;i<o.length;i++){let a=o[i],c=r(a.title),l=a.substeps?.map(d=>({...d,title:r(d.title)}));o[i]=l!==void 0?{...a,title:c,substeps:l}:{...a,title:c}}let s=sd(o).length;return s>Ex?{error:`update_plan: no m\xE1ximo ${Ex} passos (recebidos ${s}).`}:{steps:o}}function MN(t){let e=sd(t),o=e.filter(r=>r.step.status==="completed").length,n=e.map(r=>`${" ".repeat(r.depth)}${Rx[r.step.status]} ${r.step.title}`).join(`
1
+ var EN=Object.defineProperty;var S=(t,e,o)=>()=>{if(o)throw o[0];try{return t&&(e=t(t=0)),e}catch(n){throw o=[n],n}};var Wf=(t,e)=>{for(var o in e)EN(t,o,{get:e[o],enumerable:!0})};var ca,Ax=S(()=>{"use strict";ca="1.0.0-rc.22"});function Pn(t,e){return t.decide(e)}var Hr=S(()=>{"use strict"});var en,Nn,In=S(()=>{"use strict";en="remember",Nn="recall"});var Gf,TN,Ws,zf=S(()=>{"use strict";Gf=class{id;horizon;label;parentId;children;dependencies;pinned;closed;createdAt;lastAccessedAt;accessCount;context;constructor(e,o,n,r,s){this.id=e,this.horizon=o,this.label=n,this.parentId=r,this.children=new Set,this.dependencies=new Set,this.pinned=!1,this.closed=!1,this.createdAt=s,this.lastAccessedAt=s,this.accessCount=0,this.context=[]}touch(e){this.lastAccessedAt=e,this.accessCount+=1}snapshot(){return{id:this.id,horizon:this.horizon,label:this.label,parentId:this.parentId,children:[...this.children],dependencies:[...this.dependencies],pinned:this.pinned,closed:this.closed,createdAt:this.createdAt,lastAccessedAt:this.lastAccessedAt,accessCount:this.accessCount,contextSize:this.context.length}}},TN=200,Ws=class{nodes=new Map;maxBoxes;now;constructor(e){this.maxBoxes=e?.maxBoxes??TN,this.now=e?.clock??Date.now}static boxId(e,o){return`${e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"").slice(0,60)}-${o.toString(36)}`}openBox(e,o,n,r){let s=this.nodes.get(e);if(s)return s.touch(this.now()),{box:s.snapshot(),created:!1};if(this.nodes.size>=this.maxBoxes&&(this.evictOne(),this.nodes.size>=this.maxBoxes))return null;let i=this.now(),a=new Gf(e,o,n,r??null,i);if(r){let c=this.nodes.get(r);c&&c.children.add(e)}return this.nodes.set(e,a),{box:a.snapshot(),created:!0}}closeBox(e){let o=this.nodes.get(e);return o?(o.closed=!0,o.touch(this.now()),o.snapshot()):null}isClosed(e){let o=this.nodes.get(e);return o?o.closed:!1}reopenBox(e){let o=this.nodes.get(e);return o?(o.closed=!1,o.touch(this.now()),o.snapshot()):null}setHorizon(e,o){let n=this.nodes.get(e);return n?(n.horizon=o,n.touch(this.now()),n.snapshot()):null}setParent(e,o){let n=this.nodes.get(e);return n?n.parentId===o?n.snapshot():o!==null&&this.wouldCreateCycle(e,o)?null:(n.parentId&&this.nodes.get(n.parentId)?.children.delete(e),n.parentId=o,o&&this.nodes.get(o)?.children.add(e),n.touch(this.now()),n.snapshot()):null}wouldCreateCycle(e,o){let n=new Set,r=o;for(;r!==null;){if(r===e||n.has(r))return!0;n.add(r),r=this.nodes.get(r)?.parentId??null}return!1}getBox(e){let o=this.nodes.get(e);return o?(o.touch(this.now()),o.snapshot()):null}listBoxes(e="lastAccessedAt"){let o=[...this.nodes.values()].map(n=>n.snapshot());switch(e){case"createdAt":return o.sort((n,r)=>n.createdAt-r.createdAt);case"accessCount":return o.sort((n,r)=>r.accessCount-n.accessCount);default:return o.sort((n,r)=>r.lastAccessedAt-n.lastAccessedAt)}}get size(){return this.nodes.size}addContext(e,o){let n=this.nodes.get(e);return n?(n.context.push({ts:this.now(),text:o}),n.touch(this.now()),n.snapshot()):null}getContext(e){let o=this.nodes.get(e);return o?(o.touch(this.now()),[...o.context]):[]}getContextChain(e){let o=[],n=new Set,r=e;for(;r&&!n.has(r);){n.add(r);let s=this.nodes.get(r);if(!s)break;s.touch(this.now()),o.push({boxId:s.id,entries:[...s.context]}),r=s.parentId}return o}addDependency(e,o){let n=this.nodes.get(e);return!n||!this.nodes.has(o)||n.id===o?!1:(n.dependencies.add(o),n.touch(this.now()),!0)}getDependencies(e){let o=this.nodes.get(e);return o?[...o.dependencies]:[]}pinBox(e){let o=this.nodes.get(e);return o?(o.pinned=!0,o.touch(this.now()),o.snapshot()):null}unpinBox(e){let o=this.nodes.get(e);return o?(o.pinned=!1,o.touch(this.now()),o.snapshot()):null}evictOne(){let e=[];for(let n of this.nodes.values())n.horizon==="longo"||n.pinned||e.push(n);if(e.length===0)return null;e.sort((n,r)=>{let s=n.horizon==="curto"?0:1,i=r.horizon==="curto"?0:1;if(s!==i)return s-i;let a=n.closed?0:1,c=r.closed?0:1;return a!==c?a-c:n.lastAccessedAt!==r.lastAccessedAt?n.lastAccessedAt-r.lastAccessedAt:n.accessCount-r.accessCount});let o=e[0];return this.removeNode(o)}forceEvict(e){let o=this.nodes.get(e);return!o||o.horizon==="longo"||o.pinned?null:this.removeNode(o)}removeBox(e){let o=this.nodes.get(e);return o?this.removeNode(o):null}removeNode(e){if(e.parentId){let o=this.nodes.get(e.parentId);o&&o.children.delete(e.id)}return this.nodes.delete(e.id),e.snapshot()}}});function sd(t){let e=[];for(let o of t){e.push({step:o,depth:0});for(let n of o.substeps??[])e.push({step:n,depth:1})}return e}function _x(t,e){let o,n="pending",r;if(typeof t=="string")o=t;else if(t!==null&&typeof t=="object"){let i=t,a=i.title??i.step??i.text??i.name??i.content;if(typeof a=="string"&&(o=a),typeof i.status=="string"&&_N.has(i.status)&&(n=i.status),e){let c=i.substeps??i.subtasks??i.subpassos??i.children;if(Array.isArray(c)&&c.length>0){let l=[];for(let d of c){let f=_x(d,!1);if(typeof f=="string")return f;l.push(f)}r=l}}}if(o===void 0||o.trim()==="")return CN;let s=o.trim().slice(0,RN);return r?{title:s,status:n,substeps:r}:{title:s,status:n}}function ON(t){let e=t.steps??t.plan??t.todos??t.items;if(!Array.isArray(e))return{error:'update_plan: passe "steps" como uma LISTA de passos (string ou {title,status}).'};if(e.length===0)return{error:"update_plan: a lista de passos est\xE1 vazia."};let o=[];for(let i of e){let a=_x(i,!0);if(typeof a=="string")return{error:a};o.push(a)}let n=new Set,r=i=>{if(!n.has(i))return n.add(i),i;for(let a=2;;a++){let c=`${i} #${a}`;if(!n.has(c))return n.add(c),c}};for(let i=0;i<o.length;i++){let a=o[i],c=r(a.title),l=a.substeps?.map(d=>({...d,title:r(d.title)}));o[i]=l!==void 0?{...a,title:c,substeps:l}:{...a,title:c}}let s=sd(o).length;return s>Ex?{error:`update_plan: no m\xE1ximo ${Ex} passos (recebidos ${s}).`}:{steps:o}}function MN(t){let e=sd(t),o=e.filter(r=>r.step.status==="completed").length,n=e.map(r=>`${" ".repeat(r.depth)}${Rx[r.step.status]} ${r.step.title}`).join(`
2
2
  `);return`plano (${o}/${e.length}):
3
3
  ${n}`}function PN(t,e){return e<0?"m\xE9dio":t===e?"curto":t>e?"longo":"m\xE9dio"}function NN(t,e){let o=new Map;for(let i of e.listBoxes())o.set(i.label,i.id);let n=t.findIndex(i=>i.status==="in_progress"||(i.substeps??[]).some(a=>a.status==="in_progress")),r=(i,a,c)=>{let l=i.status==="in_progress"?"curto":c,d=o.get(i.title),f=d??Ws.boxId(i.title,0);return d?(i.status!=="completed"&&e.isClosed(d)&&e.reopenBox(d),e.setHorizon(d,l),e.setParent(d,a)):e.openBox(f,l,i.title,a),i.status==="completed"&&!e.isClosed(f)&&e.closeBox(f),o.set(i.title,f),f};t.forEach((i,a)=>{let c=PN(a,n),l=r(i,null,c);for(let d of i.substeps??[])r(d,l,c)});let s=new Set;for(let i of t){s.add(i.title);for(let a of i.substeps??[])s.add(a.title)}for(let i of e.listBoxes())s.has(i.label)||e.removeBox(i.id)}function IN(t,e){if(!e)return MN(t);let o=new Map;for(let l of e.listBoxes())o.set(l.label,l);let n=new Map;for(let l of e.listBoxes())n.set(l.id,l);let r=new Map,s=(l,d=new Set)=>{let f=r.get(l);if(f!==void 0)return f;let u=n.get(l);if(!u||!u.parentId||d.has(l))return r.set(l,0),0;let p=s(u.parentId,new Set(d).add(l))+1;return r.set(l,p),p},i=sd(t),c=[`plano (${i.filter(l=>l.step.status==="completed").length}/${i.length}):`];for(let{step:l,depth:d}of i){let f=o.get(l.title),u=f?LN[f.horizon]:"",p=f?s(f.id):d,h=" ".repeat(p),y=Rx[l.status];c.push(`${h}${u} ${y} ${l.title}`)}return c.join(`
4
4
  `)}var la,_N,Ex,RN,CN,Rx,LN,Tx,DN,Cx,id=S(()=>{"use strict";zf();la="update_plan";_N=new Set(["pending","in_progress","completed"]),Ex=30,RN=120,CN="update_plan: cada passo precisa de um t\xEDtulo (texto) n\xE3o-vazio.";Rx={pending:"\u2610",in_progress:"\u25B6",completed:"\u2611"};LN={longo:"[\u{1F4D0}]",m\u00E9dio:"[\u{1F4CB}]",curto:"[\u{1F4CC}]"};Tx=Object.freeze({type:"string",enum:["pending","in_progress","completed"],description:"pending (a fazer) \xB7 in_progress (em curso) \xB7 completed (feito)."}),DN=Object.freeze({type:"object",properties:{steps:{type:"array",description:"A lista COMPLETA de passos do plano (re-emita TODOS a cada atualiza\xE7\xE3o \u2014 substitui o anterior).",items:{type:"object",properties:{title:{type:"string",description:"O passo, curto e no imperativo."},status:Tx,substeps:{type:"array",description:"OPCIONAL: sub-passos que detalham este passo (1 n\xEDvel). Aparecem indentados sob o passo e seguem o foco dele. Use quando um passo tem a\xE7\xF5es menores distintas.",items:{type:"object",properties:{title:{type:"string",description:"O sub-passo, curto e no imperativo."},status:Tx},required:["title"],additionalProperties:!1}}},required:["title"],additionalProperties:!1}}},required:["steps"],additionalProperties:!1}),Cx={name:la,effect:"read",description:"Declara/atualiza um PLANO vis\xEDvel (checklist de passos). Use ao iniciar uma tarefa com V\xC1RIOS passos e a cada progresso: re-emita a lista TODA marcando o status de cada passo (pending/in_progress/completed). Mantenha 1 passo in_progress por vez. N\xE3o tem efeito no sistema \u2014 \xE9 s\xF3 o seu plano, para voc\xEA e para o usu\xE1rio acompanharem.",parameters:DN,async run(t,e){let o=ON(t);return"error"in o?{ok:!1,observation:o.error}:(e.graph&&NN(o.steps,e.graph),e.plan&&e.plan.set(sd(o.steps).map(r=>({title:r.step.title,status:r.step.status}))),{ok:!0,observation:IN(o.steps,e.graph)})}}});function Ox(t){let e=t.question??t.prompt??t.text??t.message;if(typeof e!="string"||e.trim()==="")return{error:'perguntar: passe "question" (a pergunta em texto). Para escolha, passe tamb\xE9m "options".'};let o=e.trim().slice(0,2e3),n=t.header??t.title,r=typeof n=="string"&&n.trim()!==""?n.trim().slice(0,200):void 0,s=t.options??t.choices,i=Array.isArray(s)?FN(s):void 0;if(typeof i=="string")return{error:i};let a,c=t.kind??t.type;if(typeof c=="string"&&$N.has(c))a=c;else{if(typeof c=="string"&&c.trim()!=="")return{error:`perguntar: "kind" inv\xE1lido "${c}". Use "single", "multi" ou "text".`};a=i!==void 0&&i.length>0?"single":"text"}if((a==="single"||a==="multi")&&(i===void 0||i.length===0))return{error:`perguntar: kind "${a}" requer "options" (uma lista de ao menos 1 op\xE7\xE3o).`};let l=t.allowOther!==!1;return{spec:{kind:a,question:o,...r!==void 0?{header:r}:{},...a!=="text"&&i!==void 0?{options:i}:{},...a!=="text"?{allowOther:l}:{}}}}function FN(t){if(t.length===0)return'perguntar: a lista de "options" est\xE1 vazia.';if(t.length>12)return`perguntar: no m\xE1ximo 12 op\xE7\xF5es (recebidas ${t.length}).`;let e=[];for(let o of t){let n,r;if(typeof o=="string")n=o;else if(o!==null&&typeof o=="object"){let s=o,i=s.label??s.text??s.value??s.name??s.title;typeof i=="string"&&(n=i),typeof s.description=="string"&&s.description.trim()!==""&&(r=s.description.trim().slice(0,300))}if(n===void 0||n.trim()==="")return'perguntar: cada op\xE7\xE3o precisa de um "label" (texto) n\xE3o-vazio.';e.push({label:n.trim().slice(0,200),...r!==void 0?{description:r}:{}})}return e}function BN(t){switch(t.kind){case"choice":return t.label;case"choices":return t.labels.length===0?"(nenhuma)":t.labels.join(", ");case"text":{let e=t.text.split(`
@@ -135,14 +135,15 @@ ${t.trim()}`}}function AT(t,e,o=gc){let{older:n,recent:r}=Cu(t,o);if(n.length===
135
135
  \u2026[truncado: ${t.length-Dy} chars omitidos]`}function EB(t){return t.length<=Fy?t:`${t.slice(0,Fy)}\u2026`}function a_(t){let e=i_(t.server,t.descriptor.name),o=EB(t.descriptor.description.trim()),n=`[tool de um SERVER MCP de terceiro "${t.server}" \u2014 efeito n\xE3o-confi\xE1vel, passa pela catraca] ${o||"(sem descri\xE7\xE3o)"}`,r=t.descriptor.inputSchema,s=r!==null&&typeof r=="object"&&!Array.isArray(r)?r:void 0;return{name:e,effect:"mcp",description:n,...s?{parameters:s}:{},async run(i,a,c){try{let l=await t.transport.callTool(t.descriptor.name,i,c?.signal),d=Ue(l.content);return l.ok?{ok:!0,observation:s_(d),display:`${e}(${TB(i)})`}:{ok:!1,observation:s_(`MCP "${e}" erro: ${d}`)}}catch(l){return{ok:!1,observation:`MCP "${e}" falhou: ${l instanceof Error?l.message:String(l)}`}}}}}function By(t,e){let o=[],n=new Set,r=new Map,s=new Map,i=new Set;for(let a of t){let c=a_(a);if(n.has(c.name))continue;n.add(c.name);let l=a.server;s.set(l,(s.get(l)??0)+1);let d=r.get(l)??0;if(d>=$y){i.add(l);continue}r.set(l,d+1),o.push(c)}if(e)for(let a of i){let c=s.get(a)??0;e(`server MCP "${a}" exp\xF4s ${c} tools; usando as primeiras ${$y} (teto por server, anti-estouro de contexto). As demais foram ignoradas \u2014 revise o server ou reduza as tools que ele exp\xF5e.`)}return o}function TB(t){if(Object.keys(t).length===0)return"";let o=JSON.stringify(t);return o.length<=200?o:`${o.slice(0,200)}\u2026`}var Dy,$y,Fy,c_=S(()=>{"use strict";ld();Un();Dy=2e4;$y=128,Fy=1024});function u_(t,e){let o=new URL(d_);return t.trim().length>0&&o.searchParams.set("search",t.trim()),o.searchParams.set("limit",String(RB)),e!==void 0&&e.length>0&&o.searchParams.set("cursor",e),o.toString()}async function jy(t,e,o){let n=t.trim(),r=[],s;for(let i=0;i<_B;i++){let a=u_(n,s),c;try{c=await e(a,o)}catch(f){return{ok:!1,query:n,reason:Fu(NB(f))}}if(!c.ok)return{ok:!1,query:n,reason:Fu(c.reason)};if(c.status<200||c.status>=300)return{ok:!1,query:n,reason:Fu(`HTTP ${c.status}`)};let l;try{l=JSON.parse(c.body)}catch{return{ok:!1,query:n,reason:Fu("resposta n\xE3o \xE9 JSON v\xE1lido")}}let d=f_(l);for(let f of d.servers)if(m_(f,n)&&r.push(f),r.length>=Uy)break;if(r.length>=Uy||(s=d.nextCursor,s===void 0||s.length===0))break}return{ok:!0,query:n,results:r}}function Fu(t){return`registro MCP indispon\xEDvel (${vi}): ${t}`}function m_(t,e){if(e.length===0)return!0;let o=e.toLowerCase();return[t.name,t.title??"",t.description,t.run.command??"",t.run.args.join(" ")].join(" ").toLowerCase().includes(o)}function f_(t){if(!Wn(t))return{servers:[]};let e=Array.isArray(t.servers)?t.servers:[],o=[];for(let s of e){let i=CB(s);i!==void 0&&o.push(i)}let n=Wn(t.metadata)?t.metadata:void 0,r=n!==void 0&&typeof n.nextCursor=="string"?n.nextCursor:void 0;return{servers:o,...r!==void 0?{nextCursor:r}:{}}}function CB(t){if(!Wn(t))return;let e=Wn(t.server)?t.server:t,o=typeof e.name=="string"?e.name.trim():"";if(o.length===0)return;let n=typeof e.description=="string"?e.description.trim():"",r=typeof e.title=="string"&&e.title.trim().length>0?e.title.trim():void 0,s=typeof e.version=="string"?e.version.trim():void 0,i=OB(e);return{name:o,description:n,run:i,...r!==void 0?{title:r}:{},...s!==void 0?{version:s}:{}}}function OB(t){let e=[],o=Array.isArray(t.remotes)?t.remotes:[];for(let r of o)Wn(r)&&typeof r.url=="string"&&e.push(r.url);let n=Array.isArray(t.packages)?t.packages:[];for(let r of n){if(!Wn(r))continue;let s=MB(r);if(s!==void 0)return{...s,remoteUrls:e}}return{args:[],env:[],remoteUrls:e}}function MB(t){let e=cs(t.registryType)??cs(t.registry_name),o=cs(t.identifier)??cs(t.name);if(o===void 0)return;let n=cs(t.version),r=cs(t.runtimeHint),s=Wn(t.transport)?cs(t.transport.type):void 0,i=PB(t.environmentVariables),a=l_(t.runtimeArguments),c=l_(t.packageArguments),l=n!==void 0?`${o}@${n}`:o;return e==="npm"||r==="npx"?{command:"npx",args:LB(["-y",...a,l,...c]),env:i,...s!==void 0?{transport:s}:{}}:e==="pypi"||r==="uvx"||r==="uv"?{command:"uvx",args:[...a,o,...c],env:i,...s!==void 0?{transport:s}:{}}:e==="oci"||r==="docker"?{command:"docker",args:["run","-i","--rm",...a,l,...c],env:i,...s!==void 0?{transport:s}:{}}:{args:[l],env:i,...s!==void 0?{transport:s}:{}}}function LB(t){let e=[],o=!1;for(let n of t){if(n==="-y"||n==="--yes"){if(o)continue;o=!0}e.push(n)}return e}function l_(t){if(!Array.isArray(t))return[];let e=[];for(let o of t)Wn(o)&&typeof o.value=="string"&&e.push(o.value);return e}function PB(t){if(!Array.isArray(t))return[];let e=[];for(let o of t)Wn(o)&&typeof o.name=="string"&&o.name.length>0&&e.push({name:o.name,required:o.isRequired===!0});return e}function cs(t){return typeof t=="string"&&t.trim().length>0?t.trim():void 0}function Wn(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function NB(t){return t instanceof Error?t.message:String(t)}var vi,d_,_B,RB,Uy,p_=S(()=>{"use strict";vi="registry.modelcontextprotocol.io",d_=`https://${vi}/v0/servers`,_B=5,RB=100,Uy=25});function g_(t){let{command:e,args:o}=t.run;if(e===void 0)return;let n=y_(t.name);return["aluy","mcp","add",h_(n),"--",e,...o.map(h_)].join(" ")}function y_(t){let o=(t.split("/").pop()??t).replace(/[^A-Za-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"");return o.length>0?o:"server"}function h_(t){return/^[A-Za-z0-9_./@:+=-]+$/.test(t)?t:`'${t.replace(/'/g,"'\\''")}'`}function Hy(t){if(!t.ok)return`\u26A0 ${t.reason}
136
136
  Tente de novo em instantes; a busca no registro n\xE3o bloqueia o resto do aluy.`;if(t.results.length===0)return`nenhum server encontrado para "${t.query}" no registro oficial MCP.`;let e=[],o=t.results.length;e.push(`${o} server${o===1?"":"s"} para "${t.query}" (registro oficial MCP):`),e.push("");for(let n of t.results)e.push(IB(n)),e.push("");return e.push('Para instalar, copie a linha "\u2192 aluy mcp add \u2026" do server desejado.'),e.push("A sa\xEDda do registro \xE9 apenas informativa \u2014 nada \xE9 executado pela busca."),e.join(`
137
137
  `)}function IB(t){let o=[`\u2022 ${t.version!==void 0?`${t.name} (v${t.version})`:t.name}`],n=t.title!==void 0&&t.title!==t.name?t.title:void 0;n!==void 0&&o.push(` ${n}`),t.description.length>0&&o.push(` ${DB(t.description,200)}`);let r=g_(t);if(r!==void 0){o.push(` \u2192 ${r}`),t.run.transport!==void 0&&t.run.transport!=="stdio"&&o.push(` (transporte "${t.run.transport}" \u2014 v1 do aluy s\xF3 pluga servers stdio LOCAIS)`);let s=t.run.env.filter(i=>i.required).map(i=>i.name);s.length>0&&o.push(` requer env: ${s.join(", ")} (defina por-server no mcp.json)`)}else t.run.remoteUrls.length>0?o.push(` (server REMOTO: ${t.run.remoteUrls.join(", ")} \u2014 fora do v1 de \`aluy mcp add\`)`):o.push(" (sem pacote local conhecido \u2014 nada a instalar pelo aluy)");return o.join(`
138
- `)}function DB(t,e){return t.length<=e?t:t.slice(0,e-1).trimEnd()+"\u2026"}var b_=S(()=>{"use strict"});var v_=S(()=>{"use strict";$u();ZT();e_();t_();o_();r_();c_();ld();p_();b_()});function qy(t){let e=/^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?/.exec(t.trim());if(!e)return null;let o=e[4]?e[4].split(".").map(n=>/^\d+$/.test(n)?Number(n):n):[];return{major:Number(e[1]),minor:Number(e[2]),patch:Number(e[3]),pre:o}}function k_(t,e){let o=qy(t),n=qy(e);if(!o||!n)return null;for(let s of["major","minor","patch"])if(o[s]!==n[s])return o[s]<n[s]?-1:1;if(o.pre.length===0&&n.pre.length===0)return 0;if(o.pre.length===0)return 1;if(n.pre.length===0)return-1;let r=Math.max(o.pre.length,n.pre.length);for(let s=0;s<r;s++){let i=o.pre[s],a=n.pre[s];if(i===void 0)return-1;if(a===void 0)return 1;if(i===a)continue;let c=typeof i=="number",l=typeof a=="number";return c&&l?i<a?-1:1:c?-1:l?1:i<a?-1:1}return 0}function Wy(t,e){return k_(t,e)===1}var x_=S(()=>{"use strict"});var Gy=S(()=>{"use strict"});var S_=S(()=>{"use strict";Gy()});var w_=S(()=>{"use strict"});var A_=S(()=>{"use strict"});function zy(t){return`connector-${t}-token`}function Ky(t){let e=t.trim(),o=e.indexOf(":");return o<=0?`\u2026(${e.length} chars)`:`${e.slice(0,o)}:\u2026(${e.length-o-1} chars)`}var E_=S(()=>{"use strict"});var U=S(()=>{"use strict";Ax();zx();rS();ww();HT();XT();v_();wy();hu();x_();Gy();S_();w_();A_();E_()});import{posix as rj}from"node:path";function sj(t){return rj.normalize(t)}function Jt(t){let e=sj(t);for(let o of ij)if(o.re.test(e))return o.deny?{kind:"deny",why:o.why}:{kind:"ask",why:o.why};return{kind:"allow"}}function mb(t){return Jt(t).kind==="allow"}var ij,Sr=S(()=>{"use strict";ij=[{re:/(?:^|\/|~\/)\.ssh(?:\/|$)/,why:"chaves SSH (~/.ssh)",deny:!0},{re:/(?:^|\/|~\/)\.aws(?:\/|$)/,why:"credenciais AWS (~/.aws)",deny:!0},{re:/(?:^|\/|~\/)\.gnupg(?:\/|$)/,why:"chaves GPG (~/.gnupg)",deny:!0},{re:/(?:~\/|\$\{?HOME\}?\/|\/(?:home|Users)\/[^/]+\/)\.aluy\/rooms(?:\/|$)/,why:"arquivos de sala do Aluy (~/.aluy/rooms)",deny:!0},{re:/~\/\.aluy(?:\/|$)/,why:"estado/credencial do Aluy (~/.aluy)",deny:!0},{re:/(?:^|\/)\.aluy(?:\/(?!agents\/|workflows\/|commands\/)|$)/,why:"estado/credencial do Aluy (.aluy/)",deny:!0},{re:/(?:^|\/|~\/)\.config\/gh\/hosts\.yml$/,why:"token do gh CLI",deny:!0},{re:/(?:^|\/|~\/)\.docker\/config\.json$/,why:"credenciais Docker",deny:!0},{re:/(?:^|\/|~\/)\.kube\/config$/,why:"kubeconfig",deny:!0},{re:/(?:^|\/)id_(?:rsa|ed25519|ecdsa|dsa)\b/,why:"chave privada",deny:!0},{re:/\.pem$|\.p12$|\.pfx$|\.key$/i,why:"material de chave privada",deny:!0},{re:/(?:^|[/\w.-])\.env(?:\.(?!example$|sample$|template$|dist$)[\w.-]+)?$/,why:"arquivo .env (segredos)",deny:!1},{re:/(?:^|\/)[^/]*(?:secret|credential|token|apikey|api_key|password|passwd)[^/]*$/i,why:"arquivo com nome sens\xEDvel (token/secret)",deny:!1}]});var Ib={};Wf(Ib,{UserWorkflowsLoader:()=>_i,WORKFLOWS_DIRNAME:()=>Nb});import{homedir as GH}from"node:os";import{join as Pb}from"node:path";import{readdirSync as zH,readFileSync as KH,mkdirSync as YH,statSync as VH}from"node:fs";var XH,Nb,JH,QH,_i,im=S(()=>{"use strict";U();XH=448,Nb="workflows",JH=64*1024,QH=256,_i=class{dir;constructor(e={}){let o=e.baseDir??Pb(GH(),".aluy");this.dir=Pb(o,Nb)}get workflowsDir(){return this.dir}ensureDir(){try{YH(this.dir,{mode:XH,recursive:!0})}catch{}}load(){let e;try{e=zH(this.dir,{withFileTypes:!0})}catch{return{workflows:[],errors:[]}}let o=e.filter(i=>i.isFile()&&i.name.toLowerCase().endsWith(".md")).map(i=>i.name).sort((i,a)=>i.localeCompare(a)),n=new Set,r=[],s=[];for(let i of o){if(r.length>=QH)break;let a=this.readOne(i);if(a!==null){if(sc(a)){s.push(a);continue}n.has(a.name)||(n.add(a.name),r.push(a))}}return{workflows:r,errors:s}}readOne(e){let o=Pb(this.dir,e);try{let n=VH(o);if(!n.isFile()||n.size>JH)return null;let r=KH(o,"utf8");return ic(e,r,"global")}catch{return null}}}});var $b={};Wf($b,{PROJECT_WORKFLOWS_DIRNAMES:()=>Db,ProjectWorkflowsLoader:()=>Ri});import{join as ZH}from"node:path";import{readdirSync as eq,readFileSync as tq,statSync as oq}from"node:fs";var Db,nq,rq,Ri,am=S(()=>{"use strict";U();Sr();Db=[".claude/workflows",".aluy/workflows"],nq=64*1024,rq=256,Ri=class{workspace;constructor(e){this.workspace=e.workspace}load(){let e=new Set,o=[],n=[];for(let r of Db){let s;try{s=this.workspace.resolveInside(r)}catch{continue}let i;try{i=eq(s,{withFileTypes:!0})}catch{continue}let a=i.filter(c=>c.isFile()&&c.name.toLowerCase().endsWith(".md")).map(c=>c.name).sort((c,l)=>c.localeCompare(l));for(let c of a){if(o.length>=rq)break;let l=this.readOne(r,s,c);if(l!==null){if(sc(l)){n.push(l);continue}e.has(l.name)||(e.add(l.name),o.push(l))}}}return{workflows:o,errors:n}}readOne(e,o,n){let r=`${e}/${n}`;if(Jt(r).kind!=="allow")return null;let s=ZH(o,n);try{this.workspace.resolveInside(r);let i=oq(s);if(!i.isFile()||i.size>nq)return null;let a=tq(s,"utf8");return ic(n,a,"project")}catch{return null}}}});var Ln="1.0.0-rc.21";U();var T_=`aluy \u2014 agente de terminal que roda na sua m\xE1quina, com o seu provider de LLM
138
+ `)}function DB(t,e){return t.length<=e?t:t.slice(0,e-1).trimEnd()+"\u2026"}var b_=S(()=>{"use strict"});var v_=S(()=>{"use strict";$u();ZT();e_();t_();o_();r_();c_();ld();p_();b_()});function qy(t){let e=/^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?/.exec(t.trim());if(!e)return null;let o=e[4]?e[4].split(".").map(n=>/^\d+$/.test(n)?Number(n):n):[];return{major:Number(e[1]),minor:Number(e[2]),patch:Number(e[3]),pre:o}}function k_(t,e){let o=qy(t),n=qy(e);if(!o||!n)return null;for(let s of["major","minor","patch"])if(o[s]!==n[s])return o[s]<n[s]?-1:1;if(o.pre.length===0&&n.pre.length===0)return 0;if(o.pre.length===0)return 1;if(n.pre.length===0)return-1;let r=Math.max(o.pre.length,n.pre.length);for(let s=0;s<r;s++){let i=o.pre[s],a=n.pre[s];if(i===void 0)return-1;if(a===void 0)return 1;if(i===a)continue;let c=typeof i=="number",l=typeof a=="number";return c&&l?i<a?-1:1:c?-1:l?1:i<a?-1:1}return 0}function Wy(t,e){return k_(t,e)===1}var x_=S(()=>{"use strict"});var Gy=S(()=>{"use strict"});var S_=S(()=>{"use strict";Gy()});var w_=S(()=>{"use strict"});var A_=S(()=>{"use strict"});function zy(t){return`connector-${t}-token`}function Ky(t){let e=t.trim(),o=e.indexOf(":");return o<=0?`\u2026(${e.length} chars)`:`${e.slice(0,o)}:\u2026(${e.length-o-1} chars)`}var E_=S(()=>{"use strict"});var U=S(()=>{"use strict";Ax();zx();rS();ww();HT();XT();v_();wy();hu();x_();Gy();S_();w_();A_();E_()});import{posix as rj}from"node:path";function sj(t){return rj.normalize(t)}function Jt(t){let e=sj(t);for(let o of ij)if(o.re.test(e))return o.deny?{kind:"deny",why:o.why}:{kind:"ask",why:o.why};return{kind:"allow"}}function mb(t){return Jt(t).kind==="allow"}var ij,Sr=S(()=>{"use strict";ij=[{re:/(?:^|\/|~\/)\.ssh(?:\/|$)/,why:"chaves SSH (~/.ssh)",deny:!0},{re:/(?:^|\/|~\/)\.aws(?:\/|$)/,why:"credenciais AWS (~/.aws)",deny:!0},{re:/(?:^|\/|~\/)\.gnupg(?:\/|$)/,why:"chaves GPG (~/.gnupg)",deny:!0},{re:/(?:~\/|\$\{?HOME\}?\/|\/(?:home|Users)\/[^/]+\/)\.aluy\/rooms(?:\/|$)/,why:"arquivos de sala do Aluy (~/.aluy/rooms)",deny:!0},{re:/~\/\.aluy(?:\/|$)/,why:"estado/credencial do Aluy (~/.aluy)",deny:!0},{re:/(?:^|\/)\.aluy(?:\/(?!agents\/|workflows\/|commands\/)|$)/,why:"estado/credencial do Aluy (.aluy/)",deny:!0},{re:/(?:^|\/|~\/)\.config\/gh\/hosts\.yml$/,why:"token do gh CLI",deny:!0},{re:/(?:^|\/|~\/)\.docker\/config\.json$/,why:"credenciais Docker",deny:!0},{re:/(?:^|\/|~\/)\.kube\/config$/,why:"kubeconfig",deny:!0},{re:/(?:^|\/)id_(?:rsa|ed25519|ecdsa|dsa)\b/,why:"chave privada",deny:!0},{re:/\.pem$|\.p12$|\.pfx$|\.key$/i,why:"material de chave privada",deny:!0},{re:/(?:^|[/\w.-])\.env(?:\.(?!example$|sample$|template$|dist$)[\w.-]+)?$/,why:"arquivo .env (segredos)",deny:!1},{re:/(?:^|\/)[^/]*(?:secret|credential|token|apikey|api_key|password|passwd)[^/]*$/i,why:"arquivo com nome sens\xEDvel (token/secret)",deny:!1}]});var Ib={};Wf(Ib,{UserWorkflowsLoader:()=>_i,WORKFLOWS_DIRNAME:()=>Nb});import{homedir as GH}from"node:os";import{join as Pb}from"node:path";import{readdirSync as zH,readFileSync as KH,mkdirSync as YH,statSync as VH}from"node:fs";var XH,Nb,JH,QH,_i,im=S(()=>{"use strict";U();XH=448,Nb="workflows",JH=64*1024,QH=256,_i=class{dir;constructor(e={}){let o=e.baseDir??Pb(GH(),".aluy");this.dir=Pb(o,Nb)}get workflowsDir(){return this.dir}ensureDir(){try{YH(this.dir,{mode:XH,recursive:!0})}catch{}}load(){let e;try{e=zH(this.dir,{withFileTypes:!0})}catch{return{workflows:[],errors:[]}}let o=e.filter(i=>i.isFile()&&i.name.toLowerCase().endsWith(".md")).map(i=>i.name).sort((i,a)=>i.localeCompare(a)),n=new Set,r=[],s=[];for(let i of o){if(r.length>=QH)break;let a=this.readOne(i);if(a!==null){if(sc(a)){s.push(a);continue}n.has(a.name)||(n.add(a.name),r.push(a))}}return{workflows:r,errors:s}}readOne(e){let o=Pb(this.dir,e);try{let n=VH(o);if(!n.isFile()||n.size>JH)return null;let r=KH(o,"utf8");return ic(e,r,"global")}catch{return null}}}});var $b={};Wf($b,{PROJECT_WORKFLOWS_DIRNAMES:()=>Db,ProjectWorkflowsLoader:()=>Ri});import{join as ZH}from"node:path";import{readdirSync as eq,readFileSync as tq,statSync as oq}from"node:fs";var Db,nq,rq,Ri,am=S(()=>{"use strict";U();Sr();Db=[".claude/workflows",".aluy/workflows"],nq=64*1024,rq=256,Ri=class{workspace;constructor(e){this.workspace=e.workspace}load(){let e=new Set,o=[],n=[];for(let r of Db){let s;try{s=this.workspace.resolveInside(r)}catch{continue}let i;try{i=eq(s,{withFileTypes:!0})}catch{continue}let a=i.filter(c=>c.isFile()&&c.name.toLowerCase().endsWith(".md")).map(c=>c.name).sort((c,l)=>c.localeCompare(l));for(let c of a){if(o.length>=rq)break;let l=this.readOne(r,s,c);if(l!==null){if(sc(l)){n.push(l);continue}e.has(l.name)||(e.add(l.name),o.push(l))}}}return{workflows:o,errors:n}}readOne(e,o,n){let r=`${e}/${n}`;if(Jt(r).kind!=="allow")return null;let s=ZH(o,n);try{this.workspace.resolveInside(r);let i=oq(s);if(!i.isFile()||i.size>nq)return null;let a=tq(s,"utf8");return ic(n,a,"project")}catch{return null}}}});var Ln="1.0.0-rc.22";U();var T_=`aluy \u2014 agente de terminal que roda na sua m\xE1quina, com o seu provider de LLM
139
139
 
140
140
  Uso:
141
141
  aluy ["objetivo"] [--plan | --yolo] [--dense] [--tier <tier>] [--lang <pt-BR|en>]
142
142
  aluy -p "prompt" [--model <slug>] [--output-format text|json|stream-json] (headless, script)
143
143
  aluy --continue | --resume [<id>]
144
144
  aluy onboard (instalador guiado \u2014 primeiro uso)
145
- aluy bootstrap [--agent] (provisiona os complementos opcionais \u2014 turbo)
145
+ aluy bootstrap [--no-agent] (provisiona os complementos opcionais \u2014 turbo)
146
+ aluy uninstall [--agent] (remove os complementos; --agent tira o ollama de sistema)
146
147
  aluy login [--token <PAT>] [--org <id>] [--device]
147
148
  aluy logout
148
149
  aluy whoami
@@ -417,7 +418,7 @@ Servers MCP:
417
418
  Notas:
418
419
  - O modelo \xE9 chamado direto pelo seu provider (BYO); o backend broker \xE9 opcional.
419
420
  - Credencial S\xD3 no keychain do SO \u2014 nunca em texto em claro.
420
- - Loop de agente + ferramentas nativas + controle de permiss\xE3o integrados.`;function Ke(t,e,o={}){let n=`--${e}=`;for(let r=0;r<t.length;r++){let s=t[r];if(s===`--${e}`){let i=t[r+1];return i===void 0||(o.allowDashValue?i.startsWith("--"):i.startsWith("-"))?void 0:i}if(s!==void 0&&s.startsWith(n))return s.slice(n.length)}}function FB(t,e){let o=`-${e}=`;for(let n=0;n<t.length;n++){let r=t[n];if(r===`-${e}`){let s=t[n+1];return s!==void 0&&!s.startsWith("-")?s:void 0}if(r!==void 0&&r.startsWith(o))return r.slice(o.length)}}function __(){return`aluy ${Ln} (@hiperplano/aluy-cli-core ${ca})`}var BB=new Set(["agent","no-agent","ascii","autocompact-at","backend","budget","cockpit","continue","cycle","cycle-for","cycles","deep","dense","device","effort","exec","fullscreen","help","json","lang","local-auth","local-base-url","local-model","local-provider","max-iterations","max-output-tokens","max-tokens","model","new","no-autocompact","no-budget","no-self-check","no-subagent","no-subagents","nome","oauth","output-format","plan","print","provider","quiet","resume","self-check","split","test","tier","unsafe","version","view","yolo"]),UB=["-p","--print","--exec","--tier","--lang","--model","--provider","--effort","--output-format","--backend","--local-provider","--local-model","--local-auth","--local-base-url","--max-tokens","--max-iterations","--max-output-tokens","--autocompact-at","--cycles","--cycle-for","--resume"];function jB(t,e){let o=[];for(let n=0;n<t.length;n++){let r=t[n];if(r==="--")break;if(!r.startsWith("--")||r.length===2||e.has(n))continue;let s=r.slice(2).split("=",1)[0];s===""||BB.has(s)||o.push(`--${s}`)}return o}function HB(t){let e=t[0];if(e==="login"&&!t.includes("-h")&&!t.includes("--help")){let $=t.slice(1),le=Ke($,"token"),qe=Ke($,"org"),et=$.includes("--device"),it=Ke($,"provider"),mt=$.includes("--oauth");return{kind:"login",forceDeviceFlow:et,...le!==void 0?{token:le}:{},...qe!==void 0?{org:qe}:{},...it!==void 0?{provider:it}:{},...mt?{oauth:!0}:{}}}if(e==="logout"&&!t.includes("-h")&&!t.includes("--help"))return{kind:"logout"};if(e==="whoami"&&!t.includes("-h")&&!t.includes("--help"))return{kind:"whoami"};if(e==="doctor"&&!t.includes("-h")&&!t.includes("--help")){let $=t.includes("--deep")||t.includes("--test"),le=t.includes("--json");return{kind:"doctor",deep:$,json:le}}if(e==="agents"&&!t.includes("-h")&&!t.includes("--help"))return{kind:"agents"};if(e==="bootstrap"&&!t.includes("-h")&&!t.includes("--help"))return{kind:"bootstrap",agent:!t.includes("--no-agent")};if(e==="onboard"&&!t.includes("-h")&&!t.includes("--help"))return{kind:"onboard"};if(e==="skills"&&!t.includes("-h")&&!t.includes("--help"))return{kind:"skills"};if(e==="workflows"&&!t.includes("-h")&&!t.includes("--help"))return{kind:"workflows"};if((e==="models"||e==="providers")&&!t.includes("-h")&&!t.includes("--help")){let $=t.includes("--json"),le=t.findIndex(et=>et==="--backend"||et.startsWith("--backend=")),qe="both";if(le!==-1){let it=(t[le].includes("=")?t[le].slice(10):t[le+1]??"").trim().toLowerCase();it==="local"?qe="local":it==="broker"&&(qe="broker")}return{kind:"models",scope:qe,json:$,which:e==="providers"?"providers":"models"}}if(e==="telegram"&&!t.includes("-h")&&!t.includes("--help")){let $=t[1];if($===void 0||!["login","logout","allow","deny","status"].includes($))return{kind:"usage-error",message:"uso: aluy telegram <login|logout|allow|deny|status>",exitCode:2};let qe=t.slice(2);if($==="login"){let et=Ke(qe,"token");return{kind:"telegram",sub:"login",...et!==void 0?{token:et}:{}}}if($==="allow"||$==="deny"){let et=qe.find(mt=>!mt.startsWith("-")),it=et!==void 0&&/^-?\d+$/.test(et)?Number(et):void 0;return it===void 0?{kind:"usage-error",message:`uso: aluy telegram ${$} <chat-id> (um inteiro)`,exitCode:2}:{kind:"telegram",sub:$,chatId:it}}return{kind:"telegram",sub:$}}if(e==="mcp"&&t[1]==="search"&&!t.includes("-h")&&!t.includes("--help"))return{kind:"mcp-search",query:t.slice(2).filter(le=>!le.startsWith("-")).join(" ").trim()};if(e==="mcp")return{kind:"mcp",argv:t.slice(1)};if(e==="cron")return{kind:"cron",argv:t.slice(1)};if(t.includes("-v")||t.includes("--version"))return{kind:"version",text:__()};if(t.includes("-h")||t.includes("--help"))return{kind:"help",text:T_};let o=t.includes("--plan"),n=t.includes("--unsafe"),r=t.includes("--yolo")||n,s=o?"plan":r?"unsafe":"normal",i=t.includes("--dense"),a=t.includes("--ascii"),c=t.includes("--split")||t.includes("--view")?!0:void 0,l=t.includes("--fullscreen")||t.includes("--cockpit")?!0:void 0,d=t.includes("--no-budget")?!1:t.includes("--budget")?!0:void 0,f=Ke(t,"tier"),u=Ke(t,"lang"),p=Ke(t,"max-tokens"),h=Ke(t,"max-iterations"),y=Ke(t,"max-output-tokens"),g=!(t.includes("--no-subagents")||t.includes("--no-subagent")),w=t.includes("--no-self-check")?"0":t.includes("--self-check")?"1":void 0,C=t.includes("--no-autocompact")?"off":Ke(t,"autocompact-at"),E=t.includes("--quiet")?!0:void 0,M=t.includes("--cycle")?!0:void 0,j=Ke(t,"cycles"),H=Ke(t,"cycle-for"),W=Ke(t,"backend"),G=Ke(t,"local-provider"),P=Ke(t,"local-model"),X=Ke(t,"local-auth"),ne=Ke(t,"local-base-url"),z=Ke(t,"model"),I=Ke(t,"provider");if((t.includes("--provider")||t.some($=>$.startsWith("--provider=")))&&(z===void 0||z.trim()===""))return{kind:"usage-error",message:"aluy: --provider exige --model (ex.: --provider <provider> --model <slug>)",exitCode:2};if((z===void 0||z.trim()==="")&&f!==void 0&&f.trim().toLowerCase()==="custom")return{kind:"usage-error",message:"aluy: --tier custom exige --model <slug> (ex.: --model deepseek-v4-pro). A via Custom precisa do slug do modelo; sem ele use um tier can\xF4nico (aluy-flux, aluy-granito, \u2026).",exitCode:2};let Oe=Ke(t,"effort"),q=t.includes("--effort")||t.some($=>$.startsWith("--effort=")),ie;if(Oe!==void 0){if(Oe.trim()==="")return{kind:"usage-error",message:"aluy: --effort requer um valor (ex.: --effort low)",exitCode:2};if(Oe.length>32)return{kind:"usage-error",message:"aluy: --effort aceita no m\xE1ximo 32 caracteres",exitCode:2};ie=Oe}else if(q)return{kind:"usage-error",message:"aluy: --effort requer um valor (ex.: --effort low)",exitCode:2};let Y=t.includes("-p")||t.includes("--print")||t.includes("--exec")||t.some($=>$.startsWith("-p=")||$.startsWith("--print=")||$.startsWith("--exec=")),re=Y?Ke(t,"print",{allowDashValue:!0})??Ke(t,"exec",{allowDashValue:!0})??FB(t,"p")??void 0:void 0,ce=Y?Ke(t,"output-format"):void 0,pe=t.includes("--new"),Q=t.includes("--continue"),se=t.indexOf("--resume"),Me=t.find($=>$.startsWith("--resume=")),No=se>=0||Me!==void 0,lt;if(Me!==void 0)lt=Me.slice(9);else if(se>=0){let $=t[se+1];$!==void 0&&!$.startsWith("-")&&(lt=$)}let Qe=f!==void 0?t.indexOf("--tier")+1:-1,st=u!==void 0&&!t.some($=>$.startsWith("--lang="))?t.indexOf("--lang")+1:-1,dt=lt!==void 0&&Me===void 0?se+1:-1,no=p!==void 0&&!t.some($=>$.startsWith("--max-tokens="))?t.indexOf("--max-tokens")+1:-1,ut=h!==void 0&&!t.some($=>$.startsWith("--max-iterations="))?t.indexOf("--max-iterations")+1:-1,so=j!==void 0&&!t.some($=>$.startsWith("--cycles="))?t.indexOf("--cycles")+1:-1,io=H!==void 0&&!t.some($=>$.startsWith("--cycle-for="))?t.indexOf("--cycle-for")+1:-1,J=y!==void 0&&!t.some($=>$.startsWith("--max-output-tokens="))?t.indexOf("--max-output-tokens")+1:-1,v=C!==void 0&&!t.includes("--no-autocompact")&&!t.some($=>$.startsWith("--autocompact-at="))?t.indexOf("--autocompact-at")+1:-1,ao=W!==void 0&&!t.some($=>$.startsWith("--backend="))?t.indexOf("--backend")+1:-1,Ee=($,le)=>le!==void 0&&!t.some(qe=>qe.startsWith(`--${$}=`))?t.indexOf(`--${$}`)+1:-1,Br=Ee("local-provider",G),Ds=Ee("local-model",P),Tt=Ee("local-auth",X),tr=Ee("local-base-url",ne),jr=z!==void 0&&!t.some($=>$.startsWith("--model="))?t.indexOf("--model")+1:-1,bo=I!==void 0&&!t.some($=>$.startsWith("--provider="))?t.indexOf("--provider")+1:-1,Do=ie!==void 0&&!t.some($=>$.startsWith("--effort="))?t.indexOf("--effort")+1:-1,Wt=ce!==void 0&&!t.some($=>$.startsWith("--output-format="))?t.indexOf("--output-format")+1:-1,Lt=re!==void 0&&!t.some($=>$.startsWith("-p=")||$.startsWith("--print=")||$.startsWith("--exec="))?Math.max(t.indexOf("-p"),t.indexOf("--print"),t.indexOf("--exec"))+1:-1,vo=t.find(($,le)=>!$.startsWith("-")&&le!==Qe&&le!==st&&le!==ao&&le!==Br&&le!==Ds&&le!==Tt&&le!==tr&&le!==jr&&le!==bo&&le!==Do&&le!==Wt&&le!==Lt&&le!==dt&&le!==no&&le!==ut&&le!==J&&le!==v&&le!==so&&le!==io),$s=Q?{kind:"continue"}:No?{kind:"resume",...lt!==void 0?{id:lt}:{}}:void 0,or=new Set([Qe,st,ao,Br,Ds,Tt,tr,jr,bo,Do,Wt,Lt,dt,no,ut,J,v,so,io].filter($=>$>=0));for(let $ of UB){let le=t.indexOf($);le>=0&&!t[le].includes("=")&&or.add(le+1)}let $o=jB(t,or);return{kind:"launch",mode:s,unsafe:s==="unsafe",unsafeAliasUsed:n,...$o.length>0?{unknownFlags:$o}:{},dense:i,fresh:pe,subAgents:g,safeGlyphs:a,print:Y,...c!==void 0?{split:c}:{},...l!==void 0?{fullscreen:l}:{},...d!==void 0?{budget:d}:{},...vo!==void 0?{goal:vo}:{},...f!==void 0?{tier:f}:{},...W!==void 0?{backend:W}:{},...G!==void 0?{localProvider:G}:{},...P!==void 0?{localModel:P}:{},...X!==void 0?{localAuth:X}:{},...ne!==void 0?{localBaseUrl:ne}:{},...z!==void 0?{model:z}:{},...I!==void 0?{provider:I}:{},...ie!==void 0?{effort:ie}:{},...re!==void 0?{printArg:re}:{},...ce!==void 0?{outputFormat:ce}:{},...u!==void 0?{lang:u}:{},...$s!==void 0?{resume:$s}:{},...p!==void 0?{maxTokens:p}:{},...h!==void 0?{maxIterations:h}:{},...y!==void 0?{maxOutputTokens:y}:{},...w!==void 0?{selfCheck:w}:{},...C!==void 0?{autoCompactAt:C}:{},...E!==void 0?{quiet:E}:{},...M!==void 0?{cycle:M}:{},...j!==void 0?{cycles:j}:{},...H!==void 0?{cycleFor:H}:{}}}var Bu="https://broker.dev.aluy.example";function Gn(t=process.env){return{brokerBaseUrl:(t.ALUY_BROKER_URL??Bu).replace(/\/+$/,"")}}U();var Yy="aluy-cli",qB="https://api.aluy.app/api/v1";function Uu(t=process.env){return{identityBaseUrl:(t.ALUY_IDENTITY_URL??qB).replace(/\/+$/,""),clientId:Yy}}U();import{lookup as WB}from"node:dns";import{request as GB}from"node:https";import{request as zB}from"node:http";var Rt=class{async resolve(e){return await new Promise((o,n)=>{WB(e,{all:!0,verbatim:!0},(r,s)=>{if(r){n(r);return}let i=(s??[]).map(a=>a.address).filter(a=>a.length>0);o(i)})})}},br=class{httpsRequestFn;httpRequestFn;userAgent;constructor(e={}){this.httpsRequestFn=e.httpsRequestFn??GB,this.httpRequestFn=e.httpRequestFn??zB,this.userAgent=e.userAgent??"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0 Safari/537.36 aluy-vau/web"}async fetchPinned(e){let o=new URL(e.url),n=o.protocol==="https:",r=e.pinnedIp.includes(":")?6:4,s=((a,c,l)=>{typeof c=="object"&&c!==null&&c.all===!0?l(null,[{address:e.pinnedIp,family:r}]):l(null,e.pinnedIp,r)}),i=n?this.httpsRequestFn:this.httpRequestFn;return await new Promise((a,c)=>{let l=!1,d=()=>{clearTimeout(C),e.signal&&w&&e.signal.removeEventListener("abort",w)},f=E=>{l||(l=!0,d(),a(E))},u=E=>{l||(l=!0,d(),c(E))},p=e.method??"GET",h=p==="POST"?e.body??"":void 0,y=h!==void 0?{"Content-Type":e.contentType??"application/x-www-form-urlencoded","Content-Length":String(Buffer.byteLength(h))}:{},g=i({protocol:o.protocol,host:e.host,servername:e.host,port:o.port?Number(o.port):n?443:80,path:o.pathname+o.search,method:p,lookup:s,headers:{Host:o.port?`${e.host}:${o.port}`:e.host,"User-Agent":this.userAgent,Accept:"text/html,application/xhtml+xml,text/plain,*/*","Accept-Language":"en-US,en;q=0.9",...y}},E=>{let M=E.statusCode??0,j=R_(E.headers.location),H=R_(E.headers["content-type"]);if(KB(M)&&j){E.resume(),f({status:M,location:j,body:"",...H?{contentType:H}:{}});return}let W=0,G=!1,P=[];E.on("data",X=>{if(G)return;let ne=e.maxBytes-W;if(ne<=0){G=!0,E.destroy();return}if(X.length>ne){P.push(X.subarray(0,ne)),W+=ne,G=!0,E.destroy();return}P.push(X),W+=X.length}),E.on("end",()=>{let X=Buffer.concat(P).toString("utf8");G&&(X+=`
421
+ - Loop de agente + ferramentas nativas + controle de permiss\xE3o integrados.`;function Ke(t,e,o={}){let n=`--${e}=`;for(let r=0;r<t.length;r++){let s=t[r];if(s===`--${e}`){let i=t[r+1];return i===void 0||(o.allowDashValue?i.startsWith("--"):i.startsWith("-"))?void 0:i}if(s!==void 0&&s.startsWith(n))return s.slice(n.length)}}function FB(t,e){let o=`-${e}=`;for(let n=0;n<t.length;n++){let r=t[n];if(r===`-${e}`){let s=t[n+1];return s!==void 0&&!s.startsWith("-")?s:void 0}if(r!==void 0&&r.startsWith(o))return r.slice(o.length)}}function __(){return`aluy ${Ln} (@hiperplano/aluy-cli-core ${ca})`}var BB=new Set(["agent","no-agent","ascii","autocompact-at","backend","budget","cockpit","continue","cycle","cycle-for","cycles","deep","dense","device","effort","exec","fullscreen","help","json","lang","local-auth","local-base-url","local-model","local-provider","max-iterations","max-output-tokens","max-tokens","model","new","no-autocompact","no-budget","no-self-check","no-subagent","no-subagents","nome","oauth","output-format","plan","print","provider","quiet","resume","self-check","split","test","tier","unsafe","version","view","yolo"]),UB=["-p","--print","--exec","--tier","--lang","--model","--provider","--effort","--output-format","--backend","--local-provider","--local-model","--local-auth","--local-base-url","--max-tokens","--max-iterations","--max-output-tokens","--autocompact-at","--cycles","--cycle-for","--resume"];function jB(t,e){let o=[];for(let n=0;n<t.length;n++){let r=t[n];if(r==="--")break;if(!r.startsWith("--")||r.length===2||e.has(n))continue;let s=r.slice(2).split("=",1)[0];s===""||BB.has(s)||o.push(`--${s}`)}return o}function HB(t){let e=t[0];if(e==="login"&&!t.includes("-h")&&!t.includes("--help")){let $=t.slice(1),le=Ke($,"token"),qe=Ke($,"org"),et=$.includes("--device"),it=Ke($,"provider"),mt=$.includes("--oauth");return{kind:"login",forceDeviceFlow:et,...le!==void 0?{token:le}:{},...qe!==void 0?{org:qe}:{},...it!==void 0?{provider:it}:{},...mt?{oauth:!0}:{}}}if(e==="logout"&&!t.includes("-h")&&!t.includes("--help"))return{kind:"logout"};if(e==="whoami"&&!t.includes("-h")&&!t.includes("--help"))return{kind:"whoami"};if(e==="doctor"&&!t.includes("-h")&&!t.includes("--help")){let $=t.includes("--deep")||t.includes("--test"),le=t.includes("--json");return{kind:"doctor",deep:$,json:le}}if(e==="agents"&&!t.includes("-h")&&!t.includes("--help"))return{kind:"agents"};if(e==="bootstrap"&&!t.includes("-h")&&!t.includes("--help"))return{kind:"bootstrap",agent:!t.includes("--no-agent")};if(e==="uninstall"&&!t.includes("-h")&&!t.includes("--help"))return{kind:"uninstall",agent:t.includes("--agent")};if(e==="onboard"&&!t.includes("-h")&&!t.includes("--help"))return{kind:"onboard"};if(e==="skills"&&!t.includes("-h")&&!t.includes("--help"))return{kind:"skills"};if(e==="workflows"&&!t.includes("-h")&&!t.includes("--help"))return{kind:"workflows"};if((e==="models"||e==="providers")&&!t.includes("-h")&&!t.includes("--help")){let $=t.includes("--json"),le=t.findIndex(et=>et==="--backend"||et.startsWith("--backend=")),qe="both";if(le!==-1){let it=(t[le].includes("=")?t[le].slice(10):t[le+1]??"").trim().toLowerCase();it==="local"?qe="local":it==="broker"&&(qe="broker")}return{kind:"models",scope:qe,json:$,which:e==="providers"?"providers":"models"}}if(e==="telegram"&&!t.includes("-h")&&!t.includes("--help")){let $=t[1];if($===void 0||!["login","logout","allow","deny","status"].includes($))return{kind:"usage-error",message:"uso: aluy telegram <login|logout|allow|deny|status>",exitCode:2};let qe=t.slice(2);if($==="login"){let et=Ke(qe,"token");return{kind:"telegram",sub:"login",...et!==void 0?{token:et}:{}}}if($==="allow"||$==="deny"){let et=qe.find(mt=>!mt.startsWith("-")),it=et!==void 0&&/^-?\d+$/.test(et)?Number(et):void 0;return it===void 0?{kind:"usage-error",message:`uso: aluy telegram ${$} <chat-id> (um inteiro)`,exitCode:2}:{kind:"telegram",sub:$,chatId:it}}return{kind:"telegram",sub:$}}if(e==="mcp"&&t[1]==="search"&&!t.includes("-h")&&!t.includes("--help"))return{kind:"mcp-search",query:t.slice(2).filter(le=>!le.startsWith("-")).join(" ").trim()};if(e==="mcp")return{kind:"mcp",argv:t.slice(1)};if(e==="cron")return{kind:"cron",argv:t.slice(1)};if(t.includes("-v")||t.includes("--version"))return{kind:"version",text:__()};if(t.includes("-h")||t.includes("--help"))return{kind:"help",text:T_};let o=t.includes("--plan"),n=t.includes("--unsafe"),r=t.includes("--yolo")||n,s=o?"plan":r?"unsafe":"normal",i=t.includes("--dense"),a=t.includes("--ascii"),c=t.includes("--split")||t.includes("--view")?!0:void 0,l=t.includes("--fullscreen")||t.includes("--cockpit")?!0:void 0,d=t.includes("--no-budget")?!1:t.includes("--budget")?!0:void 0,f=Ke(t,"tier"),u=Ke(t,"lang"),p=Ke(t,"max-tokens"),h=Ke(t,"max-iterations"),y=Ke(t,"max-output-tokens"),g=!(t.includes("--no-subagents")||t.includes("--no-subagent")),w=t.includes("--no-self-check")?"0":t.includes("--self-check")?"1":void 0,C=t.includes("--no-autocompact")?"off":Ke(t,"autocompact-at"),E=t.includes("--quiet")?!0:void 0,M=t.includes("--cycle")?!0:void 0,j=Ke(t,"cycles"),H=Ke(t,"cycle-for"),W=Ke(t,"backend"),G=Ke(t,"local-provider"),P=Ke(t,"local-model"),X=Ke(t,"local-auth"),ne=Ke(t,"local-base-url"),z=Ke(t,"model"),I=Ke(t,"provider");if((t.includes("--provider")||t.some($=>$.startsWith("--provider=")))&&(z===void 0||z.trim()===""))return{kind:"usage-error",message:"aluy: --provider exige --model (ex.: --provider <provider> --model <slug>)",exitCode:2};if((z===void 0||z.trim()==="")&&f!==void 0&&f.trim().toLowerCase()==="custom")return{kind:"usage-error",message:"aluy: --tier custom exige --model <slug> (ex.: --model deepseek-v4-pro). A via Custom precisa do slug do modelo; sem ele use um tier can\xF4nico (aluy-flux, aluy-granito, \u2026).",exitCode:2};let Oe=Ke(t,"effort"),q=t.includes("--effort")||t.some($=>$.startsWith("--effort=")),ie;if(Oe!==void 0){if(Oe.trim()==="")return{kind:"usage-error",message:"aluy: --effort requer um valor (ex.: --effort low)",exitCode:2};if(Oe.length>32)return{kind:"usage-error",message:"aluy: --effort aceita no m\xE1ximo 32 caracteres",exitCode:2};ie=Oe}else if(q)return{kind:"usage-error",message:"aluy: --effort requer um valor (ex.: --effort low)",exitCode:2};let Y=t.includes("-p")||t.includes("--print")||t.includes("--exec")||t.some($=>$.startsWith("-p=")||$.startsWith("--print=")||$.startsWith("--exec=")),re=Y?Ke(t,"print",{allowDashValue:!0})??Ke(t,"exec",{allowDashValue:!0})??FB(t,"p")??void 0:void 0,ce=Y?Ke(t,"output-format"):void 0,pe=t.includes("--new"),Q=t.includes("--continue"),se=t.indexOf("--resume"),Me=t.find($=>$.startsWith("--resume=")),No=se>=0||Me!==void 0,lt;if(Me!==void 0)lt=Me.slice(9);else if(se>=0){let $=t[se+1];$!==void 0&&!$.startsWith("-")&&(lt=$)}let Qe=f!==void 0?t.indexOf("--tier")+1:-1,st=u!==void 0&&!t.some($=>$.startsWith("--lang="))?t.indexOf("--lang")+1:-1,dt=lt!==void 0&&Me===void 0?se+1:-1,no=p!==void 0&&!t.some($=>$.startsWith("--max-tokens="))?t.indexOf("--max-tokens")+1:-1,ut=h!==void 0&&!t.some($=>$.startsWith("--max-iterations="))?t.indexOf("--max-iterations")+1:-1,so=j!==void 0&&!t.some($=>$.startsWith("--cycles="))?t.indexOf("--cycles")+1:-1,io=H!==void 0&&!t.some($=>$.startsWith("--cycle-for="))?t.indexOf("--cycle-for")+1:-1,J=y!==void 0&&!t.some($=>$.startsWith("--max-output-tokens="))?t.indexOf("--max-output-tokens")+1:-1,v=C!==void 0&&!t.includes("--no-autocompact")&&!t.some($=>$.startsWith("--autocompact-at="))?t.indexOf("--autocompact-at")+1:-1,ao=W!==void 0&&!t.some($=>$.startsWith("--backend="))?t.indexOf("--backend")+1:-1,Ee=($,le)=>le!==void 0&&!t.some(qe=>qe.startsWith(`--${$}=`))?t.indexOf(`--${$}`)+1:-1,Br=Ee("local-provider",G),Ds=Ee("local-model",P),Tt=Ee("local-auth",X),tr=Ee("local-base-url",ne),jr=z!==void 0&&!t.some($=>$.startsWith("--model="))?t.indexOf("--model")+1:-1,bo=I!==void 0&&!t.some($=>$.startsWith("--provider="))?t.indexOf("--provider")+1:-1,Do=ie!==void 0&&!t.some($=>$.startsWith("--effort="))?t.indexOf("--effort")+1:-1,Wt=ce!==void 0&&!t.some($=>$.startsWith("--output-format="))?t.indexOf("--output-format")+1:-1,Lt=re!==void 0&&!t.some($=>$.startsWith("-p=")||$.startsWith("--print=")||$.startsWith("--exec="))?Math.max(t.indexOf("-p"),t.indexOf("--print"),t.indexOf("--exec"))+1:-1,vo=t.find(($,le)=>!$.startsWith("-")&&le!==Qe&&le!==st&&le!==ao&&le!==Br&&le!==Ds&&le!==Tt&&le!==tr&&le!==jr&&le!==bo&&le!==Do&&le!==Wt&&le!==Lt&&le!==dt&&le!==no&&le!==ut&&le!==J&&le!==v&&le!==so&&le!==io),$s=Q?{kind:"continue"}:No?{kind:"resume",...lt!==void 0?{id:lt}:{}}:void 0,or=new Set([Qe,st,ao,Br,Ds,Tt,tr,jr,bo,Do,Wt,Lt,dt,no,ut,J,v,so,io].filter($=>$>=0));for(let $ of UB){let le=t.indexOf($);le>=0&&!t[le].includes("=")&&or.add(le+1)}let $o=jB(t,or);return{kind:"launch",mode:s,unsafe:s==="unsafe",unsafeAliasUsed:n,...$o.length>0?{unknownFlags:$o}:{},dense:i,fresh:pe,subAgents:g,safeGlyphs:a,print:Y,...c!==void 0?{split:c}:{},...l!==void 0?{fullscreen:l}:{},...d!==void 0?{budget:d}:{},...vo!==void 0?{goal:vo}:{},...f!==void 0?{tier:f}:{},...W!==void 0?{backend:W}:{},...G!==void 0?{localProvider:G}:{},...P!==void 0?{localModel:P}:{},...X!==void 0?{localAuth:X}:{},...ne!==void 0?{localBaseUrl:ne}:{},...z!==void 0?{model:z}:{},...I!==void 0?{provider:I}:{},...ie!==void 0?{effort:ie}:{},...re!==void 0?{printArg:re}:{},...ce!==void 0?{outputFormat:ce}:{},...u!==void 0?{lang:u}:{},...$s!==void 0?{resume:$s}:{},...p!==void 0?{maxTokens:p}:{},...h!==void 0?{maxIterations:h}:{},...y!==void 0?{maxOutputTokens:y}:{},...w!==void 0?{selfCheck:w}:{},...C!==void 0?{autoCompactAt:C}:{},...E!==void 0?{quiet:E}:{},...M!==void 0?{cycle:M}:{},...j!==void 0?{cycles:j}:{},...H!==void 0?{cycleFor:H}:{}}}var Bu="https://broker.dev.aluy.example";function Gn(t=process.env){return{brokerBaseUrl:(t.ALUY_BROKER_URL??Bu).replace(/\/+$/,"")}}U();var Yy="aluy-cli",qB="https://api.aluy.app/api/v1";function Uu(t=process.env){return{identityBaseUrl:(t.ALUY_IDENTITY_URL??qB).replace(/\/+$/,""),clientId:Yy}}U();import{lookup as WB}from"node:dns";import{request as GB}from"node:https";import{request as zB}from"node:http";var Rt=class{async resolve(e){return await new Promise((o,n)=>{WB(e,{all:!0,verbatim:!0},(r,s)=>{if(r){n(r);return}let i=(s??[]).map(a=>a.address).filter(a=>a.length>0);o(i)})})}},br=class{httpsRequestFn;httpRequestFn;userAgent;constructor(e={}){this.httpsRequestFn=e.httpsRequestFn??GB,this.httpRequestFn=e.httpRequestFn??zB,this.userAgent=e.userAgent??"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0 Safari/537.36 aluy-vau/web"}async fetchPinned(e){let o=new URL(e.url),n=o.protocol==="https:",r=e.pinnedIp.includes(":")?6:4,s=((a,c,l)=>{typeof c=="object"&&c!==null&&c.all===!0?l(null,[{address:e.pinnedIp,family:r}]):l(null,e.pinnedIp,r)}),i=n?this.httpsRequestFn:this.httpRequestFn;return await new Promise((a,c)=>{let l=!1,d=()=>{clearTimeout(C),e.signal&&w&&e.signal.removeEventListener("abort",w)},f=E=>{l||(l=!0,d(),a(E))},u=E=>{l||(l=!0,d(),c(E))},p=e.method??"GET",h=p==="POST"?e.body??"":void 0,y=h!==void 0?{"Content-Type":e.contentType??"application/x-www-form-urlencoded","Content-Length":String(Buffer.byteLength(h))}:{},g=i({protocol:o.protocol,host:e.host,servername:e.host,port:o.port?Number(o.port):n?443:80,path:o.pathname+o.search,method:p,lookup:s,headers:{Host:o.port?`${e.host}:${o.port}`:e.host,"User-Agent":this.userAgent,Accept:"text/html,application/xhtml+xml,text/plain,*/*","Accept-Language":"en-US,en;q=0.9",...y}},E=>{let M=E.statusCode??0,j=R_(E.headers.location),H=R_(E.headers["content-type"]);if(KB(M)&&j){E.resume(),f({status:M,location:j,body:"",...H?{contentType:H}:{}});return}let W=0,G=!1,P=[];E.on("data",X=>{if(G)return;let ne=e.maxBytes-W;if(ne<=0){G=!0,E.destroy();return}if(X.length>ne){P.push(X.subarray(0,ne)),W+=ne,G=!0,E.destroy();return}P.push(X),W+=X.length}),E.on("end",()=>{let X=Buffer.concat(P).toString("utf8");G&&(X+=`
421
422
  \u2026[truncado: corpo maior que ${e.maxBytes} bytes]`),f({status:M,body:X,...H?{contentType:H}:{}})}),E.on("close",()=>{if(l)return;let X=Buffer.concat(P).toString("utf8")+(G?`
422
423
  \u2026[truncado: corpo maior que ${e.maxBytes} bytes]`:"");f({status:M,body:X,...H?{contentType:H}:{}})}),E.on("error",X=>{if(G){if(l)return;let ne=Buffer.concat(P).toString("utf8")+`
423
424
  \u2026[truncado: corpo maior que ${e.maxBytes} bytes]`;f({status:M,body:ne,...H?{contentType:H}:{}});return}u(X)})}),w=()=>{g.destroy(),u(new Error("cancelado"))},C=setTimeout(()=>{g.destroy(),u(new Error(`timeout de ${e.timeoutMs}ms ao buscar a URL`))},e.timeoutMs);if(C.unref?.(),e.signal){if(e.signal.aborted){g.destroy(),u(new Error("cancelado"));return}e.signal.addEventListener("abort",w)}g.on("error",u),h!==void 0&&g.write(h),g.end()})}},ju=class{constructor(e){this.allowlist=e}allowlist;checkHost(e){let o=e.trim().toLowerCase();return{allowed:this.allowlist.isAllowed(o),host:o}}};function Vy(t){return{safe:{resolver:t.resolver??new Rt,fetcher:t.fetcher??new br},egress:new ju(t.egress),...t.policy?{policy:t.policy}:{}}}function KB(t){return t===301||t===302||t===303||t===307||t===308}function R_(t){if(t!==void 0)return Array.isArray(t)?t[0]:t}async function Hu(t,e,o,n={}){let r=n.resolver??new Rt,s=n.fetchFn??globalThis.fetch;if(typeof s!="function")return{ok:!1,reason:"fetch indispon\xEDvel neste runtime."};let i=await is(t,r);if(!i.ok)return{ok:!1,reason:i.reason};let a="";try{a=new URL(t).port}catch{}let c=i.pinnedIp.includes(":")?`[${i.pinnedIp}]`:i.pinnedIp,l=`${i.scheme}://${c}${a!==""?`:${a}`:""}${e}`;return{ok:!0,response:await s(l,o)}}var YB=2500;function qu(t=process.env){let e=t.ALUY_HEADROOM_URL?.trim();return e!==void 0&&e!==""?e:void 0}async function C_(t,e){if(t.length===0)return t;let o=e.timeoutMs??YB,n=new AbortController,r=o>0?setTimeout(()=>n.abort(),o):void 0,s=()=>n.abort();e.signal?.addEventListener("abort",s,{once:!0}),e.signal?.aborted&&n.abort();try{let i=await Hu(e.baseUrl,"/v1/compress",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({messages:t,model:e.model??"claude-3-5-sonnet"}),signal:n.signal},{...e.resolver?{resolver:e.resolver}:{},...e.fetchFn?{fetchFn:e.fetchFn}:{}});if(!i.ok)return e.onRefused?.(i.reason),t;let a=i.response;if(!a.ok)return t;let c=await a.json(),l=c.messages;if(!Array.isArray(l)||l.length!==t.length)return t;for(let d=0;d<t.length;d++){let f=t[d],u=l[d];if(u===void 0)return t;if(u.role!==void 0&&u.role!==f.role)return e.onRefused?.(`proxy adulterou o role da mensagem ${d} (${String(u.role)})`),t;if(u.tool_calls!==void 0&&f.tool_calls===void 0)return e.onRefused?.(`proxy injetou tool_calls na mensagem ${d}`),t;if(u.tool_call_id!==void 0&&f.tool_call_id===void 0)return e.onRefused?.(`proxy injetou tool_call_id na mensagem ${d}`),t}return e.onSavings?.({before:c.tokens_before??0,after:c.tokens_after??0,ratio:c.compression_ratio??1}),t.map((d,f)=>{let u=l[f]?.content;return typeof u=="string"&&d.content!==""&&u!==d.content?{...d,content:u}:d})}catch{return t}finally{r!==void 0&&clearTimeout(r),e.signal?.removeEventListener("abort",s)}}U();var VB=2500,XB={type:"object",properties:{hash:{type:"string",description:"O hash do marcador de compress\xE3o (ex.: `[\u2026 hash=abc123]`). Obrigat\xF3rio."},query:{type:"string",description:"Opcional: busca BM25 DENTRO do conte\xFAdo cacheado \u2014 recorta resultados grandes p/ s\xF3 o trecho relevante."}},required:["hash"],additionalProperties:!1},JB='Recupera o conte\xFAdo ORIGINAL que a compress\xE3o headroom dedupou/truncou. Quando uma observa\xE7\xE3o de tool trouxer um marcador como `[N items compressed \u2026 hash=abc123]` e voc\xEA precisar do conte\xFAdo completo, chame com `{hash:"abc123"}`. Passe `query` p/ buscar (BM25) s\xF3 o trecho relevante dentro de um cache grande.';function QB(t){let e=t.hash;return typeof e=="string"&&e.trim()!==""?e.trim():void 0}function ZB(t){let e=t.query;return typeof e=="string"&&e.trim()!==""?e.trim():void 0}function O_(t){let e={...t.resolver?{resolver:t.resolver}:{},...t.fetchFn?{fetchFn:t.fetchFn}:{}},o=`${t.baseUrl.replace(/\/+$/,"")}/v1/retrieve`;return{name:"headroom_retrieve",effect:"network",description:JB,parameters:XB,async run(n,r,s){let i=QB(n);if(i===void 0)return{ok:!1,observation:"headroom_retrieve: `hash` \xE9 obrigat\xF3rio (copie o valor do marcador `\u2026 hash=\u2026`)."};let a=ZB(n),c=`headroom_retrieve POST ${o} hash=${i}${a?` query=${JSON.stringify(a)}`:""}`,l=new AbortController,d=!1,f=t.timeoutMs??VB,u=setTimeout(()=>{d=!0,l.abort()},f),p=()=>l.abort();s?.signal?.addEventListener("abort",p,{once:!0}),s?.signal?.aborted&&l.abort();try{let h=await Hu(t.baseUrl,"/v1/retrieve",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(a!==void 0?{hash:i,query:a}:{hash:i}),signal:l.signal},e);if(!h.ok)return{ok:!1,display:c,observation:`headroom_retrieve: destino recusado (${h.reason}).`};let y=h.response;if(y.status===404)return{ok:!1,display:c,observation:`headroom_retrieve: conte\xFAdo do hash "${i}" EXPIROU (TTL do cache ou rein\xEDcio do proxy). N\xE3o h\xE1 o que recuperar \u2014 RErode o comando/tool original p/ regerar.`};if(!y.ok)return{ok:!1,display:c,observation:`headroom_retrieve: o proxy respondeu HTTP ${y.status}.`};let g=await y.json(),w=g.original_content;if(typeof w!="string"||w==="")return{ok:!1,display:c,observation:"headroom_retrieve: resposta sem `original_content` utiliz\xE1vel."};let C=typeof g.original_tokens=="number"?g.original_tokens:void 0,E=typeof g.tool_name=="string"?g.tool_name:void 0,M=`[headroom_retrieve \xB7 hash=${i}${E?` \xB7 tool=${E}`:""}${C!==void 0?` \xB7 ${C} tokens`:""}]`;return{ok:!0,display:c,observation:`${M}
@@ -568,7 +569,7 @@ ${t.output}`:"";return`[shell] $ ${t.command} \u2014 ${e}${o}`}case"subagents":{
568
569
  `),this.transport=new GY({command:n,args:[...r],env:o,cwd:this.cwd,stderr:"ignore"}),this.client=this.clientFactory();let a=this.client;return(await this.withConnectTimeout(async()=>(await a.connect(this.transport),a.listTools()))).tools.map(l=>({name:l.name,description:typeof l.description=="string"?l.description:"",inputSchema:l.inputSchema}))}resolveSpawnTarget(e){if(!this.sandboxLauncher)return{command:e.command,args:e.args,refused:!1};let o=zY(e.command,e.args,this.parentEnv),n=this.sandboxLauncher.buildConfinedInvocation([e.command,...e.args],{workspaceRoots:this.workspaceRoots,cwd:this.cwd,...o.length>0?{roBinds:o}:{},network:this.network});if(this.confinementCleanup=n.cleanup,!n.command)return this.runConfinementCleanup(),{command:"",args:[],refused:!0,...n.decision.warning?{warning:n.decision.warning}:{}};let r=n.decision.warning??n.warning;return{command:n.command,args:n.args??[],refused:!1,...r?{warning:r}:{}}}runConfinementCleanup(){let e=this.confinementCleanup;if(this.confinementCleanup=void 0,e)try{e()}catch{}}async withConnectTimeout(e){let o=this.connectTimeoutMs,n,r=new Promise(i=>{n=setTimeout(()=>i(_f),o),n.unref?.()}),s;try{s=await Promise.race([e(),r])}finally{n&&clearTimeout(n)}if(s===_f){let i=this.client;this.client=null,this.transport=null;try{await i?.close()}catch{}throw this.runConfinementCleanup(),new Error(`handshake MCP n\xE3o respondeu em ${Math.round(o/1e3)}s (anti-hang de boot).`)}return s}async callTool(e,o,n){let r=this.client;if(!r)return{ok:!1,content:"server n\xE3o conectado"};if(n?.aborted)return{ok:!1,content:`MCP tool "${e}" cancelada pelo usu\xE1rio (ESC/Ctrl-C) antes de iniciar.`};let s=this.callTimeoutMs,i,a=new Promise(p=>{i=setTimeout(()=>p(_f),s),i.unref?.()}),c,l=n?new Promise(p=>{c=()=>p(PL),n.addEventListener("abort",c,{once:!0})}):void 0,d;try{d=await Promise.race([r.callTool({name:e,arguments:{...o}},void 0,{timeout:s,...n?{signal:n}:{}}),a,...l?[l]:[]])}catch(p){return{ok:!1,content:`chamada falhou: ${p instanceof Error?p.message:String(p)}`}}finally{i&&clearTimeout(i),n&&c&&n.removeEventListener("abort",c)}if(d===PL)return await this.resetAfterTimeout(),{ok:!1,content:`MCP tool "${e}" cancelada pelo usu\xE1rio (ESC/Ctrl-C) \u2014 server reiniciado.`};if(d===_f)return await this.resetAfterTimeout(),{ok:!1,content:`MCP tool "${e}" n\xE3o respondeu em ${Math.round(s/1e3)}s \u2014 o server foi reiniciado (fail-soft).`};let f=iV(d.content);return{ok:!(d.isError===!0),content:f}}async resetAfterTimeout(){let e=this.client;this.client=null,this.transport=null;try{await e?.close()}catch{}this.runConfinementCleanup()}async close(){try{await this.client?.close()}finally{this.client=null,this.transport=null,this.runConfinementCleanup()}}},jL=2e4,rV=jL*4;function sV(t,e){if(t.length<=e&&Buffer.byteLength(t,"utf8")<=e)return{text:t,truncated:0};let o=0,n=Math.min(t.length,e);for(;o<n;){let s=o+n+1>>1;Buffer.byteLength(t.slice(0,s),"utf8")<=e?o=s:n=s-1}return{text:t.slice(0,o),truncated:t.length-o}}function iV(t){if(!Array.isArray(t))return"";let e=[],o=0;for(let n of t){if(o>=rV){e.push("\u2026[conte\xFAdo MCP truncado: limite agregado de bytes atingido]");break}if(n!==null&&typeof n=="object"){let r=n;if(r.type==="text"&&typeof r.text=="string"){let{text:s,truncated:i}=sV(r.text,jL),a=i>0?`${s}
569
570
  \u2026[bloco MCP truncado: ${i} chars omitidos por exceder o teto de bytes]`:s;e.push(a),o+=Buffer.byteLength(a,"utf8")}else typeof r.type=="string"&&e.push(`[conte\xFAdo MCP "${r.type}" omitido]`)}}return e.join(`
570
571
  `)}U();import{homedir as aV}from"node:os";import{join as cV}from"node:path";var lV="Servers MCP rodam como processos LOCAIS com os TEUS privil\xE9gios de usu\xE1rio. Por default N\xC3O s\xE3o isolados em sandbox de SO \u2014 s\xF3 ligue servers que voc\xEA confia: um server malicioso l\xEA o teu filesystem direto (~/.ssh, ~/.aws, ~/.aluy, .env). As tools deles passam pela catraca de permiss\xE3o (efeito \u21D2 confirma\xE7\xE3o). Para confinar o processo-server ao workspace (FS s\xF3-workspace, rede negada por default, seccomp), ligue `ALUY_SANDBOX_MCP=1` (sandbox de SO via bwrap).";async function Rf(t={}){let e=t.workspaceRoot??process.cwd(),o=t.aluyHome??cV(aV(),".aluy"),n=new Ps({baseDir:o}),{config:r,error:s}=n.load(),i=t.loadCodexConfig?t.loadCodexConfig():void 0,a=t.loadProjectConfig?await t.loadProjectConfig():void 0,c=kc(...i?[i.config]:[],r,...a?[a.config]:[]),l=[i?.error,s,a?.error].filter(y=>typeof y=="string").join(" | ")||void 0,d=t.makeTransport??(()=>new Ns({cwd:e,...t.parentEnv?{parentEnv:t.parentEnv}:{},...t.sandboxLauncher?{sandboxLauncher:t.sandboxLauncher,workspaceRoots:[e]}:{}})),f=await wc(c,d),u=[],p=By(f.tools,y=>u.push(y)),h=[...i?[{origin:"codex",config:i.config}]:[],{origin:"aluy-global",config:r},...a?[{origin:"project",config:a.config}]:[]];return{tools:p,transports:f.transports,discovery:f,sources:h,...l?{configError:l}:{},...u.length>0?{warnings:u}:{},close:()=>Iy(f.transports)}}U();import{mkdirSync as dV,readFileSync as uV,renameSync as mV,statSync as fV,writeFileSync as pV}from"node:fs";import{dirname as hV,join as gV}from"node:path";var yV=256*1024,oo=class extends Error{constructor(e){super(e),this.name="McpWriteError"}},zl=class{file;constructor(e){this.file=e.file}get configPath(){return this.file}load(){let e;try{let n=fV(this.file);if(!n.isFile())throw new oo(`${this.file}: n\xE3o \xE9 um arquivo regular.`);if(n.size>yV)throw new oo(`${this.file}: grande demais p/ editar com seguran\xE7a.`);e=uV(this.file,"utf8")}catch(n){if(n instanceof oo)throw n;return we}let o;try{o=JSON.parse(e)}catch{throw new oo(`${this.file}: JSON inv\xE1lido \u2014 conserte \xE0 m\xE3o antes de usar 'aluy mcp'.`)}try{return Ho(o)}catch(n){let r=n instanceof ue?n.message:String(n);throw new oo(r)}}add(e,o={}){if(!bi(e.name))throw new oo(`nome de server inv\xE1lido "${e.name}" \u2014 use s\xF3 [A-Za-z0-9_-] (vira prefixo de tool).`);if(e.command.trim().length===0)throw new oo(`server "${e.name}": "command" n\xE3o pode ser vazio.`);if(e.command.trim()==="--")throw new oo(`server "${e.name}": "--" n\xE3o \xE9 um command (\xE9 o separador do 'aluy mcp add'). Use: aluy mcp add ${e.name} -- <command> [args...].`);let n=this.load(),r=n.servers.find(i=>i.name===e.name);if(r&&!o.force)throw new oo(`server "${e.name}" j\xE1 existe em ${this.file} \u2014 use --force p/ sobrescrever.`);let s=[...n.servers.filter(i=>i.name!==e.name),e];return this.write({servers:s}),{replaced:r!==void 0}}remove(e){let o=this.load(),n=o.servers.length,r=o.servers.filter(s=>s.name!==e);return r.length===n?{removed:!1}:(this.write({servers:r}),{removed:!0})}setDisabled(e,o){let n=this.load(),r=n.servers.find(i=>i.name===e);if(!r)return{found:!1};let s={name:r.name,command:r.command,args:r.args,env:r.env,...o?{disabled:!0}:{}};return this.write({servers:n.servers.map(i=>i.name===e?s:i)}),{found:!0}}write(e){let o=hV(this.file);dV(o,{recursive:!0});let n=HL(e),r=gV(o,`.mcp.json.${process.pid}.${Date.now()}.tmp`);pV(r,n,{encoding:"utf8",mode:384}),mV(r,this.file)}};function HL(t){let e={};for(let o of t.servers){let n={command:o.command,args:[...o.args]};Object.keys(o.env).length>0&&(n.env={...o.env}),o.disabled===!0&&(n.disabled=!0),e[o.name]=n}return JSON.stringify({mcpServers:e},null,2)+`
571
- `}U();import{Entry as bV}from"@napi-rs/keyring";function qL(t){let e=String(t?.message??t).toLowerCase();return e.includes("no matching entry")||e.includes("not found")||e.includes("no such")||e.includes("no entry")}var Cf=class{service;account;makeEntry;constructor(e,o={}){this.service=o.service??Ad,this.account=zy(e),this.makeEntry=o.entryFactory??((n,r)=>new bV(n,r))}entry(){try{return this.makeEntry(this.service,this.account)}catch(e){throw new zn(e)}}async get(){let e=this.entry();try{let o=e.getPassword();return o!==""?o:null}catch(o){return qL(o),null}}async set(e){let o=this.entry();try{o.setPassword(e)}catch(n){throw new zn(n)}}async clear(){let e=this.entry();try{e.deletePassword()}catch(o){if(qL(o))return}}};U();import{homedir as zL}from"node:os";import{join as Kl}from"node:path";import{statSync as KL,readFileSync as ox}from"node:fs";var vV="/healthz",kV="/v1/tiers/catalog",xV="/v1/models/custom",SV="/v1/quota",YL=4e3,wV=6e3,WL=15e3,AV=2e3,EV=256*1024;function ta(t){return t.aluyHome??Kl(zL(),".aluy")}async function TV(t){let e=t.env??process.env;try{let o=Uu(e),n=new ki,s=await new Qs({...o,baseUrl:o.identityBaseUrl,store:n}).whoami();if(!s)return{present:!1,keychainAvailable:!0};let i={present:!0,keychainAvailable:!0,...s.user!==void 0?{user:s.user}:{},org:s.organization_id,kind:s.kind},a=await _V(t);return{...i,...a}}catch(o){return o instanceof zn?{present:!1,keychainAvailable:!1}:{present:!1,keychainAvailable:!0}}}async function _V(t){if(!t.getAccessToken)return{};let e=t.env??process.env,{brokerBaseUrl:o}=Gn(e),n;try{n=await t.getAccessToken()}catch{return{}}let r=await ea(`${o}${SV}`,Of(t),{headers:{authorization:`Bearer ${n}`}});return!r.reached||r.status===void 0?{}:r.status>=200&&r.status<300?{authValidated:!0,authStatus:r.status}:r.status===401||r.status===403?{authValidated:!1,authStatus:r.status}:{authStatus:r.status}}function VL(t,e){return{method:"GET",headers:{accept:"application/json",...e??{}},signal:t}}async function ea(t,e,o){let n=new AbortController,r=setTimeout(()=>n.abort(),YL);try{return{reached:!0,status:(await e(t,VL(n.signal,o?.headers))).status}}catch{return{reached:!1}}finally{clearTimeout(r)}}function Of(t){return t.fetch??globalThis.fetch}function XL(t){let e=t.env??process.env,o;try{o=new un({baseDir:ta(t)}).load().backend}catch{}return ga({env:e.ALUY_BACKEND,config:o})==="local"}async function RV(t){let e=t.env??process.env,{brokerBaseUrl:o}=Gn(e);if(XL(t))return{url:o,probe:{reached:!1},localSkip:!0};let n=await ea(`${o}${vV}`,Of(t));return{url:o,probe:n}}async function CV(t){let e=t.env??process.env;if(XL(t))return{tiers:{reached:!1},custom:{reached:!1},localSkip:!0};let{brokerBaseUrl:o}=Gn(e),n=Of(t),r;if(t.getAccessToken)try{r={authorization:`Bearer ${await t.getAccessToken()}`}}catch{r=void 0}let[s,i]=await Promise.all([ea(`${o}${kV}`,n,r?{headers:r}:{}),OV(`${o}${xV}`,n,r)]);return{tiers:s,custom:i.probe,...i.count!==void 0?{customCount:i.count}:{}}}async function OV(t,e,o){let n=new AbortController,r=setTimeout(()=>n.abort(),YL);try{let s=await e(t,VL(n.signal,o));if(s.status<200||s.status>=300)return{probe:{reached:!0,status:s.status}};let i;try{let c=(await s.json())?.data;Array.isArray(c)&&(i=c.length)}catch{i=void 0}return{probe:{reached:!0,status:s.status},...i!==void 0?{count:i}:{}}}catch{return{probe:{reached:!1}}}finally{clearTimeout(r)}}async function MV(t){let e=ta(t),o=t.workspaceRoot??process.cwd(),n=new er({baseDir:NV(t)}).load(),r=new Ps({baseDir:e}).load(),s=IV(o),i=[n.error,r.error,s.error].filter(f=>typeof f=="string"&&f.length>0),a=[{origin:"codex",config:n.config},{origin:"aluy-global",config:r.config},{origin:"project",config:s.config}],c=xc(a),l=t.makeMcpTransport?await LV(a,t.makeMcpTransport):void 0;return{servers:c.map(f=>{let u=Sc(f),p=u!==void 0,h=f.state.kind==="disabled",y=l?.get(f.name);return{name:f.name,origin:f.origin,invalid:p,...p?{invalidWarning:u}:{},disabled:h,...y&&!p&&!h?{connected:y.ok,...y.ok?{toolCount:y.toolCount??0}:{connectError:y.error??"falha no handshake"}}:{}}}),configErrors:i}}async function LV(t,e){let o=kc(...t.map(a=>a.config)),r=wc(o,a=>PV(e(a),wV)),s;try{s=await Promise.race([r,new Promise((a,c)=>setTimeout(()=>c(new Error(`timeout global de ${Math.round(WL/1e3)}s`)),WL))])}catch{return r.then(a=>GL(a.transports),()=>{}),new Map}let i=new Map;for(let a of s.servers)i.set(a.server,a.ok?{ok:!0,toolCount:a.tools.length}:{ok:!1,error:a.error??"falha no handshake"});return await GL(s.transports),i}async function GL(t){await Promise.all(t.map(async e=>{try{await Promise.race([e.close(),new Promise(o=>setTimeout(o,AV))])}catch{}}))}function PV(t,e){return{async connect(o){let n,r=new Promise((s,i)=>{n=setTimeout(()=>i(new Error(`timeout de ${Math.round(e/1e3)}s no handshake`)),e)});try{return await Promise.race([t.connect(o),r])}finally{n&&clearTimeout(n)}},callTool:(o,n)=>t.callTool(o,n),close:()=>t.close()}}function NV(t){return(t.env??process.env).CODEX_HOME??Kl(zL(),".codex")}function IV(t){let e=Kl(t,An),o;try{let r=KL(e);if(!r.isFile()||r.size>EV)return{config:we};o=ox(e,"utf8")}catch{return{config:we}}let n;try{n=JSON.parse(o)}catch{return{config:we,error:`${e}: JSON inv\xE1lido.`}}try{return{config:Ho(n)}}catch(r){return{config:we,error:r instanceof ue?r.message:String(r)}}}function DV(t){let o=new ps({baseDir:ta(t)}).load();return{validCount:o.profiles.length,rejected:o.errors.map(n=>({file:n.file,reason:n.reason}))}}function $V(t){let e=t.env??process.env,o=Kl(ta(t),jc),n=!1,r=!1,s,i;try{if(KL(o).isFile()){n=!0;let d=ox(o,"utf8");try{let f=JSON.parse(d);typeof f.theme=="string"&&(s=f.theme),typeof f.tier=="string"&&(i=f.tier)}catch{r=!0}}}catch{n=!1}let a=pd(void 0,e.ALUY_MAX_TOKENS),c=hd(void 0,e.ALUY_MAX_ITERATIONS);return{exists:n,corrupted:r,...s!==void 0?{theme:s,themeKnown:Ar(s)!==void 0}:{},...i!==void 0?{tier:i,tierKnown:Jb(i)!==void 0}:{},maxTokens:a,maxIterations:c,flags:FV(e,t.extraFlags)}}function FV(t,e){let o=[...e??[]];return(t.ALUY_NATIVE_TOOLS_OFF==="1"||t.ALUY_NATIVE_TOOLS_OFF==="true")&&o.push("ALUY_NATIVE_TOOLS_OFF"),t.ALUY_OVERWRITE_RENDER==="0"&&o.push("ALUY_OVERWRITE_RENDER=0"),t.ALUY_SAFE_GLYPHS==="1"&&o.push("ALUY_SAFE_GLYPHS"),o}function BV(){return{aluy:Ln,node:process.version}}async function UV(t){if(!t.memory)return{accessible:!0,count:0};try{let e=await t.memory.count();return e===null?{accessible:!1,count:0}:{accessible:!0,count:e}}catch{return{accessible:!1,count:0}}}async function jV(t){let e=Of(t),o=t.env??process.env,n;try{n=new un({baseDir:ta(t)}).load().services}catch{}let[r,s,i]=await Promise.all([ea(`${NC(o,n)}/health`,e),ea(`${bm(o,n)}/api/tags`,e),ea(`${ym(o,n)}/health`,e)]),a="turbo",c=["ollama","mem0"];try{let l=ta(t),d=ox(Kl(l,jc),"utf8"),f=JSON.parse(d);(f.profile==="leve"||f.profile==="turbo")&&(a=f.profile);let u=yc(f.sidecarToggles??{}),p=[];u.has("ollama")&&p.push("ollama"),u.has("mem0")&&p.push("mem0"),c=p}catch{}return{headroom:r,ollama:s,mem0:i,profile:a,toggles:c}}async function HV(t){let e=t.env??process.env;return{enabled:vm({env:e})!==void 0}}async function JL(t={}){let e={},o=r=>t.onCheck?.(r,{...e}),n=(r,s,i)=>s.then(a=>{e[i]=a,o(r)});return e.version=BV(),o("version"),await Promise.all([n("auth",(t.gatherAuth??(()=>TV(t)))(),"auth"),n("broker",(t.gatherBroker??(()=>RV(t)))(),"broker"),n("catalog",(t.gatherCatalog??(()=>CV(t)))(),"catalog"),n("memory",(t.gatherMemory??(()=>UV(t)))(),"memory"),n("mcp",(t.gatherMcp??(()=>MV(t)))(),"mcp"),n("agents",(t.gatherAgents??(()=>Promise.resolve(DV(t))))(),"agents"),n("config",(t.gatherConfig??(()=>Promise.resolve($V(t))))(),"config"),n("sidecars",(t.gatherSidecars??(()=>jV(t)))(),"sidecars"),n("maestro",(t.gatherMaestro??(()=>HV(t)))(),"maestro")]),t.tierTester&&await n("tier",t.tierTester().then(r=>r),"tier"),{auth:e.auth,broker:e.broker,catalog:e.catalog,mcp:e.mcp,agents:e.agents,config:e.config,version:e.version,memory:e.memory,sidecars:e.sidecars,maestro:e.maestro,...e.tier!==void 0?{tier:e.tier}:{}}}var qV=(()=>{try{return new URL(Bu).host}catch{return Bu}})();function ZL(t){if(!t.keychainAvailable)return{id:"auth",label:"credencial",status:"fail",detail:"keychain do SO indispon\xEDvel",fix:"instale um keychain (libsecret/Keychain/Credential Manager) e rode `aluy login`."};if(!t.present)return{id:"auth",label:"credencial",status:"fail",detail:"n\xE3o autenticado",fix:"rode `aluy login`."};let e=t.user??(t.kind==="pat"?"PAT":"\u2014"),o=t.org!==void 0?` \xB7 org ${t.org}`:"";if(t.authValidated===!1)return{id:"auth",label:"credencial",status:"fail",detail:`${e}${o} \xB7 broker recusou (${t.authStatus??"401"})`,fix:"credencial inv\xE1lida/expirada \u2014 rode `aluy login`."};let n=t.authValidated===!0?" \xB7 autenticado":" \xB7 presente (n\xE3o-validado)";return{id:"auth",label:"credencial",status:"ok",detail:`${e}${o}${n}`}}function eP(t){if(t.localSkip)return{id:"broker",label:"broker",status:"ok",detail:"N/A (backend local \u2014 BYO, sem broker)"};let e=WV(t.url),o=t.probe;if(!o.reached){let n=e===qV;return{id:"broker",label:"broker",status:"fail",detail:n?`${e} \xB7 inalcan\xE7\xE1vel (placeholder)`:`${e} \xB7 inalcan\xE7\xE1vel`,fix:n?"ALUY_BROKER_URL n\xE3o configurado \u2014 `broker.dev.aluy.example` \xE9 um placeholder de dev. Defina ALUY_BROKER_URL p/ o seu broker (ex.: `export ALUY_BROKER_URL=http://127.0.0.1:8121` em dev).":"cheque a rede e o ALUY_BROKER_URL; o broker pode estar fora."}}return o.status!==void 0&&o.status>=200&&o.status<300?{id:"broker",label:"broker",status:"ok",detail:`${e} \xB7 ${o.status}`}:o.status===401||o.status===403?{id:"broker",label:"broker",status:"fail",detail:`${e} \xB7 ${o.status}`,fix:"credencial recusada \u2014 rode `aluy login`."}:{id:"broker",label:"broker",status:"warn",detail:`${e} \xB7 ${o.status??"?"}`,fix:"broker respondeu, mas n\xE3o-ok no /healthz \u2014 verifique o status do servi\xE7o."}}function tP(t){if(t.localSkip)return{id:"catalog",label:"cat\xE1logo/tiers",status:"ok",detail:"N/A (backend local \u2014 modelo/base_url v\xEAm da config BYO)"};let e=t.tiers,o=t.custom,n=o.reached&&o.status!==void 0&&Yl(o.status),r=e.reached&&e.status!==void 0&&Yl(e.status);if(!e.reached&&!o.reached)return{id:"catalog",label:"cat\xE1logo/tiers",status:"warn",detail:"broker fora \u2014 usando o cat\xE1logo fallback",fix:"sem o cat\xE1logo do broker o /model usa os tiers conhecidos; cheque o broker."};if(r&&n)return{id:"catalog",label:"cat\xE1logo/tiers",status:"ok",detail:`cat\xE1logo ok \xB7 ${t.customCount??0} modelo(s) custom`};let s=r?"cat\xE1logo de tier ok":`cat\xE1logo de tier indispon\xEDvel (${QL(e)})`,i=n?`${t.customCount??0} modelo(s) custom`:`custom indispon\xEDvel (${QL(o)})`;return{id:"catalog",label:"cat\xE1logo/tiers",status:"warn",detail:`${s} \xB7 ${i} \u2014 usando fallback`,fix:"o /model cai no cat\xE1logo fallback; rode `aluy login` se for falta de scope."}}function oP(t){let e=t.servers.length,o=t.servers.filter(a=>a.invalid),n=t.servers.filter(a=>a.disabled&&!a.invalid),r=e-o.length-n.length;if(t.configErrors.length>0)return{id:"mcp",label:"MCP",status:"fail",detail:`config inv\xE1lida: ${t.configErrors[0]}`,fix:"conserte o JSON do mcp.json (~/.aluy/mcp.json ou .mcp.json do projeto)."};if(e===0)return{id:"mcp",label:"MCP",status:"ok",detail:"nenhum server configurado"};if(o.length>0){let a=o[0]?.invalidWarning??`server "${o[0]?.name}" com command inv\xE1lido`;return{id:"mcp",label:"MCP",status:"warn",detail:`${e} server(es) \xB7 ${o.length} com config inv\xE1lida`,fix:a}}if(r>0&&t.servers.some(a=>a.connected!==void 0)){let a=t.servers.filter(f=>f.connected===!1),c=t.servers.filter(f=>f.connected===!0),l=c.map(f=>`${f.name} \xB7 ${f.toolCount??0} tools`).join(", ");if(a.length>0){let f=a[0],u=c.length>0?` \xB7 ok: ${l}`:"";return{id:"mcp",label:"MCP",status:"fail",detail:`${a.length}/${r} falhou ao conectar \u2014 ${f.name}: ${f.connectError??"erro"}${u}`,fix:"cheque o command/args do server no mcp.json e se o bin\xE1rio est\xE1 instalado."}}let d=n.length>0?` \xB7 ${n.length} desativado(s)`:"";return{id:"mcp",label:"MCP",status:"ok",detail:`${c.length} conectado(s): ${l}${d}`}}let i=[`${r} ativo(s)`];return n.length>0&&i.push(`${n.length} desativado(s)`),{id:"mcp",label:"MCP",status:"ok",detail:`${e} server(es) \xB7 ${i.join(", ")}`}}function nP(t){if(t.rejected.length>0){let e=t.rejected[0];return{id:"agents",label:"perfis de agente",status:"warn",detail:`${t.validCount} v\xE1lido(s) \xB7 ${t.rejected.length} rejeitado(s): ${e?.file} (${e?.reason})`,fix:"conserte o frontmatter do .md (ex.: `tools:` precisa ser uma lista leg\xEDvel \u2014 RES-MD-3 falha fechada)."}}return{id:"agents",label:"perfis de agente",status:"ok",detail:t.validCount===0?"nenhum perfil":`${t.validCount} v\xE1lido(s)`}}function rP(t){let e=`max-tokens ${t.maxTokens} \xB7 max-iterations ${t.maxIterations}`,o=t.flags.length>0?` \xB7 flags: ${t.flags.join(", ")}`:"";if(t.corrupted)return{id:"config",label:"config",status:"fail",detail:`~/.aluy/config.json corrompido (JSON inv\xE1lido) \u2014 usando defaults \xB7 ${e}${o}`,fix:"conserte ou apague ~/.aluy/config.json (ser\xE1 recriado pelo /theme e /model)."};let n=[];t.theme!==void 0&&n.push(`tema ${t.theme}`),t.tier!==void 0&&n.push(`tier ${t.tier}`);let r=t.exists&&n.length>0?n.join(", "):"defaults",s=t.theme!==void 0&&t.themeKnown===!1,i=t.tier!==void 0&&t.tierKnown===!1;if(s||i){let a=[];return s&&a.push(`tema "${t.theme}" n\xE3o est\xE1 no cat\xE1logo`),i&&a.push(`tier "${t.tier}" desconhecido`),{id:"config",label:"config",status:"warn",detail:`${a.join(" \xB7 ")} \u2014 usando defaults \xB7 ${e}${o}`,fix:s?"rode `/theme` p/ escolher um tema v\xE1lido (dark/light/slate).":"rode `/model` p/ escolher um tier conhecido."}}return{id:"config",label:"config",status:"ok",detail:`${r} \xB7 ${e}${o}`}}function sP(t){return t.responded?{id:"tier",label:"tier (--deep)",status:"ok",detail:`${t.tier} respondeu ao modelo`}:{id:"tier",label:"tier (--deep)",status:"fail",detail:`${t.tier} n\xE3o respondeu${t.error?` \xB7 ${t.error}`:""}`,fix:"o tier n\xE3o respondeu ao modelo \u2014 cheque cr\xE9dito (`/usage`), o broker e o `/model`."}}function iP(t){return{id:"version",label:"vers\xE3o",status:"ok",detail:`aluy ${t.aluy} \xB7 node ${t.node}`}}function aP(t){return t.accessible?{id:"memory",label:"mem\xF3ria",status:"ok",detail:t.count===0?"store ok \xB7 0 fato":`store ok \xB7 ${t.count} fato(s)`}:{id:"memory",label:"mem\xF3ria",status:"fail",detail:"store de mem\xF3ria ileg\xEDvel",fix:"cheque permiss\xF5es de ~/.aluy/ (deve ser 0700, seu)."}}function cP(t){let e=[],o=!1,n=!1;t.headroom.reached&&t.headroom.status!==void 0&&Yl(t.headroom.status)?e.push(`headroom \u2713 (${t.headroom.status})`):t.headroom.reached?(e.push(`headroom \u26A0 (${t.headroom.status??"?"})`),n=!0):(e.push("headroom \u2717 (fora)"),o=!0),t.ollama.reached&&t.ollama.status!==void 0&&Yl(t.ollama.status)?e.push(`ollama \u2713 (${t.ollama.status})`):t.ollama.reached?(e.push(`ollama \u26A0 (${t.ollama.status??"?"})`),n=!0):(e.push("ollama \u2717 (fora)"),o=!0),t.mem0.reached&&t.mem0.status!==void 0&&Yl(t.mem0.status)?e.push(`mem0 \u2713 (${t.mem0.status})`):t.mem0.reached?(e.push(`mem0 \u26A0 (${t.mem0.status??"?"})`),n=!0):(e.push("mem0 \u2717 (fora)"),o=!0);let r=t.toggles.length>0?t.toggles.join(", "):"nenhum";e.push(`perfil ${t.profile.toUpperCase()} (toggles: ${r})`);let s=o?"fail":n?"warn":"ok",i=o?"sidecar(es) fora \u2014 provisione/suba com `aluy bootstrap` (perfil TURBO; mem0/headroom precisam de python3.10+/pip/venv). No boot eles sobem sozinhos se j\xE1 instalados.":n?"sidecar(es) com status inesperado \u2014 cheque os logs do Maestro.":void 0;return{id:"sidecars",label:"sidecars/Maestro",status:s,detail:e.join(" \xB7 "),...i!==void 0?{fix:i}:{}}}function lP(t){return{id:"maestro",label:"Maestro",status:"ok",detail:t.enabled?"ligado":"desligado"}}function dP(t){let e=[ZL(t.auth),eP(t.broker),tP(t.catalog),oP(t.mcp),nP(t.agents),rP(t.config),iP(t.version),aP(t.memory),cP(t.sidecars),lP(t.maestro)];return t.tier!==void 0&&e.push(sP(t.tier)),{checks:e}}function uP(t=!1){let e=[{id:"auth",label:"credencial"},{id:"broker",label:"broker"},{id:"catalog",label:"cat\xE1logo/tiers"},{id:"mcp",label:"MCP"},{id:"agents",label:"perfis de agente"},{id:"config",label:"config"},{id:"version",label:"vers\xE3o"},{id:"memory",label:"mem\xF3ria"},{id:"sidecars",label:"sidecars/Maestro"},{id:"maestro",label:"Maestro"}];return t?[...e,{id:"tier",label:"tier (--deep)"}]:e}function mP(t,e){switch(t){case"auth":return e.auth?ZL(e.auth):void 0;case"broker":return e.broker?eP(e.broker):void 0;case"catalog":return e.catalog?tP(e.catalog):void 0;case"mcp":return e.mcp?oP(e.mcp):void 0;case"agents":return e.agents?nP(e.agents):void 0;case"config":return e.config?rP(e.config):void 0;case"version":return e.version?iP(e.version):void 0;case"memory":return e.memory?aP(e.memory):void 0;case"sidecars":return e.sidecars?cP(e.sidecars):void 0;case"maestro":return e.maestro?lP(e.maestro):void 0;case"tier":return e.tier?sP(e.tier):void 0;default:return}}function fP(t){let e=0,o=0,n=0;for(let r of t)r.status==="ok"?e++:r.status==="warn"?o++:n++;return`${e} ok \xB7 ${o} aviso \xB7 ${n} falha`}function Yl(t){return t>=200&&t<300}function QL(t){return t.reached?t.status!==void 0?String(t.status):"?":"broker fora"}function WV(t){try{return new URL(t).host}catch{return t}}async function pP(t,e){let o=t.probeOverride?.tierTester!==void 0,r=uP(o).map(u=>({id:u.id,label:u.label,status:"pending"})),s=new Map(r.map((u,p)=>[u.id,p]));e({checks:[...r]});let i=t.unsafe===!0?["--yolo"]:[],a={...t.env!==void 0?{env:t.env}:{},...t.workspaceRoot!==void 0?{workspaceRoot:t.workspaceRoot}:{},getAccessToken:()=>t.login.getAccessToken(),memory:t.memory,extraFlags:i,...t.probeOverride??{},onCheck:(u,p)=>{let h=mP(u,p),y=s.get(u);h&&y!==void 0&&(r[y]={id:u,label:h.label,status:h.status,...h.detail!==void 0?{detail:h.detail}:{},...h.fix!==void 0?{fix:h.fix}:{}},e({checks:[...r]}))}},c=await JL(a),l=dP(c),f={checks:l.checks.map(u=>({id:u.id,label:u.label,status:u.status,detail:u.detail,...u.fix!==void 0?{fix:u.fix}:{}})),summary:fP(l.checks)};return e(f),f}U();var GV='Responda apenas com a palavra "ok".',zV=8;async function hP(t){let e=t.env??process.env,{brokerBaseUrl:o}=Gn(e),n=Da({brokerBaseUrl:o,login:t.login,...t.fetch?{fetch:t.fetch}:{}}),r=new nn({client:n,tier:t.tier,...t.tier==="custom"&&t.model!==void 0?{model:t.model}:{},maxTokens:zV}),s=new AbortController,i=setTimeout(()=>s.abort(),t.timeoutMs??2e4);try{return typeof(await r.call({messages:[{role:"user",content:GV}],idempotencyKey:`doctor-deep-${Date.now()}`,signal:s.signal})).content=="string"?{tier:t.tier,responded:!0}:{tier:t.tier,responded:!1,error:"resposta vazia do broker"}}catch(a){return{tier:t.tier,responded:!1,error:KV(a)}}finally{clearTimeout(i)}}function KV(t){return t instanceof Error?t.message:String(t)}U();import{homedir as yP}from"node:os";import{join as rx}from"node:path";var nx={title:"mcp",lines:["uso: /mcp add <nome> [--env K=V]... [--force] -- <command> [args...]","ex.: /mcp add pw -- npx -y @playwright/mcp","use REFER\xCANCIA no --env (--env TOKEN=$MEU_TOKEN) \u2014 nunca segredo literal."]};function YV(t){return{title:"mcp",lines:[`uso: /mcp ${t} <nome>`]}}function bP(t){let e=t.trim().split(/\s+/).filter(f=>f.length>0),o=e[0]?.toLowerCase();if(o===void 0)return null;if(o==="remove"||o==="rm"||o==="disable"||o==="enable"){let f=o==="rm"?"remove":o,u=e[1];return u===void 0||e.length>2?{kind:"usage",note:YV(f)}:{kind:f,name:u}}if(o!=="add")return null;let n=e.slice(1),r=[],s=[],i=!1,a=null;for(let f=0;f<n.length;f++){let u=n[f];if(u==="--"){a=n.slice(f+1);break}if(u==="--force"){i=!0;continue}if(u==="--env"||u.startsWith("--env=")){let p=u==="--env"?n[++f]:u.slice(6),h=p===void 0?void 0:VV(p);if(h===void 0)return{kind:"usage",note:nx};r.push(h);continue}s.push(u)}let c=s[0];if(c===void 0)return{kind:"usage",note:nx};let l=a??s.slice(1),d=l[0];return d===void 0||d.trim().length===0?{kind:"usage",note:nx}:{kind:"add",name:c,command:d,args:l.slice(1),env:r,force:i}}function VV(t){let e=t.indexOf("=");if(!(e<=0))return[t.slice(0,e),t.slice(e+1)]}var sx="reinicie a sess\xE3o (ou use /mcp reload quando existir) p/ carregar as tools \u2014 a descoberta \xE9 no boot.";function vP(t,e={}){if(t.kind==="usage")return t.note;let o=e.aluyHome??rx(yP(),".aluy"),n=new zl({file:rx(o,Tf)});try{switch(t.kind){case"add":return XV(t,n);case"remove":return JV(t.name,n,e);case"disable":return gP(t.name,!0,n,e);case"enable":return gP(t.name,!1,n,e)}}catch(r){return{title:"mcp",lines:[`\u26A0 ${r instanceof oo?r.message:String(r)}`]}}}function XV(t,e){let o=[],n={};for(let[i,a]of t.env)Py(i,a).looksLikeSecret&&o.push(`\u26A0 --env ${i} parece um SEGREDO literal \u2014 o mcp.json \xE9 leg\xEDvel e N\xC3O deve carregar credencial. Prefira refer\xEAncia (--env ${i}=$NOME_DA_VAR). Gravando assim mesmo.`),n[i]=a;let r={name:t.name,command:t.command,args:t.args,env:n},{replaced:s}=e.add(r,{force:t.force});return o.push(`${s?"atualizado":"adicionado"} "${t.name}" em ~/.aluy/mcp.json: ${t.command}${t.args.length?" "+t.args.join(" "):""}`),o.push(sx),o.push("o server passa pela catraca no runtime (conectar = confirma\xE7\xE3o)."),{title:"mcp",lines:o}}function JV(t,e,o){let{removed:n}=e.remove(t);return n?{title:"mcp",lines:[`removido "${t}" de ~/.aluy/mcp.json.`,sx]}:{title:"mcp",lines:kP(t,o)}}function gP(t,e,o,n){let{found:r}=o.setDisabled(t,e);return r?e?{title:"mcp",lines:[`desativado "${t}" (disabled: true em ~/.aluy/mcp.json) \u2014 instalado, mas a`,"descoberta o PULA. se est\xE1 conectado nesta sess\xE3o, desconecta no pr\xF3ximo boot.","reative com /mcp enable "+t+"."]}:{title:"mcp",lines:[`reativado "${t}" em ~/.aluy/mcp.json.`,sx]}:{title:"mcp",lines:kP(t,n)}}function kP(t,e){let o=[`server "${t}" n\xE3o est\xE1 em ~/.aluy/mcp.json (onde o aluy escreve).`],n=e.codexHome??rx(yP(),".codex");try{new er({baseDir:n}).load().config.servers.some(s=>s.name===t)&&o.push(`"${t}" vem do Codex (~/.codex/config.toml) \u2014 o aluy N\xC3O o gerencia; edite o config.toml \xE0 m\xE3o.`)}catch{}return o}U();function ix(t){return t==="thinking"||t==="streaming"||t==="asking"}function xP(t){return t==="boot"||t==="idle"||t==="done"||t==="error"}var QV=5e3;function SP(t,e){let o=e.port,n=e.longTurnMs??QV,r=e.now??Date.now,s=null,i=null;return t(c=>{let l=c.phase;if(s===null){s=l,ix(l)&&(i=r());return}if(l!==s){if(ix(l)&&xP(s)&&(i=r()),l==="asking"&&s!=="asking"&&o.notify("attention"),(l==="done"||l==="budget")&&ix(s)){let d=i;d!==null&&r()-d>=n&&o.notify("done")}xP(l)&&(i=null),s=l}})}U();var Vl=class{journal;redoStack=[];cursor=null;constructor(e){this.journal=e.journal}syncCursor(){let e=[...this.journal.list()];return this.cursor===null?this.cursor=e.length:this.cursor>e.length&&(this.cursor=e.length),e}async undo(e=!1){let o=this.syncCursor(),n=this.cursor??o.length;if(n<=0)return Fr("undo",["nada para desfazer \u2014 a pilha de edi\xE7\xF5es est\xE1 vazia."]);let r=[];for(;n>0;){let s=o[n-1];if(s.kind==="barrier"){r.push(`\u26A0 aqui rodou \`${It(s.command)}\` \u2014 efeito de shell N\xC3O \xE9 revers\xEDvel (n\xE3o desfeito).`),n-=1,this.cursor=n;continue}let i=s.targets[0];if(!i){n-=1,this.cursor=n;continue}if(!e&&(await this.journal.checkConcurrency(s)).diverged)return{kind:"confirm",note:{title:"undo \u2014 confirmar",lines:[...r,`o arquivo \`${i.path}\` mudou desde a edi\xE7\xE3o do agente (hash divergiu).`,"desfazer agora SOBRESCREVE essas mudan\xE7as externas com o conte\xFAdo anterior.","rode /undo de novo p/ confirmar a revers\xE3o, ou deixe como est\xE1."]},proceed:()=>this.undo(!0)};let a;try{a=await this.journal.restore(s)}catch(d){let f=d instanceof Error?d.message:"falha desconhecida";return Fr("undo \u2014 falhou",[...r,`n\xE3o foi poss\xEDvel reverter \`${i.path}\`: ${f}`,"nada foi escrito (a revers\xE3o \xE9 confinada e fail-safe)."])}this.pushRedo(s,i.path,i.createdByEdit),n-=1,this.cursor=n;let c=a.action==="removed"?`revertido (arquivo removido \u2014 era novo): \`${i.path}\``:`revertido: \`${i.path}\``,l=this.undoDepth(o,n);return Fr("undo",[...r,c,`pilha: ${l} edi\xE7\xE3o(\xF5es) ainda revers\xEDvel(eis) \xB7 ${this.redoStack.length} para refazer.`])}return Fr("undo",[...r,r.length>0?"n\xE3o h\xE1 mais edi\xE7\xF5es de arquivo para reverter abaixo das barreiras.":"nada para desfazer."])}async redo(){let e=this.redoStack.pop();if(!e)return Fr("redo",["nada para refazer \u2014 n\xE3o h\xE1 undo recente."]);let o=this.journal.appliedContent(e.entry.seq);if(!o)return this.redoStack.push(e),Fr("redo",["n\xE3o foi poss\xEDvel refazer: o conte\xFAdo aplicado n\xE3o est\xE1 dispon\xEDvel nesta sess\xE3o."]);let n;try{n=await this.journal.reapply(e.path,o.after)}catch(r){let s=r instanceof Error?r.message:"falha desconhecida";return this.redoStack.push(e),Fr("redo \u2014 falhou",[`n\xE3o foi poss\xEDvel reaplicar \`${e.path}\`: ${s}`,"nada foi escrito (reaplica\xE7\xE3o confinada e fail-safe)."])}return this.cursor!==null&&(this.cursor+=1),Fr("redo",[`reaplicado: \`${e.path}\` (${n?"reaplicado":"ok"})`,`pilha: ${this.redoStack.length} ainda para refazer.`])}undoDepth(e,o){let n=0;for(let r=0;r<o;r++)e[r].kind==="edit"&&(n+=1);return n}pushRedo(e,o,n){this.redoStack.push({entry:e,path:o,createdByEdit:n})}};function Fr(t,e){return{kind:"note",note:{title:t,lines:e}}}U();function ZV(t){return t==="thinking"||t==="streaming"||t==="asking"}function Mf(t,e){let o=pt(e.config,"turn-end"),n=pt(e.config,"notification");if(o.length===0&&n.length===0)return()=>{};let r=null;return t(i=>{let a=i.phase;if(r===null){r=a;return}a!==r&&(o.length>0&&(a==="done"||a==="budget")&&ZV(r)&&e.runner.runAll(o),n.length>0&&a==="asking"&&r!=="asking"&&e.runner.runAll(n),r=a)})}U();function wP(t){let e=pt(t.config,"pre-tool").length>0,o=pt(t.config,"post-tool").length>0;if(!e&&!o)return;let n={};return e&&(n.onToolStart=r=>{let s=pt(t.config,"pre-tool",r.name);s.length>0&&t.runner.runAll(s)}),o&&(n.onToolEnd=r=>{let s=pt(t.config,"post-tool",r.name);s.length>0&&t.runner.runAll(s)}),n}var eX="\x1B[?1049h",tX="\x1B[?1049l",oX="\x1B[?25l",nX="\x1B[?25h",rX=["exit","SIGINT","SIGTERM","uncaughtException","unhandledRejection"];function ax(t){try{t.write(`${eX}${oX}`)}catch{}}function AP(t,e){let o=!1,n=!1,r=()=>{if(!o){o=!0;try{let y=e.stdin??globalThis.process?.stdin;y?.isTTY===!0&&(y.setRawMode?.(!1),y.pause?.())}catch{}try{t.isTTY===!0&&t.setRawMode?.(!1)}catch{}try{t.isTTY===!0&&t.write(`${tX}${nX}`)}catch{}}},s=()=>r(),i=y=>()=>{r(),p();try{e.kill?.(e.pid??0,y)}catch{}},a=y=>{r(),p();let g=()=>{throw y instanceof Error?y:new Error(String(y))},w=e.nextTick??globalThis.process?.nextTick;typeof w=="function"?w(g):g()},c=i("SIGINT"),l=i("SIGTERM"),d={exit:s,SIGINT:c,SIGTERM:l,uncaughtException:a,unhandledRejection:a},f=rX.map(y=>[y,d[y]]),u=!0,p=()=>{if(u){u=!1;for(let[y,g]of f)try{e.removeListener(y,g)}catch{}}};for(let[y,g]of f)e.on(y,g);return{restoreScreen:r,dispose:()=>{n||(n=!0,p(),r())}}}function EP(t,e){t.on("SIGINT",e),t.on("SIGTERM",e);let o=!1;return{dispose(){o||(o=!0,t.removeListener("SIGINT",e),t.removeListener("SIGTERM",e))}}}U();function gt(t){return Ue(t)}function sX(t){switch(t.kind){case"testrun":{let e=t.score;return e.unknownFormat?["## testes","","placar indispon\xEDvel (formato n\xE3o reconhecido)",""]:["## testes","",`${e.passed} \u2713 \xB7 ${e.failed} \u2717 \xB7 ${e.total} total`,""]}case"you":return["## voc\xEA","",gt(t.text),""];case"aluy":return t.selfCheck?[]:["## aluy","",gt(fr(t.text)),""];case"tool":{let e=`- \`${gt(t.verb)} ${gt(t.target)}\` \u2192 ${gt(t.result)} (${t.status})`,o=t.output??t.liveOutput,n=o?["","```",gt(o),"```"]:[];return[e,...n,""]}case"bang":{let e=`- \`! ${gt(t.command)}\` (${t.status})`,o=t.output??t.liveOutput,n=o?["","```",gt(o),"```"]:[];return[e,...n,""]}case"deny":return[`- (negado) \`${gt(t.verb)} ${gt(t.exact)}\``,""];case"subagents":return[`- sub-agentes: ${t.children.map(e=>`${gt(e.label)} (${e.status})`).join(", ")}`,""];case"broker-error":return[`> erro de broker: ${gt(t.headline??t.message)}`,""];case"note":return[`> ${gt(t.title)}`,...t.lines.map(e=>`> ${gt(e)}`),""];case"inject":return[`> (encaixado) ${gt(t.text)}`,""];case"doctor":return[`> doctor: ${t.checks.map(e=>`${gt(e.label)} ${e.status}`).join(" \xB7 ")}`,""]}}function TP(t,e={}){let o=e.exportedAt??new Date().toISOString(),n=["# Aluy Cli \u2014 transcript",""],r=[];e.label!==void 0&&e.label!==""&&r.push(`sess\xE3o: ${gt(e.label)}`),e.sessionId!==void 0&&e.sessionId!==""&&r.push(`id: ${e.sessionId}`),e.tier!==void 0&&e.tier!==""&&r.push(`tier: ${gt(e.tier)}`),r.push(`exportado: ${o}`),n.push(`> ${r.join(" \xB7 ")}`,""),n.push("> por seguran\xE7a, eventuais segredos foram substitu\xEDdos por \u2039redigido\u203A.","","---","");for(let i of t)for(let a of sX(i))n.push(a);let s=n.join(`
572
+ `}U();import{Entry as bV}from"@napi-rs/keyring";function qL(t){let e=String(t?.message??t).toLowerCase();return e.includes("no matching entry")||e.includes("not found")||e.includes("no such")||e.includes("no entry")}var Cf=class{service;account;makeEntry;constructor(e,o={}){this.service=o.service??Ad,this.account=zy(e),this.makeEntry=o.entryFactory??((n,r)=>new bV(n,r))}entry(){try{return this.makeEntry(this.service,this.account)}catch(e){throw new zn(e)}}async get(){let e=this.entry();try{let o=e.getPassword();return o!==""?o:null}catch(o){return qL(o),null}}async set(e){let o=this.entry();try{o.setPassword(e)}catch(n){throw new zn(n)}}async clear(){let e=this.entry();try{e.deletePassword()}catch(o){if(qL(o))return}}};U();import{homedir as zL}from"node:os";import{join as Kl}from"node:path";import{statSync as KL,readFileSync as ox}from"node:fs";var vV="/healthz",kV="/v1/tiers/catalog",xV="/v1/models/custom",SV="/v1/quota",YL=4e3,wV=6e3,WL=15e3,AV=2e3,EV=256*1024;function ta(t){return t.aluyHome??Kl(zL(),".aluy")}async function TV(t){let e=t.env??process.env;try{let o=Uu(e),n=new ki,s=await new Qs({...o,baseUrl:o.identityBaseUrl,store:n}).whoami();if(!s)return{present:!1,keychainAvailable:!0};let i={present:!0,keychainAvailable:!0,...s.user!==void 0?{user:s.user}:{},org:s.organization_id,kind:s.kind},a=await _V(t);return{...i,...a}}catch(o){return o instanceof zn?{present:!1,keychainAvailable:!1}:{present:!1,keychainAvailable:!0}}}async function _V(t){if(!t.getAccessToken)return{};let e=t.env??process.env,{brokerBaseUrl:o}=Gn(e),n;try{n=await t.getAccessToken()}catch{return{}}let r=await ea(`${o}${SV}`,Of(t),{headers:{authorization:`Bearer ${n}`}});return!r.reached||r.status===void 0?{}:r.status>=200&&r.status<300?{authValidated:!0,authStatus:r.status}:r.status===401||r.status===403?{authValidated:!1,authStatus:r.status}:{authStatus:r.status}}function VL(t,e){return{method:"GET",headers:{accept:"application/json",...e??{}},signal:t}}async function ea(t,e,o){let n=new AbortController,r=setTimeout(()=>n.abort(),YL);try{return{reached:!0,status:(await e(t,VL(n.signal,o?.headers))).status}}catch{return{reached:!1}}finally{clearTimeout(r)}}function Of(t){return t.fetch??globalThis.fetch}function XL(t){let e=t.env??process.env,o;try{o=new un({baseDir:ta(t)}).load().backend}catch{}return ga({env:e.ALUY_BACKEND,config:o})==="local"}async function RV(t){let e=t.env??process.env,{brokerBaseUrl:o}=Gn(e);if(XL(t))return{url:o,probe:{reached:!1},localSkip:!0};let n=await ea(`${o}${vV}`,Of(t));return{url:o,probe:n}}async function CV(t){let e=t.env??process.env;if(XL(t))return{tiers:{reached:!1},custom:{reached:!1},localSkip:!0};let{brokerBaseUrl:o}=Gn(e),n=Of(t),r;if(t.getAccessToken)try{r={authorization:`Bearer ${await t.getAccessToken()}`}}catch{r=void 0}let[s,i]=await Promise.all([ea(`${o}${kV}`,n,r?{headers:r}:{}),OV(`${o}${xV}`,n,r)]);return{tiers:s,custom:i.probe,...i.count!==void 0?{customCount:i.count}:{}}}async function OV(t,e,o){let n=new AbortController,r=setTimeout(()=>n.abort(),YL);try{let s=await e(t,VL(n.signal,o));if(s.status<200||s.status>=300)return{probe:{reached:!0,status:s.status}};let i;try{let c=(await s.json())?.data;Array.isArray(c)&&(i=c.length)}catch{i=void 0}return{probe:{reached:!0,status:s.status},...i!==void 0?{count:i}:{}}}catch{return{probe:{reached:!1}}}finally{clearTimeout(r)}}async function MV(t){let e=ta(t),o=t.workspaceRoot??process.cwd(),n=new er({baseDir:NV(t)}).load(),r=new Ps({baseDir:e}).load(),s=IV(o),i=[n.error,r.error,s.error].filter(f=>typeof f=="string"&&f.length>0),a=[{origin:"codex",config:n.config},{origin:"aluy-global",config:r.config},{origin:"project",config:s.config}],c=xc(a),l=t.makeMcpTransport?await LV(a,t.makeMcpTransport):void 0;return{servers:c.map(f=>{let u=Sc(f),p=u!==void 0,h=f.state.kind==="disabled",y=l?.get(f.name);return{name:f.name,origin:f.origin,invalid:p,...p?{invalidWarning:u}:{},disabled:h,...y&&!p&&!h?{connected:y.ok,...y.ok?{toolCount:y.toolCount??0}:{connectError:y.error??"falha no handshake"}}:{}}}),configErrors:i}}async function LV(t,e){let o=kc(...t.map(a=>a.config)),r=wc(o,a=>PV(e(a),wV)),s;try{s=await Promise.race([r,new Promise((a,c)=>setTimeout(()=>c(new Error(`timeout global de ${Math.round(WL/1e3)}s`)),WL))])}catch{return r.then(a=>GL(a.transports),()=>{}),new Map}let i=new Map;for(let a of s.servers)i.set(a.server,a.ok?{ok:!0,toolCount:a.tools.length}:{ok:!1,error:a.error??"falha no handshake"});return await GL(s.transports),i}async function GL(t){await Promise.all(t.map(async e=>{try{await Promise.race([e.close(),new Promise(o=>setTimeout(o,AV))])}catch{}}))}function PV(t,e){return{async connect(o){let n,r=new Promise((s,i)=>{n=setTimeout(()=>i(new Error(`timeout de ${Math.round(e/1e3)}s no handshake`)),e)});try{return await Promise.race([t.connect(o),r])}finally{n&&clearTimeout(n)}},callTool:(o,n)=>t.callTool(o,n),close:()=>t.close()}}function NV(t){return(t.env??process.env).CODEX_HOME??Kl(zL(),".codex")}function IV(t){let e=Kl(t,An),o;try{let r=KL(e);if(!r.isFile()||r.size>EV)return{config:we};o=ox(e,"utf8")}catch{return{config:we}}let n;try{n=JSON.parse(o)}catch{return{config:we,error:`${e}: JSON inv\xE1lido.`}}try{return{config:Ho(n)}}catch(r){return{config:we,error:r instanceof ue?r.message:String(r)}}}function DV(t){let o=new ps({baseDir:ta(t)}).load();return{validCount:o.profiles.length,rejected:o.errors.map(n=>({file:n.file,reason:n.reason}))}}function $V(t){let e=t.env??process.env,o=Kl(ta(t),jc),n=!1,r=!1,s,i;try{if(KL(o).isFile()){n=!0;let d=ox(o,"utf8");try{let f=JSON.parse(d);typeof f.theme=="string"&&(s=f.theme),typeof f.tier=="string"&&(i=f.tier)}catch{r=!0}}}catch{n=!1}let a=pd(void 0,e.ALUY_MAX_TOKENS),c=hd(void 0,e.ALUY_MAX_ITERATIONS);return{exists:n,corrupted:r,...s!==void 0?{theme:s,themeKnown:Ar(s)!==void 0}:{},...i!==void 0?{tier:i,tierKnown:Jb(i)!==void 0}:{},maxTokens:a,maxIterations:c,flags:FV(e,t.extraFlags)}}function FV(t,e){let o=[...e??[]];return(t.ALUY_NATIVE_TOOLS_OFF==="1"||t.ALUY_NATIVE_TOOLS_OFF==="true")&&o.push("ALUY_NATIVE_TOOLS_OFF"),t.ALUY_OVERWRITE_RENDER==="0"&&o.push("ALUY_OVERWRITE_RENDER=0"),t.ALUY_SAFE_GLYPHS==="1"&&o.push("ALUY_SAFE_GLYPHS"),o}function BV(){return{aluy:Ln,node:process.version}}async function UV(t){if(!t.memory)return{accessible:!0,count:0};try{let e=await t.memory.count();return e===null?{accessible:!1,count:0}:{accessible:!0,count:e}}catch{return{accessible:!1,count:0}}}async function jV(t){let e=Of(t),o=t.env??process.env,n;try{n=new un({baseDir:ta(t)}).load().services}catch{}let[r,s,i]=await Promise.all([ea(`${NC(o,n)}/health`,e),ea(`${bm(o,n)}/api/tags`,e),ea(`${ym(o,n)}/health`,e)]),a="turbo",c=["ollama","mem0","headroom"];try{let l=ta(t),d=ox(Kl(l,jc),"utf8"),f=JSON.parse(d);(f.profile==="leve"||f.profile==="turbo")&&(a=f.profile);let u=yc(f.sidecarToggles??{}),p=[];u.has("ollama")&&p.push("ollama"),u.has("mem0")&&p.push("mem0"),u.has("headroom")&&p.push("headroom"),c=p}catch{}return{headroom:r,ollama:s,mem0:i,profile:a,toggles:c}}async function HV(t){let e=t.env??process.env;return{enabled:vm({env:e})!==void 0}}async function JL(t={}){let e={},o=r=>t.onCheck?.(r,{...e}),n=(r,s,i)=>s.then(a=>{e[i]=a,o(r)});return e.version=BV(),o("version"),await Promise.all([n("auth",(t.gatherAuth??(()=>TV(t)))(),"auth"),n("broker",(t.gatherBroker??(()=>RV(t)))(),"broker"),n("catalog",(t.gatherCatalog??(()=>CV(t)))(),"catalog"),n("memory",(t.gatherMemory??(()=>UV(t)))(),"memory"),n("mcp",(t.gatherMcp??(()=>MV(t)))(),"mcp"),n("agents",(t.gatherAgents??(()=>Promise.resolve(DV(t))))(),"agents"),n("config",(t.gatherConfig??(()=>Promise.resolve($V(t))))(),"config"),n("sidecars",(t.gatherSidecars??(()=>jV(t)))(),"sidecars"),n("maestro",(t.gatherMaestro??(()=>HV(t)))(),"maestro")]),t.tierTester&&await n("tier",t.tierTester().then(r=>r),"tier"),{auth:e.auth,broker:e.broker,catalog:e.catalog,mcp:e.mcp,agents:e.agents,config:e.config,version:e.version,memory:e.memory,sidecars:e.sidecars,maestro:e.maestro,...e.tier!==void 0?{tier:e.tier}:{}}}var qV=(()=>{try{return new URL(Bu).host}catch{return Bu}})();function ZL(t){if(!t.keychainAvailable)return{id:"auth",label:"credencial",status:"fail",detail:"keychain do SO indispon\xEDvel",fix:"instale um keychain (libsecret/Keychain/Credential Manager) e rode `aluy login`."};if(!t.present)return{id:"auth",label:"credencial",status:"fail",detail:"n\xE3o autenticado",fix:"rode `aluy login`."};let e=t.user??(t.kind==="pat"?"PAT":"\u2014"),o=t.org!==void 0?` \xB7 org ${t.org}`:"";if(t.authValidated===!1)return{id:"auth",label:"credencial",status:"fail",detail:`${e}${o} \xB7 broker recusou (${t.authStatus??"401"})`,fix:"credencial inv\xE1lida/expirada \u2014 rode `aluy login`."};let n=t.authValidated===!0?" \xB7 autenticado":" \xB7 presente (n\xE3o-validado)";return{id:"auth",label:"credencial",status:"ok",detail:`${e}${o}${n}`}}function eP(t){if(t.localSkip)return{id:"broker",label:"broker",status:"ok",detail:"N/A (backend local \u2014 BYO, sem broker)"};let e=WV(t.url),o=t.probe;if(!o.reached){let n=e===qV;return{id:"broker",label:"broker",status:"fail",detail:n?`${e} \xB7 inalcan\xE7\xE1vel (placeholder)`:`${e} \xB7 inalcan\xE7\xE1vel`,fix:n?"ALUY_BROKER_URL n\xE3o configurado \u2014 `broker.dev.aluy.example` \xE9 um placeholder de dev. Defina ALUY_BROKER_URL p/ o seu broker (ex.: `export ALUY_BROKER_URL=http://127.0.0.1:8121` em dev).":"cheque a rede e o ALUY_BROKER_URL; o broker pode estar fora."}}return o.status!==void 0&&o.status>=200&&o.status<300?{id:"broker",label:"broker",status:"ok",detail:`${e} \xB7 ${o.status}`}:o.status===401||o.status===403?{id:"broker",label:"broker",status:"fail",detail:`${e} \xB7 ${o.status}`,fix:"credencial recusada \u2014 rode `aluy login`."}:{id:"broker",label:"broker",status:"warn",detail:`${e} \xB7 ${o.status??"?"}`,fix:"broker respondeu, mas n\xE3o-ok no /healthz \u2014 verifique o status do servi\xE7o."}}function tP(t){if(t.localSkip)return{id:"catalog",label:"cat\xE1logo/tiers",status:"ok",detail:"N/A (backend local \u2014 modelo/base_url v\xEAm da config BYO)"};let e=t.tiers,o=t.custom,n=o.reached&&o.status!==void 0&&Yl(o.status),r=e.reached&&e.status!==void 0&&Yl(e.status);if(!e.reached&&!o.reached)return{id:"catalog",label:"cat\xE1logo/tiers",status:"warn",detail:"broker fora \u2014 usando o cat\xE1logo fallback",fix:"sem o cat\xE1logo do broker o /model usa os tiers conhecidos; cheque o broker."};if(r&&n)return{id:"catalog",label:"cat\xE1logo/tiers",status:"ok",detail:`cat\xE1logo ok \xB7 ${t.customCount??0} modelo(s) custom`};let s=r?"cat\xE1logo de tier ok":`cat\xE1logo de tier indispon\xEDvel (${QL(e)})`,i=n?`${t.customCount??0} modelo(s) custom`:`custom indispon\xEDvel (${QL(o)})`;return{id:"catalog",label:"cat\xE1logo/tiers",status:"warn",detail:`${s} \xB7 ${i} \u2014 usando fallback`,fix:"o /model cai no cat\xE1logo fallback; rode `aluy login` se for falta de scope."}}function oP(t){let e=t.servers.length,o=t.servers.filter(a=>a.invalid),n=t.servers.filter(a=>a.disabled&&!a.invalid),r=e-o.length-n.length;if(t.configErrors.length>0)return{id:"mcp",label:"MCP",status:"fail",detail:`config inv\xE1lida: ${t.configErrors[0]}`,fix:"conserte o JSON do mcp.json (~/.aluy/mcp.json ou .mcp.json do projeto)."};if(e===0)return{id:"mcp",label:"MCP",status:"ok",detail:"nenhum server configurado"};if(o.length>0){let a=o[0]?.invalidWarning??`server "${o[0]?.name}" com command inv\xE1lido`;return{id:"mcp",label:"MCP",status:"warn",detail:`${e} server(es) \xB7 ${o.length} com config inv\xE1lida`,fix:a}}if(r>0&&t.servers.some(a=>a.connected!==void 0)){let a=t.servers.filter(f=>f.connected===!1),c=t.servers.filter(f=>f.connected===!0),l=c.map(f=>`${f.name} \xB7 ${f.toolCount??0} tools`).join(", ");if(a.length>0){let f=a[0],u=c.length>0?` \xB7 ok: ${l}`:"";return{id:"mcp",label:"MCP",status:"fail",detail:`${a.length}/${r} falhou ao conectar \u2014 ${f.name}: ${f.connectError??"erro"}${u}`,fix:"cheque o command/args do server no mcp.json e se o bin\xE1rio est\xE1 instalado."}}let d=n.length>0?` \xB7 ${n.length} desativado(s)`:"";return{id:"mcp",label:"MCP",status:"ok",detail:`${c.length} conectado(s): ${l}${d}`}}let i=[`${r} ativo(s)`];return n.length>0&&i.push(`${n.length} desativado(s)`),{id:"mcp",label:"MCP",status:"ok",detail:`${e} server(es) \xB7 ${i.join(", ")}`}}function nP(t){if(t.rejected.length>0){let e=t.rejected[0];return{id:"agents",label:"perfis de agente",status:"warn",detail:`${t.validCount} v\xE1lido(s) \xB7 ${t.rejected.length} rejeitado(s): ${e?.file} (${e?.reason})`,fix:"conserte o frontmatter do .md (ex.: `tools:` precisa ser uma lista leg\xEDvel \u2014 RES-MD-3 falha fechada)."}}return{id:"agents",label:"perfis de agente",status:"ok",detail:t.validCount===0?"nenhum perfil":`${t.validCount} v\xE1lido(s)`}}function rP(t){let e=`max-tokens ${t.maxTokens} \xB7 max-iterations ${t.maxIterations}`,o=t.flags.length>0?` \xB7 flags: ${t.flags.join(", ")}`:"";if(t.corrupted)return{id:"config",label:"config",status:"fail",detail:`~/.aluy/config.json corrompido (JSON inv\xE1lido) \u2014 usando defaults \xB7 ${e}${o}`,fix:"conserte ou apague ~/.aluy/config.json (ser\xE1 recriado pelo /theme e /model)."};let n=[];t.theme!==void 0&&n.push(`tema ${t.theme}`),t.tier!==void 0&&n.push(`tier ${t.tier}`);let r=t.exists&&n.length>0?n.join(", "):"defaults",s=t.theme!==void 0&&t.themeKnown===!1,i=t.tier!==void 0&&t.tierKnown===!1;if(s||i){let a=[];return s&&a.push(`tema "${t.theme}" n\xE3o est\xE1 no cat\xE1logo`),i&&a.push(`tier "${t.tier}" desconhecido`),{id:"config",label:"config",status:"warn",detail:`${a.join(" \xB7 ")} \u2014 usando defaults \xB7 ${e}${o}`,fix:s?"rode `/theme` p/ escolher um tema v\xE1lido (dark/light/slate).":"rode `/model` p/ escolher um tier conhecido."}}return{id:"config",label:"config",status:"ok",detail:`${r} \xB7 ${e}${o}`}}function sP(t){return t.responded?{id:"tier",label:"tier (--deep)",status:"ok",detail:`${t.tier} respondeu ao modelo`}:{id:"tier",label:"tier (--deep)",status:"fail",detail:`${t.tier} n\xE3o respondeu${t.error?` \xB7 ${t.error}`:""}`,fix:"o tier n\xE3o respondeu ao modelo \u2014 cheque cr\xE9dito (`/usage`), o broker e o `/model`."}}function iP(t){return{id:"version",label:"vers\xE3o",status:"ok",detail:`aluy ${t.aluy} \xB7 node ${t.node}`}}function aP(t){return t.accessible?{id:"memory",label:"mem\xF3ria",status:"ok",detail:t.count===0?"store ok \xB7 0 fato":`store ok \xB7 ${t.count} fato(s)`}:{id:"memory",label:"mem\xF3ria",status:"fail",detail:"store de mem\xF3ria ileg\xEDvel",fix:"cheque permiss\xF5es de ~/.aluy/ (deve ser 0700, seu)."}}function cP(t){let e=[],o=!1,n=!1;t.headroom.reached&&t.headroom.status!==void 0&&Yl(t.headroom.status)?e.push(`headroom \u2713 (${t.headroom.status})`):t.headroom.reached?(e.push(`headroom \u26A0 (${t.headroom.status??"?"})`),n=!0):(e.push("headroom \u2717 (fora)"),o=!0),t.ollama.reached&&t.ollama.status!==void 0&&Yl(t.ollama.status)?e.push(`ollama \u2713 (${t.ollama.status})`):t.ollama.reached?(e.push(`ollama \u26A0 (${t.ollama.status??"?"})`),n=!0):(e.push("ollama \u2717 (fora)"),o=!0),t.mem0.reached&&t.mem0.status!==void 0&&Yl(t.mem0.status)?e.push(`mem0 \u2713 (${t.mem0.status})`):t.mem0.reached?(e.push(`mem0 \u26A0 (${t.mem0.status??"?"})`),n=!0):(e.push("mem0 \u2717 (fora)"),o=!0);let r=t.toggles.length>0?t.toggles.join(", "):"nenhum";e.push(`perfil ${t.profile.toUpperCase()} (toggles: ${r})`);let s=o?"fail":n?"warn":"ok",i=o?"sidecar(es) fora \u2014 provisione/suba com `aluy bootstrap` (perfil TURBO; mem0/headroom precisam de python3.10+/pip/venv). No boot eles sobem sozinhos se j\xE1 instalados.":n?"sidecar(es) com status inesperado \u2014 cheque os logs do Maestro.":void 0;return{id:"sidecars",label:"sidecars/Maestro",status:s,detail:e.join(" \xB7 "),...i!==void 0?{fix:i}:{}}}function lP(t){return{id:"maestro",label:"Maestro",status:"ok",detail:t.enabled?"ligado":"desligado"}}function dP(t){let e=[ZL(t.auth),eP(t.broker),tP(t.catalog),oP(t.mcp),nP(t.agents),rP(t.config),iP(t.version),aP(t.memory),cP(t.sidecars),lP(t.maestro)];return t.tier!==void 0&&e.push(sP(t.tier)),{checks:e}}function uP(t=!1){let e=[{id:"auth",label:"credencial"},{id:"broker",label:"broker"},{id:"catalog",label:"cat\xE1logo/tiers"},{id:"mcp",label:"MCP"},{id:"agents",label:"perfis de agente"},{id:"config",label:"config"},{id:"version",label:"vers\xE3o"},{id:"memory",label:"mem\xF3ria"},{id:"sidecars",label:"sidecars/Maestro"},{id:"maestro",label:"Maestro"}];return t?[...e,{id:"tier",label:"tier (--deep)"}]:e}function mP(t,e){switch(t){case"auth":return e.auth?ZL(e.auth):void 0;case"broker":return e.broker?eP(e.broker):void 0;case"catalog":return e.catalog?tP(e.catalog):void 0;case"mcp":return e.mcp?oP(e.mcp):void 0;case"agents":return e.agents?nP(e.agents):void 0;case"config":return e.config?rP(e.config):void 0;case"version":return e.version?iP(e.version):void 0;case"memory":return e.memory?aP(e.memory):void 0;case"sidecars":return e.sidecars?cP(e.sidecars):void 0;case"maestro":return e.maestro?lP(e.maestro):void 0;case"tier":return e.tier?sP(e.tier):void 0;default:return}}function fP(t){let e=0,o=0,n=0;for(let r of t)r.status==="ok"?e++:r.status==="warn"?o++:n++;return`${e} ok \xB7 ${o} aviso \xB7 ${n} falha`}function Yl(t){return t>=200&&t<300}function QL(t){return t.reached?t.status!==void 0?String(t.status):"?":"broker fora"}function WV(t){try{return new URL(t).host}catch{return t}}async function pP(t,e){let o=t.probeOverride?.tierTester!==void 0,r=uP(o).map(u=>({id:u.id,label:u.label,status:"pending"})),s=new Map(r.map((u,p)=>[u.id,p]));e({checks:[...r]});let i=t.unsafe===!0?["--yolo"]:[],a={...t.env!==void 0?{env:t.env}:{},...t.workspaceRoot!==void 0?{workspaceRoot:t.workspaceRoot}:{},getAccessToken:()=>t.login.getAccessToken(),memory:t.memory,extraFlags:i,...t.probeOverride??{},onCheck:(u,p)=>{let h=mP(u,p),y=s.get(u);h&&y!==void 0&&(r[y]={id:u,label:h.label,status:h.status,...h.detail!==void 0?{detail:h.detail}:{},...h.fix!==void 0?{fix:h.fix}:{}},e({checks:[...r]}))}},c=await JL(a),l=dP(c),f={checks:l.checks.map(u=>({id:u.id,label:u.label,status:u.status,detail:u.detail,...u.fix!==void 0?{fix:u.fix}:{}})),summary:fP(l.checks)};return e(f),f}U();var GV='Responda apenas com a palavra "ok".',zV=8;async function hP(t){let e=t.env??process.env,{brokerBaseUrl:o}=Gn(e),n=Da({brokerBaseUrl:o,login:t.login,...t.fetch?{fetch:t.fetch}:{}}),r=new nn({client:n,tier:t.tier,...t.tier==="custom"&&t.model!==void 0?{model:t.model}:{},maxTokens:zV}),s=new AbortController,i=setTimeout(()=>s.abort(),t.timeoutMs??2e4);try{return typeof(await r.call({messages:[{role:"user",content:GV}],idempotencyKey:`doctor-deep-${Date.now()}`,signal:s.signal})).content=="string"?{tier:t.tier,responded:!0}:{tier:t.tier,responded:!1,error:"resposta vazia do broker"}}catch(a){return{tier:t.tier,responded:!1,error:KV(a)}}finally{clearTimeout(i)}}function KV(t){return t instanceof Error?t.message:String(t)}U();import{homedir as yP}from"node:os";import{join as rx}from"node:path";var nx={title:"mcp",lines:["uso: /mcp add <nome> [--env K=V]... [--force] -- <command> [args...]","ex.: /mcp add pw -- npx -y @playwright/mcp","use REFER\xCANCIA no --env (--env TOKEN=$MEU_TOKEN) \u2014 nunca segredo literal."]};function YV(t){return{title:"mcp",lines:[`uso: /mcp ${t} <nome>`]}}function bP(t){let e=t.trim().split(/\s+/).filter(f=>f.length>0),o=e[0]?.toLowerCase();if(o===void 0)return null;if(o==="remove"||o==="rm"||o==="disable"||o==="enable"){let f=o==="rm"?"remove":o,u=e[1];return u===void 0||e.length>2?{kind:"usage",note:YV(f)}:{kind:f,name:u}}if(o!=="add")return null;let n=e.slice(1),r=[],s=[],i=!1,a=null;for(let f=0;f<n.length;f++){let u=n[f];if(u==="--"){a=n.slice(f+1);break}if(u==="--force"){i=!0;continue}if(u==="--env"||u.startsWith("--env=")){let p=u==="--env"?n[++f]:u.slice(6),h=p===void 0?void 0:VV(p);if(h===void 0)return{kind:"usage",note:nx};r.push(h);continue}s.push(u)}let c=s[0];if(c===void 0)return{kind:"usage",note:nx};let l=a??s.slice(1),d=l[0];return d===void 0||d.trim().length===0?{kind:"usage",note:nx}:{kind:"add",name:c,command:d,args:l.slice(1),env:r,force:i}}function VV(t){let e=t.indexOf("=");if(!(e<=0))return[t.slice(0,e),t.slice(e+1)]}var sx="reinicie a sess\xE3o (ou use /mcp reload quando existir) p/ carregar as tools \u2014 a descoberta \xE9 no boot.";function vP(t,e={}){if(t.kind==="usage")return t.note;let o=e.aluyHome??rx(yP(),".aluy"),n=new zl({file:rx(o,Tf)});try{switch(t.kind){case"add":return XV(t,n);case"remove":return JV(t.name,n,e);case"disable":return gP(t.name,!0,n,e);case"enable":return gP(t.name,!1,n,e)}}catch(r){return{title:"mcp",lines:[`\u26A0 ${r instanceof oo?r.message:String(r)}`]}}}function XV(t,e){let o=[],n={};for(let[i,a]of t.env)Py(i,a).looksLikeSecret&&o.push(`\u26A0 --env ${i} parece um SEGREDO literal \u2014 o mcp.json \xE9 leg\xEDvel e N\xC3O deve carregar credencial. Prefira refer\xEAncia (--env ${i}=$NOME_DA_VAR). Gravando assim mesmo.`),n[i]=a;let r={name:t.name,command:t.command,args:t.args,env:n},{replaced:s}=e.add(r,{force:t.force});return o.push(`${s?"atualizado":"adicionado"} "${t.name}" em ~/.aluy/mcp.json: ${t.command}${t.args.length?" "+t.args.join(" "):""}`),o.push(sx),o.push("o server passa pela catraca no runtime (conectar = confirma\xE7\xE3o)."),{title:"mcp",lines:o}}function JV(t,e,o){let{removed:n}=e.remove(t);return n?{title:"mcp",lines:[`removido "${t}" de ~/.aluy/mcp.json.`,sx]}:{title:"mcp",lines:kP(t,o)}}function gP(t,e,o,n){let{found:r}=o.setDisabled(t,e);return r?e?{title:"mcp",lines:[`desativado "${t}" (disabled: true em ~/.aluy/mcp.json) \u2014 instalado, mas a`,"descoberta o PULA. se est\xE1 conectado nesta sess\xE3o, desconecta no pr\xF3ximo boot.","reative com /mcp enable "+t+"."]}:{title:"mcp",lines:[`reativado "${t}" em ~/.aluy/mcp.json.`,sx]}:{title:"mcp",lines:kP(t,n)}}function kP(t,e){let o=[`server "${t}" n\xE3o est\xE1 em ~/.aluy/mcp.json (onde o aluy escreve).`],n=e.codexHome??rx(yP(),".codex");try{new er({baseDir:n}).load().config.servers.some(s=>s.name===t)&&o.push(`"${t}" vem do Codex (~/.codex/config.toml) \u2014 o aluy N\xC3O o gerencia; edite o config.toml \xE0 m\xE3o.`)}catch{}return o}U();function ix(t){return t==="thinking"||t==="streaming"||t==="asking"}function xP(t){return t==="boot"||t==="idle"||t==="done"||t==="error"}var QV=5e3;function SP(t,e){let o=e.port,n=e.longTurnMs??QV,r=e.now??Date.now,s=null,i=null;return t(c=>{let l=c.phase;if(s===null){s=l,ix(l)&&(i=r());return}if(l!==s){if(ix(l)&&xP(s)&&(i=r()),l==="asking"&&s!=="asking"&&o.notify("attention"),(l==="done"||l==="budget")&&ix(s)){let d=i;d!==null&&r()-d>=n&&o.notify("done")}xP(l)&&(i=null),s=l}})}U();var Vl=class{journal;redoStack=[];cursor=null;constructor(e){this.journal=e.journal}syncCursor(){let e=[...this.journal.list()];return this.cursor===null?this.cursor=e.length:this.cursor>e.length&&(this.cursor=e.length),e}async undo(e=!1){let o=this.syncCursor(),n=this.cursor??o.length;if(n<=0)return Fr("undo",["nada para desfazer \u2014 a pilha de edi\xE7\xF5es est\xE1 vazia."]);let r=[];for(;n>0;){let s=o[n-1];if(s.kind==="barrier"){r.push(`\u26A0 aqui rodou \`${It(s.command)}\` \u2014 efeito de shell N\xC3O \xE9 revers\xEDvel (n\xE3o desfeito).`),n-=1,this.cursor=n;continue}let i=s.targets[0];if(!i){n-=1,this.cursor=n;continue}if(!e&&(await this.journal.checkConcurrency(s)).diverged)return{kind:"confirm",note:{title:"undo \u2014 confirmar",lines:[...r,`o arquivo \`${i.path}\` mudou desde a edi\xE7\xE3o do agente (hash divergiu).`,"desfazer agora SOBRESCREVE essas mudan\xE7as externas com o conte\xFAdo anterior.","rode /undo de novo p/ confirmar a revers\xE3o, ou deixe como est\xE1."]},proceed:()=>this.undo(!0)};let a;try{a=await this.journal.restore(s)}catch(d){let f=d instanceof Error?d.message:"falha desconhecida";return Fr("undo \u2014 falhou",[...r,`n\xE3o foi poss\xEDvel reverter \`${i.path}\`: ${f}`,"nada foi escrito (a revers\xE3o \xE9 confinada e fail-safe)."])}this.pushRedo(s,i.path,i.createdByEdit),n-=1,this.cursor=n;let c=a.action==="removed"?`revertido (arquivo removido \u2014 era novo): \`${i.path}\``:`revertido: \`${i.path}\``,l=this.undoDepth(o,n);return Fr("undo",[...r,c,`pilha: ${l} edi\xE7\xE3o(\xF5es) ainda revers\xEDvel(eis) \xB7 ${this.redoStack.length} para refazer.`])}return Fr("undo",[...r,r.length>0?"n\xE3o h\xE1 mais edi\xE7\xF5es de arquivo para reverter abaixo das barreiras.":"nada para desfazer."])}async redo(){let e=this.redoStack.pop();if(!e)return Fr("redo",["nada para refazer \u2014 n\xE3o h\xE1 undo recente."]);let o=this.journal.appliedContent(e.entry.seq);if(!o)return this.redoStack.push(e),Fr("redo",["n\xE3o foi poss\xEDvel refazer: o conte\xFAdo aplicado n\xE3o est\xE1 dispon\xEDvel nesta sess\xE3o."]);let n;try{n=await this.journal.reapply(e.path,o.after)}catch(r){let s=r instanceof Error?r.message:"falha desconhecida";return this.redoStack.push(e),Fr("redo \u2014 falhou",[`n\xE3o foi poss\xEDvel reaplicar \`${e.path}\`: ${s}`,"nada foi escrito (reaplica\xE7\xE3o confinada e fail-safe)."])}return this.cursor!==null&&(this.cursor+=1),Fr("redo",[`reaplicado: \`${e.path}\` (${n?"reaplicado":"ok"})`,`pilha: ${this.redoStack.length} ainda para refazer.`])}undoDepth(e,o){let n=0;for(let r=0;r<o;r++)e[r].kind==="edit"&&(n+=1);return n}pushRedo(e,o,n){this.redoStack.push({entry:e,path:o,createdByEdit:n})}};function Fr(t,e){return{kind:"note",note:{title:t,lines:e}}}U();function ZV(t){return t==="thinking"||t==="streaming"||t==="asking"}function Mf(t,e){let o=pt(e.config,"turn-end"),n=pt(e.config,"notification");if(o.length===0&&n.length===0)return()=>{};let r=null;return t(i=>{let a=i.phase;if(r===null){r=a;return}a!==r&&(o.length>0&&(a==="done"||a==="budget")&&ZV(r)&&e.runner.runAll(o),n.length>0&&a==="asking"&&r!=="asking"&&e.runner.runAll(n),r=a)})}U();function wP(t){let e=pt(t.config,"pre-tool").length>0,o=pt(t.config,"post-tool").length>0;if(!e&&!o)return;let n={};return e&&(n.onToolStart=r=>{let s=pt(t.config,"pre-tool",r.name);s.length>0&&t.runner.runAll(s)}),o&&(n.onToolEnd=r=>{let s=pt(t.config,"post-tool",r.name);s.length>0&&t.runner.runAll(s)}),n}var eX="\x1B[?1049h",tX="\x1B[?1049l",oX="\x1B[?25l",nX="\x1B[?25h",rX=["exit","SIGINT","SIGTERM","uncaughtException","unhandledRejection"];function ax(t){try{t.write(`${eX}${oX}`)}catch{}}function AP(t,e){let o=!1,n=!1,r=()=>{if(!o){o=!0;try{let y=e.stdin??globalThis.process?.stdin;y?.isTTY===!0&&(y.setRawMode?.(!1),y.pause?.())}catch{}try{t.isTTY===!0&&t.setRawMode?.(!1)}catch{}try{t.isTTY===!0&&t.write(`${tX}${nX}`)}catch{}}},s=()=>r(),i=y=>()=>{r(),p();try{e.kill?.(e.pid??0,y)}catch{}},a=y=>{r(),p();let g=()=>{throw y instanceof Error?y:new Error(String(y))},w=e.nextTick??globalThis.process?.nextTick;typeof w=="function"?w(g):g()},c=i("SIGINT"),l=i("SIGTERM"),d={exit:s,SIGINT:c,SIGTERM:l,uncaughtException:a,unhandledRejection:a},f=rX.map(y=>[y,d[y]]),u=!0,p=()=>{if(u){u=!1;for(let[y,g]of f)try{e.removeListener(y,g)}catch{}}};for(let[y,g]of f)e.on(y,g);return{restoreScreen:r,dispose:()=>{n||(n=!0,p(),r())}}}function EP(t,e){t.on("SIGINT",e),t.on("SIGTERM",e);let o=!1;return{dispose(){o||(o=!0,t.removeListener("SIGINT",e),t.removeListener("SIGTERM",e))}}}U();function gt(t){return Ue(t)}function sX(t){switch(t.kind){case"testrun":{let e=t.score;return e.unknownFormat?["## testes","","placar indispon\xEDvel (formato n\xE3o reconhecido)",""]:["## testes","",`${e.passed} \u2713 \xB7 ${e.failed} \u2717 \xB7 ${e.total} total`,""]}case"you":return["## voc\xEA","",gt(t.text),""];case"aluy":return t.selfCheck?[]:["## aluy","",gt(fr(t.text)),""];case"tool":{let e=`- \`${gt(t.verb)} ${gt(t.target)}\` \u2192 ${gt(t.result)} (${t.status})`,o=t.output??t.liveOutput,n=o?["","```",gt(o),"```"]:[];return[e,...n,""]}case"bang":{let e=`- \`! ${gt(t.command)}\` (${t.status})`,o=t.output??t.liveOutput,n=o?["","```",gt(o),"```"]:[];return[e,...n,""]}case"deny":return[`- (negado) \`${gt(t.verb)} ${gt(t.exact)}\``,""];case"subagents":return[`- sub-agentes: ${t.children.map(e=>`${gt(e.label)} (${e.status})`).join(", ")}`,""];case"broker-error":return[`> erro de broker: ${gt(t.headline??t.message)}`,""];case"note":return[`> ${gt(t.title)}`,...t.lines.map(e=>`> ${gt(e)}`),""];case"inject":return[`> (encaixado) ${gt(t.text)}`,""];case"doctor":return[`> doctor: ${t.checks.map(e=>`${gt(e.label)} ${e.status}`).join(" \xB7 ")}`,""]}}function TP(t,e={}){let o=e.exportedAt??new Date().toISOString(),n=["# Aluy Cli \u2014 transcript",""],r=[];e.label!==void 0&&e.label!==""&&r.push(`sess\xE3o: ${gt(e.label)}`),e.sessionId!==void 0&&e.sessionId!==""&&r.push(`id: ${e.sessionId}`),e.tier!==void 0&&e.tier!==""&&r.push(`tier: ${gt(e.tier)}`),r.push(`exportado: ${o}`),n.push(`> ${r.join(" \xB7 ")}`,""),n.push("> por seguran\xE7a, eventuais segredos foram substitu\xEDdos por \u2039redigido\u203A.","","---","");for(let i of t)for(let a of sX(i))n.push(a);let s=n.join(`
572
573
  `);return s=s.replace(/\n{3,}/g,`
573
574
 
574
575
  `).replace(/\n+$/,"")+`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hiperplano/aluy-cli",
3
- "version": "1.0.0-rc.21",
3
+ "version": "1.0.0-rc.22",
4
4
  "description": "Aluy CLI — TUI (Ink) + binário `aluy` + wiring. Consome @hiperplano/aluy-cli-core (engine portável). Credenciais só no keychain do SO.",
5
5
  "type": "module",
6
6
  "license": "SEE LICENSE IN LICENSE",