clawdi 0.12.10-beta.45 → 0.12.10-beta.46

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 +1 -1
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -519,7 +519,7 @@ ${G.map((Y)=>`- ${Y.target}: ${Y.reason}`).join(`
519
519
  };
520
520
  }
521
521
  })();
522
- `,ej$=new Set(["connection","keep-alive","proxy-authenticate","proxy-authorization","proxy-connection","te","trailer","transfer-encoding","upgrade"]),$I$=new Set(["forwarded","x-forwarded","x-forwarded-for","x-forwarded-host","x-forwarded-port","x-forwarded-proto","x-forwarded-server","x-real-ip"]);II$=_.object({v:_.literal(1),sub:_.literal(tj$),deployment_id:_.string().min(1),runtime:_.enum(["openclaw","hermes"]),jti:_.string().min(1).max(128),iat:_.number().int().nonnegative(),exp:_.number().int().nonnegative()}).strict()});var L6=!1;import{createHash as hI$}from"node:crypto";import{join as zp}from"node:path";function FE($,J){if(!J)return $;let W=lI$(J.channels),Q=nI$($.manifest,W),X={...$.localSecretValues??{},...JR$(W,Q.projection?.channelCredentials)};return{...$,manifest:Q,sourceManifest:$.sourceManifest??$.manifest,localSecretValues:Object.keys(X).length>0?X:void 0}}function lI$($){let J=[];for(let W of $){if(W.status!=="active")continue;for(let Q of W.runtime_links){if(Q.status!=="active"||!Q.agent_token)continue;let X=UR$(W);J.push({account:W,accountKey:X,linkId:Q.id,agentId:Q.agent_id,agentToken:Q.agent_token,secretRef:XR$(W.provider,X),placeholderSecretRef:QR$(W.provider,X),credentials:(W.runtime_credentials??[]).filter((G)=>G.agent_link_id===Q.id)})}}return J.sort((W,Q)=>`${W.account.provider}:${W.accountKey}`.localeCompare(`${Q.account.provider}:${Q.accountKey}`))}function nI$($,J){let W=sI$(J,$.controlPlane.apiUrl),Q=qR$($),X=iI$(J,Q,HR$($)),G={...$,projection:{...$.projection??{},channels:dI$(J,$.controlPlane.apiUrl,Q),channelCredentials:X},egressProfiles:eI$($.egressProfiles,W)};return rI$(pI$(G,J),J)}function dI$($,J,W){let Q={};for(let X of $){let G=X.account.provider;if(G==="whatsapp"&&!L6)continue;if(G==="telegram"){let Y=_E(Q,"telegram",X.accountKey);Y.accounts[X.accountKey]={enabled:!0,botToken:NE(X),dmPolicy:"open",groupPolicy:"open",allowFrom:["*"],capabilities:{inlineButtons:"all"},groups:{"*":{requireMention:!1}}};continue}if(G==="discord"){let Y=_E(Q,"discord",X.accountKey);Y.accounts[X.accountKey]={enabled:!0,token:NE(X),dmPolicy:"open",groupPolicy:"open",allowFrom:["*"],guilds:{"*":{requireMention:!1,users:["*"]}}};continue}if(G==="whatsapp"){let Y=_E(Q,"whatsapp",X.accountKey),z=Dp(X,W,{openclaw:!0,hermes:!1});Y.accounts[X.accountKey]={enabled:!0,wsUrl:`${BR$(wp(J))}/v1/channels/whatsapp/${X.account.id}/baileys`,token:NE(X),...z?{authDir:z.authDir}:{}}}}return Q}function iI$($,J,W){return $.map((Q)=>Dp(Q,J,W)).filter((Q)=>Q!==null).sort((Q,X)=>`${Q.provider}:${Q.accountKey}:${Q.credentialId}`.localeCompare(`${X.provider}:${X.accountKey}:${X.credentialId}`))}function pI$($,J){let W=$.runtimes.openclaw;if(!W?.enabled)return $;let Q=W.run??{env:{},prependPath:[]},X=oI$(Q.secretEnv??{});for(let G of J){if(G.account.provider==="whatsapp"&&!L6)continue;X[Up(G)]=G.placeholderSecretRef}if(!W.run&&Object.keys(X).length===0)return $;return{...$,runtimes:{...$.runtimes,openclaw:{...W,run:{...Q,secretEnv:X}}}}}function rI$($,J){let W=$.runtimes.hermes;if(!W?.enabled)return $;let Q=LE(J,"telegram"),X=LE(J,"discord"),G=L6?LE(J,"whatsapp"):null,z=(G?ME(G):[]).find((D)=>AE(D)!==null),H=W.run??{env:{},prependPath:[]},q=Yp(H.env??{},mI$),U=Yp(H.secretEnv??{},cI$);if(Q)q.TELEGRAM_ALLOW_ALL_USERS="true",q.HERMES_TELEGRAM_DISABLE_FALLBACK_IPS="true",U.TELEGRAM_BOT_TOKEN=Q.placeholderSecretRef;if(X)q.DISCORD_ALLOW_ALL_USERS="true",U.DISCORD_BOT_TOKEN=X.placeholderSecretRef;if(G&&z)q.WHATSAPP_ENABLED="true",q.WHATSAPP_MODE="bot",q.WHATSAPP_ALLOWED_USERS="*",U.HERMES_WA_CREDS_JSON=bE(G,z);return{...$,runtimes:{...$.runtimes,hermes:{...W,run:{...H,env:q,secretEnv:U}}}}}function LE($,J){return $.find((W)=>W.account.provider===J)??null}function NE($){return{source:"env",provider:"default",id:Up($)}}function Up($){return`${Hp}${Gp($.account.provider)}_${Gp($.accountKey)}${qp}`}function Gp($){return $.toUpperCase().replace(/[^A-Z0-9]+/g,"_").replace(/^_+|_+$/g,"")||"CHANNEL"}function oI$($){return Object.fromEntries(Object.entries($).filter(([J])=>!aI$(J)))}function aI$($){return $.startsWith(Hp)&&$.endsWith(qp)}function Yp($,J){let W=new Set(J),Q={};for(let[X,G]of Object.entries($))if(!W.has(X))Q[X]=G;return Q}function _E($,J,W){let Q=$[J];if(tI$(Q))return Q;let X={enabled:!0,defaultAccount:W,accounts:{}};return $[J]=X,X}function tI$($){return typeof $==="object"&&$!==null&&!Array.isArray($)&&typeof $.accounts==="object"&&$.accounts!==null&&!Array.isArray($.accounts)}function sI$($,J){let W=wp(J),Q=[];for(let X of $){let G=`${X.account.provider}-${X.accountKey}`;if(X.account.provider==="telegram")Q.push({id:`native-${G}-managed`,enabled:!0,kind:"http",match:{scheme:"https",host:"api.telegram.org",pathPrefix:"/bot",path:{type:"secretRefPrefix",secretRef:X.placeholderSecretRef,prefix:"/bot",suffix:"/"},headers:{},query:{}},rewrite:{upstreamBaseUrl:`${W}/v1/channels/telegram`,preservePath:!0,pathReplace:{type:"secretRefPrefix",secretRef:X.placeholderSecretRef,replacementSecretRef:X.secretRef,prefix:"/bot",suffix:"/"},setHeaders:{}},logging:{redactHeaders:["authorization"],redactUrlPatterns:["/bot[^/]+"]},priority:100,owner:"clawdi-native-channels"});if(X.account.provider==="discord")Q.push({id:`native-${G}-rest-managed`,enabled:!0,kind:"http",match:{scheme:"https",host:"discord.com",pathPrefix:"/api/",headers:{authorization:{type:"secretRefEquals",secretRef:X.placeholderSecretRef,prefix:"Bot "}},query:{}},rewrite:{upstreamBaseUrl:`${W}/v1/channels/discord`,preservePath:!0,setHeaders:{authorization:{type:"secretRef",secretRef:X.secretRef,prefix:"Bot "}}},logging:{redactHeaders:["authorization"],redactUrlPatterns:[]},priority:101,owner:"clawdi-native-channels"}),Q.push({id:`native-${G}-gateway-passthrough`,enabled:!0,kind:"passthrough",match:{scheme:"wss",host:"gateway.discord.gg",pathPrefix:"/",headers:{},query:{}},logging:{redactHeaders:["authorization"],redactUrlPatterns:[]},priority:201,owner:"clawdi-native-channels"});if(X.account.provider==="whatsapp")Q.push({id:`native-${G}-graph-managed`,enabled:!0,kind:"http",match:{scheme:"https",host:"graph.facebook.com",pathPrefix:"/v",headers:{authorization:{type:"secretRefEquals",secretRef:X.placeholderSecretRef,prefix:"Bearer "}},query:{}},rewrite:{upstreamBaseUrl:`${W}/v1/channels/whatsapp/graph`,preservePath:!0,setHeaders:{authorization:{type:"secretRef",secretRef:X.secretRef,prefix:"Bearer "}}},logging:{redactHeaders:["authorization"],redactUrlPatterns:[]},priority:102,owner:"clawdi-native-channels"})}return Q}function eI$($,J){let W=[...$?.profiles??[]],Q=new Set(J.map((X)=>X.id));return{profiles:[...W.filter((X)=>!Q.has(X.id)&&!$R$(X)),...J]}}function $R$($){return $.owner==="clawdi-native-channels"||$.id==="direct-provider-passthrough"||$.id.startsWith("direct-provider-passthrough-")}function JR$($,J){let W={},Q=WR$(J);for(let X of $){KE(W,X.secretRef,X.agentToken),KE(W,X.placeholderSecretRef,GR$(X.account.provider,X.accountKey));for(let G of ME(X)){let Y=AE(G);if(Y===null)continue;let z=bE(X,G);if(!Q.has(z))continue;KE(W,z,JSON.stringify(Y))}}return W}function WR$($){let J=new Set;if(!Array.isArray($))return J;for(let W of $){let Q=ow(W);if(Q?.provider!=="whatsapp"||Q.kind!=="whatsapp_baileys_auth_state")continue;let X=Array.isArray(Q.files)?Q.files:[];for(let G of X){let Y=ow(G),z=Bp(Y?.secretRef);if(Y?.path==="creds.json"&&z)J.add(z)}}return J}function KE($,J,W){$[J]=W,$[J.replace(/^secret:\/\//,"")]=W}function XR$($,J){return`secret://channels/${$}/${J}/agent-token`}function QR$($,J){return`secret://channels/${$}/${J}/placeholder-token`}function GR$($,J){let W=hI$("sha256").update(`${$}:${J}`).digest("hex").slice(0,32);if($==="telegram")return`999999999:${W}`;return`clawdi_${W}`}function Dp($,J,W){if(!L6)return null;let Q=ME($)[0];if(!Q||AE(Q)===null)return null;let X=YR$(J,$.accountKey),G={};if(W.openclaw)G.openclaw={authDir:X};if(W.hermes)G.hermes={sessionDir:zR$(J),credsJsonEnv:"HERMES_WA_CREDS_JSON"};if(!G.openclaw&&!G.hermes)return null;return{provider:"whatsapp",kind:"whatsapp_baileys_auth_state",accountId:$.account.id,accountKey:$.accountKey,linkId:$.linkId,credentialId:Q.id,authDir:X,files:[{path:"creds.json",secretRef:bE($,Q)}],targets:G}}function ME($){if($.account.provider!=="whatsapp")return[];return $.credentials.filter((J)=>J.provider==="whatsapp"&&J.kind==="whatsapp_baileys_auth_state")}function AE($){let J=ow($.material);if(J?.schemaVersion!=="clawdi.whatsappBaileysAuthState.v1")return null;let W=J.creds;if(!W||typeof W!=="object"||Array.isArray(W))return null;return W}function bE($,J){return`secret://channels/whatsapp/${$.accountKey}/credentials/${J.id}/creds-json`}function YR$($,J){return zp($,".openclaw","credentials","whatsapp",J)}function zR$($){return zp($,".hermes","platforms","whatsapp","session")}function HR$($){return{openclaw:$.runtimes.openclaw?.enabled===!0,hermes:$.runtimes.hermes?.enabled===!0}}function qR$($){let J=ow($.projection?.system);return(J?Bp(J.home):null)??process.env.HOME??"/home/clawdi"}function ow($){if(!$||typeof $!=="object"||Array.isArray($))return null;return $}function Bp($){return typeof $==="string"&&$.trim().length>0?$.trim():null}function UR$($){return`clawdi_${$.id.replace(/[^a-zA-Z0-9]/g,"").slice(0,12).toLowerCase()||DR$($.name)}`}function DR$($){return $.toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"").slice(0,24)||"channel"}function wp($){return $.replace(/\/+$/,"")}function BR$($){if($.startsWith("https://"))return`wss://${$.slice(8)}`;if($.startsWith("http://"))return`ws://${$.slice(7)}`;return $}var mI$,cI$,Hp="CLAWDI_CHANNEL_",qp="_AGENT_TOKEN";var Vp=K(()=>{mI$=["TELEGRAM_ALLOW_ALL_USERS","DISCORD_ALLOW_ALL_USERS","HERMES_TELEGRAM_DISABLE_FALLBACK_IPS","WHATSAPP_ENABLED","WHATSAPP_MODE","WHATSAPP_ALLOWED_USERS"],cI$=["TELEGRAM_BOT_TOKEN","DISCORD_BOT_TOKEN","HERMES_WA_CREDS_JSON"]});import{spawnSync as sw}from"node:child_process";import{createHash as Op}from"node:crypto";import{accessSync as wR$,constants as VR$,existsSync as Lp,mkdirSync as aw,readdirSync as OR$,readFileSync as Np,readlinkSync as LR$,renameSync as NR$,rmSync as jE,symlinkSync as _R$}from"node:fs";import{dirname as sY,join as SX}from"node:path";function _p($,J,W={}){let Q=$.clawdiCli?.packageSpec?.trim();if(!Q)return tY("not_requested",J,{packageSpec:null,registry:null,activeTarget:null,version:null});jR$(Q);let X=bR$($),G=IR$(J.cliBootstrapStatus);if(RR$(G,J,Q,X))return tY("current",J,{packageSpec:Q,registry:X,npmPrefix:G.npmPrefix??eY(G.activeTarget),activeTarget:G.activeTarget??null,version:G.version??null});let Y=ER$(J,Q,X);if(Y)return IE(J,{packageSpec:Q,registry:X,npmPrefix:Y.npmPrefix,activeTarget:Y.activeTarget,version:Y.version}),tY("current",J,{packageSpec:Q,registry:X,npmPrefix:Y.npmPrefix,activeTarget:Y.activeTarget,version:Y.version});if(W.deferInstall)return tY("deferred",J,{packageSpec:Q,registry:X,npmPrefix:G?.npmPrefix??J.cliNpmPrefix,activeTarget:G?.activeTarget??null,version:G?.version??null,error:W.deferReason??"CLI install retry is in backoff"});let z=G?.activeTarget??jp(J.cliManagedBin),H=z?eY(z):null,q=ZR$(J,Q,X);return Ep(J.cliManagedBin,q.activeTarget),IE(J,{packageSpec:Q,registry:X,npmPrefix:q.npmPrefix,activeTarget:q.activeTarget,version:q.version}),vR$(J,{packageSpec:Q,registry:X,installed:q,previousStatus:G,previousActiveTarget:z,manifestIdentity:W.manifestIdentity}),Ip(J,[q.npmPrefix,H]),tY("installed",J,{packageSpec:Q,registry:X,npmPrefix:q.npmPrefix,activeTarget:q.activeTarget,version:q.version})}function tY($,J,W){return{status:$,...W,npmPrefix:W.npmPrefix??J.cliNpmPrefix,npmCache:W.npmCache??J.cliNpmCache,activePath:J.cliManagedBin}}function bR$($){let J=$.clawdiCli?.registry;if(typeof J!=="string"||!J.trim())return null;let W=J.trim(),Q;try{let X=new URL(W);X.pathname=X.pathname.replace(/\/+$/,""),X.search="",X.hash="",Q=X.toString().replace(/\/$/,"")}catch{throw Error(`unsupported clawdi CLI registry: ${W}`)}if(Q!=="https://registry.npmjs.org")throw Error(`unsupported clawdi CLI registry: ${W}`);return"https://registry.npmjs.org"}function jR$($){if($==="clawdi")return;if(/^clawdi@[0-9]+\.[0-9]+\.[0-9]+(?:-[0-9A-Za-z][0-9A-Za-z.-]*)?(?:\+[0-9A-Za-z][0-9A-Za-z.-]*)?$/.test($))return;if(/^clawdi@[A-Za-z0-9._-]+$/.test($))return;if(/^\/usr\/local\/share\/clawdi\/bootstrap\/[^/]+\.tgz$/.test($)&&!$.includes(".."))return;throw Error(`clawdi CLI packageSpec must be clawdi, clawdi@<version-or-tag>, or a managed bootstrap tarball: ${$}`)}function IR$($){if(!Lp($))return null;try{let J=JSON.parse(Np($,"utf-8"));if(typeof J!=="object"||J===null||Array.isArray(J))return null;return J}catch{return null}}function RR$($,J,W,Q){if(!$)return!1;if($.status!=="installed"||$.source!=="npm")return!1;if($.packageSpec!==W)return!1;if(($.registry??null)!==Q)return!1;if($.activePath!==J.cliManagedBin)return!1;if(!$.activeTarget||!nQ($.activeTarget))return!1;if(!Kp($,W,Q))return!1;return nQ(J.cliManagedBin)}function ER$($,J,W){let Q=RE(J,W);if(!Q)return null;let X=bp($,Q),G=CR$($,J,W),Y=jp($.cliManagedBin);if(Y!==SX(X,"bin","clawdi")&&Y!==SX(G,"bin","clawdi"))return null;if(!nQ(Y)||!nQ($.cliManagedBin))return null;let z=Rp(Y);if(!Kp({version:z},J,W))return null;return{npmPrefix:eY(Y),activeTarget:Y,version:z}}function Kp($,J,W){let Q=Mp(J);if(Q)return!$.version||$.version===Q;if(!Fp(J))return!0;if(!$.version)return!1;let X=RE(J,W);return X===null||$.version===X}function Fp($){let J=/^clawdi@(.+)$/.exec($);if(!J)return!1;let W=J[1]??"";if(!/^(alpha|beta|canary|next|rc)$/.test(W))return!1;return!Ap(W)}function RE($,J){let W=Mp($);if(W)return W;if(!Fp($))return null;return PR$($,J)}function Mp($){let J=/^clawdi@(.+)$/.exec($);if(!J)return null;let W=J[1]??"";return Ap(W)?W:null}function Ap($){return/^[0-9]+\.[0-9]+\.[0-9]+(?:-[0-9A-Za-z][0-9A-Za-z.-]*)?(?:\+[0-9A-Za-z][0-9A-Za-z.-]*)?$/.test($)}function PR$($,J){let W=sw("npm",["view",$,"version","--json",...J?["--registry",J]:[]],{encoding:"utf8",timeout:FR$,env:{...process.env,NO_UPDATE_NOTIFIER:"1",NPM_CONFIG_UPDATE_NOTIFIER:"false"}});if(W.status!==0)return null;let Q=W.stdout.trim();if(!Q)return null;try{let X=JSON.parse(Q);return typeof X==="string"&&X.trim()?X.trim():null}catch{return Q}}function ZR$($,J,W){let Q=SR$($,J,W);if(kR$($,J,W,Q.version))throw Error(`clawdi CLI ${Q.version} is marked bad after rollback; waiting for a newer resolved version`);let X=Q.npmPrefix;aw(sY($.cliManagedBin),{recursive:!0}),aw(X,{recursive:!0}),aw($.cliNpmCache,{recursive:!0}),C8(sY($.cliManagedBin),493),C8($.cliNpmPrefix,493),C8(X,493),C8($.cliNpmCache,493);let G=["install","-g","--prefix",X,"--cache",$.cliNpmCache,"--ignore-scripts","--fetch-retries","2","--fetch-retry-mintimeout","1000","--fetch-retry-maxtimeout","10000","--fetch-timeout","60000","--omit=dev","--no-audit","--no-fund","--no-update-notifier",...W?["--registry",W]:[],Q.installPackageSpec],Y=sw("npm",G,{encoding:"utf8",timeout:KR$,env:{...process.env,NO_UPDATE_NOTIFIER:"1",NPM_CONFIG_UPDATE_NOTIFIER:"false"}});if(Y.status!==0)throw Error(`npm install ${Q.installPackageSpec} failed${Y.status===null?"":` (${Y.status})`}${Y.error?`: ${Y.error.message}`:""}${tw(Y.stdout,Y.stderr)}`);let z=`${X}/bin/clawdi`;if(!nQ(z))throw Error(`npm install completed but clawdi bin is missing: ${z}`);let H=Rp(z);return TR$(z),{npmPrefix:X,activeTarget:z,version:H}}function SR$($,J,W){let Q=RE(J,W);if(Q)return{installPackageSpec:`clawdi@${Q}`,npmPrefix:bp($,Q),version:Q};let X=Op("sha256").update(JSON.stringify({packageSpec:J,registry:W})).digest("hex").slice(0,16);return{installPackageSpec:J,npmPrefix:SX($.cliNpmPrefix,"packages",`tarball-${X}`),version:`tarball-${X}`}}function bp($,J){if(!/^[0-9A-Za-z._+-]+$/.test(J))throw Error(`resolved clawdi CLI version contains unsafe path characters: ${J}`);return SX($.cliNpmPrefix,"packages",J)}function CR$($,J,W){let Q=Op("sha256").update(JSON.stringify({packageSpec:J,registry:W})).digest("hex").slice(0,16);return SX($.cliNpmPrefix,"packages",Q)}function eY($){return sY(sY($))}function jp($){try{return LR$($)}catch{return null}}function Ip($,J){let W=SX($.cliNpmPrefix,"packages"),Q=new Set(J.filter((X)=>Boolean(X)));try{for(let X of OR$(W,{withFileTypes:!0})){if(!X.isDirectory())continue;let G=SX(W,X.name);if(!Q.has(G))jE(G,{recursive:!0,force:!0})}}catch{}}function tw($,J){let W=[$,J].filter(Boolean).join(`
522
+ `,ej$=new Set(["connection","keep-alive","proxy-authenticate","proxy-authorization","proxy-connection","te","trailer","transfer-encoding","upgrade"]),$I$=new Set(["forwarded","x-forwarded","x-forwarded-for","x-forwarded-host","x-forwarded-port","x-forwarded-proto","x-forwarded-server","x-real-ip"]);II$=_.object({v:_.literal(1),sub:_.literal(tj$),deployment_id:_.string().min(1),runtime:_.enum(["openclaw","hermes"]),jti:_.string().min(1).max(128),iat:_.number().int().nonnegative(),exp:_.number().int().nonnegative()}).strict()});var L6=!1;import{createHash as hI$}from"node:crypto";import{join as zp}from"node:path";function FE($,J){if(!J)return $;let W=lI$(J.channels),Q=nI$($.manifest,W),X={...$.localSecretValues??{},...JR$(W,Q.projection?.channelCredentials)};return{...$,manifest:Q,sourceManifest:$.sourceManifest??$.manifest,localSecretValues:Object.keys(X).length>0?X:void 0}}function lI$($){let J=[];for(let W of $){if(W.status!=="active")continue;for(let Q of W.runtime_links){if(Q.status!=="active"||!Q.agent_token)continue;let X=UR$(W);J.push({account:W,accountKey:X,linkId:Q.id,agentId:Q.agent_id,agentToken:Q.agent_token,secretRef:XR$(W.provider,X),placeholderSecretRef:QR$(W.provider,X),credentials:(W.runtime_credentials??[]).filter((G)=>G.agent_link_id===Q.id)})}}return J.sort((W,Q)=>`${W.account.provider}:${W.accountKey}`.localeCompare(`${Q.account.provider}:${Q.accountKey}`))}function nI$($,J){let W=sI$(J,$.controlPlane.apiUrl),Q=qR$($),X=iI$(J,Q,HR$($)),G={...$,projection:{...$.projection??{},channels:dI$(J,$.controlPlane.apiUrl,Q),channelCredentials:X},egressProfiles:eI$($.egressProfiles,W)};return rI$(pI$(G,J),J)}function dI$($,J,W){let Q={};for(let X of $){let G=X.account.provider;if(G==="whatsapp"&&!L6)continue;if(G==="telegram"){let Y=_E(Q,"telegram",X.accountKey);Y.accounts[X.accountKey]={enabled:!0,botToken:NE(X),dmPolicy:"open",groupPolicy:"open",allowFrom:["*"],capabilities:{inlineButtons:"all"},groups:{"*":{requireMention:!1}}};continue}if(G==="discord"){let Y=_E(Q,"discord",X.accountKey);Y.accounts[X.accountKey]={enabled:!0,token:NE(X),dmPolicy:"open",groupPolicy:"open",allowFrom:["*"],guilds:{"*":{requireMention:!1,users:["*"]}}};continue}if(G==="whatsapp"){let Y=_E(Q,"whatsapp",X.accountKey),z=Dp(X,W,{openclaw:!0,hermes:!1});Y.accounts[X.accountKey]={enabled:!0,wsUrl:`${BR$(wp(J))}/v1/channels/whatsapp/${X.account.id}/baileys`,token:NE(X),...z?{authDir:z.authDir}:{}}}}return Q}function iI$($,J,W){return $.map((Q)=>Dp(Q,J,W)).filter((Q)=>Q!==null).sort((Q,X)=>`${Q.provider}:${Q.accountKey}:${Q.credentialId}`.localeCompare(`${X.provider}:${X.accountKey}:${X.credentialId}`))}function pI$($,J){let W=$.runtimes.openclaw;if(!W?.enabled)return $;let Q=W.run??{env:{},prependPath:[]},X=oI$(Q.secretEnv??{});for(let G of J){if(G.account.provider==="whatsapp"&&!L6)continue;X[Up(G)]=G.placeholderSecretRef}if(!W.run&&Object.keys(X).length===0)return $;return{...$,runtimes:{...$.runtimes,openclaw:{...W,run:{...Q,secretEnv:X}}}}}function rI$($,J){let W=$.runtimes.hermes;if(!W?.enabled)return $;let Q=LE(J,"telegram"),X=LE(J,"discord"),G=L6?LE(J,"whatsapp"):null,z=(G?ME(G):[]).find((D)=>AE(D)!==null),H=W.run??{env:{},prependPath:[]},q=Yp(H.env??{},mI$),U=Yp(H.secretEnv??{},cI$);if(Q)q.TELEGRAM_ALLOW_ALL_USERS="true",q.HERMES_TELEGRAM_DISABLE_FALLBACK_IPS="true",U.TELEGRAM_BOT_TOKEN=Q.placeholderSecretRef;if(X)q.DISCORD_ALLOW_ALL_USERS="true",U.DISCORD_BOT_TOKEN=X.placeholderSecretRef;if(G&&z)q.WHATSAPP_ENABLED="true",q.WHATSAPP_MODE="bot",q.WHATSAPP_ALLOWED_USERS="*",U.HERMES_WA_CREDS_JSON=bE(G,z);return{...$,runtimes:{...$.runtimes,hermes:{...W,run:{...H,env:q,secretEnv:U}}}}}function LE($,J){return $.find((W)=>W.account.provider===J)??null}function NE($){return{source:"env",provider:"default",id:Up($)}}function Up($){return`${Hp}${Gp($.account.provider)}_${Gp($.accountKey)}${qp}`}function Gp($){return $.toUpperCase().replace(/[^A-Z0-9]+/g,"_").replace(/^_+|_+$/g,"")||"CHANNEL"}function oI$($){return Object.fromEntries(Object.entries($).filter(([J])=>!aI$(J)))}function aI$($){return $.startsWith(Hp)&&$.endsWith(qp)}function Yp($,J){let W=new Set(J),Q={};for(let[X,G]of Object.entries($))if(!W.has(X))Q[X]=G;return Q}function _E($,J,W){let Q=$[J];if(tI$(Q))return Q;let X={enabled:!0,defaultAccount:W,accounts:{}};return $[J]=X,X}function tI$($){return typeof $==="object"&&$!==null&&!Array.isArray($)&&typeof $.accounts==="object"&&$.accounts!==null&&!Array.isArray($.accounts)}function sI$($,J){let W=wp(J),Q=[];for(let X of $){let G=`${X.account.provider}-${X.accountKey}`;if(X.account.provider==="telegram")Q.push({id:`native-${G}-managed`,enabled:!0,kind:"http",match:{scheme:"https",host:"api.telegram.org",pathPrefix:"/bot",path:{type:"secretRefPrefix",secretRef:X.placeholderSecretRef,prefix:"/bot",suffix:"/"},headers:{},query:{}},rewrite:{upstreamBaseUrl:`${W}/v1/channels/telegram`,preservePath:!0,pathReplace:{type:"secretRefPrefix",secretRef:X.placeholderSecretRef,replacementSecretRef:X.secretRef,prefix:"/bot",suffix:"/"},setHeaders:{}},logging:{redactHeaders:["authorization"],redactUrlPatterns:["/bot[^/]+"]},priority:100,owner:"clawdi-native-channels"});if(X.account.provider==="discord")Q.push({id:`native-${G}-rest-managed`,enabled:!0,kind:"http",match:{scheme:"https",host:"discord.com",pathPrefix:"/api/",headers:{authorization:{type:"secretRefEquals",secretRef:X.placeholderSecretRef,prefix:"Bot "}},query:{}},rewrite:{upstreamBaseUrl:`${W}/v1/channels/discord`,preservePath:!0,setHeaders:{authorization:{type:"secretRef",secretRef:X.secretRef,prefix:"Bot "}}},logging:{redactHeaders:["authorization"],redactUrlPatterns:[]},priority:101,owner:"clawdi-native-channels"}),Q.push({id:`native-${G}-gateway-passthrough`,enabled:!0,kind:"passthrough",match:{scheme:"wss",host:"gateway.discord.gg",pathPrefix:"/",headers:{},query:{}},logging:{redactHeaders:["authorization"],redactUrlPatterns:[]},priority:201,owner:"clawdi-native-channels"});if(X.account.provider==="whatsapp")Q.push({id:`native-${G}-graph-managed`,enabled:!0,kind:"http",match:{scheme:"https",host:"graph.facebook.com",pathPrefix:"/v",headers:{authorization:{type:"secretRefEquals",secretRef:X.placeholderSecretRef,prefix:"Bearer "}},query:{}},rewrite:{upstreamBaseUrl:`${W}/v1/channels/whatsapp/graph`,preservePath:!0,setHeaders:{authorization:{type:"secretRef",secretRef:X.secretRef,prefix:"Bearer "}}},logging:{redactHeaders:["authorization"],redactUrlPatterns:[]},priority:102,owner:"clawdi-native-channels"})}return Q}function eI$($,J){let W=[...$?.profiles??[]],Q=new Set(J.map((X)=>X.id));return{profiles:[...W.filter((X)=>!Q.has(X.id)&&!$R$(X)),...J]}}function $R$($){return $.owner==="clawdi-native-channels"||$.id==="direct-provider-passthrough"||$.id.startsWith("direct-provider-passthrough-")}function JR$($,J){let W={},Q=WR$(J);for(let X of $){KE(W,X.secretRef,X.agentToken),KE(W,X.placeholderSecretRef,GR$(X.account.provider,X.accountKey));for(let G of ME(X)){let Y=AE(G);if(Y===null)continue;let z=bE(X,G);if(!Q.has(z))continue;KE(W,z,JSON.stringify(Y))}}return W}function WR$($){let J=new Set;if(!Array.isArray($))return J;for(let W of $){let Q=ow(W);if(Q?.provider!=="whatsapp"||Q.kind!=="whatsapp_baileys_auth_state")continue;let X=Array.isArray(Q.files)?Q.files:[];for(let G of X){let Y=ow(G),z=Bp(Y?.secretRef);if(Y?.path==="creds.json"&&z)J.add(z)}}return J}function KE($,J,W){$[J]=W,$[J.replace(/^secret:\/\//,"")]=W}function XR$($,J){return`secret://channels/${$}/${J}/agent-token`}function QR$($,J){return`secret://channels/${$}/${J}/placeholder-token`}function GR$($,J){let W=hI$("sha256").update(`${$}:${J}`).digest("hex").slice(0,32);if($==="telegram")return`999999999:${W}`;return`clawdi_${W}`}function Dp($,J,W){if(!L6)return null;let Q=ME($)[0];if(!Q||AE(Q)===null)return null;let X=YR$(J,$.accountKey),G={};if(W.openclaw)G.openclaw={authDir:X};if(W.hermes)G.hermes={sessionDir:zR$(J),credsJsonEnv:"HERMES_WA_CREDS_JSON"};if(!G.openclaw&&!G.hermes)return null;return{provider:"whatsapp",kind:"whatsapp_baileys_auth_state",accountId:$.account.id,accountKey:$.accountKey,linkId:$.linkId,credentialId:Q.id,authDir:X,files:[{path:"creds.json",secretRef:bE($,Q)}],targets:G}}function ME($){if($.account.provider!=="whatsapp")return[];return $.credentials.filter((J)=>J.provider==="whatsapp"&&J.kind==="whatsapp_baileys_auth_state")}function AE($){let J=ow($.material);if(J?.schemaVersion!=="clawdi.whatsappBaileysAuthState.v1")return null;let W=J.creds;if(!W||typeof W!=="object"||Array.isArray(W))return null;return W}function bE($,J){return`secret://channels/whatsapp/${$.accountKey}/credentials/${J.id}/creds-json`}function YR$($,J){return zp($,".openclaw","credentials","whatsapp",J)}function zR$($){return zp($,".hermes","platforms","whatsapp","session")}function HR$($){return{openclaw:$.runtimes.openclaw?.enabled===!0,hermes:$.runtimes.hermes?.enabled===!0}}function qR$($){let J=ow($.projection?.system);return(J?Bp(J.home):null)??process.env.HOME??"/home/clawdi"}function ow($){if(!$||typeof $!=="object"||Array.isArray($))return null;return $}function Bp($){return typeof $==="string"&&$.trim().length>0?$.trim():null}function UR$($){return`clawdi_${$.id.replace(/[^a-zA-Z0-9]/g,"").slice(0,12).toLowerCase()||DR$($.name)}`}function DR$($){return $.toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"").slice(0,24)||"channel"}function wp($){return $.replace(/\/+$/,"")}function BR$($){if($.startsWith("https://"))return`wss://${$.slice(8)}`;if($.startsWith("http://"))return`ws://${$.slice(7)}`;return $}var mI$,cI$,Hp="CLAWDI_CHANNEL_",qp="_AGENT_TOKEN";var Vp=K(()=>{mI$=["TELEGRAM_ALLOW_ALL_USERS","DISCORD_ALLOW_ALL_USERS","HERMES_TELEGRAM_DISABLE_FALLBACK_IPS","WHATSAPP_ENABLED","WHATSAPP_MODE","WHATSAPP_ALLOWED_USERS"],cI$=["TELEGRAM_BOT_TOKEN","DISCORD_BOT_TOKEN","HERMES_WA_CREDS_JSON"]});import{spawnSync as sw}from"node:child_process";import{createHash as Op}from"node:crypto";import{accessSync as wR$,constants as VR$,existsSync as Lp,mkdirSync as aw,readdirSync as OR$,readFileSync as Np,readlinkSync as LR$,renameSync as NR$,rmSync as jE,symlinkSync as _R$}from"node:fs";import{dirname as sY,join as SX}from"node:path";function _p($,J,W={}){let Q=$.clawdiCli?.packageSpec?.trim();if(!Q)return tY("not_requested",J,{packageSpec:null,registry:null,activeTarget:null,version:null});jR$(Q);let X=bR$($),G=IR$(J.cliBootstrapStatus);if(RR$(G,J,Q,X))return tY("current",J,{packageSpec:Q,registry:X,npmPrefix:G.npmPrefix??eY(G.activeTarget),activeTarget:G.activeTarget??null,version:G.version??null});let Y=ER$(J,Q,X);if(Y)return IE(J,{packageSpec:Q,registry:X,npmPrefix:Y.npmPrefix,activeTarget:Y.activeTarget,version:Y.version}),tY("current",J,{packageSpec:Q,registry:X,npmPrefix:Y.npmPrefix,activeTarget:Y.activeTarget,version:Y.version});if(W.deferInstall)return tY("deferred",J,{packageSpec:Q,registry:X,npmPrefix:G?.npmPrefix??J.cliNpmPrefix,activeTarget:G?.activeTarget??null,version:G?.version??null,error:W.deferReason??"CLI install retry is in backoff"});let z=G?.activeTarget??jp(J.cliManagedBin),H=z?eY(z):null,q=ZR$(J,Q,X);return Ep(J.cliManagedBin,q.activeTarget),IE(J,{packageSpec:Q,registry:X,npmPrefix:q.npmPrefix,activeTarget:q.activeTarget,version:q.version}),vR$(J,{packageSpec:Q,registry:X,installed:q,previousStatus:G,previousActiveTarget:z,manifestIdentity:W.manifestIdentity}),Ip(J,[q.npmPrefix,H]),tY("installed",J,{packageSpec:Q,registry:X,npmPrefix:q.npmPrefix,activeTarget:q.activeTarget,version:q.version})}function tY($,J,W){return{status:$,...W,npmPrefix:W.npmPrefix??J.cliNpmPrefix,npmCache:W.npmCache??J.cliNpmCache,activePath:J.cliManagedBin}}function bR$($){let J=$.clawdiCli?.registry;if(typeof J!=="string"||!J.trim())return null;let W=J.trim(),Q;try{let X=new URL(W);X.pathname=X.pathname.replace(/\/+$/,""),X.search="",X.hash="",Q=X.toString().replace(/\/$/,"")}catch{throw Error(`unsupported clawdi CLI registry: ${W}`)}if(Q!=="https://registry.npmjs.org")throw Error(`unsupported clawdi CLI registry: ${W}`);return"https://registry.npmjs.org"}function jR$($){if($==="clawdi")return;if(/^clawdi@[0-9]+\.[0-9]+\.[0-9]+(?:-[0-9A-Za-z][0-9A-Za-z.-]*)?(?:\+[0-9A-Za-z][0-9A-Za-z.-]*)?$/.test($))return;if(/^clawdi@[A-Za-z0-9._-]+$/.test($))return;if(/^\/usr\/local\/share\/clawdi\/bootstrap\/[^/]+\.tgz$/.test($)&&!$.includes(".."))return;throw Error(`clawdi CLI packageSpec must be clawdi, clawdi@<version-or-tag>, or a managed bootstrap tarball: ${$}`)}function IR$($){if(!Lp($))return null;try{let J=JSON.parse(Np($,"utf-8"));if(typeof J!=="object"||J===null||Array.isArray(J))return null;return J}catch{return null}}function RR$($,J,W,Q){if(!$)return!1;if($.status!=="installed"||$.source!=="npm")return!1;if($.packageSpec!==W)return!1;if(($.registry??null)!==Q)return!1;if($.activePath!==J.cliManagedBin)return!1;if(!$.activeTarget||!nQ($.activeTarget))return!1;if(!Kp(J,$,W,Q))return!1;return nQ(J.cliManagedBin)}function ER$($,J,W){let Q=RE($,J,W);if(!Q)return null;let X=bp($,Q),G=CR$($,J,W),Y=jp($.cliManagedBin);if(Y!==SX(X,"bin","clawdi")&&Y!==SX(G,"bin","clawdi"))return null;if(!nQ(Y)||!nQ($.cliManagedBin))return null;let z=Rp(Y);if(!Kp($,{version:z},J,W))return null;return{npmPrefix:eY(Y),activeTarget:Y,version:z}}function Kp($,J,W,Q){let X=Mp(W);if(X)return!J.version||J.version===X;if(!Fp(W))return!0;if(!J.version)return!1;let G=RE($,W,Q);return G===null||J.version===G}function Fp($){let J=/^clawdi@(.+)$/.exec($);if(!J)return!1;let W=J[1]??"";if(!/^(alpha|beta|canary|next|rc)$/.test(W))return!1;return!Ap(W)}function RE($,J,W){let Q=Mp(J);if(Q)return Q;if(!Fp(J))return null;return PR$($,J,W)}function Mp($){let J=/^clawdi@(.+)$/.exec($);if(!J)return null;let W=J[1]??"";return Ap(W)?W:null}function Ap($){return/^[0-9]+\.[0-9]+\.[0-9]+(?:-[0-9A-Za-z][0-9A-Za-z.-]*)?(?:\+[0-9A-Za-z][0-9A-Za-z.-]*)?$/.test($)}function PR$($,J,W){let Q=sw("npm",["view",J,"version","--json","--cache",$.cliNpmCache,...W?["--registry",W]:[]],{encoding:"utf8",timeout:FR$,env:{...process.env,NO_UPDATE_NOTIFIER:"1",NPM_CONFIG_UPDATE_NOTIFIER:"false"}});if(Q.status!==0)return null;let X=Q.stdout.trim();if(!X)return null;try{let G=JSON.parse(X);return typeof G==="string"&&G.trim()?G.trim():null}catch{return X}}function ZR$($,J,W){let Q=SR$($,J,W);if(kR$($,J,W,Q.version))throw Error(`clawdi CLI ${Q.version} is marked bad after rollback; waiting for a newer resolved version`);let X=Q.npmPrefix;aw(sY($.cliManagedBin),{recursive:!0}),aw(X,{recursive:!0}),aw($.cliNpmCache,{recursive:!0}),C8(sY($.cliManagedBin),493),C8($.cliNpmPrefix,493),C8(X,493),C8($.cliNpmCache,493);let G=["install","-g","--prefix",X,"--cache",$.cliNpmCache,"--ignore-scripts","--fetch-retries","2","--fetch-retry-mintimeout","1000","--fetch-retry-maxtimeout","10000","--fetch-timeout","60000","--omit=dev","--no-audit","--no-fund","--no-update-notifier",...W?["--registry",W]:[],Q.installPackageSpec],Y=sw("npm",G,{encoding:"utf8",timeout:KR$,env:{...process.env,NO_UPDATE_NOTIFIER:"1",NPM_CONFIG_UPDATE_NOTIFIER:"false"}});if(Y.status!==0)throw Error(`npm install ${Q.installPackageSpec} failed${Y.status===null?"":` (${Y.status})`}${Y.error?`: ${Y.error.message}`:""}${tw(Y.stdout,Y.stderr)}`);let z=`${X}/bin/clawdi`;if(!nQ(z))throw Error(`npm install completed but clawdi bin is missing: ${z}`);let H=Rp(z);return TR$(z),{npmPrefix:X,activeTarget:z,version:H}}function SR$($,J,W){let Q=RE($,J,W);if(Q)return{installPackageSpec:`clawdi@${Q}`,npmPrefix:bp($,Q),version:Q};let X=Op("sha256").update(JSON.stringify({packageSpec:J,registry:W})).digest("hex").slice(0,16);return{installPackageSpec:J,npmPrefix:SX($.cliNpmPrefix,"packages",`tarball-${X}`),version:`tarball-${X}`}}function bp($,J){if(!/^[0-9A-Za-z._+-]+$/.test(J))throw Error(`resolved clawdi CLI version contains unsafe path characters: ${J}`);return SX($.cliNpmPrefix,"packages",J)}function CR$($,J,W){let Q=Op("sha256").update(JSON.stringify({packageSpec:J,registry:W})).digest("hex").slice(0,16);return SX($.cliNpmPrefix,"packages",Q)}function eY($){return sY(sY($))}function jp($){try{return LR$($)}catch{return null}}function Ip($,J){let W=SX($.cliNpmPrefix,"packages"),Q=new Set(J.filter((X)=>Boolean(X)));try{for(let X of OR$(W,{withFileTypes:!0})){if(!X.isDirectory())continue;let G=SX(W,X.name);if(!Q.has(G))jE(G,{recursive:!0,force:!0})}}catch{}}function tw($,J){let W=[$,J].filter(Boolean).join(`
523
523
  `).trim();return W?`: ${W.slice(0,1000)}`:""}function Rp($){let J=sw($,["--version"],{encoding:"utf8",timeout:MR$,env:{...process.env,CLAWDI_NO_AUTO_UPDATE:"1",CLAWDI_NO_UPDATE_CHECK:"1"}});if(J.status!==0)throw Error(`installed clawdi did not pass --version smoke check${J.status===null?"":` (${J.status})`}${J.error?`: ${J.error.message}`:""}${tw(J.stdout,J.stderr)}`);let W=J.stdout.trim().split(/\r?\n/,1)[0]?.trim();if(!W)throw Error("installed clawdi --version returned empty output");return W}function TR$($){let J=sw($,["runtime","verify","--json"],{encoding:"utf8",timeout:AR$,env:{...process.env,CLAWDI_NO_AUTO_UPDATE:"1",CLAWDI_NO_UPDATE_CHECK:"1"}});if(J.status!==0)throw Error(`installed clawdi did not pass runtime verify self-check${J.status===null?"":` (${J.status})`}${J.error?`: ${J.error.message}`:""}${tw(J.stdout,J.stderr)}`);let W=J.stdout.trim();if(!W)throw Error("installed clawdi runtime verify self-check returned empty output");try{let Q=JSON.parse(W);if(!Q||typeof Q!=="object"||Array.isArray(Q)||Q.status!=="ok")throw Error("status was not ok")}catch(Q){throw Error(`installed clawdi runtime verify self-check returned invalid JSON: ${Q instanceof Error?Q.message:String(Q)}${tw(J.stdout,J.stderr)}`)}}function Ep($,J){let W=sY($);aw(W,{recursive:!0});let Q=`${W}/.clawdi.next.${process.pid}.${Date.now()}`;try{jE(Q,{force:!0}),_R$(J,Q),NR$(Q,$)}catch(X){throw jE(Q,{force:!0}),X}}function IE($,J){V$($.cliBootstrapStatus,`${JSON.stringify({schemaVersion:"clawdi.cliNpmBootstrapStatus.v1",generatedAt:new Date().toISOString(),status:"installed",source:"npm",packageSpec:J.packageSpec,registry:J.registry,npmPrefix:J.npmPrefix,npmCache:$.cliNpmCache,activePath:$.cliManagedBin,activeTarget:J.activeTarget,version:J.version,error:null},null,2)}
524
524
  `,{mode:420,dirMode:493})}function Pp($,J,W={}){let Q=ew($),X=Q.pendingUpgrade??null;if(!X)return{status:"not_pending",version:null,previousVersion:null,activeTarget:null,previousActiveTarget:null};if(!X.rollbackEligible)return{status:"not_pending",version:X.version,previousVersion:X.previousVersion,activeTarget:X.activeTarget,previousActiveTarget:X.previousActiveTarget};if(!Sp(X,W))return{status:"not_pending",version:X.version,previousVersion:X.previousVersion,activeTarget:X.activeTarget,previousActiveTarget:X.previousActiveTarget};if(!X.previousActiveTarget||!nQ(X.previousActiveTarget))return{status:"error",version:X.version,previousVersion:X.previousVersion,activeTarget:X.activeTarget,previousActiveTarget:X.previousActiveTarget,error:"previous clawdi CLI target is missing or not executable"};try{if(Ep($.cliManagedBin,X.previousActiveTarget),X.previousStatus?.packageSpec&&X.previousStatus.activeTarget)IE($,{packageSpec:X.previousStatus.packageSpec,registry:X.previousStatus.registry??null,npmPrefix:X.previousStatus.npmPrefix??eY(X.previousActiveTarget),activeTarget:X.previousActiveTarget,version:X.previousStatus.version??X.previousVersion??"unknown"});let G=$V(Q);return G.pendingUpgrade=null,G.badVersions=gR$(G.badVersions??[],{packageSpec:X.packageSpec,registry:X.registry,version:X.version,reason:J,markedAt:new Date().toISOString()}),EE($,G),Ip($,[X.previousNpmPrefix]),{status:"rolled_back",version:X.version,previousVersion:X.previousVersion,activeTarget:X.activeTarget,previousActiveTarget:X.previousActiveTarget,error:null}}catch(G){return{status:"error",version:X.version,previousVersion:X.previousVersion,activeTarget:X.activeTarget,previousActiveTarget:X.previousActiveTarget,error:G instanceof Error?G.message:String(G)}}}function Zp($,J,W={}){let Q=ew($),X=Q.pendingUpgrade??null;if(!X)return;if(X.version!==J)return;if(!Sp(X,W))return;let G=$V(Q);G.pendingUpgrade=null,EE($,G)}function vR$($,J){let W=$V(ew($));W.pendingUpgrade={packageSpec:J.packageSpec,registry:J.registry,version:J.installed.version,npmPrefix:J.installed.npmPrefix,activeTarget:J.installed.activeTarget,previousStatus:J.previousStatus,previousActiveTarget:J.previousActiveTarget,previousNpmPrefix:J.previousActiveTarget?eY(J.previousActiveTarget):null,previousVersion:J.previousStatus?.version??null,manifestGeneration:J.manifestIdentity?.generation??null,manifestEtag:J.manifestIdentity?.etag??null,rollbackEligible:J.manifestIdentity?.previouslyApplied===!0,installedAt:new Date().toISOString()},EE($,W)}function kR$($,J,W,Q){return(ew($).badVersions??[]).some((G)=>G.packageSpec===J&&(G.registry??null)===W&&G.version===Q)}function ew($){if(!Lp($.cliUpgradeState))return{schemaVersion:"clawdi.cliUpgradeState.v1"};try{let J=JSON.parse(Np($.cliUpgradeState,"utf-8"));if(typeof J!=="object"||J===null||Array.isArray(J))return{schemaVersion:"clawdi.cliUpgradeState.v1"};return J}catch{return{schemaVersion:"clawdi.cliUpgradeState.v1"}}}function EE($,J){V$($.cliUpgradeState,`${JSON.stringify($V(J),null,2)}
525
525
  `,{mode:420,dirMode:493})}function $V($){return{schemaVersion:"clawdi.cliUpgradeState.v1",pendingUpgrade:$.pendingUpgrade??null,badVersions:$.badVersions??[]}}function gR$($,J){let W=$.filter((Q)=>Q.packageSpec!==J.packageSpec||(Q.registry??null)!==J.registry||Q.version!==J.version);return W.push(J),W}function Sp($,J){if($.manifestEtag&&J.etag&&$.manifestEtag!==J.etag)return!1;if($.manifestGeneration!==null&&J.generation!==void 0&&J.generation!==null&&$.manifestGeneration!==J.generation)return!1;return!0}function nQ($){try{return wR$($,VR$.X_OK),!0}catch{return!1}}var KR$=180000,FR$=30000,MR$=20000,AR$=20000;var Cp=K(()=>{Y1()});function kp($){return`${$.replace(/\/+$/,"")}/models`}function gp($){if(!vp($)||!Array.isArray($.data))return[];let J=[],W=new Set;for(let Q of $.data){if(!vp(Q))continue;let X=XV(Q.id);if(!X||W.has(X))continue;W.add(X),J.push(X)}return J}function xp($){let J=XV($.seedModel);if($.liveModelIds===null)return{resolvedModel:J,reason:J?"kept_seed_after_fetch_failure":"no_candidate_model"};let W=fp($.liveModelIds);if(J&&W.includes(J))return{resolvedModel:J,reason:"kept_valid_seed"};let Q=J?WV(J):null,X=xR$(W,Q);if(X)return{resolvedModel:X,reason:"upgraded_to_latest"};if(J)return{resolvedModel:J,reason:"kept_seed_without_live_models"};return{resolvedModel:null,reason:"no_candidate_model"}}function xR$($,J){let W=fp($);if(W.length===0)return null;let Q=uR$(J),X=Q===null?W:W.filter((z)=>WV(z)===Q);return[...X.length>0?X:W].sort(fR$)[0]??null}function fR$($,J){let W=WV($),Q=WV(J),X=yR$(Tp($,W),Tp(J,Q));if(X!==0)return X;let G=W.localeCompare(Q);if(G!==0)return G;return $.localeCompare(J)}function Tp($,J){let W=$.slice(J.length);if(W.startsWith("/"))W=W.slice(1);W=W.replace(/^-+/,"").trim();let Q=[],X="",G="start",Y="";for(let U of W){if(G==="start"){if(U==="v"||U==="V"){G="in_version";continue}if(PE(U)){G="in_version",Y+=U;continue}if(U==="-"||U==="_"||U===".")continue;G="in_suffix",X+=U;continue}if(G==="in_version"){if(PE(U)){Y+=U;continue}if(U==="."){if(Y.includes("."))JV(Q,Y),Y="";else Y+=U;continue}if(U==="-"||U==="_"||U==="."){JV(Q,Y),Y="",G="between";continue}JV(Q,Y),Y="",G="in_suffix",X+=U;continue}if(G==="between"){if(PE(U)){G="in_version",Y=U;continue}if(U==="v"||U==="V"){G="in_version";continue}if(U==="-"||U==="_"||U===".")continue;G="in_suffix",X+=U;continue}X+=U}if(G==="in_version")JV(Q,Y);let z=Q.map((U)=>-U),H=X.toLowerCase().replace(/^[-_.]+|[-_.]+$/g,"").trim(),q=H&&hR$[H]===0?0:1;return[...z,q,H]}function yR$($,J){let W=Math.min($.length,J.length);for(let Q=0;Q<W;Q+=1){let X=$[Q],G=J[Q];if(X===G)continue;if(typeof X==="number"&&typeof G==="number")return X-G;return String(X).localeCompare(String(G))}return $.length-J.length}function WV($){let J=XV($);if(!J)return"";let W=J.lastIndexOf("/"),Q=W>=0?J.slice(0,W+1):"",X=W>=0?J.slice(W+1):J,G=X.search(/[0-9]/);if(G<=0)return J;let Y=X.slice(0,G).replace(/[-_.]+$/g,"");return`${Q}${Y||X}`}function fp($){let J=[],W=new Set;for(let Q of $){let X=XV(Q);if(!X||W.has(X))continue;W.add(X),J.push(X)}return J}function XV($){if(typeof $!=="string")return null;let J=$.trim();return J.length>0?J:null}function uR$($){let J=$?.trim();return J?J:null}function JV($,J){let W=J.replace(/\.+$/g,"");if(!W)return;let Q=Number.parseFloat(W);if(Number.isFinite(Q))$.push(Q)}function PE($){return $>="0"&&$<="9"}function vp($){return typeof $==="object"&&$!==null&&!Array.isArray($)}var hR$;var yp=K(()=>{hR$={max:0,plus:0,pro:0,turbo:0}});import{existsSync as iQ,readFileSync as mR$}from"node:fs";import{isAbsolute as QV,join as cR$}from"node:path";function pQ($){return JSON.parse(mR$($,"utf-8"))}function oR$($){if(!$||typeof $!=="object"||Array.isArray($))return null;return $}function aR$($){return hp.safeParse($).success}function $z($){return $.issues.map((J)=>{return`${J.path.length>0?`${J.path.join(".")}: `:""}${J.message}`})}function tR$($){return WW.parse($)}function sR$($){let J=WW.safeParse($);return J.success?J.data:null}function ZE($){let J=WW.safeParse($);if(J.success)return{manifest:J.data};let W=ti.safeParse($);if(W.success)return{manifest:XE$(W.data.manifest),secretValues:$W(W.data.secretValues)};if(eR$($))throw W.error;throw J.error}function eR$($){if(typeof $!=="object"||$===null||Array.isArray($))return!1;let J=$.manifest;if(typeof J!=="object"||J===null||Array.isArray(J))return!1;return J.schemaVersion==="clawdi.hosted-runtime.manifest.v1"}function SE($){if(typeof $!=="object"||$===null||Array.isArray($))return null;let J=$,W=J.manifest,Q=typeof W==="object"&&W!==null&&!Array.isArray(W)?W.generation:J.generation;return typeof Q==="number"&&Number.isInteger(Q)?Q:null}function cp($){return mQ($),WE($)}function lp($){let J=process.env.CLAWDI_RUNTIME_MANIFEST_URL?.trim();if(J)return{schemaVersion:"clawdi.runtimeSource.v1",type:"http",url:J};return $E$($)}function $E$($){if(!iQ($.runtimeSource))throw Error(`runtime source config does not exist: ${$.runtimeSource}`);let J=mp.safeParse(pQ($.runtimeSource));if(!J.success)throw Error(`invalid runtime source config at ${$.runtimeSource}: ${$z(J.error).join("; ")}`);return J.data}async function np($,J={}){let W=lp($),Q=cp($);if(!Q)throw Error(`missing ${nY($)}`);let X=W.url,G=Number.parseInt(process.env.CLAWDI_RUNTIME_MANIFEST_TIMEOUT_MS??"",10)||W.timeoutMs||15000,Y=new AbortController,z=setTimeout(()=>Y.abort(),G);try{let H=await fetch(X,{method:"GET",headers:{accept:"application/json",authorization:`Bearer ${Q}`,...J.ifNoneMatch?{"if-none-match":J.ifNoneMatch}:{}},signal:Y.signal}),q=H.headers.get("etag")??void 0;if(H.status===304)return{url:X,notModified:!0,etag:q};if(!H.ok){let U=await H.text().catch(()=>"");if(H.status===401||H.status===403)throw new GV("manifest",H.status,U);throw Error(`runtime manifest request failed: HTTP ${H.status}${U?` ${U.slice(0,200)}`:""}`)}return{url:X,raw:await H.json(),etag:q}}finally{clearTimeout(z)}}function JE$($){let J=new URL($.url),W=J.searchParams.get("environment_id"),Q=J.pathname.replace(/\/+$/,""),X=["/v1/runtime/manifest","/api/runtime/manifest"].find((G)=>Q.endsWith(G));if(X){let G=Q.slice(0,-X.length);J.pathname=`${G}/v1/channels`}else J.pathname=new URL("v1/channels",J).pathname;if(J.search="",W)J.searchParams.set("environment_id",W);return J.hash="",J.toString()}async function WE$($,J={}){let W=lp($),Q=cp($);if(!Q)throw Error(`missing ${nY($)}`);let X=JE$(W),G=Number.parseInt(process.env.CLAWDI_RUNTIME_CHANNELS_TIMEOUT_MS??"",10)||W.timeoutMs||15000,Y=new AbortController,z=setTimeout(()=>Y.abort(),G);try{let H=await fetch(X,{method:"GET",headers:{accept:"application/json",authorization:`Bearer ${Q}`,...J.ifNoneMatch?{"if-none-match":J.ifNoneMatch}:{}},signal:Y.signal}),q=H.headers.get("etag")??void 0;if(H.status===304)return{url:X,notModified:!0,etag:q};if(!H.ok){let U=await H.text().catch(()=>"");if(H.status===401||H.status===403)throw new GV("channels",H.status,U);throw Error(`runtime channels request failed: HTTP ${H.status}${U?` ${U.slice(0,200)}`:""}`)}return{url:X,raw:await H.json(),etag:q}}finally{clearTimeout(z)}}async function vE($,J={}){let W;try{W=await np($,J)}catch(G){return{mode:"repair",stage:dp(G),errors:[`could not fetch runtime manifest: ${G instanceof Error?G.message:String(G)}`]}}if("notModified"in W)return{source:"remote-datasource",sourcePath:W.url,notModified:!0,etag:W.etag??J.ifNoneMatch};let Q;try{Q=ZE(W.raw)}catch(G){return{mode:"manifest-rejected",stage:"network",errors:G instanceof _.ZodError?$z(G):[String(G)],rejectedGeneration:SE(W.raw),activeGeneration:dQ($).generation??null}}let X=TE(Q,$,"remote-datasource",W.url);if("manifest"in X)return{...X,etag:W.etag};return X}async function YV($,J={}){let W;try{W=await WE$($,J)}catch(X){return{mode:"repair",stage:dp(X),errors:[`could not fetch runtime channels: ${X instanceof Error?X.message:String(X)}`]}}if("notModified"in W)return{source:"remote-datasource",sourcePath:W.url,notModified:!0,etag:W.etag??J.ifNoneMatch};let Q=rR$.safeParse(W.raw);if(!Q.success)return{mode:"repair",stage:"network",errors:$z(Q.error)};return{channels:Q.data,source:"remote-datasource",sourcePath:W.url,etag:W.etag}}function dp($){return $ instanceof GV?"auth":"network"}function XE$($){let J=$.system?.home||"/home/clawdi",W=$.system?.workspace||cR$(J,"clawdi"),Q=$.runtime,X=$.runtimes[Q];return{schemaVersion:qE,deploymentId:$.deploymentId,environmentId:$.environmentId||$.appId||$.deploymentId,instanceId:$.instanceId,generation:$.generation,minimumCliVersion:$.minimumCliVersion,issuedAt:$.issuedAt,expiresAt:$.expiresAt,workspaceRoot:W,runtime:Q,controlPlane:{apiUrl:YE$($)},clawdiCli:$.clawdiCli?{...iw,...$.clawdiCli,source:$.clawdiCli.source??iw.source}:{...iw},egressEngine:$.egressEngine,runtimes:{[Q]:{enabled:X.enabled,updateChannel:X.install?.channel,install:X.enabled&&X.install&&dw[Q]?{authority:"official",method:"official-installer",url:dw[Q]??"",home:X.paths?.home||J,args:X.install?.args??ni[Q]??[]}:void 0,run:ip(X.run,X.paths?.workspace,W),services:Object.fromEntries(Object.entries(X.services??{}).map(([G,Y])=>[G,GE$(Y,X.paths?.workspace,W)])),...QE$(X)}},bridge:$.bridge,projection:{sourceSchemaVersion:$.schemaVersion,system:$.system??null,providers:$.providers??{},...$.mcp===void 0?{}:{mcp:$.mcp},...$.tools===void 0?{}:{tools:$.tools}},liveSync:$.liveSync,egressProfiles:eu($),recovery:{cacheManifest:$.recovery?.cacheManifest??!0,allowOfflineBoot:$.recovery?.allowOfflineBoot??!0}}}function QE$($){let J=$.provider_ids??$.providerIds,W=$.primary_model??$.primaryModel,Q=typeof W==="object"&&W!==null&&!Array.isArray(W)?W:null,X=typeof Q?.provider_id==="string"?Q.provider_id:typeof Q?.providerId==="string"?Q.providerId:void 0,G=typeof Q?.model==="string"?Q.model:typeof W==="string"?W:void 0,Y=J?.filter((H)=>H.trim().length>0),z=X&&!Y?.includes(X)?[...Y??[],X]:Y;return{...z&&z.length>0?{provider_ids:z}:{},...X&&G?{primary_model:{provider_id:X,model:G}}:{}}}function ip($,J,W){if(!$&&!J)return;let Q=$?.cwd??J??W,X={env:$?.env??{},cwd:Q,prependPath:$?.prependPath??[]};if($?.command!==void 0)X.command=$.command;if($?.args!==void 0)X.args=$.args;if($?.secretEnv!==void 0)X.secretEnv=$.secretEnv;return X}function GE$($,J,W){return ip($,J,W)??{args:[],env:{},cwd:J??W,prependPath:[]}}function YE$($){let J=$.controlPlane.cloudApiUrl;if(J)return J;let W=$.controlPlane.manifestUrl;if(!W)return new URL(up()).origin;try{return new URL(W).origin}catch{return new URL(up()).origin}}function up(){let $=process.env.CLAWDI_RUNTIME_MANIFEST_URL?.trim();if($)return $;let J=process.env.CLAWDI_RUNTIME_SOURCE_PATH?.trim()||"/etc/clawdi/runtime-source.json";if(iQ(J)){let W=mp.safeParse(pQ(J));if(W.success)return W.data.url}return"https://runtime.invalid/manifest"}function dQ($){if(!iQ($.manifestLastGood))return{};let J=sR$(pQ($.manifestLastGood));if(!J)return{};return{instanceId:J.instanceId,generation:J.generation}}function pp($){if(!$.expiresAt)return null;let J=Date.parse($.expiresAt);if(!Number.isFinite(J))return`manifest expiresAt is not a valid timestamp: ${$.expiresAt}`;if(J<=Date.now())return`manifest expired at ${$.expiresAt}`;return null}function zE$($,J){let W=[],Q=pp($);if(Q)W.push(Q);if(!QV(J.userHome))W.push(`runtime HOME must be absolute: ${J.userHome}`);if($.workspaceRoot&&!QV($.workspaceRoot))W.push(`runtime workspaceRoot must be absolute: ${$.workspaceRoot}`);if($.runtime){let X=$.runtime,G=Object.keys($.runtimes);if(!G.includes(X))W.push(`manifest runtime ${X} must have a matching runtimes.${X} entry`);for(let z of G)if(z!==X)W.push(`single-runtime manifest must not declare runtimes.${z}`);if($.runtimes[X]?.enabled!==!0)W.push(`manifest runtime ${X} must be enabled`);let Y=$.bridge?.surfaces??[];if(X==="openclaw"&&Y.length>0){let z=Y[0];if(Y.length!==1||!z||z.name!=="openclaw"||z.kind!=="control-ui"||z.listenPort!==28789||z.upstreamHost!=="127.0.0.1"||z.upstreamPort!==18789)W.push("openclaw bridge surface must be openclaw control-ui 28789 -> 127.0.0.1:18789")}if(X==="hermes"){let z=Y[0];if(Y.length!==1||!z||z.name!=="hermes"||z.kind!=="control-ui"||z.listenPort!==28793||z.upstreamHost!=="127.0.0.1"||z.upstreamPort!==9119)W.push("hermes runtime must declare bridge surface 28793 -> 127.0.0.1:9119")}}for(let[X,G]of Object.entries($.runtimes)){if(!G.enabled)continue;let Y=G.run?.command?.trim();if(!PX(X)){if(G.install)W.push(`runtime ${X} install metadata is not supported by this Clawdi CLI; provide run.command or upgrade the CLI`);if(!Y)W.push(`runtime ${X} is not supported by this Clawdi CLI; provide run.command or upgrade the CLI`);continue}if(!G.install&&!Y&&!PX(X)){W.push(`runtime ${X} is enabled but missing install metadata`);continue}if(!G.install)continue;let z=dw[X];if(G.install.url!==z)W.push(`runtime ${X} must use official installer ${z}`);if(G.install.home!==J.userHome)W.push(`runtime ${X} install.home must match runtime HOME ${J.userHome}`);if(!QV(G.install.home))W.push(`runtime ${X} install.home must be absolute`);if(G.install.args.includes("--dir"))W.push(`runtime ${X} install args must not include --dir`);if(G.install.args.includes("--prefix"))W.push(`runtime ${X} install args must not include --prefix`)}return W}function rp(){let $=process.env.CLAWDI_RUNTIME_MANIFEST_PATH?.trim();return $?$:void 0}async function kE($,J={}){let W=J.manifestPath??rp();if(!W){let Y;try{let q=await np($);if("notModified"in q)throw Error("runtime manifest datasource returned 304 without If-None-Match");Y=q}catch(q){let U=HE$($);if("manifest"in U)return U;return{mode:"repair",stage:"network",errors:[`could not fetch runtime manifest: ${q instanceof Error?q.message:String(q)}`,...U.errors]}}let z;try{z=ZE(Y.raw)}catch(q){return{mode:"manifest-rejected",stage:"network",errors:q instanceof _.ZodError?$z(q):[String(q)],rejectedGeneration:SE(Y.raw),activeGeneration:dQ($).generation??null}}let H=TE(z,$,"remote-datasource",Y.url);if("manifest"in H)return{...H,etag:Y.etag};return H}if(!QV(W))return{mode:"repair",stage:"local",errors:[`CLAWDI_RUNTIME_MANIFEST_PATH must be absolute: ${W}`]};if(!iQ(W))return{mode:"repair",stage:"local",errors:[`runtime manifest fixture does not exist: ${W}`]};let Q;try{Q=pQ(W)}catch(Y){return{mode:"manifest-rejected",stage:"local",errors:[`could not read runtime manifest fixture at ${W}: ${Y instanceof Error?Y.message:String(Y)}`],activeGeneration:dQ($).generation??null}}let X;try{X=ZE(Q)}catch(Y){return{mode:"manifest-rejected",stage:"local",errors:Y instanceof _.ZodError?$z(Y):[String(Y)],rejectedGeneration:SE(Q),activeGeneration:dQ($).generation??null}}let G=ap(X.manifest,X.secretValues);if(G.length>0)return{mode:"manifest-rejected",stage:"local",errors:[`runtime manifest fixture references secretValues (${G.join(", ")}); refusing fixture without inline secretValues`],rejectedGeneration:X.manifest.generation,activeGeneration:dQ($).generation??null};return TE(X,$,"fixture-file",W)}function HE$($){if(!iQ($.manifestLastGood))return{mode:"repair",stage:"local",errors:["last-good runtime manifest does not exist"]};try{let J=tR$(pQ($.manifestLastGood));if(J.recovery.allowOfflineBoot!==!0)return{mode:"repair",stage:"local",errors:["cached manifest does not allow offline boot"]};let W=pp(J);if(W)return{mode:"repair",stage:"local",errors:[`cached ${W}`]};if(op(J).length>0){let X=qE$($);if("errors"in X)return X;let G=ap(J,X.secretValues);if(G.length===0)return{manifest:J,source:"last-good-cache",sourcePath:$.manifestLastGood,offline:!0,secretValues:X.secretValues};return{mode:"repair",stage:"local",errors:[`cached manifest references secretValues (${G.join(", ")}); refusing offline boot because cached secret values are missing`]}}return{manifest:J,source:"last-good-cache",sourcePath:$.manifestLastGood,offline:!0}}catch(J){return{mode:"repair",stage:"local",errors:[`could not read last-good runtime manifest at ${$.manifestLastGood}: ${J instanceof Error?J.message:String(J)}`]}}}function qE$($){if(!iQ($.managedSecretCacheFile))return{secretValues:{}};try{let J=pQ($.managedSecretCacheFile);if(!J||typeof J!=="object"||Array.isArray(J))throw Error("cached secret values must be a JSON object");let W={};for(let[Q,X]of Object.entries(J)){if(typeof X!=="string")throw Error(`cached secret value for ${Q} must be a string`);W[Q]=X}return{secretValues:$W(W)}}catch(J){return{mode:"repair",stage:"local",errors:[`could not read cached runtime secret values at ${$.managedSecretCacheFile}: ${J instanceof Error?J.message:String(J)}`]}}}function op($){let J=new Set;return CE($,J),[...J].sort()}function ap($,J){let W=$W(J??{});return op($).filter((Q)=>{let X=hw(Q);if(X)return!process.env[X]?.trim();return W[Q]===void 0})}function CE($,J){if(!$||typeof $!=="object")return;if(Array.isArray($)){for(let W of $)CE(W,J);return}for(let[W,Q]of Object.entries($)){if(typeof Q==="string"&&(W==="secretRef"||W.endsWith("SecretRef")))J.add(Q);if(W==="secretEnv"&&Q&&typeof Q==="object"&&!Array.isArray(Q)){for(let X of Object.values(Q))if(typeof X==="string")J.add(X)}CE(Q,J)}}function TE($,J,W,Q){let X=dQ(J),G=$.manifest,Y=zE$(G,J);if(X.instanceId&&X.instanceId!==G.instanceId)Y.push(`manifest instanceId ${G.instanceId} does not match last-good instanceId ${X.instanceId}`);if(Y.length>0)return{mode:"manifest-rejected",stage:W==="remote-datasource"?"network":"local",errors:Y,rejectedGeneration:G.generation,activeGeneration:X.generation??null};return{manifest:G,source:W,sourcePath:Q,offline:!1,secretValues:$.secretValues}}var lR$,hp,nR$,mp,GV,dR$,iR$,pR$,rR$;var gE=K(()=>{S8();uw();i7();oY();rY();mw();lR$=["telegram","discord","whatsapp"],hp=_.enum(lR$),nR$=_.object({type:_.literal("bearer-env"),env:_.string().min(1).default("CLAWDI_AUTH_TOKEN")}).strict(),mp=_.object({schemaVersion:_.literal("clawdi.runtimeSource.v1"),type:_.literal("http"),url:_.string().url(),auth:nR$.optional(),timeoutMs:_.number().int().positive().optional()}).strict().transform(({auth:$,...J})=>J);GV=class GV extends Error{resource;status;constructor($,J,W){super(`runtime ${$} authentication failed: HTTP ${J}${W?` ${W.slice(0,200)}`:""}`);this.resource=$;this.status=J}};dR$=_.object({id:_.string().min(1),account_id:_.string().min(1),agent_id:_.string().min(1),status:_.string().min(1),agent_token:_.string().min(1).nullable().optional()}).transform(($)=>({...$,agent_token:$.agent_token??null})),iR$=_.object({id:_.string().min(1),account_id:_.string().min(1),agent_link_id:_.string().min(1),agent_id:_.string().min(1),provider:_.string().min(1),kind:_.string().min(1),created_at:_.string().min(1).optional(),jid:_.string().min(1).nullable().optional(),identity_pub_key_hex:_.string().min(1).nullable().optional(),material:_.unknown().optional()}),pR$=_.object({id:_.string().min(1),provider:hp,name:_.string().min(1),status:_.string().min(1),visibility:_.enum(["private","public"]).default("private"),runtime_links:_.array(dR$).default([]),runtime_credentials:_.array(iR$).default([])}),rR$=_.array(_.unknown()).transform(($,J)=>{let W=[];for(let[Q,X]of $.entries()){let G=oR$(X)?.provider;if(typeof G==="string"&&!aR$(G))continue;let Y=pR$.safeParse(X);if(!Y.success){for(let z of Y.error.issues)J.addIssue({...z,path:[Q,...z.path]});continue}W.push(Y.data)}return W})});import{spawnSync as $r}from"node:child_process";import{createHash as UE$}from"node:crypto";import{chmodSync as Jr,chownSync as DE$,copyFileSync as Wr,mkdirSync as tp,mkdtempSync as BE$,readdirSync as wE$,readFileSync as VE$,rmSync as OE$,statSync as xE}from"node:fs";import{tmpdir as LE$}from"node:os";import{basename as Xr,join as CX}from"node:path";function Qr($,J,W={}){if(!$)return ep(null,"mitmproxy artifact pin is missing");let Q=$.sha256.toLowerCase();try{NE$($,W);let X=CX(J.egressEngineMaintainedRoot,$.version,Q),G=CX(X,"mitmdump");if(AE$(G))return sp($,X,G);let Y=BE$(CX(LE$(),"clawdi-egress-engine-"));try{let z=CX(Y,Xr(new URL($.url).pathname)||"mitmproxy.tar.gz");_E$($.url,z,W);let H=ME$(z);if(H!==Q)throw Error(`mitmproxy checksum mismatch: expected ${Q}, got ${H}`);let q=CX(Y,"extract");tp(q,{recursive:!0,mode:493}),KE$(z,q);let U=FE$(q);if(!U)throw Error("mitmproxy archive did not contain mitmdump");return tp(X,{recursive:!0,mode:493}),Wr(U,G),Jr(G,493),Jz(J.maintainedRoot),Jz(J.egressEngineMaintainedRoot),Jz(CX(J.egressEngineMaintainedRoot,$.version)),Jz(X),Jz(G),sp($,X,G)}finally{OE$(Y,{recursive:!0,force:!0})}}catch(X){return ep($,X instanceof Error?X.message:String(X))}}function NE$($,J){if($.type!=="mitmproxy")throw Error("egress engine must use mitmproxy");if(!/^[A-Za-z0-9._-]+$/.test($.version))throw Error("mitmproxy version contains unsafe characters");if(!/^[a-fA-F0-9]{64}$/.test($.sha256))throw Error("mitmproxy sha256 must be 64 hex characters");let W=new URL($.url);if(W.protocol==="file:"&&J.allowFileUrls)return;if(W.protocol!=="https:")throw Error("mitmproxy URL must use https");if(W.hostname!=="downloads.mitmproxy.org")throw Error("mitmproxy URL must use official mitmproxy downloads");let Q=`/${$.version}/mitmproxy-${$.version}-linux-x86_64.tar.gz`;if(W.pathname!==Q)throw Error("mitmproxy URL must use the pinned linux x86_64 release archive")}function _E$($,J,W){let Q=new URL($);if(Q.protocol==="file:"){Wr(Q,J);return}let X=W.downloadCommand??"curl",G=$r(X,["-fL","--proto","=https","-o",J,$],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});if(G.status!==0){let Y=[G.stdout,G.stderr].filter(Boolean).join(`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clawdi",
3
- "version": "0.12.10-beta.45",
3
+ "version": "0.12.10-beta.46",
4
4
  "description": "iCloud for AI Agents — cross-agent sessions, skills, memory, and vault.",
5
5
  "license": "MIT",
6
6
  "type": "module",