clawdi 0.12.4 → 0.12.5

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
@@ -372,7 +372,7 @@ ${X.map((W)=>`- ${W}`).join(`
372
372
  `)}
373
373
  `}function BX$($){if(J5($)){if($.api_mode!=="openai_responses")return`Provider ${$.id} skipped for hermes: Codex OAuth native apply requires api_mode openai_responses.`;if(!n9($))return`Provider ${$.id} skipped for hermes: Codex OAuth native apply requires an openai provider with the default OpenAI base_url.`;return}if(!eT($.api_mode))return`Provider ${$.id} skipped for hermes: api_mode ${$.api_mode} does not map to a verified Hermes custom-provider transport.`;return}function eT($){return t7$[$]}function DX$($){return`custom:${$}`}function VX$($,J){for(let G of $)HX$(G);let X=["# Generated by Clawdi. Do not put API keys in this file.",`# Contract: ${i1.codex.supportedVersionRange}; ${i1.codex.settingMethod}.`];if(OX$(J))X.push(`model = ${CX(J.default_model)}`);X.push(`model_provider = ${CX(qX$(J))}`,"");for(let G of $){if(JC(G))continue;if(X.push(`[model_providers.${NX$(G.id)}]`),X.push(`name = ${CX(G.label??G.id)}`),X.push(`base_url = ${CX(G.base_url)}`),X.push('wire_api = "responses"'),J5(G))X.push("requires_openai_auth = true");else if(G.env_name)X.push(`env_key = ${CX(G.env_name)}`);X.push("")}return`${X.join(`
374
374
  `).replace(/\n+$/,"")}
375
- `}function HX$($){let J=$C($);if(J)throw Error(J)}function $C($){if($.api_mode!=="openai_responses"&&$.api_mode!=="codex_responses")return`Provider ${$.id} skipped for codex: Codex provider config supports Responses-compatible providers only; got api_mode ${$.api_mode}.`;if($.auth.type==="oauth_profile")return`Provider ${$.id} skipped for codex: uses oauth_profile auth, which does not have a verified Codex config projection.`;if($.auth.type==="agent_profile"&&!J5($))return`Provider ${$.id} skipped for codex: uses agent_profile auth for ${$.auth.tool}; Codex projection only supports agent:codex/<profile>.`;return}function qX$($){return JC($)?"openai":$.id}function OX$($){return Boolean($.default_model)}function JC($){return n9($)}function n9($){return $.type==="openai"&&J5($)&&tT($.base_url)===tT(fU("openai")??"")}function J5($){return $.auth.type==="agent_profile"&&$.auth.tool==="codex"}function sN($){for(let J of["openai/","openai-codex/"])if($.startsWith(J))return $.slice(J.length);return $}function tT($){return $.replace(/\/+$/,"")}function D1($){return JSON.stringify($)}function CX($){return JSON.stringify($)}function NX$($){return JSON.stringify($)}function aN($){return Object.fromEntries(Object.entries($).filter(([,J])=>J!==void 0))}var uW="clawdi-ai-provider",i1,a7$,t7$,s7$="https://chatgpt.com/backend-api/codex",e7$="openai-codex";var XC=L(()=>{Y3();i1={codex:{settingMethod:"$CODEX_HOME/clawdi-ai-provider.config.toml selected with codex --profile",supportedVersionRange:"@openai/codex 0.134.0 through 0.136.0 with profile config, model_providers, and responses wire_api support",status:"enabled"},hermes:{settingMethod:"structured merge into $HERMES_HOME/config.yaml providers dict",supportedVersionRange:"Hermes Agent 0.13.0 through 0.15.2 with providers dict compatibility",status:"enabled"},openclaw:{settingMethod:"openclaw config patch --stdin",supportedVersionRange:"openclaw 2026.5.12 through 2026.6.1 config patch contract and canonical openai auth-profiles",status:"enabled"}},a7$={openai_chat:"openai-completions",openai_responses:"openai-responses",codex_responses:"openai-codex-responses",anthropic_messages:"anthropic-messages",google_generate_content:"google-generative-ai"},t7$={openai_chat:"chat_completions",openai_responses:"codex_responses",codex_responses:"codex_responses",anthropic_messages:"anthropic_messages"}});var lW={};Q$(lW,{doctorAiProviderCommand:()=>IX$,aiProviderStatusCommand:()=>MX$,aiProviderApplyCommand:()=>bX$});import{execFileSync as FX$}from"node:child_process";import{existsSync as M3,readFileSync as WC}from"node:fs";import{join as C4}from"node:path";async function bX$($={}){let J=jX$($.target),X=J.length>1,G=RX$(m0({allowNoAuthPublic:!0}),$.source),Q=[],Y=[];for(let U of J)try{let W=tN(U,G.catalog);Q.push({source:G.source,...ZX$(U,W,G.catalog)})}catch(W){if(!X)throw W;Y.push({target:U,reason:W instanceof Error?W.message:String(W)})}if(Q.length===0)throw Error(`No AI Provider targets can be applied:
375
+ `}function HX$($){let J=$C($);if(J)throw Error(J)}function $C($){if($.api_mode!=="openai_responses"&&$.api_mode!=="codex_responses")return`Provider ${$.id} skipped for codex: Codex provider config supports Responses-compatible providers only; got api_mode ${$.api_mode}.`;if($.auth.type==="oauth_profile")return`Provider ${$.id} skipped for codex: uses oauth_profile auth, which does not have a verified Codex config projection.`;if($.auth.type==="agent_profile"&&!J5($))return`Provider ${$.id} skipped for codex: uses agent_profile auth for ${$.auth.tool}; Codex projection only supports agent:codex/<profile>.`;return}function qX$($){return JC($)?"openai":$.id}function OX$($){return Boolean($.default_model)}function JC($){return n9($)}function n9($){return $.type==="openai"&&J5($)&&tT($.base_url)===tT(fU("openai")??"")}function J5($){return $.auth.type==="agent_profile"&&$.auth.tool==="codex"}function sN($){for(let J of["openai/","openai-codex/"])if($.startsWith(J))return $.slice(J.length);return $}function tT($){return $.replace(/\/+$/,"")}function D1($){return JSON.stringify($)}function CX($){return JSON.stringify($)}function NX$($){return JSON.stringify($)}function aN($){return Object.fromEntries(Object.entries($).filter(([,J])=>J!==void 0))}var uW="clawdi-ai-provider",i1,a7$,t7$,s7$="https://chatgpt.com/backend-api/codex",e7$="openai-codex";var XC=L(()=>{Y3();i1={codex:{settingMethod:"$CODEX_HOME/clawdi-ai-provider.config.toml selected with codex --profile",supportedVersionRange:"@openai/codex 0.134.0 through 0.137.0 with profile config, model_providers, and responses wire_api support",status:"enabled"},hermes:{settingMethod:"structured merge into $HERMES_HOME/config.yaml providers dict",supportedVersionRange:"Hermes Agent 0.13.0 through 0.15.2 with providers dict compatibility",status:"enabled"},openclaw:{settingMethod:"openclaw config patch --stdin",supportedVersionRange:"openclaw 2026.5.12 through 2026.6.1 config patch contract and canonical openai auth-profiles",status:"enabled"}},a7$={openai_chat:"openai-completions",openai_responses:"openai-responses",codex_responses:"openai-codex-responses",anthropic_messages:"anthropic-messages",google_generate_content:"google-generative-ai"},t7$={openai_chat:"chat_completions",openai_responses:"codex_responses",codex_responses:"codex_responses",anthropic_messages:"anthropic_messages"}});var lW={};Q$(lW,{doctorAiProviderCommand:()=>IX$,aiProviderStatusCommand:()=>MX$,aiProviderApplyCommand:()=>bX$});import{execFileSync as FX$}from"node:child_process";import{existsSync as M3,readFileSync as WC}from"node:fs";import{join as C4}from"node:path";async function bX$($={}){let J=jX$($.target),X=J.length>1,G=RX$(m0({allowNoAuthPublic:!0}),$.source),Q=[],Y=[];for(let U of J)try{let W=tN(U,G.catalog);Q.push({source:G.source,...ZX$(U,W,G.catalog)})}catch(W){if(!X)throw W;Y.push({target:U,reason:W instanceof Error?W.message:String(W)})}if(Q.length===0)throw Error(`No AI Provider targets can be applied:
376
376
  ${Y.map((U)=>`- ${U.target}: ${U.reason}`).join(`
377
377
  `)}`);if(!$.dryRun)for(let U of Q)await xX$(U,G.catalog);nX$(Q,Y,Boolean($.dryRun),Boolean($.json),X)}async function MX$($={}){let J=m0({allowNoAuthPublic:!0}),X=J.providers.map((Y)=>({id:Y.id,type:Y.type,default_model:Y.default_model??null,auth:GQ$(Y),agent_env_name:VC(Y)??Y.runtime_env_name??null})),G=["openclaw","hermes","codex"].map((Y)=>YQ$(Y)),Q={catalog_path:w3(),provider_count:J.providers.length,defaults:J.defaults??{},providers:X,agents:G};if($.json){console.log(JSON.stringify(Q,null,2));return}console.log(q.bold("AI Provider agents")),console.log(`Providers: ${X.length}`);for(let Y of X)console.log(` ${Y.id} (${Y.type}) model=${Y.default_model??"-"} auth=${Y.auth} env=${Y.agent_env_name??"-"}`);for(let Y of G){let U=Y.applied===!0?q.green("applied"):Y.applied===!1?q.gray("not applied"):q.gray(Y.apply_status);console.log(` ${Y.target}: ${U} ${q.gray(Y.apply_target)}`)}}async function IX$($={}){let J=[],X=m0({allowNoAuthPublic:!0});J.push({name:"AI Provider catalog",ok:X.providers.length>0,detail:`${X.providers.length} provider(s)`});for(let G of["openclaw","hermes","codex"])try{let Q=tN(G,X);J.push({name:`Agent config: ${G}`,ok:!0,detail:Q.warnings.length>0?Q.warnings.join("; "):void 0})}catch(Q){J.push({name:`Agent config: ${G}`,ok:!1,detail:Q instanceof Error?Q.message:String(Q)})}if($.json){console.log(JSON.stringify(J,null,2));return}for(let G of J){let Q=G.ok?q.green("✓"):q.red("✗"),Y=G.detail?q.gray(` — ${G.detail}`):"";console.log(` ${Q} ${G.name}${Y}`)}if(J.some((G)=>!G.ok))process.exitCode=1}function jX$($){if(!$||$==="all")return[...wX$];if($==="openclaw"||$==="hermes"||$==="codex")return[$];throw Error("--target must be all, codex, hermes, or openclaw.")}function RX$($,J){if(!J||J==="all")return{source:"all",catalog:$};let X=J==="default"?$.defaults?.chat_provider_id??$.providers[0]?.id:J;if(!X)throw Error("No AI Provider source is configured.");let G=$.providers.find((Q)=>Q.id===X);if(!G)throw Error(`AI Provider source not found: ${X}`);return{source:J==="default"?"default":G.id,catalog:{...$,providers:[G],defaults:{...$.defaults,chat_provider_id:G.id}}}}function ZX$($,J,X){if($==="openclaw")return PX$(J,X);if($==="codex")return SX$(J,X);let G=J.files.find((U)=>U.path.endsWith(".hermes.yaml"));if(!G)throw Error("Hermes projection did not include a config merge YAML file.");let Q=C4(r6(),"config.yaml"),Y=eN("hermes",J,X);return{target:$,target_contract:J.contract,provider_ids:J.provider_ids,default_provider_id:J.default_provider_id,writes:[],secret_writes:Y,merges:[{path:Q,mode:"0600",description:"Hermes config.yaml provider merge",patch:G.content}],commands:[],next_steps:[],warnings:J.warnings}}function PX$($,J){let X=$.files.find((Q)=>Q.path.endsWith(".openclaw.json"));if(!X)throw Error("OpenClaw projection did not include a config patch JSON file.");let G=EX$(X.content);return{target:"openclaw",target_contract:$.contract,provider_ids:$.provider_ids,default_provider_id:$.default_provider_id,writes:[],secret_writes:eN("openclaw",$,J),merges:[],commands:[{command:"openclaw",args:["config","patch","--stdin"],display:"openclaw config patch --stdin",stdin:G}],next_steps:[],warnings:$.warnings}}function EX$($){let J=JF($,"OpenClaw AI Provider patch"),X=j$(J.models)?J.models:void 0,G=j$(X?.providers)?X.providers:void 0;if(!G)return $;let Q=zC(),Y=j$(Q.models)?Q.models:void 0,U=j$(Y?.providers)?Y.providers:void 0;if(!U)return $;let W=!1;for(let[z,B]of Object.entries(G)){if(!j$(B)||!Array.isArray(B.models))continue;let D=B.models,V=U[z];if(!j$(V)||!Array.isArray(V.models))continue;let H=new Map(V.models.filter(j$).map((w)=>[mW(w),w]).filter((w)=>QC(w[0]))),O=D.map((w)=>{let K=mW(w),_=K?H.get(K):void 0;return j$(w)&&_?{..._,...w}:w}),N=new Set(O.map(mW).filter(QC)),F=!1;for(let w of V.models){let K=mW(w);if(!K||N.has(K))continue;O.push(w),N.add(K),F=!0}if(F||O.some((w,K)=>w!==D[K]))B.models=O,W=!0}return W?XF(J):$}function mW($){if(!j$($))return;return typeof $.id==="string"&&$.id.trim()?$.id.trim():void 0}function QC($){return typeof $==="string"&&$.length>0}function SX$($,J){let X=$.files.find((Q)=>Q.path.endsWith(".codex.toml"));if(!X)throw Error("Codex projection did not include a profile TOML file.");let G=C4(J1(),`${uW}.config.toml`);return{target:"codex",target_contract:$.contract,provider_ids:$.provider_ids,default_provider_id:$.default_provider_id,writes:[{path:G,mode:"0600",content:X.content}],secret_writes:eN("codex",$,J),merges:[],commands:[],next_steps:[`codex --profile ${uW}`],warnings:$.warnings}}function eN($,J,X){let G=TX$(J,X);if(!G)return[];let Q=$==="codex"?"Codex auth.json from agent:codex profile":$==="hermes"?"Hermes openai-codex auth store":"OpenClaw OpenAI auth profile";return[{path:CX$($),mode:"0600",description:Q,source_provider_id:G.provider_id,source_profile:G.profile}]}function TX$($,J){let G=J.providers.filter((Y)=>$.provider_ids.includes(Y.id)).filter((Y)=>Y.auth.type==="agent_profile"&&Y.auth.tool==="codex").map((Y)=>({provider_id:Y.id,profile:Y.auth.profile}));if(G.length===0)return null;let Q=[...new Set(G.map((Y)=>Y.profile))];if(Q.length>1)throw Error(`Cannot apply multiple Codex auth profiles to ${$.target}: ${Q.join(", ")}. Apply one source at a time with \`clawdi ai-provider apply <source> --target ${$.target}\`.`);return G[0]??null}function CX$($){if($==="codex")return C4(J1(),"auth.json");if($==="hermes")return C4(r6(),"auth.json");return C4(vX$(),"auth-profiles.json")}function vX$(){let $=zC(),J=process.env.OPENCLAW_AGENT_ID?.trim();if(J)return C4(_9(),"agents",GC(J),"agent");let X=fX$($);if(X?.agentDir)return kX$(X.agentDir);let G=X?.id??"main";return C4(_9(),"agents",GC(G),"agent")}function zC(){for(let $ of["openclaw.json","clawdbot.json"]){let J=C4(_9(),$);if(!M3(J))continue;return $F(J)}return{}}function fX$($){let J=j$($.agents)?$.agents:void 0,G=(Array.isArray(J?.list)?J.list:[]).filter(j$);if(G.length===0)return null;let Q=G.find((W)=>W.default===!0)??G[0],Y=typeof Q.id==="string"&&Q.id.trim()?Q.id.trim():"main",U=typeof Q.agentDir==="string"&&Q.agentDir.trim()?Q.agentDir.trim():void 0;return{id:Y,agentDir:U}}function GC($){return $.trim().toLowerCase().replace(/[^a-z0-9_.-]+/g,"-")||"main"}function kX$($){if($==="~")return process.env.HOME??$;if($.startsWith("~/"))return C4(process.env.HOME??"~",$.slice(2));return $}async function xX$($,J){for(let X of $.writes)kX(X.path,X.content);for(let X of $.merges)dX$(X.path,X.patch);for(let X of $.commands)XQ$(X);for(let X of $.secret_writes)await gX$($.target,X,J)}async function gX$($,J,X){let G=X.providers.find((U)=>U.id===J.source_provider_id);if(!G||G.auth.type!=="agent_profile"||G.auth.tool!=="codex")throw Error(`AI Provider ${J.source_provider_id} is not a Codex auth profile source.`);let Q=await yX$(G.id,G.auth.profile),Y=uX$(G.auth.profile,Q);if($==="codex"){kX(J.path,Y.rawContent);return}if($==="hermes"){kX(J.path,hX$(J.path,Y));return}kX(J.path,cX$(J.path,Y,G.auth.profile))}async function yX$($,J){let X=await new s().postJsonBody(`/api/ai-providers/${encodeURIComponent($)}/auth/resolve`,{profile:J});if(!X.payload)throw Error(`AI Provider ${$} auth resolve returned no credential payload.`);return X.payload}function uX$($,J){let G=kW("codex",$,J).files.find((V)=>V.logicalName===KX$);if(!G)throw Error("Stored Codex credential profile is missing auth.json.");let Q=JF(G.content,"Stored Codex auth.json"),Y=j$(Q.tokens)?Q.tokens:void 0;if(!Y)throw Error("Stored Codex auth.json is missing tokens.");let U=UC(Y.access_token,"Codex access_token"),W=UC(Y.refresh_token,"Codex refresh_token"),z=fX(Y.id_token),B=fX(Y.account_id)??JQ$(U,"sub"),D=fX(Q.last_refresh)??new Date().toISOString().replace("+00:00","Z");return{rawContent:G.content,accessToken:U,refreshToken:W,idToken:z,accountId:B,lastRefresh:D,expires:eX$(U)??Date.now()+3600000}}function hX$($,J){let X=M3($)?$F($):{},G=j$(X.providers)?{...X.providers}:{},Q=j$(G[X5])?G[X5]:{};G[X5]={...Q,tokens:BC({access_token:J.accessToken,refresh_token:J.refreshToken,id_token:J.idToken,account_id:J.accountId}),last_refresh:J.lastRefresh,auth_mode:"chatgpt"};let Y=j$(X.credential_pool)?{...X.credential_pool}:{};Y[X5]=mX$(Y[X5],J);let U={...X,version:1,providers:G,credential_pool:Y,active_provider:X5,updated_at:new Date().toISOString()};return lX$(U,X5,"device_code"),XF(U)}function mX$($,J){let X=Array.isArray($)?$.filter(j$).map((U)=>({...U})):[],G=X.findIndex((U)=>U.source==="device_code"),Q=G>=0?X[G]:void 0,Y={...Q??{},id:fX(Q?.id)??"clawdi",label:fX(Q?.label)??"device_code",auth_type:"oauth",priority:typeof Q?.priority==="number"?Q.priority:0,source:"device_code",access_token:J.accessToken,refresh_token:J.refreshToken,base_url:LX$,last_refresh:J.lastRefresh,last_status:null,last_status_at:null,last_error_code:null,last_error_reason:null,last_error_message:null,last_error_reset_at:null};if(G>=0)return X[G]=Y,X;return[Y,...X]}function lX$($,J,X){if(!j$($.suppressed_sources))return;let G={...$.suppressed_sources},Q=G[J];if(!Array.isArray(Q))return;let Y=Q.filter((U)=>U!==X);if(Y.length>0)G[J]=Y;else delete G[J];if(Object.keys(G).length>0)$.suppressed_sources=G;else delete $.suppressed_sources}function cX$($,J,X){let G=M3($)?$F($):{},Q=j$(G.profiles)?{...G.profiles}:{},Y=`${vX}:${X}`,U=j$(Q[Y])?Q[Y]:{};Q[Y]=BC({...U,type:"oauth",provider:vX,access:J.accessToken,refresh:J.refreshToken,expires:J.expires,accountId:J.accountId,idToken:J.idToken});let W=j$(G.order)?{...G.order}:{},z=Array.isArray(W[vX])?W[vX].filter((B)=>typeof B==="string"):[];return W[vX]=[Y,...z.filter((B)=>B!==Y)],XF({...G,version:1,profiles:Q,order:W})}function YC($,J,X){if(X){console.log(JSON.stringify({...$,dry_run:J},null,2));return}for(let Q of $.warnings)console.log(q.yellow(`! ${Q}`));let G=J?"Would":"Applied";for(let Q of $.writes)console.log(`${J?q.gray("•"):q.green("✓")} ${G} write ${Q.path}`);for(let Q of $.secret_writes)console.log(`${J?q.gray("•"):q.green("✓")} ${G} write ${Q.description} at ${Q.path}`);for(let Q of $.merges)if(console.log(`${J?q.gray("•"):q.green("✓")} ${G} merge ${Q.description} at ${Q.path}`),J)console.log(Q.patch.trimEnd());for(let Q of $.commands)if(console.log(`${J?q.gray("•"):q.green("✓")} ${G} run ${Q.display}`),J&&Q.stdin)console.log(Q.stdin.trimEnd());for(let Q of $.next_steps)console.log(q.gray(`Next: ${Q}`))}function nX$($,J,X,G,Q){if(!Q&&$.length===1&&J.length===0){YC($[0],X,G);return}if(G){console.log(JSON.stringify({dry_run:X,targets:$.map((Y)=>({...Y,dry_run:X})),skipped:J},null,2));return}for(let Y of $)console.log(q.bold(`AI Provider apply target: ${Y.target}`)),YC(Y,X,!1);for(let Y of J)console.log(q.yellow(`! Skipped ${Y.target}: ${Y.reason}`))}function dX$($,J){let X=iX$($),G=pX$(J);rX$(X,G),kX($,String(X))}function iX$($){let J=M3($)?WC($,"utf-8"):"",X=ZN(J);if(X.errors.length>0)throw Error(`Hermes config contains invalid YAML: ${X.errors[0]?.message}`);let G=X.toJS();if(G===null||G===void 0){if(X.contents)throw Error(`Hermes config must be a YAML object: ${$}`);return X}if(!j$(G))throw Error(`Hermes config must be a YAML object: ${$}`);return X}function pX$($){let J=ZX($);if(!j$(J))throw Error("Hermes projection patch must be a YAML object.");return J}function rX$($,J){let X=$.toJS(),G=j$(X)?X:{};oX$(G),aX$($,G);let Q=j$(G.model)?G.model:{},Y=j$(J.model)?J.model:{};tX$($,Q);for(let[z,B]of Object.entries(Y))$.setIn(["model",z],B);let U=j$(G.providers)?G.providers:{},W=j$(J.providers)?J.providers:{};for(let[z,B]of Object.entries(W)){if(!j$(B))continue;let D=j$(U[z])?U[z]:{};if(Object.hasOwn(U,z)&&(U[z]===null||U[z]===void 0))$.setIn(["providers",z],$.createNode({}));sX$($,z,D);for(let[V,H]of Object.entries(B))$.setIn(["providers",z,V],H)}}function oX$($){let J=$.providers;if(J!==void 0&&J!==null&&!j$(J))throw Error("Hermes config field providers must be a YAML object.");let X=j$(J)?J:{};for(let[G,Q]of Object.entries(X))if(Q!==void 0&&Q!==null&&!j$(Q))throw Error(`Hermes provider ${G} must be a YAML object.`)}function aX$($,J){if(Object.hasOwn(J,"model")&&!j$(J.model))$.set("model",$.createNode({}));if(Object.hasOwn(J,"providers")&&J.providers===null)$.set("providers",$.createNode({}))}function tX$($,J){for(let X of _X$)if(Object.hasOwn(J,X))$.deleteIn(["model",X])}function sX$($,J,X){for(let G of AX$)if(Object.hasOwn(X,G))$.deleteIn(["providers",J,G])}function $F($){return JF(WC($,"utf-8"),$)}function JF($,J){let X;try{X=JSON.parse($)}catch(G){throw Error(`${J} is not valid JSON: ${G instanceof Error?G.message:String(G)}`)}if(!j$(X))throw Error(`${J} must be a JSON object.`);return X}function XF($){return`${JSON.stringify($,null,2)}
378
378
  `}function UC($,J){if(typeof $!=="string"||!$.trim())throw Error(`${J} is missing.`);return $}function fX($){return typeof $==="string"&&$.trim()?$:void 0}function BC($){return Object.fromEntries(Object.entries($).filter(([,J])=>J!==void 0))}function eX$($){let J=$Q$($,"exp");return J===void 0?void 0:J*1000}function $Q$($,J){let G=DC($)?.[J];return typeof G==="number"&&Number.isFinite(G)&&G>0?G:void 0}function JQ$($,J){let G=DC($)?.[J];return typeof G==="string"&&G.trim()?G:void 0}function DC($){let[,J]=$.split(".");if(!J)return;try{let X=J.replace(/-/g,"+").replace(/_/g,"/"),G=X.padEnd(Math.ceil(X.length/4)*4,"="),Q=JSON.parse(Buffer.from(G,"base64").toString("utf-8"));return j$(Q)?Q:void 0}catch{return}}function j$($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function kX($,J){l9($,J,{mode:t8,dirMode:RW})}function XQ$($){try{FX$($.command,$.args,{input:$.stdin,stdio:"pipe",env:process.env})}catch(J){throw Error(`Failed to run ${$.display}${QQ$(J)}. Re-run with --dry-run to inspect the generated patch and verify the agent CLI is installed.`)}}function QQ$($){if(typeof $!=="object"||$===null||!("status"in $))return"";let J=$.status;if(typeof J!=="number")return"";return` (exit ${J})`}function GQ$($){let J=VC($);if($.auth.type==="none")return"none";if(J)return`${$.auth.type}:env:${J}`;return $.auth.type}function VC($){let J=$.auth;if("ref"in J&&J.ref?.startsWith("env:"))return J.ref.slice(4);return $.runtime_env_name}function YQ$($){if($==="codex"){let J=C4(J1(),`${uW}.config.toml`),X=M3(J);return{target:$,target_contract:i1[$],apply_target:J,apply_status:X?"applied":"not applied",applied:X}}if($==="hermes"){let J=C4(r6(),"config.yaml"),X=M3(J);return{target:$,target_contract:i1[$],apply_target:J,apply_status:X?"config exists; generated provider entries not inspected":"not applied",applied:null}}return{target:$,target_contract:i1[$],apply_target:"openclaw config patch --stdin",apply_status:"native config not inspected",applied:null}}var wX$,KX$="auth.json",X5="openai-codex",LX$="https://chatgpt.com/backend-api/codex",vX="openai",_X$,AX$;var cW=L(()=>{w$();PN();X1();TN();XC();g$();PX();SX();wX$=["codex","hermes","openclaw"],_X$=["base_url","api_key","api","key_env","api_mode","auth_mode"],AX$=["name","api","url","base_url","default_model","model","transport","api_mode","key_env","api_key","type","auth_type"]});function qC($){return QF($).entries}function QF($){let J=[],X=[];for(let G of $.split(/\r?\n/)){let Q=G.trim();if(!Q||Q.startsWith("#"))continue;let Y=/^(?:export\s+)?([^=\s]+)\s*=\s*(.*)$/.exec(Q);if(!Y)continue;if(!UQ$.test(Y[1])){X.push(Y[1]);continue}J.push([Y[1],WQ$(Y[2].trim())])}return{entries:J,skippedInvalidIdentifiers:X}}function WQ$($){if($.startsWith('"')){let X=HC($,'"');if(X!==-1)return $.slice(1,X).replace(/\\n/g,`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clawdi",
3
- "version": "0.12.4",
3
+ "version": "0.12.5",
4
4
  "description": "iCloud for AI Agents — cross-agent sessions, skills, memory, and vault.",
5
5
  "license": "MIT",
6
6
  "type": "module",