smolerclaw 1.2.3 → 1.3.1

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.
Files changed (2) hide show
  1. package/dist/index.js +289 -211
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,20 +1,25 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- var t6=Object.defineProperty;var e6=($)=>$;function $3($,Z){this[$]=e6.bind(null,Z)}var Z3=($,Z)=>{for(var Y in Z)t6($,Y,{get:Z[Y],enumerable:!0,configurable:!0,set:$3.bind(Z,Y)})};var l7=($,Z)=>()=>($&&(Z=$($=0)),Z);import{existsSync as x$,mkdirSync as e0,readFileSync as Q8,writeFileSync as o1,renameSync as s7,statSync as z3}from"fs";import{join as K$,dirname as t7,relative as V3}from"path";import{createHash as G3,randomUUID as e7}from"crypto";function Q5($,Z){if(D$=$,J5=Z,r=K$($,".backup"),H3(),Z2=!0,Q1=x$(K$(r,".git")),Q1)$2=B3()}function a1(){return Z2}function P($,Z){let Y=t7($);if(!x$(Y))e0(Y,{recursive:!0});let J=K$(Y,`.smolerclaw-${e7().slice(0,8)}.tmp`);if(o1(J,Z),s7(J,$),Z2){let Q=U3($);if(Q&&X8.includes(Q))W3(Q,Z)}}function X5($){return G3("sha256").update($).digest("hex")}function W3($,Z){let Y=X5(Z),J=new Date().toISOString(),Q=Buffer.byteLength(Z,"utf-8");v$=[...v$.filter((X)=>X.file!==$),{file:$,sha256:Y,size:Q,updatedAt:J}],q3()}function H3(){let $=K$(D$,Z5);if(!x$($)){v$=[];return}try{let Z=JSON.parse(Q8($,"utf-8"));if(Z.version!==$5){v$=[];return}v$=Z.checksums||[]}catch{v$=[]}}function q3(){if(!D$)return;let $=K$(D$,Z5),Z={checksums:v$,version:$5},Y=K$(D$,`.vault-${e7().slice(0,8)}.tmp`);o1(Y,JSON.stringify(Z,null,2)),s7(Y,$)}function U3($){try{let Z=V3(D$,$).replace(/\\/g,"/");if(Z.startsWith("..")||Z.startsWith("/"))return null;return Z}catch{return null}}function K8(){let $=[],Z=0;for(let Y of X8){let J=K$(D$,Y),Q=x$(J);if(!Q){$.push({file:Y,exists:!1,checksumValid:null,size:0,lastModified:""});continue}let X=0,K="";try{let H=z3(J);X=H.size,K=H.mtime.toISOString()}catch{}let V=v$.find((H)=>H.file===Y),G=null;if(V)try{let H=Q8(J,"utf-8");if(G=X5(H)===V.sha256,!G)Z++}catch{G=!1,Z++}$.push({file:Y,exists:Q,checksumValid:G,size:X,lastModified:K})}return{files:$,lastBackup:$2,backupEnabled:Q1,totalFiles:$.filter((Y)=>Y.exists).length,corruptFiles:Z}}function z8($){let Z=["=== Vault Status ==="],Y=$.corruptFiles===0?"OK":`ATENCAO (${$.corruptFiles} corrompido(s))`;if(Z.push(`Integridade: ${Y}`),Z.push(`Arquivos rastreados: ${$.totalFiles}/${X8.length}`),Z.push(`Backup: ${$.backupEnabled?"ativado":"desativado"}`),$.lastBackup)Z.push(`Ultimo backup: ${new Date($.lastBackup).toLocaleString("pt-BR")}`);Z.push(`
4
- --- Arquivos ---`);for(let J of $.files){if(!J.exists){Z.push(` ${J.file.padEnd(30)} (nao existe)`);continue}let Q=(J.size/1024).toFixed(1),X=J.checksumValid===null?"?":J.checksumValid?"OK":"CORROMPIDO",K=J.lastModified?new Date(J.lastModified).toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit",hour:"2-digit",minute:"2-digit"}):"";Z.push(` ${J.file.padEnd(30)} ${Q.padStart(8)} KB [${X}] ${K}`)}return Z.join(`
5
- `)}async function V8(){if(!D$)return"Error: vault not initialized.";if(!x$(r))e0(r,{recursive:!0});let $=["# Sensitive \u2014 never backup","*.credentials.json","*.tmp",".vault-*.tmp",".smolerclaw-*.tmp","","# Large/transient","rag/","sessions/archive/",""].join(`
6
- `);if(o1(K$(r,".gitignore"),$),!x$(K$(r,".git"))){let Z=await g$(["git","init","-b",Y5],r);if(!Z.ok)return`Error: git init failed: ${Z.stderr}`;await g$(["git","config","user.email","vault@smolerclaw.local"],r),await g$(["git","config","user.name","smolerclaw-vault"],r)}return Q1=!0,"Shadow backup inicializado."}async function O1($){if(!Q1)return"Backup nao ativado. Use vault_init_backup primeiro.";try{for(let X of X8){let K=K$(D$,X);if(!x$(K))continue;let V=K$(r,X),G=t7(V);if(!x$(G))e0(G,{recursive:!0});o1(V,Q8(K,"utf-8"))}let Z=K$(J5,"config.json");if(x$(Z))o1(K$(r,"config.json"),Q8(Z,"utf-8"));if(await g$(["git","add","-A"],r),!(await g$(["git","status","--porcelain"],r)).stdout.trim())return"Nenhuma mudanca para backup.";let J=$||`backup ${new Date().toISOString().slice(0,19)}`,Q=await g$(["git","commit","-m",J],r);if(!Q.ok)return`Backup commit falhou: ${Q.stderr}`;return $2=new Date().toISOString(),`Backup concluido: ${J}`}catch(Z){return`Backup falhou: ${Z instanceof Error?Z.message:String(Z)}`}}async function G8(){if(!Q1)return"Backup nao ativado.";if(!(await g$(["git","remote","-v"],r)).stdout.trim())return"Nenhum remote configurado. Use: git -C <backup-dir> remote add origin <url>";let Z=await g$(["git","push","-u","origin",Y5],r);if(!Z.ok)return`Push falhou: ${Z.stderr}`;return"Sync concluido \u2014 dados enviados para o remote."}function B3(){try{let $=Bun.spawnSync(["git","log","-1","--format=%aI"],{cwd:r,stdout:"pipe",stderr:"pipe"});return new TextDecoder().decode($.stdout).trim()||null}catch{return null}}async function g$($,Z){let Y=Bun.spawn($,{stdout:"pipe",stderr:"pipe",cwd:Z}),[J,Q]=await Promise.all([new Response(Y.stdout).text(),new Response(Y.stderr).text()]),X=await Y.exited;return{stdout:J.trim(),stderr:Q.trim(),ok:X===0}}function K5($=30){if(Y2(),!Q1)return;J8=setInterval(()=>{O1("auto-backup").catch(()=>{})},$*60*1000)}function Y2(){if(J8)clearInterval(J8),J8=null}var $5=1,Z5="vault-checksums.json",Y5="smolerclaw-backup",X8,D$="",J5="",v$,r="",Q1=!1,$2=null,Z2=!1,J8=null;var t=l7(()=>{X8=["config.json","memos.json","materials.json","decisions.json","tasks.json","finance.json","people.json","projects.json","work-sessions.json","opportunities.json","workflows.json","news-feeds.json","rag/rag-index.json"],v$=[]});var X7={};Z3(X7,{searchInvestigations:()=>Z7,openInvestigation:()=>a2,listInvestigations:()=>$7,initInvestigations:()=>o2,getInvestigation:()=>e2,generateReport:()=>Y7,formatInvestigationList:()=>K0,formatInvestigationDetail:()=>J7,formatEvidenceDetail:()=>UJ,collectEvidence:()=>r2,closeInvestigation:()=>t2,addFinding:()=>s2});import{existsSync as p9,mkdirSync as VJ,readFileSync as GJ}from"fs";import{join as WJ}from"path";import{randomUUID as HJ}from"crypto";function X0(){P(n9(),JSON.stringify($$,null,2))}function qJ(){let $=n9();if(!p9($)){$$=[];return}try{$$=JSON.parse(GJ($,"utf-8"))}catch{$$=[]}}function o2($){if(l9=$,!p9($))VJ($,{recursive:!0});qJ()}function a2($,Z,Y,J=[]){let Q=new Date().toISOString(),X={id:Q7(),title:$.trim(),type:Z,status:"aberta",hypothesis:Y?.trim(),tags:J.map((K)=>K.toLowerCase()),evidence:[],findings:[],created:Q,updated:Q};return $$=[...$$,X],X0(),X}function r2($,Z,Y,J,Q){let X=p4($);if(!X)return null;let K=J.trim();if(K.length>u9)K=K.slice(0,u9)+`
7
- ...(truncated, ${J.length} total chars)`;let V={id:Q7(),source:Z,label:Y.trim(),content:K,path:Q?.trim(),timestamp:new Date().toISOString()},G={...X,evidence:[...X.evidence,V],status:X.status==="aberta"?"em_andamento":X.status,updated:new Date().toISOString()};return $$=$$.map((H)=>H.id===X.id?G:H),X0(),V}function s2($,Z,Y,J,Q=[]){let X=p4($);if(!X)return null;let K=Q.filter((H)=>X.evidence.some((z)=>z.id===H)),V={id:Q7(),severity:Z,title:Y.trim(),description:J.trim(),evidence_ids:K,timestamp:new Date().toISOString()},G={...X,findings:[...X.findings,V],updated:new Date().toISOString()};return $$=$$.map((H)=>H.id===X.id?G:H),X0(),V}function t2($,Z,Y){let J=p4($);if(!J)return null;let Q={...J,status:"concluida",summary:Z.trim(),recommendations:Y?.trim(),updated:new Date().toISOString()};return $$=$$.map((X)=>X.id===J.id?Q:X),X0(),Q}function e2($){return p4($)}function $7($,Z,Y=20){let J=[...$$];if($)J=J.filter((Q)=>Q.status===$);if(Z)J=J.filter((Q)=>Q.type===Z);return J.sort((Q,X)=>new Date(X.updated).getTime()-new Date(Q.updated).getTime()).slice(0,Y)}function Z7($){let Z=$.toLowerCase();return $$.filter((Y)=>Y.title.toLowerCase().includes(Z)||Y.hypothesis?.toLowerCase().includes(Z)||Y.tags.some((J)=>J.includes(Z))||Y.findings.some((J)=>J.title.toLowerCase().includes(Z))||Y.summary?.toLowerCase().includes(Z)).sort((Y,J)=>new Date(J.updated).getTime()-new Date(Y.updated).getTime())}function Y7($){let Z=p4($);if(!Z)return null;let Y=[],J=(K)=>new Date(K).toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit",year:"numeric",hour:"2-digit",minute:"2-digit"}),Q={bug:"Bug / Mal funcionamento",feature:"Construcao de funcionalidade",test:"Material para testes",audit:"Auditoria",incident:"Incidente"},X={critical:0,high:1,medium:2,low:3,info:4};if(Y.push(`# Investigacao: ${Z.title}`),Y.push(""),Y.push(`**Tipo:** ${Q[Z.type]}`),Y.push(`**Status:** ${Z.status}`),Y.push(`**Abertura:** ${J(Z.created)}`),Y.push(`**Ultima atualizacao:** ${J(Z.updated)}`),Z.tags.length)Y.push(`**Tags:** ${Z.tags.join(", ")}`);if(Y.push(`**ID:** ${Z.id}`),Z.hypothesis)Y.push(""),Y.push("## Hipotese"),Y.push(Z.hypothesis);if(Z.evidence.length>0){Y.push(""),Y.push(`## Evidencias (${Z.evidence.length})`);for(let K of Z.evidence){let V=J(K.timestamp);Y.push(""),Y.push(`### [${K.id}] ${K.label}`),Y.push(`- Fonte: ${K.source}${K.path?` (${K.path})`:""}`),Y.push(`- Coletada: ${V}`);let G=K.content.length>2000?K.content.slice(0,2000)+`
8
- ... (truncado)`:K.content;Y.push("```"),Y.push(G),Y.push("```")}}if(Z.findings.length>0){let K=[...Z.findings].sort((V,G)=>(X[V.severity]??4)-(X[G.severity]??4));Y.push(""),Y.push(`## Conclusoes (${Z.findings.length})`);for(let V of K){let G=o9(V.severity);if(Y.push(""),Y.push(`### ${G} ${V.title}`),Y.push(V.description),V.evidence_ids.length>0)Y.push(`- Evidencias: ${V.evidence_ids.join(", ")}`)}}if(Z.summary)Y.push(""),Y.push("## Resumo"),Y.push(Z.summary);if(Z.recommendations)Y.push(""),Y.push("## Recomendacoes"),Y.push(Z.recommendations);return Y.join(`
9
- `)}function K0($){if($.length===0)return"Nenhuma investigacao encontrada.";let Z=$.map((Y)=>{let J=new Date(Y.updated).toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit"}),Q=i9(Y.status),X=Y.evidence.length,K=Y.findings.length,V=Y.tags.length>0?` [${Y.tags.join(", ")}]`:"";return` ${Q} [${J}] ${Y.title} (${Y.type}) \u2014 ${X} ev, ${K} concl${V} {${Y.id}}`});return`Investigacoes (${$.length}):
3
+ var TY=Object.defineProperty;var IY=($)=>$;function AY($,Z){this[$]=IY.bind(null,Z)}var zZ=($,Z)=>{for(var J in Z)TY($,J,{get:Z[J],enumerable:!0,configurable:!0,set:AY.bind(Z,J)})};var d4=($,Z)=>()=>($&&(Z=$($=0)),Z);import{existsSync as kY,appendFileSync as bY,mkdirSync as FH}from"fs";import{join as WZ}from"path";import{homedir as yY}from"os";function F8($,Z,J){if(!c7)return;let Y=new Date().toISOString(),Q=J?`[${Y}] [${$}] ${Z} ${JSON.stringify(J)}
4
+ `:`[${Y}] [${$}] ${Z}
5
+ `;try{bY(fY,Q)}catch{}}function BZ($){if($.startsWith('"')&&$.endsWith('"')||$.startsWith("'")&&$.endsWith("'"))return $;return`'${$.replace(/'/g,"''")}'`}function NZ($){let Z=$.replace(/\//g,"\\");return BZ(Z)}async function g0($){let Z=f0.get($.toLowerCase());if(Z)return Z;if($.includes("\\")||$.includes("/")){if(kY($)){let Y={exists:!0,path:$};return f0.set($.toLowerCase(),Y),Y}return{exists:!1,error:`File not found: ${$}`}}let J=`(Get-Command '${$}' -ErrorAction SilentlyContinue).Source`;try{let Y=await z$(J,{timeout:5000});if(Y.exitCode===0&&Y.stdout.trim()){let X={exists:!0,path:Y.stdout.trim()};return f0.set($.toLowerCase(),X),X}let Q={exists:!1,error:`'${$}' not found in PATH`};return f0.set($.toLowerCase(),Q),Q}catch(Y){return{exists:!1,error:Y instanceof Error?Y.message:String(Y)}}}async function z$($,Z={}){let{timeout:J=UZ,cwd:Y,debug:Q=c7,sta:X=!1}=Z,K=performance.now(),V=`[Console]::OutputEncoding = [System.Text.Encoding]::UTF8; ${$}`,G=["powershell",...hY];if(X)G.push("-STA");if(G.push("-Command",V),Q)F8("INFO","Executing PowerShell command",{command:$.slice(0,500),timeout:J,cwd:Y,sta:X});let H;try{H=Bun.spawn(G,{stdout:"pipe",stderr:"pipe",cwd:Y})}catch(U){let M={stdout:"",stderr:`Failed to spawn PowerShell: ${U instanceof Error?U.message:String(U)}`,exitCode:1,duration:Math.round(performance.now()-K),timedOut:!1};if(Q)F8("ERROR","Failed to spawn process",{error:M.stderr});return M}let z=!1,B=setTimeout(()=>{z=!0;try{H.kill()}catch{}},J);try{let[U,M]=await Promise.all([H.stdout instanceof ReadableStream?new Response(H.stdout).text():"",H.stderr instanceof ReadableStream?new Response(H.stderr).text():""]),O=await H.exited;clearTimeout(B);let P=Math.round(performance.now()-K),T={stdout:h0(U),stderr:h0(M),exitCode:z?-1:O,duration:P,timedOut:z};if(Q)F8(T.exitCode===0?"INFO":"WARN","Command completed",{exitCode:T.exitCode,duration:P,timedOut:z,stdoutLength:T.stdout.length,stderrLength:T.stderr.length});return T}catch(U){clearTimeout(B);let M={stdout:"",stderr:`Execution error: ${U instanceof Error?U.message:String(U)}`,exitCode:1,duration:Math.round(performance.now()-K),timedOut:z};if(Q)F8("ERROR","Execution failed",{error:M.stderr,timedOut:z});return M}}async function MZ($,Z={}){let Y=`& ${NZ($)}`;return z$(Y,Z)}async function u7($,Z={}){let{timeout:J=UZ,cwd:Y,debug:Q=c7}=Z,X=performance.now();if(Q)F8("INFO","Executing command",{args:$,timeout:J,cwd:Y});let K;try{K=Bun.spawn($,{stdout:"pipe",stderr:"pipe",cwd:Y})}catch(H){return{stdout:"",stderr:`Failed to spawn: ${H instanceof Error?H.message:String(H)}`,exitCode:1,duration:Math.round(performance.now()-X),timedOut:!1}}let V=!1,G=setTimeout(()=>{V=!0;try{K.kill()}catch{}},J);try{let[H,z]=await Promise.all([K.stdout instanceof ReadableStream?new Response(K.stdout).text():"",K.stderr instanceof ReadableStream?new Response(K.stderr).text():""]),B=await K.exited;return clearTimeout(G),{stdout:h0(H),stderr:h0(z),exitCode:V?-1:B,duration:Math.round(performance.now()-X),timedOut:V}}catch(H){return clearTimeout(G),{stdout:"",stderr:`Execution error: ${H instanceof Error?H.message:String(H)}`,exitCode:1,duration:Math.round(performance.now()-X),timedOut:V}}}async function d7($,Z={}){return z$($,{...Z,sta:!0})}async function m0($,Z,J=[],Y={}){let Q=["schtasks",`/${$}`,"/TN",Z,...J],X=Y.timeout??1e4;return u7(Q,{...Y,timeout:X})}async function l7($,Z,J={}){let Y=BZ($),Q=Z?`Start-Process ${Y} -ArgumentList '${Z.replace(/'/g,"''")}'`:`Start-Process ${Y}`;return z$(Q,J)}async function CZ($,Z={}){let J=NZ($);return z$(`Invoke-Item ${J}`,Z)}async function $4($,Z,J={}){let Y=qZ($),Q=qZ(Z),X=["[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] | Out-Null","[Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom.XmlDocument, ContentType = WindowsRuntime] | Out-Null",`$template = '<toast><visual><binding template="ToastText02"><text id="1">${Y}</text><text id="2">${Q}</text></binding></visual><audio src="ms-winsoundevent:Notification.Default"/></toast>'`,"$xml = New-Object Windows.Data.Xml.Dom.XmlDocument","$xml.LoadXml($template)","$toast = [Windows.UI.Notifications.ToastNotification]::new($xml)",'[Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier("smolerclaw").Show($toast)'].join("; "),K=J.timeout??1e4;return z$(X,{...J,timeout:K})}async function p0($,Z={}){let Y=`(Get-Process -Name '${$.replace(/'/g,"''")}' -ErrorAction SilentlyContinue) -ne $null`;return(await z$(Y,{...Z,timeout:Z.timeout??5000})).stdout.trim().toLowerCase()==="true"}async function jZ($=15,Z={}){let J=`Get-Process | Where-Object {$_.MainWindowTitle -ne ''} | Sort-Object -Property WorkingSet64 -Descending | Select-Object -First ${$} Name, @{N='Memory(MB)';E={[math]::Round($_.WorkingSet64/1MB,1)}}, MainWindowTitle | Format-Table -AutoSize | Out-String -Width 200`;return z$(J,Z)}function h0($){let Z=$.replace(_Y,"");if(Z.length>HZ)return Z.slice(0,HZ)+`
6
+ ... (truncated, ${Z.length} total chars)`;return Z}function qZ($){return $.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}function OZ($){return $.replace(/"/g,'""').replace(/`/g,"``").replace(/\$/g,"`$")}var UZ=15000,HZ=1e5,_Y,vY,fY,hY,c7=!1,f0;var Z4=d4(()=>{_Y=/[\x1b\x9b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nq-uy=><~]/g,vY=WZ(yY(),".smolerclaw","logs"),fY=WZ(vY,"windows-executor.log"),hY=["-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass"];f0=new Map});import{existsSync as gY}from"fs";function l4(){if(I)return["powershell","-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-Command"];let $=process.env.SHELL;if($&&gY($))return[$,"-c"];return["bash","-c"]}function EZ(){if(I)return"powershell";return(process.env.SHELL||"/bin/bash").split("/").pop()||"bash"}async function mY($){if(I)return(await g0($)).exists;try{return(await u7(["which",$],{timeout:5000})).exitCode===0}catch{return!1}}async function RZ(){if(c0!==null)return c0;return c0=await mY("rg"),c0}function o7($){let Z=$.replace(/\\/g,"/");return E8.some((J)=>Z.includes(`/${J}/`)||Z.startsWith(`${J}/`))}var I,FZ,AH,c0=null,E8;var e=d4(()=>{Z4();I=process.platform==="win32",FZ=process.platform==="darwin",AH=process.platform==="linux";E8=["node_modules",".git","dist","build",".next","__pycache__",".venv","target",".cache"]});import{EventEmitter as pY}from"events";class LZ{emitter;listeners=new Map;debug;errorHandlers=[];constructor($={}){this.emitter=new pY,this.emitter.setMaxListeners($.maxListeners??20),this.debug=$.debug??!!process.env.DEBUG}on($,Z,J={}){let Y={listener:Z,once:!1,async:J.async??!1},Q=this.listeners.get($)??[];if(Q.push(Y),this.listeners.set($,Q),this.debug)console.log(`[event-bus] Registered listener for '${$}'`);return()=>this.off($,Z)}once($,Z,J={}){let Y={listener:Z,once:!0,async:J.async??!1},Q=this.listeners.get($)??[];if(Q.push(Y),this.listeners.set($,Q),this.debug)console.log(`[event-bus] Registered once listener for '${$}'`);return()=>this.off($,Z)}off($,Z){let J=this.listeners.get($);if(!J)return;let Y=J.filter((Q)=>Q.listener!==Z);if(Y.length===0)this.listeners.delete($);else this.listeners.set($,Y);if(this.debug)console.log(`[event-bus] Removed listener from '${$}'`)}emit($,Z){let J=this.listeners.get($);if(!J||J.length===0){if(this.debug)console.log(`[event-bus] No listeners for '${$}'`);return}if(this.debug)console.log(`[event-bus] Emitting '${$}' to ${J.length} listener(s)`);let Y=[];for(let Q of J)try{let X=Q.listener(Z);if(Q.async&&X instanceof Promise)X.catch((K)=>{this.handleError(K,$,Z)});if(Q.once)Y.push(Q)}catch(X){this.handleError(X instanceof Error?X:Error(String(X)),$,Z)}if(Y.length>0){let Q=J.filter((X)=>!Y.includes(X));if(Q.length===0)this.listeners.delete($);else this.listeners.set($,Q)}}async emitAsync($,Z){let J=this.listeners.get($);if(!J||J.length===0)return;if(this.debug)console.log(`[event-bus] Emitting async '${$}' to ${J.length} listener(s)`);let Y=[],Q=[];for(let X of J)try{let K=X.listener(Z);if(K instanceof Promise)Q.push(K.catch((V)=>{this.handleError(V instanceof Error?V:Error(String(V)),$,Z)}));if(X.once)Y.push(X)}catch(K){this.handleError(K instanceof Error?K:Error(String(K)),$,Z)}if(await Promise.all(Q),Y.length>0){let X=J.filter((K)=>!Y.includes(K));if(X.length===0)this.listeners.delete($);else this.listeners.set($,X)}}onError($){return this.errorHandlers.push($),()=>{let Z=this.errorHandlers.indexOf($);if(Z>=0)this.errorHandlers.splice(Z,1)}}listenerCount($){return this.listeners.get($)?.length??0}eventNames(){return Array.from(this.listeners.keys())}removeAllListeners($){if($)this.listeners.delete($);else this.listeners.clear();if(this.debug)console.log(`[event-bus] Removed all listeners${$?` for '${$}'`:""}`)}handleError($,Z,J){if(this.debug||process.env.DEBUG)console.error(`[event-bus] Error in '${Z}' listener:`,$.message);for(let Y of this.errorHandlers)try{Y($,Z,J)}catch{}}}function cY($){if(!a7)a7=new LZ($);return a7}var a7=null,V$;var u0=d4(()=>{V$=cY()});import{existsSync as v$,mkdirSync as n7,readFileSync as l0,writeFileSync as R8,renameSync as PZ,statSync as uY}from"fs";import{join as U$,dirname as DZ,relative as dY}from"path";import{createHash as lY,randomUUID as TZ}from"crypto";function wZ($,Z){if(f$=$,SZ=Z,$$=U$($,".backup"),aY(),i7=!0,E4=v$(U$($$,".git")),E4)r7=iY()}function L8(){return i7}function S($,Z){let J=DZ($);if(!v$(J))n7(J,{recursive:!0});let Y=U$(J,`.smolerclaw-${TZ().slice(0,8)}.tmp`);R8(Y,Z),PZ(Y,$);let Q=!1;if(i7){let K=rY($);if(K&&o0.includes(K))oY(K,Z),Q=!0}let X={filePath:$,size:Buffer.byteLength(Z,"utf-8"),isTracked:Q,timestamp:Date.now()};V$.emit("file:saved",X)}function kZ($){return lY("sha256").update($).digest("hex")}function oY($,Z){let J=kZ(Z),Y=new Date().toISOString(),Q=Buffer.byteLength(Z,"utf-8");J4=[...J4.filter((X)=>X.file!==$),{file:$,sha256:J,size:Q,updatedAt:Y}],nY()}function aY(){let $=U$(f$,AZ);if(!v$($)){J4=[];return}try{let Z=JSON.parse(l0($,"utf-8"));if(Z.version!==IZ){J4=[];return}J4=Z.checksums||[]}catch{J4=[]}}function nY(){if(!f$)return;let $=U$(f$,AZ),Z={checksums:J4,version:IZ},J=U$(f$,`.vault-${TZ().slice(0,8)}.tmp`);R8(J,JSON.stringify(Z,null,2)),PZ(J,$)}function rY($){try{let Z=dY(f$,$).replace(/\\/g,"/");if(Z.startsWith("..")||Z.startsWith("/"))return null;return Z}catch{return null}}function a0(){let $=[],Z=0;for(let J of o0){let Y=U$(f$,J),Q=v$(Y);if(!Q){$.push({file:J,exists:!1,checksumValid:null,size:0,lastModified:""});continue}let X=0,K="";try{let H=uY(Y);X=H.size,K=H.mtime.toISOString()}catch{}let V=J4.find((H)=>H.file===J),G=null;if(V)try{let H=l0(Y,"utf-8");if(G=kZ(H)===V.sha256,!G)Z++}catch{G=!1,Z++}$.push({file:J,exists:Q,checksumValid:G,size:X,lastModified:K})}return{files:$,lastBackup:r7,backupEnabled:E4,totalFiles:$.filter((J)=>J.exists).length,corruptFiles:Z}}function n0($){let Z=["=== Vault Status ==="],J=$.corruptFiles===0?"OK":`ATENCAO (${$.corruptFiles} corrompido(s))`;if(Z.push(`Integridade: ${J}`),Z.push(`Arquivos rastreados: ${$.totalFiles}/${o0.length}`),Z.push(`Backup: ${$.backupEnabled?"ativado":"desativado"}`),$.lastBackup)Z.push(`Ultimo backup: ${new Date($.lastBackup).toLocaleString("pt-BR")}`);Z.push(`
7
+ --- Arquivos ---`);for(let Y of $.files){if(!Y.exists){Z.push(` ${Y.file.padEnd(30)} (nao existe)`);continue}let Q=(Y.size/1024).toFixed(1),X=Y.checksumValid===null?"?":Y.checksumValid?"OK":"CORROMPIDO",K=Y.lastModified?new Date(Y.lastModified).toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit",hour:"2-digit",minute:"2-digit"}):"";Z.push(` ${Y.file.padEnd(30)} ${Q.padStart(8)} KB [${X}] ${K}`)}return Z.join(`
8
+ `)}async function r0(){if(!f$)return"Error: vault not initialized.";if(!v$($$))n7($$,{recursive:!0});let $=["# Sensitive \u2014 never backup","*.credentials.json","*.tmp",".vault-*.tmp",".smolerclaw-*.tmp","","# Large/transient","rag/","sessions/archive/",""].join(`
9
+ `);if(R8(U$($$,".gitignore"),$),!v$(U$($$,".git"))){let Z=await Y4(["git","init","-b",xZ],$$);if(!Z.ok)return`Error: git init failed: ${Z.stderr}`;await Y4(["git","config","user.email","vault@smolerclaw.local"],$$),await Y4(["git","config","user.name","smolerclaw-vault"],$$)}return E4=!0,"Shadow backup inicializado."}async function o4($){if(!E4)return"Backup nao ativado. Use vault_init_backup primeiro.";let Z=Date.now();try{for(let V of o0){let G=U$(f$,V);if(!v$(G))continue;let H=U$($$,V),z=DZ(H);if(!v$(z))n7(z,{recursive:!0});R8(H,l0(G,"utf-8"))}let J=U$(SZ,"config.json");if(v$(J))R8(U$($$,"config.json"),l0(J,"utf-8"));if(await Y4(["git","add","-A"],$$),!(await Y4(["git","status","--porcelain"],$$)).stdout.trim()){let V={taskId:`backup-${Date.now()}`,taskType:"backup",success:!0,message:"Nenhuma mudanca para backup",duration:Date.now()-Z,timestamp:Date.now()};return V$.emit("task:completed",V),"Nenhuma mudanca para backup."}let Q=$||`backup ${new Date().toISOString().slice(0,19)}`,X=await Y4(["git","commit","-m",Q],$$);if(!X.ok){let V={taskId:`backup-${Date.now()}`,taskType:"backup",success:!1,message:`Commit falhou: ${X.stderr}`,duration:Date.now()-Z,timestamp:Date.now()};return V$.emit("task:completed",V),`Backup commit falhou: ${X.stderr}`}r7=new Date().toISOString();let K={taskId:`backup-${Date.now()}`,taskType:"backup",success:!0,message:`Backup concluido: ${Q}`,duration:Date.now()-Z,timestamp:Date.now()};return V$.emit("task:completed",K),`Backup concluido: ${Q}`}catch(J){let Y=J instanceof Error?J.message:String(J),Q={taskId:`backup-${Date.now()}`,taskType:"backup",success:!1,message:`Backup falhou: ${Y}`,duration:Date.now()-Z,timestamp:Date.now()};return V$.emit("task:completed",Q),`Backup falhou: ${Y}`}}async function i0(){if(!E4)return"Backup nao ativado.";if(!(await Y4(["git","remote","-v"],$$)).stdout.trim())return"Nenhum remote configurado. Use: git -C <backup-dir> remote add origin <url>";let Z=await Y4(["git","push","-u","origin",xZ],$$);if(!Z.ok)return`Push falhou: ${Z.stderr}`;return"Sync concluido \u2014 dados enviados para o remote."}function iY(){try{let $=Bun.spawnSync(["git","log","-1","--format=%aI"],{cwd:$$,stdout:"pipe",stderr:"pipe"});return new TextDecoder().decode($.stdout).trim()||null}catch{return null}}async function Y4($,Z){let J=Bun.spawn($,{stdout:"pipe",stderr:"pipe",cwd:Z}),[Y,Q]=await Promise.all([new Response(J.stdout).text(),new Response(J.stderr).text()]),X=await J.exited;return{stdout:Y.trim(),stderr:Q.trim(),ok:X===0}}function bZ($=30){if(s7(),!E4)return;d0=setInterval(()=>{o4("auto-backup").catch(()=>{})},$*60*1000)}function s7(){if(d0)clearInterval(d0),d0=null}var IZ=1,AZ="vault-checksums.json",xZ="smolerclaw-backup",o0,f$="",SZ="",J4,$$="",E4=!1,r7=null,i7=!1,d0=null;var a=d4(()=>{u0();o0=["config.json","memos.json","materials.json","decisions.json","tasks.json","finance.json","people.json","projects.json","work-sessions.json","opportunities.json","workflows.json","news-feeds.json","pitwall-baselines.json","rag/rag-index.json"],J4=[]});var g2={};zZ(g2,{openUrl:()=>S4,openFile:()=>B0,openApp:()=>x4,getSystemInfo:()=>w4,getRunningApps:()=>N0,getOutlookEvents:()=>k$,getKnownApps:()=>f5,getDateTimeInfo:()=>k4});function v5($,Z){if(!$||typeof $!=="string")return`Error: ${Z} is required.`;if($.length>500)return`Error: ${Z} too long (max 500 chars).`;if(iQ.test($))return`Error: ${Z} contains invalid characters. Avoid: " ; \` $ | & < > { } ( ) and newlines.`;return null}async function x4($,Z){let J=$.toLowerCase().replace(/\s+/g,""),Y=_5[J];if(!Y){let Q=Object.keys(_5).join(", ");return`Unknown app: "${$}". Available: ${Q}`}if(Z){let Q=v5(Z,"argument");if(Q)return Q}if(!I)return"Error: this command is only available on Windows.";if(!Y.includes(":")){let Q=await g0(Y);if(!Q.exists)return`Error: ${Y} not found. ${Q.error||""}`}try{let Q=await l7(Y,Z);if(Q.exitCode!==0&&Q.stderr.trim())return`Error opening ${$}: ${Q.stderr.trim()}`;if(Q.timedOut)return`Error opening ${$}: timeout (application may have opened but response was delayed)`;return`Opened: ${$}`}catch(Q){return`Error opening ${$}: ${Q instanceof Error?Q.message:String(Q)}`}}async function S4($){if(!$.startsWith("http://")&&!$.startsWith("https://"))return"Error: URL must start with http:// or https://";let Z=v5($,"URL");if(Z)return Z;if(!I)return"Error: this command is only available on Windows.";try{let J=await l7($);if(J.exitCode!==0&&J.stderr.trim())return`Error: ${J.stderr.trim()}`;if(J.timedOut)return"Error: timeout opening URL (browser may have opened but response was delayed)";return`Opened in browser: ${$}`}catch(J){return`Error: ${J instanceof Error?J.message:String(J)}`}}async function B0($){let Z=v5($,"file path");if(Z)return Z;if(!I)return"Error: this command is only available on Windows.";try{let J=await CZ($);if(J.exitCode!==0&&J.stderr.trim())return`Error: ${J.stderr.trim()}`;if(J.timedOut)return"Error: timeout opening file (application may have opened but response was delayed)";return`Opened: ${$}`}catch(J){return`Error: ${J instanceof Error?J.message:String(J)}`}}async function N0(){if(!I)return"Error: this command is only available on Windows.";try{let $=await jZ(15);if($.stderr.trim())return`Error: ${$.stderr.trim()}`;if($.timedOut)return"Error: timeout getting process list";return $.stdout.trim()||"No windowed applications running."}catch($){return`Error: ${$ instanceof Error?$.message:String($)}`}}async function w4(){if(!I)return"Error: this command is only available on Windows.";let $=['$cpu = (Get-CimInstance Win32_Processor | Measure-Object -Property LoadPercentage -Average).Average; "CPU: $cpu%"','$os = Get-CimInstance Win32_OperatingSystem; $total = [math]::Round($os.TotalVisibleMemorySize/1MB,1); $free = [math]::Round($os.FreePhysicalMemory/1MB,1); $used = $total - $free; "RAM: $used GB / $total GB (Free: $free GB)"','Get-CimInstance Win32_LogicalDisk -Filter "DriveType=3" | ForEach-Object { $free = [math]::Round($_.FreeSpace/1GB,1); $total = [math]::Round($_.Size/1GB,1); "$($_.DeviceID) $free GB free / $total GB" }','$uptime = (Get-Date) - (Get-CimInstance Win32_OperatingSystem).LastBootUpTime; "Uptime: $($uptime.Days)d $($uptime.Hours)h $($uptime.Minutes)m"','$b = Get-CimInstance Win32_Battery -ErrorAction SilentlyContinue; if ($b) { "Battery: $($b.EstimatedChargeRemaining)%" } else { "Battery: N/A (desktop)" }'];try{let Z=await z$($.join("; "));if(!Z.stdout.trim()&&Z.stderr.trim())return`Error: ${Z.stderr.trim()}`;if(Z.timedOut)return"Error: timeout getting system info";return Z.stdout.trim()||"System info unavailable."}catch(Z){return`Error: ${Z instanceof Error?Z.message:String(Z)}`}}async function k4(){let $=new Date,Z=[],J=$.toLocaleDateString("pt-BR",{weekday:"long"}),Y=$.toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit",year:"numeric"}),Q=$.toLocaleTimeString("pt-BR",{hour:"2-digit",minute:"2-digit"});Z.push(`${J}, ${Y} \u2014 ${Q}`);let X=new Date($.valueOf());X.setDate(X.getDate()+3-(X.getDay()+6)%7);let K=new Date(X.getFullYear(),0,4),V=1+Math.round(((X.getTime()-K.getTime())/86400000-3+(K.getDay()+6)%7)/7);Z.push(`Semana ${V} do ano`);let G=$.getHours();if(G>=8&&G<18)Z.push("Status: horario comercial");else if(G>=18&&G<22)Z.push("Status: pos-expediente");else Z.push("Status: fora do horario comercial");return Z.join(`
10
+ `)}async function k$(){if(!I)return"Outlook integration only available on Windows.";let $=["try {"," $outlook = New-Object -ComObject Outlook.Application -ErrorAction Stop",' $ns = $outlook.GetNamespace("MAPI")'," $cal = $ns.GetDefaultFolder(9)"," $today = (Get-Date).Date"," $tomorrow = $today.AddDays(1)"," $items = $cal.Items",' $items.Sort("[Start]")'," $items.IncludeRecurrences = $true",` $filter = "[Start] >= '$($today.ToString('g'))' AND [Start] < '$($tomorrow.ToString('g'))'"`," $events = $items.Restrict($filter)"," $results = @()"," foreach ($e in $events) {",' $start = ([DateTime]$e.Start).ToString("HH:mm")',' $end = ([DateTime]$e.End).ToString("HH:mm")',' $results += "$start-$end $($e.Subject)"'," }",' if ($results.Count -eq 0) { "Nenhum evento hoje." }'," else { $results -join [char]10 }","} catch {",' "Outlook nao disponivel ou sem eventos."',"}"].join(`
11
+ `);try{let Z=await z$($,{timeout:30000});if(Z.timedOut)return"Outlook timeout - pode estar em processo de inicializacao.";return Z.stdout.trim()||"Outlook nao disponivel."}catch{return"Outlook nao disponivel."}}function f5(){return Object.keys(_5)}var iQ,_5;var b4=d4(()=>{e();Z4();iQ=/[";`$\n\r|&<>{}()]/;_5={excel:"excel",word:"winword",powerpoint:"powerpnt",outlook:"ms-outlook:",onenote:"onenote",teams:"msteams:",edge:"msedge",chrome:"chrome",firefox:"firefox",calculator:"calc",notepad:"notepad",terminal:"wt",explorer:"explorer",taskmanager:"taskmgr",settings:"ms-settings:",paint:"mspaint",snip:"snippingtool",vscode:"code",cursor:"cursor",postman:"Postman"}});var J9={};zZ(J9,{searchInvestigations:()=>t5,openInvestigation:()=>o5,listInvestigations:()=>s5,initInvestigations:()=>l5,getInvestigation:()=>i5,generateReport:()=>e5,formatInvestigationList:()=>d1,formatInvestigationDetail:()=>$9,formatEvidenceDetail:()=>tX,collectEvidence:()=>a5,closeInvestigation:()=>r5,addFinding:()=>n5});import{existsSync as C6,mkdirSync as aX,readFileSync as nX}from"fs";import{join as rX}from"path";import{randomUUID as iX}from"crypto";function u1(){S(O6(),JSON.stringify(Q$,null,2))}function sX(){let $=O6();if(!C6($)){Q$=[];return}try{Q$=JSON.parse(nX($,"utf-8"))}catch{Q$=[]}}function l5($){if(j6=$,!C6($))aX($,{recursive:!0});sX()}function o5($,Z,J,Y=[]){let Q=new Date().toISOString(),X={id:Z9(),title:$.trim(),type:Z,status:"aberta",hypothesis:J?.trim(),tags:Y.map((K)=>K.toLowerCase()),evidence:[],findings:[],created:Q,updated:Q};return Q$=[...Q$,X],u1(),X}function a5($,Z,J,Y,Q){let X=F0($);if(!X)return null;let K=Y.trim();if(K.length>M6)K=K.slice(0,M6)+`
12
+ ...(truncated, ${Y.length} total chars)`;let V={id:Z9(),source:Z,label:J.trim(),content:K,path:Q?.trim(),timestamp:new Date().toISOString()},G={...X,evidence:[...X.evidence,V],status:X.status==="aberta"?"em_andamento":X.status,updated:new Date().toISOString()};return Q$=Q$.map((H)=>H.id===X.id?G:H),u1(),V}function n5($,Z,J,Y,Q=[]){let X=F0($);if(!X)return null;let K=Q.filter((H)=>X.evidence.some((z)=>z.id===H)),V={id:Z9(),severity:Z,title:J.trim(),description:Y.trim(),evidence_ids:K,timestamp:new Date().toISOString()},G={...X,findings:[...X.findings,V],updated:new Date().toISOString()};return Q$=Q$.map((H)=>H.id===X.id?G:H),u1(),V}function r5($,Z,J){let Y=F0($);if(!Y)return null;let Q={...Y,status:"concluida",summary:Z.trim(),recommendations:J?.trim(),updated:new Date().toISOString()};return Q$=Q$.map((X)=>X.id===Y.id?Q:X),u1(),Q}function i5($){return F0($)}function s5($,Z,J=20){let Y=[...Q$];if($)Y=Y.filter((Q)=>Q.status===$);if(Z)Y=Y.filter((Q)=>Q.type===Z);return Y.sort((Q,X)=>new Date(X.updated).getTime()-new Date(Q.updated).getTime()).slice(0,J)}function t5($){let Z=$.toLowerCase();return Q$.filter((J)=>J.title.toLowerCase().includes(Z)||J.hypothesis?.toLowerCase().includes(Z)||J.tags.some((Y)=>Y.includes(Z))||J.findings.some((Y)=>Y.title.toLowerCase().includes(Z))||J.summary?.toLowerCase().includes(Z)).sort((J,Y)=>new Date(Y.updated).getTime()-new Date(J.updated).getTime())}function e5($){let Z=F0($);if(!Z)return null;let J=[],Y=(K)=>new Date(K).toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit",year:"numeric",hour:"2-digit",minute:"2-digit"}),Q={bug:"Bug / Mal funcionamento",feature:"Construcao de funcionalidade",test:"Material para testes",audit:"Auditoria",incident:"Incidente"},X={critical:0,high:1,medium:2,low:3,info:4};if(J.push(`# Investigacao: ${Z.title}`),J.push(""),J.push(`**Tipo:** ${Q[Z.type]}`),J.push(`**Status:** ${Z.status}`),J.push(`**Abertura:** ${Y(Z.created)}`),J.push(`**Ultima atualizacao:** ${Y(Z.updated)}`),Z.tags.length)J.push(`**Tags:** ${Z.tags.join(", ")}`);if(J.push(`**ID:** ${Z.id}`),Z.hypothesis)J.push(""),J.push("## Hipotese"),J.push(Z.hypothesis);if(Z.evidence.length>0){J.push(""),J.push(`## Evidencias (${Z.evidence.length})`);for(let K of Z.evidence){let V=Y(K.timestamp);J.push(""),J.push(`### [${K.id}] ${K.label}`),J.push(`- Fonte: ${K.source}${K.path?` (${K.path})`:""}`),J.push(`- Coletada: ${V}`);let G=K.content.length>2000?K.content.slice(0,2000)+`
13
+ ... (truncado)`:K.content;J.push("```"),J.push(G),J.push("```")}}if(Z.findings.length>0){let K=[...Z.findings].sort((V,G)=>(X[V.severity]??4)-(X[G.severity]??4));J.push(""),J.push(`## Conclusoes (${Z.findings.length})`);for(let V of K){let G=E6(V.severity);if(J.push(""),J.push(`### ${G} ${V.title}`),J.push(V.description),V.evidence_ids.length>0)J.push(`- Evidencias: ${V.evidence_ids.join(", ")}`)}}if(Z.summary)J.push(""),J.push("## Resumo"),J.push(Z.summary);if(Z.recommendations)J.push(""),J.push("## Recomendacoes"),J.push(Z.recommendations);return J.join(`
14
+ `)}function d1($){if($.length===0)return"Nenhuma investigacao encontrada.";let Z=$.map((J)=>{let Y=new Date(J.updated).toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit"}),Q=F6(J.status),X=J.evidence.length,K=J.findings.length,V=J.tags.length>0?` [${J.tags.join(", ")}]`:"";return` ${Q} [${Y}] ${J.title} (${J.type}) \u2014 ${X} ev, ${K} concl${V} {${J.id}}`});return`Investigacoes (${$.length}):
10
15
  ${Z.join(`
11
- `)}`}function J7($){let Z=(Q)=>new Date(Q).toLocaleDateString("pt-BR"),Y=i9($.status),J=[`--- Investigacao {${$.id}} ---`,`Titulo: ${$.title}`,`Tipo: ${$.type} | Status: ${Y}`,`Criada: ${Z($.created)} | Atualizada: ${Z($.updated)}`];if($.hypothesis)J.push(`Hipotese: ${$.hypothesis}`);if($.tags.length)J.push(`Tags: ${$.tags.join(", ")}`);J.push(`
12
- Evidencias: ${$.evidence.length}`);for(let Q of $.evidence.slice(-5)){let X=Q.content.slice(0,80).replace(/\n/g," ");J.push(` [${Q.id}] ${Q.source}: ${Q.label} \u2014 "${X}..."`)}if($.evidence.length>5)J.push(` ... (${$.evidence.length-5} mais)`);J.push(`
13
- Conclusoes: ${$.findings.length}`);for(let Q of $.findings)J.push(` ${o9(Q.severity)} ${Q.title}`);if($.summary)J.push(`
14
- Resumo: ${$.summary}`);if($.recommendations)J.push(`Recomendacoes: ${$.recommendations}`);return J.join(`
15
- `)}function UJ($){let Z=new Date($.timestamp).toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit",hour:"2-digit",minute:"2-digit"});return[`--- Evidencia {${$.id}} ---`,`Label: ${$.label}`,`Fonte: ${$.source}${$.path?` (${$.path})`:""}`,`Coletada: ${Z}`,"",$.content.length>3000?$.content.slice(0,3000)+`
16
+ `)}`}function $9($){let Z=(Q)=>new Date(Q).toLocaleDateString("pt-BR"),J=F6($.status),Y=[`--- Investigacao {${$.id}} ---`,`Titulo: ${$.title}`,`Tipo: ${$.type} | Status: ${J}`,`Criada: ${Z($.created)} | Atualizada: ${Z($.updated)}`];if($.hypothesis)Y.push(`Hipotese: ${$.hypothesis}`);if($.tags.length)Y.push(`Tags: ${$.tags.join(", ")}`);Y.push(`
17
+ Evidencias: ${$.evidence.length}`);for(let Q of $.evidence.slice(-5)){let X=Q.content.slice(0,80).replace(/\n/g," ");Y.push(` [${Q.id}] ${Q.source}: ${Q.label} \u2014 "${X}..."`)}if($.evidence.length>5)Y.push(` ... (${$.evidence.length-5} mais)`);Y.push(`
18
+ Conclusoes: ${$.findings.length}`);for(let Q of $.findings)Y.push(` ${E6(Q.severity)} ${Q.title}`);if($.summary)Y.push(`
19
+ Resumo: ${$.summary}`);if($.recommendations)Y.push(`Recomendacoes: ${$.recommendations}`);return Y.join(`
20
+ `)}function tX($){let Z=new Date($.timestamp).toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit",hour:"2-digit",minute:"2-digit"});return[`--- Evidencia {${$.id}} ---`,`Label: ${$.label}`,`Fonte: ${$.source}${$.path?` (${$.path})`:""}`,`Coletada: ${Z}`,"",$.content.length>3000?$.content.slice(0,3000)+`
16
21
  ... (truncado)`:$.content].join(`
17
- `)}function p4($){let Z=$.toLowerCase().trim(),Y=$$.find((Q)=>Q.id===Z);if(Y)return Y;return $$.filter((Q)=>Q.title.toLowerCase().includes(Z)).sort((Q,X)=>new Date(X.updated).getTime()-new Date(Q.updated).getTime())[0]||null}function i9($){switch($){case"aberta":return"\u25CB";case"em_andamento":return"\u25C9";case"concluida":return"\u25CF";case"arquivada":return"\u25CC"}}function o9($){switch($){case"critical":return"[CRITICO]";case"high":return"[ALTO]";case"medium":return"[MEDIO]";case"low":return"[BAIXO]";case"info":return"[INFO]"}}function Q7(){return HJ().slice(0,8)}var l9="",$$,n9=()=>WJ(l9,"investigations.json"),u9=50000;var l4=l7(()=>{t();$$=[]});import{readFileSync as Y3}from"fs";import{join as J3,dirname as Q3}from"path";function n7($){let Z={help:!1,version:!1,noTools:!1,print:!1},Y=[],J=0;while(J<$.length){let Q=$[J];switch(Q){case"-h":case"--help":Z.help=!0;break;case"-v":case"--version":Z.version=!0;break;case"-m":case"--model":if(Z.model=$[++J],!Z.model)e4("--model requires a value");break;case"-s":case"--session":if(Z.session=$[++J],!Z.session)e4("--session requires a value");break;case"--max-tokens":let X=Number($[++J]);if(!X||X<=0)e4("--max-tokens requires a positive number");Z.maxTokens=X;break;case"--no-tools":Z.noTools=!0;break;case"-p":case"--print":Z.print=!0;break;default:if(Q.startsWith("-"))e4(`Unknown option: ${Q}. Try --help`);Y.push(Q)}J++}if(Y.length>0)Z.prompt=Y.join(" ");return Z}function $8(){return"1.2.3"}function i7(){let $=$8();console.log(`smolerclaw v${$} \u2014 the micro AI assistant
22
+ `)}function F0($){let Z=$.toLowerCase().trim(),J=Q$.find((Q)=>Q.id===Z);if(J)return J;return Q$.filter((Q)=>Q.title.toLowerCase().includes(Z)).sort((Q,X)=>new Date(X.updated).getTime()-new Date(Q.updated).getTime())[0]||null}function F6($){switch($){case"aberta":return"\u25CB";case"em_andamento":return"\u25C9";case"concluida":return"\u25CF";case"arquivada":return"\u25CC"}}function E6($){switch($){case"critical":return"[CRITICO]";case"high":return"[ALTO]";case"medium":return"[MEDIO]";case"low":return"[BAIXO]";case"info":return"[INFO]"}}function Z9(){return iX().slice(0,8)}var j6="",Q$,O6=()=>rX(j6,"investigations.json"),M6=50000;var E0=d4(()=>{a();Q$=[]});import{readFileSync as xY}from"fs";import{join as SY,dirname as wY}from"path";function VZ($){let Z={help:!1,version:!1,noTools:!1,print:!1},J=[],Y=0;while(Y<$.length){let Q=$[Y];switch(Q){case"-h":case"--help":Z.help=!0;break;case"-v":case"--version":Z.version=!0;break;case"-m":case"--model":if(Z.model=$[++Y],!Z.model)_0("--model requires a value");break;case"-s":case"--session":if(Z.session=$[++Y],!Z.session)_0("--session requires a value");break;case"--max-tokens":let X=Number($[++Y]);if(!X||X<=0)_0("--max-tokens requires a positive number");Z.maxTokens=X;break;case"--no-tools":Z.noTools=!0;break;case"-p":case"--print":Z.print=!0;break;default:if(Q.startsWith("-"))_0(`Unknown option: ${Q}. Try --help`);J.push(Q)}Y++}if(J.length>0)Z.prompt=J.join(" ");return Z}function v0(){return"1.3.1"}function GZ(){let $=v0();console.log(`smolerclaw v${$} \u2014 the micro AI assistant
18
23
 
19
24
  Usage:
20
25
  smolerclaw [options] [prompt]
@@ -42,15 +47,15 @@ Commands (inside TUI):
42
47
  /briefing Daily briefing /news News radar
43
48
  /task Create task /tasks List tasks
44
49
  /open Open Windows app /calendar Outlook calendar
45
- /export Export markdown /exit Quit`)}function e4($){console.error(`smolerclaw: ${$}`),process.exit(2)}import{existsSync as W8,mkdirSync as N3,readFileSync as z5}from"fs";import{homedir as C3}from"os";import{join as T$}from"path";import{existsSync as X3}from"fs";var A=process.platform==="win32",o7=process.platform==="darwin",iX=process.platform==="linux";function Y8(){if(A)return["powershell","-NoProfile","-NonInteractive","-Command"];let $=process.env.SHELL;if($&&X3($))return[$,"-c"];return["bash","-c"]}function a7(){if(A)return"powershell";return(process.env.SHELL||"/bin/bash").split("/").pop()||"bash"}async function K3($){try{let Z=A?["powershell","-NoProfile","-Command",`Get-Command ${$} -ErrorAction SilentlyContinue`]:["which",$],Y=Bun.spawn(Z,{stdout:"pipe",stderr:"pipe"});return await Y.exited,Y.exitCode===0}catch{return!1}}var Z8=null;async function r7(){if(Z8!==null)return Z8;return Z8=await K3("rg"),Z8}var s0=["node_modules",".git","dist","build",".next","__pycache__",".venv","target",".cache"];function t0($){let Z=$.replace(/\\/g,"/");return s0.some((Y)=>Z.includes(`/${Y}/`)||Z.startsWith(`${Y}/`))}t();var s1=C3(),H8=A?T$(process.env.APPDATA||T$(s1,"AppData","Roaming"),"smolerclaw"):T$(s1,".config","smolerclaw"),J2=A?T$(process.env.LOCALAPPDATA||T$(s1,"AppData","Local"),"smolerclaw"):T$(s1,".local","share","smolerclaw"),m$=T$(H8,"config.json"),E1={model:"claude-haiku-4-5-20251001",maxTokens:4096,maxHistory:50,systemPrompt:"",skillsDir:"./skills",dataDir:J2,toolApproval:"auto",language:"auto",maxSessionCost:0};function r1($){if(!W8($))N3($,{recursive:!0})}function V5(){if(r1(H8),r1(J2),r1(T$(J2,"sessions")),A)O3();if(!W8(m$))return P(m$,JSON.stringify(E1,null,2)),{...E1};let $;try{$=JSON.parse(z5(m$,"utf-8"))}catch{return P(m$,JSON.stringify(E1,null,2)),{...E1}}return M3({...E1,...$})}function M3($){let Z={...E1};if(typeof $.model==="string"&&$.model.trim())Z.model=$.model;if(typeof $.maxTokens==="number"&&$.maxTokens>0&&$.maxTokens<=1e5)Z.maxTokens=$.maxTokens;if(typeof $.maxHistory==="number"&&$.maxHistory>0&&$.maxHistory<=1000)Z.maxHistory=$.maxHistory;if(typeof $.systemPrompt==="string")Z.systemPrompt=$.systemPrompt;if(typeof $.skillsDir==="string"&&$.skillsDir.trim())Z.skillsDir=$.skillsDir;if(typeof $.dataDir==="string"&&$.dataDir.trim())Z.dataDir=$.dataDir;let Y=["auto","confirm-writes","confirm-all"];if(typeof $.toolApproval==="string"&&Y.includes($.toolApproval))Z.toolApproval=$.toolApproval;if(typeof $.language==="string")Z.language=$.language;if(typeof $.maxSessionCost==="number"&&$.maxSessionCost>=0)Z.maxSessionCost=$.maxSessionCost;return Z}function q8($){r1(H8),P(m$,JSON.stringify($,null,2))}function Q2(){return m$}function O3(){let $=T$(s1,".config","smolerclaw","config.json");if(W8($)&&!W8(m$))try{let Z=z5($,"utf-8");r1(H8),P(m$,Z)}catch{}}import{existsSync as E3,readFileSync as j3}from"fs";import{homedir as F3}from"os";import{join as L3}from"path";var G5=L3(F3(),".claude",".credentials.json");function X2(){let $=R3();if($)return $;throw Error("Claude Code subscription not found or expired.\nInstall Claude Code with a Pro/Max subscription and run `claude` to authenticate.")}function R3(){if(!E3(G5))return null;try{let Z=JSON.parse(j3(G5,"utf-8")).claudeAiOauth;if(!Z?.accessToken)return null;if(Date.now()>Z.expiresAt-60000)return null;return{token:Z.accessToken,subscriptionType:Z.subscriptionType,expiresAt:Z.expiresAt}}catch{return null}}function K2(){try{return X2()}catch{return null}}function W5($){return`sub:${$.subscriptionType||"pro"}`}function F($,Z,Y,J,Q){if(J==="m")throw TypeError("Private method is not writable");if(J==="a"&&!Q)throw TypeError("Private accessor was defined without a setter");if(typeof Z==="function"?$!==Z||!Q:!Z.has($))throw TypeError("Cannot write private member to an object whose class did not declare it");return J==="a"?Q.call($,Y):Q?Q.value=Y:Z.set($,Y),Y}function U($,Z,Y,J){if(Y==="a"&&!J)throw TypeError("Private accessor was defined without a getter");if(typeof Z==="function"?$!==Z||!J:!Z.has($))throw TypeError("Cannot read private member from an object whose class did not declare it");return Y==="m"?J:Y==="a"?J.call($):J?J.value:Z.get($)}var z2=function(){let{crypto:$}=globalThis;if($?.randomUUID)return z2=$.randomUUID.bind($),$.randomUUID();let Z=new Uint8Array(1),Y=$?()=>$.getRandomValues(Z)[0]:()=>Math.random()*255&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(J)=>(+J^Y()&15>>+J/4).toString(16))};function P$($){return typeof $==="object"&&$!==null&&(("name"in $)&&$.name==="AbortError"||("message"in $)&&String($.message).includes("FetchRequestCanceledException"))}var t1=($)=>{if($ instanceof Error)return $;if(typeof $==="object"&&$!==null){try{if(Object.prototype.toString.call($)==="[object Error]"){let Z=Error($.message,$.cause?{cause:$.cause}:{});if($.stack)Z.stack=$.stack;if($.cause&&!Z.cause)Z.cause=$.cause;if($.name)Z.name=$.name;return Z}}catch{}try{return Error(JSON.stringify($))}catch{}}return Error($)};class R extends Error{}class p extends R{constructor($,Z,Y,J){super(`${p.makeMessage($,Z,Y)}`);this.status=$,this.headers=J,this.requestID=J?.get("request-id"),this.error=Z}static makeMessage($,Z,Y){let J=Z?.message?typeof Z.message==="string"?Z.message:JSON.stringify(Z.message):Z?JSON.stringify(Z):Y;if($&&J)return`${$} ${J}`;if($)return`${$} status code (no body)`;if(J)return J;return"(no status code or body)"}static generate($,Z,Y,J){if(!$||!J)return new X1({message:Y,cause:t1(Z)});let Q=Z;if($===400)return new $4($,Q,Y,J);if($===401)return new Z4($,Q,Y,J);if($===403)return new Y4($,Q,Y,J);if($===404)return new J4($,Q,Y,J);if($===409)return new Q4($,Q,Y,J);if($===422)return new X4($,Q,Y,J);if($===429)return new K4($,Q,Y,J);if($>=500)return new z4($,Q,Y,J);return new p($,Q,Y,J)}}class e extends p{constructor({message:$}={}){super(void 0,void 0,$||"Request was aborted.",void 0)}}class X1 extends p{constructor({message:$,cause:Z}){super(void 0,void 0,$||"Connection error.",void 0);if(Z)this.cause=Z}}class e1 extends X1{constructor({message:$}={}){super({message:$??"Request timed out."})}}class $4 extends p{}class Z4 extends p{}class Y4 extends p{}class J4 extends p{}class Q4 extends p{}class X4 extends p{}class K4 extends p{}class z4 extends p{}var x3=/^[a-z][a-z0-9+.-]*:/i,H5=($)=>{return x3.test($)},V2=($)=>(V2=Array.isArray,V2($)),G2=V2;function U8($){if(typeof $!=="object")return{};return $??{}}function W2($){if(!$)return!0;for(let Z in $)return!1;return!0}function q5($,Z){return Object.prototype.hasOwnProperty.call($,Z)}var U5=($,Z)=>{if(typeof Z!=="number"||!Number.isInteger(Z))throw new R(`${$} must be an integer`);if(Z<0)throw new R(`${$} must be a positive integer`);return Z};var B8=($)=>{try{return JSON.parse($)}catch(Z){return}};var B5=($)=>new Promise((Z)=>setTimeout(Z,$));var c$="0.80.0";var O5=()=>{return typeof window<"u"&&typeof window.document<"u"&&typeof navigator<"u"};function D3(){if(typeof Deno<"u"&&Deno.build!=null)return"deno";if(typeof EdgeRuntime<"u")return"edge";if(Object.prototype.toString.call(typeof globalThis.process<"u"?globalThis.process:0)==="[object process]")return"node";return"unknown"}var T3=()=>{let $=D3();if($==="deno")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":c$,"X-Stainless-OS":C5(Deno.build.os),"X-Stainless-Arch":N5(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":typeof Deno.version==="string"?Deno.version:Deno.version?.deno??"unknown"};if(typeof EdgeRuntime<"u")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":c$,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if($==="node")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":c$,"X-Stainless-OS":C5(globalThis.process.platform??"unknown"),"X-Stainless-Arch":N5(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};let Z=P3();if(Z)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":c$,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${Z.browser}`,"X-Stainless-Runtime-Version":Z.version};return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":c$,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};function P3(){if(typeof navigator>"u"||!navigator)return null;let $=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(let{key:Z,pattern:Y}of $){let J=Y.exec(navigator.userAgent);if(J){let Q=J[1]||0,X=J[2]||0,K=J[3]||0;return{browser:Z,version:`${Q}.${X}.${K}`}}}return null}var N5=($)=>{if($==="x32")return"x32";if($==="x86_64"||$==="x64")return"x64";if($==="arm")return"arm";if($==="aarch64"||$==="arm64")return"arm64";if($)return`other:${$}`;return"unknown"},C5=($)=>{if($=$.toLowerCase(),$.includes("ios"))return"iOS";if($==="android")return"Android";if($==="darwin")return"MacOS";if($==="win32")return"Windows";if($==="freebsd")return"FreeBSD";if($==="openbsd")return"OpenBSD";if($==="linux")return"Linux";if($)return`Other:${$}`;return"Unknown"},M5,E5=()=>{return M5??(M5=T3())};function j5(){if(typeof fetch<"u")return fetch;throw Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new Anthropic({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}function H2(...$){let Z=globalThis.ReadableStream;if(typeof Z>"u")throw Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new Z(...$)}function N8($){let Z=Symbol.asyncIterator in $?$[Symbol.asyncIterator]():$[Symbol.iterator]();return H2({start(){},async pull(Y){let{done:J,value:Q}=await Z.next();if(J)Y.close();else Y.enqueue(Q)},async cancel(){await Z.return?.()}})}function V4($){if($[Symbol.asyncIterator])return $;let Z=$.getReader();return{async next(){try{let Y=await Z.read();if(Y?.done)Z.releaseLock();return Y}catch(Y){throw Z.releaseLock(),Y}},async return(){let Y=Z.cancel();return Z.releaseLock(),await Y,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}async function F5($){if($===null||typeof $!=="object")return;if($[Symbol.asyncIterator]){await $[Symbol.asyncIterator]().return?.();return}let Z=$.getReader(),Y=Z.cancel();Z.releaseLock(),await Y}var L5=({headers:$,body:Z})=>{return{bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(Z)}};function R5($){return Object.entries($).filter(([Z,Y])=>typeof Y<"u").map(([Z,Y])=>{if(typeof Y==="string"||typeof Y==="number"||typeof Y==="boolean")return`${encodeURIComponent(Z)}=${encodeURIComponent(Y)}`;if(Y===null)return`${encodeURIComponent(Z)}=`;throw new R(`Cannot stringify type ${typeof Y}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`)}).join("&")}function D5($){let Z=0;for(let Q of $)Z+=Q.length;let Y=new Uint8Array(Z),J=0;for(let Q of $)Y.set(Q,J),J+=Q.length;return Y}var A5;function G4($){let Z;return(A5??(Z=new globalThis.TextEncoder,A5=Z.encode.bind(Z)))($)}var x5;function q2($){let Z;return(x5??(Z=new globalThis.TextDecoder,x5=Z.decode.bind(Z)))($)}var z$,V$;class d${constructor(){z$.set(this,void 0),V$.set(this,void 0),F(this,z$,new Uint8Array,"f"),F(this,V$,null,"f")}decode($){if($==null)return[];let Z=$ instanceof ArrayBuffer?new Uint8Array($):typeof $==="string"?G4($):$;F(this,z$,D5([U(this,z$,"f"),Z]),"f");let Y=[],J;while((J=S3(U(this,z$,"f"),U(this,V$,"f")))!=null){if(J.carriage&&U(this,V$,"f")==null){F(this,V$,J.index,"f");continue}if(U(this,V$,"f")!=null&&(J.index!==U(this,V$,"f")+1||J.carriage)){Y.push(q2(U(this,z$,"f").subarray(0,U(this,V$,"f")-1))),F(this,z$,U(this,z$,"f").subarray(U(this,V$,"f")),"f"),F(this,V$,null,"f");continue}let Q=U(this,V$,"f")!==null?J.preceding-1:J.preceding,X=q2(U(this,z$,"f").subarray(0,Q));Y.push(X),F(this,z$,U(this,z$,"f").subarray(J.index),"f"),F(this,V$,null,"f")}return Y}flush(){if(!U(this,z$,"f").length)return[];return this.decode(`
46
- `)}}z$=new WeakMap,V$=new WeakMap;d$.NEWLINE_CHARS=new Set([`
47
- `,"\r"]);d$.NEWLINE_REGEXP=/\r\n|[\n\r]/g;function S3($,Z){for(let Q=Z??0;Q<$.length;Q++){if($[Q]===10)return{preceding:Q,index:Q+1,carriage:!1};if($[Q]===13)return{preceding:Q,index:Q+1,carriage:!0}}return null}function T5($){for(let J=0;J<$.length-1;J++){if($[J]===10&&$[J+1]===10)return J+2;if($[J]===13&&$[J+1]===13)return J+2;if($[J]===13&&$[J+1]===10&&J+3<$.length&&$[J+2]===13&&$[J+3]===10)return J+4}return-1}var M8={off:0,error:200,warn:300,info:400,debug:500},U2=($,Z,Y)=>{if(!$)return;if(q5(M8,$))return $;i(Y).warn(`${Z} was set to ${JSON.stringify($)}, expected one of ${JSON.stringify(Object.keys(M8))}`);return};function W4(){}function C8($,Z,Y){if(!Z||M8[$]>M8[Y])return W4;else return Z[$].bind(Z)}var b3={error:W4,warn:W4,info:W4,debug:W4},P5=new WeakMap;function i($){let Z=$.logger,Y=$.logLevel??"off";if(!Z)return b3;let J=P5.get(Z);if(J&&J[0]===Y)return J[1];let Q={error:C8("error",Z,Y),warn:C8("warn",Z,Y),info:C8("info",Z,Y),debug:C8("debug",Z,Y)};return P5.set(Z,[Y,Q]),Q}var w$=($)=>{if($.options)$.options={...$.options},delete $.options.headers;if($.headers)$.headers=Object.fromEntries(($.headers instanceof Headers?[...$.headers]:Object.entries($.headers)).map(([Z,Y])=>[Z,Z.toLowerCase()==="x-api-key"||Z.toLowerCase()==="authorization"||Z.toLowerCase()==="cookie"||Z.toLowerCase()==="set-cookie"?"***":Y]));if("retryOfRequestLogID"in $){if($.retryOfRequestLogID)$.retryOf=$.retryOfRequestLogID;delete $.retryOfRequestLogID}return $};var H4;class G${constructor($,Z,Y){this.iterator=$,H4.set(this,void 0),this.controller=Z,F(this,H4,Y,"f")}static fromSSEResponse($,Z,Y){let J=!1,Q=Y?i(Y):console;async function*X(){if(J)throw new R("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");J=!0;let K=!1;try{for await(let V of k3($,Z)){if(V.event==="completion")try{yield JSON.parse(V.data)}catch(G){throw Q.error("Could not parse message into JSON:",V.data),Q.error("From chunk:",V.raw),G}if(V.event==="message_start"||V.event==="message_delta"||V.event==="message_stop"||V.event==="content_block_start"||V.event==="content_block_delta"||V.event==="content_block_stop")try{yield JSON.parse(V.data)}catch(G){throw Q.error("Could not parse message into JSON:",V.data),Q.error("From chunk:",V.raw),G}if(V.event==="ping")continue;if(V.event==="error")throw new p(void 0,B8(V.data)??V.data,void 0,$.headers)}K=!0}catch(V){if(P$(V))return;throw V}finally{if(!K)Z.abort()}}return new G$(X,Z,Y)}static fromReadableStream($,Z,Y){let J=!1;async function*Q(){let K=new d$,V=V4($);for await(let G of V)for(let H of K.decode(G))yield H;for(let G of K.flush())yield G}async function*X(){if(J)throw new R("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");J=!0;let K=!1;try{for await(let V of Q()){if(K)continue;if(V)yield JSON.parse(V)}K=!0}catch(V){if(P$(V))return;throw V}finally{if(!K)Z.abort()}}return new G$(X,Z,Y)}[(H4=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){let $=[],Z=[],Y=this.iterator(),J=(Q)=>{return{next:()=>{if(Q.length===0){let X=Y.next();$.push(X),Z.push(X)}return Q.shift()}}};return[new G$(()=>J($),this.controller,U(this,H4,"f")),new G$(()=>J(Z),this.controller,U(this,H4,"f"))]}toReadableStream(){let $=this,Z;return H2({async start(){Z=$[Symbol.asyncIterator]()},async pull(Y){try{let{value:J,done:Q}=await Z.next();if(Q)return Y.close();let X=G4(JSON.stringify(J)+`
48
- `);Y.enqueue(X)}catch(J){Y.error(J)}},async cancel(){await Z.return?.()}})}}async function*k3($,Z){if(!$.body){if(Z.abort(),typeof globalThis.navigator<"u"&&globalThis.navigator.product==="ReactNative")throw new R("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new R("Attempted to iterate over a response with no body")}let Y=new w5,J=new d$,Q=V4($.body);for await(let X of y3(Q))for(let K of J.decode(X)){let V=Y.decode(K);if(V)yield V}for(let X of J.flush()){let K=Y.decode(X);if(K)yield K}}async function*y3($){let Z=new Uint8Array;for await(let Y of $){if(Y==null)continue;let J=Y instanceof ArrayBuffer?new Uint8Array(Y):typeof Y==="string"?G4(Y):Y,Q=new Uint8Array(Z.length+J.length);Q.set(Z),Q.set(J,Z.length),Z=Q;let X;while((X=T5(Z))!==-1)yield Z.slice(0,X),Z=Z.slice(X)}if(Z.length>0)yield Z}class w5{constructor(){this.event=null,this.data=[],this.chunks=[]}decode($){if($.endsWith("\r"))$=$.substring(0,$.length-1);if(!$){if(!this.event&&!this.data.length)return null;let Q={event:this.event,data:this.data.join(`
49
- `),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],Q}if(this.chunks.push($),$.startsWith(":"))return null;let[Z,Y,J]=_3($,":");if(J.startsWith(" "))J=J.substring(1);if(Z==="event")this.event=J;else if(Z==="data")this.data.push(J);return null}}function _3($,Z){let Y=$.indexOf(Z);if(Y!==-1)return[$.substring(0,Y),Z,$.substring(Y+Z.length)];return[$,"",""]}async function O8($,Z){let{response:Y,requestLogID:J,retryOfRequestLogID:Q,startTime:X}=Z,K=await(async()=>{if(Z.options.stream){if(i($).debug("response",Y.status,Y.url,Y.headers,Y.body),Z.options.__streamClass)return Z.options.__streamClass.fromSSEResponse(Y,Z.controller);return G$.fromSSEResponse(Y,Z.controller)}if(Y.status===204)return null;if(Z.options.__binaryResponse)return Y;let G=Y.headers.get("content-type")?.split(";")[0]?.trim();if(G?.includes("application/json")||G?.endsWith("+json")){if(Y.headers.get("content-length")==="0")return;let N=await Y.json();return B2(N,Y)}return await Y.text()})();return i($).debug(`[${J}] response parsed`,w$({retryOfRequestLogID:Q,url:Y.url,status:Y.status,body:K,durationMs:Date.now()-X})),K}function B2($,Z){if(!$||typeof $!=="object"||Array.isArray($))return $;return Object.defineProperty($,"_request_id",{value:Z.headers.get("request-id"),enumerable:!1})}var q4;class K1 extends Promise{constructor($,Z,Y=O8){super((J)=>{J(null)});this.responsePromise=Z,this.parseResponse=Y,q4.set(this,void 0),F(this,q4,$,"f")}_thenUnwrap($){return new K1(U(this,q4,"f"),this.responsePromise,async(Z,Y)=>B2($(await this.parseResponse(Z,Y),Y),Y.response))}asResponse(){return this.responsePromise.then(($)=>$.response)}async withResponse(){let[$,Z]=await Promise.all([this.parse(),this.asResponse()]);return{data:$,response:Z,request_id:Z.headers.get("request-id")}}parse(){if(!this.parsedPromise)this.parsedPromise=this.responsePromise.then(($)=>this.parseResponse(U(this,q4,"f"),$));return this.parsedPromise}then($,Z){return this.parse().then($,Z)}catch($){return this.parse().catch($)}finally($){return this.parse().finally($)}}q4=new WeakMap;var E8;class N2{constructor($,Z,Y,J){E8.set(this,void 0),F(this,E8,$,"f"),this.options=J,this.response=Z,this.body=Y}hasNextPage(){if(!this.getPaginatedItems().length)return!1;return this.nextPageRequestOptions()!=null}async getNextPage(){let $=this.nextPageRequestOptions();if(!$)throw new R("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await U(this,E8,"f").requestAPIList(this.constructor,$)}async*iterPages(){let $=this;yield $;while($.hasNextPage())$=await $.getNextPage(),yield $}async*[(E8=new WeakMap,Symbol.asyncIterator)](){for await(let $ of this.iterPages())for(let Z of $.getPaginatedItems())yield Z}}class j8 extends K1{constructor($,Z,Y){super($,Z,async(J,Q)=>new Y(J,Q.response,await O8(J,Q),Q.options))}async*[Symbol.asyncIterator](){let $=await this;for await(let Z of $)yield Z}}class M$ extends N2{constructor($,Z,Y,J){super($,Z,Y,J);this.data=Y.data||[],this.has_more=Y.has_more||!1,this.first_id=Y.first_id||null,this.last_id=Y.last_id||null}getPaginatedItems(){return this.data??[]}hasNextPage(){if(this.has_more===!1)return!1;return super.hasNextPage()}nextPageRequestOptions(){if(this.options.query?.before_id){let Z=this.first_id;if(!Z)return null;return{...this.options,query:{...U8(this.options.query),before_id:Z}}}let $=this.last_id;if(!$)return null;return{...this.options,query:{...U8(this.options.query),after_id:$}}}}class U4 extends N2{constructor($,Z,Y,J){super($,Z,Y,J);this.data=Y.data||[],this.has_more=Y.has_more||!1,this.next_page=Y.next_page||null}getPaginatedItems(){return this.data??[]}hasNextPage(){if(this.has_more===!1)return!1;return super.hasNextPage()}nextPageRequestOptions(){let $=this.next_page;if(!$)return null;return{...this.options,query:{...U8(this.options.query),page:$}}}}var M2=()=>{if(typeof File>"u"){let{process:$}=globalThis,Z=typeof $?.versions?.node==="string"&&parseInt($.versions.node.split("."))<20;throw Error("`File` is not defined as a global, which is required for file uploads."+(Z?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};function z1($,Z,Y){return M2(),new File($,Z??"unknown_file",Y)}function B4($,Z){let Y=typeof $==="object"&&$!==null&&(("name"in $)&&$.name&&String($.name)||("url"in $)&&$.url&&String($.url)||("filename"in $)&&$.filename&&String($.filename)||("path"in $)&&$.path&&String($.path))||"";return Z?Y.split(/[\\/]/).pop()||void 0:Y}var O2=($)=>$!=null&&typeof $==="object"&&typeof $[Symbol.asyncIterator]==="function";var j1=async($,Z,Y=!0)=>{return{...$,body:await v3($.body,Z,Y)}},I5=new WeakMap;function f3($){let Z=typeof $==="function"?$:$.fetch,Y=I5.get(Z);if(Y)return Y;let J=(async()=>{try{let Q="Response"in Z?Z.Response:(await Z("data:,")).constructor,X=new FormData;if(X.toString()===await new Q(X).text())return!1;return!0}catch{return!0}})();return I5.set(Z,J),J}var v3=async($,Z,Y=!0)=>{if(!await f3(Z))throw TypeError("The provided fetch function does not support file uploads with the current global FormData class.");let J=new FormData;return await Promise.all(Object.entries($||{}).map(([Q,X])=>C2(J,Q,X,Y))),J},g3=($)=>$ instanceof Blob&&("name"in $);var C2=async($,Z,Y,J)=>{if(Y===void 0)return;if(Y==null)throw TypeError(`Received null for "${Z}"; to pass null in FormData, you must use the string 'null'`);if(typeof Y==="string"||typeof Y==="number"||typeof Y==="boolean")$.append(Z,String(Y));else if(Y instanceof Response){let Q={},X=Y.headers.get("Content-Type");if(X)Q={type:X};$.append(Z,z1([await Y.blob()],B4(Y,J),Q))}else if(O2(Y))$.append(Z,z1([await new Response(N8(Y)).blob()],B4(Y,J)));else if(g3(Y))$.append(Z,z1([Y],B4(Y,J),{type:Y.type}));else if(Array.isArray(Y))await Promise.all(Y.map((Q)=>C2($,Z+"[]",Q,J)));else if(typeof Y==="object")await Promise.all(Object.entries(Y).map(([Q,X])=>C2($,`${Z}[${Q}]`,X,J)));else throw TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${Y} instead`)};var S5=($)=>$!=null&&typeof $==="object"&&typeof $.size==="number"&&typeof $.type==="string"&&typeof $.text==="function"&&typeof $.slice==="function"&&typeof $.arrayBuffer==="function",m3=($)=>$!=null&&typeof $==="object"&&typeof $.name==="string"&&typeof $.lastModified==="number"&&S5($),c3=($)=>$!=null&&typeof $==="object"&&typeof $.url==="string"&&typeof $.blob==="function";async function F8($,Z,Y){if(M2(),$=await $,Z||(Z=B4($,!0)),m3($)){if($ instanceof File&&Z==null&&Y==null)return $;return z1([await $.arrayBuffer()],Z??$.name,{type:$.type,lastModified:$.lastModified,...Y})}if(c3($)){let Q=await $.blob();return Z||(Z=new URL($.url).pathname.split(/[\\/]/).pop()),z1(await E2(Q),Z,Y)}let J=await E2($);if(!Y?.type){let Q=J.find((X)=>typeof X==="object"&&("type"in X)&&X.type);if(typeof Q==="string")Y={...Y,type:Q}}return z1(J,Z,Y)}async function E2($){let Z=[];if(typeof $==="string"||ArrayBuffer.isView($)||$ instanceof ArrayBuffer)Z.push($);else if(S5($))Z.push($ instanceof Blob?$:await $.arrayBuffer());else if(O2($))for await(let Y of $)Z.push(...await E2(Y));else{let Y=$?.constructor?.name;throw Error(`Unexpected data type: ${typeof $}${Y?`; constructor: ${Y}`:""}${d3($)}`)}return Z}function d3($){if(typeof $!=="object"||$===null)return"";return`; props: [${Object.getOwnPropertyNames($).map((Y)=>`"${Y}"`).join(", ")}]`}class g{constructor($){this._client=$}}var b5=Symbol.for("brand.privateNullableHeaders");function*p3($){if(!$)return;if(b5 in $){let{values:J,nulls:Q}=$;yield*J.entries();for(let X of Q)yield[X,null];return}let Z=!1,Y;if($ instanceof Headers)Y=$.entries();else if(G2($))Y=$;else Z=!0,Y=Object.entries($??{});for(let J of Y){let Q=J[0];if(typeof Q!=="string")throw TypeError("expected header name to be a string");let X=G2(J[1])?J[1]:[J[1]],K=!1;for(let V of X){if(V===void 0)continue;if(Z&&!K)K=!0,yield[Q,null];yield[Q,V]}}}var D=($)=>{let Z=new Headers,Y=new Set;for(let J of $){let Q=new Set;for(let[X,K]of p3(J)){let V=X.toLowerCase();if(!Q.has(V))Z.delete(X),Q.add(V);if(K===null)Z.delete(X),Y.add(V);else Z.append(X,K),Y.delete(V)}}return{[b5]:!0,values:Z,nulls:Y}};var N4=Symbol("anthropic.sdk.stainlessHelper");function L8($){return typeof $==="object"&&$!==null&&N4 in $}function j2($,Z){let Y=new Set;if($){for(let J of $)if(L8(J))Y.add(J[N4])}if(Z)for(let J of Z){if(L8(J))Y.add(J[N4]);if(Array.isArray(J.content)){for(let Q of J.content)if(L8(Q))Y.add(Q[N4])}}return Array.from(Y)}function R8($,Z){let Y=j2($,Z);if(Y.length===0)return{};return{"x-stainless-helper":Y.join(", ")}}function k5($){if(L8($))return{"x-stainless-helper":$[N4]};return{}}function _5($){return $.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}var y5=Object.freeze(Object.create(null)),l3=($=_5)=>function(Y,...J){if(Y.length===1)return Y[0];let Q=!1,X=[],K=Y.reduce((z,M,N)=>{if(/[?#]/.test(M))Q=!0;let E=J[N],L=(Q?encodeURIComponent:$)(""+E);if(N!==J.length&&(E==null||typeof E==="object"&&E.toString===Object.getPrototypeOf(Object.getPrototypeOf(E.hasOwnProperty??y5)??y5)?.toString))L=E+"",X.push({start:z.length+M.length,length:L.length,error:`Value of type ${Object.prototype.toString.call(E).slice(8,-1)} is not a valid path parameter`});return z+M+(N===J.length?"":L)},""),V=K.split(/[?#]/,1)[0],G=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi,H;while((H=G.exec(V))!==null)X.push({start:H.index,length:H[0].length,error:`Value "${H[0]}" can't be safely passed as a path parameter`});if(X.sort((z,M)=>z.start-M.start),X.length>0){let z=0,M=X.reduce((N,E)=>{let L=" ".repeat(E.start-z),w="^".repeat(E.length);return z=E.start+E.length,N+L+w},"");throw new R(`Path parameters result in path with invalid segments:
50
- ${X.map((N)=>N.error).join(`
50
+ /export Export markdown /exit Quit`)}function _0($){console.error(`smolerclaw: ${$}`),process.exit(2)}e();a();import{existsSync as s0,mkdirSync as sY,readFileSync as yZ}from"fs";import{homedir as tY}from"os";import{join as h$}from"path";var D8=tY(),t0=I?h$(process.env.APPDATA||h$(D8,"AppData","Roaming"),"smolerclaw"):h$(D8,".config","smolerclaw"),t7=I?h$(process.env.LOCALAPPDATA||h$(D8,"AppData","Local"),"smolerclaw"):h$(D8,".local","share","smolerclaw"),Q4=h$(t0,"config.json"),a4={model:"claude-haiku-4-5-20251001",maxTokens:4096,maxHistory:50,systemPrompt:"",skillsDir:"./skills",dataDir:t7,toolApproval:"auto",language:"auto",maxSessionCost:0};function P8($){if(!s0($))sY($,{recursive:!0})}function _Z(){if(P8(t0),P8(t7),P8(h$(t7,"sessions")),I)$Q();if(!s0(Q4))return S(Q4,JSON.stringify(a4,null,2)),{...a4};let $;try{$=JSON.parse(yZ(Q4,"utf-8"))}catch{return S(Q4,JSON.stringify(a4,null,2)),{...a4}}return eY({...a4,...$})}function eY($){let Z={...a4};if(typeof $.model==="string"&&$.model.trim())Z.model=$.model;if(typeof $.maxTokens==="number"&&$.maxTokens>0&&$.maxTokens<=1e5)Z.maxTokens=$.maxTokens;if(typeof $.maxHistory==="number"&&$.maxHistory>0&&$.maxHistory<=1000)Z.maxHistory=$.maxHistory;if(typeof $.systemPrompt==="string")Z.systemPrompt=$.systemPrompt;if(typeof $.skillsDir==="string"&&$.skillsDir.trim())Z.skillsDir=$.skillsDir;if(typeof $.dataDir==="string"&&$.dataDir.trim())Z.dataDir=$.dataDir;let J=["auto","confirm-writes","confirm-all"];if(typeof $.toolApproval==="string"&&J.includes($.toolApproval))Z.toolApproval=$.toolApproval;if(typeof $.language==="string")Z.language=$.language;if(typeof $.maxSessionCost==="number"&&$.maxSessionCost>=0)Z.maxSessionCost=$.maxSessionCost;return Z}function e0($){P8(t0),S(Q4,JSON.stringify($,null,2))}function e7(){return Q4}function $Q(){let $=h$(D8,".config","smolerclaw","config.json");if(s0($)&&!s0(Q4))try{let Z=yZ($,"utf-8");P8(t0),S(Q4,Z)}catch{}}import{existsSync as ZQ,readFileSync as JQ}from"fs";import{homedir as YQ}from"os";import{join as QQ}from"path";var vZ=QQ(YQ(),".claude",".credentials.json");function $5(){let $=XQ();if($)return $;throw Error("Claude Code subscription not found or expired.\nInstall Claude Code with a Pro/Max subscription and run `claude` to authenticate.")}function XQ(){if(!ZQ(vZ))return null;try{let Z=JSON.parse(JQ(vZ,"utf-8")).claudeAiOauth;if(!Z?.accessToken)return null;if(Date.now()>Z.expiresAt-60000)return null;return{token:Z.accessToken,subscriptionType:Z.subscriptionType,expiresAt:Z.expiresAt}}catch{return null}}function Z5(){try{return $5()}catch{return null}}function fZ($){return`sub:${$.subscriptionType||"pro"}`}function L($,Z,J,Y,Q){if(Y==="m")throw TypeError("Private method is not writable");if(Y==="a"&&!Q)throw TypeError("Private accessor was defined without a setter");if(typeof Z==="function"?$!==Z||!Q:!Z.has($))throw TypeError("Cannot write private member to an object whose class did not declare it");return Y==="a"?Q.call($,J):Q?Q.value=J:Z.set($,J),J}function C($,Z,J,Y){if(J==="a"&&!Y)throw TypeError("Private accessor was defined without a getter");if(typeof Z==="function"?$!==Z||!Y:!Z.has($))throw TypeError("Cannot read private member from an object whose class did not declare it");return J==="m"?Y:J==="a"?Y.call($):Y?Y.value:Z.get($)}var J5=function(){let{crypto:$}=globalThis;if($?.randomUUID)return J5=$.randomUUID.bind($),$.randomUUID();let Z=new Uint8Array(1),J=$?()=>$.getRandomValues(Z)[0]:()=>Math.random()*255&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(Y)=>(+Y^J()&15>>+Y/4).toString(16))};function g$($){return typeof $==="object"&&$!==null&&(("name"in $)&&$.name==="AbortError"||("message"in $)&&String($.message).includes("FetchRequestCanceledException"))}var T8=($)=>{if($ instanceof Error)return $;if(typeof $==="object"&&$!==null){try{if(Object.prototype.toString.call($)==="[object Error]"){let Z=Error($.message,$.cause?{cause:$.cause}:{});if($.stack)Z.stack=$.stack;if($.cause&&!Z.cause)Z.cause=$.cause;if($.name)Z.name=$.name;return Z}}catch{}try{return Error(JSON.stringify($))}catch{}}return Error($)};class D extends Error{}class n extends D{constructor($,Z,J,Y){super(`${n.makeMessage($,Z,J)}`);this.status=$,this.headers=Y,this.requestID=Y?.get("request-id"),this.error=Z}static makeMessage($,Z,J){let Y=Z?.message?typeof Z.message==="string"?Z.message:JSON.stringify(Z.message):Z?JSON.stringify(Z):J;if($&&Y)return`${$} ${Y}`;if($)return`${$} status code (no body)`;if(Y)return Y;return"(no status code or body)"}static generate($,Z,J,Y){if(!$||!Y)return new R4({message:J,cause:T8(Z)});let Q=Z;if($===400)return new A8($,Q,J,Y);if($===401)return new x8($,Q,J,Y);if($===403)return new S8($,Q,J,Y);if($===404)return new w8($,Q,J,Y);if($===409)return new k8($,Q,J,Y);if($===422)return new b8($,Q,J,Y);if($===429)return new y8($,Q,J,Y);if($>=500)return new _8($,Q,J,Y);return new n($,Q,J,Y)}}class Y$ extends n{constructor({message:$}={}){super(void 0,void 0,$||"Request was aborted.",void 0)}}class R4 extends n{constructor({message:$,cause:Z}){super(void 0,void 0,$||"Connection error.",void 0);if(Z)this.cause=Z}}class I8 extends R4{constructor({message:$}={}){super({message:$??"Request timed out."})}}class A8 extends n{}class x8 extends n{}class S8 extends n{}class w8 extends n{}class k8 extends n{}class b8 extends n{}class y8 extends n{}class _8 extends n{}var zQ=/^[a-z][a-z0-9+.-]*:/i,hZ=($)=>{return zQ.test($)},Y5=($)=>(Y5=Array.isArray,Y5($)),Q5=Y5;function $1($){if(typeof $!=="object")return{};return $??{}}function X5($){if(!$)return!0;for(let Z in $)return!1;return!0}function gZ($,Z){return Object.prototype.hasOwnProperty.call($,Z)}var mZ=($,Z)=>{if(typeof Z!=="number"||!Number.isInteger(Z))throw new D(`${$} must be an integer`);if(Z<0)throw new D(`${$} must be a positive integer`);return Z};var Z1=($)=>{try{return JSON.parse($)}catch(Z){return}};var pZ=($)=>new Promise((Z)=>setTimeout(Z,$));var X4="0.80.0";var lZ=()=>{return typeof window<"u"&&typeof window.document<"u"&&typeof navigator<"u"};function VQ(){if(typeof Deno<"u"&&Deno.build!=null)return"deno";if(typeof EdgeRuntime<"u")return"edge";if(Object.prototype.toString.call(typeof globalThis.process<"u"?globalThis.process:0)==="[object process]")return"node";return"unknown"}var GQ=()=>{let $=VQ();if($==="deno")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":X4,"X-Stainless-OS":uZ(Deno.build.os),"X-Stainless-Arch":cZ(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":typeof Deno.version==="string"?Deno.version:Deno.version?.deno??"unknown"};if(typeof EdgeRuntime<"u")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":X4,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if($==="node")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":X4,"X-Stainless-OS":uZ(globalThis.process.platform??"unknown"),"X-Stainless-Arch":cZ(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};let Z=HQ();if(Z)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":X4,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${Z.browser}`,"X-Stainless-Runtime-Version":Z.version};return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":X4,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};function HQ(){if(typeof navigator>"u"||!navigator)return null;let $=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(let{key:Z,pattern:J}of $){let Y=J.exec(navigator.userAgent);if(Y){let Q=Y[1]||0,X=Y[2]||0,K=Y[3]||0;return{browser:Z,version:`${Q}.${X}.${K}`}}}return null}var cZ=($)=>{if($==="x32")return"x32";if($==="x86_64"||$==="x64")return"x64";if($==="arm")return"arm";if($==="aarch64"||$==="arm64")return"arm64";if($)return`other:${$}`;return"unknown"},uZ=($)=>{if($=$.toLowerCase(),$.includes("ios"))return"iOS";if($==="android")return"Android";if($==="darwin")return"MacOS";if($==="win32")return"Windows";if($==="freebsd")return"FreeBSD";if($==="openbsd")return"OpenBSD";if($==="linux")return"Linux";if($)return`Other:${$}`;return"Unknown"},dZ,oZ=()=>{return dZ??(dZ=GQ())};function aZ(){if(typeof fetch<"u")return fetch;throw Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new Anthropic({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}function K5(...$){let Z=globalThis.ReadableStream;if(typeof Z>"u")throw Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new Z(...$)}function J1($){let Z=Symbol.asyncIterator in $?$[Symbol.asyncIterator]():$[Symbol.iterator]();return K5({start(){},async pull(J){let{done:Y,value:Q}=await Z.next();if(Y)J.close();else J.enqueue(Q)},async cancel(){await Z.return?.()}})}function v8($){if($[Symbol.asyncIterator])return $;let Z=$.getReader();return{async next(){try{let J=await Z.read();if(J?.done)Z.releaseLock();return J}catch(J){throw Z.releaseLock(),J}},async return(){let J=Z.cancel();return Z.releaseLock(),await J,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}async function nZ($){if($===null||typeof $!=="object")return;if($[Symbol.asyncIterator]){await $[Symbol.asyncIterator]().return?.();return}let Z=$.getReader(),J=Z.cancel();Z.releaseLock(),await J}var rZ=({headers:$,body:Z})=>{return{bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(Z)}};function iZ($){return Object.entries($).filter(([Z,J])=>typeof J<"u").map(([Z,J])=>{if(typeof J==="string"||typeof J==="number"||typeof J==="boolean")return`${encodeURIComponent(Z)}=${encodeURIComponent(J)}`;if(J===null)return`${encodeURIComponent(Z)}=`;throw new D(`Cannot stringify type ${typeof J}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`)}).join("&")}function eZ($){let Z=0;for(let Q of $)Z+=Q.length;let J=new Uint8Array(Z),Y=0;for(let Q of $)J.set(Q,Y),Y+=Q.length;return J}var sZ;function f8($){let Z;return(sZ??(Z=new globalThis.TextEncoder,sZ=Z.encode.bind(Z)))($)}var tZ;function z5($){let Z;return(tZ??(Z=new globalThis.TextDecoder,tZ=Z.decode.bind(Z)))($)}var B$,N$;class K4{constructor(){B$.set(this,void 0),N$.set(this,void 0),L(this,B$,new Uint8Array,"f"),L(this,N$,null,"f")}decode($){if($==null)return[];let Z=$ instanceof ArrayBuffer?new Uint8Array($):typeof $==="string"?f8($):$;L(this,B$,eZ([C(this,B$,"f"),Z]),"f");let J=[],Y;while((Y=UQ(C(this,B$,"f"),C(this,N$,"f")))!=null){if(Y.carriage&&C(this,N$,"f")==null){L(this,N$,Y.index,"f");continue}if(C(this,N$,"f")!=null&&(Y.index!==C(this,N$,"f")+1||Y.carriage)){J.push(z5(C(this,B$,"f").subarray(0,C(this,N$,"f")-1))),L(this,B$,C(this,B$,"f").subarray(C(this,N$,"f")),"f"),L(this,N$,null,"f");continue}let Q=C(this,N$,"f")!==null?Y.preceding-1:Y.preceding,X=z5(C(this,B$,"f").subarray(0,Q));J.push(X),L(this,B$,C(this,B$,"f").subarray(Y.index),"f"),L(this,N$,null,"f")}return J}flush(){if(!C(this,B$,"f").length)return[];return this.decode(`
51
+ `)}}B$=new WeakMap,N$=new WeakMap;K4.NEWLINE_CHARS=new Set([`
52
+ `,"\r"]);K4.NEWLINE_REGEXP=/\r\n|[\n\r]/g;function UQ($,Z){for(let Q=Z??0;Q<$.length;Q++){if($[Q]===10)return{preceding:Q,index:Q+1,carriage:!1};if($[Q]===13)return{preceding:Q,index:Q+1,carriage:!0}}return null}function $2($){for(let Y=0;Y<$.length-1;Y++){if($[Y]===10&&$[Y+1]===10)return Y+2;if($[Y]===13&&$[Y+1]===13)return Y+2;if($[Y]===13&&$[Y+1]===10&&Y+3<$.length&&$[Y+2]===13&&$[Y+3]===10)return Y+4}return-1}var Q1={off:0,error:200,warn:300,info:400,debug:500},V5=($,Z,J)=>{if(!$)return;if(gZ(Q1,$))return $;s(J).warn(`${Z} was set to ${JSON.stringify($)}, expected one of ${JSON.stringify(Object.keys(Q1))}`);return};function h8(){}function Y1($,Z,J){if(!Z||Q1[$]>Q1[J])return h8;else return Z[$].bind(Z)}var BQ={error:h8,warn:h8,info:h8,debug:h8},Z2=new WeakMap;function s($){let Z=$.logger,J=$.logLevel??"off";if(!Z)return BQ;let Y=Z2.get(Z);if(Y&&Y[0]===J)return Y[1];let Q={error:Y1("error",Z,J),warn:Y1("warn",Z,J),info:Y1("info",Z,J),debug:Y1("debug",Z,J)};return Z2.set(Z,[J,Q]),Q}var m$=($)=>{if($.options)$.options={...$.options},delete $.options.headers;if($.headers)$.headers=Object.fromEntries(($.headers instanceof Headers?[...$.headers]:Object.entries($.headers)).map(([Z,J])=>[Z,Z.toLowerCase()==="x-api-key"||Z.toLowerCase()==="authorization"||Z.toLowerCase()==="cookie"||Z.toLowerCase()==="set-cookie"?"***":J]));if("retryOfRequestLogID"in $){if($.retryOfRequestLogID)$.retryOf=$.retryOfRequestLogID;delete $.retryOfRequestLogID}return $};var g8;class M${constructor($,Z,J){this.iterator=$,g8.set(this,void 0),this.controller=Z,L(this,g8,J,"f")}static fromSSEResponse($,Z,J){let Y=!1,Q=J?s(J):console;async function*X(){if(Y)throw new D("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");Y=!0;let K=!1;try{for await(let V of NQ($,Z)){if(V.event==="completion")try{yield JSON.parse(V.data)}catch(G){throw Q.error("Could not parse message into JSON:",V.data),Q.error("From chunk:",V.raw),G}if(V.event==="message_start"||V.event==="message_delta"||V.event==="message_stop"||V.event==="content_block_start"||V.event==="content_block_delta"||V.event==="content_block_stop")try{yield JSON.parse(V.data)}catch(G){throw Q.error("Could not parse message into JSON:",V.data),Q.error("From chunk:",V.raw),G}if(V.event==="ping")continue;if(V.event==="error")throw new n(void 0,Z1(V.data)??V.data,void 0,$.headers)}K=!0}catch(V){if(g$(V))return;throw V}finally{if(!K)Z.abort()}}return new M$(X,Z,J)}static fromReadableStream($,Z,J){let Y=!1;async function*Q(){let K=new K4,V=v8($);for await(let G of V)for(let H of K.decode(G))yield H;for(let G of K.flush())yield G}async function*X(){if(Y)throw new D("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");Y=!0;let K=!1;try{for await(let V of Q()){if(K)continue;if(V)yield JSON.parse(V)}K=!0}catch(V){if(g$(V))return;throw V}finally{if(!K)Z.abort()}}return new M$(X,Z,J)}[(g8=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){let $=[],Z=[],J=this.iterator(),Y=(Q)=>{return{next:()=>{if(Q.length===0){let X=J.next();$.push(X),Z.push(X)}return Q.shift()}}};return[new M$(()=>Y($),this.controller,C(this,g8,"f")),new M$(()=>Y(Z),this.controller,C(this,g8,"f"))]}toReadableStream(){let $=this,Z;return K5({async start(){Z=$[Symbol.asyncIterator]()},async pull(J){try{let{value:Y,done:Q}=await Z.next();if(Q)return J.close();let X=f8(JSON.stringify(Y)+`
53
+ `);J.enqueue(X)}catch(Y){J.error(Y)}},async cancel(){await Z.return?.()}})}}async function*NQ($,Z){if(!$.body){if(Z.abort(),typeof globalThis.navigator<"u"&&globalThis.navigator.product==="ReactNative")throw new D("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new D("Attempted to iterate over a response with no body")}let J=new J2,Y=new K4,Q=v8($.body);for await(let X of MQ(Q))for(let K of Y.decode(X)){let V=J.decode(K);if(V)yield V}for(let X of Y.flush()){let K=J.decode(X);if(K)yield K}}async function*MQ($){let Z=new Uint8Array;for await(let J of $){if(J==null)continue;let Y=J instanceof ArrayBuffer?new Uint8Array(J):typeof J==="string"?f8(J):J,Q=new Uint8Array(Z.length+Y.length);Q.set(Z),Q.set(Y,Z.length),Z=Q;let X;while((X=$2(Z))!==-1)yield Z.slice(0,X),Z=Z.slice(X)}if(Z.length>0)yield Z}class J2{constructor(){this.event=null,this.data=[],this.chunks=[]}decode($){if($.endsWith("\r"))$=$.substring(0,$.length-1);if(!$){if(!this.event&&!this.data.length)return null;let Q={event:this.event,data:this.data.join(`
54
+ `),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],Q}if(this.chunks.push($),$.startsWith(":"))return null;let[Z,J,Y]=CQ($,":");if(Y.startsWith(" "))Y=Y.substring(1);if(Z==="event")this.event=Y;else if(Z==="data")this.data.push(Y);return null}}function CQ($,Z){let J=$.indexOf(Z);if(J!==-1)return[$.substring(0,J),Z,$.substring(J+Z.length)];return[$,"",""]}async function X1($,Z){let{response:J,requestLogID:Y,retryOfRequestLogID:Q,startTime:X}=Z,K=await(async()=>{if(Z.options.stream){if(s($).debug("response",J.status,J.url,J.headers,J.body),Z.options.__streamClass)return Z.options.__streamClass.fromSSEResponse(J,Z.controller);return M$.fromSSEResponse(J,Z.controller)}if(J.status===204)return null;if(Z.options.__binaryResponse)return J;let G=J.headers.get("content-type")?.split(";")[0]?.trim();if(G?.includes("application/json")||G?.endsWith("+json")){if(J.headers.get("content-length")==="0")return;let U=await J.json();return G5(U,J)}return await J.text()})();return s($).debug(`[${Y}] response parsed`,m$({retryOfRequestLogID:Q,url:J.url,status:J.status,body:K,durationMs:Date.now()-X})),K}function G5($,Z){if(!$||typeof $!=="object"||Array.isArray($))return $;return Object.defineProperty($,"_request_id",{value:Z.headers.get("request-id"),enumerable:!1})}var m8;class L4 extends Promise{constructor($,Z,J=X1){super((Y)=>{Y(null)});this.responsePromise=Z,this.parseResponse=J,m8.set(this,void 0),L(this,m8,$,"f")}_thenUnwrap($){return new L4(C(this,m8,"f"),this.responsePromise,async(Z,J)=>G5($(await this.parseResponse(Z,J),J),J.response))}asResponse(){return this.responsePromise.then(($)=>$.response)}async withResponse(){let[$,Z]=await Promise.all([this.parse(),this.asResponse()]);return{data:$,response:Z,request_id:Z.headers.get("request-id")}}parse(){if(!this.parsedPromise)this.parsedPromise=this.responsePromise.then(($)=>this.parseResponse(C(this,m8,"f"),$));return this.parsedPromise}then($,Z){return this.parse().then($,Z)}catch($){return this.parse().catch($)}finally($){return this.parse().finally($)}}m8=new WeakMap;var K1;class H5{constructor($,Z,J,Y){K1.set(this,void 0),L(this,K1,$,"f"),this.options=Y,this.response=Z,this.body=J}hasNextPage(){if(!this.getPaginatedItems().length)return!1;return this.nextPageRequestOptions()!=null}async getNextPage(){let $=this.nextPageRequestOptions();if(!$)throw new D("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await C(this,K1,"f").requestAPIList(this.constructor,$)}async*iterPages(){let $=this;yield $;while($.hasNextPage())$=await $.getNextPage(),yield $}async*[(K1=new WeakMap,Symbol.asyncIterator)](){for await(let $ of this.iterPages())for(let Z of $.getPaginatedItems())yield Z}}class z1 extends L4{constructor($,Z,J){super($,Z,async(Y,Q)=>new J(Y,Q.response,await X1(Y,Q),Q.options))}async*[Symbol.asyncIterator](){let $=await this;for await(let Z of $)yield Z}}class I$ extends H5{constructor($,Z,J,Y){super($,Z,J,Y);this.data=J.data||[],this.has_more=J.has_more||!1,this.first_id=J.first_id||null,this.last_id=J.last_id||null}getPaginatedItems(){return this.data??[]}hasNextPage(){if(this.has_more===!1)return!1;return super.hasNextPage()}nextPageRequestOptions(){if(this.options.query?.before_id){let Z=this.first_id;if(!Z)return null;return{...this.options,query:{...$1(this.options.query),before_id:Z}}}let $=this.last_id;if(!$)return null;return{...this.options,query:{...$1(this.options.query),after_id:$}}}}class p8 extends H5{constructor($,Z,J,Y){super($,Z,J,Y);this.data=J.data||[],this.has_more=J.has_more||!1,this.next_page=J.next_page||null}getPaginatedItems(){return this.data??[]}hasNextPage(){if(this.has_more===!1)return!1;return super.hasNextPage()}nextPageRequestOptions(){let $=this.next_page;if(!$)return null;return{...this.options,query:{...$1(this.options.query),page:$}}}}var W5=()=>{if(typeof File>"u"){let{process:$}=globalThis,Z=typeof $?.versions?.node==="string"&&parseInt($.versions.node.split("."))<20;throw Error("`File` is not defined as a global, which is required for file uploads."+(Z?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};function P4($,Z,J){return W5(),new File($,Z??"unknown_file",J)}function c8($,Z){let J=typeof $==="object"&&$!==null&&(("name"in $)&&$.name&&String($.name)||("url"in $)&&$.url&&String($.url)||("filename"in $)&&$.filename&&String($.filename)||("path"in $)&&$.path&&String($.path))||"";return Z?J.split(/[\\/]/).pop()||void 0:J}var U5=($)=>$!=null&&typeof $==="object"&&typeof $[Symbol.asyncIterator]==="function";var n4=async($,Z,J=!0)=>{return{...$,body:await FQ($.body,Z,J)}},Y2=new WeakMap;function OQ($){let Z=typeof $==="function"?$:$.fetch,J=Y2.get(Z);if(J)return J;let Y=(async()=>{try{let Q="Response"in Z?Z.Response:(await Z("data:,")).constructor,X=new FormData;if(X.toString()===await new Q(X).text())return!1;return!0}catch{return!0}})();return Y2.set(Z,Y),Y}var FQ=async($,Z,J=!0)=>{if(!await OQ(Z))throw TypeError("The provided fetch function does not support file uploads with the current global FormData class.");let Y=new FormData;return await Promise.all(Object.entries($||{}).map(([Q,X])=>q5(Y,Q,X,J))),Y},EQ=($)=>$ instanceof Blob&&("name"in $);var q5=async($,Z,J,Y)=>{if(J===void 0)return;if(J==null)throw TypeError(`Received null for "${Z}"; to pass null in FormData, you must use the string 'null'`);if(typeof J==="string"||typeof J==="number"||typeof J==="boolean")$.append(Z,String(J));else if(J instanceof Response){let Q={},X=J.headers.get("Content-Type");if(X)Q={type:X};$.append(Z,P4([await J.blob()],c8(J,Y),Q))}else if(U5(J))$.append(Z,P4([await new Response(J1(J)).blob()],c8(J,Y)));else if(EQ(J))$.append(Z,P4([J],c8(J,Y),{type:J.type}));else if(Array.isArray(J))await Promise.all(J.map((Q)=>q5($,Z+"[]",Q,Y)));else if(typeof J==="object")await Promise.all(Object.entries(J).map(([Q,X])=>q5($,`${Z}[${Q}]`,X,Y)));else throw TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${J} instead`)};var Q2=($)=>$!=null&&typeof $==="object"&&typeof $.size==="number"&&typeof $.type==="string"&&typeof $.text==="function"&&typeof $.slice==="function"&&typeof $.arrayBuffer==="function",RQ=($)=>$!=null&&typeof $==="object"&&typeof $.name==="string"&&typeof $.lastModified==="number"&&Q2($),LQ=($)=>$!=null&&typeof $==="object"&&typeof $.url==="string"&&typeof $.blob==="function";async function V1($,Z,J){if(W5(),$=await $,Z||(Z=c8($,!0)),RQ($)){if($ instanceof File&&Z==null&&J==null)return $;return P4([await $.arrayBuffer()],Z??$.name,{type:$.type,lastModified:$.lastModified,...J})}if(LQ($)){let Q=await $.blob();return Z||(Z=new URL($.url).pathname.split(/[\\/]/).pop()),P4(await B5(Q),Z,J)}let Y=await B5($);if(!J?.type){let Q=Y.find((X)=>typeof X==="object"&&("type"in X)&&X.type);if(typeof Q==="string")J={...J,type:Q}}return P4(Y,Z,J)}async function B5($){let Z=[];if(typeof $==="string"||ArrayBuffer.isView($)||$ instanceof ArrayBuffer)Z.push($);else if(Q2($))Z.push($ instanceof Blob?$:await $.arrayBuffer());else if(U5($))for await(let J of $)Z.push(...await B5(J));else{let J=$?.constructor?.name;throw Error(`Unexpected data type: ${typeof $}${J?`; constructor: ${J}`:""}${PQ($)}`)}return Z}function PQ($){if(typeof $!=="object"||$===null)return"";return`; props: [${Object.getOwnPropertyNames($).map((J)=>`"${J}"`).join(", ")}]`}class m{constructor($){this._client=$}}var X2=Symbol.for("brand.privateNullableHeaders");function*TQ($){if(!$)return;if(X2 in $){let{values:Y,nulls:Q}=$;yield*Y.entries();for(let X of Q)yield[X,null];return}let Z=!1,J;if($ instanceof Headers)J=$.entries();else if(Q5($))J=$;else Z=!0,J=Object.entries($??{});for(let Y of J){let Q=Y[0];if(typeof Q!=="string")throw TypeError("expected header name to be a string");let X=Q5(Y[1])?Y[1]:[Y[1]],K=!1;for(let V of X){if(V===void 0)continue;if(Z&&!K)K=!0,yield[Q,null];yield[Q,V]}}}var A=($)=>{let Z=new Headers,J=new Set;for(let Y of $){let Q=new Set;for(let[X,K]of TQ(Y)){let V=X.toLowerCase();if(!Q.has(V))Z.delete(X),Q.add(V);if(K===null)Z.delete(X),J.add(V);else Z.append(X,K),J.delete(V)}}return{[X2]:!0,values:Z,nulls:J}};var u8=Symbol("anthropic.sdk.stainlessHelper");function G1($){return typeof $==="object"&&$!==null&&u8 in $}function N5($,Z){let J=new Set;if($){for(let Y of $)if(G1(Y))J.add(Y[u8])}if(Z)for(let Y of Z){if(G1(Y))J.add(Y[u8]);if(Array.isArray(Y.content)){for(let Q of Y.content)if(G1(Q))J.add(Q[u8])}}return Array.from(J)}function H1($,Z){let J=N5($,Z);if(J.length===0)return{};return{"x-stainless-helper":J.join(", ")}}function K2($){if(G1($))return{"x-stainless-helper":$[u8]};return{}}function V2($){return $.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}var z2=Object.freeze(Object.create(null)),IQ=($=V2)=>function(J,...Y){if(J.length===1)return J[0];let Q=!1,X=[],K=J.reduce((z,B,U)=>{if(/[?#]/.test(B))Q=!0;let M=Y[U],O=(Q?encodeURIComponent:$)(""+M);if(U!==Y.length&&(M==null||typeof M==="object"&&M.toString===Object.getPrototypeOf(Object.getPrototypeOf(M.hasOwnProperty??z2)??z2)?.toString))O=M+"",X.push({start:z.length+B.length,length:O.length,error:`Value of type ${Object.prototype.toString.call(M).slice(8,-1)} is not a valid path parameter`});return z+B+(U===Y.length?"":O)},""),V=K.split(/[?#]/,1)[0],G=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi,H;while((H=G.exec(V))!==null)X.push({start:H.index,length:H[0].length,error:`Value "${H[0]}" can't be safely passed as a path parameter`});if(X.sort((z,B)=>z.start-B.start),X.length>0){let z=0,B=X.reduce((U,M)=>{let O=" ".repeat(M.start-z),P="^".repeat(M.length);return z=M.start+M.length,U+O+P},"");throw new D(`Path parameters result in path with invalid segments:
55
+ ${X.map((U)=>U.error).join(`
51
56
  `)}
52
57
  ${K}
53
- ${M}`)}return K},v=l3(_5);class C4 extends g{list($={},Z){let{betas:Y,...J}=$??{};return this._client.getAPIList("/v1/files",M$,{query:J,...Z,headers:D([{"anthropic-beta":[...Y??[],"files-api-2025-04-14"].toString()},Z?.headers])})}delete($,Z={},Y){let{betas:J}=Z??{};return this._client.delete(v`/v1/files/${$}`,{...Y,headers:D([{"anthropic-beta":[...J??[],"files-api-2025-04-14"].toString()},Y?.headers])})}download($,Z={},Y){let{betas:J}=Z??{};return this._client.get(v`/v1/files/${$}/content`,{...Y,headers:D([{"anthropic-beta":[...J??[],"files-api-2025-04-14"].toString(),Accept:"application/binary"},Y?.headers]),__binaryResponse:!0})}retrieveMetadata($,Z={},Y){let{betas:J}=Z??{};return this._client.get(v`/v1/files/${$}`,{...Y,headers:D([{"anthropic-beta":[...J??[],"files-api-2025-04-14"].toString()},Y?.headers])})}upload($,Z){let{betas:Y,...J}=$;return this._client.post("/v1/files",j1({body:J,...Z,headers:D([{"anthropic-beta":[...Y??[],"files-api-2025-04-14"].toString()},k5(J.file),Z?.headers])},this._client))}}class M4 extends g{retrieve($,Z={},Y){let{betas:J}=Z??{};return this._client.get(v`/v1/models/${$}?beta=true`,{...Y,headers:D([{...J?.toString()!=null?{"anthropic-beta":J?.toString()}:void 0},Y?.headers])})}list($={},Z){let{betas:Y,...J}=$??{};return this._client.getAPIList("/v1/models?beta=true",M$,{query:J,...Z,headers:D([{...Y?.toString()!=null?{"anthropic-beta":Y?.toString()}:void 0},Z?.headers])})}}var A8={"claude-opus-4-20250514":8192,"claude-opus-4-0":8192,"claude-4-opus-20250514":8192,"anthropic.claude-opus-4-20250514-v1:0":8192,"claude-opus-4@20250514":8192,"claude-opus-4-1-20250805":8192,"anthropic.claude-opus-4-1-20250805-v1:0":8192,"claude-opus-4-1@20250805":8192};function h5($){return $?.output_format??$?.output_config?.format}function F2($,Z,Y){let J=h5(Z);if(!Z||!("parse"in(J??{})))return{...$,content:$.content.map((Q)=>{if(Q.type==="text"){let X=Object.defineProperty({...Q},"parsed_output",{value:null,enumerable:!1});return Object.defineProperty(X,"parsed",{get(){return Y.logger.warn("The `parsed` property on `text` blocks is deprecated, please use `parsed_output` instead."),null},enumerable:!1})}return Q}),parsed_output:null};return L2($,Z,Y)}function L2($,Z,Y){let J=null,Q=$.content.map((X)=>{if(X.type==="text"){let K=o3(Z,X.text);if(J===null)J=K;let V=Object.defineProperty({...X},"parsed_output",{value:K,enumerable:!1});return Object.defineProperty(V,"parsed",{get(){return Y.logger.warn("The `parsed` property on `text` blocks is deprecated, please use `parsed_output` instead."),K},enumerable:!1})}return X});return{...$,content:Q,parsed_output:J}}function o3($,Z){let Y=h5($);if(Y?.type!=="json_schema")return null;try{if("parse"in Y)return Y.parse(Z);return JSON.parse(Z)}catch(J){throw new R(`Failed to parse structured output: ${J}`)}}var a3=($)=>{let Z=0,Y=[];while(Z<$.length){let J=$[Z];if(J==="\\"){Z++;continue}if(J==="{"){Y.push({type:"brace",value:"{"}),Z++;continue}if(J==="}"){Y.push({type:"brace",value:"}"}),Z++;continue}if(J==="["){Y.push({type:"paren",value:"["}),Z++;continue}if(J==="]"){Y.push({type:"paren",value:"]"}),Z++;continue}if(J===":"){Y.push({type:"separator",value:":"}),Z++;continue}if(J===","){Y.push({type:"delimiter",value:","}),Z++;continue}if(J==='"'){let V="",G=!1;J=$[++Z];while(J!=='"'){if(Z===$.length){G=!0;break}if(J==="\\"){if(Z++,Z===$.length){G=!0;break}V+=J+$[Z],J=$[++Z]}else V+=J,J=$[++Z]}if(J=$[++Z],!G)Y.push({type:"string",value:V});continue}if(J&&/\s/.test(J)){Z++;continue}let X=/[0-9]/;if(J&&X.test(J)||J==="-"||J==="."){let V="";if(J==="-")V+=J,J=$[++Z];while(J&&X.test(J)||J===".")V+=J,J=$[++Z];Y.push({type:"number",value:V});continue}let K=/[a-z]/i;if(J&&K.test(J)){let V="";while(J&&K.test(J)){if(Z===$.length)break;V+=J,J=$[++Z]}if(V=="true"||V=="false"||V==="null")Y.push({type:"name",value:V});else{Z++;continue}continue}Z++}return Y},F1=($)=>{if($.length===0)return $;let Z=$[$.length-1];switch(Z.type){case"separator":return $=$.slice(0,$.length-1),F1($);break;case"number":let Y=Z.value[Z.value.length-1];if(Y==="."||Y==="-")return $=$.slice(0,$.length-1),F1($);case"string":let J=$[$.length-2];if(J?.type==="delimiter")return $=$.slice(0,$.length-1),F1($);else if(J?.type==="brace"&&J.value==="{")return $=$.slice(0,$.length-1),F1($);break;case"delimiter":return $=$.slice(0,$.length-1),F1($);break}return $},r3=($)=>{let Z=[];if($.map((Y)=>{if(Y.type==="brace")if(Y.value==="{")Z.push("}");else Z.splice(Z.lastIndexOf("}"),1);if(Y.type==="paren")if(Y.value==="[")Z.push("]");else Z.splice(Z.lastIndexOf("]"),1)}),Z.length>0)Z.reverse().map((Y)=>{if(Y==="}")$.push({type:"brace",value:"}"});else if(Y==="]")$.push({type:"paren",value:"]"})});return $},s3=($)=>{let Z="";return $.map((Y)=>{switch(Y.type){case"string":Z+='"'+Y.value+'"';break;default:Z+=Y.value;break}}),Z},x8=($)=>JSON.parse(s3(r3(F1(a3($)))));var q$,u$,L1,O4,D8,E4,j4,T8,F4,I$,L4,P8,w8,V1,I8,S8,R4,R2,f5,b8,A2,x2,D2,v5,g5="__json_buf";function m5($){return $.type==="tool_use"||$.type==="server_tool_use"||$.type==="mcp_tool_use"}class A4{constructor($,Z){q$.add(this),this.messages=[],this.receivedMessages=[],u$.set(this,void 0),L1.set(this,null),this.controller=new AbortController,O4.set(this,void 0),D8.set(this,()=>{}),E4.set(this,()=>{}),j4.set(this,void 0),T8.set(this,()=>{}),F4.set(this,()=>{}),I$.set(this,{}),L4.set(this,!1),P8.set(this,!1),w8.set(this,!1),V1.set(this,!1),I8.set(this,void 0),S8.set(this,void 0),R4.set(this,void 0),b8.set(this,(Y)=>{if(F(this,P8,!0,"f"),P$(Y))Y=new e;if(Y instanceof e)return F(this,w8,!0,"f"),this._emit("abort",Y);if(Y instanceof R)return this._emit("error",Y);if(Y instanceof Error){let J=new R(Y.message);return J.cause=Y,this._emit("error",J)}return this._emit("error",new R(String(Y)))}),F(this,O4,new Promise((Y,J)=>{F(this,D8,Y,"f"),F(this,E4,J,"f")}),"f"),F(this,j4,new Promise((Y,J)=>{F(this,T8,Y,"f"),F(this,F4,J,"f")}),"f"),U(this,O4,"f").catch(()=>{}),U(this,j4,"f").catch(()=>{}),F(this,L1,$,"f"),F(this,R4,Z?.logger??console,"f")}get response(){return U(this,I8,"f")}get request_id(){return U(this,S8,"f")}async withResponse(){F(this,V1,!0,"f");let $=await U(this,O4,"f");if(!$)throw Error("Could not resolve a `Response` object");return{data:this,response:$,request_id:$.headers.get("request-id")}}static fromReadableStream($){let Z=new A4(null);return Z._run(()=>Z._fromReadableStream($)),Z}static createMessage($,Z,Y,{logger:J}={}){let Q=new A4(Z,{logger:J});for(let X of Z.messages)Q._addMessageParam(X);return F(Q,L1,{...Z,stream:!0},"f"),Q._run(()=>Q._createMessage($,{...Z,stream:!0},{...Y,headers:{...Y?.headers,"X-Stainless-Helper-Method":"stream"}})),Q}_run($){$().then(()=>{this._emitFinal(),this._emit("end")},U(this,b8,"f"))}_addMessageParam($){this.messages.push($)}_addMessage($,Z=!0){if(this.receivedMessages.push($),Z)this._emit("message",$)}async _createMessage($,Z,Y){let J=Y?.signal,Q;if(J){if(J.aborted)this.controller.abort();Q=this.controller.abort.bind(this.controller),J.addEventListener("abort",Q)}try{U(this,q$,"m",A2).call(this);let{response:X,data:K}=await $.create({...Z,stream:!0},{...Y,signal:this.controller.signal}).withResponse();this._connected(X);for await(let V of K)U(this,q$,"m",x2).call(this,V);if(K.controller.signal?.aborted)throw new e;U(this,q$,"m",D2).call(this)}finally{if(J&&Q)J.removeEventListener("abort",Q)}}_connected($){if(this.ended)return;F(this,I8,$,"f"),F(this,S8,$?.headers.get("request-id"),"f"),U(this,D8,"f").call(this,$),this._emit("connect")}get ended(){return U(this,L4,"f")}get errored(){return U(this,P8,"f")}get aborted(){return U(this,w8,"f")}abort(){this.controller.abort()}on($,Z){return(U(this,I$,"f")[$]||(U(this,I$,"f")[$]=[])).push({listener:Z}),this}off($,Z){let Y=U(this,I$,"f")[$];if(!Y)return this;let J=Y.findIndex((Q)=>Q.listener===Z);if(J>=0)Y.splice(J,1);return this}once($,Z){return(U(this,I$,"f")[$]||(U(this,I$,"f")[$]=[])).push({listener:Z,once:!0}),this}emitted($){return new Promise((Z,Y)=>{if(F(this,V1,!0,"f"),$!=="error")this.once("error",Y);this.once($,Z)})}async done(){F(this,V1,!0,"f"),await U(this,j4,"f")}get currentMessage(){return U(this,u$,"f")}async finalMessage(){return await this.done(),U(this,q$,"m",R2).call(this)}async finalText(){return await this.done(),U(this,q$,"m",f5).call(this)}_emit($,...Z){if(U(this,L4,"f"))return;if($==="end")F(this,L4,!0,"f"),U(this,T8,"f").call(this);let Y=U(this,I$,"f")[$];if(Y)U(this,I$,"f")[$]=Y.filter((J)=>!J.once),Y.forEach(({listener:J})=>J(...Z));if($==="abort"){let J=Z[0];if(!U(this,V1,"f")&&!Y?.length)Promise.reject(J);U(this,E4,"f").call(this,J),U(this,F4,"f").call(this,J),this._emit("end");return}if($==="error"){let J=Z[0];if(!U(this,V1,"f")&&!Y?.length)Promise.reject(J);U(this,E4,"f").call(this,J),U(this,F4,"f").call(this,J),this._emit("end")}}_emitFinal(){if(this.receivedMessages.at(-1))this._emit("finalMessage",U(this,q$,"m",R2).call(this))}async _fromReadableStream($,Z){let Y=Z?.signal,J;if(Y){if(Y.aborted)this.controller.abort();J=this.controller.abort.bind(this.controller),Y.addEventListener("abort",J)}try{U(this,q$,"m",A2).call(this),this._connected(null);let Q=G$.fromReadableStream($,this.controller);for await(let X of Q)U(this,q$,"m",x2).call(this,X);if(Q.controller.signal?.aborted)throw new e;U(this,q$,"m",D2).call(this)}finally{if(Y&&J)Y.removeEventListener("abort",J)}}[(u$=new WeakMap,L1=new WeakMap,O4=new WeakMap,D8=new WeakMap,E4=new WeakMap,j4=new WeakMap,T8=new WeakMap,F4=new WeakMap,I$=new WeakMap,L4=new WeakMap,P8=new WeakMap,w8=new WeakMap,V1=new WeakMap,I8=new WeakMap,S8=new WeakMap,R4=new WeakMap,b8=new WeakMap,q$=new WeakSet,R2=function(){if(this.receivedMessages.length===0)throw new R("stream ended without producing a Message with role=assistant");return this.receivedMessages.at(-1)},f5=function(){if(this.receivedMessages.length===0)throw new R("stream ended without producing a Message with role=assistant");let Z=this.receivedMessages.at(-1).content.filter((Y)=>Y.type==="text").map((Y)=>Y.text);if(Z.length===0)throw new R("stream ended without producing a content block with type=text");return Z.join(" ")},A2=function(){if(this.ended)return;F(this,u$,void 0,"f")},x2=function(Z){if(this.ended)return;let Y=U(this,q$,"m",v5).call(this,Z);switch(this._emit("streamEvent",Z,Y),Z.type){case"content_block_delta":{let J=Y.content.at(-1);switch(Z.delta.type){case"text_delta":{if(J.type==="text")this._emit("text",Z.delta.text,J.text||"");break}case"citations_delta":{if(J.type==="text")this._emit("citation",Z.delta.citation,J.citations??[]);break}case"input_json_delta":{if(m5(J)&&J.input)this._emit("inputJson",Z.delta.partial_json,J.input);break}case"thinking_delta":{if(J.type==="thinking")this._emit("thinking",Z.delta.thinking,J.thinking);break}case"signature_delta":{if(J.type==="thinking")this._emit("signature",J.signature);break}case"compaction_delta":{if(J.type==="compaction"&&J.content)this._emit("compaction",J.content);break}default:c5(Z.delta)}break}case"message_stop":{this._addMessageParam(Y),this._addMessage(F2(Y,U(this,L1,"f"),{logger:U(this,R4,"f")}),!0);break}case"content_block_stop":{this._emit("contentBlock",Y.content.at(-1));break}case"message_start":{F(this,u$,Y,"f");break}case"content_block_start":case"message_delta":break}},D2=function(){if(this.ended)throw new R("stream has ended, this shouldn't happen");let Z=U(this,u$,"f");if(!Z)throw new R("request ended without sending any chunks");return F(this,u$,void 0,"f"),F2(Z,U(this,L1,"f"),{logger:U(this,R4,"f")})},v5=function(Z){let Y=U(this,u$,"f");if(Z.type==="message_start"){if(Y)throw new R(`Unexpected event order, got ${Z.type} before receiving "message_stop"`);return Z.message}if(!Y)throw new R(`Unexpected event order, got ${Z.type} before "message_start"`);switch(Z.type){case"message_stop":return Y;case"message_delta":if(Y.container=Z.delta.container,Y.stop_reason=Z.delta.stop_reason,Y.stop_sequence=Z.delta.stop_sequence,Y.usage.output_tokens=Z.usage.output_tokens,Y.context_management=Z.context_management,Z.usage.input_tokens!=null)Y.usage.input_tokens=Z.usage.input_tokens;if(Z.usage.cache_creation_input_tokens!=null)Y.usage.cache_creation_input_tokens=Z.usage.cache_creation_input_tokens;if(Z.usage.cache_read_input_tokens!=null)Y.usage.cache_read_input_tokens=Z.usage.cache_read_input_tokens;if(Z.usage.server_tool_use!=null)Y.usage.server_tool_use=Z.usage.server_tool_use;if(Z.usage.iterations!=null)Y.usage.iterations=Z.usage.iterations;return Y;case"content_block_start":return Y.content.push(Z.content_block),Y;case"content_block_delta":{let J=Y.content.at(Z.index);switch(Z.delta.type){case"text_delta":{if(J?.type==="text")Y.content[Z.index]={...J,text:(J.text||"")+Z.delta.text};break}case"citations_delta":{if(J?.type==="text")Y.content[Z.index]={...J,citations:[...J.citations??[],Z.delta.citation]};break}case"input_json_delta":{if(J&&m5(J)){let Q=J[g5]||"";Q+=Z.delta.partial_json;let X={...J};if(Object.defineProperty(X,g5,{value:Q,enumerable:!1,writable:!0}),Q)try{X.input=x8(Q)}catch(K){let V=new R(`Unable to parse tool parameter JSON from model. Please retry your request or adjust your prompt. Error: ${K}. JSON: ${Q}`);U(this,b8,"f").call(this,V)}Y.content[Z.index]=X}break}case"thinking_delta":{if(J?.type==="thinking")Y.content[Z.index]={...J,thinking:J.thinking+Z.delta.thinking};break}case"signature_delta":{if(J?.type==="thinking")Y.content[Z.index]={...J,signature:Z.delta.signature};break}case"compaction_delta":{if(J?.type==="compaction")Y.content[Z.index]={...J,content:(J.content||"")+Z.delta.content};break}default:c5(Z.delta)}return Y}case"content_block_stop":return Y}},Symbol.asyncIterator)](){let $=[],Z=[],Y=!1;return this.on("streamEvent",(J)=>{let Q=Z.shift();if(Q)Q.resolve(J);else $.push(J)}),this.on("end",()=>{Y=!0;for(let J of Z)J.resolve(void 0);Z.length=0}),this.on("abort",(J)=>{Y=!0;for(let Q of Z)Q.reject(J);Z.length=0}),this.on("error",(J)=>{Y=!0;for(let Q of Z)Q.reject(J);Z.length=0}),{next:async()=>{if(!$.length){if(Y)return{value:void 0,done:!0};return new Promise((Q,X)=>Z.push({resolve:Q,reject:X})).then((Q)=>Q?{value:Q,done:!1}:{value:void 0,done:!0})}return{value:$.shift(),done:!1}},return:async()=>{return this.abort(),{value:void 0,done:!0}}}}toReadableStream(){return new G$(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function c5($){}class R1 extends Error{constructor($){let Z=typeof $==="string"?$:$.map((Y)=>{if(Y.type==="text")return Y.text;return`[${Y.type}]`}).join(" ");super(Z);this.name="ToolError",this.content=$}}var d5=1e5,u5=`You have been working on the task described above but have not yet completed it. Write a continuation summary that will allow you (or another instance of yourself) to resume work efficiently in a future context window where the conversation history will be replaced with this summary. Your summary should be structured, concise, and actionable. Include:
58
+ ${B}`)}return K},g=IQ(V2);class d8 extends m{list($={},Z){let{betas:J,...Y}=$??{};return this._client.getAPIList("/v1/files",I$,{query:Y,...Z,headers:A([{"anthropic-beta":[...J??[],"files-api-2025-04-14"].toString()},Z?.headers])})}delete($,Z={},J){let{betas:Y}=Z??{};return this._client.delete(g`/v1/files/${$}`,{...J,headers:A([{"anthropic-beta":[...Y??[],"files-api-2025-04-14"].toString()},J?.headers])})}download($,Z={},J){let{betas:Y}=Z??{};return this._client.get(g`/v1/files/${$}/content`,{...J,headers:A([{"anthropic-beta":[...Y??[],"files-api-2025-04-14"].toString(),Accept:"application/binary"},J?.headers]),__binaryResponse:!0})}retrieveMetadata($,Z={},J){let{betas:Y}=Z??{};return this._client.get(g`/v1/files/${$}`,{...J,headers:A([{"anthropic-beta":[...Y??[],"files-api-2025-04-14"].toString()},J?.headers])})}upload($,Z){let{betas:J,...Y}=$;return this._client.post("/v1/files",n4({body:Y,...Z,headers:A([{"anthropic-beta":[...J??[],"files-api-2025-04-14"].toString()},K2(Y.file),Z?.headers])},this._client))}}class l8 extends m{retrieve($,Z={},J){let{betas:Y}=Z??{};return this._client.get(g`/v1/models/${$}?beta=true`,{...J,headers:A([{...Y?.toString()!=null?{"anthropic-beta":Y?.toString()}:void 0},J?.headers])})}list($={},Z){let{betas:J,...Y}=$??{};return this._client.getAPIList("/v1/models?beta=true",I$,{query:Y,...Z,headers:A([{...J?.toString()!=null?{"anthropic-beta":J?.toString()}:void 0},Z?.headers])})}}var q1={"claude-opus-4-20250514":8192,"claude-opus-4-0":8192,"claude-4-opus-20250514":8192,"anthropic.claude-opus-4-20250514-v1:0":8192,"claude-opus-4@20250514":8192,"claude-opus-4-1-20250805":8192,"anthropic.claude-opus-4-1-20250805-v1:0":8192,"claude-opus-4-1@20250805":8192};function G2($){return $?.output_format??$?.output_config?.format}function M5($,Z,J){let Y=G2(Z);if(!Z||!("parse"in(Y??{})))return{...$,content:$.content.map((Q)=>{if(Q.type==="text"){let X=Object.defineProperty({...Q},"parsed_output",{value:null,enumerable:!1});return Object.defineProperty(X,"parsed",{get(){return J.logger.warn("The `parsed` property on `text` blocks is deprecated, please use `parsed_output` instead."),null},enumerable:!1})}return Q}),parsed_output:null};return C5($,Z,J)}function C5($,Z,J){let Y=null,Q=$.content.map((X)=>{if(X.type==="text"){let K=SQ(Z,X.text);if(Y===null)Y=K;let V=Object.defineProperty({...X},"parsed_output",{value:K,enumerable:!1});return Object.defineProperty(V,"parsed",{get(){return J.logger.warn("The `parsed` property on `text` blocks is deprecated, please use `parsed_output` instead."),K},enumerable:!1})}return X});return{...$,content:Q,parsed_output:Y}}function SQ($,Z){let J=G2($);if(J?.type!=="json_schema")return null;try{if("parse"in J)return J.parse(Z);return JSON.parse(Z)}catch(Y){throw new D(`Failed to parse structured output: ${Y}`)}}var wQ=($)=>{let Z=0,J=[];while(Z<$.length){let Y=$[Z];if(Y==="\\"){Z++;continue}if(Y==="{"){J.push({type:"brace",value:"{"}),Z++;continue}if(Y==="}"){J.push({type:"brace",value:"}"}),Z++;continue}if(Y==="["){J.push({type:"paren",value:"["}),Z++;continue}if(Y==="]"){J.push({type:"paren",value:"]"}),Z++;continue}if(Y===":"){J.push({type:"separator",value:":"}),Z++;continue}if(Y===","){J.push({type:"delimiter",value:","}),Z++;continue}if(Y==='"'){let V="",G=!1;Y=$[++Z];while(Y!=='"'){if(Z===$.length){G=!0;break}if(Y==="\\"){if(Z++,Z===$.length){G=!0;break}V+=Y+$[Z],Y=$[++Z]}else V+=Y,Y=$[++Z]}if(Y=$[++Z],!G)J.push({type:"string",value:V});continue}if(Y&&/\s/.test(Y)){Z++;continue}let X=/[0-9]/;if(Y&&X.test(Y)||Y==="-"||Y==="."){let V="";if(Y==="-")V+=Y,Y=$[++Z];while(Y&&X.test(Y)||Y===".")V+=Y,Y=$[++Z];J.push({type:"number",value:V});continue}let K=/[a-z]/i;if(Y&&K.test(Y)){let V="";while(Y&&K.test(Y)){if(Z===$.length)break;V+=Y,Y=$[++Z]}if(V=="true"||V=="false"||V==="null")J.push({type:"name",value:V});else{Z++;continue}continue}Z++}return J},r4=($)=>{if($.length===0)return $;let Z=$[$.length-1];switch(Z.type){case"separator":return $=$.slice(0,$.length-1),r4($);break;case"number":let J=Z.value[Z.value.length-1];if(J==="."||J==="-")return $=$.slice(0,$.length-1),r4($);case"string":let Y=$[$.length-2];if(Y?.type==="delimiter")return $=$.slice(0,$.length-1),r4($);else if(Y?.type==="brace"&&Y.value==="{")return $=$.slice(0,$.length-1),r4($);break;case"delimiter":return $=$.slice(0,$.length-1),r4($);break}return $},kQ=($)=>{let Z=[];if($.map((J)=>{if(J.type==="brace")if(J.value==="{")Z.push("}");else Z.splice(Z.lastIndexOf("}"),1);if(J.type==="paren")if(J.value==="[")Z.push("]");else Z.splice(Z.lastIndexOf("]"),1)}),Z.length>0)Z.reverse().map((J)=>{if(J==="}")$.push({type:"brace",value:"}"});else if(J==="]")$.push({type:"paren",value:"]"})});return $},bQ=($)=>{let Z="";return $.map((J)=>{switch(J.type){case"string":Z+='"'+J.value+'"';break;default:Z+=J.value;break}}),Z},W1=($)=>JSON.parse(bQ(kQ(r4(wQ($)))));var R$,z4,i4,o8,U1,a8,n8,B1,r8,p$,i8,N1,M1,D4,C1,j1,s8,j5,H2,O1,O5,F5,E5,q2,W2="__json_buf";function U2($){return $.type==="tool_use"||$.type==="server_tool_use"||$.type==="mcp_tool_use"}class t8{constructor($,Z){R$.add(this),this.messages=[],this.receivedMessages=[],z4.set(this,void 0),i4.set(this,null),this.controller=new AbortController,o8.set(this,void 0),U1.set(this,()=>{}),a8.set(this,()=>{}),n8.set(this,void 0),B1.set(this,()=>{}),r8.set(this,()=>{}),p$.set(this,{}),i8.set(this,!1),N1.set(this,!1),M1.set(this,!1),D4.set(this,!1),C1.set(this,void 0),j1.set(this,void 0),s8.set(this,void 0),O1.set(this,(J)=>{if(L(this,N1,!0,"f"),g$(J))J=new Y$;if(J instanceof Y$)return L(this,M1,!0,"f"),this._emit("abort",J);if(J instanceof D)return this._emit("error",J);if(J instanceof Error){let Y=new D(J.message);return Y.cause=J,this._emit("error",Y)}return this._emit("error",new D(String(J)))}),L(this,o8,new Promise((J,Y)=>{L(this,U1,J,"f"),L(this,a8,Y,"f")}),"f"),L(this,n8,new Promise((J,Y)=>{L(this,B1,J,"f"),L(this,r8,Y,"f")}),"f"),C(this,o8,"f").catch(()=>{}),C(this,n8,"f").catch(()=>{}),L(this,i4,$,"f"),L(this,s8,Z?.logger??console,"f")}get response(){return C(this,C1,"f")}get request_id(){return C(this,j1,"f")}async withResponse(){L(this,D4,!0,"f");let $=await C(this,o8,"f");if(!$)throw Error("Could not resolve a `Response` object");return{data:this,response:$,request_id:$.headers.get("request-id")}}static fromReadableStream($){let Z=new t8(null);return Z._run(()=>Z._fromReadableStream($)),Z}static createMessage($,Z,J,{logger:Y}={}){let Q=new t8(Z,{logger:Y});for(let X of Z.messages)Q._addMessageParam(X);return L(Q,i4,{...Z,stream:!0},"f"),Q._run(()=>Q._createMessage($,{...Z,stream:!0},{...J,headers:{...J?.headers,"X-Stainless-Helper-Method":"stream"}})),Q}_run($){$().then(()=>{this._emitFinal(),this._emit("end")},C(this,O1,"f"))}_addMessageParam($){this.messages.push($)}_addMessage($,Z=!0){if(this.receivedMessages.push($),Z)this._emit("message",$)}async _createMessage($,Z,J){let Y=J?.signal,Q;if(Y){if(Y.aborted)this.controller.abort();Q=this.controller.abort.bind(this.controller),Y.addEventListener("abort",Q)}try{C(this,R$,"m",O5).call(this);let{response:X,data:K}=await $.create({...Z,stream:!0},{...J,signal:this.controller.signal}).withResponse();this._connected(X);for await(let V of K)C(this,R$,"m",F5).call(this,V);if(K.controller.signal?.aborted)throw new Y$;C(this,R$,"m",E5).call(this)}finally{if(Y&&Q)Y.removeEventListener("abort",Q)}}_connected($){if(this.ended)return;L(this,C1,$,"f"),L(this,j1,$?.headers.get("request-id"),"f"),C(this,U1,"f").call(this,$),this._emit("connect")}get ended(){return C(this,i8,"f")}get errored(){return C(this,N1,"f")}get aborted(){return C(this,M1,"f")}abort(){this.controller.abort()}on($,Z){return(C(this,p$,"f")[$]||(C(this,p$,"f")[$]=[])).push({listener:Z}),this}off($,Z){let J=C(this,p$,"f")[$];if(!J)return this;let Y=J.findIndex((Q)=>Q.listener===Z);if(Y>=0)J.splice(Y,1);return this}once($,Z){return(C(this,p$,"f")[$]||(C(this,p$,"f")[$]=[])).push({listener:Z,once:!0}),this}emitted($){return new Promise((Z,J)=>{if(L(this,D4,!0,"f"),$!=="error")this.once("error",J);this.once($,Z)})}async done(){L(this,D4,!0,"f"),await C(this,n8,"f")}get currentMessage(){return C(this,z4,"f")}async finalMessage(){return await this.done(),C(this,R$,"m",j5).call(this)}async finalText(){return await this.done(),C(this,R$,"m",H2).call(this)}_emit($,...Z){if(C(this,i8,"f"))return;if($==="end")L(this,i8,!0,"f"),C(this,B1,"f").call(this);let J=C(this,p$,"f")[$];if(J)C(this,p$,"f")[$]=J.filter((Y)=>!Y.once),J.forEach(({listener:Y})=>Y(...Z));if($==="abort"){let Y=Z[0];if(!C(this,D4,"f")&&!J?.length)Promise.reject(Y);C(this,a8,"f").call(this,Y),C(this,r8,"f").call(this,Y),this._emit("end");return}if($==="error"){let Y=Z[0];if(!C(this,D4,"f")&&!J?.length)Promise.reject(Y);C(this,a8,"f").call(this,Y),C(this,r8,"f").call(this,Y),this._emit("end")}}_emitFinal(){if(this.receivedMessages.at(-1))this._emit("finalMessage",C(this,R$,"m",j5).call(this))}async _fromReadableStream($,Z){let J=Z?.signal,Y;if(J){if(J.aborted)this.controller.abort();Y=this.controller.abort.bind(this.controller),J.addEventListener("abort",Y)}try{C(this,R$,"m",O5).call(this),this._connected(null);let Q=M$.fromReadableStream($,this.controller);for await(let X of Q)C(this,R$,"m",F5).call(this,X);if(Q.controller.signal?.aborted)throw new Y$;C(this,R$,"m",E5).call(this)}finally{if(J&&Y)J.removeEventListener("abort",Y)}}[(z4=new WeakMap,i4=new WeakMap,o8=new WeakMap,U1=new WeakMap,a8=new WeakMap,n8=new WeakMap,B1=new WeakMap,r8=new WeakMap,p$=new WeakMap,i8=new WeakMap,N1=new WeakMap,M1=new WeakMap,D4=new WeakMap,C1=new WeakMap,j1=new WeakMap,s8=new WeakMap,O1=new WeakMap,R$=new WeakSet,j5=function(){if(this.receivedMessages.length===0)throw new D("stream ended without producing a Message with role=assistant");return this.receivedMessages.at(-1)},H2=function(){if(this.receivedMessages.length===0)throw new D("stream ended without producing a Message with role=assistant");let Z=this.receivedMessages.at(-1).content.filter((J)=>J.type==="text").map((J)=>J.text);if(Z.length===0)throw new D("stream ended without producing a content block with type=text");return Z.join(" ")},O5=function(){if(this.ended)return;L(this,z4,void 0,"f")},F5=function(Z){if(this.ended)return;let J=C(this,R$,"m",q2).call(this,Z);switch(this._emit("streamEvent",Z,J),Z.type){case"content_block_delta":{let Y=J.content.at(-1);switch(Z.delta.type){case"text_delta":{if(Y.type==="text")this._emit("text",Z.delta.text,Y.text||"");break}case"citations_delta":{if(Y.type==="text")this._emit("citation",Z.delta.citation,Y.citations??[]);break}case"input_json_delta":{if(U2(Y)&&Y.input)this._emit("inputJson",Z.delta.partial_json,Y.input);break}case"thinking_delta":{if(Y.type==="thinking")this._emit("thinking",Z.delta.thinking,Y.thinking);break}case"signature_delta":{if(Y.type==="thinking")this._emit("signature",Y.signature);break}case"compaction_delta":{if(Y.type==="compaction"&&Y.content)this._emit("compaction",Y.content);break}default:B2(Z.delta)}break}case"message_stop":{this._addMessageParam(J),this._addMessage(M5(J,C(this,i4,"f"),{logger:C(this,s8,"f")}),!0);break}case"content_block_stop":{this._emit("contentBlock",J.content.at(-1));break}case"message_start":{L(this,z4,J,"f");break}case"content_block_start":case"message_delta":break}},E5=function(){if(this.ended)throw new D("stream has ended, this shouldn't happen");let Z=C(this,z4,"f");if(!Z)throw new D("request ended without sending any chunks");return L(this,z4,void 0,"f"),M5(Z,C(this,i4,"f"),{logger:C(this,s8,"f")})},q2=function(Z){let J=C(this,z4,"f");if(Z.type==="message_start"){if(J)throw new D(`Unexpected event order, got ${Z.type} before receiving "message_stop"`);return Z.message}if(!J)throw new D(`Unexpected event order, got ${Z.type} before "message_start"`);switch(Z.type){case"message_stop":return J;case"message_delta":if(J.container=Z.delta.container,J.stop_reason=Z.delta.stop_reason,J.stop_sequence=Z.delta.stop_sequence,J.usage.output_tokens=Z.usage.output_tokens,J.context_management=Z.context_management,Z.usage.input_tokens!=null)J.usage.input_tokens=Z.usage.input_tokens;if(Z.usage.cache_creation_input_tokens!=null)J.usage.cache_creation_input_tokens=Z.usage.cache_creation_input_tokens;if(Z.usage.cache_read_input_tokens!=null)J.usage.cache_read_input_tokens=Z.usage.cache_read_input_tokens;if(Z.usage.server_tool_use!=null)J.usage.server_tool_use=Z.usage.server_tool_use;if(Z.usage.iterations!=null)J.usage.iterations=Z.usage.iterations;return J;case"content_block_start":return J.content.push(Z.content_block),J;case"content_block_delta":{let Y=J.content.at(Z.index);switch(Z.delta.type){case"text_delta":{if(Y?.type==="text")J.content[Z.index]={...Y,text:(Y.text||"")+Z.delta.text};break}case"citations_delta":{if(Y?.type==="text")J.content[Z.index]={...Y,citations:[...Y.citations??[],Z.delta.citation]};break}case"input_json_delta":{if(Y&&U2(Y)){let Q=Y[W2]||"";Q+=Z.delta.partial_json;let X={...Y};if(Object.defineProperty(X,W2,{value:Q,enumerable:!1,writable:!0}),Q)try{X.input=W1(Q)}catch(K){let V=new D(`Unable to parse tool parameter JSON from model. Please retry your request or adjust your prompt. Error: ${K}. JSON: ${Q}`);C(this,O1,"f").call(this,V)}J.content[Z.index]=X}break}case"thinking_delta":{if(Y?.type==="thinking")J.content[Z.index]={...Y,thinking:Y.thinking+Z.delta.thinking};break}case"signature_delta":{if(Y?.type==="thinking")J.content[Z.index]={...Y,signature:Z.delta.signature};break}case"compaction_delta":{if(Y?.type==="compaction")J.content[Z.index]={...Y,content:(Y.content||"")+Z.delta.content};break}default:B2(Z.delta)}return J}case"content_block_stop":return J}},Symbol.asyncIterator)](){let $=[],Z=[],J=!1;return this.on("streamEvent",(Y)=>{let Q=Z.shift();if(Q)Q.resolve(Y);else $.push(Y)}),this.on("end",()=>{J=!0;for(let Y of Z)Y.resolve(void 0);Z.length=0}),this.on("abort",(Y)=>{J=!0;for(let Q of Z)Q.reject(Y);Z.length=0}),this.on("error",(Y)=>{J=!0;for(let Q of Z)Q.reject(Y);Z.length=0}),{next:async()=>{if(!$.length){if(J)return{value:void 0,done:!0};return new Promise((Q,X)=>Z.push({resolve:Q,reject:X})).then((Q)=>Q?{value:Q,done:!1}:{value:void 0,done:!0})}return{value:$.shift(),done:!1}},return:async()=>{return this.abort(),{value:void 0,done:!0}}}}toReadableStream(){return new M$(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function B2($){}class s4 extends Error{constructor($){let Z=typeof $==="string"?$:$.map((J)=>{if(J.type==="text")return J.text;return`[${J.type}]`}).join(" ");super(Z);this.name="ToolError",this.content=$}}var N2=1e5,M2=`You have been working on the task described above but have not yet completed it. Write a continuation summary that will allow you (or another instance of yourself) to resume work efficiently in a future context window where the conversation history will be replaced with this summary. Your summary should be structured, concise, and actionable. Include:
54
59
  1. Task Overview
55
60
  The user's core request and success criteria
56
61
  Any clarifications or constraints they specified
@@ -72,91 +77,89 @@ User preferences or style requirements
72
77
  Domain-specific details that aren't obvious
73
78
  Any promises made to the user
74
79
  Be concise but complete\u2014err on the side of including information that would prevent duplicate work or repeated mistakes. Write in a way that enables immediate resumption of the task.
75
- Wrap your summary in <summary></summary> tags.`;var x4,A1,G1,l,D4,W$,S$,p$,T4,p5,T2;function l5(){let $,Z;return{promise:new Promise((J,Q)=>{$=J,Z=Q}),resolve:$,reject:Z}}class P4{constructor($,Z,Y){x4.add(this),this.client=$,A1.set(this,!1),G1.set(this,!1),l.set(this,void 0),D4.set(this,void 0),W$.set(this,void 0),S$.set(this,void 0),p$.set(this,void 0),T4.set(this,0),F(this,l,{params:{...Z,messages:structuredClone(Z.messages)}},"f");let Q=["BetaToolRunner",...j2(Z.tools,Z.messages)].join(", ");F(this,D4,{...Y,headers:D([{"x-stainless-helper":Q},Y?.headers])},"f"),F(this,p$,l5(),"f")}async*[(A1=new WeakMap,G1=new WeakMap,l=new WeakMap,D4=new WeakMap,W$=new WeakMap,S$=new WeakMap,p$=new WeakMap,T4=new WeakMap,x4=new WeakSet,p5=async function(){let Z=U(this,l,"f").params.compactionControl;if(!Z||!Z.enabled)return!1;let Y=0;if(U(this,W$,"f")!==void 0)try{let G=await U(this,W$,"f");Y=G.usage.input_tokens+(G.usage.cache_creation_input_tokens??0)+(G.usage.cache_read_input_tokens??0)+G.usage.output_tokens}catch{return!1}let J=Z.contextTokenThreshold??d5;if(Y<J)return!1;let Q=Z.model??U(this,l,"f").params.model,X=Z.summaryPrompt??u5,K=U(this,l,"f").params.messages;if(K[K.length-1].role==="assistant"){let G=K[K.length-1];if(Array.isArray(G.content)){let H=G.content.filter((z)=>z.type!=="tool_use");if(H.length===0)K.pop();else G.content=H}}let V=await this.client.beta.messages.create({model:Q,messages:[...K,{role:"user",content:[{type:"text",text:X}]}],max_tokens:U(this,l,"f").params.max_tokens},{headers:{"x-stainless-helper":"compaction"}});if(V.content[0]?.type!=="text")throw new R("Expected text response for compaction");return U(this,l,"f").params.messages=[{role:"user",content:V.content}],!0},Symbol.asyncIterator)](){var $;if(U(this,A1,"f"))throw new R("Cannot iterate over a consumed stream");F(this,A1,!0,"f"),F(this,G1,!0,"f"),F(this,S$,void 0,"f");try{while(!0){let Z;try{if(U(this,l,"f").params.max_iterations&&U(this,T4,"f")>=U(this,l,"f").params.max_iterations)break;F(this,G1,!1,"f"),F(this,S$,void 0,"f"),F(this,T4,($=U(this,T4,"f"),$++,$),"f"),F(this,W$,void 0,"f");let{max_iterations:Y,compactionControl:J,...Q}=U(this,l,"f").params;if(Q.stream)Z=this.client.beta.messages.stream({...Q},U(this,D4,"f")),F(this,W$,Z.finalMessage(),"f"),U(this,W$,"f").catch(()=>{}),yield Z;else F(this,W$,this.client.beta.messages.create({...Q,stream:!1},U(this,D4,"f")),"f"),yield U(this,W$,"f");if(!await U(this,x4,"m",p5).call(this)){if(!U(this,G1,"f")){let{role:V,content:G}=await U(this,W$,"f");U(this,l,"f").params.messages.push({role:V,content:G})}let K=await U(this,x4,"m",T2).call(this,U(this,l,"f").params.messages.at(-1));if(K)U(this,l,"f").params.messages.push(K);else if(!U(this,G1,"f"))break}}finally{if(Z)Z.abort()}}if(!U(this,W$,"f"))throw new R("ToolRunner concluded without a message from the server");U(this,p$,"f").resolve(await U(this,W$,"f"))}catch(Z){throw F(this,A1,!1,"f"),U(this,p$,"f").promise.catch(()=>{}),U(this,p$,"f").reject(Z),F(this,p$,l5(),"f"),Z}}setMessagesParams($){if(typeof $==="function")U(this,l,"f").params=$(U(this,l,"f").params);else U(this,l,"f").params=$;F(this,G1,!0,"f"),F(this,S$,void 0,"f")}async generateToolResponse(){let $=await U(this,W$,"f")??this.params.messages.at(-1);if(!$)return null;return U(this,x4,"m",T2).call(this,$)}done(){return U(this,p$,"f").promise}async runUntilDone(){if(!U(this,A1,"f"))for await(let $ of this);return this.done()}get params(){return U(this,l,"f").params}pushMessages(...$){this.setMessagesParams((Z)=>({...Z,messages:[...Z.messages,...$]}))}then($,Z){return this.runUntilDone().then($,Z)}}T2=async function(Z){if(U(this,S$,"f")!==void 0)return U(this,S$,"f");return F(this,S$,t3(U(this,l,"f").params,Z),"f"),U(this,S$,"f")};async function t3($,Z=$.messages.at(-1)){if(!Z||Z.role!=="assistant"||!Z.content||typeof Z.content==="string")return null;let Y=Z.content.filter((Q)=>Q.type==="tool_use");if(Y.length===0)return null;return{role:"user",content:await Promise.all(Y.map(async(Q)=>{let X=$.tools.find((K)=>("name"in K?K.name:K.mcp_server_name)===Q.name);if(!X||!("run"in X))return{type:"tool_result",tool_use_id:Q.id,content:`Error: Tool '${Q.name}' not found`,is_error:!0};try{let K=Q.input;if("parse"in X&&X.parse)K=X.parse(K);let V=await X.run(K);return{type:"tool_result",tool_use_id:Q.id,content:V}}catch(K){return{type:"tool_result",tool_use_id:Q.id,content:K instanceof R1?K.content:`Error: ${K instanceof Error?K.message:String(K)}`,is_error:!0}}}))}}class x1{constructor($,Z){this.iterator=$,this.controller=Z}async*decoder(){let $=new d$;for await(let Z of this.iterator)for(let Y of $.decode(Z))yield JSON.parse(Y);for(let Z of $.flush())yield JSON.parse(Z)}[Symbol.asyncIterator](){return this.decoder()}static fromResponse($,Z){if(!$.body){if(Z.abort(),typeof globalThis.navigator<"u"&&globalThis.navigator.product==="ReactNative")throw new R("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new R("Attempted to iterate over a response with no body")}return new x1(V4($.body),Z)}}class w4 extends g{create($,Z){let{betas:Y,...J}=$;return this._client.post("/v1/messages/batches?beta=true",{body:J,...Z,headers:D([{"anthropic-beta":[...Y??[],"message-batches-2024-09-24"].toString()},Z?.headers])})}retrieve($,Z={},Y){let{betas:J}=Z??{};return this._client.get(v`/v1/messages/batches/${$}?beta=true`,{...Y,headers:D([{"anthropic-beta":[...J??[],"message-batches-2024-09-24"].toString()},Y?.headers])})}list($={},Z){let{betas:Y,...J}=$??{};return this._client.getAPIList("/v1/messages/batches?beta=true",M$,{query:J,...Z,headers:D([{"anthropic-beta":[...Y??[],"message-batches-2024-09-24"].toString()},Z?.headers])})}delete($,Z={},Y){let{betas:J}=Z??{};return this._client.delete(v`/v1/messages/batches/${$}?beta=true`,{...Y,headers:D([{"anthropic-beta":[...J??[],"message-batches-2024-09-24"].toString()},Y?.headers])})}cancel($,Z={},Y){let{betas:J}=Z??{};return this._client.post(v`/v1/messages/batches/${$}/cancel?beta=true`,{...Y,headers:D([{"anthropic-beta":[...J??[],"message-batches-2024-09-24"].toString()},Y?.headers])})}async results($,Z={},Y){let J=await this.retrieve($);if(!J.results_url)throw new R(`No batch \`results_url\`; Has it finished processing? ${J.processing_status} - ${J.id}`);let{betas:Q}=Z??{};return this._client.get(J.results_url,{...Y,headers:D([{"anthropic-beta":[...Q??[],"message-batches-2024-09-24"].toString(),Accept:"application/binary"},Y?.headers]),stream:!0,__binaryResponse:!0})._thenUnwrap((X,K)=>x1.fromResponse(K.response,K.controller))}}var n5={"claude-1.3":"November 6th, 2024","claude-1.3-100k":"November 6th, 2024","claude-instant-1.1":"November 6th, 2024","claude-instant-1.1-100k":"November 6th, 2024","claude-instant-1.2":"November 6th, 2024","claude-3-sonnet-20240229":"July 21st, 2025","claude-3-opus-20240229":"January 5th, 2026","claude-2.1":"July 21st, 2025","claude-2.0":"July 21st, 2025","claude-3-7-sonnet-latest":"February 19th, 2026","claude-3-7-sonnet-20250219":"February 19th, 2026"},$Y=["claude-opus-4-6"];class l$ extends g{constructor(){super(...arguments);this.batches=new w4(this._client)}create($,Z){let Y=i5($),{betas:J,...Q}=Y;if(Q.model in n5)console.warn(`The model '${Q.model}' is deprecated and will reach end-of-life on ${n5[Q.model]}
76
- Please migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`);if(Q.model in $Y&&Q.thinking&&Q.thinking.type==="enabled")console.warn(`Using Claude with ${Q.model} and 'thinking.type=enabled' is deprecated. Use 'thinking.type=adaptive' instead which results in better model performance in our testing: https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking`);let X=this._client._options.timeout;if(!Q.stream&&X==null){let V=A8[Q.model]??void 0;X=this._client.calculateNonstreamingTimeout(Q.max_tokens,V)}let K=R8(Q.tools,Q.messages);return this._client.post("/v1/messages?beta=true",{body:Q,timeout:X??600000,...Z,headers:D([{...J?.toString()!=null?{"anthropic-beta":J?.toString()}:void 0},K,Z?.headers]),stream:Y.stream??!1})}parse($,Z){return Z={...Z,headers:D([{"anthropic-beta":[...$.betas??[],"structured-outputs-2025-12-15"].toString()},Z?.headers])},this.create($,Z).then((Y)=>L2(Y,$,{logger:this._client.logger??console}))}stream($,Z){return A4.createMessage(this,$,Z)}countTokens($,Z){let Y=i5($),{betas:J,...Q}=Y;return this._client.post("/v1/messages/count_tokens?beta=true",{body:Q,...Z,headers:D([{"anthropic-beta":[...J??[],"token-counting-2024-11-01"].toString()},Z?.headers])})}toolRunner($,Z){return new P4(this._client,$,Z)}}function i5($){if(!$.output_format)return $;if($.output_config?.format)throw new R("Both output_format and output_config.format were provided. Please use only output_config.format (output_format is deprecated).");let{output_format:Z,...Y}=$;return{...Y,output_config:{...$.output_config,format:Z}}}l$.Batches=w4;l$.BetaToolRunner=P4;l$.ToolError=R1;class I4 extends g{create($,Z={},Y){let{betas:J,...Q}=Z??{};return this._client.post(v`/v1/skills/${$}/versions?beta=true`,j1({body:Q,...Y,headers:D([{"anthropic-beta":[...J??[],"skills-2025-10-02"].toString()},Y?.headers])},this._client))}retrieve($,Z,Y){let{skill_id:J,betas:Q}=Z;return this._client.get(v`/v1/skills/${J}/versions/${$}?beta=true`,{...Y,headers:D([{"anthropic-beta":[...Q??[],"skills-2025-10-02"].toString()},Y?.headers])})}list($,Z={},Y){let{betas:J,...Q}=Z??{};return this._client.getAPIList(v`/v1/skills/${$}/versions?beta=true`,U4,{query:Q,...Y,headers:D([{"anthropic-beta":[...J??[],"skills-2025-10-02"].toString()},Y?.headers])})}delete($,Z,Y){let{skill_id:J,betas:Q}=Z;return this._client.delete(v`/v1/skills/${J}/versions/${$}?beta=true`,{...Y,headers:D([{"anthropic-beta":[...Q??[],"skills-2025-10-02"].toString()},Y?.headers])})}}class D1 extends g{constructor(){super(...arguments);this.versions=new I4(this._client)}create($={},Z){let{betas:Y,...J}=$??{};return this._client.post("/v1/skills?beta=true",j1({body:J,...Z,headers:D([{"anthropic-beta":[...Y??[],"skills-2025-10-02"].toString()},Z?.headers])},this._client,!1))}retrieve($,Z={},Y){let{betas:J}=Z??{};return this._client.get(v`/v1/skills/${$}?beta=true`,{...Y,headers:D([{"anthropic-beta":[...J??[],"skills-2025-10-02"].toString()},Y?.headers])})}list($={},Z){let{betas:Y,...J}=$??{};return this._client.getAPIList("/v1/skills?beta=true",U4,{query:J,...Z,headers:D([{"anthropic-beta":[...Y??[],"skills-2025-10-02"].toString()},Z?.headers])})}delete($,Z={},Y){let{betas:J}=Z??{};return this._client.delete(v`/v1/skills/${$}?beta=true`,{...Y,headers:D([{"anthropic-beta":[...J??[],"skills-2025-10-02"].toString()},Y?.headers])})}}D1.Versions=I4;class j$ extends g{constructor(){super(...arguments);this.models=new M4(this._client),this.messages=new l$(this._client),this.files=new C4(this._client),this.skills=new D1(this._client)}}j$.Models=M4;j$.Messages=l$;j$.Files=C4;j$.Skills=D1;class T1 extends g{create($,Z){let{betas:Y,...J}=$;return this._client.post("/v1/complete",{body:J,timeout:this._client._options.timeout??600000,...Z,headers:D([{...Y?.toString()!=null?{"anthropic-beta":Y?.toString()}:void 0},Z?.headers]),stream:$.stream??!1})}}function o5($){return $?.output_config?.format}function P2($,Z,Y){let J=o5(Z);if(!Z||!("parse"in(J??{})))return{...$,content:$.content.map((Q)=>{if(Q.type==="text")return Object.defineProperty({...Q},"parsed_output",{value:null,enumerable:!1});return Q}),parsed_output:null};return w2($,Z,Y)}function w2($,Z,Y){let J=null,Q=$.content.map((X)=>{if(X.type==="text"){let K=QY(Z,X.text);if(J===null)J=K;return Object.defineProperty({...X},"parsed_output",{value:K,enumerable:!1})}return X});return{...$,content:Q,parsed_output:J}}function QY($,Z){let Y=o5($);if(Y?.type!=="json_schema")return null;try{if("parse"in Y)return Y.parse(Z);return JSON.parse(Z)}catch(J){throw new R(`Failed to parse structured output: ${J}`)}}var U$,n$,P1,S4,k8,b4,k4,y8,y4,b$,_4,_8,h8,W1,f8,v8,h4,I2,a5,S2,b2,k2,y2,r5,s5="__json_buf";function t5($){return $.type==="tool_use"||$.type==="server_tool_use"}class f4{constructor($,Z){U$.add(this),this.messages=[],this.receivedMessages=[],n$.set(this,void 0),P1.set(this,null),this.controller=new AbortController,S4.set(this,void 0),k8.set(this,()=>{}),b4.set(this,()=>{}),k4.set(this,void 0),y8.set(this,()=>{}),y4.set(this,()=>{}),b$.set(this,{}),_4.set(this,!1),_8.set(this,!1),h8.set(this,!1),W1.set(this,!1),f8.set(this,void 0),v8.set(this,void 0),h4.set(this,void 0),S2.set(this,(Y)=>{if(F(this,_8,!0,"f"),P$(Y))Y=new e;if(Y instanceof e)return F(this,h8,!0,"f"),this._emit("abort",Y);if(Y instanceof R)return this._emit("error",Y);if(Y instanceof Error){let J=new R(Y.message);return J.cause=Y,this._emit("error",J)}return this._emit("error",new R(String(Y)))}),F(this,S4,new Promise((Y,J)=>{F(this,k8,Y,"f"),F(this,b4,J,"f")}),"f"),F(this,k4,new Promise((Y,J)=>{F(this,y8,Y,"f"),F(this,y4,J,"f")}),"f"),U(this,S4,"f").catch(()=>{}),U(this,k4,"f").catch(()=>{}),F(this,P1,$,"f"),F(this,h4,Z?.logger??console,"f")}get response(){return U(this,f8,"f")}get request_id(){return U(this,v8,"f")}async withResponse(){F(this,W1,!0,"f");let $=await U(this,S4,"f");if(!$)throw Error("Could not resolve a `Response` object");return{data:this,response:$,request_id:$.headers.get("request-id")}}static fromReadableStream($){let Z=new f4(null);return Z._run(()=>Z._fromReadableStream($)),Z}static createMessage($,Z,Y,{logger:J}={}){let Q=new f4(Z,{logger:J});for(let X of Z.messages)Q._addMessageParam(X);return F(Q,P1,{...Z,stream:!0},"f"),Q._run(()=>Q._createMessage($,{...Z,stream:!0},{...Y,headers:{...Y?.headers,"X-Stainless-Helper-Method":"stream"}})),Q}_run($){$().then(()=>{this._emitFinal(),this._emit("end")},U(this,S2,"f"))}_addMessageParam($){this.messages.push($)}_addMessage($,Z=!0){if(this.receivedMessages.push($),Z)this._emit("message",$)}async _createMessage($,Z,Y){let J=Y?.signal,Q;if(J){if(J.aborted)this.controller.abort();Q=this.controller.abort.bind(this.controller),J.addEventListener("abort",Q)}try{U(this,U$,"m",b2).call(this);let{response:X,data:K}=await $.create({...Z,stream:!0},{...Y,signal:this.controller.signal}).withResponse();this._connected(X);for await(let V of K)U(this,U$,"m",k2).call(this,V);if(K.controller.signal?.aborted)throw new e;U(this,U$,"m",y2).call(this)}finally{if(J&&Q)J.removeEventListener("abort",Q)}}_connected($){if(this.ended)return;F(this,f8,$,"f"),F(this,v8,$?.headers.get("request-id"),"f"),U(this,k8,"f").call(this,$),this._emit("connect")}get ended(){return U(this,_4,"f")}get errored(){return U(this,_8,"f")}get aborted(){return U(this,h8,"f")}abort(){this.controller.abort()}on($,Z){return(U(this,b$,"f")[$]||(U(this,b$,"f")[$]=[])).push({listener:Z}),this}off($,Z){let Y=U(this,b$,"f")[$];if(!Y)return this;let J=Y.findIndex((Q)=>Q.listener===Z);if(J>=0)Y.splice(J,1);return this}once($,Z){return(U(this,b$,"f")[$]||(U(this,b$,"f")[$]=[])).push({listener:Z,once:!0}),this}emitted($){return new Promise((Z,Y)=>{if(F(this,W1,!0,"f"),$!=="error")this.once("error",Y);this.once($,Z)})}async done(){F(this,W1,!0,"f"),await U(this,k4,"f")}get currentMessage(){return U(this,n$,"f")}async finalMessage(){return await this.done(),U(this,U$,"m",I2).call(this)}async finalText(){return await this.done(),U(this,U$,"m",a5).call(this)}_emit($,...Z){if(U(this,_4,"f"))return;if($==="end")F(this,_4,!0,"f"),U(this,y8,"f").call(this);let Y=U(this,b$,"f")[$];if(Y)U(this,b$,"f")[$]=Y.filter((J)=>!J.once),Y.forEach(({listener:J})=>J(...Z));if($==="abort"){let J=Z[0];if(!U(this,W1,"f")&&!Y?.length)Promise.reject(J);U(this,b4,"f").call(this,J),U(this,y4,"f").call(this,J),this._emit("end");return}if($==="error"){let J=Z[0];if(!U(this,W1,"f")&&!Y?.length)Promise.reject(J);U(this,b4,"f").call(this,J),U(this,y4,"f").call(this,J),this._emit("end")}}_emitFinal(){if(this.receivedMessages.at(-1))this._emit("finalMessage",U(this,U$,"m",I2).call(this))}async _fromReadableStream($,Z){let Y=Z?.signal,J;if(Y){if(Y.aborted)this.controller.abort();J=this.controller.abort.bind(this.controller),Y.addEventListener("abort",J)}try{U(this,U$,"m",b2).call(this),this._connected(null);let Q=G$.fromReadableStream($,this.controller);for await(let X of Q)U(this,U$,"m",k2).call(this,X);if(Q.controller.signal?.aborted)throw new e;U(this,U$,"m",y2).call(this)}finally{if(Y&&J)Y.removeEventListener("abort",J)}}[(n$=new WeakMap,P1=new WeakMap,S4=new WeakMap,k8=new WeakMap,b4=new WeakMap,k4=new WeakMap,y8=new WeakMap,y4=new WeakMap,b$=new WeakMap,_4=new WeakMap,_8=new WeakMap,h8=new WeakMap,W1=new WeakMap,f8=new WeakMap,v8=new WeakMap,h4=new WeakMap,S2=new WeakMap,U$=new WeakSet,I2=function(){if(this.receivedMessages.length===0)throw new R("stream ended without producing a Message with role=assistant");return this.receivedMessages.at(-1)},a5=function(){if(this.receivedMessages.length===0)throw new R("stream ended without producing a Message with role=assistant");let Z=this.receivedMessages.at(-1).content.filter((Y)=>Y.type==="text").map((Y)=>Y.text);if(Z.length===0)throw new R("stream ended without producing a content block with type=text");return Z.join(" ")},b2=function(){if(this.ended)return;F(this,n$,void 0,"f")},k2=function(Z){if(this.ended)return;let Y=U(this,U$,"m",r5).call(this,Z);switch(this._emit("streamEvent",Z,Y),Z.type){case"content_block_delta":{let J=Y.content.at(-1);switch(Z.delta.type){case"text_delta":{if(J.type==="text")this._emit("text",Z.delta.text,J.text||"");break}case"citations_delta":{if(J.type==="text")this._emit("citation",Z.delta.citation,J.citations??[]);break}case"input_json_delta":{if(t5(J)&&J.input)this._emit("inputJson",Z.delta.partial_json,J.input);break}case"thinking_delta":{if(J.type==="thinking")this._emit("thinking",Z.delta.thinking,J.thinking);break}case"signature_delta":{if(J.type==="thinking")this._emit("signature",J.signature);break}default:e5(Z.delta)}break}case"message_stop":{this._addMessageParam(Y),this._addMessage(P2(Y,U(this,P1,"f"),{logger:U(this,h4,"f")}),!0);break}case"content_block_stop":{this._emit("contentBlock",Y.content.at(-1));break}case"message_start":{F(this,n$,Y,"f");break}case"content_block_start":case"message_delta":break}},y2=function(){if(this.ended)throw new R("stream has ended, this shouldn't happen");let Z=U(this,n$,"f");if(!Z)throw new R("request ended without sending any chunks");return F(this,n$,void 0,"f"),P2(Z,U(this,P1,"f"),{logger:U(this,h4,"f")})},r5=function(Z){let Y=U(this,n$,"f");if(Z.type==="message_start"){if(Y)throw new R(`Unexpected event order, got ${Z.type} before receiving "message_stop"`);return Z.message}if(!Y)throw new R(`Unexpected event order, got ${Z.type} before "message_start"`);switch(Z.type){case"message_stop":return Y;case"message_delta":if(Y.stop_reason=Z.delta.stop_reason,Y.stop_sequence=Z.delta.stop_sequence,Y.usage.output_tokens=Z.usage.output_tokens,Z.usage.input_tokens!=null)Y.usage.input_tokens=Z.usage.input_tokens;if(Z.usage.cache_creation_input_tokens!=null)Y.usage.cache_creation_input_tokens=Z.usage.cache_creation_input_tokens;if(Z.usage.cache_read_input_tokens!=null)Y.usage.cache_read_input_tokens=Z.usage.cache_read_input_tokens;if(Z.usage.server_tool_use!=null)Y.usage.server_tool_use=Z.usage.server_tool_use;return Y;case"content_block_start":return Y.content.push({...Z.content_block}),Y;case"content_block_delta":{let J=Y.content.at(Z.index);switch(Z.delta.type){case"text_delta":{if(J?.type==="text")Y.content[Z.index]={...J,text:(J.text||"")+Z.delta.text};break}case"citations_delta":{if(J?.type==="text")Y.content[Z.index]={...J,citations:[...J.citations??[],Z.delta.citation]};break}case"input_json_delta":{if(J&&t5(J)){let Q=J[s5]||"";Q+=Z.delta.partial_json;let X={...J};if(Object.defineProperty(X,s5,{value:Q,enumerable:!1,writable:!0}),Q)X.input=x8(Q);Y.content[Z.index]=X}break}case"thinking_delta":{if(J?.type==="thinking")Y.content[Z.index]={...J,thinking:J.thinking+Z.delta.thinking};break}case"signature_delta":{if(J?.type==="thinking")Y.content[Z.index]={...J,signature:Z.delta.signature};break}default:e5(Z.delta)}return Y}case"content_block_stop":return Y}},Symbol.asyncIterator)](){let $=[],Z=[],Y=!1;return this.on("streamEvent",(J)=>{let Q=Z.shift();if(Q)Q.resolve(J);else $.push(J)}),this.on("end",()=>{Y=!0;for(let J of Z)J.resolve(void 0);Z.length=0}),this.on("abort",(J)=>{Y=!0;for(let Q of Z)Q.reject(J);Z.length=0}),this.on("error",(J)=>{Y=!0;for(let Q of Z)Q.reject(J);Z.length=0}),{next:async()=>{if(!$.length){if(Y)return{value:void 0,done:!0};return new Promise((Q,X)=>Z.push({resolve:Q,reject:X})).then((Q)=>Q?{value:Q,done:!1}:{value:void 0,done:!0})}return{value:$.shift(),done:!1}},return:async()=>{return this.abort(),{value:void 0,done:!0}}}}toReadableStream(){return new G$(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function e5($){}class v4 extends g{create($,Z){return this._client.post("/v1/messages/batches",{body:$,...Z})}retrieve($,Z){return this._client.get(v`/v1/messages/batches/${$}`,Z)}list($={},Z){return this._client.getAPIList("/v1/messages/batches",M$,{query:$,...Z})}delete($,Z){return this._client.delete(v`/v1/messages/batches/${$}`,Z)}cancel($,Z){return this._client.post(v`/v1/messages/batches/${$}/cancel`,Z)}async results($,Z){let Y=await this.retrieve($);if(!Y.results_url)throw new R(`No batch \`results_url\`; Has it finished processing? ${Y.processing_status} - ${Y.id}`);return this._client.get(Y.results_url,{...Z,headers:D([{Accept:"application/binary"},Z?.headers]),stream:!0,__binaryResponse:!0})._thenUnwrap((J,Q)=>x1.fromResponse(Q.response,Q.controller))}}class H1 extends g{constructor(){super(...arguments);this.batches=new v4(this._client)}create($,Z){if($.model in $9)console.warn(`The model '${$.model}' is deprecated and will reach end-of-life on ${$9[$.model]}
77
- Please migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`);if($.model in KY&&$.thinking&&$.thinking.type==="enabled")console.warn(`Using Claude with ${$.model} and 'thinking.type=enabled' is deprecated. Use 'thinking.type=adaptive' instead which results in better model performance in our testing: https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking`);let Y=this._client._options.timeout;if(!$.stream&&Y==null){let Q=A8[$.model]??void 0;Y=this._client.calculateNonstreamingTimeout($.max_tokens,Q)}let J=R8($.tools,$.messages);return this._client.post("/v1/messages",{body:$,timeout:Y??600000,...Z,headers:D([J,Z?.headers]),stream:$.stream??!1})}parse($,Z){return this.create($,Z).then((Y)=>w2(Y,$,{logger:this._client.logger??console}))}stream($,Z){return f4.createMessage(this,$,Z,{logger:this._client.logger??console})}countTokens($,Z){return this._client.post("/v1/messages/count_tokens",{body:$,...Z})}}var $9={"claude-1.3":"November 6th, 2024","claude-1.3-100k":"November 6th, 2024","claude-instant-1.1":"November 6th, 2024","claude-instant-1.1-100k":"November 6th, 2024","claude-instant-1.2":"November 6th, 2024","claude-3-sonnet-20240229":"July 21st, 2025","claude-3-opus-20240229":"January 5th, 2026","claude-2.1":"July 21st, 2025","claude-2.0":"July 21st, 2025","claude-3-7-sonnet-latest":"February 19th, 2026","claude-3-7-sonnet-20250219":"February 19th, 2026","claude-3-5-haiku-latest":"February 19th, 2026","claude-3-5-haiku-20241022":"February 19th, 2026"},KY=["claude-opus-4-6"];H1.Batches=v4;class w1 extends g{retrieve($,Z={},Y){let{betas:J}=Z??{};return this._client.get(v`/v1/models/${$}`,{...Y,headers:D([{...J?.toString()!=null?{"anthropic-beta":J?.toString()}:void 0},Y?.headers])})}list($={},Z){let{betas:Y,...J}=$??{};return this._client.getAPIList("/v1/models",M$,{query:J,...Z,headers:D([{...Y?.toString()!=null?{"anthropic-beta":Y?.toString()}:void 0},Z?.headers])})}}var g4=($)=>{if(typeof globalThis.process<"u")return globalThis.process.env?.[$]?.trim()??void 0;if(typeof globalThis.Deno<"u")return globalThis.Deno.env?.get?.($)?.trim();return};var _2,h2,g8,Z9,Y9="\\n\\nHuman:",J9="\\n\\nAssistant:";class m{constructor({baseURL:$=g4("ANTHROPIC_BASE_URL"),apiKey:Z=g4("ANTHROPIC_API_KEY")??null,authToken:Y=g4("ANTHROPIC_AUTH_TOKEN")??null,...J}={}){_2.add(this),g8.set(this,void 0);let Q={apiKey:Z,authToken:Y,...J,baseURL:$||"https://api.anthropic.com"};if(!Q.dangerouslyAllowBrowser&&O5())throw new R(`It looks like you're running in a browser-like environment.
80
+ Wrap your summary in <summary></summary> tags.`;var e8,t4,T4,r,$0,C$,c$,V4,Z0,C2,R5;function j2(){let $,Z;return{promise:new Promise((Y,Q)=>{$=Y,Z=Q}),resolve:$,reject:Z}}class J0{constructor($,Z,J){e8.add(this),this.client=$,t4.set(this,!1),T4.set(this,!1),r.set(this,void 0),$0.set(this,void 0),C$.set(this,void 0),c$.set(this,void 0),V4.set(this,void 0),Z0.set(this,0),L(this,r,{params:{...Z,messages:structuredClone(Z.messages)}},"f");let Q=["BetaToolRunner",...N5(Z.tools,Z.messages)].join(", ");L(this,$0,{...J,headers:A([{"x-stainless-helper":Q},J?.headers])},"f"),L(this,V4,j2(),"f")}async*[(t4=new WeakMap,T4=new WeakMap,r=new WeakMap,$0=new WeakMap,C$=new WeakMap,c$=new WeakMap,V4=new WeakMap,Z0=new WeakMap,e8=new WeakSet,C2=async function(){let Z=C(this,r,"f").params.compactionControl;if(!Z||!Z.enabled)return!1;let J=0;if(C(this,C$,"f")!==void 0)try{let G=await C(this,C$,"f");J=G.usage.input_tokens+(G.usage.cache_creation_input_tokens??0)+(G.usage.cache_read_input_tokens??0)+G.usage.output_tokens}catch{return!1}let Y=Z.contextTokenThreshold??N2;if(J<Y)return!1;let Q=Z.model??C(this,r,"f").params.model,X=Z.summaryPrompt??M2,K=C(this,r,"f").params.messages;if(K[K.length-1].role==="assistant"){let G=K[K.length-1];if(Array.isArray(G.content)){let H=G.content.filter((z)=>z.type!=="tool_use");if(H.length===0)K.pop();else G.content=H}}let V=await this.client.beta.messages.create({model:Q,messages:[...K,{role:"user",content:[{type:"text",text:X}]}],max_tokens:C(this,r,"f").params.max_tokens},{headers:{"x-stainless-helper":"compaction"}});if(V.content[0]?.type!=="text")throw new D("Expected text response for compaction");return C(this,r,"f").params.messages=[{role:"user",content:V.content}],!0},Symbol.asyncIterator)](){var $;if(C(this,t4,"f"))throw new D("Cannot iterate over a consumed stream");L(this,t4,!0,"f"),L(this,T4,!0,"f"),L(this,c$,void 0,"f");try{while(!0){let Z;try{if(C(this,r,"f").params.max_iterations&&C(this,Z0,"f")>=C(this,r,"f").params.max_iterations)break;L(this,T4,!1,"f"),L(this,c$,void 0,"f"),L(this,Z0,($=C(this,Z0,"f"),$++,$),"f"),L(this,C$,void 0,"f");let{max_iterations:J,compactionControl:Y,...Q}=C(this,r,"f").params;if(Q.stream)Z=this.client.beta.messages.stream({...Q},C(this,$0,"f")),L(this,C$,Z.finalMessage(),"f"),C(this,C$,"f").catch(()=>{}),yield Z;else L(this,C$,this.client.beta.messages.create({...Q,stream:!1},C(this,$0,"f")),"f"),yield C(this,C$,"f");if(!await C(this,e8,"m",C2).call(this)){if(!C(this,T4,"f")){let{role:V,content:G}=await C(this,C$,"f");C(this,r,"f").params.messages.push({role:V,content:G})}let K=await C(this,e8,"m",R5).call(this,C(this,r,"f").params.messages.at(-1));if(K)C(this,r,"f").params.messages.push(K);else if(!C(this,T4,"f"))break}}finally{if(Z)Z.abort()}}if(!C(this,C$,"f"))throw new D("ToolRunner concluded without a message from the server");C(this,V4,"f").resolve(await C(this,C$,"f"))}catch(Z){throw L(this,t4,!1,"f"),C(this,V4,"f").promise.catch(()=>{}),C(this,V4,"f").reject(Z),L(this,V4,j2(),"f"),Z}}setMessagesParams($){if(typeof $==="function")C(this,r,"f").params=$(C(this,r,"f").params);else C(this,r,"f").params=$;L(this,T4,!0,"f"),L(this,c$,void 0,"f")}async generateToolResponse(){let $=await C(this,C$,"f")??this.params.messages.at(-1);if(!$)return null;return C(this,e8,"m",R5).call(this,$)}done(){return C(this,V4,"f").promise}async runUntilDone(){if(!C(this,t4,"f"))for await(let $ of this);return this.done()}get params(){return C(this,r,"f").params}pushMessages(...$){this.setMessagesParams((Z)=>({...Z,messages:[...Z.messages,...$]}))}then($,Z){return this.runUntilDone().then($,Z)}}R5=async function(Z){if(C(this,c$,"f")!==void 0)return C(this,c$,"f");return L(this,c$,yQ(C(this,r,"f").params,Z),"f"),C(this,c$,"f")};async function yQ($,Z=$.messages.at(-1)){if(!Z||Z.role!=="assistant"||!Z.content||typeof Z.content==="string")return null;let J=Z.content.filter((Q)=>Q.type==="tool_use");if(J.length===0)return null;return{role:"user",content:await Promise.all(J.map(async(Q)=>{let X=$.tools.find((K)=>("name"in K?K.name:K.mcp_server_name)===Q.name);if(!X||!("run"in X))return{type:"tool_result",tool_use_id:Q.id,content:`Error: Tool '${Q.name}' not found`,is_error:!0};try{let K=Q.input;if("parse"in X&&X.parse)K=X.parse(K);let V=await X.run(K);return{type:"tool_result",tool_use_id:Q.id,content:V}}catch(K){return{type:"tool_result",tool_use_id:Q.id,content:K instanceof s4?K.content:`Error: ${K instanceof Error?K.message:String(K)}`,is_error:!0}}}))}}class e4{constructor($,Z){this.iterator=$,this.controller=Z}async*decoder(){let $=new K4;for await(let Z of this.iterator)for(let J of $.decode(Z))yield JSON.parse(J);for(let Z of $.flush())yield JSON.parse(Z)}[Symbol.asyncIterator](){return this.decoder()}static fromResponse($,Z){if(!$.body){if(Z.abort(),typeof globalThis.navigator<"u"&&globalThis.navigator.product==="ReactNative")throw new D("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new D("Attempted to iterate over a response with no body")}return new e4(v8($.body),Z)}}class Y0 extends m{create($,Z){let{betas:J,...Y}=$;return this._client.post("/v1/messages/batches?beta=true",{body:Y,...Z,headers:A([{"anthropic-beta":[...J??[],"message-batches-2024-09-24"].toString()},Z?.headers])})}retrieve($,Z={},J){let{betas:Y}=Z??{};return this._client.get(g`/v1/messages/batches/${$}?beta=true`,{...J,headers:A([{"anthropic-beta":[...Y??[],"message-batches-2024-09-24"].toString()},J?.headers])})}list($={},Z){let{betas:J,...Y}=$??{};return this._client.getAPIList("/v1/messages/batches?beta=true",I$,{query:Y,...Z,headers:A([{"anthropic-beta":[...J??[],"message-batches-2024-09-24"].toString()},Z?.headers])})}delete($,Z={},J){let{betas:Y}=Z??{};return this._client.delete(g`/v1/messages/batches/${$}?beta=true`,{...J,headers:A([{"anthropic-beta":[...Y??[],"message-batches-2024-09-24"].toString()},J?.headers])})}cancel($,Z={},J){let{betas:Y}=Z??{};return this._client.post(g`/v1/messages/batches/${$}/cancel?beta=true`,{...J,headers:A([{"anthropic-beta":[...Y??[],"message-batches-2024-09-24"].toString()},J?.headers])})}async results($,Z={},J){let Y=await this.retrieve($);if(!Y.results_url)throw new D(`No batch \`results_url\`; Has it finished processing? ${Y.processing_status} - ${Y.id}`);let{betas:Q}=Z??{};return this._client.get(Y.results_url,{...J,headers:A([{"anthropic-beta":[...Q??[],"message-batches-2024-09-24"].toString(),Accept:"application/binary"},J?.headers]),stream:!0,__binaryResponse:!0})._thenUnwrap((X,K)=>e4.fromResponse(K.response,K.controller))}}var O2={"claude-1.3":"November 6th, 2024","claude-1.3-100k":"November 6th, 2024","claude-instant-1.1":"November 6th, 2024","claude-instant-1.1-100k":"November 6th, 2024","claude-instant-1.2":"November 6th, 2024","claude-3-sonnet-20240229":"July 21st, 2025","claude-3-opus-20240229":"January 5th, 2026","claude-2.1":"July 21st, 2025","claude-2.0":"July 21st, 2025","claude-3-7-sonnet-latest":"February 19th, 2026","claude-3-7-sonnet-20250219":"February 19th, 2026"},vQ=["claude-opus-4-6"];class G4 extends m{constructor(){super(...arguments);this.batches=new Y0(this._client)}create($,Z){let J=F2($),{betas:Y,...Q}=J;if(Q.model in O2)console.warn(`The model '${Q.model}' is deprecated and will reach end-of-life on ${O2[Q.model]}
81
+ Please migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`);if(Q.model in vQ&&Q.thinking&&Q.thinking.type==="enabled")console.warn(`Using Claude with ${Q.model} and 'thinking.type=enabled' is deprecated. Use 'thinking.type=adaptive' instead which results in better model performance in our testing: https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking`);let X=this._client._options.timeout;if(!Q.stream&&X==null){let V=q1[Q.model]??void 0;X=this._client.calculateNonstreamingTimeout(Q.max_tokens,V)}let K=H1(Q.tools,Q.messages);return this._client.post("/v1/messages?beta=true",{body:Q,timeout:X??600000,...Z,headers:A([{...Y?.toString()!=null?{"anthropic-beta":Y?.toString()}:void 0},K,Z?.headers]),stream:J.stream??!1})}parse($,Z){return Z={...Z,headers:A([{"anthropic-beta":[...$.betas??[],"structured-outputs-2025-12-15"].toString()},Z?.headers])},this.create($,Z).then((J)=>C5(J,$,{logger:this._client.logger??console}))}stream($,Z){return t8.createMessage(this,$,Z)}countTokens($,Z){let J=F2($),{betas:Y,...Q}=J;return this._client.post("/v1/messages/count_tokens?beta=true",{body:Q,...Z,headers:A([{"anthropic-beta":[...Y??[],"token-counting-2024-11-01"].toString()},Z?.headers])})}toolRunner($,Z){return new J0(this._client,$,Z)}}function F2($){if(!$.output_format)return $;if($.output_config?.format)throw new D("Both output_format and output_config.format were provided. Please use only output_config.format (output_format is deprecated).");let{output_format:Z,...J}=$;return{...J,output_config:{...$.output_config,format:Z}}}G4.Batches=Y0;G4.BetaToolRunner=J0;G4.ToolError=s4;class Q0 extends m{create($,Z={},J){let{betas:Y,...Q}=Z??{};return this._client.post(g`/v1/skills/${$}/versions?beta=true`,n4({body:Q,...J,headers:A([{"anthropic-beta":[...Y??[],"skills-2025-10-02"].toString()},J?.headers])},this._client))}retrieve($,Z,J){let{skill_id:Y,betas:Q}=Z;return this._client.get(g`/v1/skills/${Y}/versions/${$}?beta=true`,{...J,headers:A([{"anthropic-beta":[...Q??[],"skills-2025-10-02"].toString()},J?.headers])})}list($,Z={},J){let{betas:Y,...Q}=Z??{};return this._client.getAPIList(g`/v1/skills/${$}/versions?beta=true`,p8,{query:Q,...J,headers:A([{"anthropic-beta":[...Y??[],"skills-2025-10-02"].toString()},J?.headers])})}delete($,Z,J){let{skill_id:Y,betas:Q}=Z;return this._client.delete(g`/v1/skills/${Y}/versions/${$}?beta=true`,{...J,headers:A([{"anthropic-beta":[...Q??[],"skills-2025-10-02"].toString()},J?.headers])})}}class $8 extends m{constructor(){super(...arguments);this.versions=new Q0(this._client)}create($={},Z){let{betas:J,...Y}=$??{};return this._client.post("/v1/skills?beta=true",n4({body:Y,...Z,headers:A([{"anthropic-beta":[...J??[],"skills-2025-10-02"].toString()},Z?.headers])},this._client,!1))}retrieve($,Z={},J){let{betas:Y}=Z??{};return this._client.get(g`/v1/skills/${$}?beta=true`,{...J,headers:A([{"anthropic-beta":[...Y??[],"skills-2025-10-02"].toString()},J?.headers])})}list($={},Z){let{betas:J,...Y}=$??{};return this._client.getAPIList("/v1/skills?beta=true",p8,{query:Y,...Z,headers:A([{"anthropic-beta":[...J??[],"skills-2025-10-02"].toString()},Z?.headers])})}delete($,Z={},J){let{betas:Y}=Z??{};return this._client.delete(g`/v1/skills/${$}?beta=true`,{...J,headers:A([{"anthropic-beta":[...Y??[],"skills-2025-10-02"].toString()},J?.headers])})}}$8.Versions=Q0;class S$ extends m{constructor(){super(...arguments);this.models=new l8(this._client),this.messages=new G4(this._client),this.files=new d8(this._client),this.skills=new $8(this._client)}}S$.Models=l8;S$.Messages=G4;S$.Files=d8;S$.Skills=$8;class Z8 extends m{create($,Z){let{betas:J,...Y}=$;return this._client.post("/v1/complete",{body:Y,timeout:this._client._options.timeout??600000,...Z,headers:A([{...J?.toString()!=null?{"anthropic-beta":J?.toString()}:void 0},Z?.headers]),stream:$.stream??!1})}}function E2($){return $?.output_config?.format}function L5($,Z,J){let Y=E2(Z);if(!Z||!("parse"in(Y??{})))return{...$,content:$.content.map((Q)=>{if(Q.type==="text")return Object.defineProperty({...Q},"parsed_output",{value:null,enumerable:!1});return Q}),parsed_output:null};return P5($,Z,J)}function P5($,Z,J){let Y=null,Q=$.content.map((X)=>{if(X.type==="text"){let K=mQ(Z,X.text);if(Y===null)Y=K;return Object.defineProperty({...X},"parsed_output",{value:K,enumerable:!1})}return X});return{...$,content:Q,parsed_output:Y}}function mQ($,Z){let J=E2($);if(J?.type!=="json_schema")return null;try{if("parse"in J)return J.parse(Z);return JSON.parse(Z)}catch(Y){throw new D(`Failed to parse structured output: ${Y}`)}}var L$,H4,J8,X0,F1,K0,z0,E1,V0,u$,G0,R1,L1,I4,P1,D1,H0,D5,R2,T5,I5,A5,x5,L2,P2="__json_buf";function D2($){return $.type==="tool_use"||$.type==="server_tool_use"}class q0{constructor($,Z){L$.add(this),this.messages=[],this.receivedMessages=[],H4.set(this,void 0),J8.set(this,null),this.controller=new AbortController,X0.set(this,void 0),F1.set(this,()=>{}),K0.set(this,()=>{}),z0.set(this,void 0),E1.set(this,()=>{}),V0.set(this,()=>{}),u$.set(this,{}),G0.set(this,!1),R1.set(this,!1),L1.set(this,!1),I4.set(this,!1),P1.set(this,void 0),D1.set(this,void 0),H0.set(this,void 0),T5.set(this,(J)=>{if(L(this,R1,!0,"f"),g$(J))J=new Y$;if(J instanceof Y$)return L(this,L1,!0,"f"),this._emit("abort",J);if(J instanceof D)return this._emit("error",J);if(J instanceof Error){let Y=new D(J.message);return Y.cause=J,this._emit("error",Y)}return this._emit("error",new D(String(J)))}),L(this,X0,new Promise((J,Y)=>{L(this,F1,J,"f"),L(this,K0,Y,"f")}),"f"),L(this,z0,new Promise((J,Y)=>{L(this,E1,J,"f"),L(this,V0,Y,"f")}),"f"),C(this,X0,"f").catch(()=>{}),C(this,z0,"f").catch(()=>{}),L(this,J8,$,"f"),L(this,H0,Z?.logger??console,"f")}get response(){return C(this,P1,"f")}get request_id(){return C(this,D1,"f")}async withResponse(){L(this,I4,!0,"f");let $=await C(this,X0,"f");if(!$)throw Error("Could not resolve a `Response` object");return{data:this,response:$,request_id:$.headers.get("request-id")}}static fromReadableStream($){let Z=new q0(null);return Z._run(()=>Z._fromReadableStream($)),Z}static createMessage($,Z,J,{logger:Y}={}){let Q=new q0(Z,{logger:Y});for(let X of Z.messages)Q._addMessageParam(X);return L(Q,J8,{...Z,stream:!0},"f"),Q._run(()=>Q._createMessage($,{...Z,stream:!0},{...J,headers:{...J?.headers,"X-Stainless-Helper-Method":"stream"}})),Q}_run($){$().then(()=>{this._emitFinal(),this._emit("end")},C(this,T5,"f"))}_addMessageParam($){this.messages.push($)}_addMessage($,Z=!0){if(this.receivedMessages.push($),Z)this._emit("message",$)}async _createMessage($,Z,J){let Y=J?.signal,Q;if(Y){if(Y.aborted)this.controller.abort();Q=this.controller.abort.bind(this.controller),Y.addEventListener("abort",Q)}try{C(this,L$,"m",I5).call(this);let{response:X,data:K}=await $.create({...Z,stream:!0},{...J,signal:this.controller.signal}).withResponse();this._connected(X);for await(let V of K)C(this,L$,"m",A5).call(this,V);if(K.controller.signal?.aborted)throw new Y$;C(this,L$,"m",x5).call(this)}finally{if(Y&&Q)Y.removeEventListener("abort",Q)}}_connected($){if(this.ended)return;L(this,P1,$,"f"),L(this,D1,$?.headers.get("request-id"),"f"),C(this,F1,"f").call(this,$),this._emit("connect")}get ended(){return C(this,G0,"f")}get errored(){return C(this,R1,"f")}get aborted(){return C(this,L1,"f")}abort(){this.controller.abort()}on($,Z){return(C(this,u$,"f")[$]||(C(this,u$,"f")[$]=[])).push({listener:Z}),this}off($,Z){let J=C(this,u$,"f")[$];if(!J)return this;let Y=J.findIndex((Q)=>Q.listener===Z);if(Y>=0)J.splice(Y,1);return this}once($,Z){return(C(this,u$,"f")[$]||(C(this,u$,"f")[$]=[])).push({listener:Z,once:!0}),this}emitted($){return new Promise((Z,J)=>{if(L(this,I4,!0,"f"),$!=="error")this.once("error",J);this.once($,Z)})}async done(){L(this,I4,!0,"f"),await C(this,z0,"f")}get currentMessage(){return C(this,H4,"f")}async finalMessage(){return await this.done(),C(this,L$,"m",D5).call(this)}async finalText(){return await this.done(),C(this,L$,"m",R2).call(this)}_emit($,...Z){if(C(this,G0,"f"))return;if($==="end")L(this,G0,!0,"f"),C(this,E1,"f").call(this);let J=C(this,u$,"f")[$];if(J)C(this,u$,"f")[$]=J.filter((Y)=>!Y.once),J.forEach(({listener:Y})=>Y(...Z));if($==="abort"){let Y=Z[0];if(!C(this,I4,"f")&&!J?.length)Promise.reject(Y);C(this,K0,"f").call(this,Y),C(this,V0,"f").call(this,Y),this._emit("end");return}if($==="error"){let Y=Z[0];if(!C(this,I4,"f")&&!J?.length)Promise.reject(Y);C(this,K0,"f").call(this,Y),C(this,V0,"f").call(this,Y),this._emit("end")}}_emitFinal(){if(this.receivedMessages.at(-1))this._emit("finalMessage",C(this,L$,"m",D5).call(this))}async _fromReadableStream($,Z){let J=Z?.signal,Y;if(J){if(J.aborted)this.controller.abort();Y=this.controller.abort.bind(this.controller),J.addEventListener("abort",Y)}try{C(this,L$,"m",I5).call(this),this._connected(null);let Q=M$.fromReadableStream($,this.controller);for await(let X of Q)C(this,L$,"m",A5).call(this,X);if(Q.controller.signal?.aborted)throw new Y$;C(this,L$,"m",x5).call(this)}finally{if(J&&Y)J.removeEventListener("abort",Y)}}[(H4=new WeakMap,J8=new WeakMap,X0=new WeakMap,F1=new WeakMap,K0=new WeakMap,z0=new WeakMap,E1=new WeakMap,V0=new WeakMap,u$=new WeakMap,G0=new WeakMap,R1=new WeakMap,L1=new WeakMap,I4=new WeakMap,P1=new WeakMap,D1=new WeakMap,H0=new WeakMap,T5=new WeakMap,L$=new WeakSet,D5=function(){if(this.receivedMessages.length===0)throw new D("stream ended without producing a Message with role=assistant");return this.receivedMessages.at(-1)},R2=function(){if(this.receivedMessages.length===0)throw new D("stream ended without producing a Message with role=assistant");let Z=this.receivedMessages.at(-1).content.filter((J)=>J.type==="text").map((J)=>J.text);if(Z.length===0)throw new D("stream ended without producing a content block with type=text");return Z.join(" ")},I5=function(){if(this.ended)return;L(this,H4,void 0,"f")},A5=function(Z){if(this.ended)return;let J=C(this,L$,"m",L2).call(this,Z);switch(this._emit("streamEvent",Z,J),Z.type){case"content_block_delta":{let Y=J.content.at(-1);switch(Z.delta.type){case"text_delta":{if(Y.type==="text")this._emit("text",Z.delta.text,Y.text||"");break}case"citations_delta":{if(Y.type==="text")this._emit("citation",Z.delta.citation,Y.citations??[]);break}case"input_json_delta":{if(D2(Y)&&Y.input)this._emit("inputJson",Z.delta.partial_json,Y.input);break}case"thinking_delta":{if(Y.type==="thinking")this._emit("thinking",Z.delta.thinking,Y.thinking);break}case"signature_delta":{if(Y.type==="thinking")this._emit("signature",Y.signature);break}default:T2(Z.delta)}break}case"message_stop":{this._addMessageParam(J),this._addMessage(L5(J,C(this,J8,"f"),{logger:C(this,H0,"f")}),!0);break}case"content_block_stop":{this._emit("contentBlock",J.content.at(-1));break}case"message_start":{L(this,H4,J,"f");break}case"content_block_start":case"message_delta":break}},x5=function(){if(this.ended)throw new D("stream has ended, this shouldn't happen");let Z=C(this,H4,"f");if(!Z)throw new D("request ended without sending any chunks");return L(this,H4,void 0,"f"),L5(Z,C(this,J8,"f"),{logger:C(this,H0,"f")})},L2=function(Z){let J=C(this,H4,"f");if(Z.type==="message_start"){if(J)throw new D(`Unexpected event order, got ${Z.type} before receiving "message_stop"`);return Z.message}if(!J)throw new D(`Unexpected event order, got ${Z.type} before "message_start"`);switch(Z.type){case"message_stop":return J;case"message_delta":if(J.stop_reason=Z.delta.stop_reason,J.stop_sequence=Z.delta.stop_sequence,J.usage.output_tokens=Z.usage.output_tokens,Z.usage.input_tokens!=null)J.usage.input_tokens=Z.usage.input_tokens;if(Z.usage.cache_creation_input_tokens!=null)J.usage.cache_creation_input_tokens=Z.usage.cache_creation_input_tokens;if(Z.usage.cache_read_input_tokens!=null)J.usage.cache_read_input_tokens=Z.usage.cache_read_input_tokens;if(Z.usage.server_tool_use!=null)J.usage.server_tool_use=Z.usage.server_tool_use;return J;case"content_block_start":return J.content.push({...Z.content_block}),J;case"content_block_delta":{let Y=J.content.at(Z.index);switch(Z.delta.type){case"text_delta":{if(Y?.type==="text")J.content[Z.index]={...Y,text:(Y.text||"")+Z.delta.text};break}case"citations_delta":{if(Y?.type==="text")J.content[Z.index]={...Y,citations:[...Y.citations??[],Z.delta.citation]};break}case"input_json_delta":{if(Y&&D2(Y)){let Q=Y[P2]||"";Q+=Z.delta.partial_json;let X={...Y};if(Object.defineProperty(X,P2,{value:Q,enumerable:!1,writable:!0}),Q)X.input=W1(Q);J.content[Z.index]=X}break}case"thinking_delta":{if(Y?.type==="thinking")J.content[Z.index]={...Y,thinking:Y.thinking+Z.delta.thinking};break}case"signature_delta":{if(Y?.type==="thinking")J.content[Z.index]={...Y,signature:Z.delta.signature};break}default:T2(Z.delta)}return J}case"content_block_stop":return J}},Symbol.asyncIterator)](){let $=[],Z=[],J=!1;return this.on("streamEvent",(Y)=>{let Q=Z.shift();if(Q)Q.resolve(Y);else $.push(Y)}),this.on("end",()=>{J=!0;for(let Y of Z)Y.resolve(void 0);Z.length=0}),this.on("abort",(Y)=>{J=!0;for(let Q of Z)Q.reject(Y);Z.length=0}),this.on("error",(Y)=>{J=!0;for(let Q of Z)Q.reject(Y);Z.length=0}),{next:async()=>{if(!$.length){if(J)return{value:void 0,done:!0};return new Promise((Q,X)=>Z.push({resolve:Q,reject:X})).then((Q)=>Q?{value:Q,done:!1}:{value:void 0,done:!0})}return{value:$.shift(),done:!1}},return:async()=>{return this.abort(),{value:void 0,done:!0}}}}toReadableStream(){return new M$(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function T2($){}class W0 extends m{create($,Z){return this._client.post("/v1/messages/batches",{body:$,...Z})}retrieve($,Z){return this._client.get(g`/v1/messages/batches/${$}`,Z)}list($={},Z){return this._client.getAPIList("/v1/messages/batches",I$,{query:$,...Z})}delete($,Z){return this._client.delete(g`/v1/messages/batches/${$}`,Z)}cancel($,Z){return this._client.post(g`/v1/messages/batches/${$}/cancel`,Z)}async results($,Z){let J=await this.retrieve($);if(!J.results_url)throw new D(`No batch \`results_url\`; Has it finished processing? ${J.processing_status} - ${J.id}`);return this._client.get(J.results_url,{...Z,headers:A([{Accept:"application/binary"},Z?.headers]),stream:!0,__binaryResponse:!0})._thenUnwrap((Y,Q)=>e4.fromResponse(Q.response,Q.controller))}}class A4 extends m{constructor(){super(...arguments);this.batches=new W0(this._client)}create($,Z){if($.model in I2)console.warn(`The model '${$.model}' is deprecated and will reach end-of-life on ${I2[$.model]}
82
+ Please migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`);if($.model in cQ&&$.thinking&&$.thinking.type==="enabled")console.warn(`Using Claude with ${$.model} and 'thinking.type=enabled' is deprecated. Use 'thinking.type=adaptive' instead which results in better model performance in our testing: https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking`);let J=this._client._options.timeout;if(!$.stream&&J==null){let Q=q1[$.model]??void 0;J=this._client.calculateNonstreamingTimeout($.max_tokens,Q)}let Y=H1($.tools,$.messages);return this._client.post("/v1/messages",{body:$,timeout:J??600000,...Z,headers:A([Y,Z?.headers]),stream:$.stream??!1})}parse($,Z){return this.create($,Z).then((J)=>P5(J,$,{logger:this._client.logger??console}))}stream($,Z){return q0.createMessage(this,$,Z,{logger:this._client.logger??console})}countTokens($,Z){return this._client.post("/v1/messages/count_tokens",{body:$,...Z})}}var I2={"claude-1.3":"November 6th, 2024","claude-1.3-100k":"November 6th, 2024","claude-instant-1.1":"November 6th, 2024","claude-instant-1.1-100k":"November 6th, 2024","claude-instant-1.2":"November 6th, 2024","claude-3-sonnet-20240229":"July 21st, 2025","claude-3-opus-20240229":"January 5th, 2026","claude-2.1":"July 21st, 2025","claude-2.0":"July 21st, 2025","claude-3-7-sonnet-latest":"February 19th, 2026","claude-3-7-sonnet-20250219":"February 19th, 2026","claude-3-5-haiku-latest":"February 19th, 2026","claude-3-5-haiku-20241022":"February 19th, 2026"},cQ=["claude-opus-4-6"];A4.Batches=W0;class Y8 extends m{retrieve($,Z={},J){let{betas:Y}=Z??{};return this._client.get(g`/v1/models/${$}`,{...J,headers:A([{...Y?.toString()!=null?{"anthropic-beta":Y?.toString()}:void 0},J?.headers])})}list($={},Z){let{betas:J,...Y}=$??{};return this._client.getAPIList("/v1/models",I$,{query:Y,...Z,headers:A([{...J?.toString()!=null?{"anthropic-beta":J?.toString()}:void 0},Z?.headers])})}}var U0=($)=>{if(typeof globalThis.process<"u")return globalThis.process.env?.[$]?.trim()??void 0;if(typeof globalThis.Deno<"u")return globalThis.Deno.env?.get?.($)?.trim();return};var S5,w5,T1,A2,x2="\\n\\nHuman:",S2="\\n\\nAssistant:";class c{constructor({baseURL:$=U0("ANTHROPIC_BASE_URL"),apiKey:Z=U0("ANTHROPIC_API_KEY")??null,authToken:J=U0("ANTHROPIC_AUTH_TOKEN")??null,...Y}={}){S5.add(this),T1.set(this,void 0);let Q={apiKey:Z,authToken:J,...Y,baseURL:$||"https://api.anthropic.com"};if(!Q.dangerouslyAllowBrowser&&lZ())throw new D(`It looks like you're running in a browser-like environment.
78
83
 
79
84
  This is disabled by default, as it risks exposing your secret API credentials to attackers.
80
85
  If you understand the risks and have appropriate mitigations in place,
81
86
  you can set the \`dangerouslyAllowBrowser\` option to \`true\`, e.g.,
82
87
 
83
88
  new Anthropic({ apiKey, dangerouslyAllowBrowser: true });
84
- `);this.baseURL=Q.baseURL,this.timeout=Q.timeout??h2.DEFAULT_TIMEOUT,this.logger=Q.logger??console;let X="warn";this.logLevel=X,this.logLevel=U2(Q.logLevel,"ClientOptions.logLevel",this)??U2(g4("ANTHROPIC_LOG"),"process.env['ANTHROPIC_LOG']",this)??X,this.fetchOptions=Q.fetchOptions,this.maxRetries=Q.maxRetries??2,this.fetch=Q.fetch??j5(),F(this,g8,L5,"f"),this._options=Q,this.apiKey=typeof Z==="string"?Z:null,this.authToken=Y}withOptions($){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,authToken:this.authToken,...$})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:$,nulls:Z}){if($.get("x-api-key")||$.get("authorization"))return;if(this.apiKey&&$.get("x-api-key"))return;if(Z.has("x-api-key"))return;if(this.authToken&&$.get("authorization"))return;if(Z.has("authorization"))return;throw Error('Could not resolve authentication method. Expected either apiKey or authToken to be set. Or for one of the "X-Api-Key" or "Authorization" headers to be explicitly omitted')}async authHeaders($){return D([await this.apiKeyAuth($),await this.bearerAuth($)])}async apiKeyAuth($){if(this.apiKey==null)return;return D([{"X-Api-Key":this.apiKey}])}async bearerAuth($){if(this.authToken==null)return;return D([{Authorization:`Bearer ${this.authToken}`}])}stringifyQuery($){return R5($)}getUserAgent(){return`${this.constructor.name}/JS ${c$}`}defaultIdempotencyKey(){return`stainless-node-retry-${z2()}`}makeStatusError($,Z,Y,J){return p.generate($,Z,Y,J)}buildURL($,Z,Y){let J=!U(this,_2,"m",Z9).call(this)&&Y||this.baseURL,Q=H5($)?new URL($):new URL(J+(J.endsWith("/")&&$.startsWith("/")?$.slice(1):$)),X=this.defaultQuery(),K=Object.fromEntries(Q.searchParams);if(!W2(X)||!W2(K))Z={...K,...X,...Z};if(typeof Z==="object"&&Z&&!Array.isArray(Z))Q.search=this.stringifyQuery(Z);return Q.toString()}_calculateNonstreamingTimeout($){if(3600*$/128000>600)throw new R("Streaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-typescript#streaming-responses for more details");return 600000}async prepareOptions($){}async prepareRequest($,{url:Z,options:Y}){}get($,Z){return this.methodRequest("get",$,Z)}post($,Z){return this.methodRequest("post",$,Z)}patch($,Z){return this.methodRequest("patch",$,Z)}put($,Z){return this.methodRequest("put",$,Z)}delete($,Z){return this.methodRequest("delete",$,Z)}methodRequest($,Z,Y){return this.request(Promise.resolve(Y).then((J)=>{return{method:$,path:Z,...J}}))}request($,Z=null){return new K1(this,this.makeRequest($,Z,void 0))}async makeRequest($,Z,Y){let J=await $,Q=J.maxRetries??this.maxRetries;if(Z==null)Z=Q;await this.prepareOptions(J);let{req:X,url:K,timeout:V}=await this.buildRequest(J,{retryCount:Q-Z});await this.prepareRequest(X,{url:K,options:J});let G="log_"+(Math.random()*16777216|0).toString(16).padStart(6,"0"),H=Y===void 0?"":`, retryOf: ${Y}`,z=Date.now();if(i(this).debug(`[${G}] sending request`,w$({retryOfRequestLogID:Y,method:J.method,url:K,options:J,headers:X.headers})),J.signal?.aborted)throw new e;let M=new AbortController,N=await this.fetchWithTimeout(K,X,V,M).catch(t1),E=Date.now();if(N instanceof globalThis.Error){let S=`retrying, ${Z} attempts remaining`;if(J.signal?.aborted)throw new e;let k=P$(N)||/timed? ?out/i.test(String(N)+("cause"in N?String(N.cause):""));if(Z)return i(this).info(`[${G}] connection ${k?"timed out":"failed"} - ${S}`),i(this).debug(`[${G}] connection ${k?"timed out":"failed"} (${S})`,w$({retryOfRequestLogID:Y,url:K,durationMs:E-z,message:N.message})),this.retryRequest(J,Z,Y??G);if(i(this).info(`[${G}] connection ${k?"timed out":"failed"} - error; no more retries left`),i(this).debug(`[${G}] connection ${k?"timed out":"failed"} (error; no more retries left)`,w$({retryOfRequestLogID:Y,url:K,durationMs:E-z,message:N.message})),k)throw new e1;throw new X1({cause:N})}let L=[...N.headers.entries()].filter(([S])=>S==="request-id").map(([S,k])=>", "+S+": "+JSON.stringify(k)).join(""),w=`[${G}${H}${L}] ${X.method} ${K} ${N.ok?"succeeded":"failed"} with status ${N.status} in ${E-z}ms`;if(!N.ok){let S=await this.shouldRetry(N);if(Z&&S){let O=`retrying, ${Z} attempts remaining`;return await F5(N.body),i(this).info(`${w} - ${O}`),i(this).debug(`[${G}] response error (${O})`,w$({retryOfRequestLogID:Y,url:N.url,status:N.status,headers:N.headers,durationMs:E-z})),this.retryRequest(J,Z,Y??G,N.headers)}let k=S?"error; no more retries left":"error; not retryable";i(this).info(`${w} - ${k}`);let f$=await N.text().catch((O)=>t1(O).message),h=B8(f$),o=h?void 0:f$;throw i(this).debug(`[${G}] response error (${k})`,w$({retryOfRequestLogID:Y,url:N.url,status:N.status,headers:N.headers,message:o,durationMs:Date.now()-z})),this.makeStatusError(N.status,h,o,N.headers)}return i(this).info(w),i(this).debug(`[${G}] response start`,w$({retryOfRequestLogID:Y,url:N.url,status:N.status,headers:N.headers,durationMs:E-z})),{response:N,options:J,controller:M,requestLogID:G,retryOfRequestLogID:Y,startTime:z}}getAPIList($,Z,Y){return this.requestAPIList(Z,Y&&"then"in Y?Y.then((J)=>({method:"get",path:$,...J})):{method:"get",path:$,...Y})}requestAPIList($,Z){let Y=this.makeRequest(Z,null,void 0);return new j8(this,Y,$)}async fetchWithTimeout($,Z,Y,J){let{signal:Q,method:X,...K}=Z||{},V=this._makeAbort(J);if(Q)Q.addEventListener("abort",V,{once:!0});let G=setTimeout(V,Y),H=globalThis.ReadableStream&&K.body instanceof globalThis.ReadableStream||typeof K.body==="object"&&K.body!==null&&Symbol.asyncIterator in K.body,z={signal:J.signal,...H?{duplex:"half"}:{},method:"GET",...K};if(X)z.method=X.toUpperCase();try{return await this.fetch.call(void 0,$,z)}finally{clearTimeout(G)}}async shouldRetry($){let Z=$.headers.get("x-should-retry");if(Z==="true")return!0;if(Z==="false")return!1;if($.status===408)return!0;if($.status===409)return!0;if($.status===429)return!0;if($.status>=500)return!0;return!1}async retryRequest($,Z,Y,J){let Q,X=J?.get("retry-after-ms");if(X){let V=parseFloat(X);if(!Number.isNaN(V))Q=V}let K=J?.get("retry-after");if(K&&!Q){let V=parseFloat(K);if(!Number.isNaN(V))Q=V*1000;else Q=Date.parse(K)-Date.now()}if(Q===void 0){let V=$.maxRetries??this.maxRetries;Q=this.calculateDefaultRetryTimeoutMillis(Z,V)}return await B5(Q),this.makeRequest($,Z-1,Y)}calculateDefaultRetryTimeoutMillis($,Z){let Q=Z-$,X=Math.min(0.5*Math.pow(2,Q),8),K=1-Math.random()*0.25;return X*K*1000}calculateNonstreamingTimeout($,Z){if(3600000*$/128000>600000||Z!=null&&$>Z)throw new R("Streaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-typescript#long-requests for more details");return 600000}async buildRequest($,{retryCount:Z=0}={}){let Y={...$},{method:J,path:Q,query:X,defaultBaseURL:K}=Y,V=this.buildURL(Q,X,K);if("timeout"in Y)U5("timeout",Y.timeout);Y.timeout=Y.timeout??this.timeout;let{bodyHeaders:G,body:H}=this.buildBody({options:Y}),z=await this.buildHeaders({options:$,method:J,bodyHeaders:G,retryCount:Z});return{req:{method:J,headers:z,...Y.signal&&{signal:Y.signal},...globalThis.ReadableStream&&H instanceof globalThis.ReadableStream&&{duplex:"half"},...H&&{body:H},...this.fetchOptions??{},...Y.fetchOptions??{}},url:V,timeout:Y.timeout}}async buildHeaders({options:$,method:Z,bodyHeaders:Y,retryCount:J}){let Q={};if(this.idempotencyHeader&&Z!=="get"){if(!$.idempotencyKey)$.idempotencyKey=this.defaultIdempotencyKey();Q[this.idempotencyHeader]=$.idempotencyKey}let X=D([Q,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(J),...$.timeout?{"X-Stainless-Timeout":String(Math.trunc($.timeout/1000))}:{},...E5(),...this._options.dangerouslyAllowBrowser?{"anthropic-dangerous-direct-browser-access":"true"}:void 0,"anthropic-version":"2023-06-01"},await this.authHeaders($),this._options.defaultHeaders,Y,$.headers]);return this.validateHeaders(X),X.values}_makeAbort($){return()=>$.abort()}buildBody({options:{body:$,headers:Z}}){if(!$)return{bodyHeaders:void 0,body:void 0};let Y=D([Z]);if(ArrayBuffer.isView($)||$ instanceof ArrayBuffer||$ instanceof DataView||typeof $==="string"&&Y.values.has("content-type")||globalThis.Blob&&$ instanceof globalThis.Blob||$ instanceof FormData||$ instanceof URLSearchParams||globalThis.ReadableStream&&$ instanceof globalThis.ReadableStream)return{bodyHeaders:void 0,body:$};else if(typeof $==="object"&&((Symbol.asyncIterator in $)||(Symbol.iterator in $)&&("next"in $)&&typeof $.next==="function"))return{bodyHeaders:void 0,body:N8($)};else if(typeof $==="object"&&Y.values.get("content-type")==="application/x-www-form-urlencoded")return{bodyHeaders:{"content-type":"application/x-www-form-urlencoded"},body:this.stringifyQuery($)};else return U(this,g8,"f").call(this,{body:$,headers:Y})}}h2=m,g8=new WeakMap,_2=new WeakSet,Z9=function(){return this.baseURL!=="https://api.anthropic.com"};m.Anthropic=h2;m.HUMAN_PROMPT=Y9;m.AI_PROMPT=J9;m.DEFAULT_TIMEOUT=600000;m.AnthropicError=R;m.APIError=p;m.APIConnectionError=X1;m.APIConnectionTimeoutError=e1;m.APIUserAbortError=e;m.NotFoundError=J4;m.ConflictError=Q4;m.RateLimitError=K4;m.BadRequestError=$4;m.AuthenticationError=Z4;m.InternalServerError=z4;m.PermissionDeniedError=Y4;m.UnprocessableEntityError=X4;m.toFile=F8;class F$ extends m{constructor(){super(...arguments);this.completions=new T1(this),this.messages=new H1(this),this.models=new w1(this),this.beta=new j$(this)}}F$.Completions=T1;F$.Messages=H1;F$.Models=w1;F$.Beta=j$;t();import{existsSync as o4,readdirSync as HQ,readFileSync as O7,writeFileSync as qQ,statSync as SZ,realpathSync as UQ}from"fs";import{resolve as C1,join as bZ,sep as c0}from"path";import{existsSync as VY,readFileSync as GY,writeFileSync as WY}from"fs";import{basename as f2}from"path";var Q9=50;class v2{entries=[];saveState($){let Z=VY($),Y=Z?GY($,"utf-8"):"";if(this.entries.push({path:$,content:Y,timestamp:Date.now(),existed:Z}),this.entries.length>Q9)this.entries=this.entries.slice(-Q9)}undo(){let $=this.entries.pop();if(!$)return null;if(!$.existed)return`Undo: ${f2($.path)} was a new file. Remove it manually if needed.`;WY($.path,$.content);let Z=$.content.split(`
85
- `).length;return`Undo: restored ${f2($.path)} (${Z} lines, from ${X9($.timestamp)})`}get size(){return this.entries.length}peek(){if(this.entries.length===0)return null;let $=this.entries[this.entries.length-1];return`${f2($.path)} (${X9($.timestamp)})`}}function X9($){let Z=Math.floor((Date.now()-$)/1000);if(Z<60)return`${Z}s ago`;let Y=Math.floor(Z/60);if(Y<60)return`${Y}m ago`;return`${Math.floor(Y/60)}h ago`}import{existsSync as K9,readdirSync as HY,readFileSync as qY,mkdirSync as UY}from"fs";import{join as g2}from"path";function z9($){if(!K9($))return[];let Z=[],Y=HY($).filter((J)=>J.endsWith(".json"));for(let J of Y)try{let Q=JSON.parse(qY(g2($,J),"utf-8"));if(!Q.name||!Q.description||!Q.command)continue;if(typeof Q.name!=="string"||typeof Q.command!=="string")continue;if(Q.command.includes("$(")||Q.command.includes("`"))continue;Z.push({name:Q.name,description:Q.description,inputSchema:Q.input_schema||{type:"object",properties:{},required:[]},command:Q.command,source:g2($,J)})}catch{}return Z}function V9($){return $.map((Z)=>({name:Z.name,description:Z.description,input_schema:Z.inputSchema}))}async function G9($,Z){let Y=$.command;for(let[z,M]of Object.entries(Z)){let N=String(M).replace(/[;&|`$()]/g,"");Y=Y.replace(new RegExp(`\\{\\{input\\.${z}\\}\\}`,"g"),N)}Y=Y.replace(/\{\{input\.\w+\}\}/g,"");let J=Y8(),Q=Bun.spawn([...J,Y],{stdout:"pipe",stderr:"pipe",cwd:process.cwd()}),X=setTimeout(()=>Q.kill(),30000),[K,V]=await Promise.all([new Response(Q.stdout).text(),new Response(Q.stderr).text()]),G=await Q.exited;clearTimeout(X);let H=K.trim();if(V.trim())H+=(H?`
89
+ `);this.baseURL=Q.baseURL,this.timeout=Q.timeout??w5.DEFAULT_TIMEOUT,this.logger=Q.logger??console;let X="warn";this.logLevel=X,this.logLevel=V5(Q.logLevel,"ClientOptions.logLevel",this)??V5(U0("ANTHROPIC_LOG"),"process.env['ANTHROPIC_LOG']",this)??X,this.fetchOptions=Q.fetchOptions,this.maxRetries=Q.maxRetries??2,this.fetch=Q.fetch??aZ(),L(this,T1,rZ,"f"),this._options=Q,this.apiKey=typeof Z==="string"?Z:null,this.authToken=J}withOptions($){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,authToken:this.authToken,...$})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:$,nulls:Z}){if($.get("x-api-key")||$.get("authorization"))return;if(this.apiKey&&$.get("x-api-key"))return;if(Z.has("x-api-key"))return;if(this.authToken&&$.get("authorization"))return;if(Z.has("authorization"))return;throw Error('Could not resolve authentication method. Expected either apiKey or authToken to be set. Or for one of the "X-Api-Key" or "Authorization" headers to be explicitly omitted')}async authHeaders($){return A([await this.apiKeyAuth($),await this.bearerAuth($)])}async apiKeyAuth($){if(this.apiKey==null)return;return A([{"X-Api-Key":this.apiKey}])}async bearerAuth($){if(this.authToken==null)return;return A([{Authorization:`Bearer ${this.authToken}`}])}stringifyQuery($){return iZ($)}getUserAgent(){return`${this.constructor.name}/JS ${X4}`}defaultIdempotencyKey(){return`stainless-node-retry-${J5()}`}makeStatusError($,Z,J,Y){return n.generate($,Z,J,Y)}buildURL($,Z,J){let Y=!C(this,S5,"m",A2).call(this)&&J||this.baseURL,Q=hZ($)?new URL($):new URL(Y+(Y.endsWith("/")&&$.startsWith("/")?$.slice(1):$)),X=this.defaultQuery(),K=Object.fromEntries(Q.searchParams);if(!X5(X)||!X5(K))Z={...K,...X,...Z};if(typeof Z==="object"&&Z&&!Array.isArray(Z))Q.search=this.stringifyQuery(Z);return Q.toString()}_calculateNonstreamingTimeout($){if(3600*$/128000>600)throw new D("Streaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-typescript#streaming-responses for more details");return 600000}async prepareOptions($){}async prepareRequest($,{url:Z,options:J}){}get($,Z){return this.methodRequest("get",$,Z)}post($,Z){return this.methodRequest("post",$,Z)}patch($,Z){return this.methodRequest("patch",$,Z)}put($,Z){return this.methodRequest("put",$,Z)}delete($,Z){return this.methodRequest("delete",$,Z)}methodRequest($,Z,J){return this.request(Promise.resolve(J).then((Y)=>{return{method:$,path:Z,...Y}}))}request($,Z=null){return new L4(this,this.makeRequest($,Z,void 0))}async makeRequest($,Z,J){let Y=await $,Q=Y.maxRetries??this.maxRetries;if(Z==null)Z=Q;await this.prepareOptions(Y);let{req:X,url:K,timeout:V}=await this.buildRequest(Y,{retryCount:Q-Z});await this.prepareRequest(X,{url:K,options:Y});let G="log_"+(Math.random()*16777216|0).toString(16).padStart(6,"0"),H=J===void 0?"":`, retryOf: ${J}`,z=Date.now();if(s(this).debug(`[${G}] sending request`,m$({retryOfRequestLogID:J,method:Y.method,url:K,options:Y,headers:X.headers})),Y.signal?.aborted)throw new Y$;let B=new AbortController,U=await this.fetchWithTimeout(K,X,V,B).catch(T8),M=Date.now();if(U instanceof globalThis.Error){let T=`retrying, ${Z} attempts remaining`;if(Y.signal?.aborted)throw new Y$;let y=g$(U)||/timed? ?out/i.test(String(U)+("cause"in U?String(U.cause):""));if(Z)return s(this).info(`[${G}] connection ${y?"timed out":"failed"} - ${T}`),s(this).debug(`[${G}] connection ${y?"timed out":"failed"} (${T})`,m$({retryOfRequestLogID:J,url:K,durationMs:M-z,message:U.message})),this.retryRequest(Y,Z,J??G);if(s(this).info(`[${G}] connection ${y?"timed out":"failed"} - error; no more retries left`),s(this).debug(`[${G}] connection ${y?"timed out":"failed"} (error; no more retries left)`,m$({retryOfRequestLogID:J,url:K,durationMs:M-z,message:U.message})),y)throw new I8;throw new R4({cause:U})}let O=[...U.headers.entries()].filter(([T])=>T==="request-id").map(([T,y])=>", "+T+": "+JSON.stringify(y)).join(""),P=`[${G}${H}${O}] ${X.method} ${K} ${U.ok?"succeeded":"failed"} with status ${U.status} in ${M-z}ms`;if(!U.ok){let T=await this.shouldRetry(U);if(Z&&T){let u=`retrying, ${Z} attempts remaining`;return await nZ(U.body),s(this).info(`${P} - ${u}`),s(this).debug(`[${G}] response error (${u})`,m$({retryOfRequestLogID:J,url:U.url,status:U.status,headers:U.headers,durationMs:M-z})),this.retryRequest(Y,Z,J??G,U.headers)}let y=T?"error; no more retries left":"error; not retryable";s(this).info(`${P} - ${y}`);let K$=await U.text().catch((u)=>T8(u).message),i=Z1(K$),b=i?void 0:K$;throw s(this).debug(`[${G}] response error (${y})`,m$({retryOfRequestLogID:J,url:U.url,status:U.status,headers:U.headers,message:b,durationMs:Date.now()-z})),this.makeStatusError(U.status,i,b,U.headers)}return s(this).info(P),s(this).debug(`[${G}] response start`,m$({retryOfRequestLogID:J,url:U.url,status:U.status,headers:U.headers,durationMs:M-z})),{response:U,options:Y,controller:B,requestLogID:G,retryOfRequestLogID:J,startTime:z}}getAPIList($,Z,J){return this.requestAPIList(Z,J&&"then"in J?J.then((Y)=>({method:"get",path:$,...Y})):{method:"get",path:$,...J})}requestAPIList($,Z){let J=this.makeRequest(Z,null,void 0);return new z1(this,J,$)}async fetchWithTimeout($,Z,J,Y){let{signal:Q,method:X,...K}=Z||{},V=this._makeAbort(Y);if(Q)Q.addEventListener("abort",V,{once:!0});let G=setTimeout(V,J),H=globalThis.ReadableStream&&K.body instanceof globalThis.ReadableStream||typeof K.body==="object"&&K.body!==null&&Symbol.asyncIterator in K.body,z={signal:Y.signal,...H?{duplex:"half"}:{},method:"GET",...K};if(X)z.method=X.toUpperCase();try{return await this.fetch.call(void 0,$,z)}finally{clearTimeout(G)}}async shouldRetry($){let Z=$.headers.get("x-should-retry");if(Z==="true")return!0;if(Z==="false")return!1;if($.status===408)return!0;if($.status===409)return!0;if($.status===429)return!0;if($.status>=500)return!0;return!1}async retryRequest($,Z,J,Y){let Q,X=Y?.get("retry-after-ms");if(X){let V=parseFloat(X);if(!Number.isNaN(V))Q=V}let K=Y?.get("retry-after");if(K&&!Q){let V=parseFloat(K);if(!Number.isNaN(V))Q=V*1000;else Q=Date.parse(K)-Date.now()}if(Q===void 0){let V=$.maxRetries??this.maxRetries;Q=this.calculateDefaultRetryTimeoutMillis(Z,V)}return await pZ(Q),this.makeRequest($,Z-1,J)}calculateDefaultRetryTimeoutMillis($,Z){let Q=Z-$,X=Math.min(0.5*Math.pow(2,Q),8),K=1-Math.random()*0.25;return X*K*1000}calculateNonstreamingTimeout($,Z){if(3600000*$/128000>600000||Z!=null&&$>Z)throw new D("Streaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-typescript#long-requests for more details");return 600000}async buildRequest($,{retryCount:Z=0}={}){let J={...$},{method:Y,path:Q,query:X,defaultBaseURL:K}=J,V=this.buildURL(Q,X,K);if("timeout"in J)mZ("timeout",J.timeout);J.timeout=J.timeout??this.timeout;let{bodyHeaders:G,body:H}=this.buildBody({options:J}),z=await this.buildHeaders({options:$,method:Y,bodyHeaders:G,retryCount:Z});return{req:{method:Y,headers:z,...J.signal&&{signal:J.signal},...globalThis.ReadableStream&&H instanceof globalThis.ReadableStream&&{duplex:"half"},...H&&{body:H},...this.fetchOptions??{},...J.fetchOptions??{}},url:V,timeout:J.timeout}}async buildHeaders({options:$,method:Z,bodyHeaders:J,retryCount:Y}){let Q={};if(this.idempotencyHeader&&Z!=="get"){if(!$.idempotencyKey)$.idempotencyKey=this.defaultIdempotencyKey();Q[this.idempotencyHeader]=$.idempotencyKey}let X=A([Q,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(Y),...$.timeout?{"X-Stainless-Timeout":String(Math.trunc($.timeout/1000))}:{},...oZ(),...this._options.dangerouslyAllowBrowser?{"anthropic-dangerous-direct-browser-access":"true"}:void 0,"anthropic-version":"2023-06-01"},await this.authHeaders($),this._options.defaultHeaders,J,$.headers]);return this.validateHeaders(X),X.values}_makeAbort($){return()=>$.abort()}buildBody({options:{body:$,headers:Z}}){if(!$)return{bodyHeaders:void 0,body:void 0};let J=A([Z]);if(ArrayBuffer.isView($)||$ instanceof ArrayBuffer||$ instanceof DataView||typeof $==="string"&&J.values.has("content-type")||globalThis.Blob&&$ instanceof globalThis.Blob||$ instanceof FormData||$ instanceof URLSearchParams||globalThis.ReadableStream&&$ instanceof globalThis.ReadableStream)return{bodyHeaders:void 0,body:$};else if(typeof $==="object"&&((Symbol.asyncIterator in $)||(Symbol.iterator in $)&&("next"in $)&&typeof $.next==="function"))return{bodyHeaders:void 0,body:J1($)};else if(typeof $==="object"&&J.values.get("content-type")==="application/x-www-form-urlencoded")return{bodyHeaders:{"content-type":"application/x-www-form-urlencoded"},body:this.stringifyQuery($)};else return C(this,T1,"f").call(this,{body:$,headers:J})}}w5=c,T1=new WeakMap,S5=new WeakSet,A2=function(){return this.baseURL!=="https://api.anthropic.com"};c.Anthropic=w5;c.HUMAN_PROMPT=x2;c.AI_PROMPT=S2;c.DEFAULT_TIMEOUT=600000;c.AnthropicError=D;c.APIError=n;c.APIConnectionError=R4;c.APIConnectionTimeoutError=I8;c.APIUserAbortError=Y$;c.NotFoundError=w8;c.ConflictError=k8;c.RateLimitError=y8;c.BadRequestError=A8;c.AuthenticationError=x8;c.InternalServerError=_8;c.PermissionDeniedError=S8;c.UnprocessableEntityError=b8;c.toFile=V1;class w$ extends c{constructor(){super(...arguments);this.completions=new Z8(this),this.messages=new A4(this),this.models=new Y8(this),this.beta=new S$(this)}}w$.Completions=Z8;w$.Messages=A4;w$.Models=Y8;w$.Beta=S$;a();e();import{existsSync as I0,readdirSync as zV,readFileSync as x9,writeFileSync as VV,statSync as $3,realpathSync as GV}from"fs";import{resolve as A$,join as Z3,sep as N8}from"path";import{existsSync as dQ,readFileSync as lQ,writeFileSync as oQ}from"fs";import{basename as k5}from"path";var w2=50;class b5{entries=[];saveState($){let Z=dQ($),J=Z?lQ($,"utf-8"):"";if(this.entries.push({path:$,content:J,timestamp:Date.now(),existed:Z}),this.entries.length>w2)this.entries=this.entries.slice(-w2)}undo(){let $=this.entries.pop();if(!$)return null;if(!$.existed)return`Undo: ${k5($.path)} was a new file. Remove it manually if needed.`;oQ($.path,$.content);let Z=$.content.split(`
90
+ `).length;return`Undo: restored ${k5($.path)} (${Z} lines, from ${k2($.timestamp)})`}get size(){return this.entries.length}peek(){if(this.entries.length===0)return null;let $=this.entries[this.entries.length-1];return`${k5($.path)} (${k2($.timestamp)})`}}function k2($){let Z=Math.floor((Date.now()-$)/1000);if(Z<60)return`${Z}s ago`;let J=Math.floor(Z/60);if(J<60)return`${J}m ago`;return`${Math.floor(J/60)}h ago`}e();import{existsSync as b2,readdirSync as aQ,readFileSync as nQ,mkdirSync as rQ}from"fs";import{join as y5}from"path";function y2($){if(!b2($))return[];let Z=[],J=aQ($).filter((Y)=>Y.endsWith(".json"));for(let Y of J)try{let Q=JSON.parse(nQ(y5($,Y),"utf-8"));if(!Q.name||!Q.description||!Q.command)continue;if(typeof Q.name!=="string"||typeof Q.command!=="string")continue;if(Q.command.includes("$(")||Q.command.includes("`"))continue;Z.push({name:Q.name,description:Q.description,inputSchema:Q.input_schema||{type:"object",properties:{},required:[]},command:Q.command,source:y5($,Y)})}catch{}return Z}function _2($){return $.map((Z)=>({name:Z.name,description:Z.description,input_schema:Z.inputSchema}))}async function v2($,Z){let J=$.command;for(let[z,B]of Object.entries(Z)){let U=String(B).replace(/[;&|`$()]/g,"");J=J.replace(new RegExp(`\\{\\{input\\.${z}\\}\\}`,"g"),U)}J=J.replace(/\{\{input\.\w+\}\}/g,"");let Y=l4(),Q=Bun.spawn([...Y,J],{stdout:"pipe",stderr:"pipe",cwd:process.cwd()}),X=setTimeout(()=>Q.kill(),30000),[K,V]=await Promise.all([new Response(Q.stdout).text(),new Response(Q.stderr).text()]),G=await Q.exited;clearTimeout(X);let H=K.trim();if(V.trim())H+=(H?`
86
91
  `:"")+V.trim();if(G!==0)H+=(H?`
87
- `:"")+`Exit code: ${G}`;return H||"(no output)"}function W9($){if($.length===0)return"No plugins loaded. Add .json files to ~/.config/smolerclaw/plugins/";return`Plugins:
92
+ `:"")+`Exit code: ${G}`;return H||"(no output)"}function f2($){if($.length===0)return"No plugins loaded. Add .json files to ~/.config/smolerclaw/plugins/";return`Plugins:
88
93
  `+$.map((Z)=>` ${Z.name} \u2014 ${Z.description}`).join(`
89
- `)}function H9($){let Z=g2($,"plugins");if(!K9(Z))UY(Z,{recursive:!0});return Z}var BY=/[";`$\n\r|&<>{}()]/;function c2($,Z){if(!$||typeof $!=="string")return`Error: ${Z} is required.`;if($.length>500)return`Error: ${Z} too long (max 500 chars).`;if(BY.test($))return`Error: ${Z} contains invalid characters. Avoid: " ; \` $ | & < > { } ( ) and newlines.`;return null}var NY=15000;async function I1($){let Z=Bun.spawn(["powershell","-NoProfile","-NonInteractive","-Command",$],{stdout:"pipe",stderr:"pipe"}),Y=setTimeout(()=>Z.kill(),NY),[J,Q]=await Promise.all([new Response(Z.stdout).text(),new Response(Z.stderr).text()]),X=await Z.exited;return clearTimeout(Y),{stdout:J,stderr:Q,exitCode:X}}var m2={excel:"excel",word:"winword",powerpoint:"powerpnt",outlook:"ms-outlook:",onenote:"onenote",teams:"msteams:",edge:"msedge",chrome:"chrome",firefox:"firefox",calculator:"calc",notepad:"notepad",terminal:"wt",explorer:"explorer",taskmanager:"taskmgr",settings:"ms-settings:",paint:"mspaint",snip:"snippingtool",vscode:"code",cursor:"cursor",postman:"Postman"};async function S1($,Z){let Y=$.toLowerCase().replace(/\s+/g,""),J=m2[Y];if(!J){let X=Object.keys(m2).join(", ");return`Unknown app: "${$}". Available: ${X}`}if(Z){let X=c2(Z,"argument");if(X)return X}if(!A)return"Error: this command is only available on Windows.";let Q=Z?`Start-Process '${J}' -ArgumentList '${Z}'`:`Start-Process '${J}'`;try{let{exitCode:X,stderr:K}=await I1(Q);if(X!==0&&K.trim())return`Error opening ${$}: ${K.trim()}`;return`Opened: ${$}`}catch(X){return`Error opening ${$}: ${X instanceof Error?X.message:String(X)}`}}async function b1($){if(!$.startsWith("http://")&&!$.startsWith("https://"))return"Error: URL must start with http:// or https://";let Z=c2($,"URL");if(Z)return Z;if(!A)return"Error: this command is only available on Windows.";try{let{exitCode:Y,stderr:J}=await I1(`Start-Process '${$}'`);if(Y!==0&&J.trim())return`Error: ${J.trim()}`;return`Opened in browser: ${$}`}catch(Y){return`Error: ${Y instanceof Error?Y.message:String(Y)}`}}async function m8($){let Z=c2($,"file path");if(Z)return Z;if(!A)return"Error: this command is only available on Windows.";try{let{exitCode:Y,stderr:J}=await I1(`Invoke-Item '${$}'`);if(Y!==0&&J.trim())return`Error: ${J.trim()}`;return`Opened: ${$}`}catch(Y){return`Error: ${Y instanceof Error?Y.message:String(Y)}`}}async function c8(){if(!A)return"Error: this command is only available on Windows.";try{let{stdout:Z,stderr:Y}=await I1("Get-Process | Where-Object {$_.MainWindowTitle -ne ''} | Sort-Object -Property WorkingSet64 -Descending | Select-Object -First 15 Name, @{N='Memory(MB)';E={[math]::Round($_.WorkingSet64/1MB,1)}}, MainWindowTitle | Format-Table -AutoSize | Out-String -Width 200");if(Y.trim())return`Error: ${Y.trim()}`;return Z.trim()||"No windowed applications running."}catch($){return`Error: ${$ instanceof Error?$.message:String($)}`}}async function k1(){if(!A)return"Error: this command is only available on Windows.";let $=['$cpu = (Get-CimInstance Win32_Processor | Measure-Object -Property LoadPercentage -Average).Average; "CPU: $cpu%"','$os = Get-CimInstance Win32_OperatingSystem; $total = [math]::Round($os.TotalVisibleMemorySize/1MB,1); $free = [math]::Round($os.FreePhysicalMemory/1MB,1); $used = $total - $free; "RAM: $used GB / $total GB (Free: $free GB)"','Get-CimInstance Win32_LogicalDisk -Filter "DriveType=3" | ForEach-Object { $free = [math]::Round($_.FreeSpace/1GB,1); $total = [math]::Round($_.Size/1GB,1); "$($_.DeviceID) $free GB free / $total GB" }','$uptime = (Get-Date) - (Get-CimInstance Win32_OperatingSystem).LastBootUpTime; "Uptime: $($uptime.Days)d $($uptime.Hours)h $($uptime.Minutes)m"','$b = Get-CimInstance Win32_Battery -ErrorAction SilentlyContinue; if ($b) { "Battery: $($b.EstimatedChargeRemaining)%" } else { "Battery: N/A (desktop)" }'];try{let{stdout:Z,stderr:Y}=await I1($.join("; "));if(!Z.trim()&&Y.trim())return`Error: ${Y.trim()}`;return Z.trim()||"System info unavailable."}catch(Z){return`Error: ${Z instanceof Error?Z.message:String(Z)}`}}async function y1(){let $=new Date,Z=[],Y=$.toLocaleDateString("pt-BR",{weekday:"long"}),J=$.toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit",year:"numeric"}),Q=$.toLocaleTimeString("pt-BR",{hour:"2-digit",minute:"2-digit"});Z.push(`${Y}, ${J} \u2014 ${Q}`);let X=new Date($.valueOf());X.setDate(X.getDate()+3-(X.getDay()+6)%7);let K=new Date(X.getFullYear(),0,4),V=1+Math.round(((X.getTime()-K.getTime())/86400000-3+(K.getDay()+6)%7)/7);Z.push(`Semana ${V} do ano`);let G=$.getHours();if(G>=8&&G<18)Z.push("Status: horario comercial");else if(G>=18&&G<22)Z.push("Status: pos-expediente");else Z.push("Status: fora do horario comercial");return Z.join(`
90
- `)}async function i$(){if(!A)return"Outlook integration only available on Windows.";let $=["try {"," $outlook = New-Object -ComObject Outlook.Application -ErrorAction Stop",' $ns = $outlook.GetNamespace("MAPI")'," $cal = $ns.GetDefaultFolder(9)"," $today = (Get-Date).Date"," $tomorrow = $today.AddDays(1)"," $items = $cal.Items",' $items.Sort("[Start]")'," $items.IncludeRecurrences = $true",` $filter = "[Start] >= '$($today.ToString('g'))' AND [Start] < '$($tomorrow.ToString('g'))'"`," $events = $items.Restrict($filter)"," $results = @()"," foreach ($e in $events) {",' $start = ([DateTime]$e.Start).ToString("HH:mm")',' $end = ([DateTime]$e.End).ToString("HH:mm")',' $results += "$start-$end $($e.Subject)"'," }",' if ($results.Count -eq 0) { "Nenhum evento hoje." }'," else { $results -join [char]10 }","} catch {",' "Outlook nao disponivel ou sem eventos."',"}"].join(`
91
- `);try{let{stdout:Z}=await I1($);return Z.trim()||"Outlook nao disponivel."}catch{return"Outlook nao disponivel."}}function q9(){return Object.keys(m2)}t();import{existsSync as CY,readFileSync as MY}from"fs";import{join as OY}from"path";var _1=[{name:"InfoMoney",url:"https://www.infomoney.com.br/feed/",category:"finance",builtin:!0},{name:"Valor Economico",url:"https://pox.globo.com/rss/valor/",category:"business",builtin:!0},{name:"Bloomberg Linea BR",url:"https://www.bloomberglinea.com.br/feed/",category:"finance",builtin:!0},{name:"TechCrunch",url:"https://techcrunch.com/feed/",category:"tech",builtin:!0},{name:"Hacker News (best)",url:"https://hnrss.org/best",category:"tech",builtin:!0},{name:"The Verge",url:"https://www.theverge.com/rss/index.xml",category:"tech",builtin:!0},{name:"G1",url:"https://g1.globo.com/rss/g1/",category:"brazil",builtin:!0},{name:"Folha",url:"https://feeds.folha.uol.com.br/folha/cotidiano/rss091.xml",category:"brazil",builtin:!0},{name:"BBC World",url:"https://feeds.bbci.co.uk/news/world/rss.xml",category:"world",builtin:!0},{name:"Reuters",url:"https://www.reutersagency.com/feed/",category:"world",builtin:!0},{name:"The Hacker News",url:"https://feeds.feedburner.com/TheHackersNews",category:"security",builtin:!0},{name:"BleepingComputer",url:"https://www.bleepingcomputer.com/feed/",category:"security",builtin:!0},{name:"Krebs on Security",url:"https://krebsonsecurity.com/feed/",category:"security",builtin:!0}],d8="",Y$=[],H$=new Set,N9=()=>OY(d8,"news-feeds.json");function u8(){if(!d8)return;let $={custom:Y$,disabled:[...H$]};P(N9(),JSON.stringify($,null,2))}function EY(){if(!d8)return;let $=N9();if(!CY($)){Y$=[],H$=new Set;return}try{let Z=JSON.parse(MY($,"utf-8"));Y$=Z.custom||[],H$=new Set(Z.disabled||[])}catch{Y$=[],H$=new Set}}function C9($){d8=$,EY()}function u2(){return[..._1.filter((Z)=>!H$.has(Z.url)),...Y$]}function p8($,Z,Y){let J=$.trim();if(!J||J.length>100)return"Error: nome invalido (1-100 caracteres).";let Q=Y.trim().toLowerCase();if(!Q||Q.length>30)return"Error: categoria invalida (1-30 caracteres).";let X=Z.trim();if(!X.startsWith("http://")&&!X.startsWith("https://"))return"Error: URL deve comecar com http:// ou https://";if(X.length>500)return"Error: URL muito longa (max 500 caracteres).";if([..._1,...Y$].some((G)=>G.url===X))return"Error: essa URL ja esta cadastrada.";let V={name:J,url:X,category:Q};return Y$=[...Y$,V],u8(),V}function l8($){let Z=$.toLowerCase().trim(),Y=Y$.findIndex((J)=>J.name.toLowerCase()===Z||J.url===$.trim());if(Y===-1)return!1;return Y$=[...Y$.slice(0,Y),...Y$.slice(Y+1)],u8(),!0}function n8($){let Z=$.toLowerCase().trim(),Y=_1.find((J)=>J.name.toLowerCase()===Z||J.url===$.trim());if(!Y)return!1;if(H$.has(Y.url))return!1;return H$=new Set([...H$,Y.url]),u8(),!0}function i8($){let Z=$.toLowerCase().trim(),Y=_1.find((J)=>J.name.toLowerCase()===Z||J.url===$.trim());if(!Y)return!1;if(!H$.has(Y.url))return!1;return H$=new Set([...H$].filter((J)=>J!==Y.url)),u8(),!0}function o8(){let $=["Fontes de noticias:"];$.push(`
92
- --- Built-in ---`);for(let Z of _1){let Y=H$.has(Z.url)?" [DESATIVADO]":"";$.push(` (${Z.category}) ${Z.name}${Y} \u2014 ${Z.url}`)}if(Y$.length>0){$.push(`
93
- --- Custom ---`);for(let Z of Y$)$.push(` (${Z.category}) ${Z.name} \u2014 ${Z.url}`)}return $.push(`
94
- Total: ${u2().length} ativas (${_1.length} built-in, ${Y$.length} custom, ${H$.size} desativadas)`),$.join(`
95
- `)}var U9=2097152,d2=10,jY=1e4;function FY($,Z,Y){let J=[],Q=/<item[\s>]([\s\S]*?)<\/item>/gi,X;while((X=Q.exec($))!==null){let K=X[1],V=B9(K,Z,Y);if(V)J.push(V);if(J.length>=d2)break}if(J.length===0){let K=/<entry[\s>]([\s\S]*?)<\/entry>/gi;while((X=K.exec($))!==null){let V=X[1],G=B9(V,Z,Y);if(G)J.push(G);if(J.length>=d2)break}}return J}function B9($,Z,Y){let J=m4($,"title");if(!J)return null;let Q=m4($,"link")||AY($),X=LY(Q),K=m4($,"pubDate")||m4($,"published")||m4($,"updated"),V;if(K){let G=new Date(K);V=isNaN(G.getTime())?void 0:G}return{title:xY(J),link:X,source:Z,category:Y,pubDate:V}}function LY($){if(!$)return"";let Z=$.trim();if(Z.startsWith("https://")||Z.startsWith("http://"))return Z;return""}function RY($){return $.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function m4($,Z){let Y=RY(Z),Q=new RegExp(`<${Y}[^>]*>\\s*<!\\[CDATA\\[([\\s\\S]*?)\\]\\]>\\s*</${Y}>`,"i").exec($);if(Q)return Q[1].trim();let K=new RegExp(`<${Y}[^>]*>([\\s\\S]*?)</${Y}>`,"i").exec($);return K?K[1].trim():null}function AY($){let Y=/<link[^>]+href="([^"]+)"[^>]*\/?>/i.exec($);return Y?Y[1]:null}function xY($){return $.replace(/<[^>]+>/g,"").replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#39;/g,"'").replace(/&nbsp;/g," ").replace(/&#(\d+);/g,(Z,Y)=>String.fromCharCode(Number(Y))).replace(/&#x([0-9a-fA-F]+);/g,(Z,Y)=>String.fromCharCode(parseInt(Y,16))).trim()}async function o$($,Z=5){let Y=Math.max(1,Math.min(Z,d2));if($&&$.length===0)return wY();let J=u2(),Q=$?J.filter((G)=>$.includes(G.category)):J,X=await Promise.allSettled(Q.map((G)=>TY(G,Y))),K=[],V=[];for(let G=0;G<X.length;G++){let H=X[G];if(H.status==="fulfilled")K.push(...H.value);else V.push(`${Q[G].name}: ${DY(H.reason)}`)}if(K.length===0)return V.length>0?`Nenhuma noticia encontrada.
96
- Falhas: ${V.join(", ")}`:"Nenhuma noticia encontrada.";return K.sort((G,H)=>{let z=G.pubDate?.getTime()||0;return(H.pubDate?.getTime()||0)-z}),PY(K,V)}function DY($){if($ instanceof Error){if($.name==="AbortError")return"timeout";return $.message.slice(0,80)}return"unreachable"}async function TY($,Z){let Y=new AbortController,J=setTimeout(()=>Y.abort(),jY);try{let Q=await fetch($.url,{signal:Y.signal,headers:{"User-Agent":"smolerclaw/1.0 (news-radar)",Accept:"application/rss+xml, application/atom+xml, application/xml, text/xml"}});if(clearTimeout(J),!Q.ok)return[];let X=Q.headers.get("content-length");if(X&&Number(X)>U9)return[];let K=Q.body?.getReader();if(!K)return[];let V=[],G=0;while(!0){let{done:M,value:N}=await K.read();if(M)break;if(G+=N.byteLength,G>U9)return K.cancel(),[];V.push(N)}let H=new TextDecoder().decode(Buffer.concat(V));return FY(H,$.name,$.category).slice(0,Z)}catch(Q){throw clearTimeout(J),Q}}function PY($,Z){let Y={business:"Negocios",tech:"Tecnologia",finance:"Financas",brazil:"Brasil",world:"Mundo",security:"Ciberseguranca"},J=new Map;for(let V of $){let G=J.get(V.category)||[];J.set(V.category,[...G,V])}let Q=[],X=["finance","business","tech","security","brazil","world"];for(let V of X){let G=J.get(V);if(!G||G.length===0)continue;let H=Y[V],z=G.slice(0,8).map((M)=>{let N=M.pubDate?M.pubDate.toLocaleTimeString("pt-BR",{hour:"2-digit",minute:"2-digit",timeZone:"America/Sao_Paulo"}):"";return` ${N?`[${N}]`:""} ${M.title} (${M.source})`});Q.push(`--- ${H} ---
94
+ `)}function h2($){let Z=y5($,"plugins");if(!b2(Z))rQ(Z,{recursive:!0});return Z}b4();a();import{existsSync as sQ,readFileSync as tQ}from"fs";import{join as eQ}from"path";var Q8=[{name:"InfoMoney",url:"https://www.infomoney.com.br/feed/",category:"finance",builtin:!0},{name:"Valor Economico",url:"https://pox.globo.com/rss/valor/",category:"business",builtin:!0},{name:"Bloomberg Linea BR",url:"https://www.bloomberglinea.com.br/feed/",category:"finance",builtin:!0},{name:"TechCrunch",url:"https://techcrunch.com/feed/",category:"tech",builtin:!0},{name:"Hacker News (best)",url:"https://hnrss.org/best",category:"tech",builtin:!0},{name:"The Verge",url:"https://www.theverge.com/rss/index.xml",category:"tech",builtin:!0},{name:"G1",url:"https://g1.globo.com/rss/g1/",category:"brazil",builtin:!0},{name:"Folha",url:"https://feeds.folha.uol.com.br/folha/cotidiano/rss091.xml",category:"brazil",builtin:!0},{name:"BBC World",url:"https://feeds.bbci.co.uk/news/world/rss.xml",category:"world",builtin:!0},{name:"Reuters",url:"https://www.reutersagency.com/feed/",category:"world",builtin:!0},{name:"The Hacker News",url:"https://feeds.feedburner.com/TheHackersNews",category:"security",builtin:!0},{name:"BleepingComputer",url:"https://www.bleepingcomputer.com/feed/",category:"security",builtin:!0},{name:"Krebs on Security",url:"https://krebsonsecurity.com/feed/",category:"security",builtin:!0}],I1="",G$=[],j$=new Set,u2=()=>eQ(I1,"news-feeds.json");function A1(){if(!I1)return;let $={custom:G$,disabled:[...j$]};S(u2(),JSON.stringify($,null,2))}function $X(){if(!I1)return;let $=u2();if(!sQ($)){G$=[],j$=new Set;return}try{let Z=JSON.parse(tQ($,"utf-8"));G$=Z.custom||[],j$=new Set(Z.disabled||[])}catch{G$=[],j$=new Set}}function d2($){I1=$,$X()}function g5(){return[...Q8.filter((Z)=>!j$.has(Z.url)),...G$]}function x1($,Z,J){let Y=$.trim();if(!Y||Y.length>100)return"Error: nome invalido (1-100 caracteres).";let Q=J.trim().toLowerCase();if(!Q||Q.length>30)return"Error: categoria invalida (1-30 caracteres).";let X=Z.trim();if(!X.startsWith("http://")&&!X.startsWith("https://"))return"Error: URL deve comecar com http:// ou https://";if(X.length>500)return"Error: URL muito longa (max 500 caracteres).";if([...Q8,...G$].some((G)=>G.url===X))return"Error: essa URL ja esta cadastrada.";let V={name:Y,url:X,category:Q};return G$=[...G$,V],A1(),V}function S1($){let Z=$.toLowerCase().trim(),J=G$.findIndex((Y)=>Y.name.toLowerCase()===Z||Y.url===$.trim());if(J===-1)return!1;return G$=[...G$.slice(0,J),...G$.slice(J+1)],A1(),!0}function w1($){let Z=$.toLowerCase().trim(),J=Q8.find((Y)=>Y.name.toLowerCase()===Z||Y.url===$.trim());if(!J)return!1;if(j$.has(J.url))return!1;return j$=new Set([...j$,J.url]),A1(),!0}function k1($){let Z=$.toLowerCase().trim(),J=Q8.find((Y)=>Y.name.toLowerCase()===Z||Y.url===$.trim());if(!J)return!1;if(!j$.has(J.url))return!1;return j$=new Set([...j$].filter((Y)=>Y!==J.url)),A1(),!0}function b1(){let $=["Fontes de noticias:"];$.push(`
95
+ --- Built-in ---`);for(let Z of Q8){let J=j$.has(Z.url)?" [DESATIVADO]":"";$.push(` (${Z.category}) ${Z.name}${J} \u2014 ${Z.url}`)}if(G$.length>0){$.push(`
96
+ --- Custom ---`);for(let Z of G$)$.push(` (${Z.category}) ${Z.name} \u2014 ${Z.url}`)}return $.push(`
97
+ Total: ${g5().length} ativas (${Q8.length} built-in, ${G$.length} custom, ${j$.size} desativadas)`),$.join(`
98
+ `)}var m2=2097152,h5=10,ZX=1e4;function JX($,Z,J){let Y=[],Q=/<item[\s>]([\s\S]*?)<\/item>/gi,X;while((X=Q.exec($))!==null){let K=X[1],V=p2(K,Z,J);if(V)Y.push(V);if(Y.length>=h5)break}if(Y.length===0){let K=/<entry[\s>]([\s\S]*?)<\/entry>/gi;while((X=K.exec($))!==null){let V=X[1],G=p2(V,Z,J);if(G)Y.push(G);if(Y.length>=h5)break}}return Y}function p2($,Z,J){let Y=M0($,"title");if(!Y)return null;let Q=M0($,"link")||zX($),X=YX(Q),K=M0($,"pubDate")||M0($,"published")||M0($,"updated"),V;if(K){let G=new Date(K);V=isNaN(G.getTime())?void 0:G}return{title:GX(Y),link:X,source:Z,category:J,pubDate:V}}function YX($){if(!$)return"";let Z=$.trim();if(Z.startsWith("https://")||Z.startsWith("http://"))return Z;return""}function QX($){return $.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function M0($,Z){let J=QX(Z),Q=new RegExp(`<${J}[^>]*>\\s*<!\\[CDATA\\[([\\s\\S]*?)\\]\\]>\\s*</${J}>`,"i").exec($);if(Q)return Q[1].trim();let K=new RegExp(`<${J}[^>]*>([\\s\\S]*?)</${J}>`,"i").exec($);return K?K[1].trim():null}function XX($,Z){let J=KX($,Z);try{return new TextDecoder(J).decode($)}catch{try{return new TextDecoder("latin1").decode($)}catch{return new TextDecoder("utf-8",{fatal:!1}).decode($)}}}function KX($,Z){if(Z){let Q=Z.match(/charset\s*=\s*["']?([^\s;"']+)/i);if(Q)return c2(Q[1])}let Y=$.subarray(0,200).toString("ascii").match(/<\?xml[^?]+encoding\s*=\s*["']([^"']+)["']/i);if(Y)return c2(Y[1]);return"utf-8"}function c2($){let Z=$.toLowerCase().replace(/[^a-z0-9]/g,"");if(Z==="iso88591"||Z==="latin1")return"iso-8859-1";if(Z==="windows1252"||Z==="cp1252")return"windows-1252";if(Z==="utf8")return"utf-8";if(Z==="usascii"||Z==="ascii")return"utf-8";return $.trim().toLowerCase()}function zX($){let J=/<link[^>]+href="([^"]+)"[^>]*\/?>/i.exec($);return J?J[1]:null}var VX={amp:"&",lt:"<",gt:">",quot:'"',apos:"'",nbsp:" ",aacute:"\xE1",Aacute:"\xC1",agrave:"\xE0",Agrave:"\xC0",atilde:"\xE3",Atilde:"\xC3",acirc:"\xE2",Acirc:"\xC2",eacute:"\xE9",Eacute:"\xC9",egrave:"\xE8",Egrave:"\xC8",ecirc:"\xEA",Ecirc:"\xCA",iacute:"\xED",Iacute:"\xCD",oacute:"\xF3",Oacute:"\xD3",otilde:"\xF5",Otilde:"\xD5",ocirc:"\xF4",Ocirc:"\xD4",uacute:"\xFA",Uacute:"\xDA",uuml:"\xFC",Uuml:"\xDC",ccedil:"\xE7",Ccedil:"\xC7",ntilde:"\xF1",Ntilde:"\xD1",rsquo:"\u2019",lsquo:"\u2018",rdquo:"\u201D",ldquo:"\u201C",mdash:"\u2014",ndash:"\u2013",hellip:"\u2026",bull:"\u2022",laquo:"\xAB",raquo:"\xBB",trade:"\u2122",copy:"\xA9",reg:"\xAE",euro:"\u20AC",pound:"\xA3",yen:"\xA5",cent:"\xA2",deg:"\xB0",middot:"\xB7",times:"\xD7",divide:"\xF7"};function GX($){return $.replace(/<[^>]+>/g,"").replace(/&([a-zA-Z]+);/g,(Z,J)=>VX[J]??Z).replace(/&#(\d+);/g,(Z,J)=>String.fromCharCode(Number(J))).replace(/&#x([0-9a-fA-F]+);/g,(Z,J)=>String.fromCharCode(parseInt(J,16))).trim()}async function m5($,Z=5){let J=Math.max(1,Math.min(Z,h5));if($&&$.length===0)return{items:[],errors:[]};let Y=g5(),Q=$?Y.filter((G)=>$.includes(G.category)):Y,X=await Promise.allSettled(Q.map((G)=>qX(G,J))),K=[],V=[];for(let G=0;G<X.length;G++){let H=X[G];if(H.status==="fulfilled")K.push(...H.value);else V.push(`${Q[G].name}: ${HX(H.reason)}`)}return K.sort((G,H)=>{let z=G.pubDate?.getTime()||0;return(H.pubDate?.getTime()||0)-z}),{items:K,errors:V}}async function q4($,Z=5){if($&&$.length===0)return UX();let{items:J,errors:Y}=await m5($,Z);if(J.length===0)return Y.length>0?`Nenhuma noticia encontrada.
99
+ Falhas: ${Y.join(", ")}`:"Nenhuma noticia encontrada.";return WX(J,Y)}function HX($){if($ instanceof Error){if($.name==="AbortError")return"timeout";return $.message.slice(0,80)}return"unreachable"}async function qX($,Z){let J=new AbortController,Y=setTimeout(()=>J.abort(),ZX);try{let Q=await fetch($.url,{signal:J.signal,headers:{"User-Agent":"smolerclaw/1.0 (news-radar)",Accept:"application/rss+xml, application/atom+xml, application/xml, text/xml"}});if(clearTimeout(Y),!Q.ok)return[];let X=Q.headers.get("content-length");if(X&&Number(X)>m2)return[];let K=Q.body?.getReader();if(!K)return[];let V=[],G=0;while(!0){let{done:U,value:M}=await K.read();if(U)break;if(G+=M.byteLength,G>m2)return K.cancel(),[];V.push(M)}let H=Buffer.concat(V),z=XX(H,Q.headers.get("content-type"));return JX(z,$.name,$.category).slice(0,Z)}catch(Q){throw clearTimeout(Y),Q}}function WX($,Z){let J={business:"Negocios",tech:"Tecnologia",finance:"Financas",brazil:"Brasil",world:"Mundo",security:"Ciberseguranca"},Y=new Map;for(let V of $){let G=Y.get(V.category)||[];Y.set(V.category,[...G,V])}let Q=[],X=["finance","business","tech","security","brazil","world"];for(let V of X){let G=Y.get(V);if(!G||G.length===0)continue;let H=J[V],z=G.slice(0,8).map((B)=>{let U=B.pubDate?B.pubDate.toLocaleTimeString("pt-BR",{hour:"2-digit",minute:"2-digit",timeZone:"America/Sao_Paulo"}):"";return` ${U?`[${U}]`:""} ${B.title} (${B.source})`});Q.push(`--- ${H} ---
97
100
  ${z.join(`
98
101
  `)}`)}let K=Q.join(`
99
102
 
100
103
  `);if(Z.length>0)K+=`
101
104
 
102
- (Fontes indisponiveis: ${Z.join(", ")})`;return K}function wY(){let $=u2();return`Categorias: ${[...new Set($.map((Y)=>Y.category))].sort().join(", ")}
103
- Uso: /news [categoria]`}import{existsSync as M9,mkdirSync as IY,readFileSync as SY}from"fs";import{join as bY}from"path";import{randomUUID as kY}from"crypto";t();var O9="",d=[],h1=null,E9=null,j9=()=>bY(O9,"tasks.json");function a8(){P(j9(),JSON.stringify(d,null,2))}function yY(){let $=j9();if(!M9($)){d=[];return}try{d=JSON.parse(SY($,"utf-8"))}catch{d=[]}}function F9($,Z){if(O9=$,E9=Z,!M9($))IY($,{recursive:!0});if(yY(),h1)clearInterval(h1);h1=setInterval(_Y,30000),fY().catch(()=>{})}function L9(){if(h1)clearInterval(h1),h1=null}function r8($,Z){let Y={id:vY(),title:$.trim(),dueAt:Z?Z.toISOString():null,createdAt:new Date().toISOString(),done:!1,notified:!1};if(d=[...d,Y],a8(),Z&&A)p2(Y).catch(()=>{});return Y}function s8($){let Z=$.toLowerCase(),Y=d.find((J)=>J.id===$||J.title.toLowerCase().includes(Z));if(!Y||Y.done)return null;if(d=d.map((J)=>J.id===Y.id?{...J,done:!0}:J),a8(),Y.dueAt&&A)x9(Y.id).catch(()=>{});return d.find((J)=>J.id===Y.id)||null}function R9($){let Z=$.toLowerCase(),Y=d.findIndex((Q)=>Q.id===$||Q.title.toLowerCase().includes(Z));if(Y===-1)return!1;let J=d[Y];if(d=[...d.slice(0,Y),...d.slice(Y+1)],a8(),J.dueAt&&A)x9(J.id).catch(()=>{});return!0}function a$($=!1){return $?[...d]:d.filter((Z)=>!Z.done)}function q1($){if($.length===0)return"Nenhuma tarefa pendente.";let Z=$.map((Y)=>{let J=Y.done?"[x]":"[ ]",Q=Y.dueAt?` (${gY(Y.dueAt)})`:"";return` ${J} ${Y.title}${Q} [${Y.id}]`});return`Tarefas (${$.length}):
105
+ (Fontes indisponiveis: ${Z.join(", ")})`;return K}function UX(){let $=g5();return`Categorias: ${[...new Set($.map((J)=>J.category))].sort().join(", ")}
106
+ Uso: /news [categoria]`}e();a();Z4();import{existsSync as l2,mkdirSync as BX,readFileSync as NX}from"fs";import{join as MX}from"path";import{randomUUID as CX}from"crypto";var o2="",d=[],X8=null,a2=null,n2=()=>MX(o2,"tasks.json");function y1(){S(n2(),JSON.stringify(d,null,2))}function jX(){let $=n2();if(!l2($)){d=[];return}try{d=JSON.parse(NX($,"utf-8"))}catch{d=[]}}function r2($,Z){if(o2=$,a2=Z,!l2($))BX($,{recursive:!0});if(jX(),X8)clearInterval(X8);X8=setInterval(OX,30000),RX().catch(()=>{})}function i2(){if(X8)clearInterval(X8),X8=null}function _1($,Z){let J={id:LX(),title:$.trim(),dueAt:Z?Z.toISOString():null,createdAt:new Date().toISOString(),done:!1,notified:!1};if(d=[...d,J],y1(),Z&&I)p5(J).catch(()=>{});return J}function v1($){let Z=$.toLowerCase(),J=d.find((Y)=>Y.id===$||Y.title.toLowerCase().includes(Z));if(!J||J.done)return null;if(d=d.map((Y)=>Y.id===J.id?{...Y,done:!0}:Y),y1(),J.dueAt&&I)t2(J.id).catch(()=>{});return d.find((Y)=>Y.id===J.id)||null}function s2($){let Z=$.toLowerCase(),J=d.findIndex((Q)=>Q.id===$||Q.title.toLowerCase().includes(Z));if(J===-1)return!1;let Y=d[J];if(d=[...d.slice(0,J),...d.slice(J+1)],y1(),Y.dueAt&&I)t2(Y.id).catch(()=>{});return!0}function d$($=!1){return $?[...d]:d.filter((Z)=>!Z.done)}function y4($){if($.length===0)return"Nenhuma tarefa pendente.";let Z=$.map((J)=>{let Y=J.done?"[x]":"[ ]",Q=J.dueAt?` (${PX(J.dueAt)})`:"";return` ${Y} ${J.title}${Q} [${J.id}]`});return`Tarefas (${$.length}):
104
107
  ${Z.join(`
105
- `)}`}function c4($){let Z=new Date,Y=$.toLowerCase().trim(),J=Y.match(/em\s+(\d+)\s*(min|minutos?|h|horas?)/);if(J){let K=parseInt(J[1]),V=J[2].startsWith("h")?"hours":"minutes",G=new Date(Z);if(V==="hours")G.setHours(G.getHours()+K);else G.setMinutes(G.getMinutes()+K);return G}let Q=new Date(Z);if(Y.includes("amanha")||Y.includes("amanh\xE3"))Q.setDate(Q.getDate()+1);let X=Y.match(/(\d{1,2})\s*[h:]\s*(\d{2})?/);if(X){let K=parseInt(X[1]),V=parseInt(X[2]||"0");if(K>=0&&K<=23&&V>=0&&V<=59){if(Q.setHours(K,V,0,0),Q<=Z&&!Y.includes("amanha")&&!Y.includes("amanh\xE3"))Q.setDate(Q.getDate()+1);return Q}}return null}function _Y(){let $=new Date,Z=!1;for(let Y of d){if(Y.done||Y.notified||!Y.dueAt)continue;let J=new Date(Y.dueAt);if(isNaN(J.getTime()))continue;let Q=$.getTime()-J.getTime();if(Q>=0&&Q<300000)d=d.map((X)=>X.id===Y.id?{...X,notified:!0}:X),Z=!0,hY(Y),E9?.(Y)}if(Z)a8()}function A9($){return $.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}async function hY($){if(!A)return;let Y=["[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] | Out-Null","[Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom.XmlDocument, ContentType = WindowsRuntime] | Out-Null",`$template = '<toast><visual><binding template="ToastText02"><text id="1">smolerclaw - Lembrete</text><text id="2">${A9($.title)}</text></binding></visual><audio src="ms-winsoundevent:Notification.Default"/></toast>'`,"$xml = New-Object Windows.Data.Xml.Dom.XmlDocument","$xml.LoadXml($template)","$toast = [Windows.UI.Notifications.ToastNotification]::new($xml)","[Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier('smolerclaw').Show($toast)"].join("; ");try{let J=Bun.spawn(["powershell","-NoProfile","-NonInteractive","-Command",Y],{stdout:"pipe",stderr:"pipe"}),Q=setTimeout(()=>J.kill(),1e4);await Promise.all([new Response(J.stdout).text(),new Response(J.stderr).text()]),await J.exited,clearTimeout(Q)}catch{}}var l2="smolerclaw-reminder-";async function p2($){if(!$.dueAt)return;let Z=new Date($.dueAt);if(isNaN(Z.getTime())||Z.getTime()<=Date.now())return;let Y=`${l2}${$.id}`,J=[String(Z.getMonth()+1).padStart(2,"0"),String(Z.getDate()).padStart(2,"0"),String(Z.getFullYear())].join("/"),Q=[String(Z.getHours()).padStart(2,"0"),String(Z.getMinutes()).padStart(2,"0")].join(":"),K=["[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] | Out-Null;","[Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom.XmlDocument, ContentType = WindowsRuntime] | Out-Null;","$x = New-Object Windows.Data.Xml.Dom.XmlDocument;",`$x.LoadXml('<toast><visual><binding template=""ToastText02""><text id=""1"">smolerclaw</text><text id=""2"">${A9($.title).replace(/"/g,'""')}</text></binding></visual><audio src=""ms-winsoundevent:Notification.Reminder""/></toast>');`,"[Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier('smolerclaw').Show([Windows.UI.Notifications.ToastNotification]::new($x))"].join(" ");try{await Bun.spawn(["schtasks","/Create","/TN",Y,"/SC","ONCE","/SD",J,"/ST",Q,"/TR",`powershell -NoProfile -WindowStyle Hidden -Command "${K}"`,"/F"],{stdout:"pipe",stderr:"pipe"}).exited}catch{}}async function x9($){let Z=`${l2}${$}`;try{await Bun.spawn(["schtasks","/Delete","/TN",Z,"/F"],{stdout:"pipe",stderr:"pipe"}).exited}catch{}}async function fY(){if(!A)return;let $=Date.now();for(let Z of d){if(Z.done||Z.notified||!Z.dueAt)continue;let Y=new Date(Z.dueAt);if(isNaN(Y.getTime())||Y.getTime()<=$)continue;try{if(await Bun.spawn(["schtasks","/Query","/TN",`${l2}${Z.id}`],{stdout:"pipe",stderr:"pipe"}).exited!==0)await p2(Z)}catch{await p2(Z)}}}function vY(){return kY().slice(0,8)}function gY($){let Z=new Date($);if(isNaN(Z.getTime()))return"?";let Y=new Date,J=new Date(Y.getFullYear(),Y.getMonth(),Y.getDate()),Q=new Date(Z.getFullYear(),Z.getMonth(),Z.getDate()),X=Z.toLocaleTimeString("pt-BR",{hour:"2-digit",minute:"2-digit"});if(Q.getTime()===J.getTime())return`hoje ${X}`;let K=new Date(J);if(K.setDate(K.getDate()+1),Q.getTime()===K.getTime())return`amanha ${X}`;return`${Z.toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit"})} ${X}`}t();import{existsSync as D9,mkdirSync as mY,readFileSync as cY}from"fs";import{join as dY}from"path";import{randomUUID as uY}from"crypto";var T9="",J$=[],P9=()=>dY(T9,"memos.json");function w9(){P(P9(),JSON.stringify(J$,null,2))}function pY(){let $=P9();if(!D9($)){J$=[];return}try{J$=JSON.parse(cY($,"utf-8"))}catch{J$=[]}}function I9($){if(T9=$,!D9($))mY($,{recursive:!0});pY()}function t8($,Z=[]){let Y=new Date().toISOString(),J=$.match(/#(\w+)/g)?.map((K)=>K.slice(1).toLowerCase())||[],Q=[...new Set([...Z.map((K)=>K.toLowerCase()),...J])],X={id:nY(),content:$.trim(),tags:Q,createdAt:Y,updatedAt:Y};return J$=[...J$,X],w9(),X}function S9($){let Z=J$.findIndex((Y)=>Y.id===$);if(Z===-1)return!1;return J$=[...J$.slice(0,Z),...J$.slice(Z+1)],w9(),!0}function e8($){let Z=$.toLowerCase().trim();if(!Z)return[...J$];let Y=Z.startsWith("#"),J=Y?Z.slice(1):Z;return J$.filter((Q)=>{if(Y)return Q.tags.some((X)=>X.includes(J));return Q.content.toLowerCase().includes(J)||Q.tags.some((X)=>X.includes(J))}).sort((Q,X)=>new Date(X.updatedAt).getTime()-new Date(Q.updatedAt).getTime())}function d4($=20){return[...J$].reverse().sort((Z,Y)=>new Date(Y.updatedAt).getTime()-new Date(Z.updatedAt).getTime()).slice(0,$)}function lY(){let $=new Map;for(let Z of J$)for(let Y of Z.tags)$.set(Y,($.get(Y)||0)+1);return[...$.entries()].map(([Z,Y])=>({tag:Z,count:Y})).sort((Z,Y)=>Y.count-Z.count)}function U1($){if($.length===0)return"Nenhum memo encontrado.";let Z=$.map((Y)=>{let J=new Date(Y.updatedAt).toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit"}),Q=Y.tags.length>0?` [${Y.tags.map((K)=>`#${K}`).join(" ")}]`:"",X=Y.content.length>80?Y.content.slice(0,80).replace(/\n/g," ")+"...":Y.content.replace(/\n/g," ");return` [${J}] ${X}${Q} {${Y.id}}`});return`Memos (${$.length}):
108
+ `)}`}function C0($){let Z=new Date,J=$.toLowerCase().trim(),Y=J.match(/em\s+(\d+)\s*(min|minutos?|h|horas?)/);if(Y){let K=parseInt(Y[1]),V=Y[2].startsWith("h")?"hours":"minutes",G=new Date(Z);if(V==="hours")G.setHours(G.getHours()+K);else G.setMinutes(G.getMinutes()+K);return G}let Q=new Date(Z);if(J.includes("amanha")||J.includes("amanh\xE3"))Q.setDate(Q.getDate()+1);let X=J.match(/(\d{1,2})\s*[h:]\s*(\d{2})?/);if(X){let K=parseInt(X[1]),V=parseInt(X[2]||"0");if(K>=0&&K<=23&&V>=0&&V<=59){if(Q.setHours(K,V,0,0),Q<=Z&&!J.includes("amanha")&&!J.includes("amanh\xE3"))Q.setDate(Q.getDate()+1);return Q}}return null}function OX(){let $=new Date,Z=!1;for(let J of d){if(J.done||J.notified||!J.dueAt)continue;let Y=new Date(J.dueAt);if(isNaN(Y.getTime()))continue;let Q=$.getTime()-Y.getTime();if(Q>=0&&Q<300000)d=d.map((X)=>X.id===J.id?{...X,notified:!0}:X),Z=!0,EX(J),a2?.(J)}if(Z)y1()}function FX($){return $.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}async function EX($){if(!I)return;try{await $4("smolerclaw - Lembrete",$.title,{timeout:1e4})}catch{}}var c5="smolerclaw-reminder-";async function p5($){if(!$.dueAt)return;let Z=new Date($.dueAt);if(isNaN(Z.getTime())||Z.getTime()<=Date.now())return;let J=`${c5}${$.id}`,Y=[String(Z.getMonth()+1).padStart(2,"0"),String(Z.getDate()).padStart(2,"0"),String(Z.getFullYear())].join("/"),Q=[String(Z.getHours()).padStart(2,"0"),String(Z.getMinutes()).padStart(2,"0")].join(":"),K=["[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] | Out-Null;","[Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom.XmlDocument, ContentType = WindowsRuntime] | Out-Null;","$x = New-Object Windows.Data.Xml.Dom.XmlDocument;",`$x.LoadXml('<toast><visual><binding template=""ToastText02""><text id=""1"">smolerclaw</text><text id=""2"">${OZ(FX($.title))}</text></binding></visual><audio src=""ms-winsoundevent:Notification.Reminder""/></toast>');`,"[Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier('smolerclaw').Show([Windows.UI.Notifications.ToastNotification]::new($x))"].join(" ");try{await m0("Create",J,["/SC","ONCE","/SD",Y,"/ST",Q,"/TR",`powershell -NoProfile -WindowStyle Hidden -Command "${K}"`,"/F"])}catch{}}async function t2($){let Z=`${c5}${$}`;try{await m0("Delete",Z,["/F"])}catch{}}async function RX(){if(!I)return;let $=Date.now();for(let Z of d){if(Z.done||Z.notified||!Z.dueAt)continue;let J=new Date(Z.dueAt);if(isNaN(J.getTime())||J.getTime()<=$)continue;try{if((await m0("Query",`${c5}${Z.id}`)).exitCode!==0)await p5(Z)}catch{await p5(Z)}}}function LX(){return CX().slice(0,8)}function PX($){let Z=new Date($);if(isNaN(Z.getTime()))return"?";let J=new Date,Y=new Date(J.getFullYear(),J.getMonth(),J.getDate()),Q=new Date(Z.getFullYear(),Z.getMonth(),Z.getDate()),X=Z.toLocaleTimeString("pt-BR",{hour:"2-digit",minute:"2-digit"});if(Q.getTime()===Y.getTime())return`hoje ${X}`;let K=new Date(Y);if(K.setDate(K.getDate()+1),Q.getTime()===K.getTime())return`amanha ${X}`;return`${Z.toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit"})} ${X}`}a();import{existsSync as e2,mkdirSync as DX,readFileSync as TX}from"fs";import{join as IX}from"path";import{randomUUID as AX}from"crypto";var $6="",H$=[],Z6=()=>IX($6,"memos.json");function J6(){S(Z6(),JSON.stringify(H$,null,2))}function xX(){let $=Z6();if(!e2($)){H$=[];return}try{H$=JSON.parse(TX($,"utf-8"))}catch{H$=[]}}function Y6($){if($6=$,!e2($))DX($,{recursive:!0});xX()}function f1($,Z=[]){let J=new Date().toISOString(),Y=$.match(/#(\w+)/g)?.map((K)=>K.slice(1).toLowerCase())||[],Q=[...new Set([...Z.map((K)=>K.toLowerCase()),...Y])],X={id:wX(),content:$.trim(),tags:Q,createdAt:J,updatedAt:J};return H$=[...H$,X],J6(),X}function Q6($){let Z=H$.findIndex((J)=>J.id===$);if(Z===-1)return!1;return H$=[...H$.slice(0,Z),...H$.slice(Z+1)],J6(),!0}function h1($){let Z=$.toLowerCase().trim();if(!Z)return[...H$];let J=Z.startsWith("#"),Y=J?Z.slice(1):Z;return H$.filter((Q)=>{if(J)return Q.tags.some((X)=>X.includes(Y));return Q.content.toLowerCase().includes(Y)||Q.tags.some((X)=>X.includes(Y))}).sort((Q,X)=>new Date(X.updatedAt).getTime()-new Date(Q.updatedAt).getTime())}function j0($=20){return[...H$].reverse().sort((Z,J)=>new Date(J.updatedAt).getTime()-new Date(Z.updatedAt).getTime()).slice(0,$)}function SX(){let $=new Map;for(let Z of H$)for(let J of Z.tags)$.set(J,($.get(J)||0)+1);return[...$.entries()].map(([Z,J])=>({tag:Z,count:J})).sort((Z,J)=>J.count-Z.count)}function _4($){if($.length===0)return"Nenhum memo encontrado.";let Z=$.map((J)=>{let Y=new Date(J.updatedAt).toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit"}),Q=J.tags.length>0?` [${J.tags.map((K)=>`#${K}`).join(" ")}]`:"",X=J.content.length>80?J.content.slice(0,80).replace(/\n/g," ")+"...":J.content.replace(/\n/g," ");return` [${Y}] ${X}${Q} {${J.id}}`});return`Memos (${$.length}):
106
109
  ${Z.join(`
107
- `)}`}function b9(){let $=lY();if($.length===0)return"Nenhuma tag.";return`Tags:
108
- ${$.map((Y)=>` #${Y.tag} (${Y.count})`).join(`
109
- `)}`}function nY(){return uY().slice(0,8)}async function $0($){if(A)return iY($);return n2($)}async function iY($){let Z=$.to.replace(/'/g,"''"),Y=$.subject.replace(/'/g,"''"),J=$.body.replace(/'/g,"''").replace(/\n/g,"`n"),Q=$.cc?.replace(/'/g,"''")||"",X=["try {"," $outlook = New-Object -ComObject Outlook.Application -ErrorAction Stop"," $mail = $outlook.CreateItem(0)",` $mail.To = '${Z}'`,` $mail.Subject = '${Y}'`,` $mail.Body = '${J}'`,Q?` $mail.CC = '${Q}'`:""," $mail.Display()",' "Email aberto no Outlook."',"} catch {",' "Outlook nao disponivel. Usando mailto..."',"}"].filter(Boolean).join(`
110
- `);try{let K=Bun.spawn(["powershell","-NoProfile","-NonInteractive","-Command",X],{stdout:"pipe",stderr:"pipe"}),V=setTimeout(()=>K.kill(),15000),[G]=await Promise.all([new Response(K.stdout).text(),new Response(K.stderr).text()]);await K.exited,clearTimeout(V);let H=G.trim();if(H.includes("mailto"))return n2($);return H||"Email aberto no Outlook."}catch{return n2($)}}async function n2($){let Z=[];if($.subject)Z.push(`subject=${encodeURIComponent($.subject)}`);if($.body)Z.push(`body=${encodeURIComponent($.body)}`);if($.cc)Z.push(`cc=${encodeURIComponent($.cc)}`);let Y=`mailto:${encodeURIComponent($.to)}${Z.length?"?"+Z.join("&"):""}`;try{let J=A?["powershell","-NoProfile","-NonInteractive","-Command",`Start-Process '${Y}'`]:["xdg-open",Y],Q=Bun.spawn(J,{stdout:"pipe",stderr:"pipe"}),X=setTimeout(()=>Q.kill(),1e4);return await Promise.all([new Response(Q.stdout).text(),new Response(Q.stderr).text()]),await Q.exited,clearTimeout(X),"Email aberto no cliente de email padrao."}catch(J){return`Error: ${J instanceof Error?J.message:String(J)}`}}function Z0($){let Z=["--- Rascunho de Email ---",`Para: ${$.to}`];if($.cc)Z.push(`CC: ${$.cc}`);return Z.push(`Assunto: ${$.subject}`),Z.push(""),Z.push($.body),Z.push("------------------------"),Z.join(`
111
- `)}t();import{existsSync as y9,mkdirSync as oY,readFileSync as aY}from"fs";import{join as rY}from"path";import{randomUUID as sY}from"crypto";var _9="",r$=[],h9=()=>rY(_9,"finance.json");function tY(){P(h9(),JSON.stringify(r$,null,2))}function eY(){let $=h9();if(!y9($)){r$=[];return}try{r$=JSON.parse(aY($,"utf-8"))}catch{r$=[]}}function f9($){if(_9=$,!y9($))oY($,{recursive:!0});eY()}function u4($,Z,Y,J){let Q={id:$J(),type:$,amount:Math.abs(Z),category:Y.toLowerCase().trim(),description:J.trim(),date:new Date().toISOString()};return r$=[...r$,Q],tY(),Q}function Y0($,Z){let Y=new Date,J=$||Y.getFullYear(),Q=Z!==void 0?Z:Y.getMonth(),X=r$.filter((M)=>{let N=new Date(M.date);return N.getFullYear()===J&&N.getMonth()===Q});if(X.length===0)return`Nenhuma transacao em ${k9(Q)}/${J}.`;let K=X.filter((M)=>M.type==="entrada").reduce((M,N)=>M+N.amount,0),V=X.filter((M)=>M.type==="saida").reduce((M,N)=>M+N.amount,0),G=K-V,H=new Map;for(let M of X.filter((N)=>N.type==="saida"))H.set(M.category,(H.get(M.category)||0)+M.amount);let z=[`--- Resumo ${k9(Q)}/${J} ---`,`Entradas: R$ ${K.toFixed(2)}`,`Saidas: R$ ${V.toFixed(2)}`,`Saldo: R$ ${G.toFixed(2)} ${G>=0?"":"(NEGATIVO)"}`];if(H.size>0){z.push(""),z.push("Saidas por categoria:");let M=[...H.entries()].sort((N,E)=>E[1]-N[1]);for(let[N,E]of M){let L=V>0?Math.round(E/V*100):0;z.push(` ${N.padEnd(15)} R$ ${E.toFixed(2)} (${L}%)`)}}return z.join(`
112
- `)}function i2($=10){let Z=[...r$].sort((J,Q)=>new Date(Q.date).getTime()-new Date(J.date).getTime()).slice(0,$);if(Z.length===0)return"Nenhuma transacao registrada.";return`Transacoes recentes:
113
- ${Z.map((J)=>{let Q=new Date(J.date).toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit"}),X=J.type==="entrada"?"+":"-";return` [${Q}] ${X} R$ ${J.amount.toFixed(2)} ${J.category} \u2014 ${J.description} [${J.id}]`}).join(`
114
- `)}`}function $J(){return sY().slice(0,8)}function k9($){return["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"][$]||String($+1)}t();import{existsSync as v9,mkdirSync as ZJ,readFileSync as YJ}from"fs";import{join as JJ}from"path";import{randomUUID as QJ}from"crypto";var g9="",s$=[],m9=()=>JJ(g9,"decisions.json");function XJ(){P(m9(),JSON.stringify(s$,null,2))}function KJ(){let $=m9();if(!v9($)){s$=[];return}try{s$=JSON.parse(YJ($,"utf-8"))}catch{s$=[]}}function c9($){if(g9=$,!v9($))ZJ($,{recursive:!0});KJ()}function d9($,Z,Y,J,Q=[]){let X={id:zJ(),title:$.trim(),context:Z.trim(),chosen:Y.trim(),alternatives:J?.trim(),tags:Q.map((K)=>K.toLowerCase()),date:new Date().toISOString()};return s$=[...s$,X],XJ(),X}function J0($){let Z=$.toLowerCase();return s$.filter((Y)=>Y.title.toLowerCase().includes(Z)||Y.chosen.toLowerCase().includes(Z)||Y.context.toLowerCase().includes(Z)||Y.tags.some((J)=>J.includes(Z))).sort((Y,J)=>new Date(J.date).getTime()-new Date(Y.date).getTime())}function Q0($=15){return[...s$].sort((Z,Y)=>new Date(Y.date).getTime()-new Date(Z.date).getTime()).slice(0,$)}function f1($){if($.length===0)return"Nenhuma decisao registrada.";let Z=$.map((Y)=>{let J=new Date(Y.date).toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit"}),Q=Y.tags.length>0?` [${Y.tags.join(", ")}]`:"";return` [${J}] ${Y.title}${Q} {${Y.id}}`});return`Decisoes (${$.length}):
110
+ `)}`}function X6(){let $=SX();if($.length===0)return"Nenhuma tag.";return`Tags:
111
+ ${$.map((J)=>` #${J.tag} (${J.count})`).join(`
112
+ `)}`}function wX(){return AX().slice(0,8)}e();async function g1($){if(I)return kX($);return u5($)}async function kX($){let Z=$.to.replace(/'/g,"''"),J=$.subject.replace(/'/g,"''"),Y=$.body.replace(/'/g,"''").replace(/\n/g,"`n"),Q=$.cc?.replace(/'/g,"''")||"",X=["try {"," $outlook = New-Object -ComObject Outlook.Application -ErrorAction Stop"," $mail = $outlook.CreateItem(0)",` $mail.To = '${Z}'`,` $mail.Subject = '${J}'`,` $mail.Body = '${Y}'`,Q?` $mail.CC = '${Q}'`:""," $mail.Display()",' "Email aberto no Outlook."',"} catch {",' "Outlook nao disponivel. Usando mailto..."',"}"].filter(Boolean).join(`
113
+ `);try{let K=Bun.spawn(["powershell","-NoProfile","-NonInteractive","-Command",X],{stdout:"pipe",stderr:"pipe"}),V=setTimeout(()=>K.kill(),15000),[G]=await Promise.all([new Response(K.stdout).text(),new Response(K.stderr).text()]);await K.exited,clearTimeout(V);let H=G.trim();if(H.includes("mailto"))return u5($);return H||"Email aberto no Outlook."}catch{return u5($)}}async function u5($){let Z=[];if($.subject)Z.push(`subject=${encodeURIComponent($.subject)}`);if($.body)Z.push(`body=${encodeURIComponent($.body)}`);if($.cc)Z.push(`cc=${encodeURIComponent($.cc)}`);let J=`mailto:${encodeURIComponent($.to)}${Z.length?"?"+Z.join("&"):""}`;try{let Y=I?["powershell","-NoProfile","-NonInteractive","-Command",`Start-Process '${J}'`]:["xdg-open",J],Q=Bun.spawn(Y,{stdout:"pipe",stderr:"pipe"}),X=setTimeout(()=>Q.kill(),1e4);return await Promise.all([new Response(Q.stdout).text(),new Response(Q.stderr).text()]),await Q.exited,clearTimeout(X),"Email aberto no cliente de email padrao."}catch(Y){return`Error: ${Y instanceof Error?Y.message:String(Y)}`}}function m1($){let Z=["--- Rascunho de Email ---",`Para: ${$.to}`];if($.cc)Z.push(`CC: ${$.cc}`);return Z.push(`Assunto: ${$.subject}`),Z.push(""),Z.push($.body),Z.push("------------------------"),Z.join(`
114
+ `)}a();import{existsSync as z6,mkdirSync as bX,readFileSync as yX}from"fs";import{join as _X}from"path";import{randomUUID as vX}from"crypto";var V6="",W4=[],G6=()=>_X(V6,"finance.json");function fX(){S(G6(),JSON.stringify(W4,null,2))}function hX(){let $=G6();if(!z6($)){W4=[];return}try{W4=JSON.parse(yX($,"utf-8"))}catch{W4=[]}}function H6($){if(V6=$,!z6($))bX($,{recursive:!0});hX()}function O0($,Z,J,Y){let Q={id:gX(),type:$,amount:Math.abs(Z),category:J.toLowerCase().trim(),description:Y.trim(),date:new Date().toISOString()};return W4=[...W4,Q],fX(),Q}function p1($,Z){let J=new Date,Y=$||J.getFullYear(),Q=Z!==void 0?Z:J.getMonth(),X=W4.filter((B)=>{let U=new Date(B.date);return U.getFullYear()===Y&&U.getMonth()===Q});if(X.length===0)return`Nenhuma transacao em ${K6(Q)}/${Y}.`;let K=X.filter((B)=>B.type==="entrada").reduce((B,U)=>B+U.amount,0),V=X.filter((B)=>B.type==="saida").reduce((B,U)=>B+U.amount,0),G=K-V,H=new Map;for(let B of X.filter((U)=>U.type==="saida"))H.set(B.category,(H.get(B.category)||0)+B.amount);let z=[`--- Resumo ${K6(Q)}/${Y} ---`,`Entradas: R$ ${K.toFixed(2)}`,`Saidas: R$ ${V.toFixed(2)}`,`Saldo: R$ ${G.toFixed(2)} ${G>=0?"":"(NEGATIVO)"}`];if(H.size>0){z.push(""),z.push("Saidas por categoria:");let B=[...H.entries()].sort((U,M)=>M[1]-U[1]);for(let[U,M]of B){let O=V>0?Math.round(M/V*100):0;z.push(` ${U.padEnd(15)} R$ ${M.toFixed(2)} (${O}%)`)}}return z.join(`
115
+ `)}function d5($=10){let Z=[...W4].sort((Y,Q)=>new Date(Q.date).getTime()-new Date(Y.date).getTime()).slice(0,$);if(Z.length===0)return"Nenhuma transacao registrada.";return`Transacoes recentes:
116
+ ${Z.map((Y)=>{let Q=new Date(Y.date).toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit"}),X=Y.type==="entrada"?"+":"-";return` [${Q}] ${X} R$ ${Y.amount.toFixed(2)} ${Y.category} \u2014 ${Y.description} [${Y.id}]`}).join(`
117
+ `)}`}function gX(){return vX().slice(0,8)}function K6($){return["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"][$]||String($+1)}a();import{existsSync as q6,mkdirSync as mX,readFileSync as pX}from"fs";import{join as cX}from"path";import{randomUUID as uX}from"crypto";var W6="",U4=[],U6=()=>cX(W6,"decisions.json");function dX(){S(U6(),JSON.stringify(U4,null,2))}function lX(){let $=U6();if(!q6($)){U4=[];return}try{U4=JSON.parse(pX($,"utf-8"))}catch{U4=[]}}function B6($){if(W6=$,!q6($))mX($,{recursive:!0});lX()}function N6($,Z,J,Y,Q=[]){let X={id:oX(),title:$.trim(),context:Z.trim(),chosen:J.trim(),alternatives:Y?.trim(),tags:Q.map((K)=>K.toLowerCase()),date:new Date().toISOString()};return U4=[...U4,X],dX(),X}function v4($){let Z=$.toLowerCase();return U4.filter((J)=>J.title.toLowerCase().includes(Z)||J.chosen.toLowerCase().includes(Z)||J.context.toLowerCase().includes(Z)||J.tags.some((Y)=>Y.includes(Z))).sort((J,Y)=>new Date(Y.date).getTime()-new Date(J.date).getTime())}function c1($=15){return[...U4].sort((Z,J)=>new Date(J.date).getTime()-new Date(Z.date).getTime()).slice(0,$)}function K8($){if($.length===0)return"Nenhuma decisao registrada.";let Z=$.map((J)=>{let Y=new Date(J.date).toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit"}),Q=J.tags.length>0?` [${J.tags.join(", ")}]`:"";return` [${Y}] ${J.title}${Q} {${J.id}}`});return`Decisoes (${$.length}):
115
118
  ${Z.join(`
116
- `)}`}function zJ(){return QJ().slice(0,8)}l4();t();import{existsSync as a9,mkdirSync as BJ,readFileSync as NJ}from"fs";import{join as CJ}from"path";import{randomUUID as MJ}from"crypto";var r9="",I={people:[],interactions:[],delegations:[]},s9=()=>CJ(r9,"people.json");function z0(){P(s9(),JSON.stringify(I,null,2))}function OJ(){let $=s9();if(!a9($)){I={people:[],interactions:[],delegations:[]};return}try{let Z=JSON.parse(NJ($,"utf-8"));I={people:Z.people||[],interactions:Z.interactions||[],delegations:Z.delegations||[]}}catch{I={people:[],interactions:[],delegations:[]}}}function t9($){if(r9=$,!a9($))BJ($,{recursive:!0});OJ()}function V0($,Z,Y,J){let Q={id:K7(),name:$.trim(),group:Z,role:Y?.trim(),contact:J?.trim(),createdAt:new Date().toISOString()};return I={...I,people:[...I.people,Q]},z0(),Q}function t$($){let Z=$.toLowerCase();return I.people.find((Y)=>Y.id===$||Y.name.toLowerCase().includes(Z))||null}function G0($){if($)return I.people.filter((Z)=>Z.group===$);return[...I.people]}function e9($,Z,Y,J){let Q=t$($);if(!Q)return null;let X={id:K7(),personId:Q.id,date:new Date().toISOString(),type:Z,summary:Y.trim(),followUpDate:J?.toISOString(),followUpDone:!1};return I={...I,interactions:[...I.interactions,X]},z0(),X}function EJ($,Z=10){let Y=t$($);if(!Y)return[];return[...I.interactions].filter((J)=>J.personId===Y.id).reverse().sort((J,Q)=>new Date(Q.date).getTime()-new Date(J.date).getTime()).slice(0,Z)}function n4(){let $=new Date,Z=[];for(let Y of I.interactions){if(Y.followUpDone||!Y.followUpDate)continue;let J=new Date(Y.followUpDate);if(isNaN(J.getTime()))continue;if(J<=$){let Q=I.people.find((X)=>X.id===Y.personId);if(Q)Z.push({person:Q,interaction:Y})}}return Z.sort((Y,J)=>new Date(Y.interaction.followUpDate).getTime()-new Date(J.interaction.followUpDate).getTime())}function W0($,Z,Y){let J=t$($);if(!J)return null;let Q={id:K7(),personId:J.id,task:Z.trim(),assignedAt:new Date().toISOString(),dueDate:Y?.toISOString(),status:"pendente"};return I={...I,delegations:[...I.delegations,Q]},z0(),Q}function $Z($,Z,Y){if(!I.delegations.find((Q)=>Q.id===$))return null;return I={...I,delegations:I.delegations.map((Q)=>Q.id===$?{...Q,status:Z,notes:Y||Q.notes}:Q)},z0(),I.delegations.find((Q)=>Q.id===$)||null}function v1($,Z=!0){let Y=[...I.delegations];if($){let Q=t$($);if(!Q)return[];Y=Y.filter((X)=>X.personId===Q.id)}if(Z)Y=Y.filter((Q)=>Q.status!=="concluido");let J=new Date;return Y=Y.map((Q)=>{if(Q.status==="pendente"&&Q.dueDate){let X=new Date(Q.dueDate);if(!isNaN(X.getTime())&&X<J)return{...Q,status:"atrasado"}}return Q}),Y.sort((Q,X)=>{if(Q.status==="atrasado"&&X.status!=="atrasado")return-1;if(X.status==="atrasado"&&Q.status!=="atrasado")return 1;let K=Q.dueDate?new Date(Q.dueDate).getTime():1/0,V=X.dueDate?new Date(X.dueDate).getTime():1/0;return K-V})}var ZZ={equipe:"Equipe",familia:"Familia",contato:"Contato"};function H0($){if($.length===0)return"Nenhuma pessoa cadastrada.";let Z=new Map;for(let Q of $){let X=Z.get(Q.group)||[];Z.set(Q.group,[...X,Q])}let Y=[],J=["equipe","familia","contato"];for(let Q of J){let X=Z.get(Q);if(!X?.length)continue;let K=X.map((V)=>{let G=V.role?` (${V.role})`:"",H=V.contact?` \u2014 ${V.contact}`:"";return` ${V.name}${G}${H} [${V.id}]`});Y.push(`--- ${ZZ[Q]} ---
119
+ `)}`}function oX(){return uX().slice(0,8)}E0();a();import{existsSync as R6,mkdirSync as eX,readFileSync as $K}from"fs";import{join as ZK}from"path";import{randomUUID as JK}from"crypto";var L6="",v={people:[],interactions:[],delegations:[]},P6=()=>ZK(L6,"people.json");function l1(){S(P6(),JSON.stringify(v,null,2))}function YK(){let $=P6();if(!R6($)){v={people:[],interactions:[],delegations:[]};return}try{let Z=JSON.parse($K($,"utf-8"));v={people:Z.people||[],interactions:Z.interactions||[],delegations:Z.delegations||[]}}catch{v={people:[],interactions:[],delegations:[]}}}function D6($){if(L6=$,!R6($))eX($,{recursive:!0});YK()}function o1($,Z,J,Y){let Q={id:Y9(),name:$.trim(),group:Z,role:J?.trim(),contact:Y?.trim(),createdAt:new Date().toISOString()};return v={...v,people:[...v.people,Q]},l1(),Q}function l$($){let Z=$.toLowerCase();return v.people.find((J)=>J.id===$||J.name.toLowerCase().includes(Z))||null}function a1($){if($)return v.people.filter((Z)=>Z.group===$);return[...v.people]}function T6($,Z,J,Y){let Q=l$($);if(!Q)return null;let X={id:Y9(),personId:Q.id,date:new Date().toISOString(),type:Z,summary:J.trim(),followUpDate:Y?.toISOString(),followUpDone:!1};return v={...v,interactions:[...v.interactions,X]},l1(),X}function QK($,Z=10){let J=l$($);if(!J)return[];return[...v.interactions].filter((Y)=>Y.personId===J.id).reverse().sort((Y,Q)=>new Date(Q.date).getTime()-new Date(Y.date).getTime()).slice(0,Z)}function z8(){let $=new Date,Z=[];for(let J of v.interactions){if(J.followUpDone||!J.followUpDate)continue;let Y=new Date(J.followUpDate);if(isNaN(Y.getTime()))continue;if(Y<=$){let Q=v.people.find((X)=>X.id===J.personId);if(Q)Z.push({person:Q,interaction:J})}}return Z.sort((J,Y)=>new Date(J.interaction.followUpDate).getTime()-new Date(Y.interaction.followUpDate).getTime())}function n1($,Z,J){let Y=l$($);if(!Y)return null;let Q={id:Y9(),personId:Y.id,task:Z.trim(),assignedAt:new Date().toISOString(),dueDate:J?.toISOString(),status:"pendente"};return v={...v,delegations:[...v.delegations,Q]},l1(),Q}function I6($,Z,J){if(!v.delegations.find((Q)=>Q.id===$))return null;return v={...v,delegations:v.delegations.map((Q)=>Q.id===$?{...Q,status:Z,notes:J||Q.notes}:Q)},l1(),v.delegations.find((Q)=>Q.id===$)||null}function f4($,Z=!0){let J=[...v.delegations];if($){let Q=l$($);if(!Q)return[];J=J.filter((X)=>X.personId===Q.id)}if(Z)J=J.filter((Q)=>Q.status!=="concluido");let Y=new Date;return J=J.map((Q)=>{if(Q.status==="pendente"&&Q.dueDate){let X=new Date(Q.dueDate);if(!isNaN(X.getTime())&&X<Y)return{...Q,status:"atrasado"}}return Q}),J.sort((Q,X)=>{if(Q.status==="atrasado"&&X.status!=="atrasado")return-1;if(X.status==="atrasado"&&Q.status!=="atrasado")return 1;let K=Q.dueDate?new Date(Q.dueDate).getTime():1/0,V=X.dueDate?new Date(X.dueDate).getTime():1/0;return K-V})}var A6={equipe:"Equipe",familia:"Familia",contato:"Contato"};function r1($){if($.length===0)return"Nenhuma pessoa cadastrada.";let Z=new Map;for(let Q of $){let X=Z.get(Q.group)||[];Z.set(Q.group,[...X,Q])}let J=[],Y=["equipe","familia","contato"];for(let Q of Y){let X=Z.get(Q);if(!X?.length)continue;let K=X.map((V)=>{let G=V.role?` (${V.role})`:"",H=V.contact?` \u2014 ${V.contact}`:"";return` ${V.name}${G}${H} [${V.id}]`});J.push(`--- ${A6[Q]} ---
117
120
  ${K.join(`
118
- `)}`)}return Y.join(`
121
+ `)}`)}return J.join(`
119
122
 
120
- `)}function q0($){let Z=[];if(Z.push(`${$.name} [${$.id}]`),Z.push(`Grupo: ${ZZ[$.group]}`),$.role)Z.push(`Papel: ${$.role}`);if($.contact)Z.push(`Contato: ${$.contact}`);if($.notes)Z.push(`Notas: ${$.notes}`);let Y=EJ($.id,5);if(Y.length>0){Z.push(`
121
- Interacoes recentes:`);for(let Q of Y){let X=new Date(Q.date).toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit"});Z.push(` [${X}] ${Q.type}: ${Q.summary}`)}}let J=v1($.id);if(J.length>0){Z.push(`
122
- Tarefas delegadas:`);for(let Q of J){let X=Q.status==="atrasado"?"!!":Q.status==="em_andamento"?">>":" ",K=Q.dueDate?` (${z7(Q.dueDate)})`:"";Z.push(` ${X} ${Q.task}${K} [${Q.status}]`)}}return Z.join(`
123
- `)}function U0($){if($.length===0)return"Nenhuma tarefa delegada pendente.";let Z=$.map((Y)=>{let Q=I.people.find((V)=>V.id===Y.personId)?.name||"?",X=Y.status==="atrasado"?"!! ":Y.status==="em_andamento"?">> ":" ",K=Y.dueDate?` (${z7(Y.dueDate)})`:"";return`${X}${Q}: ${Y.task}${K} [${Y.status}] [${Y.id}]`});return`Delegacoes (${$.length}):
123
+ `)}function i1($){let Z=[];if(Z.push(`${$.name} [${$.id}]`),Z.push(`Grupo: ${A6[$.group]}`),$.role)Z.push(`Papel: ${$.role}`);if($.contact)Z.push(`Contato: ${$.contact}`);if($.notes)Z.push(`Notas: ${$.notes}`);let J=QK($.id,5);if(J.length>0){Z.push(`
124
+ Interacoes recentes:`);for(let Q of J){let X=new Date(Q.date).toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit"});Z.push(` [${X}] ${Q.type}: ${Q.summary}`)}}let Y=f4($.id);if(Y.length>0){Z.push(`
125
+ Tarefas delegadas:`);for(let Q of Y){let X=Q.status==="atrasado"?"!!":Q.status==="em_andamento"?">>":" ",K=Q.dueDate?` (${Q9(Q.dueDate)})`:"";Z.push(` ${X} ${Q.task}${K} [${Q.status}]`)}}return Z.join(`
126
+ `)}function s1($){if($.length===0)return"Nenhuma tarefa delegada pendente.";let Z=$.map((J)=>{let Q=v.people.find((V)=>V.id===J.personId)?.name||"?",X=J.status==="atrasado"?"!! ":J.status==="em_andamento"?">> ":" ",K=J.dueDate?` (${Q9(J.dueDate)})`:"";return`${X}${Q}: ${J.task}${K} [${J.status}] [${J.id}]`});return`Delegacoes (${$.length}):
124
127
  ${Z.join(`
125
- `)}`}function B0($){if($.length===0)return"Nenhum follow-up pendente.";let Z=$.map(({person:Y,interaction:J})=>{return` [${z7(J.followUpDate)}] ${Y.name}: ${J.summary} [${J.id}]`});return`Follow-ups pendentes (${$.length}):
128
+ `)}`}function t1($){if($.length===0)return"Nenhum follow-up pendente.";let Z=$.map(({person:J,interaction:Y})=>{return` [${Q9(Y.followUpDate)}] ${J.name}: ${Y.summary} [${Y.id}]`});return`Follow-ups pendentes (${$.length}):
126
129
  ${Z.join(`
127
- `)}`}function N0(){let $=[];$.push(`=== PAINEL DE PESSOAS ===
128
- `);let Z=I.people.filter((H)=>H.group==="equipe").length,Y=I.people.filter((H)=>H.group==="familia").length,J=I.people.filter((H)=>H.group==="contato").length;$.push(`Equipe: ${Z} | Familia: ${Y} | Contatos: ${J}`);let Q=n4();if(Q.length>0){$.push(`
129
- !! ${Q.length} follow-up(s) pendente(s):`);for(let{person:H,interaction:z}of Q.slice(0,5))$.push(` ${H.name}: ${z.summary}`)}let X=v1(),K=X.filter((H)=>H.status==="atrasado"),V=X.filter((H)=>H.status==="pendente"||H.status==="em_andamento");if(K.length>0){$.push(`
130
- !! ${K.length} delegacao(oes) atrasada(s):`);for(let H of K.slice(0,5)){let z=I.people.find((M)=>M.id===H.personId);$.push(` ${z?.name}: ${H.task}`)}}if(V.length>0)$.push(`
131
- ${V.length} delegacao(oes) em andamento`);let G=[...I.interactions].sort((H,z)=>new Date(z.date).getTime()-new Date(H.date).getTime()).slice(0,3);if(G.length>0){$.push(`
132
- Ultimas interacoes:`);for(let H of G){let z=I.people.find((N)=>N.id===H.personId),M=new Date(H.date).toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit"});$.push(` [${M}] ${z?.name}: ${H.summary}`)}}return $.push(`
130
+ `)}`}function e1(){let $=[];$.push(`=== PAINEL DE PESSOAS ===
131
+ `);let Z=v.people.filter((H)=>H.group==="equipe").length,J=v.people.filter((H)=>H.group==="familia").length,Y=v.people.filter((H)=>H.group==="contato").length;$.push(`Equipe: ${Z} | Familia: ${J} | Contatos: ${Y}`);let Q=z8();if(Q.length>0){$.push(`
132
+ !! ${Q.length} follow-up(s) pendente(s):`);for(let{person:H,interaction:z}of Q.slice(0,5))$.push(` ${H.name}: ${z.summary}`)}let X=f4(),K=X.filter((H)=>H.status==="atrasado"),V=X.filter((H)=>H.status==="pendente"||H.status==="em_andamento");if(K.length>0){$.push(`
133
+ !! ${K.length} delegacao(oes) atrasada(s):`);for(let H of K.slice(0,5)){let z=v.people.find((B)=>B.id===H.personId);$.push(` ${z?.name}: ${H.task}`)}}if(V.length>0)$.push(`
134
+ ${V.length} delegacao(oes) em andamento`);let G=[...v.interactions].sort((H,z)=>new Date(z.date).getTime()-new Date(H.date).getTime()).slice(0,3);if(G.length>0){$.push(`
135
+ Ultimas interacoes:`);for(let H of G){let z=v.people.find((U)=>U.id===H.personId),B=new Date(H.date).toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit"});$.push(` [${B}] ${z?.name}: ${H.summary}`)}}return $.push(`
133
136
  ========================`),$.join(`
134
- `)}function K7(){return MJ().slice(0,8)}function z7($){let Z=new Date($);if(isNaN(Z.getTime()))return"?";let Y=new Date,J=new Date(Y.getFullYear(),Y.getMonth(),Y.getDate()),Q=new Date(Z.getFullYear(),Z.getMonth(),Z.getDate());if(Q.getTime()===J.getTime())return"hoje";let X=new Date(J);if(X.setDate(X.getDate()+1),Q.getTime()===X.getTime())return"amanha";let K=Math.floor((Q.getTime()-J.getTime())/86400000);if(K<0)return`${Math.abs(K)}d atras`;if(K<=7)return`em ${K}d`;return Z.toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit"})}t();import{existsSync as YZ,mkdirSync as jJ,readFileSync as FJ}from"fs";import{join as LJ}from"path";import{randomUUID as RJ}from"crypto";var JZ="",u=[],QZ=()=>LJ(JZ,"materials.json");function V7(){P(QZ(),JSON.stringify(u,null,2))}function AJ(){let $=QZ();if(!YZ($)){u=[];return}try{u=JSON.parse(FJ($,"utf-8"))}catch{u=[]}}function XZ($){if(JZ=$,!YZ($))jJ($,{recursive:!0});AJ()}function C0($,Z,Y="geral",J=[]){let Q=new Date().toISOString(),X=Z.match(/#(\w+)/g)?.map((H)=>H.slice(1).toLowerCase())||[],K=$.match(/#(\w+)/g)?.map((H)=>H.slice(1).toLowerCase())||[],V=[...new Set([...J.map((H)=>H.toLowerCase()),...X,...K])],G={id:xJ(),title:$.trim(),content:Z.trim(),category:Y.toLowerCase().trim(),tags:V,createdAt:Q,updatedAt:Q};return u=[...u,G],V7(),G}function KZ($,Z){let Y=u.find((H)=>H.id===$);if(!Y)return null;let J=Z.content??Y.content,Q=Z.title??Y.title,X=J.match(/#(\w+)/g)?.map((H)=>H.slice(1).toLowerCase())||[],K=Q.match(/#(\w+)/g)?.map((H)=>H.slice(1).toLowerCase())||[],V=Z.tags??Y.tags,G=[...new Set([...V.map((H)=>H.toLowerCase()),...X,...K])];return u=u.map((H)=>H.id===$?{...H,title:Q.trim(),content:J.trim(),category:(Z.category??H.category).toLowerCase().trim(),tags:G,updatedAt:new Date().toISOString()}:H),V7(),u.find((H)=>H.id===$)||null}function M0($){let Z=u.findIndex((Y)=>Y.id===$);if(Z===-1)return!1;return u=[...u.slice(0,Z),...u.slice(Z+1)],V7(),!0}function zZ($){return u.find((Z)=>Z.id===$)||null}function O0($){let Z=$.toLowerCase().trim();if(!Z)return[...u];let Y=Z.startsWith("#"),J=Z.startsWith("@"),Q=Y||J?Z.slice(1):Z;return u.filter((X)=>{if(Y)return X.tags.some((K)=>K.includes(Q));if(J)return X.category.includes(Q);return X.title.toLowerCase().includes(Q)||X.content.toLowerCase().includes(Q)||X.category.toLowerCase().includes(Q)||X.tags.some((K)=>K.includes(Q))}).sort((X,K)=>new Date(K.updatedAt).getTime()-new Date(X.updatedAt).getTime())}function g1($=30,Z){let Y=[...u];if(Z){let J=Z.toLowerCase().trim();Y=Y.filter((Q)=>Q.category===J)}return Y.sort((J,Q)=>new Date(Q.updatedAt).getTime()-new Date(J.updatedAt).getTime()).slice(0,$)}function VZ(){let $=new Map;for(let Z of u)$.set(Z.category,($.get(Z.category)||0)+1);return[...$.entries()].map(([Z,Y])=>({category:Z,count:Y})).sort((Z,Y)=>Y.count-Z.count)}function GZ(){if(u.length===0)return"";let $=VZ(),Z=["--- Materiais do Assistente ---"];for(let{category:Y}of $){let J=u.filter((Q)=>Q.category===Y).sort((Q,X)=>new Date(X.updatedAt).getTime()-new Date(Q.updatedAt).getTime());Z.push(`
135
- [${Y}]`);for(let Q of J){let X=Q.content.length>200?Q.content.slice(0,200).replace(/\n/g," ")+"...":Q.content.replace(/\n/g," "),K=Q.tags.length>0?` [${Q.tags.map((V)=>`#${V}`).join(" ")}]`:"";Z.push(` \u2022 ${Q.title}: ${X}${K}`)}}return Z.join(`
136
- `)}function e$($){if($.length===0)return"Nenhum material encontrado.";let Z=$.map((Y)=>{let J=new Date(Y.updatedAt).toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit"}),Q=Y.tags.length>0?` [${Y.tags.map((K)=>`#${K}`).join(" ")}]`:"",X=Y.content.length>60?Y.content.slice(0,60).replace(/\n/g," ")+"...":Y.content.replace(/\n/g," ");return` [${J}] (${Y.category}) ${Y.title} \u2014 ${X}${Q} {${Y.id}}`});return`Materiais (${$.length}):
137
+ `)}function Y9(){return JK().slice(0,8)}function Q9($){let Z=new Date($);if(isNaN(Z.getTime()))return"?";let J=new Date,Y=new Date(J.getFullYear(),J.getMonth(),J.getDate()),Q=new Date(Z.getFullYear(),Z.getMonth(),Z.getDate());if(Q.getTime()===Y.getTime())return"hoje";let X=new Date(Y);if(X.setDate(X.getDate()+1),Q.getTime()===X.getTime())return"amanha";let K=Math.floor((Q.getTime()-Y.getTime())/86400000);if(K<0)return`${Math.abs(K)}d atras`;if(K<=7)return`em ${K}d`;return Z.toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit"})}a();import{existsSync as x6,mkdirSync as XK,readFileSync as KK}from"fs";import{join as zK}from"path";import{randomUUID as VK}from"crypto";var S6="",l=[],w6=()=>zK(S6,"materials.json");function X9(){S(w6(),JSON.stringify(l,null,2))}function GK(){let $=w6();if(!x6($)){l=[];return}try{l=JSON.parse(KK($,"utf-8"))}catch{l=[]}}function k6($){if(S6=$,!x6($))XK($,{recursive:!0});GK()}function $7($,Z,J="geral",Y=[]){let Q=new Date().toISOString(),X=Z.match(/#(\w+)/g)?.map((H)=>H.slice(1).toLowerCase())||[],K=$.match(/#(\w+)/g)?.map((H)=>H.slice(1).toLowerCase())||[],V=[...new Set([...Y.map((H)=>H.toLowerCase()),...X,...K])],G={id:HK(),title:$.trim(),content:Z.trim(),category:J.toLowerCase().trim(),tags:V,createdAt:Q,updatedAt:Q};return l=[...l,G],X9(),G}function b6($,Z){let J=l.find((H)=>H.id===$);if(!J)return null;let Y=Z.content??J.content,Q=Z.title??J.title,X=Y.match(/#(\w+)/g)?.map((H)=>H.slice(1).toLowerCase())||[],K=Q.match(/#(\w+)/g)?.map((H)=>H.slice(1).toLowerCase())||[],V=Z.tags??J.tags,G=[...new Set([...V.map((H)=>H.toLowerCase()),...X,...K])];return l=l.map((H)=>H.id===$?{...H,title:Q.trim(),content:Y.trim(),category:(Z.category??H.category).toLowerCase().trim(),tags:G,updatedAt:new Date().toISOString()}:H),X9(),l.find((H)=>H.id===$)||null}function Z7($){let Z=l.findIndex((J)=>J.id===$);if(Z===-1)return!1;return l=[...l.slice(0,Z),...l.slice(Z+1)],X9(),!0}function y6($){return l.find((Z)=>Z.id===$)||null}function V8($){let Z=$.toLowerCase().trim();if(!Z)return[...l];let J=Z.startsWith("#"),Y=Z.startsWith("@"),Q=J||Y?Z.slice(1):Z;return l.filter((X)=>{if(J)return X.tags.some((K)=>K.includes(Q));if(Y)return X.category.includes(Q);return X.title.toLowerCase().includes(Q)||X.content.toLowerCase().includes(Q)||X.category.toLowerCase().includes(Q)||X.tags.some((K)=>K.includes(Q))}).sort((X,K)=>new Date(K.updatedAt).getTime()-new Date(X.updatedAt).getTime())}function G8($=30,Z){let J=[...l];if(Z){let Y=Z.toLowerCase().trim();J=J.filter((Q)=>Q.category===Y)}return J.sort((Y,Q)=>new Date(Q.updatedAt).getTime()-new Date(Y.updatedAt).getTime()).slice(0,$)}function _6(){let $=new Map;for(let Z of l)$.set(Z.category,($.get(Z.category)||0)+1);return[...$.entries()].map(([Z,J])=>({category:Z,count:J})).sort((Z,J)=>J.count-Z.count)}function v6(){if(l.length===0)return"";let $=_6(),Z=["--- Materiais do Assistente ---"];for(let{category:J}of $){let Y=l.filter((Q)=>Q.category===J).sort((Q,X)=>new Date(X.updatedAt).getTime()-new Date(Q.updatedAt).getTime());Z.push(`
138
+ [${J}]`);for(let Q of Y){let X=Q.content.length>200?Q.content.slice(0,200).replace(/\n/g," ")+"...":Q.content.replace(/\n/g," "),K=Q.tags.length>0?` [${Q.tags.map((V)=>`#${V}`).join(" ")}]`:"";Z.push(` \u2022 ${Q.title}: ${X}${K}`)}}return Z.join(`
139
+ `)}function B4($){if($.length===0)return"Nenhum material encontrado.";let Z=$.map((J)=>{let Y=new Date(J.updatedAt).toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit"}),Q=J.tags.length>0?` [${J.tags.map((K)=>`#${K}`).join(" ")}]`:"",X=J.content.length>60?J.content.slice(0,60).replace(/\n/g," ")+"...":J.content.replace(/\n/g," ");return` [${Y}] (${J.category}) ${J.title} \u2014 ${X}${Q} {${J.id}}`});return`Materiais (${$.length}):
137
140
  ${Z.join(`
138
- `)}`}function WZ($){let Z=new Date($.createdAt).toLocaleDateString("pt-BR"),Y=new Date($.updatedAt).toLocaleDateString("pt-BR"),J=$.tags.length>0?`Tags: ${$.tags.map((X)=>`#${X}`).join(" ")}`:"",Q=Z===Y?`Criado: ${Z}`:`Criado: ${Z} | Atualizado: ${Y}`;return`--- Material {${$.id}} ---
141
+ `)}`}function f6($){let Z=new Date($.createdAt).toLocaleDateString("pt-BR"),J=new Date($.updatedAt).toLocaleDateString("pt-BR"),Y=$.tags.length>0?`Tags: ${$.tags.map((X)=>`#${X}`).join(" ")}`:"",Q=Z===J?`Criado: ${Z}`:`Criado: ${Z} | Atualizado: ${J}`;return`--- Material {${$.id}} ---
139
142
  Titulo: ${$.title}
140
143
  Categoria: ${$.category}
141
144
 
142
145
  ${$.content}
143
146
 
144
- ${J}
145
- ${Q}`}function HZ(){let $=VZ();if($.length===0)return"Nenhuma categoria.";return`Categorias:
146
- ${$.map((Y)=>` @${Y.category} (${Y.count})`).join(`
147
- `)}`}function xJ(){return RJ().slice(0,8)}t();import{existsSync as N1,mkdirSync as DJ,readFileSync as m1,readdirSync as TJ}from"fs";import{join as B1}from"path";import{createHash as PJ}from"crypto";var BZ=1,G7=400,wJ=80,qZ=1.5,UZ=0.75,IJ=10,SJ=new Set(["a","o","e","de","do","da","em","um","uma","para","com","nao","que","por","se","na","no","os","as","ao","ou","foi","ser","tem","seu","sua","mais","como","mas","dos","das","esse","essa","este","esta","isso","isto","ele","ela","nos","ja","ate","muito","tambem","entre","quando","sobre","mesmo","depois","sem","vai","ainda","pode","aqui","so","the","a","an","is","are","was","were","be","been","being","have","has","had","do","does","did","will","would","could","should","may","might","shall","can","to","of","in","for","on","with","at","by","from","as","into","through","during","before","after","above","below","between","out","off","over","under","again","further","then","once","here","there","when","where","why","how","all","each","every","both","few","more","most","other","some","such","no","nor","not","only","own","same","so","than","too","very","just","because","but","and","or","if","while","this","that","these","those","it","its"]),i4="",E0="",s=[],k$={},y$=0,_$={},j0=!1,H7=()=>B1(E0,"rag-index.json");function NZ($){if(i4=$,E0=B1($,"rag"),!N1(E0))DJ(E0,{recursive:!0});vJ(),j0=!0}function F0(){return j0}function L0(){return{chunks:s.length,sources:Object.keys(_$).length,builtAt:s.length>0?gJ()?.builtAt??null:null}}function R0(){if(!j0)throw Error("Memory not initialized. Call initMemory() first.");let $=_J(),Z=0,Y=0,J={},Q=new Set;for(let[K,V]of Object.entries($)){let G=mJ(V);if(J[K]=G,_$[K]!==G)Q.add(K)}let X=Object.keys(_$).filter((K)=>!(K in $));if(Q.size===0&&X.length===0)return{indexed:0,skipped:Object.keys($).length,total:s.length};s=s.filter((K)=>{let V=`${K.source}:${K.sourceId}`;return!Q.has(V)&&!X.includes(V)});for(let K of Q){let V=$[K],G=K.indexOf(":");if(G===-1)continue;let H=K.slice(0,G),z=K.slice(G+1);if(!["memo","material","session","decision"].includes(H))continue;let N=cJ(H,z,V),E=yJ(V,H,z,N);s=[...s,...E],Z++}return Y=Object.keys($).length-Z,hJ(),_$=J,fJ(),{indexed:Z,skipped:Y,total:s.length}}function A0($,Z=3){if(s.length===0)return[];let Y=W7($);if(Y.length===0)return[];return s.map((Q)=>{let X=bJ(Y,Q),K=kJ(Y,Q),V=0.6*X+0.4*K;return{chunk:Q,score:V}}).filter((Q)=>Q.score>0).sort((Q,X)=>X.score-Q.score).slice(0,Math.min(Z,IJ))}function x0($){if($.length===0)return"Nenhum resultado encontrado na memoria local.";let Z=$.map((Y,J)=>{let Q=dJ(Y.chunk.source),X=(Y.score*100).toFixed(1),K=Y.chunk.content.length>300?Y.chunk.content.slice(0,300).replace(/\n/g," ")+"...":Y.chunk.content.replace(/\n/g," ");return`[${J+1}] ${Q}: ${Y.chunk.title} (relevancia: ${X}%)
147
+ ${Y}
148
+ ${Q}`}function h6(){let $=_6();if($.length===0)return"Nenhuma categoria.";return`Categorias:
149
+ ${$.map((J)=>` @${J.category} (${J.count})`).join(`
150
+ `)}`}function HK(){return VK().slice(0,8)}a();import{existsSync as g4,mkdirSync as qK,readFileSync as H8,readdirSync as WK}from"fs";import{join as h4}from"path";import{createHash as UK}from"crypto";var p6=1,K9=400,BK=80,g6=1.5,m6=0.75,NK=10,MK=new Set(["a","o","e","de","do","da","em","um","uma","para","com","nao","que","por","se","na","no","os","as","ao","ou","foi","ser","tem","seu","sua","mais","como","mas","dos","das","esse","essa","este","esta","isso","isto","ele","ela","nos","ja","ate","muito","tambem","entre","quando","sobre","mesmo","depois","sem","vai","ainda","pode","aqui","so","the","a","an","is","are","was","were","be","been","being","have","has","had","do","does","did","will","would","could","should","may","might","shall","can","to","of","in","for","on","with","at","by","from","as","into","through","during","before","after","above","below","between","out","off","over","under","again","further","then","once","here","there","when","where","why","how","all","each","every","both","few","more","most","other","some","such","no","nor","not","only","own","same","so","than","too","very","just","because","but","and","or","if","while","this","that","these","those","it","its"]),R0="",J7="",Z$=[],o$={},a$=0,n$={},Y7=!1,V9=()=>h4(J7,"rag-index.json");function c6($){if(R0=$,J7=h4($,"rag"),!g4(J7))qK(J7,{recursive:!0});LK(),Y7=!0}function Q7(){return Y7}function X7(){return{chunks:Z$.length,sources:Object.keys(n$).length,builtAt:Z$.length>0?PK()?.builtAt??null:null}}function K7(){if(!Y7)throw Error("Memory not initialized. Call initMemory() first.");let $=FK(),Z=0,J=0,Y={},Q=new Set;for(let[K,V]of Object.entries($)){let G=DK(V);if(Y[K]=G,n$[K]!==G)Q.add(K)}let X=Object.keys(n$).filter((K)=>!(K in $));if(Q.size===0&&X.length===0)return{indexed:0,skipped:Object.keys($).length,total:Z$.length};Z$=Z$.filter((K)=>{let V=`${K.source}:${K.sourceId}`;return!Q.has(V)&&!X.includes(V)});for(let K of Q){let V=$[K],G=K.indexOf(":");if(G===-1)continue;let H=K.slice(0,G),z=K.slice(G+1);if(!["memo","material","session","decision"].includes(H))continue;let U=TK(H,z,V),M=OK(V,H,z,U);Z$=[...Z$,...M],Z++}return J=Object.keys($).length-Z,EK(),n$=Y,RK(),{indexed:Z,skipped:J,total:Z$.length}}function z7($,Z=3){if(Z$.length===0)return[];let J=z9($);if(J.length===0)return[];return Z$.map((Q)=>{let X=CK(J,Q),K=jK(J,Q),V=0.6*X+0.4*K;return{chunk:Q,score:V}}).filter((Q)=>Q.score>0).sort((Q,X)=>X.score-Q.score).slice(0,Math.min(Z,NK))}function V7($){if($.length===0)return"Nenhum resultado encontrado na memoria local.";let Z=$.map((J,Y)=>{let Q=IK(J.chunk.source),X=(J.score*100).toFixed(1),K=J.chunk.content.length>300?J.chunk.content.slice(0,300).replace(/\n/g," ")+"...":J.chunk.content.replace(/\n/g," ");return`[${Y+1}] ${Q}: ${J.chunk.title} (relevancia: ${X}%)
148
151
  ${K}`});return`Resultados da memoria (${$.length}):
149
152
 
150
153
  ${Z.join(`
151
154
 
152
- `)}`}function bJ($,Z){let Y=Z.tokens.length;if(Y===0||y$===0)return 0;let J=new Map;for(let X of Z.tokens)J.set(X,(J.get(X)??0)+1);let Q=0;for(let X of $){let K=J.get(X)??0;if(K===0)continue;let V=k$[X]??0;if(V===0)continue;let G=K*(qZ+1),H=K+qZ*(1-UZ+UZ*(Y/y$));Q+=V*(G/H)}return Q}function kJ($,Z){let Y=new Map;for(let H of $)Y.set(H,(Y.get(H)??0)+1);let J=new Map;for(let H of Z.tokens)J.set(H,(J.get(H)??0)+1);let Q=new Set([...$,...Z.tokens]),X=0,K=0,V=0;for(let H of Q){let z=k$[H]??0,M=(Y.get(H)??0)*z,N=(J.get(H)??0)*z;X+=M*N,K+=M*M,V+=N*N}let G=Math.sqrt(K)*Math.sqrt(V);return G>0?X/G:0}function W7($){return $.toLowerCase().replace(/[^\w\s\u00E1\u00E9\u00ED\u00F3\u00FA\u00E2\u00EA\u00EE\u00F4\u00FB\u00E3\u00F5\u00E0\u00E8\u00EC\u00F2\u00F9\u00E4\u00EB\u00EF\u00F6\u00FC\u00E7]/g," ").split(/\s+/).filter((Z)=>Z.length>2&&!SJ.has(Z))}function yJ($,Z,Y,J){let Q=$.trim();if(Q.length===0)return[];if(Q.length<=G7)return[{id:`${Z}:${Y}:0`,source:Z,sourceId:Y,title:J,content:Q,tokens:W7(Q)}];let X=[],K=0,V=0;while(K<Q.length){let G=Math.min(K+G7,Q.length),H=Q.slice(K,G);X.push({id:`${Z}:${Y}:${V}`,source:Z,sourceId:Y,title:J,content:H,tokens:W7(H)}),K+=G7-wJ,V++}return X}function _J(){let $={},Z=B1(i4,"memos.json");if(N1(Z))try{let X=JSON.parse(m1(Z,"utf-8"));if(!Array.isArray(X))throw Error("not an array");for(let K of X){if(!K||typeof K!=="object")continue;let V=K;if(typeof V.id!=="string"||typeof V.content!=="string")continue;let G=Array.isArray(V.tags)&&V.tags.length>0?` [${V.tags.join(", ")}]`:"";$[`memo:${V.id}`]=`${V.content}${G}`}}catch{}let Y=B1(i4,"materials.json");if(N1(Y))try{let X=JSON.parse(m1(Y,"utf-8"));if(!Array.isArray(X))throw Error("not an array");for(let K of X){if(!K||typeof K!=="object")continue;let V=K;if(typeof V.id!=="string"||typeof V.title!=="string"||typeof V.content!=="string")continue;let G=typeof V.category==="string"?V.category:"geral",H=Array.isArray(V.tags)&&V.tags.length>0?` [${V.tags.join(", ")}]`:"";$[`material:${V.id}`]=`${V.title}
155
+ `)}`}function CK($,Z){let J=Z.tokens.length;if(J===0||a$===0)return 0;let Y=new Map;for(let X of Z.tokens)Y.set(X,(Y.get(X)??0)+1);let Q=0;for(let X of $){let K=Y.get(X)??0;if(K===0)continue;let V=o$[X]??0;if(V===0)continue;let G=K*(g6+1),H=K+g6*(1-m6+m6*(J/a$));Q+=V*(G/H)}return Q}function jK($,Z){let J=new Map;for(let H of $)J.set(H,(J.get(H)??0)+1);let Y=new Map;for(let H of Z.tokens)Y.set(H,(Y.get(H)??0)+1);let Q=new Set([...$,...Z.tokens]),X=0,K=0,V=0;for(let H of Q){let z=o$[H]??0,B=(J.get(H)??0)*z,U=(Y.get(H)??0)*z;X+=B*U,K+=B*B,V+=U*U}let G=Math.sqrt(K)*Math.sqrt(V);return G>0?X/G:0}function z9($){return $.toLowerCase().replace(/[^\w\s\u00E1\u00E9\u00ED\u00F3\u00FA\u00E2\u00EA\u00EE\u00F4\u00FB\u00E3\u00F5\u00E0\u00E8\u00EC\u00F2\u00F9\u00E4\u00EB\u00EF\u00F6\u00FC\u00E7]/g," ").split(/\s+/).filter((Z)=>Z.length>2&&!MK.has(Z))}function OK($,Z,J,Y){let Q=$.trim();if(Q.length===0)return[];if(Q.length<=K9)return[{id:`${Z}:${J}:0`,source:Z,sourceId:J,title:Y,content:Q,tokens:z9(Q)}];let X=[],K=0,V=0;while(K<Q.length){let G=Math.min(K+K9,Q.length),H=Q.slice(K,G);X.push({id:`${Z}:${J}:${V}`,source:Z,sourceId:J,title:Y,content:H,tokens:z9(H)}),K+=K9-BK,V++}return X}function FK(){let $={},Z=h4(R0,"memos.json");if(g4(Z))try{let X=JSON.parse(H8(Z,"utf-8"));if(!Array.isArray(X))throw Error("not an array");for(let K of X){if(!K||typeof K!=="object")continue;let V=K;if(typeof V.id!=="string"||typeof V.content!=="string")continue;let G=Array.isArray(V.tags)&&V.tags.length>0?` [${V.tags.join(", ")}]`:"";$[`memo:${V.id}`]=`${V.content}${G}`}}catch{}let J=h4(R0,"materials.json");if(g4(J))try{let X=JSON.parse(H8(J,"utf-8"));if(!Array.isArray(X))throw Error("not an array");for(let K of X){if(!K||typeof K!=="object")continue;let V=K;if(typeof V.id!=="string"||typeof V.title!=="string"||typeof V.content!=="string")continue;let G=typeof V.category==="string"?V.category:"geral",H=Array.isArray(V.tags)&&V.tags.length>0?` [${V.tags.join(", ")}]`:"";$[`material:${V.id}`]=`${V.title}
153
156
  ${G}
154
- ${V.content}${H}`}}catch{}let J=B1(i4,"decisions.json");if(N1(J))try{let X=JSON.parse(m1(J,"utf-8"));if(!Array.isArray(X))throw Error("not an array");for(let K of X){if(!K||typeof K!=="object")continue;let V=K;if(typeof V.id!=="string"||typeof V.title!=="string"||typeof V.context!=="string"||typeof V.chosen!=="string")continue;let G=[V.title,V.context,`Escolha: ${V.chosen}`];if(typeof V.alternatives==="string")G.push(`Alternativas: ${V.alternatives}`);if(Array.isArray(V.tags)&&V.tags.length>0)G.push(`[${V.tags.join(", ")}]`);$[`decision:${V.id}`]=G.join(`
155
- `)}}catch{}let Q=B1(i4,"sessions");if(N1(Q))try{let X=TJ(Q,{withFileTypes:!0}).filter((K)=>K.isFile()&&K.name.endsWith(".json")&&!K.name.startsWith(".")).map((K)=>K.name);for(let K of X){let V=B1(Q,K);try{let G=JSON.parse(m1(V,"utf-8"));if(!G||typeof G!=="object"||!Array.isArray(G.messages))continue;let H=G.messages.filter((z)=>{if(!z||typeof z!=="object")return!1;let M=z;return M.role==="assistant"&&typeof M.content==="string"&&M.content.length>50}).map((z)=>z.content).join(`
157
+ ${V.content}${H}`}}catch{}let Y=h4(R0,"decisions.json");if(g4(Y))try{let X=JSON.parse(H8(Y,"utf-8"));if(!Array.isArray(X))throw Error("not an array");for(let K of X){if(!K||typeof K!=="object")continue;let V=K;if(typeof V.id!=="string"||typeof V.title!=="string"||typeof V.context!=="string"||typeof V.chosen!=="string")continue;let G=[V.title,V.context,`Escolha: ${V.chosen}`];if(typeof V.alternatives==="string")G.push(`Alternativas: ${V.alternatives}`);if(Array.isArray(V.tags)&&V.tags.length>0)G.push(`[${V.tags.join(", ")}]`);$[`decision:${V.id}`]=G.join(`
158
+ `)}}catch{}let Q=h4(R0,"sessions");if(g4(Q))try{let X=WK(Q,{withFileTypes:!0}).filter((K)=>K.isFile()&&K.name.endsWith(".json")&&!K.name.startsWith(".")).map((K)=>K.name);for(let K of X){let V=h4(Q,K);try{let G=JSON.parse(H8(V,"utf-8"));if(!G||typeof G!=="object"||!Array.isArray(G.messages))continue;let H=G.messages.filter((z)=>{if(!z||typeof z!=="object")return!1;let B=z;return B.role==="assistant"&&typeof B.content==="string"&&B.content.length>50}).map((z)=>z.content).join(`
156
159
  ---
157
- `);if(H.length>0)$[`session:${G.id}`]=H}catch{}}}catch{}return $}function hJ(){let $=s.length;if($===0){k$={},y$=0;return}let Z=new Map,Y=0;for(let Q of s){let X=new Set;for(let K of Q.tokens)if(!X.has(K))Z.set(K,(Z.get(K)??0)+1),X.add(K);Y+=Q.tokens.length}y$=Y/$;let J={};for(let[Q,X]of Z)J[Q]=Math.log(($-X+0.5)/(X+0.5)+1);k$=J}function fJ(){if(!j0)return;let $={chunks:s,idf:k$,avgDocLength:y$,sourceHashes:_$,builtAt:new Date().toISOString(),version:BZ};P(H7(),JSON.stringify($))}function vJ(){let $=H7();if(!N1($)){s=[],k$={},y$=0,_$={};return}try{let Z=JSON.parse(m1($,"utf-8"));if(Z.version!==BZ){s=[],k$={},y$=0,_$={};return}s=Z.chunks,k$=Z.idf,y$=Z.avgDocLength,_$=Z.sourceHashes}catch{s=[],k$={},y$=0,_$={}}}function gJ(){let $=H7();if(!N1($))return null;try{return{builtAt:JSON.parse(m1($,"utf-8")).builtAt}}catch{return null}}function mJ($){return PJ("sha256").update($).digest("hex").slice(0,16)}function cJ($,Z,Y){switch($){case"material":{let J=Y.split(`
158
- `)[0];return J.length>60?J.slice(0,60)+"...":J}case"memo":return Y.slice(0,60).replace(/\n/g," ")+(Y.length>60?"...":"");case"decision":{let J=Y.split(`
159
- `)[0];return J.length>60?J.slice(0,60)+"...":J}case"session":return`Sessao ${Z}`;default:return Z}}function dJ($){switch($){case"memo":return"Memo";case"material":return"Material";case"session":return"Sessao";case"decision":return"Decisao";default:return $}}import{writeFileSync as uJ,unlinkSync as pJ,existsSync as lJ}from"fs";import{join as nJ}from"path";import{tmpdir as iJ}from"os";import{randomUUID as oJ}from"crypto";var aJ=30000,CZ=50000,MZ=1e5,rJ=/[\x1b\x9b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nq-uy=><~]/g,sJ=[{pattern:/Set-MpPreference\s.*-Disable/i,reason:"Tentativa de desativar Windows Defender"},{pattern:/Disable-WindowsOptionalFeature.*Defender/i,reason:"Tentativa de desativar Windows Defender"},{pattern:/Stop-Service\s.*WinDefend/i,reason:"Tentativa de parar Windows Defender"},{pattern:/sc\s+(stop|delete|disable)\s+WinDefend/i,reason:"Tentativa de desabilitar Windows Defender via sc"},{pattern:/New-ItemProperty.*DisableAntiSpyware/i,reason:"Tentativa de desativar prote\xE7\xE3o via registro"},{pattern:/Remove-Item\s.*\\Windows\\System32/i,reason:"Tentativa de deletar arquivos do System32"},{pattern:/Remove-Item\s.*\\Windows\\SysWOW64/i,reason:"Tentativa de deletar arquivos do SysWOW64"},{pattern:/Format-Volume/i,reason:"Tentativa de formatar volume"},{pattern:/Clear-Disk/i,reason:"Tentativa de limpar disco"},{pattern:/Stop-Computer/i,reason:"Tentativa de desligar computador"},{pattern:/Restart-Computer/i,reason:"Tentativa de reiniciar computador"},{pattern:/Set-ExecutionPolicy\s+Unrestricted/i,reason:"Tentativa de mudar politica de execu\xE7\xE3o permanentemente"},{pattern:/\bnet\s+user\s+.*\/add/i,reason:"Tentativa de criar usuario"},{pattern:/\bnet\s+localgroup\s+administrators/i,reason:"Tentativa de modificar grupo Administrators"},{pattern:/Invoke-Expression.*DownloadString/i,reason:"Tentativa de execu\xE7\xE3o remota (IEX + download)"},{pattern:/\biex\s*\(\s*\(?\s*New-Object/i,reason:"Tentativa de execu\xE7\xE3o remota (IEX + WebClient)"}],tJ=[{pattern:/\\Windows\\System32/i,reason:"Acesso a System32"},{pattern:/\\Windows\\SysWOW64/i,reason:"Acesso a SysWOW64"},{pattern:/HKLM:|HKCU:/i,reason:"Acesso ao registro do Windows"},{pattern:/New-Service|Set-Service|Remove-Service/i,reason:"Manipula\xE7\xE3o de servi\xE7os"},{pattern:/New-NetFirewallRule|Remove-NetFirewallRule/i,reason:"Altera\xE7\xE3o de regras de firewall"},{pattern:/Start-Process\s.*-Verb\s+RunAs/i,reason:"Eleva\xE7\xE3o de privilegios (RunAs)"},{pattern:/Set-ItemProperty\s.*\\CurrentVersion\\Run/i,reason:"Modifica\xE7\xE3o de programas de inicializa\xE7\xE3o"}];function q7($){for(let{pattern:Z,reason:Y}of sJ)if(Z.test($))return{safe:!1,blocked:!0,reason:Y};for(let{pattern:Z,reason:Y}of tJ)if(Z.test($))return{safe:!1,blocked:!1,reason:Y};return{safe:!0,blocked:!1}}async function D0($){if(!A)return{stdout:"",stderr:"Error: PowerShell scripts only available on Windows.",exitCode:1,duration:0};if(!$.trim())return{stdout:"",stderr:"Error: script is empty.",exitCode:1,duration:0};if($.length>CZ)return{stdout:"",stderr:`Error: script too long (${$.length} chars, max ${CZ}).`,exitCode:1,duration:0};let Z=q7($);if(Z.blocked)return{stdout:"",stderr:`BLOCKED: ${Z.reason}`,exitCode:1,duration:0};let Y=oJ().slice(0,8),J=nJ(iJ(),`smolerclaw-${Y}.ps1`);try{uJ(J,$,"utf-8");let Q=performance.now(),X=Bun.spawn(["powershell","-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-File",J],{stdout:"pipe",stderr:"pipe"}),K=new Promise((N,E)=>{setTimeout(()=>{X.kill(),E(Error("Script timeout exceeded"))},aJ)}),V=(async()=>{let[N,E]=await Promise.all([new Response(X.stdout).text(),new Response(X.stderr).text()]),L=await X.exited;return{stdout:N,stderr:E,exitCode:L}})(),{stdout:G,stderr:H,exitCode:z}=await Promise.race([V,K]),M=Math.round(performance.now()-Q);return{stdout:c1(G),stderr:c1(H),exitCode:z,duration:M}}finally{try{if(lJ(J))pJ(J)}catch{}}}async function T0(){if(!A)return{type:"error",text:"Clipboard reading only available on Windows."};let $=await eJ();if($.type==="text")return $;return await $Q()}async function eJ(){let $=["Add-Type -AssemblyName System.Windows.Forms","$clip = [System.Windows.Forms.Clipboard]::GetText()",'if ($clip) { $clip } else { "___EMPTY___" }'].join("; ");try{let Z=Bun.spawn(["powershell","-NoProfile","-NonInteractive","-STA","-Command",$],{stdout:"pipe",stderr:"pipe"}),Y=new Promise((K,V)=>{setTimeout(()=>{Z.kill(),V(Error("clipboard timeout"))},1e4)}),J=(async()=>{let[K]=await Promise.all([new Response(Z.stdout).text(),new Response(Z.stderr).text()]);return await Z.exited,K})(),Q=await Promise.race([J,Y]),X=c1(Q).trim();if(X==="___EMPTY___"||!X)return{type:"empty",text:""};return{type:"text",text:X}}catch{return{type:"error",text:"Failed to read clipboard text."}}}async function $Q(){try{let Z=Bun.spawn(["powershell","-NoProfile","-NonInteractive","-STA","-Command",`
160
+ `);if(H.length>0)$[`session:${G.id}`]=H}catch{}}}catch{}return $}function EK(){let $=Z$.length;if($===0){o$={},a$=0;return}let Z=new Map,J=0;for(let Q of Z$){let X=new Set;for(let K of Q.tokens)if(!X.has(K))Z.set(K,(Z.get(K)??0)+1),X.add(K);J+=Q.tokens.length}a$=J/$;let Y={};for(let[Q,X]of Z)Y[Q]=Math.log(($-X+0.5)/(X+0.5)+1);o$=Y}function RK(){if(!Y7)return;let $={chunks:Z$,idf:o$,avgDocLength:a$,sourceHashes:n$,builtAt:new Date().toISOString(),version:p6};S(V9(),JSON.stringify($))}function LK(){let $=V9();if(!g4($)){Z$=[],o$={},a$=0,n$={};return}try{let Z=JSON.parse(H8($,"utf-8"));if(Z.version!==p6){Z$=[],o$={},a$=0,n$={};return}Z$=Z.chunks,o$=Z.idf,a$=Z.avgDocLength,n$=Z.sourceHashes}catch{Z$=[],o$={},a$=0,n$={}}}function PK(){let $=V9();if(!g4($))return null;try{return{builtAt:JSON.parse(H8($,"utf-8")).builtAt}}catch{return null}}function DK($){return UK("sha256").update($).digest("hex").slice(0,16)}function TK($,Z,J){switch($){case"material":{let Y=J.split(`
161
+ `)[0];return Y.length>60?Y.slice(0,60)+"...":Y}case"memo":return J.slice(0,60).replace(/\n/g," ")+(J.length>60?"...":"");case"decision":{let Y=J.split(`
162
+ `)[0];return Y.length>60?Y.slice(0,60)+"...":Y}case"session":return`Sessao ${Z}`;default:return Z}}function IK($){switch($){case"memo":return"Memo";case"material":return"Material";case"session":return"Sessao";case"decision":return"Decisao";default:return $}}e();u0();Z4();import{writeFileSync as AK,unlinkSync as xK,existsSync as SK}from"fs";import{join as wK}from"path";import{tmpdir as kK}from"os";import{randomUUID as bK}from"crypto";var yK=30000,u6=50000;var _K=[{pattern:/Set-MpPreference\s.*-Disable/i,reason:"Tentativa de desativar Windows Defender"},{pattern:/Disable-WindowsOptionalFeature.*Defender/i,reason:"Tentativa de desativar Windows Defender"},{pattern:/Stop-Service\s.*WinDefend/i,reason:"Tentativa de parar Windows Defender"},{pattern:/sc\s+(stop|delete|disable)\s+WinDefend/i,reason:"Tentativa de desabilitar Windows Defender via sc"},{pattern:/New-ItemProperty.*DisableAntiSpyware/i,reason:"Tentativa de desativar prote\xE7\xE3o via registro"},{pattern:/Remove-Item\s.*\\Windows\\System32/i,reason:"Tentativa de deletar arquivos do System32"},{pattern:/Remove-Item\s.*\\Windows\\SysWOW64/i,reason:"Tentativa de deletar arquivos do SysWOW64"},{pattern:/Format-Volume/i,reason:"Tentativa de formatar volume"},{pattern:/Clear-Disk/i,reason:"Tentativa de limpar disco"},{pattern:/Stop-Computer/i,reason:"Tentativa de desligar computador"},{pattern:/Restart-Computer/i,reason:"Tentativa de reiniciar computador"},{pattern:/Set-ExecutionPolicy\s+Unrestricted/i,reason:"Tentativa de mudar politica de execu\xE7\xE3o permanentemente"},{pattern:/\bnet\s+user\s+.*\/add/i,reason:"Tentativa de criar usuario"},{pattern:/\bnet\s+localgroup\s+administrators/i,reason:"Tentativa de modificar grupo Administrators"},{pattern:/Invoke-Expression.*DownloadString/i,reason:"Tentativa de execu\xE7\xE3o remota (IEX + download)"},{pattern:/\biex\s*\(\s*\(?\s*New-Object/i,reason:"Tentativa de execu\xE7\xE3o remota (IEX + WebClient)"}],vK=[{pattern:/\\Windows\\System32/i,reason:"Acesso a System32"},{pattern:/\\Windows\\SysWOW64/i,reason:"Acesso a SysWOW64"},{pattern:/HKLM:|HKCU:/i,reason:"Acesso ao registro do Windows"},{pattern:/New-Service|Set-Service|Remove-Service/i,reason:"Manipula\xE7\xE3o de servi\xE7os"},{pattern:/New-NetFirewallRule|Remove-NetFirewallRule/i,reason:"Altera\xE7\xE3o de regras de firewall"},{pattern:/Start-Process\s.*-Verb\s+RunAs/i,reason:"Eleva\xE7\xE3o de privilegios (RunAs)"},{pattern:/Set-ItemProperty\s.*\\CurrentVersion\\Run/i,reason:"Modifica\xE7\xE3o de programas de inicializa\xE7\xE3o"}];function G9($){for(let{pattern:Z,reason:J}of _K)if(Z.test($))return{safe:!1,blocked:!0,reason:J};for(let{pattern:Z,reason:J}of vK)if(Z.test($))return{safe:!1,blocked:!1,reason:J};return{safe:!0,blocked:!1}}async function G7($){if(!I)return{stdout:"",stderr:"Error: PowerShell scripts only available on Windows.",exitCode:1,duration:0};if(!$.trim())return{stdout:"",stderr:"Error: script is empty.",exitCode:1,duration:0};if($.length>u6)return{stdout:"",stderr:`Error: script too long (${$.length} chars, max ${u6}).`,exitCode:1,duration:0};let Z=G9($);if(Z.blocked)return{stdout:"",stderr:`BLOCKED: ${Z.reason}`,exitCode:1,duration:0};let J=bK().slice(0,8),Y=wK(kK(),`smolerclaw-${J}.ps1`);try{AK(Y,$,"utf-8");let Q=await MZ(Y,{timeout:yK});return{stdout:Q.stdout,stderr:Q.timedOut?"Script timeout exceeded":Q.stderr,exitCode:Q.exitCode,duration:Q.duration}}finally{try{if(SK(Y))xK(Y)}catch{}}}async function H7(){if(!I)return{type:"error",text:"Clipboard reading only available on Windows."};let $=await fK();if($.type==="text")return $;return await hK()}async function fK(){let $=["Add-Type -AssemblyName System.Windows.Forms","$clip = [System.Windows.Forms.Clipboard]::GetText()",'if ($clip) { $clip } else { "___EMPTY___" }'].join("; ");try{let Z=await d7($,{timeout:1e4});if(Z.timedOut)return{type:"error",text:"Clipboard read timeout."};let J=Z.stdout.trim();if(J==="___EMPTY___"||!J)return{type:"empty",text:""};return{type:"text",text:J}}catch{return{type:"error",text:"Failed to read clipboard text."}}}async function hK(){try{let Z=await d7(`
160
163
  Add-Type -AssemblyName System.Windows.Forms
161
164
  $img = [System.Windows.Forms.Clipboard]::GetImage()
162
165
  if (-not $img) {
@@ -206,8 +209,8 @@ try {
206
209
  } finally {
207
210
  if (Test-Path $tmpFile) { Remove-Item $tmpFile -Force -ErrorAction SilentlyContinue }
208
211
  }
209
- `],{stdout:"pipe",stderr:"pipe"}),Y=new Promise((K,V)=>{setTimeout(()=>{Z.kill(),V(Error("OCR timeout"))},20000)}),J=(async()=>{let[K]=await Promise.all([new Response(Z.stdout).text(),new Response(Z.stderr).text()]);return await Z.exited,K})(),Q=await Promise.race([J,Y]),X=c1(Q).trim();if(X==="___NO_IMAGE___")return{type:"empty",text:""};if(X==="___NO_TEXT___")return{type:"image",text:"(Imagem detectada no clipboard, mas sem texto reconhecivel)"};if(X.startsWith("___OCR_ERROR___"))return{type:"error",text:`OCR falhou: ${X.replace("___OCR_ERROR___: ","")}`};if(X)return{type:"image",text:`[OCR do clipboard]
210
- ${X}`};return{type:"empty",text:""}}catch{return{type:"error",text:"Failed to perform OCR on clipboard image."}}}async function P0(){if(!A)return"Error: screen context analysis only available on Windows.";let $=`
212
+ `,{timeout:20000});if(Z.timedOut)return{type:"error",text:"OCR timeout."};let J=Z.stdout.trim();if(J==="___NO_IMAGE___")return{type:"empty",text:""};if(J==="___NO_TEXT___")return{type:"image",text:"(Imagem detectada no clipboard, mas sem texto reconhecivel)"};if(J.startsWith("___OCR_ERROR___"))return{type:"error",text:`OCR falhou: ${J.replace("___OCR_ERROR___: ","")}`};if(J)return{type:"image",text:`[OCR do clipboard]
213
+ ${J}`};return{type:"empty",text:""}}catch{return{type:"error",text:"Failed to perform OCR on clipboard image."}}}async function q7(){if(!I)return"Error: screen context analysis only available on Windows.";let $=`
211
214
  $sig = @'
212
215
  [DllImport("user32.dll")]
213
216
  public static extern IntPtr GetForegroundWindow();
@@ -240,66 +243,100 @@ Get-Process | Where-Object { $_.MainWindowTitle -ne '' } |
240
243
  $marker = if ($_.Id -eq $fgPid) { " [ACTIVE]" } else { "" }
241
244
  Write-Output " PID:$($_.Id) | $($_.ProcessName) | $($_.MemMB)MB | $($_.MainWindowTitle)$marker"
242
245
  }
243
- `;try{let Z=Bun.spawn(["powershell","-NoProfile","-NonInteractive","-Command",$],{stdout:"pipe",stderr:"pipe"}),Y=new Promise((V,G)=>{setTimeout(()=>{Z.kill(),G(Error("screen context timeout"))},15000)}),J=(async()=>{let[V,G]=await Promise.all([new Response(Z.stdout).text(),new Response(Z.stderr).text()]);return await Z.exited,{stdout:V,stderr:G}})(),{stdout:Q,stderr:X}=await Promise.race([J,Y]),K=c1(Q).trim();if(!K&&X.trim())return`Error: ${c1(X).trim()}`;return K||"Nenhuma janela visivel encontrada."}catch(Z){return`Error: ${Z instanceof Error?Z.message:String(Z)}`}}function c1($){let Z=$.replace(rJ,"");if(Z.length>MZ)return Z.slice(0,MZ)+`
244
- ... (truncated, ${Z.length} total chars)`;return Z}t();import{existsSync as B$,mkdirSync as ZQ,readFileSync as I0}from"fs";import{join as Q$,basename as YQ}from"path";import{randomUUID as JQ}from"crypto";var d1="",C$=[],N$=[],L$=[],$1=null,OZ=()=>Q$(d1,"projects.json"),EZ=()=>Q$(d1,"work-sessions.json"),jZ=()=>Q$(d1,"opportunities.json"),FZ=()=>Q$(d1,"active-project.txt");function QQ(){P(OZ(),JSON.stringify(C$,null,2))}function B7(){P(EZ(),JSON.stringify(N$,null,2))}function LZ(){P(jZ(),JSON.stringify(L$,null,2))}function XQ(){P(FZ(),$1||"")}function KQ(){C$=U7(OZ,[]),N$=U7(EZ,[]),L$=U7(jZ,[]);let $=FZ();if(B$($))try{$1=I0($,"utf-8").trim()||null}catch{$1=null}}function U7($,Z){let Y=$();if(!B$(Y))return Z;try{return JSON.parse(I0(Y,"utf-8"))}catch(J){if(process.env.DEBUG)console.error(`[projects] Failed to load ${Y}: ${J instanceof Error?J.message:J}`);return Z}}function RZ($){if(d1=$,!B$($))ZQ($,{recursive:!0});KQ()}function N7($,Z,Y="",J=[],Q=[]){let X={id:C7(),name:$.trim(),path:Z.trim(),description:Y.trim(),tags:J.map((K)=>K.trim().toLowerCase()).filter(Boolean),techStack:Q.map((K)=>K.trim().toLowerCase()).filter(Boolean),createdAt:new Date().toISOString(),active:!0};return C$=[...C$,X],QQ(),X}function S0($){let Z=$.toLowerCase().trim();return C$.find((Y)=>Y.id===$)||C$.find((Y)=>Y.name.toLowerCase()===Z)||C$.find((Y)=>Y.name.toLowerCase().includes(Z))||null}function b0($=!1){return($?C$.filter((Y)=>Y.active):[...C$]).sort((Y,J)=>new Date(J.createdAt).getTime()-new Date(Y.createdAt).getTime())}function u1($){let Z=S0($);if(!Z)return null;return $1=Z.id,XQ(),Z}function Z1(){if(!$1)return null;return C$.find(($)=>$.id===$1)||null}function k0($,Z=""){if(!C$.find((Q)=>Q.id===$))return null;zQ($);let J={id:C7(),projectId:$,startedAt:new Date().toISOString(),endedAt:null,durationMinutes:0,notes:Z.trim()};return N$=[...N$,J],B7(),J}function y0($,Z){let Y=N$.find((K)=>K.id===$);if(!Y||Y.endedAt)return null;let J=new Date,Q=new Date(Y.startedAt),X=Math.round((J.getTime()-Q.getTime())/60000);return N$=N$.map((K)=>K.id===$?{...K,endedAt:J.toISOString(),durationMinutes:X,notes:Z?`${K.notes}
245
- ${Z}`.trim():K.notes}:K),B7(),N$.find((K)=>K.id===$)||null}function zQ($){let Z=new Date;N$=N$.map((Y)=>{if(Y.projectId===$&&!Y.endedAt){let J=new Date(Y.startedAt),Q=Math.round((Z.getTime()-J.getTime())/60000);return{...Y,endedAt:Z.toISOString(),durationMinutes:Q}}return Y}),B7()}function Y1($){return N$.find((Z)=>!Z.endedAt&&($?Z.projectId===$:!0))||null}function VQ($,Z,Y){let J=Y||new Date;return N$.filter((Q)=>{if(Q.projectId!==$)return!1;let X=new Date(Q.startedAt);return X>=Z&&X<=J})}async function GQ($,Z="1 day ago"){if(!B$(Q$($,".git")))return null;try{let Y=await w0(["git","log",`--since=${Z}`,"--format=%an|||%s","--no-merges"],$);if(!Y.ok||!Y.stdout.trim())return{commits:0,authors:[],filesChanged:0,insertions:0,deletions:0,topFiles:[],messages:[]};let J=Y.stdout.trim().split(`
246
- `).filter(Boolean),Q=[...new Set(J.map((L)=>L.split("|||")[0]))],X=J.map((L)=>L.split("|||")[1]||"").filter(Boolean),K=await w0(["git","diff","--stat",`--since=${Z}`,"HEAD"],$),V=await w0(["git","log",`--since=${Z}`,"--shortstat","--format=","--no-merges"],$),G=0,H=0,z=0;if(V.ok&&V.stdout.trim())for(let L of V.stdout.trim().split(`
247
- `)){let w=L.match(/(\d+)\s+files?\s+changed/),S=L.match(/(\d+)\s+insertions?/),k=L.match(/(\d+)\s+deletions?/);if(w)G+=parseInt(w[1]);if(S)H+=parseInt(S[1]);if(k)z+=parseInt(k[1])}let M=await w0(["git","log",`--since=${Z}`,"--name-only","--format=","--no-merges"],$),N=new Map;if(M.ok&&M.stdout.trim())for(let L of M.stdout.trim().split(`
248
- `).filter(Boolean))N.set(L,(N.get(L)||0)+1);let E=[...N.entries()].sort((L,w)=>w[1]-L[1]).slice(0,10).map(([L])=>L);return{commits:J.length,authors:Q,filesChanged:G,insertions:H,deletions:z,topFiles:E,messages:X}}catch{return null}}async function w0($,Z){let Y=Bun.spawn($,{stdout:"pipe",stderr:"pipe",cwd:Z}),[J,Q]=await Promise.all([new Response(Y.stdout).text(),new Response(Y.stderr).text()]),X=await Y.exited;return{stdout:J.trim(),stderr:Q.trim(),ok:X===0}}function AZ($,Z,Y,J=[],Q="media",X=null){let K=new Date().toISOString(),V={id:C7(),title:$.trim(),description:Z.trim(),source:Y.trim(),techRequired:J.map((G)=>G.toLowerCase()),priority:Q,status:"nova",deadline:X,createdAt:K,updatedAt:K};return L$=[...L$,V],LZ(),V}function xZ($,Z){if(!L$.find((J)=>J.id===$))return null;return L$=L$.map((J)=>J.id===$?{...J,status:Z,updatedAt:new Date().toISOString()}:J),LZ(),L$.find((J)=>J.id===$)||null}function _0($,Z){let Y=[...L$];if($)Y=Y.filter((J)=>J.status===$);if(Z&&Z.length>0){let J=Z.map((Q)=>Q.toLowerCase());Y=Y.filter((Q)=>Q.techRequired.some((X)=>J.includes(X)))}return Y.sort((J,Q)=>{let X={alta:3,media:2,baixa:1};return(X[Q.priority]||0)-(X[J.priority]||0)})}async function h0($,Z="today",Y="pt"){let J=S0($);if(!J)return null;let X=new Date(new Date);switch(Z){case"today":X.setHours(0,0,0,0);break;case"week":X.setDate(X.getDate()-7);break;case"month":X.setDate(X.getDate()-30);break}let K=Z==="today"?"1 day ago":Z==="week"?"7 days ago":"30 days ago",V=await GQ(J.path,K),G=VQ(J.id,X),H=G.reduce((N,E)=>N+E.durationMinutes,0),z=0;try{let N=Q$(d1,"tasks.json");if(B$(N))z=JSON.parse(I0(N,"utf-8")).filter((L)=>{if(!L.done)return!1;return new Date(L.createdAt)>=X}).length}catch{}let M=WQ(J,Z,V,G,H,z,Y);return{project:J,period:Z,gitSummary:V,sessions:G,totalMinutes:H,completedTasks:z,markdown:M}}function WQ($,Z,Y,J,Q,X,K){let V=K==="pt",G=[],H=new Date,z=H.toLocaleDateString(V?"pt-BR":"en-US",{day:"2-digit",month:"2-digit",year:"numeric"});if(G.push(`# ${V?"Relatorio de Progresso":"Work Progress Report"}`),G.push(`**${V?"Projeto":"Project"}:** ${$.name}`),G.push(`**${V?"Periodo":"Period"}:** ${Z} (${z})`),G.push(`**${V?"Caminho":"Path"}:** \`${$.path}\``),$.techStack.length>0)G.push(`**Tech:** ${$.techStack.join(", ")}`);G.push("");let M=Math.floor(Q/60),N=Q%60;if(G.push(`## ${V?"Tempo Trabalhado":"Time Tracked"}`),G.push(`- **${V?"Total":"Total"}:** ${M}h ${N}m`),G.push(`- **${V?"Sessoes":"Sessions"}:** ${J.length}`),X>0)G.push(`- **${V?"Tarefas concluidas":"Tasks completed"}:** ${X}`);if(G.push(""),Y&&Y.commits>0){if(G.push(`## ${V?"Atividade Git":"Git Activity"}`),G.push(`- **Commits:** ${Y.commits}`),Y.authors.length>0)G.push(`- **${V?"Autores":"Authors"}:** ${Y.authors.join(", ")}`);if(G.push(`- **${V?"Arquivos alterados":"Files changed"}:** ${Y.filesChanged}`),G.push(`- **${V?"Linhas":"Lines"}:** +${Y.insertions} / -${Y.deletions}`),Y.messages.length>0){G.push(""),G.push(`### ${V?"Commits recentes":"Recent commits"}`);for(let E of Y.messages.slice(0,15))G.push(`- ${E}`)}if(Y.topFiles.length>0){G.push(""),G.push(`### ${V?"Arquivos mais alterados":"Most changed files"}`);for(let E of Y.topFiles.slice(0,8))G.push(`- \`${E}\``)}G.push("")}else G.push(`## ${V?"Atividade Git":"Git Activity"}`),G.push(V?"_Nenhum commit no periodo._":"_No commits in this period._"),G.push("");if(J.length>0){G.push(`## ${V?"Sessoes de Trabalho":"Work Sessions"}`);for(let E of J){let L=new Date(E.startedAt).toLocaleTimeString(V?"pt-BR":"en-US",{hour:"2-digit",minute:"2-digit"}),w=E.durationMinutes>0?`${E.durationMinutes}m`:V?"em andamento":"ongoing",S=E.notes?` \u2014 ${E.notes}`:"";G.push(`- ${L} (${w})${S}`)}G.push("")}return G.push("---"),G.push(V?`_Gerado por smolerclaw em ${H.toLocaleString("pt-BR")}_`:`_Generated by smolerclaw at ${H.toLocaleString("en-US")}_`),G.join(`
249
- `)}function f0($){if($.length===0)return"Nenhum projeto cadastrado.";let Z=$.map((Y)=>{let J=Y.id===$1?" [ATIVO]":"",Q=Y.active?"":" (inativo)",X=Y.techStack.length>0?` [${Y.techStack.join(", ")}]`:"";return` ${Y.name}${J}${Q}${X} \u2014 ${Y.path} {${Y.id}}`});return`Projetos (${$.length}):
246
+ `;try{let Z=await z$($,{timeout:15000});if(Z.timedOut)return"Error: screen context analysis timeout";let J=Z.stdout.trim();if(!J&&Z.stderr.trim())return`Error: ${Z.stderr.trim()}`;return J||"Nenhuma janela visivel encontrada."}catch(Z){return`Error: ${Z instanceof Error?Z.message:String(Z)}`}}a();import{existsSync as P$,mkdirSync as gK,readFileSync as U7}from"fs";import{join as q$,basename as mK}from"path";import{randomUUID as pK}from"crypto";var q8="",T$=[],D$=[],b$=[],N4=null,d6=()=>q$(q8,"projects.json"),l6=()=>q$(q8,"work-sessions.json"),o6=()=>q$(q8,"opportunities.json"),a6=()=>q$(q8,"active-project.txt");function cK(){S(d6(),JSON.stringify(T$,null,2))}function q9(){S(l6(),JSON.stringify(D$,null,2))}function n6(){S(o6(),JSON.stringify(b$,null,2))}function uK(){S(a6(),N4||"")}function dK(){T$=H9(d6,[]),D$=H9(l6,[]),b$=H9(o6,[]);let $=a6();if(P$($))try{N4=U7($,"utf-8").trim()||null}catch{N4=null}}function H9($,Z){let J=$();if(!P$(J))return Z;try{return JSON.parse(U7(J,"utf-8"))}catch(Y){if(process.env.DEBUG)console.error(`[projects] Failed to load ${J}: ${Y instanceof Error?Y.message:Y}`);return Z}}function r6($){if(q8=$,!P$($))gK($,{recursive:!0});dK()}function W9($,Z,J="",Y=[],Q=[]){let X={id:U9(),name:$.trim(),path:Z.trim(),description:J.trim(),tags:Y.map((K)=>K.trim().toLowerCase()).filter(Boolean),techStack:Q.map((K)=>K.trim().toLowerCase()).filter(Boolean),createdAt:new Date().toISOString(),active:!0};return T$=[...T$,X],cK(),X}function B7($){let Z=$.toLowerCase().trim();return T$.find((J)=>J.id===$)||T$.find((J)=>J.name.toLowerCase()===Z)||T$.find((J)=>J.name.toLowerCase().includes(Z))||null}function W8($=!1){return($?T$.filter((J)=>J.active):[...T$]).sort((J,Y)=>new Date(Y.createdAt).getTime()-new Date(J.createdAt).getTime())}function U8($){let Z=B7($);if(!Z)return null;return N4=Z.id,uK(),Z}function M4(){if(!N4)return null;return T$.find(($)=>$.id===N4)||null}function N7($,Z=""){if(!T$.find((Q)=>Q.id===$))return null;lK($);let Y={id:U9(),projectId:$,startedAt:new Date().toISOString(),endedAt:null,durationMinutes:0,notes:Z.trim()};return D$=[...D$,Y],q9(),Y}function M7($,Z){let J=D$.find((K)=>K.id===$);if(!J||J.endedAt)return null;let Y=new Date,Q=new Date(J.startedAt),X=Math.round((Y.getTime()-Q.getTime())/60000);return D$=D$.map((K)=>K.id===$?{...K,endedAt:Y.toISOString(),durationMinutes:X,notes:Z?`${K.notes}
247
+ ${Z}`.trim():K.notes}:K),q9(),D$.find((K)=>K.id===$)||null}function lK($){let Z=new Date;D$=D$.map((J)=>{if(J.projectId===$&&!J.endedAt){let Y=new Date(J.startedAt),Q=Math.round((Z.getTime()-Y.getTime())/60000);return{...J,endedAt:Z.toISOString(),durationMinutes:Q}}return J}),q9()}function C4($){return D$.find((Z)=>!Z.endedAt&&($?Z.projectId===$:!0))||null}function oK($,Z,J){let Y=J||new Date;return D$.filter((Q)=>{if(Q.projectId!==$)return!1;let X=new Date(Q.startedAt);return X>=Z&&X<=Y})}async function aK($,Z="1 day ago"){if(!P$(q$($,".git")))return null;try{let J=await W7(["git","log",`--since=${Z}`,"--format=%an|||%s","--no-merges"],$);if(!J.ok||!J.stdout.trim())return{commits:0,authors:[],filesChanged:0,insertions:0,deletions:0,topFiles:[],messages:[]};let Y=J.stdout.trim().split(`
248
+ `).filter(Boolean),Q=[...new Set(Y.map((O)=>O.split("|||")[0]))],X=Y.map((O)=>O.split("|||")[1]||"").filter(Boolean),K=await W7(["git","diff","--stat",`--since=${Z}`,"HEAD"],$),V=await W7(["git","log",`--since=${Z}`,"--shortstat","--format=","--no-merges"],$),G=0,H=0,z=0;if(V.ok&&V.stdout.trim())for(let O of V.stdout.trim().split(`
249
+ `)){let P=O.match(/(\d+)\s+files?\s+changed/),T=O.match(/(\d+)\s+insertions?/),y=O.match(/(\d+)\s+deletions?/);if(P)G+=parseInt(P[1]);if(T)H+=parseInt(T[1]);if(y)z+=parseInt(y[1])}let B=await W7(["git","log",`--since=${Z}`,"--name-only","--format=","--no-merges"],$),U=new Map;if(B.ok&&B.stdout.trim())for(let O of B.stdout.trim().split(`
250
+ `).filter(Boolean))U.set(O,(U.get(O)||0)+1);let M=[...U.entries()].sort((O,P)=>P[1]-O[1]).slice(0,10).map(([O])=>O);return{commits:Y.length,authors:Q,filesChanged:G,insertions:H,deletions:z,topFiles:M,messages:X}}catch{return null}}async function W7($,Z){let J=Bun.spawn($,{stdout:"pipe",stderr:"pipe",cwd:Z}),[Y,Q]=await Promise.all([new Response(J.stdout).text(),new Response(J.stderr).text()]),X=await J.exited;return{stdout:Y.trim(),stderr:Q.trim(),ok:X===0}}function i6($,Z,J,Y=[],Q="media",X=null){let K=new Date().toISOString(),V={id:U9(),title:$.trim(),description:Z.trim(),source:J.trim(),techRequired:Y.map((G)=>G.toLowerCase()),priority:Q,status:"nova",deadline:X,createdAt:K,updatedAt:K};return b$=[...b$,V],n6(),V}function s6($,Z){if(!b$.find((Y)=>Y.id===$))return null;return b$=b$.map((Y)=>Y.id===$?{...Y,status:Z,updatedAt:new Date().toISOString()}:Y),n6(),b$.find((Y)=>Y.id===$)||null}function C7($,Z){let J=[...b$];if($)J=J.filter((Y)=>Y.status===$);if(Z&&Z.length>0){let Y=Z.map((Q)=>Q.toLowerCase());J=J.filter((Q)=>Q.techRequired.some((X)=>Y.includes(X)))}return J.sort((Y,Q)=>{let X={alta:3,media:2,baixa:1};return(X[Q.priority]||0)-(X[Y.priority]||0)})}async function j7($,Z="today",J="pt"){let Y=B7($);if(!Y)return null;let X=new Date(new Date);switch(Z){case"today":X.setHours(0,0,0,0);break;case"week":X.setDate(X.getDate()-7);break;case"month":X.setDate(X.getDate()-30);break}let K=Z==="today"?"1 day ago":Z==="week"?"7 days ago":"30 days ago",V=await aK(Y.path,K),G=oK(Y.id,X),H=G.reduce((U,M)=>U+M.durationMinutes,0),z=0;try{let U=q$(q8,"tasks.json");if(P$(U))z=JSON.parse(U7(U,"utf-8")).filter((O)=>{if(!O.done)return!1;return new Date(O.createdAt)>=X}).length}catch{}let B=nK(Y,Z,V,G,H,z,J);return{project:Y,period:Z,gitSummary:V,sessions:G,totalMinutes:H,completedTasks:z,markdown:B}}function nK($,Z,J,Y,Q,X,K){let V=K==="pt",G=[],H=new Date,z=H.toLocaleDateString(V?"pt-BR":"en-US",{day:"2-digit",month:"2-digit",year:"numeric"});if(G.push(`# ${V?"Relatorio de Progresso":"Work Progress Report"}`),G.push(`**${V?"Projeto":"Project"}:** ${$.name}`),G.push(`**${V?"Periodo":"Period"}:** ${Z} (${z})`),G.push(`**${V?"Caminho":"Path"}:** \`${$.path}\``),$.techStack.length>0)G.push(`**Tech:** ${$.techStack.join(", ")}`);G.push("");let B=Math.floor(Q/60),U=Q%60;if(G.push(`## ${V?"Tempo Trabalhado":"Time Tracked"}`),G.push(`- **${V?"Total":"Total"}:** ${B}h ${U}m`),G.push(`- **${V?"Sessoes":"Sessions"}:** ${Y.length}`),X>0)G.push(`- **${V?"Tarefas concluidas":"Tasks completed"}:** ${X}`);if(G.push(""),J&&J.commits>0){if(G.push(`## ${V?"Atividade Git":"Git Activity"}`),G.push(`- **Commits:** ${J.commits}`),J.authors.length>0)G.push(`- **${V?"Autores":"Authors"}:** ${J.authors.join(", ")}`);if(G.push(`- **${V?"Arquivos alterados":"Files changed"}:** ${J.filesChanged}`),G.push(`- **${V?"Linhas":"Lines"}:** +${J.insertions} / -${J.deletions}`),J.messages.length>0){G.push(""),G.push(`### ${V?"Commits recentes":"Recent commits"}`);for(let M of J.messages.slice(0,15))G.push(`- ${M}`)}if(J.topFiles.length>0){G.push(""),G.push(`### ${V?"Arquivos mais alterados":"Most changed files"}`);for(let M of J.topFiles.slice(0,8))G.push(`- \`${M}\``)}G.push("")}else G.push(`## ${V?"Atividade Git":"Git Activity"}`),G.push(V?"_Nenhum commit no periodo._":"_No commits in this period._"),G.push("");if(Y.length>0){G.push(`## ${V?"Sessoes de Trabalho":"Work Sessions"}`);for(let M of Y){let O=new Date(M.startedAt).toLocaleTimeString(V?"pt-BR":"en-US",{hour:"2-digit",minute:"2-digit"}),P=M.durationMinutes>0?`${M.durationMinutes}m`:V?"em andamento":"ongoing",T=M.notes?` \u2014 ${M.notes}`:"";G.push(`- ${O} (${P})${T}`)}G.push("")}return G.push("---"),G.push(V?`_Gerado por smolerclaw em ${H.toLocaleString("pt-BR")}_`:`_Generated by smolerclaw at ${H.toLocaleString("en-US")}_`),G.join(`
251
+ `)}function O7($){if($.length===0)return"Nenhum projeto cadastrado.";let Z=$.map((J)=>{let Y=J.id===N4?" [ATIVO]":"",Q=J.active?"":" (inativo)",X=J.techStack.length>0?` [${J.techStack.join(", ")}]`:"";return` ${J.name}${Y}${Q}${X} \u2014 ${J.path} {${J.id}}`});return`Projetos (${$.length}):
250
252
  ${Z.join(`
251
- `)}`}function v0($){let Z=$.id===$1?" [ATIVO]":"",Y=[`--- Projeto {${$.id}}${Z} ---`,`Nome: ${$.name}`,`Caminho: ${$.path}`];if($.description)Y.push(`Descricao: ${$.description}`);if($.techStack.length>0)Y.push(`Tech: ${$.techStack.join(", ")}`);if($.tags.length>0)Y.push(`Tags: ${$.tags.map((Q)=>`#${Q}`).join(" ")}`);Y.push(`Criado: ${new Date($.createdAt).toLocaleDateString("pt-BR")}`),Y.push(`Status: ${$.active?"ativo":"inativo"}`);let J=Y1($.id);if(J){let Q=new Date(J.startedAt).toLocaleTimeString("pt-BR",{hour:"2-digit",minute:"2-digit"});Y.push(`Sessao aberta: desde ${Q}`)}return Y.join(`
252
- `)}function g0($){if($.length===0)return"Nenhuma oportunidade encontrada.";let Z=$.map((Y)=>{let J={alta:"!!!",media:"!!",baixa:"!"}[Y.priority],Q=Y.techRequired.length>0?` [${Y.techRequired.join(", ")}]`:"",X=Y.deadline?` \u2014 prazo: ${Y.deadline}`:"";return` ${J} (${Y.status}) ${Y.title}${Q}${X} \u2014 ${Y.source} {${Y.id}}`});return`Oportunidades (${$.length}):
253
+ `)}`}function F7($){let Z=$.id===N4?" [ATIVO]":"",J=[`--- Projeto {${$.id}}${Z} ---`,`Nome: ${$.name}`,`Caminho: ${$.path}`];if($.description)J.push(`Descricao: ${$.description}`);if($.techStack.length>0)J.push(`Tech: ${$.techStack.join(", ")}`);if($.tags.length>0)J.push(`Tags: ${$.tags.map((Q)=>`#${Q}`).join(" ")}`);J.push(`Criado: ${new Date($.createdAt).toLocaleDateString("pt-BR")}`),J.push(`Status: ${$.active?"ativo":"inativo"}`);let Y=C4($.id);if(Y){let Q=new Date(Y.startedAt).toLocaleTimeString("pt-BR",{hour:"2-digit",minute:"2-digit"});J.push(`Sessao aberta: desde ${Q}`)}return J.join(`
254
+ `)}function E7($){if($.length===0)return"Nenhuma oportunidade encontrada.";let Z=$.map((J)=>{let Y={alta:"!!!",media:"!!",baixa:"!"}[J.priority],Q=J.techRequired.length>0?` [${J.techRequired.join(", ")}]`:"",X=J.deadline?` \u2014 prazo: ${J.deadline}`:"";return` ${Y} (${J.status}) ${J.title}${Q}${X} \u2014 ${J.source} {${J.id}}`});return`Oportunidades (${$.length}):
253
255
  ${Z.join(`
254
- `)}`}function DZ(){let $=Z1();if(!$)return"";let Z=Y1($.id),Y=L$.filter((Q)=>Q.status==="nova").length,J=["--- Projetos ---"];if(J.push(`Projeto ativo: ${$.name} (${$.path})`),Z){let Q=new Date(Z.startedAt).toLocaleTimeString("pt-BR",{hour:"2-digit",minute:"2-digit"});J.push(`Sessao aberta desde ${Q}`)}if(Y>0)J.push(`${Y} oportunidade(s) nova(s) pendente(s)`);return J.join(`
255
- `)}function m0($){let Z=C$.find((Q)=>Q.path===$);if(Z)return Z;if(!B$(Q$($,".git")))return null;let Y=[];if(B$(Q$($,"package.json")))try{let Q=JSON.parse(I0(Q$($,"package.json"),"utf-8"));if(Q.dependencies?.typescript||Q.devDependencies?.typescript)Y.push("typescript");if(Q.dependencies?.react)Y.push("react");if(Q.dependencies?.next)Y.push("nextjs");if(Q.dependencies?.vue)Y.push("vue");if(B$(Q$($,"bun.lock")))Y.push("bun");else Y.push("node")}catch{}if(B$(Q$($,"Cargo.toml")))Y.push("rust");if(B$(Q$($,"go.mod")))Y.push("go");if(B$(Q$($,"requirements.txt"))||B$(Q$($,"pyproject.toml")))Y.push("python");let J=YQ($);return N7(J,$,"",[],Y)}function C7(){return JQ().slice(0,8)}var l1=new v2,kZ=[];function yZ($){kZ=$}var n=[{name:"read_file",description:"Read file contents. For large files, use offset/limit to read specific line ranges.",input_schema:{type:"object",properties:{path:{type:"string",description:"File path (relative or absolute)"},offset:{type:"number",description:"Start reading from this line number (1-based). Optional."},limit:{type:"number",description:"Max lines to read. Optional, defaults to 500."}},required:["path"]}},{name:"write_file",description:"Create a new file or completely overwrite an existing file.",input_schema:{type:"object",properties:{path:{type:"string",description:"File path to write"},content:{type:"string",description:"Full file content"}},required:["path","content"]}},{name:"edit_file",description:"Make a precise edit to a file. Finds old_text and replaces it with new_text. The old_text must match exactly (including whitespace). "+"Use this instead of write_file when modifying existing files \u2014 it preserves the rest of the file.",input_schema:{type:"object",properties:{path:{type:"string",description:"File path to edit"},old_text:{type:"string",description:"Exact text to find (must be unique in the file)"},new_text:{type:"string",description:"Replacement text"}},required:["path","old_text","new_text"]}},{name:"search_files",description:"Search file contents using a regex pattern (like grep). Returns matching lines with file paths and line numbers.",input_schema:{type:"object",properties:{pattern:{type:"string",description:"Regex pattern to search for"},path:{type:"string",description:"Directory to search in. Defaults to cwd."},include:{type:"string",description:'Glob pattern to filter files, e.g. "*.ts" or "*.py"'}},required:["pattern"]}},{name:"find_files",description:"Find files by name pattern (glob). Returns matching file paths.",input_schema:{type:"object",properties:{pattern:{type:"string",description:'Glob pattern, e.g. "**/*.ts", "src/**/test*"'},path:{type:"string",description:"Base directory. Defaults to cwd."}},required:["pattern"]}},{name:"list_directory",description:"List files and directories with type indicators and sizes.",input_schema:{type:"object",properties:{path:{type:"string",description:"Directory to list. Defaults to cwd."}},required:[]}},{name:"run_command",description:"Run a shell command. Use for: git operations, running tests, installing packages, building projects, or any CLI task. Commands run in the current working directory.",input_schema:{type:"object",properties:{command:{type:"string",description:"Shell command to execute"},timeout:{type:"number",description:"Timeout in seconds. Default 30, max 120."}},required:["command"]}},{name:"fetch_url",description:"Fetch the content of a URL. Use for: reading documentation, checking APIs, downloading config files, or verifying endpoints. Returns the response body as text. For HTML pages, returns a text-only extraction (no tags).",input_schema:{type:"object",properties:{url:{type:"string",description:"The URL to fetch"},method:{type:"string",description:"HTTP method. Default GET.",enum:["GET","POST","PUT","DELETE","PATCH","HEAD"]},headers:{type:"object",description:"Optional request headers as key-value pairs."},body:{type:"string",description:"Optional request body (for POST/PUT/PATCH)."}},required:["url"]}}],_Z=[{name:"open_application",description:"Open a Windows application by name. Available apps: excel, word, powerpoint, outlook, onenote, teams, edge, chrome, firefox, calculator, notepad, terminal, explorer, vscode, cursor, paint, snip, settings, taskmanager.",input_schema:{type:"object",properties:{name:{type:"string",description:'App name (e.g. "excel", "outlook", "teams")'},argument:{type:"string",description:"Optional argument (e.g. file path to open in the app)"}},required:["name"]}},{name:"open_file_default",description:"Open a file with its default Windows application. E.g. .xlsx opens in Excel, .pdf in the PDF reader.",input_schema:{type:"object",properties:{path:{type:"string",description:"File path to open"}},required:["path"]}},{name:"open_url_browser",description:"Open a URL in the default web browser.",input_schema:{type:"object",properties:{url:{type:"string",description:"URL to open"}},required:["url"]}},{name:"get_running_apps",description:"List currently running Windows applications with memory usage. Read-only, non-destructive.",input_schema:{type:"object",properties:{},required:[]}},{name:"get_system_info",description:"Get Windows system resource summary: CPU, RAM, disk, uptime, battery. Read-only.",input_schema:{type:"object",properties:{},required:[]}},{name:"get_calendar_events",description:"Get today's Outlook calendar events. Read-only. Returns event times and subjects.",input_schema:{type:"object",properties:{},required:[]}},{name:"get_news",description:"Fetch current news headlines. Categories: business, tech, finance, brazil, world, security. Returns headlines grouped by category with source attribution.",input_schema:{type:"object",properties:{category:{type:"string",description:"News category to filter. Omit for all categories.",enum:["business","tech","finance","brazil","world","security"]}},required:[]}}],BQ=[{name:"create_task",description:'Create a task or reminder for the user. If a time is provided, a notification will fire at that time. Supports natural-language times like "18h", "em 30 minutos", "amanha 9h".',input_schema:{type:"object",properties:{title:{type:"string",description:'Task description (e.g. "buscar pao")'},time:{type:"string",description:'When to remind. E.g. "18h", "18:30", "em 30 minutos", "amanha 9h". Optional.'}},required:["title"]}},{name:"complete_task",description:"Mark a task as done by its ID or partial title match.",input_schema:{type:"object",properties:{reference:{type:"string",description:"Task ID or partial title to match"}},required:["reference"]}},{name:"list_tasks",description:"List all pending tasks and reminders. Shows title, due time, and ID.",input_schema:{type:"object",properties:{show_done:{type:"boolean",description:"Include completed tasks. Default false."}},required:[]}}],NQ=[{name:"add_person",description:"Register a person (team member, family, or contact). Groups: equipe (work team), familia (family/home), contato (other contacts).",input_schema:{type:"object",properties:{name:{type:"string",description:"Person name"},group:{type:"string",enum:["equipe","familia","contato"],description:"Group: equipe, familia, or contato"},role:{type:"string",description:'Role or relationship (e.g. "dev frontend", "esposa", "fornecedor"). Optional.'},contact:{type:"string",description:"Phone, email, or other contact info. Optional."}},required:["name","group"]}},{name:"find_person_info",description:"Look up a person by name or ID. Returns their profile, recent interactions, and pending delegated tasks.",input_schema:{type:"object",properties:{name_or_id:{type:"string",description:"Person name (partial match) or ID"}},required:["name_or_id"]}},{name:"list_people",description:"List all registered people, optionally filtered by group.",input_schema:{type:"object",properties:{group:{type:"string",enum:["equipe","familia","contato"],description:"Filter by group. Optional."}},required:[]}},{name:"log_interaction",description:"Log an interaction with a person. Types: conversa, email, reuniao, ligacao, mensagem, delegacao, entrega, outro. Optionally set a follow-up date for a reminder.",input_schema:{type:"object",properties:{person:{type:"string",description:"Person name or ID"},type:{type:"string",enum:["conversa","email","reuniao","ligacao","mensagem","delegacao","entrega","outro"],description:"Interaction type"},summary:{type:"string",description:"What was discussed or happened"},follow_up:{type:"string",description:'When to follow up (e.g. "em 3 dias", "amanha", "25/03"). Optional.'}},required:["person","type","summary"]}},{name:"delegate_to_person",description:"Delegate/assign a task to a person with optional due date. Use to track what you asked someone to do.",input_schema:{type:"object",properties:{person:{type:"string",description:"Person name or ID"},task:{type:"string",description:"What they need to do"},due_date:{type:"string",description:'Due date (e.g. "sexta", "em 3 dias", "28/03"). Optional.'}},required:["person","task"]}},{name:"update_delegation_status",description:"Update the status of a delegated task. Statuses: pendente, em_andamento, concluido.",input_schema:{type:"object",properties:{delegation_id:{type:"string",description:"Delegation ID"},status:{type:"string",enum:["pendente","em_andamento","concluido"],description:"New status"},notes:{type:"string",description:"Optional notes about the update"}},required:["delegation_id","status"]}},{name:"get_people_dashboard",description:"Show the people management dashboard: summary of team/family/contacts, overdue follow-ups, overdue delegations, and recent interactions.",input_schema:{type:"object",properties:{},required:[]}}],CQ=[{name:"save_memo",description:`Save a note/memo to the user's personal knowledge base. Use #hashtags in the content to auto-tag. Use when the user says "anota", "lembra disso", "salva isso", or shares important information.`,input_schema:{type:"object",properties:{content:{type:"string",description:"The memo content. Use #tags for categorization."},tags:{type:"array",items:{type:"string"},description:"Optional additional tags (without #). Auto-extracted #tags from content are always included."}},required:["content"]}},{name:"search_memos",description:`Search the user's memos by keyword or tag. Use #tag to search by tag only. Use plain text for content search. Use when the user asks "o que eu anotei sobre...", "qual era aquela nota...", etc.`,input_schema:{type:"object",properties:{query:{type:"string",description:"Search query. Use #tag for tag search, or plain text for content search."}},required:["query"]}}],MQ={name:"draft_email",description:'Create an email draft and open it in Outlook (Windows) or the default mail client. The user can review and send manually. Use when the user says "escreve um email", "manda um email", "rascunho de email", etc.',input_schema:{type:"object",properties:{to:{type:"string",description:"Recipient email address"},subject:{type:"string",description:"Email subject line"},body:{type:"string",description:"Email body text"},cc:{type:"string",description:"CC recipients (optional)"}},required:["to","subject","body"]}},OQ=[{name:"record_transaction",description:"Record a financial transaction (income or expense). Use when user mentions spending, receiving money, or financial tracking.",input_schema:{type:"object",properties:{type:{type:"string",enum:["entrada","saida"],description:"Transaction type: entrada (income) or saida (expense)"},amount:{type:"number",description:"Amount in BRL (always positive)"},category:{type:"string",description:"Category (e.g. alimentacao, transporte, salario, freelance)"},description:{type:"string",description:"Description of the transaction"}},required:["type","amount","category","description"]}},{name:"financial_summary",description:"Show monthly financial summary with income, expenses, and balance by category.",input_schema:{type:"object",properties:{},required:[]}},{name:"log_decision",description:'Record an important decision with context and rationale. Use when the user says "decidi", "optei por", "escolhi", or discusses a major choice.',input_schema:{type:"object",properties:{title:{type:"string",description:"Decision title (short)"},context:{type:"string",description:"Why this decision was needed"},chosen:{type:"string",description:"What was decided"},alternatives:{type:"string",description:"What was considered but rejected. Optional."},tags:{type:"array",items:{type:"string"},description:"Tags for categorization. Optional."}},required:["title","context","chosen"]}},{name:"search_decisions",description:"Search past decisions by keyword or tag.",input_schema:{type:"object",properties:{query:{type:"string",description:"Search query"}},required:["query"]}}],EQ=[{name:"open_investigation",description:'Start a new investigation to systematically collect evidence. Types: bug (malfunction), feature (material for building), test (test scenarios), audit (code review), incident (runtime issue). Use when the user says "investiga", "analisa", "diagnostica", "verifica", or needs structured evidence collection.',input_schema:{type:"object",properties:{title:{type:"string",description:"Investigation title (short, descriptive)"},type:{type:"string",enum:["bug","feature","test","audit","incident"],description:"Investigation type"},hypothesis:{type:"string",description:"Initial theory or goal to investigate. Optional."},tags:{type:"array",items:{type:"string"},description:"Tags for categorization. Optional."}},required:["title","type"]}},{name:"collect_evidence",description:"Add a piece of evidence to an active investigation. Sources: file (file content), command (command output), log (log entries), diff (code changes), url (web content), observation (manual note). Use after reading files, running commands, or observing behavior to build the investigation record.",input_schema:{type:"object",properties:{investigation:{type:"string",description:"Investigation ID or title (partial match)"},source:{type:"string",enum:["file","command","log","diff","url","observation"],description:"Evidence source type"},label:{type:"string",description:"Short description of this evidence"},content:{type:"string",description:"The evidence data (file content, command output, observation text, etc.)"},path:{type:"string",description:"File path or URL associated with this evidence. Optional."}},required:["investigation","source","label","content"]}},{name:"add_finding",description:"Record a conclusion or insight derived from collected evidence. Severity: critical, high, medium, low, info. Link to evidence IDs that support this finding.",input_schema:{type:"object",properties:{investigation:{type:"string",description:"Investigation ID or title"},severity:{type:"string",enum:["critical","high","medium","low","info"],description:"Finding severity"},title:{type:"string",description:"Finding title (short)"},description:{type:"string",description:"Detailed description of the finding"},evidence_ids:{type:"array",items:{type:"string"},description:"IDs of evidence supporting this finding. Optional."}},required:["investigation","severity","title","description"]}},{name:"close_investigation",description:"Close an investigation with a summary and recommendations. Use after all evidence is collected and findings are recorded.",input_schema:{type:"object",properties:{investigation:{type:"string",description:"Investigation ID or title"},summary:{type:"string",description:"Final summary of the investigation"},recommendations:{type:"string",description:"Action items and next steps. Optional."}},required:["investigation","summary"]}},{name:"investigation_status",description:"View the current state of an investigation: evidence collected, findings, and progress. Use to check progress or review before closing.",input_schema:{type:"object",properties:{investigation:{type:"string",description:"Investigation ID or title"}},required:["investigation"]}},{name:"investigation_report",description:"Generate a full structured report (markdown) for an investigation. Includes all evidence, findings, summary, and recommendations.",input_schema:{type:"object",properties:{investigation:{type:"string",description:"Investigation ID or title"}},required:["investigation"]}},{name:"list_investigations",description:"List all investigations, optionally filtered by status or type.",input_schema:{type:"object",properties:{status:{type:"string",enum:["aberta","em_andamento","concluida","arquivada"],description:"Filter by status. Optional."},type:{type:"string",enum:["bug","feature","test","audit","incident"],description:"Filter by type. Optional."},query:{type:"string",description:"Search by keyword. Optional."}},required:[]}}],jQ=[{name:"save_material",description:`Save reference material to the assistant's persistent knowledge base. Materials are categorized documents, guides, procedures, or reference info that persists across sessions. Use when the user says "salva esse material", "guarda essa referencia", "adiciona ao conhecimento", etc. Categories: procedimento, referencia, guia, template, contato, projeto, tecnico, geral.`,input_schema:{type:"object",properties:{title:{type:"string",description:"Title of the material"},content:{type:"string",description:"Full content. Use #tags for categorization."},category:{type:"string",description:"Category (e.g. procedimento, referencia, guia, template, contato, projeto, tecnico, geral). Default: geral."},tags:{type:"array",items:{type:"string"},description:"Optional additional tags (without #)."}},required:["title","content"]}},{name:"search_materials",description:"Search the assistant's material knowledge base by keyword, tag (#tag), or category (@category). Use when answering questions that may be covered by saved materials, or when user asks about reference docs.",input_schema:{type:"object",properties:{query:{type:"string",description:"Search query. Use #tag for tag search, @category for category search, or plain text."}},required:["query"]}},{name:"list_materials",description:"List all saved materials, optionally filtered by category.",input_schema:{type:"object",properties:{category:{type:"string",description:"Filter by category. Optional."},limit:{type:"number",description:"Max results. Default 30."}},required:[]}},{name:"update_material",description:"Update an existing material by ID. Can change title, content, category, or tags.",input_schema:{type:"object",properties:{id:{type:"string",description:"Material ID"},title:{type:"string",description:"New title. Optional."},content:{type:"string",description:"New content. Optional."},category:{type:"string",description:"New category. Optional."},tags:{type:"array",items:{type:"string"},description:"New tags. Optional."}},required:["id"]}},{name:"delete_material",description:"Delete a material by ID.",input_schema:{type:"object",properties:{id:{type:"string",description:"Material ID"}},required:["id"]}}],FQ=[{name:"vault_status",description:'Show the integrity status of all data files: checksum verification, sizes, last backup time. Use when the user asks about data health, backup status, or says "esta tudo salvo?", "meus dados estao seguros?".',input_schema:{type:"object",properties:{},required:[]}},{name:"vault_backup",description:'Perform a manual backup of all data to the shadow backup repository. Use when the user says "faz backup", "salva tudo", "sync".',input_schema:{type:"object",properties:{message:{type:"string",description:"Optional commit message for the backup."}},required:[]}},{name:"sync_cloud_context",description:'Push the backup to a configured remote repository (if set up). Use when the user says "manda pro cloud", "sync remoto", "push backup".',input_schema:{type:"object",properties:{},required:[]}},{name:"vault_init_backup",description:"Initialize the shadow backup system (creates a local git repo for data versioning). Run once to enable automatic backups.",input_schema:{type:"object",properties:{},required:[]}}],LQ=[{name:"set_active_project",description:'Set which project the assistant should focus on. Auto-detects from the current directory if not registered. Use when the user says "estou trabalhando no projeto X", "muda pro projeto Y", or starts work.',input_schema:{type:"object",properties:{name_or_id:{type:"string",description:'Project name, ID, or "auto" to detect from current directory.'}},required:["name_or_id"]}},{name:"report_work_progress",description:'Generate a work progress report with git commits, time tracked, and tasks completed. Outputs a structured Markdown document. Use when the user says "relatorio", "como estou no projeto", "resumo do trabalho", "progress report".',input_schema:{type:"object",properties:{project:{type:"string",description:"Project name/ID. Defaults to active project."},period:{type:"string",enum:["today","week","month"],description:"Report period. Default: today."},lang:{type:"string",enum:["pt","en"],description:"Report language. Default: pt."},save_to_file:{type:"string",description:"Optional file path to save the report. If omitted, returns as text."}},required:[]}},{name:"manage_work_session",description:'Start or stop a work session timer for time tracking. Use when the user says "comecei a trabalhar", "parei de trabalhar", "timer", etc.',input_schema:{type:"object",properties:{action:{type:"string",enum:["start","stop","status"],description:"Start, stop, or check session status."},notes:{type:"string",description:"Optional notes for the session."}},required:["action"]}},{name:"add_project",description:"Register a new project for tracking. Use when the user mentions a new project or wants to track a directory.",input_schema:{type:"object",properties:{name:{type:"string",description:"Project name"},path:{type:"string",description:"Filesystem path to the project root"},description:{type:"string",description:"Brief project description. Optional."},tech_stack:{type:"array",items:{type:"string"},description:"Technologies used. Optional."},tags:{type:"array",items:{type:"string"},description:"Tags for categorization. Optional."}},required:["name","path"]}},{name:"list_projects",description:"List all registered projects with their status and tech stack.",input_schema:{type:"object",properties:{active_only:{type:"boolean",description:"Show only active projects. Default false."}},required:[]}},{name:"fetch_opportunities",description:'List pending opportunities/tasks filtered by tech stack or priority. Use when the user asks "tem alguma demanda nova?", "oportunidades", "o que tem pra fazer?".',input_schema:{type:"object",properties:{status:{type:"string",enum:["nova","em_analise","aceita","recusada","concluida"],description:"Filter by status. Optional."},tech:{type:"array",items:{type:"string"},description:"Filter by required tech. Optional."}},required:[]}},{name:"add_opportunity",description:"Register a new task/opportunity/demand for tracking. Use when the user mentions a potential project, job lead, or new demand.",input_schema:{type:"object",properties:{title:{type:"string",description:"Opportunity title"},description:{type:"string",description:"Details about the opportunity"},source:{type:"string",description:'Where this came from (e.g. "LinkedIn", "email", "contato direto")'},tech_required:{type:"array",items:{type:"string"},description:"Technologies required. Optional."},priority:{type:"string",enum:["alta","media","baixa"],description:"Priority level. Default: media."},deadline:{type:"string",description:'Deadline if any (e.g. "30/04", "em 2 semanas"). Optional.'}},required:["title","description","source"]}},{name:"update_opportunity_status",description:"Update the status of an opportunity.",input_schema:{type:"object",properties:{id:{type:"string",description:"Opportunity ID"},status:{type:"string",enum:["nova","em_analise","aceita","recusada","concluida"],description:"New status"}},required:["id","status"]}}],RQ=[{name:"execute_powershell_script",description:"Execute a PowerShell script on the local machine. The script runs in a temp .ps1 file with -ExecutionPolicy Bypass (scoped). Safety guards block dangerous operations (Defender, System32, formatting). Returns stdout, stderr, exit code, and duration. Use for: automation, system queries, batch operations, registry reads, scheduled tasks.",input_schema:{type:"object",properties:{script:{type:"string",description:"The PowerShell script to execute. Multi-line supported."}},required:["script"]}},{name:"analyze_screen_context",description:"Get detailed information about the user's current screen: foreground window (what they are looking at), all visible windows with PIDs, memory usage, and titles. Use to understand the user's current context. Read-only.",input_schema:{type:"object",properties:{},required:[]}},{name:"read_clipboard_content",description:'Read the current clipboard content. Auto-detects text or image. For images, performs OCR using Windows.Media.Ocr to extract text. Use when the user says "le o que copiei", "o que tem no clipboard", "cola isso", etc. Read-only.',input_schema:{type:"object",properties:{},required:[]}}],AQ=[{name:"manage_news_feeds",description:'Manage RSS/Atom news feed sources. Actions: add (add custom feed), remove (remove custom feed), disable (disable a built-in feed), enable (re-enable a disabled built-in), list (show all feeds). Use when the user says "adiciona essa fonte", "remove o feed", "desativa o TechCrunch", "mostra as fontes".',input_schema:{type:"object",properties:{action:{type:"string",enum:["add","remove","disable","enable","list"],description:"Action to perform."},name:{type:"string",description:"Feed name (for add) or name/URL reference (for remove/disable/enable)."},url:{type:"string",description:"RSS/Atom feed URL (required for add)."},category:{type:"string",description:"Category for the feed (required for add). E.g. tech, finance, ai, devops."}},required:["action"]}}],xQ=[{name:"recall_memory",description:'Search the local RAG memory index for relevant information from memos, materials, decisions, and past sessions. Use when the user asks "o que eu sei sobre...", "lembra de...", "busca na memoria...", or needs context from past interactions. Returns the top 3 most relevant text fragments.',input_schema:{type:"object",properties:{query:{type:"string",description:"Natural language query to search the memory index"},top_k:{type:"number",description:"Number of results to return. Default 3, max 10."}},required:["query"]}},{name:"index_memory",description:"Build or update the local RAG memory index. Indexes memos, materials, decisions, and sessions. "+'Incremental \u2014 only re-indexes changed data. Use when the user says "atualiza a memoria", "reindexa", or after adding many new items.',input_schema:{type:"object",properties:{},required:[]}},{name:"memory_status",description:"Show stats about the local RAG memory index: number of indexed chunks, sources, and last build time.",input_schema:{type:"object",properties:{},required:[]}}],DQ=[{name:"archive_session",description:'Archive a conversation session. Archived sessions are preserved but removed from the active list. Use "all" as name to archive all sessions except the current one.',input_schema:{type:"object",properties:{name:{type:"string",description:'Session name to archive, or "all" to archive all except current.'}},required:["name"]}},{name:"unarchive_session",description:"Restore an archived session back to the active sessions list.",input_schema:{type:"object",properties:{name:{type:"string",description:"Archived session name to restore."}},required:["name"]}},{name:"list_archived_sessions",description:"List all archived conversation sessions with message count and last update.",input_schema:{type:"object",properties:{},required:[]}}],TQ=_Z.find(($)=>$.name==="get_news"),TZ=!1,h$=null;function hZ($){h$=$}function fZ(){if(TZ)return;if(TZ=!0,A)n.push(..._Z),n.push(...RQ);else n.push(TQ);n.push(...BQ),n.push(...NQ),n.push(...CQ),n.push(MQ),n.push(...OQ),n.push(...EQ),n.push(...jQ),n.push(...xQ),n.push(...AQ),n.push(...FQ),n.push(...LQ),n.push(...DQ)}var d0=50000;async function E7($,Z){try{switch($){case"read_file":return PQ(Z);case"write_file":return wQ(Z);case"edit_file":return IQ(Z);case"search_files":return await SQ(Z);case"find_files":return await yQ(Z);case"list_directory":return _Q(Z);case"run_command":return await hQ(Z);case"fetch_url":return await fQ(Z);case"open_application":return await S1(Z.name,Z.argument);case"open_file_default":return await m8(Z.path);case"open_url_browser":return await b1(Z.url);case"get_running_apps":return await c8();case"get_system_info":return await k1();case"get_calendar_events":return await i$();case"get_news":{let Y=Z.category;return await o$(Y?[Y]:void 0)}case"create_task":{let Y=Z.title;if(!Y?.trim())return"Error: title is required.";let J=Z.time,Q=J?c4(J):void 0,X=r8(Y,Q||void 0),K=Q?` \u2014 lembrete: ${Q.toLocaleTimeString("pt-BR",{hour:"2-digit",minute:"2-digit"})}`:"";return`Tarefa criada: "${X.title}"${K} [${X.id}]`}case"complete_task":{let Y=Z.reference;if(!Y?.trim())return"Error: reference is required.";let J=s8(Y);return J?`Concluida: "${J.title}"`:`Tarefa nao encontrada: "${Y}"`}case"list_tasks":{let Y=Z.show_done||!1,J=a$(Y);return q1(J)}case"add_person":{let Y=Z.name;if(!Y?.trim())return"Error: name is required.";let J=Z.group;if(!["equipe","familia","contato"].includes(J))return"Error: group must be equipe, familia, or contato.";let X=V0(Y,J,Z.role,Z.contact);return`Pessoa adicionada: ${X.name} (${J}) [${X.id}]`}case"find_person_info":{let Y=Z.name_or_id;if(!Y?.trim())return"Error: name_or_id is required.";let J=t$(Y);if(!J)return`Pessoa nao encontrada: "${Y}"`;return q0(J)}case"list_people":{let Y=Z.group,J=G0(Y);return H0(J)}case"log_interaction":{let Y=Z.person;if(!Y?.trim())return"Error: person is required.";let{type:J,summary:Q}=Z;if(!Q?.trim())return"Error: summary is required.";let X=Z.follow_up,K=X?IZ(X):void 0;if(!e9(Y,J,Q,K||void 0))return`Pessoa nao encontrada: "${Y}"`;let G=K?` \u2014 follow-up: ${K.toLocaleDateString("pt-BR")}`:"";return`Interacao registrada: ${J} com ${Y}${G}`}case"delegate_to_person":{let Y=Z.person;if(!Y?.trim())return"Error: person is required.";let J=Z.task;if(!J?.trim())return"Error: task is required.";let Q=Z.due_date,X=Q?IZ(Q):void 0,K=W0(Y,J,X||void 0);if(!K)return`Pessoa nao encontrada: "${Y}"`;let V=X?` \u2014 prazo: ${X.toLocaleDateString("pt-BR")}`:"";return`Tarefa delegada para ${Y}: "${J}"${V} [${K.id}]`}case"update_delegation_status":{let Y=Z.delegation_id;if(!Y?.trim())return"Error: delegation_id is required.";let J=Z.status,Q=$Z(Y,J,Z.notes);if(!Q)return`Delegacao nao encontrada: "${Y}"`;return`Delegacao atualizada: "${Q.task}" -> ${J}`}case"get_people_dashboard":return N0();case"save_memo":{let Y=Z.content;if(!Y?.trim())return"Error: content is required.";let J=Z.tags||[],Q=t8(Y,J);return`Memo salvo${Q.tags.length>0?` [${Q.tags.map((K)=>"#"+K).join(" ")}]`:""} {${Q.id}}`}case"search_memos":{let Y=Z.query;if(!Y?.trim())return U1(d4());let J=e8(Y);return U1(J)}case"record_transaction":{let{type:Y,amount:J,category:Q,description:X}=Z;if(!Y||!J||!Q||!X)return"Error: all fields required.";let K=u4(Y,J,Q,X);return`${K.type==="entrada"?"+":"-"} R$ ${K.amount.toFixed(2)} (${K.category}) \u2014 ${K.description} [${K.id}]`}case"financial_summary":return Y0();case"log_decision":{let{title:Y,context:J,chosen:Q}=Z;if(!Y||!J||!Q)return"Error: title, context, and chosen are required.";let X=d9(Y,J,Q,Z.alternatives,Z.tags||[]);return`Decisao registrada: "${X.title}" {${X.id}}`}case"search_decisions":{let Y=Z.query;if(!Y?.trim())return f1(Q0());return f1(J0(Y))}case"open_investigation":{let Y=Z.title;if(!Y?.trim())return"Error: title is required.";let J=Z.type;if(!["bug","feature","test","audit","incident"].includes(J))return"Error: type must be bug, feature, test, audit, or incident.";let X=a2(Y,J,Z.hypothesis,Z.tags||[]);return`Investigacao aberta: "${X.title}" (${X.type}) {${X.id}}`}case"collect_evidence":{let Y=Z.investigation;if(!Y?.trim())return"Error: investigation is required.";let{source:J,label:Q,content:X}=Z;if(!Q?.trim()||!X?.trim())return"Error: label and content are required.";let K=r2(Y,J,Q,X,Z.path);if(!K)return`Investigacao nao encontrada: "${Y}"`;return`Evidencia coletada: [${K.id}] ${K.source}: ${K.label}`}case"add_finding":{let Y=Z.investigation;if(!Y?.trim())return"Error: investigation is required.";let{severity:J,title:Q,description:X}=Z;if(!Q?.trim()||!X?.trim())return"Error: title and description are required.";let K=Z.evidence_ids||[],V=s2(Y,J,Q,X,K);if(!V)return`Investigacao nao encontrada: "${Y}"`;return`Conclusao registrada: [${V.severity.toUpperCase()}] ${V.title} {${V.id}}`}case"close_investigation":{let Y=Z.investigation;if(!Y?.trim())return"Error: investigation is required.";let J=Z.summary;if(!J?.trim())return"Error: summary is required.";let Q=t2(Y,J,Z.recommendations);if(!Q)return`Investigacao nao encontrada: "${Y}"`;return`Investigacao concluida: "${Q.title}" \u2014 ${Q.evidence.length} evidencias, ${Q.findings.length} conclusoes`}case"investigation_status":{let Y=Z.investigation;if(!Y?.trim())return"Error: investigation is required.";let J=e2(Y);if(!J)return`Investigacao nao encontrada: "${Y}"`;return J7(J)}case"investigation_report":{let Y=Z.investigation;if(!Y?.trim())return"Error: investigation is required.";let J=Y7(Y);if(!J)return`Investigacao nao encontrada: "${Y}"`;return J}case"list_investigations":{let Y=Z.query;if(Y?.trim())return K0(Z7(Y));let{status:J,type:Q}=Z;return K0($7(J,Q))}case"draft_email":{let{to:Y,subject:J,body:Q}=Z;if(!Y?.trim()||!J?.trim()||!Q?.trim())return"Error: to, subject, and body are required.";let X={to:Y,subject:J,body:Q,cc:Z.cc},K=Z0(X),V=await $0(X);return`${K}
256
+ `)}`}function R7(){let $=M4();if(!$)return"";let Z=C4($.id),J=b$.filter((Q)=>Q.status==="nova").length,Y=["--- Projetos ---"];if(Y.push(`Projeto ativo: ${$.name} (${$.path})`),Z){let Q=new Date(Z.startedAt).toLocaleTimeString("pt-BR",{hour:"2-digit",minute:"2-digit"});Y.push(`Sessao aberta desde ${Q}`)}if(J>0)Y.push(`${J} oportunidade(s) nova(s) pendente(s)`);return Y.join(`
257
+ `)}function L7($){let Z=T$.find((Q)=>Q.path===$);if(Z)return Z;if(!P$(q$($,".git")))return null;let J=[];if(P$(q$($,"package.json")))try{let Q=JSON.parse(U7(q$($,"package.json"),"utf-8"));if(Q.dependencies?.typescript||Q.devDependencies?.typescript)J.push("typescript");if(Q.dependencies?.react)J.push("react");if(Q.dependencies?.next)J.push("nextjs");if(Q.dependencies?.vue)J.push("vue");if(P$(q$($,"bun.lock")))J.push("bun");else J.push("node")}catch{}if(P$(q$($,"Cargo.toml")))J.push("rust");if(P$(q$($,"go.mod")))J.push("go");if(P$(q$($,"requirements.txt"))||P$(q$($,"pyproject.toml")))J.push("python");let Y=mK($);return W9(Y,$,"",[],J)}function U9(){return pK().slice(0,8)}a();e();import{existsSync as M9,mkdirSync as rK,readFileSync as $J}from"fs";import{join as ZJ,basename as iK}from"path";var JJ=2,YJ="pitwall-baselines.json",sK=0.1,tK=0.05,eK=5000000,$z=512000,t6=2048,Zz=120000,T7="",t=[];function QJ($){if(T7=$,!M9($))rK($,{recursive:!0});Gz()}async function e6($,Z){let Y=[...l4(),$],Q=process.cpuUsage(),X=Bun.nanoseconds(),K=Bun.spawn(Y,{stdout:"pipe",stderr:"pipe",cwd:Z}),V=setTimeout(()=>K.kill(),Zz),G=K.pid,H=Jz(G),[,z]=await Promise.all([new Response(K.stdout).text(),new Response(K.stderr).text()]),B=await K.exited;clearTimeout(V);let U=Bun.nanoseconds(),M=process.cpuUsage(Q),O=await H,P=z.length>t6?`...${z.slice(-t6)}`:z;return{durationNs:U-X,peakMemoryBytes:O,cpuUserUs:M.user,cpuSystemUs:M.system,exitCode:B,stderr:P.trim()}}async function C9($,Z={}){let J=Z.cwd||process.cwd(),Y=Math.min(Math.max(Z.iterations||1,1),10),Q=Z.scriptKey||Vz($);if(Z.warmup&&Y>1)await e6($,J);let X=[];for(let z=0;z<Y;z++)X.push(await e6($,J));let K=X[X.length-1],V=X.map((z)=>z.durationNs),G={durationNs:B9(V),peakMemoryBytes:Math.max(...X.map((z)=>z.peakMemoryBytes)),cpuUserUs:B9(X.map((z)=>z.cpuUserUs)),cpuSystemUs:B9(X.map((z)=>z.cpuSystemUs))},H=Y>1?{min:Math.min(...V),max:Math.max(...V),median:G.durationNs,stddev:zz(V)}:null;return{scriptKey:Q,command:$,metrics:G,spread:H,exitCode:K.exitCode,stderr:K.stderr,timestamp:new Date().toISOString(),iterations:Y}}async function Jz($){try{if(I){let Z=`(Get-Process -Id ${$} -ErrorAction SilentlyContinue).PeakWorkingSet64`,J=Bun.spawn(["powershell","-NoProfile","-NonInteractive","-Command",Z],{stdout:"pipe",stderr:"pipe"}),Y=setTimeout(()=>J.kill(),5000),Q=await new Response(J.stdout).text();await J.exited,clearTimeout(Y);let X=parseInt(Q.trim(),10);if(!isNaN(X)&&X>0)return X}else{let Z=`/proc/${$}/status`;if(M9(Z)){let Y=$J(Z,"utf-8").match(/VmPeak:\s+(\d+)\s+kB/);if(Y)return parseInt(Y[1],10)*1024}}}catch{}return process.memoryUsage().rss}function XJ($,Z=[]){let J=t.find((X)=>X.scriptKey===$.scriptKey),Y=new Date().toISOString();if(J){let X=J.runs+1,K={durationNs:Math.round((J.metrics.durationNs*J.runs+$.metrics.durationNs)/X),peakMemoryBytes:Math.round((J.metrics.peakMemoryBytes*J.runs+$.metrics.peakMemoryBytes)/X),cpuUserUs:Math.round((J.metrics.cpuUserUs*J.runs+$.metrics.cpuUserUs)/X),cpuSystemUs:Math.round((J.metrics.cpuSystemUs*J.runs+$.metrics.cpuSystemUs)/X)},V={...J,metrics:K,spread:$.spread||J.spread,updatedAt:Y,runs:X,tags:[...new Set([...J.tags,...Z])]};return t=t.map((G)=>G.scriptKey===$.scriptKey?V:G),I7(),V}let Q={scriptKey:$.scriptKey,metrics:{...$.metrics},spread:$.spread,createdAt:Y,updatedAt:Y,runs:1,tags:Z};return t=[...t,Q],I7(),Q}function Yz($){return t.find((Z)=>Z.scriptKey===$)||null}function KJ(){return[...t].sort(($,Z)=>$.scriptKey.localeCompare(Z.scriptKey))}function j9($){let Z=t.findIndex((J)=>J.scriptKey===$);if(Z===-1)return!1;return t=[...t.slice(0,Z),...t.slice(Z+1)],I7(),!0}function zJ($,Z=[]){j9($.scriptKey);let J=new Date().toISOString(),Y={scriptKey:$.scriptKey,metrics:{...$.metrics},spread:$.spread,createdAt:J,updatedAt:J,runs:1,tags:Z};return t=[...t,Y],I7(),Y}function O9($){let Z=Yz($.scriptKey),J=[];if(Z)J.push(P7("duration",Z.metrics.durationNs,$.metrics.durationNs,eK),P7("memory",Z.metrics.peakMemoryBytes,$.metrics.peakMemoryBytes,$z),P7("cpu_user",Z.metrics.cpuUserUs,$.metrics.cpuUserUs,0),P7("cpu_system",Z.metrics.cpuSystemUs,$.metrics.cpuSystemUs,0));let Y=J.some((X)=>X.severity==="regression"),Q=Kz($,Z,J,Y);return{run:$,baseline:Z,alerts:J,hasRegression:Y,markdown:Q}}function P7($,Z,J,Y){let Q=J-Z;if(Z===0||Math.abs(Q)<Y)return{metric:$,baselineValue:Z,currentValue:J,deltaPercent:0,absoluteDelta:Q,severity:"ok"};let X=Q/Z,K="ok";if(X>sK)K="regression";else if(X>tK)K="warning";return{metric:$,baselineValue:Z,currentValue:J,deltaPercent:Math.round(X*1e4)/100,absoluteDelta:Q,severity:K}}function r$($){if($<1000)return`${$}ns`;if($<1e6)return`${($/1000).toFixed(1)}us`;if($<1e9)return`${($/1e6).toFixed(2)}ms`;return`${($/1e9).toFixed(3)}s`}function N9($){if($<1024)return`${$}B`;if($<1048576)return`${($/1024).toFixed(1)}KB`;if($<1073741824)return`${($/1048576).toFixed(1)}MB`;return`${($/1073741824).toFixed(2)}GB`}function D7($){if($<1000)return`${$}us`;if($<1e6)return`${($/1000).toFixed(2)}ms`;return`${($/1e6).toFixed(2)}s`}function Qz($){switch($){case"ok":return"[OK]";case"warning":return"[!]";case"regression":return"[REGRESSAO]"}}function Xz($){switch($){case"duration":return"Duracao";case"memory":return"Memoria (peak)";case"cpu_user":return"CPU (user)";case"cpu_system":return"CPU (sys)";default:return $}}function Kz($,Z,J,Y){let Q=[];if(Y)Q.push("=== PIT WALL: REGRESSAO DETECTADA ===");else Q.push("=== Pit Wall: Relatorio de Performance ===");if(Q.push(`Script: ${$.scriptKey}`),Q.push(`Comando: ${$.command}`),Q.push(`Execucoes: ${$.iterations}`),$.exitCode!==0)Q.push(`Exit code: ${$.exitCode} (FALHA)`);if(Q.push(""),Q.push("--- Metricas Atuais ---"),Q.push(` Duracao: ${r$($.metrics.durationNs)}`),Q.push(` Memoria: ${N9($.metrics.peakMemoryBytes)}`),Q.push(` CPU (user): ${D7($.metrics.cpuUserUs)}`),Q.push(` CPU (sys): ${D7($.metrics.cpuSystemUs)}`),$.spread){Q.push(""),Q.push("--- Dispersao ---"),Q.push(` Min: ${r$($.spread.min)}`),Q.push(` Max: ${r$($.spread.max)}`),Q.push(` Mediana: ${r$($.spread.median)}`),Q.push(` Stddev: ${r$($.spread.stddev)}`);let X=$.spread.median>0?($.spread.stddev/$.spread.median*100).toFixed(1):"0";if(Q.push(` CV: ${X}%`),parseFloat(X)>15)Q.push(" (!) Alta variancia \u2014 resultados podem ser inst\xE1veis")}if($.exitCode!==0&&$.stderr)Q.push(""),Q.push("--- Stderr ---"),Q.push($.stderr.slice(0,500));if(Q.push(""),!Z)return Q.push("Nenhum baseline salvo para este script."),Q.push("Use pitwall_save_baseline para definir o baseline atual."),Q.join(`
258
+ `);Q.push(`--- Baseline (${Z.runs} run${Z.runs>1?"s":""}, atualizado ${VJ(Z.updatedAt)}) ---`),Q.push(` Duracao: ${r$(Z.metrics.durationNs)}`),Q.push(` Memoria: ${N9(Z.metrics.peakMemoryBytes)}`),Q.push(` CPU (user): ${D7(Z.metrics.cpuUserUs)}`),Q.push(` CPU (sys): ${D7(Z.metrics.cpuSystemUs)}`),Q.push(""),Q.push("--- Comparacao ---");for(let X of J){let K=X.deltaPercent>=0?"+":"",V=Xz(X.metric);Q.push(` ${Qz(X.severity)} ${V}: ${K}${X.deltaPercent}%`)}if(Q.push(""),Y)Q.push("*** ALERTA: Regressao de performance > 10% detectada! ***"),Q.push("Revise as mudancas recentes no codigo.");else if(J.some((X)=>X.severity==="warning"))Q.push("Atencao: algumas metricas estao proximas do limite (5-10%).");else Q.push("Performance dentro do esperado.");return Q.join(`
259
+ `)}function VJ($){let Z=Date.now()-new Date($).getTime(),J=Math.floor(Z/60000);if(J<60)return`ha ${J}min`;let Y=Math.floor(J/60);if(Y<24)return`ha ${Y}h`;return`ha ${Math.floor(Y/24)}d`}function GJ($){if($.length===0)return"Nenhum baseline salvo no Pit Wall.";let Z=["=== Pit Wall: Baselines ===",""];for(let J of $){let Y=J.tags.length>0?` [${J.tags.join(", ")}]`:"",Q=VJ(J.updatedAt);if(Z.push(` ${J.scriptKey}`),Z.push(` Duracao: ${r$(J.metrics.durationNs)} | Memoria: ${N9(J.metrics.peakMemoryBytes)} | ${J.runs} runs | ${Q}${Y}`),J.spread){let X=J.spread.median>0?(J.spread.stddev/J.spread.median*100).toFixed(1):"0";Z.push(` Spread: ${r$(J.spread.min)} ~ ${r$(J.spread.max)} (CV ${X}%)`)}Z.push("")}return Z.join(`
260
+ `)}function B9($){if($.length===0)return 0;let Z=[...$].sort((Y,Q)=>Y-Q),J=Math.floor(Z.length/2);return Z.length%2!==0?Z[J]:Math.round((Z[J-1]+Z[J])/2)}function zz($){if($.length<2)return 0;let Z=$.reduce((Y,Q)=>Y+Q,0)/$.length,J=$.reduce((Y,Q)=>Y+(Q-Z)**2,0)/($.length-1);return Math.round(Math.sqrt(J))}function Vz($){let Z=$.trim().split(/\s+/);if(Z.length>=3&&["bun","npm","yarn","pnpm"].includes(Z[0])&&Z[1]==="run")return Z[2];if(Z.length>=2&&["bun","npm","yarn","pnpm"].includes(Z[0]))return Z[1];return iK(Z[0])}function Gz(){let $=ZJ(T7,YJ);if(!M9($)){t=[];return}try{let Z=JSON.parse($J($,"utf-8"));if(Z.version!==JJ&&Z.version!==1){t=[];return}t=(Z.baselines||[]).map(Hz)}catch{t=[]}}function Hz($){let{durationMs:Z,...J}=$.metrics;return{...$,metrics:J,spread:$.spread||null}}function I7(){if(!T7)return;let $=ZJ(T7,YJ);S($,JSON.stringify({baselines:t,version:JJ},null,2))}e();import{readdirSync as qz,readFileSync as Wz,lstatSync as Uz}from"fs";import{join as Bz,resolve as L0,relative as F9,dirname as Nz,extname as Mz}from"path";var Cz=[".ts",".tsx",".mts",".cts"],jz=[".ts",".tsx",".mts",".cts","/index.ts","/index.tsx"],Oz=new Set(E8),HJ=5000,Fz=5000,qJ=new Map;function Ez($){let Z=qJ.get($);if(Z&&Date.now()-Z.ts<Fz)return Z.graph;return null}function Rz($,Z){qJ.set($,{graph:Z,ts:Date.now()})}var Lz=[/^import\s+(?:type\s+)?[^'"]*?\s+from\s+['"]([^'"]+)['"]/gm,/^import\s+['"]([^'"]+)['"]/gm,/^export\s+(?:type\s+)?(?:\*|{[^}]*})\s+from\s+['"]([^'"]+)['"]/gm,/import\(\s*['"]([^'"]+)['"]\s*\)/g,/require\(\s*['"]([^'"]+)['"]\s*\)/g];function Pz($){let Z=new Set,J=$.replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/.*$/gm,"");for(let Y of Lz){Y.lastIndex=0;let Q;while((Q=Y.exec(J))!==null){let X=Q[1];if(X.startsWith("./")||X.startsWith("../"))Z.add(X)}}return[...Z]}function Dz($){let Z=[];function J(Y){if(Z.length>=HJ)return;let Q;try{Q=qz(Y)}catch{return}for(let X of Q){if(Z.length>=HJ)return;if(Oz.has(X))continue;let K=Bz(Y,X),V;try{V=Uz(K)}catch{continue}if(V.isSymbolicLink())continue;if(V.isDirectory())J(K);else if(V.isFile()&&Cz.includes(Mz(X)))Z.push(K)}}return J($),Z}function Tz($,Z,J){let Y=Nz(Z),Q=L0(Y,$);if(J.has(Q))return Q;for(let X of jz){let K=Q+X;if(J.has(K))return K}return null}function E9($){let Z=L0($),J=Ez(Z);if(J)return J;let Y=Dz(Z),Q=new Set(Y),X=new Map,K=new Map;for(let G of Y)X.set(G,new Set),K.set(G,new Set);for(let G of Y){let H;try{H=Wz(G,"utf-8")}catch{continue}let z=Pz(H),B=X.get(G);for(let U of z){let M=Tz(U,G,Q);if(M){B.add(M);let O=K.get(M)||new Set;O.add(G),K.set(M,O)}}}let V={imports:X,importedBy:K,files:Y,root:Z};return Rz(Z,V),V}function R9($,Z){let J=L0(Z),Y=$.importedBy.get(J)||new Set,Q=[...Y],X=new Set([J]),K=[],V=new Map,G=0;for(let O of Y)K.push({file:O,depth:1}),X.add(O),V.set(O,1);let H=[],z=0;while(z<K.length){let{file:O,depth:P}=K[z++];if(P>G)G=P;if(!Y.has(O))H.push(O);let T=$.importedBy.get(O)||new Set;for(let y of T)if(!X.has(y))X.add(y),V.set(y,P+1),K.push({file:y,depth:P+1})}let B=WJ(J,$.importedBy,new Set,0),U=(O)=>F9($.root,O).replace(/\\/g,"/"),M=new Map;for(let[O,P]of V)M.set(U(O),P);return{target:U(J),directDependents:Q.map(U),transitiveDependents:H.map(U),depthMap:M,totalAffected:Q.length+H.length,depth:G,tree:UJ(B,$.root)}}function WJ($,Z,J,Y){J.add($);let Q=Z.get($)||new Set,X=[];for(let K of Q)if(!J.has(K))X.push(WJ(K,Z,J,Y+1));return{file:$,depth:Y,children:X}}function UJ($,Z){return{file:F9(Z,$.file).replace(/\\/g,"/"),depth:$.depth,children:$.children.map((J)=>UJ(J,Z))}}function BJ($,Z){let J=L0(Z),Y=R9($,Z),Q=(O)=>L0($.root,O),X=new Set([...Y.directDependents.map(Q),...Y.transitiveDependents.map(Q)]);X.add(J);let K=new Map;for(let O of X)K.set(O,0);for(let O of X){let P=$.importedBy.get(O)||new Set;for(let T of P)if(X.has(T)&&T!==O)K.set(O,(K.get(O)||0)+1)}let V=[];for(let[O,P]of K)if(P===0&&O!==J)V.push(O);let G=[],H=new Set,z=0;while(z<V.length){let O=V[z++];G.push(O),H.add(O);let P=$.imports.get(O)||new Set;for(let T of P)if(X.has(T)&&!H.has(T)&&T!==J){let y=(K.get(T)||1)-1;if(K.set(T,y),y===0)V.push(T)}}for(let O of X)if(!H.has(O)&&O!==J)G.push(O);let B=[J,...G],U=(O)=>F9($.root,O).replace(/\\/g,"/"),M=B.map((O)=>{let T=[...$.imports.get(O)||new Set].filter((i)=>X.has(i)).map(U),y=U(O),K$=O===J?0:Y.depthMap.get(y)||1;return{file:y,depth:K$,dependsOn:T}});return{target:U(J),order:M,totalFiles:M.length}}function NJ($){let Z=[];if(Z.push("=== Blast Radius Analysis ==="),Z.push(`Alvo: ${$.target}`),Z.push(`Arquivos afetados: ${$.totalAffected}`),Z.push(`Profundidade maxima: ${$.depth}`),Z.push(""),$.directDependents.length>0){Z.push(`--- Dependentes diretos (${$.directDependents.length}) ---`);for(let J of $.directDependents)Z.push(` ${J}`);Z.push("")}if($.transitiveDependents.length>0){Z.push(`--- Dependentes transitivos (${$.transitiveDependents.length}) ---`);for(let J of $.transitiveDependents){let Y=$.depthMap.get(J)||0;Z.push(` ${J} (depth ${Y})`)}Z.push("")}if($.totalAffected===0)Z.push("Nenhum arquivo depende deste modulo. Blast radius = 0."),Z.push("");return Z.push("--- Arvore de impacto ---"),MJ($.tree,Z,"",!0),Z.join(`
261
+ `)}function MJ($,Z,J,Y){let Q=Y?"\u2514\u2500 ":"\u251C\u2500 ",X=$.depth===0?`[ALVO] ${$.file}`:$.file;Z.push(`${J}${Q}${X}`);let K=J+(Y?" ":"\u2502 ");for(let V=0;V<$.children.length;V++)MJ($.children[V],Z,K,V===$.children.length-1)}function CJ($){let Z=[];Z.push("=== Plano de Refatoracao ==="),Z.push(`Alvo: ${$.target}`),Z.push(`Total de arquivos: ${$.totalFiles}`),Z.push(""),Z.push("Ordem segura de atualizacao:"),Z.push("");for(let J=0;J<$.order.length;J++){let Y=$.order[J],Q=`${J+1}`.padStart(3),X=Y.depth===0?"[ALVO]":`[depth ${Y.depth}]`;if(Z.push(` ${Q}. ${Y.file} ${X}`),Y.dependsOn.length>0)Z.push(` depende de: ${Y.dependsOn.join(", ")}`)}return Z.push(""),Z.push("Estrategia: Altere o alvo primeiro, depois atualize"),Z.push("os dependentes de fora para dentro (folhas primeiro)."),Z.join(`
262
+ `)}a();import{existsSync as L9,mkdirSync as Iz,readFileSync as OJ}from"fs";import{join as FJ}from"path";import{randomUUID as Az}from"crypto";var P9=[{name:"maintainability",weight:0.3,description:"Code readability, modularity, ease of modification"},{name:"performance",weight:0.25,description:"Response time, throughput, resource efficiency"},{name:"learning_curve",weight:0.2,description:"Team familiarity, documentation quality, community support"},{name:"infrastructure_cost",weight:0.25,description:"Hosting, licensing, operational overhead"}],D9="",i$=[],s$=[],EJ=()=>FJ(D9,"engine-tradeoffs.json"),RJ=()=>FJ(D9,"engine-incidents.json");function xz(){S(EJ(),JSON.stringify(i$,null,2))}function Sz(){S(RJ(),JSON.stringify(s$,null,2))}function wz(){let $=EJ();if(!L9($)){i$=[];return}try{i$=JSON.parse(OJ($,"utf-8"))}catch{i$=[]}}function kz(){let $=RJ();if(!L9($)){s$=[];return}try{s$=JSON.parse(OJ($,"utf-8"))}catch{s$=[]}}function LJ($){if(D9=$,!L9($))Iz($,{recursive:!0});wz(),kz()}function PJ($,Z,J=P9){let Y=J.reduce((z,B)=>z+B.weight,0);if(Math.abs(Y-1)>0.01)J=J.map((B)=>({...B,weight:B.weight/Y}));let Q={};for(let z of Z){let B=0;for(let U of J){let M=z.scores[U.name]??3;B+=M*U.weight}Q[z.name]=Math.round(B*100)/100}let K=Object.entries(Q).sort(([,z],[,B])=>B-z)[0]?.[0]||Z[0]?.name||"N/A",V=Z.find((z)=>z.name===K),G=bz($,Z,J,Q,K,V),H={id:yJ(),context:$,options:Z,criteria:J,recommendation:K,weightedScores:Q,adr:G,createdAt:new Date().toISOString()};return i$=[...i$,H],xz(),H}function bz($,Z,J,Y,Q,X){let V=new Date().toISOString().split("T")[0],G=[`# ADR: ${$.title}`,"",`**Date:** ${V}`,"**Status:** Proposed","","## Context","",$.background,""];if($.constraints.length>0){G.push("### Constraints"),G.push("");for(let B of $.constraints)G.push(`- ${B}`);G.push("")}if($.stakeholders.length>0){G.push("### Stakeholders"),G.push("");for(let B of $.stakeholders)G.push(`- ${B}`);G.push("")}G.push("## Options Considered"),G.push("");for(let B of Z){if(G.push(`### ${B.name}`),G.push(""),G.push(B.description),G.push(""),B.pros.length>0){G.push("**Pros:**");for(let U of B.pros)G.push(`- ${U}`);G.push("")}if(B.cons.length>0){G.push("**Cons:**");for(let U of B.cons)G.push(`- ${U}`);G.push("")}}G.push("## Evaluation Matrix"),G.push("");let H=["Criterion (Weight)",...Z.map((B)=>B.name)];G.push(`| ${H.join(" | ")} |`),G.push(`| ${H.map(()=>"---").join(" | ")} |`);for(let B of J){let U=Math.round(B.weight*100),M=[`${B.name} (${U}%)`,...Z.map((O)=>{return`${O.scores[B.name]??3}/5`})];G.push(`| ${M.join(" | ")} |`)}let z=["**Weighted Total**",...Z.map((B)=>`**${Y[B.name]?.toFixed(2)??"0.00"}**`)];if(G.push(`| ${z.join(" | ")} |`),G.push(""),G.push("## Decision"),G.push(""),G.push(`**Recommended:** ${Q}`),G.push(""),X){if(G.push(`Based on the weighted evaluation, **${Q}** scores highest with a weighted total of ${Y[Q]?.toFixed(2)}.`),G.push(""),X.pros.length>0){G.push("Key advantages:");for(let B of X.pros.slice(0,3))G.push(`- ${B}`);G.push("")}}if(G.push("## Consequences"),G.push(""),G.push("### Positive"),G.push(""),X&&X.pros.length>0)for(let B of X.pros)G.push(`- ${B}`);else G.push("- *To be determined based on implementation*");if(G.push(""),G.push("### Negative"),G.push(""),X&&X.cons.length>0)for(let B of X.cons)G.push(`- ${B}`);else G.push("- *To be determined based on implementation*");return G.push(""),G.push("---"),G.push(""),G.push("*Generated by Decision Engine*"),G.join(`
263
+ `)}function jJ($){let Z=$.toLowerCase(),J=[/error/gi,/exception/gi,/fail/gi,/crash/gi,/timeout/gi,/null/gi,/undefined/gi,/nan/gi,/overflow/gi,/underflow/gi,/memory/gi,/leak/gi,/deadlock/gi,/race/gi,/condition/gi,/connection/gi,/refused/gi,/denied/gi,/unauthorized/gi,/invalid/gi,/missing/gi,/corrupt/gi,/malformed/gi],Y=new Set;for(let G of J){let H=Z.match(G);if(H)for(let z of H)Y.add(z.toLowerCase())}let Q=/[A-Za-z_][A-Za-z0-9_]*(?:\.[A-Za-z_][A-Za-z0-9_]*)*/g,X=$.match(Q)||[];for(let G of X)if(G.length>3&&!G.match(/^(the|and|for|with|from|this|that)$/i))Y.add(G.toLowerCase());let K=/[A-Z]{2,}_[A-Z0-9_]+|E[0-9]{3,}/g,V=$.match(K)||[];for(let G of V)Y.add(G.toLowerCase());return[...Y]}function yz($,Z){if($.length===0||Z.length===0)return 0;let J=new Set($),Y=new Set(Z),Q=0;for(let K of J)if(Y.has(K))Q++;let X=J.size+Y.size-Q;return X>0?Q/X:0}function DJ($,Z){let J=Z?`${$}
264
+ ${Z}`:$,Y=jJ(J),Q=[];for(let G of s$){let H=`${G.title} ${G.description} ${G.stacktrace||""} ${G.rootCause} ${G.solution}`,z=jJ(H),B=yz(Y,z);if(B>0.1){let U=Y.filter((P)=>z.includes(P)),M=[];for(let P of G.relatedDecisions){let T=v4(P);if(T.length>0)M.push(T[0])}let O=[];if(G.solution)O.push(`Apply solution: ${G.solution}`);if(G.rootCause)O.push(`Investigate root cause: ${G.rootCause}`);for(let P of M)O.push(`Review decision: ${P.title}`);Q.push({incident:G,similarity:B,matchedKeywords:U,relatedDecisions:M,suggestedActions:O})}}Q.sort((G,H)=>H.similarity-G.similarity);let X=v4($.slice(0,50)),K=V8($.slice(0,50)),V=_z($,Q,X,K);return{query:$,matches:Q.slice(0,5),materialsFound:K.slice(0,5),summary:V}}function _z($,Z,J,Y){let Q=["# Incident Correlation Report",""];if(Q.push("## Query"),Q.push(""),Q.push("```"),Q.push($.slice(0,500)),Q.push("```"),Q.push(""),Z.length>0){Q.push("## Similar Past Incidents"),Q.push("");for(let X of Z.slice(0,3)){let K=Math.round(X.similarity*100);if(Q.push(`### ${X.incident.title} (${K}% match)`),Q.push(""),Q.push(`**Root Cause:** ${X.incident.rootCause}`),Q.push(""),Q.push(`**Solution:** ${X.incident.solution}`),Q.push(""),X.matchedKeywords.length>0)Q.push(`**Matched Keywords:** ${X.matchedKeywords.slice(0,5).join(", ")}`),Q.push("");if(X.suggestedActions.length>0){Q.push("**Suggested Actions:**");for(let V of X.suggestedActions.slice(0,3))Q.push(`- ${V}`);Q.push("")}}}else Q.push("## Similar Past Incidents"),Q.push(""),Q.push("*No matching incidents found in the database.*"),Q.push("");if(J.length>0){Q.push("## Related Decisions"),Q.push("");for(let X of J.slice(0,3))Q.push(`- **${X.title}** (${X.date.split("T")[0]}): ${X.chosen}`);Q.push("")}if(Y.length>0){Q.push("## Relevant Materials"),Q.push("");for(let X of Y.slice(0,3)){let K=X.content.length>100?X.content.slice(0,100).replace(/\n/g," ")+"...":X.content.replace(/\n/g," ");Q.push(`- **${X.title}** (${X.category}): ${K}`)}Q.push("")}return Q.push("---"),Q.push(""),Q.push("*Generated by Decision Engine Post-Mortem Correlator*"),Q.join(`
265
+ `)}function TJ($,Z,J,Y,Q,X=[],K=[]){let V={id:yJ(),title:$.trim(),description:Z.trim(),stacktrace:Q?.trim(),rootCause:J.trim(),solution:Y.trim(),relatedDecisions:X,tags:K.map((G)=>G.toLowerCase()),createdAt:new Date().toISOString()};return s$=[...s$,V],Sz(),V}function IJ($){let Z=$.toLowerCase();return s$.filter((J)=>J.title.toLowerCase().includes(Z)||J.description.toLowerCase().includes(Z)||J.rootCause.toLowerCase().includes(Z)||J.solution.toLowerCase().includes(Z)||J.tags.some((Y)=>Y.includes(Z))).sort((J,Y)=>new Date(Y.createdAt).getTime()-new Date(J.createdAt).getTime())}function AJ($=10){return[...s$].sort((Z,J)=>new Date(J.createdAt).getTime()-new Date(Z.createdAt).getTime()).slice(0,$)}function xJ($=10){return[...i$].sort((Z,J)=>new Date(J.createdAt).getTime()-new Date(Z.createdAt).getTime()).slice(0,$)}function SJ($){let Z=$.toLowerCase();return i$.filter((J)=>J.context.title.toLowerCase().includes(Z)||J.context.background.toLowerCase().includes(Z)||J.recommendation.toLowerCase().includes(Z)||J.options.some((Y)=>Y.name.toLowerCase().includes(Z)||Y.description.toLowerCase().includes(Z))).sort((J,Y)=>new Date(Y.createdAt).getTime()-new Date(J.createdAt).getTime())}function wJ($){return i$.find((Z)=>Z.id===$)||null}function kJ($){if($.length===0)return"Nenhuma analise de trade-off registrada.";let Z=$.map((J)=>{return` [${new Date(J.createdAt).toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit"})}] ${J.context.title} \u2192 ${J.recommendation} {${J.id}}`});return`Trade-offs (${$.length}):
266
+ ${Z.join(`
267
+ `)}`}function bJ($){if($.length===0)return"Nenhum incidente registrado.";let Z=$.map((J)=>{let Y=new Date(J.createdAt).toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit"}),Q=J.resolvedAt?"\u2713":"\u25CB",X=J.tags.length>0?` [${J.tags.join(", ")}]`:"";return` ${Q} [${Y}] ${J.title}${X} {${J.id}}`});return`Incidentes (${$.length}):
268
+ ${Z.join(`
269
+ `)}`}function yJ(){return Az().slice(0,8)}a();import{existsSync as D0,mkdirSync as _J,readFileSync as T9,readdirSync as vz,writeFileSync as vJ}from"fs";import{join as p4}from"path";import{homedir as fz}from"os";import{createHash as hz}from"crypto";var gz=20,fJ=3,mz=0.6,pz={productivity:["create_task","complete_task","save_memo","search_memos"],automation:["create_workflow","run_workflow","run_command"],knowledge:["save_material","search_materials","query_memory"],people:["delegate_to_person","log_interaction","get_people_dashboard"]},cz={multiple_file_reads:{pattern:/read_file.*read_file.*read_file/,suggestion:"Use search_files or find_files to locate content across multiple files at once."},manual_git_flow:{pattern:/run_command.*git add.*run_command.*git commit/,suggestion:"Use /commit command for AI-assisted commit messages."},repetitive_search:{pattern:/search_files.*search_files.*search_files/,suggestion:"Consider creating a workflow to automate this search pattern."}},P0="",j4="",F$={events:[],sessionStart:Date.now()},m4=new Map,t$=[],O$=[],B8=!1,hJ=null,gJ=()=>p4(P0,"usage-patterns.json"),mJ=()=>p4(P0,"insights.json");function pJ($,Z){if(P0=p4($,"docs-engine"),j4=p4(fz(),".config","smolerclaw","materials","manual"),hJ=Z||null,!D0(P0))_J(P0,{recursive:!0});if(!D0(j4))_J(j4,{recursive:!0});ZV(),YV(),QV(),F$={events:[],sessionStart:Date.now()},B8=!0}function I9($){if(!B8)return;let Z={...$,timestamp:Date.now()},J=[...F$.events,Z].slice(-gz);F$={...F$,events:J},uz(Z),setImmediate(()=>dz(Z))}function uz($){let Z=`${$.type}:${$.name}`,J=m4.get(Z);if(J){let Y=J.count+1,Q=J.avgDurationMs?(J.avgDurationMs*J.count+($.durationMs||0))/Y:$.durationMs||0;m4.set(Z,{action:Z,count:Y,avgDurationMs:Q,lastUsed:$.timestamp})}else m4.set(Z,{action:Z,count:1,avgDurationMs:$.durationMs||0,lastUsed:$.timestamp})}function dz($){let Z=F$.events.slice(-5).map((J)=>J.name).join(" ");for(let[J,{pattern:Y,suggestion:Q}]of Object.entries(cz))if(Y.test(Z)){if(!t$.find((K)=>K.type==="inefficient_pattern"&&K.relatedActions.includes($.name)&&Date.now()-new Date(K.createdAt).getTime()<3600000)){let K={id:c4(),type:"inefficient_pattern",title:`Padrao detectado: ${J.replace(/_/g," ")}`,description:"Detectamos um padrao de uso que pode ser otimizado.",recommendation:Q,relatedActions:F$.events.slice(-5).map((V)=>V.name),confidence:0.8,createdAt:new Date().toISOString()};cJ(K)}}}async function T0(){if(!B8)return{insightsGenerated:0,patternsDetected:0,manualUpdates:0,summary:"Engine not initialized"};let $={insightsGenerated:0,patternsDetected:0,manualUpdates:0,summary:""},Z=lz();$.insightsGenerated+=Z.length,$.patternsDetected+=Z.length;let J=oz();$.insightsGenerated+=J.length;let Y=az();$.insightsGenerated+=Y.length;for(let Q of[...Z,...J,...Y])if(cJ(Q),await rz(Q))$.manualUpdates++;return $V(),JV(),F$={events:[],sessionStart:Date.now()},$.summary=["Reflexao concluida:",` ${$.patternsDetected} padroes detectados`,` ${$.insightsGenerated} insights gerados`,` ${$.manualUpdates} atualizacoes no manual`].join(`
270
+ `),$}function lz(){let $=[],Z=nz(F$.events);for(let J of Z)if(J.count>=fJ){let Y={id:c4(),type:"repetitive_task",title:`Tarefa repetitiva: ${J.actions.slice(0,3).join(" -> ")}`,description:`Este padrao de acoes foi executado ${J.count} vezes nesta sessao.`,recommendation:"Considere criar um workflow para automatizar esta sequencia.",relatedActions:J.actions,confidence:Math.min(0.5+J.count*0.1,1),createdAt:new Date().toISOString()};$.push(Y)}return $}function oz(){let $=[],Z=new Set;for(let J of F$.events)if(J.type==="tool:executed")Z.add(J.name);for(let[J,Y]of Object.entries(pz)){let Q=Y.filter((K)=>Z.has(K)),X=Y.filter((K)=>!Z.has(K));if(Q.length>0&&X.length>0){let K=Q.length/Y.length;if(K>=mz){let V={id:c4(),type:"underutilized_tool",title:`Ferramentas subutilizadas: ${J}`,description:`Voce usa ${Q.join(", ")} mas nao ${X.join(", ")}.`,recommendation:`Experimente as ferramentas ${X.slice(0,2).join(" e ")} para aumentar sua produtividade.`,relatedActions:X,confidence:K,createdAt:new Date().toISOString()};$.push(V)}}}return $}function az(){let $=[];if(Date.now()-F$.sessionStart>1800000&&!F$.events.some((Y)=>Y.name==="save_memo"))$.push({id:c4(),type:"tip",title:"Dica: Capture insights em memos",description:"Sessao longa detectada sem uso de memos.",recommendation:"Use save_memo ou /memo para capturar ideias importantes durante o trabalho.",relatedActions:["save_memo"],confidence:0.6,createdAt:new Date().toISOString()});let J=F$.events.filter((Y)=>Y.name==="run_command").length;if(J>=5&&!F$.events.some((Y)=>Y.name.includes("workflow")))$.push({id:c4(),type:"tip",title:"Dica: Automatize com workflows",description:`${J} comandos executados nesta sessao.`,recommendation:"Crie um workflow para automatizar sequencias de comandos frequentes.",relatedActions:["create_workflow","run_workflow"],confidence:0.7,createdAt:new Date().toISOString()});return $}function nz($){let Z=new Map,J=$.map((Y)=>Y.name);for(let Y=2;Y<=4;Y++)for(let Q=0;Q<=J.length-Y;Q++){let X=J.slice(Q,Q+Y),K=X.join("|"),V=Z.get(K);if(V)Z.set(K,{...V,count:V.count+1});else Z.set(K,{actions:X,count:1})}return[...Z.values()].filter((Y)=>Y.count>=fJ)}function cJ($){if(!t$.some((J)=>J.type===$.type&&J.title===$.title&&Date.now()-new Date(J.createdAt).getTime()<86400000))t$=[...t$,$],hJ?.($)}function uJ($=5){return[...t$].sort((Z,J)=>new Date(J.createdAt).getTime()-new Date(Z.createdAt).getTime()).slice(0,$)}async function rz($){try{let Z=tz($.type),J=`${$.id}.md`,Y=p4(j4,J),Q=O$.find((G)=>G.id===$.id),X=Q?Q.version+1:1,K={id:$.id,title:$.title,category:Z,content:sz($),tags:ez($),source:"auto_generated",version:X,createdAt:Q?.createdAt||$.createdAt,updatedAt:new Date().toISOString()},V=aJ(K);return vJ(Y,V,"utf-8"),O$=O$.filter((G)=>G.id!==K.id),O$=[...O$,K],!0}catch{return!1}}async function dJ($,Z,J="best_practice",Y=[]){if(!B8)return{success:!1,path:""};try{let Q=c4(),X=`${KV($)}-${Q.slice(0,4)}.md`,K=p4(j4,X),V={id:Q,title:$,category:J,content:Z,tags:Y,source:"auto_generated",version:1,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()},G=aJ(V);return vJ(K,G,"utf-8"),O$=[...O$,V],{success:!0,path:K,entry:V}}catch{return{success:!1,path:""}}}function iz($){let J=$.toLowerCase().split(/\s+/).filter((Y)=>Y.length>2);return O$.map((Y)=>{let Q=0,X=`${Y.title} ${Y.content} ${Y.tags.join(" ")}`.toLowerCase();for(let K of J)if(X.includes(K))Q++;return{entry:Y,score:Q}}).filter((Y)=>Y.score>0).sort((Y,Q)=>Q.score-Y.score).map((Y)=>Y.entry)}function lJ($){let Z=$?iz($):O$;if(Z.length===0)return"Nenhum conteudo encontrado no manual. Execute /reflect para gerar insights baseados no seu uso.";let J=Z.slice(0,5).map((Y)=>{let Q=oJ[Y.category]||Y.category;return[`## ${Y.title}`,`*Categoria: ${Q}*`,"",Y.content,"",Y.tags.length>0?`Tags: ${Y.tags.map((X)=>`#${X}`).join(" ")}`:""].filter(Boolean).join(`
271
+ `)});return["# Manual de Uso Otimizado","",`Baseado em ${O$.length} entradas do manual vivo.`,"",...J].join(`
272
+ `)}var oJ={workflow:"Workflow",tool:"Ferramenta",shortcut:"Atalho",best_practice:"Boa Pratica"};function sz($){return[$.description,"","### Recomendacao",$.recommendation,"",`**Confianca:** ${Math.round($.confidence*100)}%`,`**Acoes relacionadas:** ${$.relatedActions.join(", ")}`].join(`
273
+ `)}function aJ($){let Z=oJ[$.category]||$.category;return[`# ${$.title}`,"",`> Categoria: ${Z}`,`> Atualizado: ${new Date($.updatedAt).toLocaleDateString("pt-BR")}`,`> Versao: ${$.version}`,"",$.content,"",$.tags.length>0?`---
274
+ Tags: ${$.tags.map((J)=>`#${J}`).join(" ")}`:""].filter(Boolean).join(`
275
+ `)}function tz($){switch($){case"repetitive_task":return"workflow";case"underutilized_tool":return"tool";case"inefficient_pattern":return"best_practice";case"tip":return"shortcut";default:return"best_practice"}}function ez($){let Z=new Set;Z.add($.type.replace(/_/g,"-"));for(let J of $.relatedActions)if(J.includes("_"))Z.add(J.split("_")[0]);return[...Z]}function nJ($){return $.summary}function rJ($){if($.length===0)return"Nenhum insight disponivel.";let Z=$.map((J)=>{return[`[${{repetitive_task:"Tarefa Repetitiva",underutilized_tool:"Ferramenta Subutilizada",inefficient_pattern:"Padrao Ineficiente",tip:"Dica"}[J.type]||J.type}] ${J.title}`,` ${J.recommendation}`,` Confianca: ${Math.round(J.confidence*100)}%`].join(`
276
+ `)});return`Insights (${$.length}):
277
+
278
+ ${Z.join(`
279
+
280
+ `)}`}function $V(){if(!B8)return;let $=Object.fromEntries(m4);S(gJ(),JSON.stringify($,null,2))}function ZV(){let $=gJ();if(!D0($)){m4=new Map;return}try{let Z=JSON.parse(T9($,"utf-8"));m4=new Map(Object.entries(Z))}catch{m4=new Map}}function JV(){if(!B8)return;S(mJ(),JSON.stringify(t$,null,2))}function YV(){let $=mJ();if(!D0($)){t$=[];return}try{let Z=JSON.parse(T9($,"utf-8"));t$=Array.isArray(Z)?Z:[]}catch{t$=[]}}function QV(){if(!D0(j4)){O$=[];return}try{let $=vz(j4,{withFileTypes:!0}).filter((J)=>J.isFile()&&J.name.endsWith(".md")),Z=[];for(let J of $){let Y=p4(j4,J.name),Q=T9(Y,"utf-8"),X=XV(J.name,Q);if(X)Z.push(X)}O$=Z}catch{O$=[]}}function XV($,Z){try{let J=Z.split(`
281
+ `),Y=J[0]?.replace(/^#\s*/,"")||$.replace(".md",""),Q="best_practice",X=1,K=[];for(let B of J.slice(1,6)){if(B.startsWith("> Categoria:")){let U=B.replace("> Categoria:","").trim().toLowerCase();if(U==="workflow"||U==="tool"||U==="shortcut"||U==="best_practice")Q=U}if(B.startsWith("> Versao:"))X=parseInt(B.replace("> Versao:","").trim())||1}let G=J.slice(-3).join(`
282
+ `).match(/Tags:\s*(.+)/);if(G){let U=G[1].match(/#[\w-]+/g);if(U)K.push(...U.map((M)=>M.slice(1)))}let H=$.match(/-([a-z0-9]{4,8})\.md$/);return{id:H?H[1]:c4(),title:Y,category:Q,content:J.slice(5).join(`
283
+ `).trim(),tags:K,source:"auto_generated",version:X,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}}catch{return null}}function c4(){return hz("sha256").update(`${Date.now()}-${Math.random()}`).digest("hex").slice(0,8)}function KV($){return $.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"").slice(0,50)}var C8=new b5,J3=[];function Y3($){J3=$}var p=[{name:"read_file",description:"Read file contents. For large files, use offset/limit to read specific line ranges.",input_schema:{type:"object",properties:{path:{type:"string",description:"File path (relative or absolute)"},offset:{type:"number",description:"Start reading from this line number (1-based). Optional."},limit:{type:"number",description:"Max lines to read. Optional, defaults to 500."}},required:["path"]}},{name:"write_file",description:"Create a new file or completely overwrite an existing file.",input_schema:{type:"object",properties:{path:{type:"string",description:"File path to write"},content:{type:"string",description:"Full file content"}},required:["path","content"]}},{name:"edit_file",description:"Make a precise edit to a file. Finds old_text and replaces it with new_text. The old_text must match exactly (including whitespace). "+"Use this instead of write_file when modifying existing files \u2014 it preserves the rest of the file.",input_schema:{type:"object",properties:{path:{type:"string",description:"File path to edit"},old_text:{type:"string",description:"Exact text to find (must be unique in the file)"},new_text:{type:"string",description:"Replacement text"}},required:["path","old_text","new_text"]}},{name:"search_files",description:"Search file contents using a regex pattern (like grep). Returns matching lines with file paths and line numbers.",input_schema:{type:"object",properties:{pattern:{type:"string",description:"Regex pattern to search for"},path:{type:"string",description:"Directory to search in. Defaults to cwd."},include:{type:"string",description:'Glob pattern to filter files, e.g. "*.ts" or "*.py"'}},required:["pattern"]}},{name:"find_files",description:"Find files by name pattern (glob). Returns matching file paths.",input_schema:{type:"object",properties:{pattern:{type:"string",description:'Glob pattern, e.g. "**/*.ts", "src/**/test*"'},path:{type:"string",description:"Base directory. Defaults to cwd."}},required:["pattern"]}},{name:"list_directory",description:"List files and directories with type indicators and sizes.",input_schema:{type:"object",properties:{path:{type:"string",description:"Directory to list. Defaults to cwd."}},required:[]}},{name:"run_command",description:"Run a shell command. Use for: git operations, running tests, installing packages, building projects, or any CLI task. Commands run in the current working directory.",input_schema:{type:"object",properties:{command:{type:"string",description:"Shell command to execute"},timeout:{type:"number",description:"Timeout in seconds. Default 30, max 120."}},required:["command"]}},{name:"fetch_url",description:"Fetch the content of a URL. Use for: reading documentation, checking APIs, downloading config files, or verifying endpoints. Returns the response body as text. For HTML pages, returns a text-only extraction (no tags).",input_schema:{type:"object",properties:{url:{type:"string",description:"The URL to fetch"},method:{type:"string",description:"HTTP method. Default GET.",enum:["GET","POST","PUT","DELETE","PATCH","HEAD"]},headers:{type:"object",description:"Optional request headers as key-value pairs."},body:{type:"string",description:"Optional request body (for POST/PUT/PATCH)."}},required:["url"]}}],Q3=[{name:"open_application",description:"Open a Windows application by name. Available apps: excel, word, powerpoint, outlook, onenote, teams, edge, chrome, firefox, calculator, notepad, terminal, explorer, vscode, cursor, paint, snip, settings, taskmanager.",input_schema:{type:"object",properties:{name:{type:"string",description:'App name (e.g. "excel", "outlook", "teams")'},argument:{type:"string",description:"Optional argument (e.g. file path to open in the app)"}},required:["name"]}},{name:"open_file_default",description:"Open a file with its default Windows application. E.g. .xlsx opens in Excel, .pdf in the PDF reader.",input_schema:{type:"object",properties:{path:{type:"string",description:"File path to open"}},required:["path"]}},{name:"open_url_browser",description:"Open a URL in the default web browser.",input_schema:{type:"object",properties:{url:{type:"string",description:"URL to open"}},required:["url"]}},{name:"get_running_apps",description:"List currently running Windows applications with memory usage. Read-only, non-destructive.",input_schema:{type:"object",properties:{},required:[]}},{name:"get_system_info",description:"Get Windows system resource summary: CPU, RAM, disk, uptime, battery. Read-only.",input_schema:{type:"object",properties:{},required:[]}},{name:"get_calendar_events",description:"Get today's Outlook calendar events. Read-only. Returns event times and subjects.",input_schema:{type:"object",properties:{},required:[]}},{name:"get_news",description:"Fetch current news headlines. Categories: business, tech, finance, brazil, world, security. Returns headlines grouped by category with source attribution.",input_schema:{type:"object",properties:{category:{type:"string",description:"News category to filter. Omit for all categories.",enum:["business","tech","finance","brazil","world","security"]}},required:[]}}],HV=[{name:"create_task",description:'Create a task or reminder for the user. If a time is provided, a notification will fire at that time. Supports natural-language times like "18h", "em 30 minutos", "amanha 9h".',input_schema:{type:"object",properties:{title:{type:"string",description:'Task description (e.g. "buscar pao")'},time:{type:"string",description:'When to remind. E.g. "18h", "18:30", "em 30 minutos", "amanha 9h". Optional.'}},required:["title"]}},{name:"complete_task",description:"Mark a task as done by its ID or partial title match.",input_schema:{type:"object",properties:{reference:{type:"string",description:"Task ID or partial title to match"}},required:["reference"]}},{name:"list_tasks",description:"List all pending tasks and reminders. Shows title, due time, and ID.",input_schema:{type:"object",properties:{show_done:{type:"boolean",description:"Include completed tasks. Default false."}},required:[]}}],qV=[{name:"add_person",description:"Register a person (team member, family, or contact). Groups: equipe (work team), familia (family/home), contato (other contacts).",input_schema:{type:"object",properties:{name:{type:"string",description:"Person name"},group:{type:"string",enum:["equipe","familia","contato"],description:"Group: equipe, familia, or contato"},role:{type:"string",description:'Role or relationship (e.g. "dev frontend", "esposa", "fornecedor"). Optional.'},contact:{type:"string",description:"Phone, email, or other contact info. Optional."}},required:["name","group"]}},{name:"find_person_info",description:"Look up a person by name or ID. Returns their profile, recent interactions, and pending delegated tasks.",input_schema:{type:"object",properties:{name_or_id:{type:"string",description:"Person name (partial match) or ID"}},required:["name_or_id"]}},{name:"list_people",description:"List all registered people, optionally filtered by group.",input_schema:{type:"object",properties:{group:{type:"string",enum:["equipe","familia","contato"],description:"Filter by group. Optional."}},required:[]}},{name:"log_interaction",description:"Log an interaction with a person. Types: conversa, email, reuniao, ligacao, mensagem, delegacao, entrega, outro. Optionally set a follow-up date for a reminder.",input_schema:{type:"object",properties:{person:{type:"string",description:"Person name or ID"},type:{type:"string",enum:["conversa","email","reuniao","ligacao","mensagem","delegacao","entrega","outro"],description:"Interaction type"},summary:{type:"string",description:"What was discussed or happened"},follow_up:{type:"string",description:'When to follow up (e.g. "em 3 dias", "amanha", "25/03"). Optional.'}},required:["person","type","summary"]}},{name:"delegate_to_person",description:"Delegate/assign a task to a person with optional due date. Use to track what you asked someone to do.",input_schema:{type:"object",properties:{person:{type:"string",description:"Person name or ID"},task:{type:"string",description:"What they need to do"},due_date:{type:"string",description:'Due date (e.g. "sexta", "em 3 dias", "28/03"). Optional.'}},required:["person","task"]}},{name:"update_delegation_status",description:"Update the status of a delegated task. Statuses: pendente, em_andamento, concluido.",input_schema:{type:"object",properties:{delegation_id:{type:"string",description:"Delegation ID"},status:{type:"string",enum:["pendente","em_andamento","concluido"],description:"New status"},notes:{type:"string",description:"Optional notes about the update"}},required:["delegation_id","status"]}},{name:"get_people_dashboard",description:"Show the people management dashboard: summary of team/family/contacts, overdue follow-ups, overdue delegations, and recent interactions.",input_schema:{type:"object",properties:{},required:[]}}],WV=[{name:"save_memo",description:`Save a note/memo to the user's personal knowledge base. Use #hashtags in the content to auto-tag. Use when the user says "anota", "lembra disso", "salva isso", or shares important information.`,input_schema:{type:"object",properties:{content:{type:"string",description:"The memo content. Use #tags for categorization."},tags:{type:"array",items:{type:"string"},description:"Optional additional tags (without #). Auto-extracted #tags from content are always included."}},required:["content"]}},{name:"search_memos",description:`Search the user's memos by keyword or tag. Use #tag to search by tag only. Use plain text for content search. Use when the user asks "o que eu anotei sobre...", "qual era aquela nota...", etc.`,input_schema:{type:"object",properties:{query:{type:"string",description:"Search query. Use #tag for tag search, or plain text for content search."}},required:["query"]}}],UV={name:"draft_email",description:'Create an email draft and open it in Outlook (Windows) or the default mail client. The user can review and send manually. Use when the user says "escreve um email", "manda um email", "rascunho de email", etc.',input_schema:{type:"object",properties:{to:{type:"string",description:"Recipient email address"},subject:{type:"string",description:"Email subject line"},body:{type:"string",description:"Email body text"},cc:{type:"string",description:"CC recipients (optional)"}},required:["to","subject","body"]}},BV=[{name:"record_transaction",description:"Record a financial transaction (income or expense). Use when user mentions spending, receiving money, or financial tracking.",input_schema:{type:"object",properties:{type:{type:"string",enum:["entrada","saida"],description:"Transaction type: entrada (income) or saida (expense)"},amount:{type:"number",description:"Amount in BRL (always positive)"},category:{type:"string",description:"Category (e.g. alimentacao, transporte, salario, freelance)"},description:{type:"string",description:"Description of the transaction"}},required:["type","amount","category","description"]}},{name:"financial_summary",description:"Show monthly financial summary with income, expenses, and balance by category.",input_schema:{type:"object",properties:{},required:[]}},{name:"log_decision",description:'Record an important decision with context and rationale. Use when the user says "decidi", "optei por", "escolhi", or discusses a major choice.',input_schema:{type:"object",properties:{title:{type:"string",description:"Decision title (short)"},context:{type:"string",description:"Why this decision was needed"},chosen:{type:"string",description:"What was decided"},alternatives:{type:"string",description:"What was considered but rejected. Optional."},tags:{type:"array",items:{type:"string"},description:"Tags for categorization. Optional."}},required:["title","context","chosen"]}},{name:"search_decisions",description:"Search past decisions by keyword or tag.",input_schema:{type:"object",properties:{query:{type:"string",description:"Search query"}},required:["query"]}}],NV=[{name:"open_investigation",description:'Start a new investigation to systematically collect evidence. Types: bug (malfunction), feature (material for building), test (test scenarios), audit (code review), incident (runtime issue). Use when the user says "investiga", "analisa", "diagnostica", "verifica", or needs structured evidence collection.',input_schema:{type:"object",properties:{title:{type:"string",description:"Investigation title (short, descriptive)"},type:{type:"string",enum:["bug","feature","test","audit","incident"],description:"Investigation type"},hypothesis:{type:"string",description:"Initial theory or goal to investigate. Optional."},tags:{type:"array",items:{type:"string"},description:"Tags for categorization. Optional."}},required:["title","type"]}},{name:"collect_evidence",description:"Add a piece of evidence to an active investigation. Sources: file (file content), command (command output), log (log entries), diff (code changes), url (web content), observation (manual note). Use after reading files, running commands, or observing behavior to build the investigation record.",input_schema:{type:"object",properties:{investigation:{type:"string",description:"Investigation ID or title (partial match)"},source:{type:"string",enum:["file","command","log","diff","url","observation"],description:"Evidence source type"},label:{type:"string",description:"Short description of this evidence"},content:{type:"string",description:"The evidence data (file content, command output, observation text, etc.)"},path:{type:"string",description:"File path or URL associated with this evidence. Optional."}},required:["investigation","source","label","content"]}},{name:"add_finding",description:"Record a conclusion or insight derived from collected evidence. Severity: critical, high, medium, low, info. Link to evidence IDs that support this finding.",input_schema:{type:"object",properties:{investigation:{type:"string",description:"Investigation ID or title"},severity:{type:"string",enum:["critical","high","medium","low","info"],description:"Finding severity"},title:{type:"string",description:"Finding title (short)"},description:{type:"string",description:"Detailed description of the finding"},evidence_ids:{type:"array",items:{type:"string"},description:"IDs of evidence supporting this finding. Optional."}},required:["investigation","severity","title","description"]}},{name:"close_investigation",description:"Close an investigation with a summary and recommendations. Use after all evidence is collected and findings are recorded.",input_schema:{type:"object",properties:{investigation:{type:"string",description:"Investigation ID or title"},summary:{type:"string",description:"Final summary of the investigation"},recommendations:{type:"string",description:"Action items and next steps. Optional."}},required:["investigation","summary"]}},{name:"investigation_status",description:"View the current state of an investigation: evidence collected, findings, and progress. Use to check progress or review before closing.",input_schema:{type:"object",properties:{investigation:{type:"string",description:"Investigation ID or title"}},required:["investigation"]}},{name:"investigation_report",description:"Generate a full structured report (markdown) for an investigation. Includes all evidence, findings, summary, and recommendations.",input_schema:{type:"object",properties:{investigation:{type:"string",description:"Investigation ID or title"}},required:["investigation"]}},{name:"list_investigations",description:"List all investigations, optionally filtered by status or type.",input_schema:{type:"object",properties:{status:{type:"string",enum:["aberta","em_andamento","concluida","arquivada"],description:"Filter by status. Optional."},type:{type:"string",enum:["bug","feature","test","audit","incident"],description:"Filter by type. Optional."},query:{type:"string",description:"Search by keyword. Optional."}},required:[]}}],MV=[{name:"save_material",description:`Save reference material to the assistant's persistent knowledge base. Materials are categorized documents, guides, procedures, or reference info that persists across sessions. Use when the user says "salva esse material", "guarda essa referencia", "adiciona ao conhecimento", etc. Categories: procedimento, referencia, guia, template, contato, projeto, tecnico, geral.`,input_schema:{type:"object",properties:{title:{type:"string",description:"Title of the material"},content:{type:"string",description:"Full content. Use #tags for categorization."},category:{type:"string",description:"Category (e.g. procedimento, referencia, guia, template, contato, projeto, tecnico, geral). Default: geral."},tags:{type:"array",items:{type:"string"},description:"Optional additional tags (without #)."}},required:["title","content"]}},{name:"search_materials",description:"Search the assistant's material knowledge base by keyword, tag (#tag), or category (@category). Use when answering questions that may be covered by saved materials, or when user asks about reference docs.",input_schema:{type:"object",properties:{query:{type:"string",description:"Search query. Use #tag for tag search, @category for category search, or plain text."}},required:["query"]}},{name:"list_materials",description:"List all saved materials, optionally filtered by category.",input_schema:{type:"object",properties:{category:{type:"string",description:"Filter by category. Optional."},limit:{type:"number",description:"Max results. Default 30."}},required:[]}},{name:"update_material",description:"Update an existing material by ID. Can change title, content, category, or tags.",input_schema:{type:"object",properties:{id:{type:"string",description:"Material ID"},title:{type:"string",description:"New title. Optional."},content:{type:"string",description:"New content. Optional."},category:{type:"string",description:"New category. Optional."},tags:{type:"array",items:{type:"string"},description:"New tags. Optional."}},required:["id"]}},{name:"delete_material",description:"Delete a material by ID.",input_schema:{type:"object",properties:{id:{type:"string",description:"Material ID"}},required:["id"]}}],CV=[{name:"vault_status",description:'Show the integrity status of all data files: checksum verification, sizes, last backup time. Use when the user asks about data health, backup status, or says "esta tudo salvo?", "meus dados estao seguros?".',input_schema:{type:"object",properties:{},required:[]}},{name:"vault_backup",description:'Perform a manual backup of all data to the shadow backup repository. Use when the user says "faz backup", "salva tudo", "sync".',input_schema:{type:"object",properties:{message:{type:"string",description:"Optional commit message for the backup."}},required:[]}},{name:"sync_cloud_context",description:'Push the backup to a configured remote repository (if set up). Use when the user says "manda pro cloud", "sync remoto", "push backup".',input_schema:{type:"object",properties:{},required:[]}},{name:"vault_init_backup",description:"Initialize the shadow backup system (creates a local git repo for data versioning). Run once to enable automatic backups.",input_schema:{type:"object",properties:{},required:[]}}],jV=[{name:"set_active_project",description:'Set which project the assistant should focus on. Auto-detects from the current directory if not registered. Use when the user says "estou trabalhando no projeto X", "muda pro projeto Y", or starts work.',input_schema:{type:"object",properties:{name_or_id:{type:"string",description:'Project name, ID, or "auto" to detect from current directory.'}},required:["name_or_id"]}},{name:"report_work_progress",description:'Generate a work progress report with git commits, time tracked, and tasks completed. Outputs a structured Markdown document. Use when the user says "relatorio", "como estou no projeto", "resumo do trabalho", "progress report".',input_schema:{type:"object",properties:{project:{type:"string",description:"Project name/ID. Defaults to active project."},period:{type:"string",enum:["today","week","month"],description:"Report period. Default: today."},lang:{type:"string",enum:["pt","en"],description:"Report language. Default: pt."},save_to_file:{type:"string",description:"Optional file path to save the report. If omitted, returns as text."}},required:[]}},{name:"manage_work_session",description:'Start or stop a work session timer for time tracking. Use when the user says "comecei a trabalhar", "parei de trabalhar", "timer", etc.',input_schema:{type:"object",properties:{action:{type:"string",enum:["start","stop","status"],description:"Start, stop, or check session status."},notes:{type:"string",description:"Optional notes for the session."}},required:["action"]}},{name:"add_project",description:"Register a new project for tracking. Use when the user mentions a new project or wants to track a directory.",input_schema:{type:"object",properties:{name:{type:"string",description:"Project name"},path:{type:"string",description:"Filesystem path to the project root"},description:{type:"string",description:"Brief project description. Optional."},tech_stack:{type:"array",items:{type:"string"},description:"Technologies used. Optional."},tags:{type:"array",items:{type:"string"},description:"Tags for categorization. Optional."}},required:["name","path"]}},{name:"list_projects",description:"List all registered projects with their status and tech stack.",input_schema:{type:"object",properties:{active_only:{type:"boolean",description:"Show only active projects. Default false."}},required:[]}},{name:"fetch_opportunities",description:'List pending opportunities/tasks filtered by tech stack or priority. Use when the user asks "tem alguma demanda nova?", "oportunidades", "o que tem pra fazer?".',input_schema:{type:"object",properties:{status:{type:"string",enum:["nova","em_analise","aceita","recusada","concluida"],description:"Filter by status. Optional."},tech:{type:"array",items:{type:"string"},description:"Filter by required tech. Optional."}},required:[]}},{name:"add_opportunity",description:"Register a new task/opportunity/demand for tracking. Use when the user mentions a potential project, job lead, or new demand.",input_schema:{type:"object",properties:{title:{type:"string",description:"Opportunity title"},description:{type:"string",description:"Details about the opportunity"},source:{type:"string",description:'Where this came from (e.g. "LinkedIn", "email", "contato direto")'},tech_required:{type:"array",items:{type:"string"},description:"Technologies required. Optional."},priority:{type:"string",enum:["alta","media","baixa"],description:"Priority level. Default: media."},deadline:{type:"string",description:'Deadline if any (e.g. "30/04", "em 2 semanas"). Optional.'}},required:["title","description","source"]}},{name:"update_opportunity_status",description:"Update the status of an opportunity.",input_schema:{type:"object",properties:{id:{type:"string",description:"Opportunity ID"},status:{type:"string",enum:["nova","em_analise","aceita","recusada","concluida"],description:"New status"}},required:["id","status"]}}],OV=[{name:"pitwall_benchmark",description:"Benchmark a local script or command \u2014 captures wall-clock time, child process peak memory, and CPU overhead. "+'Compares against saved baseline and alerts on regressions > 10%. Use when the user says "benchmark", "mede a performance", "testa a velocidade", "pit wall".',input_schema:{type:"object",properties:{command:{type:"string",description:'Shell command to benchmark (e.g. "bun run build", "bun test").'},key:{type:"string",description:"Unique label for this benchmark. Auto-derived from command if omitted."},iterations:{type:"number",description:"Number of runs (uses median). Default 1, max 10."},warmup:{type:"boolean",description:"Run one warmup iteration before measuring (discarded). Default false."},cwd:{type:"string",description:"Working directory. Defaults to cwd."}},required:["command"]}},{name:"pitwall_save_baseline",description:'Benchmark a command and save results as the performance baseline for future comparisons. Default: 3 runs with warmup. Use "reset" to replace (not blend) an existing baseline.',input_schema:{type:"object",properties:{command:{type:"string",description:"Command to benchmark and save as baseline."},key:{type:"string",description:"Benchmark label. Auto-derived from command if omitted."},iterations:{type:"number",description:"Number of runs to measure. Default 3."},tags:{type:"array",items:{type:"string"},description:'Tags for this baseline (e.g. "build", "test").'},reset:{type:"boolean",description:"If true, replaces existing baseline entirely. Default false (blends)."},cwd:{type:"string",description:"Working directory. Defaults to cwd."}},required:["command"]}},{name:"pitwall_status",description:'List all saved performance baselines with their metrics, spread, and age. Use when the user asks "quais baselines tenho?", "pit wall status", "mostra as metricas".',input_schema:{type:"object",properties:{},required:[]}},{name:"pitwall_remove_baseline",description:"Remove a saved performance baseline by its key.",input_schema:{type:"object",properties:{key:{type:"string",description:"The script key of the baseline to remove."}},required:["key"]}}],FV=[{name:"analyze_blast_radius",description:"Analyze the blast radius of changing a TypeScript file \u2014 shows all modules that import it (directly and transitively). "+'Use when the user says "blast radius", "impacto da mudanca", "quem depende de", "o que quebra se mudar".',input_schema:{type:"object",properties:{file:{type:"string",description:"Path to the target file to analyze (relative or absolute)."},project_dir:{type:"string",description:"Root directory of the TypeScript project. Defaults to cwd."}},required:["file"]}},{name:"plan_refactor",description:'Generate a safe refactor order for updating dependents of a TypeScript file. Returns a numbered sequence: change the target first, then update dependents bottom-up. Use when the user says "plano de refatoracao", "ordem de atualizacao", "como refatorar seguro".',input_schema:{type:"object",properties:{file:{type:"string",description:"Path to the target file being refactored."},project_dir:{type:"string",description:"Root directory of the TypeScript project. Defaults to cwd."}},required:["file"]}}],EV=[{name:"evaluate_architecture_tradeoffs",description:"Analyze trade-offs between architectural options using a weighted evaluation matrix. Returns an ADR (Architecture Decision Record) with recommendation. Default criteria: Maintainability (30%), Performance (25%), Learning Curve (20%), Infrastructure Cost (25%). Use when comparing technologies, frameworks, patterns, or infrastructure choices.",input_schema:{type:"object",properties:{title:{type:"string",description:'Title of the decision, e.g., "Redis vs SQLite for session storage".'},background:{type:"string",description:"Context and background of the decision \u2014 why is this decision needed?"},constraints:{type:"array",items:{type:"string"},description:'Project constraints, e.g., "Must run on Kubernetes", "Budget < $100/mo".'},stakeholders:{type:"array",items:{type:"string"},description:'People/teams affected, e.g., "Backend Team", "DevOps".'},options:{type:"array",items:{type:"object",properties:{name:{type:"string",description:'Option name, e.g., "Redis".'},description:{type:"string",description:"Brief description of this option."},scores:{type:"object",description:"Scores for each criterion (1-5). Keys: maintainability, performance, learning_curve, infrastructure_cost."},pros:{type:"array",items:{type:"string"},description:"Advantages of this option."},cons:{type:"array",items:{type:"string"},description:"Disadvantages of this option."}},required:["name","description","scores","pros","cons"]},description:"List of options to compare (minimum 2)."},custom_criteria:{type:"array",items:{type:"object",properties:{name:{type:"string",description:"Criterion name."},weight:{type:"number",description:"Weight (0.0-1.0). Must sum to 1.0 across all criteria."},description:{type:"string",description:"What this criterion measures."}},required:["name","weight","description"]},description:"Optional custom criteria. If not provided, uses default criteria."}},required:["title","background","options"]}},{name:"correlate_incident",description:"Analyze an error or bug and search for similar past incidents, related decisions, and relevant materials. Returns correlation matches with suggested solutions and actions based on historical data. Use when debugging, troubleshooting, or investigating an error.",input_schema:{type:"object",properties:{description:{type:"string",description:"Description of the current error or bug."},stacktrace:{type:"string",description:"Optional stacktrace or error output for better matching."}},required:["description"]}},{name:"log_incident",description:"Log a resolved incident for future correlation. This feeds the Post-Mortem database. Use after resolving a bug to help accelerate future debugging.",input_schema:{type:"object",properties:{title:{type:"string",description:"Short title of the incident."},description:{type:"string",description:"Detailed description of what happened."},root_cause:{type:"string",description:"Root cause analysis."},solution:{type:"string",description:"How the incident was resolved."},stacktrace:{type:"string",description:"Optional stacktrace for better correlation."},related_decisions:{type:"array",items:{type:"string"},description:"IDs of related decisions from the Decision Log."},tags:{type:"array",items:{type:"string"},description:'Tags for categorization, e.g., "memory-leak", "timeout", "auth".'}},required:["title","description","root_cause","solution"]}},{name:"list_tradeoff_analyses",description:"List past architecture trade-off analyses. Use to review previous decisions and their rationale.",input_schema:{type:"object",properties:{limit:{type:"number",description:"Maximum number of results (default 10)."},query:{type:"string",description:"Optional search query to filter results."}},required:[]}},{name:"list_incidents",description:"List logged incidents from the Post-Mortem database. Use to review past issues and solutions.",input_schema:{type:"object",properties:{limit:{type:"number",description:"Maximum number of results (default 10)."},query:{type:"string",description:"Optional search query to filter results."}},required:[]}},{name:"get_tradeoff_adr",description:"Get the full ADR (Architecture Decision Record) for a past trade-off analysis by ID. Returns the complete Markdown document.",input_schema:{type:"object",properties:{id:{type:"string",description:"ID of the trade-off analysis."}},required:["id"]}}],RV=[{name:"execute_powershell_script",description:"Execute a PowerShell script on the local machine. The script runs in a temp .ps1 file with -ExecutionPolicy Bypass (scoped). Safety guards block dangerous operations (Defender, System32, formatting). Returns stdout, stderr, exit code, and duration. Use for: automation, system queries, batch operations, registry reads, scheduled tasks.",input_schema:{type:"object",properties:{script:{type:"string",description:"The PowerShell script to execute. Multi-line supported."}},required:["script"]}},{name:"analyze_screen_context",description:"Get detailed information about the user's current screen: foreground window (what they are looking at), all visible windows with PIDs, memory usage, and titles. Use to understand the user's current context. Read-only.",input_schema:{type:"object",properties:{},required:[]}},{name:"read_clipboard_content",description:'Read the current clipboard content. Auto-detects text or image. For images, performs OCR using Windows.Media.Ocr to extract text. Use when the user says "le o que copiei", "o que tem no clipboard", "cola isso", etc. Read-only.',input_schema:{type:"object",properties:{},required:[]}}],LV=[{name:"manage_news_feeds",description:'Manage RSS/Atom news feed sources. Actions: add (add custom feed), remove (remove custom feed), disable (disable a built-in feed), enable (re-enable a disabled built-in), list (show all feeds). Use when the user says "adiciona essa fonte", "remove o feed", "desativa o TechCrunch", "mostra as fontes".',input_schema:{type:"object",properties:{action:{type:"string",enum:["add","remove","disable","enable","list"],description:"Action to perform."},name:{type:"string",description:"Feed name (for add) or name/URL reference (for remove/disable/enable)."},url:{type:"string",description:"RSS/Atom feed URL (required for add)."},category:{type:"string",description:"Category for the feed (required for add). E.g. tech, finance, ai, devops."}},required:["action"]}}],PV=[{name:"recall_memory",description:'Search the local RAG memory index for relevant information from memos, materials, decisions, and past sessions. Use when the user asks "o que eu sei sobre...", "lembra de...", "busca na memoria...", or needs context from past interactions. Returns the top 3 most relevant text fragments.',input_schema:{type:"object",properties:{query:{type:"string",description:"Natural language query to search the memory index"},top_k:{type:"number",description:"Number of results to return. Default 3, max 10."}},required:["query"]}},{name:"index_memory",description:"Build or update the local RAG memory index. Indexes memos, materials, decisions, and sessions. "+'Incremental \u2014 only re-indexes changed data. Use when the user says "atualiza a memoria", "reindexa", or after adding many new items.',input_schema:{type:"object",properties:{},required:[]}},{name:"memory_status",description:"Show stats about the local RAG memory index: number of indexed chunks, sources, and last build time.",input_schema:{type:"object",properties:{},required:[]}}],DV=[{name:"archive_session",description:'Archive a conversation session. Archived sessions are preserved but removed from the active list. Use "all" as name to archive all sessions except the current one.',input_schema:{type:"object",properties:{name:{type:"string",description:'Session name to archive, or "all" to archive all except current.'}},required:["name"]}},{name:"unarchive_session",description:"Restore an archived session back to the active sessions list.",input_schema:{type:"object",properties:{name:{type:"string",description:"Archived session name to restore."}},required:["name"]}},{name:"list_archived_sessions",description:"List all archived conversation sessions with message count and last update.",input_schema:{type:"object",properties:{},required:[]}}],TV=[{name:"update_living_manual",description:"Silently update the living manual with a structured insight or best practice. The manual is stored at ~/.config/smolerclaw/materials/manual/ and persists across sessions. Use when you observe a pattern that could help the user work more efficiently, or when they ask to document a workflow. Categories: workflow, tool, shortcut, best_practice.",input_schema:{type:"object",properties:{title:{type:"string",description:'Title of the manual entry (e.g. "Atalho para commits rapidos")'},content:{type:"string",description:"Full content in markdown format. Include steps, examples, and tips."},category:{type:"string",enum:["workflow","tool","shortcut","best_practice"],description:"Category. Default: best_practice."},tags:{type:"array",items:{type:"string"},description:'Tags for categorization (e.g. "git", "automacao", "produtividade"). Optional.'}},required:["title","content"]}},{name:"explain_optimal_usage",description:'Generate an interactive tutorial explaining how to use smolerclaw more efficiently. Consults the living manual (via RAG or direct read) and recent insights to build a contextual guide. Use when the user asks "como usar melhor?", "dicas de uso", "tutorial", or seems to be using tools inefficiently.',input_schema:{type:"object",properties:{topic:{type:"string",description:'Optional topic to focus on (e.g. "workflows", "git", "tarefas"). If omitted, shows general tips.'}},required:[]}},{name:"trigger_self_reflection",description:"Manually trigger the self-reflection analysis. Analyzes recent actions to detect patterns, generate insights about repetitive tasks, underutilized tools, and inefficient patterns. Updates the living manual with findings. Use at end of session or when user asks for usage analysis.",input_schema:{type:"object",properties:{},required:[]}},{name:"get_usage_insights",description:'Get recent insights generated by the meta-learning engine. Shows detected patterns, tips, and recommendations based on observed usage. Use when the user asks "o que aprendi?", "insights de uso", or wants to see optimization suggestions.',input_schema:{type:"object",properties:{count:{type:"number",description:"Number of recent insights to show. Default 5."}},required:[]}}],IV=Q3.find(($)=>$.name==="get_news"),iJ=!1,e$=null;function X3($){e$=$}function K3(){if(iJ)return;if(iJ=!0,I)p.push(...Q3),p.push(...RV);else p.push(IV);p.push(...HV),p.push(...qV),p.push(...WV),p.push(UV),p.push(...BV),p.push(...NV),p.push(...MV),p.push(...PV),p.push(...LV),p.push(...CV),p.push(...jV),p.push(...OV),p.push(...FV),p.push(...DV),p.push(...EV),p.push(...TV)}var A7=50000;async function S9($,Z){let J=performance.now();try{let Y=await AV($,Z);return setImmediate(()=>{I9({type:"tool:executed",name:$,input:Z,durationMs:Math.round(performance.now()-J),success:!Y.startsWith("Error:")})}),Y}catch(Y){return setImmediate(()=>{I9({type:"tool:executed",name:$,input:Z,durationMs:Math.round(performance.now()-J),success:!1})}),`Error: ${Y instanceof Error?Y.message:String(Y)}`}}async function AV($,Z){switch($){case"read_file":return xV(Z);case"write_file":return SV(Z);case"edit_file":return wV(Z);case"search_files":return await kV(Z);case"find_files":return await _V(Z);case"list_directory":return vV(Z);case"run_command":return await fV(Z);case"fetch_url":return await hV(Z);case"open_application":return await x4(Z.name,Z.argument);case"open_file_default":return await B0(Z.path);case"open_url_browser":return await S4(Z.url);case"get_running_apps":return await N0();case"get_system_info":return await w4();case"get_calendar_events":return await k$();case"get_news":{let J=Z.category;return await q4(J?[J]:void 0)}case"create_task":{let J=Z.title;if(!J?.trim())return"Error: title is required.";let Y=Z.time,Q=Y?C0(Y):void 0,X=_1(J,Q||void 0),K=Q?` \u2014 lembrete: ${Q.toLocaleTimeString("pt-BR",{hour:"2-digit",minute:"2-digit"})}`:"";return`Tarefa criada: "${X.title}"${K} [${X.id}]`}case"complete_task":{let J=Z.reference;if(!J?.trim())return"Error: reference is required.";let Y=v1(J);return Y?`Concluida: "${Y.title}"`:`Tarefa nao encontrada: "${J}"`}case"list_tasks":{let J=Z.show_done||!1,Y=d$(J);return y4(Y)}case"add_person":{let J=Z.name;if(!J?.trim())return"Error: name is required.";let Y=Z.group;if(!["equipe","familia","contato"].includes(Y))return"Error: group must be equipe, familia, or contato.";let X=o1(J,Y,Z.role,Z.contact);return`Pessoa adicionada: ${X.name} (${Y}) [${X.id}]`}case"find_person_info":{let J=Z.name_or_id;if(!J?.trim())return"Error: name_or_id is required.";let Y=l$(J);if(!Y)return`Pessoa nao encontrada: "${J}"`;return i1(Y)}case"list_people":{let J=Z.group,Y=a1(J);return r1(Y)}case"log_interaction":{let J=Z.person;if(!J?.trim())return"Error: person is required.";let{type:Y,summary:Q}=Z;if(!Q?.trim())return"Error: summary is required.";let X=Z.follow_up,K=X?eJ(X):void 0;if(!T6(J,Y,Q,K||void 0))return`Pessoa nao encontrada: "${J}"`;let G=K?` \u2014 follow-up: ${K.toLocaleDateString("pt-BR")}`:"";return`Interacao registrada: ${Y} com ${J}${G}`}case"delegate_to_person":{let J=Z.person;if(!J?.trim())return"Error: person is required.";let Y=Z.task;if(!Y?.trim())return"Error: task is required.";let Q=Z.due_date,X=Q?eJ(Q):void 0,K=n1(J,Y,X||void 0);if(!K)return`Pessoa nao encontrada: "${J}"`;let V=X?` \u2014 prazo: ${X.toLocaleDateString("pt-BR")}`:"";return`Tarefa delegada para ${J}: "${Y}"${V} [${K.id}]`}case"update_delegation_status":{let J=Z.delegation_id;if(!J?.trim())return"Error: delegation_id is required.";let Y=Z.status,Q=I6(J,Y,Z.notes);if(!Q)return`Delegacao nao encontrada: "${J}"`;return`Delegacao atualizada: "${Q.task}" -> ${Y}`}case"get_people_dashboard":return e1();case"save_memo":{let J=Z.content;if(!J?.trim())return"Error: content is required.";let Y=Z.tags||[],Q=f1(J,Y);return`Memo salvo${Q.tags.length>0?` [${Q.tags.map((K)=>"#"+K).join(" ")}]`:""} {${Q.id}}`}case"search_memos":{let J=Z.query;if(!J?.trim())return _4(j0());let Y=h1(J);return _4(Y)}case"record_transaction":{let{type:J,amount:Y,category:Q,description:X}=Z;if(!J||!Y||!Q||!X)return"Error: all fields required.";let K=O0(J,Y,Q,X);return`${K.type==="entrada"?"+":"-"} R$ ${K.amount.toFixed(2)} (${K.category}) \u2014 ${K.description} [${K.id}]`}case"financial_summary":return p1();case"log_decision":{let{title:J,context:Y,chosen:Q}=Z;if(!J||!Y||!Q)return"Error: title, context, and chosen are required.";let X=N6(J,Y,Q,Z.alternatives,Z.tags||[]);return`Decisao registrada: "${X.title}" {${X.id}}`}case"search_decisions":{let J=Z.query;if(!J?.trim())return K8(c1());return K8(v4(J))}case"open_investigation":{let J=Z.title;if(!J?.trim())return"Error: title is required.";let Y=Z.type;if(!["bug","feature","test","audit","incident"].includes(Y))return"Error: type must be bug, feature, test, audit, or incident.";let X=o5(J,Y,Z.hypothesis,Z.tags||[]);return`Investigacao aberta: "${X.title}" (${X.type}) {${X.id}}`}case"collect_evidence":{let J=Z.investigation;if(!J?.trim())return"Error: investigation is required.";let{source:Y,label:Q,content:X}=Z;if(!Q?.trim()||!X?.trim())return"Error: label and content are required.";let K=a5(J,Y,Q,X,Z.path);if(!K)return`Investigacao nao encontrada: "${J}"`;return`Evidencia coletada: [${K.id}] ${K.source}: ${K.label}`}case"add_finding":{let J=Z.investigation;if(!J?.trim())return"Error: investigation is required.";let{severity:Y,title:Q,description:X}=Z;if(!Q?.trim()||!X?.trim())return"Error: title and description are required.";let K=Z.evidence_ids||[],V=n5(J,Y,Q,X,K);if(!V)return`Investigacao nao encontrada: "${J}"`;return`Conclusao registrada: [${V.severity.toUpperCase()}] ${V.title} {${V.id}}`}case"close_investigation":{let J=Z.investigation;if(!J?.trim())return"Error: investigation is required.";let Y=Z.summary;if(!Y?.trim())return"Error: summary is required.";let Q=r5(J,Y,Z.recommendations);if(!Q)return`Investigacao nao encontrada: "${J}"`;return`Investigacao concluida: "${Q.title}" \u2014 ${Q.evidence.length} evidencias, ${Q.findings.length} conclusoes`}case"investigation_status":{let J=Z.investigation;if(!J?.trim())return"Error: investigation is required.";let Y=i5(J);if(!Y)return`Investigacao nao encontrada: "${J}"`;return $9(Y)}case"investigation_report":{let J=Z.investigation;if(!J?.trim())return"Error: investigation is required.";let Y=e5(J);if(!Y)return`Investigacao nao encontrada: "${J}"`;return Y}case"list_investigations":{let J=Z.query;if(J?.trim())return d1(t5(J));let{status:Y,type:Q}=Z;return d1(s5(Y,Q))}case"draft_email":{let{to:J,subject:Y,body:Q}=Z;if(!J?.trim()||!Y?.trim()||!Q?.trim())return"Error: to, subject, and body are required.";let X={to:J,subject:Y,body:Q,cc:Z.cc},K=m1(X),V=await g1(X);return`${K}
256
284
 
257
- ${V}`}case"save_material":{let Y=Z.title;if(!Y?.trim())return"Error: title is required.";let J=Z.content;if(!J?.trim())return"Error: content is required.";let Q=Z.category||"geral",X=Z.tags||[],K=C0(Y,J,Q,X),V=K.tags.length>0?` [${K.tags.map((G)=>"#"+G).join(" ")}]`:"";return`Material salvo: "${K.title}" (${K.category})${V} {${K.id}}`}case"search_materials":{let Y=Z.query;if(!Y?.trim())return e$(g1());let J=O0(Y);return e$(J)}case"list_materials":{let Y=Z.category,J=Z.limit||30,Q=g1(J,Y);return e$(Q)}case"update_material":{let Y=Z.id;if(!Y?.trim())return"Error: id is required.";let J={};if(Z.title)J.title=Z.title;if(Z.content)J.content=Z.content;if(Z.category)J.category=Z.category;if(Z.tags)J.tags=Z.tags;let Q=KZ(Y,J);if(!Q)return`Material nao encontrado: "${Y}"`;return`Material atualizado: "${Q.title}" (${Q.category}) {${Q.id}}`}case"delete_material":{let Y=Z.id;if(!Y?.trim())return"Error: id is required.";return M0(Y)?"Material removido.":`Material nao encontrado: "${Y}"`}case"execute_powershell_script":{let Y=Z.script;if(!Y?.trim())return"Error: script is required.";let J=q7(Y);if(J.blocked)return`BLOCKED: ${J.reason}
258
- Esse tipo de operacao nao e permitido.`;if(!J.safe&&J.reason);let Q=await D0(Y),X=[];if(Q.stdout.trim())X.push(`stdout:
285
+ ${V}`}case"save_material":{let J=Z.title;if(!J?.trim())return"Error: title is required.";let Y=Z.content;if(!Y?.trim())return"Error: content is required.";let Q=Z.category||"geral",X=Z.tags||[],K=$7(J,Y,Q,X),V=K.tags.length>0?` [${K.tags.map((G)=>"#"+G).join(" ")}]`:"";return`Material salvo: "${K.title}" (${K.category})${V} {${K.id}}`}case"search_materials":{let J=Z.query;if(!J?.trim())return B4(G8());let Y=V8(J);return B4(Y)}case"list_materials":{let J=Z.category,Y=Z.limit||30,Q=G8(Y,J);return B4(Q)}case"update_material":{let J=Z.id;if(!J?.trim())return"Error: id is required.";let Y={};if(Z.title)Y.title=Z.title;if(Z.content)Y.content=Z.content;if(Z.category)Y.category=Z.category;if(Z.tags)Y.tags=Z.tags;let Q=b6(J,Y);if(!Q)return`Material nao encontrado: "${J}"`;return`Material atualizado: "${Q.title}" (${Q.category}) {${Q.id}}`}case"delete_material":{let J=Z.id;if(!J?.trim())return"Error: id is required.";return Z7(J)?"Material removido.":`Material nao encontrado: "${J}"`}case"execute_powershell_script":{let J=Z.script;if(!J?.trim())return"Error: script is required.";let Y=G9(J);if(Y.blocked)return`BLOCKED: ${Y.reason}
286
+ Esse tipo de operacao nao e permitido.`;if(!Y.safe&&Y.reason);let Q=await G7(J),X=[];if(Q.stdout.trim())X.push(`stdout:
259
287
  ${Q.stdout.trim()}`);if(Q.stderr.trim())X.push(`stderr:
260
288
  ${Q.stderr.trim()}`);return X.push(`exit: ${Q.exitCode} (${Q.duration}ms)`),X.join(`
261
289
 
262
- `)}case"analyze_screen_context":return await P0();case"read_clipboard_content":{let Y=await T0();switch(Y.type){case"text":return`Clipboard (texto):
263
- ${Y.text}`;case"image":return Y.text;case"empty":return"Clipboard vazio.";case"error":return`Erro ao ler clipboard: ${Y.text}`}}case"manage_news_feeds":switch(Z.action){case"list":return o8();case"add":{let{name:J,url:Q,category:X}=Z;if(!J?.trim())return"Error: name is required for add.";if(!Q?.trim())return"Error: url is required for add.";if(!X?.trim())return"Error: category is required for add.";let K=p8(J,Q,X);if(typeof K==="string")return K;return`Fonte adicionada: ${K.name} (${K.category}) \u2014 ${K.url}`}case"remove":{let J=Z.name;if(!J?.trim())return"Error: name or URL is required.";return l8(J)?`Fonte removida: ${J}`:`Fonte custom nao encontrada: "${J}"`}case"disable":{let J=Z.name;if(!J?.trim())return"Error: name or URL is required.";return n8(J)?`Fonte desativada: ${J}`:`Fonte built-in nao encontrada ou ja desativada: "${J}"`}case"enable":{let J=Z.name;if(!J?.trim())return"Error: name or URL is required.";return i8(J)?`Fonte reativada: ${J}`:`Fonte nao encontrada ou nao esta desativada: "${J}"`}default:return"Error: action must be add, remove, disable, enable, or list."}case"recall_memory":{if(!F0())return"Error: memory not initialized. Run /indexar first.";let Y=Z.query;if(!Y?.trim())return"Error: query is required.";let J=Math.min(Math.max(Z.top_k||3,1),10),Q=A0(Y,J);return x0(Q)}case"index_memory":{if(!F0())return"Error: memory not initialized.";let Y=R0();return`Indexacao concluida: ${Y.indexed} fonte(s) indexada(s), ${Y.skipped} sem alteracao. Total: ${Y.total} chunks.`}case"memory_status":{if(!F0())return"Memory: nao inicializada.";let Y=L0(),J=Y.builtAt?new Date(Y.builtAt).toLocaleString("pt-BR"):"nunca";return`Memory RAG Index:
264
- Chunks: ${Y.chunks}
265
- Fontes: ${Y.sources}
266
- Ultima indexacao: ${J}`}case"vault_status":{if(!a1())return"Vault nao inicializado.";return z8(K8())}case"vault_backup":{if(!a1())return"Vault nao inicializado.";let Y=Z.message||void 0;return await O1(Y)}case"sync_cloud_context":{if(!a1())return"Vault nao inicializado.";return await G8()}case"vault_init_backup":{if(!a1())return"Vault nao inicializado.";return await V8()}case"set_active_project":{let Y=Z.name_or_id;if(!Y?.trim())return"Error: name_or_id is required.";if(Y==="auto"){let Q=m0(process.cwd());if(!Q)return"Nenhum projeto detectado no diretorio atual (nao e um repositorio git).";return u1(Q.id),`Projeto ativo: "${Q.name}" (${Q.path}) \u2014 auto-detectado [${Q.id}]`}let J=u1(Y);if(!J)return`Projeto nao encontrado: "${Y}". Use /projetos para listar ou add_project para criar.`;return`Projeto ativo: "${J.name}" (${J.path}) [${J.id}]`}case"report_work_progress":{let Y=Z.project||"",J=Z.period||"today",Q=Z.lang||"pt",X=Z.save_to_file,K=Y;if(!K){let G=Z1();if(!G)return"Nenhum projeto ativo. Use set_active_project primeiro.";K=G.id}let V=await h0(K,J,Q);if(!V)return`Projeto nao encontrado: "${K}"`;if(X)return qQ(X,V.markdown,"utf-8"),`Relatorio salvo em: ${X}
290
+ `)}case"analyze_screen_context":return await q7();case"read_clipboard_content":{let J=await H7();switch(J.type){case"text":return`Clipboard (texto):
291
+ ${J.text}`;case"image":return J.text;case"empty":return"Clipboard vazio.";case"error":return`Erro ao ler clipboard: ${J.text}`}}case"manage_news_feeds":switch(Z.action){case"list":return b1();case"add":{let{name:Y,url:Q,category:X}=Z;if(!Y?.trim())return"Error: name is required for add.";if(!Q?.trim())return"Error: url is required for add.";if(!X?.trim())return"Error: category is required for add.";let K=x1(Y,Q,X);if(typeof K==="string")return K;return`Fonte adicionada: ${K.name} (${K.category}) \u2014 ${K.url}`}case"remove":{let Y=Z.name;if(!Y?.trim())return"Error: name or URL is required.";return S1(Y)?`Fonte removida: ${Y}`:`Fonte custom nao encontrada: "${Y}"`}case"disable":{let Y=Z.name;if(!Y?.trim())return"Error: name or URL is required.";return w1(Y)?`Fonte desativada: ${Y}`:`Fonte built-in nao encontrada ou ja desativada: "${Y}"`}case"enable":{let Y=Z.name;if(!Y?.trim())return"Error: name or URL is required.";return k1(Y)?`Fonte reativada: ${Y}`:`Fonte nao encontrada ou nao esta desativada: "${Y}"`}default:return"Error: action must be add, remove, disable, enable, or list."}case"recall_memory":{if(!Q7())return"Error: memory not initialized. Run /indexar first.";let J=Z.query;if(!J?.trim())return"Error: query is required.";let Y=Math.min(Math.max(Z.top_k||3,1),10),Q=z7(J,Y);return V7(Q)}case"index_memory":{if(!Q7())return"Error: memory not initialized.";let J=K7();return`Indexacao concluida: ${J.indexed} fonte(s) indexada(s), ${J.skipped} sem alteracao. Total: ${J.total} chunks.`}case"memory_status":{if(!Q7())return"Memory: nao inicializada.";let J=X7(),Y=J.builtAt?new Date(J.builtAt).toLocaleString("pt-BR"):"nunca";return`Memory RAG Index:
292
+ Chunks: ${J.chunks}
293
+ Fontes: ${J.sources}
294
+ Ultima indexacao: ${Y}`}case"vault_status":{if(!L8())return"Vault nao inicializado.";return n0(a0())}case"vault_backup":{if(!L8())return"Vault nao inicializado.";let J=Z.message||void 0;return await o4(J)}case"sync_cloud_context":{if(!L8())return"Vault nao inicializado.";return await i0()}case"vault_init_backup":{if(!L8())return"Vault nao inicializado.";return await r0()}case"set_active_project":{let J=Z.name_or_id;if(!J?.trim())return"Error: name_or_id is required.";if(J==="auto"){let Q=L7(process.cwd());if(!Q)return"Nenhum projeto detectado no diretorio atual (nao e um repositorio git).";return U8(Q.id),`Projeto ativo: "${Q.name}" (${Q.path}) \u2014 auto-detectado [${Q.id}]`}let Y=U8(J);if(!Y)return`Projeto nao encontrado: "${J}". Use /projetos para listar ou add_project para criar.`;return`Projeto ativo: "${Y.name}" (${Y.path}) [${Y.id}]`}case"report_work_progress":{let J=Z.project||"",Y=Z.period||"today",Q=Z.lang||"pt",X=Z.save_to_file,K=J;if(!K){let G=M4();if(!G)return"Nenhum projeto ativo. Use set_active_project primeiro.";K=G.id}let V=await j7(K,Y,Q);if(!V)return`Projeto nao encontrado: "${K}"`;if(X)return VV(X,V.markdown,"utf-8"),`Relatorio salvo em: ${X}
267
295
 
268
- ${V.markdown}`;return V.markdown}case"manage_work_session":{let Y=Z.action,J=Z.notes||"",Q=Z1();if(!Q)return"Nenhum projeto ativo. Use set_active_project primeiro.";switch(Y){case"start":{let X=k0(Q.id,J);if(!X)return"Erro ao iniciar sessao.";return`Sessao iniciada para "${Q.name}" as ${new Date().toLocaleTimeString("pt-BR",{hour:"2-digit",minute:"2-digit"})}. [${X.id}]`}case"stop":{let X=Y1(Q.id);if(!X)return"Nenhuma sessao aberta para este projeto.";let K=y0(X.id,J);if(!K)return"Erro ao encerrar sessao.";return`Sessao encerrada: ${K.durationMinutes} minutos trabalhados em "${Q.name}".`}case"status":{let X=Y1(Q.id);if(!X)return`Nenhuma sessao aberta para "${Q.name}".`;let K=new Date(X.startedAt),V=Math.round((Date.now()-K.getTime())/60000);return`Sessao aberta: "${Q.name}" \u2014 ${V} minutos (desde ${K.toLocaleTimeString("pt-BR",{hour:"2-digit",minute:"2-digit"})})`}default:return"Error: action must be start, stop, or status."}}case"add_project":{let Y=Z.name;if(!Y?.trim())return"Error: name is required.";let J=Z.path;if(!J?.trim())return"Error: path is required.";let Q=Z.description||"",X=Z.tech_stack||[],K=Z.tags||[],V=N7(Y,J,Q,K,X);return`Projeto registrado: "${V.name}" (${V.path}) [${V.id}]`}case"list_projects":{let Y=Z.active_only||!1;return f0(b0(Y))}case"fetch_opportunities":{let{status:Y,tech:J}=Z,Q=_0(Y,J);return g0(Q)}case"add_opportunity":{let Y=Z.title;if(!Y?.trim())return"Error: title is required.";let J=Z.description;if(!J?.trim())return"Error: description is required.";let Q=Z.source;if(!Q?.trim())return"Error: source is required.";let X=Z.tech_required||[],K=Z.priority||"media",V=Z.deadline||null,G=AZ(Y,J,Q,X,K,V);return`Oportunidade registrada: "${G.title}" (${G.priority}) [${G.id}]`}case"update_opportunity_status":{let Y=Z.id;if(!Y?.trim())return"Error: id is required.";let J=Z.status,Q=xZ(Y,J);if(!Q)return`Oportunidade nao encontrada: "${Y}"`;return`Oportunidade atualizada: "${Q.title}" -> ${J}`}case"archive_session":{if(!h$)return"Error: session manager not initialized.";let Y=Z.name;if(!Y?.trim())return"Error: name is required.";if(Y==="all"){let J=h$.archiveAll();return J.length>0?`Arquivadas ${J.length} sessoes: ${J.join(", ")}`:"Nenhuma sessao para arquivar (apenas a sessao atual esta ativa)."}return h$.archive(Y)?`Sessao arquivada: "${Y}"`:`Falha ao arquivar "${Y}" (nao encontrada ou e a sessao atual).`}case"unarchive_session":{if(!h$)return"Error: session manager not initialized.";let Y=Z.name;if(!Y?.trim())return"Error: name is required.";return h$.unarchive(Y)?`Sessao restaurada: "${Y}"`:`Sessao arquivada nao encontrada: "${Y}"`}case"list_archived_sessions":{if(!h$)return"Error: session manager not initialized.";let Y=h$.listArchived();if(Y.length===0)return"Nenhuma sessao arquivada.";let J=Y.map((Q)=>{let X=h$.getArchivedInfo(Q),K=X?new Date(X.updated).toLocaleDateString("pt-BR"):"",V=X?`${X.messageCount} msgs`:"";return` ${Q.padEnd(20)} ${V.padEnd(10)} ${K}`});return`Sessoes arquivadas (${Y.length}):
269
- ${J.join(`
270
- `)}`}default:{let Y=kZ.find((J)=>J.name===$);if(Y)return await G9(Y,Z);return`Error: unknown tool "${$}"`}}}catch(Y){return`Error: ${Y instanceof Error?Y.message:String(Y)}`}}var PZ=10485760;function n1($){let Z=C1($),Y=process.cwd();if(Z!==Y&&!Z.startsWith(Y+c0))return`Error: path outside working directory is not permitted: ${Z}`;try{if(o4(Z)){let J=UQ(Z);if(J!==Y&&!J.startsWith(Y+c0))return`Error: symlink target is outside working directory: ${J}`}}catch{}return null}function i1($,Z){let Y=$[Z];if(typeof Y!=="string"||Y.trim().length===0)return`Error: '${Z}' is required and must be a non-empty string.`;return null}function PQ($){let Z=i1($,"path");if(Z)return Z;let Y=C1($.path),J=n1(Y);if(J)return J;if(!o4(Y))return`Error: file not found: ${Y}`;let Q=SZ(Y).size;if(Q>PZ)return`Error: file too large (${M7(Q)}). Max is ${M7(PZ)}.`;let K=O7(Y,"utf-8").split(`
271
- `),V=Math.max(1,$.offset||1),G=Math.min(2000,$.limit||500),M=K.slice(V-1,V-1+G).map((E,L)=>`${String(V+L).padStart(4)} ${E}`).join(`
272
- `),N=K.length-(V-1+G);if(N>0)M+=`
273
- ... (${N} more lines, total ${K.length})`;return p1(M)}function wQ($){let Z=i1($,"path");if(Z)return Z;let Y=C1($.path),J=n1(Y);if(J)return J;let Q=$.content,X=o4(Y);l1.saveState(Y),P(Y,Q);let K=Q.split(`
274
- `).length;return`${X?"Updated":"Created"}: ${Y} (${K} lines)`}function IQ($){let Z=i1($,"path");if(Z)return Z;let Y=C1($.path),J=n1(Y);if(J)return J;if(!o4(Y))return`Error: file not found: ${Y}`;let Q=O7(Y,"utf-8"),X=$.old_text,K=$.new_text,V=Q.split(X).length-1;if(V===0)return"Error: old_text not found in file. Make sure it matches exactly, including whitespace and indentation.";if(V>1)return`Error: old_text found ${V} times. It must be unique. Include more surrounding context.`;l1.saveState(Y);let G=Q.split(X).join(K);P(Y,G);let H=X.split(`
296
+ ${V.markdown}`;return V.markdown}case"manage_work_session":{let J=Z.action,Y=Z.notes||"",Q=M4();if(!Q)return"Nenhum projeto ativo. Use set_active_project primeiro.";switch(J){case"start":{let X=N7(Q.id,Y);if(!X)return"Erro ao iniciar sessao.";return`Sessao iniciada para "${Q.name}" as ${new Date().toLocaleTimeString("pt-BR",{hour:"2-digit",minute:"2-digit"})}. [${X.id}]`}case"stop":{let X=C4(Q.id);if(!X)return"Nenhuma sessao aberta para este projeto.";let K=M7(X.id,Y);if(!K)return"Erro ao encerrar sessao.";return`Sessao encerrada: ${K.durationMinutes} minutos trabalhados em "${Q.name}".`}case"status":{let X=C4(Q.id);if(!X)return`Nenhuma sessao aberta para "${Q.name}".`;let K=new Date(X.startedAt),V=Math.round((Date.now()-K.getTime())/60000);return`Sessao aberta: "${Q.name}" \u2014 ${V} minutos (desde ${K.toLocaleTimeString("pt-BR",{hour:"2-digit",minute:"2-digit"})})`}default:return"Error: action must be start, stop, or status."}}case"add_project":{let J=Z.name;if(!J?.trim())return"Error: name is required.";let Y=Z.path;if(!Y?.trim())return"Error: path is required.";let Q=Z.description||"",X=Z.tech_stack||[],K=Z.tags||[],V=W9(J,Y,Q,K,X);return`Projeto registrado: "${V.name}" (${V.path}) [${V.id}]`}case"list_projects":{let J=Z.active_only||!1;return O7(W8(J))}case"fetch_opportunities":{let{status:J,tech:Y}=Z,Q=C7(J,Y);return E7(Q)}case"add_opportunity":{let J=Z.title;if(!J?.trim())return"Error: title is required.";let Y=Z.description;if(!Y?.trim())return"Error: description is required.";let Q=Z.source;if(!Q?.trim())return"Error: source is required.";let X=Z.tech_required||[],K=Z.priority||"media",V=Z.deadline||null,G=i6(J,Y,Q,X,K,V);return`Oportunidade registrada: "${G.title}" (${G.priority}) [${G.id}]`}case"update_opportunity_status":{let J=Z.id;if(!J?.trim())return"Error: id is required.";let Y=Z.status,Q=s6(J,Y);if(!Q)return`Oportunidade nao encontrada: "${J}"`;return`Oportunidade atualizada: "${Q.title}" -> ${Y}`}case"pitwall_benchmark":{let J=Z.command;if(!J?.trim())return"Error: command is required.";let Y=Z.key,Q=Math.min(Math.max(Z.iterations||1,1),10),X=Z.warmup||!1,K=Z.cwd,V=await C9(J,{scriptKey:Y,cwd:K,iterations:Q,warmup:X});if(V.exitCode!==0){let G=O9(V);return`AVISO: Comando terminou com exit code ${V.exitCode}. Metricas podem nao ser confiaveis.
297
+
298
+ ${G.markdown}`}return O9(V).markdown}case"pitwall_save_baseline":{let J=Z.command;if(!J?.trim())return"Error: command is required.";let Y=Z.key,Q=Math.min(Math.max(Z.iterations||3,1),10),X=Z.tags||[],K=Z.reset||!1,V=Z.cwd,G=await C9(J,{scriptKey:Y,cwd:V,iterations:Q,warmup:!0});if(G.exitCode!==0)return`Error: Comando falhou (exit code ${G.exitCode}). Corrija o comando antes de salvar baseline.
299
+ `+(G.stderr?`Stderr: ${G.stderr.slice(0,300)}`:"");let H=K?zJ(G,X):XJ(G,X),z=H.metrics.durationNs/1e6;return`Baseline salvo: "${H.scriptKey}" (${H.runs} run${H.runs>1?"s":""})
300
+ Duracao: ${z.toFixed(2)}ms
301
+ Memoria: ${(H.metrics.peakMemoryBytes/1024/1024).toFixed(1)}MB
302
+ CPU (user): ${(H.metrics.cpuUserUs/1000).toFixed(2)}ms`}case"pitwall_status":return GJ(KJ());case"pitwall_remove_baseline":{let J=Z.key;if(!J?.trim())return"Error: key is required.";return j9(J)?`Baseline removido: "${J}"`:`Baseline nao encontrado: "${J}"`}case"analyze_blast_radius":{let J=Z.file;if(!J?.trim())return"Error: file is required.";let Y=A$(Z.project_dir||process.cwd()),Q=A$(Y,J);if(!Q.startsWith(Y+N8))return"Error: file must be inside project_dir.";try{let X=E9(Y),K=R9(X,Q);return NJ(K)}catch(X){return`Error: ${X instanceof Error?X.message:String(X)}`}}case"plan_refactor":{let J=Z.file;if(!J?.trim())return"Error: file is required.";let Y=A$(Z.project_dir||process.cwd()),Q=A$(Y,J);if(!Q.startsWith(Y+N8))return"Error: file must be inside project_dir.";try{let X=E9(Y),K=BJ(X,Q);return CJ(K)}catch(X){return`Error: ${X instanceof Error?X.message:String(X)}`}}case"archive_session":{if(!e$)return"Error: session manager not initialized.";let J=Z.name;if(!J?.trim())return"Error: name is required.";if(J==="all"){let Y=e$.archiveAll();return Y.length>0?`Arquivadas ${Y.length} sessoes: ${Y.join(", ")}`:"Nenhuma sessao para arquivar (apenas a sessao atual esta ativa)."}return e$.archive(J)?`Sessao arquivada: "${J}"`:`Falha ao arquivar "${J}" (nao encontrada ou e a sessao atual).`}case"unarchive_session":{if(!e$)return"Error: session manager not initialized.";let J=Z.name;if(!J?.trim())return"Error: name is required.";return e$.unarchive(J)?`Sessao restaurada: "${J}"`:`Sessao arquivada nao encontrada: "${J}"`}case"list_archived_sessions":{if(!e$)return"Error: session manager not initialized.";let J=e$.listArchived();if(J.length===0)return"Nenhuma sessao arquivada.";let Y=J.map((Q)=>{let X=e$.getArchivedInfo(Q),K=X?new Date(X.updated).toLocaleDateString("pt-BR"):"",V=X?`${X.messageCount} msgs`:"";return` ${Q.padEnd(20)} ${V.padEnd(10)} ${K}`});return`Sessoes arquivadas (${J.length}):
303
+ ${Y.join(`
304
+ `)}`}case"evaluate_architecture_tradeoffs":{let J=Z.title;if(!J?.trim())return"Error: title is required.";let Y=Z.background;if(!Y?.trim())return"Error: background is required.";let Q=Z.options;if(!Q||Q.length<2)return"Error: at least 2 options are required.";let X={title:J.trim(),background:Y.trim(),constraints:Z.constraints||[],stakeholders:Z.stakeholders||[]},K=Q.map((z)=>({name:z.name.trim(),description:z.description.trim(),scores:z.scores,pros:z.pros||[],cons:z.cons||[]})),V=Z.custom_criteria,G=V&&V.length>0?V:P9;return PJ(X,K,G).adr}case"correlate_incident":{let J=Z.description;if(!J?.trim())return"Error: description is required.";let Y=Z.stacktrace;return DJ(J,Y).summary}case"log_incident":{let J=Z.title;if(!J?.trim())return"Error: title is required.";let Y=Z.description;if(!Y?.trim())return"Error: description is required.";let Q=Z.root_cause;if(!Q?.trim())return"Error: root_cause is required.";let X=Z.solution;if(!X?.trim())return"Error: solution is required.";let K=TJ(J,Y,Q,X,Z.stacktrace,Z.related_decisions||[],Z.tags||[]);return`Incidente registrado: "${K.title}" {${K.id}}
305
+ Causa: ${K.rootCause.slice(0,80)}${K.rootCause.length>80?"...":""}
306
+ Solucao: ${K.solution.slice(0,80)}${K.solution.length>80?"...":""}`}case"list_tradeoff_analyses":{let J=Z.limit||10,Y=Z.query,Q=Y?SJ(Y).slice(0,J):xJ(J);return kJ(Q)}case"list_incidents":{let J=Z.limit||10,Y=Z.query,Q=Y?IJ(Y).slice(0,J):AJ(J);return bJ(Q)}case"get_tradeoff_adr":{let J=Z.id;if(!J?.trim())return"Error: id is required.";let Y=wJ(J);if(!Y)return`Trade-off nao encontrado: "${J}"`;return Y.adr}case"update_living_manual":{let J=Z.title;if(!J?.trim())return"Error: title is required.";let Y=Z.content;if(!Y?.trim())return"Error: content is required.";let Q=Z.category||"best_practice",X=Z.tags||[],K=await dJ(J,Y,Q,X);if(!K.success)return"Falha ao atualizar o manual. Verifique se o docs-engine foi inicializado.";return`Manual atualizado: "${J}" (${Q})
307
+ Arquivo: ${K.path}`}case"explain_optimal_usage":{let J=Z.topic;return lJ(J)}case"trigger_self_reflection":{let J=await T0();return nJ(J)}case"get_usage_insights":{let J=Math.min(Math.max(Z.count||5,1),20),Y=uJ(J);return rJ(Y)}default:{let J=J3.find((Y)=>Y.name===$);if(J)return await v2(J,Z);return`Error: unknown tool "${$}"`}}}var sJ=10485760;function j8($){let Z=A$($),J=process.cwd();if(Z!==J&&!Z.startsWith(J+N8))return`Error: path outside working directory is not permitted: ${Z}`;try{if(I0(Z)){let Y=GV(Z);if(Y!==J&&!Y.startsWith(J+N8))return`Error: symlink target is outside working directory: ${Y}`}}catch{}return null}function O8($,Z){let J=$[Z];if(typeof J!=="string"||J.trim().length===0)return`Error: '${Z}' is required and must be a non-empty string.`;return null}function xV($){let Z=O8($,"path");if(Z)return Z;let J=A$($.path),Y=j8(J);if(Y)return Y;if(!I0(J))return`Error: file not found: ${J}`;let Q=$3(J).size;if(Q>sJ)return`Error: file too large (${A9(Q)}). Max is ${A9(sJ)}.`;let K=x9(J,"utf-8").split(`
308
+ `),V=Math.max(1,$.offset||1),G=Math.min(2000,$.limit||500),B=K.slice(V-1,V-1+G).map((M,O)=>`${String(V+O).padStart(4)} ${M}`).join(`
309
+ `),U=K.length-(V-1+G);if(U>0)B+=`
310
+ ... (${U} more lines, total ${K.length})`;return M8(B)}function SV($){let Z=O8($,"path");if(Z)return Z;let J=A$($.path),Y=j8(J);if(Y)return Y;let Q=$.content,X=I0(J);C8.saveState(J),S(J,Q);let K=Q.split(`
311
+ `).length;return`${X?"Updated":"Created"}: ${J} (${K} lines)`}function wV($){let Z=O8($,"path");if(Z)return Z;let J=A$($.path),Y=j8(J);if(Y)return Y;if(!I0(J))return`Error: file not found: ${J}`;let Q=x9(J,"utf-8"),X=$.old_text,K=$.new_text,V=Q.split(X).length-1;if(V===0)return"Error: old_text not found in file. Make sure it matches exactly, including whitespace and indentation.";if(V>1)return`Error: old_text found ${V} times. It must be unique. Include more surrounding context.`;C8.saveState(J);let G=Q.split(X).join(K);S(J,G);let H=X.split(`
275
312
  `).length,z=K.split(`
276
- `).length;return`Edited: ${Y} (replaced ${H} lines with ${z} lines)`}async function SQ($){let Z=i1($,"pattern");if(Z)return Z;let Y=$.pattern,J=C1($.path||"."),Q=n1(J);if(Q)return Q;let X=$.include;if(await r7())return bQ(Y,J,X);return kQ(Y,J,X)}async function bQ($,Z,Y){let J=["rg","--no-heading","--line-number","--color=never"];if(Y)J.push("--glob",Y);for(let V of s0)J.push("--glob",`!${V}`);J.push("-e",$,Z);let Q=Bun.spawn(J,{stdout:"pipe",stderr:"pipe"}),X=await new Response(Q.stdout).text(),K=await new Response(Q.stderr).text();if(await Q.exited,!X.trim()&&!K.trim())return"No matches found.";if(K.trim()&&!X.trim())return`Error: ${K.trim()}`;return gQ(X,Z)}async function kQ($,Z,Y){let J;try{J=new RegExp($)}catch(z){return`Error: invalid regex pattern: ${z instanceof Error?z.message:$}`}let Q=Y||"**/*",X=new Bun.Glob(Q),K=[],V=0,G=5000;for await(let z of X.scan({cwd:Z,onlyFiles:!0})){if(t0(z))continue;if(++V>G){K.push(`... (stopped after scanning ${G} files)`);break}let M=bZ(Z,z);try{let E=O7(M,"utf-8").split(`
277
- `);for(let L=0;L<E.length;L++)if(J.test(E[L])){if(K.push(`${z}:${L+1}:${E[L]}`),K.length>=100)break}}catch{}if(K.length>=100)break}if(K.length===0)return"No matches found.";let H=K.slice(0,100).join(`
313
+ `).length;return`Edited: ${J} (replaced ${H} lines with ${z} lines)`}async function kV($){let Z=O8($,"pattern");if(Z)return Z;let J=$.pattern,Y=A$($.path||"."),Q=j8(Y);if(Q)return Q;let X=$.include;if(await RZ())return bV(J,Y,X);return yV(J,Y,X)}async function bV($,Z,J){let Y=["rg","--no-heading","--line-number","--color=never"];if(J)Y.push("--glob",J);for(let V of E8)Y.push("--glob",`!${V}`);Y.push("-e",$,Z);let Q=Bun.spawn(Y,{stdout:"pipe",stderr:"pipe"}),X=await new Response(Q.stdout).text(),K=await new Response(Q.stderr).text();if(await Q.exited,!X.trim()&&!K.trim())return"No matches found.";if(K.trim()&&!X.trim())return`Error: ${K.trim()}`;return mV(X,Z)}async function yV($,Z,J){let Y;try{Y=new RegExp($)}catch(z){return`Error: invalid regex pattern: ${z instanceof Error?z.message:$}`}let Q=J||"**/*",X=new Bun.Glob(Q),K=[],V=0,G=5000;for await(let z of X.scan({cwd:Z,onlyFiles:!0})){if(o7(z))continue;if(++V>G){K.push(`... (stopped after scanning ${G} files)`);break}let B=Z3(Z,z);try{let M=x9(B,"utf-8").split(`
314
+ `);for(let O=0;O<M.length;O++)if(Y.test(M[O])){if(K.push(`${z}:${O+1}:${M[O]}`),K.length>=100)break}}catch{}if(K.length>=100)break}if(K.length===0)return"No matches found.";let H=K.slice(0,100).join(`
278
315
  `);if(K.length>100)H+=`
279
- ... (showing first 100 matches)`;return p1(H)}async function yQ($){let Z=i1($,"pattern");if(Z)return Z;let Y=$.pattern,J=C1($.path||"."),Q=n1(J);if(Q)return Q;let X=new Bun.Glob(Y),K=[];for await(let G of X.scan({cwd:J,onlyFiles:!0})){if(t0(G))continue;if(K.push(G),K.length>=200)break}if(K.length===0)return"No files found.";let V=K.join(`
316
+ ... (showing first 100 matches)`;return M8(H)}async function _V($){let Z=O8($,"pattern");if(Z)return Z;let J=$.pattern,Y=A$($.path||"."),Q=j8(Y);if(Q)return Q;let X=new Bun.Glob(J),K=[];for await(let G of X.scan({cwd:Y,onlyFiles:!0})){if(o7(G))continue;if(K.push(G),K.length>=200)break}if(K.length===0)return"No files found.";let V=K.join(`
280
317
  `);if(K.length>=200)V+=`
281
- ... (showing first 200 files)`;return V}function _Q($){let Z=C1($.path||"."),Y=n1(Z);if(Y)return Y;if(!o4(Z))return`Error: not found: ${Z}`;return HQ(Z,{withFileTypes:!0}).sort((X,K)=>{if(X.isDirectory()!==K.isDirectory())return X.isDirectory()?-1:1;return X.name.localeCompare(K.name)}).map((X)=>{if(X.isDirectory())return`d ${X.name}/`;try{let K=SZ(bZ(Z,X.name)),V=M7(K.size);return`f ${X.name} ${V}`}catch{return`f ${X.name}`}}).join(`
282
- `)}async function hQ($){let Z=i1($,"command");if(Z)return Z;let Y=$.command,J=Math.min(120,Math.max(5,$.timeout||30)),Q=Y8(),X=Bun.spawn([...Q,Y],{stdout:"pipe",stderr:"pipe",cwd:process.cwd()}),K=setTimeout(()=>X.kill(),J*1000),[V,G]=await Promise.all([new Response(X.stdout).text(),new Response(X.stderr).text()]),H=await X.exited;clearTimeout(K);let z="";if(V.trim())z+=V.trim();if(G.trim())z+=(z?`
318
+ ... (showing first 200 files)`;return V}function vV($){let Z=A$($.path||"."),J=j8(Z);if(J)return J;if(!I0(Z))return`Error: not found: ${Z}`;return zV(Z,{withFileTypes:!0}).sort((X,K)=>{if(X.isDirectory()!==K.isDirectory())return X.isDirectory()?-1:1;return X.name.localeCompare(K.name)}).map((X)=>{if(X.isDirectory())return`d ${X.name}/`;try{let K=$3(Z3(Z,X.name)),V=A9(K.size);return`f ${X.name} ${V}`}catch{return`f ${X.name}`}}).join(`
319
+ `)}async function fV($){let Z=O8($,"command");if(Z)return Z;let J=$.command,Y=Math.min(120,Math.max(5,$.timeout||30)),Q=l4(),X=Bun.spawn([...Q,J],{stdout:"pipe",stderr:"pipe",cwd:process.cwd()}),K=setTimeout(()=>X.kill(),Y*1000),[V,G]=await Promise.all([new Response(X.stdout).text(),new Response(X.stderr).text()]),H=await X.exited;clearTimeout(K);let z="";if(V.trim())z+=V.trim();if(G.trim())z+=(z?`
283
320
  `:"")+`STDERR:
284
321
  `+G.trim();if(H!==0)z+=(z?`
285
- `:"")+`Exit code: ${H}`;return p1(z||"(no output)")}async function fQ($){let Z=$.url,Y=$.method||"GET",J=$.headers||{},Q=$.body;if(!Z.startsWith("http://")&&!Z.startsWith("https://"))return"Error: URL must start with http:// or https://";let X=wZ(Z);if(X)return X;try{let K=new AbortController,V=setTimeout(()=>K.abort(),30000),G=await fetch(Z,{method:Y,redirect:"manual",headers:{"User-Agent":"smolerclaw/1.0",Accept:"text/html, application/json, text/plain, */*",...J},body:Q&&Y!=="GET"&&Y!=="HEAD"?Q:void 0,signal:K.signal});if(clearTimeout(V),G.status>=300&&G.status<400){let E=G.headers.get("location");if(!E)return`Status: ${G.status} (redirect with no location header)`;let L=wZ(E);if(L)return`Redirect blocked: ${L}`;return`Status: ${G.status} -> Redirect to: ${E}
286
- (Use fetch_url on the redirect target if needed)`}let H=`${G.status} ${G.statusText}`,z=G.headers.get("content-type")||"";if(Y==="HEAD"){let E=[...G.headers.entries()].map(([L,w])=>`${L}: ${w}`).join(`
322
+ `:"")+`Exit code: ${H}`;return M8(z||"(no output)")}async function hV($){let Z=$.url,J=$.method||"GET",Y=$.headers||{},Q=$.body;if(!Z.startsWith("http://")&&!Z.startsWith("https://"))return"Error: URL must start with http:// or https://";let X=tJ(Z);if(X)return X;try{let K=new AbortController,V=setTimeout(()=>K.abort(),30000),G=await fetch(Z,{method:J,redirect:"manual",headers:{"User-Agent":"smolerclaw/1.0",Accept:"text/html, application/json, text/plain, */*",...Y},body:Q&&J!=="GET"&&J!=="HEAD"?Q:void 0,signal:K.signal});if(clearTimeout(V),G.status>=300&&G.status<400){let M=G.headers.get("location");if(!M)return`Status: ${G.status} (redirect with no location header)`;let O=tJ(M);if(O)return`Redirect blocked: ${O}`;return`Status: ${G.status} -> Redirect to: ${M}
323
+ (Use fetch_url on the redirect target if needed)`}let H=`${G.status} ${G.statusText}`,z=G.headers.get("content-type")||"";if(J==="HEAD"){let M=[...G.headers.entries()].map(([O,P])=>`${O}: ${P}`).join(`
287
324
  `);return`Status: ${H}
288
- ${E}`}let M=G.headers.get("content-length");if(M&&Number(M)>d0*2)return`Status: ${H}
325
+ ${M}`}let B=G.headers.get("content-length");if(B&&Number(B)>A7*2)return`Status: ${H}
289
326
 
290
- Error: response body too large (${M} bytes). Max is ${d0*2} bytes.`;let N=await G.text();if(z.includes("text/html")){let E=vQ(N);return p1(`Status: ${H}
327
+ Error: response body too large (${B} bytes). Max is ${A7*2} bytes.`;let U=await G.text();if(z.includes("text/html")){let M=gV(U);return M8(`Status: ${H}
291
328
 
292
- ${E}`)}return p1(`Status: ${H}
329
+ ${M}`)}return M8(`Status: ${H}
293
330
 
294
- ${N}`)}catch(K){if(K instanceof Error&&K.name==="AbortError")return"Error: Request timed out after 30 seconds.";return`Error: ${K instanceof Error?K.message:String(K)}`}}function wZ($){try{let Z=new URL($),Y=Z.hostname.toLowerCase();if(Z.protocol!=="http:"&&Z.protocol!=="https:")return`Error: protocol ${Z.protocol} is not allowed.`;if(["localhost","127.0.0.1","::1","0.0.0.0","::ffff:127.0.0.1","::ffff:0.0.0.0"].includes(Y))return"Error: requests to localhost are blocked for security.";if(Y.endsWith(".local")||Y.endsWith(".internal"))return"Error: requests to internal hostnames are blocked.";if(Y==="metadata.google.internal"||Y==="metadata.gcp.internal")return"Error: requests to cloud metadata endpoints are blocked.";let Q=Y.split(".").map(Number);if(Q.length===4&&Q.every((X)=>!isNaN(X)&&X>=0&&X<=255)){if(Q[0]===10)return"Error: requests to private IPs (10.x) are blocked.";if(Q[0]===172&&Q[1]>=16&&Q[1]<=31)return"Error: requests to private IPs (172.16-31.x) are blocked.";if(Q[0]===192&&Q[1]===168)return"Error: requests to private IPs (192.168.x) are blocked.";if(Q[0]===169&&Q[1]===254)return"Error: requests to link-local/metadata IPs are blocked.";if(Q[0]===0)return"Error: requests to 0.x IPs are blocked."}if(Y.startsWith("::ffff:")||Y.startsWith("[::ffff:"))return"Error: requests to IPv6-mapped IPv4 addresses are blocked."}catch{return"Error: invalid URL."}return null}function vQ($){return $.replace(/<script[^>]*>[\s\S]*?<\/script>/gi,"").replace(/<style[^>]*>[\s\S]*?<\/style>/gi,"").replace(/<nav[^>]*>[\s\S]*?<\/nav>/gi,"").replace(/<header[^>]*>[\s\S]*?<\/header>/gi,"").replace(/<footer[^>]*>[\s\S]*?<\/footer>/gi,"").replace(/<\/(p|div|h[1-6]|li|tr|br|hr)[^>]*>/gi,`
331
+ ${U}`)}catch(K){if(K instanceof Error&&K.name==="AbortError")return"Error: Request timed out after 30 seconds.";return`Error: ${K instanceof Error?K.message:String(K)}`}}function tJ($){try{let Z=new URL($),J=Z.hostname.toLowerCase();if(Z.protocol!=="http:"&&Z.protocol!=="https:")return`Error: protocol ${Z.protocol} is not allowed.`;if(["localhost","127.0.0.1","::1","0.0.0.0","::ffff:127.0.0.1","::ffff:0.0.0.0"].includes(J))return"Error: requests to localhost are blocked for security.";if(J.endsWith(".local")||J.endsWith(".internal"))return"Error: requests to internal hostnames are blocked.";if(J==="metadata.google.internal"||J==="metadata.gcp.internal")return"Error: requests to cloud metadata endpoints are blocked.";let Q=J.split(".").map(Number);if(Q.length===4&&Q.every((X)=>!isNaN(X)&&X>=0&&X<=255)){if(Q[0]===10)return"Error: requests to private IPs (10.x) are blocked.";if(Q[0]===172&&Q[1]>=16&&Q[1]<=31)return"Error: requests to private IPs (172.16-31.x) are blocked.";if(Q[0]===192&&Q[1]===168)return"Error: requests to private IPs (192.168.x) are blocked.";if(Q[0]===169&&Q[1]===254)return"Error: requests to link-local/metadata IPs are blocked.";if(Q[0]===0)return"Error: requests to 0.x IPs are blocked."}if(J.startsWith("::ffff:")||J.startsWith("[::ffff:"))return"Error: requests to IPv6-mapped IPv4 addresses are blocked."}catch{return"Error: invalid URL."}return null}function gV($){return $.replace(/<script[^>]*>[\s\S]*?<\/script>/gi,"").replace(/<style[^>]*>[\s\S]*?<\/style>/gi,"").replace(/<nav[^>]*>[\s\S]*?<\/nav>/gi,"").replace(/<header[^>]*>[\s\S]*?<\/header>/gi,"").replace(/<footer[^>]*>[\s\S]*?<\/footer>/gi,"").replace(/<\/(p|div|h[1-6]|li|tr|br|hr)[^>]*>/gi,`
295
332
  `).replace(/<(br|hr)[^>]*\/?>/gi,`
296
333
  `).replace(/<[^>]+>/g," ").replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#39;/g,"'").replace(/&nbsp;/g," ").replace(/[ \t]+/g," ").replace(/\n{3,}/g,`
297
334
 
298
- `).trim()}function gQ($,Z){let Y=process.cwd(),J=Y+c0,Q=Z+c0,K=$.trim().split(`
299
- `).map((H)=>{if(H.startsWith(J))return"."+H.slice(Y.length).replace(/\\/g,"/");if(H.startsWith(Q))return"."+H.slice(Z.length).replace(/\\/g,"/");return H}),V=K.length,G=K.slice(0,100).join(`
335
+ `).trim()}function mV($,Z){let J=process.cwd(),Y=J+N8,Q=Z+N8,K=$.trim().split(`
336
+ `).map((H)=>{if(H.startsWith(Y))return"."+H.slice(J.length).replace(/\\/g,"/");if(H.startsWith(Q))return"."+H.slice(Z.length).replace(/\\/g,"/");return H}),V=K.length,G=K.slice(0,100).join(`
300
337
  `);if(V>100)G+=`
301
- ... (${V-100} more matches)`;return p1(G)}function p1($){if($.length<=d0)return $;return $.slice(0,d0)+`
302
- ... (output truncated)`}function M7($){if($<1024)return`${$}B`;if($<1048576)return`${($/1024).toFixed(1)}K`;return`${($/1048576).toFixed(1)}M`}function IZ($){let Z=$.toLowerCase().trim(),Y=new Date;if(Z==="hoje")return Y;if(Z==="amanha"||Z==="amanh\xE3"){let V=new Date(Y);return V.setDate(V.getDate()+1),V}let J=Z.match(/em\s+(\d+)\s*dias?/);if(J){let V=new Date(Y);return V.setDate(V.getDate()+parseInt(J[1])),V}let Q=Z.match(/em\s+(\d+)\s*semanas?/);if(Q){let V=new Date(Y);return V.setDate(V.getDate()+parseInt(Q[1])*7),V}let X={domingo:0,segunda:1,terca:2,ter\u{e7}a:2,quarta:3,quinta:4,sexta:5,sabado:6,s\u{e1}bado:6};for(let[V,G]of Object.entries(X))if(Z.includes(V)){let H=new Date(Y),z=(G-H.getDay()+7)%7||7;return H.setDate(H.getDate()+z),H}let K=Z.match(/(\d{1,2})\/(\d{1,2})(?:\/(\d{2,4}))?\s*/);if(K){let V=parseInt(K[1]),G=parseInt(K[2])-1,H=K[3]?parseInt(K[3])+(K[3].length===2?2000:0):Y.getFullYear(),z=new Date(H,G,V);if(!isNaN(z.getTime()))return z}return c4(Z)}var mQ=new Set([429,500,502,503,529]);async function gZ($,Z={}){let Y=Z.maxRetries??3,J=Z.baseDelayMs??1000,Q;for(let X=0;X<=Y;X++)try{return await $()}catch(K){if(Q=K,Z.signal?.aborted)throw K;if(X>=Y)throw K;if(cQ(K)&&Z.onAuthExpired){if(Z.onAuthExpired()){Z.onRetry?.(X+1,500,"Auth refreshed, retrying..."),await vZ(500,Z.signal);continue}}if(!dQ(K))throw K;let G=uQ(K)??J*Math.pow(2,X),H=K instanceof Error?K.message:String(K);Z.onRetry?.(X+1,G,H),await vZ(G,Z.signal)}throw Q}function cQ($){if(!($ instanceof Error))return!1;return $.status===401}function dQ($){if(!($ instanceof Error))return!1;let Z=$.status;if(Z&&mQ.has(Z))return!0;let Y=$.message.toLowerCase();if(Y.includes("econnreset")||Y.includes("econnrefused"))return!0;if(Y.includes("etimedout")||Y.includes("socket hang up"))return!0;if(Y.includes("overloaded"))return!0;return!1}function uQ($){let Z=$.headers;if(!Z)return null;let Y=Z["retry-after"];if(!Y)return null;let J=Number(Y);if(!isNaN(J)&&J>0)return Math.min(J,60)*1000;return null}function vZ($,Z){return new Promise((Y,J)=>{let Q=setTimeout(Y,$);Z?.addEventListener("abort",()=>{clearTimeout(Q),J(Error("Aborted"))},{once:!0})})}var pQ={haiku:200000,sonnet:200000,opus:200000};function J1($){return Math.ceil($.length/3.5)}function j7($){let Z=0;for(let Y of $){if(Z+=J1(Y.content),Y.toolCalls)for(let J of Y.toolCalls)Z+=J1(JSON.stringify(J.input)),Z+=J1(J.result);Z+=10}return Z}function F7($){let Z=$.toLowerCase();for(let[Y,J]of Object.entries(pQ))if(Z.includes(Y))return J;return 200000}function mZ($,Z,Y){let J=F7(Z)-20000-Y;if(j7($)<=J)return $;let X=[],K=J,V=[...$].reverse(),G=[];for(let z of V){let M=J1(z.content)+(z.toolCalls?.reduce((N,E)=>N+J1(JSON.stringify(E.input))+J1(E.result),0)??0)+10;if(K-M<0)break;K-=M,G.unshift(z)}let H=$.length-G.length;if(H>0)X.push({role:"user",content:`[Note: ${H} earlier messages were trimmed to fit context. The conversation continues below.]`,timestamp:Date.now()});return X.push(...G),X}function cZ($,Z,Y){let J=F7(Z)-20000-Y;return j7($)>J*0.7}function dZ($,Z,Y){let J=F7(Z)-20000-Y;if(j7($)<=J*0.7)return null;let X=Math.max(4,Math.floor($.length*0.3)),K=$.slice(0,$.length-X),V=$.slice($.length-X);if(K.length<2)return null;return{toSummarize:K,toKeep:V}}function uZ($){return`Summarize this conversation concisely. Focus on:
338
+ ... (${V-100} more matches)`;return M8(G)}function M8($){if($.length<=A7)return $;return $.slice(0,A7)+`
339
+ ... (output truncated)`}function A9($){if($<1024)return`${$}B`;if($<1048576)return`${($/1024).toFixed(1)}K`;return`${($/1048576).toFixed(1)}M`}function eJ($){let Z=$.toLowerCase().trim(),J=new Date;if(Z==="hoje")return J;if(Z==="amanha"||Z==="amanh\xE3"){let V=new Date(J);return V.setDate(V.getDate()+1),V}let Y=Z.match(/em\s+(\d+)\s*dias?/);if(Y){let V=new Date(J);return V.setDate(V.getDate()+parseInt(Y[1])),V}let Q=Z.match(/em\s+(\d+)\s*semanas?/);if(Q){let V=new Date(J);return V.setDate(V.getDate()+parseInt(Q[1])*7),V}let X={domingo:0,segunda:1,terca:2,ter\u{e7}a:2,quarta:3,quinta:4,sexta:5,sabado:6,s\u{e1}bado:6};for(let[V,G]of Object.entries(X))if(Z.includes(V)){let H=new Date(J),z=(G-H.getDay()+7)%7||7;return H.setDate(H.getDate()+z),H}let K=Z.match(/(\d{1,2})\/(\d{1,2})(?:\/(\d{2,4}))?\s*/);if(K){let V=parseInt(K[1]),G=parseInt(K[2])-1,H=K[3]?parseInt(K[3])+(K[3].length===2?2000:0):J.getFullYear(),z=new Date(H,G,V);if(!isNaN(z.getTime()))return z}return C0(Z)}var pV=new Set([429,500,502,503,529]);async function V3($,Z={}){let J=Z.maxRetries??3,Y=Z.baseDelayMs??1000,Q;for(let X=0;X<=J;X++)try{return await $()}catch(K){if(Q=K,Z.signal?.aborted)throw K;if(X>=J)throw K;if(cV(K)&&Z.onAuthExpired){if(Z.onAuthExpired()){Z.onRetry?.(X+1,500,"Auth refreshed, retrying..."),await z3(500,Z.signal);continue}}if(!uV(K))throw K;let G=dV(K)??Y*Math.pow(2,X),H=K instanceof Error?K.message:String(K);Z.onRetry?.(X+1,G,H),await z3(G,Z.signal)}throw Q}function cV($){if(!($ instanceof Error))return!1;return $.status===401}function uV($){if(!($ instanceof Error))return!1;let Z=$.status;if(Z&&pV.has(Z))return!0;let J=$.message.toLowerCase();if(J.includes("econnreset")||J.includes("econnrefused"))return!0;if(J.includes("etimedout")||J.includes("socket hang up"))return!0;if(J.includes("overloaded"))return!0;return!1}function dV($){let Z=$.headers;if(!Z)return null;let J=Z["retry-after"];if(!J)return null;let Y=Number(J);if(!isNaN(Y)&&Y>0)return Math.min(Y,60)*1000;return null}function z3($,Z){return new Promise((J,Y)=>{let Q=setTimeout(J,$);Z?.addEventListener("abort",()=>{clearTimeout(Q),Y(Error("Aborted"))},{once:!0})})}var lV={haiku:200000,sonnet:200000,opus:200000};function O4($){return Math.ceil($.length/3.5)}function w9($){let Z=0;for(let J of $){if(Z+=O4(J.content),J.toolCalls)for(let Y of J.toolCalls)Z+=O4(JSON.stringify(Y.input)),Z+=O4(Y.result);Z+=10}return Z}function k9($){let Z=$.toLowerCase();for(let[J,Y]of Object.entries(lV))if(Z.includes(J))return Y;return 200000}function G3($,Z,J){let Y=k9(Z)-20000-J;if(w9($)<=Y)return $;let X=[],K=Y,V=[...$].reverse(),G=[];for(let z of V){let B=O4(z.content)+(z.toolCalls?.reduce((U,M)=>U+O4(JSON.stringify(M.input))+O4(M.result),0)??0)+10;if(K-B<0)break;K-=B,G.unshift(z)}let H=$.length-G.length;if(H>0)X.push({role:"user",content:`[Note: ${H} earlier messages were trimmed to fit context. The conversation continues below.]`,timestamp:Date.now()});return X.push(...G),X}function H3($,Z,J){let Y=k9(Z)-20000-J;return w9($)>Y*0.7}function q3($,Z,J){let Y=k9(Z)-20000-J;if(w9($)<=Y*0.7)return null;let X=Math.max(4,Math.floor($.length*0.3)),K=$.slice(0,$.length-X),V=$.slice($.length-X);if(K.length<2)return null;return{toSummarize:K,toKeep:V}}function W3($){return`Summarize this conversation concisely. Focus on:
303
340
  1. Key decisions made
304
341
  2. Files created or modified
305
342
  3. Important context the user shared
@@ -308,62 +345,79 @@ ${N}`)}catch(K){if(K instanceof Error&&K.name==="AbortError")return"Error: Reque
308
345
  Be brief but preserve actionable information. Output ONLY the summary.
309
346
 
310
347
  ---
311
- ${$.map((Y)=>{let J=`[${Y.role}]: ${Y.content.slice(0,500)}`;if(Y.toolCalls?.length)J+=`
312
- Tools used: ${Y.toolCalls.map((Q)=>Q.name).join(", ")}`;return J}).join(`
348
+ ${$.map((J)=>{let Y=`[${J.role}]: ${J.content.slice(0,500)}`;if(J.toolCalls?.length)Y+=`
349
+ Tools used: ${J.toolCalls.map((Q)=>Q.name).join(", ")}`;return Y}).join(`
313
350
 
314
- `)}`}function pZ($,Z=2000){return $.map((Y)=>{if(!Y.toolCalls?.length)return Y;let J=Y.toolCalls.map((Q)=>{if(Q.result.length<=Z)return Q;let X=Q.result.split(`
351
+ `)}`}function U3($,Z=2000){return $.map((J)=>{if(!J.toolCalls?.length)return J;let Y=J.toolCalls.map((Q)=>{if(Q.result.length<=Z)return Q;let X=Q.result.split(`
315
352
  `),K=Math.min(10,X.length),V=Math.min(5,Math.max(0,X.length-K)),G=X.length-K-V,H=[...X.slice(0,K)];if(G>0)H.push(`... (${G} lines omitted)`);if(V>0)H.push(...X.slice(-V));let z=H.join(`
316
- `);return{...Q,result:z}});return{...Y,toolCalls:J}})}var lQ=[/\brm\s+(-rf?|--recursive)/i,/\brmdir\s/i,/\bdel\s+\/[sS]/i,/\bRemove-Item\s.*-Recurse/i,/\bformat\s+[a-z]:/i,/\bgit\s+(push\s+--force|reset\s+--hard|clean\s+-fd)/i,/\bdrop\s+(table|database)/i,/\btruncate\s+table/i,/\bchmod\s+777/i,/\bchown\s+-R/i,/\bcurl\s.*\|\s*(bash|sh)/i,/\bwget\s.*\|\s*(bash|sh)/i,/\bnpm\s+publish/i,/\bsudo\s/i,/\bkill\s+-9/i,/\bshutdown/i,/\breboot/i],nQ=[/\bgit\s+push/i,/\bgit\s+commit/i,/\bnpm\s+install/i,/\bbun\s+(install|add)/i,/\bpip\s+install/i,/\bcargo\s+install/i,/\bmkdir\s+-p/i];function lZ($,Z){switch($){case"read_file":case"list_directory":case"find_files":case"search_files":case"fetch_url":case"read_clipboard_content":case"analyze_screen_context":case"memory_status":case"recall_memory":return{level:"safe"};case"write_file":return{level:"moderate",reason:`write ${Z.path}`};case"edit_file":return{level:"moderate",reason:`edit ${Z.path}`};case"run_command":{let Y=String(Z.command||"");for(let J of lQ)if(J.test(Y))return{level:"dangerous",reason:Y};for(let J of nQ)if(J.test(Y))return{level:"moderate",reason:Y};return{level:"moderate",reason:Y}}case"execute_powershell_script":return{level:"dangerous",reason:"PowerShell script execution"};default:return{level:"moderate",reason:`unknown tool: ${$}`}}}function L7($){if(!($ instanceof Error))return String($);let{status:Z,message:Y}=$;if(Z)switch(Z){case 400:if(Y.includes("context_length")||Y.includes("too many tokens"))return"Message too long for the model's context window. Try /clear to start fresh or use a shorter prompt.";return`Bad request: ${iQ(Y)}`;case 401:return"Authentication failed. Your subscription token may be expired.\nTry: Run `claude` to refresh subscription credentials.";case 403:return`Access denied. Your subscription may not have permission for this model.
317
- Try: /model haiku (uses a more accessible model).`;case 404:return`Model not found. The model "${oQ(Y)}" may not exist or be unavailable.
353
+ `);return{...Q,result:z}});return{...J,toolCalls:Y}})}var oV=[/\brm\s+(-rf?|--recursive)/i,/\brmdir\s/i,/\bdel\s+\/[sS]/i,/\bRemove-Item\s.*-Recurse/i,/\bformat\s+[a-z]:/i,/\bgit\s+(push\s+--force|reset\s+--hard|clean\s+-fd)/i,/\bdrop\s+(table|database)/i,/\btruncate\s+table/i,/\bchmod\s+777/i,/\bchown\s+-R/i,/\bcurl\s.*\|\s*(bash|sh)/i,/\bwget\s.*\|\s*(bash|sh)/i,/\bnpm\s+publish/i,/\bsudo\s/i,/\bkill\s+-9/i,/\bshutdown/i,/\breboot/i],aV=[/\bgit\s+push/i,/\bgit\s+commit/i,/\bnpm\s+install/i,/\bbun\s+(install|add)/i,/\bpip\s+install/i,/\bcargo\s+install/i,/\bmkdir\s+-p/i];function B3($,Z){switch($){case"read_file":case"list_directory":case"find_files":case"search_files":case"fetch_url":case"read_clipboard_content":case"analyze_screen_context":case"memory_status":case"recall_memory":return{level:"safe"};case"write_file":return{level:"moderate",reason:`write ${Z.path}`};case"edit_file":return{level:"moderate",reason:`edit ${Z.path}`};case"run_command":{let J=String(Z.command||"");for(let Y of oV)if(Y.test(J))return{level:"dangerous",reason:J};for(let Y of aV)if(Y.test(J))return{level:"moderate",reason:J};return{level:"moderate",reason:J}}case"execute_powershell_script":return{level:"dangerous",reason:"PowerShell script execution"};default:return{level:"moderate",reason:`unknown tool: ${$}`}}}function b9($){if(!($ instanceof Error))return String($);let{status:Z,message:J}=$;if(Z)switch(Z){case 400:if(J.includes("context_length")||J.includes("too many tokens"))return"Message too long for the model's context window. Try /clear to start fresh or use a shorter prompt.";return`Bad request: ${nV(J)}`;case 401:return"Authentication failed. Your subscription token may be expired.\nTry: Run `claude` to refresh subscription credentials.";case 403:return`Access denied. Your subscription may not have permission for this model.
354
+ Try: /model haiku (uses a more accessible model).`;case 404:return`Model not found. The model "${rV(J)}" may not exist or be unavailable.
318
355
  Try: /model to see available models.`;case 429:return`Rate limited. Too many requests in a short period.
319
- The request will be retried automatically. If this persists, wait a minute.`;case 500:case 502:case 503:return"Anthropic API is temporarily unavailable. Retrying automatically...";case 529:return"Anthropic API is overloaded. Retrying with backoff..."}let J=Y.toLowerCase();if(J.includes("econnrefused")||J.includes("enotfound"))return"Cannot connect to Anthropic API. Check your internet connection.";if(J.includes("etimedout")||J.includes("socket hang up"))return"Connection to Anthropic API timed out. Retrying...";if(J.includes("econnreset"))return"Connection was reset. This usually recovers automatically.";if(J.includes("expired")||J.includes("invalid_api_key"))return"Your subscription token has expired. Run `claude` to refresh.";return Y}function iQ($){try{let Z=$.match(/"message"\s*:\s*"([^"]+)"/);if(Z)return Z[1]}catch{}return $.length>200?$.slice(0,200)+"...":$}function oQ($){let Z=$.match(/model[:\s]+"?([a-z0-9-]+)"?/i);return Z?Z[1]:"unknown"}function nZ($,Z,Y){if($==="auto")return!1;if(Y==="safe")return!1;if($==="confirm-writes")return["write_file","edit_file","run_command","execute_powershell_script"].includes(Z);if($==="confirm-all")return Y!=="safe";return!1}function iZ($,Z){switch($){case"write_file":return`Write file: ${Z.path}`;case"edit_file":return`Edit file: ${Z.path}`;case"run_command":{let Y=String(Z.command||"");return`Run: ${Y.length>60?Y.slice(0,57)+"...":Y}`}case"execute_powershell_script":{let Y=String(Z.script||""),J=Y.split(`
320
- `)[0]||"",Q=Y.split(`
321
- `).length;return`PowerShell (${Q} line${Q>1?"s":""}): ${J.length>50?J.slice(0,47)+"...":J}`}default:return`${$}: ${JSON.stringify(Z).slice(0,60)}`}}function oZ($,Z,Y=20){let J=$.split(`
356
+ The request will be retried automatically. If this persists, wait a minute.`;case 500:case 502:case 503:return"Anthropic API is temporarily unavailable. Retrying automatically...";case 529:return"Anthropic API is overloaded. Retrying with backoff..."}let Y=J.toLowerCase();if(Y.includes("econnrefused")||Y.includes("enotfound"))return"Cannot connect to Anthropic API. Check your internet connection.";if(Y.includes("etimedout")||Y.includes("socket hang up"))return"Connection to Anthropic API timed out. Retrying...";if(Y.includes("econnreset"))return"Connection was reset. This usually recovers automatically.";if(Y.includes("expired")||Y.includes("invalid_api_key"))return"Your subscription token has expired. Run `claude` to refresh.";return J}function nV($){try{let Z=$.match(/"message"\s*:\s*"([^"]+)"/);if(Z)return Z[1]}catch{}return $.length>200?$.slice(0,200)+"...":$}function rV($){let Z=$.match(/model[:\s]+"?([a-z0-9-]+)"?/i);return Z?Z[1]:"unknown"}function N3($,Z,J){if($==="auto")return!1;if(J==="safe")return!1;if($==="confirm-writes")return["write_file","edit_file","run_command","execute_powershell_script"].includes(Z);if($==="confirm-all")return J!=="safe";return!1}function M3($,Z){switch($){case"write_file":return`Write file: ${Z.path}`;case"edit_file":return`Edit file: ${Z.path}`;case"run_command":{let J=String(Z.command||"");return`Run: ${J.length>60?J.slice(0,57)+"...":J}`}case"execute_powershell_script":{let J=String(Z.script||""),Y=J.split(`
357
+ `)[0]||"",Q=J.split(`
358
+ `).length;return`PowerShell (${Q} line${Q>1?"s":""}): ${Y.length>50?Y.slice(0,47)+"...":Y}`}default:return`${$}: ${JSON.stringify(Z).slice(0,60)}`}}function C3($,Z,J=20){let Y=$.split(`
322
359
  `),Q=Z.split(`
323
- `),X=[],K=J.slice(0,Y);for(let G of K)X.push(` \x1B[31m- ${G}\x1B[0m`);if(J.length>Y)X.push(` \x1B[2m ... (${J.length-Y} more removed)\x1B[0m`);let V=Q.slice(0,Y);for(let G of V)X.push(` \x1B[32m+ ${G}\x1B[0m`);if(Q.length>Y)X.push(` \x1B[2m ... (${Q.length-Y} more added)\x1B[0m`);return X}class R7{model;maxTokens;client;approvalMode;approvalCallback=null;autoApproveAll=!1;onAuthExpired=null;constructor($,Z,Y,J="auto"){this.model=Z;this.maxTokens=Y;this.client=new F$({apiKey:$}),this.approvalMode=J}updateApiKey($){this.client=new F$({apiKey:$})}setAuthRefresh($){this.onAuthExpired=$}setModel($){this.model=$}setApprovalMode($){this.approvalMode=$}setApprovalCallback($){this.approvalCallback=$}setAutoApproveAll($){this.autoApproveAll=$}async*chat($,Z,Y=!0){let J=pZ($),Q=J1(Z);if(cZ(J,this.model,Q)){let G=dZ(J,this.model,Q);if(G)try{let z={role:"assistant",content:`[Conversation summary]
324
- ${await this.generateSummary(G.toSummarize)}`,timestamp:Date.now()};J=[{role:"user",content:"Continue from this summary of our earlier conversation.",timestamp:Date.now()},z,...G.toKeep]}catch{}}let X=mZ(J,this.model,Q),K=aQ(X),V=Y?n:void 0;try{yield*this.streamLoop(K,Z,V)}catch(G){yield{type:"error",error:L7(G)}}}async generateSummary($){let Z=uZ($),J=(await this.client.messages.create({model:this.model,max_tokens:1024,messages:[{role:"user",content:Z}]})).content.find((Q)=>Q.type==="text");return J?.type==="text"?J.text:"Summary unavailable."}async*streamLoop($,Z,Y){let Q=[...$],X=0;while(X++<25){let K;try{K=await gZ(async()=>{return this.client.messages.stream({model:this.model,max_tokens:this.maxTokens,system:Z,messages:Q,...Y?.length?{tools:Y}:{}})},{onAuthExpired:this.onAuthExpired??void 0})}catch(z){yield{type:"error",error:L7(z)};return}for await(let z of K)if(z.type==="content_block_delta"&&z.delta.type==="text_delta")yield{type:"text",text:z.delta.text};let V=await K.finalMessage();if(V.usage)yield{type:"usage",inputTokens:V.usage.input_tokens,outputTokens:V.usage.output_tokens};if(V.stop_reason!=="tool_use"){yield{type:"done"};return}let G=V.content.filter((z)=>z.type==="tool_use");Q.push({role:"assistant",content:V.content});let H=[];for(let z of G){let M=z.input,N=lZ(z.name,M);if(N.level==="dangerous"){yield{type:"tool_blocked",id:z.id,name:z.name,reason:`Blocked dangerous operation: ${N.reason}`},H.push({type:"tool_result",tool_use_id:z.id,content:`Error: Operation blocked for safety. Reason: ${N.reason}. This command appears dangerous and was not executed.`});continue}if(!this.autoApproveAll&&nZ(this.approvalMode,z.name,N.level)&&this.approvalCallback){if(yield{type:"tool_call",id:z.id,name:z.name,input:z.input},!await this.approvalCallback(z.name,M,N.level)){yield{type:"tool_blocked",id:z.id,name:z.name,reason:"Rejected by user"},H.push({type:"tool_result",tool_use_id:z.id,content:"Error: User rejected this operation."});continue}let w=await E7(z.name,M);yield{type:"tool_result",id:z.id,name:z.name,result:w},H.push({type:"tool_result",tool_use_id:z.id,content:w});continue}yield{type:"tool_call",id:z.id,name:z.name,input:z.input};let E=await E7(z.name,M);yield{type:"tool_result",id:z.id,name:z.name,result:E},H.push({type:"tool_result",tool_use_id:z.id,content:E})}Q.push({role:"user",content:H})}yield{type:"error",error:"Stopped after 25 tool rounds to prevent runaway execution."}}}function aQ($){let Z=[];for(let Y of $)if(Y.role==="user")if(Y.images?.length){let J=Y.images.map((Q)=>({type:"image",source:{type:"base64",media_type:Q.mediaType,data:Q.base64}}));J.push({type:"text",text:Y.content}),Z.push({role:"user",content:J})}else Z.push({role:"user",content:Y.content});else if(Y.role==="assistant")if(Y.toolCalls?.length){let J=[];if(Y.content)J.push({type:"text",text:Y.content});for(let Q of Y.toolCalls)J.push({type:"tool_use",id:Q.id,name:Q.name,input:Q.input});Z.push({role:"assistant",content:J}),Z.push({role:"user",content:Y.toolCalls.map((Q)=>({type:"tool_result",tool_use_id:Q.id,content:Q.result}))})}else Z.push({role:"assistant",content:Y.content});return Z}t();import{existsSync as O$,mkdirSync as aZ,readdirSync as rZ,readFileSync as A7,unlinkSync as sZ,renameSync as x7}from"fs";import{join as X$}from"path";class D7{sessionsDir;archiveDir;current;constructor($){if(this.sessionsDir=X$($,"sessions"),this.archiveDir=X$($,"sessions","archive"),!O$(this.sessionsDir))aZ(this.sessionsDir,{recursive:!0});if(!O$(this.archiveDir))aZ(this.archiveDir,{recursive:!0});this.current=this.loadOrCreate("default")}get session(){return this.current}get messages(){return this.current.messages}addMessage($){this.current.messages.push($),this.current.updated=Date.now(),this.save()}trimHistory($){if(this.current.messages.length>$)this.current.messages=this.current.messages.slice(-$),this.save()}clear(){this.current.messages=[],this.current.updated=Date.now(),this.save()}popMessages($){let Z=this.current.messages.splice(-$,$);return this.current.updated=Date.now(),this.save(),Z}switchTo($){return this.current=this.loadOrCreate($),this.current}list(){if(!O$(this.sessionsDir))return[];return rZ(this.sessionsDir).filter(($)=>$.endsWith(".json")).map(($)=>$.replace(".json",""))}getInfo($){let Z=X$(this.sessionsDir,`${$}.json`);if(!O$(Z))return null;try{let Y=JSON.parse(A7(Z,"utf-8"));return{messageCount:Y.messages.length,updated:Y.updated}}catch{return null}}delete($){let Z=X$(this.sessionsDir,`${$}.json`);if(O$(Z))return sZ(Z),!0;return!1}fork($){let Z={id:crypto.randomUUID(),name:$,messages:[...this.current.messages],created:Date.now(),updated:Date.now()},Y=X$(this.sessionsDir,`${$}.json`);return P(Y,JSON.stringify(Z,null,2)),this.current=Z,Z}archive($){if($===this.current.name)return!1;let Z=X$(this.sessionsDir,`${$}.json`);if(!O$(Z))return!1;let Y=X$(this.archiveDir,`${$}.json`);return x7(Z,Y),!0}archiveAll(){let $=[],Z=this.list().filter((Y)=>Y!==this.current.name);for(let Y of Z)if(this.archive(Y))$.push(Y);return $}unarchive($){let Z=X$(this.archiveDir,`${$}.json`);if(!O$(Z))return!1;let Y=X$(this.sessionsDir,`${$}.json`);return x7(Z,Y),!0}listArchived(){if(!O$(this.archiveDir))return[];return rZ(this.archiveDir).filter(($)=>$.endsWith(".json")).map(($)=>$.replace(".json",""))}getArchivedInfo($){let Z=X$(this.archiveDir,`${$}.json`);if(!O$(Z))return null;try{let Y=JSON.parse(A7(Z,"utf-8"));return{messageCount:Y.messages.length,updated:Y.updated}}catch{return null}}deleteArchived($){let Z=X$(this.archiveDir,`${$}.json`);if(O$(Z))return sZ(Z),!0;return!1}loadOrCreate($){let Z=X$(this.sessionsDir,`${$}.json`);if(O$(Z))try{return JSON.parse(A7(Z,"utf-8"))}catch{let J=X$(this.sessionsDir,`${$}.corrupt.json`);try{x7(Z,J)}catch{}}let Y={id:crypto.randomUUID(),name:$,messages:[],created:Date.now(),updated:Date.now()};return P(Z,JSON.stringify(Y,null,2)),Y}save(){let $=X$(this.sessionsDir,`${this.current.name}.json`);P($,JSON.stringify(this.current,null,2))}}import{existsSync as $6,readdirSync as eQ,readFileSync as Z6}from"fs";import{join as P7}from"path";import{existsSync as T7,readFileSync as tZ}from"fs";import{basename as rQ,join as u0}from"path";function eZ(){let $=process.cwd(),Z=[];if(Z.push(`Working directory: ${$}`),Z.push(`Platform: ${process.platform} (${process.arch})`),Z.push(`Shell: ${a7()}`),Z.push(`Runtime: Bun ${Bun.version}`),Z.push(`Date: ${new Date().toISOString().split("T")[0]}`),A)Z.push("Note: Use PowerShell syntax for commands (e.g., Get-ChildItem instead of ls, Get-Content instead of cat).");let Y=sQ($);if(Y)Z.push(`Project: ${Y}`);let J=tQ($);if(J)Z.push(J);return Z.join(`
325
- `)}function sQ($){let Z=[["package.json","Node.js/JavaScript"],["Cargo.toml","Rust"],["go.mod","Go"],["pyproject.toml","Python"],["requirements.txt","Python"],["pom.xml","Java (Maven)"],["build.gradle","Java (Gradle)"],["Gemfile","Ruby"],["composer.json","PHP"],["Makefile","Make"],["CMakeLists.txt","C/C++ (CMake)"],["Dockerfile","Docker"]],Y=[];for(let[Q,X]of Z)if(T7(u0($,Q)))Y.push(X);if(Y.length===0)return null;let J=rQ($);try{let Q=u0($,"package.json");if(T7(Q)){let X=JSON.parse(tZ(Q,"utf-8"));if(X.name)J=X.name}}catch{}return`Project: ${J} (${Y.join(", ")})`}function tQ($){if(!T7(u0($,".git")))return null;let Z=[];try{let Y=tZ(u0($,".git","HEAD"),"utf-8").trim(),J=Y.startsWith("ref: refs/heads/")?Y.slice(16):Y.slice(0,8);Z.push(`Git branch: ${J}`)}catch{return Z.push("Git: initialized"),Z.join(`
326
- `)}try{let Y=Bun.spawnSync(["git","log","--oneline","-1"],{cwd:$,stdout:"pipe",stderr:"pipe"});if(Y.exitCode===0){let J=new TextDecoder().decode(Y.stdout).trim();if(J)Z.push(`Last commit: ${J}`)}}catch{}try{let Y=Bun.spawnSync(["git","diff","--stat","--stat-width=60"],{cwd:$,stdout:"pipe",stderr:"pipe"});if(Y.exitCode===0){let J=new TextDecoder().decode(Y.stdout).trim();if(J){let Q=J.split(`
360
+ `),X=[],K=Y.slice(0,J);for(let G of K)X.push(` \x1B[31m- ${G}\x1B[0m`);if(Y.length>J)X.push(` \x1B[2m ... (${Y.length-J} more removed)\x1B[0m`);let V=Q.slice(0,J);for(let G of V)X.push(` \x1B[32m+ ${G}\x1B[0m`);if(Q.length>J)X.push(` \x1B[2m ... (${Q.length-J} more added)\x1B[0m`);return X}class y9{model;maxTokens;client;approvalMode;approvalCallback=null;autoApproveAll=!1;onAuthExpired=null;constructor($,Z,J,Y="auto"){this.model=Z;this.maxTokens=J;this.client=new w$({apiKey:$}),this.approvalMode=Y}updateApiKey($){this.client=new w$({apiKey:$})}setAuthRefresh($){this.onAuthExpired=$}setModel($){this.model=$}setApprovalMode($){this.approvalMode=$}setApprovalCallback($){this.approvalCallback=$}setAutoApproveAll($){this.autoApproveAll=$}async*chat($,Z,J=!0){let Y=U3($),Q=O4(Z);if(H3(Y,this.model,Q)){let G=q3(Y,this.model,Q);if(G)try{let z={role:"assistant",content:`[Conversation summary]
361
+ ${await this.generateSummary(G.toSummarize)}`,timestamp:Date.now()};Y=[{role:"user",content:"Continue from this summary of our earlier conversation.",timestamp:Date.now()},z,...G.toKeep]}catch{}}let X=G3(Y,this.model,Q),K=iV(X),V=J?p:void 0;try{yield*this.streamLoop(K,Z,V)}catch(G){yield{type:"error",error:b9(G)}}}async generateSummary($){let Z=W3($),Y=(await this.client.messages.create({model:this.model,max_tokens:1024,messages:[{role:"user",content:Z}]})).content.find((Q)=>Q.type==="text");return Y?.type==="text"?Y.text:"Summary unavailable."}async*streamLoop($,Z,J){let Q=[...$],X=0;while(X++<25){let K;try{K=await V3(async()=>{return this.client.messages.stream({model:this.model,max_tokens:this.maxTokens,system:Z,messages:Q,...J?.length?{tools:J}:{}})},{onAuthExpired:this.onAuthExpired??void 0})}catch(z){yield{type:"error",error:b9(z)};return}for await(let z of K)if(z.type==="content_block_delta"&&z.delta.type==="text_delta")yield{type:"text",text:z.delta.text};let V=await K.finalMessage();if(V.usage)yield{type:"usage",inputTokens:V.usage.input_tokens,outputTokens:V.usage.output_tokens};if(V.stop_reason!=="tool_use"){yield{type:"done"};return}let G=V.content.filter((z)=>z.type==="tool_use");Q.push({role:"assistant",content:V.content});let H=[];for(let z of G){let B=z.input,U=B3(z.name,B);if(U.level==="dangerous"){yield{type:"tool_blocked",id:z.id,name:z.name,reason:`Blocked dangerous operation: ${U.reason}`},H.push({type:"tool_result",tool_use_id:z.id,content:`Error: Operation blocked for safety. Reason: ${U.reason}. This command appears dangerous and was not executed.`});continue}if(!this.autoApproveAll&&N3(this.approvalMode,z.name,U.level)&&this.approvalCallback){if(yield{type:"tool_call",id:z.id,name:z.name,input:z.input},!await this.approvalCallback(z.name,B,U.level)){yield{type:"tool_blocked",id:z.id,name:z.name,reason:"Rejected by user"},H.push({type:"tool_result",tool_use_id:z.id,content:"Error: User rejected this operation."});continue}let P=await S9(z.name,B);yield{type:"tool_result",id:z.id,name:z.name,result:P},H.push({type:"tool_result",tool_use_id:z.id,content:P});continue}yield{type:"tool_call",id:z.id,name:z.name,input:z.input};let M=await S9(z.name,B);yield{type:"tool_result",id:z.id,name:z.name,result:M},H.push({type:"tool_result",tool_use_id:z.id,content:M})}Q.push({role:"user",content:H})}yield{type:"error",error:"Stopped after 25 tool rounds to prevent runaway execution."}}}function iV($){let Z=[];for(let J of $)if(J.role==="user")if(J.images?.length){let Y=J.images.map((Q)=>({type:"image",source:{type:"base64",media_type:Q.mediaType,data:Q.base64}}));Y.push({type:"text",text:J.content}),Z.push({role:"user",content:Y})}else Z.push({role:"user",content:J.content});else if(J.role==="assistant")if(J.toolCalls?.length){let Y=[];if(J.content)Y.push({type:"text",text:J.content});for(let Q of J.toolCalls)Y.push({type:"tool_use",id:Q.id,name:Q.name,input:Q.input});Z.push({role:"assistant",content:Y}),Z.push({role:"user",content:J.toolCalls.map((Q)=>({type:"tool_result",tool_use_id:Q.id,content:Q.result}))})}else Z.push({role:"assistant",content:J.content});return Z}a();import{existsSync as E$,mkdirSync as j3,readdirSync as O3,readFileSync as x7,unlinkSync as F3,renameSync as _9}from"fs";import{join as J$}from"path";class v9{sessionsDir;archiveDir;current;constructor($){if(this.sessionsDir=J$($,"sessions"),this.archiveDir=J$($,"sessions","archive"),!E$(this.sessionsDir))j3(this.sessionsDir,{recursive:!0});if(!E$(this.archiveDir))j3(this.archiveDir,{recursive:!0});this.current=this.loadOrCreate("default")}get session(){return this.current}get messages(){return this.current.messages}addMessage($){this.current.messages.push($),this.current.updated=Date.now(),this.save()}trimHistory($){if(this.current.messages.length>$)this.current.messages=this.current.messages.slice(-$),this.save()}clear(){this.current.messages=[],this.current.updated=Date.now(),this.save()}popMessages($){let Z=this.current.messages.splice(-$,$);return this.current.updated=Date.now(),this.save(),Z}switchTo($){return this.current=this.loadOrCreate($),this.saveLastSession(),this.current}list(){if(!E$(this.sessionsDir))return[];return O3(this.sessionsDir).filter(($)=>$.endsWith(".json")).map(($)=>$.replace(".json",""))}getInfo($){let Z=J$(this.sessionsDir,`${$}.json`);if(!E$(Z))return null;try{let J=JSON.parse(x7(Z,"utf-8"));return{messageCount:J.messages.length,updated:J.updated}}catch{return null}}delete($){let Z=J$(this.sessionsDir,`${$}.json`);if(E$(Z))return F3(Z),!0;return!1}fork($){let Z={id:crypto.randomUUID(),name:$,messages:[...this.current.messages],created:Date.now(),updated:Date.now()},J=J$(this.sessionsDir,`${$}.json`);return S(J,JSON.stringify(Z,null,2)),this.current=Z,Z}archive($){if($===this.current.name)return!1;let Z=J$(this.sessionsDir,`${$}.json`);if(!E$(Z))return!1;let J=J$(this.archiveDir,`${$}.json`);return _9(Z,J),!0}archiveAll(){let $=[],Z=this.list().filter((J)=>J!==this.current.name);for(let J of Z)if(this.archive(J))$.push(J);return $}unarchive($){let Z=J$(this.archiveDir,`${$}.json`);if(!E$(Z))return!1;let J=J$(this.sessionsDir,`${$}.json`);return _9(Z,J),!0}listArchived(){if(!E$(this.archiveDir))return[];return O3(this.archiveDir).filter(($)=>$.endsWith(".json")).map(($)=>$.replace(".json",""))}getArchivedInfo($){let Z=J$(this.archiveDir,`${$}.json`);if(!E$(Z))return null;try{let J=JSON.parse(x7(Z,"utf-8"));return{messageCount:J.messages.length,updated:J.updated}}catch{return null}}deleteArchived($){let Z=J$(this.archiveDir,`${$}.json`);if(E$(Z))return F3(Z),!0;return!1}loadOrCreate($){let Z=J$(this.sessionsDir,`${$}.json`);if(E$(Z))try{return JSON.parse(x7(Z,"utf-8"))}catch{let Y=J$(this.sessionsDir,`${$}.corrupt.json`);try{_9(Z,Y)}catch{}}let J={id:crypto.randomUUID(),name:$,messages:[],created:Date.now(),updated:Date.now()};return S(Z,JSON.stringify(J,null,2)),J}saveLastSession(){let $=J$(this.sessionsDir,"..","last-session.txt");S($,this.current.name)}getLastSession(){let $=J$(this.sessionsDir,"..","last-session.txt");if(!E$($))return null;try{let Z=x7($,"utf-8").trim();if(!Z||!E$(J$(this.sessionsDir,`${Z}.json`)))return null;return Z}catch{return null}}save(){let $=J$(this.sessionsDir,`${this.current.name}.json`);S($,JSON.stringify(this.current,null,2))}}import{existsSync as L3,readdirSync as $G,readFileSync as P3}from"fs";import{join as h9}from"path";e();import{existsSync as f9,readFileSync as E3}from"fs";import{basename as sV,join as S7}from"path";function R3(){let $=process.cwd(),Z=[];if(Z.push(`Working directory: ${$}`),Z.push(`Platform: ${process.platform} (${process.arch})`),Z.push(`Shell: ${EZ()}`),Z.push(`Runtime: Bun ${Bun.version}`),Z.push(`Date: ${new Date().toISOString().split("T")[0]}`),I)Z.push("Note: Use PowerShell syntax for commands (e.g., Get-ChildItem instead of ls, Get-Content instead of cat).");let J=tV($);if(J)Z.push(`Project: ${J}`);let Y=eV($);if(Y)Z.push(Y);return Z.join(`
362
+ `)}function tV($){let Z=[["package.json","Node.js/JavaScript"],["Cargo.toml","Rust"],["go.mod","Go"],["pyproject.toml","Python"],["requirements.txt","Python"],["pom.xml","Java (Maven)"],["build.gradle","Java (Gradle)"],["Gemfile","Ruby"],["composer.json","PHP"],["Makefile","Make"],["CMakeLists.txt","C/C++ (CMake)"],["Dockerfile","Docker"]],J=[];for(let[Q,X]of Z)if(f9(S7($,Q)))J.push(X);if(J.length===0)return null;let Y=sV($);try{let Q=S7($,"package.json");if(f9(Q)){let X=JSON.parse(E3(Q,"utf-8"));if(X.name)Y=X.name}}catch{}return`Project: ${Y} (${J.join(", ")})`}function eV($){if(!f9(S7($,".git")))return null;let Z=[];try{let J=E3(S7($,".git","HEAD"),"utf-8").trim(),Y=J.startsWith("ref: refs/heads/")?J.slice(16):J.slice(0,8);Z.push(`Git branch: ${Y}`)}catch{return Z.push("Git: initialized"),Z.join(`
363
+ `)}try{let J=Bun.spawnSync(["git","log","--oneline","-1"],{cwd:$,stdout:"pipe",stderr:"pipe"});if(J.exitCode===0){let Y=new TextDecoder().decode(J.stdout).trim();if(Y)Z.push(`Last commit: ${Y}`)}}catch{}try{let J=Bun.spawnSync(["git","diff","--stat","--stat-width=60"],{cwd:$,stdout:"pipe",stderr:"pipe"});if(J.exitCode===0){let Y=new TextDecoder().decode(J.stdout).trim();if(Y){let Q=Y.split(`
327
364
  `),X=Q.slice(0,15);if(Q.length>15)X.push(`... and ${Q.length-15} more files`);Z.push(`Uncommitted changes:
328
365
  `+X.join(`
329
- `))}}}catch{}try{let Y=Bun.spawnSync(["git","diff","--cached","--stat","--stat-width=60"],{cwd:$,stdout:"pipe",stderr:"pipe"});if(Y.exitCode===0){let J=new TextDecoder().decode(Y.stdout).trim();if(J){let Q=J.split(`
366
+ `))}}}catch{}try{let J=Bun.spawnSync(["git","diff","--cached","--stat","--stat-width=60"],{cwd:$,stdout:"pipe",stderr:"pipe"});if(J.exitCode===0){let Y=new TextDecoder().decode(J.stdout).trim();if(Y){let Q=Y.split(`
330
367
  `).slice(0,10);Z.push(`Staged:
331
368
  `+Q.join(`
332
369
  `))}}}catch{}return Z.length>0?Z.join(`
333
- `):null}function Y6($,Z){if(!$6($))return[];let Y=[],J=eQ($,{withFileTypes:!0});for(let Q of J)if(Q.isFile()&&Q.name.endsWith(".md")){let X=Z6(P7($,Q.name),"utf-8");Y.push({name:Q.name.replace(".md",""),content:X.trim(),source:Z})}else if(Q.isDirectory()){let X=P7($,Q.name,"SKILL.md");if($6(X)){let K=Z6(X,"utf-8");Y.push({name:Q.name,content:K.trim(),source:Z})}}return Y}function J6($){let Z=Y6($,"global"),Y=P7(process.cwd(),".smolerclaw","skills"),J=Y6(Y,"local"),Q=new Map;for(let X of Z)Q.set(X.name,X);for(let X of J)Q.set(X.name,X);return[...Q.values()]}function Q6($){if($.length===0)return"No skills loaded.";return`Skills:
370
+ `):null}function D3($,Z){if(!L3($))return[];let J=[],Y=$G($,{withFileTypes:!0});for(let Q of Y)if(Q.isFile()&&Q.name.endsWith(".md")){let X=P3(h9($,Q.name),"utf-8");J.push({name:Q.name.replace(".md",""),content:X.trim(),source:Z})}else if(Q.isDirectory()){let X=h9($,Q.name,"SKILL.md");if(L3(X)){let K=P3(X,"utf-8");J.push({name:Q.name,content:K.trim(),source:Z})}}return J}function T3($){let Z=D3($,"global"),J=h9(process.cwd(),".smolerclaw","skills"),Y=D3(J,"local"),Q=new Map;for(let X of Z)Q.set(X.name,X);for(let X of Y)Q.set(X.name,X);return[...Q.values()]}function I3($){if($.length===0)return"No skills loaded.";return`Skills:
334
371
  `+$.map((Z)=>` ${Z.name} [${Z.source}]`).join(`
335
- `)}function w7($,Z,Y="auto"){let J=[];for(let Q of Z)J.push(Q.content);if(Y&&Y!=="auto"){let X={pt:"Portuguese (Brazilian)",en:"English",es:"Spanish",fr:"French",de:"German",it:"Italian",ja:"Japanese",ko:"Korean",zh:"Chinese"}[Y]||Y;J.push(`## Language Override
336
- ALWAYS respond in ${X}. This is a hard requirement.`)}if(J.push(`---
372
+ `)}function g9($,Z,J="auto"){let Y=[];for(let Q of Z)Y.push(Q.content);if(J&&J!=="auto"){let X={pt:"Portuguese (Brazilian)",en:"English",es:"Spanish",fr:"French",de:"German",it:"Italian",ja:"Japanese",ko:"Korean",zh:"Chinese"}[J]||J;Y.push(`## Language Override
373
+ ALWAYS respond in ${X}. This is a hard requirement.`)}if(Y.push(`---
374
+ ## Meta-Learning & Self-Awareness
375
+ You are aware of your own updates and capabilities. Your usage patterns are being observed to improve your helpfulness.
376
+
377
+ **Proactive Optimization:**
378
+ - If the user performs an inefficient workflow (e.g., multiple manual steps that could be a workflow), suggest the \`update_living_manual\` tool to document a better approach.
379
+ - If you notice repetitive patterns, suggest creating a workflow or using \`trigger_self_reflection\` to analyze usage.
380
+ - When the user seems unfamiliar with available tools, use \`explain_optimal_usage\` to provide contextual guidance.
381
+
382
+ **Living Manual:**
383
+ - Your local manual at ~/.config/smolerclaw/materials/manual/ contains best practices learned from past sessions.
384
+ - Consult it when giving advice. Update it when discovering new patterns.
385
+ - The manual evolves based on actual usage - treat it as a living document.
386
+
387
+ **Self-Reflection:**
388
+ - At session end or when explicitly asked, run self-reflection to generate insights.
389
+ - Share relevant insights proactively when they might help the current task.`),Y.push(`---
337
390
  ## Environment
338
391
  The user's current working directory and project info. Use this context when they ask about code or files.
339
392
 
340
- `+eZ()),$)J.push(`## User Instructions
341
- `+$);return J.join(`
393
+ `+R3()),$)Y.push(`## User Instructions
394
+ `+$);return Y.join(`
342
395
 
343
- `)}var $X=!!(process.env.NO_COLOR||process.env.TERM==="dumb");function R$($){return $X?"":$}var B={altOn:R$("\x1B[?1049h"),altOff:R$("\x1B[?1049l"),clear:"\x1B[2J",clearLine:"\x1B[2K",hide:"\x1B[?25l",show:"\x1B[?25h",to:($,Z)=>`\x1B[${$};${Z}H`,bold:R$("\x1B[1m"),dim:R$("\x1B[2m"),italic:R$("\x1B[3m"),underline:R$("\x1B[4m"),reset:R$("\x1B[0m"),inv:R$("\x1B[7m"),fg:($)=>R$(`\x1B[38;5;${$}m`),bg:($)=>R$(`\x1B[48;5;${$}m`)};var c={user:B.fg(75),ai:B.fg(114),tool:B.fg(215),err:B.fg(196),sys:B.fg(245),prompt:B.fg(220),code:B.fg(180),heading:B.fg(75),link:B.fg(39),quote:B.fg(245)};function x($){process.stdout.write($)}var ZX=/\x1b\[[0-9;]*[a-zA-Z]/g;function p0($){return $.replace(ZX,"")}function YX($){let Z=$.codePointAt(0)||0;if(Z>=4352&&Z<=4447||Z>=11904&&Z<=42191&&Z!==12351||Z>=44032&&Z<=55203||Z>=63744&&Z<=64255||Z>=65040&&Z<=65135||Z>=65281&&Z<=65376||Z>=65504&&Z<=65510||Z>=127744&&Z<=130047||Z>=131072&&Z<=196607)return 2;return 1}function l0($){let Z=p0($),Y=0;for(let J of Z)Y+=YX(J);return Y}function X6($,Z){if(Z<10)Z=10;let Y=[];for(let J of $.split(`
344
- `)){if(l0(J)<=Z){Y.push(J);continue}let K=p0(J).split(" "),V=[],G="";for(let z of K)if(G.length+(G?1:0)+z.length>Z&&G)V.push(G),G=" "+z;else G+=(G?" ":"")+z;if(G)V.push(G);let H=JX(J);for(let z=0;z<V.length;z++)if(H&&z===0)V[z]=H+V[z]+B.reset;else if(H)V[z]=H+V[z]+B.reset;Y.push(...V)}return Y}function JX($){let Z=$.match(/^(\x1b\[[0-9;]*[a-zA-Z])+/);return Z?Z[0]:""}function n0($){let Z=$.split(`
345
- `),Y=[],J=!1,Q="";for(let X=0;X<Z.length;X++){let K=Z[X];if(K.trimStart().startsWith("```")){if(!J){J=!0,Q=K.trimStart().slice(3).trim();let z=Q?` ${Q}`:"";Y.push(` ${B.dim}\u250C\u2500\u2500${z}${"\u2500".repeat(Math.max(1,40-z.length))}${B.reset}`)}else J=!1,Q="",Y.push(` ${B.dim}\u2514${"\u2500".repeat(42)}${B.reset}`);continue}if(J){Y.push(` ${B.dim}\u2502${B.reset} ${c.code}${K}${B.reset}`);continue}if(!K.trim()){Y.push("");continue}let V=K.match(/^(#{1,3})\s+(.+)/);if(V){let z=V[1].length,M=V[2],N=z===1?"\u2501":z===2?"\u2500":"\xB7";Y.push(` ${c.heading}${B.bold}${N} ${a4(M)}${B.reset}`);continue}if(K.trimStart().startsWith(">")){let z=K.replace(/^\s*>\s?/,"");Y.push(` ${c.quote}\u2502 ${a4(z)}${B.reset}`);continue}let G=K.match(/^(\s*)([-*+])\s+(.+)/);if(G){let z=Math.floor(G[1].length/2),M=G[3],N=" ".repeat(z);Y.push(` ${N}${B.dim}\u2022${B.reset} ${a4(M)}`);continue}let H=K.match(/^(\s*)(\d+)[.)]\s+(.+)/);if(H){let z=Math.floor(H[1].length/2),M=H[2],N=H[3],E=" ".repeat(z);Y.push(` ${E}${B.dim}${M}.${B.reset} ${a4(N)}`);continue}if(/^[-*_]{3,}\s*$/.test(K.trim())){Y.push(` ${B.dim}${"\u2500".repeat(40)}${B.reset}`);continue}Y.push(` ${a4(K)}`)}if(J)Y.push(` ${B.dim}\u2514${"\u2500".repeat(42)}${B.reset}`);return Y}function a4($){let Z=$;return Z=Z.replace(/`([^`]+)`/g,`${B.inv} $1 ${B.reset}`),Z=Z.replace(/\*\*\*(.+?)\*\*\*/g,`${B.bold}${B.italic}$1${B.reset}`),Z=Z.replace(/\*\*(.+?)\*\*/g,`${B.bold}$1${B.reset}`),Z=Z.replace(/__(.+?)__/g,`${B.bold}$1${B.reset}`),Z=Z.replace(/\*(.+?)\*/g,`${B.italic}$1${B.reset}`),Z=Z.replace(/_(.+?)_/g,`${B.italic}$1${B.reset}`),Z=Z.replace(/\[([^\]]+)\]\(([^)]+)\)/g,`${B.underline}$1${B.reset} ${c.link}($2)${B.reset}`),Z}import{existsSync as QX,readFileSync as XX,writeFileSync as KX}from"fs";var I7=500;class S7{filePath;entries=[];cursor=-1;pending="";constructor($){this.filePath=$;this.load()}add($){let Z=$.trim();if(!Z)return;if(this.entries.length>0&&this.entries[this.entries.length-1]===Z)return;if(this.entries.push(Z),this.entries.length>I7)this.entries=this.entries.slice(-I7);this.cursor=-1,this.pending="",this.save()}prev($){if(this.entries.length===0)return null;if(this.cursor===-1)this.pending=$,this.cursor=this.entries.length-1;else if(this.cursor>0)this.cursor--;else return this.entries[0];return this.entries[this.cursor]}next(){if(this.cursor===-1)return this.pending;if(this.cursor<this.entries.length-1)return this.cursor++,this.entries[this.cursor];return this.cursor=-1,this.pending}reset(){this.cursor=-1,this.pending=""}load(){try{if(QX(this.filePath)){let $=XX(this.filePath,"utf-8");this.entries=$.split(`
346
- `).filter(Boolean).slice(-I7)}}catch{}}save(){try{KX(this.filePath,this.entries.join(`
396
+ `)}var ZG=!!(process.env.NO_COLOR||process.env.TERM==="dumb");function y$($){return ZG?"":$}var W={altOn:y$("\x1B[?1049h"),altOff:y$("\x1B[?1049l"),clear:"\x1B[2J",clearLine:"\x1B[2K",hide:"\x1B[?25l",show:"\x1B[?25h",to:($,Z)=>`\x1B[${$};${Z}H`,bold:y$("\x1B[1m"),dim:y$("\x1B[2m"),italic:y$("\x1B[3m"),underline:y$("\x1B[4m"),reset:y$("\x1B[0m"),inv:y$("\x1B[7m"),fg:($)=>y$(`\x1B[38;5;${$}m`),bg:($)=>y$(`\x1B[48;5;${$}m`)};var k={user:W.fg(75),ai:W.fg(114),tool:W.fg(215),err:W.fg(196),sys:W.fg(245),prompt:W.fg(220),code:W.fg(180),heading:W.fg(75),link:W.fg(39),quote:W.fg(245)},JG={primary:W.fg(75),secondary:W.fg(39),accent:W.fg(220),muted:W.fg(245),header:W.fg(81)},YG={primary:W.fg(215),secondary:W.fg(220),accent:W.fg(196),muted:W.fg(245),header:W.fg(214)},QG={primary:W.fg(183),secondary:W.fg(157),accent:W.fg(147),muted:W.fg(242),header:W.fg(183)};function m9($){switch($){case"productivity":return JG;case"spillover_alert":return YG;case"sharpen_or_relax":return QG}}function F($){process.stdout.write($)}var XG=/\x1b\[[0-9;]*[a-zA-Z]/g;function _$($){return $.replace(XG,"")}function A3($){let Z=$.codePointAt(0)||0;if(Z>=4352&&Z<=4447||Z>=11904&&Z<=42191&&Z!==12351||Z>=44032&&Z<=55203||Z>=63744&&Z<=64255||Z>=65040&&Z<=65135||Z>=65281&&Z<=65376||Z>=65504&&Z<=65510||Z>=127744&&Z<=130047||Z>=131072&&Z<=196607)return 2;return 1}function W$($){let Z=_$($),J=0;for(let Y of Z)J+=A3(Y);return J}function x3($,Z){if(Z<1)return"";if(W$($)<=Z)return $;let J=_$($),Y=0,Q=0;for(let X of J){let K=A3(X);if(Y+K>Z-1)break;Y+=K,Q+=X.length}return J.slice(0,Q)+"\u2026"}function w7($,Z){if(Z<10)Z=10;let J=[];for(let Y of $.split(`
397
+ `)){if(W$(Y)<=Z){J.push(Y);continue}let K=_$(Y).split(" "),V=[],G="";for(let z of K)if(G.length+(G?1:0)+z.length>Z&&G)V.push(G),G=" "+z;else G+=(G?" ":"")+z;if(G)V.push(G);let H=KG(Y);for(let z=0;z<V.length;z++)if(H&&z===0)V[z]=H+V[z]+W.reset;else if(H)V[z]=H+V[z]+W.reset;J.push(...V)}return J}function KG($){let Z=$.match(/^(\x1b\[[0-9;]*[a-zA-Z])+/);return Z?Z[0]:""}function k7($){let Z=$.split(`
398
+ `),J=[],Y=!1,Q="";for(let X=0;X<Z.length;X++){let K=Z[X];if(K.trimStart().startsWith("```")){if(!Y){Y=!0,Q=K.trimStart().slice(3).trim();let z=Q?` ${Q}`:"";J.push(` ${W.dim}\u250C\u2500\u2500${z}${"\u2500".repeat(Math.max(1,40-z.length))}${W.reset}`)}else Y=!1,Q="",J.push(` ${W.dim}\u2514${"\u2500".repeat(42)}${W.reset}`);continue}if(Y){J.push(` ${W.dim}\u2502${W.reset} ${k.code}${K}${W.reset}`);continue}if(!K.trim()){J.push("");continue}let V=K.match(/^(#{1,3})\s+(.+)/);if(V){let z=V[1].length,B=V[2],U=z===1?"\u2501":z===2?"\u2500":"\xB7";J.push(` ${k.heading}${W.bold}${U} ${A0(B)}${W.reset}`);continue}if(K.trimStart().startsWith(">")){let z=K.replace(/^\s*>\s?/,"");J.push(` ${k.quote}\u2502 ${A0(z)}${W.reset}`);continue}let G=K.match(/^(\s*)([-*+])\s+(.+)/);if(G){let z=Math.floor(G[1].length/2),B=G[3],U=" ".repeat(z);J.push(` ${U}${W.dim}\u2022${W.reset} ${A0(B)}`);continue}let H=K.match(/^(\s*)(\d+)[.)]\s+(.+)/);if(H){let z=Math.floor(H[1].length/2),B=H[2],U=H[3],M=" ".repeat(z);J.push(` ${M}${W.dim}${B}.${W.reset} ${A0(U)}`);continue}if(/^[-*_]{3,}\s*$/.test(K.trim())){J.push(` ${W.dim}${"\u2500".repeat(40)}${W.reset}`);continue}J.push(` ${A0(K)}`)}if(Y)J.push(` ${W.dim}\u2514${"\u2500".repeat(42)}${W.reset}`);return J}function A0($){let Z=$;return Z=Z.replace(/`([^`]+)`/g,`${W.inv} $1 ${W.reset}`),Z=Z.replace(/\*\*\*(.+?)\*\*\*/g,`${W.bold}${W.italic}$1${W.reset}`),Z=Z.replace(/\*\*(.+?)\*\*/g,`${W.bold}$1${W.reset}`),Z=Z.replace(/__(.+?)__/g,`${W.bold}$1${W.reset}`),Z=Z.replace(/\*(.+?)\*/g,`${W.italic}$1${W.reset}`),Z=Z.replace(/_(.+?)_/g,`${W.italic}$1${W.reset}`),Z=Z.replace(/\[([^\]]+)\]\(([^)]+)\)/g,`${W.underline}$1${W.reset} ${k.link}($2)${W.reset}`),Z}import{existsSync as zG,readFileSync as VG,writeFileSync as GG}from"fs";var p9=500;class c9{filePath;entries=[];cursor=-1;pending="";constructor($){this.filePath=$;this.load()}add($){let Z=$.trim();if(!Z)return;if(this.entries.length>0&&this.entries[this.entries.length-1]===Z)return;if(this.entries.push(Z),this.entries.length>p9)this.entries=this.entries.slice(-p9);this.cursor=-1,this.pending="",this.save()}prev($){if(this.entries.length===0)return null;if(this.cursor===-1)this.pending=$,this.cursor=this.entries.length-1;else if(this.cursor>0)this.cursor--;else return this.entries[0];return this.entries[this.cursor]}next(){if(this.cursor===-1)return this.pending;if(this.cursor<this.entries.length-1)return this.cursor++,this.entries[this.cursor];return this.cursor=-1,this.pending}reset(){this.cursor=-1,this.pending=""}load(){try{if(zG(this.filePath)){let $=VG(this.filePath,"utf-8");this.entries=$.split(`
399
+ `).filter(Boolean).slice(-p9)}}catch{}}save(){try{GG(this.filePath,this.entries.join(`
347
400
  `)+`
348
- `)}catch{}}}import{join as zX}from"path";class b7{model;sessionName;authInfo;dataDir;width=80;height=24;lines=[];streamBuf="";streamLines=[];inputBuf="";inputPos=0;isStreaming=!1;scrollOffset=0;history=null;renderTimer=null;spinnerFrame=0;spinnerTimer=null;streamStartTime=0;sessionCost="";commands=["/help","/clear","/commit","/persona","/copy","/fork","/new","/load","/sessions","/delete","/model","/export","/cost","/retry","/undo","/search","/lang","/config","/exit","/briefing","/news","/open","/openfile","/openurl","/apps","/sysinfo","/calendar","/ask","/budget","/plugins","/task","/tasks","/done","/rmtask","/people","/team","/family","/person","/addperson","/delegate","/delegations","/followups","/dashboard","/contacts","/investigar","/investigate","/investigacoes","/monitor","/vigiar","/workflow","/fluxo","/pomodoro","/foco","/entrada","/saida","/income","/expense","/finance","/financas","/balanco","/decisions","/decisoes","/email","/rascunho","/memo","/memos","/note","/notas","/tags","/memotags","/rmmemo","/rmnota","/index","/indexar","/reindex","/memory","/memoria","/clipboard","/area","/tela","/screen","/ps1","/refresh","/renovar","/vault","/backup","/feeds","/fontes","/addfeed","/novafonte","/rmfeed","/rmfonte","/disablefeed","/desativarfonte","/enablefeed","/ativarfonte","/projeto","/project","/projetos","/projects","/sessao","/session","/relatorio","/report","/oportunidades","/opportunities","/anotar","/ajuda","/limpar","/commitar","/modo","/copiar","/novo","/carregar","/sessoes","/deletar","/modelo","/exportar","/custo","/repetir","/desfazer","/buscar","/idioma","/sair","/resumo","/noticias","/abrir","/programas","/sistema","/agenda","/calendario","/perguntar","/orcamento","/tarefa","/tarefas","/feito","/concluido","/rmtarefa","/pessoas","/equipe","/familia","/pessoa","/novapessoa","/addpessoa","/delegar","/delegacoes","/delegados","/painel","/contatos"];subcommands={"/model":["haiku","sonnet","sonnet-4.6","opus","opus-4.6"],"/modelo":["haiku","sonnet","sonnet-4.6","opus","opus-4.6"],"/news":["business","tech","finance","brazil","world","security"],"/noticias":["business","tech","finance","brazil","world","security"],"/open":["excel","word","powerpoint","outlook","onenote","teams","edge","chrome","firefox","calculator","notepad","terminal","explorer","vscode","cursor","paint","snip","settings","taskmanager"],"/abrir":["excel","word","powerpoint","outlook","onenote","teams","edge","chrome","firefox","calculator","notepad","terminal","explorer","vscode","cursor","paint","snip","settings","taskmanager"],"/sessao":["start","stop","status"],"/session":["start","stop","status"],"/relatorio":["today","week","month"],"/report":["today","week","month"],"/projeto":["auto"],"/project":["auto"],"/oportunidades":["nova","em_analise","aceita","recusada","concluida"],"/opportunities":["nova","em_analise","aceita","recusada","concluida"],"/persona":["default","business"],"/modo":["default","business"],"/people":["equipe","familia","contato"],"/pessoas":["equipe","familia","contato"],"/investigar":["bug","feature","test","audit","incident"],"/investigate":["bug","feature","test","audit","incident"],"/entrada":[],"/saida":[],"/lang":["pt","en","auto"],"/idioma":["pt","en","auto"],"/pomodoro":["start","stop","status"],"/foco":["start","stop","status"],"/monitor":["start","stop","list"],"/vigiar":["start","stop","list"],"/vault":["status","backup","sync","init"],"/workflow":["list","run","info","create","delete","enable","disable"],"/fluxo":["list","run","info","create","delete","ativar","desativar"]};onSubmit=null;onCancel=null;onExit=null;constructor($,Z,Y="",J){this.model=$;this.sessionName=Z;this.authInfo=Y;this.dataDir=J}start($){if(this.onSubmit=$.onSubmit,this.onCancel=$.onCancel,this.onExit=$.onExit,this.width=process.stdout.columns||80,this.height=process.stdout.rows||24,this.dataDir)this.history=new S7(zX(this.dataDir,"history"));x(B.altOn),process.stdin.setRawMode?.(!0),process.stdin.resume(),process.stdin.on("data",(Z)=>this.onKey(Z)),process.stdout.on("resize",()=>this.onResize()),this.render()}stop(){if(this.stopSpinner(),this.renderTimer)clearTimeout(this.renderTimer);process.stdin.setRawMode?.(!1),process.stdin.pause(),x(B.show),x(B.altOff)}addUserMessage($){this.addLabel("user"),this.addWrapped($),this.lines.push({text:""})}addAssistantMessage($){this.addLabel("assistant"),this.addMarkdown($),this.lines.push({text:""})}startStream(){this.isStreaming=!0,this.streamBuf="",this.streamLines=[],this.streamStartTime=Date.now(),this.addLabel("assistant"),this.startSpinner(),this.renderAll()}appendStream($){if(this.streamBuf+=$,!this.renderTimer)this.renderTimer=setTimeout(()=>{this.renderTimer=null,this.streamLines=n0(this.streamBuf).map((Z)=>({text:Z})),this.renderMessages(),this.renderInput()},50)}flushStream(){if(this.streamLines.length>0)this.lines.push(...this.streamLines),this.streamLines=[],this.streamBuf=""}resetStreamBuffer(){this.streamBuf="",this.streamLines=[]}endStream(){if(this.stopSpinner(),this.renderTimer)clearTimeout(this.renderTimer),this.renderTimer=null,this.streamLines=n0(this.streamBuf).map(($)=>({text:$}));this.lines.push(...this.streamLines),this.lines.push({text:""}),this.streamBuf="",this.streamLines=[],this.isStreaming=!1,this.scrollOffset=0,this.renderAll()}showToolCall($,Z){let Y=Z,J;switch($){case"read_file":if(J=String(Y.path||""),Y.offset)J+=`:${Y.offset}`;break;case"write_file":case"edit_file":J=String(Y.path||"");break;case"search_files":if(J=`/${Y.pattern||""}/`,Y.include)J+=` (${Y.include})`;break;case"find_files":J=String(Y.pattern||"");break;case"list_directory":J=String(Y.path||".");break;case"run_command":if(J=String(Y.command||""),J.length>80)J=J.slice(0,77)+"...";break;default:{let Q=JSON.stringify(Y);J=Q.length>80?Q.slice(0,77)+"...":Q}}this.lines.push({text:` ${c.tool}\u2699 ${$}${B.reset} ${B.dim}${J}${B.reset}`}),this.renderMessages()}showToolResult($,Z){let Y=Z.split(`
349
- `),J=8,Q=Y.slice(0,8);for(let X of Q){let K=X.length>this.width-6?X.slice(0,this.width-9)+"...":X;this.lines.push({text:` ${B.dim}${K}${B.reset}`})}if(Y.length>8)this.lines.push({text:` ${B.dim}... (${Y.length-8} more lines)${B.reset}`});this.renderMessages()}promptApproval($){return this.lines.push({text:` ${c.prompt}? ${$}${B.reset} ${B.dim}[y]es / [n]o / [a]ll${B.reset}`}),this.renderAll(),new Promise((Z)=>{let Y=(J)=>{let Q=J.toString().toLowerCase();if(Q==="y"||Q==="\r"||Q===`
350
- `)process.stdin.removeListener("data",Y),this.lines.push({text:` ${c.sys}approved${B.reset}`}),this.renderAll(),Z(!0);else if(Q==="n"||Q==="\x1B")process.stdin.removeListener("data",Y),this.lines.push({text:` ${c.err}rejected${B.reset}`}),this.renderAll(),Z(!1);else if(Q==="a")process.stdin.removeListener("data",Y),this.lines.push({text:` ${c.sys}approved all for this session${B.reset}`}),this.renderAll(),this._approveAllRequested=!0,Z(!0)};process.stdin.on("data",Y),setTimeout(()=>{process.stdin.removeListener("data",Y),this.lines.push({text:` ${B.dim}timeout \u2014 auto-rejected${B.reset}`}),this.renderAll(),Z(!1)},30000)})}_approveAllRequested=!1;promptSessionPicker($){if($.length===0)return this.showSystem("No sessions found."),Promise.resolve(null);return new Promise((Z)=>{let Y=$.findIndex((H)=>H.isCurrent);if(Y<0)Y=0;let J="",Q=!1,X=()=>{if(!J)return $;let H=J.toLowerCase();return $.filter((z)=>z.name.toLowerCase().includes(H))},K=()=>{let M=this.height-2-2,N=X();if(Y>=N.length)Y=Math.max(0,N.length-1);let E=2,L=2,w=M-E-L,S=Math.max(1,w),k=0;if(N.length>S)k=Math.max(0,Y-Math.floor(S/2)),k=Math.min(k,N.length-S);let f$=N.slice(k,k+S);if(x(B.hide),x(B.to(3,1)),x(B.clearLine),Q)x(` ${c.heading}${B.bold}Sessions${B.reset} ${B.dim}filter: ${J}\u2588${B.reset}`);else x(` ${c.heading}${B.bold}Sessions${B.reset} ${B.dim}(${N.length})${B.reset}`);x(B.to(4,1)),x(B.clearLine);for(let f=0;f<S;f++){let O=2+E+f+1;if(x(B.to(O,1)),x(B.clearLine),f>=f$.length)continue;let W=f$[f],C=k+f===Y,j=W.isCurrent?"*":" ",T=W.isArchived?`${B.dim}[arch] ${B.reset}`:" ",b=`${W.messageCount} msgs`.padEnd(10),a=GX(W.updated);if(C)x(` ${c.prompt}${B.bold}\u203A ${j} ${T}${c.prompt}${B.bold}${W.name.padEnd(20)}${B.reset} ${B.dim}${b} ${a}${B.reset}`);else{let A$=W.isArchived?B.dim:c.sys;x(` ${j} ${T}${A$}${W.name.padEnd(20)}${B.reset} ${B.dim}${b} ${a}${B.reset}`)}}for(let f=f$.length;f<S;f++){let O=2+E+f+1;x(B.to(O,1)),x(B.clearLine)}let h=2+E+S+1;if(x(B.to(h,1)),x(B.clearLine),N.length>S){let f=Math.round((Y+1)/N.length*100);x(` ${B.dim}${k>0?"\u2191":" "} ${f}% ${k+S<N.length?"\u2193":" "}${B.reset}`)}let o=this.height-2;x(B.to(o,1)),x(B.clearLine),x(` ${B.dim}\u2191\u2193 navigate Enter select Esc cancel / filter d delete a archive${B.reset}`)},V=(H)=>{process.stdin.removeListener("data",G),this.renderAll(),Z(H)},G=(H)=>{let z=H.toString("utf-8"),M=X();if(z==="\x1B"&&H.length===1){if(Q)Q=!1,J="",K();else V(null);return}if(z==="\x03"){V(null);return}if(z==="\r"||z===`
351
- `){if(M.length>0&&Y<M.length)V({action:"load",name:M[Y].name});return}if(z==="\x1B[A"){if(Y>0)Y--,K();return}if(z==="\x1B[B"){if(Y<M.length-1)Y++,K();return}if(z==="d"&&Q===!1){if(M.length>0&&Y<M.length){let N=M[Y];if(!N.isCurrent)V({action:"delete",name:N.name,isArchived:N.isArchived})}return}if(z==="a"&&Q===!1){if(M.length>0&&Y<M.length){let N=M[Y];if(!N.isCurrent){let E=N.isArchived?"unarchive":"archive";V({action:E,name:N.name})}}return}if(z==="/"&&Q===!1){Q=!0,J="",K();return}if(Q){if(z==="\x7F"||z==="\b"){if(J.length>0)J=J.slice(0,-1),Y=0,K();else Q=!1,K();return}if(z.length===1&&z>=" "){J+=z,Y=0,K();return}}};process.stdin.on("data",G),K()})}showUsage($){this.lines.push({text:` ${B.dim}tokens: ${$}${B.reset}`}),this.renderAll()}updateSessionCost($){this.sessionCost=$,this.renderHeader()}showError($){this.lines.push({text:` ${c.err}\u2717 ${$}${B.reset}`}),this.lines.push({text:""}),this.renderAll()}showSystem($){for(let Z of $.split(`
352
- `))this.lines.push({text:` ${c.sys}${Z}${B.reset}`});this.lines.push({text:""}),this.renderAll()}clearMessages(){this.lines=[],this.renderAll()}updateModel($){this.model=$,this.renderHeader()}updateSession($){this.sessionName=$,this.renderHeader()}enableInput(){this.inputBuf="",this.inputPos=0,this.isStreaming=!1,this.history?.reset(),this.renderInput()}disableInput(){x(B.hide)}render(){x(B.hide),x(B.clear),this.renderHeader(),this.renderMessages(),this.renderInput(),x(B.show)}renderAll(){this.renderMessages(),this.renderInput()}renderHeader(){x(B.to(1,1)),x(B.inv);let $=" smolerclaw",Z=[this.model,this.sessionName];if(this.sessionCost)Z.push(this.sessionCost);if(this.authInfo)Z.push(this.authInfo);let Y=Z.join(" | ")+" ",J=Math.max(1,this.width-$.length-Y.length);x($+" ".repeat(J)+Y),x(B.reset),x(B.to(2,1)),x(`${B.dim}${"\u2500".repeat(this.width)}${B.reset}`)}renderMessages(){let Y=this.height-2-2,J=[...this.lines,...this.streamLines],Q=J.length,X=Math.max(0,Q-Y-this.scrollOffset),K=Math.min(Q,X+Y),V=J.slice(X,K);x(B.hide);for(let G=0;G<Y;G++)if(x(B.to(2+G+1,1)),x(B.clearLine),G<V.length){let H=p0(V[G].text);if(H.length>this.width)x(V[G].text.slice(0,this.width+(V[G].text.length-H.length))),x(B.reset);else x(V[G].text)}}completeInput($){let Z=$.split(" "),Y=Z[0];if(Z.length===1){let K=this.commands.filter((V)=>V.startsWith(Y));if(K.length===1){let V=this.subcommands[K[0]];if(V&&V.length>0)return{value:K[0]+" ",options:`Opcoes: ${V.join(" ")}`};return{value:K[0]+" "}}if(K.length>1){let V=K[0];for(let G of K)while(!G.startsWith(V))V=V.slice(0,-1);return{value:V.length>$.length?V:$,options:K.join(" ")}}return null}let J=this.subcommands[Y];if(!J||J.length===0)return null;let Q=Z[Z.length-1].toLowerCase(),X=J.filter((K)=>K.toLowerCase().startsWith(Q));if(X.length===1)return Z[Z.length-1]=X[0],{value:Z.join(" ")+" "};if(X.length>1){let K=X[0];for(let V of X)while(!V.toLowerCase().startsWith(K.toLowerCase()))K=K.slice(0,-1);if(K.length>Q.length)return Z[Z.length-1]=K,{value:Z.join(" "),options:X.join(" ")};return{value:$,options:X.join(" ")}}if(!Q&&J.length>0)return{value:$,options:J.join(" ")};return null}renderInput(){let $=this.height-1,Z=this.height;if(x(B.to($,1)),x(B.clearLine),x(`${B.dim}${"\u2500".repeat(this.width)}${B.reset}`),x(B.to(Z,1)),x(B.clearLine),this.isStreaming){let Y=((Date.now()-this.streamStartTime)/1000).toFixed(1);x(` ${c.ai}${this.getSpinnerChar()}${B.reset} ${B.dim}streaming... ${Y}s${B.reset}`),x(B.hide)}else{let Y=l0(this.inputBuf)>this.width-3?this.inputBuf.slice(this.inputBuf.length-this.width+3):this.inputBuf;x(`${c.prompt}\u276F${B.reset} ${Y}`);let J=this.inputBuf.slice(0,this.inputPos),Q=l0(J)+3;x(B.to(Z,Math.min(Q,this.width))),x(B.show)}}onKey($){let Z=$.toString("utf-8");if(Z==="\x03"){if(this.isStreaming)this.onCancel?.();else this.onExit?.();return}if(Z==="\x04"){this.onExit?.();return}if(Z==="\f"){this.render();return}if(this.isStreaming)return;if(Z==="\t"){if(this.inputBuf.startsWith("/")){let Y=this.completeInput(this.inputBuf);if(Y){if(this.inputBuf=Y.value,this.inputPos=this.inputBuf.length,this.renderInput(),Y.options)this.showSystem(Y.options)}}return}if(Z.length>1&&!Z.startsWith("\x1B")&&!V6(Z)){let Y=Z.replace(/\r?\n/g," ").trim();if(Y.length>0)this.inputBuf=this.inputBuf.slice(0,this.inputPos)+Y+this.inputBuf.slice(this.inputPos),this.inputPos+=Y.length,this.renderInput();return}if(Z==="\r"||Z===`
401
+ `)}catch{}}}import{join as DG}from"path";var HG=["\u2581","\u2582","\u2583","\u2584","\u2585","\u2586","\u2587","\u2588"],qG=" ";function u9($,Z={}){let{width:J=$.length,min:Y=Math.min(...$),max:Q=Math.max(...$),color:X="",showBounds:K=!1}=Z;if($.length===0)return"";let V=RG($,J),G=Q-Y||1,z=V.map((U)=>{if(U===0&&Y===0)return qG;let M=(U-Y)/G,O=Math.min(7,Math.floor(M*8));return HG[O]}).join(""),B=X?`${X}${z}${W.reset}`:z;if(K)return`${W.dim}${Y.toFixed(0)}${W.reset}${B}${W.dim}${Q.toFixed(0)}${W.reset}`;return B}var WG="\u2588",UG="\u2589",BG="\u258A",NG="\u258B",MG="\u258C",CG="\u258D",jG="\u258E",OG="\u258F",FG="\u2591",EG=[" ",OG,jG,CG,MG,NG,BG,UG];function d9($,Z={}){let{width:J=20,maxValue:Y=100,showValue:Q=!0,color:X=W.fg(75),label:K=""}=Z,V=Math.min(1,Math.max(0,$/Y)),G=Math.floor(V*J),H=V*J-G,z=Math.floor(H*8),B=WG.repeat(G);if(z>0&&G<J)B+=EG[z];let U=J-W$(B);B+=FG.repeat(Math.max(0,U));let M=X?`${X}${B}${W.reset}`:B,O=[];if(K)O.push(`${W.dim}${K.padEnd(12)}${W.reset}`);if(O.push(M),Q)O.push(` ${W.dim}${$.toFixed(1)}%${W.reset}`);return O.join("")}function x0($,Z){let J=[];if(J.push(`${k.ai}${$.model}${W.reset}`),$.project)J.push(`${k.heading}${$.project}${W.reset}`);if($.tokens){let{input:K,output:V}=$.tokens;J.push(`${W.dim}${S3(K)}/${S3(V)} tok${W.reset}`)}if($.sessionCost)J.push(`${W.dim}${$.sessionCost}${W.reset}`);if($.vaultStatus){let K=$.vaultStatus==="ok"?"\u25CF":$.vaultStatus==="warn"?"\u25D0":"\u25CB",V=$.vaultStatus==="ok"?W.fg(114):$.vaultStatus==="warn"?W.fg(220):W.fg(196);J.push(`${V}${K}${W.reset}`)}if($.customItems)for(let K of $.customItems){let V=K.color||"";J.push(`${W.dim}${K.label}:${W.reset}${V}${K.value}${W.reset}`)}let Y=J.join(` ${W.dim}\u2502${W.reset} `),Q=W$(Y),X=Math.max(0,Z-Q-2);return`${W.inv} ${Y}${" ".repeat(X)} ${W.reset}`}function l9($,Z=40){let J=[];J.push(`${W.dim}${"\u2500".repeat(Z)}${W.reset}`),J.push(`${k.heading}${W.bold} System${W.reset}`);let Y=u9($.cpu,{width:15,color:W.fg(75)}),Q=d9($.currentCpu,{width:10,showValue:!1,color:W.fg(75)});J.push(` ${W.dim}CPU:${W.reset} ${Y} ${Q} ${$.currentCpu.toFixed(0)}%`);let X=u9($.memory,{width:15,color:W.fg(114)}),K=d9($.currentMem,{width:10,showValue:!1,color:W.fg(114)});return J.push(` ${W.dim}MEM:${W.reset} ${X} ${K} ${$.currentMem.toFixed(0)}%`),J.push(`${W.dim}${"\u2500".repeat(Z)}${W.reset}`),J}function RG($,Z){if($.length<=Z){let Q=[...$];while(Q.length<Z)Q.unshift(0);return Q}let J=$.length/Z,Y=[];for(let Q=0;Q<Z;Q++){let X=Math.floor(Q*J),K=Math.floor((Q+1)*J),V=$.slice(X,K),G=V.reduce((H,z)=>H+z,0)/V.length;Y.push(G)}return Y}function S3($){if($>=1e6)return`${($/1e6).toFixed(1)}M`;if($>=1000)return`${($/1000).toFixed(1)}K`;return String($)}function S0($,Z,J={}){let{title:Y="",padding:Q=1,borderColor:X=W.dim,titleColor:K=k.heading}=J,V=Z-2-Q*2,G=[];if(Y){let z=W$(Y),B=2,U=Math.max(1,Z-z-2-4);G.push(`${X}\u250C${"\u2500".repeat(2)}${W.reset}${K}${W.bold} ${Y} ${W.reset}${X}${"\u2500".repeat(U)}\u2510${W.reset}`)}else G.push(`${X}\u250C${"\u2500".repeat(Z-2)}\u2510${W.reset}`);let H=" ".repeat(Q);for(let z of $){let B=W$(z)>V?x3(z,V):z,U=W$(B),M=Math.max(0,V-U);G.push(`${X}\u2502${W.reset}${H}${B}${" ".repeat(M)}${H}${X}\u2502${W.reset}`)}return G.push(`${X}\u2514${"\u2500".repeat(Z-2)}\u2518${W.reset}`),G}function o9($,Z,J,Y,Q={}){let X=S0($,Y,Q);for(let K=0;K<X.length;K++)F(W.to(Z+K,J)),F(X[K])}var b7={dimYellow:"\x1B[2;33m",italic:"\x1B[3m",boldItalic:"\x1B[1;3m",dimCyan:"\x1B[2;36m"},LG={efficiency:"\uD83D\uDCA1",pattern:"\uD83D\uDD04",shortcut:"\u26A1",warning:"\u26A0\uFE0F",learning:"\uD83D\uDCDA"};function a9($,Z={}){let{width:J=60,showActions:Y=!0,compact:Q=!1}=Z,X=[],K=LG[$.category]||"\uD83D\uDCA1",V=b7.dimYellow+b7.italic;if(Q){let z=$.title.length>J-10?$.title.slice(0,J-13)+"...":$.title;return X.push(` ${V}${K} ${z}${W.reset}`),X}X.push(` ${V}${K} ${$.title}${W.reset}`);let G=J-6,H=w7($.explanation,G);for(let z of H)X.push(` ${V} ${_$(z)}${W.reset}`);if($.suggestedAction)X.push(` ${b7.dimCyan} \u2192 ${$.suggestedAction.label}${W.reset}`);if(Y)X.push(` ${W.dim} [Y] Aceitar [N] Ignorar${W.reset}`);return X}function w3($,Z=40){let J=[],Y=[...$].sort((Q,X)=>X.frequency-Q.frequency).slice(0,3);if(Y.length===0)return J.push(`${W.dim} Nenhuma dica disponivel ainda.${W.reset}`),J.push(`${W.dim} Continue usando para gerar insights.${W.reset}`),J;for(let Q=0;Q<Y.length;Q++){let X=Y[Q],K=Q+1,V=K===1?"\uD83E\uDD47":K===2?"\uD83E\uDD48":"\uD83E\uDD49",G=Z-8,H=X.title.length>G?X.title.slice(0,G-3)+"...":X.title;J.push(`${V} ${b7.dimYellow}${H}${W.reset}`);let z=Z-4,B=X.description.length>z?X.description.slice(0,z-3)+"...":X.description;J.push(` ${W.dim}${B}${W.reset}`);let U=X.frequency===1?"vez":"vezes";if(J.push(` ${W.dim}Detectado ${X.frequency}x${W.reset}`),Q<Y.length-1)J.push("")}return J}function y7($,Z=40){return{id:"meta-learning",title:"Meta-Aprendizado",content:w3($,Z)}}class w0{mode="chat";width;height;statusBarEnabled=!0;statusConfig=null;dashboardLayout=null;savedChatLines=[];resizeCallbacks=[];constructor(){this.width=process.stdout.columns||80,this.height=process.stdout.rows||24}getMode(){return this.mode}getViewState(){let Z=this.statusBarEnabled&&this.statusConfig?this.height:0;return{mode:this.mode,width:this.width,height:this.height,statusBarRow:Z,contentStartRow:3,contentEndRow:this.height-2,inputRow:this.height}}enterChatMode(){if(this.mode==="chat")return;this.mode="chat",this.clearScreen()}enterDashboardMode($){this.mode="dashboard",this.dashboardLayout=$,this.clearScreen(),this.renderDashboard()}toggleMode(){if(this.mode==="chat")return;this.enterChatMode()}setStatusBar($){this.statusConfig=$}enableStatusBar($){this.statusBarEnabled=$}renderStatusBar(){if(!this.statusBarEnabled||!this.statusConfig)return;let $=this.height-1;F(W.to($,1)),F(x0(this.statusConfig,this.width))}clearScreen(){F(W.clear),F(W.to(1,1))}clearContentArea(){let $=this.getViewState();for(let Z=$.contentStartRow;Z<=$.contentEndRow;Z++)F(W.to(Z,1)),F(W.clearLine)}updateDimensions($,Z){this.width=$,this.height=Z;for(let J of this.resizeCallbacks)J()}onResize($){this.resizeCallbacks.push($)}removeResizeCallback($){this.resizeCallbacks=this.resizeCallbacks.filter((Z)=>Z!==$)}renderDashboard(){if(this.mode!=="dashboard"||!this.dashboardLayout)return;this.clearContentArea();let{panels:$,columns:Z=2,gap:J=1}=this.dashboardLayout,Y=this.getViewState(),Q=Y.contentEndRow-Y.contentStartRow,X=Math.floor((this.width-J*(Z+1))/Z),K=Y.contentStartRow,V=1+J;for(let G=0;G<$.length;G++){let H=$[G],z=H.row??K,B=H.col??V,U=H.width??X,M=H.height??Math.floor(Q/Math.ceil($.length/Z));if(this.drawDashboardPanel(H,z,B,U,M),(G+1)%Z===0)K+=M+J,V=1+J;else V+=U+J}this.renderStatusBar()}drawDashboardPanel($,Z,J,Y,Q){let X=Q-2,K=$.content.slice(0,X);o9(K,Z,J,Y,{title:$.title})}createMorningBriefingLayout($){let Z=[{id:"tasks",title:"Tarefas do Dia",content:$.tasks.length>0?$.tasks:["Nenhuma tarefa para hoje"]},{id:"followups",title:"Follow-ups",content:$.followUps.length>0?$.followUps:["Nenhum follow-up pendente"]},{id:"calendar",title:"Agenda",content:$.calendar.length>0?$.calendar:["Sem eventos hoje"]},{id:"news",title:"Noticias",content:$.news.length>0?$.news:["Sem noticias recentes"]}];if($.projectSummary)Z.push({id:"project",title:"Projetos",content:$.projectSummary});return{panels:Z,columns:2,gap:1}}createMonitoringLayout($){return{panels:[{id:"telemetry",title:"Sistema",content:l9($,35)}],columns:1,gap:1}}}function _7($,Z){F(`\x1B[${$};${Z}r`)}function v7(){F("\x1B[r")}var PG=new w0;u0();class n9{model;sessionName;authInfo;dataDir;width=80;height=24;lines=[];streamBuf="";streamLines=[];inputBuf="";inputPos=0;isStreaming=!1;scrollOffset=0;history=null;renderTimer=null;spinnerFrame=0;spinnerTimer=null;streamStartTime=0;sessionCost="";viewMode="chat";viewManager;dashboardContent=[];statusBarEnabled=!0;inputTokens=0;outputTokens=0;activeProject="";vaultStatus="ok";stickyStatusRow=0;personaMode="productivity";palette=m9("productivity");timeContext=null;commands=["/help","/clear","/commit","/persona","/copy","/fork","/new","/load","/sessions","/delete","/model","/export","/cost","/retry","/undo","/search","/lang","/config","/exit","/briefing","/news","/open","/openfile","/openurl","/apps","/sysinfo","/calendar","/ask","/budget","/plugins","/task","/tasks","/done","/rmtask","/people","/team","/family","/person","/addperson","/delegate","/delegations","/followups","/dashboard","/contacts","/investigar","/investigate","/investigacoes","/monitor","/vigiar","/workflow","/fluxo","/pomodoro","/foco","/entrada","/saida","/income","/expense","/finance","/financas","/balanco","/decisions","/decisoes","/email","/rascunho","/memo","/memos","/note","/notas","/tags","/memotags","/rmmemo","/rmnota","/index","/indexar","/reindex","/memory","/memoria","/clipboard","/area","/tela","/screen","/ps1","/refresh","/renovar","/vault","/backup","/feeds","/fontes","/addfeed","/novafonte","/rmfeed","/rmfonte","/disablefeed","/desativarfonte","/enablefeed","/ativarfonte","/projeto","/project","/projetos","/projects","/sessao","/session","/relatorio","/report","/oportunidades","/opportunities","/anotar","/ajuda","/limpar","/commitar","/modo","/copiar","/novo","/carregar","/sessoes","/deletar","/modelo","/exportar","/custo","/repetir","/desfazer","/buscar","/idioma","/sair","/resumo","/noticias","/abrir","/programas","/sistema","/agenda","/calendario","/perguntar","/orcamento","/tarefa","/tarefas","/feito","/concluido","/rmtarefa","/pessoas","/equipe","/familia","/pessoa","/novapessoa","/addpessoa","/delegar","/delegacoes","/delegados","/painel","/contatos"];subcommands={"/model":["haiku","sonnet","sonnet-4.6","opus","opus-4.6"],"/modelo":["haiku","sonnet","sonnet-4.6","opus","opus-4.6"],"/news":["business","tech","finance","brazil","world","security"],"/noticias":["business","tech","finance","brazil","world","security"],"/open":["excel","word","powerpoint","outlook","onenote","teams","edge","chrome","firefox","calculator","notepad","terminal","explorer","vscode","cursor","paint","snip","settings","taskmanager"],"/abrir":["excel","word","powerpoint","outlook","onenote","teams","edge","chrome","firefox","calculator","notepad","terminal","explorer","vscode","cursor","paint","snip","settings","taskmanager"],"/sessao":["start","stop","status"],"/session":["start","stop","status"],"/relatorio":["today","week","month"],"/report":["today","week","month"],"/projeto":["auto"],"/project":["auto"],"/oportunidades":["nova","em_analise","aceita","recusada","concluida"],"/opportunities":["nova","em_analise","aceita","recusada","concluida"],"/persona":["default","business"],"/modo":["default","business"],"/people":["equipe","familia","contato"],"/pessoas":["equipe","familia","contato"],"/investigar":["bug","feature","test","audit","incident"],"/investigate":["bug","feature","test","audit","incident"],"/entrada":[],"/saida":[],"/lang":["pt","en","auto"],"/idioma":["pt","en","auto"],"/pomodoro":["start","stop","status"],"/foco":["start","stop","status"],"/monitor":["start","stop","list"],"/vigiar":["start","stop","list"],"/vault":["status","backup","sync","init"],"/workflow":["list","run","info","create","delete","enable","disable"],"/fluxo":["list","run","info","create","delete","ativar","desativar"]};onSubmit=null;onCancel=null;onExit=null;pickerActive=!1;lastCtrlCTime=0;eventUnsubscribers=[];statusBarContext="";activeInsight=null;insightSnippetLines=0;insightDisplayed=!1;metaLearningEntries=[];constructor($,Z,J="",Y){this.model=$;this.sessionName=Z;this.authInfo=J;this.dataDir=Y;this.viewManager=new w0}start($){if(this.onSubmit=$.onSubmit,this.onCancel=$.onCancel,this.onExit=$.onExit,this.width=process.stdout.columns||80,this.height=process.stdout.rows||24,this.dataDir)this.history=new c9(DG(this.dataDir,"history"));this.setupEventListeners(),F(W.altOn),process.stdin.setRawMode?.(!0),process.stdin.resume(),process.stdin.on("data",(Z)=>this.onKey(Z)),process.stdout.on("resize",()=>this.onResize()),this.render()}setupEventListeners(){this.eventUnsubscribers.push(V$.on("context:changed",($)=>{this.statusBarContext=$.foregroundWindow||"",this.renderHeader()})),this.eventUnsubscribers.push(V$.on("status:update",($)=>{let Z=$.level==="error"?k.err:$.level==="warning"?k.prompt:$.level==="success"?k.sys:W.dim;if(this.lines.push({text:` ${Z}[${$.source}]${W.reset} ${$.message}`}),!this.isStreaming)this.renderMessages()})),this.eventUnsubscribers.push(V$.on("telemetry:alert",($)=>{if($.alertType==="cost_warning")this.lines.push({text:` ${k.prompt}\u26A0 ${$.message}${W.reset}`});else if($.alertType==="rate_limit")this.lines.push({text:` ${k.err}\u26A0 Rate limit: ${$.message}${W.reset}`});else this.lines.push({text:` ${W.dim}[telemetry] ${$.message}${W.reset}`});if(!this.isStreaming)this.renderMessages()})),this.eventUnsubscribers.push(V$.on("task:completed",($)=>{if($.taskType==="backup"&&$.success)this.lines.push({text:` ${W.dim}[backup] ${$.message||"Backup concluido"}${W.reset}`});else if($.taskType==="pomodoro")this.lines.push({text:` ${k.sys}[pomodoro] ${$.message}${W.reset}`});else if(!$.success&&$.message)this.lines.push({text:` ${k.err}[${$.taskType}] ${$.message}${W.reset}`});if(!this.isStreaming)this.renderMessages()})),this.eventUnsubscribers.push(V$.on("session:changed",($)=>{this.sessionName=$.currentSession,this.renderHeader()})),this.eventUnsubscribers.push(V$.on("insight:available",($)=>{if(this.isStreaming||this.pickerActive)return;this.showInsight($.insight)}))}cleanupEventListeners(){for(let $ of this.eventUnsubscribers)$();this.eventUnsubscribers=[]}stop(){if(this.stopSpinner(),this.cleanupEventListeners(),this.renderTimer)clearTimeout(this.renderTimer);process.stdin.setRawMode?.(!1),process.stdin.pause(),F(W.show),F(W.altOff)}addUserMessage($){this.addLabel("user"),this.addWrapped($),this.lines.push({text:""})}addAssistantMessage($){this.addLabel("assistant"),this.addMarkdown($),this.lines.push({text:""})}startStream(){this.isStreaming=!0,this.streamBuf="",this.streamLines=[],this.streamStartTime=Date.now(),this.addLabel("assistant"),this.startSpinner(),this.renderAll()}appendStream($){if(this.streamBuf+=$,!this.renderTimer)this.renderTimer=setTimeout(()=>{this.renderTimer=null,this.streamLines=k7(this.streamBuf).map((Z)=>({text:Z})),this.renderMessages(),this.renderInput()},50)}flushStream(){if(this.streamLines.length>0)this.lines.push(...this.streamLines),this.streamLines=[],this.streamBuf=""}resetStreamBuffer(){this.streamBuf="",this.streamLines=[]}endStream(){if(this.stopSpinner(),this.renderTimer)clearTimeout(this.renderTimer),this.renderTimer=null,this.streamLines=k7(this.streamBuf).map(($)=>({text:$}));this.lines.push(...this.streamLines),this.lines.push({text:""}),this.streamBuf="",this.streamLines=[],this.isStreaming=!1,this.scrollOffset=0,this.renderAll()}showToolCall($,Z){let J=Z,Y;switch($){case"read_file":if(Y=String(J.path||""),J.offset)Y+=`:${J.offset}`;break;case"write_file":case"edit_file":Y=String(J.path||"");break;case"search_files":if(Y=`/${J.pattern||""}/`,J.include)Y+=` (${J.include})`;break;case"find_files":Y=String(J.pattern||"");break;case"list_directory":Y=String(J.path||".");break;case"run_command":if(Y=String(J.command||""),Y.length>80)Y=Y.slice(0,77)+"...";break;default:{let Q=JSON.stringify(J);Y=Q.length>80?Q.slice(0,77)+"...":Q}}this.lines.push({text:` ${k.tool}\u2699 ${$}${W.reset} ${W.dim}${Y}${W.reset}`}),this.renderMessages()}showToolResult($,Z){let J=Z.split(`
402
+ `),Y=8,Q=J.slice(0,8);for(let X of Q){let K=X.length>this.width-6?X.slice(0,this.width-9)+"...":X;this.lines.push({text:` ${W.dim}${K}${W.reset}`})}if(J.length>8)this.lines.push({text:` ${W.dim}... (${J.length-8} more lines)${W.reset}`});this.renderMessages()}promptApproval($){return this.lines.push({text:` ${k.prompt}? ${$}${W.reset} ${W.dim}[y]es / [n]o / [a]ll${W.reset}`}),this.renderAll(),new Promise((Z)=>{let J=(Y)=>{let Q=Y.toString().toLowerCase();if(Q==="y"||Q==="\r"||Q===`
403
+ `)process.stdin.removeListener("data",J),this.lines.push({text:` ${k.sys}approved${W.reset}`}),this.renderAll(),Z(!0);else if(Q==="n"||Q==="\x1B")process.stdin.removeListener("data",J),this.lines.push({text:` ${k.err}rejected${W.reset}`}),this.renderAll(),Z(!1);else if(Q==="a")process.stdin.removeListener("data",J),this.lines.push({text:` ${k.sys}approved all for this session${W.reset}`}),this.renderAll(),this._approveAllRequested=!0,Z(!0)};process.stdin.on("data",J),setTimeout(()=>{process.stdin.removeListener("data",J),this.lines.push({text:` ${W.dim}timeout \u2014 auto-rejected${W.reset}`}),this.renderAll(),Z(!1)},30000)})}_approveAllRequested=!1;promptSessionPicker($){if($.length===0)return this.showSystem("No sessions found."),Promise.resolve(null);return new Promise((Z)=>{this.pickerActive=!0;let J=$.findIndex((H)=>H.isCurrent);if(J<0)J=0;let Y="",Q=!1,X=()=>{if(!Y)return $;let H=Y.toLowerCase();return $.filter((z)=>z.name.toLowerCase().includes(H))},K=()=>{let B=this.height-2-2,U=X();if(J>=U.length)J=Math.max(0,U.length-1);let M=2,O=2,P=B-M-O,T=Math.max(1,P),y=0;if(U.length>T)y=Math.max(0,J-Math.floor(T/2)),y=Math.min(y,U.length-T);let K$=U.slice(y,y+T);if(F(W.hide),F(W.to(3,1)),F(W.clearLine),Q)F(` ${k.heading}${W.bold}Sessions${W.reset} ${W.dim}filter: ${Y}\u2588${W.reset}`);else F(` ${k.heading}${W.bold}Sessions${W.reset} ${W.dim}(${U.length})${W.reset}`);F(W.to(4,1)),F(W.clearLine);for(let _=0;_<T;_++){let u=2+M+_+1;if(F(W.to(u,1)),F(W.clearLine),_>=K$.length)continue;let E=K$[_],N=y+_===J,j=E.isCurrent?"*":" ",R=E.isArchived?`${W.dim}[arch] ${W.reset}`:" ",x=`${E.messageCount} msgs`.padEnd(10),w=IG(E.updated);if(N)F(` ${k.prompt}${W.bold}\u203A ${j} ${R}${k.prompt}${W.bold}${E.name.padEnd(20)}${W.reset} ${W.dim}${x} ${w}${W.reset}`);else{let o=E.isArchived?W.dim:k.sys;F(` ${j} ${R}${o}${E.name.padEnd(20)}${W.reset} ${W.dim}${x} ${w}${W.reset}`)}}for(let _=K$.length;_<T;_++){let u=2+M+_+1;F(W.to(u,1)),F(W.clearLine)}let i=2+M+T+1;if(F(W.to(i,1)),F(W.clearLine),U.length>T){let _=Math.round((J+1)/U.length*100);F(` ${W.dim}${y>0?"\u2191":" "} ${_}% ${y+T<U.length?"\u2193":" "}${W.reset}`)}let b=this.height-2;F(W.to(b,1)),F(W.clearLine),F(` ${W.dim}W/S or \u2191\u2193 navigate Enter select Esc cancel / filter d delete a archive${W.reset}`)},V=(H)=>{this.pickerActive=!1,process.stdin.removeListener("data",G),this.renderAll(),Z(H)},G=(H)=>{let z=H.toString("utf-8"),B=X();if(z==="\x1B"&&H.length===1){if(Q)Q=!1,Y="",K();else V(null);return}if(z==="\x03"){V(null);return}if(z==="\r"||z===`
404
+ `){if(B.length>0&&J<B.length)V({action:"load",name:B[J].name});return}if(z==="\x1B[A"||z==="w"&&!Q){if(J>0)J--,K();return}if(z==="\x1B[B"||z==="s"&&!Q){if(J<B.length-1)J++,K();return}if(z==="d"&&Q===!1){if(B.length>0&&J<B.length){let U=B[J];if(!U.isCurrent)V({action:"delete",name:U.name,isArchived:U.isArchived})}return}if(z==="a"&&Q===!1){if(B.length>0&&J<B.length){let U=B[J];if(!U.isCurrent){let M=U.isArchived?"unarchive":"archive";V({action:M,name:U.name})}}return}if(z==="/"&&Q===!1){Q=!0,Y="",K();return}if(Q){if(z==="\x7F"||z==="\b"){if(Y.length>0)Y=Y.slice(0,-1),J=0,K();else Q=!1,K();return}if(z.length===1&&z>=" "){Y+=z,J=0,K();return}}};process.stdin.on("data",G),K()})}promptNewsPicker($){if($.length===0)return this.showSystem("Nenhuma noticia encontrada."),Promise.resolve(null);return new Promise((Z)=>{this.pickerActive=!0;let J=0,Y="",Q=!1,X="",K=[...new Set($.map((U)=>U.category))].sort(),V=()=>{let U=X?$.filter((M)=>M.category===X):$;if(Y){let M=Y.toLowerCase();U=U.filter((O)=>O.title.toLowerCase().includes(M)||O.source.toLowerCase().includes(M))}return U},G=(U)=>{return{business:"Negocios",tech:"Tecnologia",finance:"Financas",brazil:"Brasil",world:"Mundo",security:"Ciberseguranca"}[U]||U},H=()=>{let O=this.height-2-2,P=V();if(J>=P.length)J=Math.max(0,P.length-1);let T=2,y=2,K$=O-T-y,i=Math.max(1,K$),b=0;if(P.length>i)b=Math.max(0,J-Math.floor(i/2)),b=Math.min(b,P.length-i);let _=P.slice(b,b+i);if(F(W.hide),F(W.to(3,1)),F(W.clearLine),Q)F(` ${k.heading}${W.bold}Noticias${W.reset} ${W.dim}filtro: ${Y}\u2588${W.reset}`);else{let q=X?G(X):"Todas";F(` ${k.heading}${W.bold}Noticias${W.reset} ${W.dim}(${P.length}) ${q}${W.reset}`)}F(W.to(4,1)),F(W.clearLine);for(let q=0;q<i;q++){let N=2+T+q+1;if(F(W.to(N,1)),F(W.clearLine),q>=_.length)continue;let j=_[q],R=b+q===J,x=j.time?`[${j.time}]`:" ",w=this.width-30,o=j.title.length>w?j.title.slice(0,w-1)+"\u2026":j.title;if(R)F(` ${k.prompt}${W.bold}\u203A ${x} ${o}${W.reset} ${W.dim}(${j.source})${W.reset}`);else F(` ${W.dim}${x}${W.reset} ${k.sys}${o}${W.reset} ${W.dim}(${j.source})${W.reset}`)}for(let q=_.length;q<i;q++){let N=2+T+q+1;F(W.to(N,1)),F(W.clearLine)}let u=2+T+i+1;if(F(W.to(u,1)),F(W.clearLine),P.length>i){let q=Math.round((J+1)/P.length*100);F(` ${W.dim}${b>0?"\u2191":" "} ${q}% ${b+i<P.length?"\u2193":" "}${W.reset}`)}let E=this.height-2;F(W.to(E,1)),F(W.clearLine),F(` ${W.dim}W/S or \u2191\u2193 navigate Enter open Esc cancel / filter Tab category${W.reset}`)},z=(U)=>{this.pickerActive=!1,process.stdin.removeListener("data",B),this.renderAll(),Z(U)},B=(U)=>{let M=U.toString("utf-8"),O=V();if(M==="\x1B"&&U.length===1){if(Q)Q=!1,Y="",H();else z(null);return}if(M==="\x03"){z(null);return}if(M==="\r"||M===`
405
+ `){if(O.length>0&&J<O.length)z(O[J].link);return}if(M==="\x1B[A"||M==="w"&&!Q){if(J>0)J--,H();return}if(M==="\x1B[B"||M==="s"&&!Q){if(J<O.length-1)J++,H();return}if(M==="\t"){if(!X)X=K[0]||"";else{let P=K.indexOf(X);X=P<K.length-1?K[P+1]:""}J=0,H();return}if(M==="/"&&!Q){Q=!0,Y="",H();return}if(Q){if(M==="\x7F"||M==="\b"){if(Y.length>0)Y=Y.slice(0,-1),J=0,H();else Q=!1,H();return}if(M.length===1&&M>=" "){Y+=M,J=0,H();return}}};process.stdin.on("data",B),H()})}showUsage($){this.lines.push({text:` ${W.dim}tokens: ${$}${W.reset}`}),this.renderAll()}updateSessionCost($){this.sessionCost=$,this.renderHeader()}showError($){this.lines.push({text:` ${k.err}\u2717 ${$}${W.reset}`}),this.lines.push({text:""}),this.renderAll()}showSystem($){for(let Z of $.split(`
406
+ `))this.lines.push({text:` ${k.sys}${Z}${W.reset}`});this.lines.push({text:""}),this.renderAll()}clearMessages(){this.lines=[],this.renderAll()}updateModel($){this.model=$,this.renderHeader()}updateSession($){this.sessionName=$,this.renderHeader()}enableInput(){this.inputBuf="",this.inputPos=0,this.isStreaming=!1,this.history?.reset(),this.renderInput()}disableInput(){F(W.hide)}getViewMode(){return this.viewMode}enterChatMode(){if(this.viewMode==="chat")return;this.viewMode="chat",this.viewManager.enterChatMode(),v7(),this.render()}enterDashboardMode($){this.viewMode="dashboard";let Z=[...$.panels];if(!Z.some((Y)=>Y.id==="meta-learning")&&this.metaLearningEntries.length>0){let Y=Math.floor(this.width/2)-4,Q=y7(this.metaLearningEntries,Y);Z=[...Z,Q]}this.dashboardContent=Z,this.viewManager.enterDashboardMode({...$,panels:Z}),_7(3,this.height-2),this.renderDashboard()}updateDashboardPanel($,Z){let J=this.dashboardContent.find((Y)=>Y.id===$);if(J){if(J.content=Z,this.viewMode==="dashboard")this.renderDashboard()}}updateStatusBar($){if($.project!==void 0)this.activeProject=$.project;if($.inputTokens!==void 0)this.inputTokens=$.inputTokens;if($.outputTokens!==void 0)this.outputTokens=$.outputTokens;if($.vaultStatus!==void 0)this.vaultStatus=$.vaultStatus;this.renderStickyStatusBar()}setStatusBarEnabled($){this.statusBarEnabled=$,this.render()}showInsight($){if(this.activeInsight)this.dismissInsight();this.activeInsight=$;let Z=a9($,{width:this.width-4,showActions:!0});this.insightSnippetLines=Z.length,this.renderInsightDisplay(Z),this.insightDisplayed=!0}renderInsightDisplay($){let Z=this.height-1-this.insightSnippetLines-1;F(W.hide);for(let J=0;J<$.length;J++)F(W.to(Z+J,1)),F(W.clearLine),F($[J]);F(W.show)}dismissInsight(){if(!this.activeInsight||!this.insightDisplayed)return;let $=this.height-1-this.insightSnippetLines-1;F(W.hide);for(let Z=0;Z<this.insightSnippetLines;Z++)F(W.to($+Z,1)),F(W.clearLine);F(W.show),this.activeInsight=null,this.insightSnippetLines=0,this.insightDisplayed=!1,this.renderMessages()}acceptInsight(){if(!this.activeInsight)return;let $=this.activeInsight,Z={insightId:$.id,insight:$,timestamp:Date.now()};if(V$.emit("insight:accepted",Z),this.lines.push({text:` ${k.sys}\u2713 Dica aceita: ${$.title}${W.reset}`}),$.suggestedAction)this.lines.push({text:` ${W.dim}Executando: ${$.suggestedAction.command}${W.reset}`});this.dismissInsight()}hasActiveInsight(){return this.activeInsight!==null&&this.insightDisplayed}updateMetaLearningEntries($){if(this.metaLearningEntries=$,this.viewMode==="dashboard"){let Z=y7($,Math.floor(this.width/2)-4);this.updateDashboardPanel("meta-learning",Z.content)}}setPersonaMode($){if(this.personaMode=$,this.palette=m9($),this.renderHeader(),this.statusBarEnabled)this.renderStickyStatusBar()}setTimeContext($){this.timeContext=$,this.setPersonaMode($.persona)}getPersonaMode(){return this.personaMode}getPalette(){return this.palette}getPersonaLabel(){switch(this.personaMode){case"productivity":return"PROD";case"spillover_alert":return"SPILL";case"sharpen_or_relax":return"RELAX"}}addMetaLearningEntry($){if(this.metaLearningEntries.find((J)=>J.title===$.title))this.metaLearningEntries=this.metaLearningEntries.map((J)=>J.title===$.title?{...J,frequency:J.frequency+1,lastSeen:Date.now()}:J);else this.metaLearningEntries=[...this.metaLearningEntries,{...$,frequency:1,lastSeen:Date.now()}]}renderDashboard(){F(W.hide),F(W.clear),this.renderHeader();let $=2,Z=2+(this.statusBarEnabled?1:0),J=this.height-$-Z,Y=this.dashboardContent,Q=Math.min(2,Y.length),X=Math.ceil(Y.length/Q),K=1,V=Math.floor((this.width-K*(Q+1))/Q),G=Math.floor((J-K*(X+1))/X),H=0;for(let z=0;z<X;z++)for(let B=0;B<Q&&H<Y.length;B++){let U=Y[H],M=$+K+z*(G+K)+1,O=K+B*(V+K)+1;this.drawDashboardPanel(U,M,O,V,G),H++}if(this.statusBarEnabled)this.renderStickyStatusBar();this.renderInput(),F(W.show)}drawDashboardPanel($,Z,J,Y,Q){let X=this.personaMode==="sharpen_or_relax"?this.palette.muted:W.dim,K=this.palette.primary,V=S0($.content.slice(0,Q-2),Y,{title:$.title,borderColor:X,titleColor:K});for(let G=0;G<V.length&&G<Q;G++)F(W.to(Z+G,J)),F(V[G])}renderStickyStatusBar(){if(!this.statusBarEnabled)return;let $=this.height-2;this.stickyStatusRow=$;let Z=[];if(this.personaMode!=="productivity"){let Y=this.personaMode==="spillover_alert"?this.palette.accent:this.palette.primary;Z.push({label:"MODE",value:this.getPersonaLabel(),color:Y})}if(this.timeContext&&this.personaMode==="spillover_alert"){let Y=this.timeContext.urgentTasks.length+this.timeContext.overdueTasks.length+this.timeContext.pendingCommits.length;if(Y>0)Z.push({label:"PEND",value:String(Y),color:this.palette.accent})}let J={model:this.model,project:this.activeProject||void 0,tokens:{input:this.inputTokens,output:this.outputTokens},sessionCost:this.sessionCost||void 0,vaultStatus:this.vaultStatus,customItems:Z.length>0?Z:void 0};F(W.to($,1)),F(this.renderPersonaAwareStatusBar(J))}renderPersonaAwareStatusBar($){let Z=x0($,this.width);if(this.personaMode==="sharpen_or_relax")return`${this.palette.muted}${_$(Z)}${W.reset}`;return Z}render(){if(this.viewMode==="dashboard"){this.renderDashboard();return}if(F(W.hide),F(W.clear),this.renderHeader(),this.renderMessages(),this.statusBarEnabled)this.renderStickyStatusBar();this.renderInput(),F(W.show)}renderAll(){if(this.viewMode==="dashboard"){this.renderDashboard();return}if(this.renderMessages(),this.statusBarEnabled)this.renderStickyStatusBar();this.renderInput()}renderHeader(){F(W.to(1,1));let $=this.palette.header,Z=this.getHeaderBgColor();F(Z),F(W.inv);let Y=` smolerclaw${this.personaMode!=="productivity"?` [${this.getPersonaLabel()}]`:""}`,Q=[this.model,this.sessionName];if(this.sessionCost)Q.push(this.sessionCost);if(this.authInfo)Q.push(this.authInfo);let X=Q.join(" | ")+" ",K=Math.max(1,this.width-W$(Y)-X.length);F(Y+" ".repeat(K)+X),F(W.reset),F(W.to(2,1));let V=this.personaMode==="sharpen_or_relax"?this.palette.muted:W.dim;F(`${V}${"\u2500".repeat(this.width)}${W.reset}`)}getHeaderBgColor(){switch(this.personaMode){case"productivity":return"";case"spillover_alert":return W.bg(52);case"sharpen_or_relax":return W.bg(53)}}renderMessages(){let J=2+(this.statusBarEnabled?1:0),Y=this.height-2-J,Q=[...this.lines,...this.streamLines],X=Q.length,K=Math.max(0,X-Y-this.scrollOffset),V=Math.min(X,K+Y),G=Q.slice(K,V);F(W.hide);for(let H=0;H<Y;H++)if(F(W.to(2+H+1,1)),F(W.clearLine),H<G.length){let z=_$(G[H].text);if(z.length>this.width)F(G[H].text.slice(0,this.width+(G[H].text.length-z.length))),F(W.reset);else F(G[H].text)}}completeInput($){let Z=$.split(" "),J=Z[0];if(Z.length===1){let K=this.commands.filter((V)=>V.startsWith(J));if(K.length===1){let V=this.subcommands[K[0]];if(V&&V.length>0)return{value:K[0]+" ",options:`Opcoes: ${V.join(" ")}`};return{value:K[0]+" "}}if(K.length>1){let V=K[0];for(let G of K)while(!G.startsWith(V))V=V.slice(0,-1);return{value:V.length>$.length?V:$,options:K.join(" ")}}return null}let Y=this.subcommands[J];if(!Y||Y.length===0)return null;let Q=Z[Z.length-1].toLowerCase(),X=Y.filter((K)=>K.toLowerCase().startsWith(Q));if(X.length===1)return Z[Z.length-1]=X[0],{value:Z.join(" ")+" "};if(X.length>1){let K=X[0];for(let V of X)while(!V.toLowerCase().startsWith(K.toLowerCase()))K=K.slice(0,-1);if(K.length>Q.length)return Z[Z.length-1]=K,{value:Z.join(" "),options:X.join(" ")};return{value:$,options:X.join(" ")}}if(!Q&&Y.length>0)return{value:$,options:Y.join(" ")};return null}renderInput(){let $=this.height-1,Z=this.height;if(F(W.to($,1)),F(W.clearLine),F(`${W.dim}${"\u2500".repeat(this.width)}${W.reset}`),F(W.to(Z,1)),F(W.clearLine),this.isStreaming){let J=((Date.now()-this.streamStartTime)/1000).toFixed(1);F(` ${k.ai}${this.getSpinnerChar()}${W.reset} ${W.dim}streaming... ${J}s${W.reset}`),F(W.hide)}else{let J=W$(this.inputBuf)>this.width-3?this.inputBuf.slice(this.inputBuf.length-this.width+3):this.inputBuf;F(`${k.prompt}\u276F${W.reset} ${J}`);let Y=this.inputBuf.slice(0,this.inputPos),Q=W$(Y)+3;F(W.to(Z,Math.min(Q,this.width))),F(W.show)}}onKey($){if(this.pickerActive)return;let Z=$.toString("utf-8");if(this.hasActiveInsight()){let J=Z.toLowerCase();if(J==="y"){this.acceptInsight();return}if(J==="n"||Z==="\x1B"){this.dismissInsight();return}this.dismissInsight()}if(Z==="\x03"){if(this.isStreaming){this.onCancel?.();return}let J=Date.now(),Y=1500;if(this.inputBuf.length>0){this.inputBuf="",this.inputPos=0,this.lastCtrlCTime=J,this.renderInput();return}if(J-this.lastCtrlCTime<Y){this.onExit?.();return}this.lastCtrlCTime=J,this.showSystem("Pressione Ctrl+C novamente para sair.");return}if(Z==="\x04"){this.onExit?.();return}if(Z==="\f"){this.render();return}if(this.isStreaming)return;if(Z==="\t"){if(this.inputBuf.startsWith("/")){let J=this.completeInput(this.inputBuf);if(J){if(this.inputBuf=J.value,this.inputPos=this.inputBuf.length,this.renderInput(),J.options)this.showSystem(J.options)}}return}if(Z.length>1&&!Z.startsWith("\x1B")&&!y3(Z)){let J=Z.replace(/\r?\n/g," ").trim();if(J.length>0)this.inputBuf=this.inputBuf.slice(0,this.inputPos)+J+this.inputBuf.slice(this.inputPos),this.inputPos+=J.length,this.renderInput();return}if(Z==="\r"||Z===`
353
407
  `){if(this.inputBuf.endsWith("\\")){this.inputBuf=this.inputBuf.slice(0,-1)+`
354
- `,this.inputPos=this.inputBuf.length,this.renderInput();return}let Y=this.inputBuf.trim();if(Y)this.history?.add(Y),this.inputBuf="",this.inputPos=0,this.scrollOffset=0,this.onSubmit?.(Y);return}if(Z==="\x7F"||Z==="\b"){if(this.inputPos>0){let Y=K6(this.inputBuf,this.inputPos);this.inputBuf=this.inputBuf.slice(0,this.inputPos-Y)+this.inputBuf.slice(this.inputPos),this.inputPos-=Y,this.renderInput()}return}if(Z.startsWith("\x1B[")){switch(Z.slice(2)){case"D":if(this.inputPos>0)this.inputPos-=K6(this.inputBuf,this.inputPos),this.renderInput();break;case"C":if(this.inputPos<this.inputBuf.length)this.inputPos+=z6(this.inputBuf,this.inputPos),this.renderInput();break;case"A":{let J=this.history?.prev(this.inputBuf);if(J!==null&&J!==void 0)this.inputBuf=J,this.inputPos=this.inputBuf.length,this.renderInput();break}case"B":{let J=this.history?.next();if(J!==void 0)this.inputBuf=J,this.inputPos=this.inputBuf.length,this.renderInput();break}case"5~":if(this.scrollOffset<this.lines.length)this.scrollOffset=Math.min(this.scrollOffset+5,this.lines.length),this.renderMessages();break;case"6~":if(this.scrollOffset>0)this.scrollOffset=Math.max(0,this.scrollOffset-5),this.renderMessages();break;case"H":this.inputPos=0,this.renderInput();break;case"F":this.inputPos=this.inputBuf.length,this.renderInput();break;case"3~":{if(this.inputPos<this.inputBuf.length){let J=z6(this.inputBuf,this.inputPos);this.inputBuf=this.inputBuf.slice(0,this.inputPos)+this.inputBuf.slice(this.inputPos+J),this.renderInput()}break}}return}if(VX(Z))this.inputBuf=this.inputBuf.slice(0,this.inputPos)+Z+this.inputBuf.slice(this.inputPos),this.inputPos+=Z.length,this.renderInput()}onResize(){this.width=process.stdout.columns||80,this.height=process.stdout.rows||24,this.render()}addLabel($){let Z=new Date().toLocaleTimeString("en",{hour:"2-digit",minute:"2-digit"});if($==="user")this.lines.push({text:`${c.user}${B.bold} You${B.reset} ${B.dim}${Z}${B.reset}`});else this.lines.push({text:`${c.ai}${B.bold} Claude${B.reset} ${B.dim}${Z}${B.reset}`})}startSpinner(){let $=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];this.spinnerFrame=0,this.spinnerTimer=setInterval(()=>{this.spinnerFrame=(this.spinnerFrame+1)%$.length,this.renderInput()},80)}stopSpinner(){if(this.spinnerTimer)clearInterval(this.spinnerTimer),this.spinnerTimer=null}getSpinnerChar(){let $=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];return $[this.spinnerFrame%$.length]}addWrapped($){let Z=X6(" "+$,this.width-2);for(let Y of Z)this.lines.push({text:Y})}addMarkdown($){let Z=n0($);for(let Y of Z)this.lines.push({text:Y})}}function V6($){return[...$].length===1}function VX($){if(!V6($))return!1;let Z=$.codePointAt(0)||0;return Z>=32&&Z!==127}function K6($,Z){if(Z<=0)return 0;if(Z>=2){let Y=$.charCodeAt(Z-1),J=$.charCodeAt(Z-2);if(Y>=56320&&Y<=57343&&J>=55296&&J<=56319)return 2}return 1}function z6($,Z){if(Z>=$.length)return 0;let Y=$.charCodeAt(Z);if(Y>=55296&&Y<=56319&&Z+1<$.length)return 2;return 1}function GX($){let Z=Date.now()-$,Y=Math.floor(Z/1000);if(Y<60)return"just now";let J=Math.floor(Y/60);if(J<60)return`${J}m ago`;let Q=Math.floor(J/60);if(Q<24)return`${Q}h ago`;let X=Math.floor(Q/24);if(X<30)return`${X}d ago`;return`${Math.floor(X/30)}mo ago`}var r4={"claude-haiku-4-5-20251001":{input:1,output:5},"claude-sonnet-4-20250514":{input:3,output:15},"claude-sonnet-4-6-20250627":{input:3,output:15},"claude-opus-4-20250514":{input:15,output:75},"claude-opus-4-6-20250318":{input:15,output:75}},WX={input:3,output:15};function G6($,Z){let Y=HX(Z),J=$.inputTokens/1e6*Y.input*100,Q=$.outputTokens/1e6*Y.output*100;return{inputCostCents:J,outputCostCents:Q,totalCostCents:J+Q}}function HX($){if(r4[$])return r4[$];let Z=$.toLowerCase();if(Z.includes("haiku"))return r4["claude-haiku-4-5-20251001"];if(Z.includes("opus"))return r4["claude-opus-4-20250514"];if(Z.includes("sonnet"))return r4["claude-sonnet-4-20250514"];return WX}class k7{totalInput=0;totalOutput=0;totalCostCents=0;model;constructor($){this.model=$}setModel($){this.model=$}add($){this.totalInput+=$.inputTokens,this.totalOutput+=$.outputTokens;let Z=G6($,this.model);return this.totalCostCents+=Z.totalCostCents,Z}get totals(){return{inputTokens:this.totalInput,outputTokens:this.totalOutput,costCents:this.totalCostCents}}formatUsage($){let Z=G6($,this.model);return`${i0($.inputTokens)} in / ${i0($.outputTokens)} out (~$${(Z.totalCostCents/100).toFixed(4)})`}formatSession(){return`${i0(this.totalInput)} in / ${i0(this.totalOutput)} out | session: ~$${(this.totalCostCents/100).toFixed(4)}`}}function i0($){return $.toLocaleString("en-US")}function W6($,Z={}){let{includeToolCalls:Y=!0,includeTimestamps:J=!0}=Z,Q=[];Q.push(`# smolerclaw session: ${$.name}`),Q.push(`Created: ${new Date($.created).toLocaleString()}`),Q.push(""),Q.push("---"),Q.push("");for(let X of $.messages){let K=J?` (${new Date(X.timestamp).toLocaleTimeString("en",{hour:"2-digit",minute:"2-digit"})})`:"";if(X.role==="user")Q.push(`## You${K}`),Q.push(""),Q.push(X.content),Q.push("");else{if(Q.push(`## Claude${K}`),Q.push(""),Q.push(X.content),Y&&X.toolCalls?.length){Q.push("");for(let V of X.toolCalls){let G=qX(V.name,V.input);Q.push(`> **Tool:** \`${V.name}\`${G}`);let H=V.result.split(`
408
+ `,this.inputPos=this.inputBuf.length,this.renderInput();return}let J=this.inputBuf.trim();if(J)this.history?.add(J),this.inputBuf="",this.inputPos=0,this.scrollOffset=0,this.onSubmit?.(J);return}if(Z==="\x7F"||Z==="\b"){if(this.inputPos>0){let J=k3(this.inputBuf,this.inputPos);this.inputBuf=this.inputBuf.slice(0,this.inputPos-J)+this.inputBuf.slice(this.inputPos),this.inputPos-=J,this.renderInput()}return}if(Z.startsWith("\x1B[")){switch(Z.slice(2)){case"D":if(this.inputPos>0)this.inputPos-=k3(this.inputBuf,this.inputPos),this.renderInput();break;case"C":if(this.inputPos<this.inputBuf.length)this.inputPos+=b3(this.inputBuf,this.inputPos),this.renderInput();break;case"A":{let Y=this.history?.prev(this.inputBuf);if(Y!==null&&Y!==void 0)this.inputBuf=Y,this.inputPos=this.inputBuf.length,this.renderInput();break}case"B":{let Y=this.history?.next();if(Y!==void 0)this.inputBuf=Y,this.inputPos=this.inputBuf.length,this.renderInput();break}case"5~":if(this.scrollOffset<this.lines.length)this.scrollOffset=Math.min(this.scrollOffset+5,this.lines.length),this.renderMessages();break;case"6~":if(this.scrollOffset>0)this.scrollOffset=Math.max(0,this.scrollOffset-5),this.renderMessages();break;case"H":this.inputPos=0,this.renderInput();break;case"F":this.inputPos=this.inputBuf.length,this.renderInput();break;case"3~":{if(this.inputPos<this.inputBuf.length){let Y=b3(this.inputBuf,this.inputPos);this.inputBuf=this.inputBuf.slice(0,this.inputPos)+this.inputBuf.slice(this.inputPos+Y),this.renderInput()}break}}return}if(TG(Z))this.inputBuf=this.inputBuf.slice(0,this.inputPos)+Z+this.inputBuf.slice(this.inputPos),this.inputPos+=Z.length,this.renderInput()}onResize(){if(this.width=process.stdout.columns||80,this.height=process.stdout.rows||24,this.viewManager.updateDimensions(this.width,this.height),this.viewMode==="dashboard")_7(3,this.height-2);else v7();this.render()}addLabel($){let Z=new Date().toLocaleTimeString("en",{hour:"2-digit",minute:"2-digit"});if($==="user")this.lines.push({text:`${k.user}${W.bold} You${W.reset} ${W.dim}${Z}${W.reset}`});else this.lines.push({text:`${k.ai}${W.bold} Claude${W.reset} ${W.dim}${Z}${W.reset}`})}startSpinner(){let $=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];this.spinnerFrame=0,this.spinnerTimer=setInterval(()=>{this.spinnerFrame=(this.spinnerFrame+1)%$.length,this.renderInput()},80)}stopSpinner(){if(this.spinnerTimer)clearInterval(this.spinnerTimer),this.spinnerTimer=null}getSpinnerChar(){let $=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];return $[this.spinnerFrame%$.length]}addWrapped($){let Z=w7(" "+$,this.width-2);for(let J of Z)this.lines.push({text:J})}addMarkdown($){let Z=k7($);for(let J of Z)this.lines.push({text:J})}}function y3($){return[...$].length===1}function TG($){if(!y3($))return!1;let Z=$.codePointAt(0)||0;return Z>=32&&Z!==127}function k3($,Z){if(Z<=0)return 0;if(Z>=2){let J=$.charCodeAt(Z-1),Y=$.charCodeAt(Z-2);if(J>=56320&&J<=57343&&Y>=55296&&Y<=56319)return 2}return 1}function b3($,Z){if(Z>=$.length)return 0;let J=$.charCodeAt(Z);if(J>=55296&&J<=56319&&Z+1<$.length)return 2;return 1}function IG($){let Z=Date.now()-$,J=Math.floor(Z/1000);if(J<60)return"just now";let Y=Math.floor(J/60);if(Y<60)return`${Y}m ago`;let Q=Math.floor(Y/60);if(Q<24)return`${Q}h ago`;let X=Math.floor(Q/24);if(X<30)return`${X}d ago`;return`${Math.floor(X/30)}mo ago`}var k0={"claude-haiku-4-5-20251001":{input:1,output:5},"claude-sonnet-4-20250514":{input:3,output:15},"claude-sonnet-4-6-20250627":{input:3,output:15},"claude-opus-4-20250514":{input:15,output:75},"claude-opus-4-6-20250318":{input:15,output:75}},AG={input:3,output:15};function _3($,Z){let J=xG(Z),Y=$.inputTokens/1e6*J.input*100,Q=$.outputTokens/1e6*J.output*100;return{inputCostCents:Y,outputCostCents:Q,totalCostCents:Y+Q}}function xG($){if(k0[$])return k0[$];let Z=$.toLowerCase();if(Z.includes("haiku"))return k0["claude-haiku-4-5-20251001"];if(Z.includes("opus"))return k0["claude-opus-4-20250514"];if(Z.includes("sonnet"))return k0["claude-sonnet-4-20250514"];return AG}class r9{totalInput=0;totalOutput=0;totalCostCents=0;model;constructor($){this.model=$}setModel($){this.model=$}add($){this.totalInput+=$.inputTokens,this.totalOutput+=$.outputTokens;let Z=_3($,this.model);return this.totalCostCents+=Z.totalCostCents,Z}get totals(){return{inputTokens:this.totalInput,outputTokens:this.totalOutput,costCents:this.totalCostCents}}formatUsage($){let Z=_3($,this.model);return`${f7($.inputTokens)} in / ${f7($.outputTokens)} out (~$${(Z.totalCostCents/100).toFixed(4)})`}formatSession(){return`${f7(this.totalInput)} in / ${f7(this.totalOutput)} out | session: ~$${(this.totalCostCents/100).toFixed(4)}`}}function f7($){return $.toLocaleString("en-US")}function v3($,Z={}){let{includeToolCalls:J=!0,includeTimestamps:Y=!0}=Z,Q=[];Q.push(`# smolerclaw session: ${$.name}`),Q.push(`Created: ${new Date($.created).toLocaleString()}`),Q.push(""),Q.push("---"),Q.push("");for(let X of $.messages){let K=Y?` (${new Date(X.timestamp).toLocaleTimeString("en",{hour:"2-digit",minute:"2-digit"})})`:"";if(X.role==="user")Q.push(`## You${K}`),Q.push(""),Q.push(X.content),Q.push("");else{if(Q.push(`## Claude${K}`),Q.push(""),Q.push(X.content),J&&X.toolCalls?.length){Q.push("");for(let V of X.toolCalls){let G=SG(V.name,V.input);Q.push(`> **Tool:** \`${V.name}\`${G}`);let H=V.result.split(`
355
409
  `).slice(0,5).join(`
356
410
  `);if(H.trim()){Q.push("> ```");for(let z of H.split(`
357
411
  `))Q.push(`> ${z}`);Q.push("> ```")}}}if(X.usage)Q.push(""),Q.push(`*Tokens: ${X.usage.inputTokens} in / ${X.usage.outputTokens} out (~$${(X.usage.costCents/100).toFixed(4)})*`);Q.push("")}Q.push("---"),Q.push("")}return Q.join(`
358
- `)}function qX($,Z){switch($){case"read_file":case"write_file":case"edit_file":return Z.path?` \`${Z.path}\``:"";case"search_files":return Z.pattern?` \`/${Z.pattern}/\``:"";case"find_files":return Z.pattern?` \`${Z.pattern}\``:"";case"run_command":return Z.command?` \`${Z.command}\``:"";default:return""}}var o0=[{id:"claude-haiku-4-5-20251001",alias:"haiku",name:"Claude Haiku 4.5",contextWindow:200000,tier:"fast"},{id:"claude-sonnet-4-20250514",alias:"sonnet",name:"Claude Sonnet 4",contextWindow:200000,tier:"balanced"},{id:"claude-sonnet-4-6-20250627",alias:"sonnet-4.6",name:"Claude Sonnet 4.6",contextWindow:200000,tier:"balanced"},{id:"claude-opus-4-20250514",alias:"opus",name:"Claude Opus 4",contextWindow:200000,tier:"powerful"},{id:"claude-opus-4-6-20250318",alias:"opus-4.6",name:"Claude Opus 4.6",contextWindow:200000,tier:"powerful"}];function y7($){let Z=o0.find((X)=>X.id===$);if(Z)return Z.id;let Y=$.toLowerCase(),J=o0.find((X)=>X.alias===Y);if(J)return J.id;let Q=o0.find((X)=>X.id.includes(Y)||X.name.toLowerCase().includes(Y));if(Q)return Q.id;return $}function H6($){let Z=["Available models:"];for(let Y of o0){let J=Y.id===$?" *":" ",Q=Y.tier==="fast"?"\u26A1":Y.tier==="balanced"?"\u2696\uFE0F":"\uD83E\uDDE0";Z.push(`${J} ${Y.alias.padEnd(12)} ${Q} ${Y.name}`)}return Z.push(""),Z.push("Use: /model <alias> (e.g., /model sonnet)"),Z.join(`
359
- `)}function _7($){if($.includes(":")){let[Y,...J]=$.split(":");return{provider:Y.toLowerCase(),model:J.join(":")}}let Z=$.toLowerCase();if(Z.startsWith("gpt-")||Z.startsWith("o1")||Z.startsWith("o3"))return{provider:"openai",model:$};if(Z.startsWith("llama")||Z.startsWith("mistral")||Z.startsWith("codellama")||Z.startsWith("deepseek"))return{provider:"ollama",model:$};return{provider:"anthropic",model:$}}var UX={anthropic:{name:"Anthropic",envKey:"",description:"Claude models (default, via subscription)"},openai:{name:"OpenAI",envKey:"OPENAI_API_KEY",description:"GPT and o-series models"},ollama:{name:"Ollama",envKey:"",description:"Local models via Ollama (no API key needed)"}};function q6(){let $=["Providers:"];for(let[Z,Y]of Object.entries(UX)){let J=Y.envKey?` (${Y.envKey})`:" (local)";$.push(` ${Z.padEnd(12)} ${Y.description}${J}`)}return $.push(""),$.push("Use: /model provider:model (e.g., /model openai:gpt-4o)"),$.join(`
360
- `)}class h7{name;apiKey;baseUrl;model;maxTokens;approvalMode="auto";approvalCallback=null;autoApproveAll=!1;constructor($,Z,Y){if(this.name=$,this.model=Z,this.maxTokens=Y,$==="ollama")this.apiKey="ollama",this.baseUrl=process.env.OLLAMA_BASE_URL||"http://localhost:11434/v1";else this.apiKey=process.env.OPENAI_API_KEY||"",this.baseUrl=process.env.OPENAI_BASE_URL||"https://api.openai.com/v1"}setModel($){this.model=$}setApprovalMode($){this.approvalMode=$}setApprovalCallback($){this.approvalCallback=$}setAutoApproveAll($){this.autoApproveAll=$}async*chat($,Z,Y=!0){if(!this.apiKey&&this.name!=="ollama"){yield{type:"error",error:"No API key found. Set OPENAI_API_KEY env var."};return}let J=[{role:"system",content:Z},...$.map((Q)=>({role:Q.role,content:Q.content}))];try{let Q=await fetch(`${this.baseUrl}/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify({model:this.model,messages:J,max_tokens:this.maxTokens,stream:!0})});if(!Q.ok){let z=await Q.text();yield{type:"error",error:`${this.name} API error ${Q.status}: ${z.slice(0,200)}`};return}if(!Q.body){yield{type:"error",error:"No response body"};return}let X=Q.body.getReader(),K=new TextDecoder,V="",G=Z.length+$.reduce((z,M)=>z+M.content.length,0),H=0;while(!0){let{done:z,value:M}=await X.read();if(z)break;V+=K.decode(M,{stream:!0});let N=V.split(`
361
- `);V=N.pop()||"";for(let E of N){if(!E.startsWith("data: "))continue;let L=E.slice(6).trim();if(L==="[DONE]")continue;try{let S=JSON.parse(L).choices?.[0]?.delta;if(S?.content)yield{type:"text",text:S.content},H+=S.content.length}catch{}}}yield{type:"usage",inputTokens:Math.ceil(G/3.5),outputTokens:Math.ceil(H/3.5)},yield{type:"done"}}catch(Q){yield{type:"error",error:Q instanceof Error?Q.message:String(Q)}}}}async function M1(...$){let Z=Bun.spawn($,{stdout:"pipe",stderr:"pipe",cwd:process.cwd()}),[Y,J]=await Promise.all([new Response(Z.stdout).text(),new Response(Z.stderr).text()]),Q=await Z.exited;return{stdout:Y.trim(),stderr:J.trim(),ok:Q===0}}async function U6(){let $=await M1("git","diff","--cached"),Z=await M1("git","diff"),Y=await M1("git","ls-files","--others","--exclude-standard"),J=[];if($.stdout)J.push(`=== STAGED ===
362
- `+$.stdout);if(Z.stdout)J.push(`=== UNSTAGED ===
363
- `+Z.stdout);if(Y.stdout)J.push(`=== UNTRACKED ===
364
- `+Y.stdout);return J.join(`
412
+ `)}function SG($,Z){switch($){case"read_file":case"write_file":case"edit_file":return Z.path?` \`${Z.path}\``:"";case"search_files":return Z.pattern?` \`/${Z.pattern}/\``:"";case"find_files":return Z.pattern?` \`${Z.pattern}\``:"";case"run_command":return Z.command?` \`${Z.command}\``:"";default:return""}}var h7=[{id:"claude-haiku-4-5-20251001",alias:"haiku",name:"Claude Haiku 4.5",contextWindow:200000,tier:"fast"},{id:"claude-sonnet-4-20250514",alias:"sonnet",name:"Claude Sonnet 4",contextWindow:200000,tier:"balanced"},{id:"claude-sonnet-4-6-20250627",alias:"sonnet-4.6",name:"Claude Sonnet 4.6",contextWindow:200000,tier:"balanced"},{id:"claude-opus-4-20250514",alias:"opus",name:"Claude Opus 4",contextWindow:200000,tier:"powerful"},{id:"claude-opus-4-6-20250318",alias:"opus-4.6",name:"Claude Opus 4.6",contextWindow:200000,tier:"powerful"}];function i9($){let Z=h7.find((X)=>X.id===$);if(Z)return Z.id;let J=$.toLowerCase(),Y=h7.find((X)=>X.alias===J);if(Y)return Y.id;let Q=h7.find((X)=>X.id.includes(J)||X.name.toLowerCase().includes(J));if(Q)return Q.id;return $}function f3($){let Z=["Available models:"];for(let J of h7){let Y=J.id===$?" *":" ",Q=J.tier==="fast"?"\u26A1":J.tier==="balanced"?"\u2696\uFE0F":"\uD83E\uDDE0";Z.push(`${Y} ${J.alias.padEnd(12)} ${Q} ${J.name}`)}return Z.push(""),Z.push("Use: /model <alias> (e.g., /model sonnet)"),Z.join(`
413
+ `)}function s9($){if($.includes(":")){let[J,...Y]=$.split(":");return{provider:J.toLowerCase(),model:Y.join(":")}}let Z=$.toLowerCase();if(Z.startsWith("gpt-")||Z.startsWith("o1")||Z.startsWith("o3"))return{provider:"openai",model:$};if(Z.startsWith("llama")||Z.startsWith("mistral")||Z.startsWith("codellama")||Z.startsWith("deepseek"))return{provider:"ollama",model:$};return{provider:"anthropic",model:$}}var wG={anthropic:{name:"Anthropic",envKey:"",description:"Claude models (default, via subscription)"},openai:{name:"OpenAI",envKey:"OPENAI_API_KEY",description:"GPT and o-series models"},ollama:{name:"Ollama",envKey:"",description:"Local models via Ollama (no API key needed)"}};function h3(){let $=["Providers:"];for(let[Z,J]of Object.entries(wG)){let Y=J.envKey?` (${J.envKey})`:" (local)";$.push(` ${Z.padEnd(12)} ${J.description}${Y}`)}return $.push(""),$.push("Use: /model provider:model (e.g., /model openai:gpt-4o)"),$.join(`
414
+ `)}class t9{name;apiKey;baseUrl;model;maxTokens;approvalMode="auto";approvalCallback=null;autoApproveAll=!1;constructor($,Z,J){if(this.name=$,this.model=Z,this.maxTokens=J,$==="ollama")this.apiKey="ollama",this.baseUrl=process.env.OLLAMA_BASE_URL||"http://localhost:11434/v1";else this.apiKey=process.env.OPENAI_API_KEY||"",this.baseUrl=process.env.OPENAI_BASE_URL||"https://api.openai.com/v1"}setModel($){this.model=$}setApprovalMode($){this.approvalMode=$}setApprovalCallback($){this.approvalCallback=$}setAutoApproveAll($){this.autoApproveAll=$}async*chat($,Z,J=!0){if(!this.apiKey&&this.name!=="ollama"){yield{type:"error",error:"No API key found. Set OPENAI_API_KEY env var."};return}let Y=[{role:"system",content:Z},...$.map((Q)=>({role:Q.role,content:Q.content}))];try{let Q=await fetch(`${this.baseUrl}/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify({model:this.model,messages:Y,max_tokens:this.maxTokens,stream:!0})});if(!Q.ok){let z=await Q.text();yield{type:"error",error:`${this.name} API error ${Q.status}: ${z.slice(0,200)}`};return}if(!Q.body){yield{type:"error",error:"No response body"};return}let X=Q.body.getReader(),K=new TextDecoder,V="",G=Z.length+$.reduce((z,B)=>z+B.content.length,0),H=0;while(!0){let{done:z,value:B}=await X.read();if(z)break;V+=K.decode(B,{stream:!0});let U=V.split(`
415
+ `);V=U.pop()||"";for(let M of U){if(!M.startsWith("data: "))continue;let O=M.slice(6).trim();if(O==="[DONE]")continue;try{let T=JSON.parse(O).choices?.[0]?.delta;if(T?.content)yield{type:"text",text:T.content},H+=T.content.length}catch{}}}yield{type:"usage",inputTokens:Math.ceil(G/3.5),outputTokens:Math.ceil(H/3.5)},yield{type:"done"}}catch(Q){yield{type:"error",error:Q instanceof Error?Q.message:String(Q)}}}}async function u4(...$){let Z=Bun.spawn($,{stdout:"pipe",stderr:"pipe",cwd:process.cwd()}),[J,Y]=await Promise.all([new Response(Z.stdout).text(),new Response(Z.stderr).text()]),Q=await Z.exited;return{stdout:J.trim(),stderr:Y.trim(),ok:Q===0}}async function g3(){let $=await u4("git","diff","--cached"),Z=await u4("git","diff"),J=await u4("git","ls-files","--others","--exclude-standard"),Y=[];if($.stdout)Y.push(`=== STAGED ===
416
+ `+$.stdout);if(Z.stdout)Y.push(`=== UNSTAGED ===
417
+ `+Z.stdout);if(J.stdout)Y.push(`=== UNTRACKED ===
418
+ `+J.stdout);return Y.join(`
365
419
 
366
- `)||"(no changes)"}async function B6(){let $=await M1("git","status","--short");return $.ok?$.stdout||"(clean)":$.stderr}async function N6(){return(await M1("git","add","-A")).ok}async function C6($){let Z=await M1("git","commit","-m",$);return{ok:Z.ok,output:Z.stdout||Z.stderr}}async function M6(){let $=await M1("git","rev-parse","--is-inside-work-tree");return $.ok&&$.stdout==="true"}var O6={default:{name:"default",description:"Versatile assistant (general + coding)",systemPrompt:""},coder:{name:"coder",description:"Focused software engineer",systemPrompt:`You are a senior software engineer. Focus exclusively on code quality, architecture, and implementation.
420
+ `)||"(no changes)"}async function m3(){let $=await u4("git","status","--short");return $.ok?$.stdout||"(clean)":$.stderr}async function p3(){return(await u4("git","add","-A")).ok}async function c3($){let Z=await u4("git","commit","-m",$);return{ok:Z.ok,output:Z.stdout||Z.stderr}}async function u3(){let $=await u4("git","rev-parse","--is-inside-work-tree");return $.ok&&$.stdout==="true"}var d3={default:{name:"default",description:"Versatile assistant (general + coding)",systemPrompt:""},coder:{name:"coder",description:"Focused software engineer",systemPrompt:`You are a senior software engineer. Focus exclusively on code quality, architecture, and implementation.
367
421
 
368
422
  Behavior:
369
423
  - Write clean, production-grade code. No shortcuts.
@@ -394,78 +448,102 @@ Behavior:
394
448
  - Be specific. Show the line, explain the problem, suggest the fix.
395
449
  - Check for: error handling, input validation, edge cases, naming, complexity.
396
450
  - Don't nitpick formatting unless it affects readability.
397
- - Praise good patterns when you see them.`},business:{name:"business",description:"Personal business assistant (Windows-focused)",systemPrompt:""}};function E6($){return O6[$.toLowerCase()]||null}function j6($){let Z=["Personas:"];for(let[Y,J]of Object.entries(O6)){let Q=Y===$?" *":" ";Z.push(`${Q} ${Y.padEnd(12)} ${J.description}`)}return Z.push(""),Z.push("Use: /persona <name>"),Z.join(`
398
- `)}async function F6($){try{let Z=A?["powershell","-NoProfile","-Command","Set-Clipboard -Value $input"]:o7?["pbcopy"]:["xclip","-selection","clipboard"],Y=Bun.spawn(Z,{stdin:"pipe",stdout:"pipe",stderr:"pipe"});return Y.stdin.write($),Y.stdin.end(),await Y.exited===0}catch{return!1}}import{existsSync as BX,readFileSync as NX,statSync as CX}from"fs";import{extname as MX,resolve as OX}from"path";var EX=new Set([".png",".jpg",".jpeg",".gif",".webp"]),jX=20971520;function L6($){let Z=[],Y=$.split(/\s+/),J=[];for(let Q of Y){let X=Q.replace(/^["']|["']$/g,""),K=MX(X).toLowerCase();if(EX.has(K)){let V=OX(X);if(BX(V))try{if(CX(V).size>jX){J.push(`[image too large: ${X}]`);continue}let z=NX(V).toString("base64"),M=FX(K);Z.push({path:V,mediaType:M,base64:z}),J.push(`[image: ${X}]`)}catch{J.push(Q)}else J.push(Q)}else J.push(Q)}return{text:J.join(" "),images:Z}}function FX($){switch($){case".png":return"image/png";case".jpg":case".jpeg":return"image/jpeg";case".gif":return"image/gif";case".webp":return"image/webp";default:return"image/png"}}async function R6(){let $=[];$.push("=== BRIEFING DIARIO ===");let Z=await y1();if($.push(Z),A)try{let Y=await i$();$.push(`
451
+ - Praise good patterns when you see them.`},business:{name:"business",description:"Personal business assistant (Windows-focused)",systemPrompt:""}};function l3($){return d3[$.toLowerCase()]||null}function o3($){let Z=["Personas:"];for(let[J,Y]of Object.entries(d3)){let Q=J===$?" *":" ";Z.push(`${Q} ${J.padEnd(12)} ${Y.description}`)}return Z.push(""),Z.push("Use: /persona <name>"),Z.join(`
452
+ `)}e();async function a3($){try{let Z=I?["powershell","-NoProfile","-Command","Set-Clipboard -Value $input"]:FZ?["pbcopy"]:["xclip","-selection","clipboard"],J=Bun.spawn(Z,{stdin:"pipe",stdout:"pipe",stderr:"pipe"});return J.stdin.write($),J.stdin.end(),await J.exited===0}catch{return!1}}import{existsSync as kG,readFileSync as bG,statSync as yG}from"fs";import{extname as _G,resolve as vG}from"path";var fG=new Set([".png",".jpg",".jpeg",".gif",".webp"]),hG=20971520;function n3($){let Z=[],J=$.split(/\s+/),Y=[];for(let Q of J){let X=Q.replace(/^["']|["']$/g,""),K=_G(X).toLowerCase();if(fG.has(K)){let V=vG(X);if(kG(V))try{if(yG(V).size>hG){Y.push(`[image too large: ${X}]`);continue}let z=bG(V).toString("base64"),B=gG(K);Z.push({path:V,mediaType:B,base64:z}),Y.push(`[image: ${X}]`)}catch{Y.push(Q)}else Y.push(Q)}else Y.push(Q)}return{text:Y.join(" "),images:Z}}function gG($){switch($){case".png":return"image/png";case".jpg":case".jpeg":return"image/jpeg";case".gif":return"image/gif";case".webp":return"image/webp";default:return"image/png"}}b4();b4();import{existsSync as r3,readFileSync as mG}from"fs";import{join as i3}from"path";e();function pG(){let $=new Date().getDay();return $===0||$===6}function cG(){return pG()?"weekend":"weekday"}async function uG($){let Z=[],J=[],Y=[],Q=new Date,X=new Date(Q);X.setHours(23,59,59,999);let K=i3($,"tasks.json");if(r3(K))try{let H=JSON.parse(mG(K,"utf-8"));for(let z of H){if(z.done)continue;if(z.dueAt){let B=new Date(z.dueAt),U=B<Q,M=!U&&B<=X;if(U)J.push({id:z.id,title:z.title,dueAt:z.dueAt,isOverdue:!0});else if(M)Z.push({id:z.id,title:z.title,dueAt:z.dueAt,isOverdue:!1})}}}catch{}let V=W8(!0);for(let H of V.slice(0,5)){let z=await dG(H);if(z)Y.push(z)}return{hasSpillover:Z.length>0||J.length>0||Y.length>0,urgentTasks:Z,overdueTasks:J,pendingCommits:Y}}async function dG($){if(!r3(i3($.path,".git")))return null;try{let Z=Bun.spawn(["git","status","--porcelain"],{cwd:$.path,stdout:"pipe",stderr:"pipe"}),J=await new Response(Z.stdout).text();await Z.exited;let Y=J.trim().length>0,Q=Bun.spawn(["git","rev-list","--count","@{u}..HEAD"],{cwd:$.path,stdout:"pipe",stderr:"pipe"}),X=await new Response(Q.stdout).text(),V=await Q.exited===0?parseInt(X.trim())||0:0;if(Y||V>0)return{projectName:$.name,projectPath:$.path,uncommittedChanges:Y,unpushedCommits:V}}catch{}return null}function lG($,Z){if($==="weekday")return"productivity";if(Z)return"spillover_alert";return"sharpen_or_relax"}async function g7($){let Z=cG(),J=await uG($),Y=lG(Z,J.hasSpillover);return{dayType:Z,workloadState:J.hasSpillover?"spillover":"clear",persona:Y,urgentTasks:J.urgentTasks,overdueTasks:J.overdueTasks,pendingCommits:J.pendingCommits}}function oG($){let J=["Domingo","Segunda","Terca","Quarta","Quinta","Sexta","Sabado"][new Date().getDay()];switch($.persona){case"productivity":return`=== BRIEFING DIARIO === ${J}
453
+ Modo: Produtividade Total`;case"spillover_alert":return`=== BRIEFING DIARIO === ${J}
454
+ \u26A0 Trabalho escorrido detectado.`;case"sharpen_or_relax":return`=== BRIEFING DIARIO === ${J}
455
+ Modo: Sharpen or Relax`}}function aG($){let Z=[];if($.overdueTasks.length>0){Z.push(`
456
+ --- Tarefas Atrasadas ---`);for(let J of $.overdueTasks.slice(0,5)){let Y=J.dueAt?new Date(J.dueAt).toLocaleDateString("pt-BR"):"";Z.push(` \u26A0 ${J.title} (venceu ${Y})`)}}if($.urgentTasks.length>0){Z.push(`
457
+ --- Tarefas Urgentes (Hoje) ---`);for(let J of $.urgentTasks.slice(0,5)){let Y=J.dueAt?new Date(J.dueAt).toLocaleTimeString("pt-BR",{hour:"2-digit",minute:"2-digit"}):"";Z.push(` ! ${J.title} (${Y})`)}}if($.pendingCommits.length>0){Z.push(`
458
+ --- Git Pendente ---`);for(let J of $.pendingCommits){let Y=[];if(J.uncommittedChanges)Y.push("uncommitted");if(J.unpushedCommits>0)Y.push(`${J.unpushedCommits} unpushed`);Z.push(` ${J.projectName}: ${Y.join(", ")}`)}}return Z.join(`
459
+ `)}function nG($){if($.persona!=="sharpen_or_relax")return"";return`
460
+ --- Fim de Semana Livre ---
461
+
462
+ [A] Amolar o Machado
463
+ Estudo de arquitetura, refatoracao, melhoria do CLI
464
+
465
+ [B] Descompressao Criativa
466
+ Projetos paralelos sem prazo, foco pessoal/familia`}function rG($){if($.persona!=="spillover_alert")return"";let Z=$.overdueTasks.length+$.urgentTasks.length+$.pendingCommits.length;return`
467
+ --- Sugestao: Timebox ---
468
+ Liquidar pendencias em ${Math.min(90,Z*15)} minutos.
469
+ Depois: descanso merecido.`}async function s3($){let Z=[],J=null;if($)J=await g7($),Z.push(oG(J));else Z.push("=== BRIEFING DIARIO ===");let Y=await k4();if(Z.push(Y),J&&J.workloadState==="spillover"){let X=aG(J);if(X)Z.push(X);let K=rG(J);if(K)Z.push(K)}if(J){let X=nG(J);if(X)Z.push(X)}if(I)try{let X=await k$();Z.push(`
399
470
  --- Agenda ---
400
- ${Y}`)}catch{$.push(`
471
+ ${X}`)}catch{Z.push(`
401
472
  --- Agenda ---
402
- Outlook nao disponivel.`)}if(A)try{let Y=await k1();$.push(`
473
+ Outlook nao disponivel.`)}if(I)try{let X=await w4();Z.push(`
403
474
  --- Sistema ---
404
- ${Y}`)}catch{}try{let Y=await o$(["finance","business","tech"],3);$.push(`
405
- ${Y}`)}catch{$.push(`
475
+ ${X}`)}catch{}let Q=J?.persona==="sharpen_or_relax"?2:3;try{let X=await q4(["finance","business","tech"],Q);Z.push(`
476
+ ${X}`)}catch{Z.push(`
406
477
  --- Noticias ---
407
- Falha ao carregar noticias.`)}return $.push(`
408
- ======================`),$.join(`
409
- `)}import{existsSync as LX,readFileSync as RX,writeFileSync as AX}from"fs";import{join as xX}from"path";var A6="",x6=()=>xX(A6,"last-morning.txt");function D6($){A6=$;let Z=x6(),Y=new Date().toISOString().split("T")[0];if(!LX(Z))return!0;try{return RX(Z,"utf-8").trim()!==Y}catch{return!0}}function T6(){let $=new Date().toISOString().split("T")[0];AX(x6(),$)}async function P6(){let $=[];$.push("=============================="),$.push(" BOM DIA! Briefing do dia"),$.push(`==============================
410
- `);let Z=await y1();$.push(Z);let J=a$().filter((H)=>{if(!H.dueAt)return!1;let z=new Date(H.dueAt),M=new Date;return z.toDateString()===M.toDateString()});if(J.length>0)$.push(`
411
- --- Tarefas do dia ---`),$.push(q1(J));let Q=n4();if(Q.length>0)$.push(`
412
- --- Follow-ups pendentes ---`),$.push(B0(Q));let K=v1().filter((H)=>H.status==="atrasado");if(K.length>0)$.push(`
413
- --- Delegacoes atrasadas ---`),$.push(U0(K));let V=DZ();if(V)$.push(`
414
- ${V}`);if(A)try{let H=await i$();$.push(`
415
- --- Agenda ---`),$.push(H)}catch{}try{let H=await o$(["finance","business","tech"],2);$.push(`
416
- `+H)}catch{}let G=a$();if(G.length>0&&J.length!==G.length)$.push(`
417
- ${G.length} tarefa(s) pendente(s) no total. Use /tarefas para ver todas.`);return $.push(`
478
+ Falha ao carregar noticias.`)}return Z.push(`
479
+ ======================`),Z.join(`
480
+ `)}b4();import{existsSync as iG,readFileSync as sG,writeFileSync as tG}from"fs";import{join as eG}from"path";e();var t3="",e3=()=>eG(t3,"last-morning.txt");function $Y($){t3=$;let Z=e3(),J=new Date().toISOString().split("T")[0];if(!iG(Z))return!0;try{return sG(Z,"utf-8").trim()!==J}catch{return!0}}function ZY(){let $=new Date().toISOString().split("T")[0];tG(e3(),$)}async function JY(){let $=[],Z=new Date().getHours(),J=Z<12?"BOM DIA":Z<18?"BOA TARDE":"BOA NOITE";$.push("=============================="),$.push(` ${J}! Briefing do dia`),$.push(`==============================
481
+ `);let Y=await k4();$.push(Y);let X=d$().filter((B)=>{if(!B.dueAt)return!1;let U=new Date(B.dueAt),M=new Date;return U.toDateString()===M.toDateString()});if(X.length>0)$.push(`
482
+ --- Tarefas do dia ---`),$.push(y4(X));let K=z8();if(K.length>0)$.push(`
483
+ --- Follow-ups pendentes ---`),$.push(t1(K));let G=f4().filter((B)=>B.status==="atrasado");if(G.length>0)$.push(`
484
+ --- Delegacoes atrasadas ---`),$.push(s1(G));let H=R7();if(H)$.push(`
485
+ ${H}`);if(I)try{let B=await k$();$.push(`
486
+ --- Agenda ---`),$.push(B)}catch{}try{let B=await q4(["finance","business","tech"],2);$.push(`
487
+ `+B)}catch{}let z=d$();if(z.length>0&&X.length!==z.length)$.push(`
488
+ ${z.length} tarefa(s) pendente(s) no total. Use /tarefas para ver todas.`);return $.push(`
418
489
  ==============================`),$.join(`
419
- `)}var _=null,a0=null,f7=null,v7=0;function S6($){f7=$}function b6($="foco",Z=25,Y=5){if(_)return`Pomodoro ja ativo: "${_.label}" (${_6()}). Use /pomodoro stop para parar.`;return _={startedAt:Date.now(),durationMs:Z*60000,breakMs:Y*60000,label:$,type:"work"},v7++,y6(),`Pomodoro #${v7} iniciado: "${$}" (${Z}min trabalho / ${Y}min pausa)`}function k6(){if(!_)return"Nenhum pomodoro ativo.";let $=_.label,Z=Math.floor((Date.now()-_.startedAt)/60000);return r0(),_=null,`Pomodoro parado: "${$}" (${Z}min decorridos)`}function g7(){if(!_)return"Nenhum pomodoro ativo. Use /pomodoro <descricao> para iniciar.";let $=_6();return`${_.type==="work"?"Trabalhando":"Pausa"}: "${_.label}" \u2014 ${$} restante(s) (ciclo #${v7})`}function y6(){if(!_)return;r0();let $=_.startedAt+_.durationMs-Date.now();if($<=0){w6();return}a0=setTimeout(w6,$)}function w6(){if(!_)return;if(_.type==="work"){let $=`Pomodoro: "${_.label}" concluido! Hora da pausa (${_.breakMs/60000}min).`;I6("Pausa!",`"${_.label}" concluido. Descanse ${_.breakMs/60000} minutos.`),f7?.($),_={..._,type:"break",startedAt:Date.now(),durationMs:_.breakMs},y6()}else I6("Volta ao trabalho!","Pausa concluida. Pronto para o proximo ciclo."),f7?.("Pausa concluida! Pronto para o proximo ciclo. Use /pomodoro para iniciar."),r0(),_=null}function r0(){if(a0)clearTimeout(a0),a0=null}function _6(){if(!_)return"0min";let $=Math.max(0,_.startedAt+_.durationMs-Date.now());return`${Math.ceil($/60000)}min`}async function I6($,Z){if(!A)return;let Y=$.replace(/'/g,"''"),J=Z.replace(/'/g,"''"),Q=["[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] | Out-Null","[Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom.XmlDocument, ContentType = WindowsRuntime] | Out-Null",`$template = '<toast><visual><binding template="ToastText02"><text id="1">${Y}</text><text id="2">${J}</text></binding></visual><audio src="ms-winsoundevent:Notification.Reminder"/></toast>'`,"$xml = New-Object Windows.Data.Xml.Dom.XmlDocument","$xml.LoadXml($template)","$toast = [Windows.UI.Notifications.ToastNotification]::new($xml)",'[Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier("smolerclaw").Show($toast)'].join("; ");try{let X=Bun.spawn(["powershell","-NoProfile","-NonInteractive","-Command",Q],{stdout:"pipe",stderr:"pipe"}),K=setTimeout(()=>X.kill(),1e4);await Promise.all([new Response(X.stdout).text(),new Response(X.stderr).text()]),await X.exited,clearTimeout(K)}catch{}}function h6(){r0(),_=null}t();import{existsSync as f6,mkdirSync as DX,readFileSync as TX}from"fs";import{join as PX}from"path";import{randomUUID as wX}from"crypto";var v6="",Z$=[],g6=()=>PX(v6,"workflows.json");function s4(){P(g6(),JSON.stringify(Z$,null,2))}function IX(){let $=g6();if(!f6($)){Z$=m7(),s4();return}try{let Z=JSON.parse(TX($,"utf-8"));if(!Array.isArray(Z)){Z$=m7(),s4();return}Z$=Z.map((Y)=>({id:Y.id||c7(),name:Y.name||"unnamed",description:Y.description||"",steps:Array.isArray(Y.steps)?Y.steps:[],tags:Array.isArray(Y.tags)?Y.tags:[],enabled:Y.enabled!==!1,createdAt:Y.createdAt||new Date().toISOString(),updatedAt:Y.updatedAt||new Date().toISOString()}))}catch{Z$=m7(),s4()}}function m7(){let $=new Date().toISOString();return[{id:c7(),name:"iniciar-dia",description:"Abrir apps de trabalho: terminal e ferramentas",steps:[{action:"notify",target:"Iniciando ambiente de trabalho..."},{action:"open_app",target:"terminal",label:"Terminal"},{action:"wait",target:"2"},{action:"open_app",target:"vscode",label:"VS Code",on_error:"skip"},{action:"notify",target:"Ambiente pronto!"}],tags:["trabalho","diario"],enabled:!0,createdAt:$,updatedAt:$},{id:c7(),name:"dev",description:"Ambiente de desenvolvimento: VSCode + Terminal",steps:[{action:"open_app",target:"vscode",label:"VS Code"},{action:"wait",target:"1"},{action:"open_app",target:"terminal",label:"Terminal"}],tags:["dev"],enabled:!0,createdAt:$,updatedAt:$}]}function m6($){if(v6=$,!f6($))DX($,{recursive:!0});IX()}function t4($){let Z=$.toLowerCase().trim();return Z$.find((Y)=>Y.id===$)||Z$.find((Y)=>Y.name.toLowerCase()===Z)||Z$.find((Y)=>Y.name.toLowerCase().includes(Z))||null}function c6($){let Z=[...Z$];if($){let Y=$.toLowerCase();Z=Z.filter((J)=>J.tags.some((Q)=>Q.toLowerCase()===Y))}return Z}function d7($,Z){let Y=t4($);if(!Y)return null;return Z$=Z$.map((J)=>J.id===Y.id?{...J,...Z,updatedAt:new Date().toISOString()}:J),s4(),Z$.find((J)=>J.id===Y.id)||null}function d6($){let Z=t4($);if(!Z)return!1;return Z$=Z$.filter((Y)=>Y.id!==Z.id),s4(),!0}async function u7($,Z){let Y=t4($);if(!Y){let Q=Z$.map((X)=>X.name).join(", ");return`Workflow nao encontrado: "${$}". Disponiveis: ${Q}`}if(!Y.enabled)return`Workflow "${Y.name}" esta desativado.`;let J=await u6(Y.name,Y.steps,Z);return bX(J)}async function u6($,Z,Y){let J=performance.now(),Q=[`Executando workflow: "${$}"`],X=0,K=0,V=0,G=!0;for(let H=0;H<Z.length;H++){let z=Z[H],M=z.label||`${z.action}:${z.target}`,N=`[${H+1}/${Z.length}]`,E=z.on_error||"continue";Y?.(`${N} ${M}...`);try{let L=await SX(z,Y);Q.push(` ${N} ${L}`),X++}catch(L){let w=L instanceof Error?L.message:String(L);switch(V++,E){case"stop":return Q.push(` ${N} ERRO (parando): ${w}`),G=!1,{workflow:$,success:G,stepsRun:X,stepsSkipped:K,stepsFailed:V,log:Q,duration:Math.round(performance.now()-J)};case"skip":Q.push(` ${N} ERRO (pulado): ${w}`),K++;break;case"continue":default:Q.push(` ${N} ERRO (continuando): ${w}`);break}}}return{workflow:$,success:G,stepsRun:X,stepsSkipped:K,stepsFailed:V,log:Q,duration:Math.round(performance.now()-J)}}async function SX($,Z){switch($.action){case"open_app":{if(!A)return`skip: ${$.target} (not Windows)`;return await S1($.target)}case"open_url":{if(!A)return`skip: ${$.target} (not Windows)`;let Y=$.target.trim();if(!Y.startsWith("http://")&&!Y.startsWith("https://"))throw Error(`URL invalida (deve comecar com http/https): ${Y}`);return await b1(Y)}case"run_command":{if(!A)return"skip: command (not Windows)";let Y=$.target;if(!Y.trim())throw Error("Comando vazio");let J=Bun.spawn(["powershell","-NoProfile","-NonInteractive","-Command",Y],{stdout:"pipe",stderr:"pipe"}),Q=new Promise((V,G)=>{setTimeout(()=>{J.kill(),G(Error("Command timeout (30s)"))},30000)}),X=(async()=>{let[V,G]=await Promise.all([new Response(J.stdout).text(),new Response(J.stderr).text()]),H=await J.exited;if(H!==0&&G.trim())throw Error(`exit ${H}: ${G.trim().slice(0,200)}`);return V.trim().slice(0,200)})(),K=await Promise.race([X,Q]);return`Command: ${Y.slice(0,60)}${K?" -> "+K:""}`}case"wait":{let Y=Math.max(0,Math.min(parseInt($.target)||1,60));return await new Promise((J)=>setTimeout(J,Y*1000)),`Wait: ${Y}s`}case"notify":{if(A)try{let Y=$.target.replace(/'/g,"''"),J=Bun.spawn(["powershell","-NoProfile","-NonInteractive","-Command",`[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') | Out-Null; [System.Windows.Forms.MessageBox]::Show('${Y}', 'smolerclaw', 'OK', 'Information') | Out-Null`],{stdout:"pipe",stderr:"pipe"});setTimeout(()=>J.kill(),1e4)}catch{}return`Notify: ${$.target}`}case"if_app_running":{if(!A)return"skip: condition (not Windows)";let Y=$.target.toLowerCase(),J=Bun.spawn(["powershell","-NoProfile","-NonInteractive","-Command",`(Get-Process -Name '${Y}' -ErrorAction SilentlyContinue) -ne $null`],{stdout:"pipe",stderr:"pipe"}),Q=new Promise((V,G)=>{setTimeout(()=>{J.kill(),G(Error("condition timeout"))},5000)}),X=(async()=>{let[V]=await Promise.all([new Response(J.stdout).text(),new Response(J.stderr).text()]);return await J.exited,V.trim().toLowerCase()==="true"})(),K=await Promise.race([X,Q]);if(K&&$.condition_steps&&$.condition_steps.length>0){let V=await u6(`${$.target}-conditional`,$.condition_steps,Z);return`Condition: ${Y} running=true, ran ${V.stepsRun} sub-steps`}return`Condition: ${Y} running=${K}${!K?" (skipped sub-steps)":""}`}case"log":return`Log: ${$.target}`;default:throw Error(`Acao desconhecida: ${$.action}`)}}function p6($){let Z=$||Z$;if(Z.length===0)return"Nenhum workflow configurado.";let Y=Z.map((J)=>{let Q=J.enabled?"":" [DESATIVADO]",X=J.tags.length>0?` [${J.tags.join(", ")}]`:"",K=J.steps.map((V)=>{let G=V.label||V.target;return V.action==="wait"?`${V.target}s`:G}).join(" -> ");return` ${J.name}${Q}${X} \u2014 ${J.description}
420
- ${" ".repeat(4)}${K} {${J.id}}`});return`Workflows (${Z.length}):
421
- ${Y.join(`
490
+ `)}e();Z4();var h=null,m7=null,e9=null,$Z=0;function XY($){e9=$}function KY($="foco",Z=25,J=5){if(h)return`Pomodoro ja ativo: "${h.label}" (${GY()}). Use /pomodoro stop para parar.`;return h={startedAt:Date.now(),durationMs:Z*60000,breakMs:J*60000,label:$,type:"work"},$Z++,VY(),`Pomodoro #${$Z} iniciado: "${$}" (${Z}min trabalho / ${J}min pausa)`}function zY(){if(!h)return"Nenhum pomodoro ativo.";let $=h.label,Z=Math.floor((Date.now()-h.startedAt)/60000);return p7(),h=null,`Pomodoro parado: "${$}" (${Z}min decorridos)`}function ZZ(){if(!h)return"Nenhum pomodoro ativo. Use /pomodoro <descricao> para iniciar.";let $=GY();return`${h.type==="work"?"Trabalhando":"Pausa"}: "${h.label}" \u2014 ${$} restante(s) (ciclo #${$Z})`}function VY(){if(!h)return;p7();let $=h.startedAt+h.durationMs-Date.now();if($<=0){YY();return}m7=setTimeout(YY,$)}function YY(){if(!h)return;if(h.type==="work"){let $=`Pomodoro: "${h.label}" concluido! Hora da pausa (${h.breakMs/60000}min).`;QY("Pausa!",`"${h.label}" concluido. Descanse ${h.breakMs/60000} minutos.`),e9?.($),h={...h,type:"break",startedAt:Date.now(),durationMs:h.breakMs},VY()}else QY("Volta ao trabalho!","Pausa concluida. Pronto para o proximo ciclo."),e9?.("Pausa concluida! Pronto para o proximo ciclo. Use /pomodoro para iniciar."),p7(),h=null}function p7(){if(m7)clearTimeout(m7),m7=null}function GY(){if(!h)return"0min";let $=Math.max(0,h.startedAt+h.durationMs-Date.now());return`${Math.ceil($/60000)}min`}async function QY($,Z){if(!I)return;try{await $4($,Z,{timeout:1e4})}catch{}}function HY(){p7(),h=null}a();b4();e();Z4();import{existsSync as qY,mkdirSync as $H,readFileSync as ZH}from"fs";import{join as JH}from"path";import{randomUUID as YH}from"crypto";var WY="",X$=[],UY=()=>JH(WY,"workflows.json");function b0(){S(UY(),JSON.stringify(X$,null,2))}function QH(){let $=UY();if(!qY($)){X$=JZ(),b0();return}try{let Z=JSON.parse(ZH($,"utf-8"));if(!Array.isArray(Z)){X$=JZ(),b0();return}X$=Z.map((J)=>({id:J.id||YZ(),name:J.name||"unnamed",description:J.description||"",steps:Array.isArray(J.steps)?J.steps:[],tags:Array.isArray(J.tags)?J.tags:[],enabled:J.enabled!==!1,createdAt:J.createdAt||new Date().toISOString(),updatedAt:J.updatedAt||new Date().toISOString()}))}catch{X$=JZ(),b0()}}function JZ(){let $=new Date().toISOString();return[{id:YZ(),name:"iniciar-dia",description:"Abrir apps de trabalho: terminal e ferramentas",steps:[{action:"notify",target:"Iniciando ambiente de trabalho..."},{action:"open_app",target:"terminal",label:"Terminal"},{action:"wait",target:"2"},{action:"open_app",target:"vscode",label:"VS Code",on_error:"skip"},{action:"notify",target:"Ambiente pronto!"}],tags:["trabalho","diario"],enabled:!0,createdAt:$,updatedAt:$},{id:YZ(),name:"dev",description:"Ambiente de desenvolvimento: VSCode + Terminal",steps:[{action:"open_app",target:"vscode",label:"VS Code"},{action:"wait",target:"1"},{action:"open_app",target:"terminal",label:"Terminal"}],tags:["dev"],enabled:!0,createdAt:$,updatedAt:$}]}function BY($){if(WY=$,!qY($))$H($,{recursive:!0});QH()}function y0($){let Z=$.toLowerCase().trim();return X$.find((J)=>J.id===$)||X$.find((J)=>J.name.toLowerCase()===Z)||X$.find((J)=>J.name.toLowerCase().includes(Z))||null}function NY($){let Z=[...X$];if($){let J=$.toLowerCase();Z=Z.filter((Y)=>Y.tags.some((Q)=>Q.toLowerCase()===J))}return Z}function QZ($,Z){let J=y0($);if(!J)return null;return X$=X$.map((Y)=>Y.id===J.id?{...Y,...Z,updatedAt:new Date().toISOString()}:Y),b0(),X$.find((Y)=>Y.id===J.id)||null}function MY($){let Z=y0($);if(!Z)return!1;return X$=X$.filter((J)=>J.id!==Z.id),b0(),!0}async function XZ($,Z){let J=y0($);if(!J){let Q=X$.map((X)=>X.name).join(", ");return`Workflow nao encontrado: "${$}". Disponiveis: ${Q}`}if(!J.enabled)return`Workflow "${J.name}" esta desativado.`;let Y=await CY(J.name,J.steps,Z);return KH(Y)}async function CY($,Z,J){let Y=performance.now(),Q=[`Executando workflow: "${$}"`],X=0,K=0,V=0,G=!0;for(let H=0;H<Z.length;H++){let z=Z[H],B=z.label||`${z.action}:${z.target}`,U=`[${H+1}/${Z.length}]`,M=z.on_error||"continue";J?.(`${U} ${B}...`);try{let O=await XH(z,J);Q.push(` ${U} ${O}`),X++}catch(O){let P=O instanceof Error?O.message:String(O);switch(V++,M){case"stop":return Q.push(` ${U} ERRO (parando): ${P}`),G=!1,{workflow:$,success:G,stepsRun:X,stepsSkipped:K,stepsFailed:V,log:Q,duration:Math.round(performance.now()-Y)};case"skip":Q.push(` ${U} ERRO (pulado): ${P}`),K++;break;case"continue":default:Q.push(` ${U} ERRO (continuando): ${P}`);break}}}return{workflow:$,success:G,stepsRun:X,stepsSkipped:K,stepsFailed:V,log:Q,duration:Math.round(performance.now()-Y)}}async function XH($,Z){switch($.action){case"open_app":{if(!I)return`skip: ${$.target} (not Windows)`;return await x4($.target)}case"open_url":{if(!I)return`skip: ${$.target} (not Windows)`;let J=$.target.trim();if(!J.startsWith("http://")&&!J.startsWith("https://"))throw Error(`URL invalida (deve comecar com http/https): ${J}`);return await S4(J)}case"run_command":{if(!I)return"skip: command (not Windows)";let J=$.target;if(!J.trim())throw Error("Comando vazio");let Y=await z$(J,{timeout:30000});if(Y.timedOut)throw Error("Command timeout (30s)");if(Y.exitCode!==0&&Y.stderr.trim())throw Error(`exit ${Y.exitCode}: ${Y.stderr.trim().slice(0,200)}`);let Q=Y.stdout.trim().slice(0,200);return`Command: ${J.slice(0,60)}${Q?" -> "+Q:""}`}case"wait":{let J=Math.max(0,Math.min(parseInt($.target)||1,60));return await new Promise((Y)=>setTimeout(Y,J*1000)),`Wait: ${J}s`}case"notify":{if(I)try{$4("smolerclaw",$.target,{timeout:1e4}).catch(()=>{})}catch{}return`Notify: ${$.target}`}case"if_app_running":{if(!I)return"skip: condition (not Windows)";let J=$.target.toLowerCase(),Y=await p0(J,{timeout:5000});if(Y&&$.condition_steps&&$.condition_steps.length>0){let Q=await CY(`${$.target}-conditional`,$.condition_steps,Z);return`Condition: ${J} running=true, ran ${Q.stepsRun} sub-steps`}return`Condition: ${J} running=${Y}${!Y?" (skipped sub-steps)":""}`}case"log":return`Log: ${$.target}`;default:throw Error(`Acao desconhecida: ${$.action}`)}}function jY($){let Z=$||X$;if(Z.length===0)return"Nenhum workflow configurado.";let J=Z.map((Y)=>{let Q=Y.enabled?"":" [DESATIVADO]",X=Y.tags.length>0?` [${Y.tags.join(", ")}]`:"",K=Y.steps.map((V)=>{let G=V.label||V.target;return V.action==="wait"?`${V.target}s`:G}).join(" -> ");return` ${Y.name}${Q}${X} \u2014 ${Y.description}
491
+ ${" ".repeat(4)}${K} {${Y.id}}`});return`Workflows (${Z.length}):
492
+ ${J.join(`
422
493
 
423
- `)}`}function l6($){let Z=$.enabled?"ativo":"desativado",Y=$.tags.length>0?`Tags: ${$.tags.map((Q)=>`#${Q}`).join(" ")}`:"",J=[`--- Workflow {${$.id}} ---`,`Nome: ${$.name}`,`Descricao: ${$.description}`,`Status: ${Z}`];if(Y)J.push(Y);return J.push(`Criado: ${new Date($.createdAt).toLocaleDateString("pt-BR")}`),J.push(""),J.push("Steps:"),$.steps.forEach((Q,X)=>{let K=Q.label?` (${Q.label})`:"",V=Q.on_error&&Q.on_error!=="continue"?` [on_error: ${Q.on_error}]`:"";if(J.push(` ${X+1}. ${Q.action}: ${Q.target}${K}${V}`),Q.action==="if_app_running"&&Q.condition_steps)for(let G of Q.condition_steps)J.push(` \u21B3 ${G.action}: ${G.target}`)}),J.join(`
424
- `)}function bX($){let Z=[...$.log];return Z.push(""),Z.push(`Concluido em ${$.duration}ms \u2014 ${$.stepsRun} executados, ${$.stepsSkipped} pulados, ${$.stepsFailed} falhas`),Z.join(`
425
- `)}function c7(){return wX().slice(0,8)}var E$=new Map,p7=null;function i6($){p7=$}function o6($,Z=60){if(!A)return"Error: monitor is only available on Windows.";let Y=$.toLowerCase();if(E$.has(Y))return`"${$}" ja esta sendo monitorado.`;let J=setInterval(()=>n6(Y),Z*1000);return E$.set(Y,{name:$,interval:J,lastSeen:!0}),n6(Y),`Monitorando "${$}" a cada ${Z}s.`}function a6($){let Z=$.toLowerCase(),Y=E$.get(Z);if(!Y)return`"${$}" nao esta sendo monitorado.`;return clearInterval(Y.interval),E$.delete(Z),`Monitor parado: "${$}"`}function r6(){if(E$.size===0)return"Nenhum processo monitorado.";let $=[...E$.values()].map((Z)=>{let Y=Z.lastSeen?"rodando":"PARADO";return` ${Z.name.padEnd(20)} [${Y}]`});return`Processos monitorados (${E$.size}):
494
+ `)}`}function OY($){let Z=$.enabled?"ativo":"desativado",J=$.tags.length>0?`Tags: ${$.tags.map((Q)=>`#${Q}`).join(" ")}`:"",Y=[`--- Workflow {${$.id}} ---`,`Nome: ${$.name}`,`Descricao: ${$.description}`,`Status: ${Z}`];if(J)Y.push(J);return Y.push(`Criado: ${new Date($.createdAt).toLocaleDateString("pt-BR")}`),Y.push(""),Y.push("Steps:"),$.steps.forEach((Q,X)=>{let K=Q.label?` (${Q.label})`:"",V=Q.on_error&&Q.on_error!=="continue"?` [on_error: ${Q.on_error}]`:"";if(Y.push(` ${X+1}. ${Q.action}: ${Q.target}${K}${V}`),Q.action==="if_app_running"&&Q.condition_steps)for(let G of Q.condition_steps)Y.push(` \u21B3 ${G.action}: ${G.target}`)}),Y.join(`
495
+ `)}function KH($){let Z=[...$.log];return Z.push(""),Z.push(`Concluido em ${$.duration}ms \u2014 ${$.stepsRun} executados, ${$.stepsSkipped} pulados, ${$.stepsFailed} falhas`),Z.join(`
496
+ `)}function YZ(){return YH().slice(0,8)}e();Z4();var x$=new Map,KZ=null;function EY($){KZ=$}function RY($,Z=60){if(!I)return"Error: monitor is only available on Windows.";let J=$.toLowerCase();if(x$.has(J))return`"${$}" ja esta sendo monitorado.`;let Y=setInterval(()=>FY(J),Z*1000);return x$.set(J,{name:$,interval:Y,lastSeen:!0}),FY(J),`Monitorando "${$}" a cada ${Z}s.`}function LY($){let Z=$.toLowerCase(),J=x$.get(Z);if(!J)return`"${$}" nao esta sendo monitorado.`;return clearInterval(J.interval),x$.delete(Z),`Monitor parado: "${$}"`}function PY(){if(x$.size===0)return"Nenhum processo monitorado.";let $=[...x$.values()].map((Z)=>{let J=Z.lastSeen?"rodando":"PARADO";return` ${Z.name.padEnd(20)} [${J}]`});return`Processos monitorados (${x$.size}):
426
497
  ${$.join(`
427
- `)}`}function s6(){for(let $ of E$.values())clearInterval($.interval);E$.clear()}async function n6($){let Z=E$.get($);if(!Z)return;let Y=await kX(Z.name);if(Z.lastSeen&&!Y){let J=`ALERTA: "${Z.name}" parou de rodar!`;yX("Processo parou!",`"${Z.name}" nao esta mais rodando.`),p7?.(J)}else if(!Z.lastSeen&&Y){let J=`"${Z.name}" voltou a rodar.`;p7?.(J)}E$.set($,{...Z,lastSeen:Y})}async function kX($){if(!A)return!1;try{let Z=`(Get-Process -Name '${$}' -ErrorAction SilentlyContinue) -ne $null`,Y=Bun.spawn(["powershell","-NoProfile","-NonInteractive","-Command",Z],{stdout:"pipe",stderr:"pipe"}),J=setTimeout(()=>Y.kill(),1e4),[Q]=await Promise.all([new Response(Y.stdout).text(),new Response(Y.stderr).text()]);return await Y.exited,clearTimeout(J),Q.trim().toLowerCase()==="true"}catch{return!1}}async function yX($,Z){if(!A)return;let Y=$.replace(/'/g,"''"),J=Z.replace(/'/g,"''"),Q=["[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] | Out-Null","[Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom.XmlDocument, ContentType = WindowsRuntime] | Out-Null",`$template = '<toast><visual><binding template="ToastText02"><text id="1">${Y}</text><text id="2">${J}</text></binding></visual><audio src="ms-winsoundevent:Notification.Default"/></toast>'`,"$xml = New-Object Windows.Data.Xml.Dom.XmlDocument","$xml.LoadXml($template)","$toast = [Windows.UI.Notifications.ToastNotification]::new($xml)",'[Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier("smolerclaw").Show($toast)'].join("; ");try{let X=Bun.spawn(["powershell","-NoProfile","-NonInteractive","-Command",Q],{stdout:"pipe",stderr:"pipe"}),K=setTimeout(()=>X.kill(),1e4);await Promise.all([new Response(X.stdout).text(),new Response(X.stderr).text()]),await X.exited,clearTimeout(K)}catch{}}l4();t();import{writeFileSync as _X}from"fs";import{join as hX}from"path";async function fX(){let $=n7(process.argv.slice(2));if($.help)i7(),process.exit(0);if($.version)console.log(`smolerclaw v${$8()}`),process.exit(0);let Z=V5();if($.model)Z.model=y7($.model);if($.maxTokens)Z.maxTokens=$.maxTokens;let Y;try{Y=X2()}catch(L){console.error("smolerclaw:",L instanceof Error?L.message:L),process.exit(1)}let{provider:J,model:Q}=_7(Z.model),X;if(J==="openai"||J==="ollama")X=new h7(J,Q,Z.maxTokens);else{let L=new R7(Y.token,Z.model,Z.maxTokens,Z.toolApproval);L.setAuthRefresh(()=>{let w=K2();if(w&&w.token!==Y.token)return Y=w,L.updateApiKey(w.token),!0;return!1}),X=L}let K=$.session||"default",V=new D7(Z.dataDir);if($.session)V.switchTo($.session);let G=J6(Z.skillsDir),H=w7(Z.systemPrompt,G,Z.language),z=!$.noTools;fZ();let M=H9(hX(Z.dataDir,"..")),N=z9(M);if(N.length>0)yZ(N),n.push(...V9(N));let E=!process.stdin.isTTY;if($.print||E)await vX(X,V,H,z,$.prompt,E),process.exit(0);await mX(X,V,Z,Y,G,H,z,N,$.prompt)}async function vX($,Z,Y,J,Q,X){let K=Q||"";if(X){let z=await gX();K=K?`${K}
498
+ `)}`}function DY(){for(let $ of x$.values())clearInterval($.interval);x$.clear()}async function FY($){let Z=x$.get($);if(!Z)return;let J=await p0(Z.name,{timeout:1e4});if(Z.lastSeen&&!J){let Y=`ALERTA: "${Z.name}" parou de rodar!`;$4("Processo parou!",`"${Z.name}" nao esta mais rodando.`,{timeout:1e4}).catch(()=>{}),KZ?.(Y)}else if(!Z.lastSeen&&J){let Y=`"${Z.name}" voltou a rodar.`;KZ?.(Y)}x$.set($,{...Z,lastSeen:J})}E0();a();import{writeFileSync as zH}from"fs";import{join as VH}from"path";async function GH(){let $=VZ(process.argv.slice(2));if($.help)GZ(),process.exit(0);if($.version)console.log(`smolerclaw v${v0()}`),process.exit(0);let Z=_Z();if($.model)Z.model=i9($.model);if($.maxTokens)Z.maxTokens=$.maxTokens;let J;try{J=$5()}catch(O){console.error("smolerclaw:",O instanceof Error?O.message:O),process.exit(1)}let{provider:Y,model:Q}=s9(Z.model),X;if(Y==="openai"||Y==="ollama")X=new t9(Y,Q,Z.maxTokens);else{let O=new y9(J.token,Z.model,Z.maxTokens,Z.toolApproval);O.setAuthRefresh(()=>{let P=Z5();if(P&&P.token!==J.token)return J=P,O.updateApiKey(P.token),!0;return!1}),X=O}let K=new v9(Z.dataDir),V=$.session||K.getLastSession()||"default";if(V!=="default")K.switchTo(V);let G=T3(Z.skillsDir),H=g9(Z.systemPrompt,G,Z.language),z=!$.noTools;K3();let B=h2(VH(Z.dataDir,"..")),U=y2(B);if(U.length>0)Y3(U),p.push(..._2(U));let M=!process.stdin.isTTY;if($.print||M)await HH(X,K,H,z,$.prompt,M),process.exit(0);await WH(X,K,Z,J,G,H,z,U,$.prompt)}async function HH($,Z,J,Y,Q,X){let K=Q||"";if(X){let z=await qH();K=K?`${K}
428
499
 
429
- ${z}`:z}if(!K.trim())console.error("smolerclaw: no input provided"),process.exit(1);let V={role:"user",content:K.trim(),timestamp:Date.now()};Z.addMessage(V);let G="";for await(let z of $.chat(Z.messages,Y,J))if(z.type==="text")process.stdout.write(z.text),G+=z.text;else if(z.type==="error")console.error(`
500
+ ${z}`:z}if(!K.trim())console.error("smolerclaw: no input provided"),process.exit(1);let V={role:"user",content:K.trim(),timestamp:Date.now()};Z.addMessage(V);let G="";for await(let z of $.chat(Z.messages,J,Y))if(z.type==="text")process.stdout.write(z.text),G+=z.text;else if(z.type==="error")console.error(`
430
501
  smolerclaw error: ${z.error}`);if(G&&!G.endsWith(`
431
502
  `))process.stdout.write(`
432
- `);let H={role:"assistant",content:G,timestamp:Date.now()};Z.addMessage(H)}async function gX(){let $=[];for await(let Z of process.stdin)$.push(Z);return Buffer.concat($).toString("utf-8")}async function mX($,Z,Y,J,Q,X,K,V,G){let H=new k7(Y.model),z=new b7(Y.model,Z.session.name,W5(J),Y.dataDir),M="default",N=GZ(),E=N?`${X}
433
-
434
- ${N}`:X;if(Q5(Y.dataDir,Q2().replace(/[/\\]config\.json$/,"")),t9(Y.dataDir),I9(Y.dataDir),XZ(Y.dataDir),C9(Y.dataDir),hZ(Z),f9(Y.dataDir),c9(Y.dataDir),S6((h)=>z.showSystem(`
435
- *** ${h} ***
436
- `)),m6(Y.dataDir),o2(Y.dataDir),NZ(Y.dataDir),RZ(Y.dataDir),i6((h)=>z.showSystem(`
437
- *** ${h} ***
438
- `)),F9(Y.dataDir,(h)=>{z.showSystem(`
439
- *** LEMBRETE: ${h.title} ***
440
- `)}),Y.toolApproval!=="auto"&&$.setApprovalCallback)$.setApprovalCallback(async(h,o,f)=>{if(h==="edit_file"&&o.old_text&&o.new_text){let q=oZ(String(o.old_text),String(o.new_text));for(let C of q)z.showSystem(C)}let O=iZ(h,o),W=await z.promptApproval(O);if(z._approveAllRequested)$.setAutoApproveAll?.(!0),z._approveAllRequested=!1;return W});for(let h of Z.messages)if(h.role==="user")z.addUserMessage(h.content);else z.addAssistantMessage(h.content);let L=null;async function w(h){if(h.startsWith("/")){await S(h);return}if(Y.maxSessionCost>0){let y=H.totals.costCents;if(y>=Y.maxSessionCost){z.showError(`Budget exceeded (~$${(y/100).toFixed(4)} / $${(Y.maxSessionCost/100).toFixed(4)}). Use /budget <cents> to increase or /clear to reset.`);return}if(y>=Y.maxSessionCost*0.8)z.showSystem(`Budget: ${Math.round(y/Y.maxSessionCost*100)}% used`)}let{text:o,images:f}=L6(h),O={role:"user",content:o,images:f.length>0?f.map((y)=>({mediaType:y.mediaType,base64:y.base64})):void 0,timestamp:Date.now()};Z.addMessage(O),z.addUserMessage(f.length>0?`${o} (${f.length} image${f.length>1?"s":""})`:o),z.disableInput(),z.startStream();let W="",q=[],C={},j=0,T=0;L=new AbortController;try{for await(let y of $.chat(Z.messages,E,K)){if(L.signal.aborted)break;switch(y.type){case"text":z.appendStream(y.text),W+=y.text;break;case"tool_call":z.flushStream(),z.showToolCall(y.name,y.input),C=y.input;break;case"tool_result":z.showToolResult(y.name,y.result),q.push({id:y.id,name:y.name,input:C,result:y.result}),C={},z.resetStreamBuffer();break;case"tool_blocked":z.showError(y.reason);break;case"usage":j+=y.inputTokens,T+=y.outputTokens;break;case"error":z.showError(y.error);break;case"done":break}}}catch(y){if(!L.signal.aborted)z.showError(y instanceof Error?y.message:String(y))}L=null,z.endStream();let b={inputTokens:j,outputTokens:T},a=H.add(b);if(j>0||T>0)z.showUsage(H.formatUsage(b)),z.updateSessionCost(`~$${(H.totals.costCents/100).toFixed(4)}`);let A$={role:"assistant",content:W,toolCalls:q.length>0?q:void 0,usage:j>0?{inputTokens:j,outputTokens:T,costCents:a.totalCostCents}:void 0,timestamp:Date.now()};Z.addMessage(A$),Z.trimHistory(Y.maxHistory),z.enableInput()}async function S(h){let o=h.slice(1).split(" "),f=o[0].toLowerCase(),O=o.slice(1);switch(f){case"exit":case"quit":case"sair":case"q":k();break;case"clear":case"limpar":Z.clear(),z.clearMessages(),z.showSystem("Conversation cleared.");break;case"new":case"novo":case"nova":{let W=O[0]||`s-${Date.now()}`;Z.switchTo(W),z.clearMessages(),z.updateSession(W),z.showSystem(`New session: ${W}`);break}case"load":case"carregar":{let W=O[0];if(!W){z.showError("Usage: /load <name>");break}Z.switchTo(W),z.clearMessages();for(let q of Z.messages)if(q.role==="user")z.addUserMessage(q.content);else z.addAssistantMessage(q.content);z.updateSession(W),z.showSystem(`Loaded: ${W}`);break}case"sessions":case"sessoes":case"ls":{let W=Z.list().map((j)=>{let T=Z.getInfo(j);return{name:j,messageCount:T?.messageCount??0,updated:T?.updated??0,isCurrent:j===Z.session.name,isArchived:!1}}),q=Z.listArchived().map((j)=>{let T=Z.getArchivedInfo(j);return{name:j,messageCount:T?.messageCount??0,updated:T?.updated??0,isCurrent:!1,isArchived:!0}}),C=await z.promptSessionPicker([...W,...q]);if(C)switch(C.action){case"load":{let j=C.name;if(q.some((b)=>b.name===j))Z.unarchive(j);Z.switchTo(j),z.clearMessages();for(let b of Z.messages)if(b.role==="user")z.addUserMessage(b.content);else z.addAssistantMessage(b.content);z.updateSession(j),z.showSystem(`Loaded: ${j}`);break}case"delete":{let j=C.name;if(C.isArchived?Z.deleteArchived(j):Z.delete(j))z.showSystem(`Deleted: ${j}`);else z.showError(`Not found: ${j}`);break}case"archive":if(Z.archive(C.name))z.showSystem(`Archived: ${C.name}`);else z.showError(`Failed to archive: ${C.name}`);break;case"unarchive":if(Z.unarchive(C.name))z.showSystem(`Restored: ${C.name}`);else z.showError(`Not found in archive: ${C.name}`);break}break}case"delete":case"deletar":case"rm":{let W=O[0];if(!W){z.showError("Usage: /delete <name>");break}if(Z.delete(W))z.showSystem(`Deleted: ${W}`);else z.showError(`Session not found: ${W}`);break}case"archive":case"arquivar":{let W=O[0];if(!W){z.showError("Uso: /archive <nome> ou /archive all");break}if(W==="all"||W==="todas"){let q=Z.archiveAll();if(q.length>0)z.showSystem(`Arquivadas ${q.length} sessoes: ${q.join(", ")}`);else z.showSystem("Nenhuma sessao para arquivar (apenas a sessao atual esta ativa).")}else if(Z.archive(W))z.showSystem(`Sessao arquivada: "${W}"`);else z.showError(`Falha ao arquivar "${W}" (nao encontrada ou e a sessao atual).`);break}case"unarchive":case"desarquivar":case"restore":case"restaurar":{let W=O[0];if(!W){z.showError("Uso: /unarchive <nome>");break}if(Z.unarchive(W))z.showSystem(`Sessao restaurada: "${W}"`);else z.showError(`Sessao arquivada nao encontrada: "${W}"`);break}case"archived":case"arquivadas":{let W=Z.listArchived();if(W.length===0){z.showSystem("Nenhuma sessao arquivada.");break}let q=W.map((C)=>{let j=Z.getArchivedInfo(C),T=j?cX(j.updated):"",b=j?`${j.messageCount} msgs`:"";return` ${C.padEnd(20)} ${b.padEnd(10)} ${T}`});z.showSystem(`Sessoes arquivadas (${W.length}):
441
- ${q.join(`
442
- `)}`);break}case"model":case"modelo":{let W=O[0];if(!W){z.showSystem(H6(Y.model)+`
443
-
444
- `+q6());break}let{provider:q,model:C}=_7(W),j=q==="anthropic"?y7(C):C;if(Y.model=q==="anthropic"?j:`${q}:${j}`,q8(Y),q==="anthropic")$.setModel(j);else z.showSystem(`Note: ${q} provider selected. Restart smolerclaw for full provider switch.`);H.setModel(j),z.updateModel(Y.model),z.showSystem(`Model -> ${Y.model}`);break}case"skills":case"habilidades":{z.showSystem(Q6(Q));break}case"auth":z.showSystem(`Auth: subscription (${J.subscriptionType})
445
- Expires: ${new Date(J.expiresAt).toLocaleString()}`);break;case"refresh":case"renovar":{z.showSystem("Renovando sessao Claude...");try{let W=Bun.spawn(["claude","-p","Fresh!"],{stdout:"pipe",stderr:"pipe"}),q=setTimeout(()=>W.kill(),15000);await W.exited,clearTimeout(q);let C=K2();if(C){if(J=C,"updateApiKey"in $)$.updateApiKey(C.token);z.showSystem(`Sessao renovada. Expira: ${new Date(C.expiresAt).toLocaleString()}`)}else z.showSystem("claude executado, mas credenciais nao atualizaram. Tente novamente.")}catch(W){z.showError(`Falha ao renovar: ${W instanceof Error?W.message:String(W)}`)}break}case"config":z.showSystem(`Config: ${Q2()}`);break;case"export":case"exportar":{let W=new Date().toISOString().split("T")[0],q=O[0]||`smolerclaw-${Z.session.name}-${W}.md`;try{let C=W6(Z.session);_X(q,C),z.showSystem(`Exported to: ${q}`)}catch(C){z.showError(`Export failed: ${C instanceof Error?C.message:C}`)}break}case"cost":case"custo":z.showSystem(`Session: ${H.formatSession()}`);break;case"retry":case"repetir":{let W=[...Z.messages].reverse().find((T)=>T.role==="user");if(!W){z.showError("No previous message to retry.");break}let q=Z.messages,C=0;if(q.length>0&&q[q.length-1].role==="assistant")C++;if(q.length>C&&q[q.length-1-C].role==="user")C++;if(C>0)Z.popMessages(C);z.showSystem("Retrying...");let j=W.images?.length?W.content:W.content;await w(j);break}case"help":case"ajuda":case"?":z.showSystem(["Comandos / Commands (en | pt):"," /help /ajuda Mostrar ajuda"," /clear /limpar Limpar conversa"," /new /novo Nova sessao"," /load /carregar Carregar sessao"," /sessions /sessoes Listar sessoes"," /delete /deletar Deletar sessao"," /model /modelo Ver/trocar modelo"," /persona /modo Trocar modo (business, coder...)"," /export /exportar Exportar para markdown"," /copy /copiar Copiar ultima resposta"," /cost /custo Ver uso de tokens"," /retry /repetir Repetir ultima msg"," /undo /desfazer Desfazer alteracao"," /search /buscar Buscar na conversa"," /lang /idioma Definir idioma"," /commit /commitar Git commit com IA"," /exit /sair Sair","","Negocios / Business:"," /briefing /resumo Briefing diario"," /news /noticias Radar de noticias"," /open /abrir Abrir app Windows"," /apps /programas Apps em execucao"," /sysinfo /sistema Recursos do sistema"," /calendar /agenda Calendario Outlook","","Pessoas / People:"," /addperson /novapessoa Cadastrar pessoa"," /people /pessoas Listar todas"," /team /equipe Listar equipe"," /family /familia Listar familia"," /person /pessoa Detalhes de alguem"," /delegate /delegar Delegar tarefa"," /delegations /delegacoes Listar delegacoes"," /followups Follow-ups pendentes"," /dashboard /painel Painel geral","","Monitor:"," /monitor /vigiar Monitorar processo (ex: /monitor nginx)"," /monitor stop <nome> Parar monitoramento","","Workflows:"," /workflow /fluxo Listar workflows"," /workflow run <nome> Executar (ex: /workflow iniciar-dia)","","Pomodoro:"," /pomodoro /foco Iniciar (ex: /foco revisar codigo)"," /pomodoro status Ver tempo restante"," /pomodoro stop Parar","","Financas / Finance:"," /entrada <$> <cat> Registrar entrada"," /saida <$> <cat> Registrar saida"," /finance /balanco Resumo mensal","","Decisoes / Decisions:"," /decisoes [busca] Listar/buscar decisoes","","Email:"," /email /rascunho Rascunho (ex: /email joao@x.com oi | texto)","","Memos / Notes:"," /memo /anotar Salvar memo (ex: /memo senha wifi #casa)"," /memos /notas Buscar memos (ex: /memos docker)"," /tags /memotags Listar tags"," /rmmemo /rmnota Remover memo","","Materiais / Materials:"," /material /mat Salvar material (ex: /mat titulo | conteudo)"," /materials /materiais Listar/buscar materiais"," /matcats /categorias Listar categorias"," /rmmat /rmmaterial Remover material","","Arquivo / Archive:"," /archive /arquivar Arquivar sessao (ex: /archive minha-sessao)"," /archive all Arquivar todas exceto a atual"," /archived /arquivadas Listar sessoes arquivadas"," /unarchive /restaurar Restaurar sessao arquivada","","Investigacao / Investigation:"," /investigar /investigate Listar investigacoes"," /investigar <busca> Buscar por palavra-chave","","Tarefas / Tasks:"," /task /tarefa Criar tarefa (ex: /tarefa 18h buscar pao)"," /tasks /tarefas Listar pendentes"," /done /feito Marcar como concluida"," /rmtask /rmtarefa Remover tarefa","","Tab completes commands. Use \\ at end of line for multi-line.","","Keys:"," Ctrl+C Cancel stream / exit"," Ctrl+D Exit"," Ctrl+L Redraw screen"," Up/Down Input history"," PgUp/PgDown Scroll messages"].join(`
446
- `));break;case"commit":case"commitar":{if(!await M6()){z.showError("Not a git repository.");break}let W=await B6();if(W==="(clean)"){z.showSystem("Nothing to commit \u2014 working tree clean.");break}z.showSystem(`Changes:
447
- `+W),z.disableInput();try{let C=`Generate a concise git commit message for these changes. Use conventional commits format (feat:, fix:, refactor:, docs:, chore:, etc.). One line, max 72 chars. No quotes. Just the message.
503
+ `);let H={role:"assistant",content:G,timestamp:Date.now()};Z.addMessage(H)}async function qH(){let $=[];for await(let Z of process.stdin)$.push(Z);return Buffer.concat($).toString("utf-8")}async function WH($,Z,J,Y,Q,X,K,V,G){let H=new r9(J.model),z=new n9(J.model,Z.session.name,fZ(Y),J.dataDir),B="default",U=v6(),M=U?`${X}
504
+
505
+ ${U}`:X;wZ(J.dataDir,e7().replace(/[/\\]config\.json$/,"")),D6(J.dataDir),Y6(J.dataDir),k6(J.dataDir),d2(J.dataDir),X3(Z),H6(J.dataDir),B6(J.dataDir),XY((b)=>z.showSystem(`
506
+ *** ${b} ***
507
+ `)),BY(J.dataDir),l5(J.dataDir),c6(J.dataDir),r6(J.dataDir),QJ(J.dataDir),LJ(J.dataDir),pJ(J.dataDir,(b)=>{z.showSystem(`
508
+ *** Meta-Insight: ${b.title} ***
509
+ ${b.recommendation}
510
+ `)}),EY((b)=>z.showSystem(`
511
+ *** ${b} ***
512
+ `)),r2(J.dataDir,(b)=>{z.showSystem(`
513
+ *** LEMBRETE: ${b.title} ***
514
+ `)});let O=null;try{O=await g7(J.dataDir),z.setTimeContext(O)}catch{z.setPersonaMode("productivity")}if(J.toolApproval!=="auto"&&$.setApprovalCallback)$.setApprovalCallback(async(b,_,u)=>{if(b==="edit_file"&&_.old_text&&_.new_text){let N=C3(String(_.old_text),String(_.new_text));for(let j of N)z.showSystem(j)}let E=M3(b,_),q=await z.promptApproval(E);if(z._approveAllRequested)$.setAutoApproveAll?.(!0),z._approveAllRequested=!1;return q});for(let b of Z.messages)if(b.role==="user")z.addUserMessage(b.content);else z.addAssistantMessage(b.content);let P=null;async function T(b){if(b.startsWith("/")){await y(b);return}if(J.maxSessionCost>0){let f=H.totals.costCents;if(f>=J.maxSessionCost){z.showError(`Budget exceeded (~$${(f/100).toFixed(4)} / $${(J.maxSessionCost/100).toFixed(4)}). Use /budget <cents> to increase or /clear to reset.`);return}if(f>=J.maxSessionCost*0.8)z.showSystem(`Budget: ${Math.round(f/J.maxSessionCost*100)}% used`)}let{text:_,images:u}=n3(b),E={role:"user",content:_,images:u.length>0?u.map((f)=>({mediaType:f.mediaType,base64:f.base64})):void 0,timestamp:Date.now()};Z.addMessage(E),z.addUserMessage(u.length>0?`${_} (${u.length} image${u.length>1?"s":""})`:_),z.disableInput(),z.startStream();let q="",N=[],j={},R=0,x=0;P=new AbortController;try{for await(let f of $.chat(Z.messages,M,K)){if(P.signal.aborted)break;switch(f.type){case"text":z.appendStream(f.text),q+=f.text;break;case"tool_call":z.flushStream(),z.showToolCall(f.name,f.input),j=f.input;break;case"tool_result":z.showToolResult(f.name,f.result),N.push({id:f.id,name:f.name,input:j,result:f.result}),j={},z.resetStreamBuffer();break;case"tool_blocked":z.showError(f.reason);break;case"usage":R+=f.inputTokens,x+=f.outputTokens;break;case"error":z.showError(f.error);break;case"done":break}}}catch(f){if(!P.signal.aborted)z.showError(f instanceof Error?f.message:String(f))}P=null,z.endStream();let w={inputTokens:R,outputTokens:x},o=H.add(w);if(R>0||x>0)z.showUsage(H.formatUsage(w)),z.updateSessionCost(`~$${(H.totals.costCents/100).toFixed(4)}`);let F4={role:"assistant",content:q,toolCalls:N.length>0?N:void 0,usage:R>0?{inputTokens:R,outputTokens:x,costCents:o.totalCostCents}:void 0,timestamp:Date.now()};Z.addMessage(F4),Z.trimHistory(J.maxHistory),z.enableInput()}async function y(b){let _=b.slice(1).split(" "),u=_[0].toLowerCase(),E=_.slice(1);switch(u){case"exit":case"quit":case"sair":case"q":K$();break;case"clear":case"limpar":Z.clear(),z.clearMessages(),z.showSystem("Conversation cleared.");break;case"new":case"novo":case"nova":{let q=E[0]||`s-${Date.now()}`;Z.switchTo(q),z.clearMessages(),z.updateSession(q),z.showSystem(`New session: ${q}`);break}case"load":case"carregar":{let q=E[0];if(!q){z.showError("Usage: /load <name>");break}Z.switchTo(q),z.clearMessages();for(let N of Z.messages)if(N.role==="user")z.addUserMessage(N.content);else z.addAssistantMessage(N.content);z.updateSession(q),z.showSystem(`Loaded: ${q}`);break}case"sessions":case"sessoes":case"ls":{let q=Z.list().map((R)=>{let x=Z.getInfo(R);return{name:R,messageCount:x?.messageCount??0,updated:x?.updated??0,isCurrent:R===Z.session.name,isArchived:!1}}),N=Z.listArchived().map((R)=>{let x=Z.getArchivedInfo(R);return{name:R,messageCount:x?.messageCount??0,updated:x?.updated??0,isCurrent:!1,isArchived:!0}}),j=await z.promptSessionPicker([...q,...N]);if(j)switch(j.action){case"load":{let R=j.name;if(N.some((w)=>w.name===R))Z.unarchive(R);Z.switchTo(R),z.clearMessages();for(let w of Z.messages)if(w.role==="user")z.addUserMessage(w.content);else z.addAssistantMessage(w.content);z.updateSession(R),z.showSystem(`Loaded: ${R}`);break}case"delete":{let R=j.name;if(j.isArchived?Z.deleteArchived(R):Z.delete(R))z.showSystem(`Deleted: ${R}`);else z.showError(`Not found: ${R}`);break}case"archive":if(Z.archive(j.name))z.showSystem(`Archived: ${j.name}`);else z.showError(`Failed to archive: ${j.name}`);break;case"unarchive":if(Z.unarchive(j.name))z.showSystem(`Restored: ${j.name}`);else z.showError(`Not found in archive: ${j.name}`);break}break}case"delete":case"deletar":case"rm":{let q=E[0];if(!q){z.showError("Usage: /delete <name>");break}if(Z.delete(q))z.showSystem(`Deleted: ${q}`);else z.showError(`Session not found: ${q}`);break}case"archive":case"arquivar":{let q=E[0];if(!q){z.showError("Uso: /archive <nome> ou /archive all");break}if(q==="all"||q==="todas"){let N=Z.archiveAll();if(N.length>0)z.showSystem(`Arquivadas ${N.length} sessoes: ${N.join(", ")}`);else z.showSystem("Nenhuma sessao para arquivar (apenas a sessao atual esta ativa).")}else if(Z.archive(q))z.showSystem(`Sessao arquivada: "${q}"`);else z.showError(`Falha ao arquivar "${q}" (nao encontrada ou e a sessao atual).`);break}case"unarchive":case"desarquivar":case"restore":case"restaurar":{let q=E[0];if(!q){z.showError("Uso: /unarchive <nome>");break}if(Z.unarchive(q))z.showSystem(`Sessao restaurada: "${q}"`);else z.showError(`Sessao arquivada nao encontrada: "${q}"`);break}case"archived":case"arquivadas":{let q=Z.listArchived();if(q.length===0){z.showSystem("Nenhuma sessao arquivada.");break}let N=q.map((j)=>{let R=Z.getArchivedInfo(j),x=R?BH(R.updated):"",w=R?`${R.messageCount} msgs`:"";return` ${j.padEnd(20)} ${w.padEnd(10)} ${x}`});z.showSystem(`Sessoes arquivadas (${q.length}):
515
+ ${N.join(`
516
+ `)}`);break}case"model":case"modelo":{let q=E[0];if(!q){z.showSystem(f3(J.model)+`
517
+
518
+ `+h3());break}let{provider:N,model:j}=s9(q),R=N==="anthropic"?i9(j):j;if(J.model=N==="anthropic"?R:`${N}:${R}`,e0(J),N==="anthropic")$.setModel(R);else z.showSystem(`Note: ${N} provider selected. Restart smolerclaw for full provider switch.`);H.setModel(R),z.updateModel(J.model),z.showSystem(`Model -> ${J.model}`);break}case"skills":case"habilidades":{z.showSystem(I3(Q));break}case"auth":z.showSystem(`Auth: subscription (${Y.subscriptionType})
519
+ Expires: ${new Date(Y.expiresAt).toLocaleString()}`);break;case"refresh":case"renovar":{z.showSystem("Renovando sessao Claude...");try{let q=Bun.spawn(["claude","-p","Fresh!"],{stdout:"pipe",stderr:"pipe"}),N=setTimeout(()=>q.kill(),15000);await q.exited,clearTimeout(N);let j=Z5();if(j){if(Y=j,"updateApiKey"in $)$.updateApiKey(j.token);z.showSystem(`Sessao renovada. Expira: ${new Date(j.expiresAt).toLocaleString()}`)}else z.showSystem("claude executado, mas credenciais nao atualizaram. Tente novamente.")}catch(q){z.showError(`Falha ao renovar: ${q instanceof Error?q.message:String(q)}`)}break}case"config":z.showSystem(`Config: ${e7()}`);break;case"export":case"exportar":{let q=new Date().toISOString().split("T")[0],N=E[0]||`smolerclaw-${Z.session.name}-${q}.md`;try{let j=v3(Z.session);zH(N,j),z.showSystem(`Exported to: ${N}`)}catch(j){z.showError(`Export failed: ${j instanceof Error?j.message:j}`)}break}case"cost":case"custo":z.showSystem(`Session: ${H.formatSession()}`);break;case"retry":case"repetir":{let q=[...Z.messages].reverse().find((x)=>x.role==="user");if(!q){z.showError("No previous message to retry.");break}let N=Z.messages,j=0;if(N.length>0&&N[N.length-1].role==="assistant")j++;if(N.length>j&&N[N.length-1-j].role==="user")j++;if(j>0)Z.popMessages(j);z.showSystem("Retrying...");let R=q.images?.length?q.content:q.content;await T(R);break}case"help":case"ajuda":case"?":z.showSystem(["Comandos / Commands (en | pt):"," /help /ajuda Mostrar ajuda"," /clear /limpar Limpar conversa"," /new /novo Nova sessao"," /load /carregar Carregar sessao"," /sessions /sessoes Listar sessoes"," /delete /deletar Deletar sessao"," /model /modelo Ver/trocar modelo"," /persona /modo Trocar modo (business, coder...)"," /export /exportar Exportar para markdown"," /copy /copiar Copiar ultima resposta"," /cost /custo Ver uso de tokens"," /retry /repetir Repetir ultima msg"," /undo /desfazer Desfazer alteracao"," /search /buscar Buscar na conversa"," /lang /idioma Definir idioma"," /commit /commitar Git commit com IA"," /exit /sair Sair","","Negocios / Business:"," /briefing /resumo Briefing diario"," /news /noticias Radar de noticias"," /open /abrir Abrir app Windows"," /apps /programas Apps em execucao"," /sysinfo /sistema Recursos do sistema"," /calendar /agenda Calendario Outlook","","Pessoas / People:"," /addperson /novapessoa Cadastrar pessoa"," /people /pessoas Listar todas"," /team /equipe Listar equipe"," /family /familia Listar familia"," /person /pessoa Detalhes de alguem"," /delegate /delegar Delegar tarefa"," /delegations /delegacoes Listar delegacoes"," /followups Follow-ups pendentes"," /dashboard /painel Painel geral","","Monitor:"," /monitor /vigiar Monitorar processo (ex: /monitor nginx)"," /monitor stop <nome> Parar monitoramento","","Workflows:"," /workflow /fluxo Listar workflows"," /workflow run <nome> Executar (ex: /workflow iniciar-dia)","","Pomodoro:"," /pomodoro /foco Iniciar (ex: /foco revisar codigo)"," /pomodoro status Ver tempo restante"," /pomodoro stop Parar","","Financas / Finance:"," /entrada <$> <cat> Registrar entrada"," /saida <$> <cat> Registrar saida"," /finance /balanco Resumo mensal","","Decisoes / Decisions:"," /decisoes [busca] Listar/buscar decisoes","","Email:"," /email /rascunho Rascunho (ex: /email joao@x.com oi | texto)","","Memos / Notes:"," /memo /anotar Salvar memo (ex: /memo senha wifi #casa)"," /memos /notas Buscar memos (ex: /memos docker)"," /tags /memotags Listar tags"," /rmmemo /rmnota Remover memo","","Materiais / Materials:"," /material /mat Salvar material (ex: /mat titulo | conteudo)"," /materials /materiais Listar/buscar materiais"," /matcats /categorias Listar categorias"," /rmmat /rmmaterial Remover material","","Arquivo / Archive:"," /archive /arquivar Arquivar sessao (ex: /archive minha-sessao)"," /archive all Arquivar todas exceto a atual"," /archived /arquivadas Listar sessoes arquivadas"," /unarchive /restaurar Restaurar sessao arquivada","","Investigacao / Investigation:"," /investigar /investigate Listar investigacoes"," /investigar <busca> Buscar por palavra-chave","","Tarefas / Tasks:"," /task /tarefa Criar tarefa (ex: /tarefa 18h buscar pao)"," /tasks /tarefas Listar pendentes"," /done /feito Marcar como concluida"," /rmtask /rmtarefa Remover tarefa","","Meta-Learning:"," /reflect /reflexao Analisa uso e gera insights","","Tab completes commands. Use \\ at end of line for multi-line.","","Keys:"," Ctrl+C Cancel stream / exit"," Ctrl+D Exit"," Ctrl+L Redraw screen"," Up/Down Input history"," PgUp/PgDown Scroll messages"].join(`
520
+ `));break;case"commit":case"commitar":{if(!await u3()){z.showError("Not a git repository.");break}let q=await m3();if(q==="(clean)"){z.showSystem("Nothing to commit \u2014 working tree clean.");break}z.showSystem(`Changes:
521
+ `+q),z.disableInput();try{let j=`Generate a concise git commit message for these changes. Use conventional commits format (feat:, fix:, refactor:, docs:, chore:, etc.). One line, max 72 chars. No quotes. Just the message.
448
522
 
449
523
  Diff:
450
- ${(await U6()).slice(0,8000)}`;z.startStream();let j="";for await(let b of $.chat([{role:"user",content:C,timestamp:Date.now()}],"You generate git commit messages. Output ONLY the commit message, nothing else.",!1))if(b.type==="text")j+=b.text,z.appendStream(b.text);else if(b.type==="error")z.showError(b.error);if(z.endStream(),j=j.trim().replace(/^["']|["']$/g,""),!j){z.showError("Failed to generate commit message. Aborting.");break}await N6();let T=await C6(j);if(T.ok)z.showSystem(`Committed: ${j}`);else z.showError(`Commit failed: ${T.output}`)}catch(q){z.showError(`Commit error: ${q instanceof Error?q.message:String(q)}`)}z.enableInput();break}case"persona":case"modo":{let W=O[0];if(!W){z.showSystem(j6(M));break}let q=E6(W);if(!q){z.showError(`Unknown persona: ${W}. Try /persona to see options.`);break}if(M=q.name,q.systemPrompt)E=w7(q.systemPrompt,Q,Y.language);else E=X;z.showSystem(`Persona -> ${q.name}: ${q.description}`);break}case"copy":case"copiar":{let W=[...Z.messages].reverse().find((C)=>C.role==="assistant");if(!W){z.showError("No assistant message to copy.");break}if(await F6(W.content))z.showSystem("Copied last response to clipboard.");else z.showError("Failed to copy. Is xclip/pbcopy available?");break}case"ask":case"perguntar":{let W=O.join(" ");if(!W){z.showError("Usage: /ask <question>");break}z.addUserMessage(`(ephemeral) ${W}`),z.disableInput(),z.startStream();let q="";for await(let C of $.chat([{role:"user",content:W,timestamp:Date.now()}],E,!1))if(C.type==="text")q+=C.text,z.appendStream(C.text);else if(C.type==="error")z.showError(C.error);else if(C.type==="usage")z.showUsage(`${C.inputTokens} in / ${C.outputTokens} out (ephemeral)`);z.endStream(),z.enableInput();break}case"fork":{let W=O[0]||`fork-${Date.now()}`;Z.fork(W),z.updateSession(W),z.showSystem(`Forked session -> ${W} (${Z.messages.length} messages copied)`);break}case"plugins":{z.showSystem(W9(V));break}case"budget":case"orcamento":{let W=O[0];if(!W){let C=Y.maxSessionCost,j=H.totals.costCents;if(C===0)z.showSystem(`Budget: unlimited (spent ~$${(j/100).toFixed(4)})`);else{let T=Math.round(j/C*100);z.showSystem(`Budget: ~$${(j/100).toFixed(4)} / $${(C/100).toFixed(4)} (${T}%)`)}break}let q=Number(W);if(isNaN(q)||q<0){z.showError("Usage: /budget <cents> (e.g., /budget 50 for $0.50)");break}Y.maxSessionCost=q,q8(Y),z.showSystem(q===0?"Budget: unlimited":`Budget set: $${(q/100).toFixed(2)}`);break}case"undo":case"desfazer":{if(!l1.peek()){z.showError("Nothing to undo.");break}let q=l1.undo();if(q)z.showSystem(q);break}case"search":case"buscar":{let W=O.join(" ").toLowerCase();if(!W){z.showError("Usage: /search <text>");break}let q=[];for(let C of Z.messages)if(C.content.toLowerCase().includes(W)){let j=C.content.slice(0,100).replace(/\n/g," "),T=new Date(C.timestamp).toLocaleTimeString("en",{hour:"2-digit",minute:"2-digit"});q.push(` [${C.role} ${T}] ${j}${C.content.length>100?"...":""}`)}z.showSystem(q.length>0?`Found ${q.length} match${q.length>1?"es":""}:
451
- ${q.join(`
452
- `)}`:`No matches for "${W}".`);break}case"lang":case"language":case"idioma":{let W=O[0];if(!W){z.showSystem(`Language: ${Y.language} (auto = match user's language)`);break}Y.language=W,q8(Y),z.showSystem(`Language -> ${W}`);break}case"briefing":case"resumo":{z.showSystem("Carregando briefing..."),z.disableInput();try{let W=await R6();z.showSystem(W)}catch(W){z.showError(`Briefing falhou: ${W instanceof Error?W.message:String(W)}`)}z.enableInput();break}case"news":case"noticias":{let W=O[0];if(W)z.showSystem(`Buscando noticias (${W})...`);else z.showSystem("Buscando noticias...");z.disableInput();try{let q=await o$(W?[W]:void 0);z.showSystem(q)}catch(q){z.showError(`Falha ao buscar noticias: ${q instanceof Error?q.message:String(q)}`)}z.enableInput();break}case"feeds":case"fontes":{z.showSystem(o8());break}case"addfeed":case"novafonte":{if(O.length<3){z.showError(`Uso: /addfeed <nome> <url> <categoria>
453
- Ex: /addfeed "Ars Technica" https://feeds.arstechnica.com/arstechnica/index tech`);break}let W=O[0],q=O[1],C=O[2],j=p8(W,q,C);if(typeof j==="string")z.showError(j);else z.showSystem(`Fonte adicionada: ${j.name} (${j.category}) \u2014 ${j.url}`);break}case"rmfeed":case"rmfonte":{let W=O.join(" ");if(!W){z.showError("Uso: /rmfeed <nome ou url>");break}if(l8(W))z.showSystem(`Fonte removida: ${W}`);else z.showError(`Fonte custom nao encontrada: "${W}". Para desativar uma built-in, use /disablefeed.`);break}case"disablefeed":case"desativarfonte":{let W=O.join(" ");if(!W){z.showError("Uso: /disablefeed <nome ou url>");break}if(n8(W))z.showSystem(`Fonte desativada: ${W}`);else z.showError(`Fonte built-in nao encontrada ou ja desativada: "${W}"`);break}case"enablefeed":case"ativarfonte":{let W=O.join(" ");if(!W){z.showError("Uso: /enablefeed <nome ou url>");break}if(i8(W))z.showSystem(`Fonte reativada: ${W}`);else z.showError(`Fonte built-in nao encontrada ou nao esta desativada: "${W}"`);break}case"open":case"abrir":{if(!O.join(" ")){z.showSystem(`Apps disponiveis: ${q9().join(", ")}
454
- Uso: /open <app> ou /open <app> <arquivo>`);break}let q=O.length>1?O.slice(1).join(" "):void 0,C=await S1(O[0],q);z.showSystem(C);break}case"openfile":case"abrirarquivo":{let W=O.join(" ");if(!W){z.showError("Uso: /openfile <caminho>");break}let q=await m8(W);z.showSystem(q);break}case"openurl":{let W=O[0];if(!W){z.showError("Uso: /openurl <url>");break}let q=await b1(W);z.showSystem(q);break}case"apps":case"programas":{z.disableInput();try{let W=await c8();z.showSystem(W)}catch(W){z.showError(`Apps: ${W instanceof Error?W.message:String(W)}`)}z.enableInput();break}case"sysinfo":case"sistema":{z.disableInput();try{let W=await k1();z.showSystem(W)}catch(W){z.showError(`Sysinfo: ${W instanceof Error?W.message:String(W)}`)}z.enableInput();break}case"calendar":case"calendario":case"agenda":case"cal":{z.disableInput();try{let W=await y1(),q=await i$();z.showSystem(`${W}
524
+ ${(await g3()).slice(0,8000)}`;z.startStream();let R="";for await(let w of $.chat([{role:"user",content:j,timestamp:Date.now()}],"You generate git commit messages. Output ONLY the commit message, nothing else.",!1))if(w.type==="text")R+=w.text,z.appendStream(w.text);else if(w.type==="error")z.showError(w.error);if(z.endStream(),R=R.trim().replace(/^["']|["']$/g,""),!R){z.showError("Failed to generate commit message. Aborting.");break}await p3();let x=await c3(R);if(x.ok)z.showSystem(`Committed: ${R}`);else z.showError(`Commit failed: ${x.output}`)}catch(N){z.showError(`Commit error: ${N instanceof Error?N.message:String(N)}`)}z.enableInput();break}case"persona":case"modo":{let q=E[0];if(!q){z.showSystem(o3(B));break}let N=l3(q);if(!N){z.showError(`Unknown persona: ${q}. Try /persona to see options.`);break}if(B=N.name,N.systemPrompt)M=g9(N.systemPrompt,Q,J.language);else M=X;z.showSystem(`Persona -> ${N.name}: ${N.description}`);break}case"copy":case"copiar":{let q=[...Z.messages].reverse().find((j)=>j.role==="assistant");if(!q){z.showError("No assistant message to copy.");break}if(await a3(q.content))z.showSystem("Copied last response to clipboard.");else z.showError("Failed to copy. Is xclip/pbcopy available?");break}case"ask":case"perguntar":{let q=E.join(" ");if(!q){z.showError("Usage: /ask <question>");break}z.addUserMessage(`(ephemeral) ${q}`),z.disableInput(),z.startStream();let N="";for await(let j of $.chat([{role:"user",content:q,timestamp:Date.now()}],M,!1))if(j.type==="text")N+=j.text,z.appendStream(j.text);else if(j.type==="error")z.showError(j.error);else if(j.type==="usage")z.showUsage(`${j.inputTokens} in / ${j.outputTokens} out (ephemeral)`);z.endStream(),z.enableInput();break}case"fork":{let q=E[0]||`fork-${Date.now()}`;Z.fork(q),z.updateSession(q),z.showSystem(`Forked session -> ${q} (${Z.messages.length} messages copied)`);break}case"plugins":{z.showSystem(f2(V));break}case"budget":case"orcamento":{let q=E[0];if(!q){let j=J.maxSessionCost,R=H.totals.costCents;if(j===0)z.showSystem(`Budget: unlimited (spent ~$${(R/100).toFixed(4)})`);else{let x=Math.round(R/j*100);z.showSystem(`Budget: ~$${(R/100).toFixed(4)} / $${(j/100).toFixed(4)} (${x}%)`)}break}let N=Number(q);if(isNaN(N)||N<0){z.showError("Usage: /budget <cents> (e.g., /budget 50 for $0.50)");break}J.maxSessionCost=N,e0(J),z.showSystem(N===0?"Budget: unlimited":`Budget set: $${(N/100).toFixed(2)}`);break}case"undo":case"desfazer":{if(!C8.peek()){z.showError("Nothing to undo.");break}let N=C8.undo();if(N)z.showSystem(N);break}case"search":case"buscar":{let q=E.join(" ").toLowerCase();if(!q){z.showError("Usage: /search <text>");break}let N=[];for(let j of Z.messages)if(j.content.toLowerCase().includes(q)){let R=j.content.slice(0,100).replace(/\n/g," "),x=new Date(j.timestamp).toLocaleTimeString("en",{hour:"2-digit",minute:"2-digit"});N.push(` [${j.role} ${x}] ${R}${j.content.length>100?"...":""}`)}z.showSystem(N.length>0?`Found ${N.length} match${N.length>1?"es":""}:
525
+ ${N.join(`
526
+ `)}`:`No matches for "${q}".`);break}case"lang":case"language":case"idioma":{let q=E[0];if(!q){z.showSystem(`Language: ${J.language} (auto = match user's language)`);break}J.language=q,e0(J),z.showSystem(`Language -> ${q}`);break}case"briefing":case"resumo":{z.showSystem("Carregando briefing..."),z.disableInput();try{let q=await s3(J.dataDir);z.showSystem(q);let N=await g7(J.dataDir);z.setTimeContext(N),O=N}catch(q){z.showError(`Briefing falhou: ${q instanceof Error?q.message:String(q)}`)}z.enableInput();break}case"news":case"noticias":{let q=E[0];if(q)z.showSystem(`Buscando noticias (${q})...`);else z.showSystem("Buscando noticias...");z.disableInput();try{let{items:N,errors:j}=await m5(q?[q]:void 0);if(N.length===0){z.showSystem(j.length>0?`Nenhuma noticia encontrada.
527
+ Falhas: ${j.join(", ")}`:"Nenhuma noticia encontrada."),z.enableInput();break}let R=N.map((w)=>({title:w.title,link:w.link,source:w.source,category:w.category,time:w.pubDate?w.pubDate.toLocaleTimeString("pt-BR",{hour:"2-digit",minute:"2-digit",timeZone:"America/Sao_Paulo"}):""})),x=await z.promptNewsPicker(R);if(x){let{openUrl:w}=await Promise.resolve().then(() => (b4(),g2));w(x),z.showSystem(`Abrindo: ${x}`)}}catch(N){z.showError(`Falha ao buscar noticias: ${N instanceof Error?N.message:String(N)}`)}z.enableInput();break}case"feeds":case"fontes":{z.showSystem(b1());break}case"addfeed":case"novafonte":{if(E.length<3){z.showError(`Uso: /addfeed <nome> <url> <categoria>
528
+ Ex: /addfeed "Ars Technica" https://feeds.arstechnica.com/arstechnica/index tech`);break}let q=E[0],N=E[1],j=E[2],R=x1(q,N,j);if(typeof R==="string")z.showError(R);else z.showSystem(`Fonte adicionada: ${R.name} (${R.category}) \u2014 ${R.url}`);break}case"rmfeed":case"rmfonte":{let q=E.join(" ");if(!q){z.showError("Uso: /rmfeed <nome ou url>");break}if(S1(q))z.showSystem(`Fonte removida: ${q}`);else z.showError(`Fonte custom nao encontrada: "${q}". Para desativar uma built-in, use /disablefeed.`);break}case"disablefeed":case"desativarfonte":{let q=E.join(" ");if(!q){z.showError("Uso: /disablefeed <nome ou url>");break}if(w1(q))z.showSystem(`Fonte desativada: ${q}`);else z.showError(`Fonte built-in nao encontrada ou ja desativada: "${q}"`);break}case"enablefeed":case"ativarfonte":{let q=E.join(" ");if(!q){z.showError("Uso: /enablefeed <nome ou url>");break}if(k1(q))z.showSystem(`Fonte reativada: ${q}`);else z.showError(`Fonte built-in nao encontrada ou nao esta desativada: "${q}"`);break}case"open":case"abrir":{if(!E.join(" ")){z.showSystem(`Apps disponiveis: ${f5().join(", ")}
529
+ Uso: /open <app> ou /open <app> <arquivo>`);break}let N=E.length>1?E.slice(1).join(" "):void 0,j=await x4(E[0],N);z.showSystem(j);break}case"openfile":case"abrirarquivo":{let q=E.join(" ");if(!q){z.showError("Uso: /openfile <caminho>");break}let N=await B0(q);z.showSystem(N);break}case"openurl":{let q=E[0];if(!q){z.showError("Uso: /openurl <url>");break}let N=await S4(q);z.showSystem(N);break}case"apps":case"programas":{z.disableInput();try{let q=await N0();z.showSystem(q)}catch(q){z.showError(`Apps: ${q instanceof Error?q.message:String(q)}`)}z.enableInput();break}case"sysinfo":case"sistema":{z.disableInput();try{let q=await w4();z.showSystem(q)}catch(q){z.showError(`Sysinfo: ${q instanceof Error?q.message:String(q)}`)}z.enableInput();break}case"calendar":case"calendario":case"agenda":case"cal":{z.disableInput();try{let q=await k4(),N=await k$();z.showSystem(`${q}
455
530
 
456
531
  --- Agenda ---
457
- ${q}`)}catch(W){z.showError(`Calendar: ${W instanceof Error?W.message:String(W)}`)}z.enableInput();break}case"monitor":case"vigiar":{let W=O[0]?.toLowerCase();if(!W||W==="list"||W==="listar")z.showSystem(r6());else if(W==="stop"||W==="parar"){let q=O[1];if(!q){z.showError("Uso: /monitor stop <processo>");break}z.showSystem(a6(q))}else{let q=parseInt(O[1])||60;z.showSystem(o6(W,q))}break}case"workflow":case"fluxo":{let W=O[0]?.toLowerCase();if(!W||W==="list"||W==="listar"){let q=O[1];z.showSystem(p6(c6(q)))}else if(W==="run"||W==="rodar"){let q=O[1];if(!q){z.showError("Uso: /workflow run <nome>");break}z.disableInput();try{let C=await u7(q,(j)=>z.showSystem(j));z.showSystem(C)}catch(C){z.showError(`Workflow: ${C instanceof Error?C.message:String(C)}`)}z.enableInput()}else if(W==="info"||W==="detalhe"){let q=O[1];if(!q){z.showError("Uso: /workflow info <nome>");break}let C=t4(q);if(C)z.showSystem(l6(C));else z.showError(`Workflow nao encontrado: ${q}`)}else if(W==="delete"||W==="deletar"){let q=O[1];if(!q){z.showError("Uso: /workflow delete <nome>");break}if(d6(q))z.showSystem(`Workflow removido: ${q}`);else z.showError(`Workflow nao encontrado: ${q}`)}else if(W==="enable"||W==="ativar"){let q=O[1];if(!q){z.showError("Uso: /workflow enable <nome>");break}let C=d7(q,{enabled:!0});if(C)z.showSystem(`Workflow ativado: ${C.name}`);else z.showError(`Workflow nao encontrado: ${q}`)}else if(W==="disable"||W==="desativar"){let q=O[1];if(!q){z.showError("Uso: /workflow disable <nome>");break}let C=d7(q,{enabled:!1});if(C)z.showSystem(`Workflow desativado: ${C.name}`);else z.showError(`Workflow nao encontrado: ${q}`)}else{z.disableInput();try{let q=await u7(W,(C)=>z.showSystem(C));z.showSystem(q)}catch(q){z.showError(`Workflow: ${q instanceof Error?q.message:String(q)}`)}z.enableInput()}break}case"pomodoro":case"foco":{let W=O[0]?.toLowerCase();if(W==="stop"||W==="parar")z.showSystem(k6());else if(W==="status")z.showSystem(g7());else if(!W)z.showSystem(g7());else{let q=O.join(" "),C=25,j=5;z.showSystem(b6(q,25,5))}break}case"entrada":case"income":{let W=parseFloat(O[0]);if(isNaN(W)||O.length<3){z.showSystem("Uso: /entrada <valor> <categoria> <descricao>");break}let q=u4("entrada",W,O[1],O.slice(2).join(" "));z.showSystem(`+ R$ ${q.amount.toFixed(2)} (${q.category}) \u2014 ${q.description}`);break}case"saida":case"expense":{let W=parseFloat(O[0]);if(isNaN(W)||O.length<3){z.showSystem("Uso: /saida <valor> <categoria> <descricao>");break}let q=u4("saida",W,O[1],O.slice(2).join(" "));z.showSystem(`- R$ ${q.amount.toFixed(2)} (${q.category}) \u2014 ${q.description}`);break}case"finance":case"financas":case"balanco":{let W=O[0];if(W==="recent"||W==="recentes")z.showSystem(i2());else z.showSystem(Y0()+`
458
-
459
- `+i2(5));break}case"decisions":case"decisoes":{let W=O.join(" ");if(W){let q=J0(W);z.showSystem(f1(q))}else z.showSystem(f1(Q0()));break}case"investigar":case"investigate":case"investigacoes":{let W=O.join(" ");if(W){let{searchInvestigations:q,formatInvestigationList:C}=await Promise.resolve().then(() => (l4(),X7));z.showSystem(C(q(W)))}else{let{listInvestigations:q,formatInvestigationList:C}=await Promise.resolve().then(() => (l4(),X7));z.showSystem(C(q()))}break}case"email":case"rascunho":{if(!O.join(" ")){z.showSystem(`Uso: /email <destinatario> <assunto> | <corpo>
460
- Ou peca a IA: "escreve um email para joao@email.com cobrando o relatorio"`);break}let q=O[0],C=O.slice(1).join(" "),j=C.indexOf("|");if(j===-1){z.showSystem(`Formato: /email <destinatario> <assunto> | <corpo>
461
- Use | para separar assunto do corpo.`);break}let T=C.slice(0,j).trim(),b=C.slice(j+1).trim();if(!T||!b){z.showError("Assunto e corpo sao obrigatorios.");break}let a={to:q,subject:T,body:b};z.showSystem(Z0(a)),z.disableInput();try{let A$=await $0(a);z.showSystem(A$)}catch(A$){z.showError(`Email: ${A$ instanceof Error?A$.message:String(A$)}`)}z.enableInput();break}case"memo":case"anotar":case"note":{let W=O.join(" ");if(!W){let j=d4();z.showSystem(U1(j));break}let q=t8(W),C=q.tags.length>0?` [${q.tags.map((j)=>"#"+j).join(" ")}]`:"";z.showSystem(`Memo salvo${C} {${q.id}}`);break}case"memos":case"notas":{let W=O.join(" ");if(W){let q=e8(W);z.showSystem(U1(q))}else{let q=d4();z.showSystem(U1(q))}break}case"memotags":case"tags":{z.showSystem(b9());break}case"rmmemo":case"rmnota":{let W=O[0];if(!W){z.showError("Uso: /rmmemo <id>");break}if(S9(W))z.showSystem("Memo removido.");else z.showError(`Memo nao encontrado: ${W}`);break}case"material":case"mat":{let W=O.join(" ");if(!W){let a=g1(10);z.showSystem(e$(a));break}if(/^[a-z0-9]{6}$/.test(W)){let a=zZ(W);if(a)z.showSystem(WZ(a));else z.showError(`Material nao encontrado: ${W}`);break}let q=W.indexOf("|");if(q===-1){z.showSystem(`Uso: /material <titulo> | <conteudo>
462
- Ou peca a IA: "salva esse material sobre..."`);break}let C=W.slice(0,q).trim(),j=W.slice(q+1).trim();if(!C||!j){z.showError("Titulo e conteudo sao obrigatorios.");break}let T=C0(C,j),b=T.tags.length>0?` [${T.tags.map((a)=>"#"+a).join(" ")}]`:"";z.showSystem(`Material salvo: "${T.title}" (${T.category})${b} {${T.id}}`);break}case"materials":case"materiais":{let W=O.join(" ");if(W){let q=O0(W);z.showSystem(e$(q))}else{let q=g1();z.showSystem(e$(q))}break}case"matcats":case"categorias":{z.showSystem(HZ());break}case"rmmat":case"rmmaterial":{let W=O[0];if(!W){z.showError("Uso: /rmmat <id>");break}if(M0(W))z.showSystem("Material removido.");else z.showError(`Material nao encontrado: ${W}`);break}case"indexar":case"index":case"reindex":{z.showSystem("Indexando memoria local...");let W=R0();z.showSystem(`Indexacao concluida: ${W.indexed} fonte(s) indexada(s), ${W.skipped} sem alteracao. Total: ${W.total} chunks.`);break}case"memoria":case"memory":{let W=O.join(" ");if(W){let q=A0(W);z.showSystem(x0(q))}else{let q=L0(),C=q.builtAt?new Date(q.builtAt).toLocaleString("pt-BR"):"nunca";z.showSystem(`Memory RAG Index:
463
- Chunks: ${q.chunks}
464
- Fontes: ${q.sources}
465
- Ultima indexacao: ${C}`)}break}case"vault":{let W=O[0]?.toLowerCase();if(!W||W==="status")z.showSystem(z8(K8()));else if(W==="backup"){z.showSystem("Realizando backup...");let q=O.slice(1).join(" ")||void 0,C=await O1(q);z.showSystem(C)}else if(W==="sync"||W==="push"){z.showSystem("Sincronizando com remote...");let q=await G8();z.showSystem(q)}else if(W==="init"){let q=await V8();z.showSystem(q),K5(30),z.showSystem("Auto-backup ativado (a cada 30 minutos).")}else z.showError("Uso: /vault [status|backup|sync|init]");break}case"backup":{z.showSystem("Realizando backup...");let W=await O1();z.showSystem(W);break}case"clipboard":case"area":{z.showSystem("Lendo clipboard...");let W=await T0();switch(W.type){case"text":z.showSystem(`Clipboard (texto):
466
- ${W.text}`);break;case"image":z.showSystem(W.text);break;case"empty":z.showSystem("Clipboard vazio.");break;case"error":z.showError(W.text);break}break}case"tela":case"screen":{z.showSystem("Analisando tela...");let W=await P0();z.showSystem(W);break}case"ps1":{let W=O.join(" ");if(!W.trim()){z.showError("Uso: /ps1 <script powershell>");break}z.showSystem("Executando script...");let q=await D0(W),C=[];if(q.stdout.trim())C.push(q.stdout.trim());if(q.stderr.trim())C.push(`stderr: ${q.stderr.trim()}`);C.push(`(exit: ${q.exitCode}, ${q.duration}ms)`),z.showSystem(C.join(`
467
- `));break}case"projeto":case"project":{let W=O.join(" ");if(W){let q=S0(W);if(q)u1(q.id),z.showSystem(v0(q));else if(W==="auto"){let C=m0(process.cwd());if(C)u1(C.id),z.showSystem(`Projeto detectado: ${v0(C)}`);else z.showError("Nenhum projeto detectado no diretorio atual.")}else z.showError(`Projeto nao encontrado: "${W}"`)}else{let q=Z1();if(q)z.showSystem(v0(q));else z.showSystem("Nenhum projeto ativo. Use /projeto <nome> ou /projeto auto")}break}case"projetos":case"projects":{z.showSystem(f0(b0()));break}case"sessao":case"session":{let W=O[0],q=Z1();if(!q){z.showError("Nenhum projeto ativo. Use /projeto primeiro.");break}if(W==="start"||W==="iniciar"){let C=O.slice(1).join(" "),j=k0(q.id,C);if(j)z.showSystem(`Sessao iniciada para "${q.name}" [${j.id}]`)}else if(W==="stop"||W==="parar"){let C=Y1(q.id);if(C){let j=y0(C.id,O.slice(1).join(" "));if(j)z.showSystem(`Sessao encerrada: ${j.durationMinutes} minutos em "${q.name}"`)}else z.showSystem("Nenhuma sessao aberta.")}else{let C=Y1(q.id);if(C){let j=Math.round((Date.now()-new Date(C.startedAt).getTime())/60000);z.showSystem(`Sessao aberta: ${j} minutos em "${q.name}"`)}else z.showSystem("Nenhuma sessao aberta. Use /sessao start")}break}case"relatorio":case"report":{let W=Z1();if(!W){z.showError("Nenhum projeto ativo. Use /projeto primeiro.");break}let q=O[0]||"today";z.showSystem("Gerando relatorio...");let C=await h0(W.id,q,"pt");if(C)z.showSystem(C.markdown);else z.showError("Falha ao gerar relatorio.");break}case"oportunidades":case"opportunities":{let W=O[0]||void 0,q=_0(W);z.showSystem(g0(q));break}case"people":case"pessoas":case"equipe":case"team":case"familia":case"family":case"contato":case"contatos":case"contacts":{let q={equipe:"equipe",team:"equipe",familia:"familia",family:"familia",contato:"contato",contatos:"contato",contacts:"contato"}[f]||O[0],C=G0(q);z.showSystem(H0(C));break}case"person":case"pessoa":{let W=O.join(" ");if(!W){z.showError("Uso: /person <nome>");break}let q=t$(W);if(!q){z.showError(`Pessoa nao encontrada: "${W}"`);break}z.showSystem(q0(q));break}case"addperson":case"addpessoa":case"novapessoa":{let W=O[0];if(!W||!["equipe","familia","contato"].includes(W)){z.showSystem(`Uso: /addperson <equipe|familia|contato> <nome> [papel]
468
- Ex: /addperson equipe Joao dev frontend`);break}let C=O.slice(1).join(" ");if(!C){z.showError("Nome obrigatorio. Ex: /addperson equipe Joao dev frontend");break}let[j,...T]=C.split(","),b=T.join(",").trim()||void 0,a=V0(j.trim(),W,b);z.showSystem(`Adicionado: ${a.name} (${W}) [${a.id}]`);break}case"delegate":case"delegar":{let W=O[0];if(!W||O.length<2){z.showSystem(`Uso: /delegate <pessoa> <tarefa>
469
- Ex: /delegate Joao revisar relatorio`);break}let q=O.slice(1).join(" "),C=W0(W,q);if(!C){z.showError(`Pessoa nao encontrada: "${W}"`);break}z.showSystem(`Delegado para ${W}: "${q}" [${C.id}]`);break}case"delegations":case"delegacoes":case"delegados":{let W=O[0],q=v1(W);z.showSystem(U0(q));break}case"followups":{let W=n4();z.showSystem(B0(W));break}case"dashboard":case"painel":{z.showSystem(N0());break}case"task":case"tarefa":{let W=O.join(" ");if(!W){let b=a$();z.showSystem(q1(b));break}let q=c4(W),C=W.replace(/\b(para\s+(as\s+)?)?\d{1,2}\s*[h:]\s*\d{0,2}\b/gi,"").replace(/\b(em\s+\d+\s*(min|minutos?|h|horas?))\b/gi,"").replace(/\b(amanha|amanh\u00E3)\b/gi,"").replace(/\s{2,}/g," ").trim();if(!C)C=W;let j=r8(C,q||void 0),T=q?` \u2014 lembrete: ${q.toLocaleTimeString("pt-BR",{hour:"2-digit",minute:"2-digit"})}`:"";z.showSystem(`Tarefa criada: "${j.title}"${T} [${j.id}]`);break}case"tasks":case"tarefas":{let W=O[0]==="all"||O[0]==="todas",q=a$(W);z.showSystem(q1(q));break}case"done":case"feito":case"concluido":{let W=O.join(" ");if(!W){z.showError("Uso: /done <id ou parte do titulo>");break}let q=s8(W);if(q)z.showSystem(`Concluida: "${q.title}"`);else z.showError(`Tarefa nao encontrada: "${W}"`);break}case"rmtask":case"rmtarefa":{let W=O.join(" ");if(!W){z.showError("Uso: /rmtask <id ou parte do titulo>");break}if(R9(W))z.showSystem("Tarefa removida.");else z.showError(`Tarefa nao encontrada: "${W}"`);break}default:z.showError(`Unknown command: /${f}. Try /help`)}}function k(){L9(),h6(),s6(),Y2(),z.stop(),process.exit(0)}process.on("SIGINT",k),process.on("SIGTERM",k),z.start({onSubmit:w,onCancel:()=>{L?.abort(),z.endStream(),z.showSystem("Cancelled."),z.enableInput()},onExit:k});let f$=`Authenticated via Claude ${J.subscriptionType} subscription.`;if(z.showSystem(`smolerclaw v${$8()} \u2014 the micro AI assistant.
470
- ${f$}
471
- Type /ajuda for commands.`),D6(Y.dataDir))try{let h=await P6();z.showSystem(h),T6()}catch{}if(G)await w(G)}function cX($){if(!$||$<=0)return"";let Z=Date.now()-$;if(Z<0)return"";let Y=Math.floor(Z/60000);if(Y<1)return"just now";if(Y<60)return`${Y}m ago`;let J=Math.floor(Y/60);if(J<24)return`${J}h ago`;let Q=Math.floor(J/24);if(Q>365)return`${Math.floor(Q/365)}y ago`;return`${Q}d ago`}fX().catch(($)=>{try{process.stdin.setRawMode?.(!1),process.stdout.write("\x1B[?1049l"),process.stdout.write("\x1B[?25h")}catch{}console.error("Fatal:",$),process.exit(1)});
532
+ ${N}`)}catch(q){z.showError(`Calendar: ${q instanceof Error?q.message:String(q)}`)}z.enableInput();break}case"monitor":case"vigiar":{let q=E[0]?.toLowerCase();if(!q||q==="list"||q==="listar")z.showSystem(PY());else if(q==="stop"||q==="parar"){let N=E[1];if(!N){z.showError("Uso: /monitor stop <processo>");break}z.showSystem(LY(N))}else{let N=parseInt(E[1])||60;z.showSystem(RY(q,N))}break}case"workflow":case"fluxo":{let q=E[0]?.toLowerCase();if(!q||q==="list"||q==="listar"){let N=E[1];z.showSystem(jY(NY(N)))}else if(q==="run"||q==="rodar"){let N=E[1];if(!N){z.showError("Uso: /workflow run <nome>");break}z.disableInput();try{let j=await XZ(N,(R)=>z.showSystem(R));z.showSystem(j)}catch(j){z.showError(`Workflow: ${j instanceof Error?j.message:String(j)}`)}z.enableInput()}else if(q==="info"||q==="detalhe"){let N=E[1];if(!N){z.showError("Uso: /workflow info <nome>");break}let j=y0(N);if(j)z.showSystem(OY(j));else z.showError(`Workflow nao encontrado: ${N}`)}else if(q==="delete"||q==="deletar"){let N=E[1];if(!N){z.showError("Uso: /workflow delete <nome>");break}if(MY(N))z.showSystem(`Workflow removido: ${N}`);else z.showError(`Workflow nao encontrado: ${N}`)}else if(q==="enable"||q==="ativar"){let N=E[1];if(!N){z.showError("Uso: /workflow enable <nome>");break}let j=QZ(N,{enabled:!0});if(j)z.showSystem(`Workflow ativado: ${j.name}`);else z.showError(`Workflow nao encontrado: ${N}`)}else if(q==="disable"||q==="desativar"){let N=E[1];if(!N){z.showError("Uso: /workflow disable <nome>");break}let j=QZ(N,{enabled:!1});if(j)z.showSystem(`Workflow desativado: ${j.name}`);else z.showError(`Workflow nao encontrado: ${N}`)}else{z.disableInput();try{let N=await XZ(q,(j)=>z.showSystem(j));z.showSystem(N)}catch(N){z.showError(`Workflow: ${N instanceof Error?N.message:String(N)}`)}z.enableInput()}break}case"pomodoro":case"foco":{let q=E[0]?.toLowerCase();if(q==="stop"||q==="parar")z.showSystem(zY());else if(q==="status")z.showSystem(ZZ());else if(!q)z.showSystem(ZZ());else{let N=E.join(" "),j=25,R=5;z.showSystem(KY(N,25,5))}break}case"entrada":case"income":{let q=parseFloat(E[0]);if(isNaN(q)||E.length<3){z.showSystem("Uso: /entrada <valor> <categoria> <descricao>");break}let N=O0("entrada",q,E[1],E.slice(2).join(" "));z.showSystem(`+ R$ ${N.amount.toFixed(2)} (${N.category}) \u2014 ${N.description}`);break}case"saida":case"expense":{let q=parseFloat(E[0]);if(isNaN(q)||E.length<3){z.showSystem("Uso: /saida <valor> <categoria> <descricao>");break}let N=O0("saida",q,E[1],E.slice(2).join(" "));z.showSystem(`- R$ ${N.amount.toFixed(2)} (${N.category}) \u2014 ${N.description}`);break}case"finance":case"financas":case"balanco":{let q=E[0];if(q==="recent"||q==="recentes")z.showSystem(d5());else z.showSystem(p1()+`
533
+
534
+ `+d5(5));break}case"decisions":case"decisoes":{let q=E.join(" ");if(q){let N=v4(q);z.showSystem(K8(N))}else z.showSystem(K8(c1()));break}case"investigar":case"investigate":case"investigacoes":{let q=E.join(" ");if(q){let{searchInvestigations:N,formatInvestigationList:j}=await Promise.resolve().then(() => (E0(),J9));z.showSystem(j(N(q)))}else{let{listInvestigations:N,formatInvestigationList:j}=await Promise.resolve().then(() => (E0(),J9));z.showSystem(j(N()))}break}case"email":case"rascunho":{if(!E.join(" ")){z.showSystem(`Uso: /email <destinatario> <assunto> | <corpo>
535
+ Ou peca a IA: "escreve um email para joao@email.com cobrando o relatorio"`);break}let N=E[0],j=E.slice(1).join(" "),R=j.indexOf("|");if(R===-1){z.showSystem(`Formato: /email <destinatario> <assunto> | <corpo>
536
+ Use | para separar assunto do corpo.`);break}let x=j.slice(0,R).trim(),w=j.slice(R+1).trim();if(!x||!w){z.showError("Assunto e corpo sao obrigatorios.");break}let o={to:N,subject:x,body:w};z.showSystem(m1(o)),z.disableInput();try{let F4=await g1(o);z.showSystem(F4)}catch(F4){z.showError(`Email: ${F4 instanceof Error?F4.message:String(F4)}`)}z.enableInput();break}case"memo":case"anotar":case"note":{let q=E.join(" ");if(!q){let R=j0();z.showSystem(_4(R));break}let N=f1(q),j=N.tags.length>0?` [${N.tags.map((R)=>"#"+R).join(" ")}]`:"";z.showSystem(`Memo salvo${j} {${N.id}}`);break}case"memos":case"notas":{let q=E.join(" ");if(q){let N=h1(q);z.showSystem(_4(N))}else{let N=j0();z.showSystem(_4(N))}break}case"memotags":case"tags":{z.showSystem(X6());break}case"rmmemo":case"rmnota":{let q=E[0];if(!q){z.showError("Uso: /rmmemo <id>");break}if(Q6(q))z.showSystem("Memo removido.");else z.showError(`Memo nao encontrado: ${q}`);break}case"material":case"mat":{let q=E.join(" ");if(!q){let o=G8(10);z.showSystem(B4(o));break}if(/^[a-z0-9]{6}$/.test(q)){let o=y6(q);if(o)z.showSystem(f6(o));else z.showError(`Material nao encontrado: ${q}`);break}let N=q.indexOf("|");if(N===-1){z.showSystem(`Uso: /material <titulo> | <conteudo>
537
+ Ou peca a IA: "salva esse material sobre..."`);break}let j=q.slice(0,N).trim(),R=q.slice(N+1).trim();if(!j||!R){z.showError("Titulo e conteudo sao obrigatorios.");break}let x=$7(j,R),w=x.tags.length>0?` [${x.tags.map((o)=>"#"+o).join(" ")}]`:"";z.showSystem(`Material salvo: "${x.title}" (${x.category})${w} {${x.id}}`);break}case"materials":case"materiais":{let q=E.join(" ");if(q){let N=V8(q);z.showSystem(B4(N))}else{let N=G8();z.showSystem(B4(N))}break}case"matcats":case"categorias":{z.showSystem(h6());break}case"rmmat":case"rmmaterial":{let q=E[0];if(!q){z.showError("Uso: /rmmat <id>");break}if(Z7(q))z.showSystem("Material removido.");else z.showError(`Material nao encontrado: ${q}`);break}case"reflect":case"reflexao":case"aprender":{z.showSystem("Executando reflexao de uso..."),z.disableInput();try{let q=await T0();z.showSystem(q.summary)}catch(q){z.showError(`Reflexao falhou: ${q instanceof Error?q.message:String(q)}`)}z.enableInput();break}case"indexar":case"index":case"reindex":{z.showSystem("Indexando memoria local...");let q=K7();z.showSystem(`Indexacao concluida: ${q.indexed} fonte(s) indexada(s), ${q.skipped} sem alteracao. Total: ${q.total} chunks.`);break}case"memoria":case"memory":{let q=E.join(" ");if(q){let N=z7(q);z.showSystem(V7(N))}else{let N=X7(),j=N.builtAt?new Date(N.builtAt).toLocaleString("pt-BR"):"nunca";z.showSystem(`Memory RAG Index:
538
+ Chunks: ${N.chunks}
539
+ Fontes: ${N.sources}
540
+ Ultima indexacao: ${j}`)}break}case"vault":{let q=E[0]?.toLowerCase();if(!q||q==="status")z.showSystem(n0(a0()));else if(q==="backup"){z.showSystem("Realizando backup...");let N=E.slice(1).join(" ")||void 0,j=await o4(N);z.showSystem(j)}else if(q==="sync"||q==="push"){z.showSystem("Sincronizando com remote...");let N=await i0();z.showSystem(N)}else if(q==="init"){let N=await r0();z.showSystem(N),bZ(30),z.showSystem("Auto-backup ativado (a cada 30 minutos).")}else z.showError("Uso: /vault [status|backup|sync|init]");break}case"backup":{z.showSystem("Realizando backup...");let q=await o4();z.showSystem(q);break}case"clipboard":case"area":{z.showSystem("Lendo clipboard...");let q=await H7();switch(q.type){case"text":z.showSystem(`Clipboard (texto):
541
+ ${q.text}`);break;case"image":z.showSystem(q.text);break;case"empty":z.showSystem("Clipboard vazio.");break;case"error":z.showError(q.text);break}break}case"tela":case"screen":{z.showSystem("Analisando tela...");let q=await q7();z.showSystem(q);break}case"ps1":{let q=E.join(" ");if(!q.trim()){z.showError("Uso: /ps1 <script powershell>");break}z.showSystem("Executando script...");let N=await G7(q),j=[];if(N.stdout.trim())j.push(N.stdout.trim());if(N.stderr.trim())j.push(`stderr: ${N.stderr.trim()}`);j.push(`(exit: ${N.exitCode}, ${N.duration}ms)`),z.showSystem(j.join(`
542
+ `));break}case"projeto":case"project":{let q=E.join(" ");if(q){let N=B7(q);if(N)U8(N.id),z.showSystem(F7(N));else if(q==="auto"){let j=L7(process.cwd());if(j)U8(j.id),z.showSystem(`Projeto detectado: ${F7(j)}`);else z.showError("Nenhum projeto detectado no diretorio atual.")}else z.showError(`Projeto nao encontrado: "${q}"`)}else{let N=M4();if(N)z.showSystem(F7(N));else z.showSystem("Nenhum projeto ativo. Use /projeto <nome> ou /projeto auto")}break}case"projetos":case"projects":{z.showSystem(O7(W8()));break}case"sessao":case"session":{let q=E[0],N=M4();if(!N){z.showError("Nenhum projeto ativo. Use /projeto primeiro.");break}if(q==="start"||q==="iniciar"){let j=E.slice(1).join(" "),R=N7(N.id,j);if(R)z.showSystem(`Sessao iniciada para "${N.name}" [${R.id}]`)}else if(q==="stop"||q==="parar"){let j=C4(N.id);if(j){let R=M7(j.id,E.slice(1).join(" "));if(R)z.showSystem(`Sessao encerrada: ${R.durationMinutes} minutos em "${N.name}"`)}else z.showSystem("Nenhuma sessao aberta.")}else{let j=C4(N.id);if(j){let R=Math.round((Date.now()-new Date(j.startedAt).getTime())/60000);z.showSystem(`Sessao aberta: ${R} minutos em "${N.name}"`)}else z.showSystem("Nenhuma sessao aberta. Use /sessao start")}break}case"relatorio":case"report":{let q=M4();if(!q){z.showError("Nenhum projeto ativo. Use /projeto primeiro.");break}let N=E[0]||"today";z.showSystem("Gerando relatorio...");let j=await j7(q.id,N,"pt");if(j)z.showSystem(j.markdown);else z.showError("Falha ao gerar relatorio.");break}case"oportunidades":case"opportunities":{let q=E[0]||void 0,N=C7(q);z.showSystem(E7(N));break}case"people":case"pessoas":case"equipe":case"team":case"familia":case"family":case"contato":case"contatos":case"contacts":{let N={equipe:"equipe",team:"equipe",familia:"familia",family:"familia",contato:"contato",contatos:"contato",contacts:"contato"}[u]||E[0],j=a1(N);z.showSystem(r1(j));break}case"person":case"pessoa":{let q=E.join(" ");if(!q){z.showError("Uso: /person <nome>");break}let N=l$(q);if(!N){z.showError(`Pessoa nao encontrada: "${q}"`);break}z.showSystem(i1(N));break}case"addperson":case"addpessoa":case"novapessoa":{let q=E[0];if(!q||!["equipe","familia","contato"].includes(q)){z.showSystem(`Uso: /addperson <equipe|familia|contato> <nome> [papel]
543
+ Ex: /addperson equipe Joao dev frontend`);break}let j=E.slice(1).join(" ");if(!j){z.showError("Nome obrigatorio. Ex: /addperson equipe Joao dev frontend");break}let[R,...x]=j.split(","),w=x.join(",").trim()||void 0,o=o1(R.trim(),q,w);z.showSystem(`Adicionado: ${o.name} (${q}) [${o.id}]`);break}case"delegate":case"delegar":{let q=E[0];if(!q||E.length<2){z.showSystem(`Uso: /delegate <pessoa> <tarefa>
544
+ Ex: /delegate Joao revisar relatorio`);break}let N=E.slice(1).join(" "),j=n1(q,N);if(!j){z.showError(`Pessoa nao encontrada: "${q}"`);break}z.showSystem(`Delegado para ${q}: "${N}" [${j.id}]`);break}case"delegations":case"delegacoes":case"delegados":{let q=E[0],N=f4(q);z.showSystem(s1(N));break}case"followups":{let q=z8();z.showSystem(t1(q));break}case"dashboard":case"painel":{z.showSystem(e1());break}case"task":case"tarefa":{let q=E.join(" ");if(!q){let w=d$();z.showSystem(y4(w));break}let N=C0(q),j=q.replace(/\b(para\s+(as\s+)?)?\d{1,2}\s*[h:]\s*\d{0,2}\b/gi,"").replace(/\b(em\s+\d+\s*(min|minutos?|h|horas?))\b/gi,"").replace(/\b(amanha|amanh\u00E3)\b/gi,"").replace(/\s{2,}/g," ").trim();if(!j)j=q;let R=_1(j,N||void 0),x=N?` \u2014 lembrete: ${N.toLocaleTimeString("pt-BR",{hour:"2-digit",minute:"2-digit"})}`:"";z.showSystem(`Tarefa criada: "${R.title}"${x} [${R.id}]`);break}case"tasks":case"tarefas":{let q=E[0]==="all"||E[0]==="todas",N=d$(q);z.showSystem(y4(N));break}case"done":case"feito":case"concluido":{let q=E.join(" ");if(!q){z.showError("Uso: /done <id ou parte do titulo>");break}let N=v1(q);if(N)z.showSystem(`Concluida: "${N.title}"`);else z.showError(`Tarefa nao encontrada: "${q}"`);break}case"rmtask":case"rmtarefa":{let q=E.join(" ");if(!q){z.showError("Uso: /rmtask <id ou parte do titulo>");break}if(s2(q))z.showSystem("Tarefa removida.");else z.showError(`Tarefa nao encontrada: "${q}"`);break}default:z.showError(`Unknown command: /${u}. Try /help`)}}function K$(){Z.saveLastSession(),i2(),HY(),DY(),s7(),T0().catch(()=>{}),z.stop(),process.exit(0)}process.on("SIGINT",K$),process.on("SIGTERM",K$),z.start({onSubmit:T,onCancel:()=>{P?.abort(),z.endStream(),z.showSystem("Cancelled."),z.enableInput()},onExit:K$});let i=`Authenticated via Claude ${Y.subscriptionType} subscription.`;if(z.showSystem(`smolerclaw v${v0()} \u2014 the micro AI assistant.
545
+ ${i}
546
+ Type /ajuda for commands.`),$Y(J.dataDir))try{let b=await UH();if(b.panels.length>0){z.enterDashboardMode(b);let _=()=>{z.enterChatMode(),z.showSystem("Briefing exibido. Pressione qualquer tecla para continuar."),process.stdin.removeListener("data",_)};setTimeout(()=>{if(z.getViewMode()==="dashboard")z.enterChatMode()},30000),process.stdin.once("data",()=>{if(z.getViewMode()==="dashboard")z.enterChatMode()})}else{let _=await JY();z.showSystem(_)}ZY()}catch{}if(G)await T(G)}async function UH(){let $=[],Z=new Date().getHours(),J=Z<12?"BOM DIA":Z<18?"BOA TARDE":"BOA NOITE",Y=new Date().toLocaleDateString("pt-BR",{weekday:"long",year:"numeric",month:"long",day:"numeric"}),Q=d$(),X=Q.filter((z)=>{if(!z.dueAt)return!0;let B=new Date(z.dueAt),U=new Date;return B.toDateString()===U.toDateString()});if(X.length>0||Q.length>0){let z=X.slice(0,8).map((B)=>{let U=B.dueAt?new Date(B.dueAt).toLocaleTimeString("pt-BR",{hour:"2-digit",minute:"2-digit"}):"";return`${U?`[${U}] `:""}${B.title}`});if(Q.length>X.length)z.push(`... +${Q.length-X.length} outras`);$.push({id:"tasks",title:`${J}! Tarefas (${X.length})`,content:z.length>0?z:["Nenhuma tarefa para hoje"]})}let K=z8();if(K.length>0){let z=K.slice(0,6).map((B)=>{let U=B.person.name||"Alguem",M=B.interaction.summary||"Follow-up pendente";return`${U}: ${M.slice(0,30)}...`});$.push({id:"followups",title:`Follow-ups (${K.length})`,content:z})}let G=f4().filter((z)=>z.status==="atrasado");if(G.length>0){let z=G.slice(0,5).map((B)=>{return`${l$(B.personId)?.name||"Alguem"}: ${B.task.slice(0,25)}...`});$.push({id:"delegations",title:`Atrasados (${G.length})`,content:z})}try{let B=(await k$()).split(`
547
+ `).filter((U)=>U.trim()).slice(0,6);if(B.length>0)$.push({id:"calendar",title:"Agenda",content:B})}catch{}let H=R7();if(H){let z=H.split(`
548
+ `).filter((B)=>B.trim()).slice(0,5);$.push({id:"project",title:"Projetos",content:z})}try{let B=(await q4(["finance","business","tech"],2)).split(`
549
+ `).filter((U)=>U.trim()).slice(0,6);if(B.length>0)$.push({id:"news",title:"Noticias",content:B})}catch{}if($.length===0)$.push({id:"greeting",title:J,content:[Y,"","Nenhuma tarefa ou evento pendente.","Use /ajuda para ver comandos dispon\xEDveis."]});return{panels:$,columns:Math.min(2,$.length),gap:1}}function BH($){if(!$||$<=0)return"";let Z=Date.now()-$;if(Z<0)return"";let J=Math.floor(Z/60000);if(J<1)return"just now";if(J<60)return`${J}m ago`;let Y=Math.floor(J/60);if(Y<24)return`${Y}h ago`;let Q=Math.floor(Y/24);if(Q>365)return`${Math.floor(Q/365)}y ago`;return`${Q}d ago`}GH().catch(($)=>{try{process.stdin.setRawMode?.(!1),process.stdout.write("\x1B[?1049l"),process.stdout.write("\x1B[?25h")}catch{}console.error("Fatal:",$),process.exit(1)});