opencrater 1.1.41 → 1.1.42

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.
package/dist/cli.js CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  `;o+=`${t}[compat.${n}]
9
9
  hooks = false
10
- `;}return o}function He(e){try{let o=u__namespace.join(K("grok_cli",e),"config.toml"),n="";try{n=d__namespace.readFileSync(o,"utf8");}catch{}let t=je(n);if(t===n)return;d__namespace.mkdirSync(u__namespace.dirname(o),{recursive:!0}),d__namespace.writeFileSync(o,t,"utf8");}catch{}}function F(e,o,n){let t=U(e);return t.length===0?"nochange":(e==="grok_cli"&&He(process.env),e==="copilot_cli"?Ne(e,o,n,t):Ie(e,o,n,t))}function $(e,o,n=process.env){return z(n).map(t=>{try{let r=F(t,e,o);return {host:t,status:r,events:U(t)}}catch(r){return {host:t,status:"error",events:[],error:r.message}}})}function V(e=process.env){let o=[];for(let n of b){let t;try{t=M(H(n,e));}catch{continue}let r=t.hooks;if(!(!r||typeof r!="object"))for(let[i,a]of Object.entries(r))for(let p of Array.isArray(a)?a:[]){let s=p,c=Array.isArray(s.hooks)?s.hooks.find(m=>typeof m.command=="string"&&C(m.command))?.command:void 0,l=[s.bash,s.command,s.powershell].find(m=>typeof m=="string"&&C(m)),g=c??l;g&&o.push({host:n,event:i,command:g});}}return o}function ie(e=process.env){let o=0;for(let n of b){let t=H(n,e),r;try{r=M(t);}catch{continue}let i=r.hooks;if(!i||typeof i!="object")continue;let a=i,p=false;for(let s of Object.keys(a)){let c=Array.isArray(a[s])?a[s]:[],l=c.filter(g=>{let m=g,q=Array.isArray(m.hooks)&&m.hooks.some(R=>typeof R.command=="string"&&C(R.command))||[m.bash,m.powershell,m.command].some(R=>typeof R=="string"&&C(R));return q&&o++,!q});l.length!==c.length&&(p=true,l.length>0?a[s]=l:delete a[s]);}if(p)try{let s=Object.keys(r).filter(l=>l!=="version"&&l!=="hooks"),c=n==="copilot_cli"||n==="codex";Object.keys(a).length===0&&s.length===0&&c?d__namespace.rmSync(t,{force:!0}):W(t,r);}catch{}}return o}var x="1.1.41";var Me="https://api.opencrater.to";function O(e,o=process.env){let n=o.OPENCRATER_API_ORIGIN;return (e??(n&&n.trim()!==""?n:Me)).replace(/\/+$/,"")}function Fe(){return u__namespace.join(j__namespace.homedir(),".config","opencrater","runtime")}function Be(e){return ["install","--prefix",e,"opencrater@latest","--silent","--no-audit","--no-fund"]}function B(e=Fe()){if(process.env.VITEST||process.env.OPENCRATER_DISABLE_RUNTIME_PIN)return false;try{return child_process.spawnSync("npm",Be(e),{stdio:"ignore",windowsHide:!0,shell:process.platform==="win32"}).status===0}catch{return false}}function De(){let e=process.env.OPENCRATER_WEB_ORIGIN;return e&&e.trim()!==""?e.replace(/\/$/,""):O().replace("//api.","//").replace(/\/$/,"")}function Le(e){try{let o=process.platform==="darwin"?"open":process.platform==="win32"?"start":"xdg-open";child_process.spawn(o,[e],{stdio:"ignore",detached:!0,shell:process.platform==="win32"}).unref();}catch{}}function Ge(e){let o=pe__namespace.createInterface({input:process.stdin,output:process.stdout});return new Promise(n=>o.question(e,t=>(o.close(),n(t))))}function _(e){return `${Math.round(e/1e3).toLocaleString()} tokens`}function Je(e){let o=e/1e3;return o>0&&o<10?`${(Math.round(o*10)/10).toFixed(1)} tokens`:`${Math.round(o).toLocaleString()} tokens`}function I(e){let o=e?.pendingMicroUsd??0;return o>0?` \xB7 +${Je(o)} pending`:""}async function T(e,o){try{let n=new URL(`${O()}/v1/dev/me`);o&&n.searchParams.set("installId",o);let t=await fetch(n,{headers:{authorization:`Bearer ${e}`}});return t.ok?await t.json():null}catch{return null}}async function Ke(){let e=`${De()}/dev/link`;console.log("Sign in and generate a CLI token here (we tried to open it):"),console.log(` ${e}
10
+ `;}return o}function He(e){try{let o=u__namespace.join(K("grok_cli",e),"config.toml"),n="";try{n=d__namespace.readFileSync(o,"utf8");}catch{}let t=je(n);if(t===n)return;d__namespace.mkdirSync(u__namespace.dirname(o),{recursive:!0}),d__namespace.writeFileSync(o,t,"utf8");}catch{}}function F(e,o,n){let t=U(e);return t.length===0?"nochange":(e==="grok_cli"&&He(process.env),e==="copilot_cli"?Ne(e,o,n,t):Ie(e,o,n,t))}function $(e,o,n=process.env){return z(n).map(t=>{try{let r=F(t,e,o);return {host:t,status:r,events:U(t)}}catch(r){return {host:t,status:"error",events:[],error:r.message}}})}function V(e=process.env){let o=[];for(let n of b){let t;try{t=M(H(n,e));}catch{continue}let r=t.hooks;if(!(!r||typeof r!="object"))for(let[i,a]of Object.entries(r))for(let p of Array.isArray(a)?a:[]){let s=p,c=Array.isArray(s.hooks)?s.hooks.find(m=>typeof m.command=="string"&&C(m.command))?.command:void 0,l=[s.bash,s.command,s.powershell].find(m=>typeof m=="string"&&C(m)),g=c??l;g&&o.push({host:n,event:i,command:g});}}return o}function ie(e=process.env){let o=0;for(let n of b){let t=H(n,e),r;try{r=M(t);}catch{continue}let i=r.hooks;if(!i||typeof i!="object")continue;let a=i,p=false;for(let s of Object.keys(a)){let c=Array.isArray(a[s])?a[s]:[],l=c.filter(g=>{let m=g,q=Array.isArray(m.hooks)&&m.hooks.some(R=>typeof R.command=="string"&&C(R.command))||[m.bash,m.powershell,m.command].some(R=>typeof R=="string"&&C(R));return q&&o++,!q});l.length!==c.length&&(p=true,l.length>0?a[s]=l:delete a[s]);}if(p)try{let s=Object.keys(r).filter(l=>l!=="version"&&l!=="hooks"),c=n==="copilot_cli"||n==="codex";Object.keys(a).length===0&&s.length===0&&c?d__namespace.rmSync(t,{force:!0}):W(t,r);}catch{}}return o}var x="1.1.42";var Me="https://api.opencrater.to";function O(e,o=process.env){let n=o.OPENCRATER_API_ORIGIN;return (e??(n&&n.trim()!==""?n:Me)).replace(/\/+$/,"")}function Fe(){return u__namespace.join(j__namespace.homedir(),".config","opencrater","runtime")}function Be(e){return ["install","--prefix",e,"opencrater@latest","--silent","--no-audit","--no-fund"]}function B(e=Fe()){if(process.env.VITEST||process.env.OPENCRATER_DISABLE_RUNTIME_PIN)return false;try{return child_process.spawnSync("npm",Be(e),{stdio:"ignore",windowsHide:!0,shell:process.platform==="win32"}).status===0}catch{return false}}function De(){let e=process.env.OPENCRATER_WEB_ORIGIN;return e&&e.trim()!==""?e.replace(/\/$/,""):O().replace("//api.","//").replace(/\/$/,"")}function Le(e){try{let o=process.platform==="darwin"?"open":process.platform==="win32"?"start":"xdg-open";child_process.spawn(o,[e],{stdio:"ignore",detached:!0,shell:process.platform==="win32"}).unref();}catch{}}function Ge(e){let o=pe__namespace.createInterface({input:process.stdin,output:process.stdout});return new Promise(n=>o.question(e,t=>(o.close(),n(t))))}function _(e){return `${Math.round(e/1e3).toLocaleString()} tokens`}function Je(e){let o=e/1e3;return o>0&&o<10?`${(Math.round(o*10)/10).toFixed(1)} tokens`:`${Math.round(o).toLocaleString()} tokens`}function I(e){let o=e?.pendingMicroUsd??0;return o>0?` \xB7 +${Je(o)} pending`:""}async function T(e,o){try{let n=new URL(`${O()}/v1/dev/me`);o&&n.searchParams.set("installId",o);let t=await fetch(n,{headers:{authorization:`Bearer ${e}`}});return t.ok?await t.json():null}catch{return null}}async function Ke(){let e=`${De()}/dev/link`;console.log("Sign in and generate a CLI token here (we tried to open it):"),console.log(` ${e}
11
11
  `),Le(e);let o=(await Ge("Paste your token (ocd_\u2026): ")).trim();if(!o.startsWith("ocd_"))return console.error("That doesn't look like a token (should start with ocd_)."),1;let n=await T(o,f().installId);if(!n)return console.error("Couldn't verify that token \u2014 check it and try again."),1;v({devToken:o}),console.log(`
12
12
  \u2713 Signed in as ${n.displayName}.`),console.log(` Compute balance: ${_(n.balanceMicroUsd)}${I(n)} \xB7 tier: ${n.trustTier}`);let t=$().filter(r=>r.status!=="error").map(r=>r.host);return t.length?(console.log(` Wired into: ${t.join(", ")}`),process.stdout.write(" Pinning fast runtime (one-time, ~15s)\u2026 "),console.log(B()?"\u2713":"skipped (hooks use npx fallback)")):console.log(" No supported AI CLIs detected yet \u2014 they'll wire automatically once you install one."),console.log(" See Blips in your sessions to earn your weekly compute."),0}async function ze(){let e=f().devToken;if(!e)return console.error("Not signed in. Run: opencrater login"),1;let o=await T(e,f().installId);return o?(console.log(`Compute balance: ${_(o.balanceMicroUsd)}${I(o)}`),console.log(` signed in as: ${o.displayName} \xB7 tier: ${o.trustTier}`),0):(console.error("Couldn't reach OpenCrater (or your session expired \u2014 try: opencrater login)."),1)}function We(){return A({...f(),devToken:null},process.env,{allowClearToken:true}),console.log("Signed out of the OpenCrater compute wallet on this machine."),0}async function Ve(e){let o=f().devToken;if(!o)return console.error("Not signed in. Run: opencrater login"),1;let n=await T(o,f().installId);if(n&&n.balanceMicroUsd<=0)return console.error("Your OpenCrater compute balance is empty \u2014 see Blips to earn more."),console.error("Check anytime with: opencrater balance"),1;let t=`${O().replace(/\/$/,"")}/gateway`,r=u__namespace.join(u__namespace.dirname(E()),"claude-gateway.settings.json");try{d__namespace.mkdirSync(u__namespace.dirname(r),{recursive:!0}),d__namespace.writeFileSync(r,JSON.stringify({apiKeyHelper:`echo ${o}`}),{mode:384});}catch(p){return console.error(`Couldn't write gateway settings: ${p.message}`),1}n&&console.log(`Launching Claude Code on OpenCrater compute \xB7 balance ${_(n.balanceMicroUsd)}${I(n)}`);let i={...process.env,ANTHROPIC_BASE_URL:t,OPENCRATER_ON_GATEWAY:"1"};delete i.ANTHROPIC_API_KEY;let a=child_process.spawn("claude",[...e,"--settings",r],{stdio:"inherit",env:i,shell:process.platform==="win32"});return await new Promise(p=>{a.on("exit",s=>p(s??0)),a.on("error",s=>{console.error(`Couldn't launch claude: ${s.message}`),console.error("Is Claude Code installed? https://claude.com/claude-code"),p(127);});})}async function qe(e){let o=f().devToken;if(!o)return console.error("Not signed in. Run: opencrater login"),1;let n=await T(o,f().installId);if(n&&n.balanceMicroUsd<=0)return console.error("Your OpenCrater compute balance is empty \u2014 see Blips to earn more."),console.error("Check anytime with: opencrater balance"),1;let t=`${O().replace(/\/$/,"")}/gateway/v1`;n&&console.log(`Launching Codex on OpenCrater compute \xB7 balance ${_(n.balanceMicroUsd)}${I(n)}`);let r={...process.env,OPENCRATER_TOKEN:o,OPENCRATER_ON_GATEWAY:"1"},i=["-c",'model_provider="opencrater"',"-c",'model_providers.opencrater.name="OpenCrater"',"-c",`model_providers.opencrater.base_url="${t}"`,"-c",'model_providers.opencrater.wire_api="responses"',"-c",'model_providers.opencrater.env_key="OPENCRATER_TOKEN"'],a=[];for(let s=0;s<e.length;s++){let c=e[s],l=e[s+1];c==="-c"&&(l===void 0||!l.includes("="))?a.push("resume","--last"):a.push(c);}let p=child_process.spawn("codex",[...i,...a],{stdio:"inherit",env:r,shell:process.platform==="win32"});return await new Promise(s=>{p.on("exit",c=>s(c??0)),p.on("error",c=>{console.error(`Couldn't launch codex: ${c.message}`),console.error("Is Codex installed? npm i -g @openai/codex"),s(127);});})}function Ye(){let e=process.env.GROK_HOME;return e&&e.trim()!==""?e:u__namespace.join(j__namespace.homedir(),".grok")}function Xe(e){let o=u__namespace.join(Ye(),"config.toml"),n="";try{n=d__namespace.readFileSync(o,"utf8");}catch{}if(/^\s*\[model\.opencrater\]/m.test(n))return;let t=n.length===0?"":n.endsWith(`
13
13
  `)?`
package/dist/hook.js CHANGED
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
- 'use strict';var child_process=require('child_process'),d=require('fs'),T=require('os'),m=require('path'),crypto=require('crypto');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var d__namespace=/*#__PURE__*/_interopNamespace(d);var T__namespace=/*#__PURE__*/_interopNamespace(T);var m__namespace=/*#__PURE__*/_interopNamespace(m);var x=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var $={minIntervalSeconds:600,serveTimeoutMs:2500,preloadPoolSize:3,killSwitch:false,displayDurationSeconds:25,minSdkVersion:""},he={claude_code:["SessionStart","Stop","SessionEnd","Notification"],codex:["Stop"],openclaw:[],gemini_cli:["AfterAgent","SessionStart","SessionEnd"],copilot_cli:["agentStop","sessionStart","sessionEnd","notification"],grok_cli:["SessionStart","Stop","SessionEnd","Notification"],generic:["SessionStart","Stop"]},ye={claude_code:["SessionStart","Stop","SessionEnd","Notification","UserPromptSubmit","SubagentStart","SubagentStop","StopFailure","PreToolUse","PostToolUse","PostToolUseFailure","PostToolBatch","PermissionRequest","PermissionDenied","UserPromptExpansion","PreCompact","PostCompact","TaskCreated","TaskCompleted","Setup","TeammateIdle","Elicitation","ElicitationResult","ConfigChange","InstructionsLoaded","WorktreeCreate","WorktreeRemove","CwdChanged","FileChanged","MessageDisplay"],codex:["Stop","SessionStart","UserPromptSubmit","PreToolUse","PostToolUse","PermissionRequest","PreCompact","PostCompact"],openclaw:[],gemini_cli:["AfterAgent","SessionStart","SessionEnd","Notification","BeforeAgent","BeforeModel","AfterModel","BeforeToolSelection","BeforeTool","AfterTool","PreCompress"],copilot_cli:["agentStop","sessionStart","sessionEnd","notification","userPromptSubmitted","preToolUse","postToolUse","permissionRequest","errorOccurred","subagentStart","subagentStop"],grok_cli:["SessionStart","Stop","SessionEnd","Notification"],generic:["SessionStart","Stop"]};var _="1.1.41";var at="https://api.opencrater.to";function Q(e,t=process.env){let n=t.OPENCRATER_API_ORIGIN;return ((n&&n.trim()!==""?n:at)).replace(/\/+$/,"")}function y(...e){try{if(process.env.OPENCRATER_DEBUG!=="1")return;console.error("[opencrater]",...e);try{let t=x("os"),n=x("fs"),r=x("path");n.appendFileSync(r.join(t.homedir(),".config","opencrater","hook.log"),`${new Date().toISOString()} [opencrater] ${e.map(o=>String(o)).join(" ")}
3
- `);}catch{}}catch{}}function U(e){return typeof e=="number"&&Number.isFinite(e)}function ct(e){let t=$;if(typeof e!="object"||e===null)return {...t};let n=e;return {minIntervalSeconds:U(n.minIntervalSeconds)?n.minIntervalSeconds:t.minIntervalSeconds,serveTimeoutMs:U(n.serveTimeoutMs)?n.serveTimeoutMs:t.serveTimeoutMs,preloadPoolSize:U(n.preloadPoolSize)?n.preloadPoolSize:t.preloadPoolSize,killSwitch:n.killSwitch===true,displayDurationSeconds:U(n.displayDurationSeconds)?n.displayDurationSeconds:t.displayDurationSeconds,minSdkVersion:typeof n.minSdkVersion=="string"?n.minSdkVersion:t.minSdkVersion}}async function B(e,t,n,r,o){try{let i=await fetch(`${e}${t}`,{method:"POST",headers:{"content-type":"application/json",...o??{}},body:JSON.stringify(n),signal:AbortSignal.timeout(r)});return i.ok?await i.json():(y(`POST ${t} -> HTTP ${i.status}`),null)}catch(i){return y(`POST ${t} failed:`,i),null}}function Se(e,t){let n=e.host??"generic";return {publisherKey:e.publisherKey,packageName:e.packageName,placement:e.placement,host:n,sdkVersion:_,installId:t.installId,os:process.platform,termProgram:process.env.TERM_PROGRAM??void 0,topics:t.topics&&t.topics.length>0?t.topics:void 0}}function be(e){if(typeof e!="object"||e===null)return null;let t=e;if(typeof t.fill!="boolean")return null;let n={fill:t.fill,fallback:t.fallback??null,config:ct(t.config),...Array.isArray(t.allowedPlacements)?{allowedPlacements:t.allowedPlacements.filter(r=>typeof r=="string")}:{}};return t.blip!==void 0&&t.blip!==null&&(n.blip=t.blip),typeof t.computeBalanceMicroUsd=="number"&&(n.computeBalanceMicroUsd=t.computeBalanceMicroUsd),typeof t.weeklyGrantMicroUsd=="number"&&(n.weeklyGrantMicroUsd=t.weeklyGrantMicroUsd),typeof t.pendingMicroUsd=="number"&&(n.pendingMicroUsd=t.pendingMicroUsd),n}async function ke(e,t){let n=await B(t.origin,"/v1/serve",Se(e,t),t.timeoutMs);return be(n)}async function we(e,t,n){let r={...Se(t,n),publisherKey:t.publisherKey??"",packageName:t.packageName??""},o=await B(n.origin,"/v1/dev/serve",r,n.timeoutMs,{authorization:`Bearer ${e}`});return be(o)}function ve(e,t,n){return B(n.origin,"/v1/dev/impression",{impressionId:t},n.timeoutMs,{authorization:`Bearer ${e}`}).then(()=>{}).catch(()=>{})}function ee(e,t){return B(t.origin,"/v1/events/impression",{impressionId:e},t.timeoutMs).then(()=>{}).catch(()=>{})}function Ce(e){let t={sponsorLabel:e.sponsorLabel,title:e.creative.title,body:e.creative.body,url:e.clickUrl};return e.creative.cta!==void 0&&(t.cta=e.creative.cta),t}function Ee(e){return {sponsorLabel:"",title:e.title,body:e.body,url:e.url}}function L(e){let t=Ce(e),n=e.creative;switch(n.format){case "image":case "gif":return {...t,body:n.textFallback??t.body};case "video":return {...t,body:n.textFallback??t.body,cta:t.cta??"\u25B6 Watch"};case "audio":return {...t,body:n.textFallback??t.body,cta:t.cta??"\u{1F50A} Listen"};default:return t}}function M(e=process.env){return m__namespace.join(T__namespace.homedir(),".config","opencrater")}function G(e=process.env){return m__namespace.join(M(e),"state.json")}function F(){return {installId:crypto.randomUUID(),lastShownAt:0,optOut:false,disclosureShown:false,cachedConfig:null,configFetchedAt:0,pool:[],allowedPlacements:{},sessionTopics:[],integrations:[],devToken:null,computeRouting:null,computeCards:null}}function k(e){return typeof e=="number"&&Number.isFinite(e)}var Re=new Set(["EPERM","EACCES","EBUSY","EEXIST"]);function _e(e){for(let t=0;;t++)try{return {text:d__namespace.readFileSync(e,"utf8")}}catch(n){let r=n.code??"";if(!(r==="ENOENT"||Re.has(r)))return {locked:true};if(t>=4)return r==="ENOENT"?{missing:true}:{locked:true};try{Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,15*(t+1));}catch{}}}function ut(e){if(typeof e!="object"||e===null)return null;let t=e;return !k(t.minIntervalSeconds)||!k(t.serveTimeoutMs)||!k(t.preloadPoolSize)||typeof t.killSwitch!="boolean"?null:{minIntervalSeconds:t.minIntervalSeconds,serveTimeoutMs:t.serveTimeoutMs,preloadPoolSize:t.preloadPoolSize,killSwitch:t.killSwitch,displayDurationSeconds:k(t.displayDurationSeconds)?t.displayDurationSeconds:25,minSdkVersion:typeof t.minSdkVersion=="string"?t.minSdkVersion:""}}function pt(e){if(!Array.isArray(e))return [];let t=[];for(let n of e){if(typeof n!="object"||n===null)continue;let r=n,o=r.blip;if(!k(r.renderBy)||typeof o!="object"||o===null||typeof o.impressionId!="string"||typeof o.clickUrl!="string"||typeof o.sponsorLabel!="string"||typeof o.creative!="object"||o.creative===null)continue;let i=o.creative;typeof i.title!="string"||typeof i.body!="string"||t.push({blip:{impressionId:o.impressionId,...typeof o.campaignId=="string"?{campaignId:o.campaignId}:{},clickUrl:o.clickUrl,sponsorLabel:o.sponsorLabel,creative:{format:"text",title:i.title,body:i.body,...typeof i.cta=="string"?{cta:i.cta}:{}}},renderBy:r.renderBy});}return t}function dt(e){if(typeof e!="object"||e===null||Array.isArray(e))return {};let t={};for(let[n,r]of Object.entries(e)){if(!Array.isArray(r))continue;let o=r.filter(i=>typeof i=="string"&&i.length<=64);t[n]=o.slice(0,64);}return t}function ft(e){if(!Array.isArray(e))return [];let t=[];for(let n of e){if(typeof n!="object"||n===null)continue;let r=n;if(!(typeof r.topic!="string"||!k(r.at))&&(t.push({topic:r.topic.slice(0,32),at:r.at}),t.length>=24))break}return t}function mt(e){if(!Array.isArray(e))return [];let t=[],n=new Set;for(let r of e){if(typeof r!="object"||r===null)continue;let o=r;if(typeof o.key!="string"||typeof o.package!="string"||o.key===""||o.package==="")continue;let i=`${o.package}\0${o.key}`;if(!n.has(i)&&(n.add(i),t.push({key:o.key,package:o.package}),t.length>=32))break}return t}function gt(e){if(typeof e!="object"||e===null)return null;let t=e,n={};if(typeof t.savedEnv=="object"&&t.savedEnv!==null)for(let[r,o]of Object.entries(t.savedEnv))(typeof o=="string"||o===null)&&(n[r]=o);return {active:t.active===true,savedEnv:n}}function ht(e){if(typeof e!="object"||e===null)return null;let t=e,n=r=>k(r)&&r>=0?r:0;return {turns:n(t.turns),lastLimitAt:n(t.lastLimitAt),lastDepletedAt:n(t.lastDepletedAt),lastBackupAt:n(t.lastBackupAt)}}function yt(e){let t=F();if(typeof e!="object"||e===null)return t;let n=e;return {installId:typeof n.installId=="string"&&n.installId.length>0?n.installId:t.installId,lastShownAt:k(n.lastShownAt)&&n.lastShownAt>=0?n.lastShownAt:0,optOut:n.optOut===true,disclosureShown:n.disclosureShown===true,cachedConfig:ut(n.cachedConfig),allowedPlacements:dt(n.allowedPlacements),sessionTopics:ft(n.sessionTopics),integrations:mt(n.integrations),devToken:typeof n.devToken=="string"?n.devToken:null,computeRouting:gt(n.computeRouting),computeCards:ht(n.computeCards),configFetchedAt:k(n.configFetchedAt)&&n.configFetchedAt>=0?n.configFetchedAt:0,pool:pt(n.pool)}}function te(e=process.env){let t=G(e),n=_e(t);if(n.text!==void 0)try{return yt(JSON.parse(n.text))}catch{let r=F();try{S(r,e);}catch{}return r}if(n.missing){let r=F();try{S(r,e);}catch{}return r}return F()}function S(e,t=process.env,n={}){let r=G(t),o=m__namespace.dirname(r);d__namespace.mkdirSync(o,{recursive:true});let i=_e(r),s=null;if(i.text!==void 0)try{s=JSON.parse(i.text);}catch{s=null;}if(s)typeof s.lastShownAt=="number"&&s.lastShownAt>e.lastShownAt&&(e={...e,lastShownAt:s.lastShownAt}),!n.allowClearToken&&typeof s.devToken=="string"&&e.devToken==null&&(e={...e,devToken:s.devToken}),typeof s.installId=="string"&&s.installId.length>0&&s.installId!==e.installId&&(e={...e,installId:s.installId});else if(!n.allowClearToken&&e.devToken==null&&i.text===void 0&&!i.missing)return;let l=m__namespace.join(o,`.state.${process.pid}.${Math.random().toString(36).slice(2)}.tmp`);d__namespace.writeFileSync(l,JSON.stringify(e,null,2)+`
4
- `,"utf8");for(let a=0;;a++)try{d__namespace.renameSync(l,r);return}catch(c){let f=c.code??"";if(a>=4||!Re.has(f)){try{d__namespace.rmSync(l,{force:!0});}catch{}if(a>=4)return;throw c}try{Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,15*(a+1));}catch{}}}var St=300*1e3;function bt(){return m__namespace.join(M(),"blocked-ads.json")}function ne(){return m__namespace.join(M(),"recent-renders.json")}function kt(){return m__namespace.join(M(),"reported-ads.json")}function Oe(e,t){let n={};for(let[r,o]of Object.entries(e))typeof o=="number"&&Number.isFinite(o)&&o>t&&(n[r]=o);return n}function wt(e){try{let t=JSON.parse(d__namespace.readFileSync(bt(),"utf8"));return Oe(t&&typeof t=="object"?t:{},e)}catch{return {}}}function vt(){try{let e=JSON.parse(d__namespace.readFileSync(kt(),"utf8"));return e&&typeof e=="object"?e:{}}catch{return {}}}function Ct(e){return e?vt()[e]!==void 0:false}function J(e,t=Date.now()){return e?wt(t)[e]!==void 0||Ct(e):false}function Ie(e){try{let t=JSON.parse(d__namespace.readFileSync(ne(),"utf8"));return Oe(t&&typeof t=="object"?t:{},e)}catch{return {}}}function K(e,t=Date.now()){if(e)try{let n=Ie(t);n[e]=t+St,d__namespace.mkdirSync(m__namespace.dirname(ne()),{recursive:!0}),d__namespace.writeFileSync(ne(),JSON.stringify(n));}catch{}}function Y(e,t=Date.now()){return e?Ie(t)[e]!==void 0:false}function Et(e,t){return e.filter(n=>n.renderBy>t)}function oe(e,t){let n=Et(e.pool,t),r=n.shift();return {blip:r?r.blip:null,pool:n}}var Tt=["claude_code","codex","gemini_cli","copilot_cli","grok_cli"];function $e(e){return e.includes("opencrater-hook")||/opencrater[\\/][^"']*hook\.js/.test(e)}function Rt(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function _t(e,t){return $e(e)&&new RegExp(`--package ['"]?${Rt(t)}['"]?`).test(e)}function Me(e,t){return t?_t(e,t):$e(e)&&!/--package\b/.test(e)}function Ae(e){return /^[A-Za-z0-9@_./:-]+$/.test(e)?e:`'${e.replace(/'/g,"'\\''")}'`}var xe='"$HOME/.config/opencrater/runtime/node_modules/opencrater/dist/hook.js"',Pe="$env:USERPROFILE\\.config\\opencrater\\runtime\\node_modules\\opencrater\\dist\\hook.js";function D(e,t,n,r){let o=`--placement ${t}`;return n&&(o+=` --key ${Ae(n)}`),r&&(o+=` --package ${Ae(r)}`),o+=` --host ${e}`,`{ if [ -f ${xe} ]; then node ${xe} ${o}; else npx -y -p opencrater opencrater-hook ${o}; fi; } 2>/dev/null || true`}function Ot(e,t,n){if(process.platform!=="win32")return D("grok_cli",e,t,n);let r=`--placement ${e}`;t&&(r+=` --key ${t}`),n&&(r+=` --package ${n}`),r+=" --host grok_cli";let o=`${T__namespace.homedir()}\\.config\\opencrater\\runtime\\node_modules\\opencrater\\dist\\hook.js`;return `try { if (Test-Path "${o}") { node "${o}" ${r} } else { npx -y -p opencrater opencrater-hook ${r} } } catch {}`}function De(e,t,n,r){let o=`--placement ${t}`;return n&&(o+=` --key '${n}'`),r&&(o+=` --package '${r}'`),o+=` --host ${e}`,`try { if (Test-Path "${Pe}") { node "${Pe}" ${o} } else { npx -y -p opencrater opencrater-hook ${o} } } catch {}`}function It(e,t,n){if(process.platform!=="win32")return D("claude_code",e,t,n);let r=`--placement ${e}`;return t&&(r+=` --key ${t}`),n&&(r+=` --package ${n}`),r+=" --host claude_code",`node "${`${T__namespace.homedir()}\\.config\\opencrater\\runtime\\node_modules\\opencrater\\dist\\hook.js`}" ${r}; exit 0`}function re(e,t,n,r){if(e==="grok_cli")return {type:"command",command:Ot(t,n,r),timeout:15};let i={type:"command",command:e==="claude_code"?It(t,n,r):D(e,t,n,r)};return e==="codex"&&(i.commandWindows=De(e,t,n,r)),i}function ie(e,t){let n=T__namespace.homedir();switch(e){case "claude_code":{let r=t.CLAUDE_CONFIG_DIR;return r&&r.trim()!==""?r:m__namespace.join(n,".claude")}case "codex":{let r=t.CODEX_HOME;return r&&r.trim()!==""?r:m__namespace.join(n,".codex")}case "gemini_cli":return m__namespace.join(n,".gemini");case "copilot_cli":{let r=t.COPILOT_HOME;return r&&r.trim()!==""?r:m__namespace.join(n,".copilot")}case "grok_cli":{let r=t.GROK_HOME;return r&&r.trim()!==""?r:m__namespace.join(n,".grok")}default:return m__namespace.join(n,".opencrater-unknown")}}function V(e,t=process.env){let n=ie(e,t);switch(e){case "claude_code":return m__namespace.join(n,"settings.json");case "codex":return m__namespace.join(n,"hooks.json");case "gemini_cli":return m__namespace.join(n,"settings.json");case "copilot_cli":return m__namespace.join(n,"hooks","hooks.json");case "grok_cli":return m__namespace.join(n,"hooks","opencrater.json");default:return m__namespace.join(n,"hooks.json")}}var At={claude_code:["claude"],codex:["codex"],gemini_cli:["gemini"],copilot_cli:["copilot"],grok_cli:["grok"]};function xt(e,t){if(e.length===0)return false;let n=(t.PATH??t.Path??"").split(m__namespace.delimiter).filter(Boolean),r=process.platform==="win32"?["",".exe",".cmd",".bat"]:[""];for(let o of n)for(let i of e)for(let s of r)try{if(d__namespace.existsSync(m__namespace.join(o,i+s)))return !0}catch{}return false}function Pt(e,t=process.env){try{if(d__namespace.existsSync(ie(e,t)))return !0}catch{}return xt(At[e]??[],t)}function se(e=process.env){return Tt.filter(t=>Pt(t,e))}function He(e){let t;try{t=d__namespace.readFileSync(e,"utf8");}catch{return {}}let n=JSON.parse(t);if(typeof n!="object"||n===null||Array.isArray(n))throw new Error(`${e} is not a JSON object`);return n}function je(e,t){let n=m__namespace.dirname(e);d__namespace.mkdirSync(n,{recursive:true});let r=m__namespace.join(n,`.${m__namespace.basename(e)}.${process.pid}.tmp`);d__namespace.writeFileSync(r,JSON.stringify(t,null,2)+`
5
- `,"utf8"),d__namespace.renameSync(r,e);}function Nt(e,t){return Array.isArray(e.hooks)&&e.hooks.some(n=>typeof n.command=="string"&&Me(n.command,t))}function $t(e,t,n,r){let o=V(e),i=He(o),s=i.hooks&&typeof i.hooks=="object"?i.hooks:{};if(r.every(a=>{let c=re(e,a,t,n);return (Array.isArray(s[a])?s[a]:[]).some(f=>Array.isArray(f.hooks)&&f.hooks.some(u=>u.command===c.command&&u.commandWindows===c.commandWindows))}))return "nochange";for(let a of r){let f=(Array.isArray(s[a])?s[a]:[]).filter(p=>!Nt(p,n)),u=e==="grok_cli"?{hooks:[re(e,a,t,n)]}:{matcher:"",hooks:[re(e,a,t,n)]};f.push(u),s[a]=f;}return i.hooks=s,je(o,i),"wrote"}var Ne=12;function Mt(e,t){return [e.bash,e.powershell,e.command].some(n=>typeof n=="string"&&Me(n,t))}function Dt(e,t,n,r){let o=V(e),i=He(o);typeof i.version!="number"&&(i.version=1);let s=i.hooks&&typeof i.hooks=="object"?i.hooks:{};if(r.every(a=>{let c=D(e,a,t,n);return (Array.isArray(s[a])?s[a]:[]).some(f=>f.bash===c&&f.timeoutSec===Ne)}))return "nochange";for(let a of r){let f=(Array.isArray(s[a])?s[a]:[]).filter(u=>!Mt(u,n));f.push({type:"command",bash:D(e,a,t,n),powershell:De(e,a,t,n),timeoutSec:Ne}),s[a]=f;}return i.hooks=s,je(o,i),"wrote"}function Ue(e){return [...ye[e]]}function Ht(e){let t=e;for(let n of ["claude","cursor"]){if(new RegExp(`^\\s*\\[compat\\.${n}\\]`,"m").test(t))continue;let r=t.length===0?"":t.endsWith(`
2
+ 'use strict';var child_process=require('child_process'),p=require('fs'),R=require('os'),m=require('path'),crypto=require('crypto');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var p__namespace=/*#__PURE__*/_interopNamespace(p);var R__namespace=/*#__PURE__*/_interopNamespace(R);var m__namespace=/*#__PURE__*/_interopNamespace(m);var P=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var M={minIntervalSeconds:600,serveTimeoutMs:2500,preloadPoolSize:3,killSwitch:false,displayDurationSeconds:25,minSdkVersion:""},fe={claude_code:["SessionStart","Stop","SessionEnd","Notification"],codex:["Stop"],openclaw:[],gemini_cli:["AfterAgent","SessionStart","SessionEnd"],copilot_cli:["agentStop","sessionStart","sessionEnd","notification"],grok_cli:["SessionStart","Stop","SessionEnd","Notification"],generic:["SessionStart","Stop"]},me={claude_code:["SessionStart","Stop","SessionEnd","Notification","UserPromptSubmit","SubagentStart","SubagentStop","StopFailure","PreToolUse","PostToolUse","PostToolUseFailure","PostToolBatch","PermissionRequest","PermissionDenied","UserPromptExpansion","PreCompact","PostCompact","TaskCreated","TaskCompleted","Setup","TeammateIdle","Elicitation","ElicitationResult","ConfigChange","InstructionsLoaded","WorktreeCreate","WorktreeRemove","CwdChanged","FileChanged","MessageDisplay"],codex:["Stop","SessionStart","UserPromptSubmit","PreToolUse","PostToolUse","PermissionRequest","PreCompact","PostCompact"],openclaw:[],gemini_cli:["AfterAgent","SessionStart","SessionEnd","Notification","BeforeAgent","BeforeModel","AfterModel","BeforeToolSelection","BeforeTool","AfterTool","PreCompress"],copilot_cli:["agentStop","sessionStart","sessionEnd","notification","userPromptSubmitted","preToolUse","postToolUse","permissionRequest","errorOccurred","subagentStart","subagentStop"],grok_cli:["SessionStart","Stop","SessionEnd","Notification"],generic:["SessionStart","Stop"]};var I="1.1.42";var rt="https://api.opencrater.to";function B(e,t=process.env){let n=t.OPENCRATER_API_ORIGIN;return ((n&&n.trim()!==""?n:rt)).replace(/\/+$/,"")}function y(...e){try{if(process.env.OPENCRATER_DEBUG!=="1")return;console.error("[opencrater]",...e);try{let t=P("os"),n=P("fs"),r=P("path");n.appendFileSync(r.join(t.homedir(),".config","opencrater","hook.log"),`${new Date().toISOString()} [opencrater] ${e.map(o=>String(o)).join(" ")}
3
+ `);}catch{}}catch{}}function L(e){return typeof e=="number"&&Number.isFinite(e)}function it(e){let t=M;if(typeof e!="object"||e===null)return {...t};let n=e;return {minIntervalSeconds:L(n.minIntervalSeconds)?n.minIntervalSeconds:t.minIntervalSeconds,serveTimeoutMs:L(n.serveTimeoutMs)?n.serveTimeoutMs:t.serveTimeoutMs,preloadPoolSize:L(n.preloadPoolSize)?n.preloadPoolSize:t.preloadPoolSize,killSwitch:n.killSwitch===true,displayDurationSeconds:L(n.displayDurationSeconds)?n.displayDurationSeconds:t.displayDurationSeconds,minSdkVersion:typeof n.minSdkVersion=="string"?n.minSdkVersion:t.minSdkVersion}}async function ge(e,t,n,r,o){try{let i=await fetch(`${e}${t}`,{method:"POST",headers:{"content-type":"application/json",...o??{}},body:JSON.stringify(n),signal:AbortSignal.timeout(r)});return i.ok?await i.json():(y(`POST ${t} -> HTTP ${i.status}`),null)}catch(i){return y(`POST ${t} failed:`,i),null}}function he(e,t){let n=e.host??"generic";return {publisherKey:e.publisherKey,packageName:e.packageName,placement:e.placement,host:n,sdkVersion:I,installId:t.installId,os:process.platform,termProgram:process.env.TERM_PROGRAM??void 0,topics:t.topics&&t.topics.length>0?t.topics:void 0}}function ye(e){if(typeof e!="object"||e===null)return null;let t=e;if(typeof t.fill!="boolean")return null;let n={fill:t.fill,fallback:t.fallback??null,config:it(t.config),...Array.isArray(t.allowedPlacements)?{allowedPlacements:t.allowedPlacements.filter(r=>typeof r=="string")}:{}};return t.blip!==void 0&&t.blip!==null&&(n.blip=t.blip),typeof t.computeBalanceMicroUsd=="number"&&(n.computeBalanceMicroUsd=t.computeBalanceMicroUsd),typeof t.weeklyGrantMicroUsd=="number"&&(n.weeklyGrantMicroUsd=t.weeklyGrantMicroUsd),typeof t.pendingMicroUsd=="number"&&(n.pendingMicroUsd=t.pendingMicroUsd),n}async function Se(e,t){let n=await ge(t.origin,"/v1/serve",he(e,t),t.timeoutMs);return ye(n)}async function be(e,t,n){let r={...he(t,n),publisherKey:t.publisherKey??"",packageName:t.packageName??""},o=await ge(n.origin,"/v1/dev/serve",r,n.timeoutMs,{authorization:`Bearer ${e}`});return ye(o)}function ke(e){let t={sponsorLabel:e.sponsorLabel,title:e.creative.title,body:e.creative.body,url:e.clickUrl};return e.creative.cta!==void 0&&(t.cta=e.creative.cta),t}function we(e){return {sponsorLabel:"",title:e.title,body:e.body,url:e.url}}function F(e){let t=ke(e),n=e.creative;switch(n.format){case "image":case "gif":return {...t,body:n.textFallback??t.body};case "video":return {...t,body:n.textFallback??t.body,cta:t.cta??"\u25B6 Watch"};case "audio":return {...t,body:n.textFallback??t.body,cta:t.cta??"\u{1F50A} Listen"};default:return t}}function H(e=process.env){return m__namespace.join(R__namespace.homedir(),".config","opencrater")}function J(e=process.env){return m__namespace.join(H(e),"state.json")}function G(){return {installId:crypto.randomUUID(),lastShownAt:0,optOut:false,disclosureShown:false,cachedConfig:null,configFetchedAt:0,pool:[],allowedPlacements:{},sessionTopics:[],integrations:[],devToken:null,computeRouting:null,computeCards:null}}function C(e){return typeof e=="number"&&Number.isFinite(e)}var Ce=new Set(["EPERM","EACCES","EBUSY","EEXIST"]);function Ee(e){for(let t=0;;t++)try{return {text:p__namespace.readFileSync(e,"utf8")}}catch(n){let r=n.code??"";if(!(r==="ENOENT"||Ce.has(r)))return {locked:true};if(t>=4)return r==="ENOENT"?{missing:true}:{locked:true};try{Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,15*(t+1));}catch{}}}function at(e){if(typeof e!="object"||e===null)return null;let t=e;return !C(t.minIntervalSeconds)||!C(t.serveTimeoutMs)||!C(t.preloadPoolSize)||typeof t.killSwitch!="boolean"?null:{minIntervalSeconds:t.minIntervalSeconds,serveTimeoutMs:t.serveTimeoutMs,preloadPoolSize:t.preloadPoolSize,killSwitch:t.killSwitch,displayDurationSeconds:C(t.displayDurationSeconds)?t.displayDurationSeconds:25,minSdkVersion:typeof t.minSdkVersion=="string"?t.minSdkVersion:""}}function ct(e){if(!Array.isArray(e))return [];let t=[];for(let n of e){if(typeof n!="object"||n===null)continue;let r=n,o=r.blip;if(!C(r.renderBy)||typeof o!="object"||o===null||typeof o.impressionId!="string"||typeof o.clickUrl!="string"||typeof o.sponsorLabel!="string"||typeof o.creative!="object"||o.creative===null)continue;let i=o.creative;typeof i.title!="string"||typeof i.body!="string"||t.push({blip:{impressionId:o.impressionId,...typeof o.campaignId=="string"?{campaignId:o.campaignId}:{},clickUrl:o.clickUrl,sponsorLabel:o.sponsorLabel,creative:{format:"text",title:i.title,body:i.body,...typeof i.cta=="string"?{cta:i.cta}:{}}},renderBy:r.renderBy});}return t}function lt(e){if(typeof e!="object"||e===null||Array.isArray(e))return {};let t={};for(let[n,r]of Object.entries(e)){if(!Array.isArray(r))continue;let o=r.filter(i=>typeof i=="string"&&i.length<=64);t[n]=o.slice(0,64);}return t}function ut(e){if(!Array.isArray(e))return [];let t=[];for(let n of e){if(typeof n!="object"||n===null)continue;let r=n;if(!(typeof r.topic!="string"||!C(r.at))&&(t.push({topic:r.topic.slice(0,32),at:r.at}),t.length>=24))break}return t}function pt(e){if(!Array.isArray(e))return [];let t=[],n=new Set;for(let r of e){if(typeof r!="object"||r===null)continue;let o=r;if(typeof o.key!="string"||typeof o.package!="string"||o.key===""||o.package==="")continue;let i=`${o.package}\0${o.key}`;if(!n.has(i)&&(n.add(i),t.push({key:o.key,package:o.package}),t.length>=32))break}return t}function dt(e){if(typeof e!="object"||e===null)return null;let t=e,n={};if(typeof t.savedEnv=="object"&&t.savedEnv!==null)for(let[r,o]of Object.entries(t.savedEnv))(typeof o=="string"||o===null)&&(n[r]=o);return {active:t.active===true,savedEnv:n}}function ft(e){if(typeof e!="object"||e===null)return null;let t=e,n=r=>C(r)&&r>=0?r:0;return {turns:n(t.turns),lastLimitAt:n(t.lastLimitAt),lastDepletedAt:n(t.lastDepletedAt),lastBackupAt:n(t.lastBackupAt)}}function mt(e){let t=G();if(typeof e!="object"||e===null)return t;let n=e;return {installId:typeof n.installId=="string"&&n.installId.length>0?n.installId:t.installId,lastShownAt:C(n.lastShownAt)&&n.lastShownAt>=0?n.lastShownAt:0,optOut:n.optOut===true,disclosureShown:n.disclosureShown===true,cachedConfig:at(n.cachedConfig),allowedPlacements:lt(n.allowedPlacements),sessionTopics:ut(n.sessionTopics),integrations:pt(n.integrations),devToken:typeof n.devToken=="string"?n.devToken:null,computeRouting:dt(n.computeRouting),computeCards:ft(n.computeCards),configFetchedAt:C(n.configFetchedAt)&&n.configFetchedAt>=0?n.configFetchedAt:0,pool:ct(n.pool)}}function ee(e=process.env){let t=J(e),n=Ee(t);if(n.text!==void 0)try{return mt(JSON.parse(n.text))}catch{let r=G();try{S(r,e);}catch{}return r}if(n.missing){let r=G();try{S(r,e);}catch{}return r}return G()}function S(e,t=process.env,n={}){let r=J(t),o=m__namespace.dirname(r);p__namespace.mkdirSync(o,{recursive:true});let i=Ee(r),s=null;if(i.text!==void 0)try{s=JSON.parse(i.text);}catch{s=null;}if(s)typeof s.lastShownAt=="number"&&s.lastShownAt>e.lastShownAt&&(e={...e,lastShownAt:s.lastShownAt}),!n.allowClearToken&&typeof s.devToken=="string"&&e.devToken==null&&(e={...e,devToken:s.devToken}),typeof s.installId=="string"&&s.installId.length>0&&s.installId!==e.installId&&(e={...e,installId:s.installId});else if(!n.allowClearToken&&e.devToken==null&&i.text===void 0&&!i.missing)return;let c=m__namespace.join(o,`.state.${process.pid}.${Math.random().toString(36).slice(2)}.tmp`);p__namespace.writeFileSync(c,JSON.stringify(e,null,2)+`
4
+ `,"utf8");for(let a=0;;a++)try{p__namespace.renameSync(c,r);return}catch(l){let f=l.code??"";if(a>=4||!Ce.has(f)){try{p__namespace.rmSync(c,{force:!0});}catch{}if(a>=4)return;throw l}try{Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,15*(a+1));}catch{}}}var gt=300*1e3;function ht(){return m__namespace.join(H(),"blocked-ads.json")}function te(){return m__namespace.join(H(),"recent-renders.json")}function yt(){return m__namespace.join(H(),"reported-ads.json")}function Te(e,t){let n={};for(let[r,o]of Object.entries(e))typeof o=="number"&&Number.isFinite(o)&&o>t&&(n[r]=o);return n}function St(e){try{let t=JSON.parse(p__namespace.readFileSync(ht(),"utf8"));return Te(t&&typeof t=="object"?t:{},e)}catch{return {}}}function bt(){try{let e=JSON.parse(p__namespace.readFileSync(yt(),"utf8"));return e&&typeof e=="object"?e:{}}catch{return {}}}function kt(e){return e?bt()[e]!==void 0:false}function K(e,t=Date.now()){return e?St(t)[e]!==void 0||kt(e):false}function Re(e){try{let t=JSON.parse(p__namespace.readFileSync(te(),"utf8"));return Te(t&&typeof t=="object"?t:{},e)}catch{return {}}}function Y(e,t=Date.now()){if(e)try{let n=Re(t);n[e]=t+gt,p__namespace.mkdirSync(m__namespace.dirname(te()),{recursive:!0}),p__namespace.writeFileSync(te(),JSON.stringify(n));}catch{}}function W(e,t=Date.now()){return e?Re(t)[e]!==void 0:false}function wt(e,t){return e.filter(n=>n.renderBy>t)}function ne(e,t){let n=wt(e.pool,t),r=n.shift();return {blip:r?r.blip:null,pool:n}}var vt=["claude_code","codex","gemini_cli","copilot_cli","grok_cli"];function xe(e){return e.includes("opencrater-hook")||/opencrater[\\/][^"']*hook\.js/.test(e)}function Ct(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Et(e,t){return xe(e)&&new RegExp(`--package ['"]?${Ct(t)}['"]?`).test(e)}function Pe(e,t){return t?Et(e,t):xe(e)&&!/--package\b/.test(e)}function _e(e){return /^[A-Za-z0-9@_./:-]+$/.test(e)?e:`'${e.replace(/'/g,"'\\''")}'`}var Oe='"$HOME/.config/opencrater/runtime/node_modules/opencrater/dist/hook.js"',Ie="$env:USERPROFILE\\.config\\opencrater\\runtime\\node_modules\\opencrater\\dist\\hook.js";function D(e,t,n,r){let o=`--placement ${t}`;return n&&(o+=` --key ${_e(n)}`),r&&(o+=` --package ${_e(r)}`),o+=` --host ${e}`,`{ if [ -f ${Oe} ]; then node ${Oe} ${o}; else npx -y -p opencrater opencrater-hook ${o}; fi; } 2>/dev/null || true`}function Tt(e,t,n){if(process.platform!=="win32")return D("grok_cli",e,t,n);let r=`--placement ${e}`;t&&(r+=` --key ${t}`),n&&(r+=` --package ${n}`),r+=" --host grok_cli";let o=`${R__namespace.homedir()}\\.config\\opencrater\\runtime\\node_modules\\opencrater\\dist\\hook.js`;return `try { if (Test-Path "${o}") { node "${o}" ${r} } else { npx -y -p opencrater opencrater-hook ${r} } } catch {}`}function Ne(e,t,n,r){let o=`--placement ${t}`;return n&&(o+=` --key '${n}'`),r&&(o+=` --package '${r}'`),o+=` --host ${e}`,`try { if (Test-Path "${Ie}") { node "${Ie}" ${o} } else { npx -y -p opencrater opencrater-hook ${o} } } catch {}`}function Rt(e,t,n){if(process.platform!=="win32")return D("claude_code",e,t,n);let r=`--placement ${e}`;return t&&(r+=` --key ${t}`),n&&(r+=` --package ${n}`),r+=" --host claude_code",`node "${`${R__namespace.homedir()}\\.config\\opencrater\\runtime\\node_modules\\opencrater\\dist\\hook.js`}" ${r}; exit 0`}function oe(e,t,n,r){if(e==="grok_cli")return {type:"command",command:Tt(t,n,r),timeout:15};let i={type:"command",command:e==="claude_code"?Rt(t,n,r):D(e,t,n,r)};return e==="codex"&&(i.commandWindows=Ne(e,t,n,r)),i}function re(e,t){let n=R__namespace.homedir();switch(e){case "claude_code":{let r=t.CLAUDE_CONFIG_DIR;return r&&r.trim()!==""?r:m__namespace.join(n,".claude")}case "codex":{let r=t.CODEX_HOME;return r&&r.trim()!==""?r:m__namespace.join(n,".codex")}case "gemini_cli":return m__namespace.join(n,".gemini");case "copilot_cli":{let r=t.COPILOT_HOME;return r&&r.trim()!==""?r:m__namespace.join(n,".copilot")}case "grok_cli":{let r=t.GROK_HOME;return r&&r.trim()!==""?r:m__namespace.join(n,".grok")}default:return m__namespace.join(n,".opencrater-unknown")}}function z(e,t=process.env){let n=re(e,t);switch(e){case "claude_code":return m__namespace.join(n,"settings.json");case "codex":return m__namespace.join(n,"hooks.json");case "gemini_cli":return m__namespace.join(n,"settings.json");case "copilot_cli":return m__namespace.join(n,"hooks","hooks.json");case "grok_cli":return m__namespace.join(n,"hooks","opencrater.json");default:return m__namespace.join(n,"hooks.json")}}var _t={claude_code:["claude"],codex:["codex"],gemini_cli:["gemini"],copilot_cli:["copilot"],grok_cli:["grok"]};function Ot(e,t){if(e.length===0)return false;let n=(t.PATH??t.Path??"").split(m__namespace.delimiter).filter(Boolean),r=process.platform==="win32"?["",".exe",".cmd",".bat"]:[""];for(let o of n)for(let i of e)for(let s of r)try{if(p__namespace.existsSync(m__namespace.join(o,i+s)))return !0}catch{}return false}function It(e,t=process.env){try{if(p__namespace.existsSync(re(e,t)))return !0}catch{}return Ot(_t[e]??[],t)}function ie(e=process.env){return vt.filter(t=>It(t,e))}function $e(e){let t;try{t=p__namespace.readFileSync(e,"utf8");}catch{return {}}let n=JSON.parse(t);if(typeof n!="object"||n===null||Array.isArray(n))throw new Error(`${e} is not a JSON object`);return n}function Me(e,t){let n=m__namespace.dirname(e);p__namespace.mkdirSync(n,{recursive:true});let r=m__namespace.join(n,`.${m__namespace.basename(e)}.${process.pid}.tmp`);p__namespace.writeFileSync(r,JSON.stringify(t,null,2)+`
5
+ `,"utf8"),p__namespace.renameSync(r,e);}function At(e,t){return Array.isArray(e.hooks)&&e.hooks.some(n=>typeof n.command=="string"&&Pe(n.command,t))}function xt(e,t,n,r){let o=z(e),i=$e(o),s=i.hooks&&typeof i.hooks=="object"?i.hooks:{};if(r.every(a=>{let l=oe(e,a,t,n);return (Array.isArray(s[a])?s[a]:[]).some(f=>Array.isArray(f.hooks)&&f.hooks.some(d=>d.command===l.command&&d.commandWindows===l.commandWindows))}))return "nochange";for(let a of r){let f=(Array.isArray(s[a])?s[a]:[]).filter(u=>!At(u,n)),d=e==="grok_cli"?{hooks:[oe(e,a,t,n)]}:{matcher:"",hooks:[oe(e,a,t,n)]};f.push(d),s[a]=f;}return i.hooks=s,Me(o,i),"wrote"}var Ae=12;function Pt(e,t){return [e.bash,e.powershell,e.command].some(n=>typeof n=="string"&&Pe(n,t))}function Nt(e,t,n,r){let o=z(e),i=$e(o);typeof i.version!="number"&&(i.version=1);let s=i.hooks&&typeof i.hooks=="object"?i.hooks:{};if(r.every(a=>{let l=D(e,a,t,n);return (Array.isArray(s[a])?s[a]:[]).some(f=>f.bash===l&&f.timeoutSec===Ae)}))return "nochange";for(let a of r){let f=(Array.isArray(s[a])?s[a]:[]).filter(d=>!Pt(d,n));f.push({type:"command",bash:D(e,a,t,n),powershell:Ne(e,a,t,n),timeoutSec:Ae}),s[a]=f;}return i.hooks=s,Me(o,i),"wrote"}function He(e){return [...me[e]]}function $t(e){let t=e;for(let n of ["claude","cursor"]){if(new RegExp(`^\\s*\\[compat\\.${n}\\]`,"m").test(t))continue;let r=t.length===0?"":t.endsWith(`
6
6
  `)?`
7
7
  `:`
8
8
 
9
9
  `;t+=`${r}[compat.${n}]
10
10
  hooks = false
11
- `;}return t}function jt(e){try{let t=m__namespace.join(ie("grok_cli",e),"config.toml"),n="";try{n=d__namespace.readFileSync(t,"utf8");}catch{}let r=Ht(n);if(r===n)return;d__namespace.mkdirSync(m__namespace.dirname(t),{recursive:!0}),d__namespace.writeFileSync(t,r,"utf8");}catch{}}function Ut(e,t,n){let r=Ue(e);return r.length===0?"nochange":(e==="grok_cli"&&jt(process.env),e==="copilot_cli"?Dt(e,t,n,r):$t(e,t,n,r))}function ae(e,t,n=process.env){return se(n).map(r=>{try{let o=Ut(r,e,t);return {host:r,status:o,events:Ue(r)}}catch(o){return {host:r,status:"error",events:[],error:o.message}}})}function Lt(){return m__namespace.join(T__namespace.homedir(),".config","opencrater","runtime")}function Ft(e){return ["install","--prefix",e,"opencrater@latest","--silent","--no-audit","--no-fund"]}function ce(e=Lt()){child_process.spawn("npm",Ft(e),process.platform==="win32"?{detached:false,stdio:"ignore",windowsHide:true,shell:true}:{detached:true,stdio:"ignore"}).unref();}var Ge={atLimit:false,resetAt:null};function Je(e,t=T__namespace.homedir()){try{if(e==="claude_code")return Gt(t);if(e==="codex")return Jt(t)}catch{}return Ge}function Gt(e){let t=d__namespace.readFileSync(m__namespace.join(e,".claude.json"),"utf8"),n=JSON.parse(t),r=n.hasAvailableSubscription===false||n.cachedExtraUsageDisabledReason==="out_of_credits",o=null,l=n.cachedGrowthBookFeatures?.tengu_saffron_lattice?.planLimitsEndDate;if(typeof l=="string"){let a=Date.parse(l);Number.isFinite(a)&&(o=a);}return {atLimit:r,resetAt:o}}function Jt(e){return d__namespace.accessSync(m__namespace.join(e,".codex","auth.json")),Ge}function Ke(e,t){switch(e){case "gemini_cli":return t==="AfterAgent";case "copilot_cli":return t==="agentStop";default:return t==="Stop"}}var Ye=36e5,Kt=30*6e4,Yt=30*6e4,Wt=4*Ye,Vt=3,z="https://opencrater.to/dashboard";function H(e){return `${Math.round(e/1e3).toLocaleString()} tokens`}function zt(e){let t=e/1e3;return t>0&&t<10?`${(Math.round(t*10)/10).toFixed(1)} tokens`:`${Math.round(t).toLocaleString()} tokens`}function qt(e){switch(e){case "claude_code":return {name:"Claude Code",launch:"opencrater claude",resume:"opencrater claude -c"};case "codex":return {name:"Codex",launch:"opencrater codex",resume:"opencrater codex -c"};case "grok_cli":return {name:"Grok",launch:"opencrater grok",resume:"opencrater grok -c"};default:return null}}var q="opencrater claude";function Xt(e,t){if(!e||e<=t)return "";let n=e-t,r=n>=864e5?`${Math.floor(n/864e5)}d`:`${Math.max(1,Math.floor(n/Ye))}h`,o=new Date(e).toISOString().slice(0,10);return ` Your host limit resets in ${r} (${o}).`}function We(e){let{balanceMicroUsd:t,pendingMicroUsd:n,onGateway:r,turnEnd:o,hostName:i,host:s,cc:l,now:a}=e;if(t===null)return null;let c=qt(i),f=n&&n>0?` (+${zt(n)} pending)`:"";return t<=0?a-(l.lastDepletedAt??0)<Yt?null:{kind:"depleted",card:{sponsorLabel:"OpenCrater",title:"Compute used up",body:`Keep coding in any CLI to earn more compute, then switch back to ${c?.name??"your plan"}.`+Xt(s.resetAt,a),url:z,cta:"Earn more"}}:r?!o||(l.turns??0)%Vt!==0?null:{kind:"hud",card:{sponsorLabel:"OpenCrater",title:"Running on OpenCrater compute",body:`${H(t)} compute available${f}.`,url:z,cta:"Wallet"}}:s.atLimit?a-(l.lastLimitAt??0)<Kt?null:{kind:"limit",card:{sponsorLabel:"OpenCrater",title:"Hit your limit? You've got compute",body:c?`${H(t)} of OpenCrater compute is ready. Continue this ${c.name} session now: ${c.resume}`:`${H(t)} of OpenCrater compute is ready. Run your coding agent on it: ${q}`,url:z,cta:c?c.resume:q}}:a-(l.lastBackupAt??0)>=Wt?{kind:"backup",card:{sponsorLabel:"OpenCrater",title:"Backup compute ready",body:c?`${H(t)} of OpenCrater compute waiting${f}. When you hit your limit: ${c.resume}`:`${H(t)} of OpenCrater compute waiting${f}. Spend it any time: ${q}`,url:z,cta:c?c.resume:q}}:null}var tn=["CI","CONTINUOUS_INTEGRATION","GITHUB_ACTIONS","GITLAB_CI","CIRCLECI","TRAVIS","BUILDKITE","JENKINS_URL","TEAMCITY_VERSION","TF_BUILD","APPVEYOR","CODEBUILD_BUILD_ID","DRONE","NETLIFY","VERCEL"];function ue(e){return e!==void 0&&e!==""&&e!=="0"&&e.toLowerCase()!=="false"}function nn(e){return ue(e.OPENCRATER_DISABLE)||ue(e.TSN_DISABLE)}function on(e){return tn.some(t=>ue(e[t]))}function Z(e){return e?{...$,...e}:$}function et(e,t={}){if(nn(e.env))return "env_disabled";if(e.state.optOut)return "opt_out";let n=Z(e.state.cachedConfig);if(n.killSwitch)return "kill_switch";if(on(e.env))return "ci";if(!t.skipTTY&&false);if(!t.skipFrequency){let r=n.minIntervalSeconds*1e3;if(e.state.lastShownAt>0&&e.now-e.state.lastShownAt<r)return "frequency"}return null}var rn=new Set(["the","and","for","but","not","you","all","any","can","this","that","with","have","will","your","from","they","what","when","where","how","why","make","fix","add","update","remove","create","delete","change","error","errors","bug","bugs","file","files","code","test","tests","run","running","build","please","help","want","need","should","would","could","into","about","then","here","there","now","new","use","using","used","work","working","works","check","show","see","look","get","set","let","lets","dont","cant","issue"]);function sn(e){if(e.includes("/")||e.includes("\\")||e.includes("@")||e.includes("://"))return true;let t=e.toLowerCase();return !!(/^(sk|pk|rk|ock|ghp|gho|ghs|xox|akia|eyj|npm|glpat)[-_]/.test(t)||e.length>=16&&/^[0-9a-f]+$/i.test(e)||e.length>=20&&/^[A-Za-z0-9+/=_-]+$/.test(e)&&/[A-Z]/.test(e)&&/[0-9]/.test(e))}function an(e,t=12){let n=[];for(let r of e.slice(0,2e3).split(/\s+/))if(!(!r||sn(r)))for(let o of r.split(/[^A-Za-z0-9+#.]+|(?<=[a-z0-9])(?=[A-Z])/)){let i=o.replace(/^[.]+|[.]+$/g,"").toLowerCase();if(!(i.length<3||i.length>24)&&!(/^\d+$/.test(i)||rn.has(i))&&!n.includes(i)&&(n.push(i),n.length>=t))return n}return n}function pe(e){let t=[];typeof e.prompt=="string"&&t.push(e.prompt);let n=e.cwd;if(typeof n=="string"&&n.length>0){let r=n.replace(/[\\/]+$/,""),o=r.split(/[\\/]/).pop()??"",i=(process.env.HOME??process.env.USERPROFILE??"").replace(/[\\/]+$/,""),s=process.env.USER??process.env.USERNAME??"";r!==i&&o!==s&&o.length>0&&t.push(o.replace(/[-_]/g," "));}return an(t.join(" "))}function de(e,t,n){let r=new Map;for(let{topic:o,at:i}of e)n-i<216e5&&r.set(o,i);for(let o of t)r.set(o,n);return [...r.entries()].map(([o,i])=>({topic:o,at:i})).sort((o,i)=>i.at-o.at).slice(0,24)}function tt(e,t){return e.filter(({at:n})=>t-n<216e5).sort((n,r)=>r.at-n.at).slice(0,12).map(({topic:n})=>n)}var un=false,pn=process.platform==="win32"?8e3:3200,dn=150,fe=250,fn=2800,me="claude_code";function mn(e){let t={host:"claude_code"};for(let n=0;n<e.length;n++){let r=e[n],o=e[n+1];switch(r){case "--placement":o!==void 0&&(t.placement=o,n++);break;case "--key":o!==void 0&&(t.key=o,n++);break;case "--package":o!==void 0&&(t.package=o,n++);break;case "--host":(o==="claude_code"||o==="codex"||o==="openclaw"||o==="gemini_cli"||o==="copilot_cli"||o==="grok_cli"||o==="generic")&&(t.host=o,n++);break;}}return t}function gn(e){return new Promise(t=>{if(process.stdin.isTTY){t("");return}let n="",r=false,o=()=>{r||(r=true,t(n));},i=setTimeout(o,e);i.unref?.(),process.stdin.setEncoding("utf8"),process.stdin.on("data",s=>{n+=s;}),process.stdin.on("end",()=>{clearTimeout(i),o();}),process.stdin.on("error",()=>{clearTimeout(i),o();});})}var hn="\\\\.\\CONOUT$";function yn(e){return !e||e==="?"||e==="??"||e==="-"?null:e.startsWith("/")?e:`/dev/${e}`}function Sn(e){let t=e.match(/^\s*(\d+)\s+(\S+)/);return t?{ppid:Number(t[1]),tty:t[2]}:null}function bn(e){if(!Number.isInteger(e)||e<=0)return null;let t=e>>8&4095,n=e&255|e>>12&1048320;return t>=136&&t<=143?`/dev/pts/${(t-136)*256+n}`:t===4?n<64?`/dev/tty${n}`:`/dev/ttyS${n-64}`:null}function kn(e){let t=e.lastIndexOf(")");if(t<0)return null;let n=e.slice(t+1).trim().split(/\s+/),r=Number(n[1]),o=Number(n[4]);return !Number.isInteger(r)||!Number.isInteger(o)?null:{ppid:r,ttyNr:o}}function wn(e){try{let t=kn(d__namespace.readFileSync(`/proc/${e}/stat`,"utf8"));if(t)return {ppid:t.ppid,ttyPath:bn(t.ttyNr)}}catch{}try{let t=child_process.spawnSync("ps",["-o","ppid=,tty=","-p",String(e)],{encoding:"utf8",timeout:1500}).stdout?.trim();if(!t)return null;let n=Sn(t);return n?{ppid:n.ppid,ttyPath:yn(n.tty)}:null}catch{return null}}function vn(){if(process.platform==="win32")return {path:hn,ownerPid:null};let e=process.pid;for(let t=0;t<12&&e>1;t++){let n=wn(e);if(!n)return null;if(n.ttyPath)return {path:n.ttyPath,ownerPid:e};e=n.ppid;}return null}function Cn(e){return e==="win32"?{detached:false,stdio:"ignore",windowsHide:false}:{detached:true,stdio:"ignore",windowsHide:false}}async function j(e,t,n,r,o){try{let i=m__namespace.join(__dirname,"paint.js"),s=Z(t.cachedConfig),l=Math.min(Math.max(s.displayDurationSeconds??25,3),120),a={...e,format:n?.format,mediaUrl:n?.mediaUrl,mediaPixelUrl:n?.mediaPixelUrl,audioUrl:n?.audioUrl,impressionId:r,campaignId:o,apiOrigin:Q(),durationMs:l*1e3,disclosure:!t.disclosureShown,host:me},c={...process.env,OPENCRATER_PAINT:JSON.stringify(a)};if(!c.OPENCRATER_TTY){let u=vn();u&&(c.OPENCRATER_TTY=u.path,u.ownerPid!==null&&(c.OPENCRATER_HOST_PID=String(u.ownerPid)));}let f=child_process.spawn(process.execPath,[i],{...Cn(process.platform),env:c});process.platform==="win32"?await new Promise(u=>{let p=!1,R=()=>{p||(p=!0,u());};f.on("exit",R),f.on("error",R),setTimeout(R,7500);}):f.unref();}catch{}return {...t,lastShownAt:Date.now(),disclosureShown:true}}function nt(e){if(process.platform!=="win32")return false;try{let t=m__namespace.join(T__namespace.homedir(),".config","opencrater","painter.lock"),n=JSON.parse(d__namespace.readFileSync(t,"utf8"));if(typeof n.startedAt!="number"||Date.now()-n.startedAt>e+1500)return !1;if(typeof n.pid=="number")try{process.kill(n.pid,0);}catch(r){if(r.code==="ESRCH")return !1}return !0}catch{return false}}var En=8e3;function ot(){let e=m__namespace.join(T__namespace.homedir(),".config","opencrater","render.lock");try{let t=d__namespace.statSync(e);if(Date.now()-t.mtimeMs<En)return !1;d__namespace.unlinkSync(e);}catch{}try{return d__namespace.mkdirSync(m__namespace.join(T__namespace.homedir(),".config","opencrater"),{recursive:!0}),d__namespace.writeFileSync(e,String(process.pid),{flag:"wx"}),!0}catch{return false}}function Tn(e,t,n,r){if(!t)return true;let o=e.allowedPlacements[`${t}:${n}`];return o?o.includes(r):t==="opencrater"?he[n].includes(r):true}var Rn=1440*60*1e3;function _n(){try{let e=m__namespace.join(T__namespace.homedir(),".config","opencrater","runtime"),t=m__namespace.join(e,"node_modules","opencrater","dist","hook.js"),n=m__namespace.join(e,".last-update");if(d__namespace.existsSync(t)){try{if(Date.now()-d__namespace.statSync(n).mtimeMs<Rn)return}catch{}try{d__namespace.writeFileSync(n,String(Date.now()));}catch{return}}else {let r=m__namespace.join(e,".installing");try{d__namespace.mkdirSync(e,{recursive:!0});let o=d__namespace.statSync(r);if(Date.now()-o.mtimeMs<600*1e3)return}catch{}d__namespace.writeFileSync(r,String(Date.now()));}ce(e);}catch{}}function rt(e,t){if(!t)return false;let n=s=>s.split(/[-+]/)[0].split(".").map(l=>parseInt(l,10)||0),r=n(e),o=n(t),i=Math.max(r.length,o.length);for(let s=0;s<i;s++){let l=r[s]??0,a=o[s]??0;if(l!==a)return l<a}return false}function it(){try{let e=m__namespace.join(T__namespace.homedir(),".config","opencrater","runtime"),t=m__namespace.join(e,".last-update"),n=m__namespace.join(e,".force-update");try{if(Date.now()-d__namespace.statSync(n).mtimeMs<600*1e3)return}catch{}d__namespace.mkdirSync(e,{recursive:!0}),d__namespace.writeFileSync(n,String(Date.now()));try{d__namespace.rmSync(t,{force:!0});}catch{}ce(e);}catch{}}function On(){try{let e=m__namespace.join(T__namespace.homedir(),".config","opencrater");d__namespace.mkdirSync(e,{recursive:!0}),d__namespace.writeFileSync(m__namespace.join(e,"activity.signal"),String(Date.now()));}catch{}}var In=1440*60*1e3;function An(){try{let e=m__namespace.join(T__namespace.homedir(),".config","opencrater"),t=m__namespace.join(e,".last-host-check"),n=m__namespace.join(e,".known-hosts"),r=se().sort(),o=[];try{let l=JSON.parse(d__namespace.readFileSync(n,"utf8"));Array.isArray(l)&&(o=l.filter(a=>typeof a=="string"));}catch{}if(!r.some(l=>!o.includes(l)))try{if(Date.now()-d__namespace.statSync(t).mtimeMs<In)return}catch{}d__namespace.mkdirSync(e,{recursive:!0});try{d__namespace.writeFileSync(t,String(Date.now()));}catch{return}let s=te();try{d__namespace.writeFileSync(n,JSON.stringify(r));}catch{}if(s.optOut)return;if(s.devToken)try{ae();}catch{}for(let l of s.integrations)try{ae(l.key,l.package);}catch{}}catch{}}async function xn(){let e=mn(process.argv.slice(2));if(me=e.host,process.env.GROK_HOOK_EVENT&&me!=="grok_cli")return;On(),_n(),An();let t=await gn(dn),n={};if(t)try{n=JSON.parse(t);let p=n.hook_event_name;!e.placement&&typeof p=="string"&&(e.placement=p);}catch{}let r=e.placement??"SessionStart",o=te();y(`state=${G()} devToken=${o.devToken?"present":"MISSING"}`,`host=${e.host} placement=${r}`);let i=et({env:process.env,state:o,now:Date.now()},{skipTTY:true});if(i!==null){if(i==="frequency"){let p=pe(n);p.length>0&&S({...o,sessionTopics:de(o.sessionTopics,p,Date.now())});}y("hook suppressed:",i);return}if(o={...o,sessionTopics:de(o.sessionTopics,pe(n),Date.now())},!Tn(o,e.package,e.host,r)){S(o),y("hook gated: placement",r,"not selected for",e.package);return}let s=Z(o.cachedConfig),l=Q(),a={origin:l,timeoutMs:Math.min(s.serveTimeoutMs,fn),installId:o.installId,topics:tt(o.sessionTopics,Date.now())};if(o.devToken){let p=await we(o.devToken,{publisherKey:e.key??"",packageName:e.package??"",placement:r,host:e.host},a);if(p){if(o={...o,cachedConfig:p.config,configFetchedAt:Date.now()},rt(_,p.config.minSdkVersion)&&it(),un);let R=e.host??"claude_code",ge=Ke(R,r),I=o.computeCards??{turns:0,lastLimitAt:0,lastDepletedAt:0,lastBackupAt:0};ge&&(I.turns+=1);let A=We({balanceMicroUsd:typeof p.computeBalanceMicroUsd=="number"?p.computeBalanceMicroUsd:null,weeklyGrantMicroUsd:typeof p.weeklyGrantMicroUsd=="number"?p.weeklyGrantMicroUsd:null,pendingMicroUsd:typeof p.pendingMicroUsd=="number"?p.pendingMicroUsd:null,onGateway:(process.env.ANTHROPIC_BASE_URL??"").includes("/gateway")||process.env.OPENCRATER_ON_GATEWAY==="1",turnEnd:ge,hostName:R,host:Je(R),cc:I,now:Date.now()}),st=(p.config.displayDurationSeconds??25)*1e3,v=p.fill&&p.blip&&!J(p.blip.campaignId)&&!Y(p.blip.campaignId)?p.blip:null;if((A||v)&&!nt(st)&&ot())if(A){let C=Date.now();A.kind==="limit"?I.lastLimitAt=C:A.kind==="depleted"?I.lastDepletedAt=C:A.kind==="backup"&&(I.lastBackupAt=C),o=await j({...A.card,label:"OpenCrater"},o);}else v&&(K(v.campaignId),o=await j(L(v),o,v.creative,v.impressionId,v.campaignId),o.devToken&&await Promise.race([ve(o.devToken,v.impressionId,a),new Promise(C=>setTimeout(C,fe).unref?.())]));o={...o,computeCards:I};}S(o);return}let{blip:c,pool:f}=oe(o,Date.now());for(;c&&(J(c.campaignId)||Y(c.campaignId));)y("hook: pooled blip skipped \u2014 campaign inside a local cooldown"),{blip:c,pool:f}=oe({pool:f},Date.now());if((c||e.key)&&nt((s.displayDurationSeconds??25)*1e3)){S(o),y("hook: a card is already on screen \u2014 not rendering another");return}if((c||e.key)&&!ot()){S(o),y("hook: render slot already claimed by a concurrent fire");return}if(c){K(c.campaignId),o=await j(L(c),{...o,pool:f},c.creative,c.impressionId,c.campaignId),S(o),await Promise.race([ee(c.impressionId,a),new Promise(p=>setTimeout(p,fe).unref?.())]);return}if(f.length!==o.pool.length&&(o={...o,pool:f}),!e.key||!e.package){S(o),y("hook: pool empty and no --key/--package; nothing to render");return}let u=await ke({publisherKey:e.key,packageName:e.package,placement:r,host:e.host},a);if(!u){S(o);return}if(o={...o,cachedConfig:u.config,configFetchedAt:Date.now()},rt(_,u.config.minSdkVersion)&&(y(`SDK ${_} below floor ${u.config.minSdkVersion} \u2014 forcing runtime update`),it()),e.package&&u.allowedPlacements&&(o={...o,allowedPlacements:{...o.allowedPlacements,[`${e.package}:${e.host}`]:u.allowedPlacements}}),u.fill&&u.blip){if(J(u.blip.campaignId)||Y(u.blip.campaignId)){y("hook: served blip suppressed \u2014 campaign inside a local cooldown"),S(o);return}K(u.blip.campaignId),o=await j(L(u.blip),o,u.blip.creative,u.blip.impressionId,u.blip.campaignId),S(o),await Promise.race([ee(u.blip.impressionId,a),new Promise(p=>setTimeout(p,fe).unref?.())]);return}u.fallback&&(o=await j(Ee(u.fallback),o)),S(o);}if(typeof x<"u"&&typeof module<"u"&&x.main===module){let e=setTimeout(()=>process.exit(0),pn);xn().catch(t=>y(`opencrater-hook v${_} error:`,t)).finally(()=>{clearTimeout(e),process.exit(0);});}
12
- exports.decodeTtyNr=bn;exports.painterSpawnOptions=Cn;exports.parseArgs=mn;exports.parseProcStat=kn;exports.parsePsLine=Sn;exports.resolveTtyPath=vn;exports.ttyNameToDevPath=yn;
11
+ `;}return t}function Mt(e){try{let t=m__namespace.join(re("grok_cli",e),"config.toml"),n="";try{n=p__namespace.readFileSync(t,"utf8");}catch{}let r=$t(n);if(r===n)return;p__namespace.mkdirSync(m__namespace.dirname(t),{recursive:!0}),p__namespace.writeFileSync(t,r,"utf8");}catch{}}function Ht(e,t,n){let r=He(e);return r.length===0?"nochange":(e==="grok_cli"&&Mt(process.env),e==="copilot_cli"?Nt(e,t,n,r):xt(e,t,n,r))}function se(e,t,n=process.env){return ie(n).map(r=>{try{let o=Ht(r,e,t);return {host:r,status:o,events:He(r)}}catch(o){return {host:r,status:"error",events:[],error:o.message}}})}function jt(){return m__namespace.join(R__namespace.homedir(),".config","opencrater","runtime")}function Ut(e){return ["install","--prefix",e,"opencrater@latest","--silent","--no-audit","--no-fund"]}function ae(e=jt()){child_process.spawn("npm",Ut(e),process.platform==="win32"?{detached:false,stdio:"ignore",windowsHide:true,shell:true}:{detached:true,stdio:"ignore"}).unref();}var Le={atLimit:false,resetAt:null};function Be(e,t=R__namespace.homedir()){try{if(e==="claude_code")return Lt(t);if(e==="codex")return Bt(t)}catch{}return Le}function Lt(e){let t=p__namespace.readFileSync(m__namespace.join(e,".claude.json"),"utf8"),n=JSON.parse(t),r=n.hasAvailableSubscription===false||n.cachedExtraUsageDisabledReason==="out_of_credits",o=null,c=n.cachedGrowthBookFeatures?.tengu_saffron_lattice?.planLimitsEndDate;if(typeof c=="string"){let a=Date.parse(c);Number.isFinite(a)&&(o=a);}return {atLimit:r,resetAt:o}}function Bt(e){return p__namespace.accessSync(m__namespace.join(e,".codex","auth.json")),Le}function Fe(e,t){switch(e){case "gemini_cli":return t==="AfterAgent";case "copilot_cli":return t==="agentStop";default:return t==="Stop"}}var Ge=36e5,Ft=30*6e4,Gt=30*6e4,Jt=4*Ge,Kt=3,q="https://opencrater.to/dashboard";function j(e){return `${Math.round(e/1e3).toLocaleString()} tokens`}function Yt(e){let t=e/1e3;return t>0&&t<10?`${(Math.round(t*10)/10).toFixed(1)} tokens`:`${Math.round(t).toLocaleString()} tokens`}function Wt(e){switch(e){case "claude_code":return {name:"Claude Code",launch:"opencrater claude",resume:"opencrater claude -c"};case "codex":return {name:"Codex",launch:"opencrater codex",resume:"opencrater codex -c"};case "grok_cli":return {name:"Grok",launch:"opencrater grok",resume:"opencrater grok -c"};default:return null}}var X="opencrater claude";function Vt(e,t){if(!e||e<=t)return "";let n=e-t,r=n>=864e5?`${Math.floor(n/864e5)}d`:`${Math.max(1,Math.floor(n/Ge))}h`,o=new Date(e).toISOString().slice(0,10);return ` Your host limit resets in ${r} (${o}).`}function Je(e){let{balanceMicroUsd:t,pendingMicroUsd:n,onGateway:r,turnEnd:o,hostName:i,host:s,cc:c,now:a}=e;if(t===null)return null;let l=Wt(i),f=n&&n>0?` (+${Yt(n)} pending)`:"";return t<=0?a-(c.lastDepletedAt??0)<Gt?null:{kind:"depleted",card:{sponsorLabel:"OpenCrater",title:"Compute used up",body:`Keep coding in any CLI to earn more compute, then switch back to ${l?.name??"your plan"}.`+Vt(s.resetAt,a),url:q,cta:"Earn more"}}:r?!o||(c.turns??0)%Kt!==0?null:{kind:"hud",card:{sponsorLabel:"OpenCrater",title:"Running on OpenCrater compute",body:`${j(t)} compute available${f}.`,url:q,cta:"Wallet"}}:s.atLimit?a-(c.lastLimitAt??0)<Ft?null:{kind:"limit",card:{sponsorLabel:"OpenCrater",title:"Hit your limit? You've got compute",body:l?`${j(t)} of OpenCrater compute is ready. Continue this ${l.name} session now: ${l.resume}`:`${j(t)} of OpenCrater compute is ready. Run your coding agent on it: ${X}`,url:q,cta:l?l.resume:X}}:a-(c.lastBackupAt??0)>=Jt?{kind:"backup",card:{sponsorLabel:"OpenCrater",title:"Backup compute ready",body:l?`${j(t)} of OpenCrater compute waiting${f}. When you hit your limit: ${l.resume}`:`${j(t)} of OpenCrater compute waiting${f}. Spend it any time: ${X}`,url:q,cta:l?l.resume:X}}:null}var Zt=["CI","CONTINUOUS_INTEGRATION","GITHUB_ACTIONS","GITLAB_CI","CIRCLECI","TRAVIS","BUILDKITE","JENKINS_URL","TEAMCITY_VERSION","TF_BUILD","APPVEYOR","CODEBUILD_BUILD_ID","DRONE","NETLIFY","VERCEL"];function le(e){return e!==void 0&&e!==""&&e!=="0"&&e.toLowerCase()!=="false"}function Qt(e){return le(e.OPENCRATER_DISABLE)||le(e.TSN_DISABLE)}function en(e){return Zt.some(t=>le(e[t]))}function Q(e){return e?{...M,...e}:M}function Xe(e,t={}){if(Qt(e.env))return "env_disabled";if(e.state.optOut)return "opt_out";let n=Q(e.state.cachedConfig);if(n.killSwitch)return "kill_switch";if(en(e.env))return "ci";if(!t.skipTTY&&false);if(!t.skipFrequency){let r=n.minIntervalSeconds*1e3;if(e.state.lastShownAt>0&&e.now-e.state.lastShownAt<r)return "frequency"}return null}var tn=new Set(["the","and","for","but","not","you","all","any","can","this","that","with","have","will","your","from","they","what","when","where","how","why","make","fix","add","update","remove","create","delete","change","error","errors","bug","bugs","file","files","code","test","tests","run","running","build","please","help","want","need","should","would","could","into","about","then","here","there","now","new","use","using","used","work","working","works","check","show","see","look","get","set","let","lets","dont","cant","issue"]);function nn(e){if(e.includes("/")||e.includes("\\")||e.includes("@")||e.includes("://"))return true;let t=e.toLowerCase();return !!(/^(sk|pk|rk|ock|ghp|gho|ghs|xox|akia|eyj|npm|glpat)[-_]/.test(t)||e.length>=16&&/^[0-9a-f]+$/i.test(e)||e.length>=20&&/^[A-Za-z0-9+/=_-]+$/.test(e)&&/[A-Z]/.test(e)&&/[0-9]/.test(e))}function on(e,t=12){let n=[];for(let r of e.slice(0,2e3).split(/\s+/))if(!(!r||nn(r)))for(let o of r.split(/[^A-Za-z0-9+#.]+|(?<=[a-z0-9])(?=[A-Z])/)){let i=o.replace(/^[.]+|[.]+$/g,"").toLowerCase();if(!(i.length<3||i.length>24)&&!(/^\d+$/.test(i)||tn.has(i))&&!n.includes(i)&&(n.push(i),n.length>=t))return n}return n}function ue(e){let t=[];typeof e.prompt=="string"&&t.push(e.prompt);let n=e.cwd;if(typeof n=="string"&&n.length>0){let r=n.replace(/[\\/]+$/,""),o=r.split(/[\\/]/).pop()??"",i=(process.env.HOME??process.env.USERPROFILE??"").replace(/[\\/]+$/,""),s=process.env.USER??process.env.USERNAME??"";r!==i&&o!==s&&o.length>0&&t.push(o.replace(/[-_]/g," "));}return on(t.join(" "))}function pe(e,t,n){let r=new Map;for(let{topic:o,at:i}of e)n-i<216e5&&r.set(o,i);for(let o of t)r.set(o,n);return [...r.entries()].map(([o,i])=>({topic:o,at:i})).sort((o,i)=>i.at-o.at).slice(0,24)}function Ze(e,t){return e.filter(({at:n})=>t-n<216e5).sort((n,r)=>r.at-n.at).slice(0,12).map(({topic:n})=>n)}var an=false,cn=process.platform==="win32"?8e3:3200,ln=150,un=2800,de="claude_code";function pn(e){let t={host:"claude_code"};for(let n=0;n<e.length;n++){let r=e[n],o=e[n+1];switch(r){case "--placement":o!==void 0&&(t.placement=o,n++);break;case "--key":o!==void 0&&(t.key=o,n++);break;case "--package":o!==void 0&&(t.package=o,n++);break;case "--host":(o==="claude_code"||o==="codex"||o==="openclaw"||o==="gemini_cli"||o==="copilot_cli"||o==="grok_cli"||o==="generic")&&(t.host=o,n++);break;}}return t}function dn(e){return new Promise(t=>{if(process.stdin.isTTY){t("");return}let n="",r=false,o=()=>{r||(r=true,t(n));},i=setTimeout(o,e);i.unref?.(),process.stdin.setEncoding("utf8"),process.stdin.on("data",s=>{n+=s;}),process.stdin.on("end",()=>{clearTimeout(i),o();}),process.stdin.on("error",()=>{clearTimeout(i),o();});})}var fn="\\\\.\\CONOUT$";function mn(e){return !e||e==="?"||e==="??"||e==="-"?null:e.startsWith("/")?e:`/dev/${e}`}function gn(e){let t=e.match(/^\s*(\d+)\s+(\S+)/);return t?{ppid:Number(t[1]),tty:t[2]}:null}function hn(e){if(!Number.isInteger(e)||e<=0)return null;let t=e>>8&4095,n=e&255|e>>12&1048320;return t>=136&&t<=143?`/dev/pts/${(t-136)*256+n}`:t===4?n<64?`/dev/tty${n}`:`/dev/ttyS${n-64}`:null}function yn(e){let t=e.lastIndexOf(")");if(t<0)return null;let n=e.slice(t+1).trim().split(/\s+/),r=Number(n[1]),o=Number(n[4]);return !Number.isInteger(r)||!Number.isInteger(o)?null:{ppid:r,ttyNr:o}}function Sn(e){try{let t=yn(p__namespace.readFileSync(`/proc/${e}/stat`,"utf8"));if(t)return {ppid:t.ppid,ttyPath:hn(t.ttyNr)}}catch{}try{let t=child_process.spawnSync("ps",["-o","ppid=,tty=","-p",String(e)],{encoding:"utf8",timeout:1500}).stdout?.trim();if(!t)return null;let n=gn(t);return n?{ppid:n.ppid,ttyPath:mn(n.tty)}:null}catch{return null}}function bn(){if(process.platform==="win32")return {path:fn,ownerPid:null};let e=process.pid;for(let t=0;t<12&&e>1;t++){let n=Sn(e);if(!n)return null;if(n.ttyPath)return {path:n.ttyPath,ownerPid:e};e=n.ppid;}return null}function kn(e){return e==="win32"?{detached:false,stdio:"ignore",windowsHide:false}:{detached:true,stdio:"ignore",windowsHide:false}}async function U(e,t,n,r,o,i){try{let s=m__namespace.join(__dirname,"paint.js"),c,a;if(i&&r){let b=B();i.kind==="dev"?(c=`${b}/v1/dev/impression`,a=i.token):c=`${b}/v1/events/impression`;}let l=Q(t.cachedConfig),f=Math.min(Math.max(l.displayDurationSeconds??25,3),120),d={...e,format:n?.format,mediaUrl:n?.mediaUrl,mediaPixelUrl:n?.mediaPixelUrl,audioUrl:n?.audioUrl,impressionId:r,campaignId:o,apiOrigin:B(),reportImpressionUrl:c,reportImpressionAuth:a,durationMs:f*1e3,disclosure:!t.disclosureShown,host:de},u={...process.env,OPENCRATER_PAINT:JSON.stringify(d)};if(!u.OPENCRATER_TTY){let b=bn();b&&(u.OPENCRATER_TTY=b.path,b.ownerPid!==null&&(u.OPENCRATER_HOST_PID=String(b.ownerPid)));}let _=child_process.spawn(process.execPath,[s],{...kn(process.platform),env:u});process.platform==="win32"?await new Promise(b=>{let v=!1,k=()=>{v||(v=!0,b());};_.on("exit",k),_.on("error",k),setTimeout(k,7500);}):_.unref();}catch{}return {...t,lastShownAt:Date.now(),disclosureShown:true}}function Qe(e){if(process.platform!=="win32")return false;try{let t=m__namespace.join(R__namespace.homedir(),".config","opencrater","painter.lock"),n=JSON.parse(p__namespace.readFileSync(t,"utf8"));if(typeof n.startedAt!="number"||Date.now()-n.startedAt>e+1500)return !1;if(typeof n.pid=="number")try{process.kill(n.pid,0);}catch(r){if(r.code==="ESRCH")return !1}return !0}catch{return false}}var wn=8e3;function et(){let e=m__namespace.join(R__namespace.homedir(),".config","opencrater","render.lock");try{let t=p__namespace.statSync(e);if(Date.now()-t.mtimeMs<wn)return !1;p__namespace.unlinkSync(e);}catch{}try{return p__namespace.mkdirSync(m__namespace.join(R__namespace.homedir(),".config","opencrater"),{recursive:!0}),p__namespace.writeFileSync(e,String(process.pid),{flag:"wx"}),!0}catch{return false}}function vn(e,t,n,r){if(!t)return true;let o=e.allowedPlacements[`${t}:${n}`];return o?o.includes(r):t==="opencrater"?fe[n].includes(r):true}var Cn=1440*60*1e3;function En(){try{let e=m__namespace.join(R__namespace.homedir(),".config","opencrater","runtime"),t=m__namespace.join(e,"node_modules","opencrater","dist","hook.js"),n=m__namespace.join(e,".last-update");if(p__namespace.existsSync(t)){try{if(Date.now()-p__namespace.statSync(n).mtimeMs<Cn)return}catch{}try{p__namespace.writeFileSync(n,String(Date.now()));}catch{return}}else {let r=m__namespace.join(e,".installing");try{p__namespace.mkdirSync(e,{recursive:!0});let o=p__namespace.statSync(r);if(Date.now()-o.mtimeMs<600*1e3)return}catch{}p__namespace.writeFileSync(r,String(Date.now()));}ae(e);}catch{}}function tt(e,t){if(!t)return false;let n=s=>s.split(/[-+]/)[0].split(".").map(c=>parseInt(c,10)||0),r=n(e),o=n(t),i=Math.max(r.length,o.length);for(let s=0;s<i;s++){let c=r[s]??0,a=o[s]??0;if(c!==a)return c<a}return false}function nt(){try{let e=m__namespace.join(R__namespace.homedir(),".config","opencrater","runtime"),t=m__namespace.join(e,".last-update"),n=m__namespace.join(e,".force-update");try{if(Date.now()-p__namespace.statSync(n).mtimeMs<600*1e3)return}catch{}p__namespace.mkdirSync(e,{recursive:!0}),p__namespace.writeFileSync(n,String(Date.now()));try{p__namespace.rmSync(t,{force:!0});}catch{}ae(e);}catch{}}function Tn(){try{let e=m__namespace.join(R__namespace.homedir(),".config","opencrater");p__namespace.mkdirSync(e,{recursive:!0}),p__namespace.writeFileSync(m__namespace.join(e,"activity.signal"),String(Date.now()));}catch{}}var Rn=1440*60*1e3;function _n(){try{let e=m__namespace.join(R__namespace.homedir(),".config","opencrater"),t=m__namespace.join(e,".last-host-check"),n=m__namespace.join(e,".known-hosts"),r=ie().sort(),o=[];try{let c=JSON.parse(p__namespace.readFileSync(n,"utf8"));Array.isArray(c)&&(o=c.filter(a=>typeof a=="string"));}catch{}if(!r.some(c=>!o.includes(c)))try{if(Date.now()-p__namespace.statSync(t).mtimeMs<Rn)return}catch{}p__namespace.mkdirSync(e,{recursive:!0});try{p__namespace.writeFileSync(t,String(Date.now()));}catch{return}let s=ee();try{p__namespace.writeFileSync(n,JSON.stringify(r));}catch{}if(s.optOut)return;if(s.devToken)try{se();}catch{}for(let c of s.integrations)try{se(c.key,c.package);}catch{}}catch{}}async function On(){let e=pn(process.argv.slice(2));if(de=e.host,process.env.GROK_HOOK_EVENT&&de!=="grok_cli")return;Tn(),En(),_n();let t=await dn(ln),n={};if(t)try{n=JSON.parse(t);let u=n.hook_event_name;!e.placement&&typeof u=="string"&&(e.placement=u);}catch{}let r=e.placement??"SessionStart",o=ee();y(`state=${J()} devToken=${o.devToken?"present":"MISSING"}`,`host=${e.host} placement=${r}`);let i=Xe({env:process.env,state:o,now:Date.now()},{skipTTY:true});if(i!==null){if(i==="frequency"){let u=ue(n);u.length>0&&S({...o,sessionTopics:pe(o.sessionTopics,u,Date.now())});}y("hook suppressed:",i);return}if(o={...o,sessionTopics:pe(o.sessionTopics,ue(n),Date.now())},!vn(o,e.package,e.host,r)){S(o),y("hook gated: placement",r,"not selected for",e.package);return}let s=Q(o.cachedConfig),c=B(),a={origin:c,timeoutMs:Math.min(s.serveTimeoutMs,un),installId:o.installId,topics:Ze(o.sessionTopics,Date.now())};if(o.devToken){let u=await be(o.devToken,{publisherKey:e.key??"",packageName:e.package??"",placement:r,host:e.host},a);if(u){if(o={...o,cachedConfig:u.config,configFetchedAt:Date.now()},tt(I,u.config.minSdkVersion)&&nt(),an);let _=e.host??"claude_code",b=Fe(_,r),v=o.computeCards??{turns:0,lastLimitAt:0,lastDepletedAt:0,lastBackupAt:0};b&&(v.turns+=1);let k=Je({balanceMicroUsd:typeof u.computeBalanceMicroUsd=="number"?u.computeBalanceMicroUsd:null,weeklyGrantMicroUsd:typeof u.weeklyGrantMicroUsd=="number"?u.weeklyGrantMicroUsd:null,pendingMicroUsd:typeof u.pendingMicroUsd=="number"?u.pendingMicroUsd:null,onGateway:(process.env.ANTHROPIC_BASE_URL??"").includes("/gateway")||process.env.OPENCRATER_ON_GATEWAY==="1",turnEnd:b,hostName:_,host:Be(_),cc:v,now:Date.now()}),ot=(u.config.displayDurationSeconds??25)*1e3,O=u.fill&&u.blip&&!K(u.blip.campaignId)&&!W(u.blip.campaignId)?u.blip:null;if((k||O)&&!Qe(ot)&&et())if(k){let x=Date.now();k.kind==="limit"?v.lastLimitAt=x:k.kind==="depleted"?v.lastDepletedAt=x:k.kind==="backup"&&(v.lastBackupAt=x),o=await U({...k.card,label:"OpenCrater"},o);}else O&&(Y(O.campaignId),o=await U(F(O),o,O.creative,O.impressionId,O.campaignId,o.devToken?{kind:"dev",token:o.devToken}:void 0));o={...o,computeCards:v};}S(o);return}let{blip:l,pool:f}=ne(o,Date.now());for(;l&&(K(l.campaignId)||W(l.campaignId));)y("hook: pooled blip skipped \u2014 campaign inside a local cooldown"),{blip:l,pool:f}=ne({pool:f},Date.now());if((l||e.key)&&Qe((s.displayDurationSeconds??25)*1e3)){S(o),y("hook: a card is already on screen \u2014 not rendering another");return}if((l||e.key)&&!et()){S(o),y("hook: render slot already claimed by a concurrent fire");return}if(l){Y(l.campaignId),o=await U(F(l),{...o,pool:f},l.creative,l.impressionId,l.campaignId,{kind:"publisher"}),S(o);return}if(f.length!==o.pool.length&&(o={...o,pool:f}),!e.key||!e.package){S(o),y("hook: pool empty and no --key/--package; nothing to render");return}let d=await Se({publisherKey:e.key,packageName:e.package,placement:r,host:e.host},a);if(!d){S(o);return}if(o={...o,cachedConfig:d.config,configFetchedAt:Date.now()},tt(I,d.config.minSdkVersion)&&(y(`SDK ${I} below floor ${d.config.minSdkVersion} \u2014 forcing runtime update`),nt()),e.package&&d.allowedPlacements&&(o={...o,allowedPlacements:{...o.allowedPlacements,[`${e.package}:${e.host}`]:d.allowedPlacements}}),d.fill&&d.blip){if(K(d.blip.campaignId)||W(d.blip.campaignId)){y("hook: served blip suppressed \u2014 campaign inside a local cooldown"),S(o);return}Y(d.blip.campaignId),o=await U(F(d.blip),o,d.blip.creative,d.blip.impressionId,d.blip.campaignId,{kind:"publisher"}),S(o);return}d.fallback&&(o=await U(we(d.fallback),o)),S(o);}if(typeof P<"u"&&typeof module<"u"&&P.main===module){let e=setTimeout(()=>process.exit(0),cn);On().catch(t=>y(`opencrater-hook v${I} error:`,t)).finally(()=>{clearTimeout(e),process.exit(0);});}
12
+ exports.decodeTtyNr=hn;exports.painterSpawnOptions=kn;exports.parseArgs=pn;exports.parseProcStat=yn;exports.parsePsLine=gn;exports.resolveTtyPath=bn;exports.ttyNameToDevPath=mn;
package/dist/index.d.mts CHANGED
@@ -227,7 +227,7 @@ declare function renderBlip(blip: Blip, opts?: MediaRenderOptions): Promise<stri
227
227
 
228
228
  /** Keep in sync with package.json (bundled, so we avoid a runtime fs read).
229
229
  * AUTO-GENERATED by scripts/sync-version.mjs on `npm version`. */
230
- declare const SDK_VERSION = "1.1.41";
230
+ declare const SDK_VERSION = "1.1.42";
231
231
 
232
232
  /** Public API. Every method is fail-silent: it never throws. */
233
233
  declare const sponsor: {
package/dist/index.d.ts CHANGED
@@ -227,7 +227,7 @@ declare function renderBlip(blip: Blip, opts?: MediaRenderOptions): Promise<stri
227
227
 
228
228
  /** Keep in sync with package.json (bundled, so we avoid a runtime fs read).
229
229
  * AUTO-GENERATED by scripts/sync-version.mjs on `npm version`. */
230
- declare const SDK_VERSION = "1.1.41";
230
+ declare const SDK_VERSION = "1.1.42";
231
231
 
232
232
  /** Public API. Every method is fail-silent: it never throws. */
233
233
  declare const sponsor: {
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- 'use strict';var crypto=require('crypto'),f=require('fs'),te=require('os'),C=require('path');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var f__namespace=/*#__PURE__*/_interopNamespace(f);var te__namespace=/*#__PURE__*/_interopNamespace(te);var C__namespace=/*#__PURE__*/_interopNamespace(C);var F=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var b={minIntervalSeconds:600,serveTimeoutMs:2500,preloadPoolSize:3,killSwitch:false,displayDurationSeconds:25,minSdkVersion:""};var se=["SessionStart","SessionEnd","Stop","PostToolUse","Notification"];var D="1.1.41";var ae="https://api.opencrater.to";function V(e,t=process.env){let n=t.OPENCRATER_API_ORIGIN;return (e??(n&&n.trim()!==""?n:ae)).replace(/\/+$/,"")}function c(...e){try{if(process.env.OPENCRATER_DEBUG!=="1")return;console.error("[opencrater]",...e);try{let t=F("os"),n=F("fs"),r=F("path");n.appendFileSync(r.join(t.homedir(),".config","opencrater","hook.log"),`${new Date().toISOString()} [opencrater] ${e.map(o=>String(o)).join(" ")}
1
+ 'use strict';var crypto=require('crypto'),f=require('fs'),te=require('os'),C=require('path');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var f__namespace=/*#__PURE__*/_interopNamespace(f);var te__namespace=/*#__PURE__*/_interopNamespace(te);var C__namespace=/*#__PURE__*/_interopNamespace(C);var F=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var b={minIntervalSeconds:600,serveTimeoutMs:2500,preloadPoolSize:3,killSwitch:false,displayDurationSeconds:25,minSdkVersion:""};var se=["SessionStart","SessionEnd","Stop","PostToolUse","Notification"];var D="1.1.42";var ae="https://api.opencrater.to";function V(e,t=process.env){let n=t.OPENCRATER_API_ORIGIN;return (e??(n&&n.trim()!==""?n:ae)).replace(/\/+$/,"")}function c(...e){try{if(process.env.OPENCRATER_DEBUG!=="1")return;console.error("[opencrater]",...e);try{let t=F("os"),n=F("fs"),r=F("path");n.appendFileSync(r.join(t.homedir(),".config","opencrater","hook.log"),`${new Date().toISOString()} [opencrater] ${e.map(o=>String(o)).join(" ")}
2
2
  `);}catch{}}catch{}}function v(e){return typeof e=="number"&&Number.isFinite(e)}function W(e){let t=b;if(typeof e!="object"||e===null)return {...t};let n=e;return {minIntervalSeconds:v(n.minIntervalSeconds)?n.minIntervalSeconds:t.minIntervalSeconds,serveTimeoutMs:v(n.serveTimeoutMs)?n.serveTimeoutMs:t.serveTimeoutMs,preloadPoolSize:v(n.preloadPoolSize)?n.preloadPoolSize:t.preloadPoolSize,killSwitch:n.killSwitch===true,displayDurationSeconds:v(n.displayDurationSeconds)?n.displayDurationSeconds:t.displayDurationSeconds,minSdkVersion:typeof n.minSdkVersion=="string"?n.minSdkVersion:t.minSdkVersion}}async function U(e,t,n,r,o){try{let i=await fetch(`${e}${t}`,{method:"POST",headers:{"content-type":"application/json",...o??{}},body:JSON.stringify(n),signal:AbortSignal.timeout(r)});return i.ok?await i.json():(c(`POST ${t} -> HTTP ${i.status}`),null)}catch(i){return c(`POST ${t} failed:`,i),null}}function q(e,t){let n=e.host??"generic";return {publisherKey:e.publisherKey,packageName:e.packageName,placement:e.placement,host:n,sdkVersion:D,installId:t.installId,os:process.platform,termProgram:process.env.TERM_PROGRAM??void 0,topics:t.topics&&t.topics.length>0?t.topics:void 0}}function le(e){if(typeof e!="object"||e===null)return null;let t=e;if(typeof t.fill!="boolean")return null;let n={fill:t.fill,fallback:t.fallback??null,config:W(t.config),...Array.isArray(t.allowedPlacements)?{allowedPlacements:t.allowedPlacements.filter(r=>typeof r=="string")}:{}};return t.blip!==void 0&&t.blip!==null&&(n.blip=t.blip),typeof t.computeBalanceMicroUsd=="number"&&(n.computeBalanceMicroUsd=t.computeBalanceMicroUsd),typeof t.weeklyGrantMicroUsd=="number"&&(n.weeklyGrantMicroUsd=t.weeklyGrantMicroUsd),typeof t.pendingMicroUsd=="number"&&(n.pendingMicroUsd=t.pendingMicroUsd),n}async function j(e,t){let n=await U(t.origin,"/v1/serve",q(e,t),t.timeoutMs);return le(n)}async function J(e,t,n){let r=await U(n.origin,"/v1/serve/batch",{...q(e,n),count:t},n.timeoutMs);if(typeof r!="object"||r===null)return null;let o=r;return Array.isArray(o.blips)?{blips:o.blips,fallback:o.fallback??null,config:W(o.config),...Array.isArray(o.allowedPlacements)?{allowedPlacements:o.allowedPlacements.filter(i=>typeof i=="string")}:{}}:null}function Y(e,t){return U(t.origin,"/v1/events/impression",{impressionId:e},t.timeoutMs).then(()=>{}).catch(()=>{})}var ce=new RegExp("\x1B\\[[0-9;]*m|\x1B\\]8;;[^\x07\x1B]*(?:\x07|\x1B\\\\)","g"),k={dim:"\x1B[2m",bold:"\x1B[1m",reset:"\x1B[0m"},ue=60,pe=24,de="\u2139 This project is supported by Blips via OpenCrater. Opt out: `npx opencrater off` or OPENCRATER_DISABLE=1";function fe(e){return e.replace(ce,"").length}function y(e,t){return t<=0?"":e.length<=t?e:t===1?"\u2026":e.slice(0,t-1).trimEnd()+"\u2026"}function me(e,t,n){let r=e.split(/\s+/).filter(l=>l.length>0),o=[],i="";for(let l of r){let p=i===""?l:`${i} ${l}`;if(p.length<=t)i=p;else if(i!==""&&o.push(i),i=l.length>t?y(l,t):l,o.length>=n)break}i!==""&&o.length<n&&o.push(i),o.length>n&&(o.length=n);let s=o.join(" "),a=o.length-1,u=o[a];return u!==void 0&&s.length<r.join(" ").length&&(o[a]=y(`${u}\u2026`,t)),o}function O(e=process.env,t=!!process.stdout.isTTY){if(!t)return false;if(e.FORCE_HYPERLINK!==void 0&&e.FORCE_HYPERLINK!=="0")return true;let n=e.TERM_PROGRAM??"";return !!(["iTerm.app","WezTerm","ghostty","Hyper","vscode","Tabby"].includes(n)||e.KITTY_WINDOW_ID||e.WT_SESSION||Number(e.VTE_VERSION??"0")>=5e3)}function P(e=process.env,t=!!process.stdout.isTTY){return !(e.NO_COLOR!==void 0&&e.NO_COLOR!==""||!t||(e.TERM??"")==="dumb")}function ge(e,t){return `\x1B]8;;${e}\x07${t}\x1B]8;;\x07`}function A(e){let t={sponsorLabel:e.sponsorLabel,title:e.creative.title,body:e.creative.body,url:e.clickUrl};return e.creative.cta!==void 0&&(t.cta=e.creative.cta),t}function X(e){return {sponsorLabel:"",title:e.title,body:e.body,url:e.url}}function g(e,t={}){let n=t.width??process.stdout.columns??80,o=Math.max(pe,Math.min(n,ue))-4,i=t.color??P(),s=t.hyperlinks??O(),a=(m,$)=>i?`${$}${m}${k.reset}`:m,u=e.label?y(e.label,o):e.sponsorLabel?y(`Sponsored Blips \xB7 ${e.sponsorLabel}`,o):"Sponsored Blips",l=[];l.push(a(u,k.dim)),e.title!==e.sponsorLabel&&l.push(a(y(e.title,o),k.bold));for(let m of me(e.body,o,2))l.push(m);let p="\u2192 ";if(s){let m=y(e.cta??e.url,o-p.length);l.push(p+a(ge(e.url,m),k.dim));}else e.cta&&l.push(y(e.cta,o)),l.push(p+a(y(e.url,o-p.length),k.dim));let R=`\u256D${"\u2500".repeat(o+2)}\u256E`,E=`\u2570${"\u2500".repeat(o+2)}\u256F`,L=l.map(m=>{let $=" ".repeat(Math.max(0,o-fe(m)));return `\u2502 ${m}${$} \u2502`}),h=[];return t.disclosure&&h.push(a(de,k.dim)),h.push(R,...L,E),h.join(`
3
3
  `)+`
4
4
  `}function Z(e){return e!==void 0&&e!==""}function G(e=process.env,t=!!process.stdout.isTTY){if(!t)return "none";let n=e.TERM??"";if(Z(e.TMUX)||n.startsWith("tmux")||n.startsWith("screen"))return "none";let r=e.TERM_PROGRAM??"";return r==="iTerm.app"||e.LC_TERMINAL==="iTerm2"||r==="WezTerm"?"iterm2":n==="xterm-kitty"||Z(e.KITTY_WINDOW_ID)?"kitty":"none"}var w="\x1B",Se="\x07",ye=2e3,he=2*1024*1024,be=new Set(["image/png","image/jpeg","image/gif","image/webp"]),x=4096;async function ke(e,t=fetch,n={}){let r=n.timeoutMs??ye,o=n.maxBytes??he;try{let i=await t(e,{signal:AbortSignal.timeout(r)});if(!i.ok)return c(`media: HTTP ${i.status} for ${e}`),null;let s=(i.headers.get("content-type")??"").split(";")[0].trim().toLowerCase();if(!be.has(s))return c(`media: disallowed content-type "${s}" for ${e}`),null;let a=Number(i.headers.get("content-length")??"0");if(Number.isFinite(a)&&a>o)return c(`media: content-length ${a} exceeds ${o} for ${e}`),null;let u=i.body;if(u&&typeof u.getReader=="function"){let p=u.getReader(),R=[],E=0;for(;;){let{done:L,value:h}=await p.read();if(L)break;if(h!==void 0){if(E+=h.byteLength,E>o)return await p.cancel().catch(()=>{}),c(`media: stream exceeded ${o} bytes for ${e}`),null;R.push(h);}}return Buffer.concat(R)}let l=Buffer.from(await i.arrayBuffer());return l.byteLength>o?(c(`media: body ${l.byteLength} bytes exceeds ${o} for ${e}`),null):l}catch(i){return c(`media: fetch failed for ${e}:`,i),null}}function Ce(e){let t=e.toString("base64");return `${w}]1337;File=inline=1;size=${e.byteLength};width=auto:${t}${Se}`}function we(e){let t=e.toString("base64");if(t.length<=x)return `${w}_Gf=100,a=T;${t}${w}\\`;let n=[];for(let r=0;r<t.length;r+=x){let o=t.slice(r,r+x),s=`m=${r+x>=t.length?0:1}`,a=r===0?`f=100,a=T,${s}`:s;n.push(`${w}_G${a};${o}${w}\\`);}return n.join("")}function B(e){let t=A(e),n=e.creative;switch(n.format){case "image":case "gif":return {...t,body:n.textFallback??t.body};case "video":return {...t,body:n.textFallback??t.body,cta:t.cta??"\u25B6 Watch"};case "audio":return {...t,body:n.textFallback??t.body,cta:t.cta??"\u{1F50A} Listen"};default:return t}}async function H(e,t={}){try{let n=e.creative;if(n.format!=="image"&&n.format!=="gif")return g(B(e),t);let r=t.protocol??G();if(r==="none"||n.mediaUrl===void 0||n.mediaUrl==="")return g(B(e),t);let o={};t.timeoutMs!==void 0&&(o.timeoutMs=t.timeoutMs),t.maxBytes!==void 0&&(o.maxBytes=t.maxBytes);let i=await ke(n.mediaUrl,t.fetchImpl??fetch,o);return i===null||i.byteLength===0?g(B(e),t):(r==="kitty"?we(i):Ce(i))+`
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import {randomUUID}from'crypto';import*as f from'fs';import*as te from'os';import*as C from'path';var F=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var b={minIntervalSeconds:600,serveTimeoutMs:2500,preloadPoolSize:3,killSwitch:false,displayDurationSeconds:25,minSdkVersion:""};var se=["SessionStart","SessionEnd","Stop","PostToolUse","Notification"];var D="1.1.41";var ae="https://api.opencrater.to";function V(e,t=process.env){let n=t.OPENCRATER_API_ORIGIN;return (e??(n&&n.trim()!==""?n:ae)).replace(/\/+$/,"")}function c(...e){try{if(process.env.OPENCRATER_DEBUG!=="1")return;console.error("[opencrater]",...e);try{let t=F("os"),n=F("fs"),r=F("path");n.appendFileSync(r.join(t.homedir(),".config","opencrater","hook.log"),`${new Date().toISOString()} [opencrater] ${e.map(o=>String(o)).join(" ")}
1
+ import {randomUUID}from'crypto';import*as f from'fs';import*as te from'os';import*as C from'path';var F=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var b={minIntervalSeconds:600,serveTimeoutMs:2500,preloadPoolSize:3,killSwitch:false,displayDurationSeconds:25,minSdkVersion:""};var se=["SessionStart","SessionEnd","Stop","PostToolUse","Notification"];var D="1.1.42";var ae="https://api.opencrater.to";function V(e,t=process.env){let n=t.OPENCRATER_API_ORIGIN;return (e??(n&&n.trim()!==""?n:ae)).replace(/\/+$/,"")}function c(...e){try{if(process.env.OPENCRATER_DEBUG!=="1")return;console.error("[opencrater]",...e);try{let t=F("os"),n=F("fs"),r=F("path");n.appendFileSync(r.join(t.homedir(),".config","opencrater","hook.log"),`${new Date().toISOString()} [opencrater] ${e.map(o=>String(o)).join(" ")}
2
2
  `);}catch{}}catch{}}function v(e){return typeof e=="number"&&Number.isFinite(e)}function W(e){let t=b;if(typeof e!="object"||e===null)return {...t};let n=e;return {minIntervalSeconds:v(n.minIntervalSeconds)?n.minIntervalSeconds:t.minIntervalSeconds,serveTimeoutMs:v(n.serveTimeoutMs)?n.serveTimeoutMs:t.serveTimeoutMs,preloadPoolSize:v(n.preloadPoolSize)?n.preloadPoolSize:t.preloadPoolSize,killSwitch:n.killSwitch===true,displayDurationSeconds:v(n.displayDurationSeconds)?n.displayDurationSeconds:t.displayDurationSeconds,minSdkVersion:typeof n.minSdkVersion=="string"?n.minSdkVersion:t.minSdkVersion}}async function U(e,t,n,r,o){try{let i=await fetch(`${e}${t}`,{method:"POST",headers:{"content-type":"application/json",...o??{}},body:JSON.stringify(n),signal:AbortSignal.timeout(r)});return i.ok?await i.json():(c(`POST ${t} -> HTTP ${i.status}`),null)}catch(i){return c(`POST ${t} failed:`,i),null}}function q(e,t){let n=e.host??"generic";return {publisherKey:e.publisherKey,packageName:e.packageName,placement:e.placement,host:n,sdkVersion:D,installId:t.installId,os:process.platform,termProgram:process.env.TERM_PROGRAM??void 0,topics:t.topics&&t.topics.length>0?t.topics:void 0}}function le(e){if(typeof e!="object"||e===null)return null;let t=e;if(typeof t.fill!="boolean")return null;let n={fill:t.fill,fallback:t.fallback??null,config:W(t.config),...Array.isArray(t.allowedPlacements)?{allowedPlacements:t.allowedPlacements.filter(r=>typeof r=="string")}:{}};return t.blip!==void 0&&t.blip!==null&&(n.blip=t.blip),typeof t.computeBalanceMicroUsd=="number"&&(n.computeBalanceMicroUsd=t.computeBalanceMicroUsd),typeof t.weeklyGrantMicroUsd=="number"&&(n.weeklyGrantMicroUsd=t.weeklyGrantMicroUsd),typeof t.pendingMicroUsd=="number"&&(n.pendingMicroUsd=t.pendingMicroUsd),n}async function j(e,t){let n=await U(t.origin,"/v1/serve",q(e,t),t.timeoutMs);return le(n)}async function J(e,t,n){let r=await U(n.origin,"/v1/serve/batch",{...q(e,n),count:t},n.timeoutMs);if(typeof r!="object"||r===null)return null;let o=r;return Array.isArray(o.blips)?{blips:o.blips,fallback:o.fallback??null,config:W(o.config),...Array.isArray(o.allowedPlacements)?{allowedPlacements:o.allowedPlacements.filter(i=>typeof i=="string")}:{}}:null}function Y(e,t){return U(t.origin,"/v1/events/impression",{impressionId:e},t.timeoutMs).then(()=>{}).catch(()=>{})}var ce=new RegExp("\x1B\\[[0-9;]*m|\x1B\\]8;;[^\x07\x1B]*(?:\x07|\x1B\\\\)","g"),k={dim:"\x1B[2m",bold:"\x1B[1m",reset:"\x1B[0m"},ue=60,pe=24,de="\u2139 This project is supported by Blips via OpenCrater. Opt out: `npx opencrater off` or OPENCRATER_DISABLE=1";function fe(e){return e.replace(ce,"").length}function y(e,t){return t<=0?"":e.length<=t?e:t===1?"\u2026":e.slice(0,t-1).trimEnd()+"\u2026"}function me(e,t,n){let r=e.split(/\s+/).filter(l=>l.length>0),o=[],i="";for(let l of r){let p=i===""?l:`${i} ${l}`;if(p.length<=t)i=p;else if(i!==""&&o.push(i),i=l.length>t?y(l,t):l,o.length>=n)break}i!==""&&o.length<n&&o.push(i),o.length>n&&(o.length=n);let s=o.join(" "),a=o.length-1,u=o[a];return u!==void 0&&s.length<r.join(" ").length&&(o[a]=y(`${u}\u2026`,t)),o}function O(e=process.env,t=!!process.stdout.isTTY){if(!t)return false;if(e.FORCE_HYPERLINK!==void 0&&e.FORCE_HYPERLINK!=="0")return true;let n=e.TERM_PROGRAM??"";return !!(["iTerm.app","WezTerm","ghostty","Hyper","vscode","Tabby"].includes(n)||e.KITTY_WINDOW_ID||e.WT_SESSION||Number(e.VTE_VERSION??"0")>=5e3)}function P(e=process.env,t=!!process.stdout.isTTY){return !(e.NO_COLOR!==void 0&&e.NO_COLOR!==""||!t||(e.TERM??"")==="dumb")}function ge(e,t){return `\x1B]8;;${e}\x07${t}\x1B]8;;\x07`}function A(e){let t={sponsorLabel:e.sponsorLabel,title:e.creative.title,body:e.creative.body,url:e.clickUrl};return e.creative.cta!==void 0&&(t.cta=e.creative.cta),t}function X(e){return {sponsorLabel:"",title:e.title,body:e.body,url:e.url}}function g(e,t={}){let n=t.width??process.stdout.columns??80,o=Math.max(pe,Math.min(n,ue))-4,i=t.color??P(),s=t.hyperlinks??O(),a=(m,$)=>i?`${$}${m}${k.reset}`:m,u=e.label?y(e.label,o):e.sponsorLabel?y(`Sponsored Blips \xB7 ${e.sponsorLabel}`,o):"Sponsored Blips",l=[];l.push(a(u,k.dim)),e.title!==e.sponsorLabel&&l.push(a(y(e.title,o),k.bold));for(let m of me(e.body,o,2))l.push(m);let p="\u2192 ";if(s){let m=y(e.cta??e.url,o-p.length);l.push(p+a(ge(e.url,m),k.dim));}else e.cta&&l.push(y(e.cta,o)),l.push(p+a(y(e.url,o-p.length),k.dim));let R=`\u256D${"\u2500".repeat(o+2)}\u256E`,E=`\u2570${"\u2500".repeat(o+2)}\u256F`,L=l.map(m=>{let $=" ".repeat(Math.max(0,o-fe(m)));return `\u2502 ${m}${$} \u2502`}),h=[];return t.disclosure&&h.push(a(de,k.dim)),h.push(R,...L,E),h.join(`
3
3
  `)+`
4
4
  `}function Z(e){return e!==void 0&&e!==""}function G(e=process.env,t=!!process.stdout.isTTY){if(!t)return "none";let n=e.TERM??"";if(Z(e.TMUX)||n.startsWith("tmux")||n.startsWith("screen"))return "none";let r=e.TERM_PROGRAM??"";return r==="iTerm.app"||e.LC_TERMINAL==="iTerm2"||r==="WezTerm"?"iterm2":n==="xterm-kitty"||Z(e.KITTY_WINDOW_ID)?"kitty":"none"}var w="\x1B",Se="\x07",ye=2e3,he=2*1024*1024,be=new Set(["image/png","image/jpeg","image/gif","image/webp"]),x=4096;async function ke(e,t=fetch,n={}){let r=n.timeoutMs??ye,o=n.maxBytes??he;try{let i=await t(e,{signal:AbortSignal.timeout(r)});if(!i.ok)return c(`media: HTTP ${i.status} for ${e}`),null;let s=(i.headers.get("content-type")??"").split(";")[0].trim().toLowerCase();if(!be.has(s))return c(`media: disallowed content-type "${s}" for ${e}`),null;let a=Number(i.headers.get("content-length")??"0");if(Number.isFinite(a)&&a>o)return c(`media: content-length ${a} exceeds ${o} for ${e}`),null;let u=i.body;if(u&&typeof u.getReader=="function"){let p=u.getReader(),R=[],E=0;for(;;){let{done:L,value:h}=await p.read();if(L)break;if(h!==void 0){if(E+=h.byteLength,E>o)return await p.cancel().catch(()=>{}),c(`media: stream exceeded ${o} bytes for ${e}`),null;R.push(h);}}return Buffer.concat(R)}let l=Buffer.from(await i.arrayBuffer());return l.byteLength>o?(c(`media: body ${l.byteLength} bytes exceeds ${o} for ${e}`),null):l}catch(i){return c(`media: fetch failed for ${e}:`,i),null}}function Ce(e){let t=e.toString("base64");return `${w}]1337;File=inline=1;size=${e.byteLength};width=auto:${t}${Se}`}function we(e){let t=e.toString("base64");if(t.length<=x)return `${w}_Gf=100,a=T;${t}${w}\\`;let n=[];for(let r=0;r<t.length;r+=x){let o=t.slice(r,r+x),s=`m=${r+x>=t.length?0:1}`,a=r===0?`f=100,a=T,${s}`:s;n.push(`${w}_G${a};${o}${w}\\`);}return n.join("")}function B(e){let t=A(e),n=e.creative;switch(n.format){case "image":case "gif":return {...t,body:n.textFallback??t.body};case "video":return {...t,body:n.textFallback??t.body,cta:t.cta??"\u25B6 Watch"};case "audio":return {...t,body:n.textFallback??t.body,cta:t.cta??"\u{1F50A} Listen"};default:return t}}async function H(e,t={}){try{let n=e.creative;if(n.format!=="image"&&n.format!=="gif")return g(B(e),t);let r=t.protocol??G();if(r==="none"||n.mediaUrl===void 0||n.mediaUrl==="")return g(B(e),t);let o={};t.timeoutMs!==void 0&&(o.timeoutMs=t.timeoutMs),t.maxBytes!==void 0&&(o.maxBytes=t.maxBytes);let i=await ke(n.mediaUrl,t.fetchImpl??fetch,o);return i===null||i.byteLength===0?g(B(e),t):(r==="kitty"?we(i):Ce(i))+`
package/dist/paint.js CHANGED
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
- 'use strict';var child_process=require('child_process'),crypto=require('crypto'),Fe=require('http'),ot=require('fs'),Re=require('os'),U=require('path'),zlib=require('zlib'),pe=require('tty');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var Fe__namespace=/*#__PURE__*/_interopNamespace(Fe);var ot__namespace=/*#__PURE__*/_interopNamespace(ot);var Re__namespace=/*#__PURE__*/_interopNamespace(Re);var U__namespace=/*#__PURE__*/_interopNamespace(U);var pe__namespace=/*#__PURE__*/_interopNamespace(pe);var te=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,n)=>(typeof require<"u"?require:e)[n]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});function Ce(t){return t>=21||t<8?.2:.4}function xe(t,e){let n=e.filter(i=>Number.isFinite(i)&&t-i<6e5&&i<=t);return n.length>=2?{play:false,next:n}:{play:true,next:[...n,t]}}function ne(t=process.env){return U__namespace.join(Re__namespace.homedir(),".config","opencrater")}var cn=600*1e3;function re(){return U__namespace.join(ne(),"blocked-ads.json")}function oe(){return U__namespace.join(ne(),"reported-ads.json")}function ln(t,e){let n={};for(let[i,a]of Object.entries(t))typeof a=="number"&&Number.isFinite(a)&&a>e&&(n[i]=a);return n}function un(t){try{let e=JSON.parse(ot__namespace.readFileSync(re(),"utf8"));return ln(e&&typeof e=="object"?e:{},t)}catch{return {}}}function Dt(t,e=Date.now()){if(t)try{let n=un(e);n[t]=e+cn,ot__namespace.mkdirSync(U__namespace.dirname(re()),{recursive:!0}),ot__namespace.writeFileSync(re(),JSON.stringify(n));}catch{}}function pn(){try{let t=JSON.parse(ot__namespace.readFileSync(oe(),"utf8"));return t&&typeof t=="object"?t:{}}catch{return {}}}function Me(t,e=Date.now()){if(t)try{let n=pn();n[t]=e,ot__namespace.mkdirSync(U__namespace.dirname(oe()),{recursive:!0}),ot__namespace.writeFileSync(oe(),JSON.stringify(n));}catch{}}var dn=[137,80,78,71,13,10,26,10];function Pe(t){try{if(t.length<45)return null;for(let x=0;x<8;x++)if(t[x]!==dn[x])return null;let e=new DataView(t.buffer,t.byteOffset,t.byteLength),n=8,i=0,a=0,p=0,r=-1,m=0,d=[];for(;n+8<=t.length;){let x=e.getUint32(n),D=String.fromCharCode(t[n+4],t[n+5],t[n+6],t[n+7]),F=t.subarray(n+8,n+8+x);if(D==="IHDR")i=e.getUint32(n+8),a=e.getUint32(n+12),p=t[n+16],r=t[n+17],m=t[n+20];else if(D==="IDAT")d.push(F);else if(D==="IEND")break;n+=12+x;}if(p!==8||r!==2&&r!==6||m!==0||i===0||a===0||i>1024||a>1024)return null;let $=r===6?4:3,h=i*$,l=zlib.inflateSync(Buffer.concat(d.map(x=>Buffer.from(x))));if(l.length<(h+1)*a)return null;let N=new Uint8Array(i*a*4),I=new Uint8Array(h),O=new Uint8Array(h);for(let x=0;x<a;x++){let D=x*(h+1),F=l[D];for(let C=0;C<h;C++){let k=l[D+1+C],b=C>=$?O[C-$]:0,S=I[C],B=C>=$?I[C-$]:0,y;switch(F){case 0:y=k;break;case 1:y=k+b;break;case 2:y=k+S;break;case 3:y=k+(b+S>>1);break;case 4:{let T=b+S-B,X=Math.abs(T-b),Ot=Math.abs(T-S),G=Math.abs(T-B);y=k+(X<=Ot&&X<=G?b:Ot<=G?S:B);break}default:return null}O[C]=y&255;}for(let C=0;C<i;C++){let k=C*$,b=(x*i+C)*4;N[b]=O[k],N[b+1]=O[k+1],N[b+2]=O[k+2],N[b+3]=$===4?O[k+3]:255;}I.set(O);}return {width:i,height:a,rgba:N}}catch{return null}}var Lt=300,Ee=140,se=12e3,vn=9;var In=1500,Ne=3*1024*1024,On=12*1024*1024,kn=12*1024*1024,An=6e3,Te=25e3,Ge=64,w="\x1B",Cn="\x07",_e=`${w}7`,De=`${w}8`;function Ut(t,e){return `${w}]8;;${t}${w}\\${e}${w}]8;;${w}\\`}function Wt(t){return t.replace(/\x1b\[[0-9;]*m/g,"").replace(/\x1b\]8;;[^\x1b\x07]*(?:\x1b\\|\x07)/g,"").replace(/[︎️]/g,"").length}function mt(t,e){return t.length<=e?t:`${t.slice(0,Math.max(0,e-1))}\u2026`}function xn(t,e){let n=t.split(/\s+/).filter(Boolean),i=[],a="";for(let p of n)if(a===""?a=mt(p,e):a.length+1+p.length<=e?a+=` ${p}`:(i.push(a),a=mt(p,e)),i.length>=3)break;return a&&i.length<4&&i.push(a),i}var Y=process.platform==="win32";function it(t){return Y?`${t}\uFE0E`:t}function Rn(t){let e=()=>{try{ot.closeSync(t);}catch{}};return {write:n=>{try{ot.writeSync(t,n);}catch{}},close:e,closeAndWait:async()=>e()}}var Mn=["$ErrorActionPreference='SilentlyContinue'","$dbg=$env:OPENCRATER_DEBUG -eq '1'","$log=Join-Path $env:USERPROFILE '.config\\opencrater\\pump.log'","function L($m){ if($dbg){ try{ Add-Content -LiteralPath $log -Value ((Get-Date).ToString('o')+' '+$m) }catch{} } }","L 'pump: process started (loading types)'","Add-Type -TypeDefinition @'","using System;using System.Runtime.InteropServices;","namespace OCP{","public struct COORD{public short X;public short Y;}","public struct SR{public short L;public short T;public short R;public short B;}","public struct CSBI{public COORD sz;public COORD cur;public ushort attr;public SR win;public COORD max;}","public static class N{",'[DllImport("kernel32.dll",SetLastError=true,CharSet=CharSet.Unicode)]public static extern IntPtr CreateFileW(string n,uint a,uint s,IntPtr sec,uint d,uint f,IntPtr t);','[DllImport("kernel32.dll")]public static extern bool GetConsoleMode(IntPtr h,out uint m);','[DllImport("kernel32.dll")]public static extern bool SetConsoleMode(IntPtr h,uint m);','[DllImport("kernel32.dll")]public static extern bool SetConsoleOutputCP(uint cp);','[DllImport("kernel32.dll")]public static extern bool WriteFile(IntPtr h,byte[] b,uint n,out uint w,IntPtr o);','[DllImport("kernel32.dll")]public static extern bool FreeConsole();','[DllImport("kernel32.dll")]public static extern bool AttachConsole(uint p);','[DllImport("kernel32.dll")]public static extern IntPtr GetStdHandle(int n);','[DllImport("kernel32.dll")]public static extern bool GetConsoleScreenBufferInfo(IntPtr h,out CSBI i);',"}}","'@","L 'pump: types loaded'","$o=[uint32]'0xC0000000'","function OpenConout(){ return [OCP.N]::CreateFileW('CONOUT$',$o,3,[IntPtr]::Zero,3,0,[IntPtr]::Zero) }","function Csbi($hh){ $z=New-Object OCP.CSBI; if($hh -ne [IntPtr]-1 -and [OCP.N]::GetConsoleScreenBufferInfo($hh,[ref]$z)){ return $z } else { return $null } }","$self=Csbi (OpenConout); if($self){ L ('pump: SELF bufH='+$self.sz.Y+' winRows='+($self.win.B-$self.win.T+1)+' curY='+$self.cur.Y) }","$how='self'; $winId=0","$given=[int]($env:OPENCRATER_WIN_CONSOLE_PID)","if($given -gt 0){ [void][OCP.N]::FreeConsole(); if([OCP.N]::AttachConsole([uint32]$given)){ $winId=$given; $how='given' } L ('pump: given console pid '+$given+' attached='+($winId -eq $given)) }","if($winId -eq 0){"," $par=@{}; try{ Get-CimInstance Win32_Process -ErrorAction Stop | ForEach-Object { $par[[int]$_.ProcessId]=[int]$_.ParentProcessId } }catch{ L 'pump: WMI walk failed' }"," $chain=New-Object System.Collections.ArrayList; $p=$PID; for($i=0;$i -lt 12;$i++){ if(-not $par.ContainsKey($p)){break}; $pp=$par[$p]; if($pp -le 4){break}; $nm='?'; try{ $nm=(Get-Process -Id $pp -ErrorAction Stop).ProcessName }catch{}; [void]$chain.Add(@{id=$pp;name=$nm}); $p=$pp }"," L ('pump: ancestors = ' + (($chain | ForEach-Object { $_.name+'('+$_.id+')' }) -join ' -> '))"," foreach($c in $chain){ [void][OCP.N]::FreeConsole(); if([OCP.N]::AttachConsole([uint32]$c.id)){ $b=Csbi (OpenConout); if($b){ L ('pump: '+$c.name+'('+$c.id+') bufH='+$b.sz.Y+' winRows='+($b.win.B-$b.win.T+1)+' curY='+$b.cur.Y); if($b.sz.Y -lt 1000 -and $c.name -notmatch '^(WindowsTerminal|OpenConsole|conhost|explorer|Code|devenv|wininit|services|svchost|WmiPrvSE)$'){ $winId=$c.id; $how=('attach:'+$c.name) } } } }","}","[void][OCP.N]::FreeConsole()","if($winId -ne 0){ [void][OCP.N]::AttachConsole([uint32]$winId) } else { [void][OCP.N]::AttachConsole(0xFFFFFFFF); $how='attach-parent' }","$h=OpenConout","if($h -eq [IntPtr]-1){ L 'pump: NO CONSOLE after attach walk'; exit 1 }","$fb=Csbi $h; if($fb){ L ('pump: FINAL via '+$how+' bufH='+$fb.sz.Y+' winRows='+($fb.win.B-$fb.win.T+1)+' curY='+$fb.cur.Y) } else { L ('pump: FINAL via '+$how) }","if($fb){ $cols=$fb.win.R-$fb.win.L+1; $rows=$fb.win.B-$fb.win.T+1; [Console]::Out.WriteLine('OCWIN '+$winId+' '+$cols+' '+$rows); [Console]::Out.Flush() }","$m=[uint32]0;[void][OCP.N]::GetConsoleMode($h,[ref]$m);[void][OCP.N]::SetConsoleMode($h,($m -bor 4));[void][OCP.N]::SetConsoleOutputCP(65001)","$in=[Console]::OpenStandardInput();$buf=New-Object byte[] 65536;$tot=0;$frames=0","while(($n=$in.Read($buf,0,$buf.Length)) -gt 0){$w=[uint32]0;[void][OCP.N]::WriteFile($h,$buf,$n,[ref]$w,[IntPtr]::Zero);$tot+=$w;$frames++}","L ('pump: stdin closed, streamed '+$tot+' bytes in '+$frames+' chunks')"].join(`
3
- `);function He(){return `${process.env.SystemRoot||process.env.windir||"C:\\Windows"}\\System32\\WindowsPowerShell\\v1.0\\powershell.exe`}function Pn(){try{let t=Buffer.from(Mn,"utf16le").toString("base64"),e=He(),n="ignore";if(process.env.OPENCRATER_DEBUG==="1")try{n=ot.openSync(U__namespace.join(Re.homedir(),".config","opencrater","pump-err.log"),"a");}catch{}_("spawning pump:",e);let i=child_process.spawn(e,["-NoProfile","-NonInteractive","-EncodedCommand",t],{stdio:["pipe","pipe",n],windowsHide:!0});i.on("error",m=>_("pump spawn error:",e,"-",m.message)),i.on("exit",m=>_("pump process exited code",m,"pid",i.pid));let a=i.stdin;if(!a)return _("pump: no stdin pipe"),null;a.on("error",()=>{});let p=!1;return i.on("exit",()=>{p=!0;}),{size:new Promise(m=>{let d="",$=!1,h=N=>{$||($=!0,m(N));},l=i.stdout;if(!l)return h(null);l.setEncoding("utf8"),l.on("data",N=>{d+=N;let I=d.match(/OCWIN\s+(\d+)\s+(\d+)\s+(\d+)/);I&&(_("pump reported console pid",I[1],"size",I[2]+"x"+I[3]),h({pid:Number(I[1]),cols:Number(I[2]),rows:Number(I[3])}));}),l.on("error",()=>h(null)),l.on("end",()=>h(null)),setTimeout(()=>h(null),2500);}),write:m=>{try{a.write(m);}catch{}},close:()=>{try{a.end();}catch{}},closeAndWait:()=>new Promise(m=>{if(p)return m();let d=!1,$=()=>{d||(d=!0,m());};i.on("exit",$),setTimeout($,5e3);try{a.end();}catch{$();}})}}catch(t){return _("pump: spawn threw",t.message),null}}function En(t){try{let e=t.replace(/'/g,"''"),n=`$ErrorActionPreference='Stop';try{$r=$null;try{$su=([wmiclass]'Win32_ProcessStartup').CreateInstance();$su.CreateFlags=[uint32]8;$r=([wmiclass]'Win32_Process').Create('${e}',$null,$su)}catch{};if($r -eq $null -or $r.ReturnValue -ne 0){$r=([wmiclass]'Win32_Process').Create('${e}')};if($r.ReturnValue -eq 0){[Console]::Out.Write('OCPID '+$r.ProcessId)}else{[Console]::Out.Write('OCERR rv='+$r.ReturnValue)}}catch{[Console]::Out.Write('OCERR '+$_.Exception.Message)}`,i=Buffer.from(n,"utf16le").toString("base64"),a=child_process.spawnSync(He(),["-NoProfile","-NonInteractive","-EncodedCommand",i],{timeout:5e3,encoding:"utf8"}),p=(a.stdout??"").match(/OCPID\s+(\d+)/);return p?Number(p[1]):(_("wmi spawn failed:",(a.stdout??"").trim(),"|",(a.stderr??"").trim()),0)}catch(e){return _("wmi spawn threw",e.message),0}}function Nn(t,e){try{let n=U__namespace.join(Re.homedir(),".config","opencrater");ot.mkdirSync(n,{recursive:!0});let i=U__namespace.join(n,`paint-${process.pid}-${Date.now()}.json`);ot.writeFileSync(i,JSON.stringify({...t,_env:process.env}),"utf8");let a=m=>`"${m}"`,p=[a(process.execPath),a(__filename),"--persist","--payload-file",a(i),"--console-pid",String(e)];jt&&p.push("--debug");let r=En(p.join(" "));return _("escape: wmi persistent painter pid",r),r>0}catch(n){return _("escape failed",n.message),false}}function lr(t){return !!(t.WT_SESSION||t.TERM_PROGRAM||t.ConEmuANSI==="ON"||t.ANSICON)}function Tn(){try{let t=child_process.spawnSync("mode",["con"],{timeout:1500,encoding:"utf8"}).stdout;if(!t)return null;let n=[...t.matchAll(/:\s*(\d+)/g)].map(i=>Number(i[1]))[1];return n&&n>0?n:null}catch{return null}}function _n(t){let e=t.TERM_PROGRAM??"",n=t.TERM??"";return t.TMUX?"none":e==="iTerm.app"||t.LC_TERMINAL==="iTerm2"||e==="WezTerm"?"iterm2":n==="xterm-kitty"||t.KITTY_WINDOW_ID?"kitty":"none"}function Le(t,e){let n=t.toString("base64");return `${w}]1337;File=inline=1;size=${t.length};width=${e.w};height=${e.h};preserveAspectRatio=1:${n}${Cn}`}function Dn(t,e){let n=t.toString("base64"),i=[];for(let p=0;p<n.length;p+=4096)i.push(n.slice(p,p+4096));let a="";for(let p=0;p<i.length;p++){let r=p===0,m=p===i.length-1,d=r?`a=T,f=100,c=${e.w},r=${e.h},m=${m?0:1}`:`m=${m?0:1}`;a+=`${w}_G${d};${i[p]}${w}\\`;}return a}function Ln(t){let e=(t.COLORTERM??"").toLowerCase();if(e.includes("truecolor")||e.includes("24bit"))return true;let n=t.TERM_PROGRAM??"";return ["iTerm.app","WezTerm","vscode","ghostty","Apple_Terminal"].includes(n)}function ae(t,e,n){if(Math.abs(t-e)<12&&Math.abs(e-n)<12&&Math.abs(t-n)<12)return t<8?16:t>248?231:232+Math.round((t-8)/247*23);let i=a=>Math.round(a/255*5);return 16+36*i(t)+6*i(e)+i(n)}var Un=[" ","\u2598","\u259D","\u2580","\u2596","\u258C","\u259E","\u259B","\u2597","\u259A","\u2590","\u259C","\u2584","\u2599","\u259F","\u2588"];function ze(t,e,n,i){let a=[],p=(m,d)=>{let $=(d*e+m)*3;return [t[$],t[$+1],t[$+2]]},r=(m,d)=>{let $=m[0]-d[0],h=m[1]-d[1],l=m[2]-d[2];return $*$+h*h+l*l};for(let m=0;m+1<n;m+=2){let d="",$="";for(let h=0;h+1<e;h+=2){let l=[p(h,m),p(h+1,m),p(h,m+1),p(h+1,m+1)],N=0,I=1,O=-1;for(let y=0;y<4;y++)for(let T=y+1;T<4;T++){let X=r(l[y],l[T]);X>O&&(O=X,N=y,I=T);}let x=0,D=[0,0,0],F=[0,0,0],C=0,k=0;for(let y=0;y<4;y++)r(l[y],l[N])<=r(l[y],l[I])?(x|=1<<y,D[0]+=l[y][0],D[1]+=l[y][1],D[2]+=l[y][2],C++):(F[0]+=l[y][0],F[1]+=l[y][1],F[2]+=l[y][2],k++);if(O<1e3){let y=Ot=>Ot&-8,T=[y(Math.round((l[0][0]+l[1][0]+l[2][0]+l[3][0])/4)),y(Math.round((l[0][1]+l[1][1]+l[2][1]+l[3][1])/4)),y(Math.round((l[0][2]+l[1][2]+l[2][2]+l[3][2])/4))],X=i?`${w}[48;2;${T[0]};${T[1]};${T[2]}m`:`${w}[48;5;${ae(T[0],T[1],T[2])}m`;X!==$&&(d+=X,$=X),d+=" ";continue}let b=C?[Math.round(D[0]/C),Math.round(D[1]/C),Math.round(D[2]/C)]:[0,0,0],S=k?[Math.round(F[0]/k),Math.round(F[1]/k),Math.round(F[2]/k)]:b,B=i?`${w}[38;2;${b[0]};${b[1]};${b[2]};48;2;${S[0]};${S[1]};${S[2]}m`:`${w}[38;5;${ae(b[0],b[1],b[2])};48;5;${ae(S[0],S[1],S[2])}m`;B!==$&&(d+=B,$=B),d+=Un[x];}d+=`${w}[0m`,a.push(d);}return a}function Wn(t,e,n,i,a,p){let r=e*2,m=n*2,d=`${p?`${p},`:""}scale=${r}:${m}:flags=lanczos+accurate_rnd`,$=["-y","-i",t];i?$.push("-t","6","-vf",`fps=7,${d}`):$.push("-frames:v","1","-vf",d),$.push("-f","rawvideo","-pix_fmt","rgb24","-");let h=child_process.spawnSync("ffmpeg",$,{timeout:12e3,maxBuffer:64*1024*1024});if(h.status!==0||!h.stdout||h.stdout.length===0)return null;let l=r*m*3,N=Math.min(Math.floor(h.stdout.length/l),Ge);if(N===0)return null;let I=[];for(let O=0;O<N;O++)I.push(ze(h.stdout.subarray(O*l,(O+1)*l),r,m,a));return I}function jn(t,e,n,i,a,p){if(!et("chafa"))return null;let r=U__namespace.join(e,"fr_%03d.png"),m=["-y","-i",t],d=[];if(a?(m.push("-t","6"),d.push("fps=5")):m.push("-frames:v","1"),p&&d.push(p),d.length>0&&m.push("-vf",d.join(",")),m.push(r),child_process.spawnSync("ffmpeg",m,{timeout:12e3}).status!==0)return null;let h=[];for(let l=1;l<=Ge;l++){let N=U__namespace.join(e,`fr_${String(l).padStart(3,"0")}.png`),I;try{I=child_process.spawnSync("chafa",a?["-f","symbols","-s",`${n}x${i}`,"--stretch","--symbols","vhalf","--colors","full",N]:["-f","symbols","-s",`${n}x${i}`,"--stretch","--colors","full",N],{timeout:5e3,maxBuffer:8*1024*1024,encoding:"utf8"});}catch{break}if(I.status!==0||!I.stdout)break;let x=I.stdout.replace(/\x1b\[\?25[lh]/g,"").split(`
4
- `).filter(k=>k.length>0);if(x.length===0)break;let D=" ".repeat(n),F=Math.floor((i-x.length)/2),C=[];for(let k=0;k<i;k++){let b=x[k-F];if(b===void 0)C.push(D);else {let S=" ".repeat(Math.max(0,n-Wt(b)));C.push(b+S);}}h.push(C);}return h.length>0?h:null}function Je(t){try{let e=child_process.spawnSync("ffprobe",["-v","quiet","-select_streams","v:0","-show_entries","stream=width,height","-of","csv=p=0",t],{timeout:5e3,encoding:"utf8"});if(e.status!==0||!e.stdout)return null;let n=e.stdout.trim().match(/^(\d+),(\d+)/);if(!n)return null;let i=Number(n[1]),a=Number(n[2]);return i>0&&a>0?{w:i,h:a}:null}catch{return null}}function Fn(t){try{let n=(child_process.spawnSync("ffmpeg",["-t","2","-i",t,"-vf","cropdetect=24:2:1","-f","null","-"],{timeout:8e3,encoding:"utf8"}).stderr??"").match(/crop=(\d+):(\d+):(\d+):(\d+)/g);if(!n||n.length===0)return null;let i=n[n.length-1],a=i.match(/crop=(\d+):(\d+):(\d+):(\d+)/),p=Number(a[1]),r=Number(a[2]);if(p<8||r<8)return null;let m=Je(t);if(m){let d=p*r/(m.w*m.h);if(d<.55||d>.92)return null}return i}catch{return null}}function et(t){try{return Y?child_process.spawnSync("where",[t],{timeout:2e3}).status===0:child_process.spawnSync("sh",["-c",'command -v -- "$1" >/dev/null 2>&1',"sh",t],{timeout:2e3}).status===0}catch{return false}}async function Ue(t,e){try{let n=await fetch(t,{signal:AbortSignal.timeout(An)});if(!n.ok)return null;let i=(n.headers.get("content-type")??"").split(";")[0].trim().toLowerCase();if(Number(n.headers.get("content-length")??"0")>e)return null;let p=Buffer.from(await n.arrayBuffer());return p.length===0||p.length>e?null:{data:p,type:i}}catch{return null}}var It=U__namespace.join(Re.homedir(),".config","opencrater","painter.lock"),Bn=6e3;function We(t){try{if(!ot.existsSync(It))return;let e=JSON.parse(ot.readFileSync(It,"utf8"));if(e.pid&&e.pid!==process.pid){if(e.startedAt&&Date.now()-e.startedAt<Bn){let i=!0;try{process.kill(e.pid,0);}catch{i=!1;}i&&(t.close(),process.exit(0));}let n=!0;try{process.kill(e.pid,"SIGTERM");}catch{n=!1;}try{Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,250);}catch{}if(e.rows>0&&e.width>0){let i="\x1B7\x1B[0m",a=" ".repeat(e.width);for(let p=0;p<e.rows;p++)i+=`\x1B[${e.row+p};${e.col}H${a}`;i+="\x1B8",t.write(i);}}}catch{}}var je="";function Gn(t){let e=JSON.stringify(t);if(e!==je){je=e;try{ot.mkdirSync(U__namespace.dirname(It),{recursive:!0}),ot.writeFileSync(It,JSON.stringify(t));}catch{}}}function Hn(){try{JSON.parse(ot.readFileSync(It,"utf8")).pid===process.pid&&ot.unlinkSync(It);}catch{}}var jt=process.env.OPENCRATER_DEBUG==="1";function _(...t){try{if(!jt)return;let e=`[opencrater-paint] ${t.map(n=>String(n)).join(" ")}`;console.error(e);try{ot.appendFileSync(U__namespace.join(Re.homedir(),".config","opencrater","paint.log"),`${new Date().toISOString()} ${e}
5
- `);}catch{}}catch{}}function zn(){let t=process.argv.slice(2),e=o=>{let s=t.indexOf(o);return s>=0?t[s+1]:void 0};t.includes("--debug")&&(jt=true,process.env.OPENCRATER_DEBUG="1");let n=t.includes("--persist")||process.env.OPENCRATER_WIN_PERSIST==="1",i=Number(e("--console-pid")??"0");i>0&&(process.env.OPENCRATER_WIN_CONSOLE_PID=String(i));let a=e("--payload-file"),p=process.env.OPENCRATER_PAINT;if(a)try{p=ot.readFileSync(a,"utf8");}catch(o){_("payload-file unreadable:",o.message);}if(!p){_("no paint payload (env or --payload-file) \u2014 nothing to draw");return}let r;try{let o=JSON.parse(p);if(o._env&&typeof o._env=="object"){let s=process.env.OPENCRATER_WIN_CONSOLE_PID;Object.assign(process.env,o._env),s&&(process.env.OPENCRATER_WIN_CONSOLE_PID=s),process.env.OPENCRATER_DEBUG==="1"&&(jt=!0),delete o._env;}r=o;}catch(o){_("paint payload is not valid JSON:",o.message);return}let m=process.env.OPENCRATER_TTY??"/dev/tty",d,$=-1;if(Y){let o=Pn();if(!o){_("Windows: could not start the console pump (powershell.exe)");return}d=o;}else {try{$=ot.openSync(m,"w");}catch(o){_("could not open output device",m,"-",o.message);return}d=Rn($);}_("painting via",Y?"Windows console pump":m,"format",r.format??"text"),process.env.OPENCRATER_FLOW!=="1"&&!Y&&We(d);let h=0;if(Y)h=Tn()??0;else try{let o=new pe__namespace.WriteStream($);o.columns&&(h=o.columns);}catch{}h||(h=80);let l=process.env.NO_COLOR===void 0,N=l&&Ln(process.env),I=(r.format??"text").toLowerCase(),O=I==="image"||I==="logo",x=I==="gif"||I==="video",D=x?72:56,F=Y?24:40;if(Y)process.stdout.rows&&(F=process.stdout.rows);else try{let o=new pe__namespace.WriteStream(ot.openSync(m,"w"));o.rows&&(F=o.rows);}catch{}let C=x?Math.max(8,Math.min(16,Math.floor((F-14)/2)*2)):vn,k=O?5:C,b=Math.min(D,h-4);if(b<24){d.close();return}let S=b-4,B=Math.max(1,h-b-1),y=2,T=Date.now(),X=l?`${w}[2m`:"",G=l?`${w}[38;5;214m`:"",L=l?`${w}[0m`:"",P=I,kt=_n(process.env),xt=process.env.OPENCRATER_FLOW==="1",Ye=process.env.OPENCRATER_MUTE==="1",st=r.apiOrigin??"https://api.opencrater.to",At=P==="video"?`${it("\u25B6")} `:P==="audio"?`${it("\u266A")} `:"",fe=false,de=o=>{if(r.impressionId)try{fetch(`${st}/v1/events/engagement`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({impressionId:r.impressionId,events:o}),signal:AbortSignal.timeout(1500)}).catch(()=>{});}catch{}},rt=null,H=null,Rt=0,pt=0,q=null,J="none",Ft=null,Bt=null,at=null,Gt=0,me=0,Z=null,E=0,R=0,Xe=(o,s)=>{let u=o/s,c=O?Math.min(10,Math.floor(S*.35)):S;E=Math.max(4,Math.min(c,Math.round(2*u*k))),R=Math.max(2,Math.min(k,Math.round(c/(2*u))||k)),O&&(R=Math.min(R,k));let f=Math.min(1,o/(E*2),s/(R*2));f<1&&(E=Math.max(8,Math.floor(E*f)),R=Math.max(2,Math.floor(R*f)));},ht=0,qe=()=>{let o=(r.label??"").trim(),s=(r.sponsorLabel??"").trim(),u=s.toLowerCase()===r.title.trim().toLowerCase(),c=o||(s&&!u?`Sponsored Blips \xB7 ${s}`:"Sponsored Blips"),f=[],g=gt??`${st}/x/${r.impressionId}`,v=r.impressionId||r.replay&&gt?Ut(g,it("\u2715")):"",z=ht>0&&!xt?Math.max(0,Math.ceil((ht-Date.now())/1e3)):0,W=z>0?`Auto dismiss in: ${z}s `:"",M=l?z<=5?`${w}[1;38;5;196m`:z<=12?`${w}[1;38;5;178m`:`${w}[1;38;5;35m`:"",A=mt(c,Math.max(8,S-2-W.length)),j=" ".repeat(Math.max(1,S-A.length-W.length-1));f.push(`${X}${A}${L}${j}${M}${W}${L}${G}${v}${L}`);let Q=l?kt!=="none"||(process.env.COLORTERM??"").includes("truecolor")?`${w}[1;38;2;255;184;48m`:`${w}[1;38;5;214m`:"",tt=O&&R>0?S-E-2:S;O||f.push(""),f.push(`${Q}${mt(r.title.toUpperCase(),tt)}${L}`);for(let V of xn(r.body,tt))f.push(V);if(J!=="none"){let V=J==="playing"?`${it("\u23F8")} pause`:J==="paused"?`${it("\u25B6")} play`:`${it("\u25B6")} replay`,ft=Math.max(6,Math.min(14,tt-V.length-5)),dt="\u2581\u2582\u2583\u2584\u2585\u2586\u2587\u2588",Tt="";for(let _t=0;_t<ft;_t++){let an=J==="playing"?Math.abs(Math.sin(pt*.9+_t*1.7)*.55+Math.sin(pt*.37+_t*.53)*.45):.05;Tt+=dt[Math.max(0,Math.min(7,Math.floor(an*8)))];}let sn=Ft?Ut(Ft,V):V;f.push(`${it("\u266A")} ${G}${Tt}${L} ${G}${sn}${L}`);}let Xt=process.env.TERM_PROGRAM??"",en=process.env.TERM??"",qt=kt!=="none"||["vscode","ghostty","iTerm.app","WezTerm","Hyper","WarpTerminal","rio","Tabby"].includes(Xt)||/kitty|wezterm|alacritty|foot|rio|ghostty/i.test(en)||process.env.WT_SESSION!==void 0||process.env.ConEmuANSI==="ON"||process.env.VTE_VERSION!==void 0,Kt=(V,ft,dt)=>l?`${w}[48;2;${ft[0]};${ft[1]};${ft[2]};38;2;${dt[0]};${dt[1]};${dt[2]};1m ${V} ${w}[0m`:`[ ${V} ]`,$t=[240,178,50],Zt=[12,12,10],Qt=r.impressionId?`${st}/k/${r.impressionId}`:r.url,yt=[];if(qt){let V=mt(r.cta&&r.cta.trim()!==""?r.cta:"visit sponsor",S-6-At.length);yt.push(Ut(r.url,Kt(`${At}${V} \u2192`,$t,Zt)));}else {let V=(r.cta&&r.cta.trim()!==""?r.cta.trim():"VISIT").toUpperCase();At.length+V.length+1+Qt.length<=S?yt.push(Kt(`${V} ${At}${Qt}`,$t,Zt)):yt.push(Kt(`${At}${Qt}`,$t,Zt));let ft=process.platform==="darwin"?"\u2318-click":"Ctrl-click",dt=mt(`${it("\u2191")} ${ft} the link to open`,S),Tt=l?`${w}[38;2;${$t[0]};${$t[1]};${$t[2]}m`:"";yt.push(`${Tt}${dt}${L}`);}let ke=Bt??(r.impressionId?`${st}/r/${r.impressionId}`:null),Ae=ke&&qt?` \xB7 ${Ut(ke,`${it("\u2691")} report`)}`:"",on=qt?"dismiss: click \u2715 or npx opencrater x \xB7 opt out: npx opencrater off":"dismiss: npx opencrater x \xB7 opt out: npx opencrater off";return yt.push(`${X}${mt(on,Math.max(0,S-Wt(Ae)))}${Ae}${L}`),{head:f,tail:yt}},he=0,ge=()=>{let{head:o,tail:s}=qe(),u=`${G}\u256D${"\u2500".repeat(b-2)}\u256E${L}`,c=`${G}\u2570${"\u2500".repeat(b-2)}\u256F${L}`,f=v=>{let z=" ".repeat(Math.max(0,S-Wt(v)));return `${G}\u2502${L} ${v}${z} ${G}\u2502${L}`},g;if(O&&R>0&&(H||rt)){let v=S-E-2,z=o[0]??"",W=o.slice(1),M=H?H[Rt%H.length]:null;g=[u,f(z)];let A=Math.max(W.length,R);for(let j=0;j<A;j++){let Q=W[j]??"",tt=" ".repeat(Math.max(0,v-Wt(Q))),Xt=j<R&&M?M[j]??" ".repeat(E):" ".repeat(E);g.push(`${G}\u2502${L} ${Q}${tt} ${Xt} ${G}\u2502${L}`);}}else {g=[u,...o.map(f)];let v=Math.max(0,Math.floor((S-E)/2)),z=Math.max(0,S-E-v);if(H&&R>0){let W=H[Rt%H.length];for(let M=0;M<R;M++){let A=W[M]??" ".repeat(E);g.push(`${G}\u2502${L} ${" ".repeat(v)}${A}${" ".repeat(z)} ${G}\u2502${L}`);}}else if(rt&&R>0)for(let W=0;W<R;W++)g.push(`${G}\u2502${L} ${" ".repeat(S)} ${G}\u2502${L}`);}return g.push(...s.map(f)),g.push(c),he=s.length+1,g},Ht=0,be=`${w}[?2026h`,$e=`${w}[?2026l`,ye=0,we=2e3,Ze=8,zt=()=>{let o=ge();Ht=Math.max(Ht,o.length),Gn({pid:process.pid,row:y,col:B,width:b,rows:o.length,startedAt:T,...r.impressionId?{impressionId:r.impressionId}:{},...gt?{dismissUrl:gt}:{}});let s=be+_e,u=Date.now()<ye,c=Math.max(1,y-(u?Ze:2));for(let f=c;f<y;f++)s+=`${w}[${f};${B}H${w}[0m${" ".repeat(b)}`;for(let f=0;f<o.length;f++)s+=`${w}[${y+f};${B}H${o[f]}`;if(rt&&pt%(u?1:3)===0&&R>0){let f=O?y+2:y+o.length-he-R,g=O?B+2+(S-E):B+2+Math.max(0,Math.floor((S-E)/2));s+=`${w}[${f};${g}H${rt}`;}return s+=De+$e,pt++,H&&H.length>1&&Rt++,s},ct=()=>{d.write(zt());},Se=()=>{let o=be+_e+`${w}[0m`,s=" ".repeat(b);for(let u=0;u<Ht;u++)o+=`${w}[${y+u};${B}H${s}`;o+=De+$e,d.write(o);},lt=null,Mt=null,Pt=null,Et=null,gt=null,K=o=>{if(_("cleanup wipe="+o+" elapsed="+(Date.now()-T)+"ms"),fe||(fe=true,de([{type:"dwell",ms:Date.now()-T}])),lt&&clearInterval(lt),Mt&&clearInterval(Mt),Pt&&clearInterval(Pt),o){let s=Number(process.env.OPENCRATER_HOST_PID??0);s>1&&!Y&&setTimeout(()=>{try{process.kill(s,"SIGWINCH");}catch{}},80);}if(Et){try{Et.close();}catch{}Et=null;}if(lt=null,Mt=null,Pt=null,q){try{q.kill("SIGKILL");}catch{}q=null;}if(Z){try{ot.rmSync(Z,{recursive:!0,force:!0});}catch{}Z=null;}if(Se(),Hn(),Y){let s=false,u=()=>{s||(s=true,process.exit(0));};d.closeAndWait().then(u),setTimeout(u,1500).unref?.();return}d.close(),process.exit(0);},Qe=()=>{lt&&clearInterval(lt);let s=E*R>1100?200:Ee;lt=setInterval(ct,H&&H.length>1?s:Lt);},Nt=()=>(Z||(Z=ot.mkdtempSync(U__namespace.join(Re.tmpdir(),"ocpaint-"))),Z),Jt=async()=>{if(r.mediaPixelUrl&&(I==="image"||I==="logo"))try{let M=await fetch(r.mediaPixelUrl,{signal:AbortSignal.timeout(2500)});if(M.ok){let A=Pe(new Uint8Array(await M.arrayBuffer()));if(A&&A.width>=4&&A.height>=2){let j=Buffer.alloc(A.width*A.height*3);for(let Q=0,tt=0;Q<A.rgba.length;Q+=4,tt+=3)j[tt]=A.rgba[Q],j[tt+1]=A.rgba[Q+1],j[tt+2]=A.rgba[Q+2];E=Math.floor(A.width/2),R=Math.floor(A.height/2),H=[ze(j,A.width,A.height,N)];return}}}catch{}if(!r.mediaUrl)return;let o=P==="video",s=await Ue(r.mediaUrl,o?On:Ne);if(!s||!(o?s.type.startsWith("video/"):s.type.startsWith("image/")))return;let c=U__namespace.join(Nt(),"in");try{ot.writeFileSync(c,s.data);}catch{return}let f=Je(c),g=et("ffmpeg")?Fn(c):null,v=g?.match(/crop=(\d+):(\d+)/),z=v?Number(v[1]):f?.w??16,W=v?Number(v[2]):f?.h??9;if(O&&et("ffmpeg")&&z>0&&W>0){let M=Math.min(z,W),A=Math.floor((z-M)/2),j=Math.floor((W-M)/2);g=`crop=${M}:${M}:${A}:${j}`,z=M,W=M,v=null;}if(Xe(z,W),!o&&kt==="iterm2"){rt=Le(s.data,{w:E,h:R}),pt=0;return}if(!o&&kt==="kitty"&&s.type==="image/png"){rt=Dn(s.data,{w:E,h:R}),pt=0;return}if(o&&kt==="iterm2"&&et("ffmpeg"))try{let M=U__namespace.join(Nt(),"out.gif");if(child_process.spawnSync("ffmpeg",["-y","-i",c,"-t","6","-vf","fps=8,scale=280:-1:flags=lanczos","-loop","0",M],{timeout:12e3}).status===0){let j=ot.readFileSync(M);if(j.length<=Ne){rt=Le(j,{w:E,h:R}),pt=0;return}}}catch{}if(et("ffmpeg"))try{let M=o||s.type==="image/gif",A=jn(c,Nt(),E,R,M,g)??Wn(c,E,R,M,N,g);A&&A.length>0&&(H=A,Rt=0,Qe());}catch{}},Yt=(o=0)=>{if(!at)return;let{kind:s,file:u,vol:c}=at,f=Math.max(0,o/1e3),g,v;s==="afplay"?(g="afplay",v=["-v",c.toFixed(2),u]):s==="ffplay"?(g="ffplay",v=["-nodisp","-autoexit","-volume",String(Math.round(c*100))],f>.2&&v.push("-ss",f.toFixed(2)),v.push(u)):s==="mpv"?(g="mpv",v=["--no-video","--really-quiet",`--volume=${Math.round(c*100)}`],f>.2&&v.push(`--start=${f.toFixed(2)}`),v.push(u)):s==="paplay"?(g="paplay",v=[`--volume=${Math.round(c*65536)}`,u]):(g="mpg123",v=["-q","-f",String(Math.round(32768*c))],f>.2&&v.push("-k",String(Math.round(o/26.12))),v.push(u));try{q=Y?child_process.spawn(g,v,{stdio:"ignore",detached:!0,windowsHide:!0}):child_process.spawn(g,v,{stdio:"ignore"}),J="playing",me=Date.now(),q.on("exit",()=>{J!=="paused"&&(J="ended",Gt=0);});}catch{J="none";}},tn=()=>{try{J==="playing"&&q?(J="paused",Gt+=Date.now()-me,q.kill("SIGKILL"),q=null,de([{type:"sound_muted"}])):J==="paused"?at?.canSeek&&Yt(Gt):J==="ended"&&Yt(0);}catch{}ct();},bt=async(o=r.mediaUrl)=>{if(!o||Ye)return;let s=U__namespace.join(Re.homedir(),".config","opencrater","audio-plays.json");try{let c=[];try{c=JSON.parse(ot.readFileSync(s,"utf8")),Array.isArray(c)||(c=[]);}catch{}let f=xe(Date.now(),c);if(ot.writeFileSync(s,JSON.stringify(f.next)),!f.play)return}catch{}let u=await Ue(o,kn);if(!(!u||!u.type.startsWith("audio/")))try{let c=u.type.includes("wav")?"wav":u.type.includes("ogg")?"ogg":"mp3",f=U__namespace.join(Nt(),`ad.${c}`);ot.writeFileSync(f,u.data);let g=Ce(new Date().getHours());if(et("ffplay"))at={kind:"ffplay",file:f,vol:g,canSeek:!0};else if(!Y&&et("mpv"))at={kind:"mpv",file:f,vol:g,canSeek:!0};else if(process.platform==="darwin"&&et("afplay"))at={kind:"afplay",file:f,vol:g,canSeek:!1};else if(!Y&&et("mpg123")&&c==="mp3")at={kind:"mpg123",file:f,vol:g,canSeek:!0};else if(!Y&&c!=="mp3"&&et("paplay"))at={kind:"paplay",file:f,vol:g,canSeek:!1};else return;Yt(),setTimeout(()=>{try{q?.kill("SIGKILL");}catch{}(J==="playing"||J==="paused")&&(J="ended");},Te).unref?.();}catch{}},ve=()=>{if(!r.impressionId||r.replay)return;let o=U__namespace.join(Re.homedir(),".config","opencrater","dismiss.signal"),s=Date.now();Mt=setInterval(()=>{try{let u=ot.readFileSync(o,"utf8"),c=JSON.parse(u),f=typeof c.at=="number"&&c.at>=s-5e3,g=!c.impressionId||c.impressionId===r.impressionId;if(f&&g){try{ot.unlinkSync(o);}catch{}Dt(r.campaignId),fetch(`${st}/x/${r.impressionId}`,{signal:AbortSignal.timeout(1500)}).catch(()=>{}),K(!0);return}}catch{}(async()=>{try{let u=await fetch(`${st}/v1/events/dismissed/${r.impressionId}`,{signal:AbortSignal.timeout(1200)});if(!u.ok)return;(await u.json()).dismissed&&(Dt(r.campaignId),K(!0));}catch{}})();},In);},Ie=()=>{if(xt)return;let o=U__namespace.join(Re.homedir(),".config","opencrater","activity.signal"),s=Date.now(),u=1500;Pt=setInterval(()=>{try{let c=ot.statSync(o).mtimeMs;c>s+u&&c>Date.now()-we&&(ye=c+we,ct());}catch{}},150);};if(Y){(async()=>{let o=d.size?await d.size:null;if(o&&o.cols>=24&&(h=o.cols,b=Math.min(D,h-4),S=b-4,B=Math.max(1,h-b-1),_("windows geometry from pump:","cols",h,"width",b,"col",B,"ownerPid",o.pid)),P==="image"||P==="logo"||P==="gif"||P==="video"?await Jt():P==="audio"&&await bt(),r.audioUrl&&P!=="audio"&&bt(r.audioUrl),n){let f=Math.min(Math.max(r.durationMs??se,3e3),12e4);if(ht=Date.now()+f,a)try{ot.unlinkSync(a);}catch{}We(d);let g=H,v=!!(g&&g.length>1);ct(),lt=setInterval(ct,v?Ee:Lt),Ie(),Oe(),ve(),process.on("SIGINT",()=>K(true)),process.on("SIGHUP",()=>K(true)),setTimeout(()=>K(true),f);return}let s=o?.pid??0;s>0&&Nn(r,s)&&(d.close(),process.exit(0)),_("no job-escape (ownerPid",s,") \u2014 bounded toast fallback");let u=Number(process.env.OPENCRATER_WIN_HOLD_MS),c=u>0?u:Math.min(r.durationMs??se,5e3);if(ht=Date.now()+c,d.write(zt()),await new Promise(f=>{let g=setInterval(()=>{if(Date.now()>=ht){clearInterval(g),f();return}d.write(zt());},Lt);}),Se(),Z)try{ot.rmSync(Z,{recursive:!0,force:!0});}catch{}await d.closeAndWait(),process.exit(0);})();return}if(xt){(async()=>{P==="image"||P==="logo"||P==="gif"||P==="video"?await Jt():P==="audio"&&await bt(),r.audioUrl&&P!=="audio"&&bt(r.audioUrl);let o=H;o&&o.length>1&&(H=[o[0]]);let s=ge(),u=" ".repeat(Math.max(0,h-b-2)),c=`\r
2
+ 'use strict';var child_process=require('child_process'),crypto=require('crypto'),Fe=require('http'),ot=require('fs'),Pe=require('os'),U=require('path'),zlib=require('zlib'),pe=require('tty');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var Fe__namespace=/*#__PURE__*/_interopNamespace(Fe);var ot__namespace=/*#__PURE__*/_interopNamespace(ot);var Pe__namespace=/*#__PURE__*/_interopNamespace(Pe);var U__namespace=/*#__PURE__*/_interopNamespace(U);var pe__namespace=/*#__PURE__*/_interopNamespace(pe);var te=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});function Ce(t){return t>=21||t<8?.2:.4}function xe(t,e){let r=e.filter(i=>Number.isFinite(i)&&t-i<6e5&&i<=t);return r.length>=2?{play:false,next:r}:{play:true,next:[...r,t]}}function ne(t=process.env){return U__namespace.join(Pe__namespace.homedir(),".config","opencrater")}var cn=600*1e3;function re(){return U__namespace.join(ne(),"blocked-ads.json")}function oe(){return U__namespace.join(ne(),"reported-ads.json")}function ln(t,e){let r={};for(let[i,a]of Object.entries(t))typeof a=="number"&&Number.isFinite(a)&&a>e&&(r[i]=a);return r}function un(t){try{let e=JSON.parse(ot__namespace.readFileSync(re(),"utf8"));return ln(e&&typeof e=="object"?e:{},t)}catch{return {}}}function Dt(t,e=Date.now()){if(t)try{let r=un(e);r[t]=e+cn,ot__namespace.mkdirSync(U__namespace.dirname(re()),{recursive:!0}),ot__namespace.writeFileSync(re(),JSON.stringify(r));}catch{}}function pn(){try{let t=JSON.parse(ot__namespace.readFileSync(oe(),"utf8"));return t&&typeof t=="object"?t:{}}catch{return {}}}function Re(t,e=Date.now()){if(t)try{let r=pn();r[t]=e,ot__namespace.mkdirSync(U__namespace.dirname(oe()),{recursive:!0}),ot__namespace.writeFileSync(oe(),JSON.stringify(r));}catch{}}var dn=[137,80,78,71,13,10,26,10];function Me(t){try{if(t.length<45)return null;for(let x=0;x<8;x++)if(t[x]!==dn[x])return null;let e=new DataView(t.buffer,t.byteOffset,t.byteLength),r=8,i=0,a=0,p=0,n=-1,m=0,d=[];for(;r+8<=t.length;){let x=e.getUint32(r),D=String.fromCharCode(t[r+4],t[r+5],t[r+6],t[r+7]),F=t.subarray(r+8,r+8+x);if(D==="IHDR")i=e.getUint32(r+8),a=e.getUint32(r+12),p=t[r+16],n=t[r+17],m=t[r+20];else if(D==="IDAT")d.push(F);else if(D==="IEND")break;r+=12+x;}if(p!==8||n!==2&&n!==6||m!==0||i===0||a===0||i>1024||a>1024)return null;let y=n===6?4:3,h=i*y,l=zlib.inflateSync(Buffer.concat(d.map(x=>Buffer.from(x))));if(l.length<(h+1)*a)return null;let N=new Uint8Array(i*a*4),I=new Uint8Array(h),O=new Uint8Array(h);for(let x=0;x<a;x++){let D=x*(h+1),F=l[D];for(let C=0;C<h;C++){let k=l[D+1+C],b=C>=y?O[C-y]:0,S=I[C],B=C>=y?I[C-y]:0,$;switch(F){case 0:$=k;break;case 1:$=k+b;break;case 2:$=k+S;break;case 3:$=k+(b+S>>1);break;case 4:{let T=b+S-B,X=Math.abs(T-b),Ot=Math.abs(T-S),G=Math.abs(T-B);$=k+(X<=Ot&&X<=G?b:Ot<=G?S:B);break}default:return null}O[C]=$&255;}for(let C=0;C<i;C++){let k=C*y,b=(x*i+C)*4;N[b]=O[k],N[b+1]=O[k+1],N[b+2]=O[k+2],N[b+3]=y===4?O[k+3]:255;}I.set(O);}return {width:i,height:a,rgba:N}}catch{return null}}var Lt=300,Ee=140,se=12e3,vn=9;var In=1500,Ne=3*1024*1024,On=12*1024*1024,kn=12*1024*1024,An=6e3,Te=25e3,Ge=64,w="\x1B",Cn="\x07",_e=`${w}7`,De=`${w}8`;function Ut(t,e){return `${w}]8;;${t}${w}\\${e}${w}]8;;${w}\\`}function jt(t){return t.replace(/\x1b\[[0-9;]*m/g,"").replace(/\x1b\]8;;[^\x1b\x07]*(?:\x1b\\|\x07)/g,"").replace(/[︎️]/g,"").length}function mt(t,e){return t.length<=e?t:`${t.slice(0,Math.max(0,e-1))}\u2026`}function xn(t,e){let r=t.split(/\s+/).filter(Boolean),i=[],a="";for(let p of r)if(a===""?a=mt(p,e):a.length+1+p.length<=e?a+=` ${p}`:(i.push(a),a=mt(p,e)),i.length>=3)break;return a&&i.length<4&&i.push(a),i}var Y=process.platform==="win32";function it(t){return Y?`${t}\uFE0E`:t}function Pn(t){let e=()=>{try{ot.closeSync(t);}catch{}};return {write:r=>{try{ot.writeSync(t,r);}catch{}},close:e,closeAndWait:async()=>e()}}var Rn=["$ErrorActionPreference='SilentlyContinue'","$dbg=$env:OPENCRATER_DEBUG -eq '1'","$log=Join-Path $env:USERPROFILE '.config\\opencrater\\pump.log'","function L($m){ if($dbg){ try{ Add-Content -LiteralPath $log -Value ((Get-Date).ToString('o')+' '+$m) }catch{} } }","L 'pump: process started (loading types)'","Add-Type -TypeDefinition @'","using System;using System.Runtime.InteropServices;","namespace OCP{","public struct COORD{public short X;public short Y;}","public struct SR{public short L;public short T;public short R;public short B;}","public struct CSBI{public COORD sz;public COORD cur;public ushort attr;public SR win;public COORD max;}","public static class N{",'[DllImport("kernel32.dll",SetLastError=true,CharSet=CharSet.Unicode)]public static extern IntPtr CreateFileW(string n,uint a,uint s,IntPtr sec,uint d,uint f,IntPtr t);','[DllImport("kernel32.dll")]public static extern bool GetConsoleMode(IntPtr h,out uint m);','[DllImport("kernel32.dll")]public static extern bool SetConsoleMode(IntPtr h,uint m);','[DllImport("kernel32.dll")]public static extern bool SetConsoleOutputCP(uint cp);','[DllImport("kernel32.dll")]public static extern bool WriteFile(IntPtr h,byte[] b,uint n,out uint w,IntPtr o);','[DllImport("kernel32.dll")]public static extern bool FreeConsole();','[DllImport("kernel32.dll")]public static extern bool AttachConsole(uint p);','[DllImport("kernel32.dll")]public static extern IntPtr GetStdHandle(int n);','[DllImport("kernel32.dll")]public static extern bool GetConsoleScreenBufferInfo(IntPtr h,out CSBI i);',"}}","'@","L 'pump: types loaded'","$o=[uint32]'0xC0000000'","function OpenConout(){ return [OCP.N]::CreateFileW('CONOUT$',$o,3,[IntPtr]::Zero,3,0,[IntPtr]::Zero) }","function Csbi($hh){ $z=New-Object OCP.CSBI; if($hh -ne [IntPtr]-1 -and [OCP.N]::GetConsoleScreenBufferInfo($hh,[ref]$z)){ return $z } else { return $null } }","$self=Csbi (OpenConout); if($self){ L ('pump: SELF bufH='+$self.sz.Y+' winRows='+($self.win.B-$self.win.T+1)+' curY='+$self.cur.Y) }","$how='self'; $winId=0","$given=[int]($env:OPENCRATER_WIN_CONSOLE_PID)","if($given -gt 0){ [void][OCP.N]::FreeConsole(); if([OCP.N]::AttachConsole([uint32]$given)){ $winId=$given; $how='given' } L ('pump: given console pid '+$given+' attached='+($winId -eq $given)) }","if($winId -eq 0){"," $par=@{}; try{ Get-CimInstance Win32_Process -ErrorAction Stop | ForEach-Object { $par[[int]$_.ProcessId]=[int]$_.ParentProcessId } }catch{ L 'pump: WMI walk failed' }"," $chain=New-Object System.Collections.ArrayList; $p=$PID; for($i=0;$i -lt 12;$i++){ if(-not $par.ContainsKey($p)){break}; $pp=$par[$p]; if($pp -le 4){break}; $nm='?'; try{ $nm=(Get-Process -Id $pp -ErrorAction Stop).ProcessName }catch{}; [void]$chain.Add(@{id=$pp;name=$nm}); $p=$pp }"," L ('pump: ancestors = ' + (($chain | ForEach-Object { $_.name+'('+$_.id+')' }) -join ' -> '))"," foreach($c in $chain){ [void][OCP.N]::FreeConsole(); if([OCP.N]::AttachConsole([uint32]$c.id)){ $b=Csbi (OpenConout); if($b){ L ('pump: '+$c.name+'('+$c.id+') bufH='+$b.sz.Y+' winRows='+($b.win.B-$b.win.T+1)+' curY='+$b.cur.Y); if($b.sz.Y -lt 1000 -and $c.name -notmatch '^(WindowsTerminal|OpenConsole|conhost|explorer|Code|devenv|wininit|services|svchost|WmiPrvSE)$'){ $winId=$c.id; $how=('attach:'+$c.name) } } } }","}","[void][OCP.N]::FreeConsole()","if($winId -ne 0){ [void][OCP.N]::AttachConsole([uint32]$winId) } else { [void][OCP.N]::AttachConsole(0xFFFFFFFF); $how='attach-parent' }","$h=OpenConout","if($h -eq [IntPtr]-1){ L 'pump: NO CONSOLE after attach walk'; exit 1 }","$fb=Csbi $h; if($fb){ L ('pump: FINAL via '+$how+' bufH='+$fb.sz.Y+' winRows='+($fb.win.B-$fb.win.T+1)+' curY='+$fb.cur.Y) } else { L ('pump: FINAL via '+$how) }","if($fb){ $cols=$fb.win.R-$fb.win.L+1; $rows=$fb.win.B-$fb.win.T+1; [Console]::Out.WriteLine('OCWIN '+$winId+' '+$cols+' '+$rows); [Console]::Out.Flush() }","$m=[uint32]0;[void][OCP.N]::GetConsoleMode($h,[ref]$m);[void][OCP.N]::SetConsoleMode($h,($m -bor 4));[void][OCP.N]::SetConsoleOutputCP(65001)","$in=[Console]::OpenStandardInput();$buf=New-Object byte[] 65536;$tot=0;$frames=0","while(($n=$in.Read($buf,0,$buf.Length)) -gt 0){$w=[uint32]0;[void][OCP.N]::WriteFile($h,$buf,$n,[ref]$w,[IntPtr]::Zero);$tot+=$w;$frames++}","L ('pump: stdin closed, streamed '+$tot+' bytes in '+$frames+' chunks')"].join(`
3
+ `);function He(){return `${process.env.SystemRoot||process.env.windir||"C:\\Windows"}\\System32\\WindowsPowerShell\\v1.0\\powershell.exe`}function Mn(){try{let t=Buffer.from(Rn,"utf16le").toString("base64"),e=He(),r="ignore";if(process.env.OPENCRATER_DEBUG==="1")try{r=ot.openSync(U__namespace.join(Pe.homedir(),".config","opencrater","pump-err.log"),"a");}catch{}_("spawning pump:",e);let i=child_process.spawn(e,["-NoProfile","-NonInteractive","-EncodedCommand",t],{stdio:["pipe","pipe",r],windowsHide:!0});i.on("error",m=>_("pump spawn error:",e,"-",m.message)),i.on("exit",m=>_("pump process exited code",m,"pid",i.pid));let a=i.stdin;if(!a)return _("pump: no stdin pipe"),null;a.on("error",()=>{});let p=!1;return i.on("exit",()=>{p=!0;}),{size:new Promise(m=>{let d="",y=!1,h=N=>{y||(y=!0,m(N));},l=i.stdout;if(!l)return h(null);l.setEncoding("utf8"),l.on("data",N=>{d+=N;let I=d.match(/OCWIN\s+(\d+)\s+(\d+)\s+(\d+)/);I&&(_("pump reported console pid",I[1],"size",I[2]+"x"+I[3]),h({pid:Number(I[1]),cols:Number(I[2]),rows:Number(I[3])}));}),l.on("error",()=>h(null)),l.on("end",()=>h(null)),setTimeout(()=>h(null),2500);}),write:m=>{try{a.write(m);}catch{}},close:()=>{try{a.end();}catch{}},closeAndWait:()=>new Promise(m=>{if(p)return m();let d=!1,y=()=>{d||(d=!0,m());};i.on("exit",y),setTimeout(y,5e3);try{a.end();}catch{y();}})}}catch(t){return _("pump: spawn threw",t.message),null}}function En(t){try{let e=t.replace(/'/g,"''"),r=`$ErrorActionPreference='Stop';try{$r=$null;try{$su=([wmiclass]'Win32_ProcessStartup').CreateInstance();$su.CreateFlags=[uint32]8;$r=([wmiclass]'Win32_Process').Create('${e}',$null,$su)}catch{};if($r -eq $null -or $r.ReturnValue -ne 0){$r=([wmiclass]'Win32_Process').Create('${e}')};if($r.ReturnValue -eq 0){[Console]::Out.Write('OCPID '+$r.ProcessId)}else{[Console]::Out.Write('OCERR rv='+$r.ReturnValue)}}catch{[Console]::Out.Write('OCERR '+$_.Exception.Message)}`,i=Buffer.from(r,"utf16le").toString("base64"),a=child_process.spawnSync(He(),["-NoProfile","-NonInteractive","-EncodedCommand",i],{timeout:5e3,encoding:"utf8"}),p=(a.stdout??"").match(/OCPID\s+(\d+)/);return p?Number(p[1]):(_("wmi spawn failed:",(a.stdout??"").trim(),"|",(a.stderr??"").trim()),0)}catch(e){return _("wmi spawn threw",e.message),0}}function Nn(t,e){try{let r=U__namespace.join(Pe.homedir(),".config","opencrater");ot.mkdirSync(r,{recursive:!0});let i=U__namespace.join(r,`paint-${process.pid}-${Date.now()}.json`);ot.writeFileSync(i,JSON.stringify({...t,_env:process.env}),"utf8");let a=m=>`"${m}"`,p=[a(process.execPath),a(__filename),"--persist","--payload-file",a(i),"--console-pid",String(e)];Wt&&p.push("--debug");let n=En(p.join(" "));return _("escape: wmi persistent painter pid",n),n>0}catch(r){return _("escape failed",r.message),false}}function lr(t){return !!(t.WT_SESSION||t.TERM_PROGRAM||t.ConEmuANSI==="ON"||t.ANSICON)}function Tn(){try{let t=child_process.spawnSync("mode",["con"],{timeout:1500,encoding:"utf8"}).stdout;if(!t)return null;let r=[...t.matchAll(/:\s*(\d+)/g)].map(i=>Number(i[1]))[1];return r&&r>0?r:null}catch{return null}}function _n(t){let e=t.TERM_PROGRAM??"",r=t.TERM??"";return t.TMUX?"none":e==="iTerm.app"||t.LC_TERMINAL==="iTerm2"||e==="WezTerm"?"iterm2":r==="xterm-kitty"||t.KITTY_WINDOW_ID?"kitty":"none"}function Le(t,e){let r=t.toString("base64");return `${w}]1337;File=inline=1;size=${t.length};width=${e.w};height=${e.h};preserveAspectRatio=1:${r}${Cn}`}function Dn(t,e){let r=t.toString("base64"),i=[];for(let p=0;p<r.length;p+=4096)i.push(r.slice(p,p+4096));let a="";for(let p=0;p<i.length;p++){let n=p===0,m=p===i.length-1,d=n?`a=T,f=100,c=${e.w},r=${e.h},m=${m?0:1}`:`m=${m?0:1}`;a+=`${w}_G${d};${i[p]}${w}\\`;}return a}function Ln(t){let e=(t.COLORTERM??"").toLowerCase();if(e.includes("truecolor")||e.includes("24bit"))return true;let r=t.TERM_PROGRAM??"";return ["iTerm.app","WezTerm","vscode","ghostty","Apple_Terminal"].includes(r)}function ae(t,e,r){if(Math.abs(t-e)<12&&Math.abs(e-r)<12&&Math.abs(t-r)<12)return t<8?16:t>248?231:232+Math.round((t-8)/247*23);let i=a=>Math.round(a/255*5);return 16+36*i(t)+6*i(e)+i(r)}var Un=[" ","\u2598","\u259D","\u2580","\u2596","\u258C","\u259E","\u259B","\u2597","\u259A","\u2590","\u259C","\u2584","\u2599","\u259F","\u2588"];function ze(t,e,r,i){let a=[],p=(m,d)=>{let y=(d*e+m)*3;return [t[y],t[y+1],t[y+2]]},n=(m,d)=>{let y=m[0]-d[0],h=m[1]-d[1],l=m[2]-d[2];return y*y+h*h+l*l};for(let m=0;m+1<r;m+=2){let d="",y="";for(let h=0;h+1<e;h+=2){let l=[p(h,m),p(h+1,m),p(h,m+1),p(h+1,m+1)],N=0,I=1,O=-1;for(let $=0;$<4;$++)for(let T=$+1;T<4;T++){let X=n(l[$],l[T]);X>O&&(O=X,N=$,I=T);}let x=0,D=[0,0,0],F=[0,0,0],C=0,k=0;for(let $=0;$<4;$++)n(l[$],l[N])<=n(l[$],l[I])?(x|=1<<$,D[0]+=l[$][0],D[1]+=l[$][1],D[2]+=l[$][2],C++):(F[0]+=l[$][0],F[1]+=l[$][1],F[2]+=l[$][2],k++);if(O<1e3){let $=Ot=>Ot&-8,T=[$(Math.round((l[0][0]+l[1][0]+l[2][0]+l[3][0])/4)),$(Math.round((l[0][1]+l[1][1]+l[2][1]+l[3][1])/4)),$(Math.round((l[0][2]+l[1][2]+l[2][2]+l[3][2])/4))],X=i?`${w}[48;2;${T[0]};${T[1]};${T[2]}m`:`${w}[48;5;${ae(T[0],T[1],T[2])}m`;X!==y&&(d+=X,y=X),d+=" ";continue}let b=C?[Math.round(D[0]/C),Math.round(D[1]/C),Math.round(D[2]/C)]:[0,0,0],S=k?[Math.round(F[0]/k),Math.round(F[1]/k),Math.round(F[2]/k)]:b,B=i?`${w}[38;2;${b[0]};${b[1]};${b[2]};48;2;${S[0]};${S[1]};${S[2]}m`:`${w}[38;5;${ae(b[0],b[1],b[2])};48;5;${ae(S[0],S[1],S[2])}m`;B!==y&&(d+=B,y=B),d+=Un[x];}d+=`${w}[0m`,a.push(d);}return a}function jn(t,e,r,i,a,p){let n=e*2,m=r*2,d=`${p?`${p},`:""}scale=${n}:${m}:flags=lanczos+accurate_rnd`,y=["-y","-i",t];i?y.push("-t","6","-vf",`fps=7,${d}`):y.push("-frames:v","1","-vf",d),y.push("-f","rawvideo","-pix_fmt","rgb24","-");let h=child_process.spawnSync("ffmpeg",y,{timeout:12e3,maxBuffer:64*1024*1024});if(h.status!==0||!h.stdout||h.stdout.length===0)return null;let l=n*m*3,N=Math.min(Math.floor(h.stdout.length/l),Ge);if(N===0)return null;let I=[];for(let O=0;O<N;O++)I.push(ze(h.stdout.subarray(O*l,(O+1)*l),n,m,a));return I}function Wn(t,e,r,i,a,p){if(!et("chafa"))return null;let n=U__namespace.join(e,"fr_%03d.png"),m=["-y","-i",t],d=[];if(a?(m.push("-t","6"),d.push("fps=5")):m.push("-frames:v","1"),p&&d.push(p),d.length>0&&m.push("-vf",d.join(",")),m.push(n),child_process.spawnSync("ffmpeg",m,{timeout:12e3}).status!==0)return null;let h=[];for(let l=1;l<=Ge;l++){let N=U__namespace.join(e,`fr_${String(l).padStart(3,"0")}.png`),I;try{I=child_process.spawnSync("chafa",a?["-f","symbols","-s",`${r}x${i}`,"--stretch","--symbols","vhalf","--colors","full",N]:["-f","symbols","-s",`${r}x${i}`,"--stretch","--colors","full",N],{timeout:5e3,maxBuffer:8*1024*1024,encoding:"utf8"});}catch{break}if(I.status!==0||!I.stdout)break;let x=I.stdout.replace(/\x1b\[\?25[lh]/g,"").split(`
4
+ `).filter(k=>k.length>0);if(x.length===0)break;let D=" ".repeat(r),F=Math.floor((i-x.length)/2),C=[];for(let k=0;k<i;k++){let b=x[k-F];if(b===void 0)C.push(D);else {let S=" ".repeat(Math.max(0,r-jt(b)));C.push(b+S);}}h.push(C);}return h.length>0?h:null}function Je(t){try{let e=child_process.spawnSync("ffprobe",["-v","quiet","-select_streams","v:0","-show_entries","stream=width,height","-of","csv=p=0",t],{timeout:5e3,encoding:"utf8"});if(e.status!==0||!e.stdout)return null;let r=e.stdout.trim().match(/^(\d+),(\d+)/);if(!r)return null;let i=Number(r[1]),a=Number(r[2]);return i>0&&a>0?{w:i,h:a}:null}catch{return null}}function Fn(t){try{let r=(child_process.spawnSync("ffmpeg",["-t","2","-i",t,"-vf","cropdetect=24:2:1","-f","null","-"],{timeout:8e3,encoding:"utf8"}).stderr??"").match(/crop=(\d+):(\d+):(\d+):(\d+)/g);if(!r||r.length===0)return null;let i=r[r.length-1],a=i.match(/crop=(\d+):(\d+):(\d+):(\d+)/),p=Number(a[1]),n=Number(a[2]);if(p<8||n<8)return null;let m=Je(t);if(m){let d=p*n/(m.w*m.h);if(d<.55||d>.92)return null}return i}catch{return null}}function et(t){try{return Y?child_process.spawnSync("where",[t],{timeout:2e3}).status===0:child_process.spawnSync("sh",["-c",'command -v -- "$1" >/dev/null 2>&1',"sh",t],{timeout:2e3}).status===0}catch{return false}}async function Ue(t,e){try{let r=await fetch(t,{signal:AbortSignal.timeout(An)});if(!r.ok)return null;let i=(r.headers.get("content-type")??"").split(";")[0].trim().toLowerCase();if(Number(r.headers.get("content-length")??"0")>e)return null;let p=Buffer.from(await r.arrayBuffer());return p.length===0||p.length>e?null:{data:p,type:i}}catch{return null}}var It=U__namespace.join(Pe.homedir(),".config","opencrater","painter.lock"),Bn=6e3;function je(t){try{if(!ot.existsSync(It))return;let e=JSON.parse(ot.readFileSync(It,"utf8"));if(e.pid&&e.pid!==process.pid){if(e.startedAt&&Date.now()-e.startedAt<Bn){let i=!0;try{process.kill(e.pid,0);}catch{i=!1;}i&&(t.close(),process.exit(0));}let r=!0;try{process.kill(e.pid,"SIGTERM");}catch{r=!1;}try{Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,250);}catch{}if(e.rows>0&&e.width>0){let i="\x1B7\x1B[0m",a=" ".repeat(e.width);for(let p=0;p<e.rows;p++)i+=`\x1B[${e.row+p};${e.col}H${a}`;i+="\x1B8",t.write(i);}}}catch{}}var We="";function Gn(t){let e=JSON.stringify(t);if(e!==We){We=e;try{ot.mkdirSync(U__namespace.dirname(It),{recursive:!0}),ot.writeFileSync(It,JSON.stringify(t));}catch{}}}function Hn(){try{JSON.parse(ot.readFileSync(It,"utf8")).pid===process.pid&&ot.unlinkSync(It);}catch{}}var Wt=process.env.OPENCRATER_DEBUG==="1";function _(...t){try{if(!Wt)return;let e=`[opencrater-paint] ${t.map(r=>String(r)).join(" ")}`;console.error(e);try{ot.appendFileSync(U__namespace.join(Pe.homedir(),".config","opencrater","paint.log"),`${new Date().toISOString()} ${e}
5
+ `);}catch{}}catch{}}function zn(){let t=process.argv.slice(2),e=o=>{let s=t.indexOf(o);return s>=0?t[s+1]:void 0};t.includes("--debug")&&(Wt=true,process.env.OPENCRATER_DEBUG="1");let r=t.includes("--persist")||process.env.OPENCRATER_WIN_PERSIST==="1",i=Number(e("--console-pid")??"0");i>0&&(process.env.OPENCRATER_WIN_CONSOLE_PID=String(i));let a=e("--payload-file"),p=process.env.OPENCRATER_PAINT;if(a)try{p=ot.readFileSync(a,"utf8");}catch(o){_("payload-file unreadable:",o.message);}if(!p){_("no paint payload (env or --payload-file) \u2014 nothing to draw");return}let n;try{let o=JSON.parse(p);if(o._env&&typeof o._env=="object"){let s=process.env.OPENCRATER_WIN_CONSOLE_PID;Object.assign(process.env,o._env),s&&(process.env.OPENCRATER_WIN_CONSOLE_PID=s),process.env.OPENCRATER_DEBUG==="1"&&(Wt=!0),delete o._env;}n=o;}catch(o){_("paint payload is not valid JSON:",o.message);return}let m=process.env.OPENCRATER_TTY??"/dev/tty",d,y=-1;if(Y){let o=Mn();if(!o){_("Windows: could not start the console pump (powershell.exe)");return}d=o;}else {try{y=ot.openSync(m,"w");}catch(o){_("could not open output device",m,"-",o.message);return}d=Pn(y);}_("painting via",Y?"Windows console pump":m,"format",n.format??"text"),process.env.OPENCRATER_FLOW!=="1"&&!Y&&je(d);let h=0;if(Y)h=Tn()??0;else try{let o=new pe__namespace.WriteStream(y);o.columns&&(h=o.columns);}catch{}h||(h=80);let l=process.env.NO_COLOR===void 0,N=l&&Ln(process.env),I=(n.format??"text").toLowerCase(),O=I==="image"||I==="logo",x=I==="gif"||I==="video",D=x?72:56,F=Y?24:40;if(Y)process.stdout.rows&&(F=process.stdout.rows);else try{let o=new pe__namespace.WriteStream(ot.openSync(m,"w"));o.rows&&(F=o.rows);}catch{}let C=x?Math.max(8,Math.min(16,Math.floor((F-14)/2)*2)):vn,k=O?5:C,b=Math.min(D,h-4);if(b<24){d.close();return}let S=b-4,B=Math.max(1,h-b-1),$=2,T=Date.now(),X=l?`${w}[2m`:"",G=l?`${w}[38;5;214m`:"",L=l?`${w}[0m`:"",M=I,kt=_n(process.env),xt=process.env.OPENCRATER_FLOW==="1",Ye=process.env.OPENCRATER_MUTE==="1",st=n.apiOrigin??"https://api.opencrater.to",At=M==="video"?`${it("\u25B6")} `:M==="audio"?`${it("\u266A")} `:"",fe=false,de=o=>{if(n.impressionId)try{fetch(`${st}/v1/events/engagement`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({impressionId:n.impressionId,events:o}),signal:AbortSignal.timeout(1500)}).catch(()=>{});}catch{}};if(n.reportImpressionUrl&&n.impressionId&&!n.replay)try{fetch(n.reportImpressionUrl,{method:"POST",headers:{"content-type":"application/json",...n.reportImpressionAuth?{authorization:`Bearer ${n.reportImpressionAuth}`}:{}},body:JSON.stringify({impressionId:n.impressionId}),signal:AbortSignal.timeout(8e3)}).catch(()=>{});}catch{}let rt=null,H=null,Pt=0,pt=0,q=null,J="none",Ft=null,Bt=null,at=null,Gt=0,me=0,Z=null,E=0,P=0,Xe=(o,s)=>{let u=o/s,c=O?Math.min(10,Math.floor(S*.35)):S;E=Math.max(4,Math.min(c,Math.round(2*u*k))),P=Math.max(2,Math.min(k,Math.round(c/(2*u))||k)),O&&(P=Math.min(P,k));let f=Math.min(1,o/(E*2),s/(P*2));f<1&&(E=Math.max(8,Math.floor(E*f)),P=Math.max(2,Math.floor(P*f)));},ht=0,qe=()=>{let o=(n.label??"").trim(),s=(n.sponsorLabel??"").trim(),u=s.toLowerCase()===n.title.trim().toLowerCase(),c=o||(s&&!u?`Sponsored Blips \xB7 ${s}`:"Sponsored Blips"),f=[],g=gt??`${st}/x/${n.impressionId}`,v=n.impressionId||n.replay&&gt?Ut(g,it("\u2715")):"",z=ht>0&&!xt?Math.max(0,Math.ceil((ht-Date.now())/1e3)):0,j=z>0?`Auto dismiss in: ${z}s `:"",R=l?z<=5?`${w}[1;38;5;196m`:z<=12?`${w}[1;38;5;178m`:`${w}[1;38;5;35m`:"",A=mt(c,Math.max(8,S-2-j.length)),W=" ".repeat(Math.max(1,S-A.length-j.length-1));f.push(`${X}${A}${L}${W}${R}${j}${L}${G}${v}${L}`);let Q=l?kt!=="none"||(process.env.COLORTERM??"").includes("truecolor")?`${w}[1;38;2;255;184;48m`:`${w}[1;38;5;214m`:"",tt=O&&P>0?S-E-2:S;O||f.push(""),f.push(`${Q}${mt(n.title.toUpperCase(),tt)}${L}`);for(let V of xn(n.body,tt))f.push(V);if(J!=="none"){let V=J==="playing"?`${it("\u23F8")} pause`:J==="paused"?`${it("\u25B6")} play`:`${it("\u25B6")} replay`,ft=Math.max(6,Math.min(14,tt-V.length-5)),dt="\u2581\u2582\u2583\u2584\u2585\u2586\u2587\u2588",Tt="";for(let _t=0;_t<ft;_t++){let an=J==="playing"?Math.abs(Math.sin(pt*.9+_t*1.7)*.55+Math.sin(pt*.37+_t*.53)*.45):.05;Tt+=dt[Math.max(0,Math.min(7,Math.floor(an*8)))];}let sn=Ft?Ut(Ft,V):V;f.push(`${it("\u266A")} ${G}${Tt}${L} ${G}${sn}${L}`);}let Xt=process.env.TERM_PROGRAM??"",en=process.env.TERM??"",qt=kt!=="none"||["vscode","ghostty","iTerm.app","WezTerm","Hyper","WarpTerminal","rio","Tabby"].includes(Xt)||/kitty|wezterm|alacritty|foot|rio|ghostty/i.test(en)||process.env.WT_SESSION!==void 0||process.env.ConEmuANSI==="ON"||process.env.VTE_VERSION!==void 0,Kt=(V,ft,dt)=>l?`${w}[48;2;${ft[0]};${ft[1]};${ft[2]};38;2;${dt[0]};${dt[1]};${dt[2]};1m ${V} ${w}[0m`:`[ ${V} ]`,yt=[240,178,50],Zt=[12,12,10],Qt=n.impressionId?`${st}/k/${n.impressionId}`:n.url,$t=[];if(qt){let V=mt(n.cta&&n.cta.trim()!==""?n.cta:"visit sponsor",S-6-At.length);$t.push(Ut(n.url,Kt(`${At}${V} \u2192`,yt,Zt)));}else {let V=(n.cta&&n.cta.trim()!==""?n.cta.trim():"VISIT").toUpperCase();At.length+V.length+1+Qt.length<=S?$t.push(Kt(`${V} ${At}${Qt}`,yt,Zt)):$t.push(Kt(`${At}${Qt}`,yt,Zt));let ft=process.platform==="darwin"?"\u2318-click":"Ctrl-click",dt=mt(`${it("\u2191")} ${ft} the link to open`,S),Tt=l?`${w}[38;2;${yt[0]};${yt[1]};${yt[2]}m`:"";$t.push(`${Tt}${dt}${L}`);}let ke=Bt??(n.impressionId?`${st}/r/${n.impressionId}`:null),Ae=ke&&qt?` \xB7 ${Ut(ke,`${it("\u2691")} report`)}`:"",on=qt?"dismiss: click \u2715 or npx opencrater x \xB7 opt out: npx opencrater off":"dismiss: npx opencrater x \xB7 opt out: npx opencrater off";return $t.push(`${X}${mt(on,Math.max(0,S-jt(Ae)))}${Ae}${L}`),{head:f,tail:$t}},he=0,ge=()=>{let{head:o,tail:s}=qe(),u=`${G}\u256D${"\u2500".repeat(b-2)}\u256E${L}`,c=`${G}\u2570${"\u2500".repeat(b-2)}\u256F${L}`,f=v=>{let z=" ".repeat(Math.max(0,S-jt(v)));return `${G}\u2502${L} ${v}${z} ${G}\u2502${L}`},g;if(O&&P>0&&(H||rt)){let v=S-E-2,z=o[0]??"",j=o.slice(1),R=H?H[Pt%H.length]:null;g=[u,f(z)];let A=Math.max(j.length,P);for(let W=0;W<A;W++){let Q=j[W]??"",tt=" ".repeat(Math.max(0,v-jt(Q))),Xt=W<P&&R?R[W]??" ".repeat(E):" ".repeat(E);g.push(`${G}\u2502${L} ${Q}${tt} ${Xt} ${G}\u2502${L}`);}}else {g=[u,...o.map(f)];let v=Math.max(0,Math.floor((S-E)/2)),z=Math.max(0,S-E-v);if(H&&P>0){let j=H[Pt%H.length];for(let R=0;R<P;R++){let A=j[R]??" ".repeat(E);g.push(`${G}\u2502${L} ${" ".repeat(v)}${A}${" ".repeat(z)} ${G}\u2502${L}`);}}else if(rt&&P>0)for(let j=0;j<P;j++)g.push(`${G}\u2502${L} ${" ".repeat(S)} ${G}\u2502${L}`);}return g.push(...s.map(f)),g.push(c),he=s.length+1,g},Ht=0,be=`${w}[?2026h`,ye=`${w}[?2026l`,$e=0,we=2e3,Ze=8,zt=()=>{let o=ge();Ht=Math.max(Ht,o.length),Gn({pid:process.pid,row:$,col:B,width:b,rows:o.length,startedAt:T,...n.impressionId?{impressionId:n.impressionId}:{},...gt?{dismissUrl:gt}:{}});let s=be+_e,u=Date.now()<$e,c=Math.max(1,$-(u?Ze:2));for(let f=c;f<$;f++)s+=`${w}[${f};${B}H${w}[0m${" ".repeat(b)}`;for(let f=0;f<o.length;f++)s+=`${w}[${$+f};${B}H${o[f]}`;if(rt&&pt%(u?1:3)===0&&P>0){let f=O?$+2:$+o.length-he-P,g=O?B+2+(S-E):B+2+Math.max(0,Math.floor((S-E)/2));s+=`${w}[${f};${g}H${rt}`;}return s+=De+ye,pt++,H&&H.length>1&&Pt++,s},ct=()=>{d.write(zt());},Se=()=>{let o=be+_e+`${w}[0m`,s=" ".repeat(b);for(let u=0;u<Ht;u++)o+=`${w}[${$+u};${B}H${s}`;o+=De+ye,d.write(o);},lt=null,Rt=null,Mt=null,Et=null,gt=null,K=o=>{if(_("cleanup wipe="+o+" elapsed="+(Date.now()-T)+"ms"),fe||(fe=true,de([{type:"dwell",ms:Date.now()-T}])),lt&&clearInterval(lt),Rt&&clearInterval(Rt),Mt&&clearInterval(Mt),o){let s=Number(process.env.OPENCRATER_HOST_PID??0);s>1&&!Y&&setTimeout(()=>{try{process.kill(s,"SIGWINCH");}catch{}},80);}if(Et){try{Et.close();}catch{}Et=null;}if(lt=null,Rt=null,Mt=null,q){try{q.kill("SIGKILL");}catch{}q=null;}if(Z){try{ot.rmSync(Z,{recursive:!0,force:!0});}catch{}Z=null;}if(Se(),Hn(),Y){let s=false,u=()=>{s||(s=true,process.exit(0));};d.closeAndWait().then(u),setTimeout(u,1500).unref?.();return}d.close(),process.exit(0);},Qe=()=>{lt&&clearInterval(lt);let s=E*P>1100?200:Ee;lt=setInterval(ct,H&&H.length>1?s:Lt);},Nt=()=>(Z||(Z=ot.mkdtempSync(U__namespace.join(Pe.tmpdir(),"ocpaint-"))),Z),Jt=async()=>{if(n.mediaPixelUrl&&(I==="image"||I==="logo"))try{let R=await fetch(n.mediaPixelUrl,{signal:AbortSignal.timeout(2500)});if(R.ok){let A=Me(new Uint8Array(await R.arrayBuffer()));if(A&&A.width>=4&&A.height>=2){let W=Buffer.alloc(A.width*A.height*3);for(let Q=0,tt=0;Q<A.rgba.length;Q+=4,tt+=3)W[tt]=A.rgba[Q],W[tt+1]=A.rgba[Q+1],W[tt+2]=A.rgba[Q+2];E=Math.floor(A.width/2),P=Math.floor(A.height/2),H=[ze(W,A.width,A.height,N)];return}}}catch{}if(!n.mediaUrl)return;let o=M==="video",s=await Ue(n.mediaUrl,o?On:Ne);if(!s||!(o?s.type.startsWith("video/"):s.type.startsWith("image/")))return;let c=U__namespace.join(Nt(),"in");try{ot.writeFileSync(c,s.data);}catch{return}let f=Je(c),g=et("ffmpeg")?Fn(c):null,v=g?.match(/crop=(\d+):(\d+)/),z=v?Number(v[1]):f?.w??16,j=v?Number(v[2]):f?.h??9;if(O&&et("ffmpeg")&&z>0&&j>0){let R=Math.min(z,j),A=Math.floor((z-R)/2),W=Math.floor((j-R)/2);g=`crop=${R}:${R}:${A}:${W}`,z=R,j=R,v=null;}if(Xe(z,j),!o&&kt==="iterm2"){rt=Le(s.data,{w:E,h:P}),pt=0;return}if(!o&&kt==="kitty"&&s.type==="image/png"){rt=Dn(s.data,{w:E,h:P}),pt=0;return}if(o&&kt==="iterm2"&&et("ffmpeg"))try{let R=U__namespace.join(Nt(),"out.gif");if(child_process.spawnSync("ffmpeg",["-y","-i",c,"-t","6","-vf","fps=8,scale=280:-1:flags=lanczos","-loop","0",R],{timeout:12e3}).status===0){let W=ot.readFileSync(R);if(W.length<=Ne){rt=Le(W,{w:E,h:P}),pt=0;return}}}catch{}if(et("ffmpeg"))try{let R=o||s.type==="image/gif",A=Wn(c,Nt(),E,P,R,g)??jn(c,E,P,R,N,g);A&&A.length>0&&(H=A,Pt=0,Qe());}catch{}},Yt=(o=0)=>{if(!at)return;let{kind:s,file:u,vol:c}=at,f=Math.max(0,o/1e3),g,v;s==="afplay"?(g="afplay",v=["-v",c.toFixed(2),u]):s==="ffplay"?(g="ffplay",v=["-nodisp","-autoexit","-volume",String(Math.round(c*100))],f>.2&&v.push("-ss",f.toFixed(2)),v.push(u)):s==="mpv"?(g="mpv",v=["--no-video","--really-quiet",`--volume=${Math.round(c*100)}`],f>.2&&v.push(`--start=${f.toFixed(2)}`),v.push(u)):s==="paplay"?(g="paplay",v=[`--volume=${Math.round(c*65536)}`,u]):(g="mpg123",v=["-q","-f",String(Math.round(32768*c))],f>.2&&v.push("-k",String(Math.round(o/26.12))),v.push(u));try{q=Y?child_process.spawn(g,v,{stdio:"ignore",detached:!0,windowsHide:!0}):child_process.spawn(g,v,{stdio:"ignore"}),J="playing",me=Date.now(),q.on("exit",()=>{J!=="paused"&&(J="ended",Gt=0);});}catch{J="none";}},tn=()=>{try{J==="playing"&&q?(J="paused",Gt+=Date.now()-me,q.kill("SIGKILL"),q=null,de([{type:"sound_muted"}])):J==="paused"?at?.canSeek&&Yt(Gt):J==="ended"&&Yt(0);}catch{}ct();},bt=async(o=n.mediaUrl)=>{if(!o||Ye)return;let s=U__namespace.join(Pe.homedir(),".config","opencrater","audio-plays.json");try{let c=[];try{c=JSON.parse(ot.readFileSync(s,"utf8")),Array.isArray(c)||(c=[]);}catch{}let f=xe(Date.now(),c);if(ot.writeFileSync(s,JSON.stringify(f.next)),!f.play)return}catch{}let u=await Ue(o,kn);if(!(!u||!u.type.startsWith("audio/")))try{let c=u.type.includes("wav")?"wav":u.type.includes("ogg")?"ogg":"mp3",f=U__namespace.join(Nt(),`ad.${c}`);ot.writeFileSync(f,u.data);let g=Ce(new Date().getHours());if(et("ffplay"))at={kind:"ffplay",file:f,vol:g,canSeek:!0};else if(!Y&&et("mpv"))at={kind:"mpv",file:f,vol:g,canSeek:!0};else if(process.platform==="darwin"&&et("afplay"))at={kind:"afplay",file:f,vol:g,canSeek:!1};else if(!Y&&et("mpg123")&&c==="mp3")at={kind:"mpg123",file:f,vol:g,canSeek:!0};else if(!Y&&c!=="mp3"&&et("paplay"))at={kind:"paplay",file:f,vol:g,canSeek:!1};else return;Yt(),setTimeout(()=>{try{q?.kill("SIGKILL");}catch{}(J==="playing"||J==="paused")&&(J="ended");},Te).unref?.();}catch{}},ve=()=>{if(!n.impressionId||n.replay)return;let o=U__namespace.join(Pe.homedir(),".config","opencrater","dismiss.signal"),s=Date.now();Rt=setInterval(()=>{try{let u=ot.readFileSync(o,"utf8"),c=JSON.parse(u),f=typeof c.at=="number"&&c.at>=s-5e3,g=!c.impressionId||c.impressionId===n.impressionId;if(f&&g){try{ot.unlinkSync(o);}catch{}Dt(n.campaignId),fetch(`${st}/x/${n.impressionId}`,{signal:AbortSignal.timeout(1500)}).catch(()=>{}),K(!0);return}}catch{}(async()=>{try{let u=await fetch(`${st}/v1/events/dismissed/${n.impressionId}`,{signal:AbortSignal.timeout(1200)});if(!u.ok)return;(await u.json()).dismissed&&(Dt(n.campaignId),K(!0));}catch{}})();},In);},Ie=()=>{if(xt)return;let o=U__namespace.join(Pe.homedir(),".config","opencrater","activity.signal"),s=Date.now(),u=1500;Mt=setInterval(()=>{try{let c=ot.statSync(o).mtimeMs;c>s+u&&c>Date.now()-we&&($e=c+we,ct());}catch{}},150);};if(Y){(async()=>{let o=d.size?await d.size:null;if(o&&o.cols>=24&&(h=o.cols,b=Math.min(D,h-4),S=b-4,B=Math.max(1,h-b-1),_("windows geometry from pump:","cols",h,"width",b,"col",B,"ownerPid",o.pid)),M==="image"||M==="logo"||M==="gif"||M==="video"?await Jt():M==="audio"&&await bt(),n.audioUrl&&M!=="audio"&&bt(n.audioUrl),r){let f=Math.min(Math.max(n.durationMs??se,3e3),12e4);if(ht=Date.now()+f,a)try{ot.unlinkSync(a);}catch{}je(d);let g=H,v=!!(g&&g.length>1);ct(),lt=setInterval(ct,v?Ee:Lt),Ie(),Oe(),ve(),process.on("SIGINT",()=>K(true)),process.on("SIGHUP",()=>K(true)),setTimeout(()=>K(true),f);return}let s=o?.pid??0;s>0&&Nn(n,s)&&(d.close(),process.exit(0)),_("no job-escape (ownerPid",s,") \u2014 bounded toast fallback");let u=Number(process.env.OPENCRATER_WIN_HOLD_MS),c=u>0?u:Math.min(n.durationMs??se,5e3);if(ht=Date.now()+c,d.write(zt()),await new Promise(f=>{let g=setInterval(()=>{if(Date.now()>=ht){clearInterval(g),f();return}d.write(zt());},Lt);}),Se(),Z)try{ot.rmSync(Z,{recursive:!0,force:!0});}catch{}await d.closeAndWait(),process.exit(0);})();return}if(xt){(async()=>{M==="image"||M==="logo"||M==="gif"||M==="video"?await Jt():M==="audio"&&await bt(),n.audioUrl&&M!=="audio"&&bt(n.audioUrl);let o=H;o&&o.length>1&&(H=[o[0]]);let s=ge(),u=" ".repeat(Math.max(0,h-b-2)),c=`\r
6
6
  `;for(let g of s)c+=`${u}${g}\r
7
- `;rt&&R>0&&(c+=`${u}${rt}\r
8
- `),d.write(c);let f=q?Te+1e3:250;setTimeout(()=>{if(q)try{q.kill("SIGKILL");}catch{}if(Z)try{ot.rmSync(Z,{recursive:!0,force:!0});}catch{}d.close(),process.exit(0);},f);})();return}ct(),lt=setInterval(ct,Lt);function Oe(){if(!(!r.impressionId&&!r.replay||xt))try{let o=crypto.randomBytes(8).toString("hex"),s=Fe__namespace.createServer((u,c)=>{if(!u.url||!u.url.includes(o)){c.writeHead(404).end();return}if(u.url.startsWith("/p/")){Me(r.campaignId),r.impressionId?(c.writeHead(302,{location:`${st}/r/${r.impressionId}`}),c.end()):(c.writeHead(200,{"content-type":"text/html; charset=utf-8"}),c.end(`<!doctype html><meta charset=utf-8><title>Ad reported</title><body style="font-family:ui-monospace,monospace;background:#0c0c0a;color:#e9e6da;display:grid;place-items:center;height:100vh;margin:0"><p>\u2691 Reported \u2014 you won't see this Blip again. This tab closes itself.</p><script>setTimeout(function(){window.close()},600);</script>`)),setTimeout(()=>K(!0),150);return}if(u.url.startsWith("/a/")){tn(),c.writeHead(200,{"content-type":"text/html; charset=utf-8"}),c.end('<!doctype html><meta charset=utf-8><title>Audio</title><body style="font-family:ui-monospace,monospace;background:#0c0c0a;color:#e9e6da;display:grid;place-items:center;height:100vh;margin:0"><p>\u266A toggled \u2014 this tab closes itself.</p><script>setTimeout(function(){window.close()},300);</script>');return}c.writeHead(200,{"content-type":"text/html; charset=utf-8"}),c.end('<!doctype html><meta charset=utf-8><title>Ad dismissed</title><body style="font-family:ui-monospace,monospace;background:#0c0c0a;color:#e9e6da;display:grid;place-items:center;height:100vh;margin:0"><p>\u2715 Ad dismissed \u2014 this tab closes itself.</p><script>setTimeout(function(){window.close()},400);</script>'),Dt(r.campaignId),!r.replay&&r.impressionId&&fetch(`${st}/x/${r.impressionId}`,{signal:AbortSignal.timeout(2e3)}).catch(()=>{}),setTimeout(()=>K(!0),150);});s.unref(),s.listen(0,"127.0.0.1",()=>{let u=s.address();u&&typeof u=="object"&&(gt=`http://127.0.0.1:${u.port}/x/${o}`,Ft=`http://127.0.0.1:${u.port}/a/${o}`,Bt=`http://127.0.0.1:${u.port}/p/${o}`,Et=s,ct());}),s.on("error",()=>{gt=null,Bt=null;});}catch{}}try{ot.writeFileSync(U__namespace.join(Re.homedir(),".config","opencrater","last-ad.json"),JSON.stringify({payload:r,at:Date.now()}));}catch{}Oe(),ve(),Ie(),P==="image"||P==="logo"||P==="gif"||P==="video"?Jt():P==="audio"&&bt(),r.audioUrl&&P!=="audio"&&bt(r.audioUrl);let Vt=r.durationMs??(P==="video"?18e3:P==="audio"?16e3:se);ht=Date.now()+Vt,setTimeout(()=>K(true),Vt),process.on("SIGTERM",()=>K(true)),process.on("SIGINT",()=>K(true)),process.on("SIGHUP",()=>K(true)),setTimeout(()=>K(true),Vt+5e3).unref?.();}typeof te<"u"&&typeof module<"u"&&te.main===module&&zn();
7
+ `;rt&&P>0&&(c+=`${u}${rt}\r
8
+ `),d.write(c);let f=q?Te+1e3:250;setTimeout(()=>{if(q)try{q.kill("SIGKILL");}catch{}if(Z)try{ot.rmSync(Z,{recursive:!0,force:!0});}catch{}d.close(),process.exit(0);},f);})();return}ct(),lt=setInterval(ct,Lt);function Oe(){if(!(!n.impressionId&&!n.replay||xt))try{let o=crypto.randomBytes(8).toString("hex"),s=Fe__namespace.createServer((u,c)=>{if(!u.url||!u.url.includes(o)){c.writeHead(404).end();return}if(u.url.startsWith("/p/")){Re(n.campaignId),n.impressionId?(c.writeHead(302,{location:`${st}/r/${n.impressionId}`}),c.end()):(c.writeHead(200,{"content-type":"text/html; charset=utf-8"}),c.end(`<!doctype html><meta charset=utf-8><title>Ad reported</title><body style="font-family:ui-monospace,monospace;background:#0c0c0a;color:#e9e6da;display:grid;place-items:center;height:100vh;margin:0"><p>\u2691 Reported \u2014 you won't see this Blip again. This tab closes itself.</p><script>setTimeout(function(){window.close()},600);</script>`)),setTimeout(()=>K(!0),150);return}if(u.url.startsWith("/a/")){tn(),c.writeHead(200,{"content-type":"text/html; charset=utf-8"}),c.end('<!doctype html><meta charset=utf-8><title>Audio</title><body style="font-family:ui-monospace,monospace;background:#0c0c0a;color:#e9e6da;display:grid;place-items:center;height:100vh;margin:0"><p>\u266A toggled \u2014 this tab closes itself.</p><script>setTimeout(function(){window.close()},300);</script>');return}c.writeHead(200,{"content-type":"text/html; charset=utf-8"}),c.end('<!doctype html><meta charset=utf-8><title>Ad dismissed</title><body style="font-family:ui-monospace,monospace;background:#0c0c0a;color:#e9e6da;display:grid;place-items:center;height:100vh;margin:0"><p>\u2715 Ad dismissed \u2014 this tab closes itself.</p><script>setTimeout(function(){window.close()},400);</script>'),Dt(n.campaignId),!n.replay&&n.impressionId&&fetch(`${st}/x/${n.impressionId}`,{signal:AbortSignal.timeout(2e3)}).catch(()=>{}),setTimeout(()=>K(!0),150);});s.unref(),s.listen(0,"127.0.0.1",()=>{let u=s.address();u&&typeof u=="object"&&(gt=`http://127.0.0.1:${u.port}/x/${o}`,Ft=`http://127.0.0.1:${u.port}/a/${o}`,Bt=`http://127.0.0.1:${u.port}/p/${o}`,Et=s,ct());}),s.on("error",()=>{gt=null,Bt=null;});}catch{}}try{ot.writeFileSync(U__namespace.join(Pe.homedir(),".config","opencrater","last-ad.json"),JSON.stringify({payload:n,at:Date.now()}));}catch{}Oe(),ve(),Ie(),M==="image"||M==="logo"||M==="gif"||M==="video"?Jt():M==="audio"&&bt(),n.audioUrl&&M!=="audio"&&bt(n.audioUrl);let Vt=n.durationMs??(M==="video"?18e3:M==="audio"?16e3:se);ht=Date.now()+Vt,setTimeout(()=>K(true),Vt),process.on("SIGTERM",()=>K(true)),process.on("SIGINT",()=>K(true)),process.on("SIGHUP",()=>K(true)),setTimeout(()=>K(true),Vt+5e3).unref?.();}typeof te<"u"&&typeof module<"u"&&te.main===module&&zn();
9
9
  exports.windowsVtOk=lr;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencrater",
3
- "version": "1.1.41",
3
+ "version": "1.1.42",
4
4
  "description": "OpenCrater — sponsor cards for AI coding terminals (Claude Code, Codex, Gemini CLI, Copilot CLI). One command, auto-wires every host, opt out anytime.",
5
5
  "keywords": [
6
6
  "opencrater",